From 7cd9daf9b479dcf43b71a8db92613fa25a4e3e77 Mon Sep 17 00:00:00 2001 From: ulferts Date: Tue, 3 Dec 2024 16:39:40 +0100 Subject: [PATCH 1/7] remove inappropriate status tripping up turbo --- app/controllers/types_controller.rb | 6 +++--- spec/controllers/types_controller_spec.rb | 25 ++++++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/app/controllers/types_controller.rb b/app/controllers/types_controller.rb index 8534e3843904..c46d8cb09eee 100644 --- a/app/controllers/types_controller.rb +++ b/app/controllers/types_controller.rb @@ -88,7 +88,7 @@ def update call.on_failure do |result| flash[:error] = result.errors.full_messages.join("\n") - render_edit_tab(@type) + render_edit_tab(@type, status: :unprocessable_entity) end end end @@ -139,12 +139,12 @@ def redirect_to_type_tab_path(type, notice) notice:) end - def render_edit_tab(type) + def render_edit_tab(type, status: :ok) @tab = params[:tab] @projects = Project.all @type = type - render action: :edit, status: :unprocessable_entity + render action: :edit, status: end def show_local_breadcrumb diff --git a/spec/controllers/types_controller_spec.rb b/spec/controllers/types_controller_spec.rb index 5130db3b52b7..bd789fd263e5 100644 --- a/spec/controllers/types_controller_spec.rb +++ b/spec/controllers/types_controller_spec.rb @@ -214,7 +214,7 @@ get "edit", params: { id: type.id, tab: :settings } end - it { expect(response).to have_http_status(:unprocessable_entity) } + it { expect(response).to have_http_status(:ok) } it { expect(response).to render_template "edit" } it { expect(response).to render_template "types/form/_settings" } it { expect(response.body).to have_css "input[@name='type[name]'][@value='My type']" } @@ -233,7 +233,7 @@ get "edit", params: { id: type.id, tab: :projects } end - it { expect(response).to have_http_status(:unprocessable_entity) } + it { expect(response).to have_http_status(:ok) } it { expect(response).to render_template "edit" } it { expect(response).to render_template "types/form/_projects" } @@ -242,7 +242,7 @@ } end - describe "POST update" do + describe "PATCH update" do let(:project2) { create(:project) } let(:type) do create(:type, name: "My type", @@ -258,7 +258,7 @@ end before do - put :update, params: + patch :update, params: end it { expect(response).to be_redirect } @@ -274,6 +274,21 @@ end end + describe "WITH the name being erroneously blank" do + let(:params) do + { "id" => type.id, + "type" => { name: "" }, + "tab" => "settings" } + end + + before do + patch :update, params: + end + + it { expect(response).to have_http_status(:unprocessable_entity) } + it { expect(response).to render_template "edit" } + end + describe "WITH projects removed" do let(:params) do { "id" => type.id, @@ -282,7 +297,7 @@ end before do - put :update, params: + patch :update, params: end it { expect(response).to be_redirect } From 548ea7d0594b0b8963cc31af82489c523fb9a80e Mon Sep 17 00:00:00 2001 From: Maya Berdygylyjova Date: Wed, 4 Dec 2024 10:06:48 +0100 Subject: [PATCH 2/7] =?UTF-8?q?[#59800]=2015.1=20Documentation:=20Zen=20mo?= =?UTF-8?q?de=20for=20project=20lists=20page=20=20https:/=E2=80=A6=20(#173?= =?UTF-8?q?36)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [#59800] 15.1 Documentation: Zen mode for project lists page https://community.openproject.org/work_packages/59800 [#59800] 15.1 Documentation: Zen mode for project lists page https://community.openproject.org/work_packages/59800 --- .../user-guide/projects/project-lists/README.md | 9 +++++++++ ...openproject_project_list_select_zen_mode.png | Bin 0 -> 50456 bytes 2 files changed, 9 insertions(+) create mode 100644 docs/user-guide/projects/project-lists/openproject_project_list_select_zen_mode.png diff --git a/docs/user-guide/projects/project-lists/README.md b/docs/user-guide/projects/project-lists/README.md index cda085a57221..b3a1073c4550 100644 --- a/docs/user-guide/projects/project-lists/README.md +++ b/docs/user-guide/projects/project-lists/README.md @@ -184,6 +184,15 @@ By selecting *Overall activity* you can open a view in which all the latest glob ![overall activity meeting filter](actvity-global-filter.png) +### Zen mode + +In order to work on project lists uninterrupted, you can use the Zen mode. To activate it, select the menu in the far right corner (three dots) and click **Zen mode**. Once the Zen mode is selected, the header and the sidebar will be hidden. + +![Select zen mode in OpenProject project lists](openproject_project_list_select_zen_mode.png) + + + + ## Favorite project lists You can mark project lists as favorites, both shared and private, but not the static ones. To mark a project list as favorite click the star icon in the top right corner. diff --git a/docs/user-guide/projects/project-lists/openproject_project_list_select_zen_mode.png b/docs/user-guide/projects/project-lists/openproject_project_list_select_zen_mode.png new file mode 100644 index 0000000000000000000000000000000000000000..4b89400ebcb2c2d97661eef07db6f9850efb88ca GIT binary patch literal 50456 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 cu%qne)~FrHC}V Date: Wed, 4 Dec 2024 11:22:26 +0100 Subject: [PATCH 3/7] =?UTF-8?q?[#59801]=2015.1=20Documentation:=20Work=20p?= =?UTF-8?q?ackage=20PDF=20export:=20Insert=20page=20bre=E2=80=A6=20(#17338?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [#59801] 15.1 Documentation: Work package PDF export: Insert page breaks https://community.openproject.org/work_packages/59801 [#59801] 15.1 Documentation: Work package PDF export: Insert page breaks https://community.openproject.org/work_packages/59801 --- docs/user-guide/work-packages/edit-work-package/README.md | 5 ++++- docs/user-guide/work-packages/exporting/README.md | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/user-guide/work-packages/edit-work-package/README.md b/docs/user-guide/work-packages/edit-work-package/README.md index 2a4c91253347..d998e361ef09 100644 --- a/docs/user-guide/work-packages/edit-work-package/README.md +++ b/docs/user-guide/work-packages/edit-work-package/README.md @@ -21,7 +21,10 @@ keywords: edit work packages To edit a work package, double-click a work package row in [table view](../../work-packages/work-package-views/#table-view) or open the [split screen view](../../work-packages/work-package-views/#split-screen-view) to see the details. -In the work package details, you can click in any field to update it, e.g. change the description, status, priority, assignee, or add a comment. +In the work package details, you can click in any field to update it, e.g. change the description, status, priority, assignee, or add a comment. + +> [!TIP] +> You can also insert a page break into the description field if you intend to [export a work package in PDF format](../exporting/#pdf-report) and want to the description to be displayed on separate pages of a PDF report. To save changes in the description, click the **checkmark** icon. diff --git a/docs/user-guide/work-packages/exporting/README.md b/docs/user-guide/work-packages/exporting/README.md index 88b44439fc18..d224af64c519 100644 --- a/docs/user-guide/work-packages/exporting/README.md +++ b/docs/user-guide/work-packages/exporting/README.md @@ -39,7 +39,7 @@ OpenProject has multiple file format options for exporting work packages, includ ### PDF export -OpenProject has multiple options for exporting work packages in PDF format. These include table, report and Gantt chart. +OpenProject has multiple options for exporting work packages in PDF format. These include table, report and Gantt chart. #### PDF Table @@ -60,6 +60,9 @@ For each work package, a table of attributes is included, where attributes corre The table of attributes is followed by the work package description and, if necessary, custom long text fields, which support [embedded work package and project attributes](../../wysiwyg/#attributes). +> [!TIP] +> If you used page breaks in work package descriptions, contents will be split into separate pages accordingly. + > [!NOTE] > Embedding of rich text, e.g. descriptions of other work packages, is currently not supported. From e47c72137a83cb3f3aedca383759948db6d47dfb Mon Sep 17 00:00:00 2001 From: ulferts Date: Thu, 28 Nov 2024 15:44:23 +0100 Subject: [PATCH 4/7] attempt to fix flickering spec --- spec/features/news/creation_and_commenting_spec.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spec/features/news/creation_and_commenting_spec.rb b/spec/features/news/creation_and_commenting_spec.rb index 36cf66c114d6..e99afdc2a61a 100644 --- a/spec/features/news/creation_and_commenting_spec.rb +++ b/spec/features/news/creation_and_commenting_spec.rb @@ -43,6 +43,8 @@ member_with_permissions: { project => %i[manage_news comment_news] }) end + include Flash::Expectations + it "allows creating new and commenting it all of which will result in notifications and mails" do visit project_news_index_path(project) @@ -81,8 +83,11 @@ perform_enqueued_jobs do click_button "Add comment" + wait_for_network_idle end + expect_and_dismiss_flash message: "Comment added" + # The new comment is visible on the show page expect(page) .to have_content "A new text" From 95cd63c4748bae83b79a73e3792db47f6de8adb1 Mon Sep 17 00:00:00 2001 From: ulferts Date: Wed, 4 Dec 2024 23:13:07 +0100 Subject: [PATCH 5/7] attempt to fix flickering spec --- spec/features/work_packages/update_ancestors_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/features/work_packages/update_ancestors_spec.rb b/spec/features/work_packages/update_ancestors_spec.rb index 9f5da9b9aa28..c98645a8e2e7 100644 --- a/spec/features/work_packages/update_ancestors_spec.rb +++ b/spec/features/work_packages/update_ancestors_spec.rb @@ -174,14 +174,14 @@ def expect_totals(parent, descendants) context_menu = wp_table.open_context_menu_for(second_child) context_menu.choose(I18n.t("js.relation_buttons.hierarchy_outdent")) wp_table.expect_and_dismiss_toaster message: "Successful update" + wait_for_network_idle expect_totals(parent, [child]) context_menu = wp_table.open_context_menu_for(second_child) context_menu.choose(I18n.t("js.relation_buttons.hierarchy_indent")) - wait_for_network_idle - wp_table.expect_and_dismiss_toaster message: "Successful update" + wait_for_network_idle expect_totals(parent, [child, second_child]) end From e1c272720576e2d7ddd9ad0c4dc4babe743dacf2 Mon Sep 17 00:00:00 2001 From: OpenProject Actions CI Date: Thu, 5 Dec 2024 03:27:55 +0000 Subject: [PATCH 6/7] update locales from crowdin [ci skip] --- config/locales/crowdin/js-ko.yml | 6 +- config/locales/crowdin/js-ru.yml | 6 +- config/locales/crowdin/js-uk.yml | 2 +- config/locales/crowdin/ko.seeders.yml | 24 +- config/locales/crowdin/ko.yml | 174 +++++++-------- config/locales/crowdin/ru.yml | 4 +- config/locales/crowdin/uk.seeders.yml | 2 +- config/locales/crowdin/uk.yml | 76 +++---- config/locales/crowdin/zh-CN.yml | 10 +- modules/costs/config/locales/crowdin/ko.yml | 8 +- .../config/locales/crowdin/ja.seeders.yml | 2 +- modules/meeting/config/locales/crowdin/ja.yml | 210 +++++++++--------- modules/meeting/config/locales/crowdin/ko.yml | 2 +- .../config/locales/crowdin/ko.yml | 4 +- .../storages/config/locales/crowdin/ru.yml | 2 +- 15 files changed, 266 insertions(+), 266 deletions(-) diff --git a/config/locales/crowdin/js-ko.yml b/config/locales/crowdin/js-ko.yml index c29d57085ced..dff74bc2bbf6 100644 --- a/config/locales/crowdin/js-ko.yml +++ b/config/locales/crowdin/js-ko.yml @@ -105,7 +105,7 @@ ko: button_update: "업데이트" button_export-pdf: "PDF 다운로드" button_export-atom: "Atom 다운로드" - button_generate_pdf: "Generate PDF" + button_generate_pdf: "PDF 생성" button_create: "만들기" card: add_new: "새로운 카드를 추가하다" @@ -360,7 +360,7 @@ ko: "15_1": standard: new_features_html: > - The release brings various features and improvements for you, e.g.
  • Custom fields of type hierarchy (Enterprise add-on).
  • Redesign of the Relations tab in work packages.
  • Redesign of the Meetings index page.
  • Manual page breaks in PDF work package exports.
  • Zen mode for project lists.
+ 이 릴리스에서는 다음과 같은 다양한 기능과 개선 사항이 제공됩니다.
  • 유형 계층의 사용자 지정 필드(Enterprise 추가 기능).
  • 작업 패키지의 관계 탭에 대한 새로운 디자인.
  • 미팅 색인 페이지의 새로운 디자인.
  • PDF 작업 패키지 내보내기에서 수동 페이지 나누기.
  • 프로젝트 목록의 젠 모드.
ical_sharing_modal: title: "캘린더 구독" inital_setup_error_message: "데이터를 가져오는 중에 오류가 발생했습니다." @@ -576,7 +576,7 @@ ko: members: "프로젝트에 참여할 새로운 멤버를 초대하세요." quick_add_button: "헤더 탐색에서 더하기(+) 아이콘을 클릭하여 새 프로젝트를 생성하거나 동료를 초대하세요." sidebar_arrow: "프로젝트의 기본 메뉴로 돌아가려면 왼쪽 상단의 뒤로 화살표를 사용하세요." - welcome: "Take a three-minute introduction tour to learn the most important features.
We recommend completing the steps until the end. You can restart the tour any time." + welcome: "3분 소개 투어를 보고 가장 중요한 기능에 대해 알아보세요.
끝까지 단계를 완료하는 것이 좋습니다. 언제든지 투어를 다시 시작할 수 있습니다." wiki: "Wiki에서 문서화하고 팀과 함께 지식을 공유할 수 있습니다." backlogs: overview: "백로그 보기에서 작업을 관리하세요." diff --git a/config/locales/crowdin/js-ru.yml b/config/locales/crowdin/js-ru.yml index c71480d535a2..38dd2624861c 100644 --- a/config/locales/crowdin/js-ru.yml +++ b/config/locales/crowdin/js-ru.yml @@ -359,7 +359,7 @@ ru: "15_1": standard: new_features_html: > - The release brings various features and improvements for you, e.g.
  • Custom fields of type hierarchy (Enterprise add-on).
  • Redesign of the Relations tab in work packages.
  • Redesign of the Meetings index page.
  • Manual page breaks in PDF work package exports.
  • Zen mode for project lists.
+ Этот релиз предлагает Вам различные возможности и улучшения, например,
.
  • Пользовательские поля типа иерархии (Enterprise версия).
  • Редизайн вкладки "Связи" в пакетах работ.
  • Редизайн главной страницы "Совещания".
  • Ручные разрывы страниц при экспорте рабочих пакетов в формате PDF.
  • Режим Zen для списков проектов.
ical_sharing_modal: title: "Подписаться на календарь" inital_setup_error_message: "Произошла ошибка при получении данных." @@ -1194,8 +1194,8 @@ ru: zero: "0 дней" word: one: "1 слово" - few: "%{count} words" - many: "%{count} words" + few: "%{count} слов" + many: "%{count} слов" other: "%{count} слов" zen_mode: button_activate: "Включить полноэкранный режим" diff --git a/config/locales/crowdin/js-uk.yml b/config/locales/crowdin/js-uk.yml index 1e351902fcd1..9951136d87ae 100644 --- a/config/locales/crowdin/js-uk.yml +++ b/config/locales/crowdin/js-uk.yml @@ -360,7 +360,7 @@ uk: "15_1": standard: new_features_html: > - The release brings various features and improvements for you, e.g.
  • Custom fields of type hierarchy (Enterprise add-on).
  • Redesign of the Relations tab in work packages.
  • Redesign of the Meetings index page.
  • Manual page breaks in PDF work package exports.
  • Zen mode for project lists.
+ Цей випуск включає багато нових функцій і покращень.
  • Користувацькі поля ієрархії типів (доповнення версії Enterprise).
  • Оновлений дизайн вкладки «Зв'язки» в пакетах робіт.
  • Оновлений дизайн сторінки індексу нарад.
  • Ручне розривання сторінок у PDF-файлах експорту пакетів робіт.
  • Дзен-режим для списків проєктів.
ical_sharing_modal: title: "Підписатися на календар" inital_setup_error_message: "Під час отримання даних сталася помилка." diff --git a/config/locales/crowdin/ko.seeders.yml b/config/locales/crowdin/ko.seeders.yml index 1028675c3618..059d475e8f0b 100644 --- a/config/locales/crowdin/ko.seeders.yml +++ b/config/locales/crowdin/ko.seeders.yml @@ -36,15 +36,15 @@ ko: name: 검은색 life_cycle_colors: item_0: - name: PM2 Orange + name: PM2 주황색 item_1: - name: PM2 Purple + name: PM2 보라색 item_2: - name: PM2 Red + name: PM2 빨간색 item_3: - name: PM2 Magenta + name: PM2 심홍색 item_4: - name: PM2 Green Yellow + name: PM2 녹색 노란색 document_categories: item_0: name: 설명서 @@ -83,19 +83,19 @@ ko: standard: life_cycles: item_0: - name: Initiating + name: 시작 item_1: - name: Ready for Planning + name: 계획 준비 완료 item_2: - name: Planning + name: 계획 item_3: - name: Ready for Executing + name: 실행 준비 완료 item_4: - name: Executing + name: 실행 item_5: - name: Ready for Closing + name: 종료 준비 완료 item_6: - name: Closing + name: 종료 priorities: item_0: name: 낮음 diff --git a/config/locales/crowdin/ko.yml b/config/locales/crowdin/ko.yml index 176131f118b0..d6295f2cc609 100644 --- a/config/locales/crowdin/ko.yml +++ b/config/locales/crowdin/ko.yml @@ -33,7 +33,7 @@ ko: label_activity_show_only_changes: "변경 사항만 표시" label_sort_asc: "오래된 순" label_sort_desc: "최신 순" - label_type_to_comment: "Add a comment. Type @ to notify people." + label_type_to_comment: "코멘트를 추가하세요. 사람들에게 알려주려면 @을 입력하세요." label_submit_comment: "코멘트 제출" changed_on: "- 변경함:" created_on: "- 이 패키지를 생성함:" @@ -240,7 +240,7 @@ ko: one: 하위 항목 1개 other: "하위 항목 %{count}개" upsale: - custom_field_format_hierarchy: "Need a hierarchy in your custom fields for work packages?" + custom_field_format_hierarchy: "작업 패키지의 사용자 지정 필드에 계층 구조가 필요하십니까?" text_add_new_custom_field: > 프로젝트에 새 사용자 지정 필드를 추가하려면 먼저 해당 필드를 만들어야 합니다. 그래야 이 프로젝트에 해당 필드를 추가할 수 있습니다. is_enabled_globally: "는 세계적으로 사용 가능합니다." @@ -267,20 +267,20 @@ ko: single: "또는" dry_validation: errors: - int?: "must be an integer." - filled?: "must be filled." - greater_or_equal_zero: "must be greater or equal to 0." - not_found: "not found." + int?: "- 정수여야 합니다." + filled?: "- 입력해야 합니다." + greater_or_equal_zero: "- 0보다 크거나 같아야 합니다." + not_found: "- 찾을 수 없습니다." rules: item: - root_item: "cannot be a root item." - not_persisted: "must be an already existing item." + root_item: "- 루트 항목일 수 없습니다." + not_persisted: "- 이미 존재하는 항목이어야 합니다." label: - not_unique: "must be unique within the same hierarchy level." + not_unique: "- 동일한 계층 수준 내에서 고유해야 합니다." short: - not_unique: "must be unique within the same hierarchy level." + not_unique: "- 동일한 계층 수준 내에서 고유해야 합니다." parent: - not_descendant: "must be a descendant of the hierarchy root." + not_descendant: "- 계층 루트의 하위 항목이어야 합니다." rules: depth: "깊이" item: "항목" @@ -627,64 +627,64 @@ ko: no_results_title_text: 현재 사용가능한 버전이 없습니다. work_package_relations_tab: index: - action_bar_title: "Add relations to other work packages to create a link between them." - no_results_title_text: There are currently no relations available. - blankslate_heading: "No relations" - blankslate_description: "This work package does not have any relations yet." - label_add_x: "Add %{x}" - label_edit_x: "Edit %{x}" - label_add_description: "Add description" + action_bar_title: "다른 작업 패키지에 관계를 추가하여 이러한 항목 간에 링크를 만드세요." + no_results_title_text: 현재 사용 가능한 관계가 없습니다. + blankslate_heading: "관계 없음" + blankslate_description: "이 작업 패키지에는 아직 관계가 없습니다." + label_add_x: "%{x} 추가" + label_edit_x: "%{x} 편집" + label_add_description: "설명 추가" relations: - label_relates_singular: "related to" - label_relates_plural: "related to" - label_relates_to_singular: "related to" - label_relates_to_plural: "related to" - relates_description: "Creates a visible link between the two work packages with no additional effect" - relates_to_description: "Creates a visible link between the two work packages with no additional effect" - label_precedes_singular: "successor (after)" - label_precedes_plural: "successors (after)" - precedes_description: "The related work package necessarily needs to start after this one finishes" - label_follows_singular: "predecessor (before)" - label_follows_plural: "predecessors (before)" - follows_description: "The related work package necessarily needs to finish before this one can start" - label_child_singular: "child" - label_child_plural: "children" - child_description: "Makes the related a work package a sub-item of the current (parent) work package" - label_blocks_singular: "blocks" - label_blocks_plural: "blocks" - blocks_description: "The related work package cannot be closed until this one is closed first" - label_blocked_singular: "blocked by" - label_blocked_plural: "blocked by" - label_blocked_by_singular: "blocked by" - label_blocked__by_plural: "blocked by" - blocked_description: "This work package cannot be closed until the related one is closed first" - blocked_by_description: "This work package cannot be closed until the related one is closed first" - label_duplicates_singular: "duplicates" - label_duplicates_plural: "duplicates" - duplicates_description: "This is a copy of the related work package" - label_duplicated_singular: "duplicated by" - label_duplicated_plural: "duplicated by" - label_duplicated_by_singular: "duplicated by" - label_duplicated_by_plural: "duplicated by" - duplicated_by_description: "The related work package is a copy of this" - duplicated_description: "The related work package is a copy of this" - label_includes_singular: "includes" - label_includes_plural: "includes" - includes_description: "Marks the related work package as including this one with no additional effect" - label_partof_singular: "part of" - label_partof_plural: "part of" - label_part_of_singular: "part of" - label_part_of_plural: "part of" - partof_description: "Marks the related work package as being part of this one with no additional effect" - part_of_description: "Marks the related work package as being part of this one with no additional effect" - label_requires_singular: "requires" - label_requires_plural: "requires" - requires_description: "Marks the related work package as a requirement to this one" - label_required_singular: "required by" - label_required_plural: "required by" - required_description: "Marks this work package as being a requirement to the related one" - label_parent_singular: "parent" - label_parent_plural: "parent" + label_relates_singular: "관련 항목" + label_relates_plural: "관련 항목" + label_relates_to_singular: "관련 항목" + label_relates_to_plural: "관련 항목" + relates_description: "추가 효과 없이 두 작업 패키지 간에 표시되는 링크를 만듭니다" + relates_to_description: "추가 효과 없이 두 작업 패키지 간에 표시되는 링크를 만듭니다" + label_precedes_singular: "후임자(이후)" + label_precedes_plural: "후임자(이후)" + precedes_description: "관련 작업 패키지는 반드시 이 패키지가 완료된 후에 시작되어야 합니다" + label_follows_singular: "전임자(이전)" + label_follows_plural: "전임자(이전)" + follows_description: "이 패키지를 시작하려면 관련 작업 패키지가 반드시 먼저 완료되어야 합니다" + label_child_singular: "자식" + label_child_plural: "자식" + child_description: "관련 작업 패키지를 현재(부모) 작업 패키지의 하위 항목으로 만듭니다" + label_blocks_singular: "블록" + label_blocks_plural: "블록" + blocks_description: "이 패키지가 먼저 종료될 때까지 관련 작업 패키지를 종료할 수 없습니다" + label_blocked_singular: "차단한 사용자" + label_blocked_plural: "차단한 사용자" + label_blocked_by_singular: "차단한 사용자" + label_blocked__by_plural: "차단한 사용자" + blocked_description: "관련 패키지가 먼저 종료될 때까지 이 작업 패키지를 종료할 수 없습니다" + blocked_by_description: "관련 패키지가 먼저 종료될 때까지 이 작업 패키지를 종료할 수 없습니다" + label_duplicates_singular: "중복" + label_duplicates_plural: "중복" + duplicates_description: "관련 작업 패키지의 사본입니다" + label_duplicated_singular: "복제한 사용자" + label_duplicated_plural: "복제한 사용자" + label_duplicated_by_singular: "복제한 사용자" + label_duplicated_by_plural: "복제한 사용자" + duplicated_by_description: "관련 작업 패키지는 다음의 사본입니다:" + duplicated_description: "관련 작업 패키지는 다음의 사본입니다:" + label_includes_singular: "포함" + label_includes_plural: "포함" + includes_description: "관련 작업 패키지를 추가 효과 없이 이 패키지 포함으로 표시합니다" + label_partof_singular: "다음의 일부:" + label_partof_plural: "다음의 일부:" + label_part_of_singular: "다음의 일부:" + label_part_of_plural: "다음의 일부:" + partof_description: "관련 작업 패키지를 추가 효과 없이 이 패키지의 일부로 표시합니다" + part_of_description: "관련 작업 패키지를 추가 효과 없이 이 패키지의 일부로 표시합니다" + label_requires_singular: "필수" + label_requires_plural: "필수" + requires_description: "관련 작업 패키지를 이 패키지에 대한 요구 사항으로 표시합니다" + label_required_singular: "다음에 의해 요구됨:" + label_required_plural: "다음에 의해 요구됨:" + required_description: "이 작업 패키지를 관련 패키지에 대한 요구 사항으로 표시합니다" + label_parent_singular: "부모" + label_parent_plural: "부모" label_invitation: 초대 account: delete: "계정 삭제" @@ -1084,17 +1084,17 @@ ko: project/life_cycle_step_definition: attributes: type: - must_be_a_stage_or_gate: "must be either Project::StageDefinition or Project::GateDefinition" + must_be_a_stage_or_gate: "- Project::StageDefinition 또는 Project::GateDefinition여야(이어야) 합니다" project/life_cycle_step: attributes: type: - must_be_a_stage_or_gate: "must be either Project::Stage or Project::Gate" - must_be_a_stage: "must be a Project::Stage" - must_be_a_gate: "must be a Project::Gate" + must_be_a_stage_or_gate: "- Project::Stage 또는 Project::Gate여야(이어야) 합니다" + must_be_a_stage: "- Project::Stage여야(이어야) 합니다" + must_be_a_gate: "- Project::Gate여야(이어야) 합니다" project/gate: attributes: base: - end_date_not_allowed: "Cannot assign `end_date` to a Project::Gate" + end_date_not_allowed: "Project::Gate에 `end_date`을(를) 할당할 수 없습니다" query: attributes: project: @@ -1863,22 +1863,22 @@ ko: hours: 시간 days: 일 pdf_generator: - page_nr_footer: "Page %{page} of %{total}" + page_nr_footer: "%{page}/%{total}페이지" dialog: - title: Generate PDF - submit: Generate + title: PDF 생성 + submit: 생성 header_right: - label: Header right - caption: Text to be displayed in the right of the header + label: 머리글 오른쪽 + caption: 머리글 오른쪽에 표시할 텍스트 footer_center: - label: Footer center - caption: Text to be displayed in the center of the footer + label: 바닥글 가운데 + caption: 바닥글 가운데에 표시할 텍스트 hyphenation: - label: Hyphenation - caption: Break words between lines to improve text justification and readability. + label: 하이픈 넣기 + caption: 라인 사이 단어를 구분하여 텍스트 양쪽 맞춤과 가독성을 개선합니다. paper_size: - label: Paper size - caption: The size of the paper to use for the PDF. + label: 용지 크기 + caption: PDF에 사용할 용지 크기입니다. extraction: available: pdftotext: "Pdftotext 사용 가능(선택적)" @@ -2237,7 +2237,7 @@ ko: label_environment: "환경" label_estimates_and_progress: "견적 및 진행률" label_equals: "일치함" - label_equals_with_descendants: "is any with descendants" + label_equals_with_descendants: "하위 항목이 있는 항목" label_everywhere: "어디에 있든지" label_example: "예" label_experimental: "실험" @@ -2502,8 +2502,8 @@ ko: label_related_work_packages: "관련 작업 패키지" label_relates: "관련 항목" label_relates_to: "관련 항목" - label_relation: "Relation" - label_relation_actions: "Relation actions" + label_relation: "관계" + label_relation_actions: "관계 작업" label_relation_delete: "관계 삭제" label_relation_new: "새 관계" label_release_notes: "릴리스 노트" diff --git a/config/locales/crowdin/ru.yml b/config/locales/crowdin/ru.yml index 951a6cb66fd0..24f7c77a1ef5 100644 --- a/config/locales/crowdin/ru.yml +++ b/config/locales/crowdin/ru.yml @@ -1343,8 +1343,8 @@ ru: project: "Проект" project_query: one: "Список проектов" - few: "Project lists" - many: "Project lists" + few: "Списки проектов" + many: "Списки проектов" other: "Списки проектов" query: "Настраиваемый запрос" role: diff --git a/config/locales/crowdin/uk.seeders.yml b/config/locales/crowdin/uk.seeders.yml index eba58ecc9ea1..79dc168da905 100644 --- a/config/locales/crowdin/uk.seeders.yml +++ b/config/locales/crowdin/uk.seeders.yml @@ -36,7 +36,7 @@ uk: name: Чорний life_cycle_colors: item_0: - name: PM2 Orange + name: Оранжевий PM2 item_1: name: Фіолетовий PM2 item_2: diff --git a/config/locales/crowdin/uk.yml b/config/locales/crowdin/uk.yml index 6090b1b25972..f3f2a81cdfb6 100644 --- a/config/locales/crowdin/uk.yml +++ b/config/locales/crowdin/uk.yml @@ -263,7 +263,7 @@ uk: dry_validation: errors: int?: "має бути цілим числом." - filled?: "повинно бути заповнено." + filled?: "має бути заповнено." greater_or_equal_zero: "має дорівнювати нулю або перевищувати його." not_found: "не знайдено." rules: @@ -275,7 +275,7 @@ uk: short: not_unique: "має бути унікальним у межах одного рівня ієрархії." parent: - not_descendant: "має бути дочірнім елементом кореня ієрархії." + not_descendant: "має бути нащадком кореня ієрархії." rules: depth: "Глибина" item: "Елемент" @@ -645,7 +645,7 @@ uk: no_results_title_text: Наразі немає доступних версій. work_package_relations_tab: index: - action_bar_title: "Додайте зв’язки з іншими пакетами робіт." + action_bar_title: "Додавайте зв’язки з іншими пакетами робіт." no_results_title_text: Зараз немає доступних зв’язків. blankslate_heading: "Немає зв’язків" blankslate_description: "Цей пакет робіт ще не має зв’язків." @@ -671,19 +671,19 @@ uk: label_blocks_singular: "блоки" label_blocks_plural: "блоки" blocks_description: "Звʼязаний пакет робіт можна закрити лише після закриття цього" - label_blocked_singular: "blocked by" - label_blocked_plural: "blocked by" - label_blocked_by_singular: "blocked by" - label_blocked__by_plural: "blocked by" - blocked_description: "Цей пакет робіт можна закрити лише після закриття звʼязаного" - blocked_by_description: "Цей пакет робіт можна закрити лише після закриття звʼязаного" - label_duplicates_singular: "duplicates" - label_duplicates_plural: "duplicates" + label_blocked_singular: "заблоковано" + label_blocked_plural: "заблоковано" + label_blocked_by_singular: "заблоковано" + label_blocked__by_plural: "заблоковано" + blocked_description: "Цей пакет робіт можна закрити лише після закриття звʼязаного з ним" + blocked_by_description: "Цей пакет робіт можна закрити лише після закриття звʼязаного з ним" + label_duplicates_singular: "дублює" + label_duplicates_plural: "дублює" duplicates_description: "Це копія звʼязаного пакета робіт" - label_duplicated_singular: "duplicated by" - label_duplicated_plural: "duplicated by" - label_duplicated_by_singular: "duplicated by" - label_duplicated_by_plural: "duplicated by" + label_duplicated_singular: "дублюється" + label_duplicated_plural: "дублюється" + label_duplicated_by_singular: "дублюється" + label_duplicated_by_plural: "дублюється" duplicated_by_description: "Звʼязаний пакет робіт є копією цього" duplicated_description: "Звʼязаний пакет робіт є копією цього" label_includes_singular: "включає" @@ -695,11 +695,11 @@ uk: label_part_of_plural: "належить до" partof_description: "Позначає звʼязаний пакет робіт як такий, що належить до цього, без додаткового ефекту" part_of_description: "Позначає звʼязаний пакет робіт як такий, що належить до цього, без додаткового ефекту" - label_requires_singular: "requires" - label_requires_plural: "requires" + label_requires_singular: "вимагає" + label_requires_plural: "вимагає" requires_description: "Позначає звʼязаний пакет робіт як обовʼязковий для цього" - label_required_singular: "required by" - label_required_plural: "required by" + label_required_singular: "вимагається" + label_required_plural: "вимагається" required_description: "Позначає цей робочий пакет як обовʼязковий для звʼязаного з ним" label_parent_singular: "батьківський елемент" label_parent_plural: "батьківський елемент" @@ -1102,17 +1102,17 @@ uk: project/life_cycle_step_definition: attributes: type: - must_be_a_stage_or_gate: "must be either Project::StageDefinition or Project::GateDefinition" + must_be_a_stage_or_gate: "має бути Project::StageDefinition або Project::GateDefinition" project/life_cycle_step: attributes: type: - must_be_a_stage_or_gate: "must be either Project::Stage or Project::Gate" - must_be_a_stage: "must be a Project::Stage" - must_be_a_gate: "must be a Project::Gate" + must_be_a_stage_or_gate: "має бути Project::Stage або Project::Gate" + must_be_a_stage: "має бути Project::Stage" + must_be_a_gate: "має бути Project::Gate" project/gate: attributes: base: - end_date_not_allowed: "Cannot assign `end_date` to a Project::Gate" + end_date_not_allowed: "Неможливо призначити `end_date` для проєкту Project::Gate" query: attributes: project: @@ -1965,22 +1965,22 @@ uk: hours: г days: д pdf_generator: - page_nr_footer: "Page %{page} of %{total}" + page_nr_footer: "Сторінка %{page} з %{total}" dialog: - title: Generate PDF - submit: Generate + title: Згенерувати PDF + submit: Згенерувати header_right: - label: Header right - caption: Text to be displayed in the right of the header + label: Верхній колонтитул, справа + caption: Текст, що відображається праворуч від верхнього колонтитула footer_center: - label: Footer center - caption: Text to be displayed in the center of the footer + label: Нижній колонтитул, центр + caption: Текст, що відображається в центрі нижнього колонтитула hyphenation: - label: Hyphenation - caption: Break words between lines to improve text justification and readability. + label: Перенесення + caption: Переносьте слова між рядками, щоб вирівняти текст і покращити його читабельність. paper_size: - label: Paper size - caption: The size of the paper to use for the PDF. + label: Розмір паперу + caption: Розмір паперу для PDF-файлу. extraction: available: pdftotext: "Доступний текст PDF (необов'язково)" @@ -2339,7 +2339,7 @@ uk: label_environment: "Навколишнє середовище" label_estimates_and_progress: "Оцінки й прогрес виконання" label_equals: "є" - label_equals_with_descendants: "is any with descendants" + label_equals_with_descendants: "– будь-який із нащадками" label_everywhere: "скрізь" label_example: "Приклад" label_experimental: "Експериментальне" @@ -2604,8 +2604,8 @@ uk: label_related_work_packages: "Пов'язані робочі пакети" label_relates: "пов'язані з" label_relates_to: "пов'язані з" - label_relation: "Relation" - label_relation_actions: "Relation actions" + label_relation: "Зв’язок" + label_relation_actions: "Дії зі зв’язками" label_relation_delete: "Видалити зв'язок" label_relation_new: "Новий зв'язок" label_release_notes: "Примітки до випуску" diff --git a/config/locales/crowdin/zh-CN.yml b/config/locales/crowdin/zh-CN.yml index 5454a8c643ed..748a5fac6d37 100644 --- a/config/locales/crowdin/zh-CN.yml +++ b/config/locales/crowdin/zh-CN.yml @@ -653,7 +653,7 @@ zh-CN: label_blocked_plural: "被阻止" label_blocked_by_singular: "被阻止" label_blocked__by_plural: "被阻止" - blocked_description: "在本工作包结束之前,相关工作包不能关闭" + blocked_description: "相关工作包结束之前,本工作包不能关闭" blocked_by_description: "在本工作包结束之前,相关工作包不能关闭" label_duplicates_singular: "复制" label_duplicates_plural: "复制" @@ -662,8 +662,8 @@ zh-CN: label_duplicated_plural: "复制于" label_duplicated_by_singular: "复制于" label_duplicated_by_plural: "复制于" - duplicated_by_description: "相关的工作包是这个副本的" - duplicated_description: "相关的工作包是这个副本的" + duplicated_by_description: "相关工作包是它的副本" + duplicated_description: "相关工作包是它的副本" label_includes_singular: "包括" label_includes_plural: "包括" includes_description: "将相关工作包标记为包括本工作包,不产生额外效果" @@ -671,8 +671,8 @@ zh-CN: label_partof_plural: "隶属于" label_part_of_singular: "隶属于" label_part_of_plural: "隶属于" - partof_description: "将相关工作包标记为包括本工作包,不产生额外效果" - part_of_description: "将相关工作包标记为包括本工作包,不产生额外效果" + partof_description: "将相关工作包标记为隶属于本工作包,不产生额外效果" + part_of_description: "将相关工作包标记为本工作包的一部分,不产生额外效果" label_requires_singular: "需求" label_requires_plural: "需求" requires_description: "将相关工作包标记为该工作包的需求" diff --git a/modules/costs/config/locales/crowdin/ko.yml b/modules/costs/config/locales/crowdin/ko.yml index 75a5b614346b..a846541bb856 100644 --- a/modules/costs/config/locales/crowdin/ko.yml +++ b/modules/costs/config/locales/crowdin/ko.yml @@ -132,10 +132,10 @@ ko: permission_view_own_hourly_rate: "고유한 시간당 요금 보기" permission_view_own_time_entries: "고유한 소비 시간 보기" project_module_costs: "시간 및 비용" - setting_allow_tracking_start_and_end_times: "Allow users to track start and end time on time records" - setting_costs_currency: "Currency" - setting_costs_currency_format: "Format of currency" - setting_enforce_tracking_start_and_end_times: "Force users to set start and end time on time records" + setting_allow_tracking_start_and_end_times: "사용자가 타임 레코드의 시작 시간 및 종료 시간을 추적하도록 허용" + setting_costs_currency: "통화" + setting_costs_currency_format: "통화 형식" + setting_enforce_tracking_start_and_end_times: "사용자가 타임 레코드의 시작 시간 및 종료 시간을 설정하도록 강제 설정" text_assign_time_and_cost_entries_to_project: "보고된 시간 및 비용을 프로젝트에 할당" text_destroy_cost_entries_question: "%{cost_entries}은(는) 삭제하려는 작업 패키지에서 보고되었습니다. 어떻게 하시겠습니까?" text_destroy_time_and_cost_entries: "보고된 시간 및 비용 삭제" diff --git a/modules/meeting/config/locales/crowdin/ja.seeders.yml b/modules/meeting/config/locales/crowdin/ja.seeders.yml index 73d4704f1b90..69011110013f 100644 --- a/modules/meeting/config/locales/crowdin/ja.seeders.yml +++ b/modules/meeting/config/locales/crowdin/ja.seeders.yml @@ -24,6 +24,6 @@ ja: item_6: title: 四半期目標の見直し item_7: - title: Core values feedback + title: コアバリューのフィードバック item_8: title: 一般的なトピック diff --git a/modules/meeting/config/locales/crowdin/ja.yml b/modules/meeting/config/locales/crowdin/ja.yml index dfa3e09c76e7..c286e689a2c3 100644 --- a/modules/meeting/config/locales/crowdin/ja.yml +++ b/modules/meeting/config/locales/crowdin/ja.yml @@ -22,9 +22,9 @@ #English strings go here for Rails i18n ja: plugin_openproject_meeting: - name: "OpenProject Meeting" + name: "OpenProject 会議" description: >- - This module adds functions to support project meetings to OpenProject. Meetings can be scheduled selecting invitees from the same project to take part in the meeting. An agenda can be created and sent to the invitees. After the meeting, attendees can be selected and minutes can be created based on the agenda. Finally, the minutes can be sent to all attendees and invitees. + このモジュールは、OpenProjectにプロジェクト会議をサポートする機能を追加します。会議への参加者を同じプロジェクトから選択して、会議をスケジュールできます。議題を作成して招待者に送信することができます。会議後には参加者を選択し、議題に基づいて議事録を作成できます。最後に、議事録をすべての参加者と招待者に送信することができます。 activerecord: attributes: meeting: @@ -34,27 +34,27 @@ ja: notes: "注記" participants: "参加者" participant: - other: "%{count} Participants" + other: "参加者 %{count}" participants_attended: "出席者" participants_invited: "招待者" project: "プロジェクト" start_date: "日付" - start_time: "Start time" - start_time_hour: "Start time" + start_time: "開始時刻" + start_time_hour: "開始時刻" meeting_agenda_item: title: "タイトル" author: "作成者" duration_in_minutes: "分" description: "注記" - presenter: "Presenter" + presenter: "発表者" meeting_section: title: "タイトル" errors: messages: invalid_time_format: "有効な時間ではありません。必要なフォーマット: HH:MM" models: - structured_meeting: "Meeting (dynamic)" - meeting_agenda_item: "Agenda item" + structured_meeting: "会議(ダイナミック)" + meeting_agenda_item: "議題項目" meeting_agenda: "アジェンダ" meeting_minutes: "議事録" meeting_section: "セクション" @@ -64,16 +64,16 @@ ja: item: meeting_agenda_item: duration: - added: "set to %{value}" - added_html: "set to %{value}" - removed: "removed" - updated: "changed from %{old_value} to %{value}" - updated_html: "changed from %{old_value} to %{value}" + added: "%{value} に設定されました" + added_html: "%{value} に設定されました" + removed: "削除されました" + updated: "%{old_value} から %{value} に変更されました" + updated_html: "%{old_value} から %{value} に変更されました" position: - updated: "reordered" + updated: "並べ替えられました" work_package: - updated: "changed from %{old_value} to %{value}" - updated_html: "changed from %{old_value} to %{value}" + updated: "%{old_value} から %{value} に変更されました" + updated_html: "%{old_value} から %{value} に変更されました" description_attended: "出席した" description_invite: "招待済み" events: @@ -87,84 +87,84 @@ ja: label_meeting: "会議" label_meeting_plural: "会議" label_meeting_new: "新しい会議" - label_meeting_new_dynamic: "New dynamic meeting" - label_meeting_create: "Create meeting" - label_meeting_copy: "Copy meeting" + label_meeting_new_dynamic: "新しいダイナミック会議" + label_meeting_create: "会議を作成" + label_meeting_copy: "会議をコピー" label_meeting_edit: "会議を編集" label_meeting_agenda: "アジェンダ" label_meeting_minutes: "議事録" label_meeting_close: "終了する" label_meeting_open: "開く" - label_meeting_index_delete: "Delete" - label_meeting_open_this_meeting: "Open this meeting" + label_meeting_index_delete: "削除" + label_meeting_open_this_meeting: "この会議を開く" label_meeting_agenda_close: "議題を閉じて議事録を開始する" label_meeting_date_time: "日付/時刻" - label_meeting_date_and_time: "Date and time" + label_meeting_date_and_time: "日付と時刻" label_meeting_diff: "差分" - label_upcoming_meetings: "Upcoming meetings" - label_past_meetings: "Past meetings" - label_upcoming_meetings_short: "Upcoming" - label_past_meetings_short: "Past" - label_involvement: "Involvement" - label_upcoming_invitations: "Upcoming invitations" - label_past_invitations: "Past invitations" - label_attendee: "Attendee" - label_author: "Creator" + label_upcoming_meetings: "今後の会議" + label_past_meetings: "過去の会議" + label_upcoming_meetings_short: "今後の予定" + label_past_meetings_short: "過去" + label_involvement: "関与" + label_upcoming_invitations: "今後の招待状" + label_past_invitations: "過去の招待状" + label_attendee: "参加者" + label_author: "作成者" label_notify: "レビュー用に送信" label_icalendar: "iCalendar を送信" - label_icalendar_download: "Download iCalendar event" + label_icalendar_download: "iCalendarイベントをダウンロード" label_version: "バージョン" label_time_zone: "タイムゾーン" label_start_date: "開始日" meeting: attachments: - text: "Attached files are available to all meeting participants. You can also drag and drop these into agenda item notes." + text: "添付ファイルはすべての会議参加者が利用可能です。また、これらのファイルを議題項目のノートにドラッグアンドドロップすることもできます。" copy: - title: "Copy meeting: %{title}" - attachments: "Copy attachments" - attachments_text: "Copy over all attached files to the new meeting" - agenda: "Copy agenda" - agenda_items: "Copy agenda items" - agenda_text: "Copy the agenda of the old meeting" - participants: "Copy list of participants" + title: "会議をコピー:%{title}" + attachments: "添付ファイルをコピー" + attachments_text: "すべての添付ファイルを新しい会議にコピー" + agenda: "議題をコピー" + agenda_items: "議題項目をコピー" + agenda_text: "古い会議の議題をコピー" + participants: "参加者リストをコピー" email: - send_emails: "Email participants" + send_emails: "参加者にメールを送信" send_invitation_emails: > - Send an email invitation immediately to the participants selected above. You can also do this manually at any time later. - send_invitation_emails_structured: "Send an email invitation immediately to all participants. You can also do this manually at any time later." + 上記で選択した参加者にすぐにメール招待を送信します。また、後で手動で行うこともできます。 + send_invitation_emails_structured: "すべての参加者にすぐにメール招待を送信します。また、後で手動で行うこともできます。" open_meeting_link: "会議を開く" invited: - summary: "%{actor} has sent you an invitation for the meeting %{title}" + summary: "%{actor} が会議「%{title}」の招待状を送信しました。" rescheduled: - header: "Meeting %{title} has been rescheduled" - summary: "Meeting %{title} has been rescheduled by %{actor}" - body: "The meeting %{title} has been rescheduled by %{actor}." - old_date_time: "Old date/time" - new_date_time: "New date/time" - label_mail_all_participants: "Send email to all participants" + header: "会議「%{title}」は再スケジュールされました。" + summary: "会議「%{title}」は、%{actor} によって再スケジュールされました。" + body: "会議「%{title}」は、%{actor} によって再スケジュールされました。" + old_date_time: "古い日付/時刻" + new_date_time: "新しい日付/時刻" + label_mail_all_participants: "すべての参加者にメールを送信" types: - classic: "Classic" - classic_text: "Organize your meeting in a formattable text agenda and protocol." - structured: "Dynamic" - structured_text: "Organize your meeting as a list of agenda items, optionally linking them to a work package." + classic: "クラシック" + classic_text: "会議をテキスト形式で議題と議事録として整理します。" + structured: "ダイナミック" + structured_text: "会議を議題項目のリストとして整理し、オプションでそれらをワークパッケージにリンクさせることができます。" structured_text_copy: "会議をコピーする場合、現在は関連する議題項目はコピーされず、詳細のみがコピーされます。" copied: "ミーティング#%{id} からコピーしました" meeting_section: - untitled_title: "Untitled section" - delete_confirmation: "Deleting the section will also delete all of its agenda items. Are you sure you want to do this?" - placeholder_title: "New section" - empty_text: "Drag items here or create a new one" + untitled_title: "タイトルなしセクション" + delete_confirmation: "セクションを削除すると、そのすべての議題項目も削除されます。これを実行してもよろしいですか?" + placeholder_title: "新しいセクション" + empty_text: "アイテムをここにドラッグするか、新しいアイテムを作成してください" notice_successful_notification: "通知が正常に送信されました" notice_timezone_missing: タイムゾーンが設定されていない場合、%{zone} が使用されます。タイムゾーンを選択するには、ここをクリックしてください。 - notice_meeting_updated: "This page has been updated by someone else. Reload to view changes." + notice_meeting_updated: "このページは他の誰かによって更新されました。変更を表示するには再読み込みしてください。" permission_create_meetings: "会議を作成" permission_edit_meetings: "会議の編集" permission_delete_meetings: "会議の削除" permission_view_meetings: "会議を表示" - permission_create_meeting_agendas: "Create meeting agendas" - permission_create_meeting_agendas_explanation: "Allows editing the Classic Meeting's agenda content." + permission_create_meeting_agendas: "会議の議題を作成する" + permission_create_meeting_agendas_explanation: "クラシック会議の議題内容を編集することができます。" permission_manage_agendas: "議題を管理する" - permission_manage_agendas_explanation: "Allows managing the Dynamic Meeting's agenda items." + permission_manage_agendas_explanation: "ダイナミック会議の議題内容を編集することができます。" permission_close_meeting_agendas: "議題を閉じる" permission_send_meeting_agendas_notification: "議題のレビュー通知を送信する" permission_create_meeting_minutes: "議事録の管理" @@ -179,56 +179,56 @@ ja: text_meeting_agenda_open_are_you_sure: "数分内のすべての変更が上書きされます!続けますか?" text_meeting_minutes_for_meeting: '会議の議事録 "%{meeting}"' text_notificiation_invited: "このメールには以下のミーティングのicsエントリーが含まれています:" - text_meeting_empty_heading: "Your meeting is empty" - text_meeting_empty_description_1: "Start by adding agenda items below. Each item can be as simple as just a title, but you can also add additional details like duration and notes." - text_meeting_empty_description_2: 'You can also add references to existing work packages. When you do, related notes will automatically be visible in the work package''s "Meetings" tab.' - label_meeting_empty_action: "Add agenda item" - label_meeting_actions: "Meeting actions" - label_meeting_edit_title: "Edit meeting title" - label_meeting_delete: "Delete meeting" + text_meeting_empty_heading: "あなたの会議は空です。" + text_meeting_empty_description_1: "まず、以下に議題項目を追加してください。各項目はタイトルだけの簡単なものでも構いませんが、所要時間やメモなどの詳細を追加することもできます。" + text_meeting_empty_description_2: '既存のワークパッケージへの参照を追加することもできます。これを行うと、関連するメモがその作業パッケージの「会議」タブに自動的に表示されます。' + label_meeting_empty_action: "議題項目を追加" + label_meeting_actions: "会議の対応事項" + label_meeting_edit_title: "会議タイトルを編集" + label_meeting_delete: "会議を削除" label_meeting_created_by: "作成者:" - label_meeting_last_updated: "Last updated" - label_meeting_reload: "Reload" - label_agenda_items: "Agenda items" - label_agenda_items_reordered: "reordered" - label_agenda_item_remove: "Remove from agenda" - label_agenda_item_undisclosed_wp: "Work package #%{id} not visible" - label_agenda_item_deleted_wp: "Deleted work package reference" - label_agenda_item_actions: "Agenda items actions" + label_meeting_last_updated: "最終更新日" + label_meeting_reload: "再読み込み" + label_agenda_items: "議題項目" + label_agenda_items_reordered: "並べ替えられました" + label_agenda_item_remove: "議題から削除" + label_agenda_item_undisclosed_wp: "ワークパッケージ #%{id} は表示されません" + label_agenda_item_deleted_wp: "削除されたワークパッケージの参照" + label_agenda_item_actions: "議題項目のアクション" label_agenda_item_move_to_top: "一番上へ移動" label_agenda_item_move_to_bottom: "一番下へ移動" label_agenda_item_move_up: "上へ" label_agenda_item_move_down: "下へ移動" label_agenda_item_add_notes: "注記の追加" - label_agenda_item_work_package: "Agenda item work package" - text_agenda_item_title: 'Agenda item "%{title}"' - text_agenda_work_package_deleted: 'Agenda item for deleted work package' - text_deleted_agenda_item: 'Deleted agenda item' + label_agenda_item_work_package: "議題項目のワークパッケージ" + text_agenda_item_title: '議題項目 "%{title}"' + text_agenda_work_package_deleted: '削除されたワークパッケージの議題項目' + text_deleted_agenda_item: '削除された議題項目' label_initial_meeting_details: "会議" - label_meeting_details: "Meeting details" - label_meeting_details_edit: "Edit meeting details" - label_meeting_state: "Meeting status" + label_meeting_details: "会議詳細" + label_meeting_details_edit: "会議詳細を編集" + label_meeting_state: "会議のステータス" label_meeting_state_open: "開く" - label_meeting_state_open_html: "Open" + label_meeting_state_open_html: "開く" label_meeting_state_closed: "終了" - label_meeting_state_closed_html: "Closed" - label_meeting_reopen_action: "Reopen meeting" - label_meeting_close_action: "Close meeting" - text_meeting_open_description: "This meeting is open. You can add/remove agenda items and edit them as you please. After the meeting is over, close it to lock it." - text_meeting_closed_description: "This meeting is closed. You cannot add/remove agenda items anymore." - label_meeting_manage_participants: "Manage participants" - label_meeting_no_participants: "No participants" - label_meeting_show_hide_participants: "Show/hide %{count} more" + label_meeting_state_closed_html: "終了" + label_meeting_reopen_action: "会議を再開する" + label_meeting_close_action: "会議を終了する" + text_meeting_open_description: "この会議は開かれています。議題項目の追加/削除や編集を自由に行えます。会議が終了したら、閉じてロックしてください。" + text_meeting_closed_description: "この会議は終了しています。これ以上、議題項目の追加/削除はできません。" + label_meeting_manage_participants: "参加者を管理" + label_meeting_no_participants: "参加者いません" + label_meeting_show_hide_participants: "%{count} 件を表示/非表示" label_meeting_show_all_participants: "全てを表示" - label_meeting_add_participants: "Add participants" - text_meeting_not_editable_anymore: "This meeting is not editable anymore." - text_meeting_not_present_anymore: "This meeting was deleted. Please select another meeting." - label_add_work_package_to_meeting_dialog_title: "Add work package to meeting" - label_add_work_package_to_meeting_dialog_button: "Add to meeting" - label_meeting_selection_caption: "It's only possible to add this work package to upcoming or ongoing open meetings." - text_add_work_package_to_meeting_description: "A work package can be added to one or multiple meetings for discussion. Any notes concerning it are also visible here." - text_agenda_item_no_notes: "No notes provided" - text_agenda_item_not_editable_anymore: "This agenda item is not editable anymore." - text_work_package_has_no_upcoming_meeting_agenda_items: "This work package is not scheduled in an upcoming meeting agenda yet." - text_work_package_add_to_meeting_hint: 'Use the "Add to meeting" button to add this work package to an upcoming meeting.' - text_work_package_has_no_past_meeting_agenda_items: "This work package was not mentioned in a past meeting." + label_meeting_add_participants: "参加者を追加" + text_meeting_not_editable_anymore: "この会議はもう編集できません。" + text_meeting_not_present_anymore: "この会議は削除されました。別の会議を選択してください。" + label_add_work_package_to_meeting_dialog_title: "会議にワークパッケージを追加" + label_add_work_package_to_meeting_dialog_button: "会議に追加" + label_meeting_selection_caption: "このワークパッケージは、今後の会議または進行中の会議にのみ追加可能です。" + text_add_work_package_to_meeting_description: "ワークパッケージは、議論のために1つまたは複数の会議に追加できます。それに関するメモもここで表示されます。" + text_agenda_item_no_notes: "メモは提供されていません" + text_agenda_item_not_editable_anymore: "この議題項目はもう編集できません。" + text_work_package_has_no_upcoming_meeting_agenda_items: "このワークパッケージは、まだ今後の会議の議題に予定されていません。" + text_work_package_add_to_meeting_hint: '「会議に追加」ボタンを使用して、このワークパッケージを今後の会議に追加してください。' + text_work_package_has_no_past_meeting_agenda_items: "このワークパッケージは過去の会議で言及されていませんでした。" diff --git a/modules/meeting/config/locales/crowdin/ko.yml b/modules/meeting/config/locales/crowdin/ko.yml index 314ed4b2eec4..c8a1e63fe7ad 100644 --- a/modules/meeting/config/locales/crowdin/ko.yml +++ b/modules/meeting/config/locales/crowdin/ko.yml @@ -87,7 +87,7 @@ ko: label_meeting: "미팅" label_meeting_plural: "미팅" label_meeting_new: "새 미팅" - label_meeting_new_dynamic: "New dynamic meeting" + label_meeting_new_dynamic: "새로운 다이내믹 미팅" label_meeting_create: "미팅 생성" label_meeting_copy: "미팅 복사" label_meeting_edit: "미팅 편집" diff --git a/modules/openid_connect/config/locales/crowdin/ko.yml b/modules/openid_connect/config/locales/crowdin/ko.yml index 7acbe03d976d..97913223445e 100644 --- a/modules/openid_connect/config/locales/crowdin/ko.yml +++ b/modules/openid_connect/config/locales/crowdin/ko.yml @@ -62,7 +62,7 @@ ko: limit_self_registration: 활성화된 경우, 사용자는 공급자 측의 구성에서 허용하는 경우에만 이 공급자를 사용하여 등록할 수 있습니다. display_name: 공급자 이름입니다. 로그인 버튼으로 표시되며 공급자 목록에 표시됩니다. tenant: '해당되는 경우 기본 테넌트를 고유한 테넌트로 교체하세요. 여기를 참조하세요.' - scope: If you want to request custom scopes, you can add one or multiple scope values separated by spaces here. For more information, see the [OpenID Connect documentation](docs_url). + scope: 사용자 지정 범위를 요청하려면 여기에 하나 이상의 범위 값을 공백으로 구분하여 추가할 수 있습니다. 자세한 내용은 [OpenID Connect 설명서](docs_url)를 참조하세요. post_logout_redirect_uri: 로그아웃 요청 후 OpenID Connect 공급자가 리디렉션해야 하는 URL입니다. claims: > 사용자 정보 및 ID 토큰 엔드포인트에 대한 추가 클레임을 요청할 수 있습니다. 자세한 내용은 [OpenID Connect 문서](docs_url)를 참조하세요. @@ -83,7 +83,7 @@ ko: metadata_url: 검색 엔드포인트 URL이 있습니다 endpoint_url: 엔드포인트 URL providers: - label_providers: "Providers" + label_providers: "공급자" seeded_from_env: "이 공급자는 환경 구성에서 시드되었으며, 편집할 수 없습니다." google: name: Google diff --git a/modules/storages/config/locales/crowdin/ru.yml b/modules/storages/config/locales/crowdin/ru.yml index 2d106b8d54fa..77585f9a9031 100644 --- a/modules/storages/config/locales/crowdin/ru.yml +++ b/modules/storages/config/locales/crowdin/ru.yml @@ -301,7 +301,7 @@ ru: application_password: Пароль приложения automatically_managed_folders: Автоматически управляемые папки label_name: Имя - label_new_file_storage: Новая %{provider} хранилище + label_new_file_storage: Новое %{provider} хранилище label_new_storage: Новое хранилище label_no_selected_folder: Папка не выбрана label_no_specific_folder: Нет конкретной папки From 033e5cb7fb5cde6f768b0d7bb5554da831a8f97f Mon Sep 17 00:00:00 2001 From: ulferts Date: Thu, 5 Dec 2024 08:28:54 +0100 Subject: [PATCH 7/7] attempt to fix flickering spec --- spec/support/pages/projects/index.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/support/pages/projects/index.rb b/spec/support/pages/projects/index.rb index 480bc3cbfdd5..54f3111765f0 100644 --- a/spec/support/pages/projects/index.rb +++ b/spec/support/pages/projects/index.rb @@ -394,6 +394,8 @@ def set_columns(*columns) within "dialog" do click_on "Apply" end + + wait_for_network_idle end def expect_no_config_columns(*columns)