Release OpenProject 11.1.1

release/11.2 v11.1.1
Markus Kahl 4 years ago
commit 2da0a166a5
  1. 4
      Gemfile
  2. 10
      Gemfile.lock
  3. 4
      app/helpers/users_helper.rb
  4. 2
      config/locales/crowdin/js-de.yml
  5. 2
      config/locales/crowdin/js-el.yml
  6. 6
      config/locales/crowdin/js-lt.yml
  7. 2
      config/locales/crowdin/js-ru.yml
  8. 8
      config/locales/crowdin/js-tr.yml
  9. 158
      config/locales/crowdin/js-vi.yml
  10. 2
      config/locales/crowdin/tr.yml
  11. 566
      config/locales/crowdin/vi.yml
  12. 9
      docker/prod/Dockerfile
  13. 4
      docker/prod/migration_status
  14. 12
      docker/prod/seeder
  15. 2
      docker/prod/setup/postinstall-common.sh
  16. 2
      docker/prod/web
  17. 3
      docker/prod/worker
  18. BIN
      docs/cloud-edition-guide/GDPR/DPA.png
  19. 24
      docs/cloud-edition-guide/GDPR/README.md
  20. 7
      docs/cloud-edition-guide/README.md
  21. 12
      docs/installation-and-operations/installation/docker/README.md
  22. BIN
      docs/release-notes/11-1-0/DPA-OpenProject.png
  23. 8
      docs/release-notes/11-1-0/README.md
  24. 27
      docs/release-notes/11-1-1/README.md
  25. 12
      docs/release-notes/README.md
  26. 23
      docs/system-admin-guide/users-permissions/users/README.md
  27. 2
      docs/user-guide/projects/README.md
  28. 14
      frontend/src/app/modules/common/op-date-picker/datepicker.ts
  29. 2
      lib/open_project/version.rb
  30. 12
      modules/avatars/config/locales/crowdin/vi.yml
  31. 72
      modules/backlogs/config/locales/crowdin/vi.yml
  32. 2
      modules/bim/config/locales/crowdin/js-vi.yml
  33. 2
      modules/bim/config/locales/crowdin/vi.yml
  34. 2
      modules/boards/config/locales/crowdin/js-el.yml
  35. 24
      modules/boards/config/locales/crowdin/js-vi.yml
  36. 10
      modules/boards/config/locales/crowdin/vi.yml
  37. 2
      modules/budgets/app/views/budgets/_show.html.erb
  38. 2
      modules/budgets/config/locales/crowdin/js-vi.yml
  39. 32
      modules/budgets/config/locales/crowdin/vi.yml
  40. 6
      modules/costs/config/locales/crowdin/js-vi.yml
  41. 44
      modules/costs/config/locales/crowdin/vi.yml
  42. 2
      modules/dashboards/config/locales/crowdin/js-vi.yml
  43. 20
      modules/job_status/config/locales/crowdin/js-vi.yml
  44. 2
      modules/ldap_groups/config/locales/crowdin/vi.yml
  45. 4
      modules/meeting/config/locales/crowdin/de.yml
  46. 2
      modules/meeting/config/locales/crowdin/vi.yml
  47. 2
      modules/reporting/config/locales/crowdin/vi.yml
  48. 2
      modules/two_factor_authentication/config/locales/crowdin/vi.yml
  49. 4
      modules/webhooks/config/locales/crowdin/vi.yml

