From 2f8271451471e37d92a0db287840aa6de016fa20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Tue, 13 Aug 2024 14:07:53 +0200 Subject: [PATCH 01/45] Warn if trying to migrate WikiContent broken journals --- ...0220818074159_fix_deleted_data_journals.rb | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/db/migrate/20220818074159_fix_deleted_data_journals.rb b/db/migrate/20220818074159_fix_deleted_data_journals.rb index 45a5d784016..a33d8d6a278 100644 --- a/db/migrate/20220818074159_fix_deleted_data_journals.rb +++ b/db/migrate/20220818074159_fix_deleted_data_journals.rb @@ -31,6 +31,33 @@ class FixDeletedDataJournals < ActiveRecord::Migration[7.0] get_missing_journals.each do |journable_type, relation| Rails.logger.debug { "Cleaning up journals on #{journable_type}" } + if unmigratable_journal_classes.key?(journable_type) && relation.count > 0 + raise <<~ERROR + We have found missing journal entries for the #{journable_type} model. + + Unfortunately, you cannot update directly to OpenProject #{OpenProject::VERSION.to_semver}, + as subsequent migrations are not yet processed for this model. + + To fix this issue, please try one of these options: + + Upgrade first to Openproject 13.0.0, and then to this version. + + ---- + + Skip this migration by connecting to the database, and running the following SQL command: + + INSERT INTO schema_migrations (version) VALUES (20220818074159); + + Then, run this migration step again. It will skip this migration. + + Once migrated, remove this migration entry again by running this SQL command: + + DELETE FROM schema_migrations WHERE version='20220818074159'; + + Then, run this migration step again. Only this skipped migration will be performed. + ERROR + end + relation.find_each { |journal| fix_journal_data(journal) } count = relation.count @@ -131,13 +158,18 @@ class FixDeletedDataJournals < ActiveRecord::Migration[7.0] # Lookup table for items that were already deleted def lookup_journal_class_table(journable_type) - lookup = { "WikiContent" => %w[Journal::WikiContentJournal wiki_content_journals] } - lookup.fetch(journable_type) do + unmigratable_journal_classes.fetch(journable_type) do journal_class = journable_type.constantize.journal_class [journal_class.to_s, journal_class.table_name] end end + def unmigratable_journal_classes + { + "WikiContent" => %w[Journal::WikiContentJournal wiki_content_journals] + } + end + def take_over_from_successor(journal) # The successors may also have their data deleted. # in this case, look for the first journal with data. If non can be found, instantiate from the journaled object. From 07ec54db4be220037be9f3dc208ba94755b38414 Mon Sep 17 00:00:00 2001 From: ulferts Date: Wed, 14 Aug 2024 11:07:26 +0200 Subject: [PATCH 02/45] change the filtering on the visible time entries to be done in the join --- .../scopes/include_spent_time.rb | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/app/models/work_packages/scopes/include_spent_time.rb b/app/models/work_packages/scopes/include_spent_time.rb index e2b46694127..b3b6fbc1a9e 100644 --- a/app/models/work_packages/scopes/include_spent_time.rb +++ b/app/models/work_packages/scopes/include_spent_time.rb @@ -31,12 +31,11 @@ module WorkPackages::Scopes::IncludeSpentTime class_methods do def include_spent_time(user, work_package = nil) - query = join_time_entries(user) - - scope = left_join_self_and_descendants(user, work_package) - .joins(query.join_sources) + scope = with(visible_time_entries_cte.name => allowed_to_view_time_entries(user)) + .left_join_self_and_descendants(user, work_package) + .joins(join_visible_time_entries.join_sources) .group(:id) - .select("SUM(time_entries.hours) AS hours") + .select("SUM(#{visible_time_entries_cte.name}.hours) AS hours") if work_package scope.where(id: work_package.id) @@ -47,18 +46,14 @@ module WorkPackages::Scopes::IncludeSpentTime protected - def join_time_entries(user) - join_condition = time_entries_table[:work_package_id] - .eq(wp_descendants[:id]) - .and(allowed_to_view_time_entries(user)) - + def join_visible_time_entries wp_table - .outer_join(time_entries_table) - .on(join_condition) + .outer_join(visible_time_entries_cte) + .on(visible_time_entries_cte[:work_package_id].eq(wp_descendants[:id])) end def allowed_to_view_time_entries(user) - time_entries_table[:id].in(TimeEntry.not_ongoing.visible(user).select(:id).arel) + TimeEntry.not_ongoing.visible(user).select(:id, :work_package_id, :hours).arel end def wp_table @@ -71,8 +66,8 @@ module WorkPackages::Scopes::IncludeSpentTime @wp_descendants ||= wp_table.alias("descendants") end - def time_entries_table - @time_entries_table ||= TimeEntry.arel_table + def visible_time_entries_cte + @visible_time_entries_cte ||= Arel::Table.new("visible_time_entries") end end end From 96c2e7df046d1e14a023581f2827aa510ec87c1f Mon Sep 17 00:00:00 2001 From: Jens Ulferts Date: Thu, 15 Aug 2024 09:05:16 +0200 Subject: [PATCH 03/45] switch order to avoid CTE being included unnecessarily in subselects Co-authored-by: Ivan Kuchin --- app/models/work_packages/scopes/include_spent_time.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/work_packages/scopes/include_spent_time.rb b/app/models/work_packages/scopes/include_spent_time.rb index b3b6fbc1a9e..aed520aecd4 100644 --- a/app/models/work_packages/scopes/include_spent_time.rb +++ b/app/models/work_packages/scopes/include_spent_time.rb @@ -31,8 +31,8 @@ module WorkPackages::Scopes::IncludeSpentTime class_methods do def include_spent_time(user, work_package = nil) - scope = with(visible_time_entries_cte.name => allowed_to_view_time_entries(user)) - .left_join_self_and_descendants(user, work_package) + scope = left_join_self_and_descendants(user, work_package) + .with(visible_time_entries_cte.name => allowed_to_view_time_entries(user)) .joins(join_visible_time_entries.join_sources) .group(:id) .select("SUM(#{visible_time_entries_cte.name}.hours) AS hours") From a0671e57e9a6fdec50c8d76cd0a33d19fafceb5a Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Wed, 31 Jul 2024 16:12:52 +0200 Subject: [PATCH 04/45] [#56573] Release custom field columns/filters in project lists to CE https://community.openproject.org/work_packages/56573 From 16eac6202c21fc64c79f37a88599ed6c78e2d2a2 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Tue, 6 Aug 2024 17:36:35 +0200 Subject: [PATCH 05/45] use any? instead of detect when we need just a boolean --- app/components/projects/projects_filters_component.rb | 2 +- .../app/components/meetings/meeting_filters_component.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/projects/projects_filters_component.rb b/app/components/projects/projects_filters_component.rb index 058bb1cd7ad..8bd11f2d3b3 100644 --- a/app/components/projects/projects_filters_component.rb +++ b/app/components/projects/projects_filters_component.rb @@ -55,6 +55,6 @@ class Projects::ProjectsFiltersComponent < Filter::FilterComponent ] allowlist << Queries::Filters::Shared::CustomFields::Base if EnterpriseToken.allows_to?(:custom_fields_in_projects_list) - allowlist.detect { |clazz| filter.is_a? clazz } + allowlist.any? { |clazz| filter.is_a? clazz } end end diff --git a/modules/meeting/app/components/meetings/meeting_filters_component.rb b/modules/meeting/app/components/meetings/meeting_filters_component.rb index f902b97194a..21cc140b5a1 100644 --- a/modules/meeting/app/components/meetings/meeting_filters_component.rb +++ b/modules/meeting/app/components/meetings/meeting_filters_component.rb @@ -71,7 +71,7 @@ module Meetings allowlist << Queries::Meetings::Filters::ProjectFilter end - allowlist.detect { |clazz| filter.is_a? clazz } + allowlist.any? { |clazz| filter.is_a? clazz } end end end From 7f0843d7006bd6dbcab3366da2c5233ee34a51e2 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Thu, 8 Aug 2024 17:59:26 +0200 Subject: [PATCH 06/45] warn if wait_for_network_idle or wait_for_reload are used withot cuprite --- spec/support/shared/cuprite_helpers.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/spec/support/shared/cuprite_helpers.rb b/spec/support/shared/cuprite_helpers.rb index ae1c0960242..b67190846a5 100644 --- a/spec/support/shared/cuprite_helpers.rb +++ b/spec/support/shared/cuprite_helpers.rb @@ -36,13 +36,21 @@ # being present or gone. Instead the execution is halted until # requested data is done being fetched. def wait_for_network_idle(...) - page.driver.wait_for_network_idle(...) if using_cuprite? + if using_cuprite? + page.driver.wait_for_network_idle(...) + else + warn "wait_for_network_idle used in spec not using cuprite" + end end # Takes the above `wait_for_network_idle` a step further by waiting # for the page to be reloaded after some triggering action. def wait_for_reload - page.driver.wait_for_reload if using_cuprite? + if using_cuprite? + page.driver.wait_for_reload + else + warn "wait_for_reload used in spec not using cuprite" + end end # Ferrum is yet support `fill_options` as a Hash From 032d6fb24dfff27bf3e77afe271c1f64c80d97e4 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Thu, 8 Aug 2024 18:15:52 +0200 Subject: [PATCH 07/45] ensure stability of projects index pagination spec --- spec/features/projects/projects_index_spec.rb | 21 +++++++++----- spec/support/pages/projects/index.rb | 28 +++++++++++++++---- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/spec/features/projects/projects_index_spec.rb b/spec/features/projects/projects_index_spec.rb index 181468bf93f..70517006349 100644 --- a/spec/features/projects/projects_index_spec.rb +++ b/spec/features/projects/projects_index_spec.rb @@ -437,15 +437,17 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login "doesn't contain", ["Plain"]) - click_on "Apply" - wait_for_reload + projects_page.apply_filters projects_page.set_columns("Name") + wait_for_reload projects_page.expect_columns("Name") + projects_page.expect_no_columns("Status") # Sorts ASC by name projects_page.sort_by_via_table_header("Name") wait_for_reload + projects_page.expect_sort_order_via_table_header("Name", direction: :asc) # Results should be filtered and ordered ASC by name and only the selected columns should be present projects_page.expect_projects_listed(development_project) @@ -458,9 +460,15 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login # Changing the page size to 5 and back to 1 should not change the filters (which we test later on the second page) projects_page.set_page_size(5) wait_for_reload + projects_page.expect_page_size(5) + projects_page.set_page_size(1) wait_for_reload - click_on "2" # Go to pagination page 2 + projects_page.expect_page_size(1) + + projects_page.go_to_page(2) # Go to pagination page 2 + wait_for_reload + projects_page.expect_current_page_number(2) # On page 2 you should see the second page of the filtered set ordered ASC by name and only the selected columns exist projects_page.expect_projects_listed(public_project) @@ -473,6 +481,7 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login # Sorts DESC by name projects_page.sort_by_via_table_header("Name") wait_for_reload + projects_page.expect_sort_order_via_table_header("Name", direction: :desc) # Clicking on sorting resets the page to the first one projects_page.expect_current_page_number(1) @@ -483,13 +492,12 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login development_project) # Present on page 2 projects_page.expect_total_pages(2) # Filters kept active, so there is no third page. - expect(page).to have_css(".sort.desc", text: "NAME") projects_page.expect_columns("Name") projects_page.expect_no_columns("Status") # Sending the filter form again what implies to compose the request freshly - click_on "Apply" - wait_for_reload + projects_page.apply_filters + projects_page.expect_sort_order_via_table_header("Name", direction: :desc) # We should see page 1, resetting pagination, as it is a new filter, but keeping the DESC order on the project # name @@ -497,7 +505,6 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login projects_page.expect_projects_not_listed(development_project, # as it is on the second page project) # as it filtered out projects_page.expect_total_pages(2) # as the result set is larger than 1 - expect(page).to have_css(".sort.desc", text: "NAME") projects_page.expect_columns("Name") projects_page.expect_no_columns("Status") end diff --git a/spec/support/pages/projects/index.rb b/spec/support/pages/projects/index.rb index 081c8f04b4e..40a831117a3 100644 --- a/spec/support/pages/projects/index.rb +++ b/spec/support/pages/projects/index.rb @@ -121,6 +121,12 @@ module Pages end end + def expect_page_link(text) + within ".op-pagination--pages" do + expect(page).to have_css("a.op-pagination--item-link", text:) + end + end + def expect_filters_container_toggled expect(page).to have_css(".op-filters-form") end @@ -225,10 +231,8 @@ module Pages end def apply_filters - within(".advanced-filters--filters") do - click_on "Apply" - wait_for_network_idle - end + find(".advanced-filters--filters").click_on "Apply" + wait_for_reload end def set_toggle_filter(values) @@ -402,8 +406,22 @@ module Pages find(".generic-table--sort-header a", text: column_name.upcase).click end + def expect_sort_order_via_table_header(column_name, direction:) + raise ArgumentError, "direction should be :asc or :desc" unless %i[asc desc].include?(direction) + + find(".generic-table--sort-header .#{direction} a", text: column_name.upcase) + end + def set_page_size(size) - find(".op-pagination--options .op-pagination--item", text: size).click + within ".op-pagination--options" do + find(".op-pagination--item", text: size).click + end + end + + def expect_page_size(size) + within ".op-pagination--options" do + expect(page).to have_css(".op-pagination--item_current", text: size) + end end def go_to_page(page_number) From 803d84c37e544cf874a406f133306f0a9da3c590 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Thu, 8 Aug 2024 18:54:23 +0200 Subject: [PATCH 08/45] allow to filter by custom fields --- app/components/projects/projects_filters_component.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/projects/projects_filters_component.rb b/app/components/projects/projects_filters_component.rb index 8bd11f2d3b3..33714d25b9f 100644 --- a/app/components/projects/projects_filters_component.rb +++ b/app/components/projects/projects_filters_component.rb @@ -51,9 +51,9 @@ class Projects::ProjectsFiltersComponent < Filter::FilterComponent Queries::Projects::Filters::NameAndIdentifierFilter, Queries::Projects::Filters::TypeFilter, Queries::Projects::Filters::FavoredFilter, - Queries::Projects::Filters::IdFilter + Queries::Projects::Filters::IdFilter, + Queries::Filters::Shared::CustomFields::Base ] - allowlist << Queries::Filters::Shared::CustomFields::Base if EnterpriseToken.allows_to?(:custom_fields_in_projects_list) allowlist.any? { |clazz| filter.is_a? clazz } end From ff9e80586c5b1f0b46c7c755b75db0bb5fdc2311 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Thu, 8 Aug 2024 19:06:12 +0200 Subject: [PATCH 09/45] remove enterprise banner Also from meetings filter, but we should not be displaying it there anyway --- app/components/filter/filter_component.html.erb | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/app/components/filter/filter_component.html.erb b/app/components/filter/filter_component.html.erb index 0d4759bebca..43901b555bc 100644 --- a/app/components/filter/filter_component.html.erb +++ b/app/components/filter/filter_component.html.erb @@ -113,15 +113,5 @@ <%= submit_tag t('button_apply'), class: 'button -small -primary', name: nil %> - <% unless EnterpriseToken.allows_to?(:custom_fields_in_projects_list)%> - <%= - helpers.angular_component_tag 'op-enterprise-banner', - inputs: { - collapsible: true, - textMessage: t('ee.upsale.project_filters.description_html'), - moreInfoLink: OpenProject::Static::Links.links[:enterprise_docs][:custom_field_projects][:href], - } - %> - <% end %> <% end %> From 6df2acda88904c576951fd9d1664d12b291e55b2 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Thu, 8 Aug 2024 19:38:03 +0200 Subject: [PATCH 10/45] project custom fields have separate interface --- app/views/custom_fields/_tab.html.erb | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/app/views/custom_fields/_tab.html.erb b/app/views/custom_fields/_tab.html.erb index 1fd4373cdda..d3756187c5c 100644 --- a/app/views/custom_fields/_tab.html.erb +++ b/app/views/custom_fields/_tab.html.erb @@ -27,19 +27,6 @@ See COPYRIGHT and LICENSE files for more details. ++#%> -<% if tab[:name] == 'ProjectCustomField' %> - <% unless EnterpriseToken.allows_to?(:custom_fields_in_projects_list) %> - <%= - angular_component_tag 'op-enterprise-banner', - inputs: { - collapsible: true, - textMessage: t('text_project_custom_field_html'), - moreInfoLink: OpenProject::Static::Links.links[:enterprise_docs][:custom_field_projects][:href], - } - %> - <% end %> -<% end %> - <% if (@custom_fields_by_type[tab[:name]] || []).any? %>
From 4bd18626f94dd24be4c125dbeadf8f2a024b92fa Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Thu, 8 Aug 2024 19:38:38 +0200 Subject: [PATCH 11/45] little refactor of showning no custom fields box when tab has none --- app/views/custom_fields/_tab.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/custom_fields/_tab.html.erb b/app/views/custom_fields/_tab.html.erb index d3756187c5c..61ca5e638b2 100644 --- a/app/views/custom_fields/_tab.html.erb +++ b/app/views/custom_fields/_tab.html.erb @@ -27,7 +27,9 @@ See COPYRIGHT and LICENSE files for more details. ++#%> -<% if (@custom_fields_by_type[tab[:name]] || []).any? %> +<% if @custom_fields_by_type[tab[:name]].blank? %> + <%= no_results_box(action_url: new_custom_field_path(type: tab[:name]), display_action: true) %> +<% else %>
<% if tab[:name] == 'WorkPackageCustomField' %> @@ -164,6 +166,4 @@ See COPYRIGHT and LICENSE files for more details.
-<% else %> - <%= no_results_box(action_url: new_custom_field_path(type: tab[:name]), display_action: true) %> <% end %> From 744ad319de833b99e19c7089154e40980afb7afe Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Fri, 9 Aug 2024 15:45:55 +0200 Subject: [PATCH 12/45] allow custom fields to be selected --- app/models/queries/projects/selects/custom_field.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/models/queries/projects/selects/custom_field.rb b/app/models/queries/projects/selects/custom_field.rb index 97b855e319f..b1b19f29ee2 100644 --- a/app/models/queries/projects/selects/custom_field.rb +++ b/app/models/queries/projects/selects/custom_field.rb @@ -33,10 +33,6 @@ class Queries::Projects::Selects::CustomField < Queries::Selects::Base /cf_(\d+)/ end - def self.available? - EnterpriseToken.allows_to?(:custom_fields_in_projects_list) - end - def self.all_available return [] unless available? From d4b477eedd4f3dc510704c4aaf3378641d5bbda3 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Fri, 9 Aug 2024 15:46:49 +0200 Subject: [PATCH 13/45] remove enterprise banner from default project lists columns --- .../admin/settings/projects_settings/show.html.erb | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/app/views/admin/settings/projects_settings/show.html.erb b/app/views/admin/settings/projects_settings/show.html.erb index c7f40de398a..aabbee95cf6 100644 --- a/app/views/admin/settings/projects_settings/show.html.erb +++ b/app/views/admin/settings/projects_settings/show.html.erb @@ -39,20 +39,6 @@ See COPYRIGHT and LICENSE files for more details. <%= styled_form_tag(admin_settings_projects_path, method: :patch) do %>
- <% unless EnterpriseToken.allows_to?(:custom_fields_in_projects_list) %> -
- <%= - angular_component_tag 'op-enterprise-banner', - inputs: { - textMessage: t('text_project_custom_field_html'), - collapsible: true, - moreInfoLink: OpenProject::Static::Links.links[:enterprise_docs][:custom_field_projects][:href], - } - %> -
- <% end %> - -
<%= angular_component_tag 'opce-draggable-autocompleter', From 3958e75badde30f785dd53c56ee10001f82c153c Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Fri, 9 Aug 2024 15:50:10 +0200 Subject: [PATCH 14/45] register created custom fields without restrection --- app/services/custom_fields/create_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/custom_fields/create_service.rb b/app/services/custom_fields/create_service.rb index 3009ecbb377..4d08c8aaba4 100644 --- a/app/services/custom_fields/create_service.rb +++ b/app/services/custom_fields/create_service.rb @@ -54,7 +54,7 @@ module CustomFields def after_perform(call) cf = call.result - if cf.is_a?(ProjectCustomField) && EnterpriseToken.allows_to?(:custom_fields_in_projects_list) + if cf.is_a?(ProjectCustomField) add_cf_to_visible_columns(cf) end From 792def7b90b7dcf26b6a0293e15f05ec2d540ed2 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Fri, 9 Aug 2024 15:59:36 +0200 Subject: [PATCH 15/45] remove custom_fields_in_projects_list as guarded action --- app/services/authorization/enterprise_service.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/services/authorization/enterprise_service.rb b/app/services/authorization/enterprise_service.rb index 5dacadd9c96..73a36c2ef60 100644 --- a/app/services/authorization/enterprise_service.rb +++ b/app/services/authorization/enterprise_service.rb @@ -34,7 +34,6 @@ class Authorization::EnterpriseService board_view conditional_highlighting custom_actions - custom_fields_in_projects_list date_alerts define_custom_style edit_attribute_groups From ea0218b43209b0ffddc8c07f1dc797d1aa1a3bb7 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Fri, 9 Aug 2024 19:11:46 +0200 Subject: [PATCH 16/45] updating specs due to removal of custom_fields_in_projects_list --- .../project/exporter/xls_integration_spec.rb | 130 +++++++------- .../projects/projects_portfolio_spec.rb | 3 +- .../projects/exporter/csv_integration_spec.rb | 166 +++++++++--------- spec/models/queries/projects/factory_spec.rb | 2 - .../queries/projects/project_query_spec.rb | 74 ++++---- .../custom_fields/create_service_spec.rb | 3 +- .../set_attributes_service_spec.rb | 23 +-- 7 files changed, 188 insertions(+), 213 deletions(-) diff --git a/modules/xls_export/spec/models/xls_export/project/exporter/xls_integration_spec.rb b/modules/xls_export/spec/models/xls_export/project/exporter/xls_integration_spec.rb index 37aca09cf86..bddf083e139 100644 --- a/modules/xls_export/spec/models/xls_export/project/exporter/xls_integration_spec.rb +++ b/modules/xls_export/spec/models/xls_export/project/exporter/xls_integration_spec.rb @@ -57,86 +57,78 @@ RSpec.describe XlsExport::Project::Exporter::XLS do describe "custom field columns selected" do let(:query_columns) { %w[name description project_status public] + global_project_custom_fields.map(&:column_name) } - context "when ee enabled", with_ee: %i[custom_fields_in_projects_list] do - before do - project # re-evaluate project to ensure it is created within the desired user context - end + before do + project # re-evaluate project to ensure it is created within the desired user context + end - context "with admin permission" do - let(:current_user) { build_stubbed(:admin) } + context "with admin permission" do + let(:current_user) { build_stubbed(:admin) } - it "renders all those columns" do - cf_names = global_project_custom_fields.map(&:name) - expect(header).to eq ["ID", "Identifier", "Name", "Description", "Status", "Public", *cf_names] + it "renders all those columns" do + cf_names = global_project_custom_fields.map(&:name) + expect(header).to eq ["ID", "Identifier", "Name", "Description", "Status", "Public", *cf_names] - expect(header).to include not_used_string_cf.name - expect(header).to include hidden_cf.name + expect(header).to include not_used_string_cf.name + expect(header).to include hidden_cf.name - custom_values = global_project_custom_fields.map do |cf| - case cf - when bool_cf - "true" - when text_cf - project.typed_custom_value_for(cf) - when not_used_string_cf - nil - else - project.formatted_custom_value_for(cf) - end + custom_values = global_project_custom_fields.map do |cf| + case cf + when bool_cf + "true" + when text_cf + project.typed_custom_value_for(cf) + when not_used_string_cf + nil + else + project.formatted_custom_value_for(cf) end - - expect(sheet.row(1)) - .to eq [project.id.to_s, project.identifier, project.name, project.description, "Off track", "false", - *custom_values] - - # The column for the project-level-disabled custom field is blank - expect(sheet.row(1)[header.index(not_used_string_cf.name)]).to be_nil end - end - context "with view_project_attributes permission" do - it "renders available project custom fields in the header if enabled in any project" do - cf_names = global_project_custom_fields.map(&:name) + expect(sheet.row(1)) + .to eq [project.id.to_s, project.identifier, project.name, project.description, "Off track", "false", + *custom_values] - expect(header).to eq ["ID", "Identifier", "Name", "Description", "Status", "Public", *cf_names] - - expect(header).not_to include not_used_string_cf.name - expect(header).not_to include hidden_cf.name - - custom_values = global_project_custom_fields.map do |cf| - case cf - when bool_cf - "true" - when text_cf - project.typed_custom_value_for(cf) - when not_used_string_cf - nil - else - project.formatted_custom_value_for(cf) - end - end - - expect(sheet.row(1)) - .to eq [project.id.to_s, project.identifier, project.name, project.description, "Off track", "false", - *custom_values] - end - end - - context "without view_project_attributes permission" do - let(:permissions) { %i(view_projects) } - - it "does not render project custom fields in the header" do - expect(header).to eq ["ID", "Identifier", "Name", "Description", "Status", "Public"] - - expect(sheet.row(1)) - .to eq [project.id.to_s, project.identifier, project.name, project.description, "Off track", "false"] - end + # The column for the project-level-disabled custom field is blank + expect(sheet.row(1)[header.index(not_used_string_cf.name)]).to be_nil end end - context "when ee not enabled" do - it "renders only the default columns" do - expect(header).to eq %w[ID Identifier Name Description Status Public] + context "with view_project_attributes permission" do + it "renders available project custom fields in the header if enabled in any project" do + cf_names = global_project_custom_fields.map(&:name) + + expect(header).to eq ["ID", "Identifier", "Name", "Description", "Status", "Public", *cf_names] + + expect(header).not_to include not_used_string_cf.name + expect(header).not_to include hidden_cf.name + + custom_values = global_project_custom_fields.map do |cf| + case cf + when bool_cf + "true" + when text_cf + project.typed_custom_value_for(cf) + when not_used_string_cf + nil + else + project.formatted_custom_value_for(cf) + end + end + + expect(sheet.row(1)) + .to eq [project.id.to_s, project.identifier, project.name, project.description, "Off track", "false", + *custom_values] + end + end + + context "without view_project_attributes permission" do + let(:permissions) { %i(view_projects) } + + it "does not render project custom fields in the header" do + expect(header).to eq ["ID", "Identifier", "Name", "Description", "Status", "Public"] + + expect(sheet.row(1)) + .to eq [project.id.to_s, project.identifier, project.name, project.description, "Off track", "false"] end end end diff --git a/spec/features/projects/projects_portfolio_spec.rb b/spec/features/projects/projects_portfolio_spec.rb index 87fe58057f4..d5f805c233a 100644 --- a/spec/features/projects/projects_portfolio_spec.rb +++ b/spec/features/projects/projects_portfolio_spec.rb @@ -28,8 +28,7 @@ require "spec_helper" -RSpec.describe "Projects index page", :js, :with_cuprite, - with_ee: %i[custom_fields_in_projects_list], with_settings: { login_required?: false } do +RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login_required?: false } do include Components::Autocompleter::NgSelectAutocompleteHelpers shared_let(:admin) { create(:admin) } diff --git a/spec/models/projects/exporter/csv_integration_spec.rb b/spec/models/projects/exporter/csv_integration_spec.rb index 3f6b37b6160..e578ab18bc6 100644 --- a/spec/models/projects/exporter/csv_integration_spec.rb +++ b/spec/models/projects/exporter/csv_integration_spec.rb @@ -63,98 +63,90 @@ RSpec.describe Projects::Exports::CSV, "integration" do %w[name description project_status public] + global_project_custom_fields.map(&:column_name) end - context "when ee enabled", with_ee: %i[custom_fields_in_projects_list] do - before do - project # re-evaluate project to ensure it is created within the desired user context - parsed + before do + project # re-evaluate project to ensure it is created within the desired user context + parsed + end + + context "without view_project_attributes permission" do + let(:permissions) { %i(view_projects) } + + it "does not render project custom fields in the header" do + expect(parsed.size).to eq 2 + + expect(header).to eq ["id", "Identifier", "Name", "Description", "Status", "Public"] end - context "without view_project_attributes permission" do - let(:permissions) { %i(view_projects) } - - it "does not render project custom fields in the header" do - expect(parsed.size).to eq 2 - - expect(header).to eq ["id", "Identifier", "Name", "Description", "Status", "Public"] - end - - it "does not render the custom field values in the rows if enabled for a project" do - expect(rows.first) - .to eq [project.id.to_s, project.identifier, project.name, - project.description, "Off track", "false"] - end - end - - context "with view_project_attributes permission" do - it "renders available project custom fields in the header if enabled in any project" do - expect(parsed.size).to eq 2 - - cf_names = global_project_custom_fields.map(&:name) - - expect(cf_names).not_to include(not_used_string_cf.name) - expect(cf_names).not_to include(hidden_cf.name) - - expect(header).to eq ["id", "Identifier", "Name", "Description", "Status", "Public", *cf_names] - end - - it "renders the custom field values in the rows if enabled for a project" do - custom_values = global_project_custom_fields.map do |cf| - case cf - when bool_cf - "true" - when text_cf - project.typed_custom_value_for(cf) - when not_used_string_cf - "" - else - project.formatted_custom_value_for(cf) - end - end - expect(rows.first) - .to eq [project.id.to_s, project.identifier, project.name, - project.description, "Off track", "false", *custom_values] - end - end - - context "with admin permission" do - let(:current_user) { create(:admin) } - - it "renders all globally available project custom fields including hidden ones in the header" do - expect(parsed.size).to eq 3 - - cf_names = global_project_custom_fields.map(&:name) - - expect(cf_names).to include(not_used_string_cf.name) - expect(cf_names).to include(hidden_cf.name) - - expect(header).to eq ["id", "Identifier", "Name", "Description", "Status", "Public", *cf_names] - end - - it "renders the custom field values in the rows if enabled for a project" do - custom_values = global_project_custom_fields.map do |cf| - case cf - when bool_cf - "true" - when hidden_cf - "hidden" - when not_used_string_cf - "" - when text_cf - project.typed_custom_value_for(cf) - else - project.formatted_custom_value_for(cf) - end - end - expect(rows.first) - .to eq [project.id.to_s, project.identifier, project.name, - project.description, "Off track", "false", *custom_values] - end + it "does not render the custom field values in the rows if enabled for a project" do + expect(rows.first) + .to eq [project.id.to_s, project.identifier, project.name, + project.description, "Off track", "false"] end end - context "when ee not enabled" do - it "renders only the default columns" do - expect(header).to eq %w[id Identifier Name Description Status Public] + context "with view_project_attributes permission" do + it "renders available project custom fields in the header if enabled in any project" do + expect(parsed.size).to eq 2 + + cf_names = global_project_custom_fields.map(&:name) + + expect(cf_names).not_to include(not_used_string_cf.name) + expect(cf_names).not_to include(hidden_cf.name) + + expect(header).to eq ["id", "Identifier", "Name", "Description", "Status", "Public", *cf_names] + end + + it "renders the custom field values in the rows if enabled for a project" do + custom_values = global_project_custom_fields.map do |cf| + case cf + when bool_cf + "true" + when text_cf + project.typed_custom_value_for(cf) + when not_used_string_cf + "" + else + project.formatted_custom_value_for(cf) + end + end + expect(rows.first) + .to eq [project.id.to_s, project.identifier, project.name, + project.description, "Off track", "false", *custom_values] + end + end + + context "with admin permission" do + let(:current_user) { create(:admin) } + + it "renders all globally available project custom fields including hidden ones in the header" do + expect(parsed.size).to eq 3 + + cf_names = global_project_custom_fields.map(&:name) + + expect(cf_names).to include(not_used_string_cf.name) + expect(cf_names).to include(hidden_cf.name) + + expect(header).to eq ["id", "Identifier", "Name", "Description", "Status", "Public", *cf_names] + end + + it "renders the custom field values in the rows if enabled for a project" do + custom_values = global_project_custom_fields.map do |cf| + case cf + when bool_cf + "true" + when hidden_cf + "hidden" + when not_used_string_cf + "" + when text_cf + project.typed_custom_value_for(cf) + else + project.formatted_custom_value_for(cf) + end + end + expect(rows.first) + .to eq [project.id.to_s, project.identifier, project.name, + project.description, "Off track", "false", *custom_values] end end end diff --git a/spec/models/queries/projects/factory_spec.rb b/spec/models/queries/projects/factory_spec.rb index 6bfd1b94d30..9e531ba3d67 100644 --- a/spec/models/queries/projects/factory_spec.rb +++ b/spec/models/queries/projects/factory_spec.rb @@ -114,7 +114,6 @@ RSpec.describe Queries::Projects::Factory, end context "without id and with ee and admin privileges", - with_ee: %i[custom_fields_in_projects_list], with_settings: { enabled_projects_columns: %w[name created_at cf_1] } do current_user { build_stubbed(:admin) } @@ -810,7 +809,6 @@ RSpec.describe Queries::Projects::Factory, end context "without id, as non admin and with a non existing custom field id", - with_ee: %i[custom_fields_in_projects_list], with_settings: { enabled_projects_columns: %w[name created_at cf_1 cf_42] } do before do custom_field diff --git a/spec/models/queries/projects/project_query_spec.rb b/spec/models/queries/projects/project_query_spec.rb index 0147762557b..ea79563c931 100644 --- a/spec/models/queries/projects/project_query_spec.rb +++ b/spec/models/queries/projects/project_query_spec.rb @@ -113,8 +113,6 @@ RSpec.describe ProjectQuery do end describe ".available_selects" do - current_user { user } - before do scope = instance_double(ActiveRecord::Relation) @@ -127,52 +125,48 @@ RSpec.describe ProjectQuery do .and_return([23, 42]) end - it "lists registered selects" do - expect(instance.available_selects.map(&:attribute)) - .to contain_exactly(:name, - :favored, - :public, - :description, - :hierarchy, - :project_status, - :status_explanation) + # rubocop:disable Naming/VariableNumber + context "for non admin user" do + current_user { user } + + it "lists registered selects" do + expect(instance.available_selects.map(&:attribute)) + .to match_array(%i[ + name + favored + public + description + hierarchy + project_status + status_explanation + cf_23 + cf_42 + ]) + end end - context "with the user being admin" do + context "for admin user" do current_user { admin } it "includes admin columns" do expect(instance.available_selects.map(&:attribute)) - .to contain_exactly(:name, - :public, - :favored, - :description, - :hierarchy, - :project_status, - :status_explanation, - :created_at, - :latest_activity_at, - :required_disk_space) + .to match_array(%i[ + name + favored + public + description + hierarchy + project_status + status_explanation + created_at + latest_activity_at + required_disk_space + cf_23 + cf_42 + ]) end end - - context "with an enterprise token", - with_ee: %i[custom_fields_in_projects_list] do - # rubocop:disable Naming/VariableNumber - it "includes custom field columns" do - expect(instance.available_selects.map(&:attribute)) - .to contain_exactly(:name, - :public, - :favored, - :description, - :hierarchy, - :project_status, - :status_explanation, - :cf_23, - :cf_42) - end - # rubocop:enable Naming/VariableNumber - end + # rubocop:enable Naming/VariableNumber end describe "#valid_subset!" do diff --git a/spec/services/custom_fields/create_service_spec.rb b/spec/services/custom_fields/create_service_spec.rb index 63042b4ff78..e3f4f5cefb8 100644 --- a/spec/services/custom_fields/create_service_spec.rb +++ b/spec/services/custom_fields/create_service_spec.rb @@ -31,8 +31,7 @@ require "services/base_services/behaves_like_create_service" RSpec.describe CustomFields::CreateService, type: :model do it_behaves_like "BaseServices create service" do - context "when creating a project cf", - with_ee: %i[custom_fields_in_projects_list] do + context "when creating a project cf" do let(:model_instance) { build_stubbed(:project_custom_field) } it "modifies the settings on successful call" do diff --git a/spec/services/queries/projects/project_queries/set_attributes_service_spec.rb b/spec/services/queries/projects/project_queries/set_attributes_service_spec.rb index 77f8c954adb..5a6fa1101e6 100644 --- a/spec/services/queries/projects/project_queries/set_attributes_service_spec.rb +++ b/spec/services/queries/projects/project_queries/set_attributes_service_spec.rb @@ -167,8 +167,16 @@ RSpec.describe Queries::Projects::ProjectQueries::SetAttributesService, type: :m .to eql [[:active, "=", %w[t]]] end - it "assigns default selects including those for admin and ee if allowed", - with_ee: %i[custom_fields_in_projects_list], + # rubocop:disable Naming/VariableNumber + it "assigns default selects for non admin", + with_settings: { enabled_projects_columns: %w[name created_at cf_1] } do + subject + + expect(model_instance.selects.map(&:attribute)) + .to eql %i[favored name cf_1] + end + + it "assigns default selects for admin", with_settings: { enabled_projects_columns: %w[name created_at cf_1] } do allow(User.current) .to receive(:admin?) @@ -177,16 +185,9 @@ RSpec.describe Queries::Projects::ProjectQueries::SetAttributesService, type: :m subject expect(model_instance.selects.map(&:attribute)) - .to eql %i[favored] + Setting.enabled_projects_columns.map(&:to_sym) - end - - it "assigns default selects excluding those for admin and ee if not allowed", - with_settings: { enabled_projects_columns: %w[name created_at cf_1] } do - subject - - expect(model_instance.selects.map(&:attribute)) - .to eql %i[favored name] + .to eql %i[favored name created_at cf_1] end + # rubocop:enable Naming/VariableNumber end context "with the query already having order and with order params" do From 93de581378115889cdec514126bca79617a9050d Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Tue, 13 Aug 2024 12:07:10 +0200 Subject: [PATCH 17/45] sort actions guarded in Authorization::EnterpriseService --- app/services/authorization/enterprise_service.rb | 12 ++++++------ .../authorization/enterprise_service_spec.rb | 8 ++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/services/authorization/enterprise_service.rb b/app/services/authorization/enterprise_service.rb index 73a36c2ef60..f07c857f0da 100644 --- a/app/services/authorization/enterprise_service.rb +++ b/app/services/authorization/enterprise_service.rb @@ -29,7 +29,7 @@ class Authorization::EnterpriseService attr_accessor :token - GUARDED_ACTIONS = %i( + GUARDED_ACTIONS = %i[ baseline_comparison board_view conditional_highlighting @@ -37,20 +37,20 @@ class Authorization::EnterpriseService date_alerts define_custom_style edit_attribute_groups + gantt_pdf_export grid_widget_wp_graph ldap_groups + one_drive_sharepoint_file_storage openid_providers placeholder_users + project_list_sharing readonly_work_packages team_planner_view two_factor_authentication + virus_scanning work_package_query_relation_columns work_package_sharing - one_drive_sharepoint_file_storage - virus_scanning - gantt_pdf_export - project_list_sharing - ).freeze + ].freeze def initialize(token) self.token = token diff --git a/spec/services/authorization/enterprise_service_spec.rb b/spec/services/authorization/enterprise_service_spec.rb index 645415ac054..027e251c235 100644 --- a/spec/services/authorization/enterprise_service_spec.rb +++ b/spec/services/authorization/enterprise_service_spec.rb @@ -43,6 +43,14 @@ RSpec.describe Authorization::EnterpriseService do let(:result) { instance.call(action) } let(:action) { :an_action } + describe "GUARDED_ACTIONS" do + it "is in alphabetical order" do + guarded_actions = described_class::GUARDED_ACTIONS + + expect(guarded_actions).to eq(guarded_actions.sort) + end + end + describe "#initialize" do it "has the token" do expect(instance.token).to eql token From b67088b17fd8f7f8c31718adb04d0eb36882497e Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Tue, 13 Aug 2024 13:27:17 +0200 Subject: [PATCH 18/45] rework spec for Authorization::EnterpriseService --- .../authorization/enterprise_service_spec.rb | 105 ++++++++++-------- 1 file changed, 56 insertions(+), 49 deletions(-) diff --git a/spec/services/authorization/enterprise_service_spec.rb b/spec/services/authorization/enterprise_service_spec.rb index 027e251c235..d2cfb8a3b6e 100644 --- a/spec/services/authorization/enterprise_service_spec.rb +++ b/spec/services/authorization/enterprise_service_spec.rb @@ -29,19 +29,10 @@ require "spec_helper" RSpec.describe Authorization::EnterpriseService do - let(:token_object) do - token = OpenProject::Token.new - token.subscriber = "Foobar" - token.mail = "foo@example.org" - token.starts_at = Date.today - token.expires_at = nil - - token - end - let(:token) { double("EnterpriseToken", token_object:) } let(:instance) { described_class.new(token) } - let(:result) { instance.call(action) } - let(:action) { :an_action } + let(:token) { instance_double(EnterpriseToken, token_object:, expired?: expired?) } + let(:token_object) { OpenProject::Token.new } + let(:expired?) { false } describe "GUARDED_ACTIONS" do it "is in alphabetical order" do @@ -57,57 +48,73 @@ RSpec.describe Authorization::EnterpriseService do end end - describe "expiry" do - before do - allow(token).to receive(:expired?).and_return(expired) + describe "#call" do + let(:result) { instance.call(action) } + + shared_examples "true result" do + it "returns a true result" do + expect(result).to be_a ServiceResult + expect(result).to be_success + expect(result).to have_attributes(result: true) + end end - context "when expired" do - let(:expired) { true } - + shared_examples "false result" do it "returns a false result" do expect(result).to be_a ServiceResult - expect(result.result).to be_falsey - expect(result.success?).to be_falsey + expect(result).not_to be_success + expect(result).to have_attributes(result: false) end end - context "when active" do - let(:expired) { false } + shared_examples "false result for any action" do + guarded_action = described_class::GUARDED_ACTIONS.sample - context "invalid action" do - it "returns false" do - expect(result.result).to be_falsey - end + context "for known action #{guarded_action}" do + let(:action) { guarded_action } + + include_examples "false result" end - %i(baseline_comparison - board_view - conditional_highlighting - custom_actions - custom_fields_in_projects_list - date_alerts - define_custom_style - edit_attribute_groups - grid_widget_wp_graph - ldap_groups - openid_providers - placeholder_users - readonly_work_packages - team_planner_view - two_factor_authentication - work_package_query_relation_columns - work_package_sharing).each do |guarded_action| - context "guarded action #{guarded_action}" do + context "for unknown action" do + let(:action) { "foo" } + + include_examples "false result" + end + end + + context "for a valid token" do + described_class::GUARDED_ACTIONS.each do |guarded_action| + context "for known action #{guarded_action}" do let(:action) { guarded_action } - it "returns a true result" do - expect(result).to be_a ServiceResult - expect(result.result).to be_truthy - expect(result.success?).to be_truthy - end + include_examples "true result" end end + + context "for unknown action" do + let(:action) { "foo" } + + include_examples "false result" + end + end + + context "for an expired token" do + let(:expired?) { true } + + include_examples "false result for any action" + end + + context "without a token_object" do + let(:token_object) { nil } + + include_examples "false result for any action" + end + + context "without a token" do + let(:token) { nil } + + include_examples "false result for any action" end end end From 0e60b8ba18b8a727aa1d7367f9696194478e0fcc Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Tue, 13 Aug 2024 13:47:20 +0200 Subject: [PATCH 19/45] sort allowed filters in MeetingFiltersComponent --- .../app/components/meetings/meeting_filters_component.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/meeting/app/components/meetings/meeting_filters_component.rb b/modules/meeting/app/components/meetings/meeting_filters_component.rb index 21cc140b5a1..f40c91d9aaa 100644 --- a/modules/meeting/app/components/meetings/meeting_filters_component.rb +++ b/modules/meeting/app/components/meetings/meeting_filters_component.rb @@ -61,10 +61,10 @@ module Meetings def allowed_filter?(filter) allowlist = [ - Queries::Meetings::Filters::TimeFilter, Queries::Meetings::Filters::AttendedUserFilter, + Queries::Meetings::Filters::AuthorFilter, Queries::Meetings::Filters::InvitedUserFilter, - Queries::Meetings::Filters::AuthorFilter + Queries::Meetings::Filters::TimeFilter ] if project.nil? From 43e3834c42fb9299944e3018c914493e3573b9e7 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Tue, 13 Aug 2024 13:48:02 +0200 Subject: [PATCH 20/45] sort allowed filters in ProjectsFiltersComponent --- .../projects/projects_filters_component.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/components/projects/projects_filters_component.rb b/app/components/projects/projects_filters_component.rb index 33714d25b9f..998369b943f 100644 --- a/app/components/projects/projects_filters_component.rb +++ b/app/components/projects/projects_filters_component.rb @@ -41,18 +41,18 @@ class Projects::ProjectsFiltersComponent < Filter::FilterComponent def allowed_filter?(filter) allowlist = [ + Queries::Filters::Shared::CustomFields::Base, Queries::Projects::Filters::ActiveFilter, - Queries::Projects::Filters::TemplatedFilter, - Queries::Projects::Filters::PublicFilter, - Queries::Projects::Filters::ProjectStatusFilter, - Queries::Projects::Filters::MemberOfFilter, Queries::Projects::Filters::CreatedAtFilter, - Queries::Projects::Filters::LatestActivityAtFilter, - Queries::Projects::Filters::NameAndIdentifierFilter, - Queries::Projects::Filters::TypeFilter, Queries::Projects::Filters::FavoredFilter, Queries::Projects::Filters::IdFilter, - Queries::Filters::Shared::CustomFields::Base + Queries::Projects::Filters::LatestActivityAtFilter, + Queries::Projects::Filters::MemberOfFilter, + Queries::Projects::Filters::NameAndIdentifierFilter, + Queries::Projects::Filters::ProjectStatusFilter, + Queries::Projects::Filters::PublicFilter, + Queries::Projects::Filters::TemplatedFilter, + Queries::Projects::Filters::TypeFilter ] allowlist.any? { |clazz| filter.is_a? clazz } From 70f7d036d35843479ebe08da8eec9621dad60638 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Tue, 13 Aug 2024 14:19:18 +0200 Subject: [PATCH 21/45] updating feature specs due to removal of custom_fields_in_projects_list --- spec/features/projects/projects_index_spec.rb | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/spec/features/projects/projects_index_spec.rb b/spec/features/projects/projects_index_spec.rb index 70517006349..91fbc56bf6b 100644 --- a/spec/features/projects/projects_index_spec.rb +++ b/spec/features/projects/projects_index_spec.rb @@ -70,7 +70,7 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login end end - context "for project members", with_ee: %i[custom_fields_in_projects_list] do + context "for project members" do shared_let(:user) do create(:user, member_with_roles: { development_project => developer }, @@ -131,7 +131,7 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login end end - context "for work package members", with_ee: %i[custom_fields_in_projects_list] do + context "for work package members" do shared_let(:work_package) { create(:work_package, project: development_project) } shared_let(:user) do create(:user, @@ -282,7 +282,7 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login end end - describe "project attributes visibility restrictions", with_ee: %i[custom_fields_in_projects_list] do + describe "project attributes visibility restrictions" do let(:user) do create(:user, member_with_roles: { @@ -329,18 +329,7 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login end end - context "without valid Enterprise token" do - specify "CF columns and filters are not visible" do - load_and_open_filters admin - - # CF's columns are not present: - expect(page).to have_no_text(custom_field.name.upcase) - # CF's filters are not present: - expect(page).to have_no_select("add_filter_select", with_options: [custom_field.name]) - end - end - - context "with valid Enterprise token", with_ee: %i[custom_fields_in_projects_list] do + context "with valid Enterprise token" do shared_let(:long_text_custom_field) { create(:text_project_custom_field) } specify "CF columns and filters are not visible by default" do load_and_open_filters admin @@ -720,7 +709,7 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login end end - describe "other filter types", with_ee: %i[custom_fields_in_projects_list] do + describe "other filter types" do context "for admins" do shared_let(:list_custom_field) { create(:list_project_custom_field) } shared_let(:date_custom_field) { create(:date_project_custom_field) } @@ -1107,7 +1096,7 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login end end - describe "order", with_ee: %i[custom_fields_in_projects_list] do + describe "order" do shared_let(:integer_custom_field) { create(:integer_project_custom_field) } # order is important here as the implementation uses lft # first but then reorders in ruby @@ -1303,8 +1292,7 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login end end - describe "column selection", - with_ee: %i[custom_fields_in_projects_list], with_settings: { enabled_projects_columns: %w[name created_at] } do + describe "column selection", with_settings: { enabled_projects_columns: %w[name created_at] } do # Will still receive the :view_project permission shared_let(:user) do create(:user, member_with_permissions: { project => %i(view_project_attributes), @@ -1372,7 +1360,7 @@ RSpec.describe "Projects index page", :js, :with_cuprite, with_settings: { login end end - context "with a multi-value custom field", with_ee: %i[custom_fields_in_projects_list] do + context "with a multi-value custom field" do let!(:list_custom_field) do create(:list_project_custom_field, multi_value: true).tap do |cf| project.update(custom_field_values: { cf.id => [cf.value_of("A"), cf.value_of("B")] }) From e94abe9ff13d37d5b537acf2bb58fc78d51d47c6 Mon Sep 17 00:00:00 2001 From: Pavel Balashou Date: Thu, 15 Aug 2024 13:42:23 +0200 Subject: [PATCH 22/45] [#57281] Create AuhtProvider model to store OIDC and SAML configurations. https://community.openproject.org/work_packages/57281 Extracted from https://github.com/opf/openproject/pull/16377/files#diff-3ada616f25c12427e810d35214157107bd3c15be595009ad30efb08acf5d4773 --- app/models/auth_provider.rb | 47 +++++++++++++++++++ .../20240801105918_add_auth_providers.rb | 43 +++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 app/models/auth_provider.rb create mode 100644 db/migrate/20240801105918_add_auth_providers.rb diff --git a/app/models/auth_provider.rb b/app/models/auth_provider.rb new file mode 100644 index 00000000000..69d724c0fae --- /dev/null +++ b/app/models/auth_provider.rb @@ -0,0 +1,47 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class AuthProvider < ApplicationRecord + belongs_to :creator, class_name: "User" + + validates :display_name, presence: true + validates :display_name, uniqueness: true + + def self.slug_fragment + raise NotImplementedError + end + + def auth_url + root_url = OpenProject::StaticRouting::StaticUrlHelpers.new.root_url + URI.join(root_url, "auth/#{slug}/").to_s + end + + def callback_url + URI.join(auth_url, "callback").to_s + end +end diff --git a/db/migrate/20240801105918_add_auth_providers.rb b/db/migrate/20240801105918_add_auth_providers.rb new file mode 100644 index 00000000000..998c5c0a3e4 --- /dev/null +++ b/db/migrate/20240801105918_add_auth_providers.rb @@ -0,0 +1,43 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2024 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +class AddAuthProviders < ActiveRecord::Migration[7.1] + def change + create_table :auth_providers do |t| + t.string :type, null: false + t.string :display_name, null: false, index: { unique: true } + t.string :slug, null: false, index: { unique: true } + t.boolean :available, null: false, default: true + t.boolean :limit_self_registration, null: false, default: false + t.jsonb :options, default: {}, null: false + t.references :creator, null: false, index: true, foreign_key: { to_table: :users } + + t.timestamps + end + end +end From cdbecbb22e1013abbc255eb4acfbc146b770f9f4 Mon Sep 17 00:00:00 2001 From: Judith Roth Date: Wed, 14 Aug 2024 16:42:00 +0200 Subject: [PATCH 23/45] =?UTF-8?q?[#56440]=20Add=20=F0=9F=94=8D=20to=20proj?= =?UTF-8?q?ects=20autocompleter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://community.openproject.org/work_packages/56440 Pure CSS solution to not mess with the angular code of the component. Since the angular component should be replaced with an primer component I assume this is okay. --- app/components/_index.sass | 1 - .../new_project_mapping_component.sass | 8 -------- .../custom_field_mapping_form.rb | 1 + .../src/global_styles/content/_index.sass | 1 + ...rojects_autocomplete_with_search_icon.sass | 11 ++++++++++ .../open_project/forms/autocompleter.html.erb | 20 ++++++++++--------- .../add_projects_autocompleter_form.rb | 1 + 7 files changed, 25 insertions(+), 18 deletions(-) delete mode 100644 app/components/settings/project_custom_fields/project_custom_field_mapping/new_project_mapping_component.sass create mode 100644 frontend/src/global_styles/content/_projects_autocomplete_with_search_icon.sass diff --git a/app/components/_index.sass b/app/components/_index.sass index 2f1db2aa1ed..bf0cfde0364 100644 --- a/app/components/_index.sass +++ b/app/components/_index.sass @@ -7,5 +7,4 @@ @import "open_project/common/submenu_component" @import "filter/filters_component" @import "projects/row_component" -@import "settings/project_custom_fields/project_custom_field_mapping/new_project_mapping_component" @import "op_primer/border_box_table_component" diff --git a/app/components/settings/project_custom_fields/project_custom_field_mapping/new_project_mapping_component.sass b/app/components/settings/project_custom_fields/project_custom_field_mapping/new_project_mapping_component.sass deleted file mode 100644 index 76511b9c5b3..00000000000 --- a/app/components/settings/project_custom_fields/project_custom_field_mapping/new_project_mapping_component.sass +++ /dev/null @@ -1,8 +0,0 @@ -@import 'helpers' - -.op-new-project-mapping-form - .ng-placeholder - @extend .icon-search - &:before - @include icon-font-common - margin-right: 10px diff --git a/app/forms/projects/custom_fields/custom_field_mapping_form.rb b/app/forms/projects/custom_fields/custom_field_mapping_form.rb index a6076e7d59a..cda7e1c10e4 100644 --- a/app/forms/projects/custom_fields/custom_field_mapping_form.rb +++ b/app/forms/projects/custom_fields/custom_field_mapping_form.rb @@ -38,6 +38,7 @@ module Projects::CustomFields visually_hide_label: true, validation_message: project_ids_error_message, autocomplete_options: { + with_search_icon: true, openDirectly: false, focusDirectly: false, multiple: true, diff --git a/frontend/src/global_styles/content/_index.sass b/frontend/src/global_styles/content/_index.sass index fc01f272df4..5e3ab924f63 100644 --- a/frontend/src/global_styles/content/_index.sass +++ b/frontend/src/global_styles/content/_index.sass @@ -54,6 +54,7 @@ @import autocomplete @import autocomplete_primerized @import diff +@import projects_autocomplete_with_search_icon @import projects_list @import project_list_modal @import datepicker diff --git a/frontend/src/global_styles/content/_projects_autocomplete_with_search_icon.sass b/frontend/src/global_styles/content/_projects_autocomplete_with_search_icon.sass new file mode 100644 index 00000000000..50a53108fc8 --- /dev/null +++ b/frontend/src/global_styles/content/_projects_autocomplete_with_search_icon.sass @@ -0,0 +1,11 @@ +@import 'helpers' + +.projects-autocomplete-with-search-icon + ng-select + .ng-placeholder + margin-left: 18px + .ng-value-container + @extend .icon-search + &:before + @include icon-font-common + padding-right: 5px diff --git a/lib/primer/open_project/forms/autocompleter.html.erb b/lib/primer/open_project/forms/autocompleter.html.erb index 751846cec8b..f21b59f522c 100644 --- a/lib/primer/open_project/forms/autocompleter.html.erb +++ b/lib/primer/open_project/forms/autocompleter.html.erb @@ -11,14 +11,16 @@ append_to: @autocomplete_options.fetch(:append_to, 'body') } %> <% else %> - <%= angular_component_tag @autocomplete_options.fetch(:component), - data: @autocomplete_options.delete(:data) { {} }, - inputs: @autocomplete_options.merge( - classes: "ng-select--primerized #{@input.invalid? ? '-error' : ''}", - inputName: @autocomplete_options.fetch(:inputName) { builder.field_name(@input.name) }, - inputValue: @autocomplete_options.fetch(:inputValue) { builder.object.send(@input.name) }, - defaultData: @autocomplete_options.fetch(:defaultData) { true } - ) - %> + <%= content_tag(:div, class: ("projects-autocomplete-with-search-icon" if @autocomplete_options.delete(:with_search_icon))) do %> + <%= angular_component_tag @autocomplete_options.fetch(:component), + data: @autocomplete_options.delete(:data) { {} }, + inputs: @autocomplete_options.merge( + classes: "ng-select--primerized #{@input.invalid? ? '-error' : ''}", + inputName: @autocomplete_options.fetch(:inputName) { builder.field_name(@input.name) }, + inputValue: @autocomplete_options.fetch(:inputValue) { builder.object.send(@input.name) }, + defaultData: @autocomplete_options.fetch(:defaultData) { true } + ) + %> + <% end %> <% end %> <% end %> diff --git a/modules/storages/app/forms/storages/admin/storages/add_projects_autocompleter_form.rb b/modules/storages/app/forms/storages/admin/storages/add_projects_autocompleter_form.rb index 62e719e324a..0d63feae9a9 100644 --- a/modules/storages/app/forms/storages/admin/storages/add_projects_autocompleter_form.rb +++ b/modules/storages/app/forms/storages/admin/storages/add_projects_autocompleter_form.rb @@ -38,6 +38,7 @@ module Storages visually_hide_label: true, validation_message: project_ids_error_message, autocomplete_options: { + with_search_icon: true, openDirectly: false, focusDirectly: false, multiple: true, From 0b2641fe2bf65e8263840053fd8aeadef6a4c012 Mon Sep 17 00:00:00 2001 From: Ivan Kuchin Date: Thu, 15 Aug 2024 15:33:42 +0200 Subject: [PATCH 24/45] show source of cuprite helper misuse warning --- spec/support/shared/cuprite_helpers.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/spec/support/shared/cuprite_helpers.rb b/spec/support/shared/cuprite_helpers.rb index b67190846a5..fb220d780b4 100644 --- a/spec/support/shared/cuprite_helpers.rb +++ b/spec/support/shared/cuprite_helpers.rb @@ -39,7 +39,7 @@ def wait_for_network_idle(...) if using_cuprite? page.driver.wait_for_network_idle(...) else - warn "wait_for_network_idle used in spec not using cuprite" + warn_about_cuprite_helper_misuse(:wait_for_network_idle) end end @@ -49,10 +49,16 @@ def wait_for_reload if using_cuprite? page.driver.wait_for_reload else - warn "wait_for_reload used in spec not using cuprite" + warn_about_cuprite_helper_misuse(:wait_for_reload) end end +def warn_about_cuprite_helper_misuse(method_name) + stack = caller(2) + cause = [stack[0], stack.find { |line| line["_spec.rb:"] }].uniq.join(" … ") + warn "#{method_name} used in spec not using cuprite (#{cause})" +end + # Ferrum is yet support `fill_options` as a Hash def clear_input_field_contents(input_element) if input_element.is_a? String From 06b885717c4d2f3bb2afac0a40f684e6e8ad0984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Mon, 5 Aug 2024 13:05:28 +0200 Subject: [PATCH 25/45] Disable writing of ENV enforced settings --- .../two_factor_settings_controller.rb | 7 ++ .../settings.html.erb | 93 ++++++++++--------- .../config/locales/en.yml | 1 + 3 files changed, 56 insertions(+), 45 deletions(-) diff --git a/modules/two_factor_authentication/app/controllers/two_factor_authentication/two_factor_settings_controller.rb b/modules/two_factor_authentication/app/controllers/two_factor_authentication/two_factor_settings_controller.rb index f92c098a2d7..f15550a793a 100644 --- a/modules/two_factor_authentication/app/controllers/two_factor_authentication/two_factor_settings_controller.rb +++ b/modules/two_factor_authentication/app/controllers/two_factor_authentication/two_factor_settings_controller.rb @@ -3,6 +3,7 @@ module ::TwoFactorAuthentication include EnterpriseTrialHelper before_action :require_admin before_action :check_enabled + before_action :check_writable, only: :update layout "admin" menu_item :two_factor_authentication @@ -33,6 +34,12 @@ module ::TwoFactorAuthentication private + def check_writable + unless Setting.plugin_openproject_two_factor_authentication_writable? + render_403 message: I18n.t("two_factor_authentication.notice_not_writable") + end + end + def permitted_params params.require(:settings).permit(:enforced, :allow_remember_for_days) end diff --git a/modules/two_factor_authentication/app/views/two_factor_authentication/settings.html.erb b/modules/two_factor_authentication/app/views/two_factor_authentication/settings.html.erb index 8c757951f4a..21db5b4a3cc 100644 --- a/modules/two_factor_authentication/app/views/two_factor_authentication/settings.html.erb +++ b/modules/two_factor_authentication/app/views/two_factor_authentication/settings.html.erb @@ -25,59 +25,62 @@ target: '_blank' %>

<%= render(AttributeGroups::AttributeGroupComponent.new) do |component| - component.with_attribute(key: t('two_factor_authentication.settings.label_active_strategies'), - value: if configuration['active_strategies'].empty? - t(:label_none) - else - strategies = configuration['active_strategies'].map do |key| - content_tag(:span) do - t("two_factor_authentication.strategies.#{key}") - end - end - safe_join(strategies, tag(:br)) - end) + if configuration['active_strategies'].empty? + component.with_attribute(key: t('two_factor_authentication.settings.label_active_strategies'), + value: t(:label_none)) + else + strategies = configuration['active_strategies'].map do |key| + content_tag(:span) do + t("two_factor_authentication.strategies.#{key}") + end + end + component.with_attribute(key: t('two_factor_authentication.settings.label_active_strategies'), + value: safe_join(strategies, tag(:br))) + end component.with_attribute(key: t('two_factor_authentication.settings.label_enforced'), value: !!configuration['enforced']) component.with_attribute(key: t('two_factor_authentication.settings.label_remember'), value: if configuration['allow_remember_for_days'].to_i == 0 - t(:label_disabled) - else - "#{configuration['allow_remember_for_days']} (#{t(:label_day_plural)})" - end) + t(:label_disabled) + else + "#{configuration['allow_remember_for_days']} (#{t(:label_day_plural)})" + end) end %>
-
- <%= t(:label_setting_plural) %> -
- -
- <%= styled_check_box_tag 'settings[enforced]', - '1', - !!configuration['enforced'], - disabled: strategy_manager.enforced_by_configuration? || configuration['active_strategies'].empty?, - container_class: '-middle' %> + <% if Setting.plugin_openproject_two_factor_authentication_writable? %> +
+ <%= t(:label_setting_plural) %> +
+ +
+ <%= styled_check_box_tag 'settings[enforced]', + '1', + !!configuration['enforced'], + disabled: strategy_manager.enforced_by_configuration? || configuration['active_strategies'].empty?, + container_class: '-middle' %> +
+
+ <%= I18n.t('two_factor_authentication.settings.text_enforced') %> +
-
- <%= I18n.t('two_factor_authentication.settings.text_enforced') %> +
+ +
+ <%= styled_number_field_tag 'settings[allow_remember_for_days]', + configuration['allow_remember_for_days'], + min: '0', + max: '365', + step: '1', + container_class: '-middle' %> +
+
+ <%= I18n.t('two_factor_authentication.settings.text_remember') %> +
-
-
- -
- <%= styled_number_field_tag 'settings[allow_remember_for_days]', - configuration['allow_remember_for_days'], - min: '0', - max: '365', - step: '1', - container_class: '-middle' %> -
-
- <%= I18n.t('two_factor_authentication.settings.text_remember') %> -
-
-
- <%= styled_submit_tag t(:button_apply), class: '-primary' %> +
+ <%= styled_submit_tag t(:button_apply), class: '-primary' %> + <% end %> + <% end %> - diff --git a/modules/two_factor_authentication/config/locales/en.yml b/modules/two_factor_authentication/config/locales/en.yml index f1874d48fc7..717f3cdde2a 100644 --- a/modules/two_factor_authentication/config/locales/en.yml +++ b/modules/two_factor_authentication/config/locales/en.yml @@ -30,6 +30,7 @@ en: two_factor_authentication: error_2fa_disabled: "2FA delivery has been disabled." + notice_not_writable: "2FA Settings were provided through environment variables and cannot be overwritten." error_no_device: "No registered 2FA device found for this user, despite being required for this instance." error_no_matching_strategy: "No matching 2FA strategy available for this user. Please contact your administratior." error_is_enforced_not_active: "Configuration error: Two-factor authentication has been enforced, but no active strategies exist." From 95b16c17c5a140c3bc41dc123a60fd5782f0a1da Mon Sep 17 00:00:00 2001 From: Behrokh Satarnejad Date: Thu, 15 Aug 2024 15:39:46 +0200 Subject: [PATCH 26/45] change back ground color of buttons in ck editor --- app/views/custom_styles/_primer_color_mapping.erb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/views/custom_styles/_primer_color_mapping.erb b/app/views/custom_styles/_primer_color_mapping.erb index e45aba87f38..e169a42e33c 100644 --- a/app/views/custom_styles/_primer_color_mapping.erb +++ b/app/views/custom_styles/_primer_color_mapping.erb @@ -86,5 +86,9 @@ --type-form-conf-attribute--background: var(--overlay-bgColor); --select-arrow-bg-color-url: url("data:image/svg+xml;utf8,"); --ck-color-mention-text: var(--display-red-fgColor); + --ck-color-button-on-background: var(--button-default-bgColor-active); + --ck-color-button-default-active-background: var(--button-default-bgColor-active); + --ck-color-button-on-hover-background: var(--button-default-bgColor-hover); + --ck-color-button-on-disabled-background: var(--button-default-bgColor-disabled); } From 8fb502b03e21ce726b8d517de973276b02341826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Thu, 15 Aug 2024 15:46:10 +0200 Subject: [PATCH 27/45] Don't access #project on widget migration https://community.openproject.org/work_packages/57036 --- .../db/migrate/20190826083604_my_project_page_to_grid.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/overviews/db/migrate/20190826083604_my_project_page_to_grid.rb b/modules/overviews/db/migrate/20190826083604_my_project_page_to_grid.rb index 2262eb75a7b..5f15a77521f 100644 --- a/modules/overviews/db/migrate/20190826083604_my_project_page_to_grid.rb +++ b/modules/overviews/db/migrate/20190826083604_my_project_page_to_grid.rb @@ -125,7 +125,7 @@ class MyProjectPageToGrid < ActiveRecord::Migration[5.2] def build_custom_text_widget(grid, widget_config, position) build_widget_with_options(grid, "custom_text", position) do |options| - name = widget_config[1].presence || grid.project.name + name = widget_config[1].presence || Project.where(id: grid.project_id).pick(:name) || "Text" options[:name] = name options[:text] = widget_config[2] From d35fddb69989a5abac7d4ec3fb5e466c1374298c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Tue, 13 Aug 2024 14:55:16 +0200 Subject: [PATCH 28/45] Have meetings "Send notifications" unchecked by default https://community.openproject.org/work_packages/56275 --- modules/meeting/app/views/meetings/_form.html.erb | 2 +- .../structured_meeting_crud_spec.rb | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/meeting/app/views/meetings/_form.html.erb b/modules/meeting/app/views/meetings/_form.html.erb index 5a926e75def..af48e62e620 100644 --- a/modules/meeting/app/views/meetings/_form.html.erb +++ b/modules/meeting/app/views/meetings/_form.html.erb @@ -197,7 +197,7 @@ See COPYRIGHT and LICENSE files for more details.
<%= styled_check_box_tag 'send_notifications', 1, - true %> + false %>
<%= t(:"meeting.email.send_invitation_emails") %> diff --git a/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb b/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb index 51834f2918c..a2800ec121b 100644 --- a/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb +++ b/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb @@ -77,9 +77,9 @@ RSpec.describe "Structured meetings CRUD", new_page.set_duration "1.5" new_page.invite(other_user) - if test.metadata[:unchecked] - expect(page).to have_checked_field "send_notifications" # rubocop:disable RSpec/ExpectInHook - uncheck "send_notifications" + if test.metadata[:checked] + expect(page).to have_unchecked_field "send_notifications" # rubocop:disable RSpec/ExpectInHook + check "send_notifications" end new_page.click_create @@ -88,9 +88,9 @@ RSpec.describe "Structured meetings CRUD", it "can create a structured meeting and add agenda items" do show_page.expect_toast(message: "Successful creation") - # Can send invitation mails by default + # Does not send invitation mails by default perform_enqueued_jobs - expect(ActionMailer::Base.deliveries.size).to eq 2 + expect(ActionMailer::Base.deliveries.size).to eq 0 # Can add and edit a single item show_page.add_agenda_item do @@ -316,9 +316,9 @@ RSpec.describe "Structured meetings CRUD", end end - it "does not send emails on creation when 'Send emails' is unchecked", :unchecked do + it "sends emails on creation when 'Send emails' is checked", :checked do perform_enqueued_jobs - expect(ActionMailer::Base.deliveries.size).to eq 0 + expect(ActionMailer::Base.deliveries.size).to eq 2 end context "with sections" do From 105930d4a59d55cbe953d8a3465288c93f00930f Mon Sep 17 00:00:00 2001 From: Behrokh Satarnejad <62008897+bsatarnejad@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:43:32 +0200 Subject: [PATCH 29/45] [56919] Make notification center split screen resizable (#16437) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * change width of split screen * make the content container flex * add an input for resizer to select the resizer element with its id * make the right side content resaizable with a grid parent Changes * select the split view as the resizer * Pass resizer class as input rather than override --------- Co-authored-by: Oliver Günther --- .../work_packages/split_view_component.html.erb | 2 ++ .../wp-split-view/wp-split-view-entry.component.ts | 11 +++++------ .../routing/wp-split-view/wp-split-view.component.ts | 3 +++ .../routing/wp-split-view/wp-split-view.html | 3 ++- .../resizer/resizer/wp-resizer.component.ts | 10 ++++++---- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/app/components/work_packages/split_view_component.html.erb b/app/components/work_packages/split_view_component.html.erb index 48b1549e621..acc03f9bbe2 100644 --- a/app/components/work_packages/split_view_component.html.erb +++ b/app/components/work_packages/split_view_component.html.erb @@ -18,6 +18,8 @@ helpers.angular_component_tag "opce-wp-split-view", inputs: { work_package_id: params[:work_package_id] || @work_package.id, + resizerClass: "op-work-package-split-view", + resizeStyle: "width", activeTab: @tab } end diff --git a/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view-entry.component.ts b/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view-entry.component.ts index b2843695528..7ef0961f93a 100644 --- a/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view-entry.component.ts +++ b/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view-entry.component.ts @@ -26,12 +26,7 @@ // See COPYRIGHT and LICENSE files for more details. //++ -import { - ChangeDetectionStrategy, - Component, - ElementRef, - Input, -} from '@angular/core'; +import { ChangeDetectionStrategy, Component, ElementRef, Input } from '@angular/core'; import { WorkPackageIsolatedQuerySpaceDirective, } from 'core-app/features/work-packages/directives/query-space/wp-isolated-query-space.directive'; @@ -48,6 +43,8 @@ import { populateInputsFromDataset } from 'core-app/shared/components/dataset-in [workPackageId]="workPackageId" [activeTab]="activeTab" [showTabs]="false" + [resizeStyle]="resizeStyle" + [resizerClass]="resizerClass" > `, changeDetection: ChangeDetectionStrategy.OnPush, @@ -55,6 +52,8 @@ import { populateInputsFromDataset } from 'core-app/shared/components/dataset-in export class WorkPackageSplitViewEntryComponent { @Input() workPackageId:string; @Input() activeTab:string; + @Input() resizerClass:string; + @Input() resizeStyle:string; constructor(readonly elementRef:ElementRef) { populateInputsFromDataset(this); diff --git a/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view.component.ts b/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view.component.ts index f409ca6cfb5..6f672428da8 100644 --- a/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view.component.ts +++ b/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view.component.ts @@ -75,6 +75,9 @@ export class WorkPackageSplitViewComponent extends WorkPackageSingleViewBase imp @Input() showTabs = true; @Input() activeTab?:string; + @Input() resizerClass = 'work-packages-partitioned-page--content-right'; + @Input() resizeStyle:'flexBasis'|'width' = 'flexBasis'; + constructor( public injector:Injector, public states:States, diff --git a/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view.html b/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view.html index 6cb165fd247..7342cf38728 100644 --- a/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view.html +++ b/frontend/src/app/features/work-packages/routing/wp-split-view/wp-split-view.html @@ -68,7 +68,8 @@
-
diff --git a/frontend/src/app/shared/components/resizer/resizer/wp-resizer.component.ts b/frontend/src/app/shared/components/resizer/resizer/wp-resizer.component.ts index 45533ed2747..fe7a04d7950 100644 --- a/frontend/src/app/shared/components/resizer/resizer/wp-resizer.component.ts +++ b/frontend/src/app/shared/components/resizer/resizer/wp-resizer.component.ts @@ -1,4 +1,4 @@ -//-- copyright +// -- copyright // OpenProject is an open source project management software. // Copyright (C) the OpenProject GmbH // @@ -73,10 +73,12 @@ export class WpResizerDirective extends UntilDestroyedMixin implements OnInit, A public resizerClass = 'work-packages--resizer icon-resizer-vertical-lines'; - constructor(readonly toggleService:MainMenuToggleService, + constructor( + readonly toggleService:MainMenuToggleService, private elementRef:ElementRef, readonly $transitions:TransitionService, - readonly browserDetector:BrowserDetector) { + readonly browserDetector:BrowserDetector, + ) { super(); } @@ -86,7 +88,7 @@ export class WpResizerDirective extends UntilDestroyedMixin implements OnInit, A // to still work in case an element is duplicated by Angular. const elements = document.getElementsByClassName(this.elementClass); this.resizingElement = elements[elements.length - 1]; - + if (!this.resizingElement) { return; } From ed982643e54df023a02fd570c75a268c3a094828 Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Fri, 16 Aug 2024 03:06:24 +0000 Subject: [PATCH 30/45] update locales from crowdin [ci skip] --- config/locales/crowdin/js-ro.yml | 52 ++--- config/locales/crowdin/js-zh-TW.yml | 36 ++-- config/locales/crowdin/no.yml | 100 +++++----- config/locales/crowdin/ro.seeders.yml | 10 +- config/locales/crowdin/ro.yml | 180 +++++++++--------- config/locales/crowdin/ru.yml | 4 +- config/locales/crowdin/zh-TW.seeders.yml | 2 +- config/locales/crowdin/zh-TW.yml | 116 +++++------ .../config/locales/crowdin/js-zh-TW.yml | 4 +- .../avatars/config/locales/crowdin/zh-TW.yml | 8 +- .../backlogs/config/locales/crowdin/ro.yml | 4 +- .../bim/config/locales/crowdin/ro.seeders.yml | 14 +- .../config/locales/crowdin/zh-TW.seeders.yml | 8 +- .../gantt/config/locales/crowdin/js-ro.yml | 2 +- .../config/locales/crowdin/js-ro.yml | 2 +- .../grids/config/locales/crowdin/js-ro.yml | 4 +- .../grids/config/locales/crowdin/js-zh-TW.yml | 10 +- modules/meeting/config/locales/crowdin/no.yml | 2 +- modules/meeting/config/locales/crowdin/ro.yml | 8 +- .../config/locales/crowdin/js-ro.yml | 2 +- .../config/locales/crowdin/zh-TW.yml | 2 +- .../storages/config/locales/crowdin/zh-TW.yml | 2 +- .../config/locales/crowdin/js-zh-TW.yml | 24 +-- .../config/locales/crowdin/zh-TW.yml | 22 +-- .../config/locales/crowdin/zh-CN.yml | 10 +- .../config/locales/crowdin/zh-TW.yml | 12 +- 26 files changed, 320 insertions(+), 320 deletions(-) diff --git a/config/locales/crowdin/js-ro.yml b/config/locales/crowdin/js-ro.yml index 3ac26f07ef6..2e3b86f2a5f 100644 --- a/config/locales/crowdin/js-ro.yml +++ b/config/locales/crowdin/js-ro.yml @@ -26,7 +26,7 @@ ro: loading: "Încărcare…" updating: "Actualizare…" attachments: - delete: "Ștergere atașament" + delete: "Șterge atașament" delete_confirmation: | Sunteți sigur că doriți să ștergeți acest fișier? Această acțiune nu este reversibilă. draggable_hint: | @@ -71,13 +71,13 @@ ro: button_configure-form: "Configurați formularul" button_confirm: "Confirmă" button_continue: "Continuaţi" - button_copy: "Copiere" - button_copy_to_clipboard: "Copiere în clipboard" - button_copy_link_to_clipboard: "Copy link to clipboard" + button_copy: "Copiază" + button_copy_to_clipboard: "Copiză în clipboard" + button_copy_link_to_clipboard: "Copiază link-ul în clipboard" button_copy_to_other_project: "Copiază în alt proiect" button_custom-fields: "Câmpuri personalizate" - button_delete: "Ștergere" - button_delete_watcher: "Ştergere observator" + button_delete: "Șterge" + button_delete_watcher: "Şterge observator" button_details_view: "Vizualizare detaliată" button_duplicate: "Duplicare" button_edit: "Editare" @@ -377,7 +377,7 @@ ro: token_name_label: "Where will you be using this?" token_name_placeholder: 'Type a name, e.g. "Phone"' token_name_description_text: 'If you subscribe to this calendar from multiple devices, this name will help you distinguish between them in your access tokens list.' - copy_url_label: "Copy URL" + copy_url_label: "Copiază URL-ul" ical_generation_error_text: "An error occured while generating the calendar URL." success_message: 'The URL "%{name}" was successfully copied to your clipboard. Paste it in your calendar client to complete the subscription.' label_activate: "Activare" @@ -436,7 +436,7 @@ ro: label_expand_project_menu: "Deschideți meniul proiectului" label_export: "Exportare" label_export_preparing: "Exportul este în curs de pregătire și va fi descărcat în curând." - label_favorites: "Favorites" + label_favorites: "Favorite" label_filename: "Fișier" label_filesize: "Dimensiune" label_general: "General" @@ -488,7 +488,7 @@ ro: label_per_page: "Pe pagină:" label_please_wait: "Așteptați" label_project: "Proiect" - label_project_list: "Project lists" + label_project_list: "Listă proiecte" label_project_plural: "Proiecte" label_visibility_settings: "Setări de vizibilitate" label_quote_comment: "Citare comentariu" @@ -558,7 +558,7 @@ ro: label_formattable_attachment_hint: "Atașați și legați fișiere prin plasarea în acest câmp sau prin lipirea din clipboard." label_remove_file: "Ştergere %{fileName}" label_remove_watcher: "Eliminare observator %{name}" - label_remove_all_files: Ştergeţi toate fişierele + label_remove_all_files: Şterge toate fişierele label_add_description: "Adăugați o descriere pentru %{file}" label_upload_notification: "Se încarcă fișierele..." label_work_package_upload_notification: "Fişierele pentru pachetul de lucru #%{id}: %{subject} sunt în curs de încărcare" @@ -625,9 +625,9 @@ ro: processed: "Processed" prioritized: "Prioritized" dateAlert: "Alertă de dată" - shared: "Shared" + shared: "Partajat" date_alerts: - milestone_date: "Data etapa" + milestone_date: "Dată etapă" overdue: "Restanțe" overdue_since: "din %{difference_in_days}" property_today: "este astăzi" @@ -653,7 +653,7 @@ ro: empty_state: no_notification: "Se pare că v-ați pus la punct." no_notification_with_current_project_filter: "Se pare că v-ați pus la punct cu proiectul selectat." - no_notification_with_current_filter: "Se pare că v-ați pus la punct pentru filtrul %{filter}." + no_notification_with_current_filter: "Se pare că ești la zi cu filtrul %{filter}." no_notification_for_filter: "Looks like you are all caught up for this filter." no_selection: "Faceți clic pe o notificare pentru a vizualiza toate detaliile activității." new_notifications: @@ -681,7 +681,7 @@ ro: description: "Primește o notificare de fiecare dată când cineva mă menționează oriunde" assignee: "Responsabil" responsible: "Responsabil" - shared: "Shared" + shared: "Partajat" watched: "Observator" work_package_commented: "Toate comentariile noi" work_package_created: "Pachete de lucru noi" @@ -725,7 +725,7 @@ ro: Vă rugăm să alegeți un proiect în care să creați pachetul de lucru pentru a vedea toate atributele. Puteți selecta numai proiectele care au tipul de mai sus activat. details_activity: "Activitate detalii proiect" context: "Contextul proiectului" - click_to_switch_to_project: "Project: %{projectname}" + click_to_switch_to_project: "Proiect: %{projectname}" confirm_template_load: "Schimbarea șablonului va reîncărca pagina și veți pierde toate datele introduse în acest formular. Continuați?" use_template: "Utilizează șablon" no_template_selected: "(Nimic)" @@ -956,7 +956,7 @@ ro: header_with_parent: "Nou %{type} (copilul %{parent_type} #%{id})" button: "Creare" copy: - title: "Copiere pachet de lucru" + title: "Copiză pachet de lucru" hierarchy: show: "Afișați modul ierarhic" hide: "Ascundeți modul ierarhic" @@ -1007,7 +1007,7 @@ ro: workAlternative: "Durata estimată" remainingTime: "Remaining work" default_queries: - manually_sorted: "New manually sorted query" + manually_sorted: "Interogare nouă sortată manual" latest_activity: "Activitate recentă" created_by_me: "Creat de mine" assigned_to_me: "Atribuit mie" @@ -1015,8 +1015,8 @@ ro: all_open: "Toate deschise" overdue: "Restanțe" summary: "Descriere" - shared_with_users: "Shared with users" - shared_with_me: "Shared with me" + shared_with_users: "Partajate cu utilizatorii" + shared_with_me: "Partajate cu mine" jump_marks: pagination: "Salt la paginarea tabelului" label_pagination: "Click aici pentru a sări peste tabelul cu pachete de lucru și a ajunge la paginare" @@ -1124,31 +1124,31 @@ ro: visibility_settings: "Setări de vizibilitate" share_calendar: "Subscribe to calendar" page_settings: "Redenumire" - delete: "Ștergere" + delete: "Șterge" filter: "Filtrare" unselected_title: "Pachet de lucru" search_query_label: "Căutați vizualizări salvate" modals: label_name: "Nume" - label_delete_page: "Ştergeți pagina curentă" + label_delete_page: "Şterge pagina curentă" button_apply: "Salvare" button_save: "Salvare" button_submit: "Trimitere" button_cancel: "Anulare" - button_delete: "Ștergere" + button_delete: "Șterge" form_submit: title: "Confirmați pentru a continua" text: "Sunteți sigur/ă că doriți să realizați această acțiune?" destroy_work_package: title: "Confirmați ștergerea %{label}" - single_text: "Sunteți sigur că doriți să ștergeți pachetul de lucru" - bulk_text: "Sunteți sigur că doriți să ștergeți următoarele %{label}?" + single_text: "Ești sigur că vrei să ștergi pachetul de lucru" + bulk_text: "Ești sigur că vrei să ștergi următoarele %{label}?" has_children: "Pachetul de lucru conține %{childUnits}:" confirm_deletion_children: "Recunosc că TOȚI descendenții pachetelor de lucru enumerate vor fi eliminați în mod recursiv." deletes_children: "De asemenea, toate pachetele de lucru minore și descendenții acestora vor fi șterse în mod recursiv." destroy_time_entry: title: "Confirmarea ștergerii înregistrării timpului" - text: "Sunteți sigur că doriți să ștergeți următoarea înregistrare a timpului?" + text: "Ești sigur că vrei să ștergi următoarea înregistrare a timpului?" notice_no_results_to_display: "Fara rezultate vizibile de afisat." notice_successful_create: "Creare reuşită." notice_successful_delete: "Ştergere reuşită." @@ -1204,7 +1204,7 @@ ro: close_search: "Inchide cautarea" current_project_and_all_descendants: "In acest proiect + subproiecte" current_project: "In acest proiect" - recently_viewed: "Recently viewed" + recently_viewed: "Vizualizate recent" search: "Căutare" title: all_projects: "toate proiectele" diff --git a/config/locales/crowdin/js-zh-TW.yml b/config/locales/crowdin/js-zh-TW.yml index 77b0c3bdea6..f1e376fd9f4 100644 --- a/config/locales/crowdin/js-zh-TW.yml +++ b/config/locales/crowdin/js-zh-TW.yml @@ -372,7 +372,7 @@ zh-TW: title: "訂閱日曆" inital_setup_error_message: "更新資料時發生錯誤" description: "您可以使用 URL (iCalendar) 在外部客戶端中訂閱此日曆,並從外部客戶端查看最新工作包信息。" - warning: "請不要與其他用戶共享此 URL 。擁有這個鏈接的任何人都可以在沒有帳戶或密碼的情況下查看工作包的詳細信息。" + warning: "請不要與其他用戶共用此 URL 。擁有這個鏈接的任何人都可以在沒有帳戶或密碼的情況下查看工作包的詳細信息。" token_name_label: "您將在哪裡使用它?" token_name_placeholder: '輸入名稱,例如“Phone”' token_name_description_text: '如果您從多個設備訂閱此日曆,此名稱將有助於在訪問權杖列表中區分它們。' @@ -446,7 +446,7 @@ zh-TW: label_group_plural: "群組" label_hide_attributes: "簡略" label_hide_column: "隱藏欄位" - label_hide_project_menu: "折疊專案選單" + label_hide_project_menu: "收合專案選單" label_in: "於" label_in_less_than: "少於" label_in_more_than: "多於" @@ -489,7 +489,7 @@ zh-TW: label_project: "專案" label_project_list: "列出專案" label_project_plural: "專案" - label_visibility_settings: "可見度設定" + label_visibility_settings: "公開設定" label_quote_comment: "引述這個留言" label_recent: "最近" label_reset: "重置" @@ -499,7 +499,7 @@ zh-TW: label_remove_row: "移除列" label_report: "報表" label_repository_plural: "版本庫" - label_save_as: "保存為" + label_save_as: "另存為" label_search_columns: "選取欄位" label_select_project: "選擇專案" label_select_watcher: "選擇監看者" @@ -605,11 +605,11 @@ zh-TW: gantt_menu: "使用甘特圖模塊輕鬆創建項目時間表和時間線。" timeline: "您可以在此編輯您的項目計劃、創建新的工作包(例如任務、里程碑、階段等)以及添加依賴項。所有團隊成員都可以隨時查看和更新最新計劃。" team_planner: - overview: "工作組規劃器使您可以直觀地為團隊成員分配任務,並全面瞭解哪些成員正在處理哪些工作。" - calendar: "單周或雙周規劃面板可以顯示分配給您的團隊成員的所有工作包。" - add_assignee: "首先,請將受理人添加到工作組規劃器。" - add_existing: "搜索現有工作包並將其拖動到工作組規劃器,以立即將其分配給團隊成員並定義開始日期和結束日期。" - card: "水平拖動工作包以前移或後移其時間,拖動邊緣以更改開始日期和結束日期,甚至可以將其垂直拖動到不同的行以分配給其他成員。" + overview: "小組工作企劃使您可以直觀地為小組成員分配任務,並全面瞭解哪些成員正在處理哪些工作。" + calendar: "單周或雙周規劃面版,可以顯示分配給您的小組成員的所有工作項目。" + add_assignee: "首先,請將執行者新增到小組工作企劃。" + add_existing: "搜索現有工作項目並將其拖動到小組工作企劃中,立即將其分配給小組成員並規定開始日期和結束日期。" + card: "水平拖動工作項目前後移其時間,拖曳可更改開始日期和結束日期,甚至可以將其垂直拖動到不同的行以分配給其他成員。" notifications: title: "通知" no_unread: "無未讀通知" @@ -624,7 +624,7 @@ zh-TW: processed: "已處理" prioritized: "已優先" dateAlert: "日期提醒" - shared: "共享" + shared: "共用" date_alerts: milestone_date: "里程碑日期" overdue: "逾期" @@ -678,7 +678,7 @@ zh-TW: description: "每當有人提及我時都收到通知" assignee: "執行者" responsible: "負責人" - shared: "共享" + shared: "共用" watched: "監看者\n" work_package_commented: "有新留言" work_package_created: "新增工作項目" @@ -690,7 +690,7 @@ zh-TW: title: "參與中" description: "你參與的工作項目中所有活動的通知(執行者、負責人或監看者)。" delayed: - title: "非參與中" + title: "未參與之工作項目" description: "額外通知" date_alerts: title: "日期提醒" @@ -890,7 +890,7 @@ zh-TW: wiki_link: "連結到一個 Wiki 頁面" image: "圖片" sharing: - share: "共享" + share: "共用" selected_count: "已選取 %{count} 個" selection: mixed: "混合" @@ -1051,10 +1051,10 @@ zh-TW: is_parent: "此工作包的日期會自動從其子項推導出。可啟用“手動計劃”來設置日期。" is_switched_from_manual_to_automatic: "由於與其他工作包的關係,在從手動計劃切換為自動計劃後,此工作包的日期可能需要重新計算。" sharing: - title: "共享工作項目" - show_all_users: "顯示與之共享工作包的所有用戶" + title: "共用工作項目" + show_all_users: "顯示與之共用工作項目的所有用戶" upsale: - description: "與不是專案成員的使用者共享工作項目。" + description: "與不是專案成員的使用者共用工作項目。" table: configure_button: "設定工作項目" summary: "由工作項目和工作項目屬性列組成的表格。" @@ -1070,7 +1070,7 @@ zh-TW: display_settings: "顯示設定" default_mode: "展開清單" hierarchy_mode: "階層" - hierarchy_hint: "所有已篩選的資料與其來源將一起優化。階層可以展開和折疊。" + hierarchy_hint: "所有已篩選的資料與其來源將一起優化。階層可以展開和收合。" display_sums_hint: "在表格結果下方的一行中顯示總和。" show_timeline_hint: "在表格的右側顯示互動式甘特圖。可以通過在表和甘特圖之間拖動分隔線來更改其寬度。" highlighting: "強調" @@ -1118,7 +1118,7 @@ zh-TW: save: "儲存" save_as: "另存為" export: "匯出" - visibility_settings: "可見度設定" + visibility_settings: "公開設定" share_calendar: "訂閱日曆" page_settings: "重新命名版面" delete: "删除" diff --git a/config/locales/crowdin/no.yml b/config/locales/crowdin/no.yml index 4fe504c31a7..f3e38a1ab89 100644 --- a/config/locales/crowdin/no.yml +++ b/config/locales/crowdin/no.yml @@ -212,12 +212,12 @@ reorder_confirmation: "Advarsel: Gjeldende rekkefølge for tilgjengelige verdier vil gå tapt. Vil du fortsette?" instructions: is_required: "Marker det egendefinerte feltet som påkrevd. Dette vil gjøre det obligatorisk å fylle ut feltet når du oppretter nye eller oppdaterer eksisterende ressurser." - is_required_for_project: "Check to enable this attribute and make it required in all projects. It cannot be deactived for individual projects." + is_required_for_project: "Marker for å aktivere denne attributten og gjøre den påkrevd i alle prosjekter. Det kan ikke deaktiveres for enkeltprosjekter." is_for_all: "Merk egendefinert felt som tilgjengelig for alle eksisterende og nye prosjekter." searchable: "Inkluder feltverdier ved bruk av den globale søkefunksjonaliteten." - searchable_for_project: "Check to make this attribute available as a filter in project lists." + searchable_for_project: "Marker for å gjøre denne attributten tilgjengelig som filter i prosjektlister." editable: "La feltet være redigerbart av brukere selv." - admin_only: "Check to make this attribute only visible to administrators. Users without admin rights will not be able to view or edit it." + admin_only: "Marker for å gjøre denne attributten synlig kun for administratorer. Brukere uten administrative rettigheter vil ikke kunne se eller redigere den." is_filter: > Tillat at egendefinert felt brukes i filter i arbeidspakkevisninger. Merk at med 'For alle prosjekter' som er valgt, vil egendefinert felt vises i globale visninger. tab: @@ -402,8 +402,8 @@ new_access_token_dialog_text: "Dette tokenet tillater tredjepartsprogrammer å kommunisere med forekomsten. For å differensiere den nye API-token, vennligst gi den et navn." new_access_token_dialog_attention_text: "Behandle API-token som passord. Alle med denne lenken vil ha tilgang til informasjon fra denne forekomsten, del den bare med pålitelige brukere." failed_to_reset_token: "Tilgangstoken kunne ikke tilbakestilles: %{error}" - failed_to_create_token: "Failed to create access token: %{error}" - failed_to_revoke_token: "Failed to revoke access token: %{error}" + failed_to_create_token: "Tilgangsnøkkelen kunne ikke opprettes: %{error}" + failed_to_revoke_token: "Kunne ikke oppheve tilgangstoken: %{error}" notice_reset_token: "En ny %{type} token har blitt generert. Din tilgangstoken er:" token_value_warning: "Merk: Du vil ikke kunne se denne token på nytt, sørg for å kopiere den nå." no_results_title_text: Det er ingen tilgangsnøkler tilgjengelig. @@ -529,9 +529,9 @@ no_common_statuses_exists: "Det er ingen status tilgjengelig for alle valgte arbeidspakker. Status kan ikke endres." unsupported_for_multiple_projects: "Bulk flytt/kopi er ikke støttet for arbeidspakker fra flere prosjekter" current_type_not_available_in_target_project: > - The current type of the work package is not enabled in the target project. Please enable the type in the target project if you'd like it to remain unchanged. Otherwise, select an available type in the target project from the list. + Den gjeldende typen arbeidspakke er ikke aktivert i målprosjektet. Vennligst aktiver typen i målprosjektet hvis du ønsker det uforandret. Ellers velger du en tilgjengelig type i målprosjektet fra listen. bulk_current_type_not_available_in_target_project: > - The current types of the work packages aren't enabled in the target project. Please enable the types in the target project if you'd like them to remain unchanged. Otherwise, select an available type in the target project from the list. + De gjeldende typene av arbeidspakker er ikke aktivert i målprosjektet. Aktiver typen i målprosjektet hvis du ønsker at de forblir uendret. Ellers velger du en tilgjengelig type i målprosjektet fra listen. sharing: missing_workflow_warning: title: "Arbeidsflyt mangler for deling av arbeidspakker" @@ -620,7 +620,7 @@ possible_values: "Mulige verdier" regexp: "Regulære uttrykk" searchable: "Søkbar" - admin_only: "Admin-only" + admin_only: "Kun administratorer" custom_value: value: "Verdi" doorkeeper/application: @@ -690,7 +690,7 @@ versions: "Versjoner" work_packages: "Arbeidspakker" project_custom_field: - is_required: "Required for all projects" + is_required: "Påkrevd for alle prosjekter" custom_field_section: Seksjon query: column_names: "Kolonner" @@ -711,7 +711,7 @@ is_closed: "Arbeidspakke lukket" is_readonly: "Arbeidspakken er skrivebeskyttet" excluded_from_totals: "Unnta fra beregning av totaler i hierarki" - default_done_ratio: "% Complete" + default_done_ratio: "% Ferdig " time_entry: activity: "Aktivitet" hours: "Timer" @@ -745,7 +745,7 @@ auto_hide_popups: "Auto-skjul suksessvarsler" warn_on_leaving_unsaved: "Varsle meg når jeg forlater en arbeidspakke med ulagrede endringer" theme: "Modus" - mode_guideline: "Some modes will overwrite custom theme colours for accessibility and legibility. For the full custom theme, please select Light mode." + mode_guideline: "Noen moduser vil overskrive tilpassede temafarger for tilgjengelighet og leselighet. For å få fullstendig tilpasset tema, velg lys modus." version: effective_date: "Sluttdato" sharing: "Deling" @@ -937,7 +937,7 @@ project_custom_field_project_mapping: attributes: project_ids: - blank: "Please select a project." + blank: "Velg et prosjekt." query: attributes: project: @@ -1003,7 +1003,7 @@ status: attributes: default_done_ratio: - inclusion: "must be between 0 and 100." + inclusion: "må være mellom 0 og 100." readonly_default_exlusive: "kan ikke aktiveres for statuser som er merket som standard." time_entry: attributes: @@ -1036,11 +1036,11 @@ assigned_to: format: "%{message}" done_ratio: - does_not_match_work_and_remaining_work: "does not match work and remaining work" - cannot_be_set_when_work_is_zero: "cannot be set when work is zero" + does_not_match_work_and_remaining_work: "samsvarer ikke med arbeid og arbeid som gjenstår" + cannot_be_set_when_work_is_zero: "kan ikke angis når arbeidet er null" must_be_set_when_remaining_work_is_set: "Påkrevd når gjenværende arbeid er satt." - must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set." - inclusion: "must be between 0 and 100." + must_be_set_when_work_and_remaining_work_are_set: "Påkrevd når arbeid og gjenstående arbeid settes." + inclusion: "må være mellom 0 og 100." due_date: not_start_date: "er ikke på startdato, selv om dette er nødvendig for milepæler." cannot_be_null: "kan ikke settes til null da startdato og varighet er kjent." @@ -1070,13 +1070,13 @@ estimated_hours: not_a_number: "is not a valid duration." cant_be_inferior_to_remaining_work: "Kan ikke være lavere enn gjenstående arbeid." - must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set." + must_be_set_when_remaining_work_and_percent_complete_are_set: "Påkrevd når gjenværende arbeid og % Fullført er satt." format: "%{message}" remaining_hours: not_a_number: "is not a valid duration." cant_exceed_work: "Kan ikke være høyere enn arbeidet." must_be_set_when_work_is_set: "Påkrevet når arbeidet settes." - must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set." + must_be_set_when_work_and_percent_complete_are_set: "Påkrevd når gjenværende arbeid og % Fullført er satt." format: "%{message}" readonly_status: "Arbeidspakken er i skrivebeskyttet status slik at egenskapene ikke kan endres." type: @@ -1601,7 +1601,7 @@ error_pdf_failed_to_export: "PDF-eksporten kunne ikke lagres: %{error}" error_token_authenticity: "Kan ikke bekrefte Cross-Site Request Forgery token. Har du prøvd å sende inn data i flere nettlesere eller faner? Vennligst lukk alle fanene og prøv igjen." error_work_package_not_found_in_project: "Arbeidspakken ble ikke funnet eller tilhører ikke dette prosjektet" - error_work_package_id_not_found: "The work package was not found." + error_work_package_id_not_found: "Arbeidspakken ble ikke funnet." error_must_be_project_member: "må være prosjektmedlem" error_migrations_are_pending: "Din OpenProject installasjon har ventende databaseoverføringer. Du har sannsynligvis gått tilbake til overføringene på din siste oppgradering. Vennligst sjekk oppgraderings guiden for å oppgradere installasjonen din ordentlig." error_migrations_visit_upgrade_guides: "Vennligst besøk vår veiledning/dokumentasjon for oppgradering" @@ -1657,11 +1657,11 @@ image: omitted: "Bilde ikke eksportert." macro: - error: "Macro error, %{message}" - attribute_not_found: "attribute not found: %{attribute}" - model_not_found: "invalid attribute model: %{model}" - resource_not_found: "resource not found: %{resource}" - rich_text_unsupported: "Rich text embedding currently not supported in export" + error: "Makrofeil, %{message}" + attribute_not_found: "attributtet ble ikke funnet: %{attribute}" + model_not_found: "ugyldig attributtmodell: %{model}" + resource_not_found: "ressurs ikke funnet: %{resource}" + rich_text_unsupported: "Rik tekstinnebygging støttes ikke for eksport" units: hours: t days: d @@ -1812,7 +1812,7 @@ all: "Alle" all_title: "Vis alle" menu: - by_project: "Ulest av prosjektet" + by_project: "Ulest etter prosjekt" by_reason: "Grunn" inbox: "Innboks" send_notifications: "Send varsler for denne handlingen" @@ -1834,7 +1834,7 @@ label_add_another_file: "Legg til en annen fil" label_add_columns: "Legg til valgte kolonner" label_add_note: "Legg til et notat" - label_add_projects: "Add projects" + label_add_projects: "Legg til prosjekter" label_add_related_work_packages: "Legg til relaterte arbeidspakker" label_add_subtask: "Legg til underoppgave" label_added: "lagt til" @@ -1875,7 +1875,7 @@ label_ldap_auth_source_plural: "LDAP-forbindelser" label_attribute_expand_text: "Den fullstendige teksten for '%{attribute}'" label_authentication: "Autentisering" - label_authentication_settings: "Authentication settings" + label_authentication_settings: "Autentiseringsinnstillinger" label_available_global_roles: "Tilgjengelige globale roller" label_available_project_attributes: "Tilgjengelige prosjektegenskaper" label_available_project_forums: "Tilgjengelige forum" @@ -2073,10 +2073,10 @@ label_introduction_video: "Introduksjonsvideo" label_invite_user: "Inviter bruker" label_share: "Del" - label_share_project_list: "Share project list" + label_share_project_list: "Del prosjektliste" label_share_work_package: "Del arbeidspakke" label_show_hide: "Vis/Skjul" - label_show_hide_n_items: "Show/hide %{count} items" + label_show_hide_n_items: "Vis/skjul %{count} elementer" label_show_all_registered_users: "Vis alle registrerte brukere" label_journal: "Journal" label_journal_diff: "Sammenligning av beskrivelse" @@ -2170,8 +2170,8 @@ label_next_week: "Neste uke" label_no_change_option: "(Ingen endring)" label_no_data: "Ingen data å vise" - label_no_due_date: "no finish date" - label_no_start_date: "no start date" + label_no_due_date: "ingen ferdigdato" + label_no_start_date: "ingen startdato" label_no_parent_page: "Ingen overordnet side" label_nothing_display: "Ingenting å vise" label_nobody: "ingen" @@ -2236,7 +2236,7 @@ label_project_latest: "Siste prosjekter" label_project_default_type: "Tillatt tom type" label_project_hierarchy: "Prosjekthierarki" - label_project_mappings: "Enabled in projects" + label_project_mappings: "Aktivert i prosjekter" label_project_new: "Nytt prosjekt" label_project_plural: "Prosjekter" label_project_list_plural: "Prosjektlister" @@ -2297,7 +2297,7 @@ label_role_search: "Tilordne rolle til nye medlemmer" label_scm: "SCM" label_search: "Søk" - label_search_by_name: "Search by name" + label_search_by_name: "Søk på navn" label_send_information: "Send nye opplysninger til brukeren" label_send_test_email: "Send en testmail" label_session: "Økt" @@ -2410,7 +2410,7 @@ label_work_package_new: "Ny arbeidspakke" label_work_package_edit: "Rediger arbeidspakke %{name}" label_work_package_plural: "Arbeidspakker" - label_work_packages_settings: "Work packages settings" + label_work_packages_settings: "Innstillinger for arbeidspakker" label_work_package_status: "Status for arbeidspakke" label_work_package_status_new: "Ny status" label_work_package_status_plural: "Statuser for arbeidspakke" @@ -2418,7 +2418,7 @@ label_work_package_tracking: "Sporing av arbeidspakke" label_work_package_view_all: "Vis alle arbeidspakker" label_workflow: "Arbeidsflyt" - label_workflow_copy: "Copy workflow" + label_workflow_copy: "Kopier arbeidsflyt" label_workflow_plural: "Arbeidsflyt" label_workflow_summary: "Sammendrag" label_working_days_and_hours: "Arbeidsdager og timer" @@ -2670,7 +2670,7 @@ notice_principals_found_multiple: "Det finnes %{number} resultater. \n bruk tab for å fokusere det første resultatet." notice_principals_found_single: "Det er ett resultat. \n Bruk tab for å fokusere det." notice_project_not_deleted: "Prosjektet ble ikke slettet." - notice_project_not_found: "Project not found." + notice_project_not_found: "Prosjektet ble ikke funnet." notice_successful_connection: "Vellykket tilkobling." notice_successful_create: "Opprettelsen var vellykket." notice_successful_delete: "Slettingen var vellykket." @@ -2753,7 +2753,7 @@ permission_edit_own_messages: "Rediger egne meldinger" permission_edit_own_time_entries: "Rediger egne tidsrapporter" permission_edit_project: "Rediger prosjekt" - permission_edit_project_attributes: "Edit project attributes" + permission_edit_project_attributes: "Rediger prosjektattributter" permission_edit_reportings: "Rediger rapporteringer" permission_edit_time_entries: "Rediger tidslogger for andre brukere" permission_edit_timelines: "Rediger tidslinjer" @@ -2804,13 +2804,13 @@ permission_work_package_assigned: "Bli utførende/ansvarlig" permission_work_package_assigned_explanation: "Arbeidspakker kan tildeles brukere og grupper med denne rollen i det respektive prosjektet" permission_view_project_activity: "Vis prosjektaktivitet" - permission_view_project_attributes: "View project attributes" + permission_view_project_attributes: "Vis prosjektattributter" permission_save_bcf_queries: "Lagre BCF-spørringer" permission_manage_public_bcf_queries: "Administrere offentlige BCF-spørringer" permission_edit_attribute_help_texts: "Rediger hjelpetekster for egenskap" permission_manage_public_project_queries: "Administrere offentlige prosjektlister" - permission_view_project_query: "View project query" - permission_edit_project_query: "Edit project query" + permission_view_project_query: "Vis prosjektspørring" + permission_edit_project_query: "Rediger prosjektspørring" placeholders: default: "-" project: @@ -3031,10 +3031,10 @@ setting_default_projects_public: "Nye prosjekter er offentlige som standard" setting_diff_max_lines_displayed: "Maks antall linjeforskjeller som vises" setting_display_subprojects_work_packages: "Vis arbeidspakker for underprosjekter som standard for hovedprosjekter" - setting_duration_format: "Duration format" - setting_duration_format_hours_only: "Hours only" - setting_duration_format_days_and_hours: "Days and hours" - setting_duration_format_instructions: "This defines how Work, Remaining work, and Time spent durations are displayed." + setting_duration_format: "Varighetsformat" + setting_duration_format_hours_only: "Kun timer" + setting_duration_format_days_and_hours: "Dager og timer" + setting_duration_format_instructions: "Dette definerer hvordan arbeid, gjenstående arbeid og varighet på brukt tid vises." setting_emails_footer: "Bunntekst for e-post" setting_emails_header: "Topptekst for e-post" setting_email_login: "Bruk e-post som innlogging" @@ -3047,7 +3047,7 @@ setting_host_name: "Vertsnavn" setting_hours_per_day: "Timer per dag" setting_hours_per_day_explanation: >- - This defines what is considered a "day" when displaying duration in days and hours (for example, if a day is 8 hours, 32 hours would be 4 days). + Dette vil definere hva som anses som en "dag" når varigheten vises i dager og timer (for eksempel hvis dagen er 8 timer, vil 32 timer være 4 dager). setting_invitation_expiration_days: "Aktiverings e-post utløper etter" setting_work_package_done_ratio: "Beregning av fremdrift" setting_work_package_done_ratio_field: "Arbeidsbasert" @@ -3460,7 +3460,7 @@ group: "Gruppe" role: "Rolle" type: "Type" - denied: "You don't have permissions to share %{entities}." + denied: "Du har ikke tillatelser til å dele %{entities}." label_search: "Søk etter brukere for å invitere" label_search_placeholder: "Søk med bruker eller e-postadresse" label_toggle_all: "Veksle melom delinger" @@ -3468,12 +3468,12 @@ share: "Del" text_empty_search_description: "Det er ingen brukere med gjeldende filterkriterier." text_empty_search_header: "Vi kunne ikke finne noen matchende resultater." - text_empty_state_description: "The %{entity} has not been shared with anyone yet." + text_empty_state_description: "%{entity} har ikke blitt delt med noen enda." text_empty_state_header: "Ikke delt" - text_user_limit_reached: "Adding additional users will exceed the current limit. Please contact an administrator to increase the user limit to ensure external users are able to access this %{entity}." + text_user_limit_reached: "Å legge til ekstra brukere vil overskride gjeldende grense. Kontakt en administrator for å øke brukergrensen for å sikre at eksterne brukere har tilgang til %{entity}." text_user_limit_reached_admins: 'Å legge til ekstra brukere overskrider gjeldende grense. oppgradere din plan for å kunne legge til flere brukere.' warning_user_limit_reached: > - Adding additional users will exceed the current limit. Please contact an administrator to increase the user limit to ensure external users are able to access this %{entity}. + Å legge til ekstra brukere vil overskride gjeldende grense. Kontakt en administrator for å øke brukergrensen for å sikre at eksterne brukere har tilgang til %{entity}. warning_user_limit_reached_admin: > Adding additional users will exceed the current limit. Please upgrade your plan to be able to ensure external users are able to access this %{entity}. warning_no_selected_user: "Please select users to share this %{entity} with" diff --git a/config/locales/crowdin/ro.seeders.yml b/config/locales/crowdin/ro.seeders.yml index 6c873e25eb3..14c0e6f3ea9 100644 --- a/config/locales/crowdin/ro.seeders.yml +++ b/config/locales/crowdin/ro.seeders.yml @@ -95,7 +95,7 @@ ro: item_0: name: Project plan item_1: - name: Milestones + name: Etape item_2: name: Tasks item_3: @@ -107,11 +107,11 @@ ro: name: Tablă de bază lists: item_0: - name: Wish list + name: Listă dorinţe item_1: - name: Short list + name: Listă scurtă item_2: - name: Priority list for today + name: Listă priorități pentru astăzi item_3: name: Niciodată parent_child: @@ -145,7 +145,7 @@ ro: name: Pachete de lucru item_6: options: - name: Milestones + name: Etape work_packages: item_0: subject: Start of project diff --git a/config/locales/crowdin/ro.yml b/config/locales/crowdin/ro.yml index 7f38f603415..9ac8132ac4f 100644 --- a/config/locales/crowdin/ro.yml +++ b/config/locales/crowdin/ro.yml @@ -214,8 +214,8 @@ ro: is_required: "Mark the custom field as required. This will make it mandatory to fill in the field when creating new or updating existing resources." is_required_for_project: "Check to enable this attribute and make it required in all projects. It cannot be deactived for individual projects." is_for_all: "Mark the custom field as available in all existing and new projects." - searchable: "Include the field values when using the global search functionality." - searchable_for_project: "Check to make this attribute available as a filter in project lists." + searchable: "Include valorile câmpului atunci când utilizezi funcționalitatea globală de căutare." + searchable_for_project: "Bifează pentru a face acest atribut disponibil sub formă de filtru în listele de proiecte." editable: "Allow the field to be editable by users themselves." admin_only: "Check to make this attribute only visible to administrators. Users without admin rights will not be able to view or edit it." is_filter: > @@ -226,7 +226,7 @@ ro: concatenation: single: "sau" global_search: - placeholder: "Search in %{app_title}" + placeholder: "Caută în %{app_title}" overwritten_tabs: wiki_pages: "Wiki" messages: "Forum" @@ -251,7 +251,7 @@ ro: work_package_attachments: "Pachete de lucru: anexe" work_package_categories: "Pachete de lucru: categorii" work_package_file_links: "Pachete de lucru: legături de fișiere" - work_package_shares: "Work packages: shares" + work_package_shares: "Pachete de lucru: partajări" delete: scheduled: "Ștergerea a fost programată și se efectuează în fundal. Veți fi notificat cu privire la rezultat." schedule_failed: "Proiectul nu poate fi șters: %{errors}" @@ -265,16 +265,16 @@ ro: no_results_title_text: În acest moment nu există proiecte no_results_content_text: Creare proiect nou lists: - active: "Active projects" + active: "Proiecte active" my: "Proiectele mele" - favored: "Favorite projects" - archived: "Archived projects" - shared: "Shared project lists" - my_lists: "My project lists" + favored: "Proiecte favorite" + archived: "Proiecte arhivate" + shared: "Listă proiecte partajate" + my_lists: "Listele mele de proiecte" new: - placeholder: "New project list" + placeholder: "Listă nouă proiecte" delete_modal: - title: "Delete project list" + title: "Șterge listă proiecte" text: "This action will not delete any project the list contains. Are you sure you want to delete this project list?" settings: change_identifier: Schimbă identificatorul @@ -293,7 +293,7 @@ ro: title: "Atributele proiectului" description: 'These project attributes will be displayed in your project overview page under their respective sections. You can enable or disable individual attributes. Project attributes and sections are defined in the administration settings by the administrator of the instance. ' filter: - label: "Search project attribute" + label: "Caută atribut proiect" actions: label_enable_single: "Active in this project, click to disable" label_disable_single: "Inactive in this project, click to enable" @@ -334,15 +334,15 @@ ro: invite_by_mail: "Trimiteți invitația la %{mail}" send_invite_to: "Send invite to" columns: - shared: "Shared" + shared: "Partajate" filters: - all_shares: "All shares" + all_shares: "Toate partajările" menu: all: "Toate" - invited: "Invited" + invited: "Invitat" locked: "Închis" - project_roles: "Project roles" - wp_shares: "Work package shares" + project_roles: "Roluri proiect" + wp_shares: "Partajări pachete de lucru" groups: "Grupuri" delete_member_dialog: title: "Remove member" @@ -671,7 +671,7 @@ ro: project: active_value: true: "nearhivat" - false: "arhivată" + false: "arhivat" identifier: "Identificator" latest_activity_at: "Ultima activitate la" parent: "Subproiect în" @@ -682,14 +682,14 @@ ro: queries: "Interogări" status_code: "Stare proiect" description: "Descriere" - status_explanation: "Project status description" + status_explanation: "Descriere stadiu proiect" status_codes: not_started: "Neînceput" on_track: "În lucru" at_risk: "În pericol" - off_track: "În afara pistei" + off_track: "Deraiat" finished: "Finalizat" - discontinued: "Întrerupere" + discontinued: "Anulat" templated: "Proiect șablon" templated_value: true: "marcat ca șablon" @@ -699,7 +699,7 @@ ro: work_packages: "Pachete de lucru" project_custom_field: is_required: "Required for all projects" - custom_field_section: Section + custom_field_section: Sectiune query: column_names: "Coloane" relations_to_type_column: "Relații cu %{type}" @@ -719,7 +719,7 @@ ro: is_closed: "Pachet de lucru închis" is_readonly: "Pachet de lucru numai pentru citire" excluded_from_totals: "Exclude from calculation of totals in hierarchy" - default_done_ratio: "% Complete" + default_done_ratio: "% Finalizat" time_entry: activity: "Activitate" hours: "Ore" @@ -785,9 +785,9 @@ ro: priority: "Prioritate" progress: "% Complete" readonly: "Doar citire" - remaining_hours: "Remaining work" - remaining_time: "Remaining work" - shared_with_users: "Shared with" + remaining_hours: "Muncă rămasă" + remaining_time: "Muncă rămasă" + shared_with_users: "Partajate cu" schedule_manually: "Programarea manuală" spent_hours: "Timp consumat" spent_time: "Timp consumat" @@ -945,7 +945,7 @@ ro: project_custom_field_project_mapping: attributes: project_ids: - blank: "Please select a project." + blank: "Selectează un proiect." query: attributes: project: @@ -1011,7 +1011,7 @@ ro: status: attributes: default_done_ratio: - inclusion: "must be between 0 and 100." + inclusion: "trebuie să fie între 0 și 100." readonly_default_exlusive: "nu poate fi activată pentru statusurile care sunt marcate ca fiind implicite." time_entry: attributes: @@ -1050,7 +1050,7 @@ ro: must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set." inclusion: "must be between 0 and 100." due_date: - not_start_date: "nu este în data de început, deși acest lucru este necesar pentru repere de etapă." + not_start_date: "nu este în data de început, deși acest lucru este necesar pentru etape." cannot_be_null: "nu poate fi setat la null, deoarece data de începere și durata sunt cunoscute." duration: larger_than_dates: "este mai mare decât intervalul dintre data de început și data de sfârșit." @@ -1058,7 +1058,7 @@ ro: not_available_for_milestones: "nu este disponibil pentru pachetele de lucru tipizate pe etape." cannot_be_null: "nu poate fi setat la null, deoarece data de început și data de sfârșit sunt cunoscute." parent: - cannot_be_milestone: "nu poate fi un reper de etapă." + cannot_be_milestone: "nu poate fi o etapă." cannot_be_self_assigned: "nu poate fi atribuit singur." cannot_be_in_another_project: "nu poate fi într-un alt proiect." not_a_valid_parent: "este invalid." @@ -1354,7 +1354,7 @@ ro: button_edit: "Editare" button_edit_associated_wikipage: "Editare pagină wiki asociată: %{page_title}" button_expand_all: "Extindere totală" - button_favorite: "Add to favorites" + button_favorite: "Adaugă la favorite" button_filter: "Filtrare" button_generate: "Generare" button_list: "Listă" @@ -1382,7 +1382,7 @@ ro: button_unarchive: "Dezarhivare" button_uncheck_all: "Deselecteaza tot" button_unlock: "Deblocare" - button_unfavorite: "Remove from favorites" + button_unfavorite: "Elimină din favorite" button_unwatch: "Stop monitorizare" button_update: "Actualizare" button_upgrade: "Actualizare" @@ -1393,16 +1393,16 @@ ro: button_add_menu_entry: "Adăugare meniu" button_configure_menu_entry: "Configurare meniu" button_delete_menu_entry: "Ștergere meniu" - button_view_shared_work_packages: "View shared work packages" - button_manage_roles: "Manage roles" - button_remove_member: "Remove member" - button_remove_member_and_shares: "Remove member and shares" + button_view_shared_work_packages: "Vezi pachetele de lucru partajate" + button_manage_roles: "Gestionează rolurile" + button_remove_member: "Elimină membru" + button_remove_member_and_shares: "Elimină membrul și partajările" button_revoke_work_package_shares: "Revoke work package shares" - button_revoke_access: "Revoke access" - button_revoke_all: "Revoke all" - button_revoke_only: "Revoke only %{shared_role_name}" - button_publish: "Make public" - button_unpublish: "Make private" + button_revoke_access: "Revocă acces" + button_revoke_all: "Revocă tot" + button_revoke_only: "Revocare doar %{shared_role_name}" + button_publish: "Fă public" + button_unpublish: "Fă privat" consent: checkbox_label: Am luat la cunoștință și consimt la cele de mai sus. failure_message: Consimţământul a eșuat, nu putem continua. @@ -1529,9 +1529,9 @@ ro: few: "%{count} minute" other: "%{count} minute" x_minutes_abbreviated: - one: "1 min" + one: "1 minut" few: "%{count} mins" - other: "%{count} mins" + other: "%{count} minute" x_hours: one: "1 oră" few: "%{count} ore" @@ -1539,11 +1539,11 @@ ro: x_hours_abbreviated: one: "1 hr" few: "%{count} hrs" - other: "%{count} hrs" + other: "%{count} ore" x_weeks: one: "1 week" few: "%{count} weeks" - other: "%{count} weeks" + other: "%{count} săptămâni" x_months: one: "o lună" few: "%{count} luni" @@ -1551,7 +1551,7 @@ ro: x_years: one: "1 an" few: "%{count} years" - other: "%{count} years" + other: "%{count} ani" x_seconds: one: "o secundă" few: "%{count} secunde" @@ -1559,7 +1559,7 @@ ro: x_seconds_abbreviated: one: "1 s" few: "%{count} s" - other: "%{count} s" + other: "%{count} secunde" units: hour: one: "oră" @@ -1611,8 +1611,8 @@ ro: error_can_not_archive_project: "Acest proiect nu poate fi arhivat: %{errors}" error_can_not_delete_entry: "Nu se poate șterge intrarea" error_can_not_delete_custom_field: "Câmpul personalizat nu poate fi șters" - error_can_not_delete_in_use_archived_undisclosed: "There are also work packages in archived projects. You need to ask an administrator to perform the deletion to see which projects are affected." - error_can_not_delete_in_use_archived_work_packages: "There are also work packages in archived projects. You need to reactivate the following projects first, before you can change the attribute of the respective work packages: %{archived_projects_urls}" + error_can_not_delete_in_use_archived_undisclosed: "Există, de asemenea, pachete de lucru în proiecte arhivate. Trebuie să cereți unui administrator să efectueze ștergerea pentru a vedea ce proiecte sunt afectate." + error_can_not_delete_in_use_archived_work_packages: "Există, de asemenea, pachete de lucru în proiecte arhivate. Trebuie să reactivați mai întâi următoarele proiecte, înainte de a putea schimba tipul pachetelor de lucru respective: %{archived_projects_urls}" error_can_not_delete_type: explanation: 'Acest tip conține pachete de lucru și nu poate fi șters. Puteți vedea toate pachetele de lucru afectate în această vizualizare.' error_can_not_delete_standard_type: "Tipurile standard nu pot fi șterse." @@ -1637,7 +1637,7 @@ ro: error_pdf_failed_to_export: "Exportul pdf nu poate fi salvat: %{error}" error_token_authenticity: "Nu se poate verifica tokenul Cross-Site Request Forgery. Ați încercat să trimiteți datele pe mai multe browsere sau tab-uri? Vă rugăm să închideți toate filele și să încercați din nou." error_work_package_not_found_in_project: "Pachetul de lucru nu a fost găsit sau nu aparține acestui proiect" - error_work_package_id_not_found: "The work package was not found." + error_work_package_id_not_found: "Pachetul de lucru nu a fost găsit." error_must_be_project_member: "trebuie să fie membru al proiectului" error_migrations_are_pending: "Instalarea OpenProject are migrări de baze de date în așteptare. Probabil că nu ați reușit să executați migrările la ultima actualizare. Vă rugăm să consultați ghidul de actualizare pentru a vă actualiza corect instalarea." error_migrations_visit_upgrade_guides: "Vă rugăm să vizitați documentația ghidului nostru de actualizare" @@ -1752,7 +1752,7 @@ ro: default_attribute_written: "Read-only attributes written" progress_mode_changed_to_status_based: "Progress calculation updated" status_changed: "Status '%{status_name}'" - system_update: "OpenProject system update:" + system_update: "Actualizare sistem OpenProiect:" cause_descriptions: work_package_predecessor_changed_times: by changes to predecessor %{link} work_package_parent_changed_times: by changes to parent %{link} @@ -1840,7 +1840,7 @@ ro: dateAlert: "Alertă de dată" mentioned: "Menţionat" responsible: "Responsabil" - shared: "Shared" + shared: "Partajat" watched: "Observator" facets: unread: "necitită" @@ -1850,7 +1850,7 @@ ro: menu: by_project: "Necitit după proiect" by_reason: "Descriere" - inbox: "Cutie poștală" + inbox: "Inbox" send_notifications: "Trimite notificări pentru această acțiune" work_packages: subject: @@ -1870,7 +1870,7 @@ ro: label_add_another_file: "Adăugare alt fișier" label_add_columns: "Adăugați coloanele selectate" label_add_note: "Adăugare notă" - label_add_projects: "Add projects" + label_add_projects: "Adaugă proiecte" label_add_related_work_packages: "Adăugare pachet de lucru asociat" label_add_subtask: "Adăugare sub-activitate" label_added: "adăugat" @@ -1911,15 +1911,15 @@ ro: label_ldap_auth_source_plural: "LDAP connections" label_attribute_expand_text: "The complete text for '%{attribute}'" label_authentication: "Autentificare" - label_authentication_settings: "Authentication settings" - label_available_global_roles: "Available global roles" - label_available_project_attributes: "Available project attributes" + label_authentication_settings: "Setări autentificare" + label_available_global_roles: "Roluri globale disponibile" + label_available_project_attributes: "Atribute proiect disponibile" label_available_project_forums: "Forumuri disponibile" label_available_project_repositories: "Arhive disponibile" label_available_project_versions: "Versiuni disponibile" label_available_project_work_package_categories: "Categorii de pachete de lucru disponibile" label_available_project_work_package_types: "Tipuri de pachete de lucru disponibile" - label_available_projects: "Available projects" + label_available_projects: "Proiecte disponibile" label_api_doc: "Documentație API" label_backup: "Backup" label_backup_code: "Cod de rezervă" @@ -1938,7 +1938,7 @@ ro: label_bulk_edit_selected_work_packages: "Editare în masă a pachetelor de lucru selectate" label_bundled: "(la pachet)" label_calendar: "Calendar" - label_calendars_and_dates: "Calendars and dates" + label_calendars_and_dates: "Calendare și dăți" label_calendar_show: "Afișare calendar" label_category: "Categorie" label_consent_settings: "Consimţământul utilizatorului" @@ -2016,7 +2016,7 @@ ro: label_diff_side_by_side: "în paralel" label_digital_accessibility: "Accesibilitate digitală (DE)" label_disabled: "dezactivat" - label_disabled_uppercase: "Disabled" + label_disabled_uppercase: "Dezactivat" label_display: "Afișare" label_display_per_page: "Pe pagină: %{value}" label_display_used_statuses_only: "Afişează doar stările folosite de acest tip" @@ -2109,7 +2109,7 @@ ro: label_introduction_video: "Video de introducere" label_invite_user: "Invitare utilizator" label_share: "Distribuiți" - label_share_project_list: "Share project list" + label_share_project_list: "Distribuie lista de proiecte" label_share_work_package: "Share work package" label_show_hide: "Afișare/ascundere" label_show_hide_n_items: "Show/hide %{count} items" @@ -2185,7 +2185,7 @@ ro: label_more_than_ago: "acum mai mult de zile" label_move_work_package: "Mutare pachet de lucru" label_my_account: "Contul meu" - label_my_activity: "My activity" + label_my_activity: "Activitatea mea" label_my_account_data: "Datele din contul meu" label_my_avatar: "My avatar" label_my_queries: "Interogările mele" @@ -2221,7 +2221,7 @@ ro: label_operator_none: "este gol" label_operator_equals_or: "este (SAU)" label_operator_equals_all: "este (ȘI)" - label_operator_shared_with_user_any: "Oricare" + label_operator_shared_with_user_any: "oricare" label_open_menu: "Deschidere meniu" label_open_work_packages: "deschise" label_open_work_packages_plural: "deschise" @@ -2275,7 +2275,7 @@ ro: label_project_mappings: "Enabled in projects" label_project_new: "Proiect nou" label_project_plural: "Proiecte" - label_project_list_plural: "Project lists" + label_project_list_plural: "Listă proiecte" label_project_attributes_plural: "Atributele proiectului" label_project_custom_field_plural: "Atributele proiectului" label_project_settings: "Setările proiectului" @@ -2302,7 +2302,7 @@ ro: label_relation_delete: "Ștergere relație" label_relation_new: "Relație nouă" label_release_notes: "Note privind lansarea noii versiuni" - label_remaining_work: "Remaining work" + label_remaining_work: "Muncă rămasă" label_remove_columns: "Eliminare coloane selectate" label_renamed: "redenumit" label_reply_plural: "Răspunsuri" @@ -2333,7 +2333,7 @@ ro: label_role_search: "Atribuirea rolului noilor membri" label_scm: "SCM" label_search: "Căutare" - label_search_by_name: "Search by name" + label_search_by_name: "Caută după nume" label_send_information: "Send new credentials to the user" label_send_test_email: "Trimite e-mail de test" label_session: "Sesiune" @@ -2437,7 +2437,7 @@ ro: label_wiki_show_new_page_link: "Afișare submeniu 'Creare pagină copil'" label_wiki_show_submenu_item: "Afișare ca submeniu pentru " label_wiki_start: "Pagină de start" - label_work: "Work" + label_work: "Muncă" label_work_package: "Pachet de lucru" label_work_package_attachments: "Anexe la pachetul de lucru" label_work_package_category_new: "Categorie nouă" @@ -2454,7 +2454,7 @@ ro: label_work_package_tracking: "Urmărire pachete de lucru" label_work_package_view_all: "Toate pachetele de lucru" label_workflow: "Flux de lucru" - label_workflow_copy: "Copy workflow" + label_workflow_copy: "Copiază fluxul de lucru" label_workflow_plural: "Fluxuri de lucru" label_workflow_summary: "Descriere" label_working_days_and_hours: "Working days and hours" @@ -2541,7 +2541,7 @@ ro: assigned: "Alocat" responsible: "Responsabil" mentioned: "Menţionat" - shared: "Shared" + shared: "Partajat" subscribed: "toate" prefix: "Primită din cauza setării de notificare: %{reason}" date_alert_start_date: "Alertă de dată" @@ -2759,9 +2759,9 @@ ro: permission_add_project: "Create projects" permission_add_work_package_attachments: "Adaugă fișiere" permission_add_work_package_attachments_explanation: "Allows adding attachments without Edit work packages permission" - permission_archive_project: "Proiect de arhivă" + permission_archive_project: "Proiect arhivat" permission_create_user: "Create users" - permission_manage_user: "Edit users" + permission_manage_user: "Editează utilizatori" permission_manage_placeholder_user: "Creați, editați și ștergeți utilizatori de tip placeholder" permission_add_subprojects: "Creare subproiecte" permission_add_work_package_watchers: "Adăugare observatori" @@ -2817,20 +2817,20 @@ ro: permission_protect_wiki_pages: "Protejare pagini wiki" permission_rename_wiki_pages: "Redenumire pagini wiki" permission_save_queries: "Salvați vizualizările" - permission_search_project: "Search project" + permission_search_project: "Caută proiect" permission_select_custom_fields: "Selectați câmpurile personalizate" permission_select_project_custom_fields: "Select project attributes" permission_select_project_modules: "Selectare module proiect" permission_share_work_packages: "Share work packages" permission_manage_types: "Selectare tipuri" - permission_view_project: "View projects" + permission_view_project: "Vezi proiecte" permission_view_changesets: "Vizualizare revizii repo în OpenProject" permission_view_commit_author_statistics: "Vizualizare statistici autor înregistrări" - permission_view_dashboards: "View dashboards" + permission_view_dashboards: "Vezi panouri" permission_view_work_package_watchers: "Vizualizare listă observatori" permission_view_work_packages: "Vizualizare pachete de lucru" permission_view_messages: "Vizualizare mesaje" - permission_view_news: "View news" + permission_view_news: "Vezi noutăți" permission_view_members: "Vezi membrii" permission_view_reportings: "Vizualizare raportări" permission_view_shared_work_packages: "View work package shares" @@ -2840,12 +2840,12 @@ ro: permission_view_wiki_pages: "Vizualizare wiki" permission_work_package_assigned: "Deveniți cesionar/responsabil" permission_work_package_assigned_explanation: "Pachetele de lucru pot fi atribuite utilizatorilor și grupurilor care dețin acest rol în proiectul respectiv" - permission_view_project_activity: "View project activity" + permission_view_project_activity: "Vezi activitate proiect" permission_view_project_attributes: "View project attributes" permission_save_bcf_queries: "Save BCF queries" permission_manage_public_bcf_queries: "Manage public BCF queries" permission_edit_attribute_help_texts: "Edit attribute help texts" - permission_manage_public_project_queries: "Manage public project lists" + permission_manage_public_project_queries: "Gestionează listă proiecte publice" permission_view_project_query: "View project query" permission_edit_project_query: "Edit project query" placeholders: @@ -2894,8 +2894,8 @@ ro: member_of_group: "Grupul executantului" name_or_identifier: "Nume sau identificator" only_subproject_id: "Numai subproiect" - shared_with_user: "Shared with users" - shared_with_me: "Shared with me" + shared_with_user: "Partajate cu utilizatorii" + shared_with_me: "Partajate cu mine" subproject_id: "Inclusiv subproiectul" repositories: at_identifier: "la %{identifier}" @@ -3214,7 +3214,7 @@ ro: projects: missing_dependencies: "Project module %{module} was checked which depends on %{dependencies}. You need to check these dependencies as well." section_new_projects: "Setări pentru proiecte noi" - section_project_overview: "Settings for project lists" + section_project_overview: "Setări pentru listă proiecte" session: "Sesiune" user: default_preferences: "Preferințe implicite" @@ -3274,7 +3274,7 @@ ro: text_database_allows_tsv: "Baza de date permite TSVector (opțional)" text_default_administrator_account_changed: "Contul de administrator implicit a fost schimbat" text_default_encoding: "Implicit: UTF-8" - text_destroy: "Ștergere" + text_destroy: "Șterge" text_destroy_with_associated: "Există obiecte suplimentare asociate cu pachetul(ele) de lucru care urmează să fie șters(e). Aceste obiecte sunt de următoarele tipuri:" text_destroy_what_to_do: "Ce vrei să faci?" text_diff_truncated: "... Acest diff a fost trunchiat deoarece depășește dimensiunea maximă care poate fi afișată." @@ -3499,15 +3499,15 @@ ro: role: "Rol" type: "Tip" denied: "You don't have permissions to share %{entities}." - label_search: "Search for users to invite" - label_search_placeholder: "Search by user or email address" + label_search: "Caută utilizatori pentru a invita" + label_search_placeholder: "Caută după utilizator sau adresă de e-mail" label_toggle_all: "Toggle all shares" remove: "Eliminare" share: "Distribuiți" - text_empty_search_description: "There are no users with the current filter criteria." - text_empty_search_header: "We couldn't find any matching results." + text_empty_search_description: "Nu sunt utilizatori cu criteriile curente de filtrare." + text_empty_search_header: "Nu am putut găsi niciun rezultat potrivit." text_empty_state_description: "The %{entity} has not been shared with anyone yet." - text_empty_state_header: "Nu este publică" + text_empty_state_header: "Nepartajat" text_user_limit_reached: "Adding additional users will exceed the current limit. Please contact an administrator to increase the user limit to ensure external users are able to access this %{entity}." text_user_limit_reached_admins: 'Adding additional users will exceed the current limit. Please upgrade your plan to be able to add more users.' warning_user_limit_reached: > @@ -3518,12 +3518,12 @@ ro: warning_locked_user: "The user %{user} is locked and cannot be shared with" user_details: locked: "Locked user" - invited: "Invite sent. " + invited: "Invitație trimisă. " resend_invite: "Resend." invite_resent: "Invite has been resent" not_project_member: "Not a project member" project_group: "Group members might have additional privileges (as project members)" - not_project_group: "Group (shared with all members)" + not_project_group: "Grup (partajat cu toți membrii)" additional_privileges_project: "Might have additional privileges (as project member)" additional_privileges_group: "Might have additional privileges (as group member)" additional_privileges_project_or_group: "Might have additional privileges (as project or group member)" @@ -3539,10 +3539,10 @@ ro: caption: "Everyone can view this project list. Those with global edit permissions can modify it." blank_state: public: - header: "Shared with everyone" + header: "Partajat cu toți" description: "Everyone can view this project list. You can also add individual users with extra permissions." private: - header: "Not shared: Private" + header: "Nepartajat: Privat" description: "This project list has not been shared with anyone yet. Only you can access this list." permissions: view: "Vizualizare" diff --git a/config/locales/crowdin/ru.yml b/config/locales/crowdin/ru.yml index 6dc39594915..03cca643b79 100644 --- a/config/locales/crowdin/ru.yml +++ b/config/locales/crowdin/ru.yml @@ -2826,7 +2826,7 @@ ru: permission_edit_own_messages: "Редактировать свои сообщения" permission_edit_own_time_entries: "Редактировать собственные учетные записи о времени" permission_edit_project: "Редактировать проект" - permission_edit_project_attributes: "Edit project attributes" + permission_edit_project_attributes: "Редактирование атрибутов проекта" permission_edit_reportings: "Редактировать отчеты" permission_edit_time_entries: "Редактировать журналы времени для других пользователей" permission_edit_timelines: "Редактировать графики" @@ -2877,7 +2877,7 @@ ru: permission_work_package_assigned: "Назначиться/стать отвественным" permission_work_package_assigned_explanation: "Пакеты работ могут быть привязаны к пользователям и группам в зависимости от этой роли в рамках соответствующего проекта" permission_view_project_activity: "Просмотр деятельности по проекту" - permission_view_project_attributes: "View project attributes" + permission_view_project_attributes: "Просмотр атрибутов проекта" permission_save_bcf_queries: "Сохранить запросы BCF" permission_manage_public_bcf_queries: "Управление публичными BCF запросами" permission_edit_attribute_help_texts: "Редактировать атрибут справки" diff --git a/config/locales/crowdin/zh-TW.seeders.yml b/config/locales/crowdin/zh-TW.seeders.yml index 46767eb3a80..81a62b7f4d8 100644 --- a/config/locales/crowdin/zh-TW.seeders.yml +++ b/config/locales/crowdin/zh-TW.seeders.yml @@ -99,7 +99,7 @@ zh-TW: item_2: name: 任務 item_3: - name: 團隊規劃 + name: 小組工作企劃 boards: kanban: name: Kanban看板 diff --git a/config/locales/crowdin/zh-TW.yml b/config/locales/crowdin/zh-TW.yml index f902eef6eda..84877d257fc 100644 --- a/config/locales/crowdin/zh-TW.yml +++ b/config/locales/crowdin/zh-TW.yml @@ -207,7 +207,7 @@ zh-TW: enabled_in_project: "已在專案中啟用" contained_in_type: "已包含在類型中" confirm_destroy_option: "刪除一個項目將會一併刪除所有出現這個項目的地方 (例如:在工作項目中)。你確定要刪除它嗎?" - reorder_alphabetical: "按字母順序重新排列值" + reorder_alphabetical: "按字母順序重新排列" reorder_confirmation: "警告:目前可用值的順序將會遺失。繼續嗎?" instructions: is_required: "將此欄位定義成必填。\n" @@ -250,7 +250,7 @@ zh-TW: work_package_attachments: "工作項目:附件" work_package_categories: "工作項目:類別" work_package_file_links: "工作項目:檔案連結" - work_package_shares: "共享之工作項目" + work_package_shares: "共用之工作項目" delete: scheduled: "已經安排背景執行刪除任務。你將會收到結果通知。" schedule_failed: "專案無法刪除: %{errors}" @@ -268,7 +268,7 @@ zh-TW: my: "我的專案" favored: "收藏的專案" archived: "封存專案" - shared: "共享專案清單" + shared: "共用專案清單" my_lists: "我的專案列表" new: placeholder: "新專案清單" @@ -333,38 +333,38 @@ zh-TW: invite_by_mail: "寄發邀請至:%{mail}" send_invite_to: "寄送邀請" columns: - shared: "共享" + shared: "共用" filters: - all_shares: "所有共享的" + all_shares: "所有共用的" menu: all: "全部" invited: "已邀請" locked: "停用" project_roles: "專案角色" - wp_shares: "共享之工作項目" + wp_shares: "共用之工作項目" groups: "群組" delete_member_dialog: title: "移除成員" will_remove_the_users_role: "這將從此專案中移除使用者的角色。" will_remove_the_groups_role: "這將從此專案中移除群組角色。" however_work_packages_shared_with_user_html: - other: "不過, %{shared_work_packages_link} ,也與此使用者共享。" + other: "不過, %{shared_work_packages_link} ,也與此使用者共用。" however_work_packages_shared_with_group_html: - other: "不過, %{shared_work_packages_link} ,也與此群組共享。" + other: "不過, %{shared_work_packages_link} ,也與此群組共用。" remove_work_packages_shared_with_user_too: "已移除專案成員的使用者仍可存取共用工作項目。您也想移除共用嗎?" remove_work_packages_shared_with_group_too: "已移除成員身份的群組仍可存取共用工作套件。您也想移除共用嗎?" will_not_affect_inherited_shares: "(這不會影響與其小組共用的工作項目)。" can_remove_direct_but_not_shared_roles: "您可以刪除該用戶的直接項目成員身份,但他們所在的組也是該項目的成員,因此他們將繼續通過組成為成員。" also_work_packages_shared_with_user_html: - other: "此外,還與該用戶共享了 %{shared_work_packages_link}。" - remove_project_membership_or_work_package_shares_too: "您只想刪除作為直接成員的用戶(保留共享),還是也刪除工作包共享?" + other: "此外,還與該用戶共用了 %{shared_work_packages_link}。" + remove_project_membership_or_work_package_shares_too: "您只想刪除作為直接成員的用戶(保留共用),還是也刪除工作包共享?" will_remove_all_user_access_priveleges: "刪除該成員將移除該專案所有存取權限。但使用者部分專案資料仍然存在。" will_remove_all_group_access_priveleges: "刪除該成員將刪除該組對項目的所有訪問權限。該組仍將作為實例的一部分存在。" cannot_delete_inherited_membership: "您不能刪除此成員,因為他們所屬的組本身就是此項目的成員。" cannot_delete_inherited_membership_note_admin_html: "您可以在 %{administration_settings_link} 中刪除作為項目成員的組或組中的特定成員。" cannot_delete_inherited_membership_note_non_admin: "您可以將該組作為項目成員移除,或者聯繫管理員將該特定成員從組中移除。" delete_work_package_shares_dialog: - title: "撤銷已共享的工作項目" + title: "撤銷已共用的工作項目" shared_with_this_user_html: other: "%{all_shared_work_packages_link} 已與該用戶共享。" shared_with_this_group_html: @@ -474,7 +474,7 @@ zh-TW: is_readonly: "唯讀" excluded_from_totals: "不包括在總計中" themes: - dark: "黑暗(測試版)" + dark: "深色(測試版)" light: "白色主題" light_high_contrast: "高對比白色主題" types: @@ -526,8 +526,8 @@ zh-TW: 目標項目中未啓用工作包的當前類型。如果您希望工作包類型保持不變,請在目標項目中啓用這些類型。否則,請從列表中選擇目標項目中的可用類型。 sharing: missing_workflow_warning: - title: "工作包共享缺少工作流" - message: "沒有為\"工作包編輯者\"角色配置工作流。沒有工作流,共享用戶就無法更改工作包的狀態。工作流可以複製。選擇一個源類型(例如\"任務\")和源角色(例如\"成員\")。然後選擇目標類型。一開始,您可以將所有類型都選擇為目標類型。最後,選擇\"工作包編輯者\"角色作為目標,然後點擊\"複製\"。在創建默認設置之後,像對其他角色一樣進行微調,對工作流進行詳細調整。" + title: "共用工作項目缺少工作流" + message: "沒有為\"工作項目編輯者\"角色配置工作流。沒有工作流,共用用戶就無法更改工作項目的狀態。工作流可以複製。選擇一個類型(例如\"任務\")和角色(例如\"成員\")。然後選擇目標類型。一開始,您可以將所有類型都選擇為目標類型。最後,選擇\"工作項目編輯者\"角色作為目標,然後點擊\"複製\"。在創建預設設置之後,像對其他角色一樣進行微調,對工作流進行詳細調整。" link_message: "在管理中配置工作流。" summary: reports: @@ -713,7 +713,7 @@ zh-TW: type: description: "描述的預設文字" attribute_groups: "" - is_in_roadmap: "在 RoadMap 預設為顯示" + is_in_roadmap: "在藍圖中預設為顯示" is_default: "新專案的預設啟動類型" is_milestone: "里程碑" color: "顏色" @@ -734,10 +734,10 @@ zh-TW: hide_mail: "隱藏我的電子郵件地址" impaired: "協助工具模式" time_zone: "時區" - auto_hide_popups: "自動隱藏成功通知" + auto_hide_popups: "提醒後自動隱藏" warn_on_leaving_unsaved: "離開尚未儲存的工作項目時提示我" theme: "模式 " - mode_guideline: "為了親和性以及方便閱讀性,某些模式將覆蓋自訂主題顏色。對於完整的自訂主題,請選擇 Light 模式。" + mode_guideline: "為了親和性以及方便閱讀性,某些模式將覆蓋自訂主題顏色。對於完整的自訂主題,請選擇白色模式。" version: effective_date: "完成日期" sharing: "分享" @@ -771,7 +771,7 @@ zh-TW: readonly: "唯讀" remaining_hours: "剩餘工作" remaining_time: "剩餘工作" - shared_with_users: "共享對象" + shared_with_users: "共用對象" schedule_manually: "手動排程" spent_hours: "耗時" spent_time: "耗時" @@ -1205,7 +1205,7 @@ zh-TW: author: "作者" base: "一般錯誤:" blocks_ids: "已被限制的工作項目 IDs" - category: "分類" + category: "類別" comment: "留言" comments: "留言" content: "內容" @@ -1301,7 +1301,7 @@ zh-TW: button_clear: "清除" button_click_to_reveal: "點擊顯示" button_close: "關閉" - button_collapse_all: "全部摺疊" + button_collapse_all: "全部收合" button_configure: "設定" button_continue: "繼續" button_copy: "複製" @@ -1357,11 +1357,11 @@ zh-TW: button_add_menu_entry: "新增選單項目" button_configure_menu_entry: "設定選單項目" button_delete_menu_entry: "刪除選單項目" - button_view_shared_work_packages: "檢視共享的工作項目" + button_view_shared_work_packages: "檢視共用的工作項目" button_manage_roles: "管理角色" button_remove_member: "移除成員" - button_remove_member_and_shares: "移除成員及共享" - button_revoke_work_package_shares: "撤銷已共享的工作項目" + button_remove_member_and_shares: "移除成員及共用" + button_revoke_work_package_shares: "撤銷已共用的工作項目" button_revoke_access: "撤銷存取權限" button_revoke_all: "全部撤銷" button_revoke_only: "僅撤銷 %{shared_role_name}" @@ -1670,7 +1670,7 @@ zh-TW: shortcuts: "快捷鍵" blog: "Openproject 部落格" forums: "社群討論區" - newsletter: "安全警報 / 消息" + newsletter: "資通安全通知 / 電子報" image_conversion: imagemagick: "Imagemagick" journals: @@ -1768,7 +1768,7 @@ zh-TW: dateAlert: "到期提醒" mentioned: "被提及" responsible: "負責人" - shared: "共享" + shared: "共用" watched: "監看者" facets: unread: "未讀" @@ -1794,7 +1794,7 @@ zh-TW: label_activate_user: "啟動使用者" label_active_in_new_projects: "在新專案中啟用" label_activity: "活動" - label_add_edit_translations: "增加和編輯翻譯" + label_add_edit_translations: "加入翻譯" label_add_another_file: "新增另一個檔案" label_add_columns: "新增所選欄" label_add_note: "新增註記" @@ -1891,8 +1891,8 @@ zh-TW: label_chronological_order: "由舊排列至新" label_close_versions: "關閉已完成的版本" label_closed_work_packages: "已關閉" - label_collapse: "折疊" - label_collapsed_click_to_show: "已折疊。按一下以顯示" + label_collapse: "收合" + label_collapsed_click_to_show: "已收合。按一下以顯示" label_configuration: 組態 label_comment_add: "新增留言" label_comment_added: "新增內容" @@ -1938,11 +1938,11 @@ zh-TW: label_missing_or_hidden_custom_option: "(缺少值或缺少訪問權限)" label_descending: "降冪" label_details: "詳細資料" - label_development_roadmap: "發展路徑圖" + label_development_roadmap: "開發藍圖" label_diff: "比較" label_diff_inline: "行內" label_diff_side_by_side: "並排" - label_digital_accessibility: "數字可訪問性 (DE)" + label_digital_accessibility: "數位無障礙聲明 (德文)" label_disabled: "已停用" label_disabled_uppercase: "關閉" label_display: "顯示" @@ -1982,7 +1982,7 @@ zh-TW: label_import: "匯入" label_export_to: "也可匯出成" label_expand: "展開" - label_expanded_click_to_collapse: "已擴大。按一下可折疊" + label_expanded_click_to_collapse: "已展開。按一下可收合" label_f_hour: "%{value} 小時" label_f_hour_plural: "%{value} 個小時" label_favorite: "最愛" @@ -2038,7 +2038,7 @@ zh-TW: label_invite_user: "邀請使用者" label_share: "分享" label_share_project_list: "共用專案清單" - label_share_work_package: "共享工作項目" + label_share_work_package: "共用工作項目" label_show_hide: "顯示/隱藏" label_show_hide_n_items: "顯示/隱藏 %{count} 項目" label_show_all_registered_users: "顯示所有註冊使用者" @@ -2229,7 +2229,7 @@ zh-TW: label_relates_to: "相關於" label_relation_delete: "刪除關聯" label_relation_new: "新增關聯" - label_release_notes: "發行備註" + label_release_notes: "發行說明" label_remaining_work: "剩餘工作" label_remove_columns: "移除所選欄" label_renamed: "重新命名" @@ -2250,11 +2250,11 @@ zh-TW: label_revision: "修訂" label_revision_id: "修訂版 %{value}" label_revision_plural: "修訂" - label_roadmap: "路線圖" - label_roadmap_edit: "編輯路線圖 %{name}" - label_roadmap_due_in: "截止於%{value}" - label_roadmap_no_work_packages: "這個版本沒有工作項目" - label_roadmap_overdue: "晚了 %{value}" + label_roadmap: "藍圖" + label_roadmap_edit: "編輯藍圖 %{name}" + label_roadmap_due_in: "%{value} 截止" + label_roadmap_no_work_packages: "此版本沒有工作項目" + label_roadmap_overdue: "%{value} 逾期" label_role_and_permissions: "角色與權限" label_role_new: "新增角色" label_role_plural: "角色" @@ -2295,7 +2295,7 @@ zh-TW: label_system_storage: "儲存空間資訊" label_table_of_contents: "目錄" label_tag: "標記" - label_team_planner: "團隊規劃" + label_team_planner: "小組工作企劃" label_text: "長文字" label_this_month: "本月" label_this_week: "本週" @@ -2338,7 +2338,7 @@ zh-TW: label_version_plural: "版本" label_version_sharing_descendants: "與子專案" label_version_sharing_hierarchy: "有專案階層" - label_version_sharing_none: "非共享的" + label_version_sharing_none: "非共用的" label_version_sharing_system: "有所有的版本" label_version_sharing_tree: "有專案樹" label_videos: "影片" @@ -2467,7 +2467,7 @@ zh-TW: assigned: "指派" responsible: "負責人" mentioned: "被提及" - shared: "共享" + shared: "共用" subscribed: "所有" prefix: "因為通知設定而收到:%{reason}" date_alert_start_date: "日期提醒" @@ -2620,7 +2620,7 @@ zh-TW: notice_locking_conflict: "在此同時,資訊已經被至少一個使用者更新" notice_locking_conflict_additional_information: "更新來自於 %{users}" notice_locking_conflict_reload_page: "請重新載入頁面,檢查所做的更改並重新套用您的更新。" - notice_member_added: 增加至專案的 %{name} + notice_member_added: 新增 %{name} 至專案 notice_members_added: 已加入了 %{number} 個用戶至專案中 notice_member_removed: "%{user} 已從專案移除" notice_member_deleted: "%{user} 已經從專案移除並刪除了" @@ -2816,7 +2816,7 @@ zh-TW: member_of_group: "執行者的群組" name_or_identifier: "名稱或識別碼" only_subproject_id: "只限子專案" - shared_with_user: "與使用者共享" + shared_with_user: "與使用者共用" shared_with_me: "與我共用" subproject_id: "包含子專案" repositories: @@ -3263,7 +3263,7 @@ zh-TW: text_user_invited: 這個使用者已經被邀請而且正在等待註冊。 text_user_wrote: "%{value} 寫道:" text_warn_on_leaving_unsaved: "若離開當前頁面,將遺失此工作項目未儲存的內容。" - text_what_did_you_change_click_to_add_comment: "你改變了甚麼?點擊來新增說明" + text_what_did_you_change_click_to_add_comment: "點擊這裡來說明變更了什麼" text_wiki_destroy_confirmation: "您是否確定要刪除此 wiki 和它所有的內容?" text_wiki_page_destroy_children: "刪除子頁面和所有他們的派生頁面" text_wiki_page_destroy_question: "此頁有 %{descendants} 子頁面和派生頁面。您想進行何種操作?" @@ -3418,24 +3418,24 @@ zh-TW: group: "群組" role: "角色" type: "類型" - denied: "您沒有權限共享 %{entities}。" + denied: "您沒有權限共用 %{entities}。" label_search: "搜尋要邀請的用戶" label_search_placeholder: "以帳號或電子郵件搜尋" - label_toggle_all: "切換到「所有共享的」" + label_toggle_all: "切換到「所有共用的」" remove: "刪除" share: "分享" text_empty_search_description: "沒有符合當前過濾條件的用戶。" text_empty_search_header: "我們找不到任何匹配結果。" - text_empty_state_description: "%{entity} 尚未與任何人共享。" - text_empty_state_header: "非共享的" + text_empty_state_description: "%{entity} 尚未與任何人共用。" + text_empty_state_header: "非共用的" text_user_limit_reached: "添加其他用戶將超出當前限制。請聯繫管理員增加用戶限制,以確保外部用戶能夠訪問 %{entity}。" text_user_limit_reached_admins: '添加更多用戶將超出當前限制。請升級您的計劃,以便添加更多用戶。' warning_user_limit_reached: > 添加其他用戶將超出當前限制。請聯繫管理員增加用戶限制,以確保外部用戶能夠訪問 %{entity}。 warning_user_limit_reached_admin: > 添加其他用戶將超出當前限制。請升級您的計劃,以確保外部用戶能夠訪問 %{entity}。 - warning_no_selected_user: "請選擇要與之共享此 %{entity} 的用戶" - warning_locked_user: "使用者 %{user} 已停用,無法共享" + warning_no_selected_user: "請選擇要與之共用此 %{entity} 的用戶" + warning_locked_user: "使用者 %{user} 已停用,無法共用" user_details: locked: "使用者已停用" invited: "已傳送邀請" @@ -3443,34 +3443,34 @@ zh-TW: invite_resent: "已重傳邀請" not_project_member: "非專案的成員" project_group: "小組成員可能擁有額外權限(作為項目成員)" - not_project_group: "組 (與所有成員共享)" + not_project_group: "組 (與所有成員共用)" additional_privileges_project: "可能有額外的權限(作為項目成員)" additional_privileges_group: "可能有額外的權限(作為組成員)" additional_privileges_project_or_group: "可能有額外的權限(作為項目成員或組成員)" project_queries: publishing_denied: "您沒有公開專案列表的權限。" - access_warning: "用戶只能看到他們有權訪問的項目。共享項目列表不會影響單個項目的權限。" + access_warning: "用戶只能看到他們有權訪問的專案。共用專案列表不會影響單一專案的權限。" user_details: owner: "列表所有者" - can_view_because_public: "已經可以查看,因為列表與所有人共享" + can_view_because_public: "已經可以查看,因為列表與所有人共用" can_manage_public_lists: "可根據全域權限進行編輯" public_flag: label: "通過 %{instance_name} 與大家分享" caption: "每個人都可以查看此項目列表。有全局編輯權限的人可以修改它。" blank_state: public: - header: "共享給所有人" + header: "共用給所有人" description: "每個人都可以查看此項目列表。您也可以添加具有額外權限的個別用戶。" private: - header: "不共享:私有" - description: "此項目列表尚未與任何人共享。只有您可以訪問此列表。" + header: "不共用:私有" + description: "此專案列表尚未與任何人共用。只有您可以訪問此列表。" permissions: view: "檢視" view_description: "可以查看此項目列表。" edit: "編輯" - edit_description: "可以查看、共享和編輯此項目列表。" + edit_description: "可以查看、共用和編輯此專案列表。" upsale: - message: "與單個用戶共享項目列表是一項企業附加功能。" + message: "與單個用戶共用專案列表是一項企業附加功能。" working_days: info: > 在安排工作包時,未選擇的日期將被跳過(且不計入天數)。可以在工作包級別覆蓋這些選項。 diff --git a/modules/avatars/config/locales/crowdin/js-zh-TW.yml b/modules/avatars/config/locales/crowdin/js-zh-TW.yml index a697341b560..8e097bdb39e 100644 --- a/modules/avatars/config/locales/crowdin/js-zh-TW.yml +++ b/modules/avatars/config/locales/crowdin/js-zh-TW.yml @@ -7,8 +7,8 @@ zh-TW: label_choose_avatar: "選擇大頭貼" uploading_avatar: "上傳您的大頭貼。" text_upload_instructions: | - 上傳您自己的 128 x 128 像素自定大頭貼。 較大的文件將被調整大小和裁剪。 - 選擇了圖像後,在上傳之前將顯示您的大頭貼預覽。 + 上傳您自己的 128 x 128 像素自定大頭貼。 較大圖片將被調整大小和裁剪。 + 選擇了圖片後,上傳前將預覽您的大頭貼。 error_image_too_large: "圖片太大。" wrong_file_format: "允許的格式是jpg, png以及gif" empty_file_error: "請上傳一個有效的圖片 (jpg, png, gif)" diff --git a/modules/avatars/config/locales/crowdin/zh-TW.yml b/modules/avatars/config/locales/crowdin/zh-TW.yml index c1de9da26da..fa03abca26f 100644 --- a/modules/avatars/config/locales/crowdin/zh-TW.yml +++ b/modules/avatars/config/locales/crowdin/zh-TW.yml @@ -24,13 +24,13 @@ zh-TW: text_current_avatar: | 以下圖像顯示當前圖像。 text_upload_instructions: | - 上傳您自己的 128 x 128 像素自定大頭貼。 較大的文件將被調整大小和裁剪。 - 選擇了圖像後,在上傳之前將顯示您的大頭貼預覽。 - text_change_gravatar_html: '請轉到%{gravatar_url},將您的郵件設定進去。' + 上傳您自己的 128 x 128 像素自定大頭貼。 較大圖片將被調整大小和裁剪。 + 選擇了圖片後,上傳前將預覽您的大頭貼。 + text_change_gravatar_html: '請連結到%{gravatar_url},將您的郵件設定進去以便使用。' text_your_local_avatar: | OpenProject 允許你上傳自己定義的頭像 text_local_avatar_over_gravatar: | - 如果你有設定,這個自己定義的頭像將會優先用於gravatar上方。 + 如果你有設定,這個自己定義的頭像將會優於gravatar。 text_your_current_gravatar: | 如果你註冊了一個gravatar圖像,OpenProject將使用你的圖像;如果沒有則會使用既有預設的圖像或圖標。 目前的gravatar圖像如下: diff --git a/modules/backlogs/config/locales/crowdin/ro.yml b/modules/backlogs/config/locales/crowdin/ro.yml index e9a739d0003..3df76af35da 100644 --- a/modules/backlogs/config/locales/crowdin/ro.yml +++ b/modules/backlogs/config/locales/crowdin/ro.yml @@ -64,7 +64,7 @@ ro: properties: "Proprietăţi" rebuild: "Reconstruiți" rebuild_positions: "Reconstruiți" - remaining_hours: "Remaining work" + remaining_hours: "Muncă rămasă" remaining_hours_ideal: "Remaining work (ideal)" show_burndown_chart: "Size Chart" story: "Articol" @@ -147,7 +147,7 @@ ro: rb_label_copy_tasks_none: "Nimic" rb_label_copy_tasks_open: "Deschis" rb_label_link_to_original: "Includeți un link către povestea originală" - remaining_hours: "remaining work" + remaining_hours: "muncă rămasă" required_burn_rate_hours: "rata de ardere necesară (ore)" required_burn_rate_points: "rata de ardere necesară (puncte)" todo_work_package_description: "%{summary}: %{url}\n%{description}" diff --git a/modules/bim/config/locales/crowdin/ro.seeders.yml b/modules/bim/config/locales/crowdin/ro.seeders.yml index 7133c3a795d..236a46913a6 100644 --- a/modules/bim/config/locales/crowdin/ro.seeders.yml +++ b/modules/bim/config/locales/crowdin/ro.seeders.yml @@ -103,7 +103,7 @@ ro: item_0: name: Project plan item_1: - name: Milestones + name: Etape item_2: name: Tasks item_3: @@ -147,7 +147,7 @@ ro: name: Pachete de lucru item_6: options: - name: Milestones + name: Etape demo-planning-constructing-project: name: "(Demo) Planning & constructing" status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. @@ -165,7 +165,7 @@ ro: item_0: name: Project plan item_1: - name: Milestones + name: Etape item_2: name: Tasks item_3: @@ -202,7 +202,7 @@ ro: name: Pachete de lucru item_6: options: - name: Milestones + name: Etape work_packages: item_0: subject: Project kick off construction project @@ -419,7 +419,7 @@ ro: item_0: name: Project plan item_1: - name: Milestones + name: Etape item_2: name: Tasks item_3: @@ -459,7 +459,7 @@ ro: name: Pachete de lucru item_6: options: - name: Milestones + name: Etape work_packages: item_0: subject: Project kick off creating BIM model @@ -692,7 +692,7 @@ ro: item_4: name: Project plan item_5: - name: Milestones + name: Etape item_6: name: Tasks item_7: diff --git a/modules/bim/config/locales/crowdin/zh-TW.seeders.yml b/modules/bim/config/locales/crowdin/zh-TW.seeders.yml index e43d7aa3016..c608b85af77 100644 --- a/modules/bim/config/locales/crowdin/zh-TW.seeders.yml +++ b/modules/bim/config/locales/crowdin/zh-TW.seeders.yml @@ -107,7 +107,7 @@ zh-TW: item_2: name: 任務 item_3: - name: 團隊規劃 + name: 小組工作企劃 boards: bcf: name: 簡單的拖放工作流程 @@ -169,7 +169,7 @@ zh-TW: item_2: name: 任務 item_3: - name: 團隊規劃 + name: 小組工作企劃 project-overview: widgets: item_0: @@ -420,7 +420,7 @@ zh-TW: item_2: name: 任務 item_3: - name: 團隊規劃 + name: 小組工作企劃 project-overview: widgets: item_0: @@ -693,7 +693,7 @@ zh-TW: item_6: name: 任務 item_7: - name: 團隊規劃 + name: 小組工作企劃 boards: bcf: name: BCF 問題 diff --git a/modules/gantt/config/locales/crowdin/js-ro.yml b/modules/gantt/config/locales/crowdin/js-ro.yml index c7495050285..3b0521112cb 100644 --- a/modules/gantt/config/locales/crowdin/js-ro.yml +++ b/modules/gantt/config/locales/crowdin/js-ro.yml @@ -2,4 +2,4 @@ ro: js: work_packages: default_queries: - milestones: 'Milestones' + milestones: 'Etape' diff --git a/modules/github_integration/config/locales/crowdin/js-ro.yml b/modules/github_integration/config/locales/crowdin/js-ro.yml index 574fb1e3093..903349edb20 100644 --- a/modules/github_integration/config/locales/crowdin/js-ro.yml +++ b/modules/github_integration/config/locales/crowdin/js-ro.yml @@ -28,7 +28,7 @@ ro: title: "Cereri de extragere" copy_menu: label: Git fragmente - description: Copiați fragmente git în clipboard + description: Copiză fragmente git în clipboard git_actions: branch_name: Nume sucursală commit_message: Mesajul commit-ului diff --git a/modules/grids/config/locales/crowdin/js-ro.yml b/modules/grids/config/locales/crowdin/js-ro.yml index 1193c14c1b9..d6116113862 100644 --- a/modules/grids/config/locales/crowdin/js-ro.yml +++ b/modules/grids/config/locales/crowdin/js-ro.yml @@ -43,8 +43,8 @@ ro: title: 'Subproiecte' no_results: 'Cu subproiecte' project_favorites: - title: 'Favorite projects' - no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' + title: 'Proiecte favorite' + no_results: 'Nu ai niciun proiect favorit. Fă clic pe pictograma cu steluță din tabloul de bord al proiectului pentru a adăuga unul la favorite.' time_entries_current_user: title: 'Timpul meu petrecut' displayed_days: 'Zile afișate în lista de activități a proiectului' diff --git a/modules/grids/config/locales/crowdin/js-zh-TW.yml b/modules/grids/config/locales/crowdin/js-zh-TW.yml index e94c8c66341..a0742b5ef90 100644 --- a/modules/grids/config/locales/crowdin/js-zh-TW.yml +++ b/modules/grids/config/locales/crowdin/js-zh-TW.yml @@ -1,14 +1,14 @@ zh-TW: js: grid: - add_widget: '新增部件' - remove: '移除部件' - configure: '設定部件' + add_widget: '新增小工具' + remove: '移除小工具' + configure: '設定小工具' upsale: text: "某些組件,如工作包圖組件,只在企業版提供。" link: '企業版。' widgets: - missing_permission: "您沒有必要的權限來檢視此部件。" + missing_permission: "您沒有必要的權限來檢視小工具。" custom_text: title: '自訂文字' documents: @@ -66,5 +66,5 @@ zh-TW: work_packages_calendar: title: '行事曆' work_packages_overview: - title: '工作項目概覽' + title: '工作項目總覽' placeholder: '點擊編輯' diff --git a/modules/meeting/config/locales/crowdin/no.yml b/modules/meeting/config/locales/crowdin/no.yml index 68cdad421ab..428726ce074 100644 --- a/modules/meeting/config/locales/crowdin/no.yml +++ b/modules/meeting/config/locales/crowdin/no.yml @@ -122,7 +122,7 @@ agenda_text: "Kopier sakslisten fra det forrige møtet" email: send_emails: "Send e-post" - send_invitation_emails: "Send out invitation emails for all participants." + send_invitation_emails: "Send ut invitasjons-e-post for alle deltakere." open_meeting_link: "Åpent møte" invited: summary: "%{actor} har sendt deg en invitasjon til møtet %{title}" diff --git a/modules/meeting/config/locales/crowdin/ro.yml b/modules/meeting/config/locales/crowdin/ro.yml index 7b1d23c16a6..d98daec1148 100644 --- a/modules/meeting/config/locales/crowdin/ro.yml +++ b/modules/meeting/config/locales/crowdin/ro.yml @@ -116,10 +116,10 @@ ro: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting: %{title}" - attachments: "Copy attachments" - attachments_text: "Copy over all attached files to the new meeting" - agenda: "Copy agenda" + title: "Copiază întâlnirea: %{title}" + attachments: "Copiază atașamentele" + attachments_text: "Copiază peste toate fișierele atașate la noua ședință" + agenda: "Copiază agenda" agenda_text: "Copy the agenda of the old meeting" email: send_emails: "Send emails" diff --git a/modules/reporting/config/locales/crowdin/js-ro.yml b/modules/reporting/config/locales/crowdin/js-ro.yml index e6235344f56..c42108b074f 100644 --- a/modules/reporting/config/locales/crowdin/js-ro.yml +++ b/modules/reporting/config/locales/crowdin/js-ro.yml @@ -22,5 +22,5 @@ ro: js: reporting_engine: - label_remove: "Ștergere" + label_remove: "Șterge" label_response_error: "S-a produs o eroare în tratarea interogării." diff --git a/modules/reporting/config/locales/crowdin/zh-TW.yml b/modules/reporting/config/locales/crowdin/zh-TW.yml index cdc4c403e0e..61c3f7c6d1c 100644 --- a/modules/reporting/config/locales/crowdin/zh-TW.yml +++ b/modules/reporting/config/locales/crowdin/zh-TW.yml @@ -23,7 +23,7 @@ zh-TW: plugin_openproject_reporting: name: "OpenProject 報表" description: "本外掛允許透過OpenProject 時間及成本外掛,建立具篩選及群組的客製化成本報表" - button_save_as: "將報表另存為..。" + button_save_as: "另存報表..." comments: "留言" cost_reports_title: "時間與費用" label_cost_report: "成本報告" diff --git a/modules/storages/config/locales/crowdin/zh-TW.yml b/modules/storages/config/locales/crowdin/zh-TW.yml index 2e48a61c4a3..1f8e2a556b8 100644 --- a/modules/storages/config/locales/crowdin/zh-TW.yml +++ b/modules/storages/config/locales/crowdin/zh-TW.yml @@ -53,7 +53,7 @@ zh-TW: permission_manage_file_links: 管理文件鏈接 permission_manage_files_in_project: 管理專案中的檔案 permission_read_files: '自動管理專案資料夾 : 讀取檔案' - permission_share_files: '自動管理專案資料夾 : 共享檔案' + permission_share_files: '自動管理專案資料夾 : 共用檔案' permission_share_files_explanation: permission_view_file_links: 查看文件鏈接 permission_write_files: '自動管理專案資料夾 : 寫入檔案' diff --git a/modules/team_planner/config/locales/crowdin/js-zh-TW.yml b/modules/team_planner/config/locales/crowdin/js-zh-TW.yml index 813e0bcc5e2..60a861518e9 100644 --- a/modules/team_planner/config/locales/crowdin/js-zh-TW.yml +++ b/modules/team_planner/config/locales/crowdin/js-zh-TW.yml @@ -2,27 +2,27 @@ zh-TW: js: team_planner: - add_existing: '增加已有的' + add_existing: '加入現有工作項目' add_existing_title: '新增現有的工作項目' - create_label: '團隊規劃' - create_title: '建立新的團隊計畫' - unsaved_title: '未命名的團隊計畫' - no_data: '新增執行者來設定您的團隊規劃。' + create_label: '小組工作企劃' + create_title: '建立新的小組工作企劃' + unsaved_title: '未命名的小組工作企劃' + no_data: '新增執行者來設定您的小組工作企劃。' add_assignee: '增加「執行者」' remove_assignee: '刪除執行者' - two_weeks: '兩週' - one_week: '1週' - four_weeks: '4 週' - eight_weeks: '8 週' + two_weeks: '雙週' + one_week: '單週' + four_weeks: '四週' + eight_weeks: '八 週' work_week: '工作週' today: '今日' drag_here_to_remove: '拖曳此處可刪除執行者以及開始和結束日期。' cannot_drag_here: '由於權限或編輯限制,無法刪除工作項目。' cannot_drag_to_non_working_day: '此工作項目無法在非工作日開始/完成。' quick_add: - empty_state: '使用搜尋欄位尋找工作項目並將其拖曳到計劃器中以將其指派給某人並定義開始和結束日期。' + empty_state: '使用搜尋欄位尋找工作項目並將其拖曳到工作企劃中,以便將其指派給某人並定義開始和結束日期。' search_placeholder: '搜尋...' modify: errors: - permission_denied: '您沒有修改此權限所需的權限。' - fallback: '無法編輯工作項目。' + permission_denied: '您沒有修改權限。' + fallback: '此工作項目無法編輯。' diff --git a/modules/team_planner/config/locales/crowdin/zh-TW.yml b/modules/team_planner/config/locales/crowdin/zh-TW.yml index dc0899f9b8a..5ac25eac090 100644 --- a/modules/team_planner/config/locales/crowdin/zh-TW.yml +++ b/modules/team_planner/config/locales/crowdin/zh-TW.yml @@ -1,17 +1,17 @@ #English strings go here zh-TW: plugin_openproject_team_planner: - name: "OpenProject團隊計畫" - description: "提供團隊規劃器視圖。" - permission_view_team_planner: "查看團隊計劃" - permission_manage_team_planner: "管理團隊規劃" - project_module_team_planner_view: "團隊規劃" + name: "OpenProject小組工作企劃" + description: "提供小組工作企劃視圖。" + permission_view_team_planner: "檢視小組工作企劃" + permission_manage_team_planner: "管理「小組工作企劃」" + project_module_team_planner_view: "小組工作企劃" team_planner: - label_team_planner: "團隊規劃" - label_new_team_planner: "新團隊計劃" - label_create_new_team_planner: "建立新的團隊計畫" - label_team_planner_plural: "團隊規劃" + label_team_planner: "小組工作企劃" + label_new_team_planner: "新小組工作企劃" + label_create_new_team_planner: "建立新的小組工作企劃" + label_team_planner_plural: "小組工作企劃" label_assignees: "執行者" upsale: - title: "團隊規劃" - description: "使用 Team Planner 全面了解您的團隊規劃。 拉伸、縮短和拖放工作包以修改日期、移動日期或更改受讓人。" + title: "小組工作企劃" + description: "使用「小組工作企劃」全面閱覽了解您的小組工作內容。 縮放、拖曳工作項目以便調整日期、移動日期或更改執行者。" diff --git a/modules/two_factor_authentication/config/locales/crowdin/zh-CN.yml b/modules/two_factor_authentication/config/locales/crowdin/zh-CN.yml index 6754d52a445..ec568c2e292 100644 --- a/modules/two_factor_authentication/config/locales/crowdin/zh-CN.yml +++ b/modules/two_factor_authentication/config/locales/crowdin/zh-CN.yml @@ -118,10 +118,10 @@ zh-CN: 2fa_from_webauthn: 请提供 WebAuthn 设备 %{device_name}.如果是 USB 设备,请确保插入并使用它。然后点击登录按钮。 webauthn: title: "WebAuthn 认证" - description: Register a FIDO2 device (like YubiKey) or the secure encalve of your mobile device. + description: 注册一个 FIDO2 设备 (如Yubikey) 或您移动设备的安全处理器。 further_steps: 选择名称后,可以点击“继续”按钮。浏览器将提示您出示 WebAuthn 设备。完成后,设备注册即告完成。 totp: - title: "App-based authenticator" + title: "基于应用程序的身份验证" provisioning_uri: "配置 URI" secret_key: "密钥" time_based: "基于时间" @@ -134,13 +134,13 @@ zh-CN: text_cannot_scan: | 如果您无法扫描二维码,可以使用下列详细信息手动输入条目: description: | - Use a one-time code generated by an authenticator like Authy or Google Authenticator. + 使用由身份验证器生成的一次性代码,如 Authy 或 Google 身份验证器。 sms: - title: "Mobile device" + title: "移动设备" redacted_identifier: "移动设备 (%{redacted_number})" request_2fa_identifier: "%{redacted_identifier},我们通过 %{delivery_channel} 向您发送了一个身份验证代码" description: | - Receive 2FA code via a text message on your phone each time you log in. + 每次登录时,通过您手机上的短信接收 2FA 代码。 sns: delivery_failed: "SNS 传送失败:" message_bird: diff --git a/modules/two_factor_authentication/config/locales/crowdin/zh-TW.yml b/modules/two_factor_authentication/config/locales/crowdin/zh-TW.yml index 3ad80440534..02edcae7ed1 100644 --- a/modules/two_factor_authentication/config/locales/crowdin/zh-TW.yml +++ b/modules/two_factor_authentication/config/locales/crowdin/zh-TW.yml @@ -65,7 +65,7 @@ zh-TW: error_invalid_settings: "您選擇的2FA 策略無效" failed_to_save_settings: "未能更新2FA 設置: %{message}" admin: - self_edit_path: "要添加或修改您自己的2FA 設備, 請轉到 %{self_edit_link}" + self_edit_path: "要添加或修改您自己的2FA 設備, 請連結到 %{self_edit_link}" self_edit_link_name: "雙重驗證於您的帳號頁面" self_edit_forbidden: "無法於此路徑編輯您擁有的2FA設備.請至 我的帳號 > 雙重認證." no_devices_for_user: "沒有為該使用者註冊的 2FA 設備。" @@ -116,10 +116,10 @@ zh-TW: 2fa_from_webauthn: 請提供支援「 WebAuthn」裝置 %{device_name}. 如果是USB設備,請確定插入以及觸碰驗證後,再點選登入按鈕。 webauthn: title: "WebAuthn" - description: Register a FIDO2 device (like YubiKey) or the secure encalve of your mobile device. + description: 註冊 FIDO2 設備(如 YubiKey)或行動裝置的安全區域。 further_steps: 選擇名稱後,可以點擊“繼續”按鈕。瀏覽器將提示您出示 WebAuthn 設備。完成後,設備註冊即告完成。 totp: - title: "App-based authenticator" + title: "基於應用程式的身份驗證器" provisioning_uri: "分配的URI" secret_key: "密鑰" time_based: "基於時間" @@ -132,13 +132,13 @@ zh-TW: text_cannot_scan: | 如果無法掃描代碼,您可以使用下列詳細資訊手動輸入項目: description: | - Use a one-time code generated by an authenticator like Authy or Google Authenticator. + 使用由 Authy 或 Google Authenticator 等身份驗證器產生的一次性程式碼。 sms: - title: "Mobile device" + title: "行動裝置" redacted_identifier: "行動裝置 (%{redacted_number})" request_2fa_identifier: "%{redacted_identifier}, 我們經由 %{delivery_channel} 向您發送了驗證碼" description: | - Receive 2FA code via a text message on your phone each time you log in. + 每次登入時,您都會透過手機簡訊接收 2FA 代碼。 sns: delivery_failed: "SNS 傳送失敗:" message_bird: From 3f36be818fe8cfaf021f48c187a401933bf7fac8 Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Fri, 16 Aug 2024 03:08:35 +0000 Subject: [PATCH 31/45] update locales from crowdin [ci skip] --- config/locales/crowdin/js-ro.yml | 52 +++--- config/locales/crowdin/js-zh-TW.yml | 36 ++-- config/locales/crowdin/no.yml | 72 +++---- config/locales/crowdin/ro.seeders.yml | 10 +- config/locales/crowdin/ro.yml | 176 +++++++++--------- config/locales/crowdin/ru.yml | 4 +- config/locales/crowdin/zh-TW.seeders.yml | 2 +- config/locales/crowdin/zh-TW.yml | 116 ++++++------ .../config/locales/crowdin/js-zh-TW.yml | 4 +- .../avatars/config/locales/crowdin/zh-TW.yml | 8 +- .../backlogs/config/locales/crowdin/ro.yml | 4 +- .../bim/config/locales/crowdin/ro.seeders.yml | 14 +- .../config/locales/crowdin/zh-TW.seeders.yml | 8 +- .../gantt/config/locales/crowdin/js-ro.yml | 2 +- .../config/locales/crowdin/js-ro.yml | 2 +- .../grids/config/locales/crowdin/js-ro.yml | 4 +- .../grids/config/locales/crowdin/js-zh-TW.yml | 10 +- modules/meeting/config/locales/crowdin/no.yml | 2 +- modules/meeting/config/locales/crowdin/ro.yml | 8 +- .../config/locales/crowdin/js-ro.yml | 2 +- .../config/locales/crowdin/zh-TW.yml | 2 +- .../storages/config/locales/crowdin/zh-TW.yml | 2 +- .../config/locales/crowdin/js-zh-TW.yml | 24 +-- .../config/locales/crowdin/zh-TW.yml | 22 +-- .../config/locales/crowdin/zh-TW.yml | 2 +- 25 files changed, 294 insertions(+), 294 deletions(-) diff --git a/config/locales/crowdin/js-ro.yml b/config/locales/crowdin/js-ro.yml index a89e1f820f3..89ed0a99396 100644 --- a/config/locales/crowdin/js-ro.yml +++ b/config/locales/crowdin/js-ro.yml @@ -26,7 +26,7 @@ ro: loading: "Încărcare…" updating: "Actualizare…" attachments: - delete: "Ștergere atașament" + delete: "Șterge atașament" delete_confirmation: | Sunteți sigur că doriți să ștergeți acest fișier? Această acțiune nu este reversibilă. draggable_hint: | @@ -71,13 +71,13 @@ ro: button_configure-form: "Configurați formularul" button_confirm: "Confirmă" button_continue: "Continuaţi" - button_copy: "Copiere" - button_copy_to_clipboard: "Copiere în clipboard" - button_copy_link_to_clipboard: "Copy link to clipboard" + button_copy: "Copiază" + button_copy_to_clipboard: "Copiză în clipboard" + button_copy_link_to_clipboard: "Copiază link-ul în clipboard" button_copy_to_other_project: "Copiază în alt proiect" button_custom-fields: "Câmpuri personalizate" - button_delete: "Ștergere" - button_delete_watcher: "Ştergere observator" + button_delete: "Șterge" + button_delete_watcher: "Şterge observator" button_details_view: "Vizualizare detaliată" button_duplicate: "Duplicare" button_edit: "Editare" @@ -377,7 +377,7 @@ ro: token_name_label: "Where will you be using this?" token_name_placeholder: 'Type a name, e.g. "Phone"' token_name_description_text: 'If you subscribe to this calendar from multiple devices, this name will help you distinguish between them in your access tokens list.' - copy_url_label: "Copy URL" + copy_url_label: "Copiază URL-ul" ical_generation_error_text: "An error occured while generating the calendar URL." success_message: 'The URL "%{name}" was successfully copied to your clipboard. Paste it in your calendar client to complete the subscription.' label_activate: "Activare" @@ -436,7 +436,7 @@ ro: label_expand_project_menu: "Deschideți meniul proiectului" label_export: "Exportare" label_export_preparing: "Exportul este în curs de pregătire și va fi descărcat în curând." - label_favorites: "Favorites" + label_favorites: "Favorite" label_filename: "Fișier" label_filesize: "Dimensiune" label_general: "General" @@ -488,7 +488,7 @@ ro: label_per_page: "Pe pagină:" label_please_wait: "Așteptați" label_project: "Proiect" - label_project_list: "Project lists" + label_project_list: "Listă proiecte" label_project_plural: "Proiecte" label_visibility_settings: "Setări de vizibilitate" label_quote_comment: "Citare comentariu" @@ -558,7 +558,7 @@ ro: label_formattable_attachment_hint: "Atașați și legați fișiere prin plasarea în acest câmp sau prin lipirea din clipboard." label_remove_file: "Ştergere %{fileName}" label_remove_watcher: "Eliminare observator %{name}" - label_remove_all_files: Ştergeţi toate fişierele + label_remove_all_files: Şterge toate fişierele label_add_description: "Adăugați o descriere pentru %{file}" label_upload_notification: "Se încarcă fișierele..." label_work_package_upload_notification: "Fişierele pentru pachetul de lucru #%{id}: %{subject} sunt în curs de încărcare" @@ -625,9 +625,9 @@ ro: processed: "Processed" prioritized: "Prioritized" dateAlert: "Alertă de dată" - shared: "Shared" + shared: "Partajat" date_alerts: - milestone_date: "Data etapa" + milestone_date: "Dată etapă" overdue: "Restanțe" overdue_since: "din %{difference_in_days}" property_today: "este astăzi" @@ -658,7 +658,7 @@ ro: empty_state: no_notification: "Se pare că v-ați pus la punct." no_notification_with_current_project_filter: "Se pare că v-ați pus la punct cu proiectul selectat." - no_notification_with_current_filter: "Se pare că v-ați pus la punct pentru filtrul %{filter}." + no_notification_with_current_filter: "Se pare că ești la zi cu filtrul %{filter}." no_selection: "Faceți clic pe o notificare pentru a vizualiza toate detaliile activității." new_notifications: message: "Există notificări noi." @@ -685,7 +685,7 @@ ro: description: "Primește o notificare de fiecare dată când cineva mă menționează oriunde" assignee: "Responsabil" responsible: "Responsabil" - shared: "Shared" + shared: "Partajat" watched: "Observator" work_package_commented: "Toate comentariile noi" work_package_created: "Pachete de lucru noi" @@ -729,7 +729,7 @@ ro: Vă rugăm să alegeți un proiect în care să creați pachetul de lucru pentru a vedea toate atributele. Puteți selecta numai proiectele care au tipul de mai sus activat. details_activity: "Activitate detalii proiect" context: "Contextul proiectului" - click_to_switch_to_project: "Project: %{projectname}" + click_to_switch_to_project: "Proiect: %{projectname}" confirm_template_load: "Schimbarea șablonului va reîncărca pagina și veți pierde toate datele introduse în acest formular. Continuați?" use_template: "Utilizează șablon" no_template_selected: "(Nimic)" @@ -960,7 +960,7 @@ ro: header_with_parent: "Nou %{type} (copilul %{parent_type} #%{id})" button: "Creare" copy: - title: "Copiere pachet de lucru" + title: "Copiză pachet de lucru" hierarchy: show: "Afișați modul ierarhic" hide: "Ascundeți modul ierarhic" @@ -1011,7 +1011,7 @@ ro: workAlternative: "Durata estimată" remainingTime: "Remaining work" default_queries: - manually_sorted: "New manually sorted query" + manually_sorted: "Interogare nouă sortată manual" latest_activity: "Activitate recentă" created_by_me: "Creat de mine" assigned_to_me: "Atribuit mie" @@ -1019,8 +1019,8 @@ ro: all_open: "Toate deschise" overdue: "Restanțe" summary: "Descriere" - shared_with_users: "Shared with users" - shared_with_me: "Shared with me" + shared_with_users: "Partajate cu utilizatorii" + shared_with_me: "Partajate cu mine" jump_marks: pagination: "Salt la paginarea tabelului" label_pagination: "Click aici pentru a sări peste tabelul cu pachete de lucru și a ajunge la paginare" @@ -1128,31 +1128,31 @@ ro: visibility_settings: "Setări de vizibilitate" share_calendar: "Subscribe to calendar" page_settings: "Redenumire" - delete: "Ștergere" + delete: "Șterge" filter: "Filtrare" unselected_title: "Pachet de lucru" search_query_label: "Căutați vizualizări salvate" modals: label_name: "Nume" - label_delete_page: "Ştergeți pagina curentă" + label_delete_page: "Şterge pagina curentă" button_apply: "Salvare" button_save: "Salvare" button_submit: "Trimitere" button_cancel: "Anulare" - button_delete: "Ștergere" + button_delete: "Șterge" form_submit: title: "Confirmați pentru a continua" text: "Sunteți sigur/ă că doriți să realizați această acțiune?" destroy_work_package: title: "Confirmați ștergerea %{label}" - single_text: "Sunteți sigur că doriți să ștergeți pachetul de lucru" - bulk_text: "Sunteți sigur că doriți să ștergeți următoarele %{label}?" + single_text: "Ești sigur că vrei să ștergi pachetul de lucru" + bulk_text: "Ești sigur că vrei să ștergi următoarele %{label}?" has_children: "Pachetul de lucru conține %{childUnits}:" confirm_deletion_children: "Recunosc că TOȚI descendenții pachetelor de lucru enumerate vor fi eliminați în mod recursiv." deletes_children: "De asemenea, toate pachetele de lucru minore și descendenții acestora vor fi șterse în mod recursiv." destroy_time_entry: title: "Confirmarea ștergerii înregistrării timpului" - text: "Sunteți sigur că doriți să ștergeți următoarea înregistrare a timpului?" + text: "Ești sigur că vrei să ștergi următoarea înregistrare a timpului?" notice_no_results_to_display: "Fara rezultate vizibile de afisat." notice_successful_create: "Creare reuşită." notice_successful_delete: "Ştergere reuşită." @@ -1208,7 +1208,7 @@ ro: close_search: "Inchide cautarea" current_project_and_all_descendants: "In acest proiect + subproiecte" current_project: "In acest proiect" - recently_viewed: "Recently viewed" + recently_viewed: "Vizualizate recent" search: "Căutare" title: all_projects: "toate proiectele" diff --git a/config/locales/crowdin/js-zh-TW.yml b/config/locales/crowdin/js-zh-TW.yml index 00e92408daa..44537da4adb 100644 --- a/config/locales/crowdin/js-zh-TW.yml +++ b/config/locales/crowdin/js-zh-TW.yml @@ -372,7 +372,7 @@ zh-TW: title: "訂閱日曆" inital_setup_error_message: "更新資料時發生錯誤" description: "您可以使用 URL (iCalendar) 在外部客戶端中訂閱此日曆,並從外部客戶端查看最新工作包信息。" - warning: "請不要與其他用戶共享此 URL 。擁有這個鏈接的任何人都可以在沒有帳戶或密碼的情況下查看工作包的詳細信息。" + warning: "請不要與其他用戶共用此 URL 。擁有這個鏈接的任何人都可以在沒有帳戶或密碼的情況下查看工作包的詳細信息。" token_name_label: "您將在哪裡使用它?" token_name_placeholder: '輸入名稱,例如“Phone”' token_name_description_text: '如果您從多個設備訂閱此日曆,此名稱將有助於在訪問權杖列表中區分它們。' @@ -446,7 +446,7 @@ zh-TW: label_group_plural: "群組" label_hide_attributes: "簡略" label_hide_column: "隱藏欄位" - label_hide_project_menu: "折疊專案選單" + label_hide_project_menu: "收合專案選單" label_in: "於" label_in_less_than: "少於" label_in_more_than: "多於" @@ -489,7 +489,7 @@ zh-TW: label_project: "專案" label_project_list: "列出專案" label_project_plural: "專案" - label_visibility_settings: "可見度設定" + label_visibility_settings: "公開設定" label_quote_comment: "引述這個留言" label_recent: "最近" label_reset: "重置" @@ -499,7 +499,7 @@ zh-TW: label_remove_row: "移除列" label_report: "報表" label_repository_plural: "版本庫" - label_save_as: "保存為" + label_save_as: "另存為" label_search_columns: "選取欄位" label_select_project: "選擇專案" label_select_watcher: "選擇監看者" @@ -605,11 +605,11 @@ zh-TW: gantt_menu: "使用甘特圖模塊輕鬆創建項目時間表和時間線。" timeline: "您可以在此編輯您的項目計劃、創建新的工作包(例如任務、里程碑、階段等)以及添加依賴項。所有團隊成員都可以隨時查看和更新最新計劃。" team_planner: - overview: "工作組規劃器使您可以直觀地為團隊成員分配任務,並全面瞭解哪些成員正在處理哪些工作。" - calendar: "單周或雙周規劃面板可以顯示分配給您的團隊成員的所有工作包。" - add_assignee: "首先,請將受理人添加到工作組規劃器。" - add_existing: "搜索現有工作包並將其拖動到工作組規劃器,以立即將其分配給團隊成員並定義開始日期和結束日期。" - card: "水平拖動工作包以前移或後移其時間,拖動邊緣以更改開始日期和結束日期,甚至可以將其垂直拖動到不同的行以分配給其他成員。" + overview: "小組工作企劃使您可以直觀地為小組成員分配任務,並全面瞭解哪些成員正在處理哪些工作。" + calendar: "單周或雙周規劃面版,可以顯示分配給您的小組成員的所有工作項目。" + add_assignee: "首先,請將執行者新增到小組工作企劃。" + add_existing: "搜索現有工作項目並將其拖動到小組工作企劃中,立即將其分配給小組成員並規定開始日期和結束日期。" + card: "水平拖動工作項目前後移其時間,拖曳可更改開始日期和結束日期,甚至可以將其垂直拖動到不同的行以分配給其他成員。" notifications: title: "通知" no_unread: "無未讀通知" @@ -624,7 +624,7 @@ zh-TW: processed: "已處理" prioritized: "已優先" dateAlert: "日期提醒" - shared: "共享" + shared: "共用" date_alerts: milestone_date: "里程碑日期" overdue: "逾期" @@ -682,7 +682,7 @@ zh-TW: description: "每當有人提及我時都收到通知" assignee: "執行者" responsible: "負責人" - shared: "共享" + shared: "共用" watched: "監看者\n" work_package_commented: "有新留言" work_package_created: "新增工作項目" @@ -694,7 +694,7 @@ zh-TW: title: "參與中" description: "你參與的工作項目中所有活動的通知(執行者、負責人或監看者)。" delayed: - title: "非參與中" + title: "未參與之工作項目" description: "額外通知" date_alerts: title: "日期提醒" @@ -894,7 +894,7 @@ zh-TW: wiki_link: "連結到一個 Wiki 頁面" image: "圖片" sharing: - share: "共享" + share: "共用" selected_count: "已選取 %{count} 個" selection: mixed: "混合" @@ -1055,10 +1055,10 @@ zh-TW: is_parent: "此工作包的日期會自動從其子項推導出。可啟用“手動計劃”來設置日期。" is_switched_from_manual_to_automatic: "由於與其他工作包的關係,在從手動計劃切換為自動計劃後,此工作包的日期可能需要重新計算。" sharing: - title: "共享工作項目" - show_all_users: "顯示與之共享工作包的所有用戶" + title: "共用工作項目" + show_all_users: "顯示與之共用工作項目的所有用戶" upsale: - description: "與不是專案成員的使用者共享工作項目。" + description: "與不是專案成員的使用者共用工作項目。" table: configure_button: "設定工作項目" summary: "由工作項目和工作項目屬性列組成的表格。" @@ -1074,7 +1074,7 @@ zh-TW: display_settings: "顯示設定" default_mode: "展開清單" hierarchy_mode: "階層" - hierarchy_hint: "所有已篩選的資料與其來源將一起優化。階層可以展開和折疊。" + hierarchy_hint: "所有已篩選的資料與其來源將一起優化。階層可以展開和收合。" display_sums_hint: "在表格結果下方的一行中顯示總和。" show_timeline_hint: "在表格的右側顯示互動式甘特圖。可以通過在表和甘特圖之間拖動分隔線來更改其寬度。" highlighting: "強調" @@ -1122,7 +1122,7 @@ zh-TW: save: "儲存" save_as: "另存為" export: "匯出" - visibility_settings: "可見度設定" + visibility_settings: "公開設定" share_calendar: "訂閱日曆" page_settings: "重新命名版面" delete: "删除" diff --git a/config/locales/crowdin/no.yml b/config/locales/crowdin/no.yml index d9e411e0e39..1bdf6239f27 100644 --- a/config/locales/crowdin/no.yml +++ b/config/locales/crowdin/no.yml @@ -400,8 +400,8 @@ new_access_token_dialog_text: "Dette tokenet tillater tredjepartsprogrammer å kommunisere med forekomsten. For å differensiere den nye API-token, vennligst gi den et navn." new_access_token_dialog_attention_text: "Behandle API-token som passord. Alle med denne lenken vil ha tilgang til informasjon fra denne forekomsten, del den bare med pålitelige brukere." failed_to_reset_token: "Tilgangstoken kunne ikke tilbakestilles: %{error}" - failed_to_create_token: "Failed to create access token: %{error}" - failed_to_revoke_token: "Failed to revoke access token: %{error}" + failed_to_create_token: "Tilgangsnøkkelen kunne ikke opprettes: %{error}" + failed_to_revoke_token: "Kunne ikke oppheve tilgangstoken: %{error}" notice_reset_token: "En ny %{type} token har blitt generert. Din tilgangstoken er:" token_value_warning: "Merk: Du vil ikke kunne se denne token på nytt, sørg for å kopiere den nå." no_results_title_text: Det er ingen tilgangsnøkler tilgjengelig. @@ -527,9 +527,9 @@ no_common_statuses_exists: "Det er ingen status tilgjengelig for alle valgte arbeidspakker. Status kan ikke endres." unsupported_for_multiple_projects: "Bulk flytt/kopi er ikke støttet for arbeidspakker fra flere prosjekter" current_type_not_available_in_target_project: > - The current type of the work package is not enabled in the target project. Please enable the type in the target project if you'd like it to remain unchanged. Otherwise, select an available type in the target project from the list. + Den gjeldende typen arbeidspakke er ikke aktivert i målprosjektet. Vennligst aktiver typen i målprosjektet hvis du ønsker det uforandret. Ellers velger du en tilgjengelig type i målprosjektet fra listen. bulk_current_type_not_available_in_target_project: > - The current types of the work packages aren't enabled in the target project. Please enable the types in the target project if you'd like them to remain unchanged. Otherwise, select an available type in the target project from the list. + De gjeldende typene av arbeidspakker er ikke aktivert i målprosjektet. Aktiver typen i målprosjektet hvis du ønsker at de forblir uendret. Ellers velger du en tilgjengelig type i målprosjektet fra listen. sharing: missing_workflow_warning: title: "Arbeidsflyt mangler for deling av arbeidspakker" @@ -708,7 +708,7 @@ is_closed: "Arbeidspakke lukket" is_readonly: "Arbeidspakken er skrivebeskyttet" excluded_from_totals: "Unnta fra beregning av totaler i hierarki" - default_done_ratio: "% Complete" + default_done_ratio: "% Ferdig " time_entry: activity: "Aktivitet" hours: "Timer" @@ -742,7 +742,7 @@ auto_hide_popups: "Auto-skjul suksessvarsler" warn_on_leaving_unsaved: "Varsle meg når jeg forlater en arbeidspakke med ulagrede endringer" theme: "Modus" - mode_guideline: "Some modes will overwrite custom theme colours for accessibility and legibility. For the full custom theme, please select Light mode." + mode_guideline: "Noen moduser vil overskrive tilpassede temafarger for tilgjengelighet og leselighet. For å få fullstendig tilpasset tema, velg lys modus." version: effective_date: "Sluttdato" sharing: "Deling" @@ -934,7 +934,7 @@ project_custom_field_project_mapping: attributes: project_ids: - blank: "Please select a project." + blank: "Velg et prosjekt." query: attributes: project: @@ -1000,7 +1000,7 @@ status: attributes: default_done_ratio: - inclusion: "must be between 0 and 100." + inclusion: "må være mellom 0 og 100." readonly_default_exlusive: "kan ikke aktiveres for statuser som er merket som standard." time_entry: attributes: @@ -1647,11 +1647,11 @@ image: omitted: "Bilde ikke eksportert." macro: - error: "Macro error, %{message}" - attribute_not_found: "attribute not found: %{attribute}" - model_not_found: "invalid attribute model: %{model}" - resource_not_found: "resource not found: %{resource}" - rich_text_unsupported: "Rich text embedding currently not supported in export" + error: "Makrofeil, %{message}" + attribute_not_found: "attributtet ble ikke funnet: %{attribute}" + model_not_found: "ugyldig attributtmodell: %{model}" + resource_not_found: "ressurs ikke funnet: %{resource}" + rich_text_unsupported: "Rik tekstinnebygging støttes ikke for eksport" units: hours: t days: d @@ -1797,7 +1797,7 @@ shared: "Delt" watched: "Overvåker" menu: - by_project: "Ulest av prosjektet" + by_project: "Ulest etter prosjekt" by_reason: "Grunn" inbox: "Innboks" send_notifications: "Send varsler for denne handlingen" @@ -1819,7 +1819,7 @@ label_add_another_file: "Legg til en annen fil" label_add_columns: "Legg til valgte kolonner" label_add_note: "Legg til et notat" - label_add_projects: "Add projects" + label_add_projects: "Legg til prosjekter" label_add_related_work_packages: "Legg til relaterte arbeidspakker" label_add_subtask: "Legg til underoppgave" label_added: "lagt til" @@ -1860,7 +1860,7 @@ label_ldap_auth_source_plural: "LDAP-forbindelser" label_attribute_expand_text: "Den fullstendige teksten for '%{attribute}'" label_authentication: "Autentisering" - label_authentication_settings: "Authentication settings" + label_authentication_settings: "Autentiseringsinnstillinger" label_available_global_roles: "Tilgjengelige globale roller" label_available_project_attributes: "Tilgjengelige prosjektegenskaper" label_available_project_forums: "Tilgjengelige forum" @@ -2058,10 +2058,10 @@ label_introduction_video: "Introduksjonsvideo" label_invite_user: "Inviter bruker" label_share: "Del" - label_share_project_list: "Share project list" + label_share_project_list: "Del prosjektliste" label_share_work_package: "Del arbeidspakke" label_show_hide: "Vis/Skjul" - label_show_hide_n_items: "Show/hide %{count} items" + label_show_hide_n_items: "Vis/skjul %{count} elementer" label_show_all_registered_users: "Vis alle registrerte brukere" label_journal: "Journal" label_journal_diff: "Sammenligning av beskrivelse" @@ -2219,7 +2219,7 @@ label_project_latest: "Siste prosjekter" label_project_default_type: "Tillatt tom type" label_project_hierarchy: "Prosjekthierarki" - label_project_mappings: "Enabled in projects" + label_project_mappings: "Aktivert i prosjekter" label_project_new: "Nytt prosjekt" label_project_plural: "Prosjekter" label_project_list_plural: "Prosjektlister" @@ -2280,7 +2280,7 @@ label_role_search: "Tilordne rolle til nye medlemmer" label_scm: "SCM" label_search: "Søk" - label_search_by_name: "Search by name" + label_search_by_name: "Søk på navn" label_send_information: "Send nye opplysninger til brukeren" label_send_test_email: "Send en testmail" label_session: "Økt" @@ -2393,7 +2393,7 @@ label_work_package_new: "Ny arbeidspakke" label_work_package_edit: "Rediger arbeidspakke %{name}" label_work_package_plural: "Arbeidspakker" - label_work_packages_settings: "Work packages settings" + label_work_packages_settings: "Innstillinger for arbeidspakker" label_work_package_status: "Status for arbeidspakke" label_work_package_status_new: "Ny status" label_work_package_status_plural: "Statuser for arbeidspakke" @@ -2401,7 +2401,7 @@ label_work_package_tracking: "Sporing av arbeidspakke" label_work_package_view_all: "Vis alle arbeidspakker" label_workflow: "Arbeidsflyt" - label_workflow_copy: "Copy workflow" + label_workflow_copy: "Kopier arbeidsflyt" label_workflow_plural: "Arbeidsflyt" label_workflow_summary: "Sammendrag" label_working_days_and_hours: "Arbeidsdager og timer" @@ -2653,7 +2653,7 @@ notice_principals_found_multiple: "Det finnes %{number} resultater. \n bruk tab for å fokusere det første resultatet." notice_principals_found_single: "Det er ett resultat. \n Bruk tab for å fokusere det." notice_project_not_deleted: "Prosjektet ble ikke slettet." - notice_project_not_found: "Project not found." + notice_project_not_found: "Prosjektet ble ikke funnet." notice_successful_connection: "Vellykket tilkobling." notice_successful_create: "Opprettelsen var vellykket." notice_successful_delete: "Slettingen var vellykket." @@ -2736,7 +2736,7 @@ permission_edit_own_messages: "Rediger egne meldinger" permission_edit_own_time_entries: "Rediger egne tidsrapporter" permission_edit_project: "Rediger prosjekt" - permission_edit_project_attributes: "Edit project attributes" + permission_edit_project_attributes: "Rediger prosjektattributter" permission_edit_reportings: "Rediger rapporteringer" permission_edit_time_entries: "Rediger tidslogger for andre brukere" permission_edit_timelines: "Rediger tidslinjer" @@ -2787,13 +2787,13 @@ permission_work_package_assigned: "Bli utførende/ansvarlig" permission_work_package_assigned_explanation: "Arbeidspakker kan tildeles brukere og grupper med denne rollen i det respektive prosjektet" permission_view_project_activity: "Vis prosjektaktivitet" - permission_view_project_attributes: "View project attributes" + permission_view_project_attributes: "Vis prosjektattributter" permission_save_bcf_queries: "Lagre BCF-spørringer" permission_manage_public_bcf_queries: "Administrere offentlige BCF-spørringer" permission_edit_attribute_help_texts: "Rediger hjelpetekster for egenskap" permission_manage_public_project_queries: "Administrere offentlige prosjektlister" - permission_view_project_query: "View project query" - permission_edit_project_query: "Edit project query" + permission_view_project_query: "Vis prosjektspørring" + permission_edit_project_query: "Rediger prosjektspørring" placeholders: default: "-" project: @@ -3014,10 +3014,10 @@ setting_default_projects_public: "Nye prosjekter er offentlige som standard" setting_diff_max_lines_displayed: "Maks antall linjeforskjeller som vises" setting_display_subprojects_work_packages: "Vis arbeidspakker for underprosjekter som standard for hovedprosjekter" - setting_duration_format: "Duration format" - setting_duration_format_hours_only: "Hours only" - setting_duration_format_days_and_hours: "Days and hours" - setting_duration_format_instructions: "This defines how Work, Remaining work, and Time spent durations are displayed." + setting_duration_format: "Varighetsformat" + setting_duration_format_hours_only: "Kun timer" + setting_duration_format_days_and_hours: "Dager og timer" + setting_duration_format_instructions: "Dette definerer hvordan arbeid, gjenstående arbeid og varighet på brukt tid vises." setting_emails_footer: "Bunntekst for e-post" setting_emails_header: "Topptekst for e-post" setting_email_login: "Bruk e-post som innlogging" @@ -3030,7 +3030,7 @@ setting_host_name: "Vertsnavn" setting_hours_per_day: "Timer per dag" setting_hours_per_day_explanation: >- - This defines what is considered a "day" when displaying duration in days and hours (for example, if a day is 8 hours, 32 hours would be 4 days). + Dette vil definere hva som anses som en "dag" når varigheten vises i dager og timer (for eksempel hvis dagen er 8 timer, vil 32 timer være 4 dager). setting_invitation_expiration_days: "Aktiverings e-post utløper etter" setting_work_package_done_ratio: "Beregning av fremdrift" setting_work_package_done_ratio_field: "Arbeidsbasert" @@ -3443,7 +3443,7 @@ group: "Gruppe" role: "Rolle" type: "Type" - denied: "You don't have permissions to share %{entities}." + denied: "Du har ikke tillatelser til å dele %{entities}." label_search: "Søk etter brukere for å invitere" label_search_placeholder: "Søk med bruker eller e-postadresse" label_toggle_all: "Veksle melom delinger" @@ -3451,12 +3451,12 @@ share: "Del" text_empty_search_description: "Det er ingen brukere med gjeldende filterkriterier." text_empty_search_header: "Vi kunne ikke finne noen matchende resultater." - text_empty_state_description: "The %{entity} has not been shared with anyone yet." + text_empty_state_description: "%{entity} har ikke blitt delt med noen enda." text_empty_state_header: "Ikke delt" - text_user_limit_reached: "Adding additional users will exceed the current limit. Please contact an administrator to increase the user limit to ensure external users are able to access this %{entity}." + text_user_limit_reached: "Å legge til ekstra brukere vil overskride gjeldende grense. Kontakt en administrator for å øke brukergrensen for å sikre at eksterne brukere har tilgang til %{entity}." text_user_limit_reached_admins: 'Å legge til ekstra brukere overskrider gjeldende grense. oppgradere din plan for å kunne legge til flere brukere.' warning_user_limit_reached: > - Adding additional users will exceed the current limit. Please contact an administrator to increase the user limit to ensure external users are able to access this %{entity}. + Å legge til ekstra brukere vil overskride gjeldende grense. Kontakt en administrator for å øke brukergrensen for å sikre at eksterne brukere har tilgang til %{entity}. warning_user_limit_reached_admin: > Adding additional users will exceed the current limit. Please upgrade your plan to be able to ensure external users are able to access this %{entity}. warning_no_selected_user: "Please select users to share this %{entity} with" diff --git a/config/locales/crowdin/ro.seeders.yml b/config/locales/crowdin/ro.seeders.yml index 6c873e25eb3..14c0e6f3ea9 100644 --- a/config/locales/crowdin/ro.seeders.yml +++ b/config/locales/crowdin/ro.seeders.yml @@ -95,7 +95,7 @@ ro: item_0: name: Project plan item_1: - name: Milestones + name: Etape item_2: name: Tasks item_3: @@ -107,11 +107,11 @@ ro: name: Tablă de bază lists: item_0: - name: Wish list + name: Listă dorinţe item_1: - name: Short list + name: Listă scurtă item_2: - name: Priority list for today + name: Listă priorități pentru astăzi item_3: name: Niciodată parent_child: @@ -145,7 +145,7 @@ ro: name: Pachete de lucru item_6: options: - name: Milestones + name: Etape work_packages: item_0: subject: Start of project diff --git a/config/locales/crowdin/ro.yml b/config/locales/crowdin/ro.yml index f16c74bd7c2..0af7db23e9a 100644 --- a/config/locales/crowdin/ro.yml +++ b/config/locales/crowdin/ro.yml @@ -213,7 +213,7 @@ ro: instructions: is_required: "Mark the custom field as required. This will make it mandatory to fill in the field when creating new or updating existing resources." is_for_all: "Mark the custom field as available in all existing and new projects." - searchable: "Include the field values when using the global search functionality." + searchable: "Include valorile câmpului atunci când utilizezi funcționalitatea globală de căutare." editable: "Allow the field to be editable by users themselves." visible: "Make field visible for all users (non-admins) in the project overview and displayed in the project details widget on the Project Overview." is_filter: > @@ -224,7 +224,7 @@ ro: concatenation: single: "sau" global_search: - placeholder: "Search in %{app_title}" + placeholder: "Caută în %{app_title}" overwritten_tabs: wiki_pages: "Wiki" messages: "Forum" @@ -249,7 +249,7 @@ ro: work_package_attachments: "Pachete de lucru: anexe" work_package_categories: "Pachete de lucru: categorii" work_package_file_links: "Pachete de lucru: legături de fișiere" - work_package_shares: "Work packages: shares" + work_package_shares: "Pachete de lucru: partajări" delete: scheduled: "Ștergerea a fost programată și se efectuează în fundal. Veți fi notificat cu privire la rezultat." schedule_failed: "Proiectul nu poate fi șters: %{errors}" @@ -263,16 +263,16 @@ ro: no_results_title_text: În acest moment nu există proiecte no_results_content_text: Creare proiect nou lists: - active: "Active projects" + active: "Proiecte active" my: "Proiectele mele" - favored: "Favorite projects" - archived: "Archived projects" - shared: "Shared project lists" - my_lists: "My project lists" + favored: "Proiecte favorite" + archived: "Proiecte arhivate" + shared: "Listă proiecte partajate" + my_lists: "Listele mele de proiecte" new: - placeholder: "New project list" + placeholder: "Listă nouă proiecte" delete_modal: - title: "Delete project list" + title: "Șterge listă proiecte" text: "This action will not delete any project the list contains. Are you sure you want to delete this project list?" settings: change_identifier: Schimbă identificatorul @@ -291,7 +291,7 @@ ro: title: "Atributele proiectului" description: 'These project attributes will be displayed in your project overview page under their respective sections. You can enable or disable individual attributes. Project attributes and sections are defined in the administration settings by the administrator of the instance. ' filter: - label: "Search project attribute" + label: "Caută atribut proiect" actions: label_enable_single: "Active in this project, click to disable" label_disable_single: "Inactive in this project, click to enable" @@ -332,15 +332,15 @@ ro: invite_by_mail: "Trimiteți invitația la %{mail}" send_invite_to: "Send invite to" columns: - shared: "Shared" + shared: "Partajate" filters: - all_shares: "All shares" + all_shares: "Toate partajările" menu: all: "Toate" - invited: "Invited" + invited: "Invitat" locked: "Închis" - project_roles: "Project roles" - wp_shares: "Work package shares" + project_roles: "Roluri proiect" + wp_shares: "Partajări pachete de lucru" groups: "Grupuri" delete_member_dialog: title: "Remove member" @@ -669,7 +669,7 @@ ro: project: active_value: true: "nearhivat" - false: "arhivată" + false: "arhivat" identifier: "Identificator" latest_activity_at: "Ultima activitate la" parent: "Subproiect în" @@ -680,14 +680,14 @@ ro: queries: "Interogări" status_code: "Stare proiect" description: "Descriere" - status_explanation: "Project status description" + status_explanation: "Descriere stadiu proiect" status_codes: not_started: "Neînceput" on_track: "În lucru" at_risk: "În pericol" - off_track: "În afara pistei" + off_track: "Deraiat" finished: "Finalizat" - discontinued: "Întrerupere" + discontinued: "Anulat" templated: "Proiect șablon" templated_value: true: "marcat ca șablon" @@ -696,7 +696,7 @@ ro: versions: "Versiuni" work_packages: "Pachete de lucru" project_custom_field: - custom_field_section: Section + custom_field_section: Sectiune query: column_names: "Coloane" relations_to_type_column: "Relații cu %{type}" @@ -716,7 +716,7 @@ ro: is_closed: "Pachet de lucru închis" is_readonly: "Pachet de lucru numai pentru citire" excluded_from_totals: "Exclude from calculation of totals in hierarchy" - default_done_ratio: "% Complete" + default_done_ratio: "% Finalizat" time_entry: activity: "Activitate" hours: "Ore" @@ -782,9 +782,9 @@ ro: priority: "Prioritate" progress: "% Complete" readonly: "Doar citire" - remaining_hours: "Remaining work" - remaining_time: "Remaining work" - shared_with_users: "Shared with" + remaining_hours: "Muncă rămasă" + remaining_time: "Muncă rămasă" + shared_with_users: "Partajate cu" schedule_manually: "Programarea manuală" spent_hours: "Timp consumat" spent_time: "Timp consumat" @@ -942,7 +942,7 @@ ro: project_custom_field_project_mapping: attributes: project_ids: - blank: "Please select a project." + blank: "Selectează un proiect." query: attributes: project: @@ -1008,7 +1008,7 @@ ro: status: attributes: default_done_ratio: - inclusion: "must be between 0 and 100." + inclusion: "trebuie să fie între 0 și 100." readonly_default_exlusive: "nu poate fi activată pentru statusurile care sunt marcate ca fiind implicite." time_entry: attributes: @@ -1041,7 +1041,7 @@ ro: assigned_to: format: "%{message}" due_date: - not_start_date: "nu este în data de început, deși acest lucru este necesar pentru repere de etapă." + not_start_date: "nu este în data de început, deși acest lucru este necesar pentru etape." cannot_be_null: "nu poate fi setat la null, deoarece data de începere și durata sunt cunoscute." duration: larger_than_dates: "este mai mare decât intervalul dintre data de început și data de sfârșit." @@ -1049,7 +1049,7 @@ ro: not_available_for_milestones: "nu este disponibil pentru pachetele de lucru tipizate pe etape." cannot_be_null: "nu poate fi setat la null, deoarece data de început și data de sfârșit sunt cunoscute." parent: - cannot_be_milestone: "nu poate fi un reper de etapă." + cannot_be_milestone: "nu poate fi o etapă." cannot_be_self_assigned: "nu poate fi atribuit singur." cannot_be_in_another_project: "nu poate fi într-un alt proiect." not_a_valid_parent: "este invalid." @@ -1345,7 +1345,7 @@ ro: button_edit: "Editare" button_edit_associated_wikipage: "Editare pagină wiki asociată: %{page_title}" button_expand_all: "Extindere totală" - button_favorite: "Add to favorites" + button_favorite: "Adaugă la favorite" button_filter: "Filtrare" button_generate: "Generare" button_list: "Listă" @@ -1373,7 +1373,7 @@ ro: button_unarchive: "Dezarhivare" button_uncheck_all: "Deselecteaza tot" button_unlock: "Deblocare" - button_unfavorite: "Remove from favorites" + button_unfavorite: "Elimină din favorite" button_unwatch: "Stop monitorizare" button_update: "Actualizare" button_upgrade: "Actualizare" @@ -1384,16 +1384,16 @@ ro: button_add_menu_entry: "Adăugare meniu" button_configure_menu_entry: "Configurare meniu" button_delete_menu_entry: "Ștergere meniu" - button_view_shared_work_packages: "View shared work packages" - button_manage_roles: "Manage roles" - button_remove_member: "Remove member" - button_remove_member_and_shares: "Remove member and shares" + button_view_shared_work_packages: "Vezi pachetele de lucru partajate" + button_manage_roles: "Gestionează rolurile" + button_remove_member: "Elimină membru" + button_remove_member_and_shares: "Elimină membrul și partajările" button_revoke_work_package_shares: "Revoke work package shares" - button_revoke_access: "Revoke access" - button_revoke_all: "Revoke all" - button_revoke_only: "Revoke only %{shared_role_name}" - button_publish: "Make public" - button_unpublish: "Make private" + button_revoke_access: "Revocă acces" + button_revoke_all: "Revocă tot" + button_revoke_only: "Revocare doar %{shared_role_name}" + button_publish: "Fă public" + button_unpublish: "Fă privat" consent: checkbox_label: Am luat la cunoștință și consimt la cele de mai sus. failure_message: Consimţământul a eșuat, nu putem continua. @@ -1520,9 +1520,9 @@ ro: few: "%{count} minute" other: "%{count} minute" x_minutes_abbreviated: - one: "1 min" + one: "1 minut" few: "%{count} mins" - other: "%{count} mins" + other: "%{count} minute" x_hours: one: "1 oră" few: "%{count} ore" @@ -1530,11 +1530,11 @@ ro: x_hours_abbreviated: one: "1 hr" few: "%{count} hrs" - other: "%{count} hrs" + other: "%{count} ore" x_weeks: one: "1 week" few: "%{count} weeks" - other: "%{count} weeks" + other: "%{count} săptămâni" x_months: one: "o lună" few: "%{count} luni" @@ -1542,7 +1542,7 @@ ro: x_years: one: "1 an" few: "%{count} years" - other: "%{count} years" + other: "%{count} ani" x_seconds: one: "o secundă" few: "%{count} secunde" @@ -1550,7 +1550,7 @@ ro: x_seconds_abbreviated: one: "1 s" few: "%{count} s" - other: "%{count} s" + other: "%{count} secunde" units: hour: one: "oră" @@ -1602,8 +1602,8 @@ ro: error_can_not_archive_project: "Acest proiect nu poate fi arhivat: %{errors}" error_can_not_delete_entry: "Nu se poate șterge intrarea" error_can_not_delete_custom_field: "Câmpul personalizat nu poate fi șters" - error_can_not_delete_in_use_archived_undisclosed: "There are also work packages in archived projects. You need to ask an administrator to perform the deletion to see which projects are affected." - error_can_not_delete_in_use_archived_work_packages: "There are also work packages in archived projects. You need to reactivate the following projects first, before you can change the attribute of the respective work packages: %{archived_projects_urls}" + error_can_not_delete_in_use_archived_undisclosed: "Există, de asemenea, pachete de lucru în proiecte arhivate. Trebuie să cereți unui administrator să efectueze ștergerea pentru a vedea ce proiecte sunt afectate." + error_can_not_delete_in_use_archived_work_packages: "Există, de asemenea, pachete de lucru în proiecte arhivate. Trebuie să reactivați mai întâi următoarele proiecte, înainte de a putea schimba tipul pachetelor de lucru respective: %{archived_projects_urls}" error_can_not_delete_type: explanation: 'Acest tip conține pachete de lucru și nu poate fi șters. Puteți vedea toate pachetele de lucru afectate în această vizualizare.' error_can_not_delete_standard_type: "Tipurile standard nu pot fi șterse." @@ -1742,7 +1742,7 @@ ro: default_attribute_written: "Read-only attributes written" progress_mode_changed_to_status_based: "Progress calculation updated" status_changed: "Status '%{status_name}'" - system_update: "OpenProject system update:" + system_update: "Actualizare sistem OpenProiect:" cause_descriptions: work_package_predecessor_changed_times: by changes to predecessor %{link} work_package_parent_changed_times: by changes to parent %{link} @@ -1830,12 +1830,12 @@ ro: dateAlert: "Alertă de dată" mentioned: "Menţionat" responsible: "Responsabil" - shared: "Shared" + shared: "Partajat" watched: "Observator" menu: by_project: "Necitit după proiect" by_reason: "Descriere" - inbox: "Cutie poștală" + inbox: "Inbox" send_notifications: "Trimite notificări pentru această acțiune" work_packages: subject: @@ -1855,7 +1855,7 @@ ro: label_add_another_file: "Adăugare alt fișier" label_add_columns: "Adăugați coloanele selectate" label_add_note: "Adăugare notă" - label_add_projects: "Add projects" + label_add_projects: "Adaugă proiecte" label_add_related_work_packages: "Adăugare pachet de lucru asociat" label_add_subtask: "Adăugare sub-activitate" label_added: "adăugat" @@ -1896,15 +1896,15 @@ ro: label_ldap_auth_source_plural: "LDAP connections" label_attribute_expand_text: "The complete text for '%{attribute}'" label_authentication: "Autentificare" - label_authentication_settings: "Authentication settings" - label_available_global_roles: "Available global roles" - label_available_project_attributes: "Available project attributes" + label_authentication_settings: "Setări autentificare" + label_available_global_roles: "Roluri globale disponibile" + label_available_project_attributes: "Atribute proiect disponibile" label_available_project_forums: "Forumuri disponibile" label_available_project_repositories: "Arhive disponibile" label_available_project_versions: "Versiuni disponibile" label_available_project_work_package_categories: "Categorii de pachete de lucru disponibile" label_available_project_work_package_types: "Tipuri de pachete de lucru disponibile" - label_available_projects: "Available projects" + label_available_projects: "Proiecte disponibile" label_api_doc: "Documentație API" label_backup: "Backup" label_backup_code: "Cod de rezervă" @@ -1923,7 +1923,7 @@ ro: label_bulk_edit_selected_work_packages: "Editare în masă a pachetelor de lucru selectate" label_bundled: "(la pachet)" label_calendar: "Calendar" - label_calendars_and_dates: "Calendars and dates" + label_calendars_and_dates: "Calendare și dăți" label_calendar_show: "Afișare calendar" label_category: "Categorie" label_consent_settings: "Consimţământul utilizatorului" @@ -2001,7 +2001,7 @@ ro: label_diff_side_by_side: "în paralel" label_digital_accessibility: "Accesibilitate digitală (DE)" label_disabled: "dezactivat" - label_disabled_uppercase: "Disabled" + label_disabled_uppercase: "Dezactivat" label_display: "Afișare" label_display_per_page: "Pe pagină: %{value}" label_display_used_statuses_only: "Afişează doar stările folosite de acest tip" @@ -2094,7 +2094,7 @@ ro: label_introduction_video: "Video de introducere" label_invite_user: "Invitare utilizator" label_share: "Distribuiți" - label_share_project_list: "Share project list" + label_share_project_list: "Distribuie lista de proiecte" label_share_work_package: "Share work package" label_show_hide: "Afișare/ascundere" label_show_hide_n_items: "Show/hide %{count} items" @@ -2170,7 +2170,7 @@ ro: label_more_than_ago: "acum mai mult de zile" label_move_work_package: "Mutare pachet de lucru" label_my_account: "Contul meu" - label_my_activity: "My activity" + label_my_activity: "Activitatea mea" label_my_account_data: "Datele din contul meu" label_my_avatar: "My avatar" label_my_queries: "Interogările mele" @@ -2204,7 +2204,7 @@ ro: label_operator_none: "este gol" label_operator_equals_or: "este (SAU)" label_operator_equals_all: "este (ȘI)" - label_operator_shared_with_user_any: "Oricare" + label_operator_shared_with_user_any: "oricare" label_open_menu: "Deschidere meniu" label_open_work_packages: "deschise" label_open_work_packages_plural: "deschise" @@ -2258,7 +2258,7 @@ ro: label_project_mappings: "Enabled in projects" label_project_new: "Proiect nou" label_project_plural: "Proiecte" - label_project_list_plural: "Project lists" + label_project_list_plural: "Listă proiecte" label_project_attributes_plural: "Atributele proiectului" label_project_custom_field_plural: "Atributele proiectului" label_project_settings: "Setările proiectului" @@ -2285,7 +2285,7 @@ ro: label_relation_delete: "Ștergere relație" label_relation_new: "Relație nouă" label_release_notes: "Note privind lansarea noii versiuni" - label_remaining_work: "Remaining work" + label_remaining_work: "Muncă rămasă" label_remove_columns: "Eliminare coloane selectate" label_renamed: "redenumit" label_reply_plural: "Răspunsuri" @@ -2316,7 +2316,7 @@ ro: label_role_search: "Atribuirea rolului noilor membri" label_scm: "SCM" label_search: "Căutare" - label_search_by_name: "Search by name" + label_search_by_name: "Caută după nume" label_send_information: "Send new credentials to the user" label_send_test_email: "Trimite e-mail de test" label_session: "Sesiune" @@ -2420,7 +2420,7 @@ ro: label_wiki_show_new_page_link: "Afișare submeniu 'Creare pagină copil'" label_wiki_show_submenu_item: "Afișare ca submeniu pentru " label_wiki_start: "Pagină de start" - label_work: "Work" + label_work: "Muncă" label_work_package: "Pachet de lucru" label_work_package_attachments: "Anexe la pachetul de lucru" label_work_package_category_new: "Categorie nouă" @@ -2437,7 +2437,7 @@ ro: label_work_package_tracking: "Urmărire pachete de lucru" label_work_package_view_all: "Toate pachetele de lucru" label_workflow: "Flux de lucru" - label_workflow_copy: "Copy workflow" + label_workflow_copy: "Copiază fluxul de lucru" label_workflow_plural: "Fluxuri de lucru" label_workflow_summary: "Descriere" label_working_days_and_hours: "Working days and hours" @@ -2524,7 +2524,7 @@ ro: assigned: "Alocat" responsible: "Responsabil" mentioned: "Menţionat" - shared: "Shared" + shared: "Partajat" subscribed: "toate" prefix: "Primită din cauza setării de notificare: %{reason}" date_alert_start_date: "Alertă de dată" @@ -2742,9 +2742,9 @@ ro: permission_add_project: "Create projects" permission_add_work_package_attachments: "Adaugă fișiere" permission_add_work_package_attachments_explanation: "Allows adding attachments without Edit work packages permission" - permission_archive_project: "Proiect de arhivă" + permission_archive_project: "Proiect arhivat" permission_create_user: "Create users" - permission_manage_user: "Edit users" + permission_manage_user: "Editează utilizatori" permission_manage_placeholder_user: "Creați, editați și ștergeți utilizatori de tip placeholder" permission_add_subprojects: "Creare subproiecte" permission_add_work_package_watchers: "Adăugare observatori" @@ -2800,20 +2800,20 @@ ro: permission_protect_wiki_pages: "Protejare pagini wiki" permission_rename_wiki_pages: "Redenumire pagini wiki" permission_save_queries: "Salvați vizualizările" - permission_search_project: "Search project" + permission_search_project: "Caută proiect" permission_select_custom_fields: "Selectați câmpurile personalizate" permission_select_project_custom_fields: "Select project attributes" permission_select_project_modules: "Selectare module proiect" permission_share_work_packages: "Share work packages" permission_manage_types: "Selectare tipuri" - permission_view_project: "View projects" + permission_view_project: "Vezi proiecte" permission_view_changesets: "Vizualizare revizii repo în OpenProject" permission_view_commit_author_statistics: "Vizualizare statistici autor înregistrări" - permission_view_dashboards: "View dashboards" + permission_view_dashboards: "Vezi panouri" permission_view_work_package_watchers: "Vizualizare listă observatori" permission_view_work_packages: "Vizualizare pachete de lucru" permission_view_messages: "Vizualizare mesaje" - permission_view_news: "View news" + permission_view_news: "Vezi noutăți" permission_view_members: "Vezi membrii" permission_view_reportings: "Vizualizare raportări" permission_view_shared_work_packages: "View work package shares" @@ -2823,12 +2823,12 @@ ro: permission_view_wiki_pages: "Vizualizare wiki" permission_work_package_assigned: "Deveniți cesionar/responsabil" permission_work_package_assigned_explanation: "Pachetele de lucru pot fi atribuite utilizatorilor și grupurilor care dețin acest rol în proiectul respectiv" - permission_view_project_activity: "View project activity" + permission_view_project_activity: "Vezi activitate proiect" permission_view_project_attributes: "View project attributes" permission_save_bcf_queries: "Save BCF queries" permission_manage_public_bcf_queries: "Manage public BCF queries" permission_edit_attribute_help_texts: "Edit attribute help texts" - permission_manage_public_project_queries: "Manage public project lists" + permission_manage_public_project_queries: "Gestionează listă proiecte publice" permission_view_project_query: "View project query" permission_edit_project_query: "Edit project query" placeholders: @@ -2877,8 +2877,8 @@ ro: member_of_group: "Grupul executantului" name_or_identifier: "Nume sau identificator" only_subproject_id: "Numai subproiect" - shared_with_user: "Shared with users" - shared_with_me: "Shared with me" + shared_with_user: "Partajate cu utilizatorii" + shared_with_me: "Partajate cu mine" subproject_id: "Inclusiv subproiectul" repositories: at_identifier: "la %{identifier}" @@ -3197,7 +3197,7 @@ ro: projects: missing_dependencies: "Project module %{module} was checked which depends on %{dependencies}. You need to check these dependencies as well." section_new_projects: "Setări pentru proiecte noi" - section_project_overview: "Settings for project lists" + section_project_overview: "Setări pentru listă proiecte" session: "Sesiune" user: default_preferences: "Preferințe implicite" @@ -3257,7 +3257,7 @@ ro: text_database_allows_tsv: "Baza de date permite TSVector (opțional)" text_default_administrator_account_changed: "Contul de administrator implicit a fost schimbat" text_default_encoding: "Implicit: UTF-8" - text_destroy: "Ștergere" + text_destroy: "Șterge" text_destroy_with_associated: "Există obiecte suplimentare asociate cu pachetul(ele) de lucru care urmează să fie șters(e). Aceste obiecte sunt de următoarele tipuri:" text_destroy_what_to_do: "Ce vrei să faci?" text_diff_truncated: "... Acest diff a fost trunchiat deoarece depășește dimensiunea maximă care poate fi afișată." @@ -3482,15 +3482,15 @@ ro: role: "Rol" type: "Tip" denied: "You don't have permissions to share %{entities}." - label_search: "Search for users to invite" - label_search_placeholder: "Search by user or email address" + label_search: "Caută utilizatori pentru a invita" + label_search_placeholder: "Caută după utilizator sau adresă de e-mail" label_toggle_all: "Toggle all shares" remove: "Eliminare" share: "Distribuiți" - text_empty_search_description: "There are no users with the current filter criteria." - text_empty_search_header: "We couldn't find any matching results." + text_empty_search_description: "Nu sunt utilizatori cu criteriile curente de filtrare." + text_empty_search_header: "Nu am putut găsi niciun rezultat potrivit." text_empty_state_description: "The %{entity} has not been shared with anyone yet." - text_empty_state_header: "Nu este publică" + text_empty_state_header: "Nepartajat" text_user_limit_reached: "Adding additional users will exceed the current limit. Please contact an administrator to increase the user limit to ensure external users are able to access this %{entity}." text_user_limit_reached_admins: 'Adding additional users will exceed the current limit. Please upgrade your plan to be able to add more users.' warning_user_limit_reached: > @@ -3501,12 +3501,12 @@ ro: warning_locked_user: "The user %{user} is locked and cannot be shared with" user_details: locked: "Locked user" - invited: "Invite sent. " + invited: "Invitație trimisă. " resend_invite: "Resend." invite_resent: "Invite has been resent" not_project_member: "Not a project member" project_group: "Group members might have additional privileges (as project members)" - not_project_group: "Group (shared with all members)" + not_project_group: "Grup (partajat cu toți membrii)" additional_privileges_project: "Might have additional privileges (as project member)" additional_privileges_group: "Might have additional privileges (as group member)" additional_privileges_project_or_group: "Might have additional privileges (as project or group member)" @@ -3522,10 +3522,10 @@ ro: caption: "Everyone can view this project list. Those with global edit permissions can modify it." blank_state: public: - header: "Shared with everyone" + header: "Partajat cu toți" description: "Everyone can view this project list. You can also add individual users with extra permissions." private: - header: "Not shared: Private" + header: "Nepartajat: Privat" description: "This project list has not been shared with anyone yet. Only you can access this list." permissions: view: "Vizualizare" diff --git a/config/locales/crowdin/ru.yml b/config/locales/crowdin/ru.yml index 6ed139a96b7..2f2d6146ebe 100644 --- a/config/locales/crowdin/ru.yml +++ b/config/locales/crowdin/ru.yml @@ -2809,7 +2809,7 @@ ru: permission_edit_own_messages: "Редактировать свои сообщения" permission_edit_own_time_entries: "Редактировать собственные учетные записи о времени" permission_edit_project: "Редактировать проект" - permission_edit_project_attributes: "Edit project attributes" + permission_edit_project_attributes: "Редактирование атрибутов проекта" permission_edit_reportings: "Редактировать отчеты" permission_edit_time_entries: "Редактировать журналы времени для других пользователей" permission_edit_timelines: "Редактировать графики" @@ -2860,7 +2860,7 @@ ru: permission_work_package_assigned: "Назначиться/стать отвественным" permission_work_package_assigned_explanation: "Пакеты работ могут быть привязаны к пользователям и группам в зависимости от этой роли в рамках соответствующего проекта" permission_view_project_activity: "Просмотр деятельности по проекту" - permission_view_project_attributes: "View project attributes" + permission_view_project_attributes: "Просмотр атрибутов проекта" permission_save_bcf_queries: "Сохранить запросы BCF" permission_manage_public_bcf_queries: "Управление публичными BCF запросами" permission_edit_attribute_help_texts: "Редактировать атрибут справки" diff --git a/config/locales/crowdin/zh-TW.seeders.yml b/config/locales/crowdin/zh-TW.seeders.yml index 46767eb3a80..81a62b7f4d8 100644 --- a/config/locales/crowdin/zh-TW.seeders.yml +++ b/config/locales/crowdin/zh-TW.seeders.yml @@ -99,7 +99,7 @@ zh-TW: item_2: name: 任務 item_3: - name: 團隊規劃 + name: 小組工作企劃 boards: kanban: name: Kanban看板 diff --git a/config/locales/crowdin/zh-TW.yml b/config/locales/crowdin/zh-TW.yml index 8d63f817b43..de8c7a792af 100644 --- a/config/locales/crowdin/zh-TW.yml +++ b/config/locales/crowdin/zh-TW.yml @@ -207,7 +207,7 @@ zh-TW: enabled_in_project: "已在專案中啟用" contained_in_type: "已包含在類型中" confirm_destroy_option: "刪除一個項目將會一併刪除所有出現這個項目的地方 (例如:在工作項目中)。你確定要刪除它嗎?" - reorder_alphabetical: "按字母順序重新排列值" + reorder_alphabetical: "按字母順序重新排列" reorder_confirmation: "警告:目前可用值的順序將會遺失。繼續嗎?" instructions: is_required: "將此欄位定義成必填。\n" @@ -248,7 +248,7 @@ zh-TW: work_package_attachments: "工作項目:附件" work_package_categories: "工作項目:類別" work_package_file_links: "工作項目:檔案連結" - work_package_shares: "共享之工作項目" + work_package_shares: "共用之工作項目" delete: scheduled: "已經安排背景執行刪除任務。你將會收到結果通知。" schedule_failed: "專案無法刪除: %{errors}" @@ -266,7 +266,7 @@ zh-TW: my: "我的專案" favored: "收藏的專案" archived: "封存專案" - shared: "共享專案清單" + shared: "共用專案清單" my_lists: "我的專案列表" new: placeholder: "新專案清單" @@ -331,38 +331,38 @@ zh-TW: invite_by_mail: "寄發邀請至:%{mail}" send_invite_to: "寄送邀請" columns: - shared: "共享" + shared: "共用" filters: - all_shares: "所有共享的" + all_shares: "所有共用的" menu: all: "全部" invited: "已邀請" locked: "停用" project_roles: "專案角色" - wp_shares: "共享之工作項目" + wp_shares: "共用之工作項目" groups: "群組" delete_member_dialog: title: "移除成員" will_remove_the_users_role: "這將從此專案中移除使用者的角色。" will_remove_the_groups_role: "這將從此專案中移除群組角色。" however_work_packages_shared_with_user_html: - other: "不過, %{shared_work_packages_link} ,也與此使用者共享。" + other: "不過, %{shared_work_packages_link} ,也與此使用者共用。" however_work_packages_shared_with_group_html: - other: "不過, %{shared_work_packages_link} ,也與此群組共享。" + other: "不過, %{shared_work_packages_link} ,也與此群組共用。" remove_work_packages_shared_with_user_too: "已移除專案成員的使用者仍可存取共用工作項目。您也想移除共用嗎?" remove_work_packages_shared_with_group_too: "已移除成員身份的群組仍可存取共用工作套件。您也想移除共用嗎?" will_not_affect_inherited_shares: "(這不會影響與其小組共用的工作項目)。" can_remove_direct_but_not_shared_roles: "您可以刪除該用戶的直接項目成員身份,但他們所在的組也是該項目的成員,因此他們將繼續通過組成為成員。" also_work_packages_shared_with_user_html: - other: "此外,還與該用戶共享了 %{shared_work_packages_link}。" - remove_project_membership_or_work_package_shares_too: "您只想刪除作為直接成員的用戶(保留共享),還是也刪除工作包共享?" + other: "此外,還與該用戶共用了 %{shared_work_packages_link}。" + remove_project_membership_or_work_package_shares_too: "您只想刪除作為直接成員的用戶(保留共用),還是也刪除工作包共享?" will_remove_all_user_access_priveleges: "刪除該成員將移除該專案所有存取權限。但使用者部分專案資料仍然存在。" will_remove_all_group_access_priveleges: "刪除該成員將刪除該組對項目的所有訪問權限。該組仍將作為實例的一部分存在。" cannot_delete_inherited_membership: "您不能刪除此成員,因為他們所屬的組本身就是此項目的成員。" cannot_delete_inherited_membership_note_admin_html: "您可以在 %{administration_settings_link} 中刪除作為項目成員的組或組中的特定成員。" cannot_delete_inherited_membership_note_non_admin: "您可以將該組作為項目成員移除,或者聯繫管理員將該特定成員從組中移除。" delete_work_package_shares_dialog: - title: "撤銷已共享的工作項目" + title: "撤銷已共用的工作項目" shared_with_this_user_html: other: "%{all_shared_work_packages_link} 已與該用戶共享。" shared_with_this_group_html: @@ -472,7 +472,7 @@ zh-TW: is_readonly: "唯讀" excluded_from_totals: "不包括在總計中" themes: - dark: "黑暗(測試版)" + dark: "深色(測試版)" light: "白色主題" light_high_contrast: "高對比白色主題" types: @@ -524,8 +524,8 @@ zh-TW: 目標項目中未啓用工作包的當前類型。如果您希望工作包類型保持不變,請在目標項目中啓用這些類型。否則,請從列表中選擇目標項目中的可用類型。 sharing: missing_workflow_warning: - title: "工作包共享缺少工作流" - message: "沒有為\"工作包編輯者\"角色配置工作流。沒有工作流,共享用戶就無法更改工作包的狀態。工作流可以複製。選擇一個源類型(例如\"任務\")和源角色(例如\"成員\")。然後選擇目標類型。一開始,您可以將所有類型都選擇為目標類型。最後,選擇\"工作包編輯者\"角色作為目標,然後點擊\"複製\"。在創建默認設置之後,像對其他角色一樣進行微調,對工作流進行詳細調整。" + title: "共用工作項目缺少工作流" + message: "沒有為\"工作項目編輯者\"角色配置工作流。沒有工作流,共用用戶就無法更改工作項目的狀態。工作流可以複製。選擇一個類型(例如\"任務\")和角色(例如\"成員\")。然後選擇目標類型。一開始,您可以將所有類型都選擇為目標類型。最後,選擇\"工作項目編輯者\"角色作為目標,然後點擊\"複製\"。在創建預設設置之後,像對其他角色一樣進行微調,對工作流進行詳細調整。" link_message: "在管理中配置工作流。" summary: reports: @@ -710,7 +710,7 @@ zh-TW: type: description: "描述的預設文字" attribute_groups: "" - is_in_roadmap: "在 RoadMap 預設為顯示" + is_in_roadmap: "在藍圖中預設為顯示" is_default: "新專案的預設啟動類型" is_milestone: "里程碑" color: "顏色" @@ -731,10 +731,10 @@ zh-TW: hide_mail: "隱藏我的電子郵件地址" impaired: "協助工具模式" time_zone: "時區" - auto_hide_popups: "自動隱藏成功通知" + auto_hide_popups: "提醒後自動隱藏" warn_on_leaving_unsaved: "離開尚未儲存的工作項目時提示我" theme: "模式 " - mode_guideline: "為了親和性以及方便閱讀性,某些模式將覆蓋自訂主題顏色。對於完整的自訂主題,請選擇 Light 模式。" + mode_guideline: "為了親和性以及方便閱讀性,某些模式將覆蓋自訂主題顏色。對於完整的自訂主題,請選擇白色模式。" version: effective_date: "完成日期" sharing: "分享" @@ -768,7 +768,7 @@ zh-TW: readonly: "唯讀" remaining_hours: "剩餘工作" remaining_time: "剩餘工作" - shared_with_users: "共享對象" + shared_with_users: "共用對象" schedule_manually: "手動排程" spent_hours: "耗時" spent_time: "耗時" @@ -1196,7 +1196,7 @@ zh-TW: author: "作者" base: "一般錯誤:" blocks_ids: "已被限制的工作項目 IDs" - category: "分類" + category: "類別" comment: "留言" comments: "留言" content: "內容" @@ -1292,7 +1292,7 @@ zh-TW: button_clear: "清除" button_click_to_reveal: "點擊顯示" button_close: "關閉" - button_collapse_all: "全部摺疊" + button_collapse_all: "全部收合" button_configure: "設定" button_continue: "繼續" button_copy: "複製" @@ -1348,11 +1348,11 @@ zh-TW: button_add_menu_entry: "新增選單項目" button_configure_menu_entry: "設定選單項目" button_delete_menu_entry: "刪除選單項目" - button_view_shared_work_packages: "檢視共享的工作項目" + button_view_shared_work_packages: "檢視共用的工作項目" button_manage_roles: "管理角色" button_remove_member: "移除成員" - button_remove_member_and_shares: "移除成員及共享" - button_revoke_work_package_shares: "撤銷已共享的工作項目" + button_remove_member_and_shares: "移除成員及共用" + button_revoke_work_package_shares: "撤銷已共用的工作項目" button_revoke_access: "撤銷存取權限" button_revoke_all: "全部撤銷" button_revoke_only: "僅撤銷 %{shared_role_name}" @@ -1660,7 +1660,7 @@ zh-TW: shortcuts: "快捷鍵" blog: "Openproject 部落格" forums: "社群討論區" - newsletter: "安全警報 / 消息" + newsletter: "資通安全通知 / 電子報" image_conversion: imagemagick: "Imagemagick" journals: @@ -1758,7 +1758,7 @@ zh-TW: dateAlert: "到期提醒" mentioned: "被提及" responsible: "負責人" - shared: "共享" + shared: "共用" watched: "監看者" menu: by_project: "未讀項目" @@ -1779,7 +1779,7 @@ zh-TW: label_activate_user: "啟動使用者" label_active_in_new_projects: "在新專案中啟用" label_activity: "活動" - label_add_edit_translations: "增加和編輯翻譯" + label_add_edit_translations: "加入翻譯" label_add_another_file: "新增另一個檔案" label_add_columns: "新增所選欄" label_add_note: "新增註記" @@ -1876,8 +1876,8 @@ zh-TW: label_chronological_order: "由舊排列至新" label_close_versions: "關閉已完成的版本" label_closed_work_packages: "已關閉" - label_collapse: "折疊" - label_collapsed_click_to_show: "已折疊。按一下以顯示" + label_collapse: "收合" + label_collapsed_click_to_show: "已收合。按一下以顯示" label_configuration: 組態 label_comment_add: "新增留言" label_comment_added: "新增內容" @@ -1923,11 +1923,11 @@ zh-TW: label_missing_or_hidden_custom_option: "(缺少值或缺少訪問權限)" label_descending: "降冪" label_details: "詳細資料" - label_development_roadmap: "發展路徑圖" + label_development_roadmap: "開發藍圖" label_diff: "比較" label_diff_inline: "行內" label_diff_side_by_side: "並排" - label_digital_accessibility: "數字可訪問性 (DE)" + label_digital_accessibility: "數位無障礙聲明 (德文)" label_disabled: "已停用" label_disabled_uppercase: "關閉" label_display: "顯示" @@ -1967,7 +1967,7 @@ zh-TW: label_import: "匯入" label_export_to: "也可匯出成" label_expand: "展開" - label_expanded_click_to_collapse: "已擴大。按一下可折疊" + label_expanded_click_to_collapse: "已展開。按一下可收合" label_f_hour: "%{value} 小時" label_f_hour_plural: "%{value} 個小時" label_favorite: "最愛" @@ -2023,7 +2023,7 @@ zh-TW: label_invite_user: "邀請使用者" label_share: "分享" label_share_project_list: "共用專案清單" - label_share_work_package: "共享工作項目" + label_share_work_package: "共用工作項目" label_show_hide: "顯示/隱藏" label_show_hide_n_items: "顯示/隱藏 %{count} 項目" label_show_all_registered_users: "顯示所有註冊使用者" @@ -2212,7 +2212,7 @@ zh-TW: label_relates_to: "相關於" label_relation_delete: "刪除關聯" label_relation_new: "新增關聯" - label_release_notes: "發行備註" + label_release_notes: "發行說明" label_remaining_work: "剩餘工作" label_remove_columns: "移除所選欄" label_renamed: "重新命名" @@ -2233,11 +2233,11 @@ zh-TW: label_revision: "修訂" label_revision_id: "修訂版 %{value}" label_revision_plural: "修訂" - label_roadmap: "路線圖" - label_roadmap_edit: "編輯路線圖 %{name}" - label_roadmap_due_in: "截止於%{value}" - label_roadmap_no_work_packages: "這個版本沒有工作項目" - label_roadmap_overdue: "晚了 %{value}" + label_roadmap: "藍圖" + label_roadmap_edit: "編輯藍圖 %{name}" + label_roadmap_due_in: "%{value} 截止" + label_roadmap_no_work_packages: "此版本沒有工作項目" + label_roadmap_overdue: "%{value} 逾期" label_role_and_permissions: "角色與權限" label_role_new: "新增角色" label_role_plural: "角色" @@ -2278,7 +2278,7 @@ zh-TW: label_system_storage: "儲存空間資訊" label_table_of_contents: "目錄" label_tag: "標記" - label_team_planner: "團隊規劃" + label_team_planner: "小組工作企劃" label_text: "長文字" label_this_month: "本月" label_this_week: "本週" @@ -2321,7 +2321,7 @@ zh-TW: label_version_plural: "版本" label_version_sharing_descendants: "與子專案" label_version_sharing_hierarchy: "有專案階層" - label_version_sharing_none: "非共享的" + label_version_sharing_none: "非共用的" label_version_sharing_system: "有所有的版本" label_version_sharing_tree: "有專案樹" label_videos: "影片" @@ -2450,7 +2450,7 @@ zh-TW: assigned: "指派" responsible: "負責人" mentioned: "被提及" - shared: "共享" + shared: "共用" subscribed: "所有" prefix: "因為通知設定而收到:%{reason}" date_alert_start_date: "日期提醒" @@ -2603,7 +2603,7 @@ zh-TW: notice_locking_conflict: "在此同時,資訊已經被至少一個使用者更新" notice_locking_conflict_additional_information: "更新來自於 %{users}" notice_locking_conflict_reload_page: "請重新載入頁面,檢查所做的更改並重新套用您的更新。" - notice_member_added: 增加至專案的 %{name} + notice_member_added: 新增 %{name} 至專案 notice_members_added: 已加入了 %{number} 個用戶至專案中 notice_member_removed: "%{user} 已從專案移除" notice_member_deleted: "%{user} 已經從專案移除並刪除了" @@ -2799,7 +2799,7 @@ zh-TW: member_of_group: "執行者的群組" name_or_identifier: "名稱或識別碼" only_subproject_id: "只限子專案" - shared_with_user: "與使用者共享" + shared_with_user: "與使用者共用" shared_with_me: "與我共用" subproject_id: "包含子專案" repositories: @@ -3246,7 +3246,7 @@ zh-TW: text_user_invited: 這個使用者已經被邀請而且正在等待註冊。 text_user_wrote: "%{value} 寫道:" text_warn_on_leaving_unsaved: "若離開當前頁面,將遺失此工作項目未儲存的內容。" - text_what_did_you_change_click_to_add_comment: "你改變了甚麼?點擊來新增說明" + text_what_did_you_change_click_to_add_comment: "點擊這裡來說明變更了什麼" text_wiki_destroy_confirmation: "您是否確定要刪除此 wiki 和它所有的內容?" text_wiki_page_destroy_children: "刪除子頁面和所有他們的派生頁面" text_wiki_page_destroy_question: "此頁有 %{descendants} 子頁面和派生頁面。您想進行何種操作?" @@ -3401,24 +3401,24 @@ zh-TW: group: "群組" role: "角色" type: "類型" - denied: "您沒有權限共享 %{entities}。" + denied: "您沒有權限共用 %{entities}。" label_search: "搜尋要邀請的用戶" label_search_placeholder: "以帳號或電子郵件搜尋" - label_toggle_all: "切換到「所有共享的」" + label_toggle_all: "切換到「所有共用的」" remove: "刪除" share: "分享" text_empty_search_description: "沒有符合當前過濾條件的用戶。" text_empty_search_header: "我們找不到任何匹配結果。" - text_empty_state_description: "%{entity} 尚未與任何人共享。" - text_empty_state_header: "非共享的" + text_empty_state_description: "%{entity} 尚未與任何人共用。" + text_empty_state_header: "非共用的" text_user_limit_reached: "添加其他用戶將超出當前限制。請聯繫管理員增加用戶限制,以確保外部用戶能夠訪問 %{entity}。" text_user_limit_reached_admins: '添加更多用戶將超出當前限制。請升級您的計劃,以便添加更多用戶。' warning_user_limit_reached: > 添加其他用戶將超出當前限制。請聯繫管理員增加用戶限制,以確保外部用戶能夠訪問 %{entity}。 warning_user_limit_reached_admin: > 添加其他用戶將超出當前限制。請升級您的計劃,以確保外部用戶能夠訪問 %{entity}。 - warning_no_selected_user: "請選擇要與之共享此 %{entity} 的用戶" - warning_locked_user: "使用者 %{user} 已停用,無法共享" + warning_no_selected_user: "請選擇要與之共用此 %{entity} 的用戶" + warning_locked_user: "使用者 %{user} 已停用,無法共用" user_details: locked: "使用者已停用" invited: "已傳送邀請" @@ -3426,34 +3426,34 @@ zh-TW: invite_resent: "已重傳邀請" not_project_member: "非專案的成員" project_group: "小組成員可能擁有額外權限(作為項目成員)" - not_project_group: "組 (與所有成員共享)" + not_project_group: "組 (與所有成員共用)" additional_privileges_project: "可能有額外的權限(作為項目成員)" additional_privileges_group: "可能有額外的權限(作為組成員)" additional_privileges_project_or_group: "可能有額外的權限(作為項目成員或組成員)" project_queries: publishing_denied: "您沒有公開專案列表的權限。" - access_warning: "用戶只能看到他們有權訪問的項目。共享項目列表不會影響單個項目的權限。" + access_warning: "用戶只能看到他們有權訪問的專案。共用專案列表不會影響單一專案的權限。" user_details: owner: "列表所有者" - can_view_because_public: "已經可以查看,因為列表與所有人共享" + can_view_because_public: "已經可以查看,因為列表與所有人共用" can_manage_public_lists: "可根據全域權限進行編輯" public_flag: label: "通過 %{instance_name} 與大家分享" caption: "每個人都可以查看此項目列表。有全局編輯權限的人可以修改它。" blank_state: public: - header: "共享給所有人" + header: "共用給所有人" description: "每個人都可以查看此項目列表。您也可以添加具有額外權限的個別用戶。" private: - header: "不共享:私有" - description: "此項目列表尚未與任何人共享。只有您可以訪問此列表。" + header: "不共用:私有" + description: "此專案列表尚未與任何人共用。只有您可以訪問此列表。" permissions: view: "檢視" view_description: "可以查看此項目列表。" edit: "編輯" - edit_description: "可以查看、共享和編輯此項目列表。" + edit_description: "可以查看、共用和編輯此專案列表。" upsale: - message: "與單個用戶共享項目列表是一項企業附加功能。" + message: "與單個用戶共用專案列表是一項企業附加功能。" working_days: info: > 在安排工作包時,未選擇的日期將被跳過(且不計入天數)。可以在工作包級別覆蓋這些選項。 diff --git a/modules/avatars/config/locales/crowdin/js-zh-TW.yml b/modules/avatars/config/locales/crowdin/js-zh-TW.yml index a697341b560..8e097bdb39e 100644 --- a/modules/avatars/config/locales/crowdin/js-zh-TW.yml +++ b/modules/avatars/config/locales/crowdin/js-zh-TW.yml @@ -7,8 +7,8 @@ zh-TW: label_choose_avatar: "選擇大頭貼" uploading_avatar: "上傳您的大頭貼。" text_upload_instructions: | - 上傳您自己的 128 x 128 像素自定大頭貼。 較大的文件將被調整大小和裁剪。 - 選擇了圖像後,在上傳之前將顯示您的大頭貼預覽。 + 上傳您自己的 128 x 128 像素自定大頭貼。 較大圖片將被調整大小和裁剪。 + 選擇了圖片後,上傳前將預覽您的大頭貼。 error_image_too_large: "圖片太大。" wrong_file_format: "允許的格式是jpg, png以及gif" empty_file_error: "請上傳一個有效的圖片 (jpg, png, gif)" diff --git a/modules/avatars/config/locales/crowdin/zh-TW.yml b/modules/avatars/config/locales/crowdin/zh-TW.yml index c25a04f214c..5931ce1ca92 100644 --- a/modules/avatars/config/locales/crowdin/zh-TW.yml +++ b/modules/avatars/config/locales/crowdin/zh-TW.yml @@ -25,13 +25,13 @@ zh-TW: text_current_avatar: | 以下圖像顯示當前圖像。 text_upload_instructions: | - 上傳您自己的 128 x 128 像素自定大頭貼。 較大的文件將被調整大小和裁剪。 - 選擇了圖像後,在上傳之前將顯示您的大頭貼預覽。 - text_change_gravatar_html: '請轉到%{gravatar_url},將您的郵件設定進去。' + 上傳您自己的 128 x 128 像素自定大頭貼。 較大圖片將被調整大小和裁剪。 + 選擇了圖片後,上傳前將預覽您的大頭貼。 + text_change_gravatar_html: '請連結到%{gravatar_url},將您的郵件設定進去以便使用。' text_your_local_avatar: | OpenProject 允許你上傳自己定義的頭像 text_local_avatar_over_gravatar: | - 如果你有設定,這個自己定義的頭像將會優先用於gravatar上方。 + 如果你有設定,這個自己定義的頭像將會優於gravatar。 text_your_current_gravatar: | 如果你註冊了一個gravatar圖像,OpenProject將使用你的圖像;如果沒有則會使用既有預設的圖像或圖標。 目前的gravatar圖像如下: diff --git a/modules/backlogs/config/locales/crowdin/ro.yml b/modules/backlogs/config/locales/crowdin/ro.yml index 6df04accf97..19afc384d52 100644 --- a/modules/backlogs/config/locales/crowdin/ro.yml +++ b/modules/backlogs/config/locales/crowdin/ro.yml @@ -64,7 +64,7 @@ ro: properties: "Proprietăţi" rebuild: "Reconstruiți" rebuild_positions: "Reconstruiți" - remaining_hours: "Remaining work" + remaining_hours: "Muncă rămasă" remaining_hours_ideal: "Remaining work (ideal)" show_burndown_chart: "Size Chart" story: "Articol" @@ -147,7 +147,7 @@ ro: rb_label_copy_tasks_none: "Nimic" rb_label_copy_tasks_open: "Deschis" rb_label_link_to_original: "Includeți un link către povestea originală" - remaining_hours: "remaining work" + remaining_hours: "muncă rămasă" required_burn_rate_hours: "rata de ardere necesară (ore)" required_burn_rate_points: "rata de ardere necesară (puncte)" todo_work_package_description: "%{summary}: %{url}\n%{description}" diff --git a/modules/bim/config/locales/crowdin/ro.seeders.yml b/modules/bim/config/locales/crowdin/ro.seeders.yml index 7133c3a795d..236a46913a6 100644 --- a/modules/bim/config/locales/crowdin/ro.seeders.yml +++ b/modules/bim/config/locales/crowdin/ro.seeders.yml @@ -103,7 +103,7 @@ ro: item_0: name: Project plan item_1: - name: Milestones + name: Etape item_2: name: Tasks item_3: @@ -147,7 +147,7 @@ ro: name: Pachete de lucru item_6: options: - name: Milestones + name: Etape demo-planning-constructing-project: name: "(Demo) Planning & constructing" status_explanation: All tasks are on schedule. The people involved know their tasks. The system is completely set up. @@ -165,7 +165,7 @@ ro: item_0: name: Project plan item_1: - name: Milestones + name: Etape item_2: name: Tasks item_3: @@ -202,7 +202,7 @@ ro: name: Pachete de lucru item_6: options: - name: Milestones + name: Etape work_packages: item_0: subject: Project kick off construction project @@ -419,7 +419,7 @@ ro: item_0: name: Project plan item_1: - name: Milestones + name: Etape item_2: name: Tasks item_3: @@ -459,7 +459,7 @@ ro: name: Pachete de lucru item_6: options: - name: Milestones + name: Etape work_packages: item_0: subject: Project kick off creating BIM model @@ -692,7 +692,7 @@ ro: item_4: name: Project plan item_5: - name: Milestones + name: Etape item_6: name: Tasks item_7: diff --git a/modules/bim/config/locales/crowdin/zh-TW.seeders.yml b/modules/bim/config/locales/crowdin/zh-TW.seeders.yml index e43d7aa3016..c608b85af77 100644 --- a/modules/bim/config/locales/crowdin/zh-TW.seeders.yml +++ b/modules/bim/config/locales/crowdin/zh-TW.seeders.yml @@ -107,7 +107,7 @@ zh-TW: item_2: name: 任務 item_3: - name: 團隊規劃 + name: 小組工作企劃 boards: bcf: name: 簡單的拖放工作流程 @@ -169,7 +169,7 @@ zh-TW: item_2: name: 任務 item_3: - name: 團隊規劃 + name: 小組工作企劃 project-overview: widgets: item_0: @@ -420,7 +420,7 @@ zh-TW: item_2: name: 任務 item_3: - name: 團隊規劃 + name: 小組工作企劃 project-overview: widgets: item_0: @@ -693,7 +693,7 @@ zh-TW: item_6: name: 任務 item_7: - name: 團隊規劃 + name: 小組工作企劃 boards: bcf: name: BCF 問題 diff --git a/modules/gantt/config/locales/crowdin/js-ro.yml b/modules/gantt/config/locales/crowdin/js-ro.yml index c7495050285..3b0521112cb 100644 --- a/modules/gantt/config/locales/crowdin/js-ro.yml +++ b/modules/gantt/config/locales/crowdin/js-ro.yml @@ -2,4 +2,4 @@ ro: js: work_packages: default_queries: - milestones: 'Milestones' + milestones: 'Etape' diff --git a/modules/github_integration/config/locales/crowdin/js-ro.yml b/modules/github_integration/config/locales/crowdin/js-ro.yml index 3eb76ec9a84..04d0f0ecfa9 100644 --- a/modules/github_integration/config/locales/crowdin/js-ro.yml +++ b/modules/github_integration/config/locales/crowdin/js-ro.yml @@ -28,7 +28,7 @@ ro: title: "Cereri de extragere" copy_menu: label: Git fragmente - description: Copiați fragmente git în clipboard + description: Copiză fragmente git în clipboard git_actions: branch_name: Nume sucursală commit_message: Mesajul commit-ului diff --git a/modules/grids/config/locales/crowdin/js-ro.yml b/modules/grids/config/locales/crowdin/js-ro.yml index 1193c14c1b9..d6116113862 100644 --- a/modules/grids/config/locales/crowdin/js-ro.yml +++ b/modules/grids/config/locales/crowdin/js-ro.yml @@ -43,8 +43,8 @@ ro: title: 'Subproiecte' no_results: 'Cu subproiecte' project_favorites: - title: 'Favorite projects' - no_results: 'You currently have no favorite projects. Click on the star icon in the project dashboard to add one to your favorites.' + title: 'Proiecte favorite' + no_results: 'Nu ai niciun proiect favorit. Fă clic pe pictograma cu steluță din tabloul de bord al proiectului pentru a adăuga unul la favorite.' time_entries_current_user: title: 'Timpul meu petrecut' displayed_days: 'Zile afișate în lista de activități a proiectului' diff --git a/modules/grids/config/locales/crowdin/js-zh-TW.yml b/modules/grids/config/locales/crowdin/js-zh-TW.yml index e94c8c66341..a0742b5ef90 100644 --- a/modules/grids/config/locales/crowdin/js-zh-TW.yml +++ b/modules/grids/config/locales/crowdin/js-zh-TW.yml @@ -1,14 +1,14 @@ zh-TW: js: grid: - add_widget: '新增部件' - remove: '移除部件' - configure: '設定部件' + add_widget: '新增小工具' + remove: '移除小工具' + configure: '設定小工具' upsale: text: "某些組件,如工作包圖組件,只在企業版提供。" link: '企業版。' widgets: - missing_permission: "您沒有必要的權限來檢視此部件。" + missing_permission: "您沒有必要的權限來檢視小工具。" custom_text: title: '自訂文字' documents: @@ -66,5 +66,5 @@ zh-TW: work_packages_calendar: title: '行事曆' work_packages_overview: - title: '工作項目概覽' + title: '工作項目總覽' placeholder: '點擊編輯' diff --git a/modules/meeting/config/locales/crowdin/no.yml b/modules/meeting/config/locales/crowdin/no.yml index cdd10b0ceb4..409b8bb3613 100644 --- a/modules/meeting/config/locales/crowdin/no.yml +++ b/modules/meeting/config/locales/crowdin/no.yml @@ -122,7 +122,7 @@ agenda_text: "Kopier sakslisten fra det forrige møtet" email: send_emails: "Send e-post" - send_invitation_emails: "Send out invitation emails for all participants." + send_invitation_emails: "Send ut invitasjons-e-post for alle deltakere." open_meeting_link: "Åpent møte" invited: summary: "%{actor} har sendt deg en invitasjon til møtet %{title}" diff --git a/modules/meeting/config/locales/crowdin/ro.yml b/modules/meeting/config/locales/crowdin/ro.yml index 6f451e4c7d1..f81eba42909 100644 --- a/modules/meeting/config/locales/crowdin/ro.yml +++ b/modules/meeting/config/locales/crowdin/ro.yml @@ -116,10 +116,10 @@ ro: attachments: text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." copy: - title: "Copy meeting: %{title}" - attachments: "Copy attachments" - attachments_text: "Copy over all attached files to the new meeting" - agenda: "Copy agenda" + title: "Copiază întâlnirea: %{title}" + attachments: "Copiază atașamentele" + attachments_text: "Copiază peste toate fișierele atașate la noua ședință" + agenda: "Copiază agenda" agenda_text: "Copy the agenda of the old meeting" email: send_emails: "Send emails" diff --git a/modules/reporting/config/locales/crowdin/js-ro.yml b/modules/reporting/config/locales/crowdin/js-ro.yml index 4ce2d29c819..78ae1dfb042 100644 --- a/modules/reporting/config/locales/crowdin/js-ro.yml +++ b/modules/reporting/config/locales/crowdin/js-ro.yml @@ -22,5 +22,5 @@ ro: js: reporting_engine: - label_remove: "Ștergere" + label_remove: "Șterge" label_response_error: "S-a produs o eroare în tratarea interogării." diff --git a/modules/reporting/config/locales/crowdin/zh-TW.yml b/modules/reporting/config/locales/crowdin/zh-TW.yml index 4e5296b9550..597f7903d37 100644 --- a/modules/reporting/config/locales/crowdin/zh-TW.yml +++ b/modules/reporting/config/locales/crowdin/zh-TW.yml @@ -23,7 +23,7 @@ zh-TW: plugin_openproject_reporting: name: "OpenProject 報表" description: "本外掛允許透過OpenProject 時間及成本外掛,建立具篩選及群組的客製化成本報表" - button_save_as: "將報表另存為..。" + button_save_as: "另存報表..." comments: "留言" cost_reports_title: "時間與費用" label_cost_report: "成本報告" diff --git a/modules/storages/config/locales/crowdin/zh-TW.yml b/modules/storages/config/locales/crowdin/zh-TW.yml index d99aa3be2f9..b54934a999c 100644 --- a/modules/storages/config/locales/crowdin/zh-TW.yml +++ b/modules/storages/config/locales/crowdin/zh-TW.yml @@ -51,7 +51,7 @@ zh-TW: permission_manage_file_links: 管理文件鏈接 permission_manage_files_in_project: 管理專案中的檔案 permission_read_files: '自動管理專案資料夾 : 讀取檔案' - permission_share_files: '自動管理專案資料夾 : 共享檔案' + permission_share_files: '自動管理專案資料夾 : 共用檔案' permission_share_files_explanation: permission_view_file_links: 查看文件鏈接 permission_write_files: '自動管理專案資料夾 : 寫入檔案' diff --git a/modules/team_planner/config/locales/crowdin/js-zh-TW.yml b/modules/team_planner/config/locales/crowdin/js-zh-TW.yml index 813e0bcc5e2..60a861518e9 100644 --- a/modules/team_planner/config/locales/crowdin/js-zh-TW.yml +++ b/modules/team_planner/config/locales/crowdin/js-zh-TW.yml @@ -2,27 +2,27 @@ zh-TW: js: team_planner: - add_existing: '增加已有的' + add_existing: '加入現有工作項目' add_existing_title: '新增現有的工作項目' - create_label: '團隊規劃' - create_title: '建立新的團隊計畫' - unsaved_title: '未命名的團隊計畫' - no_data: '新增執行者來設定您的團隊規劃。' + create_label: '小組工作企劃' + create_title: '建立新的小組工作企劃' + unsaved_title: '未命名的小組工作企劃' + no_data: '新增執行者來設定您的小組工作企劃。' add_assignee: '增加「執行者」' remove_assignee: '刪除執行者' - two_weeks: '兩週' - one_week: '1週' - four_weeks: '4 週' - eight_weeks: '8 週' + two_weeks: '雙週' + one_week: '單週' + four_weeks: '四週' + eight_weeks: '八 週' work_week: '工作週' today: '今日' drag_here_to_remove: '拖曳此處可刪除執行者以及開始和結束日期。' cannot_drag_here: '由於權限或編輯限制,無法刪除工作項目。' cannot_drag_to_non_working_day: '此工作項目無法在非工作日開始/完成。' quick_add: - empty_state: '使用搜尋欄位尋找工作項目並將其拖曳到計劃器中以將其指派給某人並定義開始和結束日期。' + empty_state: '使用搜尋欄位尋找工作項目並將其拖曳到工作企劃中,以便將其指派給某人並定義開始和結束日期。' search_placeholder: '搜尋...' modify: errors: - permission_denied: '您沒有修改此權限所需的權限。' - fallback: '無法編輯工作項目。' + permission_denied: '您沒有修改權限。' + fallback: '此工作項目無法編輯。' diff --git a/modules/team_planner/config/locales/crowdin/zh-TW.yml b/modules/team_planner/config/locales/crowdin/zh-TW.yml index dc0899f9b8a..5ac25eac090 100644 --- a/modules/team_planner/config/locales/crowdin/zh-TW.yml +++ b/modules/team_planner/config/locales/crowdin/zh-TW.yml @@ -1,17 +1,17 @@ #English strings go here zh-TW: plugin_openproject_team_planner: - name: "OpenProject團隊計畫" - description: "提供團隊規劃器視圖。" - permission_view_team_planner: "查看團隊計劃" - permission_manage_team_planner: "管理團隊規劃" - project_module_team_planner_view: "團隊規劃" + name: "OpenProject小組工作企劃" + description: "提供小組工作企劃視圖。" + permission_view_team_planner: "檢視小組工作企劃" + permission_manage_team_planner: "管理「小組工作企劃」" + project_module_team_planner_view: "小組工作企劃" team_planner: - label_team_planner: "團隊規劃" - label_new_team_planner: "新團隊計劃" - label_create_new_team_planner: "建立新的團隊計畫" - label_team_planner_plural: "團隊規劃" + label_team_planner: "小組工作企劃" + label_new_team_planner: "新小組工作企劃" + label_create_new_team_planner: "建立新的小組工作企劃" + label_team_planner_plural: "小組工作企劃" label_assignees: "執行者" upsale: - title: "團隊規劃" - description: "使用 Team Planner 全面了解您的團隊規劃。 拉伸、縮短和拖放工作包以修改日期、移動日期或更改受讓人。" + title: "小組工作企劃" + description: "使用「小組工作企劃」全面閱覽了解您的小組工作內容。 縮放、拖曳工作項目以便調整日期、移動日期或更改執行者。" diff --git a/modules/two_factor_authentication/config/locales/crowdin/zh-TW.yml b/modules/two_factor_authentication/config/locales/crowdin/zh-TW.yml index cf8ff9e916e..2ffbc1164d1 100644 --- a/modules/two_factor_authentication/config/locales/crowdin/zh-TW.yml +++ b/modules/two_factor_authentication/config/locales/crowdin/zh-TW.yml @@ -65,7 +65,7 @@ zh-TW: error_invalid_settings: "您選擇的2FA 策略無效" failed_to_save_settings: "未能更新2FA 設置: %{message}" admin: - self_edit_path: "要添加或修改您自己的2FA 設備, 請轉到 %{self_edit_link}" + self_edit_path: "要添加或修改您自己的2FA 設備, 請連結到 %{self_edit_link}" self_edit_link_name: "雙重驗證於您的帳號頁面" self_edit_forbidden: "無法於此路徑編輯您擁有的2FA設備.請至 我的帳號 > 雙重認證." no_devices_for_user: "沒有為該使用者註冊的 2FA 設備。" From 6f0a75bcc5306e112ef29878a30ffc65bc1b9a4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Fri, 16 Aug 2024 07:45:35 +0200 Subject: [PATCH 32/45] Fall back custom_text without accessing project --- .../db/migrate/20190826083604_my_project_page_to_grid.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/overviews/db/migrate/20190826083604_my_project_page_to_grid.rb b/modules/overviews/db/migrate/20190826083604_my_project_page_to_grid.rb index 5f15a77521f..3e177419830 100644 --- a/modules/overviews/db/migrate/20190826083604_my_project_page_to_grid.rb +++ b/modules/overviews/db/migrate/20190826083604_my_project_page_to_grid.rb @@ -125,7 +125,7 @@ class MyProjectPageToGrid < ActiveRecord::Migration[5.2] def build_custom_text_widget(grid, widget_config, position) build_widget_with_options(grid, "custom_text", position) do |options| - name = widget_config[1].presence || Project.where(id: grid.project_id).pick(:name) || "Text" + name = widget_config[1].presence || "Text" options[:name] = name options[:text] = widget_config[2] From 28e758151398df64d818b0c7c807f4ef9cf0a2d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 05:46:28 +0000 Subject: [PATCH 33/45] build(deps): bump aws-sdk-s3 from 1.157.0 to 1.158.0 Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.157.0 to 1.158.0. - [Release notes](https://github.com/aws/aws-sdk-ruby/releases) - [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-ruby/commits) --- updated-dependencies: - dependency-name: aws-sdk-s3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 371ccd2d042..2232f1bcbce 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -342,7 +342,7 @@ GEM activerecord (>= 4.0.0, < 7.2) awrence (1.2.1) aws-eventstream (1.3.0) - aws-partitions (1.963.0) + aws-partitions (1.964.0) aws-sdk-core (3.201.4) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) @@ -351,7 +351,7 @@ GEM aws-sdk-kms (1.88.0) aws-sdk-core (~> 3, >= 3.201.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.157.0) + aws-sdk-s3 (1.158.0) aws-sdk-core (~> 3, >= 3.201.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) From 5c997b52a480550359c86c861a00728681cb999e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 05:46:56 +0000 Subject: [PATCH 34/45] build(deps-dev): bump rspec-rails from 6.1.3 to 6.1.4 Bumps [rspec-rails](https://github.com/rspec/rspec-rails) from 6.1.3 to 6.1.4. - [Changelog](https://github.com/rspec/rspec-rails/blob/main/Changelog.md) - [Commits](https://github.com/rspec/rspec-rails/compare/v6.1.3...v6.1.4) --- updated-dependencies: - dependency-name: rspec-rails dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 371ccd2d042..3ba7ed4c680 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -972,7 +972,7 @@ GEM rspec-mocks (3.13.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-rails (6.1.3) + rspec-rails (6.1.4) actionpack (>= 6.1) activesupport (>= 6.1) railties (>= 6.1) From 887138c2a542b4c741c35fa6c2072fb63f9b2998 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 06:51:38 +0000 Subject: [PATCH 35/45] build(deps): bump aws-sdk-core from 3.201.4 to 3.201.5 Bumps [aws-sdk-core](https://github.com/aws/aws-sdk-ruby) from 3.201.4 to 3.201.5. - [Release notes](https://github.com/aws/aws-sdk-ruby/releases) - [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-core/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-ruby/commits) --- updated-dependencies: - dependency-name: aws-sdk-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 140a2cb7c6c..e87aa454836 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -343,10 +343,10 @@ GEM awrence (1.2.1) aws-eventstream (1.3.0) aws-partitions (1.964.0) - aws-sdk-core (3.201.4) + aws-sdk-core (3.201.5) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) - aws-sigv4 (~> 1.8) + aws-sigv4 (~> 1.9) jmespath (~> 1, >= 1.6.1) aws-sdk-kms (1.88.0) aws-sdk-core (~> 3, >= 3.201.0) From 9e9b27c8c55f07b3f912e5e933379963ec9bfa79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Fri, 16 Aug 2024 07:55:02 +0200 Subject: [PATCH 36/45] Rename work package actions https://community.openproject.org/work_packages/56900 --- config/locales/js-en.yml | 4 ++-- .../wp-context-menu/wp-static-context-menu-actions.ts | 7 +++++-- .../features/work_packages/bulk/copy_work_package_spec.rb | 2 +- .../features/work_packages/bulk/move_work_package_spec.rb | 4 ++-- spec/features/work_packages/copy_spec.rb | 2 +- spec/features/work_packages/details/context_menu_spec.rb | 2 +- .../table/context_menu/context_menu_shared_examples.rb | 8 ++++---- 7 files changed, 16 insertions(+), 13 deletions(-) diff --git a/config/locales/js-en.yml b/config/locales/js-en.yml index a7eeb71bc84..17ec4bc4ed3 100644 --- a/config/locales/js-en.yml +++ b/config/locales/js-en.yml @@ -83,7 +83,7 @@ en: button_back_to_list_view: "Back to list view" button_cancel: "Cancel" button_close: "Close" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Check all" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -91,7 +91,7 @@ en: button_copy: "Copy" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Custom fields" button_delete: "Delete" button_delete_watcher: "Delete watcher" diff --git a/frontend/src/app/shared/components/op-context-menu/wp-context-menu/wp-static-context-menu-actions.ts b/frontend/src/app/shared/components/op-context-menu/wp-context-menu/wp-static-context-menu-actions.ts index f4a140ed3c8..cd1ae3a3eed 100644 --- a/frontend/src/app/shared/components/op-context-menu/wp-context-menu/wp-static-context-menu-actions.ts +++ b/frontend/src/app/shared/components/op-context-menu/wp-context-menu/wp-static-context-menu-actions.ts @@ -1,4 +1,6 @@ -import { WorkPackageAction } from 'core-app/features/work-packages/components/wp-table/context-menu-helper/wp-context-menu-helper.service'; +import { + WorkPackageAction, +} from 'core-app/features/work-packages/components/wp-table/context-menu-helper/wp-context-menu-helper.service'; export const PERMITTED_CONTEXT_MENU_ACTIONS:WorkPackageAction[] = [ { @@ -16,7 +18,8 @@ export const PERMITTED_CONTEXT_MENU_ACTIONS:WorkPackageAction[] = [ link: 'move', }, { - key: 'copy', + key: 'duplicate', + icon: 'icon-copy', link: 'copy', }, { diff --git a/spec/features/work_packages/bulk/copy_work_package_spec.rb b/spec/features/work_packages/bulk/copy_work_package_spec.rb index d9ffe06b2f4..e93ab25a120 100644 --- a/spec/features/work_packages/bulk/copy_work_package_spec.rb +++ b/spec/features/work_packages/bulk/copy_work_package_spec.rb @@ -301,7 +301,7 @@ RSpec.describe "Copy work packages through Rails view", :js, :with_cuprite do it "copies the work package" do context_menu.open_for work_package - context_menu.choose "Copy to other project" + context_menu.choose "Duplicate to other project" # On work packages move page expect_page_reload do diff --git a/spec/features/work_packages/bulk/move_work_package_spec.rb b/spec/features/work_packages/bulk/move_work_package_spec.rb index 68fa09f984b..ad576c7af4b 100644 --- a/spec/features/work_packages/bulk/move_work_package_spec.rb +++ b/spec/features/work_packages/bulk/move_work_package_spec.rb @@ -78,7 +78,7 @@ RSpec.describe "Moving a work package through Rails view", :js do expect(child_wp.project_id).to eq(project.id) context_menu.open_for work_package - context_menu.choose "Change project" + context_menu.choose "Move to another project" # On work packages move page expect(page).to have_css("#new_project_id") @@ -179,7 +179,7 @@ RSpec.describe "Moving a work package through Rails view", :js do it "does not allow to move" do context_menu.open_for work_package - context_menu.expect_no_options "Change project" + context_menu.expect_no_options "Move to another project" end end end diff --git a/spec/features/work_packages/copy_spec.rb b/spec/features/work_packages/copy_spec.rb index 4f658b680cb..d9e48240eec 100644 --- a/spec/features/work_packages/copy_spec.rb +++ b/spec/features/work_packages/copy_spec.rb @@ -135,7 +135,7 @@ RSpec.describe "Work package copy", :js, :selenium do # Go to add cost entry page find("#action-show-more-dropdown-menu .button").click - find(".menu-item", text: "Copy", exact_text: true).click + find(".menu-item", text: "Duplicate", exact_text: true).click to_copy_work_package_page = Pages::FullWorkPackageCreate.new(original_work_package:) to_copy_work_package_page.update_attributes Description: "Copied WP Description" diff --git a/spec/features/work_packages/details/context_menu_spec.rb b/spec/features/work_packages/details/context_menu_spec.rb index 1620d50c1af..3677a26a48a 100644 --- a/spec/features/work_packages/details/context_menu_spec.rb +++ b/spec/features/work_packages/details/context_menu_spec.rb @@ -13,7 +13,7 @@ RSpec.describe "Work package single context menu", :js do end it "sets the correct copy project link" do - find(".menu-item", text: "Copy to other project", exact_text: true).click + find(".menu-item", text: "Duplicate to other project", exact_text: true).click expect(page).to have_css("h2", text: I18n.t(:button_copy)) expect(page).to have_css("a.work_package", text: "##{work_package.id}") expect(page).to have_current_path /work_packages\/move\/new\?copy=true&ids\[\]=#{work_package.id}/ diff --git a/spec/features/work_packages/table/context_menu/context_menu_shared_examples.rb b/spec/features/work_packages/table/context_menu/context_menu_shared_examples.rb index f09dfbb757d..e6774df2534 100644 --- a/spec/features/work_packages/table/context_menu/context_menu_shared_examples.rb +++ b/spec/features/work_packages/table/context_menu/context_menu_shared_examples.rb @@ -28,13 +28,13 @@ RSpec.shared_examples_for "provides a single WP context menu" do # Open Move open_context_menu.call - menu.choose("Change project") + menu.choose("Move to another project") expect(page).to have_css("h2", text: I18n.t(:button_move)) expect(page).to have_css("a.work_package", text: "##{work_package.id}") # Open Copy open_context_menu.call - menu.choose("Copy") + menu.choose("Duplicate") # Split view open in copy state expect(page) .to have_css(".wp-new-top-row", @@ -62,9 +62,9 @@ RSpec.shared_examples_for "provides a single WP context menu" do open_context_menu.call menu.expect_no_options "Add predecessor", "Add follower, Show relations" - # Copy to other project + # Duplicate to other project open_context_menu.call - menu.choose("Copy to other project") + menu.choose("Duplicate to other project") expect(page).to have_css("h2", text: I18n.t(:button_copy)) expect(page).to have_css("a.work_package", text: "##{work_package.id}") end From 1521955fc0817d4178c138c9a9d6bb57cc686e99 Mon Sep 17 00:00:00 2001 From: Judith Roth Date: Fri, 16 Aug 2024 09:51:34 +0200 Subject: [PATCH 37/45] [#56440] Add lookbook description for projects autocompleter with search icon https://community.openproject.org/work_packages/56440 And fix style with magnifier icon but no multiselect --- ...rojects_autocomplete_with_search_icon.sass | 9 +++--- .../docs/patterns/03-autocompleters.md.erb | 6 ++++ .../common/autocomplete_preview.rb | 4 +++ .../project_with_search_icon.html.erb | 28 +++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 lookbook/previews/open_project/common/autocomplete_preview/project_with_search_icon.html.erb diff --git a/frontend/src/global_styles/content/_projects_autocomplete_with_search_icon.sass b/frontend/src/global_styles/content/_projects_autocomplete_with_search_icon.sass index 50a53108fc8..5217245665e 100644 --- a/frontend/src/global_styles/content/_projects_autocomplete_with_search_icon.sass +++ b/frontend/src/global_styles/content/_projects_autocomplete_with_search_icon.sass @@ -1,11 +1,12 @@ @import 'helpers' .projects-autocomplete-with-search-icon - ng-select - .ng-placeholder + ng-select[ng-reflect-multiple='false'] + input margin-left: 18px - .ng-value-container + ng-select + .ng-select-container @extend .icon-search &:before @include icon-font-common - padding-right: 5px + padding-left: 10px diff --git a/lookbook/docs/patterns/03-autocompleters.md.erb b/lookbook/docs/patterns/03-autocompleters.md.erb index c383ef24a31..b42ceb14747 100644 --- a/lookbook/docs/patterns/03-autocompleters.md.erb +++ b/lookbook/docs/patterns/03-autocompleters.md.erb @@ -76,6 +76,12 @@ Keep in mind that this component uses the live projects API, so results will dep <%= embed OpenProject::Common::AutocompletePreview, :project, panels: %i[source] %> +#### Project autocompletion with search icon + +There is also an flag for a search icon within the select: + +<%= embed OpenProject::Common::AutocompletePreview, :project_with_search_icon, panels: %i[source] %> + ### Outside primer If you're not in a primer form, you can render the autocomplete directly like so: diff --git a/lookbook/previews/open_project/common/autocomplete_preview.rb b/lookbook/previews/open_project/common/autocomplete_preview.rb index ce5b9feb214..607cfd7b193 100644 --- a/lookbook/previews/open_project/common/autocomplete_preview.rb +++ b/lookbook/previews/open_project/common/autocomplete_preview.rb @@ -44,6 +44,10 @@ module OpenProject def project render_with_template end + + def project_with_search_icon + render_with_template + end end end end diff --git a/lookbook/previews/open_project/common/autocomplete_preview/project_with_search_icon.html.erb b/lookbook/previews/open_project/common/autocomplete_preview/project_with_search_icon.html.erb new file mode 100644 index 00000000000..8836519d7f4 --- /dev/null +++ b/lookbook/previews/open_project/common/autocomplete_preview/project_with_search_icon.html.erb @@ -0,0 +1,28 @@ +<% + the_form = Class.new(ApplicationForm) do + form do |f| + f.project_autocompleter( + name: :id, + label: Project.model_name.human, + visually_hide_label: true, + autocomplete_options: { + with_search_icon: true, + openDirectly: false, + focusDirectly: false, + dropdownPosition: 'bottom', + disabledProjects: Project.visible.take(10).pluck(:id).to_h { |id| [id, "Disabled reason!"] }, + } + ) + end + end + + model = Project.new +%> + +<%= primer_form_with( + model:, + url: '/abc', + id: 'asdf') do |f| + render(the_form.new(f)) +end +%> From 5e3fee3795773b52825fe093f553565974a2f660 Mon Sep 17 00:00:00 2001 From: ulferts Date: Tue, 28 May 2024 20:44:27 +0200 Subject: [PATCH 38/45] simplify project status_code order --- app/models/queries/projects/orders/project_status_order.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/queries/projects/orders/project_status_order.rb b/app/models/queries/projects/orders/project_status_order.rb index acabb614fcb..7922a19f380 100644 --- a/app/models/queries/projects/orders/project_status_order.rb +++ b/app/models/queries/projects/orders/project_status_order.rb @@ -37,7 +37,7 @@ class Queries::Projects::Orders::ProjectStatusOrder < Queries::Orders::Base def order(scope) with_raise_on_invalid do - scope.order(Arel.sql("status_code").send(direction)) + scope.order(status_code: direction) end end end From dc0778f36e5414674d756ddfbac58148d342e870 Mon Sep 17 00:00:00 2001 From: ulferts Date: Fri, 8 Mar 2024 11:29:38 +0100 Subject: [PATCH 39/45] more efficient id fetching --- app/components/projects/index_page_header_component.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/components/projects/index_page_header_component.rb b/app/components/projects/index_page_header_component.rb index ee0bdbe3f0d..eb8aefb86ae 100644 --- a/app/components/projects/index_page_header_component.rb +++ b/app/components/projects/index_page_header_component.rb @@ -65,9 +65,8 @@ class Projects::IndexPageHeaderComponent < ApplicationComponent @gantt_portfolio_project_ids ||= @query .results .where(active: true) - .select(:id) - .uniq .pluck(:id) + .uniq end def page_title From 278127858371b0164dc86261041ac4ddba5b7441 Mon Sep 17 00:00:00 2001 From: Henriette Darge Date: Fri, 16 Aug 2024 10:56:38 +0200 Subject: [PATCH 40/45] Go back to only one PR template as Github currently does not support an automatic switch between different templates (see: https://stackoverflow.com/q/73771068/8900797) --- .../bug_pull_request_template.md | 17 ----------------- ...est_template.md => pull_request_template.md} | 0 2 files changed, 17 deletions(-) delete mode 100644 .github/PULL_REQUEST_TEMPLATE/bug_pull_request_template.md rename .github/{PULL_REQUEST_TEMPLATE/feature_pull_request_template.md => pull_request_template.md} (100%) diff --git a/.github/PULL_REQUEST_TEMPLATE/bug_pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/bug_pull_request_template.md deleted file mode 100644 index c44b76298c4..00000000000 --- a/.github/PULL_REQUEST_TEMPLATE/bug_pull_request_template.md +++ /dev/null @@ -1,17 +0,0 @@ -# Ticket - - - - - - -# What are you trying to accomplish? - - -## Screenshots - - -# Merge checklist - -- [ ] Added/updated tests -- [ ] Tested major browsers (Chrome, Firefox, Edge, ...) diff --git a/.github/PULL_REQUEST_TEMPLATE/feature_pull_request_template.md b/.github/pull_request_template.md similarity index 100% rename from .github/PULL_REQUEST_TEMPLATE/feature_pull_request_template.md rename to .github/pull_request_template.md From a87826c335a4e39352c760c8d0de8399de40bca6 Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Sat, 17 Aug 2024 03:08:11 +0000 Subject: [PATCH 41/45] update locales from crowdin [ci skip] --- config/locales/crowdin/fr.yml | 24 +++++++++---------- config/locales/crowdin/js-af.yml | 4 ++-- config/locales/crowdin/js-ar.yml | 4 ++-- config/locales/crowdin/js-az.yml | 4 ++-- config/locales/crowdin/js-be.yml | 4 ++-- config/locales/crowdin/js-bg.yml | 4 ++-- config/locales/crowdin/js-ca.yml | 4 ++-- config/locales/crowdin/js-ckb-IR.yml | 4 ++-- config/locales/crowdin/js-cs.yml | 4 ++-- config/locales/crowdin/js-da.yml | 4 ++-- config/locales/crowdin/js-de.yml | 4 ++-- config/locales/crowdin/js-el.yml | 4 ++-- config/locales/crowdin/js-eo.yml | 4 ++-- config/locales/crowdin/js-es.yml | 4 ++-- config/locales/crowdin/js-et.yml | 4 ++-- config/locales/crowdin/js-eu.yml | 4 ++-- config/locales/crowdin/js-fa.yml | 4 ++-- config/locales/crowdin/js-fi.yml | 4 ++-- config/locales/crowdin/js-fil.yml | 4 ++-- config/locales/crowdin/js-fr.yml | 6 ++--- config/locales/crowdin/js-he.yml | 4 ++-- config/locales/crowdin/js-hi.yml | 4 ++-- config/locales/crowdin/js-hr.yml | 4 ++-- config/locales/crowdin/js-hu.yml | 4 ++-- config/locales/crowdin/js-id.yml | 4 ++-- config/locales/crowdin/js-it.yml | 4 ++-- config/locales/crowdin/js-ja.yml | 4 ++-- config/locales/crowdin/js-ka.yml | 4 ++-- config/locales/crowdin/js-kk.yml | 4 ++-- config/locales/crowdin/js-ko.yml | 4 ++-- config/locales/crowdin/js-lt.yml | 4 ++-- config/locales/crowdin/js-lv.yml | 4 ++-- config/locales/crowdin/js-mn.yml | 4 ++-- config/locales/crowdin/js-ms.yml | 4 ++-- config/locales/crowdin/js-ne.yml | 4 ++-- config/locales/crowdin/js-nl.yml | 4 ++-- config/locales/crowdin/js-no.yml | 4 ++-- config/locales/crowdin/js-pl.yml | 4 ++-- config/locales/crowdin/js-pt-BR.yml | 4 ++-- config/locales/crowdin/js-pt-PT.yml | 4 ++-- config/locales/crowdin/js-ro.yml | 6 ++--- config/locales/crowdin/js-ru.yml | 4 ++-- config/locales/crowdin/js-rw.yml | 4 ++-- config/locales/crowdin/js-si.yml | 4 ++-- config/locales/crowdin/js-sk.yml | 4 ++-- config/locales/crowdin/js-sl.yml | 4 ++-- config/locales/crowdin/js-sr.yml | 4 ++-- config/locales/crowdin/js-sv.yml | 4 ++-- config/locales/crowdin/js-th.yml | 4 ++-- config/locales/crowdin/js-tr.yml | 4 ++-- config/locales/crowdin/js-uk.yml | 4 ++-- config/locales/crowdin/js-uz.yml | 4 ++-- config/locales/crowdin/js-vi.yml | 4 ++-- config/locales/crowdin/js-zh-CN.yml | 4 ++-- config/locales/crowdin/js-zh-TW.yml | 4 ++-- config/locales/crowdin/vi.yml | 4 ++-- .../backlogs/config/locales/crowdin/ro.yml | 2 +- modules/bim/config/locales/crowdin/ar.yml | 8 +++---- .../calendar/config/locales/crowdin/ar.yml | 2 +- .../calendar/config/locales/crowdin/js-ar.yml | 6 ++--- .../documents/config/locales/crowdin/ro.yml | 4 ++-- .../grids/config/locales/crowdin/js-ro.yml | 2 +- .../reporting/config/locales/crowdin/ro.yml | 2 +- .../storages/config/locales/crowdin/fr.yml | 20 ++++++++-------- .../storages/config/locales/crowdin/vi.yml | 2 +- .../config/locales/crowdin/fr.yml | 2 +- .../config/locales/crowdin/js-fr.yml | 6 ++--- .../config/locales/crowdin/js-ro.yml | 4 ++-- .../config/locales/crowdin/fr.yml | 10 ++++---- .../config/locales/crowdin/vi.yml | 10 ++++---- 70 files changed, 164 insertions(+), 164 deletions(-) diff --git a/config/locales/crowdin/fr.yml b/config/locales/crowdin/fr.yml index 103d76c4cf3..115328feaba 100644 --- a/config/locales/crowdin/fr.yml +++ b/config/locales/crowdin/fr.yml @@ -67,7 +67,7 @@ fr: text: "Voulez-vous vraiment supprimer le jeton actuellement utilisé pour l'édition Entreprise ?" title: "Supprimer le jeton" replace_token: "Remplacer votre licence actuelle" - order: "Commander l'édition Entreprise autohebergée" + order: "Commander l'édition Entreprise auto-hébergée" paste: "Coller votre jeton de support pour la version Entreprise" required_for_feature: "Cet add-on n'est disponible qu'avec un jeton de support actif pour la version Entreprise." enterprise_link: "Pour plus d'informations, cliquez ici." @@ -212,12 +212,12 @@ fr: reorder_confirmation: "Attention : l'ordre actuel des valeurs disponibles sera perdu. Continuer ?" instructions: is_required: "Marquer le champ personnalisé comme requis. Cela rendra obligatoire de remplir le champ lors de la création ou de la mise à jour des ressources existantes." - is_required_for_project: "Check to enable this attribute and make it required in all projects. It cannot be deactived for individual projects." + is_required_for_project: "Cocher pour activer cet attribut et le rendre nécessaire dans tous les projets. Il ne peut pas être désactivé pour certains projets." is_for_all: "Marquer le champ personnalisé comme disponible dans tous les projets existants et nouveaux." searchable: "Inclure les valeurs des champs lors de l'utilisation de la fonctionnalité de recherche globale." - searchable_for_project: "Check to make this attribute available as a filter in project lists." + searchable_for_project: "Cocher pour rendre cet attribut disponible en tant que filtre dans les listes de projets." editable: "Autoriser les utilisateurs à modifier eux-mêmes le champ" - admin_only: "Check to make this attribute only visible to administrators. Users without admin rights will not be able to view or edit it." + admin_only: "Cocher pour rendre cet attribut visible uniquement par les administrateurs. Les utilisateurs sans droits d'administration ne seront pas en mesure de le voir ou de l'éditer." is_filter: > Permet au champ personnalisé d'être utilisé dans un filtre dans les vues des lots de travaux. Notez que le champ personnalisé n'apparaîtra dans les vues globales que si l'option "Pour tous les projets" est sélectionnée. tab: @@ -389,8 +389,8 @@ fr: my: access_token: create_dialog: - header: The %{type} token has been generated - warning: Note that this is the only time you will see this token, make sure to copy it now. + header: Le jeton %{type} a été généré + warning: Notez que c'est la seule fois que vous verrez ce jeton, assurez-vous de le copier maintenant. errors: token_name_blank: "Veuillez fournir un nom de jeton d'API" token_name_in_use: "Ce nom de jeton d'API est déjà utilisé, veuillez en choisir un autre" @@ -620,7 +620,7 @@ fr: possible_values: "Valeurs possibles" regexp: "Expression régulière" searchable: "Recherchable" - admin_only: "Admin-only" + admin_only: "Administrateurs uniquement" custom_value: value: "Valeur" doorkeeper/application: @@ -690,7 +690,7 @@ fr: versions: "Versions" work_packages: "Lots de Travaux" project_custom_field: - is_required: "Required for all projects" + is_required: "Requis pour tous les projets" custom_field_section: Section query: column_names: "Colonnes" @@ -1161,8 +1161,8 @@ fr: other: "Rôles" status: "Statut du lot de travaux" token/api: - one: Access token - other: Access tokens + one: Jeton d'accès + other: Jetons d’accès type: "Type" user: "Utilisateur" version: "Version" @@ -2170,8 +2170,8 @@ fr: label_next_week: "Semaine suivante" label_no_change_option: "(Aucun changement)" label_no_data: "Aucune donnée à afficher" - label_no_due_date: "no finish date" - label_no_start_date: "no start date" + label_no_due_date: "pas de date de fin" + label_no_start_date: "pas de date de début" label_no_parent_page: "Aucune page parente" label_nothing_display: "Rien à afficher" label_nobody: "personne" diff --git a/config/locales/crowdin/js-af.yml b/config/locales/crowdin/js-af.yml index 5bc2a8c9e57..a0b8b7886ab 100644 --- a/config/locales/crowdin/js-af.yml +++ b/config/locales/crowdin/js-af.yml @@ -66,7 +66,7 @@ af: button_back_to_list_view: "Back to list view" button_cancel: "Kanselleer" button_close: "Maak toe" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Kontroleer almal" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ af: button_copy: "Kopieer" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Pasgemaakte velde" button_delete: "Skrap" button_delete_watcher: "Delete watcher" diff --git a/config/locales/crowdin/js-ar.yml b/config/locales/crowdin/js-ar.yml index a355f5e5c73..2c0cf5bf00e 100644 --- a/config/locales/crowdin/js-ar.yml +++ b/config/locales/crowdin/js-ar.yml @@ -66,7 +66,7 @@ ar: button_back_to_list_view: "Back to list view" button_cancel: "إلغاء" button_close: "أغلِق" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "اختر الكل" button_configure-form: "Configure form" button_confirm: "تأكيد" @@ -74,7 +74,7 @@ ar: button_copy: "انسخ" button_copy_to_clipboard: "نسخ إلى الحافظة" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "الحقول المخصصة" button_delete: "احذف" button_delete_watcher: "احذف المراقب" diff --git a/config/locales/crowdin/js-az.yml b/config/locales/crowdin/js-az.yml index 8bf6f21968c..cc25e6993f1 100644 --- a/config/locales/crowdin/js-az.yml +++ b/config/locales/crowdin/js-az.yml @@ -66,7 +66,7 @@ az: button_back_to_list_view: "Siyahı görünüşünə qayıt" button_cancel: "İmtina" button_close: "Bağla" - button_change_project: "Layihəni dəyişdir" + button_change_project: "Move to another project" button_check_all: "Hamısını seç" button_configure-form: "Formu konfiqurasiya et" button_confirm: "Təsdiqlə" @@ -74,7 +74,7 @@ az: button_copy: "Kopyala" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Digər layihəyə kopyala" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Özəl sahələr" button_delete: "Sil" button_delete_watcher: "İzləyicini sil" diff --git a/config/locales/crowdin/js-be.yml b/config/locales/crowdin/js-be.yml index 4dd1e095006..b74b23833d0 100644 --- a/config/locales/crowdin/js-be.yml +++ b/config/locales/crowdin/js-be.yml @@ -66,7 +66,7 @@ be: button_back_to_list_view: "Back to list view" button_cancel: "Cancel" button_close: "Зачыніць" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Check all" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ be: button_copy: "Скапіраваць" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Карыстальніцкія палі" button_delete: "Выдаліць" button_delete_watcher: "Delete watcher" diff --git a/config/locales/crowdin/js-bg.yml b/config/locales/crowdin/js-bg.yml index ce0f1034cf5..4e4011136bb 100644 --- a/config/locales/crowdin/js-bg.yml +++ b/config/locales/crowdin/js-bg.yml @@ -66,7 +66,7 @@ bg: button_back_to_list_view: "Back to list view" button_cancel: "Отказ" button_close: "Close" - button_change_project: "Промяна на проект" + button_change_project: "Move to another project" button_check_all: "Избери всички" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ bg: button_copy: "Копиране" button_copy_to_clipboard: "Копирай в буфер" button_copy_link_to_clipboard: "Копиране на връзката в клипборда" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "допълнителни полета" button_delete: "Изтрий" button_delete_watcher: "Премахни наблюдаващ" diff --git a/config/locales/crowdin/js-ca.yml b/config/locales/crowdin/js-ca.yml index cb6b04b7b10..0c4b7a52b2a 100644 --- a/config/locales/crowdin/js-ca.yml +++ b/config/locales/crowdin/js-ca.yml @@ -66,7 +66,7 @@ ca: button_back_to_list_view: "Tornar a la vista de llista" button_cancel: "Cancel·la" button_close: "Tanca" - button_change_project: "Canviar el projecte" + button_change_project: "Move to another project" button_check_all: "Marcar-ho tot" button_configure-form: "Configurar formulari" button_confirm: "Confirmar" @@ -74,7 +74,7 @@ ca: button_copy: "Copiar" button_copy_to_clipboard: "Copiar al porta-retalls" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copia a un altre projecte" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Camps personalitzats" button_delete: "Esborrar" button_delete_watcher: "Eliminar l'observador" diff --git a/config/locales/crowdin/js-ckb-IR.yml b/config/locales/crowdin/js-ckb-IR.yml index 4c374bb6cb8..a14ea13d97e 100644 --- a/config/locales/crowdin/js-ckb-IR.yml +++ b/config/locales/crowdin/js-ckb-IR.yml @@ -66,7 +66,7 @@ ckb-IR: button_back_to_list_view: "Back to list view" button_cancel: "Cancel" button_close: "Close" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Check all" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ ckb-IR: button_copy: "Copy" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Custom fields" button_delete: "Delete" button_delete_watcher: "Delete watcher" diff --git a/config/locales/crowdin/js-cs.yml b/config/locales/crowdin/js-cs.yml index d5e01bf1f0b..8347f3c1124 100644 --- a/config/locales/crowdin/js-cs.yml +++ b/config/locales/crowdin/js-cs.yml @@ -66,7 +66,7 @@ cs: button_back_to_list_view: "Zpět na seznam" button_cancel: "Zrušit" button_close: "Zavřít" - button_change_project: "Změnit projekt" + button_change_project: "Move to another project" button_check_all: "Zaškrtnout vše" button_configure-form: "Nastavení formuláře" button_confirm: "Potvrdit" @@ -74,7 +74,7 @@ cs: button_copy: "Kopírovat" button_copy_to_clipboard: "Kopírovat do schránky" button_copy_link_to_clipboard: "Kopírovat odkaz do schránky" - button_copy_to_other_project: "Kopírovat do jiného projektu" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Vlastní pole" button_delete: "Odstranit" button_delete_watcher: "Smazat sledujícího uživatele" diff --git a/config/locales/crowdin/js-da.yml b/config/locales/crowdin/js-da.yml index f376273cf81..1d1b1412ea0 100644 --- a/config/locales/crowdin/js-da.yml +++ b/config/locales/crowdin/js-da.yml @@ -66,7 +66,7 @@ da: button_back_to_list_view: "Tilbage til listevisning" button_cancel: "Annuller" button_close: "Luk" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Vælg alt" button_configure-form: "Konfigurer formularen" button_confirm: "Bekræft" @@ -74,7 +74,7 @@ da: button_copy: "Kopier" button_copy_to_clipboard: "Kopiér til Udklipsholder" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Selvvalgte felter" button_delete: "Slet" button_delete_watcher: "Slet tilsynsførende" diff --git a/config/locales/crowdin/js-de.yml b/config/locales/crowdin/js-de.yml index 537e2a8ff4d..ec151afa480 100644 --- a/config/locales/crowdin/js-de.yml +++ b/config/locales/crowdin/js-de.yml @@ -66,7 +66,7 @@ de: button_back_to_list_view: "Zurück zur Listenansicht" button_cancel: "Abbrechen" button_close: "Schließen" - button_change_project: "In anderes Projekt verschieben" + button_change_project: "Move to another project" button_check_all: "Alle auswählen" button_configure-form: "Formular konfigurieren" button_confirm: "Bestätigen" @@ -74,7 +74,7 @@ de: button_copy: "Kopieren" button_copy_to_clipboard: "In Zwischenablage kopieren" button_copy_link_to_clipboard: "Link in Zwischenablage kopieren" - button_copy_to_other_project: "In anderes Projekt kopieren" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Benutzerdefinierte Felder" button_delete: "Löschen" button_delete_watcher: "Beobachter löschen" diff --git a/config/locales/crowdin/js-el.yml b/config/locales/crowdin/js-el.yml index d4290954356..399a9287e13 100644 --- a/config/locales/crowdin/js-el.yml +++ b/config/locales/crowdin/js-el.yml @@ -66,7 +66,7 @@ el: button_back_to_list_view: "Επιστροφή στη προβολή λίστας" button_cancel: "Ακύρωση" button_close: "Κλείσιμο" - button_change_project: "Αλλαγή έργου" + button_change_project: "Move to another project" button_check_all: "Επιλογή όλων" button_configure-form: "Διαμόρφωση φόρμας" button_confirm: "Επιβεβαίωση" @@ -74,7 +74,7 @@ el: button_copy: "Αντιγραφή" button_copy_to_clipboard: "Αντιγραφή στο πρόχειρο" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Προσαρμοσμένα πεδία" button_delete: "Διαγραφή" button_delete_watcher: "Διαγραφή παρατηρητή" diff --git a/config/locales/crowdin/js-eo.yml b/config/locales/crowdin/js-eo.yml index 9ebd011e77d..e55992c23eb 100644 --- a/config/locales/crowdin/js-eo.yml +++ b/config/locales/crowdin/js-eo.yml @@ -66,7 +66,7 @@ eo: button_back_to_list_view: "Reen al la listo" button_cancel: "Nnuligi" button_close: "Fermi" - button_change_project: "Ŝanĝi projekton" + button_change_project: "Move to another project" button_check_all: "Marki ĉiujn" button_configure-form: "Agordi formularon" button_confirm: "Konfirmi" @@ -74,7 +74,7 @@ eo: button_copy: "Kopii" button_copy_to_clipboard: "Kopii al la tondujo" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Propraj kampoj" button_delete: "Forigi" button_delete_watcher: "Forigi observantojn" diff --git a/config/locales/crowdin/js-es.yml b/config/locales/crowdin/js-es.yml index 49322423b3a..bebfc60e30c 100644 --- a/config/locales/crowdin/js-es.yml +++ b/config/locales/crowdin/js-es.yml @@ -66,7 +66,7 @@ es: button_back_to_list_view: "Volver a la lista" button_cancel: "Cancelar" button_close: "Cerrar" - button_change_project: "Cambiar proyecto" + button_change_project: "Move to another project" button_check_all: "Seleccionar todos" button_configure-form: "Configurar formulario" button_confirm: "Confirmar" @@ -74,7 +74,7 @@ es: button_copy: "Copiar" button_copy_to_clipboard: "Copiar en el portapapeles" button_copy_link_to_clipboard: "Copiar enlace al portapapeles" - button_copy_to_other_project: "Copiar en otro proyecto" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Campos personalizados" button_delete: "Eliminar" button_delete_watcher: "Eliminar observador" diff --git a/config/locales/crowdin/js-et.yml b/config/locales/crowdin/js-et.yml index d48abf1a9ff..443b46b1bf3 100644 --- a/config/locales/crowdin/js-et.yml +++ b/config/locales/crowdin/js-et.yml @@ -66,7 +66,7 @@ et: button_back_to_list_view: "Back to list view" button_cancel: "Tühista" button_close: "Sulge" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Märgi kõik" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ et: button_copy: "Kopeeri" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Lisaväljad" button_delete: "Kustuta" button_delete_watcher: "Kustuta jäligja" diff --git a/config/locales/crowdin/js-eu.yml b/config/locales/crowdin/js-eu.yml index 03eb5036354..76a3995f2b8 100644 --- a/config/locales/crowdin/js-eu.yml +++ b/config/locales/crowdin/js-eu.yml @@ -66,7 +66,7 @@ eu: button_back_to_list_view: "Back to list view" button_cancel: "Cancel" button_close: "Itxi" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Check all" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ eu: button_copy: "Copy" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Custom fields" button_delete: "Delete" button_delete_watcher: "Delete watcher" diff --git a/config/locales/crowdin/js-fa.yml b/config/locales/crowdin/js-fa.yml index 056e3400c84..83cbb1ba14c 100644 --- a/config/locales/crowdin/js-fa.yml +++ b/config/locales/crowdin/js-fa.yml @@ -66,7 +66,7 @@ fa: button_back_to_list_view: "برگشت به نمایش لیستی" button_cancel: "لغو" button_close: "Close" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "بررسی همه" button_configure-form: "تنظیمات فرم" button_confirm: "تایید" @@ -74,7 +74,7 @@ fa: button_copy: "کپی" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Custom fields" button_delete: "حذف" button_delete_watcher: "حذف ناظر" diff --git a/config/locales/crowdin/js-fi.yml b/config/locales/crowdin/js-fi.yml index 4a04ac013ab..b9609417649 100644 --- a/config/locales/crowdin/js-fi.yml +++ b/config/locales/crowdin/js-fi.yml @@ -66,7 +66,7 @@ fi: button_back_to_list_view: "Takaisin listaan" button_cancel: "Peruuta" button_close: "Sulje" - button_change_project: "Vaihda projekti" + button_change_project: "Move to another project" button_check_all: "Valitse kaikki" button_configure-form: "Lomakkeen asetukset" button_confirm: "Vahvista" @@ -74,7 +74,7 @@ fi: button_copy: "Kopioi" button_copy_to_clipboard: "Kopioi leikepöydälle" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Mukautetut kentät" button_delete: "Poista" button_delete_watcher: "Poista seuraaja" diff --git a/config/locales/crowdin/js-fil.yml b/config/locales/crowdin/js-fil.yml index d82ad781d29..11ebc0da7b5 100644 --- a/config/locales/crowdin/js-fil.yml +++ b/config/locales/crowdin/js-fil.yml @@ -66,7 +66,7 @@ fil: button_back_to_list_view: "Bumalik sa listahan ng view" button_cancel: "Kanselahin" button_close: "Isara" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Suriin lahat" button_configure-form: "Configure form" button_confirm: "Kumpirmahin" @@ -74,7 +74,7 @@ fil: button_copy: "Kopyahin" button_copy_to_clipboard: "Kopyahin sa clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Mga pasadyang patlang" button_delete: "Burahin" button_delete_watcher: "Burahin ang manunuod" diff --git a/config/locales/crowdin/js-fr.yml b/config/locales/crowdin/js-fr.yml index 0a8cc511a62..6b62b7dae21 100644 --- a/config/locales/crowdin/js-fr.yml +++ b/config/locales/crowdin/js-fr.yml @@ -66,7 +66,7 @@ fr: button_back_to_list_view: "Retour à la liste" button_cancel: "Annuler" button_close: "Fermer" - button_change_project: "Changer de projet" + button_change_project: "Move to another project" button_check_all: "Tout cocher" button_configure-form: "Configurer le formulaire" button_confirm: "Confirmer" @@ -74,7 +74,7 @@ fr: button_copy: "Copier" button_copy_to_clipboard: "Copier dans le presse-papier" button_copy_link_to_clipboard: "Copier le lien dans le presse-papiers" - button_copy_to_other_project: "Copier vers un autre projet" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Champs personnalisés" button_delete: "Supprimer" button_delete_watcher: "Supprimer observateur" @@ -369,7 +369,7 @@ fr: "14_4": standard: new_features_html: > - The release contains various new features and improvements, such as:
  • Dark mode option in personal settings
  • Separate permissions for viewing and editing on project attributes
  • Improved status-based progress reporting
  • Connection validation for Nextcloud storages
  • More filter options for project lists
+ La version contient diverses nouvelles fonctionnalités et améliorations, telles que :
  • Option de mode sombre dans les paramètres personnels
  • Séparation des permissions pour la visualisation et l'édition des attributs du projet
  • Amélioration de l'état de progression basé sur le statut
  • Validation de la connexion pour les stockages Nextcloud
  • Plus d'options de filtre pour les listes de projets
ical_sharing_modal: title: "S'abonner au calendrier" inital_setup_error_message: "Une erreur est survenue lors de la récupération des données." diff --git a/config/locales/crowdin/js-he.yml b/config/locales/crowdin/js-he.yml index 9441c699f3b..87bf567a2f8 100644 --- a/config/locales/crowdin/js-he.yml +++ b/config/locales/crowdin/js-he.yml @@ -66,7 +66,7 @@ he: button_back_to_list_view: "חזור לרשימה" button_cancel: "ביטול" button_close: "סגור" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "סמן את כולם" button_configure-form: "טופס הגדרות" button_confirm: "אשר" @@ -74,7 +74,7 @@ he: button_copy: "העתק" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "שדות מותאמים אישית" button_delete: "מחק" button_delete_watcher: "הסרת צופה" diff --git a/config/locales/crowdin/js-hi.yml b/config/locales/crowdin/js-hi.yml index d2dadc8da2a..a4ad699e063 100644 --- a/config/locales/crowdin/js-hi.yml +++ b/config/locales/crowdin/js-hi.yml @@ -66,7 +66,7 @@ hi: button_back_to_list_view: "Back to list view" button_cancel: "निरस्त करें" button_close: "बंद करें" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Check all" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ hi: button_copy: "प्रतिलिपि बनाएँ" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Custom fields" button_delete: "मिटाएँ" button_delete_watcher: "द्रष्टा हटाएँ" diff --git a/config/locales/crowdin/js-hr.yml b/config/locales/crowdin/js-hr.yml index 79460ad0f31..8490bf85aef 100644 --- a/config/locales/crowdin/js-hr.yml +++ b/config/locales/crowdin/js-hr.yml @@ -66,7 +66,7 @@ hr: button_back_to_list_view: "Back to list view" button_cancel: "Odustani" button_close: "Zatvori" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Označi sve" button_configure-form: "Configure form" button_confirm: "Potvrdi" @@ -74,7 +74,7 @@ hr: button_copy: "Kopiraj" button_copy_to_clipboard: "Kopiraj u međuspremnik" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Prilagođena polja" button_delete: "Obriši" button_delete_watcher: "Izbrišite nadglednika" diff --git a/config/locales/crowdin/js-hu.yml b/config/locales/crowdin/js-hu.yml index 6ec3bdbcf5a..820fbfa7d05 100644 --- a/config/locales/crowdin/js-hu.yml +++ b/config/locales/crowdin/js-hu.yml @@ -66,7 +66,7 @@ hu: button_back_to_list_view: "Vissza a lista nézethez" button_cancel: "Mégsem" button_close: "Bezár" - button_change_project: "Cseréld a projektet" + button_change_project: "Move to another project" button_check_all: "Az összes kijelölése" button_configure-form: "Űrlap beállítás" button_confirm: "Jóváhagy" @@ -74,7 +74,7 @@ hu: button_copy: "Másol" button_copy_to_clipboard: "Másolás a vágólapra" button_copy_link_to_clipboard: "Hivatkozás másolása a vágólapra" - button_copy_to_other_project: "Másolás másik projektbe" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Választható mezők" button_delete: "Törlés" button_delete_watcher: "Megfigyelő törlése" diff --git a/config/locales/crowdin/js-id.yml b/config/locales/crowdin/js-id.yml index 2a84ff8f730..8c004b0b667 100644 --- a/config/locales/crowdin/js-id.yml +++ b/config/locales/crowdin/js-id.yml @@ -66,7 +66,7 @@ id: button_back_to_list_view: "Kembali ke tampilan daftar" button_cancel: "Batal" button_close: "Tutup" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Cek semua" button_configure-form: "Mengkonfigurasi formulir" button_confirm: "Konfirmasi" @@ -74,7 +74,7 @@ id: button_copy: "Salin" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Isian kustom" button_delete: "Hapus" button_delete_watcher: "Hapus pemantau" diff --git a/config/locales/crowdin/js-it.yml b/config/locales/crowdin/js-it.yml index f339f505081..8afe6ff1185 100644 --- a/config/locales/crowdin/js-it.yml +++ b/config/locales/crowdin/js-it.yml @@ -66,7 +66,7 @@ it: button_back_to_list_view: "Torna alla visualizzazione in lista" button_cancel: "Annulla" button_close: "Chiuso" - button_change_project: "Cambia progetto" + button_change_project: "Move to another project" button_check_all: "Seleziona tutti" button_configure-form: "Configura modulo" button_confirm: "Conferma" @@ -74,7 +74,7 @@ it: button_copy: "Copia" button_copy_to_clipboard: "Copia negli appunti" button_copy_link_to_clipboard: "Copia link negli appunti" - button_copy_to_other_project: "Copia su altro progetto" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Campo personalizzato" button_delete: "Cancella" button_delete_watcher: "Elimina osservatore" diff --git a/config/locales/crowdin/js-ja.yml b/config/locales/crowdin/js-ja.yml index aa7b7d05048..7fe984c2eb8 100644 --- a/config/locales/crowdin/js-ja.yml +++ b/config/locales/crowdin/js-ja.yml @@ -67,7 +67,7 @@ ja: button_back_to_list_view: "リスト表示に戻る" button_cancel: "キャンセル" button_close: "閉じる" - button_change_project: "プロジェクトの変更" + button_change_project: "Move to another project" button_check_all: "全てを選択" button_configure-form: "フォームを設定" button_confirm: "確認" @@ -75,7 +75,7 @@ ja: button_copy: "コピー" button_copy_to_clipboard: "クリップボードにコピー" button_copy_link_to_clipboard: "クリップボードにリンクをコピー" - button_copy_to_other_project: "他のプロジェクトにコピー" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "カスタムフィールド" button_delete: "削除" button_delete_watcher: "ウォッチャーを削除" diff --git a/config/locales/crowdin/js-ka.yml b/config/locales/crowdin/js-ka.yml index bf78ea85a7e..bba10232b1c 100644 --- a/config/locales/crowdin/js-ka.yml +++ b/config/locales/crowdin/js-ka.yml @@ -66,7 +66,7 @@ ka: button_back_to_list_view: "Back to list view" button_cancel: "გაუქმება" button_close: "დახურვა" - button_change_project: "პროექტის შეცვლა" + button_change_project: "Move to another project" button_check_all: "ყველას მონიშვნა" button_configure-form: "ფორმის მორგება" button_confirm: "დადასტურება" @@ -74,7 +74,7 @@ ka: button_copy: "კოპირება" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "მორგებადი ველები" button_delete: "წაშლა" button_delete_watcher: "Delete watcher" diff --git a/config/locales/crowdin/js-kk.yml b/config/locales/crowdin/js-kk.yml index 25797bbbfec..0d37b4a961d 100644 --- a/config/locales/crowdin/js-kk.yml +++ b/config/locales/crowdin/js-kk.yml @@ -66,7 +66,7 @@ kk: button_back_to_list_view: "Back to list view" button_cancel: "Cancel" button_close: "Close" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Check all" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ kk: button_copy: "Copy" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Custom fields" button_delete: "Delete" button_delete_watcher: "Delete watcher" diff --git a/config/locales/crowdin/js-ko.yml b/config/locales/crowdin/js-ko.yml index 0ae3c8e9a8b..8f0a0112835 100644 --- a/config/locales/crowdin/js-ko.yml +++ b/config/locales/crowdin/js-ko.yml @@ -66,7 +66,7 @@ ko: button_back_to_list_view: "목록으로 돌아가기" button_cancel: "취소" button_close: "닫기" - button_change_project: "프로젝트 변경" + button_change_project: "Move to another project" button_check_all: "모두 선택" button_configure-form: "구성 양식" button_confirm: "확인" @@ -74,7 +74,7 @@ ko: button_copy: "복사" button_copy_to_clipboard: "클립보드 복사" button_copy_link_to_clipboard: "클립보드에 링크 복사" - button_copy_to_other_project: "다른 프로젝트에 복사" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "사용자 정의 필드" button_delete: "삭제" button_delete_watcher: "주시자 삭제" diff --git a/config/locales/crowdin/js-lt.yml b/config/locales/crowdin/js-lt.yml index 719766e44d0..19da6348548 100644 --- a/config/locales/crowdin/js-lt.yml +++ b/config/locales/crowdin/js-lt.yml @@ -66,7 +66,7 @@ lt: button_back_to_list_view: "Atgal į sąrašo vaizdą" button_cancel: "Nutraukti" button_close: "Uždaryti" - button_change_project: "Keisti projektą" + button_change_project: "Move to another project" button_check_all: "Žymėti visus" button_configure-form: "Konfigūruoti formą" button_confirm: "Patvirtinti" @@ -74,7 +74,7 @@ lt: button_copy: "Kopijuoti" button_copy_to_clipboard: "Kopijuoti į iškarpinę" button_copy_link_to_clipboard: "Kopijuoti nuorodą į iškarpinę" - button_copy_to_other_project: "Kopijuoti į kitą projektą" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Pritaikyti laukai" button_delete: "Trinti" button_delete_watcher: "Trinti stebėtoją" diff --git a/config/locales/crowdin/js-lv.yml b/config/locales/crowdin/js-lv.yml index 1dfb3904a5f..ac7b48db106 100644 --- a/config/locales/crowdin/js-lv.yml +++ b/config/locales/crowdin/js-lv.yml @@ -66,7 +66,7 @@ lv: button_back_to_list_view: "Back to list view" button_cancel: "Atcelt" button_close: "Aizvērt" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Atzīmēt visus" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ lv: button_copy: "Copy" button_copy_to_clipboard: "Kopēt uz starpliktuvi" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Pielāgotie lauki" button_delete: "Dzēst" button_delete_watcher: "Dzēst vērotāju" diff --git a/config/locales/crowdin/js-mn.yml b/config/locales/crowdin/js-mn.yml index d61ac457518..ac3d6972ee2 100644 --- a/config/locales/crowdin/js-mn.yml +++ b/config/locales/crowdin/js-mn.yml @@ -66,7 +66,7 @@ mn: button_back_to_list_view: "Back to list view" button_cancel: "Cancel" button_close: "Close" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Check all" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ mn: button_copy: "Copy" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Custom fields" button_delete: "Delete" button_delete_watcher: "Delete watcher" diff --git a/config/locales/crowdin/js-ms.yml b/config/locales/crowdin/js-ms.yml index 078f5033706..2bfd4270103 100644 --- a/config/locales/crowdin/js-ms.yml +++ b/config/locales/crowdin/js-ms.yml @@ -66,7 +66,7 @@ ms: button_back_to_list_view: "Kembali ke paparan senarai" button_cancel: "Batal" button_close: "Tutup" - button_change_project: "Tukar projek" + button_change_project: "Move to another project" button_check_all: "Tanda semua" button_configure-form: "Konfigurasi borang" button_confirm: "Sahkan" @@ -74,7 +74,7 @@ ms: button_copy: "Salin" button_copy_to_clipboard: "Salin ke papan klip" button_copy_link_to_clipboard: "Salin pautan ke papan klip" - button_copy_to_other_project: "Salin ke projek lain" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Ruang tersuai" button_delete: "Padam" button_delete_watcher: "Padam pemerhati" diff --git a/config/locales/crowdin/js-ne.yml b/config/locales/crowdin/js-ne.yml index 7622e750345..bef896590e7 100644 --- a/config/locales/crowdin/js-ne.yml +++ b/config/locales/crowdin/js-ne.yml @@ -66,7 +66,7 @@ ne: button_back_to_list_view: "दृश्य" button_cancel: "Cancel" button_close: "Close" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Check all" button_configure-form: "फारम मिलाउनुहोस्" button_confirm: "निश्चित गर्नुहोस्" @@ -74,7 +74,7 @@ ne: button_copy: "Copy" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Custom fields" button_delete: "Delete" button_delete_watcher: "वाचक हटाउनुहोस् " diff --git a/config/locales/crowdin/js-nl.yml b/config/locales/crowdin/js-nl.yml index e0f77277699..6e1088b1ec1 100644 --- a/config/locales/crowdin/js-nl.yml +++ b/config/locales/crowdin/js-nl.yml @@ -66,7 +66,7 @@ nl: button_back_to_list_view: "Terug naar het overzicht" button_cancel: "Annuleren" button_close: "Sluiten" - button_change_project: "Project wisselen" + button_change_project: "Move to another project" button_check_all: "Selecteer alles" button_configure-form: "Formulier configureren" button_confirm: "Accepteren" @@ -74,7 +74,7 @@ nl: button_copy: "Kopieer" button_copy_to_clipboard: "Kopiëren naar het klembord" button_copy_link_to_clipboard: "Link naar klembord kopiëren" - button_copy_to_other_project: "Kopiëren naar een ander project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Aangepaste velden" button_delete: "Verwijderen" button_delete_watcher: "Kijkers verwijderen" diff --git a/config/locales/crowdin/js-no.yml b/config/locales/crowdin/js-no.yml index fcf4c8e85de..cff067116a5 100644 --- a/config/locales/crowdin/js-no.yml +++ b/config/locales/crowdin/js-no.yml @@ -66,7 +66,7 @@ button_back_to_list_view: "Tilbake til listevisning" button_cancel: "Avbryt" button_close: "Lukk" - button_change_project: "Bytt prosjekt" + button_change_project: "Move to another project" button_check_all: "Velg alle" button_configure-form: "Konfigurer skjema" button_confirm: "Bekreft" @@ -74,7 +74,7 @@ button_copy: "Kopier" button_copy_to_clipboard: "Kopier til utklippstavlen" button_copy_link_to_clipboard: "Kopier lenke til utklippstavlen" - button_copy_to_other_project: "Kopier til et annet prosjekt" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Egendefinerte felter" button_delete: "Slett" button_delete_watcher: "Slett overvåker" diff --git a/config/locales/crowdin/js-pl.yml b/config/locales/crowdin/js-pl.yml index 984b7a3c5cf..881340a423d 100644 --- a/config/locales/crowdin/js-pl.yml +++ b/config/locales/crowdin/js-pl.yml @@ -66,7 +66,7 @@ pl: button_back_to_list_view: "Wróć do widoku listy" button_cancel: "Anuluj" button_close: "Zamknij" - button_change_project: "Zmień projekt" + button_change_project: "Move to another project" button_check_all: "Zaznacz wszystko" button_configure-form: "Skonfiguruj formularz" button_confirm: "Potwierdź" @@ -74,7 +74,7 @@ pl: button_copy: "Kopiuj" button_copy_to_clipboard: "Skopiuj do schowka" button_copy_link_to_clipboard: "Kopiuj link do schowka" - button_copy_to_other_project: "Kopiuj do innego projektu" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Pola niestandardowe" button_delete: "Usuń" button_delete_watcher: "Usuń obserwatora" diff --git a/config/locales/crowdin/js-pt-BR.yml b/config/locales/crowdin/js-pt-BR.yml index ea26362164b..1b88d341480 100644 --- a/config/locales/crowdin/js-pt-BR.yml +++ b/config/locales/crowdin/js-pt-BR.yml @@ -66,7 +66,7 @@ pt-BR: button_back_to_list_view: "Voltar à lista" button_cancel: "Cancelar" button_close: "Fechar" - button_change_project: "Alterar projeto" + button_change_project: "Move to another project" button_check_all: "Marcar todos" button_configure-form: "Configurar formulário" button_confirm: "Confirmar" @@ -74,7 +74,7 @@ pt-BR: button_copy: "Copiar" button_copy_to_clipboard: "Copiar para a área de transferência" button_copy_link_to_clipboard: "Copiar link para área de transferência" - button_copy_to_other_project: "Copiar para outro projeto" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Campos personalizados" button_delete: "Excluir" button_delete_watcher: "Excluir observador" diff --git a/config/locales/crowdin/js-pt-PT.yml b/config/locales/crowdin/js-pt-PT.yml index 72f8ff10dc0..322eb256ddd 100644 --- a/config/locales/crowdin/js-pt-PT.yml +++ b/config/locales/crowdin/js-pt-PT.yml @@ -66,7 +66,7 @@ pt-PT: button_back_to_list_view: "Voltar à visualização de lista" button_cancel: "Cancelar" button_close: "Fechar" - button_change_project: "Alterar projeto" + button_change_project: "Move to another project" button_check_all: "Seleccionar Todos" button_configure-form: "Configurar formulário" button_confirm: "Confirmar" @@ -74,7 +74,7 @@ pt-PT: button_copy: "Copiar" button_copy_to_clipboard: "Copiar para a Área de transferência" button_copy_link_to_clipboard: "Copiar link para a área de transferência" - button_copy_to_other_project: "Copiar para outro projeto" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Campos personalizados" button_delete: "Eliminar" button_delete_watcher: "Eliminar observador" diff --git a/config/locales/crowdin/js-ro.yml b/config/locales/crowdin/js-ro.yml index 2e3b86f2a5f..bc588f7c712 100644 --- a/config/locales/crowdin/js-ro.yml +++ b/config/locales/crowdin/js-ro.yml @@ -66,7 +66,7 @@ ro: button_back_to_list_view: "Înapoi la listă" button_cancel: "Anulare" button_close: "Închide" - button_change_project: "Proiect de schimbare" + button_change_project: "Move to another project" button_check_all: "Selectează tot" button_configure-form: "Configurați formularul" button_confirm: "Confirmă" @@ -74,7 +74,7 @@ ro: button_copy: "Copiază" button_copy_to_clipboard: "Copiză în clipboard" button_copy_link_to_clipboard: "Copiază link-ul în clipboard" - button_copy_to_other_project: "Copiază în alt proiect" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Câmpuri personalizate" button_delete: "Șterge" button_delete_watcher: "Şterge observator" @@ -896,7 +896,7 @@ ro: share: "Distribuiți" selected_count: "%{count} selected" selection: - mixed: "Mixed" + mixed: "Amestecat" work_packages: bulk_actions: move: "Modificare identificator proiect" diff --git a/config/locales/crowdin/js-ru.yml b/config/locales/crowdin/js-ru.yml index a77792d32d9..af2bd9733ac 100644 --- a/config/locales/crowdin/js-ru.yml +++ b/config/locales/crowdin/js-ru.yml @@ -66,7 +66,7 @@ ru: button_back_to_list_view: "Вернуться к просмотру списка" button_cancel: "Отмена" button_close: "Закрыть" - button_change_project: "Изменить проект" + button_change_project: "Move to another project" button_check_all: "Отметить все" button_configure-form: "Настроить форму" button_confirm: "Подтвердить" @@ -74,7 +74,7 @@ ru: button_copy: "Копировать" button_copy_to_clipboard: "Копировать в буфер обмена" button_copy_link_to_clipboard: "Копировать ссылку в буфер обмена" - button_copy_to_other_project: "Копировать в другой проект" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Настраиваемые поля" button_delete: "Удалить" button_delete_watcher: "Удалить наблюдателя" diff --git a/config/locales/crowdin/js-rw.yml b/config/locales/crowdin/js-rw.yml index dcdbb59396b..54481a2d07a 100644 --- a/config/locales/crowdin/js-rw.yml +++ b/config/locales/crowdin/js-rw.yml @@ -66,7 +66,7 @@ rw: button_back_to_list_view: "Back to list view" button_cancel: "Cancel" button_close: "Close" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Check all" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ rw: button_copy: "Copy" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Custom fields" button_delete: "Delete" button_delete_watcher: "Delete watcher" diff --git a/config/locales/crowdin/js-si.yml b/config/locales/crowdin/js-si.yml index 24f98934f95..845fccfd95a 100644 --- a/config/locales/crowdin/js-si.yml +++ b/config/locales/crowdin/js-si.yml @@ -66,7 +66,7 @@ si: button_back_to_list_view: "ලැයිස්තු දැක්ම වෙත ආපසු" button_cancel: "අවලංගු කරන්න" button_close: "වසන්න" - button_change_project: "ව්යාපෘතිය වෙනස් කරන්න" + button_change_project: "Move to another project" button_check_all: "සියල්ල පරීක්ෂා කරන්න" button_configure-form: "පෝරමය සකසන්න" button_confirm: "තහවුරු කරන්න" @@ -74,7 +74,7 @@ si: button_copy: "පිටපත් කරන්න" button_copy_to_clipboard: "පසුරු පුවරුවට පිටපත් කරන්න" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "අභිරුචි ක්ෂේත්ර" button_delete: "මකන්න" button_delete_watcher: "මුරකරු මකන්න" diff --git a/config/locales/crowdin/js-sk.yml b/config/locales/crowdin/js-sk.yml index a3b13b2f8c3..c253b3ea944 100644 --- a/config/locales/crowdin/js-sk.yml +++ b/config/locales/crowdin/js-sk.yml @@ -66,7 +66,7 @@ sk: button_back_to_list_view: "Späť na zobrazenie zoznamu" button_cancel: "Zrušíť" button_close: "Zatvoriť" - button_change_project: "Zmeniť projekt" + button_change_project: "Move to another project" button_check_all: "Označiť všetko" button_configure-form: "Konfigurácia formulára" button_confirm: "Potvrdiť" @@ -74,7 +74,7 @@ sk: button_copy: "Kopírovať" button_copy_to_clipboard: "Kopírovať do schránky" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Vlastné polia" button_delete: "Odstrániť" button_delete_watcher: "Odstrániť pozorovateľa" diff --git a/config/locales/crowdin/js-sl.yml b/config/locales/crowdin/js-sl.yml index 29305036842..a39f9f69609 100644 --- a/config/locales/crowdin/js-sl.yml +++ b/config/locales/crowdin/js-sl.yml @@ -66,7 +66,7 @@ sl: button_back_to_list_view: "Nazaj na pregled seznama" button_cancel: "Prekliči" button_close: "Zapri" - button_change_project: "Spremeni projekt" + button_change_project: "Move to another project" button_check_all: "Označi vse" button_configure-form: "Spremeni obliko" button_confirm: "Potrdi" @@ -74,7 +74,7 @@ sl: button_copy: "Kopiraj" button_copy_to_clipboard: "Kopiraj v odložišče" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Polja po meri" button_delete: "Izbriši" button_delete_watcher: "Izbriši opazovalca" diff --git a/config/locales/crowdin/js-sr.yml b/config/locales/crowdin/js-sr.yml index b2dce4c8f49..d7ccb83028d 100644 --- a/config/locales/crowdin/js-sr.yml +++ b/config/locales/crowdin/js-sr.yml @@ -66,7 +66,7 @@ sr: button_back_to_list_view: "Back to list view" button_cancel: "Cancel" button_close: "Zatvori" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Check all" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ sr: button_copy: "Copy" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Custom fields" button_delete: "Delete" button_delete_watcher: "Delete watcher" diff --git a/config/locales/crowdin/js-sv.yml b/config/locales/crowdin/js-sv.yml index 4f9af736a5a..ea1ed4a308b 100644 --- a/config/locales/crowdin/js-sv.yml +++ b/config/locales/crowdin/js-sv.yml @@ -66,7 +66,7 @@ sv: button_back_to_list_view: "Tillbaka till listvy" button_cancel: "Avbryt" button_close: "Stäng" - button_change_project: "Ändra projekt" + button_change_project: "Move to another project" button_check_all: "Markera alla" button_configure-form: "Ställ in formulär" button_confirm: "Bekräfta" @@ -74,7 +74,7 @@ sv: button_copy: "Kopiera" button_copy_to_clipboard: "Kopiera till Urklipp" button_copy_link_to_clipboard: "Kopiera länk till urklipp" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Anpassade fält" button_delete: "Radera" button_delete_watcher: "Ta bort bevakare" diff --git a/config/locales/crowdin/js-th.yml b/config/locales/crowdin/js-th.yml index af281076bd4..600fc896132 100644 --- a/config/locales/crowdin/js-th.yml +++ b/config/locales/crowdin/js-th.yml @@ -66,7 +66,7 @@ th: button_back_to_list_view: "กลับไปยังรายการก่อนหน้า" button_cancel: "ยกเลิก" button_close: "ปิด" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "ทำเครื่องหมายทั้งหมด" button_configure-form: "กำหนดค่าฟอร์ม" button_confirm: "ยืนยัน" @@ -74,7 +74,7 @@ th: button_copy: "คัดลอก" button_copy_to_clipboard: "คัดลอกไปยังคลิปบอร์ด" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "ฟิลด์ที่กำหนดเอง" button_delete: "ลบ" button_delete_watcher: "ลบผู้ดูข้อมูล" diff --git a/config/locales/crowdin/js-tr.yml b/config/locales/crowdin/js-tr.yml index 843fc23efa5..788a117500d 100644 --- a/config/locales/crowdin/js-tr.yml +++ b/config/locales/crowdin/js-tr.yml @@ -66,7 +66,7 @@ tr: button_back_to_list_view: "Liste görünümüne geri dön" button_cancel: "İptal etmek" button_close: "Kapat" - button_change_project: "Projeyi değiştir" + button_change_project: "Move to another project" button_check_all: "Hepsini kontrol et" button_configure-form: "Formu yapılandır" button_confirm: "Onaylamak" @@ -74,7 +74,7 @@ tr: button_copy: "Kopyalamak" button_copy_to_clipboard: "Panoya kopyala" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Başka bir projeye kopyala" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Özel Alanlar" button_delete: "silmek" button_delete_watcher: "Takipçi sil" diff --git a/config/locales/crowdin/js-uk.yml b/config/locales/crowdin/js-uk.yml index 571d981ead7..a4135c28504 100644 --- a/config/locales/crowdin/js-uk.yml +++ b/config/locales/crowdin/js-uk.yml @@ -66,7 +66,7 @@ uk: button_back_to_list_view: "Повернутися до списку" button_cancel: "Скасувати" button_close: "Закрити" - button_change_project: "Змінити проект" + button_change_project: "Move to another project" button_check_all: "Перевірити все" button_configure-form: "Налаштуйте форму" button_confirm: "Підтвердити" @@ -74,7 +74,7 @@ uk: button_copy: "Копіювати" button_copy_to_clipboard: "Копіювати в буфер обміну" button_copy_link_to_clipboard: "Копіювати посилання в буфер обміну" - button_copy_to_other_project: "Копіювати в інший проєкт" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Індивідуальні поля" button_delete: "Видалити" button_delete_watcher: "Видалити спостерігача" diff --git a/config/locales/crowdin/js-uz.yml b/config/locales/crowdin/js-uz.yml index fb8cbc9b015..25d83799069 100644 --- a/config/locales/crowdin/js-uz.yml +++ b/config/locales/crowdin/js-uz.yml @@ -66,7 +66,7 @@ uz: button_back_to_list_view: "Back to list view" button_cancel: "Cancel" button_close: "Close" - button_change_project: "Change project" + button_change_project: "Move to another project" button_check_all: "Check all" button_configure-form: "Configure form" button_confirm: "Confirm" @@ -74,7 +74,7 @@ uz: button_copy: "Copy" button_copy_to_clipboard: "Copy to clipboard" button_copy_link_to_clipboard: "Copy link to clipboard" - button_copy_to_other_project: "Copy to other project" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Custom fields" button_delete: "Delete" button_delete_watcher: "Delete watcher" diff --git a/config/locales/crowdin/js-vi.yml b/config/locales/crowdin/js-vi.yml index 080fe33fdbe..9f99e163be4 100644 --- a/config/locales/crowdin/js-vi.yml +++ b/config/locales/crowdin/js-vi.yml @@ -66,7 +66,7 @@ vi: button_back_to_list_view: "Quay lại chế độ xem danh sách" button_cancel: "Hủy" button_close: "Đóng" - button_change_project: "Thay đổi dự án" + button_change_project: "Move to another project" button_check_all: "Chọn tất cả" button_configure-form: "Cấu hình biểu mẫu" button_confirm: "Xác nhận" @@ -74,7 +74,7 @@ vi: button_copy: "Sao chép" button_copy_to_clipboard: "Sao chép vào clipboard" button_copy_link_to_clipboard: "Sao chép liên kết vào clipboard" - button_copy_to_other_project: "Sao chép vào dự án khác" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "Trường tùy chỉnh" button_delete: "Xóa" button_delete_watcher: "Xóa người theo dõi" diff --git a/config/locales/crowdin/js-zh-CN.yml b/config/locales/crowdin/js-zh-CN.yml index c3ee4d11a81..94a95dd47a9 100644 --- a/config/locales/crowdin/js-zh-CN.yml +++ b/config/locales/crowdin/js-zh-CN.yml @@ -66,7 +66,7 @@ zh-CN: button_back_to_list_view: "返回列表视图" button_cancel: "取消" button_close: "关闭" - button_change_project: "更改项目" + button_change_project: "Move to another project" button_check_all: "全选" button_configure-form: "配置表单" button_confirm: "确认" @@ -74,7 +74,7 @@ zh-CN: button_copy: "复制" button_copy_to_clipboard: "复制到剪贴板" button_copy_link_to_clipboard: "将链接复制到剪贴板" - button_copy_to_other_project: "复制到其他项目" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "自定义字段" button_delete: "删除" button_delete_watcher: "删除关注者" diff --git a/config/locales/crowdin/js-zh-TW.yml b/config/locales/crowdin/js-zh-TW.yml index f1e376fd9f4..63f9c435936 100644 --- a/config/locales/crowdin/js-zh-TW.yml +++ b/config/locales/crowdin/js-zh-TW.yml @@ -66,7 +66,7 @@ zh-TW: button_back_to_list_view: "返回清單" button_cancel: "取消" button_close: "關閉" - button_change_project: "切換專案" + button_change_project: "Move to another project" button_check_all: "勾選全部" button_configure-form: "表單設定" button_confirm: "確認" @@ -74,7 +74,7 @@ zh-TW: button_copy: "複製" button_copy_to_clipboard: "複製到剪貼簿" button_copy_link_to_clipboard: "複製到剪貼簿" - button_copy_to_other_project: "複製到其他專案" + button_copy_to_other_project: "Duplicate to other project" button_custom-fields: "客製欄位" button_delete: "删除" button_delete_watcher: "刪除監看者" diff --git a/config/locales/crowdin/vi.yml b/config/locales/crowdin/vi.yml index 7fde776e582..65ed0c103bc 100644 --- a/config/locales/crowdin/vi.yml +++ b/config/locales/crowdin/vi.yml @@ -2138,8 +2138,8 @@ vi: label_next_week: "Tuần tới" label_no_change_option: "(không đổi)" label_no_data: "Không có dữ liệu để hiển thị" - label_no_due_date: "no finish date" - label_no_start_date: "no start date" + label_no_due_date: "không có ngày kết thúc" + label_no_start_date: "không có ngày bắt đầu" label_no_parent_page: "Không có trang quan hệ" label_nothing_display: "Không có gì để hiển thị" label_nobody: "không ai" diff --git a/modules/backlogs/config/locales/crowdin/ro.yml b/modules/backlogs/config/locales/crowdin/ro.yml index 3df76af35da..732d06bc8f5 100644 --- a/modules/backlogs/config/locales/crowdin/ro.yml +++ b/modules/backlogs/config/locales/crowdin/ro.yml @@ -65,7 +65,7 @@ ro: rebuild: "Reconstruiți" rebuild_positions: "Reconstruiți" remaining_hours: "Muncă rămasă" - remaining_hours_ideal: "Remaining work (ideal)" + remaining_hours_ideal: "Munca rămasă (ideal)" show_burndown_chart: "Size Chart" story: "Articol" story_points: "Puncte" diff --git a/modules/bim/config/locales/crowdin/ar.yml b/modules/bim/config/locales/crowdin/ar.yml index ca14d5947ad..11ca419ea13 100644 --- a/modules/bim/config/locales/crowdin/ar.yml +++ b/modules/bim/config/locales/crowdin/ar.yml @@ -22,7 +22,7 @@ ar: other: '%{count} BCF issues' bcf_xml: xml_file: 'BCF XML File' - import_title: 'Import' + import_title: 'استيراد' export: 'تصدير' import_update_comment: '(Updated in BCF import)' import_failed: 'Cannot import BCF file: %{error}' @@ -81,7 +81,7 @@ ar: attributes: bim/ifc_models/ifc_model: ifc_attachment: "IFC file" - is_default: "Default model" + is_default: "النموذج الافتراضي" attachments: "IFC file" errors: models: @@ -118,9 +118,9 @@ ar: no_results: "No IFC models have been uploaded in this project." conversion_status: label: 'Processing?' - pending: 'Pending' + pending: 'قيد الانتظار' processing: 'Processing' - completed: 'Completed' + completed: 'اكتمل' error: 'خطأ' processing_notice: processing_default: 'The following default IFC models are still being processed and are thus not available, yet:' diff --git a/modules/calendar/config/locales/crowdin/ar.yml b/modules/calendar/config/locales/crowdin/ar.yml index 8ed6288426f..7dd63142a88 100644 --- a/modules/calendar/config/locales/crowdin/ar.yml +++ b/modules/calendar/config/locales/crowdin/ar.yml @@ -6,7 +6,7 @@ ar: label_calendar: "التقويم" label_calendar_plural: "التقويمات" label_new_calendar: "تقويم جديد" - permission_view_calendar: "View calendars" + permission_view_calendar: "عرض التقويمات" permission_manage_calendars: "إدارة التقويمات" permission_share_calendars: "الاشتراك في iCalendar" project_module_calendar_view: "التقويمات" diff --git a/modules/calendar/config/locales/crowdin/js-ar.yml b/modules/calendar/config/locales/crowdin/js-ar.yml index 9de17636873..88dfdc52e32 100644 --- a/modules/calendar/config/locales/crowdin/js-ar.yml +++ b/modules/calendar/config/locales/crowdin/js-ar.yml @@ -2,7 +2,7 @@ ar: js: calendar: - create_new: 'Create new calendar' + create_new: 'إنشاء تقويم جديد' title: 'التقويم' - too_many: 'There are %{count} work packages in total, but only %{max} can be shown.' - unsaved_title: 'Unnamed calendar' + too_many: 'هناك %{count} عمل إجمالاً، ولكن يمكن عرض %{max} فقط.' + unsaved_title: 'تقويم غير مسمى' diff --git a/modules/documents/config/locales/crowdin/ro.yml b/modules/documents/config/locales/crowdin/ro.yml index cde567795dc..254904e83e0 100644 --- a/modules/documents/config/locales/crowdin/ro.yml +++ b/modules/documents/config/locales/crowdin/ro.yml @@ -21,8 +21,8 @@ #++ ro: plugin_openproject_documents: - name: "OpenProject Documents" - description: "An OpenProject plugin to allow creation of documents in projects." + name: "Documente OpenProject" + description: "Un plugin OpenProject pentru a permite crearea de documente în proiecte." activerecord: models: document: "Document" diff --git a/modules/grids/config/locales/crowdin/js-ro.yml b/modules/grids/config/locales/crowdin/js-ro.yml index d6116113862..cc8c090cfe9 100644 --- a/modules/grids/config/locales/crowdin/js-ro.yml +++ b/modules/grids/config/locales/crowdin/js-ro.yml @@ -8,7 +8,7 @@ ro: text: "Unele widgeturi, cum ar fi widgetul grafic al pachetului de lucru, sunt disponibile numai în ediția Enterprise." link: 'Ediția Enterprise.' widgets: - missing_permission: "You don't have the necessary permissions to view this widget." + missing_permission: "Nu ai drepturile necesare pentru a vizualiza acest widget." custom_text: title: 'Text customizat' documents: diff --git a/modules/reporting/config/locales/crowdin/ro.yml b/modules/reporting/config/locales/crowdin/ro.yml index ab67135e10e..6ead3eafd31 100644 --- a/modules/reporting/config/locales/crowdin/ro.yml +++ b/modules/reporting/config/locales/crowdin/ro.yml @@ -47,7 +47,7 @@ ro: label_is_project_with_subprojects: "este (incluzând subproiecte)" label_work_package_attributes: "Atribute pachet de lucru" label_less: "<" - label_logged_by_reporting: "Logged by" + label_logged_by_reporting: "Logat ca" label_money: "Valoare monetară" label_month_reporting: "Lună (consumată)" label_new_report: "Raport de cost nou" diff --git a/modules/storages/config/locales/crowdin/fr.yml b/modules/storages/config/locales/crowdin/fr.yml index 2218fe1dff3..b0cc0c59044 100644 --- a/modules/storages/config/locales/crowdin/fr.yml +++ b/modules/storages/config/locales/crowdin/fr.yml @@ -22,7 +22,7 @@ fr: storages/project_storage: attributes: project_folder_id: - blank: Please select a folder. + blank: Veuillez sélectionner un dossier. project_folder_mode: mode_unavailable: n'est pas disponible pour cet espace de stockage. project_ids: @@ -60,13 +60,13 @@ fr: project_module_storages: Fichiers project_storages: edit_project_folder: - label: Edit project folder + label: Modifier le dossier du projet project_folder_mode: automatic: Géré automatiquement inactive: Aucun dossier spécifique manual: Dossier existant géré manuellement remove_project: - deletion_failure_flash: Failed to remove the project from the storage. %{error} + deletion_failure_flash: Impossible de supprimer le projet du stockage. %{error} dialog: automatically_managed_appendix: En outre, dans ce cas, cet espace de stockage comporte un dossier de projet géré automatiquement qui sera supprimé définitivement, ainsi que ses fichiers. confirmation_text: Veuillez confirmer que vous avez compris et que vous souhaitez supprimer cet espace de stockage de fichiers de ce projet. @@ -92,11 +92,11 @@ fr: errors: models: copy_project_folders_service: - conflict: The folder %{destination_path} already exists. Interrupting process to avoid overwrites. - error: An unexpected error occurred. Please check OpenProject logs for more information or contact an administrator - forbidden: OpenProject could not access the source folder. Please check your permissions configuration on the Storage Provider - not_found: The source template location %{source_path} wasn't found. - unauthorized: OpenProject could not authenticate with the Storage Provider. Please check your storage configuration + conflict: Le dossier %{destination_path} existe déjà. Interruption du processus pour éviter les écrasements. + error: Une erreur inattendue s'est produite. Veuillez vérifier les logs OpenProject pour plus d'informations ou contacter un administrateur + forbidden: OpenProject n'a pas pu accéder au dossier source. Veuillez vérifier la configuration de vos permissions sur le fournisseur de stockage + not_found: L'emplacement du modèle source %{source_path} n'a pas été trouvé. + unauthorized: OpenProject n'a pas pu s'authentifier avec le fournisseur de stockage. Veuillez vérifier votre configuration de stockage nextcloud_sync_service: attributes: add_user_to_group: @@ -122,7 +122,7 @@ fr: set_folders_permissions: permission_not_set: n'a pas pu définir les autorisations sur %{path}. error: Une erreur inattendue s'est produite. Veuillez vous assurer que votre instance Nextcloud est joignable et vérifiez les journaux des processus OpenProject pour obtenir plus d'informations. - group_does_not_exist: "%{group} does not exist. Check your Nextcloud instance configuration." + group_does_not_exist: "%{group} n'existe pas. Vérifiez la configuration de votre instance Nextcloud." insufficient_privileges: OpenProject n'a pas assez de privilèges pour ajouter %{user} au groupe %{group}. Vérifiez les paramètres de votre groupe dans Nextcloud. not_allowed: Nextcloud bloque la demande. unauthorized: OpenProject n'a pas pu se synchroniser avec Nextcloud. Veuillez vérifier votre espace de stockage et la configuration de Nextcloud. @@ -151,7 +151,7 @@ fr: complete_without_setup: Compléter sans done_complete_setup: Configuration terminée. done_continue: Terminé, continuer - open_storage: Open file storage + open_storage: Ouvrir le stockage de fichiers replace_oauth_application: Remplacer OAuth OpenProject replace_oauth_client: Remplacer OAuth %{provider_type} save_and_continue: Sauvegarder et poursuivre diff --git a/modules/storages/config/locales/crowdin/vi.yml b/modules/storages/config/locales/crowdin/vi.yml index 32bc2454d13..d9e5c47b1ed 100644 --- a/modules/storages/config/locales/crowdin/vi.yml +++ b/modules/storages/config/locales/crowdin/vi.yml @@ -66,7 +66,7 @@ vi: inactive: Không có thư mục cụ thể manual: Thư mục hiện có được quản lý thủ công remove_project: - deletion_failure_flash: Failed to remove the project from the storage. %{error} + deletion_failure_flash: Không thể xóa dự án khỏi bộ lưu trữ. %{error} dialog: automatically_managed_appendix: Ngoài ra, trong trường hợp này, bộ lưu trữ này có một thư mục dự án được quản lý tự động, thư mục này và các tệp trong đó sẽ bị xóa vĩnh viễn. confirmation_text: Vui lòng xác nhận bạn hiểu và muốn xóa bộ lưu trữ tệp này khỏi dự án này diff --git a/modules/team_planner/config/locales/crowdin/fr.yml b/modules/team_planner/config/locales/crowdin/fr.yml index 14ced62ed09..a9bd27c7593 100644 --- a/modules/team_planner/config/locales/crowdin/fr.yml +++ b/modules/team_planner/config/locales/crowdin/fr.yml @@ -1,7 +1,7 @@ #English strings go here fr: plugin_openproject_team_planner: - name: "Planificateur de l'équipe OpenProject" + name: "Planificateur d'équipe OpenProject" description: "Fournit des vues du planificateur d'équipe." permission_view_team_planner: "Voir le planificateur d'équipe" permission_manage_team_planner: "Gérer le planificateur d'équipe" diff --git a/modules/team_planner/config/locales/crowdin/js-fr.yml b/modules/team_planner/config/locales/crowdin/js-fr.yml index f22cdb36ba4..12340827dd1 100644 --- a/modules/team_planner/config/locales/crowdin/js-fr.yml +++ b/modules/team_planner/config/locales/crowdin/js-fr.yml @@ -8,8 +8,8 @@ fr: create_title: 'Créer un nouveau planificateur d''équipe' unsaved_title: 'Planificateur d''équipe sans nom' no_data: 'Ajouter des personnes pour configurer votre planificateur d''équipe.' - add_assignee: 'Assigner à quelqu''un' - remove_assignee: 'Supprimer l''assignation' + add_assignee: 'Ajouter quelqu''un' + remove_assignee: 'Retiré l''assigné' two_weeks: '2 semaines' one_week: '1 semaine' four_weeks: '4 semaines' @@ -18,7 +18,7 @@ fr: today: 'Aujourd''hui' drag_here_to_remove: 'Faites glisser ici pour supprimer le responsable et les dates de début et de fin.' cannot_drag_here: 'Impossible de supprimer le lot de travaux en raison des autorisations ou des restrictions d''édition.' - cannot_drag_to_non_working_day: 'Ce lot de travaux ne peut pas démarrer/terminer sur un jour non ouvré.' + cannot_drag_to_non_working_day: 'Ce lot de travail ne peut pas démarrer/terminer sur un jour non ouvré.' quick_add: empty_state: 'Utilisez le champ de recherche pour trouver des lots de travaux et faites-les glisser vers le planificateur pour l''assigner à quelqu''un et définir des dates de début et de fin.' search_placeholder: 'Rechercher...' diff --git a/modules/team_planner/config/locales/crowdin/js-ro.yml b/modules/team_planner/config/locales/crowdin/js-ro.yml index 3a01cf76538..a4a811afb0d 100644 --- a/modules/team_planner/config/locales/crowdin/js-ro.yml +++ b/modules/team_planner/config/locales/crowdin/js-ro.yml @@ -12,8 +12,8 @@ ro: remove_assignee: 'Înlăturați responsabilul' two_weeks: '2-săptămână' one_week: '1-săptămână' - four_weeks: '4-week' - eight_weeks: '8-week' + four_weeks: '4 săptămâni' + eight_weeks: '8 săptămâni' work_week: 'Săptămână de lucru' today: 'Azi' drag_here_to_remove: 'Trageți aici pentru a elimina responsabilul și a începe și a termina datele.' diff --git a/modules/two_factor_authentication/config/locales/crowdin/fr.yml b/modules/two_factor_authentication/config/locales/crowdin/fr.yml index 1849ee0df5b..509b584f8a8 100644 --- a/modules/two_factor_authentication/config/locales/crowdin/fr.yml +++ b/modules/two_factor_authentication/config/locales/crowdin/fr.yml @@ -116,10 +116,10 @@ fr: 2fa_from_webauthn: Veuillez spécifier l'appareil WebAuthn %{device_name}. S'il s'agit d'un périphérique USB, veillez à le brancher et à le toucher. Cliquez ensuite sur le bouton de connexion. webauthn: title: "WebAuthn" - description: Register a FIDO2 device (like YubiKey) or the secure encalve of your mobile device. + description: Enregistrez un appareil FIDO2 (comme YubiKey) ou l'enclave sécurisée de votre appareil mobile. further_steps: Après avoir choisi un nom, cliquez sur le bouton Continuer. Votre navigateur vous invitera à présenter votre appareil WebAuthn. Une fois cette action effectuée, l'enregistrement de l'appareil est terminé. totp: - title: "App-based authenticator" + title: "Authentificateur basé sur l'application" provisioning_uri: "Provisionnement URI" secret_key: "Clé secrète" time_based: "Basé sur le temps" @@ -131,13 +131,13 @@ fr: text_cannot_scan: | Si vous ne pouvez pas scanner le code, vous pouvez l'entrer manuellement avec les détails suivants : description: | - Use a one-time code generated by an authenticator like Authy or Google Authenticator. + Utilisez un code unique généré par un authentificateur comme Authy ou Google Authenticator. sms: - title: "Mobile device" + title: "Appareil mobile" redacted_identifier: "Appareil mobile (%{redacted_number})" request_2fa_identifier: "%{redacted_identifier}, nous vous avons envoyé un code d’authentification via %{delivery_channel}" description: | - Receive 2FA code via a text message on your phone each time you log in. + Recevez le code 2FA par un message texte sur votre téléphone à chaque fois que vous vous connectez. sns: delivery_failed: "Remise SNS a échoué:" message_bird: diff --git a/modules/two_factor_authentication/config/locales/crowdin/vi.yml b/modules/two_factor_authentication/config/locales/crowdin/vi.yml index 1e9aae0a64a..fad79fef67c 100644 --- a/modules/two_factor_authentication/config/locales/crowdin/vi.yml +++ b/modules/two_factor_authentication/config/locales/crowdin/vi.yml @@ -118,10 +118,10 @@ vi: 2fa_from_webauthn: Vui lòng cung cấp thiết bị WebAuthn %{device_name}. Nếu thiết bị dựa trên USB, hãy đảm bảo cắm vào và chạm vào nó. Sau đó nhấp vào nút đăng nhập. webauthn: title: "WebAuthn" - description: Register a FIDO2 device (like YubiKey) or the secure encalve of your mobile device. + description: Đăng ký một thiết bị FIDO2 (như YubiKey) hoặc vùng bảo mật trong thiết bị di động của bạn. further_steps: Sau khi bạn chọn tên, bạn có thể nhấp vào nút Tiếp tục. Trình duyệt của bạn sẽ yêu cầu bạn xuất trình thiết bị WebAuthn của bạn. Khi bạn đã làm như vậy, bạn đã hoàn tất việc đăng ký thiết bị. totp: - title: "App-based authenticator" + title: "Xác thực dựa trên ứng dụng" provisioning_uri: "URI cấp phát" secret_key: "Khóa bí mật" time_based: "Dựa trên thời gian" @@ -134,13 +134,13 @@ vi: text_cannot_scan: | Nếu bạn không thể quét mã, bạn có thể nhập thông tin theo cách thủ công bằng các chi tiết sau: description: | - Use a one-time code generated by an authenticator like Authy or Google Authenticator. + Sử dụng mã một lần được tạo bởi trình xác thực như Authy hoặc Google Authenticator. sms: - title: "Mobile device" + title: "Thiết bị di động" redacted_identifier: "Thiết bị di động (%{redacted_number})" request_2fa_identifier: "%{redacted_identifier}, chúng tôi đã gửi cho bạn một mã xác thực qua %{delivery_channel}" description: | - Receive 2FA code via a text message on your phone each time you log in. + Nhận mã 2FA qua tin nhắn văn bản trên điện thoại mỗi khi bạn đăng nhập. sns: delivery_failed: "Chuyển tin SNS thất bại:" message_bird: From 20a7236f6ef946a0c931326a4928801a84b35c82 Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Sat, 17 Aug 2024 03:13:25 +0000 Subject: [PATCH 42/45] update locales from crowdin [ci skip] --- config/locales/crowdin/fr.yml | 10 +++++----- config/locales/crowdin/js-fr.yml | 2 +- config/locales/crowdin/js-ro.yml | 2 +- modules/backlogs/config/locales/crowdin/ro.yml | 2 +- modules/bim/config/locales/crowdin/ar.yml | 8 ++++---- modules/calendar/config/locales/crowdin/ar.yml | 2 +- modules/calendar/config/locales/crowdin/js-ar.yml | 6 +++--- modules/documents/config/locales/crowdin/ro.yml | 4 ++-- modules/grids/config/locales/crowdin/js-ro.yml | 2 +- modules/reporting/config/locales/crowdin/ro.yml | 2 +- modules/storages/config/locales/crowdin/fr.yml | 4 ++-- modules/team_planner/config/locales/crowdin/fr.yml | 2 +- modules/team_planner/config/locales/crowdin/js-fr.yml | 4 ++-- modules/team_planner/config/locales/crowdin/js-ro.yml | 4 ++-- 14 files changed, 27 insertions(+), 27 deletions(-) diff --git a/config/locales/crowdin/fr.yml b/config/locales/crowdin/fr.yml index dcdd5a2ea71..8d016ac34b6 100644 --- a/config/locales/crowdin/fr.yml +++ b/config/locales/crowdin/fr.yml @@ -67,7 +67,7 @@ fr: text: "Voulez-vous vraiment supprimer le jeton actuellement utilisé pour l'édition Entreprise ?" title: "Supprimer le jeton" replace_token: "Remplacer votre licence actuelle" - order: "Commander l'édition Entreprise autohebergée" + order: "Commander l'édition Entreprise auto-hébergée" paste: "Coller votre jeton de support pour la version Entreprise" required_for_feature: "Cet add-on n'est disponible qu'avec un jeton de support actif pour la version Entreprise." enterprise_link: "Pour plus d'informations, cliquez ici." @@ -387,8 +387,8 @@ fr: my: access_token: create_dialog: - header: The %{type} token has been generated - warning: Note that this is the only time you will see this token, make sure to copy it now. + header: Le jeton %{type} a été généré + warning: Notez que c'est la seule fois que vous verrez ce jeton, assurez-vous de le copier maintenant. errors: token_name_blank: "Veuillez fournir un nom de jeton d'API" token_name_in_use: "Ce nom de jeton d'API est déjà utilisé, veuillez en choisir un autre" @@ -1152,8 +1152,8 @@ fr: other: "Rôles" status: "Statut du lot de travaux" token/api: - one: Access token - other: Access tokens + one: Jeton d'accès + other: Jetons d’accès type: "Type" user: "Utilisateur" version: "Version" diff --git a/config/locales/crowdin/js-fr.yml b/config/locales/crowdin/js-fr.yml index ab9faf2f647..2a1dcb33c8d 100644 --- a/config/locales/crowdin/js-fr.yml +++ b/config/locales/crowdin/js-fr.yml @@ -369,7 +369,7 @@ fr: "14_4": standard: new_features_html: > - The release contains various new features and improvements, such as:
  • Dark mode option in personal settings
  • Separate permissions for viewing and editing on project attributes
  • Improved status-based progress reporting
  • Connection validation for Nextcloud storages
  • More filter options for project lists
+ La version contient diverses nouvelles fonctionnalités et améliorations, telles que :
  • Option de mode sombre dans les paramètres personnels
  • Séparation des permissions pour la visualisation et l'édition des attributs du projet
  • Amélioration de l'état de progression basé sur le statut
  • Validation de la connexion pour les stockages Nextcloud
  • Plus d'options de filtre pour les listes de projets
ical_sharing_modal: title: "S'abonner au calendrier" inital_setup_error_message: "Une erreur est survenue lors de la récupération des données." diff --git a/config/locales/crowdin/js-ro.yml b/config/locales/crowdin/js-ro.yml index 89ed0a99396..a74dfd78b02 100644 --- a/config/locales/crowdin/js-ro.yml +++ b/config/locales/crowdin/js-ro.yml @@ -900,7 +900,7 @@ ro: share: "Distribuiți" selected_count: "%{count} selected" selection: - mixed: "Mixed" + mixed: "Amestecat" work_packages: bulk_actions: move: "Modificare identificator proiect" diff --git a/modules/backlogs/config/locales/crowdin/ro.yml b/modules/backlogs/config/locales/crowdin/ro.yml index 19afc384d52..c2a5b4cd27d 100644 --- a/modules/backlogs/config/locales/crowdin/ro.yml +++ b/modules/backlogs/config/locales/crowdin/ro.yml @@ -65,7 +65,7 @@ ro: rebuild: "Reconstruiți" rebuild_positions: "Reconstruiți" remaining_hours: "Muncă rămasă" - remaining_hours_ideal: "Remaining work (ideal)" + remaining_hours_ideal: "Munca rămasă (ideal)" show_burndown_chart: "Size Chart" story: "Articol" story_points: "Puncte" diff --git a/modules/bim/config/locales/crowdin/ar.yml b/modules/bim/config/locales/crowdin/ar.yml index ca14d5947ad..11ca419ea13 100644 --- a/modules/bim/config/locales/crowdin/ar.yml +++ b/modules/bim/config/locales/crowdin/ar.yml @@ -22,7 +22,7 @@ ar: other: '%{count} BCF issues' bcf_xml: xml_file: 'BCF XML File' - import_title: 'Import' + import_title: 'استيراد' export: 'تصدير' import_update_comment: '(Updated in BCF import)' import_failed: 'Cannot import BCF file: %{error}' @@ -81,7 +81,7 @@ ar: attributes: bim/ifc_models/ifc_model: ifc_attachment: "IFC file" - is_default: "Default model" + is_default: "النموذج الافتراضي" attachments: "IFC file" errors: models: @@ -118,9 +118,9 @@ ar: no_results: "No IFC models have been uploaded in this project." conversion_status: label: 'Processing?' - pending: 'Pending' + pending: 'قيد الانتظار' processing: 'Processing' - completed: 'Completed' + completed: 'اكتمل' error: 'خطأ' processing_notice: processing_default: 'The following default IFC models are still being processed and are thus not available, yet:' diff --git a/modules/calendar/config/locales/crowdin/ar.yml b/modules/calendar/config/locales/crowdin/ar.yml index 8ed6288426f..7dd63142a88 100644 --- a/modules/calendar/config/locales/crowdin/ar.yml +++ b/modules/calendar/config/locales/crowdin/ar.yml @@ -6,7 +6,7 @@ ar: label_calendar: "التقويم" label_calendar_plural: "التقويمات" label_new_calendar: "تقويم جديد" - permission_view_calendar: "View calendars" + permission_view_calendar: "عرض التقويمات" permission_manage_calendars: "إدارة التقويمات" permission_share_calendars: "الاشتراك في iCalendar" project_module_calendar_view: "التقويمات" diff --git a/modules/calendar/config/locales/crowdin/js-ar.yml b/modules/calendar/config/locales/crowdin/js-ar.yml index 9de17636873..88dfdc52e32 100644 --- a/modules/calendar/config/locales/crowdin/js-ar.yml +++ b/modules/calendar/config/locales/crowdin/js-ar.yml @@ -2,7 +2,7 @@ ar: js: calendar: - create_new: 'Create new calendar' + create_new: 'إنشاء تقويم جديد' title: 'التقويم' - too_many: 'There are %{count} work packages in total, but only %{max} can be shown.' - unsaved_title: 'Unnamed calendar' + too_many: 'هناك %{count} عمل إجمالاً، ولكن يمكن عرض %{max} فقط.' + unsaved_title: 'تقويم غير مسمى' diff --git a/modules/documents/config/locales/crowdin/ro.yml b/modules/documents/config/locales/crowdin/ro.yml index 04770c9b80e..36c51c2b406 100644 --- a/modules/documents/config/locales/crowdin/ro.yml +++ b/modules/documents/config/locales/crowdin/ro.yml @@ -21,8 +21,8 @@ #++ ro: plugin_openproject_documents: - name: "OpenProject Documents" - description: "An OpenProject plugin to allow creation of documents in projects." + name: "Documente OpenProject" + description: "Un plugin OpenProject pentru a permite crearea de documente în proiecte." activerecord: models: document: "Document" diff --git a/modules/grids/config/locales/crowdin/js-ro.yml b/modules/grids/config/locales/crowdin/js-ro.yml index d6116113862..cc8c090cfe9 100644 --- a/modules/grids/config/locales/crowdin/js-ro.yml +++ b/modules/grids/config/locales/crowdin/js-ro.yml @@ -8,7 +8,7 @@ ro: text: "Unele widgeturi, cum ar fi widgetul grafic al pachetului de lucru, sunt disponibile numai în ediția Enterprise." link: 'Ediția Enterprise.' widgets: - missing_permission: "You don't have the necessary permissions to view this widget." + missing_permission: "Nu ai drepturile necesare pentru a vizualiza acest widget." custom_text: title: 'Text customizat' documents: diff --git a/modules/reporting/config/locales/crowdin/ro.yml b/modules/reporting/config/locales/crowdin/ro.yml index ff24b95e8b6..454e5e82b7d 100644 --- a/modules/reporting/config/locales/crowdin/ro.yml +++ b/modules/reporting/config/locales/crowdin/ro.yml @@ -47,7 +47,7 @@ ro: label_is_project_with_subprojects: "este (incluzând subproiecte)" label_work_package_attributes: "Atribute pachet de lucru" label_less: "<" - label_logged_by_reporting: "Logged by" + label_logged_by_reporting: "Logat ca" label_money: "Valoare monetară" label_month_reporting: "Lună (consumată)" label_new_report: "Raport de cost nou" diff --git a/modules/storages/config/locales/crowdin/fr.yml b/modules/storages/config/locales/crowdin/fr.yml index fdb0a5358ab..d76db41fdb2 100644 --- a/modules/storages/config/locales/crowdin/fr.yml +++ b/modules/storages/config/locales/crowdin/fr.yml @@ -111,7 +111,7 @@ fr: set_folders_permissions: permission_not_set: n'a pas pu définir les autorisations sur %{path}. error: Une erreur inattendue s'est produite. Veuillez vous assurer que votre instance Nextcloud est joignable et vérifiez les journaux des processus OpenProject pour obtenir plus d'informations. - group_does_not_exist: "%{group} does not exist. Check your Nextcloud instance configuration." + group_does_not_exist: "%{group} n'existe pas. Vérifiez la configuration de votre instance Nextcloud." insufficient_privileges: OpenProject n'a pas assez de privilèges pour ajouter %{user} au groupe %{group}. Vérifiez les paramètres de votre groupe dans Nextcloud. not_allowed: Nextcloud bloque la demande. unauthorized: OpenProject n'a pas pu se synchroniser avec Nextcloud. Veuillez vérifier votre espace de stockage et la configuration de Nextcloud. @@ -140,7 +140,7 @@ fr: complete_without_setup: Compléter sans done_complete_setup: Configuration terminée. done_continue: Terminé, continuer - open_storage: Open file storage + open_storage: Ouvrir le stockage de fichiers replace_oauth_application: Remplacer OAuth OpenProject replace_oauth_client: Remplacer OAuth %{provider_type} save_and_continue: Sauvegarder et poursuivre diff --git a/modules/team_planner/config/locales/crowdin/fr.yml b/modules/team_planner/config/locales/crowdin/fr.yml index 14ced62ed09..a9bd27c7593 100644 --- a/modules/team_planner/config/locales/crowdin/fr.yml +++ b/modules/team_planner/config/locales/crowdin/fr.yml @@ -1,7 +1,7 @@ #English strings go here fr: plugin_openproject_team_planner: - name: "Planificateur de l'équipe OpenProject" + name: "Planificateur d'équipe OpenProject" description: "Fournit des vues du planificateur d'équipe." permission_view_team_planner: "Voir le planificateur d'équipe" permission_manage_team_planner: "Gérer le planificateur d'équipe" diff --git a/modules/team_planner/config/locales/crowdin/js-fr.yml b/modules/team_planner/config/locales/crowdin/js-fr.yml index f22cdb36ba4..666bed3adab 100644 --- a/modules/team_planner/config/locales/crowdin/js-fr.yml +++ b/modules/team_planner/config/locales/crowdin/js-fr.yml @@ -8,8 +8,8 @@ fr: create_title: 'Créer un nouveau planificateur d''équipe' unsaved_title: 'Planificateur d''équipe sans nom' no_data: 'Ajouter des personnes pour configurer votre planificateur d''équipe.' - add_assignee: 'Assigner à quelqu''un' - remove_assignee: 'Supprimer l''assignation' + add_assignee: 'Ajouter quelqu''un' + remove_assignee: 'Retiré l''assigné' two_weeks: '2 semaines' one_week: '1 semaine' four_weeks: '4 semaines' diff --git a/modules/team_planner/config/locales/crowdin/js-ro.yml b/modules/team_planner/config/locales/crowdin/js-ro.yml index 3a01cf76538..a4a811afb0d 100644 --- a/modules/team_planner/config/locales/crowdin/js-ro.yml +++ b/modules/team_planner/config/locales/crowdin/js-ro.yml @@ -12,8 +12,8 @@ ro: remove_assignee: 'Înlăturați responsabilul' two_weeks: '2-săptămână' one_week: '1-săptămână' - four_weeks: '4-week' - eight_weeks: '8-week' + four_weeks: '4 săptămâni' + eight_weeks: '8 săptămâni' work_week: 'Săptămână de lucru' today: 'Azi' drag_here_to_remove: 'Trageți aici pentru a elimina responsabilul și a începe și a termina datele.' From 46f79ed67b2dac619c4d9fb3b99caf01d06df916 Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Sun, 18 Aug 2024 03:05:07 +0000 Subject: [PATCH 43/45] update locales from crowdin [ci skip] --- config/locales/crowdin/js-zh-CN.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/crowdin/js-zh-CN.yml b/config/locales/crowdin/js-zh-CN.yml index 94a95dd47a9..c88b9c1b8d4 100644 --- a/config/locales/crowdin/js-zh-CN.yml +++ b/config/locales/crowdin/js-zh-CN.yml @@ -66,7 +66,7 @@ zh-CN: button_back_to_list_view: "返回列表视图" button_cancel: "取消" button_close: "关闭" - button_change_project: "Move to another project" + button_change_project: "移动到另一个项目" button_check_all: "全选" button_configure-form: "配置表单" button_confirm: "确认" @@ -74,7 +74,7 @@ zh-CN: button_copy: "复制" button_copy_to_clipboard: "复制到剪贴板" button_copy_link_to_clipboard: "将链接复制到剪贴板" - button_copy_to_other_project: "Duplicate to other project" + button_copy_to_other_project: "复制到其他项目" button_custom-fields: "自定义字段" button_delete: "删除" button_delete_watcher: "删除关注者" From 71e44fda320e7aec612e909c226bcf62a3abd97c Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Mon, 19 Aug 2024 03:05:29 +0000 Subject: [PATCH 44/45] update locales from crowdin [ci skip] --- config/locales/crowdin/js-zh-TW.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/crowdin/js-zh-TW.yml b/config/locales/crowdin/js-zh-TW.yml index 63f9c435936..772810a3f06 100644 --- a/config/locales/crowdin/js-zh-TW.yml +++ b/config/locales/crowdin/js-zh-TW.yml @@ -66,7 +66,7 @@ zh-TW: button_back_to_list_view: "返回清單" button_cancel: "取消" button_close: "關閉" - button_change_project: "Move to another project" + button_change_project: "移動到其它專案" button_check_all: "勾選全部" button_configure-form: "表單設定" button_confirm: "確認" @@ -74,7 +74,7 @@ zh-TW: button_copy: "複製" button_copy_to_clipboard: "複製到剪貼簿" button_copy_link_to_clipboard: "複製到剪貼簿" - button_copy_to_other_project: "Duplicate to other project" + button_copy_to_other_project: "複製到其它專案" button_custom-fields: "客製欄位" button_delete: "删除" button_delete_watcher: "刪除監看者" From 24c1637746b91c081362817152d0bd3191a12043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Mon, 19 Aug 2024 07:03:02 +0200 Subject: [PATCH 45/45] Use humanized boolean value --- .../app/views/two_factor_authentication/settings.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/two_factor_authentication/app/views/two_factor_authentication/settings.html.erb b/modules/two_factor_authentication/app/views/two_factor_authentication/settings.html.erb index 21db5b4a3cc..bc046256f2c 100644 --- a/modules/two_factor_authentication/app/views/two_factor_authentication/settings.html.erb +++ b/modules/two_factor_authentication/app/views/two_factor_authentication/settings.html.erb @@ -39,7 +39,7 @@ end component.with_attribute(key: t('two_factor_authentication.settings.label_enforced'), - value: !!configuration['enforced']) + value: !!configuration['enforced'] ? t(:general_text_Yes) : t(:general_text_No)) component.with_attribute(key: t('two_factor_authentication.settings.label_remember'), value: if configuration['allow_remember_for_days'].to_i == 0