@ -169,7 +169,7 @@ gem 'unicorn'
gem 'puma', '~> 5.1.0' # used for development and optionally for production
gem 'nokogiri', '~> 1.10.8'
gem 'nokogiri', '~> 1.11.0'
gem 'carrierwave', '~> 1.3.1'
gem 'carrierwave_direct', '~> 2.1.0'
@ -310,7 +310,7 @@ gem 'openproject-translations',
git: 'https://github.com/opf/openproject-translations.git',
branch: 'dev'
gem 'newrelic_rpm'
gem 'newrelic_rpm', require: ENV.has_key?('NEW_RELIC_LICENSE_KEY')
# Load Gemfile.local, Gemfile.plugins, plugins', and custom Gemfiles
gemfiles = Dir.glob File.expand_path('../{Gemfile.plugins,Gemfile.modules,Gemfile.local,lib/plugins/*/Gemfile}',

@ -574,7 +574,7 @@ GEM
mimemagic (0.3.5)
mini_magick (4.11.0)
mini_mime (1.0.2)
mini_portile2 (2.4.0)
mini_portile2 (2.5.0)
minisyntax (0.2.5)
minitest (5.14.2)
mixlib-shellout (2.1.0)
@ -591,8 +591,9 @@ GEM
newrelic_rpm (6.14.0)
nio4r (2.5.4)
no_proxy_fix (0.1.2)
nokogiri (1.10.10)
mini_portile2 (~> 2.4.0)
nokogiri (1.11.0)
mini_portile2 (~> 2.5.0)
racc (~> 1.4)
nokogumbo (2.0.4)
nokogiri (~> 1.8, >= 1.8.4)
octokit (4.19.0)
@ -670,6 +671,7 @@ GEM
multi_json
puma (5.1.0)
nio4r (~> 2.0)
racc (1.5.2)
rack (2.2.3)
rack-accept (0.4.5)
rack (>= 0.4)
@ -984,7 +986,7 @@ DEPENDENCIES
my_page!
net-ldap (~> 0.17.0)
newrelic_rpm
nokogiri (~> 1.10.8)
nokogiri (~> 1.11.0)
oj (~> 3.10.2)
okcomputer (~> 1.18.1)
omniauth!

@ -137,4 +137,8 @@ module UsersHelper
def user_mail_notification_options(user)
user.valid_notification_options.map { |o| [I18n.t(o.last), o.first] }
end
def user_name(user)
user ? user.name : I18n.t('user.deleted')
end
end

@ -362,7 +362,7 @@ de:
label_next: "Weiter"
label_no_color: "Keine Farbe"
label_no_data: "Es sind keine Daten vorhanden"
label_no_due_date: "no finish date"
label_no_due_date: "kein Endtermin"
label_no_start_date: "kein Startdatum"
label_no_value: "Kein Wert"
label_none: "keine"

@ -362,7 +362,7 @@ el:
label_next: "Επόμενο"
label_no_color: "Χωρίς χρώμα"
label_no_data: "Δεν υπάρχουν δεδομένα για εμφάνιση"
label_no_due_date: "no finish date"
label_no_due_date: "ημερομηνία μη ολοκλήρωσης"
label_no_start_date: "δεν υπάρχει ημερομηνία έναρξης"
label_no_value: "Καμία τιμή"
label_none: "κανένα"

@ -273,11 +273,11 @@ lt:
standard:
learn_about_link: https://www.openproject.org/openproject-11-1-release
current_new_feature_html: >
The release contains various new features and improvements: <br> <ul class="%{list_styling_class}"> <li><b>Improved stylings</b> of the WYSIWYG editor.</li> <li>Direct display of <b>user name for @notifications</b> while editing.</li> <li>Extended authentication profile with an <b>OpenID Connect provider.</b></li> <li>Display project <b>milestones aggregated</b> in single row in Gantt chart.</li> <li><b>Collapse all button for groups</b> in the work packages list.</li> <li><b>Optimization for printing,</b> e.g. wiki pages, via the browser print function.</li> </ul>
Ši laida turi įvairias naujas galimybes ir patobulinimus: <br> <ul class="%{list_styling_class}"> <li>WYSIWYG redaktoriuje <b>pagerintas stilius</b>.</li> <li>Redaguojant iš karto rodomas <b>vartotojo vardas @kreipiniuose</b>.</li> <li>Autentifikavimo profilis praplėstas <b>OpenID Connect tiekėju.</b></li> <li>Gantt diagramoje projekto <b>sujungti etapai</b> rodomi vienoje eilutėje.</li> <li><b>Suskleisti viską mygtukas grupėms</b> darbo paketų sąraše.</li> <li><b>Spausdinimo optimizavimai</b> pvz., wiki puslapiams, naudojant naršyklės spausdinimo funkciją.</li> </ul>
bim:
learn_about_link: https://www.openproject.org/openproject-11-0-release
current_new_feature_html: >
The release contains various new features and improvements: <br> <ul class="%{list_styling_class}"> <li><b>Improved stylings</b> of the WYSIWYG editor.</li> <li>Direct display of <b>user name for @notifications</b> while editing.</li> <li>Extended authentication profile with an <b>OpenID Connect provider.</b></li> <li>Display project <b>milestones aggregated</b> in single row in Gantt chart.</li> <li><b>Collapse all button for groups</b> in the work packages list.</li> <li><b>Optimization for printing,</b> e.g. wiki pages, via the browser print function.</li> </ul>
Ši laida turi įvairias naujas galimybes ir patobulinimus: <br> <ul class="%{list_styling_class}"> <li>WYSIWYG redaktoriuje <b>pagerintas stilius</b>.</li> <li>Redaguojant iš karto rodomas <b>vartotojo vardas @kreipiniuose</b>.</li> <li>Autentifikavimo profilis praplėstas <b>OpenID Connect tiekėju.</b></li> <li>Gantt diagramoje projekto <b>sujungti etapai</b> rodomi vienoje eilutėje.</li> <li><b>Suskleisti viską mygtukas grupėms</b> darbo paketų sąraše.</li> <li><b>Spausdinimo optimizavimai</b> pvz., wiki puslapiams, naudojant naršyklės spausdinimo funkciją.</li> </ul>
label_activate: "Aktyvuoti"
label_add_column_after: "Pridėti stulpelį po"
label_add_column_before: "Pridėti stulpelį prieš"
@ -363,7 +363,7 @@ lt:
label_next: "Kitas"
label_no_color: "Be spalvų"
label_no_data: "Nėra rodytinų duomenų"
label_no_due_date: "no finish date"
label_no_due_date: "be pabaigos datos"
label_no_start_date: "nėra pradžios datos"
label_no_value: "Nenurodytas dydis"
label_none: "joks"

@ -362,7 +362,7 @@ ru:
label_next: "Следующие"
label_no_color: "Нет цвета"
label_no_data: "Нет данных для отображения"
label_no_due_date: "no finish date"
label_no_due_date: "нет даты окончания"
label_no_start_date: "без даты начала"
label_no_value: "Значение отсутствует"
label_none: "Ничего"

@ -271,13 +271,13 @@ tr:
text_new_features: "Yeni özellikler ve ürün güncellemeleri hakkında bilgi edinin."
learn_about: "Yeni özellikler hakkında daha fazla bilgi edinin"
standard:
learn_about_link: https://www.openproject.org/openproject-11-1-release
learn_about_link: https://www.openproject.org/openproject-11-0-release
current_new_feature_html: >
The release contains various new features and improvements: <br> <ul class="%{list_styling_class}"> <li><b>Improved stylings</b> of the WYSIWYG editor.</li> <li>Direct display of <b>user name for @notifications</b> while editing.</li> <li>Extended authentication profile with an <b>OpenID Connect provider.</b></li> <li>Display project <b>milestones aggregated</b> in single row in Gantt chart.</li> <li><b>Collapse all button for groups</b> in the work packages list.</li> <li><b>Optimization for printing,</b> e.g. wiki pages, via the browser print function.</li> </ul>
Sürüm, çeşitli yeni özellikler ve iyileştirmeler içerir: <br> <ul class="%{list_styling_class}"> <li><b> WYSIWYG düzenleyicisinin </b> iyileştirilmiş stilleri </b>. </li> <li> Doğrudan görüntüleme <b> Düzenleme sırasında @ bildirimler için kullanıcı adı </b>. </li> <li> <b> OpenID Connect sağlayıcısı ile genişletilmiş kimlik doğrulama profili. </b> </li> <li> Projeyi görüntüle <b> kilometre taşları Gantt şemasında tek satırda toplandı </b>. </li> <li> Çalışma paketleri listesinde <b> gruplar için tüm düğmesi </b>. </li> <li> <b> Optimizasyon yazdırma, </b> ör. wiki sayfaları, tarayıcı yazdırma işlevi aracılığıyla. </li> </ul>
bim:
learn_about_link: https://www.openproject.org/openproject-11-0-release
current_new_feature_html: >
The release contains various new features and improvements: <br> <ul class="%{list_styling_class}"> <li><b>Improved stylings</b> of the WYSIWYG editor.</li> <li>Direct display of <b>user name for @notifications</b> while editing.</li> <li>Extended authentication profile with an <b>OpenID Connect provider.</b></li> <li>Display project <b>milestones aggregated</b> in single row in Gantt chart.</li> <li><b>Collapse all button for groups</b> in the work packages list.</li> <li><b>Optimization for printing,</b> e.g. wiki pages, via the browser print function.</li> </ul>
Sürüm, çeşitli yeni özellikler ve iyileştirmeler içerir: <br> <ul class="%{list_styling_class}"> <li><b> WYSIWYG düzenleyicisinin </b> iyileştirilmiş stilleri </b>. </li> <li> Doğrudan görüntüleme <b> Düzenleme sırasında @ bildirimler için kullanıcı adı </b>. </li> <li> <b> OpenID Connect sağlayıcısı ile genişletilmiş kimlik doğrulama profili. </b> </li> <li> Projeyi görüntüle <b> kilometre taşları Gantt şemasında tek satırda toplandı </b>. </li> <li> Çalışma paketleri listesinde <b> gruplar için tüm düğmesi </b>. </li> <li> <b> Optimizasyon yazdırma, </b> ör. wiki sayfaları, tarayıcı yazdırma işlevi aracılığıyla. </li> </ul>
label_activate: "Etkinleştir"
label_add_column_after: "Sonrasına sütun ekle"
label_add_column_before: "Öncesine sütun ekle"
@ -363,7 +363,7 @@ tr:
label_next: "Sonraki"
label_no_color: "Renk yok"
label_no_data: "Görüntülenecek veri yok"
label_no_due_date: "no finish date"
label_no_due_date: "bitiş tarihi yok"
label_no_start_date: "başlangıç tarihi yok"
label_no_value: "Değer yok"
label_none: "hiçbiri"

@ -35,18 +35,18 @@ vi:
active: "Kích hoạt %{label} %{name}"
close_popup_title: "Đóng"
close_filter_title: "Đóng bộ lọc"
close_form_title: "Close form"
close_form_title: "Đóng biểu mẫu"
button_add_watcher: "Thêm người theo dõi"
button_add: "Thêm"
button_back: "Quay lại"
button_back_to_list_view: "Quay lại danh sách"
button_cancel: "Hủy"
button_close: "Đóng"
button_change_project: "Change project"
button_change_project: "Đổi dự án"
button_check_all: "Đánh dấu tất cả"
button_configure-form: "Configure form"
button_configure-form: "Cấu hình biểu mẫu"
button_confirm: "Xác nhận"
button_continue: "Continue"
button_continue: "Tiếp tục"
button_copy: "Sao chép"
button_custom-fields: "Tùy chỉnh mục"
button_delete: "Xoá"
@ -65,47 +65,47 @@ vi:
button_open_details: "Mở thông tin chi tiết xem"
button_close_details: "Đóng xem chi tiết"
button_open_fullscreen: "Mở chế độ toàn màn hình"
button_show_cards: "Show card view"
button_show_list: "Show list view"
button_show_cards: "Hiển thị duới dạng thẻ"
button_show_list: "Hiển thị dưới dạng danh sách"
button_quote: "Trích dẫn"
button_save: "Lưu"
button_settings: "Settings"
button_settings: "Cài đặt"
button_uncheck_all: "Bỏ chọn tất cả"
button_update: "Cập Nhật"
button_export-pdf: "Tải PDF"
button_export-atom: "Tải về Atom"
calendar:
title: 'Lịch'
too_many: 'There are %{count} work packages in total, but only %{max} can be shown.'
too_many: 'Tổng cộng có %{count} công việc, nhưng chỉ %{max} có thể được hiển thị.'
card:
add_new: 'Add new card'
add_new: 'Thêm thẻ mới'
highlighting:
inline: 'Highlight inline:'
entire_card_by: 'Entire card by'
remove_from_list: 'Remove card from list'
inline: 'Đánh dấu nội tuyến:'
entire_card_by: 'Toàn bộ thẻ của'
remove_from_list: 'Xóa thẻ khỏi danh sách'
caption_rate_history: "Rate history"
clipboard:
browser_error: "Trình duyệt không hỗ trợ copy vào clipboard. Vui lòng copy văn bản đã chọn theo cách thủ công."
copied_successful: "Sao chép thành công vào clipboard!"
chart:
type: 'Chart type'
axis_criteria: 'Axis criteria'
modal_title: 'Work package graph configuration'
type: 'Kiểu đồ thị'
axis_criteria: 'Tiêu chí trục'
modal_title: 'Bảng cấu hình công việc'
types:
line: 'Line'
horizontal_bar: 'Horizontal bar'
bar: 'Bar'
pie: 'Pie'
doughnut: 'Doughnut'
radar: 'Radar'
polar_area: 'Polar area'
line: 'Dòng'
horizontal_bar: 'Cột ngang'
bar: 'Thanh'
pie: 'Biểu đồ tròn'
doughnut: 'Bánh vòng'
radar: 'Ra đa'
polar_area: 'Vùng cực'
tabs:
graph_settings: 'Tổng quan'
dataset: 'Dataset %{number}'
errors:
could_not_load: 'The data to display the graph could not be loaded. The necessary permissions may be lacking.'
description_available_columns: "Cột có sẵn"
description_current_position: "You are here: "
description_current_position: "Bạn đang ở đây:"
description_select_work_package: "Chọn work package #%{id}"
description_selected_columns: "Các cột được lựa chọn"
description_subwork_package: "Con của work package #%{id}"
@ -163,13 +163,13 @@ vi:
admin:
type_form:
custom_field: 'Tùy chỉnh mục'
inactive: 'Inactive'
inactive: 'Không hoạt động'
drag_to_activate: "Drag fields from here to activate them"
add_group: "Thêm 1 nhóm thuộc tính"
add_table: "Add table of related work packages"
edit_query: 'Edit query'
edit_query: 'Chỉnh sửa truy vấn'
new_group: 'Nhóm mới'
reset_to_defaults: 'Reset to defaults'
reset_to_defaults: 'Đặt lại về mặc định'
enterprise:
trial:
confirmation: "Confirmation of email address"
@ -184,10 +184,10 @@ vi:
label_last_name: "Họ"
label_email: "Thư điện tử"
label_domain: "Domain"
label_subscriber: "Subscriber"
label_subscriber: "Người đăng ký"
label_maximum_users: "Số người dùng hoạt động tối đa"
label_starts_at: "Starts at"
label_expires_at: "Expires at"
label_expires_at: "Hết hạn lúc"
receive_newsletter: I want to receive the OpenProject <a target="_blank" href="%{link}">newsletter</a>.
taken_domain: There can only be one active trial per domain.
taken_email: Each user can only create one trial.
@ -213,7 +213,7 @@ vi:
installation_text: "Experienced software engineers guide you through the complete installation and setup process in your own infrastructure."
premium_features: "Premium features"
premium_features_text: "Agile boards, custom theme and logo, graphs, intelligent workflows with custom actions, full text search for work package attachments and multi-select custom fields."
professional_support: "Professional support"
professional_support: "Hỗ trợ chuyên nghiệp"
professional_support_text: "Get reliable, high-touch support from senior support engineers with expert knowledge about running OpenProject in business-critical environments."
button_start_trial: "Bắt đầu dùng thử miễn phí"
button_book_now: "Đặt chỗ ngay"
@ -227,7 +227,7 @@ vi:
custom_actions:
date:
specific: 'lúc'
current_date: 'Current date'
current_date: 'Ngày hiện tại'
error:
internal: "Lỗi nội bộ đã xảy ra."
cannot_save_changes_with_message: "Không thể lưu thay đổi của bạn do lỗi sau: %{error}"
@ -240,7 +240,7 @@ vi:
description:
text_open_filter: "Mở bộ lọc này với 'ALT' và phím mũi tên."
text_close_filter: "Để nhập thôi ô đang kích hoạt nội dung Vd ấn enter. Nếu không muốn lọc lựa chọn mục rỗng đầu tiên."
noneElement: "(none)"
noneElement: "(trống)"
time_zone_converted:
two_values: "%{from} - %{to} in your local time."
only_start: "From %{from} in your local time."
@ -295,10 +295,10 @@ vi:
label_ascending: "Tăng dần"
label_author: "Tác giả: %{user}"
label_avatar: "Hình đại diện"
label_between: "between"
label_board: "Board"
label_between: "giữa"
label_board: "Bảng"
label_board_locked: "Đã khóa"
label_board_plural: "Boards"
label_board_plural: "Bảng"
label_board_sticky: "Chú ý"
label_create: "Tạo mới"
label_create_work_package: "Create new work package"
@ -322,7 +322,7 @@ vi:
label_created_on: "tạo ngày"
label_edit_comment: "Chỉnh sửa chú thích này"
label_edit_status: "Trạng thái chỉnh sửa của nhóm công việc"
label_equals: "is"
label_equals: ""
label_expand: "Mở rộng"
label_expanded: "đã mở rộng"
label_expand_all: "Mở rộng tất cả"
@ -345,7 +345,7 @@ vi:
label_in_more_than: "nhiều hơn"
label_incoming_emails: "Các thư đến"
label_information_plural: "Thông tin"
label_import: "Import"
label_import: "Nhập"
label_latest_activity: "Hoạt động mới nhất"
label_last_updated_on: "Cập nhật lần cuối lúc"
label_learn_more_link: "Learn more"
@ -364,7 +364,7 @@ vi:
label_no_data: "Không có dữ liệu để hiển thị"
label_no_due_date: "no finish date"
label_no_start_date: "không có ngày bắt đầu"
label_no_value: "No value"
label_no_value: "Không có giá trị"
label_none: "không"
label_not_contains: "không chứa"
label_not_equals: "không là"
@ -385,7 +385,7 @@ vi:
label_remove_columns: "Loại bỏ cột được chọn"
label_remove_row: "Xóa hàng"
label_report: "Báo cáo"
label_repository_plural: "Repositories"
label_repository_plural: "Kho lưu trữ"
label_save_as: "Lưu thành"
label_select_watcher: "Chọn một người theo dõi..."
label_selected_filter_list: "Các bộ lọc đã chọn: %s"
@ -393,14 +393,14 @@ vi:
label_show_in_menu: "Hiển thị chế độ xem trong menu"
label_sort_by: "Sort by"
label_sorted_by: "sắp xếp theo"
label_sort_higher: "Move up"
label_sort_higher: "Chuyển lên"
label_sort_lower: "Dịch xuống"
label_sorting: "Sắp xếp"
label_spent_time: "Thời gian"
label_star_query: "Ưa thích"
label_press_enter_to_save: "Nhấn enter để lưu."
label_public_query: "Công cộng"
label_sum: "Sum"
label_sum: "Tổng"
label_sum_for: "Tổng cho"
label_subject: "Chủ đề"
label_this_week: "tuần này"
@ -522,7 +522,7 @@ vi:
edit:
form_configuration: "Cấu hình biểu mẫu"
projects: "Các dự án"
settings: "Settings"
settings: "Cài đặt"
time_entry:
project: 'Dự án'
work_package: 'Work Package'
@ -609,7 +609,7 @@ vi:
text_attachment_destroy_confirmation: "Bạn có chắc bạn muốn xóa tập tin đính kèm?"
timelines:
quarter_label: 'Q%{quarter_number}'
gantt_chart: 'Gantt chart'
gantt_chart: 'Biểu đồ Gantt'
labels:
title: 'Cấu hình nhãn'
bar: 'Bar labels'
@ -623,7 +623,7 @@ vi:
button_deactivate: 'Ân biểu đồ sự kiện'
cancel: Hủy
change: "Change in planning"
due_date: "Finish date"
due_date: "Ngày hoàn thành"
empty: "(empty)"
error: "Lỗi đã xảy ra."
errors:
@ -633,7 +633,7 @@ vi:
report_timeout: "The timeline could not be loaded in a reasonable amount of time."
filter:
grouping_other: "Khác"
noneSelection: "(none)"
noneSelection: "(trống)"
name: "Tên"
outline: "Reset Outline"
outlines:
@ -653,8 +653,8 @@ vi:
selection_mode:
notification: 'Click on any highlighted work package to create the relation. Press escape to cancel.'
zoom:
in: "Zoom in"
out: "Zoom out"
in: "Phóng to"
out: "Thu nhỏ"
auto: "Auto zoom"
days: "Days"
weeks: "Weeks"
@ -750,7 +750,7 @@ vi:
createdAt: "Tạo ngày"
description: "Mô tả"
date: "Ngày"
dueDate: "Finish date"
dueDate: "Ngày hoàn thành"
estimatedTime: "Thời gian dự kiến"
spentTime: "Thời gian"
category: "Thể loại"
@ -863,16 +863,16 @@ vi:
toolbar:
settings:
configure_view: "Định cấu hình chế độ xem..."
columns: "Columns ..."
sort_by: "Sort by ..."
group_by: "Group by ..."
display_sums: "Display sums"
display_hierarchy: "Display hierarchy"
hide_hierarchy: "Hide hierarchy"
hide_sums: "Hide sums"
columns: "Cột..."
sort_by: "Sắp xếp theo..."
group_by: "Nhóm theo..."
display_sums: "Hiển thị tổng"
display_hierarchy: "Hiển thị phân cấp"
hide_hierarchy: "Ẩn phân cấp"
hide_sums: "Ẩn tổng"
save: "Lưu"
save_as: "Save as ..."
export: "Export ..."
save_as: "Lưu duới dạng..."
export: "Xuất..."
visibility_settings: "Cài đặt hiển thị..."
page_settings: "Đổi tên chế độ hiển thị..."
delete: "Xoá"
@ -884,16 +884,16 @@ vi:
modals:
label_settings: "Đổi tên trang"
label_name: "Tên"
label_delete_page: "Delete current page"
label_delete_page: "Xóa trang hiện tại"
button_apply: "Áp dụng"
button_save: "Lưu"
button_submit: "Gửi"
button_cancel: "Hủy"
form_submit:
title: 'Confirm to continue'
text: 'Are you sure you want to perform this action?'
title: 'Xác nhận để tiếp tục'
text: 'Bạn có thực sự muốn thực hiện thao tác này?'
destroy_work_package:
title: "Confirm deletion of %{label}"
title: "Xác nhận xóa %{label}"
text: "Are you sure you want to delete the following %{label} ?"
has_children: "The work package has %{childUnits}:"
confirm_deletion_children: "I acknowledge that ALL descendants of the listed work packages will be recursively removed."
@ -901,49 +901,49 @@ vi:
destroy_time_entry:
title: "Confirm deletion of time entry"
text: "Are you sure you want to delete the following time entry?"
notice_no_results_to_display: "No visible results to display."
notice_no_results_to_display: "Không có kết quả để hiển thị."
notice_successful_create: "Successful creation."
notice_successful_delete: "Successful deletion."
notice_successful_update: "Successful update."
notice_bad_request: "Bad Request."
relations:
empty: No relation exists
empty: Không tồn tại mối quan hệ
remove: Loại bỏ các mối quan hệ
inplace:
button_edit: "%{attribute}: Edit"
button_save: "%{attribute}: Save"
button_cancel: "%{attribute}: Cancel"
button_edit: "%{attribute}: Sửa"
button_save: "%{attribute}: Lưu"
button_cancel: "%{attribute}: Hủy"
button_save_all: "Lưu"
button_cancel_all: "Hủy"
link_formatting_help: "Định dạng văn bản trợ giúp"
btn_preview_enable: "Xem trước"
btn_preview_disable: "Disable preview"
null_value_label: "No value"
btn_preview_disable: "́t xem trước"
null_value_label: "Không có giá trị"
clear_value_label: "-"
errors:
required: '%{field} cannot be empty'
number: '%{field} is not a valid number'
required: '%{field} không thể để trống'
number: '%{field} không phải là số hợp lệ'
maxlength: '%{field} không thể chứa hơn %{maxLength} digit(s)'
minlength: '%{field} không thể chứa ít hơn %{minLength} digit(s)'
messages_on_field: 'Mục này không hợp lệ: %{messages}'
error_could_not_resolve_version_name: "Couldn't resolve version name"
error_could_not_resolve_user_name: "Couldn't resolve user name"
error_could_not_resolve_version_name: "Không thể phân giải tên phiên bản"
error_could_not_resolve_user_name: "Không thể phân giải tên người dùng"
error_attachment_upload: "Tập tin tải lên thất bại.%{error}"
error_attachment_upload_permission: "Bạn không có quyền tải lên tập tin vào tài nguyên này."
units:
workPackage:
other: "work packages"
other: "công việc"
child_work_packages:
other: "%{count} tác phẩm gói phần mềm trẻ em"
hour:
zero: "0 h"
other: "%{count} h"
zero: "0 giờ"
other: "%{count} giờ"
zen_mode:
button_activate: 'Activate zen mode'
button_deactivate: 'Deactivate zen mode'
button_activate: 'Kích hoạt chế độ zen'
button_deactivate: 'Tắt chế độ zen'
global_search:
all_projects: "Cho tất cả các dự án"
search: "Search"
search: "Tìm kiếm"
close_search: "Đóng tìm kiếm"
current_project: "Trong dự án này"
current_project_and_all_descendants: "Trong dự án này + các dự án con"
@ -952,6 +952,6 @@ vi:
project_and_subprojects: "và tất cả các dự án con"
search_for: "Tìm kiếm"
views:
card: 'Cards'
list: 'Table'
card: 'Thẻ'
list: 'Bảng'
timeline: 'Biểu đồ sự kiện'

@ -1198,7 +1198,7 @@ tr:
forums: "Topluluk forumu"
newsletter: "Güvenlik uyarıları / haber bülteni"
image_conversion:
imagemagick: 'Imagemagick'
imagemagick: 'Resim büyüsü'
journals:
changes_retracted: "Değişiklikler geri çekildi."
links:

File diff suppressed because it is too large Load Diff

@ -1,8 +1,3 @@
FROM ruby:2.7.1-buster AS pgloader
RUN apt-get update -qq && apt-get install -y libsqlite3-dev make curl gawk freetds-dev libzip-dev
COPY docker/prod/mysql-to-postgres/bin/build /tmp/build-pgloader
RUN /tmp/build-pgloader && rm /tmp/build-pgloader
FROM ruby:2.7.1-buster
MAINTAINER operations@openproject.com
@ -12,6 +7,8 @@ ARG PLATFORM=on-prem
ARG GITHUB_OAUTH_TOKEN
ARG DEBIAN_FRONTEND=noninteractive
ARG PGLOADER_BINARY_DOWNLOAD_URL=https://openproject-docker-public.s3-eu-west-1.amazonaws.com/pgloader/bin/pgloader-ccl
ENV NODE_VERSION="12.18.3"
ENV BUNDLER_VERSION="2.1.4"
ENV BUNDLE_PATH__SYSTEM=false
@ -36,7 +33,7 @@ ENV ATTACHMENTS_STORAGE_PATH=$APP_DATA_PATH/files
# Set a default key base, ensure to provide a secure value in production environments!
ENV SECRET_KEY_BASE=OVERWRITE_ME
COPY --from=pgloader /usr/local/bin/pgloader-ccl /usr/local/bin/
RUN curl ${PGLOADER_BINARY_DOWNLOAD_URL} > /usr/local/bin/pgloader-ccl && chmod +x /usr/local/bin/pgloader-ccl
WORKDIR $APP_PATH

@ -0,0 +1,4 @@
#!/bin/bash -e
echo "Checking migration status..."
bundle exec rails runner 'ActiveRecord::Migration.check_pending!'

@ -1,7 +1,15 @@
#!/bin/bash -e
echo "Executing database migration and database seed..."
bundle exec rake db:migrate db:seed
OUTPUT=$(echo "\dt" | psql `echo $DATABASE_URL | cut -d? -f1` 2>&1)
if [[ "$OUTPUT" = "No relations found." ]]; then
echo "Initialising database and running seed..."
DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:structure:load db:seed
else
echo "Executing database migration and database seed..."
bundle exec rake db:migrate db:seed
fi
if [ "$1" = "--set" ]; then
shift
echo "Update application settings..."

@ -21,7 +21,7 @@ echo "create database assets; create user assets with encrypted password 'p4ssw0
sleep 5
# dump schema
DATABASE_URL=postgres://assets:p4ssw0rd@127.0.0.1/assets RAILS_ENV=production bundle exec rake db:migrate db:schema:dump db:schema:cache:dump
DATABASE_URL=postgres://assets:p4ssw0rd@127.0.0.1/assets RAILS_ENV=production bundle exec rake db:migrate db:schema:dump db:schema:cache:dump db:structure:dump
# precompile assets
DATABASE_URL=postgres://assets:p4ssw0rd@127.0.0.1/assets RAILS_ENV=production bundle exec rake assets:precompile

@ -15,6 +15,8 @@ fi
if [ "$MIGRATE" = "true" ]; then
echo "Migrating database..."
bundle exec rake db:migrate
else
$APP_PATH/docker/prod/migration_status # abort if there are pending migrations
fi
# see `config/puma.rb` for configuration

@ -4,4 +4,7 @@ if [ "$1" = "--seed" ]; then
shift
$APP_PATH/docker/prod/seeder "$@"
fi
$APP_PATH/docker/prod/migration_status # abort if there are pending migrations
exec bundle exec rake jobs:work

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

@ -0,0 +1,24 @@
---
sidebar_navigation:
title: GDPR
priority: 600
description: GDPR
robots: index, follow
keywords: GDPR
---
# GDPR
The General Data Protection Regulation (GDPR) is a European regulation to harmonize the rules within the EU for handling personal data of private companies or public organizations. The GDPR also extends this EU data protection regulation law to all foreign companies processing data of EU residents. The GDPR compliance is self-evident for OpenProject.
As a firm believer in open-source, OpenProject is invested heavily in the freedom of users. This encompasses the software freedoms granted by the [GPLv3](https://www.gnu.org/licenses/quick-guide-gplv3.en.html) and employed by OpenProject and naturally extends to the rights and freedoms granted by the General Data Protection Regulation (GDPR). In the same transparent fashion that we develop our software, we are committed to transparency regarding data privacy protection of our users.
## Signing a Data Processing Agreement (DPA) for the Enterprise cloud
For EU customers it is required by the GDPR to sign a data processing agreement (sometimes called data processing addendum) before using our Cloud edition.
With OpenProject 11.1, we have automated this process in order to reduce manual effort on both sides. This way, it is even easier to comply with GDPR.
Please navigate to -> Administration -> GDPR and you can now online review and sign your DPA document directly within the application.
![OpenProject DPA](DPA.png)

@ -21,11 +21,12 @@ Welcome to the OpenProject **Enterprise cloud edition guide**.
| Popular Topics | Description |
| ------------------------------------------------------------ | :----------------------------------------------------------- |
| [Create a free trial](./create-trial-installation) | Learn more about how to create a free trial for the Enterprise cloud instance. |
| [Sign in](./sign-in/) | Sign in to your OpenProject Enterprise cloud edition. |
| [Sign in](./sign-in/) | Sign in to your OpenProject Enterprise cloud edition. |
| [View payment history or download invoices](./invoices-and-billing-history) | How to see your payment history and download invoices? |
| [Upgrade, downgrade or cancel subscription](./manage-subscription/#update-existing-subscriptions) | How to upgrade your plan, downgrade or cancel your subscription for the Enterprise cloud edition? |
| [Manage your subscription](./manage-subscription) | How to change billing address, add or edit credit card details? |
| [Backups](./backups) | How do backups work in the cloud? |
| [Manage your subscription](./manage-subscription) | How to change billing address, add or edit credit card details? |
| [Backups](./backups) | How do backups work in the cloud? |
| [GDPR](./GDPR) | Review and sign a Data Processing Agreement (DPA) |
The OpenProject Enterprise cloud edition contains all OpenProject Community features plus the additional OpenProject premium features, as well as professional support.

@ -90,7 +90,7 @@ docker run -d -p 8080:80 -e SECRET_KEY_BASE=secret openproject/community:11
**Note**: We've had reports of people being unable to start OpenProject this way
because of an [issue regarding pseudo-TTY allocations](https://github.com/moby/moby/issues/31243#issuecomment-406825071)
and permissions to write to `/dev/stdout`. If you run into this, a workaround
seems to be to add `-t` to your run command, even if you run in detached mode.
seems to be to add `-t` to your run command, even if you run in detached mode.
### Recommended usage
@ -286,10 +286,18 @@ end
```
FROM openproject/community:11
# If installing a local plugin (using `path:` in the `Gemfile.plugins` above),
# you will have to copy the plugin code into the container here and use the
# path inside of the container. Say for `/app/vendor/plugins/openproject-slack`:
# COPY /path/to/my/local/openproject-slack /app/vendor/plugins/openproject-slack
COPY Gemfile.plugins /app/
# If the plugin uses any external NPM dependencies you have to install them here.
# RUN npm add npm <package-name>*
RUN bundle config unset deployment && bundle install && bundle config set deployment 'true'
RUN bash docker/precompile-assets.sh
RUN ./docker/prod/setup/postinstall.sh
```
The file is based on the normal OpenProject docker image.

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

@ -40,11 +40,13 @@ In the work package list it is possible to group by any attribute, e.g. assigne
## Signing Data Processing Agreement (DPA) documents in Enterprise cloud
For EU customers it is required by the GDPR to sign a data processing agreement (also called data processing addendum) before using our [Cloud Edition](https://start.openproject.com/). Until now, we processed these contracts manually. Users had to print the document, enter their information and send it to us. We then had to sign it too, and send it back to the customer.
For EU customers it is required by the GDPR to sign a data processing agreement (sometimes called data processing addendum) before using our Cloud edition. Until now, we processed these contracts manually. Users had to print the document, enter their information and send it to us. We then had to sign it too, and send it back to the customer.
Luckily, we now automated this process in order to reduce manual effort on both sides. This way, it is even easier to comply with GDPR. Within -> Administration -> GDPR you can now online review and sign your DPA document with us.
![DPA-OpenProject](DPA-OpenProject.png)
Luckily, we now automated this process in order to reduce manual effort on both sides. This way, it is even easier to comply with GDPR. With -> Administration -> GDPR you can now online review and sign your DPA document with us.
![GDPR-OpenProject](GDPR-OpenProject.png)
## Various improvements and bug fixes

@ -0,0 +1,27 @@
---
title: OpenProject 11.1.1
sidebar_navigation:
title: 11.1.1
release_version: 11.1.1
release_date: 2021-01-06
---
# OpenProject 11.1.1
We released [OpenProject 11.1.1](https://community.openproject.com/versions/1463).
The release contains several bug fixes and we recommend updating to the newest version.
<!--more-->
#### Bug fixes and changes
- Fixed: Week number is wrong after November \[[#35095](https://community.openproject.com/wp/35095)\]
- Fixed: Deleted user associated to planned labor costs lead to 500 on Budget \[[#35670](https://community.openproject.com/wp/35670)\]
- Fixed: Renamed column updated_on is still referenced for settings \[[#35673](https://community.openproject.com/wp/35673)\]
- Fixed: Newrelic gem incorrectly loaded on installations resulting in unnecessary logs \[[#35776](https://community.openproject.com/wp/35776)\]
#### Contributions
A big thanks to community members for reporting bugs and helping us identifying and providing fixes.
Special thanks for reporting and finding bugs go to
Frank Long, Benjamin Bädorf

@ -12,6 +12,13 @@ Stay up to date and get an overview of the new features included in the releases
<!--- New release notes are generated below. Do not remove comment. -->
<!--- RELEASE MARKER -->
## 11.1.1
Release date: 2021-01-06
[Release Notes](11-1-1/)
## 11.1.0
Release date: 2020-12-17
@ -25,12 +32,11 @@ Release date: 2020-12-17
- Display project milestones aggregated for projects in a single row in Gantt chart
- Collapse all button for groups in the work packages list
- Extended the authentication profile with an OpenID Connect provider
- Extended authentication profile with an OpenID Connect provider
- Improvements for printing, e.g. for wiki pages, via the browser print function
#### Enterprise cloud:
#### Enterprise cloud:
- Signing Data Processing Agreement (DPA) documents in Enterprise cloud

@ -16,15 +16,14 @@ The users list provides an overview of all users in OpenProject. You can create
</div>
| Feature | Documentation for |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| [User list](#user-list) | Manage all users in OpenProject. |
| [Lock users](#lock-users) | Block a user permanently in the system. |
| [Filter users](#filter-users) | Filter users in the list. |
| [Invite new users](#invite-new-users) | Add new users to your OpenProject and invite them via email. |
| [Send user invitation via email](#resend-user-invitation-via-email) | Send user invitation via email. |
| [Manage user settings](#manage-user-settings) | Manage user settings, e.g. language, projects, groups, global roles, rate history, avatar, two-factor authentication. |
| [Delete users](#delete-users) | Delete a user from the system. |
| Topic | Content |
| --------------------------------------------- | ------------------------------------------------------------ |
| [User list](#user-list) | Manage all users in OpenProject. |
| [Lock users](#lock-users) | Block a user permanently in the system. |
| [Filter users](#filter-users) | Filter users in the list. |
| [Invite new users](#invite-new-users) | Add new users to your OpenProject and invite them via email. Resend and delete user invitations. |
| [Manage user settings](#manage-user-settings) | Manage user settings, e.g. language, projects, groups, global roles, rate history, avatar, two-factor authentication. |
| [Delete users](#delete-users) | Delete a user from the system. |
## User list
@ -71,7 +70,7 @@ Click the blue **Create** button in order to invite the new user via email.
The **Create and continue** button will bring you to the form to add another new user.
## Resend user invitation via email
### Resend user invitation via email
If a user did not receive the email invitation, you can send the invitation to the user again if needed. In the user list, click on the user name to whom you want to resend the email with the invitation link to the system.
@ -79,6 +78,10 @@ In the top right, click the **Send invitation** button in order to send the emai
![Sys-admin-resend-invitation](Sys-admin-resend-invitation.png)
### Delete user invitations
To invalidate or revoke a user's invitation click on the user name and then on **Delete** in the upper right corner. This will prevent the invited user from logging in.
Please note: This only works for users who haven't logged in yet. If the user is already active this will delete his/her whole profile and account. Deleting users can't be easily revoked.
## View user profile
If you want to see the user profile, click on the user name in the user list to display the activities across all projects from a certain user. Click the **Profile** button on the top right of a user.

@ -238,7 +238,7 @@ Click on the **Modules** icon with the dots in the header navigation. These are
Select **Work packages** from the drop down menu. Now, you will see all work packages in the projects for which you have the required [permissions](../..//system-admin-guide/users-permissions/roles-permissions/).
In this project overarching list, you can search, filter, group by, sort, highlight and save views the same way as in the [work package list](../../work-packages/work-package-table-configuration) in each project.
In this project overarching list, you can search, filter, group by, sort, highlight and save views the same way as in the [work package list](../work-packages/work-package-table-configuration) in each project.
You can group by projects by clicking in the header of the work package list next to PROJECT and select **Group by**. Collapsing the groups will allow you an **overview of the projects' aggregated milestones** as described [here](../../user-guide/work-packages/work-package-table-configuration/#aggregation-by-project).

@ -26,10 +26,11 @@
// See docs/COPYRIGHT.rdoc for more details.
//++
import flatpickr from "flatpickr";
import {Instance} from "flatpickr/dist/types/instance";
import {ConfigurationService} from "core-app/modules/common/config/configuration.service";
import {I18nService} from "core-app/modules/common/i18n/i18n.service";
import * as moment from 'moment';
import flatpickr from 'flatpickr';
import {Instance} from 'flatpickr/dist/types/instance';
import {ConfigurationService} from 'core-app/modules/common/config/configuration.service';
import {I18nService} from 'core-app/modules/common/i18n/i18n.service';
import DateOption = flatpickr.Options.DateOption;
export class DatePicker {
@ -54,6 +55,9 @@ export class DatePicker {
const mergedOptions = _.extend({}, options, {
weekNumbers: true,
getWeek(dateObj:Date) {
return moment(dateObj).week();
},
dateFormat: this.datepickerFormat,
defaultDate: this.date,
locale: {
@ -139,7 +143,7 @@ export class DatePicker {
return this.isInViewport(this.datepickerCont) &&
document.activeElement === this.datepickerCont;
} catch (e) {
console.error("Failed to test visibleAndActive " + e);
console.error('Failed to test visibleAndActive ' + e);
return false;
}
}

@ -34,7 +34,7 @@ module OpenProject
module VERSION #:nodoc:
MAJOR = 11
MINOR = 1
PATCH = 0
PATCH = 1
TINY = PATCH # Redmine compat
class << self

@ -19,20 +19,20 @@ vi:
label_current_avatar: 'Hình đại diện hiện tại'
label_local_avatar: 'Tùy chỉnh hình đại diện'
text_current_avatar: |
The following image shows the current avatar.
Hình ảnh sau đây hiển thị hình đại diện hiện tại.
text_upload_instructions: |
Tải lên hình đại diện tùy chỉnh của bạn, kích thước 128x128 điểm ảnh. Kích thước lớn hơn sẽ bị giảm chất lượng và thu nhỏ để phù hợp. Ảnh xem trước của hình đại diện sẽ hiện lên trước khi tải lên khi mà bạn chọn ảnh.
text_change_gravatar_html: 'Để thay đổi hoặc thêm Gravatar cho địa chỉ thư điện tử, đi đến %{gravatar_url}.'
text_your_local_avatar: |
OpenProject chấp thuận hình đại diện được tùy chỉnh.
text_local_avatar_over_gravatar: |
If you set one, this custom avatar is used in precedence over the gravatar above.
Nếu bạn đặt một, hình đại diện tùy chỉnh này sẽ được ưu tiên hơn so với gravatar ở trên.
text_your_current_gravatar: |
OpenProject uses your gravatar if you registered one, or a default image or icon if one exists.
The current gravatar is as follows:
OpenProject sử dụng gravatar của bạn nếu bạn đã đăng ký hoặc một hình ảnh hoặc biểu tượng mặc định nếu có.
Gravatar hiện tại như sau:
settings:
enable_gravatars: 'Enable user gravatars'
gravatar_default: "Default Gravatar image"
enable_gravatars: 'Bật gravatars của người dùng'
gravatar_default: "Hình ảnh Gravatar mặc định"
enable_local_avatars: 'Cho phép người dùng tùy chỉnh hình đại diện'

@ -43,19 +43,19 @@ vi:
sprint:
cannot_end_before_it_starts: "Sprint cannot end before it starts."
backlogs:
add_new_story: "New Story"
add_new_story: "Câu chuyện mới"
any: "any"
backlog_settings: "Lịch sử cài đặt"
burndown_graph: "Burndown Graph"
card_paper_size: "Paper size for card printing"
chart_options: "Chart options"
chart_options: "Tùy chọn biểu đồ"
close: "Đóng"
column_width: "Column width:"
date: "Day"
definition_of_done: "Definition of Done"
generating_chart: "Generating Graph..."
column_width: "Chiều rộng cột:"
date: "Ngày"
definition_of_done: "Định nghĩa về Hoàn thành"
generating_chart: "Tạo đồ thị..."
hours: "Giờ"
impediment: "Impediment"
impediment: "Trở ngại"
label_versions_default_fold_state: "Show versions folded"
work_package_is_closed: "Work package is done, when"
label_is_done_status: "Status %{status_name} means done"
@ -64,18 +64,18 @@ vi:
positions_could_not_be_rebuilt: "Positions could not be rebuilt."
positions_rebuilt_successfully: "Positions rebuilt successfully."
properties: "Properties"
rebuild: "Rebuild"
rebuild_positions: "Rebuild positions"
rebuild: "Dựng lại"
rebuild_positions: "Xây dựng lại vị trí"
remaining_hours: "Số giờ còn lại"
remaining_hours_ideal: "Remaining hours (ideal)"
show_burndown_chart: "Burndown Chart"
story: "Story"
story: "Câu chuyện"
story_points: "Story Points"
story_points_ideal: "Story Points (ideal)"
task: "Nhiệm vụ"
task_color: "Task color"
unassigned: "Unassigned"
x_more: "%{count} more..."
x_more: "%{count} thêm..."
backlogs_active: "active"
backlogs_any: "any"
backlogs_card_specification: "Label types for card printing"
@ -89,7 +89,7 @@ vi:
backlogs_sprint_unestimated: "Closed or active sprints with unestimated stories"
backlogs_sprint_unsized: "Project has stories on active or recently closed sprints that were not sized"
backlogs_sprints: "Sprints"
backlogs_story: "Story"
backlogs_story: "Câu chuyện"
backlogs_story_type: "Loại câu truyện tóm tắt"
backlogs_task: "Nhiệm vụ"
backlogs_task_type: "Loại công việc"
@ -98,8 +98,8 @@ vi:
backlogs_wiki_template: "Template for sprint wiki page"
backlogs_empty_title: "No versions are defined to be used in backlogs"
backlogs_empty_action_text: "To get started with backlogs, create a new version and assign it to a backlogs column."
button_edit_wiki: "Edit wiki page"
error_intro_plural: "The following errors were encountered:"
button_edit_wiki: "Sửa trang wiki"
error_intro_plural: "Các lỗi đã gặp phải:"
error_intro_singular: "The following error was encountered:"
error_outro: "Please correct the above errors before submitting again."
event_sprint_description: "%{summary}: %{url}\n%{description}"
@ -116,44 +116,44 @@ vi:
label_hours: "hours"
label_work_package_hierarchy: "Work package Hierarchy"
label_master_backlog: "Master Backlog"
label_not_prioritized: "not prioritized"
label_points: "points"
label_points_burn_down: "Down"
label_not_prioritized: "không được ưu tiên"
label_points: "điểm"
label_points_burn_down: "Xuống"
label_points_burn_up: "Lên"
label_product_backlog: "product backlog"
label_select_all: "Select all"
label_product_backlog: "tồn đọng sản phẩm"
label_select_all: "Chọn tất cả"
label_sprint_backlog: "sprint backlog"
label_sprint_cards: "Export cards"
label_sprint_cards: "Xuất thẻ"
label_sprint_impediments: "Sprint Impediments"
label_sprint_name: "Sprint \"%{name}\""
label_sprint_velocity: "Velocity %{velocity}, based on %{sprints} sprints with an average %{days} days"
label_stories: "Stories"
label_stories_tasks: "Stories/Tasks"
label_task_board: "Task board"
label_stories: "Những câu chuyện"
label_stories_tasks: "Câu chuyện/Nhiệm vụ"
label_task_board: "Bảng nhiệm vụ"
label_version_setting: "Các phiên bản"
label_version: 'Phiên bản'
label_webcal: "Webcal Feed"
label_wiki: "Wiki"
permission_view_master_backlog: "View master backlog"
permission_view_taskboards: "View taskboards"
permission_view_master_backlog: "Xem tồn đọng chính"
permission_view_taskboards: "Xem bảng tác vụ"
permission_update_sprints: "Update sprints"
points_accepted: "points accepted"
points_committed: "points committed"
points_resolved: "points resolved"
points_to_accept: "points not accepted"
points_to_resolve: "points not resolved"
points_to_accept: "điểm không được chấp nhận"
points_to_resolve: "điểm chưa được giải quyết"
project_module_backlogs: "Backlogs"
rb_label_copy_tasks: "Copy work packages"
rb_label_copy_tasks_all: "All"
rb_label_copy_tasks: "Sao chép work packages"
rb_label_copy_tasks_all: "Toàn bộ"
rb_label_copy_tasks_none: "None"
rb_label_copy_tasks_open: "Open"
rb_label_link_to_original: "Include link to original story"
remaining_hours: "remaining hours"
required_burn_rate_hours: "required burn rate (hours)"
required_burn_rate_points: "required burn rate (points)"
rb_label_copy_tasks_open: "Mở"
rb_label_link_to_original: "Bao gồm liên kết đến câu chuyện gốc"
remaining_hours: "giờ còn lại"
required_burn_rate_hours: "tốc độ ghi yêu cầu (giờ)"
required_burn_rate_points: "tốc độ ghi yêu cầu (điểm)"
todo_work_package_description: "%{summary}: %{url}\n%{description}"
todo_work_package_summary: "%{type}: %{summary}"
version_settings_display_label: "Column in backlog"
version_settings_display_option_left: "left"
version_settings_display_option_left: "trái"
version_settings_display_option_none: "không"
version_settings_display_option_right: "right"
version_settings_display_option_right: "phải"

@ -3,7 +3,7 @@ vi:
js:
bcf:
label_bcf: 'BCF'
import: 'Import'
import: 'Nhập'
import_bcf_xml_file: 'Import BCF XML file (BCF version 2.1)'
export: 'Xuất'
export_bcf_xml_file: 'Export BCF XML file (BCF version 2.1)'

@ -18,7 +18,7 @@ vi:
other: '%{count} vấn đề trong BCF'
bcf_xml:
xml_file: 'Tệp BCF XML'
import_title: 'Import'
import_title: 'Nhập'
export: 'Xuất'
import_update_comment: '(Cập nhật từ file BCF)'
import_failed: 'Không thể nhập file BCF: %{error}'

@ -52,7 +52,7 @@ el:
action_text_version: >
Board with automated columns based on the version attribute. Ideal for planning product development.
action_type:
assignee: Αναθέτης
assignee: Εντολοδόχος
status: κατάσταση
version: έκδοση
subproject: subproject

@ -2,16 +2,16 @@
vi:
js:
boards:
label_unnamed_board: 'Unnamed board'
label_unnamed_list: 'Unnamed list'
label_board_type: 'Board type'
label_unnamed_board: 'Bảng không tên'
label_unnamed_list: 'Danh sách không tên'
label_board_type: 'Kiểu bảng'
upsale:
teaser_text: 'Improve your agile project management with this flexible Boards view. Create as many boards as you like for anything you would like to keep track of.'
upgrade_to_ee_text: 'Boards is an Enterprise feature. Please upgrade to a paid plan.'
upgrade: 'Upgrade now'
upgrade: 'Nâng cấp ngay'
personal_demo: 'Get a personal demo'
lists:
delete: 'Delete list'
delete: 'Xoá danh sách'
version:
is_locked: 'Version is locked. No items can be added to this version.'
is_closed: 'Version is closed. No items can be added to this version.'
@ -23,16 +23,16 @@ vi:
show_version: 'Show version'
locked: 'Đã khóa'
closed: 'Đã đóng'
new_board: 'New board'
new_board: 'Bảng mới'
add_list: 'Add list to board'
add_card: 'Add card'
add_card: 'Thêm thẻ'
error_attribute_not_writable: "Cannot move the work package, %{attribute} is not writable."
error_loading_the_list: "Error loading the list: %{error_message}"
error_permission_missing: "The permission to create public queries is missing"
error_cannot_move_into_self: "You can not move a work package into its own column."
click_to_remove_list: "Click to remove this list"
click_to_remove_list: "Nhấp để xóa danh sách"
board_type:
text: 'Board type'
text: 'Kiểu bảng'
free: 'basic'
select_board_type: 'Please choose the type of board you need.'
free_text: >
@ -80,7 +80,7 @@ vi:
no_member: This project currently does not have any members that can be added. <br>
add_members: <a href="%{link}">Add a new member to this project</a> to select users again.
configuration_modal:
title: 'Configure this board'
title: 'Cấu hình bảng này'
display_settings:
card_mode: "Display as cards"
table_mode: "Display as table"
card_mode: "Hiển thị dưới dạng thẻ"
table_mode: "Hiển thị dưới dạng bảng"

@ -1,8 +1,8 @@
#English strings go here
vi:
permission_show_board_views: "View boards"
permission_manage_board_views: "Manage boards"
project_module_board_view: "Boards"
permission_show_board_views: "Xem bảng"
permission_manage_board_views: "Quản lý bảng"
project_module_board_view: "Bảng"
boards:
label_board: "Board"
label_boards: "Boards"
label_board: "Bảng"
label_boards: "Bảng"

@ -281,7 +281,7 @@ See docs/COPYRIGHT.rdoc for more details.
<% @budget.labor_budget_items.each do |labor_budget_item| %>
<tr>
<td class="hours"><%= l_hours(labor_budget_item.hours) %></td>
<td><%=h labor_budget_item.principal.name %></td>
<td><%=h user_name(labor_budget_item.principal) %></td>
<td class="comments"><%=h labor_budget_item.comments %></td>
<% if labor_budget_item.costs_visible_by?(User.current) %>
<td class="currency">

@ -23,4 +23,4 @@ vi:
js:
work_packages:
properties:
costObject: "Budget"
costObject: "Ngân sách"

@ -24,26 +24,26 @@ vi:
attributes:
budget:
author: "Tác giả"
available: "Available"
budget: "Planned"
budget_ratio: "Spent (ratio)"
available: "Khả dụng"
budget: "Có kế hoạch"
budget_ratio: "Đã chi (tỷ lệ)"
description: "Mô tả"
spent: "Spent"
spent: "Đã chi"
status: "Trạng thái"
subject: "Chủ đề"
type: "Cost type"
labor_budget: "Planned labor costs"
material_budget: "Planned unit costs"
type: "Loại chi phí"
labor_budget: "Chi phí lao động dự kiến"
material_budget: "Chi phí đơn vị dự kiến"
work_package:
budget_subject: "Budget title"
budget_subject: "Tiêu đề ngân sách"
models:
budget: "Budget"
material_budget_item: "Unit"
budget: "Ngân sách"
material_budget_item: "Đơn vị"
attributes:
budget: "Budget"
button_add_budget_item: "Add planned costs"
button_add_budget: "Add budget"
button_add_cost_type: "Add cost type"
budget: "Ngân sách"
button_add_budget_item: "Thêm chi phí đã lên kế hoạch"
button_add_budget: "Thêm ngân sách"
button_add_cost_type: "Thêm kiểu chi phí"
button_cancel_edit_budget: "Cancel editing budget"
button_cancel_edit_costs: "Cancel editing costs"
caption_labor: "Labor"
@ -55,11 +55,11 @@ vi:
help_click_to_edit: "Click here to edit."
help_currency_format: "Format of displayed currency values. %n is replaced with the currency value, %u ist replaced with the currency unit."
help_override_rate: "Enter a value here to override the default rate."
label_budget: "Budget"
label_budget: "Ngân sách"
label_budget_new: "New budget"
label_budget_plural: "Budgets"
label_budget_id: "Budget #%{id}"
label_deliverable: "Budget"
label_deliverable: "Ngân sách"
label_example_placeholder: 'e.g., %{decimal}'
label_view_all_budgets: "View all budgets"
label_yes: "Có"

@ -23,10 +23,10 @@ vi:
js:
work_packages:
property_groups:
costs: "Costs"
costs: "Chi phí"
properties:
overallCosts: "Overall costs"
overallCosts: "Tổng chi phí"
spentUnits: "Spent units"
button_log_costs: "Log unit costs"
label_hour: "hour"
label_hour: "giờ"
label_hours: "hours"

@ -24,27 +24,27 @@ vi:
attributes:
cost_entry:
work_package: "Work Package"
overridden_costs: "Overridden costs"
spent: "Spent"
overridden_costs: "Chi phí ghi đè"
spent: "Đã chi"
spent_on: "Ngày"
cost_type:
unit: "Unit name"
unit_plural: "Pluralized unit name"
unit: "Tên đơn vị"
unit_plural: "Tên đơn vị đa năng"
work_package:
costs_by_type: "Spent units"
labor_costs: "Labor costs"
material_costs: "Unit costs"
overall_costs: "Overall costs"
spent_costs: "Spent costs"
labor_costs: "Chi phí nhân công"
material_costs: "Chi phí đơn vị"
overall_costs: "Tổng chi phí"
spent_costs: "Chi phí"
spent_units: "Spent units"
rate:
rate: "Rate"
rate: "Tỷ giá"
user:
default_rates: "Default rates"
default_rates: "Tỷ lệ mặc định"
models:
cost_type:
other: "Cost types"
rate: "Rate"
other: "Loại chi phí"
rate: "Tỷ giá"
errors:
models:
work_package:
@ -52,13 +52,13 @@ vi:
nullify_is_not_valid_for_cost_entries: "Cost entries can not be assigned to a project."
attributes:
comment: "Nhận xét"
cost_type: "Cost type"
costs: "Costs"
current_rate: "Current rate"
cost_type: "Loại chi phí"
costs: "Chi phí"
current_rate: "Tỷ giá hiện tại"
hours: "Giờ"
units: "Units"
valid_from: "Valid from"
fixed_date: "Fixed date"
valid_from: "Có hiệu lực từ"
fixed_date: "Ngày cố định"
button_add_rate: "Add rate"
button_log_costs: "Log unit costs"
caption_booked_on_project: "Booked on project"
@ -74,10 +74,10 @@ vi:
caption_show_locked: "Show locked types"
description_date_for_new_rate: "Date for new rate"
group_by_others: "not in any group"
label_between: "between"
label_between: "giữa"
label_cost_filter_add: "Add cost entry filter"
label_costlog: "Logged unit costs"
label_cost_plural: "Costs"
label_cost_plural: "Chi phí"
label_cost_type_plural: "Cost types"
label_cost_type_specific: "Cost type #%{id}: %{name}"
label_costs_per_page: "Costs per page"
@ -103,14 +103,14 @@ vi:
label_log_costs: "Log unit costs"
label_no: "Không"
label_option_plural: "Tuỳ chọn"
label_overall_costs: "Overall costs"
label_rate: "Rate"
label_overall_costs: "Tổng chi phí"
label_rate: "Tỷ giá"
label_rate_plural: "Rates"
label_status_finished: "Finished"
label_units: "Cost units"
label_user: "Người dùng"
label_until: "until"
label_valid_from: "Valid from"
label_valid_from: "Có hiệu lực từ"
label_yes: "Có"
notice_something_wrong: "Something went wrong. Please try again."
notice_successful_restore: "Successful restore."

@ -1,4 +1,4 @@
vi:
js:
dashboards:
label: 'Dashboard'
label: 'Bảng điều khiển'

@ -1,17 +1,17 @@
vi:
js:
job_status:
download_starts: 'The download should start automatically.'
click_to_download: 'Or click here to download.'
title: 'Background job status'
redirect: 'You are being redirected.'
download_starts: 'Quá trình tải xuống sẽ tự động bắt đầu.'
click_to_download: 'Hoặc bấm vào đây để tải về.'
title: 'Trạng thái công việc nền'
redirect: 'Bạn đang bị chuyển hướng.'
redirect_link: 'Please click here to continue.'
redirect_errors: 'Due to these errors, you will not be redirected automatically.'
errors: 'Some errors have occurred'
generic_messages:
not_found: 'This job could not be found.'
in_queue: 'The job has been queued and will be processed shortly.'
in_process: 'The job is currently being processed.'
error: 'The job has failed to complete.'
cancelled: 'The job has been cancelled due to an error.'
success: 'The job completed successfully.'
not_found: 'Không thể tìm thấy công việc này.'
in_queue: 'Công việc đã được xếp hàng đợi và sẽ sớm được xử lý.'
in_process: 'Công việc hiện đang được xử lý.'
error: 'Không thể hoàn thành công việc.'
cancelled: 'Công việc đã bị hủy do lỗi'
success: 'Công việc đã hoàn thành thành công.'

@ -14,7 +14,7 @@ vi:
ldap_groups:
label_menu_item: 'LDAP group synchronization'
label_group_key: 'LDAP group filter key'
label_synchronize: 'Synchronize'
label_synchronize: 'Đồng bộ'
settings:
name_attribute: 'LDAP groups name attribute'
name_attribute_text: 'The LDAP attribute used for naming the OpenProject group when created by a filter'

@ -83,6 +83,6 @@ de:
text_meeting_closing_are_you_sure: "Möchten Sie dieses Meeting wirklich schließen?"
text_meeting_agenda_open_are_you_sure: "Es werden alle Änderungen im Protokoll überschrieben! Wollen Sie fortfahren?"
text_meeting_minutes_for_meeting: 'Protokoll für die Besprechung "%{meeting}"'
text_review_meeting_agenda: "%{author} hat das %{link} zur Einsicht freigegeben."
text_review_meeting_minutes: "%{author} hat das %{link} zur Einsicht freigegeben."
text_review_meeting_agenda: "%{author} hat die %{link} zur Einsicht freigegeben."
text_review_meeting_minutes: "%{author} hat die %{link} zur Einsicht freigegeben."
text_notificiation_invited: "Diese Email enthält einen ics Eintrag für die untenstehende Besprechung:"

@ -54,7 +54,7 @@ vi:
label_meeting_agenda: "Các ý chính"
label_meeting_minutes: "Phút"
label_meeting_close: "Đóng"
label_meeting_open: "Open"
label_meeting_open: "Mở"
label_meeting_agenda_close: "Close the agenda to begin the Minutes"
label_meeting_date_time: "Ngày/Giờ"
label_meeting_diff: "Diff"

@ -56,7 +56,7 @@ vi:
label_rows: "Rows"
label_saving: "Saving ..."
label_spent_on_reporting: "Date (Spent)"
label_sum: "Sum"
label_sum: "Tổng"
label_units: "Units"
label_week_reporting: "Week (Spent)"
label_year_reporting: "Year (Spent)"

@ -164,7 +164,7 @@ vi:
label_expiration_hint: "%{date} or on logout"
label_actions: 'Hành động'
label_confirmed: 'Đã xác nhận'
button_continue: 'Continue'
button_continue: 'Tiếp tục'
button_make_default: 'Mark as default'
label_unverified_phone: "Cell phone not yet verified"
notice_phone_number_format: "Please enter the number in the following format: +XX XXXXXXXX."

@ -5,7 +5,7 @@ vi:
url: 'Payload URL'
secret: 'Chữ ký bí mật'
events: 'Sự kiện'
projects: 'Enabled projects'
projects: 'Các dự án đã bật'
webhooks/log:
event_name: 'Tên sự kiện'
url: 'Payload URL'
@ -48,7 +48,7 @@ vi:
events:
title: 'Enabled events'
project_ids:
title: 'Enabled projects'
title: 'Các dự án đã bật'
description: 'Select for which projects this webhook should be executed for.'
all: 'All projects'
selected: 'Selected projects only'

Loading…
Cancel
Save