diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 878af2a2d746..3db90e894c39 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -250,7 +250,7 @@ jobs:
- name: Merge digests
uses: actions/upload-artifact/merge@v4
with:
- pattern: digests-*
+ pattern: "digests-${{ matrix.target }}-*"
overwrite: true
name: "merged-digests-${{ matrix.target }}-${{ github.run_number }}-${{ github.run_attempt }}"
- name: Download digests
diff --git a/Gemfile.lock b/Gemfile.lock
index a36a253284ec..8aca7e282b26 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -342,8 +342,8 @@ GEM
activerecord (>= 4.0.0, < 7.2)
awrence (1.2.1)
aws-eventstream (1.3.0)
- aws-partitions (1.966.0)
- aws-sdk-core (3.201.5)
+ aws-partitions (1.969.0)
+ aws-sdk-core (3.202.1)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.9)
@@ -560,7 +560,8 @@ GEM
websocket-driver (~> 0.7)
ffi (1.17.0)
flamegraph (0.9.5)
- fog-aws (3.24.0)
+ fog-aws (3.25.0)
+ base64 (~> 0.2.0)
fog-core (~> 2.1)
fog-json (~> 1.1)
fog-xml (~> 0.1)
@@ -748,7 +749,7 @@ GEM
method_source (1.1.0)
mime-types (3.5.2)
mime-types-data (~> 3.2015)
- mime-types-data (3.2024.0806)
+ mime-types-data (3.2024.0820)
mini_magick (5.0.1)
mini_mime (1.1.5)
mini_portile2 (2.8.7)
@@ -1054,9 +1055,9 @@ GEM
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
secure_headers (6.5.0)
- selenium-devtools (0.127.0)
+ selenium-devtools (0.128.0)
selenium-webdriver (~> 4.2)
- selenium-webdriver (4.23.0)
+ selenium-webdriver (4.24.0)
base64 (~> 0.2)
logger (~> 1.4)
rexml (~> 3.2, >= 3.2.5)
@@ -1143,7 +1144,7 @@ GEM
public_suffix
vcr (6.3.1)
base64
- view_component (3.13.0)
+ view_component (3.14.0)
activesupport (>= 5.2.0, < 8.0)
concurrent-ruby (~> 1.0)
method_source (~> 1.0)
diff --git a/app/assets/images/enterprise/attribute-help-texts.png b/app/assets/images/enterprise/attribute-help-texts.png
deleted file mode 100644
index 58fa216c7a9d..000000000000
Binary files a/app/assets/images/enterprise/attribute-help-texts.png and /dev/null differ
diff --git a/app/components/admin/backups/show_page_header_component.html.erb b/app/components/admin/backups/show_page_header_component.html.erb
new file mode 100644
index 000000000000..4b1ddcd8bca8
--- /dev/null
+++ b/app/components/admin/backups/show_page_header_component.html.erb
@@ -0,0 +1,65 @@
+<%#-- 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.
+
+++#%>
+<%=
+ render(Primer::OpenProject::PageHeader.new) do |header|
+ header.with_title { t(:label_backup) }
+ header.with_breadcrumbs([{ href: admin_index_path, text: t(:label_administration) },
+ t(:label_backup)])
+
+ header.with_action_button(tag: :a,
+ scheme: button_scheme,
+ mobile_label: button_title,
+ mobile_icon: button_icon,
+ size: :medium,
+ href: reset_token_admin_backups_path,
+ aria: { label: button_title },
+ title: button_title) do |button|
+ button.with_leading_visual_icon(icon: button_icon)
+ button_title
+ end
+
+ if @backup_token.present?
+ header.with_action_button(tag: :a,
+ scheme: :danger,
+ mobile_icon: :trash,
+ mobile_label: t("backup.label_delete_token"),
+ size: :medium,
+ href: delete_token_admin_backups_path,
+ aria: { label: I18n.t("backup.label_delete_token") },
+ data: {
+ confirm: I18n.t(:text_are_you_sure),
+ method: :post
+ },
+ title: I18n.t(:button_delete)) do |button|
+ button.with_leading_visual_icon(icon: :trash)
+ t("backup.label_delete_token")
+ end
+ end
+ end
+%>
diff --git a/app/components/admin/backups/show_page_header_component.rb b/app/components/admin/backups/show_page_header_component.rb
new file mode 100644
index 000000000000..3b7dc6f70b90
--- /dev/null
+++ b/app/components/admin/backups/show_page_header_component.rb
@@ -0,0 +1,61 @@
+# frozen_string_literal: true
+
+# -- 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.
+# ++
+
+module Admin
+ module Backups
+ class ShowPageHeaderComponent < ApplicationComponent
+ include OpPrimer::ComponentHelpers
+ include ApplicationHelper
+
+ def initialize(backup_token:)
+ super
+ @backup_token = backup_token
+ end
+
+ def breadcrumb_items
+ [{ href: admin_index_path, text: t(:label_administration) },
+ t(:label_backup)]
+ end
+
+ def button_title
+ button_action = @backup_token.present? ? "reset" : "create"
+ t("backup.label_#{button_action}_token")
+ end
+
+ def button_icon
+ @backup_token.present? ? :"op-reload" : :plus
+ end
+
+ def button_scheme
+ @backup_token.present? ? :default : :primary
+ end
+ end
+ end
+end
diff --git a/app/views/attribute_help_texts/upsale.html.erb b/app/components/attribute_help_texts/index_page_header_component.html.erb
similarity index 70%
rename from app/views/attribute_help_texts/upsale.html.erb
rename to app/components/attribute_help_texts/index_page_header_component.html.erb
index bba919c1ee1a..602390526de0 100644
--- a/app/views/attribute_help_texts/upsale.html.erb
+++ b/app/components/attribute_help_texts/index_page_header_component.html.erb
@@ -26,13 +26,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
See COPYRIGHT and LICENSE files for more details.
++#%>
-
-<% html_title t(:label_administration), t(:'attribute_help_texts.label_plural') %>
-
-<%= render template: 'common/upsale',
- locals: {
- feature_title: t(:'attribute_help_texts.label_plural'),
- feature_description: t('attribute_help_texts.enterprise.description'),
- feature_reference: 'enterprise-attribute-help-texts',
- feature_image: 'enterprise/attribute-help-texts.png'
- } %>
+<%=
+ render(Primer::OpenProject::PageHeader.new) do |header|
+ header.with_title { I18n.t(:"attribute_help_texts.label_plural") }
+ header.with_breadcrumbs(breadcrumb_items, selected_item_font_weight: :normal)
+
+ header.with_tab_nav(label: nil) do |tab_nav|
+ @tabs.each do |tab|
+ tab_nav.with_tab(selected: currently_selected_tab == tab, href: tab[:path]) do |t|
+ t.with_text { I18n.t(tab[:label]) }
+ end
+ end
+ end if @tabs.present?
+ end
+%>
diff --git a/app/components/attribute_help_texts/index_page_header_component.rb b/app/components/attribute_help_texts/index_page_header_component.rb
new file mode 100644
index 000000000000..0e0637a472e1
--- /dev/null
+++ b/app/components/attribute_help_texts/index_page_header_component.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+# -- 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 AttributeHelpTexts::IndexPageHeaderComponent < ApplicationComponent
+ include OpPrimer::ComponentHelpers
+ include ApplicationHelper
+ include TabsHelper
+
+ def initialize(tabs: nil)
+ super
+ @tabs = tabs
+ end
+
+ def breadcrumb_items
+ [{ href: admin_index_path, text: t("label_administration") },
+ I18n.t("menus.breadcrumb.nested_element", section_header: t(:"attribute_help_texts.label_plural"),
+ title: I18n.t(currently_selected_tab[:label].to_s)).html_safe]
+ end
+
+ def currently_selected_tab
+ @currently_selected_tab ||= selected_tab(@tabs)
+ end
+end
diff --git a/app/components/custom_fields/index_page_header_component.html.erb b/app/components/custom_fields/index_page_header_component.html.erb
new file mode 100644
index 000000000000..f91e3f13d795
--- /dev/null
+++ b/app/components/custom_fields/index_page_header_component.html.erb
@@ -0,0 +1,42 @@
+<%#-- 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.
+
+++#%>
+<%=
+ render(Primer::OpenProject::PageHeader.new) do |header|
+ header.with_title { I18n.t(:label_custom_field_plural) }
+ header.with_breadcrumbs(breadcrumb_items, selected_item_font_weight: :normal)
+
+ header.with_tab_nav(label: nil, test_selector: "custom-fields--tab-nav") do |tab_nav|
+ @tabs.each do |tab|
+ tab_nav.with_tab(selected: currently_selected_tab == tab, href: tab[:path]) do |t|
+ t.with_text { I18n.t(tab[:label]) }
+ end
+ end
+ end if @tabs.present?
+ end
+%>
diff --git a/app/components/custom_fields/index_page_header_component.rb b/app/components/custom_fields/index_page_header_component.rb
new file mode 100644
index 000000000000..bfefb5b22ec2
--- /dev/null
+++ b/app/components/custom_fields/index_page_header_component.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+# -- 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 CustomFields::IndexPageHeaderComponent < ApplicationComponent
+ include OpPrimer::ComponentHelpers
+ include ApplicationHelper
+ include TabsHelper
+
+ def initialize(tabs: nil)
+ super
+ @tabs = tabs
+ end
+
+ def breadcrumb_items
+ [{ href: admin_index_path, text: t("label_administration") },
+ I18n.t("menus.breadcrumb.nested_element", section_header: t(:label_custom_field_plural),
+ title: I18n.t(currently_selected_tab[:label].to_s)).html_safe]
+ end
+
+ def currently_selected_tab
+ @currently_selected_tab ||= selected_tab(@tabs)
+ end
+end
diff --git a/app/components/projects/row_component.rb b/app/components/projects/row_component.rb
index d7765f9d451a..813360e27a06 100644
--- a/app/components/projects/row_component.rb
+++ b/app/components/projects/row_component.rb
@@ -342,7 +342,8 @@ def more_menu_copy_item
scheme: :default,
icon: :copy,
label: I18n.t(:button_copy),
- href: copy_project_path(project)
+ href: copy_project_path(project),
+ data: { turbo: false }
}
end
end
diff --git a/app/components/work_packages/exports/column_selection_component.html.erb b/app/components/work_packages/exports/column_selection_component.html.erb
index 3db7647073cd..738bef270c8d 100644
--- a/app/components/work_packages/exports/column_selection_component.html.erb
+++ b/app/components/work_packages/exports/column_selection_component.html.erb
@@ -9,7 +9,7 @@
selected: selected_columns,
protected: protected_options,
inputCaption: caption,
- inputLabel: I18n.t(:"queries.configure_view.columns.input_label"),
+ inputLabel: label,
inputPlaceholder: I18n.t(:"queries.configure_view.columns.input_placeholder"),
dragAreaLabel: I18n.t(:"queries.configure_view.columns.drag_area_label"),
}
diff --git a/app/components/work_packages/exports/column_selection_component.rb b/app/components/work_packages/exports/column_selection_component.rb
index 7715b74cd5eb..e99625ca6188 100644
--- a/app/components/work_packages/exports/column_selection_component.rb
+++ b/app/components/work_packages/exports/column_selection_component.rb
@@ -33,14 +33,16 @@ module Exports
class ColumnSelectionComponent < ApplicationComponent
include WorkPackagesHelper
- attr_reader :query, :id, :caption
+ attr_reader :query, :id, :caption, :label
- def initialize(query, id, caption)
+ def initialize(query, id, caption,
+ label = I18n.t(:"queries.configure_view.columns.input_label"))
super()
@query = query
@id = id
@caption = caption
+ @label = label
end
def available_columns
diff --git a/app/components/work_packages/exports/pdf/report/export_settings_component.html.erb b/app/components/work_packages/exports/pdf/report/export_settings_component.html.erb
index b35226de16a8..95e026d32eda 100644
--- a/app/components/work_packages/exports/pdf/report/export_settings_component.html.erb
+++ b/app/components/work_packages/exports/pdf/report/export_settings_component.html.erb
@@ -3,7 +3,8 @@
<%= render WorkPackages::Exports::ColumnSelectionComponent.new(
query,
"columns-select-export-pdf-report",
- I18n.t("export.dialog.columns.input_caption_report")
+ I18n.t("export.dialog.columns.input_caption_report"),
+ I18n.t("export.dialog.columns.input_label_report")
) %>
<% end %>
<% container.with_row do |_columns| %>
diff --git a/app/components/work_packages/progress/work_based/modal_body_component.html.erb b/app/components/work_packages/progress/work_based/modal_body_component.html.erb
index 49e1a8bdb250..d29236da0e9e 100644
--- a/app/components/work_packages/progress/work_based/modal_body_component.html.erb
+++ b/app/components/work_packages/progress/work_based/modal_body_component.html.erb
@@ -38,10 +38,13 @@
<% end %>
<% end %>
- <% modal_body.with_row(mt: 3) do |_tooltip| %>
- <%= render(Primer::Beta::Text.new(font_weight: :semibold)) { t("work_package.progress.label_note") } %>
- <%= render(Primer::Beta::Text.new) { t("work_package.progress.modal.work_based_help_text") } %>
- <%= render(Primer::Beta::Link.new(href: learn_more_href)) { t(:label_learn_more) } %>
+ <%# This condition branch to be removed in 15.0 with :percent_complete_edition feature flag removal %>
+ <% unless OpenProject::FeatureDecisions.percent_complete_edition_active? %>
+ <% modal_body.with_row(mt: 3) do |_tooltip| %>
+ <%= render(Primer::Beta::Text.new(font_weight: :semibold)) { t("work_package.progress.label_note") } %>
+ <%= render(Primer::Beta::Text.new) { t("work_package.progress.modal.work_based_help_text_pre_14_4_without_percent_complete_edition") } %>
+ <%= render(Primer::Beta::Link.new(href: learn_more_href)) { t(:label_learn_more) } %>
+ <% end %>
<% end %>
<% modal_body.with_row(mt: 3) do |_actions_row| %>
diff --git a/app/components/work_packages/split_view_component.html.erb b/app/components/work_packages/split_view_component.html.erb
index acc03f9bbe2d..a978b875dd7d 100644
--- a/app/components/work_packages/split_view_component.html.erb
+++ b/app/components/work_packages/split_view_component.html.erb
@@ -19,7 +19,6 @@
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/app/components/work_packages/split_view_component.sass b/app/components/work_packages/split_view_component.sass
index 7aad3bdcbeb3..87e22c19c856 100644
--- a/app/components/work_packages/split_view_component.sass
+++ b/app/components/work_packages/split_view_component.sass
@@ -1,6 +1,6 @@
.op-work-package-split-view
height: 100%
- width: 550px
+ min-width: 550px
justify-content: space-around
border-left: 1px solid var(--borderColor-muted)
diff --git a/app/contracts/work_packages/base_contract.rb b/app/contracts/work_packages/base_contract.rb
index 2ffdc13dd8b0..dc62c589bf41 100644
--- a/app/contracts/work_packages/base_contract.rb
+++ b/app/contracts/work_packages/base_contract.rb
@@ -58,8 +58,10 @@ class BaseContract < ::ModelContract
&& WorkPackage.work_based_mode?
} do
if OpenProject::FeatureDecisions.percent_complete_edition_active?
+ next if invalid_work_or_remaining_work_values? # avoid too many error messages at the same time
+
validate_percent_complete_matches_work_and_remaining_work
- validate_percent_complete_is_unset_when_work_is_zero
+ validate_percent_complete_is_empty_when_work_is_zero
validate_percent_complete_is_set_when_work_and_remaining_work_are_set
end
end
@@ -80,6 +82,7 @@ class BaseContract < ::ModelContract
attribute :remaining_hours do
validate_remaining_work_is_lower_than_work
if OpenProject::FeatureDecisions.percent_complete_edition_active?
+ validate_remaining_work_is_zero_or_empty_when_percent_complete_is_100p
validate_remaining_work_is_set_when_work_and_percent_complete_are_set
else
# to be removed in 15.0 with :percent_complete_edition feature flag removal
@@ -362,39 +365,44 @@ def validate_work_is_set_when_remaining_work_is_set
end
def validate_work_is_set_when_remaining_work_and_percent_complete_are_set
- if remaining_work_set_and_valid? && percent_complete_set_and_valid? && work_unset?
+ if remaining_work_set_and_valid? && percent_complete_set_and_valid? && work_empty? && percent_complete != 100
errors.add(:estimated_hours, :must_be_set_when_remaining_work_and_percent_complete_are_set)
end
end
+ def validate_remaining_work_is_zero_or_empty_when_percent_complete_is_100p
+ return unless percent_complete == 100
+
+ if work_set_and_valid? && remaining_work != 0
+ errors.add(:remaining_hours, :must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p)
+ elsif work_empty? && remaining_work_set?
+ errors.add(:remaining_hours, :must_be_empty_when_work_is_empty_and_percent_complete_is_100p)
+ end
+ end
+
def validate_remaining_work_is_set_when_work_and_percent_complete_are_set
- if work_set_and_valid? && percent_complete_set_and_valid? && remaining_work_unset?
+ return if percent_complete == 100
+
+ if work_set_and_valid? && percent_complete_set_and_valid? && remaining_work_empty?
errors.add(:remaining_hours, :must_be_set_when_work_and_percent_complete_are_set)
end
end
def validate_percent_complete_is_set_when_work_and_remaining_work_are_set
- if work_set_and_valid? && remaining_work_set_and_valid? && work != 0 && percent_complete_unset?
+ if work_set? && remaining_work_set? && work != 0 && percent_complete_empty?
errors.add(:done_ratio, :must_be_set_when_work_and_remaining_work_are_set)
end
end
- # rubocop:disable Metrics/AbcSize
def validate_percent_complete_matches_work_and_remaining_work
- return if WorkPackage.status_based_mode? || percent_complete_unset? || work == 0
- return if remaining_work_exceeds_work? # avoid too many error messages at the same time
- return unless work_set? && remaining_work_set?
-
- work_done = work - remaining_work
- expected_percent_complete = (100 * work_done.to_f / work).round
+ return if percent_complete_derivation_unapplicable?
- if percent_complete != expected_percent_complete
+ if !percent_complete_range_derived_from_work_and_remaining_work.cover?(percent_complete)
errors.add(:done_ratio, :does_not_match_work_and_remaining_work)
end
end
- # rubocop:enable Metrics/AbcSize
- def validate_percent_complete_is_unset_when_work_is_zero
+ def validate_percent_complete_is_empty_when_work_is_zero
return if WorkPackage.status_based_mode?
if work == 0 && percent_complete_set?
@@ -411,10 +419,10 @@ def work_set?
end
def work_set_and_valid?
- work_set? && work >= 0
+ work_set? && work >= 0 && !model.errors.has_key?(:estimated_hours)
end
- def work_unset?
+ def work_empty?
work.nil?
end
@@ -427,15 +435,26 @@ def remaining_work_set?
end
def remaining_work_set_and_valid?
- remaining_work_set? && remaining_work >= 0
+ remaining_work_set? && remaining_work >= 0 && !model.errors.has_key?(:remaining_hours)
end
- def remaining_work_unset?
+ def remaining_work_empty?
remaining_work.nil?
end
+ def invalid_work_or_remaining_work_values?
+ (work_set? && work.negative?) ||
+ (remaining_work_set? && remaining_work.negative?) ||
+ (model.errors.has_key?(:estimated_hours) || model.errors.has_key?(:remaining_hours)) ||
+ remaining_work_exceeds_work?
+ end
+
def remaining_work_exceeds_work?
- work_set? && remaining_work_set? && remaining_work > work
+ # if % complete is 100%, then remaining work should be 0h or empty, so no
+ # need to display an error for remaining work exceeding work
+ return false if percent_complete == 100
+
+ work_set_and_valid? && remaining_work_set_and_valid? && remaining_work > work
end
def percent_complete
@@ -450,10 +469,25 @@ def percent_complete_set_and_valid?
percent_complete_set? && percent_complete.between?(0, 100)
end
- def percent_complete_unset?
+ def percent_complete_empty?
percent_complete.nil?
end
+ def percent_complete_derivation_unapplicable?
+ WorkPackage.status_based_mode? || # only applicable in work-based mode
+ work_empty? || remaining_work_empty? || percent_complete_empty? || # only applicable if all 3 values are set
+ work == 0 || percent_complete == 100 # only applicable if not in special cases leading to divisions by zero
+ end
+
+ def percent_complete_range_derived_from_work_and_remaining_work
+ work_done = work - remaining_work
+ percentage = (100 * work_done.to_f / work)
+
+ lower_bound = percentage.truncate
+ upper_bound = lower_bound + 1
+ lower_bound..upper_bound
+ end
+
def validate_no_reopen_on_closed_version
if model.version_id && model.reopened? && model.version.closed?
errors.add :base, I18n.t(:error_can_not_reopen_work_package_on_closed_version)
diff --git a/app/controllers/admin/backups_controller.rb b/app/controllers/admin/backups_controller.rb
index fb50e597c75b..0be5ebdff8a0 100644
--- a/app/controllers/admin/backups_controller.rb
+++ b/app/controllers/admin/backups_controller.rb
@@ -76,12 +76,10 @@ def delete_token
redirect_to action: "show"
end
- def default_breadcrumb
- t(:label_backup)
- end
+ def default_breadcrumb; end
def show_local_breadcrumb
- true
+ false
end
def check_enabled
diff --git a/app/controllers/attribute_help_texts_controller.rb b/app/controllers/attribute_help_texts_controller.rb
index 737002a40f77..44aa15e6085f 100644
--- a/app/controllers/attribute_help_texts_controller.rb
+++ b/app/controllers/attribute_help_texts_controller.rb
@@ -44,8 +44,6 @@ def new
def edit; end
- def upsale; end
-
def create
call = ::AttributeHelpTexts::CreateService
.new(user: current_user)
@@ -87,16 +85,10 @@ def destroy
protected
- def default_breadcrumb
- if action_name == "index"
- t("attribute_help_texts.label_plural")
- else
- ActionController::Base.helpers.link_to(t("attribute_help_texts.label_plural"), attribute_help_texts_path)
- end
- end
+ def default_breadcrumb; end
def show_local_breadcrumb
- true
+ false
end
private
diff --git a/app/controllers/custom_fields_controller.rb b/app/controllers/custom_fields_controller.rb
index 644a489ec762..de3a72af308e 100644
--- a/app/controllers/custom_fields_controller.rb
+++ b/app/controllers/custom_fields_controller.rb
@@ -58,16 +58,10 @@ def edit
protected
- def default_breadcrumb
- if action_name == "index"
- t("label_custom_field_plural")
- else
- ActionController::Base.helpers.link_to(t("label_custom_field_plural"), custom_fields_path)
- end
- end
+ def default_breadcrumb; end
def show_local_breadcrumb
- true
+ false
end
def find_custom_field
diff --git a/app/controllers/custom_styles_controller.rb b/app/controllers/custom_styles_controller.rb
index 884d8a87548f..e2e70eb61dfb 100644
--- a/app/controllers/custom_styles_controller.rb
+++ b/app/controllers/custom_styles_controller.rb
@@ -153,7 +153,7 @@ def update_themes
end
def show_local_breadcrumb
- true
+ false
end
private
diff --git a/app/controllers/enterprises_controller.rb b/app/controllers/enterprises_controller.rb
index 85bc3e8eb9c1..a011ec00375c 100644
--- a/app/controllers/enterprises_controller.rb
+++ b/app/controllers/enterprises_controller.rb
@@ -98,12 +98,10 @@ def render_gon
helpers.write_augur_to_gon
end
- def default_breadcrumb
- t(:label_enterprise_edition)
- end
+ def default_breadcrumb; end
def show_local_breadcrumb
- true
+ false
end
def check_user_limit
diff --git a/app/controllers/work_packages_controller.rb b/app/controllers/work_packages_controller.rb
index b2461ee0c4b4..9e68b8b46495 100644
--- a/app/controllers/work_packages_controller.rb
+++ b/app/controllers/work_packages_controller.rb
@@ -39,14 +39,12 @@ class WorkPackagesController < ApplicationController
:project, only: :show
before_action :load_and_authorize_in_optional_project,
:check_allowed_export,
- :protect_from_unauthorized_export, only: :index
+ :protect_from_unauthorized_export, only: %i[index export_dialog]
authorization_checked! :index, :show, :export_dialog
before_action :load_and_validate_query, only: :index, unless: -> { request.format.html? }
before_action :load_work_packages, only: :index, if: -> { request.format.atom? }
-
- before_action :load_and_authorize_in_optional_project_for_export, only: :export_dialog, if: -> { request.format.html? }
- before_action :load_and_validate_query_for_export, only: :export_dialog, if: -> { request.format.html? }
+ before_action :load_and_validate_query_for_export, only: :export_dialog
def index
respond_to do |format|
@@ -94,10 +92,6 @@ def export_dialog
protected
- def load_and_authorize_in_optional_project_for_export
- load_and_authorize_in_optional_project
- end
-
def load_and_validate_query_for_export
load_and_validate_query
end
diff --git a/app/controllers/workflows_controller.rb b/app/controllers/workflows_controller.rb
index aec51ef4790b..bf78196c288c 100644
--- a/app/controllers/workflows_controller.rb
+++ b/app/controllers/workflows_controller.rb
@@ -45,7 +45,7 @@ def show
end
def edit
- @used_statuses_only = params[:used_statuses_only] != "0"
+ @used_statuses_only = params[:used_statuses_only] == "1"
statuses_for_form
diff --git a/app/forms/work_packages/progress_form.rb b/app/forms/work_packages/progress_form.rb
index 58cad379767b..61eecfa284b5 100644
--- a/app/forms/work_packages/progress_form.rb
+++ b/app/forms/work_packages/progress_form.rb
@@ -62,56 +62,20 @@ def initialize(work_package:,
form do |query_form|
query_form.group(layout: :horizontal) do |group|
if mode == :status_based
- select_field_options =
- default_field_options(:status_id)
- .merge(
- name: :status_id,
- label: I18n.t(:label_percent_complete),
- disabled: @work_package.new_record?
- )
-
- group.select_list(**select_field_options) do |select_list|
- WorkPackages::UpdateContract.new(@work_package, User.current)
- .assignable_statuses
- .find_each do |status|
- select_list.option(
- label: "#{status.name} (#{status.default_done_ratio}%)",
- value: status.id
- )
- end
- end
-
- render_text_field(group, name: :estimated_hours, label: I18n.t(:label_work))
- render_readonly_text_field(group, name: :remaining_hours, label: I18n.t(:label_remaining_work))
-
- # Add a hidden field in create forms as the select field is disabled and is otherwise not included in the form payload
- group.hidden(name: :status_id) if @work_package.new_record?
+ select_status_list(group)
+ text_field(group, name: :estimated_hours, label: I18n.t(:label_work))
+ readonly_text_field(group, name: :remaining_hours, label: I18n.t(:label_remaining_work))
- group.hidden(name: :status_id_touched,
- value: @touched_field_map["status_id_touched"] || false,
- data: { "work-packages--progress--touched-field-marker-target": "touchedFieldInput",
- "referrer-field": "work_package[status_id]" })
- group.hidden(name: :estimated_hours_touched,
- value: @touched_field_map["estimated_hours_touched"] || false,
- data: { "work-packages--progress--touched-field-marker-target": "touchedFieldInput",
- "referrer-field": "work_package[estimated_hours]" })
+ hidden_touched_field(group, name: :status_id)
+ hidden_touched_field(group, name: :estimated_hours)
else
- render_text_field(group, name: :estimated_hours, label: I18n.t(:label_work))
- render_text_field(group, name: :remaining_hours, label: I18n.t(:label_remaining_work))
- render_text_field(group, name: :done_ratio, label: I18n.t(:label_percent_complete))
-
- group.hidden(name: :estimated_hours_touched,
- value: @touched_field_map["estimated_hours_touched"] || false,
- data: { "work-packages--progress--touched-field-marker-target": "touchedFieldInput",
- "referrer-field": "work_package[estimated_hours]" })
- group.hidden(name: :remaining_hours_touched,
- value: @touched_field_map["remaining_hours_touched"] || false,
- data: { "work-packages--progress--touched-field-marker-target": "touchedFieldInput",
- "referrer-field": "work_package[remaining_hours]" })
- group.hidden(name: :done_ratio_touched,
- value: @touched_field_map["done_ratio_touched"] || false,
- data: { "work-packages--progress--touched-field-marker-target": "touchedFieldInput",
- "referrer-field": "work_package[done_ratio]" })
+ text_field(group, name: :estimated_hours, label: I18n.t(:label_work))
+ text_field(group, name: :remaining_hours, label: I18n.t(:label_remaining_work))
+ text_field(group, name: :done_ratio, label: I18n.t(:label_percent_complete))
+
+ hidden_touched_field(group, name: :estimated_hours)
+ hidden_touched_field(group, name: :remaining_hours)
+ hidden_touched_field(group, name: :done_ratio)
end
group.fields_for(:initial) do |builder|
InitialValuesForm.new(builder, work_package:, mode:)
@@ -138,36 +102,74 @@ def focused_field_by_selection(field)
field
end
- def render_text_field(group,
- name:,
- label:)
- text_field_options = {
+ def select_status_list(group)
+ # status selection is disabled in create forms
+ disabled = work_package.new_record?
+
+ select_field_options =
+ default_field_options(:status_id)
+ .merge(
+ name: :status_id,
+ label: I18n.t(:label_percent_complete),
+ disabled:
+ )
+
+ group.select_list(**select_field_options) do |select_list|
+ WorkPackages::UpdateContract.new(work_package, User.current)
+ .assignable_statuses
+ .each do |status| # avoid find_each to keep ordering by position
+ select_list.option(
+ label: "#{status.name} (#{status.default_done_ratio}%)",
+ value: status.id
+ )
+ end
+ end
+
+ # Add a hidden field if the select field is disabled, otherwise it would not be included in the form payload
+ group.hidden(name: :status_id) if disabled
+ end
+
+ def text_field(group,
+ name:,
+ label:)
+ text_field_options = default_field_options(name).merge(
name:,
value: field_value(name),
- label:
- }
- text_field_options.reverse_merge!(default_field_options(name))
+ label:,
+ caption: field_hint_message(name),
+ validation_message: validation_message(name)
+ )
group.text_field(**text_field_options)
end
- def render_readonly_text_field(group,
- name:,
- label:,
- placeholder: true)
- text_field_options = {
+ def readonly_text_field(group,
+ name:,
+ label:,
+ placeholder: true)
+ text_field_options = default_field_options(name).merge(
name:,
value: field_value(name),
label:,
readonly: true,
classes: "input--readonly",
placeholder: ("-" if placeholder)
- }
- text_field_options.reverse_merge!(default_field_options(name))
+ )
group.text_field(**text_field_options)
end
+ def hidden_touched_field(group, name:)
+ group.hidden(name: :"#{name}_touched",
+ value: touched(name),
+ data: { "work-packages--progress--touched-field-marker-target": "touchedFieldInput",
+ "referrer-field": "work_package[#{name}]" })
+ end
+
+ def touched(name)
+ @touched_field_map["#{name}_touched"] || false
+ end
+
def field_value(name)
errors = @work_package.errors.where(name)
if (user_value = errors.map { |error| error.options[:value] }.find { !_1.nil? })
@@ -179,6 +181,19 @@ def field_value(name)
end
end
+ def field_hint_message(field_name)
+ hint = work_package.derived_progress_hints[field_name]
+ return if hint.nil?
+
+ I18n.t("work_package.progress.derivation_hints.#{field_name}.#{hint}")
+ end
+
+ def validation_message(name)
+ # it's ok to take the first error only, that's how primer_view_component does it anyway.
+ message = @work_package.errors.messages_for(name).first
+ message&.upcase_first
+ end
+
def as_percent(value)
value ? "#{value}%" : nil
end
diff --git a/app/forms/work_packages/progress_form/initial_values_form.rb b/app/forms/work_packages/progress_form/initial_values_form.rb
index 2c10cc81d8e6..6ffe9618b536 100644
--- a/app/forms/work_packages/progress_form/initial_values_form.rb
+++ b/app/forms/work_packages/progress_form/initial_values_form.rb
@@ -40,21 +40,25 @@ def initialize(work_package:,
form do |form|
if mode == :status_based
- form.hidden(name: :status_id,
- value: work_package.status_id_was)
- form.hidden(name: :estimated_hours,
- value: work_package.estimated_hours_was)
+ hidden_initial_field(form, name: :status_id)
+ hidden_initial_field(form, name: :estimated_hours)
else
- form.hidden(name: :estimated_hours,
- value: work_package.estimated_hours_was)
- form.hidden(name: :remaining_hours,
- value: work_package.remaining_hours_was)
+ hidden_initial_field(form, name: :estimated_hours)
+ hidden_initial_field(form, name: :remaining_hours)
# next line to be removed in 15.0 with :percent_complete_edition feature flag removal
next unless OpenProject::FeatureDecisions.percent_complete_edition_active?
- form.hidden(name: :done_ratio,
- value: work_package.done_ratio_was)
+ hidden_initial_field(form, name: :done_ratio)
end
end
+
+ private
+
+ def hidden_initial_field(form, name:)
+ form.hidden(name:,
+ value: work_package.public_send(:"#{name}_was"),
+ data: { "work-packages--progress--touched-field-marker-target": "initialValueInput",
+ "referrer-field": "work_package[#{name}]" })
+ end
end
end
diff --git a/app/models/custom_field/order_statements.rb b/app/models/custom_field/order_statements.rb
index c5463cf147c8..e13a19a9f306 100644
--- a/app/models/custom_field/order_statements.rb
+++ b/app/models/custom_field/order_statements.rb
@@ -38,7 +38,7 @@ def order_statements
else
[select_custom_option_position]
end
- when "string", "text", "date", "bool"
+ when "string", "text", "date", "bool", "link"
if multi_value?
[select_custom_values_as_group]
else
diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb
index c404f5d4e238..3525d0d6ba26 100644
--- a/app/models/mail_handler.rb
+++ b/app/models/mail_handler.rb
@@ -377,17 +377,18 @@ def target_project
# Returns a Hash of issue attributes extracted from keywords in the email body
def wp_attributes_from_keywords(work_package)
{
- "type_id" => wp_type_from_keywords(work_package),
- "status_id" => wp_status_from_keywords,
- "parent_id" => wp_parent_from_keywords,
- "priority_id" => wp_priority_from_keywords,
- "category_id" => wp_category_from_keywords(work_package),
"assigned_to_id" => wp_assignee_from_keywords(work_package),
- "version_id" => wp_version_from_keywords(work_package),
- "start_date" => wp_start_date_from_keywords,
+ "category_id" => wp_category_from_keywords(work_package),
"due_date" => wp_due_date_from_keywords,
"estimated_hours" => wp_estimated_hours_from_keywords,
- "remaining_hours" => wp_remaining_hours_from_keywords
+ "parent_id" => wp_parent_from_keywords,
+ "priority_id" => wp_priority_from_keywords,
+ "remaining_hours" => wp_remaining_hours_from_keywords,
+ "responsible_id" => wp_accountable_from_keywords(work_package),
+ "start_date" => wp_start_date_from_keywords,
+ "status_id" => wp_status_from_keywords,
+ "type_id" => wp_type_from_keywords(work_package),
+ "version_id" => wp_version_from_keywords(work_package)
}.compact_blank!
end
@@ -541,8 +542,16 @@ def wp_category_from_keywords(work_package)
lookup_case_insensitive_key(work_package.project.categories, :category)
end
+ def wp_accountable_from_keywords(work_package)
+ get_assignable_principal_from_keywords(:responsible, work_package)
+ end
+
def wp_assignee_from_keywords(work_package)
- keyword = get_keyword(:assigned_to, override: true)
+ get_assignable_principal_from_keywords(:assigned_to, work_package)
+ end
+
+ def get_assignable_principal_from_keywords(keyword, work_package)
+ keyword = get_keyword(keyword, override: true)
return nil if keyword.blank?
diff --git a/app/models/work_package.rb b/app/models/work_package.rb
index 0ed89cfe3737..859a093eb4d6 100644
--- a/app/models/work_package.rb
+++ b/app/models/work_package.rb
@@ -328,6 +328,18 @@ def remaining_hours=(hours)
write_attribute :remaining_hours, convert_duration_to_hours(hours)
end
+ def done_ratio=(value)
+ write_attribute :done_ratio, convert_value_to_percentage(value)
+ end
+
+ def derived_progress_hints=(hints)
+ @derived_progress_hints = hints
+ end
+
+ def derived_progress_hints
+ @derived_progress_hints ||= {}
+ end
+
def duration_in_hours
duration ? duration * 24 : nil
end
@@ -553,7 +565,7 @@ def add_time_entry_for(user, attributes)
def convert_duration_to_hours(value)
if value.is_a?(String)
begin
- value = value.blank? ? nil : DurationConverter.parse(value)
+ value = DurationConverter.parse(value)
rescue ChronicDuration::DurationParseError
# keep invalid value, error shall be caught by numericality validator
end
@@ -561,6 +573,13 @@ def convert_duration_to_hours(value)
value
end
+ def convert_value_to_percentage(value)
+ if value.is_a?(String) && PercentageConverter.valid?(value)
+ value = PercentageConverter.parse(value)
+ end
+ value
+ end
+
##
# Checks if the time entry defined by the given attributes is blank.
# A time entry counts as blank despite a selected activity if that activity
diff --git a/app/models/work_package/validations.rb b/app/models/work_package/validations.rb
index 80c849dc620a..28bc8b4c5cdf 100644
--- a/app/models/work_package/validations.rb
+++ b/app/models/work_package/validations.rb
@@ -33,7 +33,7 @@ module WorkPackage::Validations
validates :subject, :priority, :project, :type, :author, :status, presence: true
validates :subject, length: { maximum: 255 }
- validates :done_ratio, inclusion: { in: 0..100 }, allow_nil: true
+ validates :done_ratio, inclusion: { in: 0..100 }, numericality: true, allow_nil: true
validates :estimated_hours, numericality: { allow_nil: true, greater_than_or_equal_to: 0 }
validates :remaining_hours, numericality: { allow_nil: true, greater_than_or_equal_to: 0 }
validates :derived_remaining_hours, numericality: { allow_nil: true, greater_than_or_equal_to: 0 }
diff --git a/app/services/duration_converter.rb b/app/services/duration_converter.rb
index f267b5b05c24..e2efe5a771e7 100644
--- a/app/services/duration_converter.rb
+++ b/app/services/duration_converter.rb
@@ -76,6 +76,53 @@ class DurationConverter
class << self
def parse(duration_string)
+ return nil if duration_string.blank?
+
+ do_parse(duration_string)
+ end
+
+ def valid?(duration)
+ case duration
+ when String
+ duration.blank? || parseable?(duration)
+ when Numeric
+ duration >= 0
+ when nil
+ true
+ else
+ false
+ end
+ rescue ChronicDuration::DurationParseError
+ false
+ end
+
+ def output(duration_in_hours)
+ return duration_in_hours if duration_in_hours.nil?
+
+ seconds = (duration_in_hours * 3600).to_i
+
+ # :days_and_hours format return "0h" when parsing 0.
+ ChronicDuration.output(seconds,
+ format:,
+ **duration_length_options)
+ end
+
+ private
+
+ def parseable?(duration_string)
+ if number = Integer(duration_string, 10, exception: false) || Float(duration_string, exception: false)
+ number >= 0
+ else
+ begin
+ do_parse(duration_string)
+ true
+ rescue ChronicDuration::DurationParseError
+ false
+ end
+ end
+ end
+
+ def do_parse(duration_string)
# Assume the next logical unit to allow users to write
# durations such as "2h 1" assuming "1" is "1 minute"
last_unit_in_string = duration_string.scan(/[a-zA-Z]+/)
@@ -88,26 +135,13 @@ def parse(duration_string)
"hours"
end
- ChronicDuration.raise_exceptions = true
ChronicDuration.parse(duration_string,
keep_zero: true,
default_unit:,
+ raise_exceptions: true,
**duration_length_options) / 3600.to_f
end
- def output(duration_in_hours)
- return duration_in_hours if duration_in_hours.nil?
-
- seconds = (duration_in_hours * 3600).to_i
-
- # :days_and_hours format return "0h" when parsing 0.
- ChronicDuration.output(seconds,
- format:,
- **duration_length_options)
- end
-
- private
-
def format
Setting.duration_format == "days_and_hours" ? :days_and_hours : :hours_only
end
diff --git a/app/services/percentage_converter.rb b/app/services/percentage_converter.rb
new file mode 100644
index 000000000000..75774b001f87
--- /dev/null
+++ b/app/services/percentage_converter.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+# -- 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 PercentageConverter
+ class ParseError < StandardError; end
+
+ class << self
+ VALID_PERCENTAGE = /\A\s*(\+|-)?\d+(\.\d*)?\s*%?\s*\z/
+
+ # Parse a string representing a percentage and return the value as a float.
+ def parse(percentage_string)
+ return nil if percentage_string.blank?
+ raise ParseError, "invalid percentage: #{percentage_string}" unless valid?(percentage_string)
+
+ percentage_string.to_f
+ end
+
+ # Returns true for a value which could assigned to a % complete value (done_ratio).
+ def valid?(percentage)
+ case percentage
+ when String
+ percentage.blank? || percentage.match?(VALID_PERCENTAGE)
+ when Numeric, nil
+ true
+ else
+ false
+ end
+ end
+ end
+end
diff --git a/app/services/work_packages/set_attributes_service/derive_progress_values_base.rb b/app/services/work_packages/set_attributes_service/derive_progress_values_base.rb
index 0138952612d1..fa057d81076f 100644
--- a/app/services/work_packages/set_attributes_service/derive_progress_values_base.rb
+++ b/app/services/work_packages/set_attributes_service/derive_progress_values_base.rb
@@ -30,8 +30,6 @@ class WorkPackages::SetAttributesService
class DeriveProgressValuesBase
attr_reader :work_package
- PROGRESS_ATTRIBUTES = %i[work remaining_work percent_complete].freeze
-
def initialize(work_package)
@work_package = work_package
end
@@ -57,11 +55,11 @@ def work_set?
work.present?
end
- def work_unset?
+ def work_empty?
work.nil?
end
- def work_was_unset?
+ def work_was_empty?
work_package.estimated_hours_was.nil?
end
@@ -77,6 +75,10 @@ def work_not_provided_by_user?
!work_came_from_user?
end
+ def work_valid?
+ DurationConverter.valid?(work_package.estimated_hours_before_type_cast)
+ end
+
def remaining_work
work_package.remaining_hours
end
@@ -89,11 +91,11 @@ def remaining_work_set?
remaining_work.present?
end
- def remaining_work_unset?
+ def remaining_work_empty?
remaining_work.nil?
end
- def remaining_work_was_unset?
+ def remaining_work_was_empty?
work_package.remaining_hours_was.nil?
end
@@ -109,6 +111,10 @@ def remaining_work_not_provided_by_user?
!remaining_work_came_from_user?
end
+ def remaining_work_valid?
+ DurationConverter.valid?(work_package.remaining_hours_before_type_cast)
+ end
+
def percent_complete
work_package.done_ratio
end
@@ -121,11 +127,11 @@ def percent_complete_set?
percent_complete.present?
end
- def percent_complete_unset?
+ def percent_complete_empty?
percent_complete.nil?
end
- def percent_complete_was_unset?
+ def percent_complete_was_empty?
work_package.done_ratio_was.nil?
end
@@ -143,24 +149,26 @@ def percent_complete_not_provided_by_user?
private
+ def set_hint(field, hint)
+ work_package.derived_progress_hints[field] = hint
+ end
+
def round_progress_values
# The values are set only when rounding returns a different value. Doing
# otherwise would modify the values returned by `xxx_before_type_cast` and
# prevent the numericality validator from working when setting the field
# to a string value.
rounded = work&.round(2)
- if rounded != work
+ if rounded != work && work_valid?
self.work = rounded
end
rounded = remaining_work&.round(2)
- if rounded != remaining_work
+ if rounded != remaining_work && remaining_work_valid?
self.remaining_work = rounded
end
end
def remaining_work_from_percent_complete_and_work
- return nil if work_unset? || percent_complete_unset?
-
completed_work = work * percent_complete / 100.0
remaining_work = (work - completed_work).round(2)
remaining_work.clamp(0.0, work)
diff --git a/app/services/work_packages/set_attributes_service/derive_progress_values_status_based.rb b/app/services/work_packages/set_attributes_service/derive_progress_values_status_based.rb
index b38db2a6744a..3035a88ccafc 100644
--- a/app/services/work_packages/set_attributes_service/derive_progress_values_status_based.rb
+++ b/app/services/work_packages/set_attributes_service/derive_progress_values_status_based.rb
@@ -51,7 +51,15 @@ def update_remaining_work_from_percent_complete
return if remaining_work_came_from_user?
return if work&.negative?
- self.remaining_work = remaining_work_from_percent_complete_and_work
+ if work_empty?
+ return unless work_changed?
+
+ set_hint(:remaining_hours, :cleared_because_work_is_empty)
+ self.remaining_work = nil
+ else
+ set_hint(:remaining_hours, :derived)
+ self.remaining_work = remaining_work_from_percent_complete_and_work
+ end
end
end
end
diff --git a/app/services/work_packages/set_attributes_service/derive_progress_values_work_based.rb b/app/services/work_packages/set_attributes_service/derive_progress_values_work_based.rb
index c599d8456876..69cb6736875e 100644
--- a/app/services/work_packages/set_attributes_service/derive_progress_values_work_based.rb
+++ b/app/services/work_packages/set_attributes_service/derive_progress_values_work_based.rb
@@ -30,6 +30,8 @@ class WorkPackages::SetAttributesService
class DeriveProgressValuesWorkBased < DeriveProgressValuesBase
private
+ attr_accessor :skip_percent_complete_derivation
+
def derive_progress_attributes
raise ArgumentError, "Cannot use #{self.class.name} in status-based mode" if WorkPackage.status_based_mode?
@@ -43,9 +45,10 @@ def derive_progress_attributes
end
def invalid_progress_values?
- work&.negative? \
- || remaining_work&.negative? \
+ work_invalid? \
+ || remaining_work_invalid? \
|| percent_complete_out_of_range? \
+ || percent_complete_unparsable? \
|| remaining_work_set_greater_than_work?
end
@@ -62,66 +65,124 @@ def derive_remaining_work?
end
def derive_percent_complete?
- percent_complete_not_provided_by_user? && (work_changed? || remaining_work_changed?)
+ percent_complete_not_provided_by_user? && (work_changed? || remaining_work_changed?) \
+ && !skip_percent_complete_derivation
end
+ # rubocop:disable Metrics/AbcSize,Metrics/PerceivedComplexity
def update_work
- return if work_set_and_no_user_inputs_provided_for_both_remaining_work_and_percent_complete?
- return if remaining_work_unset? && percent_complete_unset?
-
- self.work = work_from_percent_complete_and_remaining_work
+ return if remaining_work_empty? && percent_complete_empty?
+ return if percent_complete == 100 # would be Infinity if computed when % complete is 100%
+ return unless work_can_be_derived?
+
+ if remaining_work_empty?
+ return unless remaining_work_changed?
+
+ set_hint(:estimated_hours, :cleared_because_remaining_work_is_empty)
+ self.work = nil
+ elsif percent_complete_empty?
+ set_hint(:estimated_hours, :same_as_remaining_work)
+ self.work = remaining_work
+ else
+ set_hint(:estimated_hours, :derived)
+ self.work = work_from_percent_complete_and_remaining_work
+ skip_percent_complete_derivation!
+ end
end
- # rubocop:disable Metrics/AbcSize,Metrics/PerceivedComplexity
def update_remaining_work
- return if work_unset? && percent_complete_unset?
- return if work_was_unset? && remaining_work_set? # remaining work is kept and % complete will be set
+ return if work_empty? && percent_complete_empty?
+ return if work_was_empty? && remaining_work_set? # remaining work is kept and % complete will be unset
- if work_set? && remaining_work_unset? && percent_complete_unset?
+ if work_set? && remaining_work_empty? && percent_complete_empty?
+ set_hint(:remaining_hours, :same_as_work)
self.remaining_work = work
- elsif work_changed? && work_set? && remaining_work_set? && !percent_complete_changed?
+ elsif work_changed? && work_set? && remaining_work_set? && percent_complete_not_provided_by_user?
delta = work - work_was
+ if delta.positive?
+ set_hint(:remaining_hours, :increased_like_work)
+ elsif delta.negative?
+ set_hint(:remaining_hours, :decreased_like_work)
+ end
self.remaining_work = (remaining_work + delta).clamp(0.0, work)
- elsif work_unset? || percent_complete_unset?
+ elsif work_empty?
+ return unless work_changed?
+
+ set_hint(:remaining_hours, :cleared_because_work_is_empty)
+ self.remaining_work = nil
+ elsif percent_complete_empty?
+ set_hint(:remaining_hours, :cleared_because_percent_complete_is_empty)
self.remaining_work = nil
else
+ set_hint(:remaining_hours, :derived)
self.remaining_work = remaining_work_from_percent_complete_and_work
+ skip_percent_complete_derivation!
end
end
# rubocop:enable Metrics/AbcSize,Metrics/PerceivedComplexity
def update_percent_complete
- return if work_unset?
+ return if work_empty?
+
+ if work < 0.005
+ set_hint(:done_ratio, :cleared_because_work_is_0h)
+ self.percent_complete = nil
+ elsif remaining_work_empty?
+ set_hint(:done_ratio, :cleared_because_remaining_work_is_empty)
+ self.percent_complete = nil
+ else
+ set_hint(:done_ratio, :derived)
+ self.percent_complete = percent_complete_from_work_and_remaining_work
+ end
+ end
- self.percent_complete = percent_complete_from_work_and_remaining_work
+ def skip_percent_complete_derivation!
+ self.skip_percent_complete_derivation = true
end
def percent_complete_from_work_and_remaining_work
- return nil if work.zero? || remaining_work_unset?
-
- completed_work = work - remaining_work
- completion_ratio = completed_work.to_f / work
-
- (completion_ratio * 100).round
+ rounded_work = work.round(2)
+ rounded_remaining_work = remaining_work.round(2)
+ completed_work = rounded_work - rounded_remaining_work
+ completion_ratio = completed_work.to_f / rounded_work
+
+ percentage = (completion_ratio * 100)
+ case percentage
+ in 0 then 0
+ in 0..1 then 1
+ in 99...100 then 99
+ else
+ percentage.round
+ end
end
def work_from_percent_complete_and_remaining_work
- return if remaining_work_unset?
-
- remaining_percent_complete = 1.0 - ((percent_complete || 0) / 100.0)
+ remaining_percent_complete = 1.0 - (percent_complete / 100.0)
remaining_work / remaining_percent_complete
end
- def remaining_work_set_greater_than_work?
- attributes_from_user == %i[remaining_work] && work && remaining_work && remaining_work > work
+ def work_invalid?
+ !work_valid?
end
- def attributes_from_user
- @attributes_from_user ||= PROGRESS_ATTRIBUTES.filter { |attr| public_send(:"#{attr}_came_from_user?") }
+ def remaining_work_invalid?
+ !remaining_work_valid?
+ end
+
+ def percent_complete_unparsable?
+ !PercentageConverter.valid?(work_package.done_ratio_before_type_cast)
+ end
+
+ def remaining_work_set_greater_than_work?
+ (work_was_empty? || remaining_work_came_from_user?) \
+ && percent_complete_not_provided_by_user? \
+ && work && remaining_work && remaining_work > work
end
- def work_set_and_no_user_inputs_provided_for_both_remaining_work_and_percent_complete?
- work_set? && (remaining_work_not_provided_by_user? || percent_complete_not_provided_by_user?)
+ def work_can_be_derived?
+ work_empty? \
+ || (remaining_work_came_from_user? && percent_complete_came_from_user?) \
+ || (remaining_work_empty? && remaining_work_came_from_user?)
end
end
end
diff --git a/app/views/admin/backups/show.html.erb b/app/views/admin/backups/show.html.erb
index 1b6f6fa64d16..b1bcd6f88465 100644
--- a/app/views/admin/backups/show.html.erb
+++ b/app/views/admin/backups/show.html.erb
@@ -29,40 +29,7 @@ See COPYRIGHT and LICENSE files for more details.
<% html_title t(:label_administration), t(:label_backup) -%>
-<%= toolbar title: t('label_backup') do %>
-
<%=
+ if OpenProject::FeatureDecisions.percent_complete_edition_active?
+ t("setting_work_package_done_ratio_explanation_html")
+ else
+ # This condition branch to be removed in 15.0 with :percent_complete_edition feature flag removal
+ t("setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html")
+ end
+ %>
diff --git a/app/views/projects/_toolbar.html.erb b/app/views/projects/_toolbar.html.erb
index fbfa41072e26..a9f699a27294 100644
--- a/app/views/projects/_toolbar.html.erb
+++ b/app/views/projects/_toolbar.html.erb
@@ -47,7 +47,7 @@ See COPYRIGHT and LICENSE files for more details.
<% if @project.copy_allowed? %>
- <%= link_to copy_project_path(@project), class: 'button copy', accesskey: accesskey(:copy) do %>
+ <%= link_to copy_project_path(@project), class: 'button copy', accesskey: accesskey(:copy), data: { turbo: false } do %>
<%= op_icon('button--icon icon-copy') %>
<%= t(:button_copy) %>
<% end %>
diff --git a/app/workers/work_packages/progress/apply_statuses_change_job.rb b/app/workers/work_packages/progress/apply_statuses_change_job.rb
index 4a29583b0b35..affb1979cea7 100644
--- a/app/workers/work_packages/progress/apply_statuses_change_job.rb
+++ b/app/workers/work_packages/progress/apply_statuses_change_job.rb
@@ -58,18 +58,27 @@ def perform(cause_type:, status_name: nil, status_id: nil, changes: nil)
@changes = changes
with_temporary_progress_table do
- if WorkPackage.use_status_for_done_ratio?
- set_p_complete_from_status
- derive_remaining_work_from_work_and_p_complete
- end
+ adjust_progress_values
update_totals
-
copy_progress_values_to_work_packages_and_update_journals(journal_cause)
end
end
private
+ def adjust_progress_values
+ if WorkPackage.work_based_mode?
+ clear_percent_complete_when_0h_work
+ elsif WorkPackage.status_based_mode?
+ set_p_complete_from_status
+ if OpenProject::FeatureDecisions.percent_complete_edition_active?
+ fix_remaining_work_set_with_100p_complete
+ derive_unset_work_from_remaining_work_and_p_complete
+ end
+ derive_remaining_work_from_work_and_p_complete
+ end
+ end
+
def journal_cause
assert_valid_cause_type!
@@ -109,4 +118,12 @@ def assert_status_information_present!
raise ArgumentError, "changes must be provided"
end
end
+
+ def clear_percent_complete_when_0h_work
+ execute(<<~SQL.squish)
+ UPDATE temp_wp_progress_values
+ SET done_ratio = NULL
+ WHERE estimated_hours = 0
+ SQL
+ end
end
diff --git a/app/workers/work_packages/progress/migrate_values_job.rb b/app/workers/work_packages/progress/migrate_values_job.rb
index 04f9d741d05a..6fcf14aad81c 100644
--- a/app/workers/work_packages/progress/migrate_values_job.rb
+++ b/app/workers/work_packages/progress/migrate_values_job.rb
@@ -76,17 +76,6 @@ def unset_all_percent_complete_values
SQL
end
- def fix_remaining_work_set_with_100p_complete
- execute(<<~SQL.squish)
- UPDATE temp_wp_progress_values
- SET estimated_hours = remaining_hours,
- remaining_hours = 0
- WHERE estimated_hours IS NULL
- AND remaining_hours IS NOT NULL
- AND done_ratio = 100
- SQL
- end
-
def fix_remaining_work_exceeding_work
execute(<<~SQL.squish)
UPDATE temp_wp_progress_values
@@ -133,20 +122,6 @@ def derive_unset_remaining_work_from_work_and_p_complete
SQL
end
- def derive_unset_work_from_remaining_work_and_p_complete
- execute(<<~SQL.squish)
- UPDATE temp_wp_progress_values
- SET estimated_hours =
- CASE done_ratio
- WHEN 0 THEN remaining_hours
- ELSE ROUND((remaining_hours * 100 / (100 - done_ratio))::numeric, 2)
- END
- WHERE estimated_hours IS NULL
- AND remaining_hours IS NOT NULL
- AND done_ratio IS NOT NULL
- SQL
- end
-
def derive_p_complete_from_work_and_remaining_work
execute(<<~SQL.squish)
UPDATE temp_wp_progress_values
diff --git a/app/workers/work_packages/progress/sql_commands.rb b/app/workers/work_packages/progress/sql_commands.rb
index 5ae49386fd40..b00763d1098f 100644
--- a/app/workers/work_packages/progress/sql_commands.rb
+++ b/app/workers/work_packages/progress/sql_commands.rb
@@ -83,6 +83,31 @@ def set_p_complete_from_status
SQL
end
+ def fix_remaining_work_set_with_100p_complete
+ execute(<<~SQL.squish)
+ UPDATE temp_wp_progress_values
+ SET estimated_hours = remaining_hours,
+ remaining_hours = 0
+ WHERE estimated_hours IS NULL
+ AND remaining_hours IS NOT NULL
+ AND done_ratio = 100
+ SQL
+ end
+
+ def derive_unset_work_from_remaining_work_and_p_complete
+ execute(<<~SQL.squish)
+ UPDATE temp_wp_progress_values
+ SET estimated_hours =
+ CASE done_ratio
+ WHEN 0 THEN remaining_hours
+ ELSE ROUND((remaining_hours * 100 / (100 - done_ratio))::numeric, 2)
+ END
+ WHERE estimated_hours IS NULL
+ AND remaining_hours IS NOT NULL
+ AND done_ratio IS NOT NULL
+ SQL
+ end
+
# Computes total work, total remaining work and total % complete for all work
# packages having children.
def update_totals
diff --git a/config/locales/crowdin/af.yml b/config/locales/crowdin/af.yml
index 3840bb1bb197..2e44ea426ef8 100644
--- a/config/locales/crowdin/af.yml
+++ b/config/locales/crowdin/af.yml
@@ -1040,10 +1040,10 @@ af:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ af:
does_not_exist: "Die spesefieke kategorie bestaan nie."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ af:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ af:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ af:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Opmerking"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/ar.yml b/config/locales/crowdin/ar.yml
index 75d52bc5fd81..9494864a26f2 100644
--- a/config/locales/crowdin/ar.yml
+++ b/config/locales/crowdin/ar.yml
@@ -1068,10 +1068,10 @@ ar:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "ليس في تاريخ البدء، وعلى الرغم من أن هذا المطلوب للمعالم."
@@ -1101,15 +1101,17 @@ ar:
does_not_exist: "الفئة المحددة غير موجودة."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1800,7 +1802,8 @@ ar:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3263,8 +3266,10 @@ ar:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "خصائص مجموعة العمل"
setting_work_package_startdate_is_adddate: "استخدام التاريخ الحالي كتاريخ البدء لمجموعات العمل الجديدة"
setting_work_packages_projects_export_limit: "حد تصدير حزم العمل / المشاريع"
@@ -3651,9 +3656,26 @@ ar:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "تعليق"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/az.yml b/config/locales/crowdin/az.yml
index a262fd9995db..187327f6e154 100644
--- a/config/locales/crowdin/az.yml
+++ b/config/locales/crowdin/az.yml
@@ -1040,10 +1040,10 @@ az:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ az:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ az:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ az:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ az:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comment"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/be.yml b/config/locales/crowdin/be.yml
index 491c89a56aab..3a89b5721d57 100644
--- a/config/locales/crowdin/be.yml
+++ b/config/locales/crowdin/be.yml
@@ -1054,10 +1054,10 @@ be:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1087,15 +1087,17 @@ be:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1730,7 +1732,8 @@ be:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3191,8 +3194,10 @@ be:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3577,9 +3582,26 @@ be:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comment"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/bg.yml b/config/locales/crowdin/bg.yml
index 828333e8ab34..e449214a6517 100644
--- a/config/locales/crowdin/bg.yml
+++ b/config/locales/crowdin/bg.yml
@@ -1040,10 +1040,10 @@ bg:
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"
- must_be_set_when_remaining_work_is_set: "Изисква се, когато е зададена Оставаща работа."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "не е на начална дата, въпреки че това е необходимо за важни събития."
@@ -1073,15 +1073,17 @@ bg:
does_not_exist: "Определената категория не съществува."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Не може да бъде по-ниско от Оставащата работа."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Не може да бъде по-високо от Работа."
- must_be_set_when_work_is_set: "Изисква се, когато е зададена Работа."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Работният пакет е в състояние само за четене, така че атрибутите му не могат да бъдат променяни."
type:
attributes:
@@ -1660,7 +1662,8 @@ bg:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ bg:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ bg:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Коментар"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/ca.yml b/config/locales/crowdin/ca.yml
index 46d851f420e4..2ca0e9078d98 100644
--- a/config/locales/crowdin/ca.yml
+++ b/config/locales/crowdin/ca.yml
@@ -1036,10 +1036,10 @@ ca:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "no és la data d'inici, tot i que és necessari per a les fites."
@@ -1069,15 +1069,17 @@ ca:
does_not_exist: "La categoria especificada no existeix."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "No pot ser inferior al treball restant."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "El paquet de treball està en un estat de només lectura, per això els seus atributs no poden ser modificats."
type:
attributes:
@@ -1656,7 +1658,8 @@ ca:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3106,8 +3109,10 @@ ca:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Propietats de paquet de treball"
setting_work_package_startdate_is_adddate: "Utilitzar la data actual com a data d'inici dels paquets de treball nous"
setting_work_packages_projects_export_limit: "Límit d'exportació de paquets de treball/projectes"
@@ -3490,9 +3495,26 @@ ca:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comentari"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/ckb-IR.yml b/config/locales/crowdin/ckb-IR.yml
index 396097831e26..312b45ca7129 100644
--- a/config/locales/crowdin/ckb-IR.yml
+++ b/config/locales/crowdin/ckb-IR.yml
@@ -1040,10 +1040,10 @@ ckb-IR:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ ckb-IR:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ ckb-IR:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ ckb-IR:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ ckb-IR:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comment"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/cs.yml b/config/locales/crowdin/cs.yml
index 8a96da96b29d..72f8d5b2bffb 100644
--- a/config/locales/crowdin/cs.yml
+++ b/config/locales/crowdin/cs.yml
@@ -273,7 +273,7 @@ cs:
favored: "Oblíbené projekty"
archived: "Archivované projekty"
shared: "Sdílené seznamy projektů"
- my_lists: "My project lists"
+ my_lists: "Moje seznamy projektů"
new:
placeholder: "Nový seznam projektů"
delete_modal:
@@ -462,7 +462,7 @@ cs:
irreversible: "Tato akce je nevratná"
confirmation: "Zadejte název zástupného uživatele %{name} pro potvrzení odstranění."
upsale:
- title: placeholder uživatel
+ title: Placeholder uživatel
description: >
Placeholder uživatelé jsou způsob, jak přiřadit pracovní balíčky uživatelům, kteří nejsou součástí vašeho projektu. Mohou být užiteční v řadě scénářů; například, pokud potřebujete sledovat úkoly u zdroje, který ještě nejsou pojmenovány nebo dostupné, nebo pokud nechcete této osobě umožnit přístup k OpenProject ale stále chcete sledovat úkoly, které jim byly přiděleny.
prioritiies:
@@ -496,7 +496,7 @@ cs:
is_readonly: "Pouze pro čtení"
excluded_from_totals: "Vyloučeno z celkových hodnot"
themes:
- dark: "Dark (Beta)"
+ dark: "Tmavý (Beta)"
light: "Světlý"
light_high_contrast: "Světlý kontrast"
types:
@@ -684,7 +684,7 @@ cs:
false: "archivováno"
identifier: "Identifikátor"
latest_activity_at: "Poslední aktivita"
- parent: "Podprojekt"
+ parent: "Nadřazený projekt"
public_value:
title: "Viditelnost"
true: "veřejný"
@@ -729,7 +729,7 @@ cs:
is_closed: "Pracovní balíček uzavřen"
is_readonly: "Pracovní balíček jen pro čtení"
excluded_from_totals: "Exclude from calculation of totals in hierarchy"
- default_done_ratio: "% Complete"
+ default_done_ratio: "% Dokončeno"
time_entry:
activity: "Aktivita"
hours: "Hodiny"
@@ -790,7 +790,7 @@ cs:
true: "zahrnuje nepracovní dny"
notify: "Oznámit" #used in custom actions
parent: "Nadřazený"
- parent_issue: "Rodič"
+ parent_issue: "Nadřazený"
parent_work_package: "Nadřazený"
priority: "Priorita"
progress: "% Dokončeno"
@@ -920,7 +920,7 @@ cs:
blank: "je povinné. Zvolte prosím název."
not_unique: " už bylo použito. Prosím vyberte jiný název."
notifications:
- at_least_one_channel: "Alespoň jeden kanál pro odesílání oznámení musí být specifikován."
+ at_least_one_channel: "Pro odesílání notifikací musí být specifikován alespoň jeden kanál"
attributes:
read_ian:
read_on_creation: "nelze nastavit na pravdivé při vytváření oznámení "
@@ -1054,10 +1054,10 @@ cs:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "není v počátečním datu, i když je to nutné pro milníky."
@@ -1087,15 +1087,17 @@ cs:
does_not_exist: "Zadaná kategorie neexistuje."
estimated_hours:
not_a_number: "není platná doba trvání."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "není platná doba trvání."
- cant_exceed_work: "Nemůže být vyšší než Práce."
- must_be_set_when_work_is_set: "Vyžadováno, když je nastavena práce."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Pracovní balíček je ve stavu jen pro čtení, takže jeho atributy nelze změnit."
type:
attributes:
@@ -1170,11 +1172,11 @@ cs:
member: "Člen"
news: "Novinky"
notification:
- one: "Oznámení"
- few: "Oznámení"
- many: "Oznámení"
- other: "Oznámení"
- placeholder_user: "placeholder uživatel"
+ one: "Notifikace"
+ few: "Notifikací"
+ many: "Notifikací"
+ other: "Notifikace"
+ placeholder_user: "Placeholder uživatel"
project: "Projekt"
project_query:
one: "Seznam projektů"
@@ -1721,7 +1723,7 @@ cs:
title: "Export"
submit: "Export"
format:
- label: "File format"
+ label: "Formát souboru"
options:
csv:
label: "CSV"
@@ -1730,32 +1732,33 @@ cs:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
- label: "PDF export type"
+ label: "Typ exportu do PDF"
options:
table:
- label: "Table"
+ label: "Tabulka"
caption: "Export the work packages list in a table with the desired columns."
report:
label: "Report"
caption: "Export the work package on a detailed report of all work packages in the list."
gantt:
- label: "Gantt chart"
+ label: "Ganttův diagram"
caption: "Export the work packages list in a Gantt diagram view."
include_images:
- label: "Include images"
+ label: "Včetně obrázků"
caption: "Exclude images to reduce the size of the PDF export."
gantt_zoom_levels:
- label: "Zoom levels"
+ label: "Úrovně přiblížení"
caption: "Select what is the zoom level for dates displayed in the chart."
options:
- days: "Days"
- weeks: "Weeks"
- months: "Months"
- quarters: "Quarters"
+ days: "Dny"
+ weeks: "Týdny"
+ months: "Měsíce"
+ quarters: "Čtvrtletí"
column_width:
label: "Table column width"
options:
@@ -1887,7 +1890,7 @@ cs:
instructions_after_error: "Zkuste se znovu přihlásit kliknutím na %{signin}. Pokud chyba přetrvává, požádejte správce o pomoc."
menus:
admin:
- mail_notification: "E-mailová upozornění"
+ mail_notification: "E-mailové notifikace"
mails_and_notifications: "E-maily a oznámení"
aggregation: "Agregace"
api_and_webhooks: "API & Webhooky"
@@ -1950,7 +1953,7 @@ cs:
by_project: "Nepřečteno dle projektu"
by_reason: "Důvod"
inbox: "Doručená pošta"
- send_notifications: "Odeslat oznámení pro tuto akci"
+ send_notifications: "Pro tuto akci odeslat notifikaci"
work_packages:
subject:
created: "Pracovní balíček byl vytvořen."
@@ -2010,7 +2013,7 @@ cs:
label_ldap_auth_source_plural: "Připojení LDAP"
label_attribute_expand_text: "Úplný text pro '%{attribute}'"
label_authentication: "Ověření"
- label_authentication_settings: "Authentication settings"
+ label_authentication_settings: "Nastavení ověření"
label_available_global_roles: "Dostupné globální role"
label_available_project_attributes: "Dostupné atributy projektu"
label_available_project_forums: "Dostupná fóra"
@@ -2208,7 +2211,7 @@ cs:
label_introduction_video: "Seznamovací video"
label_invite_user: "Pozvat uživatele"
label_share: "Sdílet"
- label_share_project_list: "Share project list"
+ label_share_project_list: "Sdílet seznam projektů"
label_share_work_package: "Sdílet pracovní balíček"
label_show_hide: "Zobrazit/skrýt"
label_show_hide_n_items: "Show/hide %{count} items"
@@ -2305,8 +2308,8 @@ cs:
label_next_week: "Příští týden"
label_no_change_option: "(Beze změny)"
label_no_data: "Žádná data k zobrazení"
- label_no_due_date: "no finish date"
- label_no_start_date: "no start date"
+ label_no_due_date: "žádné datum dokončení"
+ label_no_start_date: "žádné datum začátku"
label_no_parent_page: "Žádná nadřazená stránka"
label_nothing_display: "Nic k zobrazení"
label_nobody: "nikdo"
@@ -2343,9 +2346,9 @@ cs:
label_permissions: "Práva"
label_permissions_report: "Přehled oprávnění"
label_personalize_page: "Přizpůsobit tuto stránku"
- label_placeholder_user: "placeholder uživatel"
+ label_placeholder_user: "Placeholder uživatel"
label_placeholder_user_new: ""
- label_placeholder_user_plural: "placeholder uživatelé"
+ label_placeholder_user_plural: "Placeholder uživatelé"
label_planning: "Plánování"
label_please_login: "Přihlaste se prosím"
label_plugins: "Pluginy"
@@ -2367,7 +2370,7 @@ cs:
label_project_attribute_plural: "Atributy projektu"
label_project_attribute_manage_link: "Správa atributů produktu"
label_project_count: "Celkový počet projektů"
- label_project_copy_notifications: "Během kopie projektu odeslat oznámení e-mailem"
+ label_project_copy_notifications: "Během kopírování projektu odeslat notifikace e-mailem"
label_project_latest: "Nejnovější projekty"
label_project_default_type: "Povolit prázdný typ"
label_project_hierarchy: "Hierarchie projektu"
@@ -2432,7 +2435,7 @@ cs:
label_role_search: "Přiřadit roli novým členům"
label_scm: "SCM"
label_search: "Vyhledávání"
- label_search_by_name: "Search by name"
+ label_search_by_name: "Hledat podle názvu"
label_send_information: "Poslat nové přihlašovací údaje uživateli"
label_send_test_email: "Odeslat testovací email"
label_session: "Relace"
@@ -2507,7 +2510,7 @@ cs:
label_users_settings: "Uživatelská nastavení"
label_version_new: "Nová verze"
label_version_plural: "Verze"
- label_version_sharing_descendants: "S Podprojekty"
+ label_version_sharing_descendants: "S podprojekty"
label_version_sharing_hierarchy: "S hierarchií projektu"
label_version_sharing_none: "Není sdíleno"
label_version_sharing_system: "Se všemi projekty"
@@ -2545,7 +2548,7 @@ cs:
label_work_package_new: "Nový pracovní balíček"
label_work_package_edit: "Upravit pracovní balíček %{name}"
label_work_package_plural: "Pracovní balíčky"
- label_work_packages_settings: "Work packages settings"
+ label_work_packages_settings: "Nastavení pracovních balíčků"
label_work_package_status: "Stav pracovního balíčku"
label_work_package_status_new: "Nový stav"
label_work_package_status_plural: "Stav pracovního balíčku"
@@ -2613,28 +2616,28 @@ cs:
digests:
including_mention_singular: "včetně zmínky"
including_mention_plural: "včetně %{number_mentioned} zmínění"
- unread_notification_singular: "1 nepřečtené oznámení"
- unread_notification_plural: "%{number_unread} nepřečtených oznámení"
+ unread_notification_singular: "1 nepřečtená notifikace"
+ unread_notification_plural: "%{number_unread} nepřečtených notifikací"
you_have: "Máte"
logo_alt_text: "Logo"
mention:
subject: "%{user_name} vás zmínil v #%{id} - %{subject}"
notification:
- center: "Centrum oznámení"
+ center: "Centrum notifikací"
see_in_center: "Zobrazit komentář v oznamovacím centru"
settings: "Změnit nastavení e-mailu"
salutation: "Ahoj %{user}!"
salutation_full_name: "Jméno a příjmení"
work_packages:
created_at: "Vytvořeno v %{timestamp} uživatelem %{user} "
- login_to_see_all: "Přihlaste se pro zobrazení všech oznámení."
+ login_to_see_all: "Přihlaste se pro zobrazení všech notifikací."
mentioned: "Byli jste zmíněni v komentáři"
mentioned_by: "%{user} vás zmínil v komentáři"
more_to_see:
- one: "Existuje ještě 1 pracovní balíček s oznámeními."
- few: "Existuje ještě %{count} pracovních balíčků s oznámeními."
- many: "Existuje ještě %{count} pracovních balíčků s oznámeními."
- other: "Existuje ještě %{count} pracovních balíčků s oznámeními."
+ one: "Existuje ještě 1 pracovní balíček s notifikací."
+ few: "Existuje ještě %{count} pracovních balíčků s notifikacema."
+ many: "Existuje ještě %{count} pracovních balíčků s notifikacema."
+ other: "Existuje ještě %{count} pracovních balíčků s notifikacema."
open_in_browser: "Otevřít v prohlížeči"
reason:
watched: "Sledováno"
@@ -2643,7 +2646,7 @@ cs:
mentioned: "Zmíněné"
shared: "Sdílené"
subscribed: "vše"
- prefix: "Obdrženo z důvodu nastavení oznámení: %{reason}"
+ prefix: "Obdrženo z důvodu nastavení notifikací: %{reason}"
date_alert_start_date: "Upozornění na datum"
date_alert_due_date: "Upozornění na datum"
see_all: "Zobrazit vše"
@@ -2891,7 +2894,7 @@ cs:
permission_edit_own_messages: "Upravit vlastní zprávy"
permission_edit_own_time_entries: "Upravit vlastní časové záznamy"
permission_edit_project: "Upravit projekt"
- permission_edit_project_attributes: "Edit project attributes"
+ permission_edit_project_attributes: "Úprava atributů projektu"
permission_edit_reportings: "Upravit přehledy"
permission_edit_time_entries: "Upravit časové záznamy pro ostatní uživatele"
permission_edit_timelines: "Úpravy časové osy"
@@ -2917,7 +2920,7 @@ cs:
permission_move_work_packages: "Přesun pracovních balíčků"
permission_protect_wiki_pages: "Ochrana stránky wiki"
permission_rename_wiki_pages: "Přejmenovat stránky wiki"
- permission_save_queries: "Uložit pohled"
+ permission_save_queries: "Uložit zobrazení"
permission_search_project: "Hledat projekt"
permission_select_custom_fields: "Vybrat vlastní pole"
permission_select_project_custom_fields: "Vyberte atributy projektu"
@@ -2942,7 +2945,7 @@ cs:
permission_work_package_assigned: "Staňte se řešitelem/odpovědným"
permission_work_package_assigned_explanation: "Pracovní balíčky mohou být přiřazeny uživatelům a skupinám, které tuto roli vlastní v příslušném projektu"
permission_view_project_activity: "Zobrazit aktivitu projektu"
- permission_view_project_attributes: "View project attributes"
+ permission_view_project_attributes: "Zobrazit atributy projektu"
permission_save_bcf_queries: "Uložit dotazy BCF"
permission_manage_public_bcf_queries: "Spravovat veřejné dotazy BCF."
permission_edit_attribute_help_texts: "Upravit text nápovědy atributu"
@@ -3169,9 +3172,9 @@ cs:
setting_default_projects_public: "Nové projekty nastavovat jako veřejné"
setting_diff_max_lines_displayed: "Maximální počet zobrazených řádků rozdílu"
setting_display_subprojects_work_packages: "Automaticky zobrazit úkoly podprojektu v hlavním projektu"
- setting_duration_format: "Duration format"
- setting_duration_format_hours_only: "Hours only"
- setting_duration_format_days_and_hours: "Days and hours"
+ setting_duration_format: "Formát doby trvání"
+ setting_duration_format_hours_only: "Pouze hodiny"
+ setting_duration_format_days_and_hours: "Dny a hodiny"
setting_duration_format_instructions: "This defines how Work, Remaining work, and Time spent durations are displayed."
setting_emails_footer: "Zápatí emailů"
setting_emails_header: "Záhlaví emailů"
@@ -3190,8 +3193,10 @@ cs:
setting_work_package_done_ratio: "Výpočet průběhu"
setting_work_package_done_ratio_field: "Na základě práce"
setting_work_package_done_ratio_status: "Na základě stavu"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Vlastnosti pracovního balíčku"
setting_work_package_startdate_is_adddate: "Použít aktuální datum jako počáteční datum pro nové úkoly"
setting_work_packages_projects_export_limit: "Limit exportu pracovních balíčků / projektů"
@@ -3294,7 +3299,7 @@ cs:
enable_subscriptions_text_html: Umožňuje uživatelům s nezbytnými oprávněními přihlásit se do OpenProject kalendářů a získat přístup k informacím o pracovním balíčku prostřednictvím externího klienta kalendáře. Poznámka: Před povolením si prosím přečtěte iCalendar předplatné.
language_name_being_default: "%{language_name} (výchozí)"
notifications:
- events_explanation: "Určuje, pro kterou událost je odeslán e-mail. Pracovní balíčky jsou z tohoto seznamu vyloučeny, protože oznámení pro ně mohou být nastavena speciálně pro každého uživatele."
+ events_explanation: "Určuje, pro kterou událost je odeslán e-mail. Pracovní balíčky jsou z tohoto seznamu vyloučeny, protože notifikace pro ně mohou být nastavena speciálně pro každého uživatele."
delay_minutes_explanation: "Odesílání e-mailu může být pozdrženo, aby bylo uživatelům s nakonfigurovaným v oznámení aplikace před odesláním pošty potvrzeno oznámení. Uživatelé, kteří si přečtou oznámení v aplikaci, nedostanou e-mail pro již přečtené oznámení."
other: "Ostatní"
passwords: "Hesla"
@@ -3379,7 +3384,7 @@ cs:
text_destroy_with_associated: "Existují další objekty, které jsou přiřazeny k pracovním balíčkům a které mají být odstraněny. Tyto objekty jsou následující typy:"
text_destroy_what_to_do: "Co chcete udělat?"
text_diff_truncated: "... Toto rozlišení bylo zkráceno, protože přesahuje maximální velikost, kterou lze zobrazit."
- text_email_delivery_not_configured: "Doručení e-mailu není nakonfigurováno a oznámení jsou zakázána.\nNakonfigurujte váš SMTP server pro jejich povolení."
+ text_email_delivery_not_configured: "Doručení e-mailu není nakonfigurováno a notifikace jsou zakázány.\nNakonfigurujte váš SMTP server pro jejich povolení."
text_enumeration_category_reassign_to: "Přiřadit je k této hodnotě:"
text_enumeration_destroy_question: "%{count} objektů je přiřazeno k této hodnotě."
text_file_repository_writable: "Do adresáře příloh lze zapisovat"
@@ -3575,9 +3580,26 @@ cs:
progress:
label_note: "Poznámka:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Komentář"
comment_description: "Může zobrazit a komentovat tento pracovní balíček."
diff --git a/config/locales/crowdin/da.yml b/config/locales/crowdin/da.yml
index d1e1934bac14..cd069d10f239 100644
--- a/config/locales/crowdin/da.yml
+++ b/config/locales/crowdin/da.yml
@@ -1038,10 +1038,10 @@ da:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "er ikke på startdato, selvom dette er påkrævet for milepæle."
@@ -1071,15 +1071,17 @@ da:
does_not_exist: "Den angivne kategori findes ikke."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1658,7 +1660,8 @@ da:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3113,8 +3116,10 @@ da:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Egenskaber for arbejdspakke"
setting_work_package_startdate_is_adddate: "Brug dags dato som start for nye arbejdspakker"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3497,9 +3502,26 @@ da:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Kommentér"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/de.yml b/config/locales/crowdin/de.yml
index 3ff3bfaa2abd..65cbe6b291d7 100644
--- a/config/locales/crowdin/de.yml
+++ b/config/locales/crowdin/de.yml
@@ -48,7 +48,7 @@ de:
main-menu-border-color: "Rahmenfarbe des Hauptmenüs"
custom_colors: "Benutzerdefinierte Farben"
customize: "Passen Sie Ihre OpenProject Installation mit Ihrem eigenen Logo und eigenen Farben an."
- enterprise_notice: "Diese kleine Erweiterung steht den Abonnenten der Enterprise edition ganz exklusiv als kleines Dankeschön für deren finanzielle Unterstützung zur Verfügung."
+ enterprise_notice: "Dieses kleine Add-on steht den Abonnenten der Enterprise-Edition ganz exklusiv als kleines Dankeschön für deren finanzielle Unterstützung zur Verfügung."
enterprise_more_info: "Hinweis: Das verwendete Logo wird öffentlich zugänglich sein."
manage_colors: "Farbauswahloptionen bearbeiten"
instructions:
@@ -61,15 +61,15 @@ de:
main-menu-bg-color: "Hintergrundfarbe des Menüs in der linken Seitenleiste."
theme_warning: Das Ändern des Themes wird Ihr benutzerdefiniertes Design überschreiben. Alle Änderungen werden dann verloren gehen. Sind Sie sicher, dass Sie fortfahren möchten?
enterprise:
- upgrade_to_ee: "Auf Enterprise edition upgraden"
- add_token: "Enterprise edition Support Token hochladen"
+ upgrade_to_ee: "Auf Enterprise-Edition upgraden"
+ add_token: "Enterprise-Edition Support Token hochladen"
delete_token_modal:
- text: "Sind Sie sicher, dass Sie das aktuelle Enterprise edition token entfernen möchten?"
+ text: "Sind Sie sicher, dass Sie das aktuelle Enterprise Edition-Token entfernen möchten?"
title: "Token löschen"
replace_token: "Aktuellen Enterprise edition Support Token ersetzen"
order: "Enterprise on-premises bestellen"
- paste: "Enterprise edition Support Token hier einfügen"
- required_for_feature: "Dieses Add-on ist nur mit einem aktiven Enterprise edition Support-Token verfügbar."
+ paste: "Enterprise-Edition Support Token hier einfügen"
+ required_for_feature: "Dieses Add-on ist nur mit einem aktiven Enterprise-Edition Support-Token verfügbar."
enterprise_link: "Klicken Sie hier für weitere Informationen."
start_trial: "Kostenlose Testversion starten"
book_now: "Jetzt buchen"
@@ -1034,10 +1034,10 @@ de:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "stimmt nicht mit Aufwand und Verbleibender Aufwand überein"
- cannot_be_set_when_work_is_zero: "kann nicht eingestellt werden, wenn Aufwand gleich Null ist"
- must_be_set_when_remaining_work_is_set: "Ist erforderlich, wenn Verbleibender Aufwand gesetzt ist."
- must_be_set_when_work_and_remaining_work_are_set: "Ist erforderlich, wenn Aufwand und Verbleibender Aufwand gesetzt ist."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "muss zwischen 0 und 100 liegen."
due_date:
not_start_date: "ist nicht identisch mit dem Startdatum, obwohl dies bei Meilensteinen Pflicht ist."
@@ -1067,15 +1067,17 @@ de:
does_not_exist: "Die angegebene Kategorie existiert nicht."
estimated_hours:
not_a_number: "ist keine gültige Dauer."
- cant_be_inferior_to_remaining_work: "Kann nicht niedriger sein als Verbleibender Aufwand."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Erforderlich, wenn Verbleibender Aufwand und % abgeschlossen eingestellt sind."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "ist keine gültige Dauer."
- cant_exceed_work: "Kann nicht größer als der Aufwand sein."
- must_be_set_when_work_is_set: "Ist erforderlich, wenn Aufwand gesetzt ist."
- must_be_set_when_work_and_percent_complete_are_set: "Erforderlich, wenn Aufwand und % abgeschlossen eingestellt sind."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Das Arbeitspaket befindet sich in einem schreibgeschützten Status, so dass seine Attribute nicht geändert werden können."
type:
attributes:
@@ -1589,7 +1591,7 @@ de:
error_cookie_missing: "Das OpenProject Cookie fehlt. Bitte stellen Sie sicher, dass Cookies aktiviert sind, da diese Applikation ohne aktivierte Cookies nicht korrekt funktioniert."
error_custom_option_not_found: "Option ist nicht vorhanden."
error_enterprise_activation_user_limit: "Ihr Konto konnte nicht aktiviert werden (Nutzerlimit erreicht). Bitte kontaktieren Sie Ihren Administrator um Zugriff zu erhalten."
- error_enterprise_token_invalid_domain: "Die Enterprise edition ist nicht aktiv. Die aktuelle Domain (%{actual}) entspricht nicht dem erwarteten Hostnamen (%{expected})."
+ error_enterprise_token_invalid_domain: "Die Enterprise-Edition ist nicht aktiv. Die aktuelle Domain (%{actual}) entspricht nicht dem erwarteten Hostnamen (%{expected})."
error_failed_to_delete_entry: "Fehler beim Löschen dieses Eintrags."
error_in_dependent: "Fehler beim Versuch, abhängiges Objekt zu ändern: %{dependent_class} #%{related_id} - %{related_subject}: %{error}"
error_in_new_dependent: "Fehler beim Versuch, abhängiges Objekt zu erstellen: %{dependent_class} - %{related_subject}: %{error}"
@@ -1654,7 +1656,8 @@ de:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -1753,10 +1756,10 @@ de:
blocks:
community: "OpenProject Community"
upsale:
- title: "Auf Enterprise edition upgraden"
+ title: "Auf Enterprise-Edition upgraden"
more_info: "Weitere Informationen"
links:
- upgrade_enterprise_edition: "Auf Enterprise edition upgraden"
+ upgrade_enterprise_edition: "Auf Enterprise-Edition upgraden"
postgres_migration: "Migration Ihrer Installation zu PostgreSQL"
user_guides: "Benutzerhandbuch"
faq: "Häufig gestellte Fragen"
@@ -1790,7 +1793,7 @@ de:
dates:
working: "%{date} ist jetzt ein Arbeitstag"
non_working: "%{date} ist jetzt ein arbeitsfreier Tag"
- progress_mode_changed_to_status_based: Fortschrittberechnung wurde auf Status-basiert gesetzt
+ progress_mode_changed_to_status_based: Fortschrittberechnung wurde auf Status-bezogen gesetzt
status_excluded_from_totals_set_to_false_message: jetzt in den Gesamtwerten der Hierarchie enthalten
status_excluded_from_totals_set_to_true_message: jetzt von den Hierarchie-Gesamtwerten ausgeschlossen
status_percent_complete_changed: "% vollständig von %{old_value}% auf %{new_value} % geändert"
@@ -2062,7 +2065,7 @@ de:
label_enumerations: "Aufzählungen"
label_enterprise: "Enterprise"
label_enterprise_active_users: "%{current}/%{limit} gebuchte aktive Nutzer"
- label_enterprise_edition: "Enterprise edition"
+ label_enterprise_edition: "Enterprise Edition"
label_enterprise_support: "Enterprise Support"
label_enterprise_addon: "Enterprise Add-on"
label_environment: "Umgebung"
@@ -3006,8 +3009,8 @@ de:
update_timeout: "Speichere die Informationen bzgl. des genutzten Festplattenspeichers eines Projektarchivs für N Minuten.\nErhöhen Sie diesen Wert zur Verbesserung der Performance, da die Erfassung des genutzten Festplattenspeichers Ressourcen-intensiv ist."
oauth_application_details: "Der Client Geheimcode wird nach dem Schließen dieses Fensters nicht mehr zugänglich sein. Bitte kopieren Sie diese Werte in die Nextcloud OpenProject Integrationseinstellungen:"
oauth_application_details_link_text: "Zu den Einstellungen gehen"
- setup_documentation_details: "Wenn Sie Hilfe bei der Konfiguration eines neuen Datei-Speichers benötigen, konsultieren Sie bitte die Dokumentation: "
- setup_documentation_details_link_text: "Datei-Speicher einrichten"
+ setup_documentation_details: "Wenn Sie Hilfe bei der Konfiguration eines neuen Dateispeichers benötigen, konsultieren Sie bitte die Dokumentation: "
+ setup_documentation_details_link_text: "Dateispeicher einrichten"
show_warning_details: "Um diesen Dateispeicher nutzen zu können, müssen Sie das Modul und den spezifischen Speicher in den Projekteinstellungen jedes gewünschten Projekts aktivieren."
subversion:
existing_title: "Vorhandenes Subversion Projektarchiv"
@@ -3111,8 +3114,10 @@ de:
setting_work_package_done_ratio: "Fortschrittsberechnung"
setting_work_package_done_ratio_field: "Arbeitsbezogen"
setting_work_package_done_ratio_status: "Statusbezogen"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- Im aufwandsbezogenen Modus wird % Abgeschlossen durch das Verhältnis zu, Gesamtaufwand berechnet. Im statusbezogenen Modus ist mit jedem Status ein fester Wert für % Abgeschlossen verbunden. Wenn Sie den Status ändern, ändert sich dadurch auch das % Abgeschlossen Attribut.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Arbeitspaket-Eigenschaften"
setting_work_package_startdate_is_adddate: "Neue Arbeitspakete haben \"Heute\" als Anfangsdatum"
setting_work_packages_projects_export_limit: "Arbeitspakete / Exportlimit für Projekte"
@@ -3465,7 +3470,7 @@ de:
warning_user_limit_reached_admin: >
Das Hinzufügen zusätzlicher Benutzer überschreitet das aktuelle Benutzerlimit. Bitte aktualisieren Sie Ihr Abonnement um sicherzustellen, dass externe Benutzer auf diese Instanz zugreifen können.
warning_user_limit_reached_instructions: >
- Du hast dein Nutzerlimit erreicht (%{current}/%{max} active users). Bitte kontaktiere sales@openproject.com um deinen Enterprise edition Plan upzugraden und weitere Nutzer hinzuzufügen.
+ Du hast dein Nutzerlimit erreicht (%{current}/%{max} active users). Bitte kontaktiere sales@openproject.com um deinen Enterprise Edition Plan upzugraden und weitere Nutzer hinzuzufügen.
warning_protocol_mismatch_html: >
warning_bar:
@@ -3494,9 +3499,26 @@ de:
progress:
label_note: "Hinweis:"
modal:
- work_based_help_text: "% Abgeschlossen wird automatisch aus Aufwand und Verbleibender Aufwand abgeleitet."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Abgeschlossen wird durch den Status des Arbeitspakets festgelegt."
migration_warning_text: "Im aufwandsbezogenen Modus, kann % Fertig nicht manuell eingegeben werden und ist immer an den Aufwand gebunden. Der vorhandene Wert wurde beibehalten, kann aber nicht bearbeitet werden. Bitte geben Sie zuerst den Wert für Aufwand ein."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Kommentar"
comment_description: "Kann dieses Arbeitspaket anzeigen und kommentieren."
diff --git a/config/locales/crowdin/el.yml b/config/locales/crowdin/el.yml
index 05af2bb6d0c7..b968ac9a5edc 100644
--- a/config/locales/crowdin/el.yml
+++ b/config/locales/crowdin/el.yml
@@ -1036,10 +1036,10 @@ el:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "δεν είναι στην ημερομηνία έναρξης, παρόλο που απαιτείται από τα ορόσημα."
@@ -1069,15 +1069,17 @@ el:
does_not_exist: "Η καθορισμένη κατηγορία δεν υπάρχει."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1656,7 +1658,8 @@ el:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3112,8 +3115,10 @@ el:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Ιδιότητες πακέτου εργασίας"
setting_work_package_startdate_is_adddate: "Χρήση σημερινής ημερομηνίας ως ημερομηνία έναρξης για νέα πακέτα εργασίας"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3495,9 +3500,26 @@ el:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Σχόλιο"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/eo.yml b/config/locales/crowdin/eo.yml
index dac2fa8d4508..ace0ab3fc8da 100644
--- a/config/locales/crowdin/eo.yml
+++ b/config/locales/crowdin/eo.yml
@@ -1040,10 +1040,10 @@ eo:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ eo:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ eo:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ eo:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ eo:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Komento"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/es.yml b/config/locales/crowdin/es.yml
index 9795547245fd..d2bec73660ac 100644
--- a/config/locales/crowdin/es.yml
+++ b/config/locales/crowdin/es.yml
@@ -1037,10 +1037,10 @@ es:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "no coincide el trabajo y el trabajo restante"
- cannot_be_set_when_work_is_zero: "no puede fijarse cuando el trabajo es cero"
- must_be_set_when_remaining_work_is_set: "Obligatorio cuando el Trabajo restante está establecido."
- must_be_set_when_work_and_remaining_work_are_set: "Obligatorio cuando se fijan Trabajo y Trabajo restante."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "debe estar entre 0 y 100."
due_date:
not_start_date: "no es en fecha de inicio, aunque esto es necesario para hitos."
@@ -1070,15 +1070,17 @@ es:
does_not_exist: "La categoría especificada no existe."
estimated_hours:
not_a_number: "no es una duración válida."
- cant_be_inferior_to_remaining_work: "No puede ser inferior al Trabajo restante."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Obligatorio cuando se fijan Trabajo restante y % completado."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "no es una duración válida."
- cant_exceed_work: "No puede ser superior a Trabajo."
- must_be_set_when_work_is_set: "Obligatorio cuando Trabajo está establecido."
- must_be_set_when_work_and_percent_complete_are_set: "Obligatorio cuando se fijan Trabajo y % completado."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "El paquete de trabajo está en un estado de sólo lectura por lo que sus atributos no se pueden cambiar."
type:
attributes:
@@ -1657,7 +1659,8 @@ es:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3113,8 +3116,10 @@ es:
setting_work_package_done_ratio: "Cálculo del progreso"
setting_work_package_done_ratio_field: "Basado en el trabajo"
setting_work_package_done_ratio_status: "Basado en el estado"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- En el modo basado en el trabajo, el % completado se calcula a partir de cuánto trabajo se ha realizado en relación con el trabajo total. En el modo basado en el estado, cada estado tiene asociado un valor de % completado. El cambio de estado modificará el % completado.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Propiedades de paquete de trabajo"
setting_work_package_startdate_is_adddate: "Usar fecha actual como fecha de inicio para nuevos paquetes de trabajo"
setting_work_packages_projects_export_limit: "Fecha límite para exportar paquete de trabajo o proyectos"
@@ -3496,9 +3501,26 @@ es:
progress:
label_note: "Nota:"
modal:
- work_based_help_text: "El % completado se obtiene automáticamente a partir del Trabajo y del Trabajo restante."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% completado se establece por el estado del paquete de trabajo."
migration_warning_text: "En el modo de cálculo del progreso basado en el trabajo, el % completado no puede fijarse manualmente y está vinculado al Trabajo. El valor existente se mantiene, pero no puede editarse. Introduzca primero el Trabajo."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comentario"
comment_description: "Puede ver y comentar este paquete de trabajo."
diff --git a/config/locales/crowdin/et.yml b/config/locales/crowdin/et.yml
index ca1d00337ff1..cc2e4ee8cb00 100644
--- a/config/locales/crowdin/et.yml
+++ b/config/locales/crowdin/et.yml
@@ -1040,10 +1040,10 @@ et:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "verstapostil on vajalik määrata alguskuupäev."
@@ -1073,15 +1073,17 @@ et:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ et:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ et:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Teemade atribuudid"
setting_work_package_startdate_is_adddate: "Uute teemade alguskuupäevaks käesolev päev"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ et:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Kommentaar"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/eu.yml b/config/locales/crowdin/eu.yml
index 37b8e1de401b..8e562c32eeeb 100644
--- a/config/locales/crowdin/eu.yml
+++ b/config/locales/crowdin/eu.yml
@@ -1040,10 +1040,10 @@ eu:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ eu:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ eu:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ eu:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ eu:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comment"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/fa.yml b/config/locales/crowdin/fa.yml
index 177e471190cf..3d0398f47c35 100644
--- a/config/locales/crowdin/fa.yml
+++ b/config/locales/crowdin/fa.yml
@@ -1040,10 +1040,10 @@ fa:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ fa:
does_not_exist: "دسته انتخاب شده وجود ندارد."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ fa:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ fa:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ fa:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "نظر"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/fi.yml b/config/locales/crowdin/fi.yml
index f1d2e0886e00..391e2249d9da 100644
--- a/config/locales/crowdin/fi.yml
+++ b/config/locales/crowdin/fi.yml
@@ -1040,10 +1040,10 @@ fi:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "ei ole aloituspäivänä, vaikka välitavoite vaatii sen olevan."
@@ -1073,15 +1073,17 @@ fi:
does_not_exist: "Määritettyä luokkaa ei ole."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ fi:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ fi:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Tehtävän ominaisuudet"
setting_work_package_startdate_is_adddate: "Käytä nykyistä päivämäärää uuden tehtävän aloistuspäivänä"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ fi:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Kommentti"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/fil.yml b/config/locales/crowdin/fil.yml
index 5d5add737685..2365685dafd2 100644
--- a/config/locales/crowdin/fil.yml
+++ b/config/locales/crowdin/fil.yml
@@ -1040,10 +1040,10 @@ fil:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "hindi sa petsa ng pagsisimula, kahit naa ito ay kinakailangan para sa mga milestone."
@@ -1073,15 +1073,17 @@ fil:
does_not_exist: "Ang tinukoy na kategorya ay hindi umiiral."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ fil:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3115,8 +3118,10 @@ fil:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Ang mga property ng work package"
setting_work_package_startdate_is_adddate: "Gamitin ang kasulukuyang petsa bilang pagsisimula ng petsa para sa mga bagong work package"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3499,9 +3504,26 @@ fil:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Komento"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/fr.yml b/config/locales/crowdin/fr.yml
index 7fa3b96fc8a9..5638c54d1a0d 100644
--- a/config/locales/crowdin/fr.yml
+++ b/config/locales/crowdin/fr.yml
@@ -1039,10 +1039,10 @@ fr:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "ne correspond pas au travail et au travail restant"
- cannot_be_set_when_work_is_zero: "ne peut pas être défini lorsque le travail est nul"
- must_be_set_when_remaining_work_is_set: "Requis lorsque le travail restant est défini."
- must_be_set_when_work_and_remaining_work_are_set: "Requis lorsque le travail et les travaux restants sont définis."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "doit être compris entre 0 et 100."
due_date:
not_start_date: "n'est pas identique à la date de début, bien que cela soit requis pour les jalons."
@@ -1072,15 +1072,17 @@ fr:
does_not_exist: "La catégorie spécifiée n'existe pas."
estimated_hours:
not_a_number: "n'est pas une durée valide."
- cant_be_inferior_to_remaining_work: "Ne peut être inférieur au Travail restant."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Requis lorsque le travail restant et le % d'achèvement sont définis."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "n'est pas une durée valide."
- cant_exceed_work: "Ne peut être supérieur au Travail."
- must_be_set_when_work_is_set: "Requis lorsque le Travail est défini."
- must_be_set_when_work_and_percent_complete_are_set: "Requis lorsque le travail et le % d'achèvement sont définis."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Le lot de travaux est en lecture seule, ses attributs ne peuvent donc pas être changés."
type:
attributes:
@@ -1659,7 +1661,8 @@ fr:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3116,8 +3119,10 @@ fr:
setting_work_package_done_ratio: "Calcul de la progression"
setting_work_package_done_ratio_field: "Basé sur le travail"
setting_work_package_done_ratio_status: "Basé sur le statut"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- En mode Basé sur le travail, le % réalisé est calculé à partir de la quantité de travail effectuée par rapport au travail total. En mode Basé sur le statut, chaque statut est associé à une valeur de % réalisé. La modification du statut entraîne une modification du % réalisé.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Propriétés du Lot de Travaux"
setting_work_package_startdate_is_adddate: "Utiliser la date actuelle comme date de début des nouveaux lots de travaux"
setting_work_packages_projects_export_limit: "Limite d'exportation des lots de travaux/projets"
@@ -3499,9 +3504,26 @@ fr:
progress:
label_note: "Note :"
modal:
- work_based_help_text: "Le % réalisé est automatiquement dérivé de Travail et Travail restant."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "Le % réalisé est défini par le statut du lot de travaux."
migration_warning_text: "Dans le mode de calcul de la progression basé sur le travail, le % réalisé ne peut pas être défini manuellement et est lié au travail. La valeur existante a été conservée mais ne peut pas être modifiée. Veuillez d'abord renseigner Travail."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Commentaire"
comment_description: "Peut consulter et commenter ce lot de travaux."
diff --git a/config/locales/crowdin/he.yml b/config/locales/crowdin/he.yml
index 0eece0dcf602..6b5e3234fab1 100644
--- a/config/locales/crowdin/he.yml
+++ b/config/locales/crowdin/he.yml
@@ -1054,10 +1054,10 @@ he:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1087,15 +1087,17 @@ he:
does_not_exist: "הקטגוריה שצוינה אינה קיימת."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1730,7 +1732,8 @@ he:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3191,8 +3194,10 @@ he:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3577,9 +3582,26 @@ he:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "תגובה"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/hi.yml b/config/locales/crowdin/hi.yml
index c482732a16e4..ca1cdebb33f3 100644
--- a/config/locales/crowdin/hi.yml
+++ b/config/locales/crowdin/hi.yml
@@ -1038,10 +1038,10 @@ hi:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1071,15 +1071,17 @@ hi:
does_not_exist: "निर्दिष्ट श्रेणी मौजूद नहीं है ।"
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1658,7 +1660,8 @@ hi:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3115,8 +3118,10 @@ hi:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3499,9 +3504,26 @@ hi:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "टिप्पणी"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/hr.yml b/config/locales/crowdin/hr.yml
index 3c10e1b74f88..81c8c1662d5f 100644
--- a/config/locales/crowdin/hr.yml
+++ b/config/locales/crowdin/hr.yml
@@ -1047,10 +1047,10 @@ hr:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "nije na datum početka, međutim potrebno je za ključne točke."
@@ -1080,15 +1080,17 @@ hr:
does_not_exist: "Navedena kategorija ne postoji."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1695,7 +1697,8 @@ hr:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3154,8 +3157,10 @@ hr:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Postavke radnih paketa"
setting_work_package_startdate_is_adddate: "Koristite današanji datum kao početni datum novih radnih paketa"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3539,9 +3544,26 @@ hr:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Komentar"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/hu.yml b/config/locales/crowdin/hu.yml
index f19fdfd7f459..375a4168a936 100644
--- a/config/locales/crowdin/hu.yml
+++ b/config/locales/crowdin/hu.yml
@@ -1037,10 +1037,10 @@ hu:
assigned_to:
format: "%{message}\n"
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "nincs kezdő dátum, ez szükséges a fordulóponthoz."
@@ -1070,15 +1070,17 @@ hu:
does_not_exist: "A megadott kategória nem létezik."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}\n"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}\n"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "A munkacsomag írásvédett, ezért a tulajdonságai nem módosíthatók."
type:
attributes:
@@ -1657,7 +1659,8 @@ hu:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3113,8 +3116,10 @@ hu:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "feladatcsoport tulajdonságok"
setting_work_package_startdate_is_adddate: "Az aktuális dátum használata, mint kezdő dátuma az új feladatcsoportoknak"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3497,9 +3502,26 @@ hu:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Vélemény"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/id.yml b/config/locales/crowdin/id.yml
index 680b7f43ed7d..84eef066d0d7 100644
--- a/config/locales/crowdin/id.yml
+++ b/config/locales/crowdin/id.yml
@@ -1026,10 +1026,10 @@ id:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "tanggal mulai dan berakhir pada milestone harus sama."
@@ -1059,15 +1059,17 @@ id:
does_not_exist: "Kategori yang dipilih tidak ada."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1618,7 +1620,8 @@ id:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -2052,7 +2055,7 @@ id:
label_file_plural: "File"
label_filter_add: "Tambah Filter"
label_filter: "Filter"
- label_filter_plural: "Filter"
+ label_filter_plural: "Penyaring"
label_filters_toggle: "Tampilkan/Sembunyikan penyaringan"
label_float: "Float"
label_folder: "Folder"
@@ -3069,8 +3072,10 @@ id:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Properti Paket-Penugasan"
setting_work_package_startdate_is_adddate: "Gunakan tanggal sekarang untuk start Paket-Penugasan"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3452,9 +3457,26 @@ id:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Komentar"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/it.yml b/config/locales/crowdin/it.yml
index ecf2a3733679..bd6e4af4e2d5 100644
--- a/config/locales/crowdin/it.yml
+++ b/config/locales/crowdin/it.yml
@@ -64,11 +64,11 @@ it:
upgrade_to_ee: "Aggiorna a Enterprise edition"
add_token: "Carica un token di assistenza per Enterprise edition"
delete_token_modal:
- text: "Vuoi davvero rimuovere il token Enterprise edition attualmente utilizzato?"
+ text: "Vuoi davvero rimuovere il token Enterprise Edition attualmente utilizzato?"
title: "Elimina token"
replace_token: "Sostituisci il token di assistenza attuale"
order: "Ordina l'edizione Enterprise on-premises"
- paste: "Incolla il tuo token di assistenza per Enterprise edition"
+ paste: "Incolla il tuo token di assistenza per Enterprise Edition"
required_for_feature: "Questa aggiunta è disponibile solo con un token di assistenza Enterprise Edition attivo."
enterprise_link: "Per ulteriori informazioni, clicca qui."
start_trial: "Inizia la prova gratuita"
@@ -804,7 +804,7 @@ it:
confirmation: "non coincide con %{attribute}."
could_not_be_copied: "%{dependency} non può essere (completamente) copiato."
does_not_exist: "non esiste."
- error_enterprise_only: "%{action} è disponibile solo in OpenProject Enterprise edition"
+ error_enterprise_only: "%{action} è disponibile solo in OpenProject Enterprise Edition"
error_unauthorized: "potrebbe non essere accessibile."
error_readonly: "è in sola lettura, pertanto non è stato possibile modificarlo."
error_conflict: "L'informazione è stata aggiornata da almeno un altro utente nel frattempo."
@@ -1037,10 +1037,10 @@ it:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "non corrisponde al lavoro e al lavoro residuo"
- cannot_be_set_when_work_is_zero: "non può essere impostata quando il lavoro è zero"
- must_be_set_when_remaining_work_is_set: "Obbligatorio quando si imposta Lavoro residuo."
- must_be_set_when_work_and_remaining_work_are_set: "Obbligatorio quando si impostano Lavoro e Lavoro residuo."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "deve essere compresa tra 0 e 100."
due_date:
not_start_date: "non è sulla data di inizio, nonostante sia obbligatorio per i traguardi."
@@ -1070,15 +1070,17 @@ it:
does_not_exist: "La categoria specificata non esiste."
estimated_hours:
not_a_number: "non è una durata valida."
- cant_be_inferior_to_remaining_work: "Non può essere inferiore al Lavoro residuo."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Richiesto quando sono impostate le opzioni Lavoro residuo e % completamento."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "non è una durata valida."
- cant_exceed_work: "Non può essere superiore a Lavoro."
- must_be_set_when_work_is_set: "Obbligatorio quando è impostato Lavoro."
- must_be_set_when_work_and_percent_complete_are_set: "Richiesto quando sono impostate le opzioni Lavoro e % completamento."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "La macro-attività è in uno stato di sola lettura perciò i suoi attributi non possono essere modificati."
type:
attributes:
@@ -1592,7 +1594,7 @@ it:
error_cookie_missing: "Il cookie di OpenProject è mancante. Prego, verifica che i cookie siano attivati, questa applicazione non funziona correttamente senza."
error_custom_option_not_found: "L'opzione non esiste."
error_enterprise_activation_user_limit: "Il tuo account potrebbe non essere attivo (raggiunto il limite utente). Si prega di contattare l'amministratore per ottenere l'accesso."
- error_enterprise_token_invalid_domain: "L'Enterprise edition non è attiva. Il dominio del token Enterprise (%{actual}) non corrisponde al nome host del sistema (%{expected})."
+ error_enterprise_token_invalid_domain: "L'Enterprise Edition non è attiva. Il dominio del token Enterprise (%{actual}) non corrisponde al nome host del sistema (%{expected})."
error_failed_to_delete_entry: "Cancellazione voce non riuscita."
error_in_dependent: "Errore nel tentativo di modificare l'oggetto dipendente: %{dependent_class} #%{related_id} - %{related_subject}: %{error}"
error_in_new_dependent: "Errore nel tentativo di creare un oggetto dipendente: %{dependent_class} - %{related_subject}: %{error}"
@@ -1657,7 +1659,8 @@ it:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -1756,10 +1759,10 @@ it:
blocks:
community: "Comunità di OpenProject"
upsale:
- title: "Aggiorna ad Enterprise edition"
+ title: "Aggiorna ad Enterprise Edition"
more_info: "Altre informazioni"
links:
- upgrade_enterprise_edition: "Aggiorna ad Enterprise edition"
+ upgrade_enterprise_edition: "Aggiorna ad Enterprise Edition"
postgres_migration: "Migrazione dell'installazione su PostgreSQL"
user_guides: "Guide utente"
faq: "FAQ"
@@ -2065,7 +2068,7 @@ it:
label_enumerations: "Enumerazioni"
label_enterprise: "Enterprise"
label_enterprise_active_users: "%{current}/%{limit} utenti attivi riservati"
- label_enterprise_edition: "Enterprise edition"
+ label_enterprise_edition: "Enterprise Edition"
label_enterprise_support: "Supporto per Imprese"
label_enterprise_addon: "Componente aggiuntivo Enterprise"
label_environment: "Ambiente"
@@ -3114,8 +3117,10 @@ it:
setting_work_package_done_ratio: "Calcolo dei progressi"
setting_work_package_done_ratio_field: "Basato sul lavoro"
setting_work_package_done_ratio_status: "Basato sullo stato"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- Nella modalità basata sul lavoro, la % di completamento viene calcolata in base alla quantità di lavoro svolto rispetto al lavoro totale. Nella modalità basata sullo stato, a ogni stato è associato un valore di % completamento. La modifica dello stato cambierà la % completamento.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Proprietà della macro-attività"
setting_work_package_startdate_is_adddate: "Usa la data corrente come data di inizio per le nuove macro-attività"
setting_work_packages_projects_export_limit: "Limite di esportazione di macro-attività/progetti"
@@ -3498,9 +3503,26 @@ it:
progress:
label_note: "Nota:"
modal:
- work_based_help_text: "La % completamento viene ricavata automaticamente dal lavoro e dal lavoro residuo."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "La % completamento è stabilita dallo stato della macro-attività."
migration_warning_text: "Nella modalità di calcolo basata sul lavoro, la % completamento non può essere impostata manualmente ed è legata al lavoro. Il valore esistente è stato mantenuto ma non può essere modificato. Specifica prima il lavoro."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Commentare"
comment_description: "Può visualizzare e commentare questa macro-attività."
diff --git a/config/locales/crowdin/ja.yml b/config/locales/crowdin/ja.yml
index 85d634191c27..5f263fc3e1ea 100644
--- a/config/locales/crowdin/ja.yml
+++ b/config/locales/crowdin/ja.yml
@@ -1029,10 +1029,10 @@ ja:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "は開始日になっていません。これはマイルストーンの場倍、必要である。"
@@ -1062,15 +1062,17 @@ ja:
does_not_exist: "指定されたカテゴリは存在しません。"
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1621,7 +1623,8 @@ ja:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3076,8 +3079,10 @@ ja:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "項目名"
setting_work_package_startdate_is_adddate: "今日の日付を新しいワークパッケージの開始日とする"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3458,9 +3463,26 @@ ja:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "コメント"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/js-af.yml b/config/locales/crowdin/js-af.yml
index 51171b86d736..59c8f7063574 100644
--- a/config/locales/crowdin/js-af.yml
+++ b/config/locales/crowdin/js-af.yml
@@ -138,6 +138,8 @@ af:
description_select_work_package: "Kies werkspakket #%{id}"
description_subwork_package: "Kind van werkspakket #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ af:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ af:
label_create: "Skep"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Datum"
label_date_with_format: "Tik die %{date_attribute} in die volgende formaat: %{format}"
label_deactivate: "Deactivate"
@@ -1182,6 +1187,9 @@ af:
one: "1 dag"
other: "%{count} dae"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-ar.yml b/config/locales/crowdin/js-ar.yml
index e2689d339bb5..67c66f6142eb 100644
--- a/config/locales/crowdin/js-ar.yml
+++ b/config/locales/crowdin/js-ar.yml
@@ -138,6 +138,8 @@ ar:
description_select_work_package: "اختر مجموعة العمل #%{id}"
description_subwork_package: "إنتاج مجموعة العمل #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ ar:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ ar:
label_create: "إنشاء"
label_create_work_package: "إنشاء حزمة جديدة"
label_created_by: "أنشئ بواسطة"
+ label_current: "current"
label_date: "التاريخ"
label_date_with_format: "أدخل %{date_attribute} باستخدام التنسيق التالي: %{format}"
label_deactivate: "تعطيل"
@@ -1194,6 +1199,13 @@ ar:
one: "1 يوم"
other: "%{count} يوم"
zero: "0 days"
+ word:
+ zero: "%{count} words"
+ one: "1 word"
+ two: "%{count} words"
+ few: "%{count} words"
+ many: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-az.yml b/config/locales/crowdin/js-az.yml
index b1be89ad35de..2e0ab9648773 100644
--- a/config/locales/crowdin/js-az.yml
+++ b/config/locales/crowdin/js-az.yml
@@ -138,6 +138,8 @@ az:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ az:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ az:
label_create: "Create"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Date"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Söndür"
@@ -1182,6 +1187,9 @@ az:
one: "1 day"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-be.yml b/config/locales/crowdin/js-be.yml
index 29a6fea761ea..8d0243e24336 100644
--- a/config/locales/crowdin/js-be.yml
+++ b/config/locales/crowdin/js-be.yml
@@ -138,6 +138,8 @@ be:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ be:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ be:
label_create: "Create"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Дата"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deactivate"
@@ -1188,6 +1193,11 @@ be:
one: "1 day"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ few: "%{count} words"
+ many: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-bg.yml b/config/locales/crowdin/js-bg.yml
index a9fed73b3646..a776d0e9eece 100644
--- a/config/locales/crowdin/js-bg.yml
+++ b/config/locales/crowdin/js-bg.yml
@@ -138,6 +138,8 @@ bg:
description_select_work_package: "Избери работен пакет #%{id}"
description_subwork_package: "Подработен пакет #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ bg:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ bg:
label_create: "Създаване"
label_create_work_package: "Създаване на нов работен пакет"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Дата"
label_date_with_format: "Въведете %{date_attribute}, като използвате следния формат: %{format}"
label_deactivate: "Деактивирай"
@@ -1182,6 +1187,9 @@ bg:
one: "1 ден"
other: "%{count} дни"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-ca.yml b/config/locales/crowdin/js-ca.yml
index f21ff37aeb0f..f6796c90e146 100644
--- a/config/locales/crowdin/js-ca.yml
+++ b/config/locales/crowdin/js-ca.yml
@@ -102,7 +102,7 @@ ca:
button_save: "Desa"
button_settings: "Configuració"
button_uncheck_all: "Desmarca-ho tot"
- button_update: "Actualitza"
+ button_update: "Actualitzar"
button_export-pdf: "Descarregar PDF"
button_export-atom: "Descarregar Atom"
button_create: "Crear"
@@ -138,6 +138,8 @@ ca:
description_select_work_package: "Selecciona el paquet de treball #%{id}"
description_subwork_package: "Fill del paquet de treball #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Canvia al mode de vista prèvia"
source_code: "Canvia al mode de font Markdown"
error_saving_failed: "No s'ha pogut guardar el document per culpa del següent error: %{error}"
@@ -276,8 +278,10 @@ ca:
Els canvis poden tardar un temps a ser aplicats. Et notificarem un cop s'hagin actualitzat tots els paquets de treball rellevants.
Estàs segur que vols continuar?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ ca:
label_create: "Crear"
label_create_work_package: "Crear nou paquet de treball"
label_created_by: "Creat per"
+ label_current: "current"
label_date: "Data"
label_date_with_format: "Introdueix el %{date_attribute} amb el format següent: %{format}"
label_deactivate: "Desactivar"
@@ -752,7 +757,7 @@ ca:
label: "Pausa els correu electrònic recordatori temporalment"
first_day: "Primer dia"
last_day: "Últim dia"
- text_are_you_sure: "N'esteu segur?"
+ text_are_you_sure: "N'estas segur?"
text_data_lost: "Totes les dades entrades es perdran."
text_user_wrote: "%{value} va escriure:"
types:
@@ -1182,6 +1187,9 @@ ca:
one: "1 dia"
other: "%{count} dies"
zero: "0 dies"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activa el mode zen"
button_deactivate: "Desactiva el mode zen"
diff --git a/config/locales/crowdin/js-ckb-IR.yml b/config/locales/crowdin/js-ckb-IR.yml
index 97b05d7c9cd7..7d3a413846e8 100644
--- a/config/locales/crowdin/js-ckb-IR.yml
+++ b/config/locales/crowdin/js-ckb-IR.yml
@@ -138,6 +138,8 @@ ckb-IR:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ ckb-IR:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ ckb-IR:
label_create: "Create"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Date"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deactivate"
@@ -1182,6 +1187,9 @@ ckb-IR:
one: "1 day"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-cs.yml b/config/locales/crowdin/js-cs.yml
index bce3f5cf525e..d27f8ecf91f6 100644
--- a/config/locales/crowdin/js-cs.yml
+++ b/config/locales/crowdin/js-cs.yml
@@ -138,6 +138,8 @@ cs:
description_select_work_package: "Vyberte pracovní balíček #%{id}"
description_subwork_package: "Podřazený pracovního balíčku #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Přepnout režim náhledu"
source_code: "Přepnout zdrojový mód Markdown"
error_saving_failed: "Uložení dokumentu se nezdařilo s následující chybou: %{error}"
@@ -275,8 +277,10 @@ cs:
warning: >
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -397,6 +401,7 @@ cs:
label_create: "Vytvořit"
label_create_work_package: "Vytvořit nový pracovní balíček"
label_created_by: "Vytvořil(a)"
+ label_current: "current"
label_date: "Datum"
label_date_with_format: "Zadejte %{date_attribute} v následujícím formátu: %{format}"
label_deactivate: "Deaktivovat"
@@ -1187,6 +1192,11 @@ cs:
one: "1 den"
other: "%{count} dní"
zero: "0 dní"
+ word:
+ one: "1 word"
+ few: "%{count} words"
+ many: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Aktivovat zen režim"
button_deactivate: "Deaktivovat zen režim"
diff --git a/config/locales/crowdin/js-da.yml b/config/locales/crowdin/js-da.yml
index 18ff291e892e..6e34ff7e00a8 100644
--- a/config/locales/crowdin/js-da.yml
+++ b/config/locales/crowdin/js-da.yml
@@ -138,6 +138,8 @@ da:
description_select_work_package: "Vælg arbejds pakke #%{id}"
description_subwork_package: "Barn af arbejds-pakke #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle forhåndsvisning"
source_code: "Toggle Markdown kilde-visning"
error_saving_failed: "Lagring af dokumentet mislykkedes med følgende fejl: %{error}"
@@ -275,8 +277,10 @@ da:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -397,6 +401,7 @@ da:
label_create: "Opret"
label_create_work_package: "Opret ny arbejdspakke"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Dato"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deaktivér"
@@ -1181,6 +1186,9 @@ da:
one: "1 dag"
other: "%{count} dage"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-de.yml b/config/locales/crowdin/js-de.yml
index b0d2329a8172..d0ec8e4711fc 100644
--- a/config/locales/crowdin/js-de.yml
+++ b/config/locales/crowdin/js-de.yml
@@ -138,6 +138,8 @@ de:
description_select_work_package: "Arbeitspaket #%{id} auswählen"
description_subwork_package: "Kind von Arbeitspaket #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Vorschau-Modus ein/aus"
source_code: "Wechseln zwischen Markdown-Source und WYSIWYG"
error_saving_failed: "Fehler beim Speichern des Dokuments: %{error}"
@@ -275,8 +277,10 @@ de:
Es kann einige Zeit dauern, bis die Änderungen wirksam werden. Sie werden benachrichtigt, wenn alle relevanten Arbeitspakete aktualisiert worden sind.
Sind Sie sicher, dass Sie fortfahren möchten?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- Wenn Sie den Modus der Fortschrittsberechnung von statusbezogen auf aufwandsbezogen ändern, wird % Abgeschlossen zu einem nicht editierbaren Feld, dessen Wert von Aufwand und Verbleibender Aufwand abgeleitet wird. Vorhandene Werte für % Abgeschlossen werden beibehalten. Wenn die Werte für Aufwand und Verbleibender Aufwand nicht vorhanden waren, werden sie benötigt, um % Abgeschlossen zu ändern.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Wenn Sie den Modus der Fortschrittsberechnung von aufwandsbezogen auf statusbezogen ändern, gehen alle bestehenden Werte für % Fertigstellung verloren und werden durch Werte ersetzt, die mit dem jeweiligen Status verbunden sind. Bestehende Werte für Verbleibender Aufwand können ebenfalls neu berechnet werden, um diese Änderung widerzuspiegeln. Diese Aktion ist nicht umkehrbar.
custom_actions:
@@ -397,6 +401,7 @@ de:
label_create: "Erstellen"
label_create_work_package: "Erstelle neues Arbeitspaket"
label_created_by: "Erstellt von"
+ label_current: "current"
label_date: "Datum"
label_date_with_format: "Die %{date_attribute} im folgenden Format eingeben: %{format}"
label_deactivate: "Deaktiviere"
@@ -1181,6 +1186,9 @@ de:
one: "1 Tag"
other: "%{count} Tage"
zero: "0 Tage"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Zen-Modus aktivieren"
button_deactivate: "Zen-Modus deaktivieren"
diff --git a/config/locales/crowdin/js-el.yml b/config/locales/crowdin/js-el.yml
index ee2cce95fc3a..36994192495f 100644
--- a/config/locales/crowdin/js-el.yml
+++ b/config/locales/crowdin/js-el.yml
@@ -138,6 +138,8 @@ el:
description_select_work_package: "Επιλέξτε πακέτο εργασίας #%{id}"
description_subwork_package: "Παιδί του πακέτου εργασίας #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Ενεργοποίηση λειτουργίας προεπισκόπησης"
source_code: "Ενεργοποίηση λειτουργίας Markdown source"
error_saving_failed: "Η αποθήκευση του αρχείου απέτυχε δίνοντας το ακόλουθο μήνυμα: %{error}"
@@ -275,8 +277,10 @@ el:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -397,6 +401,7 @@ el:
label_create: "Δημιουργία"
label_create_work_package: "Δημιουργήστε νέο πακέτο εργασίας"
label_created_by: "Δημιουργήθηκε από"
+ label_current: "current"
label_date: "Ημερομηνία"
label_date_with_format: "Εισάγετε την %{date_attribute} χρησιμοποιώντας την ακόλουθη μορφοποίηση: %{format}"
label_deactivate: "Απενεργοποίηση"
@@ -1181,6 +1186,9 @@ el:
one: "1 ημέρα"
other: "%{count} ημέρες"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Ενεργοποίηση λειτουργίας zen"
button_deactivate: "Απενεργοποίηση λειτουργίας zen"
diff --git a/config/locales/crowdin/js-eo.yml b/config/locales/crowdin/js-eo.yml
index 167ba8baa574..6db7e9189022 100644
--- a/config/locales/crowdin/js-eo.yml
+++ b/config/locales/crowdin/js-eo.yml
@@ -138,6 +138,8 @@ eo:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Baskuligi antaŭrigarda reĝimo"
source_code: "Baskuligi Markdown fonta reĝimo"
error_saving_failed: "Ne eblis konservi la dokumenton pro la jena eraro: %{error}"
@@ -276,8 +278,10 @@ eo:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ eo:
label_create: "Krei"
label_create_work_package: "Create new work package"
label_created_by: "Kreita de"
+ label_current: "current"
label_date: "Dato"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Malaktivigi"
@@ -1182,6 +1187,9 @@ eo:
one: "1 tago"
other: "%{count} tagoj"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Aktivigi zen reĝimo"
button_deactivate: "Malaktivigi zen reĝimo"
diff --git a/config/locales/crowdin/js-es.yml b/config/locales/crowdin/js-es.yml
index 93758bdaaee0..1804c45121fb 100644
--- a/config/locales/crowdin/js-es.yml
+++ b/config/locales/crowdin/js-es.yml
@@ -138,6 +138,8 @@ es:
description_select_work_package: "Seleccione el paquete de trabajo #%{id}"
description_subwork_package: "Seleccione el paquete de trabajo #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Activar modo de vista previa"
source_code: "Activar modo de visualización Markdown"
error_saving_failed: "No se pudo guardar el documento debido al siguiente error: %{error}"
@@ -276,8 +278,10 @@ es:
Los cambios pueden tardar algún tiempo en surtir efecto. Se le notificará cuando todos los paquetes de trabajo relevantes hayan sido actualizados.
¿Está seguro de que desea continuar?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- Cambiar el modo de cálculo del progreso de basado en el estado a basado en el trabajo hará que % completado sea un campo no editable cuyo valor se deriva de Trabajo y Trabajo restante. Los valores existentes para % completado se conservan. Si los valores para Trabajo y Trabajo restante no estaban presentes, serán necesarios para cambiar % completado.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
El cambio del modo de cálculo del progreso de basado en el trabajo a basado en el estado hará que todos los valores existentes de % completado se pierdan y se sustituyan por valores asociados a cada estado. Los valores existentes para Trabajo restante también pueden recalcularse para reflejar este cambio. Esta acción no es reversible.
custom_actions:
@@ -398,6 +402,7 @@ es:
label_create: "Crear"
label_create_work_package: "Crear un nuevo paquete de trabajo"
label_created_by: "Creado por"
+ label_current: "current"
label_date: "Fecha"
label_date_with_format: "Introduzca el %{date_attribute} usando el siguiente formato: %{format}"
label_deactivate: "Desactivar"
@@ -1182,6 +1187,9 @@ es:
one: "1 día"
other: "%{count} días"
zero: "0 días"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activar modo zen"
button_deactivate: "Desactivar modo zen"
diff --git a/config/locales/crowdin/js-et.yml b/config/locales/crowdin/js-et.yml
index e9bf7a10f2aa..bcaaf4d917fb 100644
--- a/config/locales/crowdin/js-et.yml
+++ b/config/locales/crowdin/js-et.yml
@@ -138,6 +138,8 @@ et:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ et:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ et:
label_create: "Loo uus"
label_create_work_package: "Lisa uus teema"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Kuupäev"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deactivate"
@@ -1182,6 +1187,9 @@ et:
one: "1 päev"
other: "%{count} päeva"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-eu.yml b/config/locales/crowdin/js-eu.yml
index ad04877e8d6d..e09f597ca49a 100644
--- a/config/locales/crowdin/js-eu.yml
+++ b/config/locales/crowdin/js-eu.yml
@@ -138,6 +138,8 @@ eu:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ eu:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ eu:
label_create: "Create"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Date"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deactivate"
@@ -1182,6 +1187,9 @@ eu:
one: "1 day"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-fa.yml b/config/locales/crowdin/js-fa.yml
index aec2cd41c730..85dac0af3395 100644
--- a/config/locales/crowdin/js-fa.yml
+++ b/config/locales/crowdin/js-fa.yml
@@ -138,6 +138,8 @@ fa:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "ذخیره سازی مستند، ناموفق بود، خطا: %{error}"
@@ -276,8 +278,10 @@ fa:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ fa:
label_create: "ایجاد"
label_create_work_package: "Create new work package"
label_created_by: "ایجاد شده توسط"
+ label_current: "current"
label_date: "تاریخ"
label_date_with_format: "%{date_attribute} را با این فرمت وارد کنید: %{format}"
label_deactivate: "غیر فعال کردن"
@@ -1182,6 +1187,9 @@ fa:
one: "1 day"
other: "%{count} روز"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-fi.yml b/config/locales/crowdin/js-fi.yml
index 1c29ae6593b4..cb6e9c4d76a5 100644
--- a/config/locales/crowdin/js-fi.yml
+++ b/config/locales/crowdin/js-fi.yml
@@ -138,6 +138,8 @@ fi:
description_select_work_package: "Valitse tehtävä #%{id}"
description_subwork_package: "Tehtävän #%{id} alitehtävä"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Esikatselutila"
source_code: "Lähdekoodi"
error_saving_failed: "Tallennus epäonnistui: %{error}"
@@ -276,8 +278,10 @@ fi:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ fi:
label_create: "Uusi"
label_create_work_package: "Uusi tehtävä"
label_created_by: "Luonut"
+ label_current: "current"
label_date: "Päivämäärä"
label_date_with_format: "Kirjoita %{date_attribute} seuraavassa muodossa: %{format}"
label_deactivate: "Poistaa käytöstä"
@@ -1182,6 +1187,9 @@ fi:
one: "päivä"
other: "%{count} päivää"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Koko näyttö"
button_deactivate: "Sulje koko näyttö"
diff --git a/config/locales/crowdin/js-fil.yml b/config/locales/crowdin/js-fil.yml
index 921993122e3e..02c377429a92 100644
--- a/config/locales/crowdin/js-fil.yml
+++ b/config/locales/crowdin/js-fil.yml
@@ -138,6 +138,8 @@ fil:
description_select_work_package: "Piliin ang work package #%{id}"
description_subwork_package: "Bata ng work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ fil:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ fil:
label_create: "Lumikha"
label_create_work_package: "Lumikha ng bagong work package"
label_created_by: "Nilikha ni"
+ label_current: "current"
label_date: "Petsa"
label_date_with_format: "Ipasok anv %{date_attribute} gamit ang sumusunod na format: %{format}"
label_deactivate: "I-deactivate"
@@ -1182,6 +1187,9 @@ fil:
one: "Isang araw"
other: "mga Isang %{count} araw"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "I-aktibo ang zen mode"
button_deactivate: "I-deactive ang zen mode"
diff --git a/config/locales/crowdin/js-fr.yml b/config/locales/crowdin/js-fr.yml
index 0a7bcdda7388..0952189c86a9 100644
--- a/config/locales/crowdin/js-fr.yml
+++ b/config/locales/crowdin/js-fr.yml
@@ -138,6 +138,8 @@ fr:
description_select_work_package: "Sélectionner le lot de travaux #%{id}"
description_subwork_package: "Enfant du lot de travaux #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Basculer en mode aperçu"
source_code: "Basculer en mode source Markdown"
error_saving_failed: "L'enregistrement du document a échoué en raison de l'erreur suivante : %{error}"
@@ -276,8 +278,10 @@ fr:
Les modifications pourraient prendre un certain temps pour être appliquées. Vous serez averti(e) lorsque tous les lots de travaux pertinents auront été mis à jour.
Voulez-vous continuer ?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- Passer du mode de calcul de la progression basé sur le statut au mode basé sur le travail transformera % réalisé en champ non modifiable dont la valeur est dérivée des champs Travail et Travail restant. Les valeurs existantes pour % réalisé sont conservées. Des valeurs pour Travail et Travail restant sont requises pour modifier % réalisé.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Passer du mode de calcul de la progression basé sur le travail au mode basé sur le statut entraînera la perte de toutes les valeurs de % réalisé existantes et leur remplacement par les valeurs associées à chaque statut. Les valeurs existantes pour Travail restant peuvent également être recalculées pour refléter ce changement. Cette action est irréversible.
custom_actions:
@@ -398,6 +402,7 @@ fr:
label_create: "Créer"
label_create_work_package: "Créer un nouveau lot de travaux"
label_created_by: "Créé par"
+ label_current: "current"
label_date: "date"
label_date_with_format: "Saisissez l'attribut %{date_attribute} en utilisant le format suivant : %{format}"
label_deactivate: "Désactiver"
@@ -1182,6 +1187,9 @@ fr:
one: "1 jour"
other: "%{count} jours"
zero: "0 jour"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activer le mode zen"
button_deactivate: "Désactiver le mode zen"
diff --git a/config/locales/crowdin/js-he.yml b/config/locales/crowdin/js-he.yml
index 6d1dc6089e38..56d938579d5d 100644
--- a/config/locales/crowdin/js-he.yml
+++ b/config/locales/crowdin/js-he.yml
@@ -138,6 +138,8 @@ he:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ he:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ he:
label_create: "צור"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "תאריך"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "השבת"
@@ -1188,6 +1193,11 @@ he:
one: "יום אחד"
other: "%{count} ימים"
zero: "0 days"
+ word:
+ one: "1 word"
+ two: "%{count} words"
+ many: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-hi.yml b/config/locales/crowdin/js-hi.yml
index 080b3c2c4760..789b8e4a0e36 100644
--- a/config/locales/crowdin/js-hi.yml
+++ b/config/locales/crowdin/js-hi.yml
@@ -138,6 +138,8 @@ hi:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Markdown स्रोत मोड टॉगल करें"
error_saving_failed: "दस्तावेज़ को सहेजना निम्न त्रुटि के साथ विफल हुआ: %{error}"
@@ -276,8 +278,10 @@ hi:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ hi:
label_create: "रचना करें"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "तिथि"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "निष्क्रिय करें"
@@ -1182,6 +1187,9 @@ hi:
one: "1 दिन"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-hr.yml b/config/locales/crowdin/js-hr.yml
index f5f498fc1d16..0a79c465a4d4 100644
--- a/config/locales/crowdin/js-hr.yml
+++ b/config/locales/crowdin/js-hr.yml
@@ -138,6 +138,8 @@ hr:
description_select_work_package: "Odaberite radni paket #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ hr:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ hr:
label_create: "Stvori"
label_create_work_package: "Kreirajte novi radni paket"
label_created_by: "Kreirao korisnik"
+ label_current: "current"
label_date: "Datum"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deaktivirajte"
@@ -1185,6 +1190,10 @@ hr:
one: "1 dan"
other: "%{count} dana"
zero: "0 days"
+ word:
+ one: "1 word"
+ few: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-hu.yml b/config/locales/crowdin/js-hu.yml
index 051f82fc470f..7ff296cf1146 100644
--- a/config/locales/crowdin/js-hu.yml
+++ b/config/locales/crowdin/js-hu.yml
@@ -138,6 +138,8 @@ hu:
description_select_work_package: "Munkacsomag kiválasztás #%{id}"
description_subwork_package: "Munkacsomag gyermeke #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Váltás az előnézeti módra"
source_code: "Váltás Markdown forrás módra"
error_saving_failed: "A dokumentum mentése a következő hiba miatt nem sikerült: %{error}"
@@ -276,8 +278,10 @@ hu:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ hu:
label_create: "Létrehoz"
label_create_work_package: "Új munkacsomag létrehozása"
label_created_by: "Létrehozta"
+ label_current: "current"
label_date: "dátum"
label_date_with_format: "Adja meg a %{date_attribute}, a következő formátumban: %{format}"
label_deactivate: "Kikapcsol"
@@ -1182,6 +1187,9 @@ hu:
one: "1 nap"
other: "%{count} nap"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Zen mód aktiválása"
button_deactivate: "Zen mód kikapcsolása"
diff --git a/config/locales/crowdin/js-id.yml b/config/locales/crowdin/js-id.yml
index 886d19f0c34d..e133255e427f 100644
--- a/config/locales/crowdin/js-id.yml
+++ b/config/locales/crowdin/js-id.yml
@@ -102,7 +102,7 @@ id:
button_save: "Simpan"
button_settings: "Pengaturan"
button_uncheck_all: "Uncek semua"
- button_update: "Update"
+ button_update: "Perbarui"
button_export-pdf: "Download PDF"
button_export-atom: "Download Atom"
button_create: "Buat baru"
@@ -138,6 +138,8 @@ id:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Beralih ke mode preview"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ id:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ id:
label_create: "Buat baru"
label_create_work_package: "Buat Paket-Penugasan baru"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Tanggal"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Nonaktifkan"
@@ -1179,6 +1184,8 @@ id:
one: "1 day"
other: "%{count} hari"
zero: "0 days"
+ word:
+ other: "%{count} words"
zen_mode:
button_activate: "Mengaktifkan modus zen"
button_deactivate: "Menonaktifkan modus zen"
diff --git a/config/locales/crowdin/js-it.yml b/config/locales/crowdin/js-it.yml
index d332e70d53a5..8b17fd570f46 100644
--- a/config/locales/crowdin/js-it.yml
+++ b/config/locales/crowdin/js-it.yml
@@ -138,6 +138,8 @@ it:
description_select_work_package: "Seleziona la macro-attività #%{id}"
description_subwork_package: "Subordinata alla macro-attività #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Attiva/disattiva modalità anteprima"
source_code: "Attiva/Disattiva modalità origine Marcatura"
error_saving_failed: "Il salvataggio del documento è fallito con il seguente errore: %{error}"
@@ -276,8 +278,10 @@ it:
L'applicazione delle modifiche potrebbe richiedere del tempo. Riceverai una notifica quando tutti i pacchetti di lavoro pertinenti saranno aggiornati.
Vuoi davvero continuare?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- Cambiare la modalità di calcolo dell'avanzamento da basata sullo stato a basata su lavoro renderà % Completa un campo non modificabile il cui valore è derivato da Lavoro e Lavoro rimanente. I valori esistenti per % Complete sono conservati. Se i valori per Lavoro e Lavoro rimanente non erano presenti, saranno necessari per modificare % Complete.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Cambiando la modalità di calcolo dell'avanzamento da basata sul lavoro a basata sullo stato porvocherà la perdita di tutti i valori % Complete esistenti e saranno sostituiti con i valori associati ad ogni stato. I valori esistenti per il lavoro rimanente potrebbero anche essere ricalcolati per riflettere questo cambiamento. Questa azione non è reversibile.
custom_actions:
@@ -398,6 +402,7 @@ it:
label_create: "Crea"
label_create_work_package: "Crea una nuova macro-attività"
label_created_by: "Creato da"
+ label_current: "current"
label_date: "Data"
label_date_with_format: "Immettere il %{date_attribute} utilizzando il seguente formato: %{format}"
label_deactivate: "Disattivare"
@@ -1182,6 +1187,9 @@ it:
one: "1 giorno"
other: "%{count} giorni"
zero: "0 giorni"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Attiva modalità zen"
button_deactivate: "Disattiva modalità zen"
diff --git a/config/locales/crowdin/js-ja.yml b/config/locales/crowdin/js-ja.yml
index efe8fab1c711..c3e4953bf501 100644
--- a/config/locales/crowdin/js-ja.yml
+++ b/config/locales/crowdin/js-ja.yml
@@ -139,6 +139,8 @@ ja:
description_select_work_package: "作業項目を選択 #%{id}"
description_subwork_package: "作業項目の子 #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "プレビューモードの切り替え"
source_code: "Markdown ソースモードの切り替え"
error_saving_failed: "次のエラーで文書を保存するのに失敗しました: %{error}"
@@ -277,8 +279,10 @@ ja:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -399,6 +403,7 @@ ja:
label_create: "作成"
label_create_work_package: "新しいワークパッケージを作成"
label_created_by: "作成者:"
+ label_current: "current"
label_date: "日付"
label_date_with_format: "次の形式を使用して %{date_attribute} を入力してください: %{format}"
label_deactivate: "無効"
@@ -1180,6 +1185,8 @@ ja:
one: "1 day"
other: "%{count}日間"
zero: "0 days"
+ word:
+ other: "%{count} words"
zen_mode:
button_activate: "マナーモードをアクティブにする"
button_deactivate: "マナーモードを非アクティブにする"
diff --git a/config/locales/crowdin/js-ka.yml b/config/locales/crowdin/js-ka.yml
index 98c54102bc8a..233ff758bde0 100644
--- a/config/locales/crowdin/js-ka.yml
+++ b/config/locales/crowdin/js-ka.yml
@@ -138,6 +138,8 @@ ka:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ ka:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ ka:
label_create: "შექმნა"
label_create_work_package: "Create new work package"
label_created_by: "ავტორი"
+ label_current: "current"
label_date: "თარიღი"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "დეაქტივაცია"
@@ -1182,6 +1187,9 @@ ka:
one: "1 დღე"
other: "%{count} დღე"
zero: "0 დღე"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-kk.yml b/config/locales/crowdin/js-kk.yml
index 5a85236462d0..49aa639d5b3e 100644
--- a/config/locales/crowdin/js-kk.yml
+++ b/config/locales/crowdin/js-kk.yml
@@ -138,6 +138,8 @@ kk:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ kk:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ kk:
label_create: "Create"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Date"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deactivate"
@@ -1182,6 +1187,9 @@ kk:
one: "1 day"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-ko.yml b/config/locales/crowdin/js-ko.yml
index 6139005fa515..de00872f4943 100644
--- a/config/locales/crowdin/js-ko.yml
+++ b/config/locales/crowdin/js-ko.yml
@@ -138,6 +138,8 @@ ko:
description_select_work_package: "작업 패키지 #%{id} 선택"
description_subwork_package: "작업 패키지 #%{id}의 자식"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "미리 보기 모드 토글"
source_code: "Markdown 소스 모드 토글"
error_saving_failed: "다음 오류로 인해 문서를 저장하지 못했습니다: %{error}"
@@ -276,8 +278,10 @@ ko:
변경 사항이 적용되는 데 시간이 걸릴 수 있습니다. 모든 관련 작업 패키지가 업데이트되면 알림이 전송됩니다.
계속하시겠습니까?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- 진행률 계산 모드를 상태 기반에서 작업 기반으로 변경하면 완료 %가 편집할 수 없는 필드가 되며 해당 값은 작업 및 남은 작업에서 파생됩니다. 완료 %의 기존 값은 유지됩니다. 작업 및 남은 작업의 값이 없는 경우, 완료 %를 변경하려면 해당 값이 필요합니다.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
진행률 계산 모드를 작업 기반에서 상태 기반으로 변경하면 기존의 모든 완료 % 값이 손실되고 각 상태와 관련된 값으로 대체됩니다. 남은 작업의 기존 값도 이 변경 사항을 반영하기 위해 다시 계산될 수 있습니다. 이 작업은 되돌릴 수 없습니다.
custom_actions:
@@ -398,6 +402,7 @@ ko:
label_create: "만들기"
label_create_work_package: "새 작업 패키지 만들기"
label_created_by: "작성자"
+ label_current: "current"
label_date: "날짜"
label_date_with_format: "%{date_attribute} 는 %{format} 과 같이 입력되어야 합니다."
label_deactivate: "비활성화"
@@ -1179,6 +1184,8 @@ ko:
one: "1일"
other: "%{count}일"
zero: "0일"
+ word:
+ other: "%{count} words"
zen_mode:
button_activate: "Zen 모드 활성화"
button_deactivate: "Zen 모드 비활성화"
diff --git a/config/locales/crowdin/js-lt.yml b/config/locales/crowdin/js-lt.yml
index 5121b4a7050e..9acf538d97a2 100644
--- a/config/locales/crowdin/js-lt.yml
+++ b/config/locales/crowdin/js-lt.yml
@@ -138,6 +138,8 @@ lt:
description_select_work_package: "Pasirinkite darbų paketą #%{id}"
description_subwork_package: "Darbų paketo vaikas #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Perjungti peržiūros režimą"
source_code: "Perjungti Markdown išeities kodo režimą"
error_saving_failed: "Dokumento išsaugoti nepavyko. Klaida: %{error}"
@@ -276,8 +278,10 @@ lt:
Pakeitimų įsigaliojimas gali užtrukti. Jums bus pranešta, kai visi susiję darbo paketai bus atnaujinti.
Ar tikrai norite tęsti?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ lt:
label_create: "Kurti"
label_create_work_package: "Kurti naują darbų paketą"
label_created_by: "Sukūrė"
+ label_current: "current"
label_date: "Data"
label_date_with_format: "Įveskite %{date_attribute} naudodami šį formatą: %{format}"
label_deactivate: "Išjungti"
@@ -1188,6 +1193,11 @@ lt:
one: "1 dieną"
other: "%{count} dienas (-ą, -ų)"
zero: "0 dienų"
+ word:
+ one: "1 word"
+ few: "%{count} words"
+ many: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Įjungti Zen režimą"
button_deactivate: "Išjungti Zen režimą"
diff --git a/config/locales/crowdin/js-lv.yml b/config/locales/crowdin/js-lv.yml
index 9440bab5a8c9..8275a54e8493 100644
--- a/config/locales/crowdin/js-lv.yml
+++ b/config/locales/crowdin/js-lv.yml
@@ -138,6 +138,8 @@ lv:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ lv:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ lv:
label_create: "Izveidot"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Datums"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deaktivizēt"
@@ -1185,6 +1190,10 @@ lv:
one: "1 dienas"
other: "%{count} dienām"
zero: "0 days"
+ word:
+ zero: "%{count} words"
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-mn.yml b/config/locales/crowdin/js-mn.yml
index 99190a800ba7..ebfa0c211315 100644
--- a/config/locales/crowdin/js-mn.yml
+++ b/config/locales/crowdin/js-mn.yml
@@ -138,6 +138,8 @@ mn:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ mn:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ mn:
label_create: "Create"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Date"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deactivate"
@@ -1182,6 +1187,9 @@ mn:
one: "1 day"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-ms.yml b/config/locales/crowdin/js-ms.yml
index a97e1ac6b8f6..215adb82447a 100644
--- a/config/locales/crowdin/js-ms.yml
+++ b/config/locales/crowdin/js-ms.yml
@@ -138,6 +138,8 @@ ms:
description_select_work_package: "Pilih pakej kerja #%{id}"
description_subwork_package: "Anak kepada pakej kerja #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Tukar mod tinjauan"
source_code: "Tukar mod sumber Markdown"
error_saving_failed: "Penyimpanan dokumen gagal dengan ralat yang berikut: %{error}"
@@ -276,8 +278,10 @@ ms:
Perubahan mungkin mengambil sedikit masa untuk berkesan. Anda akan dimaklumkan apabila semua pakej kerja yang berkaitan telah dikemas kini.
Adakah anda pasti anda ingin teruskan?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- Mengubah mod pengiraan perkembangan daripada berdasarkan-status kepada berdasarkan-kerja akan menjadikan % Selesai ruang yang tidak boleh diedit yang nilainya diperoleh daripada Kerja dan Kerja yang berbaki. Nilai yang sedia ada bagi % Selesai dikekalkan. Jika nilai Kerja dan Kerja yang berbaki tiada, nilai tersebut akan diperlukan untuk mengubah % Selesai.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Mengubah mod pengiraan perkembangan daripada berasaskan-kerja kepada berasaskan-status akan menjadikan semua nilai % Selesai yang sedia ada hilang dan digantikan dengan nilai yang berkaitan dengan setiap status. Nilai sedia ada bagi Kerja yang berbaki juga akan dikira semula untuk menggambarkan perubahan ini. Tindakan ini tidak boleh dipulihkan.
custom_actions:
@@ -398,6 +402,7 @@ ms:
label_create: "Cipta"
label_create_work_package: "Cipta pakej kerja baharu"
label_created_by: "Dicipta oleh"
+ label_current: "current"
label_date: "Tarikh"
label_date_with_format: "Masukkan %{date_attribute} menggunakan format berikut: %{format}"
label_deactivate: "Nyahaktifkan"
@@ -1179,6 +1184,8 @@ ms:
one: "1 hari"
other: "%{count} hari"
zero: "0 hari"
+ word:
+ other: "%{count} words"
zen_mode:
button_activate: "Aktifkan mod zen"
button_deactivate: "Nyahaktifkan mod zen"
diff --git a/config/locales/crowdin/js-ne.yml b/config/locales/crowdin/js-ne.yml
index b31d1666edbf..d20b15db62ad 100644
--- a/config/locales/crowdin/js-ne.yml
+++ b/config/locales/crowdin/js-ne.yml
@@ -138,6 +138,8 @@ ne:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ ne:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ ne:
label_create: "Create"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Date"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deactivate"
@@ -1182,6 +1187,9 @@ ne:
one: "1 day"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-nl.yml b/config/locales/crowdin/js-nl.yml
index 4be9f106e041..01476b3fed01 100644
--- a/config/locales/crowdin/js-nl.yml
+++ b/config/locales/crowdin/js-nl.yml
@@ -138,6 +138,8 @@ nl:
description_select_work_package: "Selecteer werk pakket #%{id}"
description_subwork_package: "Kind van werkpakket #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Voorbeeld modus wijzigen"
source_code: "Wissel Markdown bronmodus"
error_saving_failed: "Het opslaan van het document is mislukt met de volgende foutmelding:%{error}"
@@ -276,8 +278,10 @@ nl:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ nl:
label_create: "Maken"
label_create_work_package: "Nieuw werkpakket maken"
label_created_by: "Gemaakt door"
+ label_current: "current"
label_date: "Datum"
label_date_with_format: "Geef de %{date_attribute} met gebruik van volgend formaat: %{format}"
label_deactivate: "Deactiveren"
@@ -1182,6 +1187,9 @@ nl:
one: "1 dag"
other: "%{count} dagen"
zero: "0 dagen"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Zen-modus activeren"
button_deactivate: "Deactiveren van zen modus"
diff --git a/config/locales/crowdin/js-no.yml b/config/locales/crowdin/js-no.yml
index 3c602175cee4..7758851695d3 100644
--- a/config/locales/crowdin/js-no.yml
+++ b/config/locales/crowdin/js-no.yml
@@ -102,7 +102,7 @@
button_save: "Lagre"
button_settings: "Innstillinger"
button_uncheck_all: "Avmerk alle"
- button_update: "Oppdatèr"
+ button_update: "Oppdater"
button_export-pdf: "Last ned PDF"
button_export-atom: "Last ned Atom"
button_create: "Opprett"
@@ -138,6 +138,8 @@
description_select_work_package: "Velg arbeidspakke #%{id}"
description_subwork_package: "Barn av arbeidspakke #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Veksle forhåndsvisningsmodus"
source_code: "Veksle 'Markdown'-kildemodus"
error_saving_failed: "Lagring av dokumentet mislyktes med følgende feil: %{error}"
@@ -276,8 +278,10 @@
Endringene kan ta noe tid på å bli effektivisert. Du vil bli varslet når alle relevante arbeidspakker har blitt oppdatert.
Er du sikker på at du vil fortsette?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@
label_create: "Opprett"
label_create_work_package: "Opprett ny arbeidspakke"
label_created_by: "Opprettet av"
+ label_current: "current"
label_date: "Dato"
label_date_with_format: "Angi %{date_attribute} med følgende format: %{format}"
label_deactivate: "Deaktiver"
@@ -1182,6 +1187,9 @@
one: "1 dag"
other: "%{count} dager"
zero: "0 dager"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Aktiver zen modus"
button_deactivate: "Deaktiver zen modus"
diff --git a/config/locales/crowdin/js-pl.yml b/config/locales/crowdin/js-pl.yml
index 6a21fff4139e..441f84c5c33b 100644
--- a/config/locales/crowdin/js-pl.yml
+++ b/config/locales/crowdin/js-pl.yml
@@ -138,6 +138,8 @@ pl:
description_select_work_package: "Zaznacz zestaw Zadań #%{id}"
description_subwork_package: "Otwórz zadanie-dziecko #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Przełącz tryb podglądu"
source_code: "Przełącz tryb źródła Markdown"
error_saving_failed: "Zapisywanie dokumentu nie powiodło się, błąd: %{error}"
@@ -276,8 +278,10 @@ pl:
Zmiany mogą wejść w życie po pewnym czasie. Gdy wszystkie odpowiednie pakiety robocze zostaną zaktualizowane, otrzymasz powiadomienie.
Czy na pewno chcesz kontynuować?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- Zmiana trybu obliczania postępu z opartego na statusie na oparty na pracy sprawi, że atrybut % ukończenia będzie nieedytowalnym polem, którego wartość pochodzi z atrybutów Praca i Pozostała praca. Istniejące wartości atrybutu % ukończenia zostaną zachowane. Jeśli wartości atrybutów Praca i Pozostała praca nie były obecne, będą one wymagane w celu zmiany wartości % ukończenia.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Zmiana trybu obliczania postępu z opartego na pracy na oparty na statusie spowoduje, że wszystkie istniejące wartości % ukończenia zostaną utracone i zastąpione wartościami powiązanymi z poszczególnymi statusami. Istniejące wartości Pozostała praca mogą również zostać obliczone ponownie w celu odzwierciedlenia tej zmiany. Działanie to jest nieodwracalne.
custom_actions:
@@ -398,6 +402,7 @@ pl:
label_create: "Utwórz"
label_create_work_package: "Utwórz nowy pakiet roboczy"
label_created_by: "Utworzony przez"
+ label_current: "current"
label_date: "Data"
label_date_with_format: "Wprowadź %{date_attribute} w następującym formacie: %{format}"
label_deactivate: "Wyłącz"
@@ -1188,6 +1193,11 @@ pl:
one: "1 dzień"
other: "%{count} dni"
zero: "0 dni"
+ word:
+ one: "1 word"
+ few: "%{count} words"
+ many: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Włącz tryb zen"
button_deactivate: "Wyłącz tryb zen"
diff --git a/config/locales/crowdin/js-pt-BR.yml b/config/locales/crowdin/js-pt-BR.yml
index eb0f0881cdda..63cb73415d72 100644
--- a/config/locales/crowdin/js-pt-BR.yml
+++ b/config/locales/crowdin/js-pt-BR.yml
@@ -138,6 +138,8 @@ pt-BR:
description_select_work_package: "Selecionar o pacote de trabalho #%{id}"
description_subwork_package: "Filho do pacote de trabalho #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Alternar modo de visualização"
source_code: "Alternar para código Markdown"
error_saving_failed: "Não foi possível salvar o documento pelo seguinte erro: %{error}"
@@ -275,8 +277,10 @@ pt-BR:
As alterações podem demorar algum tempo para entrar em vigor. Receberá uma notificação quando todos os pacotes de trabalho relevantes forem atualizados.
Tem a certeza de que deseja continuar?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- Alterar o modo de cálculo do progresso de "baseado em status" para "baseado em trabalho" tornará o campo % de conclusão não editável, com seu valor derivado de Trabalho e Trabalho Restante. Os valores existentes de % de conclusão serão preservados. Se os valores de Trabalho e Trabalho Restante não estiverem presentes, eles serão necessários para modificar a % de conclusão.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Alterar o modo de cálculo do progresso de "baseado em trabalho" para "baseado em status" resultará na perda de todos os valores existentes de % de conclusão, que serão substituídos pelos valores associados a cada status. Os valores existentes de Trabalho restante também podem ser recalculados para refletir essa mudança. Essa ação é irreversível.
custom_actions:
@@ -397,6 +401,7 @@ pt-BR:
label_create: "Criar"
label_create_work_package: "Criar novo pacote de trabalho"
label_created_by: "Criado por"
+ label_current: "current"
label_date: "Data"
label_date_with_format: "Insira a %{date_attribute} usando o seguinte formato: %{format}"
label_deactivate: "Desativado"
@@ -1181,6 +1186,9 @@ pt-BR:
one: "1 dia"
other: "%{count} dias"
zero: "0 dias"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Ativar modo zen"
button_deactivate: "Desativar modo zen"
diff --git a/config/locales/crowdin/js-pt-PT.yml b/config/locales/crowdin/js-pt-PT.yml
index 32545ca68cce..17a4c4e3e8da 100644
--- a/config/locales/crowdin/js-pt-PT.yml
+++ b/config/locales/crowdin/js-pt-PT.yml
@@ -138,6 +138,8 @@ pt-PT:
description_select_work_package: "Selecionar pacote de trabalho #%{id}"
description_subwork_package: "Filho de pacote de trabalho #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Alternar modo de pré-visualização"
source_code: "Alternar modo de fonte do Markdown"
error_saving_failed: "Ao guardar o documento ocorreu o seguinte erro: %{error}"
@@ -276,8 +278,10 @@ pt-PT:
As alterações podem demorar algum tempo a entrar em vigor. Receberá uma notificação quando todos os pacotes de trabalho relevantes forem atualizados.
Tem a certeza de que quer continuar?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- Alterar o modo de cálculo do progresso de "baseado no estado" para "baseado no trabalho" fará com que % Completo seja um campo não editável cujo valor é derivado de Trabalho e Trabalho restante. Os valores existentes para % Completo são preservados. Se os valores para Trabalho e Trabalho restante não estiverem presentes, eles serão necessários para alterar % Completo.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Se alterar o modo de cálculo do progresso de "baseado no trabalho" para "baseado no estado", todos os valores % Completo existentes serão perdidos e substituídos por valores associados a cada estado. Os valores existentes para Trabalho restante também podem ser recalculados para refletir esta alteração. Esta ação não é reversível.
custom_actions:
@@ -398,6 +402,7 @@ pt-PT:
label_create: "Criar"
label_create_work_package: "Criar nova tarefa"
label_created_by: "Criado por"
+ label_current: "current"
label_date: "Data"
label_date_with_format: "Digite o %{date_attribute} usando o seguinte formato: %{format}"
label_deactivate: "Desativar"
@@ -1182,6 +1187,9 @@ pt-PT:
one: "1 dia"
other: "%{count} dias"
zero: "0 dias"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Ativar modo zen"
button_deactivate: "Desativar modo zen"
diff --git a/config/locales/crowdin/js-ro.yml b/config/locales/crowdin/js-ro.yml
index 4fde82fcb61f..3f474cdde792 100644
--- a/config/locales/crowdin/js-ro.yml
+++ b/config/locales/crowdin/js-ro.yml
@@ -102,7 +102,7 @@ ro:
button_save: "Salvează"
button_settings: "Setări"
button_uncheck_all: "Deselectează tot"
- button_update: "Actualizare"
+ button_update: "Actualizează"
button_export-pdf: "Descarcă PDF"
button_export-atom: "Descarcă Atom"
button_create: "Creează"
@@ -138,6 +138,8 @@ ro:
description_select_work_package: "Selectaţi pachetul de lucru #%{id}"
description_subwork_package: "Fiu al pachetului de lucru #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Activaţi/Dezactivați previzualizarea"
source_code: "Faceți click pentru a activa/dezactiva modul ierarhic."
error_saving_failed: "Salvarea documentului a eșuat cu următoarea eroare: %{error}"
@@ -275,8 +277,10 @@ ro:
Modificările ar putea dura ceva timp pentru a produce efecte. Vei fi notificat când toate pachetele de lucru relevante au fost actualizate.
Ești sigur că vrei să continui?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -397,6 +401,7 @@ ro:
label_create: "Creare"
label_create_work_package: "Creare pachet de lucru nou"
label_created_by: "Creat de"
+ label_current: "current"
label_date: "Dată"
label_date_with_format: "Introduceţi %{date_attribute} folosind următorul format: %{format}"
label_deactivate: "Dezactivare"
@@ -752,7 +757,7 @@ ro:
label: "Întrerupeți temporar memento-urile zilnice prin e-mail"
first_day: "Prima zi"
last_day: "Ultima zi"
- text_are_you_sure: "Sunteți sigur?"
+ text_are_you_sure: "Ești sigur?"
text_data_lost: "Toate datele introduse vor fi pierdute."
text_user_wrote: "%{value} a scris:"
types:
@@ -1184,6 +1189,10 @@ ro:
one: "1 zi"
other: "%{count} zile"
zero: "0 zile"
+ word:
+ one: "1 word"
+ few: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Activați modul zen"
button_deactivate: "Dezactivați modul zen"
diff --git a/config/locales/crowdin/js-ru.yml b/config/locales/crowdin/js-ru.yml
index 8aa9574d25b7..b454f9ee123c 100644
--- a/config/locales/crowdin/js-ru.yml
+++ b/config/locales/crowdin/js-ru.yml
@@ -102,7 +102,7 @@ ru:
button_save: "Сохранить"
button_settings: "Настройки"
button_uncheck_all: "Снять все отметки"
- button_update: "Обновление"
+ button_update: "Обновить"
button_export-pdf: "Скачать PDF"
button_export-atom: "Скачать Atom"
button_create: "Создать"
@@ -138,6 +138,8 @@ ru:
description_select_work_package: "Выберите пакет работ #%{id}"
description_subwork_package: "Дочерний пакет работ #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Переключить режим предварительного просмотра"
source_code: "В режим просмотра исходного кода "
error_saving_failed: "Не удалось сохранить документ по следующей причине: %{error}"
@@ -275,8 +277,10 @@ ru:
Для вступления изменений в силу может потребоваться некоторое время. Вы будете уведомлены, когда все соответствующие пакеты работ будут обновлены.
Хотите продолжить?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- При изменении расчета прогресса с режима на основе статуса на режим на основе трудозатрат поле % Завершения станет нередактируемым, его значение будет получено из значений Работа и Оставшаяся работа. Существующие значения для % Завершения сохраняются. Если значения для Работа и Оставшаяся работа отсутствуют, они потребуются для изменения % Завершения.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
При изменении расчета прогресса с режима на основе трудозатрат на режим на основе статуса все существующие значения % Завершения будут потеряны и заменены значениями, связанными с каждым статусом. Существующие значения параметра Оставшаяся работа также могут быть пересчитаны с учетом этого изменения. Это действие необратимо.
custom_actions:
@@ -397,6 +401,7 @@ ru:
label_create: "Создать"
label_create_work_package: "Создать новый пакет работ"
label_created_by: "Автор"
+ label_current: "current"
label_date: "Дата"
label_date_with_format: "Введите %{date_attribute}, используя следующий формат: %{format}"
label_deactivate: "Деактивировать"
@@ -1187,6 +1192,11 @@ ru:
one: "1 день"
other: "%{count} дней"
zero: "0 дней"
+ word:
+ one: "1 word"
+ few: "%{count} words"
+ many: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Включить полноэкранный режим"
button_deactivate: "Отключить полноэкранный режим"
diff --git a/config/locales/crowdin/js-rw.yml b/config/locales/crowdin/js-rw.yml
index 35de85c5fe16..a4ae2d063591 100644
--- a/config/locales/crowdin/js-rw.yml
+++ b/config/locales/crowdin/js-rw.yml
@@ -138,6 +138,8 @@ rw:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ rw:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ rw:
label_create: "Create"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Date"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deactivate"
@@ -1182,6 +1187,9 @@ rw:
one: "1 day"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-si.yml b/config/locales/crowdin/js-si.yml
index 320b439bc427..9ecf6bb32ce4 100644
--- a/config/locales/crowdin/js-si.yml
+++ b/config/locales/crowdin/js-si.yml
@@ -138,6 +138,8 @@ si:
description_select_work_package: "වැඩ පැකේජය තෝරන්න #%{id}"
description_subwork_package: "වැඩ පැකේජය දරුවා #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "පෙරදසුනෙහි මාදිලිය ටොගල් කරන්න"
source_code: "සලකුණු කිරීමේ ප්රභව ප්රකාරය ටොගල් කරන්න"
error_saving_failed: "පහත දැක්වෙන දෝෂය සමඟ ලේඛනය සුරැකීම අසාර්ථක විය: %{error}"
@@ -276,8 +278,10 @@ si:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ si:
label_create: "සාදන්න"
label_create_work_package: "නව වැඩ පැකේජයක් සාදන්න"
label_created_by: "විසින් නිර්මාණය"
+ label_current: "current"
label_date: "දිනය"
label_date_with_format: "පහත දැක්වෙන ආකෘතිය භාවිතා කරමින් %{date_attribute} ඇතුල් කරන්න: %{format}"
label_deactivate: "අක්රිය කරන්න"
@@ -1182,6 +1187,9 @@ si:
one: "දින 1"
other: "%{count} දින"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "සක්රිය මාදිලිය"
button_deactivate: "සෙන් මාදිලිය අක්රිය"
diff --git a/config/locales/crowdin/js-sk.yml b/config/locales/crowdin/js-sk.yml
index 553ed4ddbf27..425e8805c4c8 100644
--- a/config/locales/crowdin/js-sk.yml
+++ b/config/locales/crowdin/js-sk.yml
@@ -138,6 +138,8 @@ sk:
description_select_work_package: "Vyberte pracovný balík #%{id}"
description_subwork_package: "Podradený pracovný balík #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Prepnúť do režimu náhľadu"
source_code: "Prepnúť do režimu Markdown"
error_saving_failed: "Uloženie dokumentu zlyhalo s nasledujúcou chybou: %{error}"
@@ -276,8 +278,10 @@ sk:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ sk:
label_create: "Vytvoriť"
label_create_work_package: "Vytvoriť nový pracovný balíček"
label_created_by: "Vytvoril(a)"
+ label_current: "current"
label_date: "Dátum"
label_date_with_format: "Zadajte %{date_attribute} v tomto formáte: %{format}"
label_deactivate: "Deaktivovať"
@@ -1188,6 +1193,11 @@ sk:
one: "1 deň"
other: "%{count} dní"
zero: "0 days"
+ word:
+ one: "1 word"
+ few: "%{count} words"
+ many: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Aktivovať zen režim"
button_deactivate: "Deaktivovať zen režim"
diff --git a/config/locales/crowdin/js-sl.yml b/config/locales/crowdin/js-sl.yml
index 73c2f3d40931..75ad600e70dc 100644
--- a/config/locales/crowdin/js-sl.yml
+++ b/config/locales/crowdin/js-sl.yml
@@ -138,6 +138,8 @@ sl:
description_select_work_package: "Izberi delovni paket #%{id}"
description_subwork_package: "Podrejen delovni paket #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Preklopi način predogleda"
source_code: "Preklopite vhodni način označevanja"
error_saving_failed: "Shranjevanje dokumenta ni uspelo zaradi napake: %{error}"
@@ -275,8 +277,10 @@ sl:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -397,6 +401,7 @@ sl:
label_create: "Ustvari"
label_create_work_package: "Ustvari delovni paket"
label_created_by: "Ustvaril"
+ label_current: "current"
label_date: "Datum"
label_date_with_format: "Vstavi %{date_attribute} tako da uporabiš format: %{format}"
label_deactivate: "Onemogoči"
@@ -1187,6 +1192,11 @@ sl:
one: "1 dan"
other: "%{count} dni"
zero: "0 days"
+ word:
+ one: "1 word"
+ two: "%{count} words"
+ few: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Omogočite zen način"
button_deactivate: "Onemogočite zen način"
diff --git a/config/locales/crowdin/js-sr.yml b/config/locales/crowdin/js-sr.yml
index 5308d001aca9..ddf5b8630abd 100644
--- a/config/locales/crowdin/js-sr.yml
+++ b/config/locales/crowdin/js-sr.yml
@@ -138,6 +138,8 @@ sr:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ sr:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ sr:
label_create: "Create"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Date"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deactivate"
@@ -1185,6 +1190,10 @@ sr:
one: "1 day"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ few: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-sv.yml b/config/locales/crowdin/js-sv.yml
index 70e9dfb8f36f..ab63025c4242 100644
--- a/config/locales/crowdin/js-sv.yml
+++ b/config/locales/crowdin/js-sv.yml
@@ -138,6 +138,8 @@ sv:
description_select_work_package: "Välj arbetspaket #%{id}"
description_subwork_package: "Barn till arbetspaket #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Växla förhandsgranskningsläge"
source_code: "Växla markdown-källläge"
error_saving_failed: "Misslyckades med att spara dokumentet på grund av följande fel: %{error}"
@@ -275,8 +277,10 @@ sv:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -397,6 +401,7 @@ sv:
label_create: "Skapa"
label_create_work_package: "Skapa nya arbetspaket"
label_created_by: "Skapad av"
+ label_current: "current"
label_date: "Datum"
label_date_with_format: "Ange %{date_attribute} med följande format: %{format}"
label_deactivate: "Deaktivera"
@@ -1181,6 +1186,9 @@ sv:
one: "1 dag"
other: "%{count} dagar"
zero: "0 dagar"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Aktivera zen-läge"
button_deactivate: "Inaktivera avskalat läge"
diff --git a/config/locales/crowdin/js-th.yml b/config/locales/crowdin/js-th.yml
index 6f3ac79579e7..8b49d1ff8034 100644
--- a/config/locales/crowdin/js-th.yml
+++ b/config/locales/crowdin/js-th.yml
@@ -138,6 +138,8 @@ th:
description_select_work_package: "เลือกแพ็คเกจงาน #%{id}"
description_subwork_package: "แพ็คเกจงานย่อย #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "สลับโหมดแสดงตัวอย่าง"
source_code: "Toggle Markdown source mode"
error_saving_failed: "การบันทึกเอกสารล้มเหลวด้วยข้อผิดพลาดต่อไปนี้: %{error}"
@@ -276,8 +278,10 @@ th:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ th:
label_create: "สร้าง"
label_create_work_package: "สร้างชุดภารกิจใหม่"
label_created_by: "Created by"
+ label_current: "current"
label_date: "วันที่"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "ปิดใช้งาน"
@@ -1179,6 +1184,8 @@ th:
one: "1 day"
other: "%{count} วัน"
zero: "0 days"
+ word:
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-tr.yml b/config/locales/crowdin/js-tr.yml
index d0da66f2e1fc..8e2568d6c52e 100644
--- a/config/locales/crowdin/js-tr.yml
+++ b/config/locales/crowdin/js-tr.yml
@@ -138,6 +138,8 @@ tr:
description_select_work_package: "#%{id} nolu iş paketini seçin"
description_subwork_package: "#%{id} nolu iş paketinin alt parçası"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Önizleme modunu aç/kapat"
source_code: "Markdown kaynak modunu değiştir"
error_saving_failed: "Aşağıdaki nedenden dolayı belge kayıt edilemedi: %{error}"
@@ -275,8 +277,10 @@ tr:
warning: >
Değişikliklerin geçerlilik kazanması biraz zaman alabilir. İlgili tüm iş paketleri güncellendiğinde bilgilendirileceksiniz. Devam etmek istediğine emin misin?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -397,6 +401,7 @@ tr:
label_create: "Oluştur"
label_create_work_package: "Yeni iş paketi oluştur"
label_created_by: "Oluşturan"
+ label_current: "current"
label_date: "Tarih"
label_date_with_format: "Aşağıdaki biçimi kullanarak %{date_attribute} girin: %{format}"
label_deactivate: "Etkisizleştir"
@@ -1181,6 +1186,9 @@ tr:
one: "1 gün"
other: "%{count} gün"
zero: "0 gün"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Zen modunu etkinleştir"
button_deactivate: "Zen modunu devre dışı bırak"
diff --git a/config/locales/crowdin/js-uk.yml b/config/locales/crowdin/js-uk.yml
index bf0ed75df078..a9a929d4e2cf 100644
--- a/config/locales/crowdin/js-uk.yml
+++ b/config/locales/crowdin/js-uk.yml
@@ -138,6 +138,8 @@ uk:
description_select_work_package: "Виберіть пакет робіт #%{id}"
description_subwork_package: "Нащадок пакету робіт #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Перемкнути режим попереднього перегляду"
source_code: "Увімкнути режим вимкнення Markdown"
error_saving_failed: "Не вдалося зберегти документ із такою помилкою: %{error}"
@@ -276,8 +278,10 @@ uk:
Застосування змін може тривати деякий час. Ви отримаєте сповіщення, коли всі відповідні пакети робіт буде оновлено.
Продовжити?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- Якщо перейти з режиму обчислення прогресу на основі статусу на режим на основі робіт, атрибут % завершення стане недоступним для редагування полем, значення якого отримуватиметься зі значень атрибутів Робота й Залишок роботи. Наявні значення атрибута % завершення буде збережено. Якщо значення атрибутів Робота й Залишок роботи не задано, їх потрібно буде задати, щоб змінити значення атрибута % завершення.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Якщо перейти з режиму обчислення прогресу на основі робіт на режим на основі статусу, усі наявні значення атрибута % завершення буде втрачено й замінено значеннями, пов’язаними з кожним статусом. Наявні значення атрибута Залишок роботи може бути також переобчислено з урахуванням цієї зміни. Цю дію не можна скасувати.
custom_actions:
@@ -398,6 +402,7 @@ uk:
label_create: "Створити"
label_create_work_package: "Створити новий робочий пакет"
label_created_by: "Створено"
+ label_current: "current"
label_date: "Дата"
label_date_with_format: "Введіть %{date_attribute}, використовуючи наступний формат: %{format}"
label_deactivate: "Деактивувати"
@@ -1188,6 +1193,11 @@ uk:
one: "1 день"
other: "%{count} д."
zero: "0 днів"
+ word:
+ one: "1 word"
+ few: "%{count} words"
+ many: "%{count} words"
+ other: "%{count} words"
zen_mode:
button_activate: "Активуйте режим дзен"
button_deactivate: "Деактивуйте режим дзен"
diff --git a/config/locales/crowdin/js-uz.yml b/config/locales/crowdin/js-uz.yml
index 598bfb848769..4615140e34d8 100644
--- a/config/locales/crowdin/js-uz.yml
+++ b/config/locales/crowdin/js-uz.yml
@@ -138,6 +138,8 @@ uz:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -276,8 +278,10 @@ uz:
The changes might take some time to take effect. You will be notified when all relevant work packages have been updated.
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result in all existing % Complete values to be lost and replaced with values associated with each status. Existing values for Remaining work may also be recalculated to reflect this change. This action is not reversible.
custom_actions:
@@ -398,6 +402,7 @@ uz:
label_create: "Create"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Date"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deactivate"
@@ -1182,6 +1187,9 @@ uz:
one: "1 day"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/locales/crowdin/js-vi.yml b/config/locales/crowdin/js-vi.yml
index 913476e9125b..665f62f99cee 100644
--- a/config/locales/crowdin/js-vi.yml
+++ b/config/locales/crowdin/js-vi.yml
@@ -102,7 +102,7 @@ vi:
button_save: "Lưu"
button_settings: "Cài đặt"
button_uncheck_all: "Bỏ chọn tất cả"
- button_update: "Cập Nhật"
+ button_update: "Cập nhật"
button_export-pdf: "Tải xuống PDF"
button_export-atom: "Tải xuống Atom"
button_create: "Tạo"
@@ -138,6 +138,8 @@ vi:
description_select_work_package: "Chọn công việc #%{id}"
description_subwork_package: "Con của công việc #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Chuyển đổi chế độ xem trước"
source_code: "Chuyển đổi chế độ mã Markdown"
error_saving_failed: "Lưu tài liệu không thành công với lỗi sau: %{error}"
@@ -276,8 +278,10 @@ vi:
Các thay đổi có thể mất một thời gian để có hiệu lực. Bạn sẽ được thông báo khi tất cả các công việc liên quan đã được cập nhật.
Bạn có chắc chắn muốn tiếp tục không?
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- Thay đổi chế độ tính toán tiến độ từ dựa trên trạng thái sang dựa trên công việc sẽ làm cho % Hoàn thành trở thành trường không thể chỉnh sửa, giá trị của nó được lấy từ Công việc và Công việc còn lại. Các giá trị hiện tại cho % Hoàn thành sẽ được giữ lại. Nếu các giá trị cho Công việc và Công việc còn lại không có, chúng sẽ được yêu cầu để thay đổi % Hoàn thành.
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Thay đổi chế độ tính toán tiến độ từ dựa trên công việc sang dựa trên trạng thái sẽ dẫn đến việc tất cả các giá trị hiện tại của % Hoàn thành bị mất và thay thế bằng các giá trị liên kết với từng trạng thái. Các giá trị hiện tại cho Công việc còn lại cũng có thể được tính lại để phản ánh sự thay đổi này. Hành động này không thể hoàn tác.
custom_actions:
@@ -398,6 +402,7 @@ vi:
label_create: "Tạo"
label_create_work_package: "Tạo gói công việc mới"
label_created_by: "Được tạo bởi"
+ label_current: "current"
label_date: "Ngày"
label_date_with_format: "Nhập %{date_attribute} theo định dạng sau: %{format}"
label_deactivate: "Hủy kích hoạt"
@@ -1179,6 +1184,8 @@ vi:
one: "1 ngày"
other: "%{count} ngày"
zero: "0 ngày"
+ word:
+ other: "%{count} words"
zen_mode:
button_activate: "Kích hoạt chế độ Zen"
button_deactivate: "Tắt chế độ Zen"
diff --git a/config/locales/crowdin/js-zh-CN.yml b/config/locales/crowdin/js-zh-CN.yml
index 004167832401..e70f8b25452e 100644
--- a/config/locales/crowdin/js-zh-CN.yml
+++ b/config/locales/crowdin/js-zh-CN.yml
@@ -138,6 +138,8 @@ zh-CN:
description_select_work_package: "选择工作包 #%{id}"
description_subwork_package: "子工作包 #%{id}"
editor:
+ revisions: "显示本地修改"
+ no_revisions: "未找到本地修改"
preview: "切换预览模式"
source_code: "切换 Markdown 模式"
error_saving_failed: "保存文档失败,出现以下错误:%{error}"
@@ -275,8 +277,10 @@ zh-CN:
warning: >
更改可能需要一些时间才能生效。当更新完所有相关工作包时,您将收到通知。
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ 将进度计算模式从基于状态改为基于工时,将使% 完成变为不可编辑字段,其值来自工时和剩余工时。% 完成现有值将保留。如果没有 工时和剩余工时的值,则需要这些值才能更改 % 完成。
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- 将进度计算模式从基于状态改为基于工作,将使完成百分比成为不可编辑字段,其值来自工作和剩余工时。完成百分比的现有值将保留。如果没有 "工时"和 "剩余工作"的值,则需要这些值才能更改 "完成百分比"。
+ 将进度计算模式从基于状态改为基于工时,将使% 完成字段可自由编辑。如果您选择输入工时或剩余工时的值,它们也将与% 完成相关联。更改剩余工时就可以更新% 完成。
warning_progress_calculation_mode_change_from_field_to_status_html: >-
将进度计算模式从基于工时的方式改为基于状态,将会导致所有现有的 %完整的 值丢失,并被与每个状态相关的值所替代。 剩余工时 的现有值也可能被重新计算,以反映这种变化。此操作不可逆转。
custom_actions:
@@ -397,6 +401,7 @@ zh-CN:
label_create: "创建"
label_create_work_package: "创建新工作包"
label_created_by: "创建自"
+ label_current: "当前"
label_date: "日期"
label_date_with_format: "以%{format} 的格式输入 %{date_attribute}"
label_deactivate: "停用"
@@ -1178,6 +1183,8 @@ zh-CN:
one: "1 天"
other: "%{count} 天"
zero: "0 天"
+ word:
+ other: "%{count} words"
zen_mode:
button_activate: "激活 zen 模式"
button_deactivate: "取消激活 zen 模式"
diff --git a/config/locales/crowdin/js-zh-TW.yml b/config/locales/crowdin/js-zh-TW.yml
index 3fbb0a03eeb7..c9bc01ae3ace 100644
--- a/config/locales/crowdin/js-zh-TW.yml
+++ b/config/locales/crowdin/js-zh-TW.yml
@@ -138,6 +138,8 @@ zh-TW:
description_select_work_package: "選取工作項目 #%{id}"
description_subwork_package: "子工作項目 #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "切換預覽模式"
source_code: "切換Markdown模式"
error_saving_failed: "保存文件失敗, 出現以下錯誤: %{error}"
@@ -274,8 +276,10 @@ zh-TW:
warning: >
更改可能需要一些時間才能生效。當更新完所有相關工作包時,您將收到通知。
work_packages_settings:
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
+ Changing progress calculation mode from status-based to work-based will make % Complete a non-editable field whose value is derived from Work and Remaining work. Existing values for % Complete are preserved. If values for Work and Remaining work were not present, they will be required in order to change % Complete.
warning_progress_calculation_mode_change_from_status_to_field_html: >-
- 將進度計算模式從基於狀態改為基於工作,將使完成百分比成為不可編輯字段,其值來自工作和剩餘工時。完成百分比的現有值將保留。如果沒有 "工時"和 "剩餘工作"的值,則需要這些值才能更改 "完成百分比"。
+ Changing progress calculation mode from status-based to work-based will make the % Complete field freely editable. If you optionally enter values for Work or Remaining work, they will also be linked to % Complete. Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
將進度計算模式從基於工時的方式改為基於狀態,將會導致所有現有的 %完整的 值丟失,並被與每個狀態相關的值所替代。 剩餘工時 的現有值也可能被重新計算,以反映這種變化。此操作不可逆轉。
custom_actions:
@@ -396,6 +400,7 @@ zh-TW:
label_create: "建立"
label_create_work_package: "建立新的工作項目"
label_created_by: "建立者:"
+ label_current: "目前"
label_date: "日期"
label_date_with_format: "輸入 %{date_attribute} 使用以下格式: %{format}"
label_deactivate: "停用"
@@ -1177,6 +1182,8 @@ zh-TW:
one: "1 天"
other: "%{count} 天"
zero: "0 天"
+ word:
+ other: "%{count} words"
zen_mode:
button_activate: "啟動 zen 模式"
button_deactivate: "停用 zen 模式"
diff --git a/config/locales/crowdin/ka.yml b/config/locales/crowdin/ka.yml
index f147e65dd84b..c334143978e9 100644
--- a/config/locales/crowdin/ka.yml
+++ b/config/locales/crowdin/ka.yml
@@ -1040,10 +1040,10 @@ ka:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ ka:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ ka:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ ka:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ ka:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "კომენტარი"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/kk.yml b/config/locales/crowdin/kk.yml
index bbee919bdbde..b27671681648 100644
--- a/config/locales/crowdin/kk.yml
+++ b/config/locales/crowdin/kk.yml
@@ -1040,10 +1040,10 @@ kk:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ kk:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ kk:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ kk:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ kk:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comment"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/ko.yml b/config/locales/crowdin/ko.yml
index 3260a8347a8f..82c093b93630 100644
--- a/config/locales/crowdin/ko.yml
+++ b/config/locales/crowdin/ko.yml
@@ -1032,10 +1032,10 @@ ko:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "- 작업과 남은 작업이 일치하지 않습니다"
- cannot_be_set_when_work_is_zero: "- 작업이 0인 경우 설정할 수 없습니다"
- must_be_set_when_remaining_work_is_set: "'남은 작업'이 설정된 경우 필수입니다."
- must_be_set_when_work_and_remaining_work_are_set: "'작업' 및 '남은 작업'이 설정된 경우 필수입니다."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "- 0에서 100 사이여야 합니다."
due_date:
not_start_date: "마일스톤에서 요구하지만, 시작 날짜가 없음"
@@ -1065,15 +1065,17 @@ ko:
does_not_exist: "지정한 카테고리가 존재하지 않습니다."
estimated_hours:
not_a_number: "- 유효한 기간이 아닙니다."
- cant_be_inferior_to_remaining_work: "남은 작업보다 낮을 수 없습니다."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "'남은 작업' 및 '완료 %'가 설정된 경우 필수입니다."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "- 유효한 기간이 아닙니다."
- cant_exceed_work: "작업보다 높을 수 없습니다."
- must_be_set_when_work_is_set: "작업이 설정된 경우 필수입니다."
- must_be_set_when_work_and_percent_complete_are_set: "'작업' 및 '완료 %'가 설정된 경우 필수입니다."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "작업 패키지가 읽기 전용 상태이므로 해당 속성을 변경할 수 없습니다."
type:
attributes:
@@ -1624,7 +1626,8 @@ ko:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3076,8 +3079,10 @@ ko:
setting_work_package_done_ratio: "진행률 계산"
setting_work_package_done_ratio_field: "작업 기반"
setting_work_package_done_ratio_status: "상태 기반"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- 작업 기반 모드에서 완료 %는 총 작업 대비 완료된 작업을 기준으로 계산됩니다. 상태 기반 모드에서는 각 상태에 완료 % 값이 연결되어 있습니다. 상태를 변경하면 완료 %도 변경됩니다.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "작업 패키지 속성"
setting_work_package_startdate_is_adddate: "새 작업 패키지에 대한 시작 날짜로 현재 날짜 사용"
setting_work_packages_projects_export_limit: "작업 패키지/프로젝트 내보내기 제한"
@@ -3459,9 +3464,26 @@ ko:
progress:
label_note: "참고:"
modal:
- work_based_help_text: "완료 %는 작업 및 남은 작업에서 자동으로 파생됩니다."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "완료 %는 작업 패키지 상태에 따라 설정됩니다."
migration_warning_text: "작업 기반 진행률 계산 모드에서 완료 %는 수동으로 설정할 수 없으며 작업에 연결됩니다. 기존 값은 유지되지만 편집할 수 없습니다. 먼저 작업을 입력하세요."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "코멘트"
comment_description: "이 작업 패키지를 보고 코멘트를 작성할 수 있습니다."
diff --git a/config/locales/crowdin/lt.yml b/config/locales/crowdin/lt.yml
index d21be5617dac..1e69aa7281fb 100644
--- a/config/locales/crowdin/lt.yml
+++ b/config/locales/crowdin/lt.yml
@@ -1051,10 +1051,10 @@ lt:
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"
- must_be_set_when_remaining_work_is_set: "Privaloma, kai nustatytas likęs darbas."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "nėra pradžios data, nors tai reikalinga svarbiems etapams."
@@ -1084,15 +1084,17 @@ lt:
does_not_exist: "Nurodyta kategorija neegzistuoja."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Negali būti mažesnis už likusį darbą."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Negali būdi daugiau nei Darbas."
- must_be_set_when_work_is_set: "Privaloma, kai nustatytas Darbas."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Darbo paketas yra tik skaitymo būsenoje, taigi jo atributų keisti negalima."
type:
attributes:
@@ -1727,7 +1729,8 @@ lt:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3184,8 +3187,10 @@ lt:
setting_work_package_done_ratio: "Eigos skaičiavimas"
setting_work_package_done_ratio_field: "Pagal-darbą"
setting_work_package_done_ratio_status: "Pagal-būseną"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- Režime pagal-darbą, pabaigimo % skaičiuojami pagal tai, kiek darbo atlikta lyginant su visu darbo kiekiu. Režime pagal-būseną, kiekvienas būsenas turi savo susijusią baigtumo % reikšmę. Pakeitus būseną pasikeis ir % baigta.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Darbų paketo ypatybės"
setting_work_package_startdate_is_adddate: "Naudoti dabartinę datą kaip naujų darbų paketų pradžios datą"
setting_work_packages_projects_export_limit: "Darbo paketų / Projektų eksporto limitas"
@@ -3569,9 +3574,26 @@ lt:
progress:
label_note: "Pastaba:"
modal:
- work_based_help_text: "% baigta automatiškai skaičiuojama pagal Darbą ir Likusį darbą."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% baigta nustatoma pagal paketo būseną."
migration_warning_text: "Darbu paremtame eigos skaičiavimo režime % baigta negali būti nustatomas rankomis ir yra susietas su darbu. Esamos reikšmės buvo išlaikytos, bet negali būti keičiamos. Prašome iš pradžių įveskite darbą."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Komentaras"
comment_description: "Gali žiūrėti ir komentuoti šį darbo paketą."
diff --git a/config/locales/crowdin/lv.yml b/config/locales/crowdin/lv.yml
index 5d836bef386a..0d2c068d97db 100644
--- a/config/locales/crowdin/lv.yml
+++ b/config/locales/crowdin/lv.yml
@@ -1047,10 +1047,10 @@ lv:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "nav sākuma datums, kaut arī tas ir nepieciešams atskaites punktam."
@@ -1080,15 +1080,17 @@ lv:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1695,7 +1697,8 @@ lv:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3154,8 +3157,10 @@ lv:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3539,9 +3544,26 @@ lv:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Komentârs"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/mn.yml b/config/locales/crowdin/mn.yml
index 7c7de23fd470..98d5253536c9 100644
--- a/config/locales/crowdin/mn.yml
+++ b/config/locales/crowdin/mn.yml
@@ -1040,10 +1040,10 @@ mn:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ mn:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ mn:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ mn:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ mn:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comment"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/ms.yml b/config/locales/crowdin/ms.yml
index f5559f9e5978..b7663e3af9cf 100644
--- a/config/locales/crowdin/ms.yml
+++ b/config/locales/crowdin/ms.yml
@@ -1031,10 +1031,10 @@ ms:
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"
- must_be_set_when_remaining_work_is_set: "Diperlukan apabila kerja yang Berbaki ditetapkan."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "bukan pada tarikh mula, walaupun ini diperlukan untuk pencapaian."
@@ -1064,15 +1064,17 @@ ms:
does_not_exist: "Kategori yang ditentukan tidak wujud."
estimated_hours:
not_a_number: "bukan jangka masa yang sah."
- cant_be_inferior_to_remaining_work: "Tidak boleh lebih rendah daripada kerja yang Berbaki."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "bukan jangka masa yang sah."
- cant_exceed_work: "Tidak boleh lebih tinggi daripada Kerja."
- must_be_set_when_work_is_set: "Diperlukan apabila Kerja ditetapkan."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Pakej kerja berada dalam status baca sahaja maka atributnya tidak boleh diubah."
type:
attributes:
@@ -1623,7 +1625,8 @@ ms:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3076,8 +3079,10 @@ ms:
setting_work_package_done_ratio: "Pengiraan perkembangan"
setting_work_package_done_ratio_field: "Berasaskan kerja"
setting_work_package_done_ratio_status: "Berasaskan status"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- Di mod berasaskan kerja, % Selesai dikira daripada berapa banyak kerja yang telah siap berhubungan dengan jumlah kerja. Di mod berasaskan status, setiap status mempunyai kadar % Selesai berkait dengannya. Pertukaran status akan mengubah % Selesai.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Ciri-ciri pakej kerja"
setting_work_package_startdate_is_adddate: "Guna tarikh semasa sebagai tarikh mula untuk pakej kerja baharu"
setting_work_packages_projects_export_limit: "Pakej kerja / Had eksport projek"
@@ -3459,9 +3464,26 @@ ms:
progress:
label_note: "Perhatian:"
modal:
- work_based_help_text: "% Selesai secara automatik diperolehi daripada Kerja dan Kerja yang berbaki."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Selesai ditetapkan oleh status pakej kerja."
migration_warning_text: "Dalam mod pengiraan perkembangan berdasarkan kerja, % Selesai tidak boleh ditetapkan secara manual dan ianya terikat kepada Kerja. Nilai sedia ada tersebut telah disimpan tetapi tidak boleh diedit. Sila input Kerja dahulu."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Komen"
comment_description: "Boleh lihat dan komen berkenaan pakej kerja ini."
diff --git a/config/locales/crowdin/ne.yml b/config/locales/crowdin/ne.yml
index a2f21dce670e..c17c821777e2 100644
--- a/config/locales/crowdin/ne.yml
+++ b/config/locales/crowdin/ne.yml
@@ -1040,10 +1040,10 @@ ne:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ ne:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ ne:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ ne:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ ne:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comment"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/nl.yml b/config/locales/crowdin/nl.yml
index f99888e32180..979bea334719 100644
--- a/config/locales/crowdin/nl.yml
+++ b/config/locales/crowdin/nl.yml
@@ -1037,10 +1037,10 @@ nl:
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"
- must_be_set_when_remaining_work_is_set: "Vereist wanneer Resterend werk is ingesteld."
- must_be_set_when_work_and_remaining_work_are_set: "Vereist wanneer Werk en Resterend werk zijn ingesteld."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "moet tussen 0 en 100 liggen."
due_date:
not_start_date: "is niet op begindatum, hoewel dit voor mijlpalen vereist is."
@@ -1070,15 +1070,17 @@ nl:
does_not_exist: "De gekozen categorie bestaat niet."
estimated_hours:
not_a_number: "is geen geldige duur."
- cant_be_inferior_to_remaining_work: "Kan niet lager zijn dan Resterend werk."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Vereist wanneer Resterend werk en % Voltooid zijn ingesteld."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is geen geldige duur."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Vereist wanneer Werk is ingesteld."
- must_be_set_when_work_and_percent_complete_are_set: "Vereist wanneer Werk en % Voltooid zijn ingesteld."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Het werkpakket heeft een alleen-lezen status dus kunne attributen niet worden gewijzigd."
type:
attributes:
@@ -1657,7 +1659,8 @@ nl:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3113,8 +3116,10 @@ nl:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Werkpakketeigenschappen"
setting_work_package_startdate_is_adddate: "Huidige datum als begindatum voor nieuwe werkpakketten gebruiken"
setting_work_packages_projects_export_limit: "Werkpakketten / Projecten exportlimiet"
@@ -3496,9 +3501,26 @@ nl:
progress:
label_note: "Opmerking:"
modal:
- work_based_help_text: "% Voltooid wordt automatisch afgeleid van Werk en Resterend werk."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Voltooid wordt ingesteld door de status van het werkpakket."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Commentaar"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/no.yml b/config/locales/crowdin/no.yml
index 2fd4b4cac66d..9e5bea29f725 100644
--- a/config/locales/crowdin/no.yml
+++ b/config/locales/crowdin/no.yml
@@ -1039,10 +1039,10 @@
assigned_to:
format: "%{message}"
done_ratio:
- 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: "Påkrevd når arbeid og gjenstående arbeid settes."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
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."
@@ -1072,15 +1072,17 @@
does_not_exist: "Den angitte kategorien finnes ikke."
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: "Påkrevd når gjenværende arbeid og % Fullført er satt."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
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: "Påkrevd når gjenværende arbeid og % Fullført er satt."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Arbeidspakken er i skrivebeskyttet status slik at egenskapene ikke kan endres."
type:
attributes:
@@ -1659,7 +1661,8 @@
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3116,8 +3119,10 @@
setting_work_package_done_ratio: "Beregning av fremdrift"
setting_work_package_done_ratio_field: "Arbeidsbasert"
setting_work_package_done_ratio_status: "Statusbasert"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- I arbeidsbasert modus, beregnes % Ferdig ut fra hvor mye arbeid som er gjort i forhold til det totale arbeidet. I -statusbasert modus har hver status en % Ferdig verdi knyttet til den. Endring av status vil endre % Ferdig.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Egenskaper for arbeidspakke"
setting_work_package_startdate_is_adddate: "Bruk gjeldende dato som startdato for nye arbeidspakker"
setting_work_packages_projects_export_limit: "Eksportgrense for arbeidspakker/prosjekter"
@@ -3500,9 +3505,26 @@
progress:
label_note: "Merk:"
modal:
- work_based_help_text: "% Ferdig utledes automatisk fra arbeid og gjenstående arbeid."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Ferdig er angitt etter status på arbeidspakken."
migration_warning_text: "I arbeidsbasert fremdriftsberegningsmodus kan % Ferdig ferdigstilt ikke settes manuelt og er knyttet til jobber. Den eksisterende verdien er lagret, men kan ikke endres. Skriv inn arbeidet først."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Kommentar"
comment_description: "Kan se og kommentere denne arbeidspakken."
diff --git a/config/locales/crowdin/pl.yml b/config/locales/crowdin/pl.yml
index 36bb718fd034..f8ee29dc4695 100644
--- a/config/locales/crowdin/pl.yml
+++ b/config/locales/crowdin/pl.yml
@@ -818,7 +818,7 @@ pl:
confirmation: "nie pasuje do %{attribute}."
could_not_be_copied: "Nie można było (w pełni) skopiować %{dependency}."
does_not_exist: "nie istnieje."
- error_enterprise_only: "%{action} jest dostępna tylko w OpenProject Enterprise edition"
+ error_enterprise_only: "%{action} jest dostępna tylko w OpenProject Enterprise Edition"
error_unauthorized: "— nie można uzyskac dostępu."
error_readonly: "— podjęto próbę zapisu, ale nie jest zapisywalny."
error_conflict: "Information has been updated by at least one other user in the meantime."
@@ -1051,10 +1051,10 @@ pl:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "nie odpowiada pracy i pozostałej pracy"
- cannot_be_set_when_work_is_zero: "nie można ustawić, gdy praca wynosi zero"
- must_be_set_when_remaining_work_is_set: "Wymagane, gdy ustawiona jest opcja Pozostała praca."
- must_be_set_when_work_and_remaining_work_are_set: "Wymagane, gdy ustawione są opcje Praca i Pozostała praca."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "musi wynosić od 0 do 100."
due_date:
not_start_date: "nie jest w dniu rozpoczęcia, chociaż jest to wymagane dla Kamieni Milowych."
@@ -1084,15 +1084,17 @@ pl:
does_not_exist: "Podana kategoria nie istnieje."
estimated_hours:
not_a_number: "nie jest prawidłowym czasem trwania."
- cant_be_inferior_to_remaining_work: "Nie może być mniejsza niż wartość pozostałej pracy."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Wymagane, gdy ustawione są opcje Pozostała praca i % ukończenia."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "nie jest prawidłowym czasem trwania."
- cant_exceed_work: "Nie może być wyższa niż wartość pracy."
- must_be_set_when_work_is_set: "Wymagane, gdy ustawiona jest opcja Praca."
- must_be_set_when_work_and_percent_complete_are_set: "Wymagane, gdy ustawione są opcje Praca i % ukończenia."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Pakiet roboczy ma status tylko do odczytu, więc jego atrybutów nie można zmienić."
type:
attributes:
@@ -1727,7 +1729,8 @@ pl:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3185,8 +3188,10 @@ pl:
setting_work_package_done_ratio: "Obliczenie postępu"
setting_work_package_done_ratio_field: "Oparte na pracy"
setting_work_package_done_ratio_status: "Oparte na statusie"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- W trybie opartym na pracy % ukończenia jest obliczany na podstawie ilości wykonanej pracy w stosunku do pracy całkowitej. W trybie opartym na statusie każdy status ma powiązaną wartość % ukończenia. Zmiana statusu spowoduje zmianę % ukończenia.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Właściwości pakietu roboczego"
setting_work_package_startdate_is_adddate: "Użyj bieżącej daty jako daty początkowej dla nowych pakietów roboczych"
setting_work_packages_projects_export_limit: "Limit eksportu pakietów roboczych / projektów"
@@ -3571,9 +3576,26 @@ pl:
progress:
label_note: "Uwaga:"
modal:
- work_based_help_text: "% ukończenia jest automatycznie wyprowadzany z wartości Praca i Pozostała praca."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% ukończenia jest ustawiany na podstawie statusu pakietu roboczego."
migration_warning_text: "W trybie obliczania postępu na podstawie pracy wartości % ukończenia nie można ustawić ręcznie i jest ona powiązana z wartością Praca. Istniejąca wartość została zachowana, ale nie można jej edytować. Najpierw wprowadź wartość Praca."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Komentarz"
comment_description: "Może wyświetlać i komentować ten pakiet roboczy."
diff --git a/config/locales/crowdin/pt-BR.yml b/config/locales/crowdin/pt-BR.yml
index eab9dd2929d1..c57cc6f876fc 100644
--- a/config/locales/crowdin/pt-BR.yml
+++ b/config/locales/crowdin/pt-BR.yml
@@ -1038,10 +1038,10 @@ pt-BR:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "não corresponde ao trabalho e ao trabalho restante"
- cannot_be_set_when_work_is_zero: "não pode ser definido quando o trabalho é zero"
- must_be_set_when_remaining_work_is_set: "Necessário quando o Trabalho restante for definido."
- must_be_set_when_work_and_remaining_work_are_set: "Necessário quando o Trabalho e o Trabalho restante são definidos."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "deve estar entre 0 e 100."
due_date:
not_start_date: "não é na data de início, embora isso seja necessário para os marcos."
@@ -1071,15 +1071,17 @@ pt-BR:
does_not_exist: "Categoria especificada não existe."
estimated_hours:
not_a_number: "não é uma duração válida."
- cant_be_inferior_to_remaining_work: "Não pode ser menor do que o Trabalho restante."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Necessário quando o Trabalho restante e o % concluído são definidos."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "não é uma duração válida."
- cant_exceed_work: "Não pode ser maior do que o Trabalho."
- must_be_set_when_work_is_set: "Necessário quando o Trabalho for definido."
- must_be_set_when_work_and_percent_complete_are_set: "Necessário quando Trabalho e % concluído são definidos."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "O pacote de trabalho está em estado somente leitura, então seus atributos não podem ser alterados."
type:
attributes:
@@ -1658,7 +1660,8 @@ pt-BR:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3113,8 +3116,10 @@ pt-BR:
setting_work_package_done_ratio: "Cálculo de progresso"
setting_work_package_done_ratio_field: "Com base no trabalho"
setting_work_package_done_ratio_status: "Com base no estado"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- No modo com base no trabalho, a % de conclusão é calculada com base na quantidade de trabalho realizado em relação ao total de trabalho. Já no modo com base no estado, cada estado possui um valor de % de conclusão associado a ele. Alterar o estado resultará em uma mudança na % de conclusão.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Propriedades do pacote de trabalho"
setting_work_package_startdate_is_adddate: "Usar a data atual como data para início dos novos pacotes de trabalho"
setting_work_packages_projects_export_limit: "Limite de exportação de pacote de trabalho / projetos"
@@ -3496,9 +3501,26 @@ pt-BR:
progress:
label_note: "Obs.:"
modal:
- work_based_help_text: "% de conclusão é automaticamente calculada com base no trabalho total e no trabalho restante."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "A % de conclusão é definida pelo estado do pacote de trabalho."
migration_warning_text: "No modo de cálculo de progresso com base no trabalho, a % conclusão não pode ser definida manualmente e está vinculada ao Trabalho. O valor existente foi mantido, mas não pode ser editado. Favor inserir o Trabalho primeiro."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comentário"
comment_description: "Pode visualizar e comentar neste pacote de trabalho."
diff --git a/config/locales/crowdin/pt-PT.yml b/config/locales/crowdin/pt-PT.yml
index bfda7066f05a..a1ae4eb0b417 100644
--- a/config/locales/crowdin/pt-PT.yml
+++ b/config/locales/crowdin/pt-PT.yml
@@ -1038,10 +1038,10 @@ pt-PT:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "não corresponde ao trabalho e ao trabalho restante"
- cannot_be_set_when_work_is_zero: "não pode ser definido quando o trabalho é zero"
- must_be_set_when_remaining_work_is_set: "Obrigatório quando o Trabalho restante está definido."
- must_be_set_when_work_and_remaining_work_are_set: "Obrigatório quando o Trabalho e o Trabalho restante estão definidos."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "tem de estar entre 0 e 100."
due_date:
not_start_date: "não é na data de início, embora isto seja necessário para os registos."
@@ -1071,15 +1071,17 @@ pt-PT:
does_not_exist: "A categoria especificada não existe."
estimated_hours:
not_a_number: "não é uma duração válida."
- cant_be_inferior_to_remaining_work: "Não pode ser inferior a Trabalho restante."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Necessário quando são definidos Trabalho restante e % concluído."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "não é uma duração válida."
- cant_exceed_work: "Não pode ser superior a Trabalho."
- must_be_set_when_work_is_set: "Obrigatório quando o Trabalho é definido."
- must_be_set_when_work_and_percent_complete_are_set: "Necessário quando Trabalho e % concluído estão definidos."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "O pacote de trabalho está em estado de apenas leitura, por isso os seus atributos não podem ser alterados."
type:
attributes:
@@ -1658,7 +1660,8 @@ pt-PT:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3112,8 +3115,10 @@ pt-PT:
setting_work_package_done_ratio: "Cálculo do progresso"
setting_work_package_done_ratio_field: "Baseado no trabalho"
setting_work_package_done_ratio_status: "Baseado no estado"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- No modo baseado no trabalho, a % de conclusão é calculada a partir da quantidade de trabalho realizado em relação ao trabalho total. No modo baseado no estado, cada estado tem um valor de % de conclusão associado. A alteração do estado altera a % de conclusão.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Propriedades das tarefas"
setting_work_package_startdate_is_adddate: "Utilizar a data atual como data de início para novos pacotes de trabalho"
setting_work_packages_projects_export_limit: "Pacotes de trabalho / limite de exportação de projetos"
@@ -3496,9 +3501,26 @@ pt-PT:
progress:
label_note: "Nota:"
modal:
- work_based_help_text: "A % de conclusão é derivada automaticamente do Trabalho e do Trabalho restante."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "A % de conclusão é definida pelo estado do pacote de trabalho."
migration_warning_text: "No modo de cálculo do progresso com base no trabalho, a % de conclusão não pode ser definida manualmente e está ligada ao Trabalho. O valor existente foi mantido, mas não pode ser editado. Introduza primeiro o Trabalho."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comentário"
comment_description: "Pode ver e comentar este pacote de trabalho."
diff --git a/config/locales/crowdin/ro.yml b/config/locales/crowdin/ro.yml
index fa615fd5ec18..18f916b57fff 100644
--- a/config/locales/crowdin/ro.yml
+++ b/config/locales/crowdin/ro.yml
@@ -1047,10 +1047,10 @@ ro:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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 etape."
@@ -1080,15 +1080,17 @@ ro:
does_not_exist: "Categoria specificată nu există."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Pachetul de lucru este în stare de numai citire, astfel încât atributele sale nu pot fi modificate."
type:
attributes:
@@ -1695,7 +1697,8 @@ ro:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -2090,7 +2093,7 @@ ro:
label_duplicated_by: "dublat de"
label_duplicate: "duplicat"
label_duplicates: "dublează"
- label_edit: "Editare"
+ label_edit: "Editează"
label_edit_x: "Editare: %{x}"
label_enable_multi_select: "Comutare selecție multiplă"
label_enabled_project_custom_fields: "Câmpuri personalizate activate"
@@ -2142,7 +2145,7 @@ ro:
label_generate_key: "Generare cheie"
label_git_path: "Calea catre directorul .git"
label_greater_or_equal: ">="
- label_group_by: "Grupare după"
+ label_group_by: "Grupează după"
label_group_new: "Grupare nouă"
label_group: "Grup"
label_group_named: "Grup %{name}"
@@ -3153,8 +3156,10 @@ ro:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Proprietăți pachet de lucru"
setting_work_package_startdate_is_adddate: "Folosire data curentă ca dată de început pentru pachetele de lucru noi"
setting_work_packages_projects_export_limit: "Limita de export a pachetelor de lucru / proiectelor"
@@ -3538,9 +3543,26 @@ ro:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comentariu"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/ru.yml b/config/locales/crowdin/ru.yml
index 2d4491ff6604..fd91cdb07b34 100644
--- a/config/locales/crowdin/ru.yml
+++ b/config/locales/crowdin/ru.yml
@@ -1053,10 +1053,10 @@ ru:
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"
- must_be_set_when_remaining_work_is_set: "Требуется, если установлен параметр Оставшаяся работа."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "должно быть между 0 и 100."
due_date:
not_start_date: "не совпадает с датой начала, хотя это требуется для вех."
@@ -1086,15 +1086,17 @@ ru:
does_not_exist: "Указанная категория не существует."
estimated_hours:
not_a_number: "не является допустимой продолжительностью."
- cant_be_inferior_to_remaining_work: "Не может быть меньше, чем Оставшаяся работа."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "не является допустимой продолжительностью."
- cant_exceed_work: "Не может быть выше Работы."
- must_be_set_when_work_is_set: "Требуется, если установлен параметр «Работа»."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Пакет работ находится в статусе доступном только для чтения, поэтому его атрибуты не могут быть изменены."
type:
attributes:
@@ -1729,7 +1731,8 @@ ru:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3187,8 +3190,10 @@ ru:
setting_work_package_done_ratio: "Режим расчета прогресса"
setting_work_package_done_ratio_field: "На основе трудозатрат"
setting_work_package_done_ratio_status: "На основе статуса"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- В режиме На основе трудозатрат, процент завершения рассчитывается на основе того, сколько работы выполнено по отношению к общему объему работ. В режиме На основе статуса, каждый статус имеет связанное с ним значение процента завершения. Изменение статуса изменит процент завершения.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Свойства пакета работ"
setting_work_package_startdate_is_adddate: "Использовать текущую дату как дату начала для новых пакетов работ"
setting_work_packages_projects_export_limit: "Ограничение экспорта пакетов работ / проектов"
@@ -3572,9 +3577,26 @@ ru:
progress:
label_note: "Примечание:"
modal:
- work_based_help_text: "% Выполнения автоматически выводится из Работ и Оставшихся работ."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Выполнения определяется статусом пакета работ."
migration_warning_text: "В режиме расчета прогресса \"На основе трудозатрат\" процент завершения невозможно установить вручную, он привязан к трудозатратам. Существующее значение сохранено, но его нельзя изменить. Пожалуйста, сначала введите трудозатраты."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Комментировать"
comment_description: "Может просматривать и комментировать этот пакет работ."
diff --git a/config/locales/crowdin/rw.yml b/config/locales/crowdin/rw.yml
index b01d31e6f239..e83722c5ac42 100644
--- a/config/locales/crowdin/rw.yml
+++ b/config/locales/crowdin/rw.yml
@@ -1040,10 +1040,10 @@ rw:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ rw:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ rw:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ rw:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ rw:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comment"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/si.yml b/config/locales/crowdin/si.yml
index 91d3507b8d68..d8e84bb796b8 100644
--- a/config/locales/crowdin/si.yml
+++ b/config/locales/crowdin/si.yml
@@ -1040,10 +1040,10 @@ si:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "සන්ධිස්ථාන සඳහා මෙය අවශ්ය වුවද ආරම්භක දිනයේ නොවේ."
@@ -1073,15 +1073,17 @@ si:
does_not_exist: "නිශ්චිත කාණ්ඩය නොපවතී."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ si:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ si:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "වැඩ පැකේජය ගුණ"
setting_work_package_startdate_is_adddate: "නව වැඩ පැකේජ සඳහා ආරම්භක දිනය ලෙස වත්මන් දිනය භාවිතා කරන්න"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ si:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "අදහස් දක්වන්න"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/sk.yml b/config/locales/crowdin/sk.yml
index 19c66f12d3d4..d94f2648ffbc 100644
--- a/config/locales/crowdin/sk.yml
+++ b/config/locales/crowdin/sk.yml
@@ -1054,10 +1054,10 @@ sk:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "nemá rovnakú hodnotu ako dátum začiatku, aj keď je to požadované pre pracovné balíčky typu \"míľnik\"."
@@ -1087,15 +1087,17 @@ sk:
does_not_exist: "Špecifikovaná kategória neexistuje."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1730,7 +1732,8 @@ sk:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3190,8 +3193,10 @@ sk:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Vlastnosti pracovného balíčka"
setting_work_package_startdate_is_adddate: "Použiť aktuálny dátum ako počiatočný dátum pre nové pracovné balíčky"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3576,9 +3581,26 @@ sk:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Komentár"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/sl.yml b/config/locales/crowdin/sl.yml
index 49c22e30f415..00fed2c09ece 100644
--- a/config/locales/crowdin/sl.yml
+++ b/config/locales/crowdin/sl.yml
@@ -1051,10 +1051,10 @@ sl:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "ni začeten datum, čeprav je to pomembno za mejnike."
@@ -1084,15 +1084,17 @@ sl:
does_not_exist: "Izbrana kategorija ne obstaja."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1500,8 +1502,8 @@ sl:
- "avgust"
- "september"
- "oktober"
- - "November"
- - "December"
+ - "november"
+ - "december"
order:
- :leto
- :mesec
@@ -1727,7 +1729,8 @@ sl:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3187,8 +3190,10 @@ sl:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Lastnosti delovnega paketa"
setting_work_package_startdate_is_adddate: "52/5000\nUporabite trenutni datum kot datum začetka za nove delovne pakete"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3573,9 +3578,26 @@ sl:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Komentar"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/sr.yml b/config/locales/crowdin/sr.yml
index 0982a18dc38a..a4136d290e31 100644
--- a/config/locales/crowdin/sr.yml
+++ b/config/locales/crowdin/sr.yml
@@ -1047,10 +1047,10 @@ sr:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1080,15 +1080,17 @@ sr:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1695,7 +1697,8 @@ sr:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3154,8 +3157,10 @@ sr:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3539,9 +3544,26 @@ sr:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comment"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/sv.yml b/config/locales/crowdin/sv.yml
index dbd75813ec51..e0f687d32b91 100644
--- a/config/locales/crowdin/sv.yml
+++ b/config/locales/crowdin/sv.yml
@@ -1039,10 +1039,10 @@ sv:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "är inte på startdatum, även om detta behövs för milstolpar."
@@ -1072,15 +1072,17 @@ sv:
does_not_exist: "Den angivna kategorin finns inte."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1659,7 +1661,8 @@ sv:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3114,8 +3117,10 @@ sv:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Egenskaper för arbetspaket"
setting_work_package_startdate_is_adddate: "Använda aktuellt datum som startdatum för nya arbetspaket"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3497,9 +3502,26 @@ sv:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Kommentar"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/th.yml b/config/locales/crowdin/th.yml
index 63bd24cbc502..4cf3f4ec7fad 100644
--- a/config/locales/crowdin/th.yml
+++ b/config/locales/crowdin/th.yml
@@ -1033,10 +1033,10 @@ th:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1066,15 +1066,17 @@ th:
does_not_exist: "ไม่มีประเภทที่ระบุ"
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1625,7 +1627,8 @@ th:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3080,8 +3083,10 @@ th:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "คุณสมบัติของชุดภารกิจ"
setting_work_package_startdate_is_adddate: "ใช้วันปัจจุบันเป็นวันเริ่มต้นสำหรับชุดภารกิจใหม่"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3463,9 +3468,26 @@ th:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "ความคิดเห็น"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/tr.yml b/config/locales/crowdin/tr.yml
index d054a3086939..68269daef45a 100644
--- a/config/locales/crowdin/tr.yml
+++ b/config/locales/crowdin/tr.yml
@@ -1039,10 +1039,10 @@ tr:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "kilometre taşları için gerekli olmasına rağmen başlangıç tarihi değil."
@@ -1072,15 +1072,17 @@ tr:
does_not_exist: "Belirtilen kategori yok."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "İş paketi salt okunur durumdadır, dolayısıyla öznitelikleri değiştirilemez."
type:
attributes:
@@ -1227,7 +1229,7 @@ tr:
base: "Genel Hata:"
blocks_ids: "Engellenen iş paketlerinin ID'leri"
category: "Kategori"
- comment: "Yorum"
+ comment: "Yorumlar"
comments: "Yorum"
content: "İçerik"
color: "Renk"
@@ -1659,7 +1661,8 @@ tr:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3113,8 +3116,10 @@ tr:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "İş paketi özellikleri"
setting_work_package_startdate_is_adddate: "Yeni iş paketlerinde şu anki tarihi başlangıç tarihi olarak kullan"
setting_work_packages_projects_export_limit: "İş paketleri / Projeler dışa aktarım limiti"
@@ -3496,9 +3501,26 @@ tr:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Yorum"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/uk.yml b/config/locales/crowdin/uk.yml
index e921d3ea9c4a..1624d8dc48db 100644
--- a/config/locales/crowdin/uk.yml
+++ b/config/locales/crowdin/uk.yml
@@ -1048,10 +1048,10 @@ uk:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "не збігається зі значеннями атрибутів «Робота» й «Залишок роботи»"
- cannot_be_set_when_work_is_zero: "не можна встановити, коли атрибут «Робота» дорівнює нулю"
- must_be_set_when_remaining_work_is_set: "Потрібно вказати, якщо визначено атрибут «Залишок роботи»."
- must_be_set_when_work_and_remaining_work_are_set: "Потрібно вказати, якщо визначено атрибути «Робота» й «Залишок роботи»."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "має бути в діапазоні від 0 до 100."
due_date:
not_start_date: "не на дату початку, хоча це потрібно для етапів."
@@ -1081,15 +1081,17 @@ uk:
does_not_exist: "Указана категорія не існує."
estimated_hours:
not_a_number: "– не дійсна тривалість."
- cant_be_inferior_to_remaining_work: "Має дорівнювати значенню «Залишок робіт» або перевищувати його."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Потрібно вказати, якщо визначено атрибути «Залишок роботи» й «% завершення»."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "– не дійсна тривалість."
- cant_exceed_work: "Не може перевищувати значення «Робота»."
- must_be_set_when_work_is_set: "Потрібно вказати, якщо визначено атрибут «Робота»."
- must_be_set_when_work_and_percent_complete_are_set: "Потрібно вказати, якщо визначено атрибути «Робота» й «% завершення»."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Пакет робіт перебуває в стані лише для читання, тому його атрибути не можна змінити."
type:
attributes:
@@ -1724,7 +1726,8 @@ uk:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -2196,7 +2199,7 @@ uk:
label_index_by_title: "Індекс за назвою"
label_information: "Інформація"
label_information_plural: "Інформація"
- label_installation_guides: "Інструкції зі встановлення"
+ label_installation_guides: "Інструкції із встановлення"
label_integer: "Ціле число"
label_internal: "Власне"
label_introduction_video: "Введення відео"
@@ -3182,8 +3185,10 @@ uk:
setting_work_package_done_ratio: "Обчислення прогресу"
setting_work_package_done_ratio_field: "На основі роботи"
setting_work_package_done_ratio_status: "На основі статусу"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- У режимі на основі роботи значення параметра «% завершення» залежить від частки виконаної роботи відносно загального обсягу робіт. У режимі на основі статусу кожен статус має пов’язане з ним значення параметра «% завершення». У разі змінення статусу змінюється й значення параметра «% завершення».
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Властивості робочого пакета"
setting_work_package_startdate_is_adddate: "Використовувати поточну дату в якості дати початку роботи для нових пакетів"
setting_work_packages_projects_export_limit: "Ліміт експорту пакетів робіт / проєктів"
@@ -3567,9 +3572,26 @@ uk:
progress:
label_note: "Примітка."
modal:
- work_based_help_text: "Значення параметра «% завершення» автоматично виводиться зі значень параметрів «Робота» й «Залишок роботи»."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "Значення параметра «% завершення» визначається статусом пакета робіт."
migration_warning_text: "У режимі обчислення прогресу на основі робіт значення параметра «% завершення» не можна встановити вручну й прив’язати до значення параметра «Робота». Наявне значення збережено, але його не можна змінити. Спочатку визначте параметр «Робота»."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Коментування"
comment_description: "Може переглядати й коментувати цей пакет робіт."
diff --git a/config/locales/crowdin/uz.yml b/config/locales/crowdin/uz.yml
index 46ae060e5b77..021f91e952f8 100644
--- a/config/locales/crowdin/uz.yml
+++ b/config/locales/crowdin/uz.yml
@@ -1040,10 +1040,10 @@ uz:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1073,15 +1073,17 @@ uz:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1660,7 +1662,8 @@ uz:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3117,8 +3120,10 @@ uz:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3501,9 +3506,26 @@ uz:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comment"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/crowdin/vi.yml b/config/locales/crowdin/vi.yml
index f5235adafb50..88766dcd0ed6 100644
--- a/config/locales/crowdin/vi.yml
+++ b/config/locales/crowdin/vi.yml
@@ -1035,10 +1035,10 @@ vi:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "không khớp với công việc và công việc còn lại"
- cannot_be_set_when_work_is_zero: "không thể thiết lập khi công việc bằng không"
- must_be_set_when_remaining_work_is_set: "Bắt buộc khi thiết lập Công việc còn lại."
- must_be_set_when_work_and_remaining_work_are_set: "Bắt buộc khi thiết lập Công việc và Công việc còn lại."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "phải nằm trong khoảng từ 0 đến 100."
due_date:
not_start_date: "không phải ngày bắt đầu, mặc dù điều này là cần thiết cho các mốc quan trọng."
@@ -1068,15 +1068,17 @@ vi:
does_not_exist: "Thể loại đã chỉ định không tồn tại."
estimated_hours:
not_a_number: "không phải là thời gian hợp lệ."
- cant_be_inferior_to_remaining_work: "Không thể thấp hơn Công việc còn lại."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Bắt buộc khi thiết lập Lượng công việc còn lại và % Hoàn thành."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "không phải là thời gian hợp lệ."
- cant_exceed_work: "Không thể cao hơn Công việc."
- must_be_set_when_work_is_set: "Yêu cầu khi Công việc được đặt."
- must_be_set_when_work_and_percent_complete_are_set: "Bắt buộc khi Công việc và % Hoàn thành được thiết lập."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "Gói công việc đang ở trạng thái chỉ đọc nên các thuộc tính của nó không thể bị thay đổi."
type:
attributes:
@@ -1627,7 +1629,8 @@ vi:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -2061,7 +2064,7 @@ vi:
label_file_plural: "Tệp"
label_filter_add: "Thêm bộ lọc"
label_filter: "Bộ lọc"
- label_filter_plural: "Bộ lọc"
+ label_filter_plural: "Các bộ lọc"
label_filters_toggle: "Hiển thị/ẩn bộ lọc"
label_float: "Số thực"
label_folder: "Thư mục"
@@ -3082,8 +3085,10 @@ vi:
setting_work_package_done_ratio: "Tính toán tiến độ"
setting_work_package_done_ratio_field: "Dựa trên công việc"
setting_work_package_done_ratio_status: "Dựa trên trạng thái"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- Trong chế độ dựa trên công việc, % Hoàn thành được tính từ mức độ công việc đã thực hiện so với tổng công việc. Trong chế độ dựa trên trạng thái, mỗi trạng thái có một giá trị % Hoàn thành liên kết. Thay đổi trạng thái sẽ thay đổi % Hoàn thành.
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Thuộc tính gói công việc"
setting_work_package_startdate_is_adddate: "Sử dụng ngày hiện tại làm ngày bắt đầu cho các gói công việc mới"
setting_work_packages_projects_export_limit: "Giới hạn xuất gói công việc / Dự án"
@@ -3464,9 +3469,26 @@ vi:
progress:
label_note: "Ghi chú:"
modal:
- work_based_help_text: "% Hoàn thành được tự động lấy từ Công việc và Công việc còn lại."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Hoàn thành được thiết lập theo trạng thái của gói công việc."
migration_warning_text: "Trong chế độ tính toán tiến độ dựa trên công việc, % Hoàn thành không thể được đặt thủ công và liên kết với Công việc. Giá trị hiện tại đã được giữ nhưng không thể chỉnh sửa. Vui lòng nhập Công việc trước."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Nhận xét"
comment_description: "Có thể xem và nhận xét gói công việc này."
diff --git a/config/locales/crowdin/zh-CN.seeders.yml b/config/locales/crowdin/zh-CN.seeders.yml
index 037d46169ec8..64166d212273 100644
--- a/config/locales/crowdin/zh-CN.seeders.yml
+++ b/config/locales/crowdin/zh-CN.seeders.yml
@@ -81,7 +81,7 @@ zh-CN:
demo-project:
name: 演示项目
status_explanation: 所有任务都按计划进行。相关人员均知晓各自任务。系统已完全建立。
- description: 这是对此演示项目目标的简短摘要。
+ description: 这是对此演示 Scrum 项目目标的简短摘要。
news:
item_0:
title: 欢迎来到您的演示项目
@@ -199,7 +199,7 @@ zh-CN:
scrum-project:
name: Scrum 项目
status_explanation: 所有任务都按计划进行。相关人员均知晓各自任务。系统已完全建立。
- description: 这是对此演示Scrum项目目标的简短摘要。
+ description: 这是对此演示 Scrum 项目目标的简短摘要。
news:
item_0:
title: 欢迎来到您的 Scrum 演示项目
diff --git a/config/locales/crowdin/zh-CN.yml b/config/locales/crowdin/zh-CN.yml
index 44646952f423..396e2ec5554b 100644
--- a/config/locales/crowdin/zh-CN.yml
+++ b/config/locales/crowdin/zh-CN.yml
@@ -67,7 +67,7 @@ zh-CN:
text: "您确定要删除当前使用的企业版令牌吗?"
title: "删除令牌"
replace_token: "替换您当前的支持令牌"
- order: "订购本地部署的 Enterprise edition"
+ order: "订购本地部署版的 Enterprise edition"
paste: "粘贴您企业版的支持令牌"
required_for_feature: "此功能仅限具激活的企业版支持令牌的订阅者使用。"
enterprise_link: "如需了解详细信息,请单击此处。"
@@ -262,8 +262,8 @@ zh-CN:
no_results_title_text: 目前没有项目。
no_results_content_text: 创建一个新的项目
search:
- label: Project name filter
- placeholder: Search by project name
+ label: 项目名称过滤器
+ placeholder: 按项目名称搜索
lists:
active: "有效项目"
my: "我的项目"
@@ -1029,10 +1029,10 @@ zh-CN:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "工作与剩余工作不匹配"
- cannot_be_set_when_work_is_zero: "工作 为 零 时无法设置"
- must_be_set_when_remaining_work_is_set: "设置 剩余工作 时必须"
- must_be_set_when_work_and_remaining_work_are_set: "当设置了工作和剩余工作时必填。"
+ does_not_match_work_and_remaining_work: "工时与剩余工时不匹配"
+ cannot_be_set_when_work_is_zero: "当工时为 0h 时无法设置"
+ must_be_set_when_remaining_work_is_set: "设置“剩余工时”时必填。"
+ must_be_set_when_work_and_remaining_work_are_set: "设置“工时”和“剩余工时”时必填。"
inclusion: "必须介于 0 和 100 之间。"
due_date:
not_start_date: "不是在开始日期开始,尽管这是必需的里程碑。"
@@ -1063,14 +1063,16 @@ zh-CN:
estimated_hours:
not_a_number: "不是有效的持续时间。"
cant_be_inferior_to_remaining_work: "不能低于剩余工时。"
- must_be_set_when_remaining_work_and_percent_complete_are_set: "设置 剩余工作 和 已完成% 时必填。"
- format: "%{message}"
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "设置“剩余工时”和“% 完成”时必填。"
remaining_hours:
not_a_number: "不是有效的持续时间。"
cant_exceed_work: "不能高于工时。"
- must_be_set_when_work_is_set: "当设置工时需要。"
- must_be_set_when_work_and_percent_complete_are_set: "设置 工作 和 已完成% 时必填。"
- format: "%{message}"
+ must_be_set_when_work_is_set: "设置“工时”时必填。"
+ must_be_set_when_work_and_percent_complete_are_set: "设置“工时”和“% 完成”时必填。"
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ 当“工时”已设置,且“% 完成”为 100%时,必须为0h。
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ 当“工时”为空,且“% 完成”为 100%时,必须为空。
readonly_status: "工作包处于只读状态,因此无法更改其属性。"
type:
attributes:
@@ -1609,10 +1611,10 @@ zh-CN:
subproject: "子项目:%{name}"
export:
dialog:
- title: "Export"
- submit: "Export"
+ title: "导出"
+ submit: "导出"
format:
- label: "File format"
+ label: "文件格式"
options:
csv:
label: "CSV"
@@ -1621,57 +1623,58 @@ zh-CN:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
- input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
+ input_label_report: "添加列到属性表"
+ input_caption_report: "默认情况下,所有添加到当前工作包列表中的列都会被选中。长文本字段在属性表中不可用,但可以显示在其下方。"
+ input_caption_table: "默认情况下,所有添加到当前工作包列表中的列都会被选中。长文本字段在基于表格的导出中不可用。"
pdf:
export_type:
- label: "PDF export type"
+ label: "PDF 导出类型"
options:
table:
- label: "Table"
- caption: "Export the work packages list in a table with the desired columns."
+ label: "表格"
+ caption: "以表格形式导出工作包列表,包含所需的列。"
report:
- label: "Report"
- caption: "Export the work package on a detailed report of all work packages in the list."
+ label: "报告"
+ caption: "以详细报告的形式导出列表中的所有工作包。"
gantt:
- label: "Gantt chart"
- caption: "Export the work packages list in a Gantt diagram view."
+ label: "甘特图"
+ caption: "以甘特图视图导出工作包列表。"
include_images:
- label: "Include images"
- caption: "Exclude images to reduce the size of the PDF export."
+ label: "包含图片"
+ caption: "不包含图像以缩小导出PDF的大小。"
gantt_zoom_levels:
- label: "Zoom levels"
- caption: "Select what is the zoom level for dates displayed in the chart."
+ label: "缩放级别"
+ caption: "选择图表中显示日期的缩放级别。"
options:
- days: "Days"
- weeks: "Weeks"
- months: "Months"
- quarters: "Quarters"
+ days: "天"
+ weeks: "周"
+ months: "月"
+ quarters: "季度"
column_width:
- label: "Table column width"
+ label: "列宽"
options:
- narrow: "Narrow"
- medium: "Medium"
- wide: "Wide"
- very_wide: "Very wide"
+ narrow: "窄"
+ medium: "正常"
+ wide: "宽"
+ very_wide: "非常宽"
paper_size:
- label: "Paper size"
- caption: "Depending on the chart size more than one page might be exported."
+ label: "纸张大小"
+ caption: "根据图表大小,可能会导出不止一页。"
long_text_fields:
- input_caption: "By default all long text fields are selected."
- input_label: "Add long text fields"
- input_placeholder: "Search for long text fields"
- drag_area_label: "Manage long text fields"
+ input_caption: "默认情况下,所有长文本字段都被选中。"
+ input_label: "添加长文本字段"
+ input_placeholder: "搜索长文本字段"
+ drag_area_label: "管理长文本字段"
xls:
include_relations:
- label: "Include relations"
- caption: "This option will create a duplicate of each work package for every relation this has with another work package."
+ label: "包含关系"
+ caption: "该选项将为每个工作包与另一个工作包的关系创建一个副本。"
include_descriptions:
- label: "Include descriptions"
- caption: "This option will add a description column in raw format."
- your_work_packages_export: "Work packages are being exported"
- succeeded: "Export completed"
- failed: "An error has occurred while trying to export the work packages: %{message}"
+ label: "包含描述"
+ caption: "该选项将添加原始格式的描述列。"
+ your_work_packages_export: "正在导出工作包"
+ succeeded: "导出完成"
+ failed: "在尝试导出工作包时发生错误: %{message}"
format:
atom: "Atom"
csv: "CSV"
@@ -2313,7 +2316,7 @@ zh-CN:
label_revision_id: "修订版本 %{value}"
label_revision_plural: "修订"
label_roadmap: "路线图"
- label_roadmap_edit: "编辑路线图 %{name}"
+ label_roadmap_edit: "编辑路线图%{name}"
label_roadmap_due_in: "%{value} 到期"
label_roadmap_no_work_packages: "该版本没有工作包。"
label_roadmap_overdue: "%{value} 超时"
@@ -2962,7 +2965,7 @@ zh-CN:
managed: "在 OpenProject 中创建新的存储库"
storage:
not_available: "磁盘存储开销不可用于此存储库。"
- update_timeout: "在 N 分钟内保留存储库最后所需磁盘空间的信息。由于计算存储库所需的磁盘空间可能增加系统开销,增加该值可以减少性能影响。"
+ update_timeout: "在 N 分钟内保留存储库最后所需的磁盘空间信息。由于计算存储库所需的磁盘空间可能增加系统开销,增加该值可以减少性能影响。"
oauth_application_details: "关闭此窗口后,将无法再次访问客户端密钥值。请将这些值复制到 Nextcloud OpenProject 集成设置中:"
oauth_application_details_link_text: "转到设置页面"
setup_documentation_details: "如果您在配置新文件存储方面需要帮助,请查看文档:"
@@ -3070,8 +3073,10 @@ zh-CN:
setting_work_package_done_ratio: "进度计算"
setting_work_package_done_ratio_field: "基于工时"
setting_work_package_done_ratio_status: "基于状态"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ 在基于工时模式下,“% 完成”是根据已完成的工时占总工时的比例计算出来的。在基于状态模式下,每个状态都有一个与之相关的“% 完成”。更改状态将改变“% 完成”。
setting_work_package_done_ratio_explanation_html: >
- 在基于工时模式下,完成百分比是根据已完成的工时占总工时的比例计算出来的。在基于状态模式下,每个状态都有一个与之相关的完成百分比。更改状态将改变完成百分比。
+ 在基于工作的模式下,“% 完成”可以自由设置为任何值。如果选择输入 "工时 "值,则会自动得出 "剩余工时"。在基于状态的模式下,每个状态都有一个与之相关的“% 完成”值。更改状态将改变“% 完成”。
setting_work_package_properties: "工作包属性"
setting_work_package_startdate_is_adddate: "使用当前日期作为新工作包的开始日期"
setting_work_packages_projects_export_limit: "工作包/项目导出限制"
@@ -3111,7 +3116,7 @@ zh-CN:
setting_session_ttl_hint: "当设置的值低于5时,其作用类似于禁用。"
setting_session_ttl_enabled: "会话过期"
setting_start_of_week: "一周起始日"
- setting_sys_api_enabled: "启用版本库管理 web 服务"
+ setting_sys_api_enabled: "启用存储库管理网页服务"
setting_sys_api_description: "存储库管理网页服务提供了集成的,用户授权的存储库访问。"
setting_time_format: "时间"
setting_accessibility_mode_for_anonymous: "为匿名用户启用辅助功能模式"
@@ -3423,7 +3428,7 @@ zh-CN:
warning_user_limit_reached_admin: >
添加额外的用户将超出当前限制。请升级您的计划,以确保外部用户能够访问此实例。
warning_user_limit_reached_instructions: >
- 您达到了用户限制(%{current}/%{max}活跃用户)。 请联系sales@openproject.com以升级您的Enterprise edition计划并添加其他用户。
+ 您已达到用户限制(%{current}/%{max} 活跃用户)。请联系 sales@openproject.com 升级您的企业版计划以添加额外用户。
warning_protocol_mismatch_html: >
warning_bar:
@@ -3452,9 +3457,26 @@ zh-CN:
progress:
label_note: "注意:"
modal:
- work_based_help_text: "完成百分比由 \"工时\" 和 \"剩余工时\" 自动得出。"
+ work_based_help_text: "在可能的情况下,每个字段都会根据另外两个字段自动计算。"
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "“% 完成”由 \"工时\" 和 \"剩余工时\" 自动得出。"
status_based_help_text: "完成百分比由工作包状态设定。"
migration_warning_text: "在基于工时的进度计算模式下,完成百分比不能手动设置,而是与工时绑定。现有值已被保留,但无法编辑。请先输入工时。"
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "已清空,因为“剩余工时”为空。"
+ cleared_because_work_is_0h: "已清空,因为 \"工时 \"为 0h。"
+ derived: "源自“工时”和“剩余工时”。"
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "已清空,因为“剩余工时”为空。"
+ derived: "由“剩余工时”和“% 完成”得出"
+ same_as_remaining_work: "设置为与“剩余工时”相同的值。"
+ remaining_hours:
+ cleared_because_work_is_empty: "已清空,因为 \"工时 \"为空。"
+ cleared_because_percent_complete_is_empty: "已清空,因为“% 完成”为空。"
+ decreased_like_work: "减少与 \"工时 \"相同的数额。"
+ derived: "由“工时”和“% 完成”得出"
+ increased_like_work: "增加与 \"工时 \"相同的数额。"
+ same_as_work: "设置为与 \"工时 \"相同的值。"
permissions:
comment: "评论"
comment_description: "可以查看和评论该工作包。"
diff --git a/config/locales/crowdin/zh-TW.yml b/config/locales/crowdin/zh-TW.yml
index 605bce74a79b..2a2764865450 100644
--- a/config/locales/crowdin/zh-TW.yml
+++ b/config/locales/crowdin/zh-TW.yml
@@ -264,8 +264,8 @@ zh-TW:
no_results_title_text: 目前沒有專案
no_results_content_text: 建立新專案
search:
- label: Project name filter
- placeholder: Search by project name
+ label: 查詢專案名稱
+ placeholder: 依專案名稱搜尋
lists:
active: "啟用中的專案"
my: "我的專案"
@@ -1031,10 +1031,10 @@ zh-TW:
assigned_to:
format: "%{message}"
done_ratio:
- does_not_match_work_and_remaining_work: "工作與剩餘工作不匹配"
- cannot_be_set_when_work_is_zero: "工作為零時無法設置"
- must_be_set_when_remaining_work_is_set: "設置剩餘工作時需要"
- must_be_set_when_work_and_remaining_work_are_set: "當設置了工作和剩餘工作時需要。"
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ must_be_set_when_work_and_remaining_work_are_set: "required when Work and Remaining work are set."
inclusion: "必須介於 0 和 100 之間。"
due_date:
not_start_date: "儘管日期是里程碑所必需的,但不是開始日期。"
@@ -1064,15 +1064,17 @@ zh-TW:
does_not_exist: "指定的類別不存在"
estimated_hours:
not_a_number: "不是有效的持續時間。"
- cant_be_inferior_to_remaining_work: "不能低於剩餘工時。"
- must_be_set_when_remaining_work_and_percent_complete_are_set: "設置 剩餘工作 和 已完成% 時必填。"
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "不是有效的持續時間。"
- cant_exceed_work: "不能高於工時。"
- must_be_set_when_work_is_set: "當設置工時需要。"
- must_be_set_when_work_and_percent_complete_are_set: "設置 工作 和 已完成% 時必填。"
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "工作項目處於唯讀狀態,因此無法變更其屬性。"
type:
attributes:
@@ -1611,10 +1613,10 @@ zh-TW:
subproject: "子專案: %{name}"
export:
dialog:
- title: "Export"
- submit: "Export"
+ title: "匯出"
+ submit: "匯出"
format:
- label: "File format"
+ label: "檔案格式"
options:
csv:
label: "CSV"
@@ -1623,57 +1625,58 @@ zh-TW:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
- input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
+ input_label_report: "將欄位新增至屬性表"
+ input_caption_report: "預設情況下,所有在工作項目清單中新增為欄位的屬性都會被選取。長文字欄位在屬性表中不可用,但可以顯示在屬性表下方。"
+ input_caption_table: "預設情況下,所有在工作項目清單中新增為欄位的屬性都會被選取。長文字欄位在以表格匯出中不可用。"
pdf:
export_type:
- label: "PDF export type"
+ label: "PDF 匯出類型"
options:
table:
- label: "Table"
- caption: "Export the work packages list in a table with the desired columns."
+ label: "表格"
+ caption: "匯出所需欄位表格含有工作項目清單"
report:
- label: "Report"
- caption: "Export the work package on a detailed report of all work packages in the list."
+ label: "報表"
+ caption: "在清單中所有工作項目的詳細報告上匯出工作項目。"
gantt:
- label: "Gantt chart"
- caption: "Export the work packages list in a Gantt diagram view."
+ label: "甘特圖"
+ caption: "匯出甘特圖檢視中的工作項目清單。"
include_images:
- label: "Include images"
- caption: "Exclude images to reduce the size of the PDF export."
+ label: "包含圖片"
+ caption: "排除影像以減少 PDF 匯出的大小。"
gantt_zoom_levels:
- label: "Zoom levels"
- caption: "Select what is the zoom level for dates displayed in the chart."
+ label: "縮放等級"
+ caption: "選擇圖表中顯示日期的縮放程度。"
options:
- days: "Days"
- weeks: "Weeks"
- months: "Months"
- quarters: "Quarters"
+ days: "天"
+ weeks: "週"
+ months: "月"
+ quarters: "季度"
column_width:
- label: "Table column width"
+ label: "表格列寬"
options:
- narrow: "Narrow"
- medium: "Medium"
- wide: "Wide"
- very_wide: "Very wide"
+ narrow: "窄"
+ medium: "中"
+ wide: "寬"
+ very_wide: "非常寬"
paper_size:
- label: "Paper size"
- caption: "Depending on the chart size more than one page might be exported."
+ label: "紙張大小"
+ caption: "視圖表大小而定,可能會輸出超過一頁。"
long_text_fields:
- input_caption: "By default all long text fields are selected."
- input_label: "Add long text fields"
- input_placeholder: "Search for long text fields"
- drag_area_label: "Manage long text fields"
+ input_caption: "預設選取所有長文字欄位。"
+ input_label: "新增長文字欄位"
+ input_placeholder: "搜尋長文字欄位"
+ drag_area_label: "新增長文字欄位"
xls:
include_relations:
- label: "Include relations"
- caption: "This option will create a duplicate of each work package for every relation this has with another work package."
+ label: "包含相關連的"
+ caption: "此選項會針對每個工作項目與其他工作項目的關係,建立一個複本。"
include_descriptions:
- label: "Include descriptions"
- caption: "This option will add a description column in raw format."
- your_work_packages_export: "Work packages are being exported"
- succeeded: "Export completed"
- failed: "An error has occurred while trying to export the work packages: %{message}"
+ label: "包含說明"
+ caption: "此選項會在原始格式新增說明欄位。"
+ your_work_packages_export: "工作項目已匯出"
+ succeeded: "匯出完成"
+ failed: "嘗試匯出工作項目時發生錯誤: %{message}"
format:
atom: "Atom"
csv: "CSV"
@@ -2057,7 +2060,7 @@ zh-TW:
label_file_plural: "檔案"
label_filter_add: "新增條件"
label_filter: "篩選條件"
- label_filter_plural: "篩選器"
+ label_filter_plural: "篩選條件"
label_filters_toggle: "顯示/隱藏篩選條件"
label_float: "浮點數"
label_folder: "資料夾"
@@ -2070,7 +2073,7 @@ zh-TW:
label_generate_key: "產生一個金鑰"
label_git_path: ".git 目錄的路徑"
label_greater_or_equal: ">="
- label_group_by: "分組依據"
+ label_group_by: "分類"
label_group_new: "新增群組"
label_group: "群組"
label_group_named: "群組名稱 %{name}"
@@ -2081,7 +2084,7 @@ zh-TW:
label_history: "歷史"
label_hierarchy_leaf: "頁面結構頁"
label_home: "Home"
- label_subject_or_id: "主旨或 id"
+ label_subject_or_id: "名稱或 id"
label_calendar_subscriptions: "訂閱行事曆"
label_identifier: "識別碼"
label_in: "在"
@@ -2124,7 +2127,7 @@ zh-TW:
label_latest_revision_plural: "最新版本"
label_ldap_authentication: "LDAP 認證"
label_learn_more: "了解更多"
- label_less_or_equal: "<="
+ label_less_or_equal: "之後"
label_less_than_ago: "幾天內"
label_link_url: "連結(URL)"
label_list: "清單"
@@ -3075,8 +3078,10 @@ zh-TW:
setting_work_package_done_ratio: "進度計算"
setting_work_package_done_ratio_field: "基於工時"
setting_work_package_done_ratio_status: "基於狀態"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- 在基於工時模式中,"完成百分比"是根據已完成的工作量與總工作量來計算的。在 基於狀態 模式中,每個狀態都有一個與其關聯的完成百分比值。更改狀態將更改完成百分比。
+ In work-based mode, % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived. In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "工作項目屬性"
setting_work_package_startdate_is_adddate: "使用目前日期作為新工作項目的開始日期"
setting_work_packages_projects_export_limit: "工作項目/專案匯出數量限制"
@@ -3458,9 +3463,26 @@ zh-TW:
progress:
label_note: "備註"
modal:
- work_based_help_text: "完成百分比由 \"工時\" 和 \"剩餘工時\" 自動得出。"
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "完成百分比由工作包狀態設定。"
migration_warning_text: "在「基於工時」進度計算模式下,完成百分比無法手動設置,並且與「工時」相關聯。目前手動輸入數值已保留,無法編輯。 請務必輸入「工時」才能進行。"
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "留言"
comment_description: "可查看此工作項目與留言"
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 31a3f8845185..d0d10725d37a 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1116,10 +1116,10 @@ en:
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"
- must_be_set_when_remaining_work_is_set: "Required when Remaining work is set."
- must_be_set_when_work_and_remaining_work_are_set: "Required when Work and Remaining work are set."
+ 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 0h"
+ must_be_set_when_remaining_work_is_set: "required when Remaining work is set."
+ 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: "is not on start date, although this is required for milestones."
@@ -1149,15 +1149,17 @@ en:
does_not_exist: "The specified category does not exist."
estimated_hours:
not_a_number: "is not a valid duration."
- cant_be_inferior_to_remaining_work: "Cannot be lower than Remaining work."
- must_be_set_when_remaining_work_and_percent_complete_are_set: "Required when Remaining work and % Complete are set."
- format: "%{message}"
+ cant_be_inferior_to_remaining_work: "cannot be lower than Remaining work."
+ must_be_set_when_remaining_work_and_percent_complete_are_set: "required when Remaining work and % Complete are set."
remaining_hours:
not_a_number: "is not a valid duration."
- cant_exceed_work: "Cannot be higher than Work."
- must_be_set_when_work_is_set: "Required when Work is set."
- must_be_set_when_work_and_percent_complete_are_set: "Required when Work and % Complete are set."
- format: "%{message}"
+ cant_exceed_work: "cannot be higher than Work."
+ must_be_set_when_work_is_set: "required when Work is set."
+ must_be_set_when_work_and_percent_complete_are_set: "required when Work and % Complete are set."
+ must_be_set_to_zero_hours_when_work_is_set_and_percent_complete_is_100p: >-
+ must be 0h when Work is set and % Complete is 100%.
+ must_be_empty_when_work_is_empty_and_percent_complete_is_100p: >-
+ must be empty when Work is empty and % Complete is 100%.
readonly_status: "The work package is in a readonly status so its attributes cannot be changed."
type:
attributes:
@@ -1764,7 +1766,8 @@ en:
xls:
label: "XLS"
columns:
- input_caption_report: "By default all attributes added as columns in the work package list are selected."
+ input_label_report: "Add columns to attribute table"
+ input_caption_report: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in the attribute table, but can be displayed below it."
input_caption_table: "By default all attributes added as columns in the work package list are selected. Long text fields are not available in table based exports."
pdf:
export_type:
@@ -3280,9 +3283,13 @@ en:
setting_work_package_done_ratio: "Progress calculation"
setting_work_package_done_ratio_field: "Work-based"
setting_work_package_done_ratio_status: "Status-based"
+ setting_work_package_done_ratio_explanation_pre_14_4_without_percent_complete_edition_html: >
+ In work-based mode, % Complete is calculated from how much work is done in relation to total work.
+ In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_done_ratio_explanation_html: >
- In work-based mode, % Complete is calculated from how much work is done in relation to total work.
- In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
+ In work-based mode, % Complete can be freely set to any value.
+ If you optionally enter a value for Work, Remaining work will automatically be derived.
+ In status-based mode, each status has a % Complete value associated with it. Changing status will change % Complete.
setting_work_package_properties: "Work package properties"
setting_work_package_startdate_is_adddate: "Use current date as start date for new work packages"
setting_work_packages_projects_export_limit: "Work packages / Projects export limit"
@@ -3750,9 +3757,26 @@ en:
progress:
label_note: "Note:"
modal:
- work_based_help_text: "% Complete is automatically derived from Work and Remaining work."
+ work_based_help_text: "Each field is automatically calculated from the two others when possible."
+ work_based_help_text_pre_14_4_without_percent_complete_edition: "% Complete is automatically derived from Work and Remaining work."
status_based_help_text: "% Complete is set by work package status."
migration_warning_text: "In work-based progress calculation mode, % Complete cannot be manually set and is tied to Work. The existing value has been kept but cannot be edited. Please input Work first."
+ derivation_hints:
+ done_ratio:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ cleared_because_work_is_0h: "Cleared because Work is 0h."
+ derived: "Derived from Work and Remaining work."
+ estimated_hours:
+ cleared_because_remaining_work_is_empty: "Cleared because Remaining work is empty."
+ derived: "Derived from Remaining work and % Complete."
+ same_as_remaining_work: "Set to same value as Remaining work."
+ remaining_hours:
+ cleared_because_work_is_empty: "Cleared because Work is empty."
+ cleared_because_percent_complete_is_empty: "Cleared because % Complete is empty."
+ decreased_like_work: "Decreased by the same amount as Work."
+ derived: "Derived from Work and % Complete."
+ increased_like_work: "Increased by the same amount as Work."
+ same_as_work: "Set to same value as Work."
permissions:
comment: "Comment"
comment_description: "Can view and comment this work package."
diff --git a/config/locales/js-en.yml b/config/locales/js-en.yml
index 98891fd45968..4cc9ceb6ad47 100644
--- a/config/locales/js-en.yml
+++ b/config/locales/js-en.yml
@@ -160,6 +160,8 @@ en:
description_select_work_package: "Select work package #%{id}"
description_subwork_package: "Child of work package #%{id}"
editor:
+ revisions: "Show local modifications"
+ no_revisions: "No local modifications found"
preview: "Toggle preview mode"
source_code: "Toggle Markdown source mode"
error_saving_failed: "Saving the document failed with the following error: %{error}"
@@ -306,12 +308,17 @@ en:
Are you sure you want to continue?
work_packages_settings:
- warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html: >-
Changing progress calculation mode from status-based to work-based will make
% Complete a non-editable field whose value is derived from Work
and Remaining work. Existing values for % Complete are preserved.
If values for Work and Remaining work were not present, they
will be required in order to change % Complete.
+ warning_progress_calculation_mode_change_from_status_to_field_html: >-
+ Changing progress calculation mode from status-based to work-based will make
+ the % Complete field freely editable. If you optionally enter values
+ for Work or Remaining work, they will also be linked to % Complete.
+ Changing Remaining work can then update % Complete.
warning_progress_calculation_mode_change_from_field_to_status_html: >-
Changing progress calculation mode from work-based to status-based will result
in all existing % Complete values to be lost and replaced with values
@@ -451,6 +458,7 @@ en:
label_create: "Create"
label_create_work_package: "Create new work package"
label_created_by: "Created by"
+ label_current: "current"
label_date: "Date"
label_date_with_format: "Enter the %{date_attribute} using the following format: %{format}"
label_deactivate: "Deactivate"
@@ -1270,6 +1278,9 @@ en:
one: "1 day"
other: "%{count} days"
zero: "0 days"
+ word:
+ one: "1 word"
+ other: "%{count} words"
zen_mode:
button_activate: "Activate zen mode"
button_deactivate: "Deactivate zen mode"
diff --git a/config/routes.rb b/config/routes.rb
index a404cc0c565c..b5c8414b26fa 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -426,9 +426,7 @@
resource :custom_style, only: %i[update show create], path: "design"
- resources :attribute_help_texts, only: %i(index new create edit update destroy) do
- get :upsale, to: "attribute_help_texts#upsale", on: :collection, as: :upsale
- end
+ resources :attribute_help_texts, only: %i(index new create edit update destroy)
resources :groups, except: %i[show] do
member do
diff --git a/docker/ci/entrypoint.sh b/docker/ci/entrypoint.sh
index 6c41d9e9cdeb..d4dc280c9223 100755
--- a/docker/ci/entrypoint.sh
+++ b/docker/ci/entrypoint.sh
@@ -92,7 +92,7 @@ backend_stuff() {
}
frontend_stuff() {
- execute_quiet "DATABASE_URL=nulldb://db time bin/rails openproject:plugins:register_frontend assets:precompile"
+ execute_quiet "OPENPROJECT_ANGULAR_BUILD=fast DATABASE_URL=nulldb://db time bin/rails openproject:plugins:register_frontend assets:precompile"
execute_quiet "cp -rp config/frontend_assets.manifest.json public/assets/frontend_assets.manifest.json"
}
diff --git a/docker/pullpreview/docker-compose.yml b/docker/pullpreview/docker-compose.yml
index 7c9664a60635..f6a3bb409c39 100644
--- a/docker/pullpreview/docker-compose.yml
+++ b/docker/pullpreview/docker-compose.yml
@@ -14,7 +14,7 @@ x-defaults: &defaults
build:
context: .
args:
- OPENPROJECT_ANGULAR_UGLIFY: "false"
+ OPENPROJECT_ANGULAR_BUILD: "fast"
restart: unless-stopped
env_file:
- .env.pullpreview
diff --git a/docs/README.md b/docs/README.md
index 84d3456a947b..e7dff7774c12 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -39,7 +39,7 @@ Please see our [Use Cases section](./use-cases/) for detailed how-to guides and
## Development
-* [Full development environment for developers on Ubuntu](./development/development-environment-ubuntu) and [Mac OS X](./development/development-environment-osx)
+* [Full development environment for developers](./development/development-environment)
* [Developing plugins](./development/create-openproject-plugin)
* [Developing OmniAuth Plugins](./development/create-omniauth-plugin)
* [Running tests](./development/running-tests)
diff --git a/docs/api/apiv3/components/examples/work_package_create_only_subject.yml b/docs/api/apiv3/components/examples/work_package_create_only_subject.yml
new file mode 100644
index 000000000000..39f3795735f8
--- /dev/null
+++ b/docs/api/apiv3/components/examples/work_package_create_only_subject.yml
@@ -0,0 +1,5 @@
+description: |-
+ A request body to create a work package with only a subject. This can only be used, if the project context is already
+ given in the path. All other values will fall back to defaults.
+value:
+ subject: Replace GNK power droids
diff --git a/docs/api/apiv3/components/examples/work_package_create_valid.yml b/docs/api/apiv3/components/examples/work_package_create_valid.yml
new file mode 100644
index 000000000000..0e251cf18537
--- /dev/null
+++ b/docs/api/apiv3/components/examples/work_package_create_valid.yml
@@ -0,0 +1,20 @@
+description: |-
+ A valid request body to create or edit a work package with a couple of properties.
+value:
+ subject: Install Dromund Kass planetary shield
+ description:
+ format: markdown
+ raw: |-
+ # TODO
+
+ The planetary shield of Dromund Kass needs to be installed to protect the planet from orbital bombardment.
+ startDate: '2877-07-21'
+ duration: P1337D
+ estimatedTime: P1Y5DT13H
+ ignoreNonWorkingDays: true
+ project:
+ href: /api/v3/projects/42
+ type:
+ href: /api/v3/types/13
+ status:
+ href: /api/v3/statuses/2
diff --git a/docs/api/apiv3/components/examples/work_package_edit_subject.yml b/docs/api/apiv3/components/examples/work_package_edit_subject.yml
new file mode 100644
index 000000000000..ec3c65b384eb
--- /dev/null
+++ b/docs/api/apiv3/components/examples/work_package_edit_subject.yml
@@ -0,0 +1,4 @@
+description: |-
+ A request body to edit a work package's subject.
+value:
+ subject: Replace GNK power droids
diff --git a/docs/api/apiv3/components/schemas/work_package_form_model.yml b/docs/api/apiv3/components/schemas/work_package_form_model.yml
new file mode 100644
index 000000000000..e9c957f26e6b
--- /dev/null
+++ b/docs/api/apiv3/components/schemas/work_package_form_model.yml
@@ -0,0 +1,53 @@
+# Schema: WorkPackageFormModel
+---
+type: object
+description: |-
+ The work package creation form. This object is returned, whenever a work package form endpoint is called. It contains
+ an allowed payload definition, the full schema and any validation errors on the current request body.
+properties:
+ _type:
+ type: string
+ enum:
+ - Form
+ _embedded:
+ type: object
+ properties:
+ payload:
+ $ref: './work_package_write_model.yml'
+ schema:
+ $ref: './work_package_schema_model.yml'
+ validationErrors:
+ type: object
+ description: |-
+ All validation errors, where the key is the faulty property. The object is empty, if the request body is
+ valid.
+ _links:
+ type: object
+ properties:
+ self:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ This form endpoint
+
+ **Resource** : Form
+ validate:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ The endpoint for validating the request bodies. Often referring to this very form endpoint.
+ previewMarkup:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ Renders a markup preview for the work package form.
+ customFields:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ Link to the HTML page for the custom field definitions.
+ configureForm:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ Link to the HTML page for the form configuration.
diff --git a/docs/api/apiv3/components/schemas/work_package_patch_model.yml b/docs/api/apiv3/components/schemas/work_package_patch_model.yml
index fc5aae1d604f..9c9690ac3edc 100644
--- a/docs/api/apiv3/components/schemas/work_package_patch_model.yml
+++ b/docs/api/apiv3/components/schemas/work_package_patch_model.yml
@@ -1,176 +1,11 @@
# Schema: WorkPackagePatchModel
---
-type: object
-required:
- - lockVersion
-properties:
- lockVersion:
- type: integer
- description: The version of the item as used for optimistic locking
- subject:
- type: string
- description: Work package subject
- description:
- allOf:
- - $ref: "./formattable.yml"
- - description: The work package description
- scheduleManually:
- type: boolean
- description: If false (default) schedule automatically.
- startDate:
- type: string
- format: date
- description: Scheduled beginning of a work package
- dueDate:
- type: string
- format: date
- description: Scheduled end of a work package
- date:
- type: string
- format: date
- description: Date on which a milestone is achieved
- estimatedTime:
- type: string
- format: duration
- description: Time a work package likely needs to be completed excluding its descendants
- ignoreNonWorkingDays:
- type: boolean
- description: |-
- **(NOT IMPLEMENTED)** When scheduling, whether or not to ignore the non working days being defined.
- A work package with the flag set to true will be allowed to be scheduled to a non working day.
- readOnly: true
- spentTime:
- type: string
- format: duration
- description: |-
- The time booked for this work package by users working on it
-
- # Conditions
-
- **Permission** view time entries
- readOnly: true
- percentageDone:
- type: integer
- description: Amount of total completion for a work package
- maximum: 100
- createdAt:
- type: string
- format: date-time
- description: Time of creation
- readOnly: true
- updatedAt:
- type: string
- format: date-time
- description: Time of the most recent change to the work package
- readOnly: true
- _links:
- type: object
+allOf:
+ - $ref: './work_package_write_model.yml'
+ - type: object
+ required:
+ - lockVersion
properties:
- assignee:
- allOf:
- - $ref: "./link.yml"
- - description: |-
- The person that is intended to work on the work package
-
- **Resource**: User
- budget:
- allOf:
- - $ref: "./link.yml"
- - description: |-
- The budget this work package is associated to
-
- **Resource**: Budget
-
- # Conditions
-
- **Permission** view cost objects
- category:
- allOf:
- - $ref: "./link.yml"
- - description: |-
- The category of the work package
-
- **Resource**: Category
- parent:
- allOf:
- - $ref: "./link.yml"
- - description: |-
- Parent work package
-
- **Resource**: WorkPackage
- priority:
- allOf:
- - $ref: "./link.yml"
- - description: |-
- The priority of the work package
-
- **Resource**: Priority
- project:
- allOf:
- - $ref: "./link.yml"
- - description: |-
- The project to which the work package belongs
-
- **Resource**: Project
- responsible:
- allOf:
- - $ref: "./link.yml"
- - description: |-
- The person that is responsible for the overall outcome
-
- **Resource**: User
- status:
- allOf:
- - $ref: "./link.yml"
- - description: |-
- The current status of the work package
-
- **Resource**: Status
- type:
- allOf:
- - $ref: "./link.yml"
- - description: |-
- The type of the work package
-
- **Resource**: Type
- version:
- allOf:
- - $ref: "./link.yml"
- - description: |-
- The version associated to the work package
-
- **Resource**: Version
-
-examples:
- - subject: Upgrade hangar 25
- lockVersion: 0
- description:
- format: markdown
- raw: we need more place for new TIE Advanced
- html: "
we need more place for new TIE Advanced
"
- scheduleManually: false
- _links:
- responsible:
- href: "/api/v3/users/23"
- title: Palpatine
- assignee:
- href: "/api/v3/users/33"
- title: Darth Vader
- priority:
- href: "/api/v3/priorities/2"
- title: Normal
- project:
- href: "/api/v3/projects/1"
- title: Galactic Conquest
- status:
- href: "/api/v3/statuses/1"
- title: New
- type:
- href: "/api/v3/types/11"
- title: DeathStarUpgrades
- version:
- href: "/api/v3/versions/1"
- title: Version 1
- parent:
- href: "/api/v3/work_packages/1298"
- title: ct'hulhu f'tagn
+ lockVersion:
+ type: integer
+ description: The version of the item as used for optimistic locking
diff --git a/docs/api/apiv3/components/schemas/work_package_schema_model.yml b/docs/api/apiv3/components/schemas/work_package_schema_model.yml
new file mode 100644
index 000000000000..c900a77b087a
--- /dev/null
+++ b/docs/api/apiv3/components/schemas/work_package_schema_model.yml
@@ -0,0 +1,92 @@
+# Schema: WorkPackageSchemaModel
+---
+type: object
+description: |-
+ A schema for a work package. This schema defines the attributes of a work package.
+
+ TODO: Incomplete, needs to be updated with the real behaviour of schemas (when does which attribute appear?).
+properties:
+ _type:
+ type: string
+ enum:
+ - Schema
+ _dependencies:
+ type: array
+ items:
+ type: string
+ description: TBD
+ _attributeGroups:
+ type: array
+ items:
+ type: object
+ description: TBD (WorkPackageFormAttributeGroup)
+ lockVersion:
+ $ref: './schema_property_model.yml'
+ id:
+ $ref: './schema_property_model.yml'
+ subject:
+ $ref: './schema_property_model.yml'
+ description:
+ $ref: './schema_property_model.yml'
+ duration:
+ $ref: './schema_property_model.yml'
+ scheduleManually:
+ $ref: './schema_property_model.yml'
+ ignoreNonWorkingDays:
+ $ref: './schema_property_model.yml'
+ startDate:
+ $ref: './schema_property_model.yml'
+ dueDate:
+ $ref: './schema_property_model.yml'
+ derivedStartDate:
+ $ref: './schema_property_model.yml'
+ derivedDueDate:
+ $ref: './schema_property_model.yml'
+ estimatedTime:
+ $ref: './schema_property_model.yml'
+ derivedEstimatedTime:
+ $ref: './schema_property_model.yml'
+ remainingTime:
+ $ref: './schema_property_model.yml'
+ derivedRemainingTime:
+ $ref: './schema_property_model.yml'
+ percentageDone:
+ $ref: './schema_property_model.yml'
+ derivedPercentageDone:
+ $ref: './schema_property_model.yml'
+ readonly:
+ $ref: './schema_property_model.yml'
+ createdAt:
+ $ref: './schema_property_model.yml'
+ updatedAt:
+ $ref: './schema_property_model.yml'
+ author:
+ $ref: './schema_property_model.yml'
+ project:
+ $ref: './schema_property_model.yml'
+ parent:
+ $ref: './schema_property_model.yml'
+ assignee:
+ $ref: './schema_property_model.yml'
+ responsible:
+ $ref: './schema_property_model.yml'
+ type:
+ $ref: './schema_property_model.yml'
+ status:
+ $ref: './schema_property_model.yml'
+ category:
+ $ref: './schema_property_model.yml'
+ version:
+ $ref: './schema_property_model.yml'
+ priority:
+ $ref: './schema_property_model.yml'
+ _links:
+ type: object
+ properties:
+ self:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ This work package schema
+
+ **Resource**: Schema
diff --git a/docs/api/apiv3/components/schemas/work_package_schemas_model.yml b/docs/api/apiv3/components/schemas/work_package_schemas_model.yml
deleted file mode 100644
index 4a7dd065c0a8..000000000000
--- a/docs/api/apiv3/components/schemas/work_package_schemas_model.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-# Schema: Work_Package_SchemasModel
----
-type: object
-example:
- _links:
- self:
- href: "/api/v3/work_packages/schemas"
- total: 5
- count: 2
- _type: Collection
- _embedded:
- elements:
- - _type: Schema...
- _links:
- self:
- href: "/api/v3/work_packages/schemas/13-1"
- - _type: Schema...
- _links:
- self:
- href: "/api/v3/work_packages/schemas/7-6"
diff --git a/docs/api/apiv3/components/schemas/work_package_write_model.yml b/docs/api/apiv3/components/schemas/work_package_write_model.yml
new file mode 100644
index 000000000000..f0893ae3ff4f
--- /dev/null
+++ b/docs/api/apiv3/components/schemas/work_package_write_model.yml
@@ -0,0 +1,118 @@
+# Schema: WorkPackageWriteModel
+---
+type: object
+description: |-
+ This model is used for creating and updating work packages. It can also be used for validation against the work
+ package form endpoints.
+properties:
+ subject:
+ type: string
+ description: Work package subject
+ description:
+ allOf:
+ - $ref: './formattable.yml'
+ - description: The work package description
+ scheduleManually:
+ type: boolean
+ description: If false (default) schedule automatically.
+ startDate:
+ type:
+ - 'string'
+ - 'null'
+ format: date
+ description: Scheduled beginning of a work package
+ dueDate:
+ type:
+ - 'string'
+ - 'null'
+ format: date
+ description: Scheduled end of a work package
+ estimatedTime:
+ type:
+ - 'string'
+ - 'null'
+ format: duration
+ description: Time a work package likely needs to be completed excluding its descendants
+ duration:
+ type:
+ - 'string'
+ - 'null'
+ format: duration
+ description: |-
+ The amount of time in hours the work package needs to be completed. This value must be bigger or equal to `P1D`,
+ and any the value will get floored to the nearest day.
+
+ The duration has no effect, unless either a start date or a due date is set.
+
+ Not available for milestone type of work packages.
+ ignoreNonWorkingDays:
+ type: boolean
+ description: |-
+ When scheduling, whether or not to ignore the non working days being defined.
+ A work package with the flag set to true will be allowed to be scheduled to a non working day.
+ _links:
+ type: object
+ properties:
+ category:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ The category of the work package
+
+ **Resource**: Category
+ type:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ The type of the work package
+
+ **Resource**: Type
+ priority:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ The priority of the work package
+
+ **Resource**: Priority
+ project:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ The project to which the work package belongs
+
+ **Resource**: Project
+ status:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ The current status of the work package
+
+ **Resource**: Status
+ responsible:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ The person that is responsible for the overall outcome
+
+ **Resource**: User
+ assignee:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ The person that is intended to work on the work package
+
+ **Resource**: User
+ version:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ The version associated to the work package
+
+ **Resource**: Version
+ parent:
+ allOf:
+ - $ref: './link.yml'
+ - description: |-
+ Parent work package
+
+ **Resource**: WorkPackage
diff --git a/docs/api/apiv3/openapi-spec.yml b/docs/api/apiv3/openapi-spec.yml
index f03d67d66aec..c9ffc28257e3 100644
--- a/docs/api/apiv3/openapi-spec.yml
+++ b/docs/api/apiv3/openapi-spec.yml
@@ -567,6 +567,12 @@ components:
$ref: "./components/examples/view_work_packages_table.yml"
ViewTeamPlanner:
$ref: "./components/examples/view_team_planner.yml"
+ WorkPackageCreateOnlySubject:
+ $ref: "./components/examples/work_package_create_only_subject.yml"
+ WorkPackageCreateValid:
+ $ref: "./components/examples/work_package_create_valid.yml"
+ WorkPackageEditSubject:
+ $ref: "./components/examples/work_package_edit_subject.yml"
responses:
InvalidQuery:
@@ -867,16 +873,20 @@ components:
"$ref": "./components/schemas/week_day_write_model.yml"
Wiki_PageModel:
"$ref": "./components/schemas/wiki_page_model.yml"
- Work_PackageModel:
+ WorkPackageModel:
"$ref": "./components/schemas/work_package_model.yml"
- Work_Package_SchemasModel:
- "$ref": "./components/schemas/work_package_schemas_model.yml"
+ WorkPackageFormModel:
+ "$ref": "./components/schemas/work_package_form_model.yml"
+ WorkPackagePatchModel:
+ "$ref": "./components/schemas/work_package_patch_model.yml"
+ WorkPackageSchemaModel:
+ "$ref": "./components/schemas/work_package_schema_model.yml"
+ WorkPackageWriteModel:
+ "$ref": "./components/schemas/work_package_write_model.yml"
Work_Package_activitiesModel:
"$ref": "./components/schemas/work_package_activities_model.yml"
Work_PackagesModel:
"$ref": "./components/schemas/work_packages_model.yml"
- WorkPackagePatchModel:
- "$ref": "./components/schemas/work_package_patch_model.yml"
securitySchemes:
BasicAuth:
type: http
diff --git a/docs/api/apiv3/paths/project_work_packages_form.yml b/docs/api/apiv3/paths/project_work_packages_form.yml
index 57c6280d48e2..382d36624080 100644
--- a/docs/api/apiv3/paths/project_work_packages_form.yml
+++ b/docs/api/apiv3/paths/project_work_packages_form.yml
@@ -1,20 +1,38 @@
# /api/v3/projects/{id}/work_packages/form
---
post:
+ summary: Form for creating Work Packages in a Project
+ operationId: form_create_work_package_in_project
+ tags:
+ - Work Packages
+ description: |-
+ This endpoint allows you to validation a new work package creation body in a specific project. It works similarly
+ to the `/api/v3/work_packages/form` endpoint, but already specifies the work package's project in the path, so that
+ it does not have to be defined in the request body.
parameters:
- - description: ID of the project in which the work package will be created
- example: '1'
- in: path
- name: id
- required: true
- schema:
- type: integer
+ - name: id
+ description: ID of the project in which the work package will be created
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: '1'
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '../components/schemas/work_package_write_model.yml'
+ examples:
+ 'Minimal example':
+ $ref: '../components/examples/work_package_create_only_subject.yml'
+ 'Valid example':
+ $ref: '../components/examples/work_package_create_valid.yml'
responses:
'200':
description: OK
- headers: {}
- tags:
- - Work Packages
- description: ''
- operationId: Work_Package_Create_Form_For_Project
- summary: Work Package Create Form For Project
+ content:
+ application/json:
+ schema:
+ $ref: '../components/schemas/work_package_form_model.yml'
+ '415':
+ $ref: '../components/responses/unsupported_media_type.yml'
diff --git a/docs/api/apiv3/paths/work_package_form.yml b/docs/api/apiv3/paths/work_package_form.yml
index c63fadd615d0..911944a29c33 100644
--- a/docs/api/apiv3/paths/work_package_form.yml
+++ b/docs/api/apiv3/paths/work_package_form.yml
@@ -1,68 +1,59 @@
# /api/v3/work_packages/{id}/form
---
post:
- summary: Work Package Edit Form
- operationId: Work_Package_Edit_Form
+ summary: Form for editing a Work Package
+ operationId: form_edit_work_package
tags:
- Work Packages
description: |-
- When calling this endpoint, the client provides a single object containing the properties and links to be edited, in the body.
+ When calling this endpoint, the client provides a single object containing the properties and links to be
+ edited, in the body. The input is validated and a schema response is returned. If the validation errors of the
+ response is empty, the same payload can be used to edit the work package.
- Note that it is only allowed to provide properties or links supporting the write operation.
+ Only the properties of the work package write model are allowed to set on a work package on editing.
- When setting start date, finish date, and duration together, their correctness will be checked and a 422 error will be returned if one value does not match with the two others. You can make the server compute a value: set only two values in the request and the third one will be computed and returned in the response. For instance, when sending `{ "startDate": "2022-08-23", duration: "P2D" }`, the response will include `{ "dueDate": "2022-08-24" }`.
+ When setting start date, finish date, and duration together, their correctness will be checked and a validation
+ error will be returned if one value does not match with the two others. You can make the server compute a value:
+ set only two values in the request and the third one will be computed and returned in the response. For instance,
+ when sending `{ "startDate": "2022-08-23", duration: "P2D" }`, the response will
+ include `{ "dueDate": "2022-08-24" }`.
requestBody:
content:
application/json:
schema:
- "$ref": "../components/schemas/work_package_model.yml"
+ $ref: '../components/schemas/work_package_write_model.yml'
+ examples:
+ 'Changing subject':
+ $ref: '../components/examples/work_package_edit_subject.yml'
parameters:
- - description: ID of the work package being modified
- example: '1'
- in: path
- name: id
- required: true
- schema:
- type: integer
+ - name: id
+ description: ID of the work package being modified
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: '1'
responses:
'200':
description: OK
- headers: {}
- '403':
content:
- application/hal+json:
+ application/json:
schema:
- $ref: "../components/schemas/error_response.yml"
- examples:
- response:
- value:
- _type: Error
- errorIdentifier: urn:openproject-org:api:v3:errors:MissingPermission
- message: You are not allowed to edit the specified work package.
+ $ref: '../components/schemas/work_package_form_model.yml'
+ '404':
description: |-
- Returned if the client does not have sufficient permissions.
+ Returned if the work package does not exist or the client does not have sufficient permissions to see it.
- **Required permission:** edit work package, assign version, change work package status, manage subtasks or move work package
-
- *Note that you will only receive this error, if you are at least allowed to see the corresponding work package.*
- headers: {}
- '404':
+ **Required permission:** view work package
content:
application/hal+json:
schema:
- $ref: "../components/schemas/error_response.yml"
+ $ref: '../components/schemas/error_response.yml'
examples:
response:
value:
_type: Error
errorIdentifier: urn:openproject-org:api:v3:errors:NotFound
message: The specified work package does not exist.
- description: |-
- Returned if the work package does not exist or the client does not have sufficient permissions to see it.
-
- **Required permission:** view work package
- headers: {}
- '406':
- $ref: "../components/responses/missing_content_type.yml"
'415':
- $ref: "../components/responses/unsupported_media_type.yml"
+ $ref: '../components/responses/unsupported_media_type.yml'
diff --git a/docs/api/apiv3/paths/work_packages_form.yml b/docs/api/apiv3/paths/work_packages_form.yml
index a9c2d3541957..4998b9a41810 100644
--- a/docs/api/apiv3/paths/work_packages_form.yml
+++ b/docs/api/apiv3/paths/work_packages_form.yml
@@ -1,12 +1,36 @@
# /api/v3/work_packages/form
---
post:
+ summary: Form for creating a Work Package
+ operationId: form_create_work_package
+ tags:
+ - Work Packages
+ description: |-
+ When calling this endpoint, the client provides a single object containing the properties and links to be
+ created, in the body. The input is validated and a schema response is returned. If the validation errors of the
+ response is empty, the same payload can be used to create a work package.
+
+ Only the properties of the work package write model are allowed to set on a work package on creation.
+
+ When setting start date, finish date, and duration together, their correctness will be checked and a validation
+ error will be returned if one value does not match with the two others. You can make the server compute a value:
+ set only two values in the request and the third one will be computed and returned in the response. For instance,
+ when sending `{ "startDate": "2022-08-23", duration: "P2D" }`, the response will
+ include `{ "dueDate": "2022-08-24" }`.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '../components/schemas/work_package_write_model.yml'
+ examples:
+ 'Valid creation':
+ $ref: '../components/examples/work_package_create_valid.yml'
responses:
'200':
description: OK
- headers: {}
- tags:
- - Work Packages
- description: ''
- operationId: Work_Package_Create_Form
- summary: Work Package Create Form
+ content:
+ application/json:
+ schema:
+ $ref: '../components/schemas/work_package_form_model.yml'
+ '415':
+ $ref: '../components/responses/unsupported_media_type.yml'
diff --git a/docs/api/apiv3/paths/work_packages_schemas.yml b/docs/api/apiv3/paths/work_packages_schemas.yml
index 623071ebddd1..994b8d003542 100644
--- a/docs/api/apiv3/paths/work_packages_schemas.yml
+++ b/docs/api/apiv3/paths/work_packages_schemas.yml
@@ -1,22 +1,31 @@
# /api/v3/work_packages/schemas/
---
get:
+ summary: List Work Package Schemas
+ operationId: list_work_package_schemas
+ tags:
+ - Work Packages
+ description: |-
+ List all work package schemas that match the given filters. This endpoint does not return a successful response,
+ if no filter is given.
parameters:
- - description: |-
- JSON specifying filter conditions.
- Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/) endpoint. Currently supported filters are:
-
- + id: The schema's id
-
- Schema id has the form `project_id-work_package_type_id`.
- example: '[{ "id": { "operator": "=", "values": ["12-1", "14-2"] } }]'
- in: query
- name: filters
- required: true
- schema:
- type: string
+ - name: filters
+ description: |-
+ JSON specifying filter conditions.
+ Accepts the same format as returned by the [queries](https://www.openproject.org/docs/api/endpoints/queries/)
+ endpoint. Currently supported filters are:
+
+ + id: The schema's id
+
+ Schema id has the form `project_id-work_package_type_id`.
+ in: query
+ required: true
+ schema:
+ type: string
+ example: '[{ "id": { "operator": "=", "values": ["12-1", "14-2"] } }]'
responses:
'200':
+ description: OK
content:
application/hal+json:
examples:
@@ -24,24 +33,20 @@ get:
value:
_embedded:
elements:
- - _links:
- self:
- href: "/api/v3/work_packages/schemas/13-1"
- _type: Schema...
- - _links:
- self:
- href: "/api/v3/work_packages/schemas/7-6"
- _type: Schema...
+ - _links:
+ self:
+ href: "/api/v3/work_packages/schemas/13-1"
+ _type: Schema...
+ - _links:
+ self:
+ href: "/api/v3/work_packages/schemas/7-6"
+ _type: Schema...
_links:
self:
href: "/api/v3/work_packages/schemas"
_type: Collection
count: 2
total: 5
- schema:
- "$ref": "../components/schemas/work_package_schemas_model.yml"
- description: OK
- headers: {}
'400':
$ref: "../components/responses/invalid_request_body.yml"
'403':
@@ -59,9 +64,4 @@ get:
Returned if the client does not have sufficient permissions.
**Required permission:** View work packages in any project.
- headers: {}
- tags:
- - Work Packages
- description: List work package schemas.
- operationId: List_Work_Package_Schemas
- summary: List Work Package Schemas
+ headers: { }
diff --git a/docs/api/apiv3/tags/users.yml b/docs/api/apiv3/tags/users.yml
index 9a1eabdcfc82..f047b64d03c6 100644
--- a/docs/api/apiv3/tags/users.yml
+++ b/docs/api/apiv3/tags/users.yml
@@ -1,4 +1,5 @@
---
+name: Users
description: |-
## Actions
@@ -7,37 +8,37 @@ description: |-
| lock | Restrict the user from logging in and performing any actions | not locked; **Permission**: Administrator |
| show | Link to the OpenProject user page (HTML) | |
| unlock | Allow a locked user to login and act again | locked; **Permission**: Administrator |
- | updateImmediately | Updates the user's attributes. | **Permission**: Administrator, manage_user global permission |
+ | updateImmediately | Updates the user's attributes. | **Permission**: Administrator, manage_user global permission |
| delete | Permanently remove a user from the instance | **Permission**: Administrator, self-delete |
## Linked Properties
| Link | Description | Type | Constraints | Supported operations | Condition |
- |:-----------:|-------------------------------------------------------------- | ------------- | --------------------- | -------------------- | ----------------------------------------- |
+ |:-----------:|--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | --------------------- | -------------------- | ----------------------------------------- |
| self | This user | User | not null | READ | |
- | auth_source | Link to the user's auth source (endpoint not yet implemented) | LdapAuthSource | | READ / WRITE | **Permission**: Administrator |
+ | auth_source | Link to the user's auth source (endpoint not yet implemented) | LdapAuthSource | | READ / WRITE | **Permission**: Administrator |
| members | Link to collection of all the user's memberships. The list will only include the memberships in projects in which the requesting user has the necessary permissions. | MemberCollection | | READ | **Permission**: view members or manage members in any project |
Depending on custom fields defined for users, additional links might exist.
## Local Properties
- | Property | Description | Type | Constraints | Supported operations | Condition |
- | :----------: | --------------------------------------------------------- | -------- | ---------------------------------------------------- | -------------------- | ----------------------------------------------------------- |
- | id | User's id | Integer | x > 0 | READ | |
+ | Property | Description | Type | Constraints | Supported operations | Condition |
+ | :----------: | --------------------------------------------------------- | -------- | ---------------------------------------------------- | -------------------- | ----------------------------------------------------------- |
+ | id | User's id | Integer | x > 0 | READ | |
| login | User's login name | String | unique, 256 max length | READ / WRITE | **Permission**: Administrator, manage_user global permission |
| firstName | User's first name | String | 30 max length | READ / WRITE | **Permission**: Administrator, manage_user global permission |
| lastName | User's last name | String | 30 max length | READ / WRITE | **Permission**: Administrator, manage_user global permission |
- | name | User's full name, formatting depends on instance settings | String | | READ | |
+ | name | User's full name, formatting depends on instance settings | String | | READ | |
| email | User's email address | String | unique, 60 max length | READ / WRITE | E-Mail address not hidden, **Permission**: Administrator, manage_user global permission |
- | admin | Flag indicating whether or not the user is an admin | Boolean | in: [true, false] | READ / WRITE | **Permission**: Administrator |
- | avatar | URL to user's avatar | Url | | READ | |
- | status | The current activation status of the user (see below) | String | in: ["active", "registered", "locked", "invited"] | READ | |
+ | admin | Flag indicating whether or not the user is an admin | Boolean | in: [true, false] | READ / WRITE | **Permission**: Administrator |
+ | avatar | URL to user's avatar | Url | | READ | |
+ | status | The current activation status of the user (see below) | String | in: ["active", "registered", "locked", "invited"] | READ | |
| language | User's language | String | ISO 639-1 | READ / WRITE | **Permission**: Administrator, manage_user global permission |
- | password | User's password for the default password authentication | String | | WRITE | **Permission**: Administrator |
- | identity_url | User's identity_url for OmniAuth authentication | String | | READ / WRITE | **Permission**: Administrator |
- | createdAt | Time of creation | DateTime | | READ | |
- | updatedAt | Time of the most recent change to the user | DateTime | | READ | |
+ | password | User's password for the default password authentication | String | | WRITE | **Permission**: Administrator |
+ | identity_url | User's identity_url for OmniAuth authentication | String | | READ / WRITE | **Permission**: Administrator |
+ | createdAt | Time of creation | DateTime | | READ | |
+ | updatedAt | Time of the most recent change to the user | DateTime | | READ | |
Depending on custom fields defined for users, additional properties might exist.
@@ -65,4 +66,3 @@ description: |-
users except for admins or the user themselves.
Please note that custom fields are not yet supported by the api although the backend supports them.
-name: Users
diff --git a/docs/development/README.md b/docs/development/README.md
index aee88f742be9..5b091adb4e83 100644
--- a/docs/development/README.md
+++ b/docs/development/README.md
@@ -96,10 +96,7 @@ If you want to contribute to OpenProject, please make sure to accept our Contrib
## Additional resources
-* [Development environment for Ubuntu 18.04](development-environment-ubuntu)
-* [Development environment for Mac OS X](development-environment-osx)
-* [Development environment using docker](development-environment-docker)
-
+* [Development environment](development-environment)
* [Developing Plugins](create-openproject-plugin)
* [Running Tests](running-tests)
* [API Documentation](../api)
diff --git a/docs/development/concepts/README.md b/docs/development/concepts/README.md
index e41d5fc66eda..784312f9d056 100644
--- a/docs/development/concepts/README.md
+++ b/docs/development/concepts/README.md
@@ -12,14 +12,14 @@ This guide will introduce some concepts and give you a big picture of the develo
Please choose an area that you would like to read about:
-| Topic | Content |
-|------------------------------------------------------|:------------------------------------------------------------------------------|
-| [Application architecture](application-architecture) | An introduction of the application architecture used at OpenProject. |
-| [State management](state-management) | How does the frontend handle state and react to changes? |
-| [HAL resources](hal-resources) | What are HAL resources and how are they used in the frontend? |
-| [Permissions](permissions) | How are roles and permissions handled in OpenProject code? |
-| [Translations](translations) | How are translations used and built? |
-| [Resource schemas](resource-schemas) | What is a schema and how is it tied to an editable resource? |
-| [Resource changesets](resource-changesets) | How is change tracked to resources in the frontend? How to save the changes. |
-| [Inline editing](inline-editing) | How does inline editing and the edit field functionality work in OpenProject? |
-| [Queries and QuerySpace](queries) | What is the Query API concept and how is it used in the frontend? |
+| Topic | Content |
+|---------------------------------------------------------|:------------------------------------------------------------------------------|
+| [Application architecture](../application-architecture) | An introduction of the application architecture used at OpenProject. |
+| [State management](state-management) | How does the frontend handle state and react to changes? |
+| [HAL resources](hal-resources) | What are HAL resources and how are they used in the frontend? |
+| [Permissions](permissions) | How are roles and permissions handled in OpenProject code? |
+| [Translations](translations) | How are translations used and built? |
+| [Resource schemas](resource-schemas) | What is a schema and how is it tied to an editable resource? |
+| [Resource changesets](resource-changesets) | How is change tracked to resources in the frontend? How to save the changes. |
+| [Inline editing](inline-editing) | How does inline editing and the edit field functionality work in OpenProject? |
+| [Queries and QuerySpace](queries) | What is the Query API concept and how is it used in the frontend? |
diff --git a/docs/development/concepts/application-architecture/README.md b/docs/development/concepts/application-architecture/README.md
deleted file mode 100644
index 0e48122469fa..000000000000
--- a/docs/development/concepts/application-architecture/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-sidebar_navigation:
- title: Application architecture
----
-
-# Application architecture
-
-This guide has been integrated into the [application architecture documentation](../../application-architecture/).
diff --git a/docs/development/create-openproject-plugin/README.md b/docs/development/create-openproject-plugin/README.md
index 4300f774b669..6f43cb25a369 100644
--- a/docs/development/create-openproject-plugin/README.md
+++ b/docs/development/create-openproject-plugin/README.md
@@ -136,7 +136,7 @@ It is probably best to use READMEs of already released plugins as a template.
Activity, Issue Tracking, Time Tracking, Forums, and Backlogs are default.
Also, the My Project Page should only show Project Description and Tickets blocks.
3. Create a news article about the newly released plugin and its features.
-4. Twitter with a link to the news article.
+4. Share a link to the news article on social media.
5. If the plugin is referenced in our feature tour, add a download link to the plugin in the feature tour
## Frontend plugins [WIP]
diff --git a/docs/development/design-system/README.md b/docs/development/design-system/README.md
index 58aa524fd4b9..812763f929e2 100644
--- a/docs/development/design-system/README.md
+++ b/docs/development/design-system/README.md
@@ -8,7 +8,3 @@ keywords: Design system, Primer, styles, design, components
# Design System and Component Libraries
Starting in OpenProject 13.0., the [Primer Design System](https://primer.style/design/) is being used in OpenProject. Relevant reusable components from Primer as well as common patterns and compositions of these components will be documented in our [Lookbook](https://qa.openproject-edge.com/lookbook/).
-
-Prior to 13.0., components were defined in its own Design System called SPOT which is slowly being replaced by Primer.
-Components still defined for SPOT are documented in the last build of storybook found
-here: https://opf.github.io/design-system
diff --git a/docs/development/development-environment/README.md b/docs/development/development-environment/README.md
new file mode 100644
index 000000000000..58ecee41d708
--- /dev/null
+++ b/docs/development/development-environment/README.md
@@ -0,0 +1,34 @@
+---
+sidebar_navigation:
+ title: Development setup
+description: OpenProject development setup
+keywords: development setup
+---
+
+# OpenProject development setup
+
+| OS/Method | Description |
+|------------------------------------|-----------------------------------------------------------------------------------|
+| [Ubuntu / Debian](linux) | Develop setup on Linux |
+| [via docker](docker) | The quickest way to get started developing OpenProject is to use the docker setup |
+| [via docker (MacOS)](docker-macos) | MacOS specific docker topics |
+| [MacOS](macos) | Develop setup on MacOS |
+
+
+### Start Coding
+
+Please have a look at [our development guidelines](../code-review-guidelines/) for tips and guides on how to start
+coding. We have advice on how to get your changes back into the OpenProject core as smooth as possible.
+Also, take a look at the `doc` directory in our sources, especially
+the [how to run tests](../running-tests) documentation (we like to have automated tests for every new developed feature).
+
+### Troubleshooting
+
+The OpenProject logfile can be found in `log/development.log`.
+
+If an error occurs, it should be logged there (as well as in the output to STDOUT/STDERR of the rails server process).
+
+### Questions, Comments, and Feedback
+
+If you have any further questions, comments, feedback, or an idea to enhance this guide, please tell us at the
+appropriate [forum](https://community.openproject.org/projects/openproject/boards/9).
diff --git a/docs/development/development-environment-docker-macos/README.md b/docs/development/development-environment/docker-macos/README.md
similarity index 96%
rename from docs/development/development-environment-docker-macos/README.md
rename to docs/development/development-environment/docker-macos/README.md
index 4457931890fc..7ff3c7c3bb1f 100644
--- a/docs/development/development-environment-docker-macos/README.md
+++ b/docs/development/development-environment/docker-macos/README.md
@@ -1,13 +1,14 @@
---
sidebar_navigation:
title: Development setup via docker on MacOS
+ short_title: Setup via Docker on MacOS
description: OpenProject development setup via docker on MacOS
keywords: development setup docker macos
---
# OpenProject development setup via docker (MacOS)
-This guide covers observed nuances with the docker runtime on MacOS. Please ensure you've gone through the general [OpenProject development setup via docker](../development-environment-docker) guide before proceeding.
+This guide covers observed nuances with the docker runtime on MacOS. Please ensure you've gone through the general [OpenProject development setup via docker](../docker) guide before proceeding.
## Docker on MacOS File System Performance
diff --git a/docs/development/development-environment-docker/README.md b/docs/development/development-environment/docker/README.md
similarity index 99%
rename from docs/development/development-environment-docker/README.md
rename to docs/development/development-environment/docker/README.md
index 9a413945b78a..b6b0873f77cb 100644
--- a/docs/development/development-environment-docker/README.md
+++ b/docs/development/development-environment/docker/README.md
@@ -1,6 +1,7 @@
---
sidebar_navigation:
title: Development setup via docker
+ short_title: Setup via Docker
description: OpenProject development setup via docker
keywords: development setup docker
---
@@ -464,7 +465,7 @@ Once the keycloak service is started and running, you can access the keycloak in
and login with initial username and password as `admin`.
Keycloak being an OpenID connect provider, we need to setup an OIDC integration for OpenProject.
-[Setup OIDC (keycloak) integration for OpenProject](../../installation-and-operations/misc/custom-openid-connect-providers/#keycloak)
+[Setup OIDC (keycloak) integration for OpenProject](../../../installation-and-operations/misc/custom-openid-connect-providers/#keycloak)
Once the above setup is completed, In the root `docker-compose.override.yml` file, uncomment all the environment in `backend` service for keycloak and set the values according to configuration done in keycloak for OpenProject Integration.
diff --git a/docs/development/development-environment-ubuntu/README.md b/docs/development/development-environment/linux/README.md
similarity index 90%
rename from docs/development/development-environment-ubuntu/README.md
rename to docs/development/development-environment/linux/README.md
index 995a021b55a1..94e719700759 100644
--- a/docs/development/development-environment-ubuntu/README.md
+++ b/docs/development/development-environment/linux/README.md
@@ -1,6 +1,7 @@
---
sidebar_navigation:
title: Development setup on Debian / Ubuntu
+ short_title: Setup on Debian / Ubuntu
description: OpenProject development setup on Debian / Ubuntu
keywords: development setup debian ubuntu linux
---
@@ -18,8 +19,6 @@ shall NOT be present before.
**Please note**: This guide is NOT suitable for a production setup, but only for developing with it!
-Remark: *At the time of writing* in this page refers to 12/10/2021
-
If you find any bugs or you have any recommendations for improving this tutorial, please, feel free to send a pull
request or comment in the [OpenProject forums](https://community.openproject.org/projects/openproject/boards).
@@ -350,24 +349,3 @@ in a production setting.**
```shell
RAILS_ENV=development bin/rails runner "Delayed::Job.delete_all"
```
-
-### Start Coding
-
-Please have a look at [our development guidelines](../code-review-guidelines/) for tips and guides on how to start
-coding. We have advice on how to get your changes back into the OpenProject core as smooth as possible.
-Also, take a look at the `doc` directory in our sources, especially
-the [how to run tests](https://github.com/opf/openproject/tree/dev/docs/development/running-tests) documentation (we
-like to have automated tests for every new developed feature).
-
-### Troubleshooting
-
-The OpenProject logfile can be found in `log/development.log`.
-
-If an error occurs, it should be logged there (as well as in the output to STDOUT/STDERR of the rails server process).
-
-### Questions, Comments, and Feedback
-
-If you have any further questions, comments, feedback, or an idea to enhance this guide, please tell us at the
-appropriate community.openproject.org [forum](https://community.openproject.org/projects/openproject/boards/9).
-[Follow OpenProject on twitter](https://twitter.com/openproject), and
-follow [the news](https://www.openproject.org/blog) to stay up to date.
diff --git a/docs/development/development-environment-osx/README.md b/docs/development/development-environment/macos/README.md
similarity index 90%
rename from docs/development/development-environment-osx/README.md
rename to docs/development/development-environment/macos/README.md
index 1ba17bd97e1c..5d1ed3b0e16c 100644
--- a/docs/development/development-environment-osx/README.md
+++ b/docs/development/development-environment/macos/README.md
@@ -1,6 +1,7 @@
---
sidebar_navigation:
title: Development setup on MacOS
+ short_title: Setup on MacOS
description: OpenProject development setup on Mac OS
keywords: development setup macos
---
@@ -207,8 +208,6 @@ Now, run the following tasks to migrate and seed the dev database, and prepare t
RAILS_ENV=development bin/rails db:seed
```
-1
-
### Run OpenProject through overmind
You can run all required workers of OpenProject through `overmind`, which combines them in a single tab. Optionally, you
@@ -334,24 +333,3 @@ in a production setting.**
```shell
RAILS_ENV=development bin/rails runner "Delayed::Job.delete_all"
```
-
-### Start Coding
-
-Please have a look at [our development guidelines](../code-review-guidelines) for tips and guides on how to start
-coding. We have advice on how to get your changes back into the OpenProject core as smooth as possible.
-Also, take a look at the `doc` directory in our sources, especially
-the [how to run tests](https://github.com/opf/openproject/blob/dev/docs/development/running-tests) documentation (we
-like to have automated tests for every new developed feature).
-
-### Troubleshooting
-
-The OpenProject logfile can be found in `log/development.log`.
-
-If an error occurs, it should be logged there (as well as in the output to STDOUT/STDERR of the rails server process).
-
-### Questions, Comments, and Feedback
-
-If you have any further questions, comments, feedback, or an idea to enhance this guide, please tell us at the
-appropriate community.openproject.org [forum](https://community.openproject.org/projects/openproject/boards/9).
-[Follow OpenProject on twitter](https://twitter.com/openproject), and
-follow [the news](https://www.openproject.org/blog) to stay up to date.
diff --git a/docs/development/environments/README.md b/docs/development/environments/README.md
deleted file mode 100644
index 11b7bdeaffa7..000000000000
--- a/docs/development/environments/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-sidebar_navigation:
- title: Environments
-description: Get an overview of the different environments at play in the development phases of OpenProject
-keywords: environments, CI, development
----
-
-# Environments
-
-This guide has been integrated into the [application architecture documentation](../application-architecture/).
diff --git a/docs/development/localhost-ssl/README.md b/docs/development/localhost-ssl/README.md
index a8210f721b02..b9f80d101938 100644
--- a/docs/development/localhost-ssl/README.md
+++ b/docs/development/localhost-ssl/README.md
@@ -93,7 +93,7 @@ application server. You can do that with `/usr/sbin/setsebool -P httpd_can_netwo
## Step 4: Configure OpenProject for HTTPS usage
We assume you have already configured your OpenProject local development environment
-as [described in this guide](../development-environment-ubuntu). You will need to add your custom host name
+as [described in this guide](../development-environment). You will need to add your custom host name
to the environment. You can use this variable to do so.
```yaml
@@ -133,10 +133,3 @@ setup a reverse proxy in docker, like [traefik](https://traefik.io/). Then follo
> **Reminder**:
This setup is still experimental and under further development. Use it only, when you know what you are doing.
-
-## Questions, Comments, and Feedback
-
-If you have any further questions, comments, feedback, or an idea to enhance this guide, please tell us at the
-appropriate community.openproject.org [forum](https://community.openproject.org/projects/openproject/boards/9).
-[Follow OpenProject on twitter](https://twitter.com/openproject), and
-follow [the news](https://www.openproject.org/blog) to stay up to date.
diff --git a/docs/development/product-development-handbook/README.md b/docs/development/product-development-handbook/README.md
index e6c60f96e640..eb3690209e85 100644
--- a/docs/development/product-development-handbook/README.md
+++ b/docs/development/product-development-handbook/README.md
@@ -343,7 +343,7 @@ The entire team documents possible improvements for the next release.
### 4.1 Version/Release
-A version is the name given to a collection of features and/or bugfixes. A release is the publicly available version of the OpenProject software. More information is provided on the [release page](../releases/).
+A version is the name given to a collection of features and/or bugfixes. A release is the publicly available version of the OpenProject software. More information is provided on the [Application architecture page](../application-architecture/#patch-and-change-management).
### 4.2 RICE Score
diff --git a/docs/development/releases/README.md b/docs/development/releases/README.md
deleted file mode 100644
index d21561c7da86..000000000000
--- a/docs/development/releases/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Releases
-
-This page has been integrated into the [application architecture guide](../application-architecture/#patch-and-change-management).
diff --git a/docs/development/running-tests/README.md b/docs/development/running-tests/README.md
index 3f482e5797eb..d833d8886f4d 100644
--- a/docs/development/running-tests/README.md
+++ b/docs/development/running-tests/README.md
@@ -119,7 +119,7 @@ Smoke tests are automated and manual tests to ensure the main application featur
**Best practices**
- Automate smoke testing on top of manual testing when possible
-- Run after deployments to the appropriate [environments](../environments), e.g., the edge environment for features of the next release and staging environment for bug fixes to a stable release
+- Run after deployments to the appropriate [environments](../application-architecture/#environments), e.g., the edge environment for features of the next release and staging environment for bug fixes to a stable release
- Keep smoke tests updated so that they can evolve together with the application
**References**
@@ -251,7 +251,7 @@ Upgrade tests are manually performed for major code changes and data migrations
#### Usability testing
-When new features or changes to the application are available on our [Edge or Community environments](../environments), product team members, customers, and community users can provide usability feedback on how the change is perceived.
+When new features or changes to the application are available on our [Edge or Community environments](../application-architecture/#environments), product team members, customers, and community users can provide usability feedback on how the change is perceived.
**Key objectives and effects**
@@ -725,7 +725,7 @@ good as a test server.
### Running tests locally in Docker
Most of the above applies to running tests locally, with some docker specific setup changes that are discussed [in the
-docker development documentation](../development-environment-docker).
+docker development documentation](../development-environment/docker).
### Generators
diff --git a/docs/installation-and-operations/installation/manual/README.md b/docs/installation-and-operations/installation/manual/README.md
index 1664c77b412f..ca8887e63dff 100644
--- a/docs/installation-and-operations/installation/manual/README.md
+++ b/docs/installation-and-operations/installation/manual/README.md
@@ -456,8 +456,3 @@ If you need to restart the server (for example after a configuration change), do
With each new OpenProject core version, the plug-ins might need to be updated. Please make sure that the plug-in versions of all you plug-ins works with the OpenProject version you use.
Many plug-ins follow the OpenProject version with their version number (So, if you have installed OpenProject version 4.1.0, the plug-in should also have the version 4.1.0).
-
-## Questions, comments, and feedback
-
-If you have any further questions, comments, feedback, or an idea to enhance this guide, please tell us at the appropriate community [forum](https://community.openproject.org/projects/openproject/boards/9).
-[Follow OpenProject on twitter](https://twitter.com/openproject), and follow the news on [openproject.org](https://www.openproject.org) to stay up to date.
diff --git a/docs/release-notes/14-4-1/README.md b/docs/release-notes/14-4-1/README.md
new file mode 100644
index 000000000000..f161e68d01bd
--- /dev/null
+++ b/docs/release-notes/14-4-1/README.md
@@ -0,0 +1,32 @@
+---
+title: OpenProject 14.4.1
+sidebar_navigation:
+ title: 14.4.1
+release_version: 14.4.1
+release_date: 2024-08-28
+---
+
+# OpenProject 14.4.1
+
+Release date: 2024-08-28
+
+We released OpenProject [OpenProject 14.4.1](https://community.openproject.org/versions/2110).
+The release contains several bug fixes and we recommend updating to the newest version.
+In these Release Notes, we will give an overview of important feature changes.
+At the end, you will find a complete list of all changes and bug fixes.
+
+
+
+## Bug fixes and changes
+
+
+
+
+- Bugfix: Project Storage Members breaks when Groups or Placeholder Users are members of a project \[[#57260](https://community.openproject.org/wp/57260)\]
+- Bugfix: Custom field filter in project list causes internal server error when opening it \[[#57298](https://community.openproject.org/wp/57298)\]
+- Bugfix: Robots follow sort header links unnecessarily \[[#57306](https://community.openproject.org/wp/57306)\]
+- Bugfix: Internal error when trying to access notifications menu \[[#57351](https://community.openproject.org/wp/57351)\]
+- Bugfix: \[API\] File link creation does not work for legacy nextcloud storage data \[[#57501](https://community.openproject.org/wp/57501)\]
+
+
+
diff --git a/docs/release-notes/README.md b/docs/release-notes/README.md
index ae1f4c0886e0..20ef61cebbe5 100644
--- a/docs/release-notes/README.md
+++ b/docs/release-notes/README.md
@@ -13,6 +13,13 @@ Stay up to date and get an overview of the new features included in the releases
+## 14.4.1
+
+Release date: 2024-08-28
+
+[Release Notes](14-4-1/)
+
+
## 14.4.0
Release date: 2024-08-14
diff --git a/frontend/angular.json b/frontend/angular.json
index 4be288938831..7c48128237c2 100644
--- a/frontend/angular.json
+++ b/frontend/angular.json
@@ -102,38 +102,6 @@
}
]
},
- "fastprod": {
- "index": "",
- "preserveSymlinks": true,
- "optimization": false,
- "outputHashing": "all",
- "sourceMap": false,
- "namedChunks": false,
- "extractLicenses": false,
- "buildOptimizer" : false,
- "fileReplacements": [
- {
- "replace": "src/environments/environment.ts",
- "with": "src/environments/environment.prod.ts"
- }
- ]
- },
- "ci": {
- "index": "",
- "preserveSymlinks": true,
- "optimization": false,
- "outputHashing": "all",
- "sourceMap": false,
- "namedChunks": false,
- "extractLicenses": false,
- "buildOptimizer" : false,
- "fileReplacements": [
- {
- "replace": "src/environments/environment.ts",
- "with": "src/environments/environment.prod.ts"
- }
- ]
- }
}
},
"serve": {
diff --git a/frontend/extra-webpack.config.js b/frontend/extra-webpack.config.js
index 2eef5b817f14..4ca5c933c4b1 100644
--- a/frontend/extra-webpack.config.js
+++ b/frontend/extra-webpack.config.js
@@ -5,7 +5,7 @@ module.exports = {
minimizer: [
new TerserPlugin({
terserOptions: {
- mangle: process.env.OPENPROJECT_ANGULAR_UGLIFY !== 'false',
+ mangle: process.env.OPENPROJECT_ANGULAR_BUILD !== 'fast',
keep_classnames: true,
keep_fnames: true,
}
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index c3c3d54e3628..0bb34eab1273 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -261,11 +261,11 @@
}
},
"node_modules/@angular-devkit/architect": {
- "version": "0.1703.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.8.tgz",
- "integrity": "sha512-lKxwG4/QABXZvJpqeSIn/kAwnY6MM9HdHZUV+o5o3UiTi+vO8rZApG4CCaITH3Bxebm7Nam7Xbk8RuukC5rq6g==",
+ "version": "0.1703.9",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.9.tgz",
+ "integrity": "sha512-kEPfTOVnzrJxPGTvaXy8653HU9Fucxttx9gVfQR1yafs+yIEGx3fKGKe89YPmaEay32bIm7ZUpxDF1FO14nkdQ==",
"dependencies": {
- "@angular-devkit/core": "17.3.8",
+ "@angular-devkit/core": "17.3.9",
"rxjs": "7.8.1"
},
"engines": {
@@ -275,14 +275,14 @@
}
},
"node_modules/@angular-devkit/build-angular": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.8.tgz",
- "integrity": "sha512-ixsdXggWaFRP7Jvxd0AMukImnePuGflT9Yy7NJ9/y0cL/k//S/3RnkQv5i411KzN+7D4RIbNkRGGTYeqH24zlg==",
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.9.tgz",
+ "integrity": "sha512-EuAPSC4c2DSJLlL4ieviKLx1faTyY+ymWycq6KFwoxu1FgWly/dqBeWyXccYinLhPVZmoh6+A/5S4YWXlOGSnA==",
"dependencies": {
"@ampproject/remapping": "2.3.0",
- "@angular-devkit/architect": "0.1703.8",
- "@angular-devkit/build-webpack": "0.1703.8",
- "@angular-devkit/core": "17.3.8",
+ "@angular-devkit/architect": "0.1703.9",
+ "@angular-devkit/build-webpack": "0.1703.9",
+ "@angular-devkit/core": "17.3.9",
"@babel/core": "7.24.0",
"@babel/generator": "7.23.6",
"@babel/helper-annotate-as-pure": "7.22.5",
@@ -293,7 +293,7 @@
"@babel/preset-env": "7.24.0",
"@babel/runtime": "7.24.0",
"@discoveryjs/json-ext": "0.5.7",
- "@ngtools/webpack": "17.3.8",
+ "@ngtools/webpack": "17.3.9",
"@vitejs/plugin-basic-ssl": "1.1.0",
"ansi-colors": "4.1.3",
"autoprefixer": "10.4.18",
@@ -337,7 +337,7 @@
"undici": "6.11.1",
"vite": "5.1.7",
"watchpack": "2.4.0",
- "webpack": "5.90.3",
+ "webpack": "5.94.0",
"webpack-dev-middleware": "6.1.2",
"webpack-dev-server": "4.15.1",
"webpack-merge": "5.10.0",
@@ -582,11 +582,11 @@
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
"node_modules/@angular-devkit/build-webpack": {
- "version": "0.1703.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.8.tgz",
- "integrity": "sha512-9u6fl8VVOxcLOEMzrUeaybSvi9hSLSRucHnybneYrabsgreDo32tuy/4G8p6YAHQjpWEj9jvF9Um13ertdni5Q==",
+ "version": "0.1703.9",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.9.tgz",
+ "integrity": "sha512-3b0LND39Nc+DwCQ0N7Tbsd7RAFWTeIc4VDwk/7RO8EMYTP5Kfgr/TK66nwTBypHsjmD69IMKHZZaZuiDfGfx2A==",
"dependencies": {
- "@angular-devkit/architect": "0.1703.8",
+ "@angular-devkit/architect": "0.1703.9",
"rxjs": "7.8.1"
},
"engines": {
@@ -600,9 +600,9 @@
}
},
"node_modules/@angular-devkit/core": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz",
- "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==",
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.9.tgz",
+ "integrity": "sha512-/iKyn5YT7NW5ylrg9yufUydS8byExeQ2HHIwFC4Ebwb/JYYCz+k4tBf2LdP+zXpemDpLznXTQGWia0/yJjG8Vg==",
"dependencies": {
"ajv": "8.12.0",
"ajv-formats": "2.1.1",
@@ -637,11 +637,11 @@
}
},
"node_modules/@angular-devkit/schematics": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz",
- "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==",
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.9.tgz",
+ "integrity": "sha512-9qg+uWywgAtaQlvbnCQv47hcL6ZuA+d9ucgZ0upZftBllZ2vp5WIthCPb2mB0uBkj84Csmtz9MsErFjOQtTj4g==",
"dependencies": {
- "@angular-devkit/core": "17.3.8",
+ "@angular-devkit/core": "17.3.9",
"jsonc-parser": "3.2.1",
"magic-string": "0.30.8",
"ora": "5.4.1",
@@ -888,14 +888,14 @@
}
},
"node_modules/@angular/cli": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.8.tgz",
- "integrity": "sha512-X5ZOQ6ZTKVHjhIsfl32ZRqbs+FUoeHLbT7x4fh2Os/8ObDDwrUcCJPqxe2b2RB5E2d0vepYigknHeLE7gwzlNQ==",
- "dependencies": {
- "@angular-devkit/architect": "0.1703.8",
- "@angular-devkit/core": "17.3.8",
- "@angular-devkit/schematics": "17.3.8",
- "@schematics/angular": "17.3.8",
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.9.tgz",
+ "integrity": "sha512-b5RGu5RO4VKZlMQDatwABAn1qocgD9u4IrGN2dvHDcrz5apTKYftUdGyG42vngyDNBCg1mWkSDQEWK4f2HfuGg==",
+ "dependencies": {
+ "@angular-devkit/architect": "0.1703.9",
+ "@angular-devkit/core": "17.3.9",
+ "@angular-devkit/schematics": "17.3.9",
+ "@schematics/angular": "17.3.9",
"@yarnpkg/lockfile": "1.1.0",
"ansi-colors": "4.1.3",
"ini": "4.1.2",
@@ -4071,9 +4071,9 @@
}
},
"node_modules/@ngtools/webpack": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.8.tgz",
- "integrity": "sha512-CjSVVa/9fzMpEDQP01SC4colKCbZwj7vUq0H2bivp8jVsmd21x9Fu0gDBH0Y9NdfAIm4eGZvmiZKMII3vIOaYQ==",
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.9.tgz",
+ "integrity": "sha512-2+NvEQuYKRWdZaJbRJWEnR48tpW0uYbhwfHBHLDI9Kazb3mb0oAwYBVXdq+TtDLBypXnMsFpCewjRHTvkVx4/A==",
"engines": {
"node": "^18.13.0 || >=20.9.0",
"npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
@@ -5132,12 +5132,12 @@
]
},
"node_modules/@schematics/angular": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.8.tgz",
- "integrity": "sha512-2g4OmSyE9YGq50Uj7fNI26P/TSAFJ7ZuirwTF2O7Xc4XRQ29/tYIIqhezpNlTb6rlYblcQuMcUZBrMfWJHcqJw==",
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.9.tgz",
+ "integrity": "sha512-q6N8mbcYC6cgPyjTrMH7ehULQoUUwEYN4g7uo4ylZ/PFklSLJvpSp4BuuxANgW449qHSBvQfdIoui9ayAUXQzA==",
"dependencies": {
- "@angular-devkit/core": "17.3.8",
- "@angular-devkit/schematics": "17.3.8",
+ "@angular-devkit/core": "17.3.9",
+ "@angular-devkit/schematics": "17.3.9",
"jsonc-parser": "3.2.1"
},
"engines": {
@@ -5470,24 +5470,6 @@
"integrity": "sha512-jojr2JVJB8DawAKXApGnollMvVOMyiMKpchH8gLeoExx35Eq0BQ4WgAiAHoBoEn7h/9eDrIl0yz//cM6ALIJbg==",
"dev": true
},
- "node_modules/@types/eslint": {
- "version": "8.56.9",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz",
- "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==",
- "dependencies": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "node_modules/@types/eslint-scope": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
- "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
- "dependencies": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@@ -6646,10 +6628,10 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-import-assertions": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
- "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+ "node_modules/acorn-import-attributes": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
+ "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
"peerDependencies": {
"acorn": "^8"
}
@@ -8196,9 +8178,9 @@
}
},
"node_modules/chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
"engines": {
"node": ">=6.0"
}
@@ -8730,9 +8712,9 @@
}
},
"node_modules/core-js": {
- "version": "3.38.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.0.tgz",
- "integrity": "sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==",
+ "version": "3.38.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz",
+ "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==",
"hasInstallScript": true,
"funding": {
"type": "opencollective",
@@ -9745,9 +9727,9 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
- "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
@@ -9958,9 +9940,9 @@
}
},
"node_modules/es-module-lexer": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz",
- "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw=="
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw=="
},
"node_modules/es-object-atoms": {
"version": "1.0.0",
@@ -21534,25 +21516,24 @@
}
},
"node_modules/webpack": {
- "version": "5.90.3",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz",
- "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==",
+ "version": "5.94.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
+ "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
"dependencies": {
- "@types/eslint-scope": "^3.7.3",
"@types/estree": "^1.0.5",
- "@webassemblyjs/ast": "^1.11.5",
- "@webassemblyjs/wasm-edit": "^1.11.5",
- "@webassemblyjs/wasm-parser": "^1.11.5",
+ "@webassemblyjs/ast": "^1.12.1",
+ "@webassemblyjs/wasm-edit": "^1.12.1",
+ "@webassemblyjs/wasm-parser": "^1.12.1",
"acorn": "^8.7.1",
- "acorn-import-assertions": "^1.9.0",
+ "acorn-import-attributes": "^1.9.5",
"browserslist": "^4.21.10",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.15.0",
+ "enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.9",
+ "graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
@@ -21560,7 +21541,7 @@
"schema-utils": "^3.2.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.10",
- "watchpack": "^2.4.0",
+ "watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
"bin": {
@@ -21931,6 +21912,18 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/webpack/node_modules/watchpack": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
+ "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -22322,23 +22315,23 @@
}
},
"@angular-devkit/architect": {
- "version": "0.1703.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.8.tgz",
- "integrity": "sha512-lKxwG4/QABXZvJpqeSIn/kAwnY6MM9HdHZUV+o5o3UiTi+vO8rZApG4CCaITH3Bxebm7Nam7Xbk8RuukC5rq6g==",
+ "version": "0.1703.9",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.9.tgz",
+ "integrity": "sha512-kEPfTOVnzrJxPGTvaXy8653HU9Fucxttx9gVfQR1yafs+yIEGx3fKGKe89YPmaEay32bIm7ZUpxDF1FO14nkdQ==",
"requires": {
- "@angular-devkit/core": "17.3.8",
+ "@angular-devkit/core": "17.3.9",
"rxjs": "7.8.1"
}
},
"@angular-devkit/build-angular": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.8.tgz",
- "integrity": "sha512-ixsdXggWaFRP7Jvxd0AMukImnePuGflT9Yy7NJ9/y0cL/k//S/3RnkQv5i411KzN+7D4RIbNkRGGTYeqH24zlg==",
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.9.tgz",
+ "integrity": "sha512-EuAPSC4c2DSJLlL4ieviKLx1faTyY+ymWycq6KFwoxu1FgWly/dqBeWyXccYinLhPVZmoh6+A/5S4YWXlOGSnA==",
"requires": {
"@ampproject/remapping": "2.3.0",
- "@angular-devkit/architect": "0.1703.8",
- "@angular-devkit/build-webpack": "0.1703.8",
- "@angular-devkit/core": "17.3.8",
+ "@angular-devkit/architect": "0.1703.9",
+ "@angular-devkit/build-webpack": "0.1703.9",
+ "@angular-devkit/core": "17.3.9",
"@babel/core": "7.24.0",
"@babel/generator": "7.23.6",
"@babel/helper-annotate-as-pure": "7.22.5",
@@ -22349,7 +22342,7 @@
"@babel/preset-env": "7.24.0",
"@babel/runtime": "7.24.0",
"@discoveryjs/json-ext": "0.5.7",
- "@ngtools/webpack": "17.3.8",
+ "@ngtools/webpack": "17.3.9",
"@vitejs/plugin-basic-ssl": "1.1.0",
"ansi-colors": "4.1.3",
"autoprefixer": "10.4.18",
@@ -22394,7 +22387,7 @@
"undici": "6.11.1",
"vite": "5.1.7",
"watchpack": "2.4.0",
- "webpack": "5.90.3",
+ "webpack": "5.94.0",
"webpack-dev-middleware": "6.1.2",
"webpack-dev-server": "4.15.1",
"webpack-merge": "5.10.0",
@@ -22514,18 +22507,18 @@
}
},
"@angular-devkit/build-webpack": {
- "version": "0.1703.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.8.tgz",
- "integrity": "sha512-9u6fl8VVOxcLOEMzrUeaybSvi9hSLSRucHnybneYrabsgreDo32tuy/4G8p6YAHQjpWEj9jvF9Um13ertdni5Q==",
+ "version": "0.1703.9",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.9.tgz",
+ "integrity": "sha512-3b0LND39Nc+DwCQ0N7Tbsd7RAFWTeIc4VDwk/7RO8EMYTP5Kfgr/TK66nwTBypHsjmD69IMKHZZaZuiDfGfx2A==",
"requires": {
- "@angular-devkit/architect": "0.1703.8",
+ "@angular-devkit/architect": "0.1703.9",
"rxjs": "7.8.1"
}
},
"@angular-devkit/core": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz",
- "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==",
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.9.tgz",
+ "integrity": "sha512-/iKyn5YT7NW5ylrg9yufUydS8byExeQ2HHIwFC4Ebwb/JYYCz+k4tBf2LdP+zXpemDpLznXTQGWia0/yJjG8Vg==",
"requires": {
"ajv": "8.12.0",
"ajv-formats": "2.1.1",
@@ -22543,11 +22536,11 @@
}
},
"@angular-devkit/schematics": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz",
- "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==",
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.9.tgz",
+ "integrity": "sha512-9qg+uWywgAtaQlvbnCQv47hcL6ZuA+d9ucgZ0upZftBllZ2vp5WIthCPb2mB0uBkj84Csmtz9MsErFjOQtTj4g==",
"requires": {
- "@angular-devkit/core": "17.3.8",
+ "@angular-devkit/core": "17.3.9",
"jsonc-parser": "3.2.1",
"magic-string": "0.30.8",
"ora": "5.4.1",
@@ -22718,14 +22711,14 @@
}
},
"@angular/cli": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.8.tgz",
- "integrity": "sha512-X5ZOQ6ZTKVHjhIsfl32ZRqbs+FUoeHLbT7x4fh2Os/8ObDDwrUcCJPqxe2b2RB5E2d0vepYigknHeLE7gwzlNQ==",
- "requires": {
- "@angular-devkit/architect": "0.1703.8",
- "@angular-devkit/core": "17.3.8",
- "@angular-devkit/schematics": "17.3.8",
- "@schematics/angular": "17.3.8",
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.9.tgz",
+ "integrity": "sha512-b5RGu5RO4VKZlMQDatwABAn1qocgD9u4IrGN2dvHDcrz5apTKYftUdGyG42vngyDNBCg1mWkSDQEWK4f2HfuGg==",
+ "requires": {
+ "@angular-devkit/architect": "0.1703.9",
+ "@angular-devkit/core": "17.3.9",
+ "@angular-devkit/schematics": "17.3.9",
+ "@schematics/angular": "17.3.9",
"@yarnpkg/lockfile": "1.1.0",
"ansi-colors": "4.1.3",
"ini": "4.1.2",
@@ -24876,9 +24869,9 @@
}
},
"@ngtools/webpack": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.8.tgz",
- "integrity": "sha512-CjSVVa/9fzMpEDQP01SC4colKCbZwj7vUq0H2bivp8jVsmd21x9Fu0gDBH0Y9NdfAIm4eGZvmiZKMII3vIOaYQ=="
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.9.tgz",
+ "integrity": "sha512-2+NvEQuYKRWdZaJbRJWEnR48tpW0uYbhwfHBHLDI9Kazb3mb0oAwYBVXdq+TtDLBypXnMsFpCewjRHTvkVx4/A=="
},
"@ngx-formly/core": {
"version": "6.3.6",
@@ -25572,12 +25565,12 @@
"optional": true
},
"@schematics/angular": {
- "version": "17.3.8",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.8.tgz",
- "integrity": "sha512-2g4OmSyE9YGq50Uj7fNI26P/TSAFJ7ZuirwTF2O7Xc4XRQ29/tYIIqhezpNlTb6rlYblcQuMcUZBrMfWJHcqJw==",
+ "version": "17.3.9",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.9.tgz",
+ "integrity": "sha512-q6N8mbcYC6cgPyjTrMH7ehULQoUUwEYN4g7uo4ylZ/PFklSLJvpSp4BuuxANgW449qHSBvQfdIoui9ayAUXQzA==",
"requires": {
- "@angular-devkit/core": "17.3.8",
- "@angular-devkit/schematics": "17.3.8",
+ "@angular-devkit/core": "17.3.9",
+ "@angular-devkit/schematics": "17.3.9",
"jsonc-parser": "3.2.1"
}
},
@@ -25848,24 +25841,6 @@
"integrity": "sha512-jojr2JVJB8DawAKXApGnollMvVOMyiMKpchH8gLeoExx35Eq0BQ4WgAiAHoBoEn7h/9eDrIl0yz//cM6ALIJbg==",
"dev": true
},
- "@types/eslint": {
- "version": "8.56.9",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz",
- "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==",
- "requires": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "@types/eslint-scope": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
- "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
- "requires": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
"@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@@ -26728,10 +26703,10 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="
},
- "acorn-import-assertions": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
- "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA=="
+ "acorn-import-attributes": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
+ "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="
},
"acorn-jsx": {
"version": "5.3.2",
@@ -27852,9 +27827,9 @@
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
},
"chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg=="
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ=="
},
"class-utils": {
"version": "0.3.6",
@@ -28258,9 +28233,9 @@
}
},
"core-js": {
- "version": "3.38.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.0.tgz",
- "integrity": "sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug=="
+ "version": "3.38.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz",
+ "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw=="
},
"core-js-compat": {
"version": "3.36.1",
@@ -29004,9 +28979,9 @@
"dev": true
},
"enhanced-resolve": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
- "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
"requires": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
@@ -29178,9 +29153,9 @@
}
},
"es-module-lexer": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz",
- "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw=="
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw=="
},
"es-object-atoms": {
"version": "1.0.0",
@@ -37687,25 +37662,24 @@
}
},
"webpack": {
- "version": "5.90.3",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz",
- "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==",
+ "version": "5.94.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
+ "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
"requires": {
- "@types/eslint-scope": "^3.7.3",
"@types/estree": "^1.0.5",
- "@webassemblyjs/ast": "^1.11.5",
- "@webassemblyjs/wasm-edit": "^1.11.5",
- "@webassemblyjs/wasm-parser": "^1.11.5",
+ "@webassemblyjs/ast": "^1.12.1",
+ "@webassemblyjs/wasm-edit": "^1.12.1",
+ "@webassemblyjs/wasm-parser": "^1.12.1",
"acorn": "^8.7.1",
- "acorn-import-assertions": "^1.9.0",
+ "acorn-import-attributes": "^1.9.5",
"browserslist": "^4.21.10",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.15.0",
+ "enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.9",
+ "graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
@@ -37713,7 +37687,7 @@
"schema-utils": "^3.2.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.10",
- "watchpack": "^2.4.0",
+ "watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
"dependencies": {
@@ -37761,6 +37735,15 @@
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
}
+ },
+ "watchpack": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
+ "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
+ "requires": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ }
}
}
},
diff --git a/frontend/package.json b/frontend/package.json
index 6ab4fc9227f5..5615a4afe820 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -162,8 +162,7 @@
},
"scripts": {
"analyze": "ng build --configuration production --stats-json && webpack-bundle-analyzer -h 0.0.0.0 -p 9999 ../public/assets/frontend/stats.json",
- "build:ci": "node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --configuration ci",
- "build:fast": "OPENPROJECT_ANGULAR_UGLIFY=false node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --configuration fastprod",
+ "build:fast": "OPENPROJECT_ANGULAR_BUILD=fast node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --configuration production",
"build": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build --configuration production --named-chunks --source-map",
"build:watch": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build --watch --named-chunks",
"tokens:generate": "theo src/app/spot/styles/tokens/tokens.yml --transform web --format sass,json --dest src/app/spot/styles/tokens/dist",
diff --git a/frontend/src/app/features/hal/services/hal-resource.service.ts b/frontend/src/app/features/hal/services/hal-resource.service.ts
index 66ec21cf0d31..59d6c055e0d7 100644
--- a/frontend/src/app/features/hal/services/hal-resource.service.ts
+++ b/frontend/src/app/features/hal/services/hal-resource.service.ts
@@ -26,23 +26,10 @@
// See COPYRIGHT and LICENSE files for more details.
//++
-import {
- Injectable,
- Injector,
-} from '@angular/core';
-import {
- HttpClient,
- HttpErrorResponse,
- HttpParams,
-} from '@angular/common/http';
-import {
- catchError,
- map,
-} from 'rxjs/operators';
-import {
- Observable,
- throwError,
-} from 'rxjs';
+import { Injectable, Injector } from '@angular/core';
+import { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';
+import { catchError, map } from 'rxjs/operators';
+import { Observable, throwError } from 'rxjs';
import { CollectionResource } from 'core-app/features/hal/resources/collection-resource';
import { ErrorResource } from 'core-app/features/hal/resources/error-resource';
import * as Pako from 'pako';
@@ -54,15 +41,9 @@ import {
HTTPClientParamMap,
HTTPSupportedMethods,
} from 'core-app/features/hal/http/http.interfaces';
-import {
- HalLink,
- HalLinkInterface,
-} from 'core-app/features/hal/hal-link/hal-link';
+import { HalLink, HalLinkInterface } from 'core-app/features/hal/hal-link/hal-link';
import { URLParamsEncoder } from 'core-app/features/hal/services/url-params-encoder';
-import {
- HalResource,
- HalResourceClass,
-} from 'core-app/features/hal/resources/hal-resource';
+import { HalResource, HalResourceClass } from 'core-app/features/hal/resources/hal-resource';
import { initializeHalProperties } from '../helpers/hal-resource-builder';
import { HalError } from 'core-app/features/hal/services/hal-error';
import { getPaginatedCollections } from 'core-app/core/apiv3/helpers/get-paginated-results';
@@ -289,6 +270,7 @@ export class HalResourceService {
}
/**
+ *
* Get a linked resource from its HalLink with the correct type.
*/
public createLinkedResource(halResource:T, linkName:string, link:HalLinkInterface) {
@@ -327,6 +309,7 @@ export class HalResourceService {
protected toEprops(params:unknown):{ eprops:string } {
const deflatedArray = Pako.deflate(JSON.stringify(params));
+
const compressed = base64.bytesToBase64(deflatedArray);
return { eprops: compressed };
diff --git a/frontend/src/app/features/plugins/plugin-context.ts b/frontend/src/app/features/plugins/plugin-context.ts
index 01e1604ceff9..20371f50c4cc 100644
--- a/frontend/src/app/features/plugins/plugin-context.ts
+++ b/frontend/src/app/features/plugins/plugin-context.ts
@@ -31,6 +31,7 @@ import {
import { DomAutoscrollService } from 'core-app/shared/helpers/drag-and-drop/dom-autoscroll.service';
import { AttachmentsResourceService } from 'core-app/core/state/attachments/attachments.service';
import { HttpClient } from '@angular/common/http';
+import { TimezoneService } from 'core-app/core/datetime/timezone.service';
/**
* Plugin context bridge for plugins outside the CLI compiler context
@@ -53,6 +54,7 @@ export class OpenProjectPluginContext {
hooks: this.injector.get(HookService),
i18n: this.injector.get(I18nService),
notifications: this.injector.get(ToastService),
+ timezone: this.injector.get(TimezoneService),
opModalService: this.injector.get(OpModalService),
displayField: this.injector.get(DisplayFieldService),
editField: this.injector.get(EditFieldService),
diff --git a/frontend/src/app/features/work-packages/components/wp-table/wp-table.component.html b/frontend/src/app/features/work-packages/components/wp-table/wp-table.component.html
index 93a506c9b6bd..4f51a55a9790 100644
--- a/frontend/src/app/features/work-packages/components/wp-table/wp-table.component.html
+++ b/frontend/src/app/features/work-packages/components/wp-table/wp-table.component.html
@@ -90,6 +90,7 @@
class="work-packages--tabletimeline--timeline--resizer hidden-for-mobile hide-when-print">
diff --git a/frontend/src/app/features/work-packages/routing/wp-full-view/wp-full-view.html b/frontend/src/app/features/work-packages/routing/wp-full-view/wp-full-view.html
index 68482fef358b..a364194a4c85 100644
--- a/frontend/src/app/features/work-packages/routing/wp-full-view/wp-full-view.html
+++ b/frontend/src/app/features/work-packages/routing/wp-full-view/wp-full-view.html
@@ -81,6 +81,7 @@
diff --git a/frontend/src/app/shared/components/dynamic-forms/components/dynamic-inputs/formattable-textarea-input/components/formattable-control/formattable-control.component.ts b/frontend/src/app/shared/components/dynamic-forms/components/dynamic-inputs/formattable-textarea-input/components/formattable-control/formattable-control.component.ts
index 3b94dd32bea0..5a9ef021fd0f 100644
--- a/frontend/src/app/shared/components/dynamic-forms/components/dynamic-inputs/formattable-textarea-input/components/formattable-control/formattable-control.component.ts
+++ b/frontend/src/app/shared/components/dynamic-forms/components/dynamic-inputs/formattable-textarea-input/components/formattable-control/formattable-control.component.ts
@@ -1,6 +1,4 @@
-import {
- Component, forwardRef, Input, OnInit, ViewChild,
-} from '@angular/core';
+import { Component, forwardRef, Input, OnInit, ViewChild } from '@angular/core';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import { FormlyTemplateOptions } from '@ngx-formly/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
@@ -9,6 +7,7 @@ import {
ICKEditorContext,
ICKEditorInstance,
} from 'core-app/shared/components/editor/components/ckeditor/ckeditor.types';
+import { ICKEditorType } from 'core-app/shared/components/editor/components/ckeditor/ckeditor-setup.service';
@Component({
selector: 'op-formattable-control',
@@ -44,7 +43,8 @@ export class FormattableControlComponent implements ControlValueAccessor, OnInit
public get ckEditorContext():ICKEditorContext {
return {
- type: this.templateOptions.editorType,
+ type: this.templateOptions.editorType as ICKEditorType,
+ field: this.templateOptions.name as string,
// This is a very project resource specific hack to allow macros on description and statusExplanation but
// disable it for custom fields. As the formly based approach is currently limited to projects, and that is to be removed,
// such a "pragmatic" approach should be ok.
diff --git a/frontend/src/app/shared/components/editor/components/ckeditor-augmented-textarea/ckeditor-augmented-textarea.component.ts b/frontend/src/app/shared/components/editor/components/ckeditor-augmented-textarea/ckeditor-augmented-textarea.component.ts
index e6d82bc52d32..70b44f268b5c 100644
--- a/frontend/src/app/shared/components/editor/components/ckeditor-augmented-textarea/ckeditor-augmented-textarea.component.ts
+++ b/frontend/src/app/shared/components/editor/components/ckeditor-augmented-textarea/ckeditor-augmented-textarea.component.ts
@@ -129,6 +129,7 @@ export class CkeditorAugmentedTextareaComponent extends UntilDestroyedMixin impl
this.context = {
type: this.editorType,
resource: this.halResource,
+ field: this.wrappedTextArea.name,
previewContext: this.previewContext,
removePlugins: this.removePlugins,
};
@@ -149,7 +150,7 @@ export class CkeditorAugmentedTextareaComponent extends UntilDestroyedMixin impl
)
.subscribe((evt:SubmitEvent) => {
evt.preventDefault();
- this.saveForm(evt);
+ void this.saveForm(evt);
});
}
@@ -157,9 +158,10 @@ export class CkeditorAugmentedTextareaComponent extends UntilDestroyedMixin impl
window.OpenProject.pageWasEdited = true;
}
- public saveForm(evt?:SubmitEvent):void {
- this.syncToTextarea();
+ public async saveForm(evt?:SubmitEvent):Promise {
this.inFlight = true;
+
+ this.syncToTextarea();
window.OpenProject.pageIsSubmitted = true;
setTimeout(() => {
@@ -193,8 +195,9 @@ export class CkeditorAugmentedTextareaComponent extends UntilDestroyedMixin impl
private syncToTextarea() {
try {
- this.wrappedTextArea.value = this.ckEditorInstance.getRawData();
+ this.wrappedTextArea.value = this.ckEditorInstance.getTransformedContent(true);
} catch (e) {
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
const message = (e as Error)?.message || (e as object).toString();
console.error(`Failed to save CKEditor body to textarea: ${message}.`);
this.Notifications.addError(message || this.I18n.t('js.error.internal'));
diff --git a/frontend/src/app/shared/components/editor/components/ckeditor/ckeditor-setup.service.ts b/frontend/src/app/shared/components/editor/components/ckeditor/ckeditor-setup.service.ts
index 41fb1b8e82f2..507795dc47f2 100644
--- a/frontend/src/app/shared/components/editor/components/ckeditor/ckeditor-setup.service.ts
+++ b/frontend/src/app/shared/components/editor/components/ckeditor/ckeditor-setup.service.ts
@@ -80,9 +80,11 @@ export class CKEditorSetupService {
// Allow custom events on wrapper to set/get data for debugging
jQuery(wrapper)
- .on('op:ckeditor:setData', (event:unknown, data:string) => editor.setData(data))
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-return
+ .on('op:ckeditor:autosave', () => editor.config.get('autosave').save(editor))
+ .on('op:ckeditor:setData', (_, data:string) => editor.setData(data))
.on('op:ckeditor:clear', () => editor.setData(' '))
- .on('op:ckeditor:getData', (event:unknown, cb:(data:string) => void) => cb(editor.getData({ trim: false })));
+ .on('op:ckeditor:getData', (_, cb:(data:string) => void) => cb(editor.getData({ trim: false })));
return watchdog;
});
diff --git a/frontend/src/app/shared/components/editor/components/ckeditor/ckeditor.types.ts b/frontend/src/app/shared/components/editor/components/ckeditor/ckeditor.types.ts
index f60aa15bae9f..bcaae992decc 100644
--- a/frontend/src/app/shared/components/editor/components/ckeditor/ckeditor.types.ts
+++ b/frontend/src/app/shared/components/editor/components/ckeditor/ckeditor.types.ts
@@ -21,6 +21,10 @@ export interface CKEditorDomEventData {
}
export interface ICKEditorInstance {
+ id:string;
+
+ state:string;
+
getData(options:{ trim:boolean }):string;
setData(content:string):void;
@@ -88,6 +92,8 @@ export interface ICKEditorContext {
type:ICKEditorType;
// Hal Resource to pass into ckeditor
resource?:HalResource;
+ // If available, field name of the edit
+ field?:string;
// Specific removing of plugins
removePlugins?:string[];
// Set of enabled macro plugins or false to disable all
diff --git a/frontend/src/app/shared/components/editor/components/ckeditor/op-ckeditor.component.ts b/frontend/src/app/shared/components/editor/components/ckeditor/op-ckeditor.component.ts
index ecb70c61d3d3..f29c1558d5c7 100644
--- a/frontend/src/app/shared/components/editor/components/ckeditor/op-ckeditor.component.ts
+++ b/frontend/src/app/shared/components/editor/components/ckeditor/op-ckeditor.component.ts
@@ -26,16 +26,7 @@
// See COPYRIGHT and LICENSE files for more details.
//++
-import {
- Component,
- ElementRef,
- EventEmitter,
- Input,
- OnDestroy,
- OnInit,
- Output,
- ViewChild,
-} from '@angular/core';
+import { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';
import { ToastService } from 'core-app/shared/components/toaster/toast.service';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import { ConfigurationService } from 'core-app/core/config/configuration.service';
@@ -47,6 +38,7 @@ import {
import { CKEditorSetupService } from 'core-app/shared/components/editor/components/ckeditor/ckeditor-setup.service';
import { KeyCodes } from 'core-app/shared/helpers/keyCodes.enum';
import { debugLog } from 'core-app/shared/helpers/debug_output';
+import { UntilDestroyedMixin } from 'core-app/shared/helpers/angular/until-destroyed.mixin';
declare module 'codemirror';
@@ -55,7 +47,7 @@ declare module 'codemirror';
templateUrl: './op-ckeditor.html',
styleUrls: ['./op-ckeditor.sass'],
})
-export class OpCkeditorComponent implements OnInit, OnDestroy {
+export class OpCkeditorComponent extends UntilDestroyedMixin implements OnInit, OnDestroy {
@Input() context:ICKEditorContext;
@Input()
@@ -108,10 +100,8 @@ export class OpCkeditorComponent implements OnInit, OnDestroy {
// to read back changes as they happen
private debouncedEmitter = _.debounce(
() => {
- void this.getTransformedContent(false)
- .then((val) => {
- this.contentChanged.emit(val);
- });
+ const val = this.getTransformedContent(false);
+ this.contentChanged.emit(val);
},
1000,
{ leading: true },
@@ -126,6 +116,7 @@ export class OpCkeditorComponent implements OnInit, OnDestroy {
private readonly configurationService:ConfigurationService,
private readonly ckEditorSetup:CKEditorSetupService,
) {
+ super();
}
/**
@@ -133,38 +124,58 @@ export class OpCkeditorComponent implements OnInit, OnDestroy {
* the data cannot be loaded (MS Edge!)
*/
public getRawData():string {
+ let content:string;
+
if (this.manualMode) {
- return this._content = this.codeMirrorInstance.getValue();
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
+ content = this.codeMirrorInstance.getValue() as string;
+ } else {
+ content = this.ckEditorInstance.getData({ trim: false });
}
- return this._content = this.ckEditorInstance.getData({ trim: false });
+
+ if (content === null || content === undefined) {
+ throw new Error('Trying to get content from CKEditor failed, as it returned null.');
+ }
+
+ this._content = content;
+ return content;
}
/**
* Get a promise with the transformed content, will wrap errors in the promise.
* @param notificationOnError
*/
- public getTransformedContent(notificationOnError = true):Promise {
- if (!this.initialized) {
- throw new Error('Tried to access CKEditor instance before initialization.');
- }
+ public getTransformedContent(notificationOnError = true):string {
+ try {
+ if (!this.initialized) {
+ throw new Error('Tried to access CKEditor instance before initialization.');
+ }
- return new Promise((resolve, reject) => {
- try {
- resolve(this.getRawData());
- } catch (e) {
- console.error(`Failed to save CKEditor content: ${e}.`);
- const error = this.I18n.t(
- 'js.editor.error_saving_failed',
- { error: e || this.I18n.t('js.error.internal') },
- );
+ if (this.componentDestroyed) {
+ throw new Error('Component destroyed');
+ }
- if (notificationOnError) {
- this.Notifications.addError(error);
- }
+ if (!this.ckEditorInstance || this.ckEditorInstance.state === 'destroyed') {
+ console.warn('CKEditor instance is destroyed, returning last content');
+ return this._content;
+ }
+
+ return this.getRawData();
+ } catch (e) {
+ console.error(`Failed to save CKEditor content: ${e}.`);
+
+ const error = this.I18n.t(
+ 'js.editor.error_saving_failed',
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-call
+ { error: e.toString() || this.I18n.t('js.error.internal') },
+ );
- reject(error);
+ if (notificationOnError) {
+ this.Notifications.addError(error);
}
- });
+
+ return this._content;
+ }
}
/**
@@ -217,7 +228,6 @@ export class OpCkeditorComponent implements OnInit, OnDestroy {
const editor = watchdog.editor;
this.ckEditorInstance = editor;
-
// Switch mode
editor.on('op:source-code-enabled', () => this.enableManualMode());
editor.on('op:source-code-disabled', () => this.disableManualMode());
diff --git a/frontend/src/app/shared/components/fields/edit/field-types/formattable-edit-field/formattable-edit-field.component.ts b/frontend/src/app/shared/components/fields/edit/field-types/formattable-edit-field/formattable-edit-field.component.ts
index f2213be03e63..0cc5fce95667 100644
--- a/frontend/src/app/shared/components/fields/edit/field-types/formattable-edit-field/formattable-edit-field.component.ts
+++ b/frontend/src/app/shared/components/fields/edit/field-types/formattable-edit-field/formattable-edit-field.component.ts
@@ -25,13 +25,7 @@
// See COPYRIGHT and LICENSE files for more details.
// ++
-import {
- ChangeDetectionStrategy,
- Component,
- OnDestroy,
- OnInit,
- ViewChild,
-} from '@angular/core';
+import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
import { EditFieldComponent } from 'core-app/shared/components/fields/edit/edit-field.component';
import { OpCkeditorComponent } from 'core-app/shared/components/editor/components/ckeditor/op-ckeditor.component';
import {
@@ -65,17 +59,20 @@ export class FormattableEditFieldComponent extends EditFieldComponent implements
public ckEditorContext:ICKEditorContext = {
resource: this.change.pristineResource,
+ field: this.field.name,
macros: 'none' as const,
previewContext: this.previewContext,
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
options: { rtl: this.schema.options && this.schema.options.rtl },
type: 'constrained',
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call
...this.resource.getEditorContext(this.field.name),
- };
+ } as ICKEditorContext;
ngOnInit():void {
super.ngOnInit();
- this.handler.registerOnSubmit(() => this.getCurrentValue());
+ this.handler.registerOnSubmit(() => Promise.resolve(this.getCurrentValue()));
this.text = {
attachmentLabel: this.I18n.t('js.label_formattable_attachment_hint'),
save: this.I18n.t('js.inplace.button_save', { attribute: this.schema.name }),
@@ -101,12 +98,8 @@ export class FormattableEditFieldComponent extends EditFieldComponent implements
}
}
- public getCurrentValue():Promise {
- return this.editor
- .getTransformedContent()
- .then((val) => {
- this.rawValue = val;
- });
+ public getCurrentValue():void {
+ this.rawValue = this.editor.getTransformedContent();
}
public onContentChange(value:string):void {
@@ -118,10 +111,8 @@ export class FormattableEditFieldComponent extends EditFieldComponent implements
}
public handleUserSubmit():boolean {
- this.getCurrentValue()
- .then(() => {
- this.handler.handleUserSubmit();
- });
+ this.getCurrentValue();
+ void this.handler.handleUserSubmit();
return false;
}
diff --git a/frontend/src/app/shared/components/forms/highlighted-input.sass b/frontend/src/app/shared/components/forms/highlighted-input.sass
index 97e760925770..67df2bffe13a 100644
--- a/frontend/src/app/shared/components/forms/highlighted-input.sass
+++ b/frontend/src/app/shared/components/forms/highlighted-input.sass
@@ -7,7 +7,7 @@
border-radius: 4px
&_active
- border: 1px solid #90cdf4
- background: #ebf8ff
+ border: 1px solid var(--borderColor-accent-muted)
+ background-color: var(--bgColor-accent-muted)
& .ng-select-container
background-color: var(--body-background) !important
diff --git a/frontend/src/app/shared/components/option-list/option-list.sass b/frontend/src/app/shared/components/option-list/option-list.sass
index afd0c6c2a863..8b3e01ef4f2f 100644
--- a/frontend/src/app/shared/components/option-list/option-list.sass
+++ b/frontend/src/app/shared/components/option-list/option-list.sass
@@ -18,8 +18,8 @@
margin-bottom: 0.5rem
&_selected
- border: 1px solid #90cdf4
- background: #ebf8ff
+ border: 1px solid var(--borderColor-accent-muted)
+ background-color: var(--bgColor-accent-muted)
&_disabled
color: #959595
diff --git a/frontend/src/app/shared/components/resizer/resizer.component.ts b/frontend/src/app/shared/components/resizer/resizer.component.ts
index 7e4f38c6f52f..47874dacf0f6 100644
--- a/frontend/src/app/shared/components/resizer/resizer.component.ts
+++ b/frontend/src/app/shared/components/resizer/resizer.component.ts
@@ -137,7 +137,6 @@ export class ResizerComponent implements OnDestroy {
}
private onMouseMove(event:MouseEvent|TouchEvent) {
- event.preventDefault();
event.stopPropagation();
this.oldX = this.newX;
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 75d7426a33e2..2ab52d9d40c2 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
@@ -29,7 +29,6 @@
import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, OnInit } from '@angular/core';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
import { TransitionService } from '@uirouter/core';
-import { BrowserDetector } from 'core-app/core/browser/browser-detector.service';
import { UntilDestroyedMixin } from 'core-app/shared/helpers/angular/until-destroyed.mixin';
import { ResizeDelta } from 'core-app/shared/components/resizer/resizer.component';
import { fromEvent } from 'rxjs';
@@ -56,7 +55,7 @@ export class WpResizerDirective extends UntilDestroyedMixin implements OnInit, A
@Input() localStorageKey:string;
- @Input() resizeStyle:'flexBasis'|'width' = 'flexBasis';
+ @Input() variableName:string = '--split-screen-width';
private resizingElement:HTMLElement;
@@ -67,7 +66,7 @@ export class WpResizerDirective extends UntilDestroyedMixin implements OnInit, A
private resizer:HTMLElement;
// Min-width this element is allowed to have
- private elementMinWidth = 530;
+ private elementMinWidth = 550;
public moving = false;
@@ -77,7 +76,6 @@ export class WpResizerDirective extends UntilDestroyedMixin implements OnInit, A
readonly toggleService:MainMenuToggleService,
private elementRef:ElementRef,
readonly $transitions:TransitionService,
- readonly browserDetector:BrowserDetector,
) {
super();
}
@@ -88,7 +86,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;
}
@@ -106,7 +104,7 @@ export class WpResizerDirective extends UntilDestroyedMixin implements OnInit, A
this.elementWidth = this.resizingElement.parentElement.offsetWidth / 2;
}
- this.resizingElement.style[this.resizeStyle] = `${this.elementWidth}px`;
+ this.setWidthVariable(this.elementWidth);
// Add event listener
this.element = this.elementRef.nativeElement;
@@ -142,7 +140,7 @@ export class WpResizerDirective extends UntilDestroyedMixin implements OnInit, A
super.ngOnDestroy();
// Reset the style when killing this directive, otherwise the style remains
if (this.resizingElement) {
- this.resizingElement.style[this.resizeStyle] = '';
+ this.setWidthVariable(this.elementMinWidth);
}
}
@@ -193,7 +191,7 @@ export class WpResizerDirective extends UntilDestroyedMixin implements OnInit, A
this.applyColumnLayout();
// Set new width
- this.resizingElement.style[this.resizeStyle] = `${newValue}px`;
+ this.setWidthVariable(newValue);
}
private parseLocalStorageValue():number|undefined {
@@ -222,4 +220,8 @@ export class WpResizerDirective extends UntilDestroyedMixin implements OnInit, A
this.resizer.classList.remove('-error-font');
}
}
+
+ private setWidthVariable(value:number):void {
+ document.documentElement.style.setProperty(this.variableName, `${value}px`);
+ }
}
diff --git a/frontend/src/global_styles/layout/_base.sass b/frontend/src/global_styles/layout/_base.sass
index 28b84ef6f321..08da9c9412eb 100644
--- a/frontend/src/global_styles/layout/_base.sass
+++ b/frontend/src/global_styles/layout/_base.sass
@@ -88,9 +88,11 @@ $right-space: 16px
$bottom-space: 10px
$left-space: 16px
+$left-side-min-width: 300px
+
#content
display: grid
- grid-template-columns: 1fr auto
+ grid-template-columns: minmax($left-side-min-width, 1fr) auto
grid-template-rows: auto 1fr
grid-template-areas: "header bodyRight" "body bodyRight"
padding: 0
@@ -102,6 +104,11 @@ $left-space: 16px
z-index: 10
background-color: var(--body-background)
+ // Basically if the content-BodyRight is filled:
+ // Apply the user-defined split screen width but be able to shrink in case the screen is not wide enough
+ &:has(#content-bodyRight > *)
+ grid-template-columns: minmax($left-side-min-width, 1fr) minmax(550px, var(--split-screen-width))
+
&.content--split
overflow: hidden
diff --git a/frontend/src/global_styles/layout/work_packages/_details_view.sass b/frontend/src/global_styles/layout/work_packages/_details_view.sass
index 6c387a043451..bd2e9c6871b6 100644
--- a/frontend/src/global_styles/layout/work_packages/_details_view.sass
+++ b/frontend/src/global_styles/layout/work_packages/_details_view.sass
@@ -39,7 +39,7 @@ body.router--work-packages-partitioned-split-view-new
padding: 0
// Will eventually be overridden by the resizer
- flex-basis: 580px
+ flex-basis: var(--split-screen-width)
.work-packages--details
height: 100%
diff --git a/frontend/src/global_styles/layout/work_packages/_full_view.sass b/frontend/src/global_styles/layout/work_packages/_full_view.sass
index ceaae992aa8c..f80f657b2c8a 100644
--- a/frontend/src/global_styles/layout/work_packages/_full_view.sass
+++ b/frontend/src/global_styles/layout/work_packages/_full_view.sass
@@ -69,7 +69,8 @@
line-height: calc(30px)
&--split-right
- min-width: 530px
+ flex-basis: var(--full-view-split-right-width)
+ min-width: 550px
overflow-y: hidden
overflow-x: auto
position: relative
diff --git a/frontend/src/global_styles/layout/work_packages/_table.sass b/frontend/src/global_styles/layout/work_packages/_table.sass
index ddf152ec811c..a9c36f7e2f96 100644
--- a/frontend/src/global_styles/layout/work_packages/_table.sass
+++ b/frontend/src/global_styles/layout/work_packages/_table.sass
@@ -125,7 +125,7 @@ body[class*="router--"]
// TIMELINE half of the tabletimeline flexbox
.work-packages-tabletimeline--timeline-side
border-left: 3px solid var(--borderColor-default)
- flex-basis: 50%
+ flex-basis: var(--gantt-split-width)
// Show the horizontal scrollbar _always_ (same as table)
overflow-x: scroll
// Show the vertical scrollbar when necessary
diff --git a/frontend/src/global_styles/openproject/_variable_defaults.scss b/frontend/src/global_styles/openproject/_variable_defaults.scss
index ed624748e036..57f165baedbe 100644
--- a/frontend/src/global_styles/openproject/_variable_defaults.scss
+++ b/frontend/src/global_styles/openproject/_variable_defaults.scss
@@ -131,4 +131,7 @@
--link-text-decoration: none;
--type-form-conf-attribute--background: var(--gray-light);
--select-arrow-bg-color-url: url("data:image/svg+xml;utf8,");
+ --split-screen-width: 550px;
+ --full-view-split-right-width: 550px;
+ --gantt-split-width: 50%;
}
diff --git a/frontend/src/stimulus/controllers/dynamic/admin/work-packages-settings.controller.ts b/frontend/src/stimulus/controllers/dynamic/admin/work-packages-settings.controller.ts
index 147cb918ba9e..6dc3e76c2355 100644
--- a/frontend/src/stimulus/controllers/dynamic/admin/work-packages-settings.controller.ts
+++ b/frontend/src/stimulus/controllers/dynamic/admin/work-packages-settings.controller.ts
@@ -31,12 +31,18 @@
import { Controller } from '@hotwired/stimulus';
export default class WorkPackagesSettingsController extends Controller {
+ static values = {
+ percentCompleteEditionActive: Boolean,
+ };
+
static targets = [
'progressCalculationModeSelect',
'warningText',
'warningToast',
];
+ declare readonly percentCompleteEditionActiveValue:boolean;
+
declare readonly progressCalculationModeSelectTarget:HTMLSelectElement;
declare readonly warningTextTarget:HTMLElement;
declare readonly warningToastTarget:HTMLElement;
@@ -58,9 +64,19 @@ export default class WorkPackagesSettingsController extends Controller {
getWarningMessageHtml():string {
const newMode = this.progressCalculationModeSelectTarget.value;
+ if (newMode === this.initialMode) {
+ return '';
+ }
+
+ // to be removed in 15.0 with :percent_complete_edition feature flag removal
+ if (!this.percentCompleteEditionActiveValue && newMode === 'field') {
+ return I18n.t(
+ 'js.admin.work_packages_settings.warning_progress_calculation_mode_change_from_status_to_field_pre_14_4_without_percent_complete_edition_html',
+ );
+ }
+
return I18n.t(
`js.admin.work_packages_settings.warning_progress_calculation_mode_change_from_${this.initialMode}_to_${newMode}_html`,
- { defaultValue: '' },
);
}
}
diff --git a/frontend/src/stimulus/controllers/dynamic/work-packages/progress/preview-progress.controller.ts b/frontend/src/stimulus/controllers/dynamic/work-packages/progress/preview-progress.controller.ts
index e3de2013ec1a..2b39d00218dd 100644
--- a/frontend/src/stimulus/controllers/dynamic/work-packages/progress/preview-progress.controller.ts
+++ b/frontend/src/stimulus/controllers/dynamic/work-packages/progress/preview-progress.controller.ts
@@ -91,20 +91,22 @@ export default class PreviewProgressController extends Controller {
const formData = new FormData(form) as unknown as undefined;
const formParams = new URLSearchParams(formData);
const wpParams = [
- ['work_package[initial][remaining_hours]', formParams.get('work_package[initial][remaining_hours]') || ''],
['work_package[initial][estimated_hours]', formParams.get('work_package[initial][estimated_hours]') || ''],
+ ['work_package[initial][remaining_hours]', formParams.get('work_package[initial][remaining_hours]') || ''],
['work_package[initial][done_ratio]', formParams.get('work_package[initial][done_ratio]') || ''],
- ['work_package[remaining_hours]', formParams.get('work_package[remaining_hours]') || ''],
['work_package[estimated_hours]', formParams.get('work_package[estimated_hours]') || ''],
+ ['work_package[remaining_hours]', formParams.get('work_package[remaining_hours]') || ''],
['work_package[done_ratio]', formParams.get('work_package[done_ratio]') || ''],
['work_package[status_id]', formParams.get('work_package[status_id]') || ''],
['field', field?.name ?? ''],
- ['work_package[estimated_hours_touched]', formParams.get('work_package[estimated_hours_touched]') || ''],
- ['work_package[remaining_hours_touched]', formParams.get('work_package[remaining_hours_touched]') || ''],
- ['work_package[done_ratio_touched]', formParams.get('work_package[done_ratio_touched]') || ''],
- ['work_package[status_id_touched]', formParams.get('work_package[status_id_touched]') || ''],
];
+ this.progressInputTargets.forEach((progressInput) => {
+ const touchedInputName = progressInput.name.replace(']', '_touched]');
+ const touchedValue = formParams.get(touchedInputName) || '';
+ wpParams.push([touchedInputName, touchedValue]);
+ });
+
const wpPath = this.ensureValidPathname(form.action);
const wpAction = wpPath.endsWith('/work_packages/new/progress') ? 'new' : 'edit';
diff --git a/frontend/src/stimulus/controllers/dynamic/work-packages/progress/touched-field-marker.controller.ts b/frontend/src/stimulus/controllers/dynamic/work-packages/progress/touched-field-marker.controller.ts
index ba3539767dcb..7c96bcd31913 100644
--- a/frontend/src/stimulus/controllers/dynamic/work-packages/progress/touched-field-marker.controller.ts
+++ b/frontend/src/stimulus/controllers/dynamic/work-packages/progress/touched-field-marker.controller.ts
@@ -32,18 +32,151 @@ import { Controller } from '@hotwired/stimulus';
export default class TouchedFieldMarkerController extends Controller {
static targets = [
+ 'initialValueInput',
'touchedFieldInput',
'progressInput',
];
+ declare readonly initialValueInputTargets:HTMLInputElement[];
declare readonly touchedFieldInputTargets:HTMLInputElement[];
declare readonly progressInputTargets:HTMLInputElement[];
+ private targetFieldName:string;
+
private markFieldAsTouched(event:{ target:HTMLInputElement }) {
- this.touchedFieldInputTargets.forEach((input) => {
- if (input.dataset.referrerField === event.target.name) {
- input.value = 'true';
+ this.targetFieldName = event.target.name.replace(/^work_package\[([^\]]+)\]$/, '$1');
+ this.markTouched(this.targetFieldName);
+
+ if (this.isWorkBasedMode()) {
+ this.keepWorkValue();
+ }
+ }
+
+ private isWorkBasedMode() {
+ return this.findValueInput('done_ratio') !== undefined;
+ }
+
+ private keepWorkValue() {
+ if (this.isInitialValueEmpty('estimated_hours') && !this.isTouched('estimated_hours')) {
+ // let work be derived
+ return;
+ }
+
+ if (this.isBeingEdited('estimated_hours')) {
+ this.untouchFieldsWhenWorkIsEdited();
+ } else if (this.isBeingEdited('remaining_hours')) {
+ this.untouchFieldsWhenRemainingWorkIsEdited();
+ } else if (this.isBeingEdited('done_ratio')) {
+ this.untouchFieldsWhenPercentCompleteIsEdited();
+ }
+ }
+
+ private untouchFieldsWhenWorkIsEdited() {
+ if (this.areBothTouched('remaining_hours', 'done_ratio')) {
+ if (this.isValueEmpty('done_ratio') && this.isValueEmpty('remaining_hours')) {
+ return;
+ }
+ if (this.isValueEmpty('done_ratio')) {
+ this.markUntouched('done_ratio');
+ } else {
+ this.markUntouched('remaining_hours');
}
- });
+ } else if (this.isTouchedAndEmpty('remaining_hours') && this.isValueSet('done_ratio')) {
+ // force remaining work derivation
+ this.markUntouched('remaining_hours');
+ this.markTouched('done_ratio');
+ } else if (this.isTouchedAndEmpty('done_ratio') && this.isValueSet('remaining_hours')) {
+ // force % complete derivation
+ this.markUntouched('done_ratio');
+ this.markTouched('remaining_hours');
+ }
+ }
+
+ private untouchFieldsWhenRemainingWorkIsEdited() {
+ if (this.isTouchedAndEmpty('estimated_hours') && this.isValueSet('done_ratio')) {
+ // force work derivation
+ this.markUntouched('estimated_hours');
+ this.markTouched('done_ratio');
+ } else if (this.isValueSet('estimated_hours')) {
+ this.markUntouched('done_ratio');
+ }
+ }
+
+ private untouchFieldsWhenPercentCompleteIsEdited() {
+ if (this.isValueSet('estimated_hours')) {
+ this.markUntouched('remaining_hours');
+ }
+ }
+
+ private areBothTouched(fieldName1:string, fieldName2:string) {
+ return this.isTouched(fieldName1) && this.isTouched(fieldName2);
+ }
+
+ private isBeingEdited(fieldName:string) {
+ return fieldName === this.targetFieldName;
+ }
+
+ // Finds the hidden initial value input based on a field name.
+ //
+ // The initial value input field holds the initial value of the work package
+ // before being set by the user or derived.
+ private findInitialValueInput(fieldName:string):HTMLInputElement|undefined {
+ return this.initialValueInputTargets.find((input) =>
+ (input.dataset.referrerField === fieldName) || (input.dataset.referrerField === `work_package[${fieldName}]`));
+ }
+
+ // Finds the touched field input based on a field name.
+ //
+ // The touched input field is used to mark a field as touched by the user so
+ // that the backend keeps the value instead of deriving it.
+ private findTouchedInput(fieldName:string):HTMLInputElement|undefined {
+ return this.touchedFieldInputTargets.find((input) =>
+ (input.dataset.referrerField === fieldName) || (input.dataset.referrerField === `work_package[${fieldName}]`));
+ }
+
+ // Finds the value field input based on a field name.
+ //
+ // The value field input holds the current value of a progress field.
+ private findValueInput(fieldName:string):HTMLInputElement|undefined {
+ return this.progressInputTargets.find((input) =>
+ (input.name === fieldName) || (input.name === `work_package[${fieldName}]`));
+ }
+
+ private isTouchedAndEmpty(fieldName:string) {
+ return this.isTouched(fieldName) && this.isValueEmpty(fieldName);
+ }
+
+ private isTouched(fieldName:string) {
+ const touchedInput = this.findTouchedInput(fieldName);
+ return touchedInput?.value === 'true';
+ }
+
+ private isInitialValueEmpty(fieldName:string) {
+ const valueInput = this.findInitialValueInput(fieldName);
+ return valueInput?.value === '';
+ }
+
+ private isValueEmpty(fieldName:string) {
+ const valueInput = this.findValueInput(fieldName);
+ return valueInput?.value === '';
+ }
+
+ private isValueSet(fieldName:string) {
+ const valueInput = this.findValueInput(fieldName);
+ return valueInput !== undefined && valueInput.value !== '';
+ }
+
+ private markTouched(fieldName:string) {
+ const touchedInput = this.findTouchedInput(fieldName);
+ if (touchedInput) {
+ touchedInput.value = 'true';
+ }
+ }
+
+ private markUntouched(fieldName:string) {
+ const touchedInput = this.findTouchedInput(fieldName);
+ if (touchedInput) {
+ touchedInput.value = 'false';
+ }
}
}
diff --git a/frontend/src/vendor/ckeditor/ckeditor.js b/frontend/src/vendor/ckeditor/ckeditor.js
index c2ed49515518..1b228722d334 100644
--- a/frontend/src/vendor/ckeditor/ckeditor.js
+++ b/frontend/src/vendor/ckeditor/ckeditor.js
@@ -1,7 +1,7 @@
-!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{"(may require Fn)":"(may require Fn)","%0 of %1":"%0 of %1",Accept:"Accept",Accessibility:"Accessibility","Accessibility help":"Accessibility help","Align cell text to the bottom":"Align cell text to the bottom","Align cell text to the center":"Align cell text to the center","Align cell text to the left":"Align cell text to the left","Align cell text to the middle":"Align cell text to the middle","Align cell text to the right":"Align cell text to the right","Align cell text to the top":"Align cell text to the top","Align table to the left":"Align table to the left","Align table to the right":"Align table to the right",Alignment:"Alignment",Aquamarine:"Aquamarine",Background:"Background","Below, you can find a list of keyboard shortcuts that can be used in the editor.":"Below, you can find a list of keyboard shortcuts that can be used in the editor.",Black:"Black","Block quote":"Block quote",Blue:"Blue",Bold:"Bold","Bold text":"Bold text",Border:"Border","Break text":"Break text","Bulleted List":"Bulleted List","Bulleted list styles toolbar":"Bulleted list styles toolbar",Cancel:"Cancel","Cannot upload file:":"Cannot upload file:","Caption for image: %0":"Caption for image: %0","Caption for the image":"Caption for the image","Cell properties":"Cell properties","Center table":"Center table","Centered image":"Centered image","Change image text alternative":"Change image text alternative","Choose heading":"Choose heading",Circle:"Circle",Clear:"Clear","Click to edit block":"Click to edit block",Close:"Close","Close contextual balloons, dropdowns, and dialogs":"Close contextual balloons, dropdowns, and dialogs",Code:"Code",Color:"Color","Color picker":"Color picker",Column:"Column","Content editing keystrokes":"Content editing keystrokes","Copy selected content":"Copy selected content","Create link":"Create link",Custom:"Custom","Custom image size":"Custom image size",Dashed:"Dashed",Decimal:"Decimal","Decimal with leading zero":"Decimal with leading zero","Decrease list item indent":"Decrease list item indent","Delete column":"Delete column","Delete row":"Delete row","Dim grey":"Dim grey",Dimensions:"Dimensions",Disc:"Disc",Dotted:"Dotted",Double:"Double",Downloadable:"Downloadable","Drag to move":"Drag to move","Dropdown toolbar":"Dropdown toolbar","Edit block":"Edit block","Edit link":"Edit link","Editor block content toolbar":"Editor block content toolbar","Editor contextual toolbar":"Editor contextual toolbar","Editor dialog":"Editor dialog","Editor editing area: %0":"Editor editing area: %0","Editor menu bar":"Editor menu bar","Editor toolbar":"Editor toolbar","Enter image caption":"Enter image caption","Enter table caption":"Enter table caption","Entering a to-do list":"Entering a to-do list","Error during image upload":"Error during image upload","Execute the currently focused button. Executing buttons that interact with the editor content moves the focus back to the content.":"Execute the currently focused button. Executing buttons that interact with the editor content moves the focus back to the content.","From computer":"From computer","Full size image":"Full size image",Green:"Green",Grey:"Grey",Groove:"Groove","Header column":"Header column","Header row":"Header row",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Height:"Height","Help Contents. To close this dialog press ESC.":"Help Contents. To close this dialog press ESC.",HEX:"HEX","Horizontal text alignment toolbar":"Horizontal text alignment toolbar",Image:"Image","Image from computer":"Image from computer","Image resize list":"Image resize list","Image toolbar":"Image toolbar","Image upload complete":"Image upload complete","Image via URL":"Image via URL","image widget":"image widget","In line":"In line","Increase list item indent":"Increase list item indent","Insert a hard break (a new paragraph)":"Insert a hard break (a new paragraph)","Insert a new paragraph directly after a widget":"Insert a new paragraph directly after a widget","Insert a new paragraph directly before a widget":"Insert a new paragraph directly before a widget","Insert a new table row (when in the last cell of a table)":"Insert a new table row (when in the last cell of a table)","Insert a soft break (a <br> element)":"Insert a soft break (a <br> element)","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert image":"Insert image","Insert image via URL":"Insert image via URL","Insert paragraph after block":"Insert paragraph after block","Insert paragraph before block":"Insert paragraph before block","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table","Insert via URL":"Insert via URL",Inset:"Inset","Invalid start index value.":"Invalid start index value.",Italic:"Italic","Italic text":"Italic text","Justify cell text":"Justify cell text","Keystrokes that can be used in a list":"Keystrokes that can be used in a list","Keystrokes that can be used in a table cell":"Keystrokes that can be used in a table cell","Keystrokes that can be used when a widget is selected (for example: image, table, etc.)":"Keystrokes that can be used when a widget is selected (for example: image, table, etc.)","Leaving a to-do list":"Leaving a to-do list","Left aligned image":"Left aligned image","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Link:"Link","Link image":"Link image","Link URL":"Link URL","Link URL must not be empty.":"Link URL must not be empty.","List properties":"List properties","Lower-latin":"Lower-latin","Lower–roman":"Lower–roman",MENU_BAR_MENU_EDIT:"Edit",MENU_BAR_MENU_FILE:"File",MENU_BAR_MENU_FONT:"Font",MENU_BAR_MENU_FORMAT:"Format",MENU_BAR_MENU_HELP:"Help",MENU_BAR_MENU_INSERT:"Insert",MENU_BAR_MENU_TEXT:"Text",MENU_BAR_MENU_TOOLS:"Tools",MENU_BAR_MENU_VIEW:"View","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells","Move focus between form fields (inputs, buttons, etc.)":"Move focus between form fields (inputs, buttons, etc.)","Move focus from an editable area back to the parent widget":"Move focus from an editable area back to the parent widget","Move focus in and out of an active dialog window":"Move focus in and out of an active dialog window","Move focus to the menu bar, navigate between menu bars":"Move focus to the menu bar, navigate between menu bars","Move focus to the toolbar, navigate between toolbars":"Move focus to the toolbar, navigate between toolbars","Move out of a link":"Move out of a link","Move out of an inline code style":"Move out of an inline code style","Move the caret to allow typing directly after a widget":"Move the caret to allow typing directly after a widget","Move the caret to allow typing directly before a widget":"Move the caret to allow typing directly before a widget","Move the selection to the next cell":"Move the selection to the next cell","Move the selection to the previous cell":"Move the selection to the previous cell","Navigate through the table":"Navigate through the table","Navigate through the toolbar or menu bar":"Navigate through the toolbar or menu bar",Next:"Next","No results found":"No results found","No searchable items":"No searchable items",None:"None","Numbered List":"Numbered List","Numbered list styles toolbar":"Numbered list styles toolbar","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab","Open the accessibility help dialog":"Open the accessibility help dialog",Orange:"Orange",Original:"Original",Outset:"Outset",Padding:"Padding",Paragraph:"Paragraph","Paste content":"Paste content","Paste content as plain text":"Paste content as plain text",'Please enter a valid color (e.g. "ff0000").':'Please enter a valid color (e.g. "ff0000").',"Press %0 for help.":"Press %0 for help.","Press Enter to type after or press Shift + Enter to type before the widget":"Press Enter to type after or press Shift + Enter to type before the widget",Previous:"Previous",Purple:"Purple",Red:"Red",Redo:"Redo","Remove color":"Remove color","Replace from computer":"Replace from computer","Replace image":"Replace image","Replace image from computer":"Replace image from computer","Resize image":"Resize image","Resize image (in %0)":"Resize image (in %0)","Resize image to %0":"Resize image to %0","Resize image to the original size":"Resize image to the original size","Restore default":"Restore default","Reversed order":"Reversed order","Revert autoformatting action":"Revert autoformatting action","Rich Text Editor":"Rich Text Editor","Rich Text Editor. Editing area: %0":"Rich Text Editor. Editing area: %0",Ridge:"Ridge","Right aligned image":"Right aligned image",Row:"Row",Save:"Save","Select all":"Select all","Select column":"Select column","Select row":"Select row","Show more items":"Show more items","Side image":"Side image",Solid:"Solid","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Square:"Square","Start at":"Start at","Start index must be greater than 0.":"Start index must be greater than 0.",Strikethrough:"Strikethrough","Strikethrough text":"Strikethrough text",Style:"Style",Subscript:"Subscript",Superscript:"Superscript",Table:"Table","Table alignment toolbar":"Table alignment toolbar","Table cell text alignment":"Table cell text alignment","Table properties":"Table properties","Table toolbar":"Table toolbar","Text alternative":"Text alternative",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'The value is invalid. Try "10px" or "2em" or simply "2".',"The value must not be empty.":"The value must not be empty.","The value should be a plain number.":"The value should be a plain number.","These keyboard shortcuts allow for quick access to content editing features.":"These keyboard shortcuts allow for quick access to content editing features.","This link has no URL":"This link has no URL","To-do List":"To-do List","Toggle caption off":"Toggle caption off","Toggle caption on":"Toggle caption on","Toggle the circle list style":"Toggle the circle list style","Toggle the decimal list style":"Toggle the decimal list style","Toggle the decimal with leading zero list style":"Toggle the decimal with leading zero list style","Toggle the disc list style":"Toggle the disc list style","Toggle the lower–latin list style":"Toggle the lower–latin list style","Toggle the lower–roman list style":"Toggle the lower–roman list style","Toggle the square list style":"Toggle the square list style","Toggle the upper–latin list style":"Toggle the upper–latin list style","Toggle the upper–roman list style":"Toggle the upper–roman list style",Turquoise:"Turquoise","Type or paste your content here.":"Type or paste your content here.","Type your title":"Type your title",Underline:"Underline","Underline text":"Underline text",Undo:"Undo",Unlink:"Unlink","Update image URL":"Update image URL","Upload failed":"Upload failed","Upload from computer":"Upload from computer","Upload image from computer":"Upload image from computer","Upload in progress":"Upload in progress","Uploading image":"Uploading image","Upper-latin":"Upper-latin","Upper-roman":"Upper-roman","Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.":"Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.","User interface and content navigation keystrokes":"User interface and content navigation keystrokes","Vertical text alignment toolbar":"Vertical text alignment toolbar","Via URL":"Via URL",White:"White","Widget toolbar":"Widget toolbar",Width:"Width","Wrap text":"Wrap text",Yellow:"Yellow","You have no image upload permissions.":"You have no image upload permissions."})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),
+!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{"(may require Fn)":"(may require Fn)","%0 of %1":"%0 of %1",Accept:"Accept",Accessibility:"Accessibility","Accessibility help":"Accessibility help","Align cell text to the bottom":"Align cell text to the bottom","Align cell text to the center":"Align cell text to the center","Align cell text to the left":"Align cell text to the left","Align cell text to the middle":"Align cell text to the middle","Align cell text to the right":"Align cell text to the right","Align cell text to the top":"Align cell text to the top","Align table to the left":"Align table to the left","Align table to the right":"Align table to the right",Alignment:"Alignment",Aquamarine:"Aquamarine",Background:"Background","Below, you can find a list of keyboard shortcuts that can be used in the editor.":"Below, you can find a list of keyboard shortcuts that can be used in the editor.",Black:"Black","Block quote":"Block quote",Blue:"Blue",Bold:"Bold","Bold text":"Bold text",Border:"Border","Break text":"Break text","Bulleted List":"Bulleted List","Bulleted list styles toolbar":"Bulleted list styles toolbar",Cancel:"Cancel","Cannot upload file:":"Cannot upload file:","Caption for image: %0":"Caption for image: %0","Caption for the image":"Caption for the image","Cell properties":"Cell properties","Center table":"Center table","Centered image":"Centered image","Change image text alternative":"Change image text alternative","Choose heading":"Choose heading",Circle:"Circle",Clear:"Clear","Click to edit block":"Click to edit block",Close:"Close","Close contextual balloons, dropdowns, and dialogs":"Close contextual balloons, dropdowns, and dialogs",Code:"Code",Color:"Color","Color picker":"Color picker",Column:"Column","Content editing keystrokes":"Content editing keystrokes","Copy selected content":"Copy selected content","Create link":"Create link",Custom:"Custom","Custom image size":"Custom image size",Dashed:"Dashed",Decimal:"Decimal","Decimal with leading zero":"Decimal with leading zero","Decrease list item indent":"Decrease list item indent","Delete column":"Delete column","Delete row":"Delete row","Dim grey":"Dim grey",Dimensions:"Dimensions",Disc:"Disc",Dotted:"Dotted",Double:"Double",Downloadable:"Downloadable","Drag to move":"Drag to move","Dropdown toolbar":"Dropdown toolbar","Edit block":"Edit block","Edit link":"Edit link","Editor block content toolbar":"Editor block content toolbar","Editor contextual toolbar":"Editor contextual toolbar","Editor dialog":"Editor dialog","Editor editing area: %0":"Editor editing area: %0","Editor menu bar":"Editor menu bar","Editor toolbar":"Editor toolbar","Enter image caption":"Enter image caption","Enter table caption":"Enter table caption","Entering a to-do list":"Entering a to-do list","Error during image upload":"Error during image upload","Execute the currently focused button. Executing buttons that interact with the editor content moves the focus back to the content.":"Execute the currently focused button. Executing buttons that interact with the editor content moves the focus back to the content.","From computer":"From computer","Full size image":"Full size image",Green:"Green",Grey:"Grey",Groove:"Groove","Header column":"Header column","Header row":"Header row",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Height:"Height","Help Contents. To close this dialog press ESC.":"Help Contents. To close this dialog press ESC.",HEX:"HEX","Horizontal text alignment toolbar":"Horizontal text alignment toolbar",Image:"Image","Image from computer":"Image from computer","Image resize list":"Image resize list","Image toolbar":"Image toolbar","Image upload complete":"Image upload complete","Image via URL":"Image via URL","image widget":"image widget","In line":"In line","Increase list item indent":"Increase list item indent","Insert a hard break (a new paragraph)":"Insert a hard break (a new paragraph)","Insert a new paragraph directly after a widget":"Insert a new paragraph directly after a widget","Insert a new paragraph directly before a widget":"Insert a new paragraph directly before a widget","Insert a new table row (when in the last cell of a table)":"Insert a new table row (when in the last cell of a table)","Insert a soft break (a <br> element)":"Insert a soft break (a <br> element)","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert image":"Insert image","Insert image via URL":"Insert image via URL","Insert paragraph after block":"Insert paragraph after block","Insert paragraph before block":"Insert paragraph before block","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table","Insert via URL":"Insert via URL",Inset:"Inset","Invalid start index value.":"Invalid start index value.",Italic:"Italic","Italic text":"Italic text","Justify cell text":"Justify cell text","Keystrokes that can be used in a list":"Keystrokes that can be used in a list","Keystrokes that can be used in a table cell":"Keystrokes that can be used in a table cell","Keystrokes that can be used when a widget is selected (for example: image, table, etc.)":"Keystrokes that can be used when a widget is selected (for example: image, table, etc.)","Leaving a to-do list":"Leaving a to-do list","Left aligned image":"Left aligned image","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Link:"Link","Link image":"Link image","Link URL":"Link URL","Link URL must not be empty.":"Link URL must not be empty.","List properties":"List properties","Lower-latin":"Lower-latin","Lower–roman":"Lower–roman",MENU_BAR_MENU_EDIT:"Edit",MENU_BAR_MENU_FILE:"File",MENU_BAR_MENU_FONT:"Font",MENU_BAR_MENU_FORMAT:"Format",MENU_BAR_MENU_HELP:"Help",MENU_BAR_MENU_INSERT:"Insert",MENU_BAR_MENU_TEXT:"Text",MENU_BAR_MENU_TOOLS:"Tools",MENU_BAR_MENU_VIEW:"View","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells","Move focus between form fields (inputs, buttons, etc.)":"Move focus between form fields (inputs, buttons, etc.)","Move focus from an editable area back to the parent widget":"Move focus from an editable area back to the parent widget","Move focus in and out of an active dialog window":"Move focus in and out of an active dialog window","Move focus to the menu bar, navigate between menu bars":"Move focus to the menu bar, navigate between menu bars","Move focus to the toolbar, navigate between toolbars":"Move focus to the toolbar, navigate between toolbars","Move out of a link":"Move out of a link","Move out of an inline code style":"Move out of an inline code style","Move the caret to allow typing directly after a widget":"Move the caret to allow typing directly after a widget","Move the caret to allow typing directly before a widget":"Move the caret to allow typing directly before a widget","Move the selection to the next cell":"Move the selection to the next cell","Move the selection to the previous cell":"Move the selection to the previous cell","Navigate through the table":"Navigate through the table","Navigate through the toolbar or menu bar":"Navigate through the toolbar or menu bar",Next:"Next","No results found":"No results found","No searchable items":"No searchable items",None:"None","Numbered List":"Numbered List","Numbered list styles toolbar":"Numbered list styles toolbar","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab","Open the accessibility help dialog":"Open the accessibility help dialog",Orange:"Orange",Original:"Original",Outset:"Outset",Padding:"Padding",Paragraph:"Paragraph","Paste content":"Paste content","Paste content as plain text":"Paste content as plain text",'Please enter a valid color (e.g. "ff0000").':'Please enter a valid color (e.g. "ff0000").',"Press %0 for help.":"Press %0 for help.","Press Enter to type after or press Shift + Enter to type before the widget":"Press Enter to type after or press Shift + Enter to type before the widget",Previous:"Previous",Purple:"Purple",Red:"Red",Redo:"Redo","Remove color":"Remove color","Replace from computer":"Replace from computer","Replace image":"Replace image","Replace image from computer":"Replace image from computer","Resize image":"Resize image","Resize image (in %0)":"Resize image (in %0)","Resize image to %0":"Resize image to %0","Resize image to the original size":"Resize image to the original size","Restore default":"Restore default","Reversed order":"Reversed order","Revert autoformatting action":"Revert autoformatting action","Rich Text Editor":"Rich Text Editor","Rich Text Editor. Editing area: %0":"Rich Text Editor. Editing area: %0",Ridge:"Ridge","Right aligned image":"Right aligned image",Row:"Row",Save:"Save","Saving changes":"Saving changes","Select all":"Select all","Select column":"Select column","Select row":"Select row","Show more items":"Show more items","Side image":"Side image",Solid:"Solid","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Square:"Square","Start at":"Start at","Start index must be greater than 0.":"Start index must be greater than 0.",Strikethrough:"Strikethrough","Strikethrough text":"Strikethrough text",Style:"Style",Subscript:"Subscript",Superscript:"Superscript",Table:"Table","Table alignment toolbar":"Table alignment toolbar","Table cell text alignment":"Table cell text alignment","Table properties":"Table properties","Table toolbar":"Table toolbar","Text alternative":"Text alternative",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'The value is invalid. Try "10px" or "2em" or simply "2".',"The value must not be empty.":"The value must not be empty.","The value should be a plain number.":"The value should be a plain number.","These keyboard shortcuts allow for quick access to content editing features.":"These keyboard shortcuts allow for quick access to content editing features.","This link has no URL":"This link has no URL","To-do List":"To-do List","Toggle caption off":"Toggle caption off","Toggle caption on":"Toggle caption on","Toggle the circle list style":"Toggle the circle list style","Toggle the decimal list style":"Toggle the decimal list style","Toggle the decimal with leading zero list style":"Toggle the decimal with leading zero list style","Toggle the disc list style":"Toggle the disc list style","Toggle the lower–latin list style":"Toggle the lower–latin list style","Toggle the lower–roman list style":"Toggle the lower–roman list style","Toggle the square list style":"Toggle the square list style","Toggle the upper–latin list style":"Toggle the upper–latin list style","Toggle the upper–roman list style":"Toggle the upper–roman list style",Turquoise:"Turquoise","Type or paste your content here.":"Type or paste your content here.","Type your title":"Type your title",Underline:"Underline","Underline text":"Underline text",Undo:"Undo",Unlink:"Unlink","Update image URL":"Update image URL","Upload failed":"Upload failed","Upload from computer":"Upload from computer","Upload image from computer":"Upload image from computer","Upload in progress":"Upload in progress","Uploading image":"Uploading image","Upper-latin":"Upper-latin","Upper-roman":"Upper-roman","Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.":"Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.","User interface and content navigation keystrokes":"User interface and content navigation keystrokes","Vertical text alignment toolbar":"Vertical text alignment toolbar","Via URL":"Via URL",White:"White","Widget toolbar":"Widget toolbar",Width:"Width","Wrap text":"Wrap text",Yellow:"Yellow","You have no image upload permissions.":"You have no image upload permissions."})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),
/*!
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md.
*/
-function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.OPEditor=t():e.OPEditor=t()}(self,(()=>(()=>{var e,t,o={5659:(e,t,o)=>{const n=o(8156),i={};for(const e of Object.keys(n))i[n[e]]=e;const r={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};e.exports=r;for(const e of Object.keys(r)){if(!("channels"in r[e]))throw new Error("missing channels property: "+e);if(!("labels"in r[e]))throw new Error("missing channel labels property: "+e);if(r[e].labels.length!==r[e].channels)throw new Error("channel and label counts mismatch: "+e);const{channels:t,labels:o}=r[e];delete r[e].channels,delete r[e].labels,Object.defineProperty(r[e],"channels",{value:t}),Object.defineProperty(r[e],"labels",{value:o})}r.rgb.hsl=function(e){const t=e[0]/255,o=e[1]/255,n=e[2]/255,i=Math.min(t,o,n),r=Math.max(t,o,n),s=r-i;let a,l;r===i?a=0:t===r?a=(o-n)/s:o===r?a=2+(n-t)/s:n===r&&(a=4+(t-o)/s),a=Math.min(60*a,360),a<0&&(a+=360);const c=(i+r)/2;return l=r===i?0:c<=.5?s/(r+i):s/(2-r-i),[a,100*l,100*c]},r.rgb.hsv=function(e){let t,o,n,i,r;const s=e[0]/255,a=e[1]/255,l=e[2]/255,c=Math.max(s,a,l),d=c-Math.min(s,a,l),u=function(e){return(c-e)/6/d+.5};return 0===d?(i=0,r=0):(r=d/c,t=u(s),o=u(a),n=u(l),s===c?i=n-o:a===c?i=1/3+t-n:l===c&&(i=2/3+o-t),i<0?i+=1:i>1&&(i-=1)),[360*i,100*r,100*c]},r.rgb.hwb=function(e){const t=e[0],o=e[1];let n=e[2];const i=r.rgb.hsl(e)[0],s=1/255*Math.min(t,Math.min(o,n));return n=1-1/255*Math.max(t,Math.max(o,n)),[i,100*s,100*n]},r.rgb.cmyk=function(e){const t=e[0]/255,o=e[1]/255,n=e[2]/255,i=Math.min(1-t,1-o,1-n);return[100*((1-t-i)/(1-i)||0),100*((1-o-i)/(1-i)||0),100*((1-n-i)/(1-i)||0),100*i]},r.rgb.keyword=function(e){const t=i[e];if(t)return t;let o,r=1/0;for(const t of Object.keys(n)){const i=n[t],l=(a=i,((s=e)[0]-a[0])**2+(s[1]-a[1])**2+(s[2]-a[2])**2);l.04045?((t+.055)/1.055)**2.4:t/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92;return[100*(.4124*t+.3576*o+.1805*n),100*(.2126*t+.7152*o+.0722*n),100*(.0193*t+.1192*o+.9505*n)]},r.rgb.lab=function(e){const t=r.rgb.xyz(e);let o=t[0],n=t[1],i=t[2];o/=95.047,n/=100,i/=108.883,o=o>.008856?o**(1/3):7.787*o+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;return[116*n-16,500*(o-n),200*(n-i)]},r.hsl.rgb=function(e){const t=e[0]/360,o=e[1]/100,n=e[2]/100;let i,r,s;if(0===o)return s=255*n,[s,s,s];i=n<.5?n*(1+o):n+o-n*o;const a=2*n-i,l=[0,0,0];for(let e=0;e<3;e++)r=t+1/3*-(e-1),r<0&&r++,r>1&&r--,s=6*r<1?a+6*(i-a)*r:2*r<1?i:3*r<2?a+(i-a)*(2/3-r)*6:a,l[e]=255*s;return l},r.hsl.hsv=function(e){const t=e[0];let o=e[1]/100,n=e[2]/100,i=o;const r=Math.max(n,.01);n*=2,o*=n<=1?n:2-n,i*=r<=1?r:2-r;return[t,100*(0===n?2*i/(r+i):2*o/(n+o)),100*((n+o)/2)]},r.hsv.rgb=function(e){const t=e[0]/60,o=e[1]/100;let n=e[2]/100;const i=Math.floor(t)%6,r=t-Math.floor(t),s=255*n*(1-o),a=255*n*(1-o*r),l=255*n*(1-o*(1-r));switch(n*=255,i){case 0:return[n,l,s];case 1:return[a,n,s];case 2:return[s,n,l];case 3:return[s,a,n];case 4:return[l,s,n];case 5:return[n,s,a]}},r.hsv.hsl=function(e){const t=e[0],o=e[1]/100,n=e[2]/100,i=Math.max(n,.01);let r,s;s=(2-o)*n;const a=(2-o)*i;return r=o*i,r/=a<=1?a:2-a,r=r||0,s/=2,[t,100*r,100*s]},r.hwb.rgb=function(e){const t=e[0]/360;let o=e[1]/100,n=e[2]/100;const i=o+n;let r;i>1&&(o/=i,n/=i);const s=Math.floor(6*t),a=1-n;r=6*t-s,0!=(1&s)&&(r=1-r);const l=o+r*(a-o);let c,d,u;switch(s){default:case 6:case 0:c=a,d=l,u=o;break;case 1:c=l,d=a,u=o;break;case 2:c=o,d=a,u=l;break;case 3:c=o,d=l,u=a;break;case 4:c=l,d=o,u=a;break;case 5:c=a,d=o,u=l}return[255*c,255*d,255*u]},r.cmyk.rgb=function(e){const t=e[0]/100,o=e[1]/100,n=e[2]/100,i=e[3]/100;return[255*(1-Math.min(1,t*(1-i)+i)),255*(1-Math.min(1,o*(1-i)+i)),255*(1-Math.min(1,n*(1-i)+i))]},r.xyz.rgb=function(e){const t=e[0]/100,o=e[1]/100,n=e[2]/100;let i,r,s;return i=3.2406*t+-1.5372*o+-.4986*n,r=-.9689*t+1.8758*o+.0415*n,s=.0557*t+-.204*o+1.057*n,i=i>.0031308?1.055*i**(1/2.4)-.055:12.92*i,r=r>.0031308?1.055*r**(1/2.4)-.055:12.92*r,s=s>.0031308?1.055*s**(1/2.4)-.055:12.92*s,i=Math.min(Math.max(0,i),1),r=Math.min(Math.max(0,r),1),s=Math.min(Math.max(0,s),1),[255*i,255*r,255*s]},r.xyz.lab=function(e){let t=e[0],o=e[1],n=e[2];t/=95.047,o/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;return[116*o-16,500*(t-o),200*(o-n)]},r.lab.xyz=function(e){let t,o,n;o=(e[0]+16)/116,t=e[1]/500+o,n=o-e[2]/200;const i=o**3,r=t**3,s=n**3;return o=i>.008856?i:(o-16/116)/7.787,t=r>.008856?r:(t-16/116)/7.787,n=s>.008856?s:(n-16/116)/7.787,t*=95.047,o*=100,n*=108.883,[t,o,n]},r.lab.lch=function(e){const t=e[0],o=e[1],n=e[2];let i;i=360*Math.atan2(n,o)/2/Math.PI,i<0&&(i+=360);return[t,Math.sqrt(o*o+n*n),i]},r.lch.lab=function(e){const t=e[0],o=e[1],n=e[2]/360*2*Math.PI;return[t,o*Math.cos(n),o*Math.sin(n)]},r.rgb.ansi16=function(e,t=null){const[o,n,i]=e;let s=null===t?r.rgb.hsv(e)[2]:t;if(s=Math.round(s/50),0===s)return 30;let a=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(o/255));return 2===s&&(a+=60),a},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){const t=e[0],o=e[1],n=e[2];if(t===o&&o===n)return t<8?16:t>248?231:Math.round((t-8)/247*24)+232;return 16+36*Math.round(t/255*5)+6*Math.round(o/255*5)+Math.round(n/255*5)},r.ansi16.rgb=function(e){let t=e%10;if(0===t||7===t)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];const o=.5*(1+~~(e>50));return[(1&t)*o*255,(t>>1&1)*o*255,(t>>2&1)*o*255]},r.ansi256.rgb=function(e){if(e>=232){const t=10*(e-232)+8;return[t,t,t]}let t;e-=16;return[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){const t=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.hex.rgb=function(e){const t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let o=t[0];3===t[0].length&&(o=o.split("").map((e=>e+e)).join(""));const n=parseInt(o,16);return[n>>16&255,n>>8&255,255&n]},r.rgb.hcg=function(e){const t=e[0]/255,o=e[1]/255,n=e[2]/255,i=Math.max(Math.max(t,o),n),r=Math.min(Math.min(t,o),n),s=i-r;let a,l;return a=s<1?r/(1-s):0,l=s<=0?0:i===t?(o-n)/s%6:i===o?2+(n-t)/s:4+(t-o)/s,l/=6,l%=1,[360*l,100*s,100*a]},r.hsl.hcg=function(e){const t=e[1]/100,o=e[2]/100,n=o<.5?2*t*o:2*t*(1-o);let i=0;return n<1&&(i=(o-.5*n)/(1-n)),[e[0],100*n,100*i]},r.hsv.hcg=function(e){const t=e[1]/100,o=e[2]/100,n=t*o;let i=0;return n<1&&(i=(o-n)/(1-n)),[e[0],100*n,100*i]},r.hcg.rgb=function(e){const t=e[0]/360,o=e[1]/100,n=e[2]/100;if(0===o)return[255*n,255*n,255*n];const i=[0,0,0],r=t%1*6,s=r%1,a=1-s;let l=0;switch(Math.floor(r)){case 0:i[0]=1,i[1]=s,i[2]=0;break;case 1:i[0]=a,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=s;break;case 3:i[0]=0,i[1]=a,i[2]=1;break;case 4:i[0]=s,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=a}return l=(1-o)*n,[255*(o*i[0]+l),255*(o*i[1]+l),255*(o*i[2]+l)]},r.hcg.hsv=function(e){const t=e[1]/100,o=t+e[2]/100*(1-t);let n=0;return o>0&&(n=t/o),[e[0],100*n,100*o]},r.hcg.hsl=function(e){const t=e[1]/100,o=e[2]/100*(1-t)+.5*t;let n=0;return o>0&&o<.5?n=t/(2*o):o>=.5&&o<1&&(n=t/(2*(1-o))),[e[0],100*n,100*o]},r.hcg.hwb=function(e){const t=e[1]/100,o=t+e[2]/100*(1-t);return[e[0],100*(o-t),100*(1-o)]},r.hwb.hcg=function(e){const t=e[1]/100,o=1-e[2]/100,n=o-t;let i=0;return n<1&&(i=(o-n)/(1-n)),[e[0],100*n,100*i]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=function(e){return[0,0,e[0]]},r.gray.hsv=r.gray.hsl,r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){const t=255&Math.round(e[0]/100*255),o=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(o.length)+o},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}},734:(e,t,o)=>{const n=o(5659),i=o(8507),r={};Object.keys(n).forEach((e=>{r[e]={},Object.defineProperty(r[e],"channels",{value:n[e].channels}),Object.defineProperty(r[e],"labels",{value:n[e].labels});const t=i(e);Object.keys(t).forEach((o=>{const n=t[o];r[e][o]=function(e){const t=function(...t){const o=t[0];if(null==o)return o;o.length>1&&(t=o);const n=e(t);if("object"==typeof n)for(let e=n.length,t=0;t1&&(t=o),e(t))};return"conversion"in e&&(t.conversion=e.conversion),t}(n)}))})),e.exports=r},8507:(e,t,o)=>{const n=o(5659);function i(e){const t=function(){const e={},t=Object.keys(n);for(let o=t.length,n=0;n{"use strict";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},9248:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,".ck-content code{background-color:hsla(0,0%,78%,.3);border-radius:2px;padding:.15em}.ck.ck-editor__editable .ck-code_selected{background-color:hsla(0,0%,78%,.5)}","",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-basic-styles/theme/code.css"],names:[],mappings:"AAKA,iBACC,kCAAuC,CAEvC,iBAAkB,CADlB,aAED,CAEA,0CACC,kCACD",sourcesContent:["/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-content code {\n\tbackground-color: hsla(0, 0%, 78%, 0.3);\n\tpadding: .15em;\n\tborder-radius: 2px;\n}\n\n.ck.ck-editor__editable .ck-code_selected {\n\tbackground-color: hsla(0, 0%, 78%, 0.5);\n}\n"],sourceRoot:""}]);const a=s},1501:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,".ck-content blockquote{border-left:5px solid #ccc;font-style:italic;margin-left:0;margin-right:0;overflow:hidden;padding-left:1.5em;padding-right:1.5em}.ck-content[dir=rtl] blockquote{border-left:0;border-right:5px solid #ccc}","",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-block-quote/theme/blockquote.css"],names:[],mappings:"AAKA,uBAWC,0BAAsC,CADtC,iBAAkB,CAFlB,aAAc,CACd,cAAe,CAPf,eAAgB,CAIhB,kBAAmB,CADnB,mBAOD,CAEA,gCACC,aAAc,CACd,2BACD",sourcesContent:['/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-content blockquote {\n\t/* See #12 */\n\toverflow: hidden;\n\n\t/* https://github.com/ckeditor/ckeditor5-block-quote/issues/15 */\n\tpadding-right: 1.5em;\n\tpadding-left: 1.5em;\n\n\tmargin-left: 0;\n\tmargin-right: 0;\n\tfont-style: italic;\n\tborder-left: solid 5px hsl(0, 0%, 80%);\n}\n\n.ck-content[dir="rtl"] blockquote {\n\tborder-left: 0;\n\tborder-right: solid 5px hsl(0, 0%, 80%);\n}\n'],sourceRoot:""}]);const a=s},9262:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,'.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position{display:inline;pointer-events:none;position:relative}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{position:absolute;width:0}.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__selection-handle,.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__type-around{display:none}.ck.ck-clipboard-drop-target-line{pointer-events:none;position:absolute}:root{--ck-clipboard-drop-target-dot-width:12px;--ck-clipboard-drop-target-dot-height:8px;--ck-clipboard-drop-target-color:var(--ck-color-focus-border)}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{background:var(--ck-clipboard-drop-target-color);border:1px solid var(--ck-clipboard-drop-target-color);bottom:calc(var(--ck-clipboard-drop-target-dot-height)*-.5);margin-left:-1px;top:calc(var(--ck-clipboard-drop-target-dot-height)*-.5)}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span:after{border-color:var(--ck-clipboard-drop-target-color) transparent transparent transparent;border-style:solid;border-width:calc(var(--ck-clipboard-drop-target-dot-height)) calc(var(--ck-clipboard-drop-target-dot-width)*.5) 0 calc(var(--ck-clipboard-drop-target-dot-width)*.5);content:"";display:block;height:0;left:50%;position:absolute;top:calc(var(--ck-clipboard-drop-target-dot-height)*-.5);transform:translateX(-50%);width:0}.ck.ck-editor__editable .ck-widget.ck-clipboard-drop-target-range{outline:var(--ck-widget-outline-thickness) solid var(--ck-clipboard-drop-target-color)!important}.ck.ck-editor__editable .ck-widget:-webkit-drag{zoom:.6;outline:none!important}.ck.ck-clipboard-drop-target-line{background:var(--ck-clipboard-drop-target-color);border:1px solid var(--ck-clipboard-drop-target-color);height:0;margin-top:-1px}.ck.ck-clipboard-drop-target-line:before{border-style:solid;content:"";height:0;position:absolute;top:calc(var(--ck-clipboard-drop-target-dot-width)*-.5);width:0}[dir=ltr] .ck.ck-clipboard-drop-target-line:before{border-color:transparent transparent transparent var(--ck-clipboard-drop-target-color);border-width:calc(var(--ck-clipboard-drop-target-dot-width)*.5) 0 calc(var(--ck-clipboard-drop-target-dot-width)*.5) var(--ck-clipboard-drop-target-dot-height);left:-1px}[dir=rtl] .ck.ck-clipboard-drop-target-line:before{border-color:transparent var(--ck-clipboard-drop-target-color) transparent transparent;border-width:calc(var(--ck-clipboard-drop-target-dot-width)*.5) var(--ck-clipboard-drop-target-dot-height) calc(var(--ck-clipboard-drop-target-dot-width)*.5) 0;right:-1px}',"",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-clipboard/theme/clipboard.css","webpack://./node_modules/@ckeditor/ckeditor5-theme-lark/theme/ckeditor5-clipboard/clipboard.css"],names:[],mappings:"AASC,8DACC,cAAe,CAEf,mBAAoB,CADpB,iBAOD,CAJC,mEACC,iBAAkB,CAClB,OACD,CAWA,qJACC,YACD,CAIF,kCAEC,mBAAoB,CADpB,iBAED,CC9BA,MACC,yCAA0C,CAC1C,yCAA0C,CAC1C,6DACD,CAOE,mEAIC,gDAAiD,CADjD,sDAAuD,CAFvD,2DAA8D,CAI9D,gBAAiB,CAHjB,wDAqBD,CAfC,yEAWC,sFAAuF,CAEvF,kBAAmB,CADnB,qKAA0K,CAX1K,UAAW,CAIX,aAAc,CAFd,QAAS,CAIT,QAAS,CADT,iBAAkB,CAElB,wDAA2D,CAE3D,0BAA2B,CAR3B,OAYD,CAOF,kEACC,gGACD,CAKA,gDACC,OAAS,CACT,sBACD,CAGD,kCAGC,gDAAiD,CADjD,sDAAuD,CADvD,QAAS,CAGT,eAwBD,CAtBC,yCAMC,kBAAmB,CALnB,UAAW,CAIX,QAAS,CAHT,iBAAkB,CAClB,uDAA0D,CAC1D,OAiBD,CArBA,mDAYE,sFAAuF,CADvF,+JAAoK,CAFpK,SAYF,CArBA,mDAmBE,sFAAuF,CADvF,+JAAmK,CAFnK,UAKF",sourcesContent:["/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-editor__editable {\n\t/*\n\t * Vertical drop target (in text).\n\t */\n\t& .ck.ck-clipboard-drop-target-position {\n\t\tdisplay: inline;\n\t\tposition: relative;\n\t\tpointer-events: none;\n\n\t\t& span {\n\t\t\tposition: absolute;\n\t\t\twidth: 0;\n\t\t}\n\t}\n\n\t/*\n\t * Styles of the widget being dragged (its preview).\n\t */\n\t& .ck-widget:-webkit-drag {\n\t\t& > .ck-widget__selection-handle {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t& > .ck-widget__type-around {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n.ck.ck-clipboard-drop-target-line {\n\tposition: absolute;\n\tpointer-events: none;\n}\n","/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import \"@ckeditor/ckeditor5-ui/theme/mixins/_dir.css\";\n\n:root {\n\t--ck-clipboard-drop-target-dot-width: 12px;\n\t--ck-clipboard-drop-target-dot-height: 8px;\n\t--ck-clipboard-drop-target-color: var(--ck-color-focus-border);\n}\n\n.ck.ck-editor__editable {\n\t/*\n\t * Vertical drop target (in text).\n\t */\n\t& .ck.ck-clipboard-drop-target-position {\n\t\t& span {\n\t\t\tbottom: calc(-.5 * var(--ck-clipboard-drop-target-dot-height));\n\t\t\ttop: calc(-.5 * var(--ck-clipboard-drop-target-dot-height));\n\t\t\tborder: 1px solid var(--ck-clipboard-drop-target-color);\n\t\t\tbackground: var(--ck-clipboard-drop-target-color);\n\t\t\tmargin-left: -1px;\n\n\t\t\t/* The triangle above the marker */\n\t\t\t&::after {\n\t\t\t\tcontent: '';\n\t\t\t\twidth: 0;\n\t\t\t\theight: 0;\n\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 50%;\n\t\t\t\ttop: calc(-.5 * var(--ck-clipboard-drop-target-dot-height));\n\n\t\t\t\ttransform: translateX(-50%);\n\t\t\t\tborder-color: var(--ck-clipboard-drop-target-color) transparent transparent transparent;\n\t\t\t\tborder-width: calc(var(--ck-clipboard-drop-target-dot-height)) calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0 calc(.5 * var(--ck-clipboard-drop-target-dot-width));\n\t\t\t\tborder-style: solid;\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Styles of the widget that it a drop target.\n\t */\n\t& .ck-widget.ck-clipboard-drop-target-range {\n\t\toutline: var(--ck-widget-outline-thickness) solid var(--ck-clipboard-drop-target-color) !important;\n\t}\n\n\t/*\n\t * Styles of the widget being dragged (its preview).\n\t */\n\t& .ck-widget:-webkit-drag {\n\t\tzoom: 0.6;\n\t\toutline: none !important;\n\t}\n}\n\n.ck.ck-clipboard-drop-target-line {\n\theight: 0;\n\tborder: 1px solid var(--ck-clipboard-drop-target-color);\n\tbackground: var(--ck-clipboard-drop-target-color);\n\tmargin-top: -1px;\n\n\t&::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\ttop: calc(-.5 * var(--ck-clipboard-drop-target-dot-width));\n\t\twidth: 0;\n\t\theight: 0;\n\t\tborder-style: solid;\n\n\t\t@mixin ck-dir ltr {\n\t\t\tleft: -1px;\n\n\t\t\tborder-width: calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0 calc(.5 * var(--ck-clipboard-drop-target-dot-width)) var(--ck-clipboard-drop-target-dot-height);\n\t\t\tborder-color: transparent transparent transparent var(--ck-clipboard-drop-target-color);\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\tright: -1px;\n\n\t\t\tborder-width:calc(.5 * var(--ck-clipboard-drop-target-dot-width)) var(--ck-clipboard-drop-target-dot-height) calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0;\n\t\t\tborder-color: transparent var(--ck-clipboard-drop-target-color) transparent transparent;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=s},1111:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,".ck .ck-placeholder,.ck.ck-placeholder{position:relative}.ck .ck-placeholder:before,.ck.ck-placeholder:before{content:attr(data-placeholder);left:0;pointer-events:none;position:absolute;right:0}.ck.ck-read-only .ck-placeholder:before{display:none}.ck.ck-reset_all .ck-placeholder{position:relative}@media (forced-colors:active){.ck .ck-placeholder,.ck.ck-placeholder{forced-color-adjust:preserve-parent-color}}.ck .ck-placeholder:before,.ck.ck-placeholder:before{cursor:text}@media (forced-colors:none){.ck .ck-placeholder:before,.ck.ck-placeholder:before{color:var(--ck-color-engine-placeholder-text)}}@media (forced-colors:active){.ck .ck-placeholder:before,.ck.ck-placeholder:before{font-style:italic;margin-left:1px}}","",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-engine/theme/placeholder.css","webpack://./node_modules/@ckeditor/ckeditor5-ui/theme/mixins/_mediacolors.css","webpack://./node_modules/@ckeditor/ckeditor5-theme-lark/theme/ckeditor5-engine/placeholder.css"],names:[],mappings:"AAMA,uCAEC,iBAWD,CATC,qDAIC,8BAA+B,CAF/B,MAAO,CAKP,mBAAoB,CANpB,iBAAkB,CAElB,OAKD,CAKA,wCACC,YACD,CAQD,iCACC,iBACD,CC7BC,8BACC,uCCOA,yCDLA,CACD,CCOA,qDACC,WAmBD,CDvBA,4BACC,qDCMC,6CDJD,CACD,CAZA,8BACC,qDCsBC,iBAAkB,CAMlB,eD1BD,CACD",sourcesContent:["/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* See ckeditor/ckeditor5#936. */\n.ck.ck-placeholder,\n.ck .ck-placeholder {\n\tposition: relative;\n\n\t&::before {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tcontent: attr(data-placeholder);\n\n\t\t/* See ckeditor/ckeditor5#469. */\n\t\tpointer-events: none;\n\t}\n}\n\n/* See ckeditor/ckeditor5#1987. */\n.ck.ck-read-only .ck-placeholder {\n\t&::before {\n\t\tdisplay: none;\n\t}\n}\n\n/*\n * Rules for the `ck-placeholder` are loaded before the rules for `ck-reset_all` in the base CKEditor 5 DLL build.\n * This fix overwrites the incorrectly set `position: static` from `ck-reset_all`.\n * See https://github.com/ckeditor/ckeditor5/issues/11418.\n */\n.ck.ck-reset_all .ck-placeholder {\n\tposition: relative;\n}\n","/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@define-mixin ck-media-forced-colors {\n\t@media (forced-colors: active) {\n\t\t& {\n\t\t\t@mixin-content;\n\t\t}\n\t}\n}\n\n@define-mixin ck-media-default-colors {\n\t@media (forced-colors: none) {\n\t\t& {\n\t\t\t@mixin-content;\n\t\t}\n\t}\n}\n",'/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_mediacolors.css";\n\n/* See ckeditor/ckeditor5#936. */\n.ck.ck-placeholder, .ck .ck-placeholder {\n\t@mixin ck-media-forced-colors {\n\t\t/*\n\t\t * This is needed for Edge on Windows to use the right color for the placeholder content (::before).\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/14907.\n\t\t */\n\t\tforced-color-adjust: preserve-parent-color;\n\t}\n\n\t&::before {\n\t\tcursor: text;\n\n\t\t@mixin ck-media-default-colors {\n\t\t\tcolor: var(--ck-color-engine-placeholder-text);\n\t\t}\n\n\t\t@mixin ck-media-forced-colors {\n\t\t\t/*\n\t\t\t * In the high contrast mode there is no telling between regular and placeholder text. Using\n\t\t\t * italic text to address that issue. See https://github.com/ckeditor/ckeditor5/issues/14907.\n\t\t\t */\n\t\t\tfont-style: italic;\n\n\t\t\t/*\n\t\t\t * Without this margin, the caret will not show up and blink when the user puts the selection\n\t\t\t * in the placeholder (Edge on Windows). See https://github.com/ckeditor/ckeditor5/issues/14907.\n\t\t\t */\n\t\t\tmargin-left: 1px;\n\t\t}\n\t}\n}\n'],sourceRoot:""}]);const a=s},6531:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,".ck.ck-editor__editable span[data-ck-unsafe-element]{display:none}","",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-engine/theme/renderer.css"],names:[],mappings:"AAMA,qDACC,YACD",sourcesContent:["/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* Elements marked by the Renderer as hidden should be invisible in the editor. */\n.ck.ck-editor__editable span[data-ck-unsafe-element] {\n\tdisplay: none;\n}\n"],sourceRoot:""}]);const a=s},6186:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,".ck.ck-heading_heading1 .ck-button__label{font-size:20px}.ck.ck-heading_heading2 .ck-button__label{font-size:17px}.ck.ck-heading_heading3 .ck-button__label{font-size:14px}.ck[class*=ck-heading_heading]{font-weight:700}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__button .ck-button__label{width:8em}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__panel .ck-list__item{min-width:18em}","",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-heading/theme/heading.css","webpack://./node_modules/@ckeditor/ckeditor5-theme-lark/theme/ckeditor5-heading/heading.css"],names:[],mappings:"AAKA,0CACC,cACD,CAEA,0CACC,cACD,CAEA,0CACC,cACD,CAEA,+BACC,eACD,CCZC,2EACC,SACD,CAEA,uEACC,cACD",sourcesContent:['/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-heading_heading1 .ck-button__label {\n\tfont-size: 20px;\n}\n\n.ck.ck-heading_heading2 .ck-button__label {\n\tfont-size: 17px;\n}\n\n.ck.ck-heading_heading3 .ck-button__label {\n\tfont-size: 14px;\n}\n\n.ck[class*="ck-heading_heading"] {\n\tfont-weight: bold;\n}\n',"/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* Resize dropdown's button label. */\n.ck.ck-dropdown.ck-heading-dropdown {\n\t& .ck-dropdown__button .ck-button__label {\n\t\twidth: 8em;\n\t}\n\n\t& .ck-dropdown__panel .ck-list__item {\n\t\tmin-width: 18em;\n\t}\n}\n"],sourceRoot:""}]);const a=s},8574:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,".ck-content .image{clear:both;display:table;margin:.9em auto;min-width:50px;text-align:center}.ck-content .image img{display:block;height:auto;margin:0 auto;max-width:100%;min-width:100%}.ck-content .image-inline{align-items:flex-start;display:inline-flex;max-width:100%}.ck-content .image-inline picture{display:flex}.ck-content .image-inline img,.ck-content .image-inline picture{flex-grow:1;flex-shrink:1;max-width:100%}.ck.ck-editor__editable .image>figcaption.ck-placeholder:before{overflow:hidden;padding-left:inherit;padding-right:inherit;text-overflow:ellipsis;white-space:nowrap}.ck.ck-editor__editable .image{z-index:1}.ck.ck-editor__editable .image.ck-widget_selected{z-index:2}.ck.ck-editor__editable .image-inline{z-index:1}.ck.ck-editor__editable .image-inline.ck-widget_selected{z-index:2}.ck.ck-editor__editable .image-inline.ck-widget_selected ::selection{display:none}.ck.ck-editor__editable .image-inline img{height:auto}.ck.ck-editor__editable td .image-inline img,.ck.ck-editor__editable th .image-inline img{max-width:none}","",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-image/theme/image.css"],names:[],mappings:"AAMC,mBAEC,UAAW,CADX,aAAc,CAOd,gBAAkB,CAGlB,cAAe,CARf,iBA2BD,CAjBC,uBAEC,aAAc,CAad,WAAY,CAVZ,aAAc,CAGd,cAAe,CAGf,cAKD,CAGD,0BAYC,sBAAuB,CANvB,mBAAoB,CAGpB,cAoBD,CAdC,kCACC,YACD,CAGA,gEAGC,WAAY,CACZ,aAAc,CAGd,cACD,CAUD,gEASC,eAAgB,CARhB,oBAAqB,CACrB,qBAAsB,CAQtB,sBAAuB,CAFvB,kBAGD,CAKA,+BACC,SASD,CAHC,kDACC,SACD,CAMD,sCACC,SAkBD,CAZC,yDACC,SAUD,CAHC,qEACC,YACD,CAMF,0CACC,WACD,CAMC,0FACC,cACD",sourcesContent:['/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck-content {\n\t& .image {\n\t\tdisplay: table;\n\t\tclear: both;\n\t\ttext-align: center;\n\n\t\t/* Make sure there is some space between the content and the image. Center image by default. */\n\t\t/* The first value should be equal to --ck-spacing-large variable if used in the editor context\n\t \tto avoid the content jumping (See https://github.com/ckeditor/ckeditor5/issues/9825). */\n\t\tmargin: 0.9em auto;\n\n\t\t/* Make sure the caption will be displayed properly (See: https://github.com/ckeditor/ckeditor5/issues/1870). */\n\t\tmin-width: 50px;\n\n\t\t& img {\n\t\t\t/* Prevent unnecessary margins caused by line-height (see #44). */\n\t\t\tdisplay: block;\n\n\t\t\t/* Center the image if its width is smaller than the content\'s width. */\n\t\t\tmargin: 0 auto;\n\n\t\t\t/* Make sure the image never exceeds the size of the parent container (ckeditor/ckeditor5-ui#67). */\n\t\t\tmax-width: 100%;\n\n\t\t\t/* Make sure the image is never smaller than the parent container (See: https://github.com/ckeditor/ckeditor5/issues/9300). */\n\t\t\tmin-width: 100%;\n\n\t\t\t/* Keep proportions of the block image if the height is set and the image is wider than the editor width.\n\t\t\tSee https://github.com/ckeditor/ckeditor5/issues/14542. */\n\t\t\theight: auto;\n\t\t}\n\t}\n\n\t& .image-inline {\n\t\t/*\n\t\t * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).\n\t\t * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root.\n\t\t * This strange behavior does not happen with inline-flex.\n\t\t */\n\t\tdisplay: inline-flex;\n\n\t\t/* While being resized, don\'t allow the image to exceed the width of the editing root. */\n\t\tmax-width: 100%;\n\n\t\t/* This is required by Safari to resize images in a sensible way. Without this, the browser breaks the ratio. */\n\t\talign-items: flex-start;\n\n\t\t/* When the picture is present it must act as a flex container to let the img resize properly */\n\t\t& picture {\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t/* When the picture is present, it must act like a resizable img. */\n\t\t& picture,\n\t\t& img {\n\t\t\t/* This is necessary for the img to span the entire .image-inline wrapper and to resize properly. */\n\t\t\tflex-grow: 1;\n\t\t\tflex-shrink: 1;\n\n\t\t\t/* Prevents overflowing the editing root boundaries when an inline image is very wide. */\n\t\t\tmax-width: 100%;\n\t\t}\n\t}\n}\n\n.ck.ck-editor__editable {\n\t/*\n\t * Inhertit the content styles padding of the in case the integration overrides `text-align: center`\n\t * of `.image` (e.g. to the left/right). This ensures the placeholder stays at the padding just like the native\n\t * caret does, and not at the edge of .\n\t */\n\t& .image > figcaption.ck-placeholder::before {\n\t\tpadding-left: inherit;\n\t\tpadding-right: inherit;\n\n\t\t/*\n\t\t * Make sure the image caption placeholder doesn\'t overflow the placeholder area.\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/9162.\n\t\t */\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t/*\n\t * See https://github.com/ckeditor/ckeditor5/issues/15115.\n\t */\n\t& .image {\n\t\tz-index: 1;\n\n\t\t/*\n\t\t * Make sure the selected image always stays on top of its siblings.\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/9108.\n\t\t */\n\t\t&.ck-widget_selected {\n\t\t\tz-index: 2;\n\t\t}\n\t}\n\n\t/*\n\t * See https://github.com/ckeditor/ckeditor5/issues/15115.\n\t */\n\t& .image-inline {\n\t\tz-index: 1;\n\n\t\t/*\n\t\t * Make sure the selected inline image always stays on top of its siblings.\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/9108.\n\t\t */\n\t\t&.ck-widget_selected {\n\t\t\tz-index: 2;\n\n\t\t\t/*\n\t\t\t * Make sure the native browser selection style is not displayed.\n\t\t\t * Inline image widgets have their own styles for the selected state and\n\t\t\t * leaving this up to the browser is asking for a visual collision.\n\t\t\t */\n\t\t\t& ::selection {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* Keep proportions of the inline image if the height is set and the image is wider than the editor width.\n\tSee https://github.com/ckeditor/ckeditor5/issues/14542. */\n\t& .image-inline img {\n\t\theight: auto;\n\t}\n\n\t/* The inline image nested in the table should have its original size if not resized.\n\tSee https://github.com/ckeditor/ckeditor5/issues/9117. */\n\t& td,\n\t& th {\n\t\t& .image-inline img {\n\t\t\tmax-width: none;\n\t\t}\n\t}\n}\n'],sourceRoot:""}]);const a=s},3038:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,":root{--ck-color-image-caption-background:#f7f7f7;--ck-color-image-caption-text:#333;--ck-color-image-caption-highlighted-background:#fd0}.ck-content .image>figcaption{background-color:var(--ck-color-image-caption-background);caption-side:bottom;color:var(--ck-color-image-caption-text);display:table-caption;font-size:.75em;outline-offset:-1px;padding:.6em;word-break:break-word}@media (forced-colors:active){.ck-content .image>figcaption{background-color:unset;color:unset}}@media (forced-colors:none){.ck.ck-editor__editable .image>figcaption.image__caption_highlighted{animation:ck-image-caption-highlight .6s ease-out}}@media (prefers-reduced-motion:reduce){.ck.ck-editor__editable .image>figcaption.image__caption_highlighted{animation:none}}@keyframes ck-image-caption-highlight{0%{background-color:var(--ck-color-image-caption-highlighted-background)}to{background-color:var(--ck-color-image-caption-background)}}","",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-image/theme/imagecaption.css","webpack://./node_modules/@ckeditor/ckeditor5-ui/theme/mixins/_mediacolors.css"],names:[],mappings:"AAOA,MACC,2CAAoD,CACpD,kCAA8C,CAC9C,oDACD,CAGA,8BAKC,yDAA0D,CAH1D,mBAAoB,CAEpB,wCAAyC,CAHzC,qBAAsB,CAMtB,eAAgB,CAChB,mBAAoB,CAFpB,YAAa,CAHb,qBAYD,CAJC,8BAXD,8BAYE,sBAAuB,CACvB,WAEF,CADC,CCdA,4BACC,qEDmBA,iDCjBA,CACD,CDmBA,uCALD,qEAME,cAEF,CADC,CAGD,sCACC,GACC,qEACD,CAEA,GACC,yDACD,CACD",sourcesContent:['/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_mediacolors.css";\n\n:root {\n\t--ck-color-image-caption-background: hsl(0, 0%, 97%);\n\t--ck-color-image-caption-text: hsl(0, 0%, 20%);\n\t--ck-color-image-caption-highlighted-background: hsl(52deg 100% 50%);\n}\n\n/* Content styles */\n.ck-content .image > figcaption {\n\tdisplay: table-caption;\n\tcaption-side: bottom;\n\tword-break: break-word;\n\tcolor: var(--ck-color-image-caption-text);\n\tbackground-color: var(--ck-color-image-caption-background);\n\tpadding: .6em;\n\tfont-size: .75em;\n\toutline-offset: -1px;\n\n\t/* Improve placeholder rendering in high-constrast mode (https://github.com/ckeditor/ckeditor5/issues/14907). */\n\t@media (forced-colors: active) {\n\t\tbackground-color: unset;\n\t\tcolor: unset;\n\t}\n}\n\n/* Editing styles */\n.ck.ck-editor__editable .image > figcaption.image__caption_highlighted {\n\t@mixin ck-media-default-colors {\n\t\tanimation: ck-image-caption-highlight .6s ease-out;\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\tanimation: none;\n\t}\n}\n\n@keyframes ck-image-caption-highlight {\n\t0% {\n\t\tbackground-color: var(--ck-color-image-caption-highlighted-background);\n\t}\n\n\t100% {\n\t\tbackground-color: var(--ck-color-image-caption-background);\n\t}\n}\n',"/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@define-mixin ck-media-forced-colors {\n\t@media (forced-colors: active) {\n\t\t& {\n\t\t\t@mixin-content;\n\t\t}\n\t}\n}\n\n@define-mixin ck-media-default-colors {\n\t@media (forced-colors: none) {\n\t\t& {\n\t\t\t@mixin-content;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const a=s},1173:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,".ck.ck-image-custom-resize-form{align-items:flex-start;display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-image-custom-resize-form .ck-labeled-field-view{display:inline-block}.ck.ck-image-custom-resize-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-image-custom-resize-form{flex-wrap:wrap}.ck.ck-image-custom-resize-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-image-custom-resize-form .ck-button{flex-basis:50%}}","",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-image/theme/imagecustomresizeform.css","webpack://./node_modules/@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css"],names:[],mappings:"AAOA,gCAIC,sBAAuB,CAHvB,YAAa,CACb,kBAAmB,CACnB,gBAsBD,CAnBC,uDACC,oBACD,CAEA,0CACC,YACD,CCbA,oCDCD,gCAeE,cAUF,CARE,uDACC,eACD,CAEA,2CACC,cACD,CCtBD",sourcesContent:['/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css";\n\n.ck.ck-image-custom-resize-form {\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\talign-items: flex-start;\n\n\t& .ck-labeled-field-view {\n\t\tdisplay: inline-block;\n\t}\n\n\t& .ck-label {\n\t\tdisplay: none;\n\t}\n\n\t@mixin ck-media-phone {\n\t\tflex-wrap: wrap;\n\n\t\t& .ck-labeled-field-view {\n\t\t\tflex-basis: 100%;\n\t\t}\n\n\t\t& .ck-button {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n',"/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@define-mixin ck-media-phone {\n\t@media screen and (max-width: 600px) {\n\t\t@mixin-content;\n\t}\n}\n"],sourceRoot:""}]);const a=s},1545:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,".ck.ck-image-insert-url{padding:var(--ck-spacing-large) var(--ck-spacing-large) 0;width:400px}.ck.ck-image-insert-url .ck-image-insert-url__action-row{display:grid;grid-template-columns:repeat(2,1fr)}:root{--ck-image-insert-insert-by-url-width:250px}.ck.ck-image-insert-url{--ck-input-width:100%}.ck.ck-image-insert-url .ck-image-insert-url__action-row{grid-column-gap:var(--ck-spacing-large);margin-top:var(--ck-spacing-large)}.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button-cancel,.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button-save{justify-content:center;min-width:auto}.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}.ck.ck-image-insert-form>.ck.ck-button{display:block;width:100%}[dir=ltr] .ck.ck-image-insert-form>.ck.ck-button{text-align:left}[dir=rtl] .ck.ck-image-insert-form>.ck.ck-button{text-align:right}.ck.ck-image-insert-form>.ck.ck-collapsible:not(:first-child){border-top:1px solid var(--ck-color-base-border)}.ck.ck-image-insert-form>.ck.ck-collapsible:not(:last-child){border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-image-insert-form>.ck.ck-collapsible,.ck.ck-image-insert-form>.ck.ck-image-insert-url{min-width:var(--ck-image-insert-insert-by-url-width)}.ck.ck-image-insert-form>.ck.ck-image-insert-url{padding:var(--ck-spacing-large)}.ck.ck-image-insert-form:focus{outline:none}","",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-image/theme/imageinsert.css","webpack://./node_modules/@ckeditor/ckeditor5-theme-lark/theme/ckeditor5-image/imageinsert.css"],names:[],mappings:"AAKA,wBAEC,yDAA0D,CAD1D,WAOD,CAJC,yDACC,YAAa,CACb,mCACD,CCLD,MACC,2CACD,CAEA,wBACC,qBAgBD,CAdC,yDACC,uCAAwC,CACxC,kCAWD,CATC,oJAEC,sBAAuB,CACvB,cACD,CAEA,sFACC,0BACD,CAKD,uCACC,aAAc,CACd,UASD,CAXA,iDAKE,eAMF,CAXA,iDASE,gBAEF,CAGC,8DACC,gDACD,CAEA,6DACC,mDACD,CAMD,6FAJC,oDAOD,CAHA,iDAEC,+BACD,CAEA,+BACC,YACD",sourcesContent:["/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-image-insert-url {\n\twidth: 400px;\n\tpadding: var(--ck-spacing-large) var(--ck-spacing-large) 0;\n\n\t& .ck-image-insert-url__action-row {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: repeat(2, 1fr);\n\t}\n}\n",'/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n@import "@ckeditor/ckeditor5-ui/theme/mixins/_dir.css";\n\n:root {\n\t--ck-image-insert-insert-by-url-width: 250px;\n}\n\n.ck.ck-image-insert-url {\n\t--ck-input-width: 100%;\n\n\t& .ck-image-insert-url__action-row {\n\t\tgrid-column-gap: var(--ck-spacing-large);\n\t\tmargin-top: var(--ck-spacing-large);\n\n\t\t& .ck-button-save,\n\t\t& .ck-button-cancel {\n\t\t\tjustify-content: center;\n\t\t\tmin-width: auto;\n\t\t}\n\n\t\t& .ck-button .ck-button__label {\n\t\t\tcolor: var(--ck-color-text);\n\t\t}\n\t}\n}\n\n.ck.ck-image-insert-form {\n\t& > .ck.ck-button {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\n\t\t@mixin ck-dir ltr {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\t@mixin ck-dir rtl {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n\n\t& > .ck.ck-collapsible {\n\t\t&:not(:first-child) {\n\t\t\tborder-top: 1px solid var(--ck-color-base-border);\n\t\t}\n\n\t\t&:not(:last-child) {\n\t\t\tborder-bottom: 1px solid var(--ck-color-base-border);\n\t\t}\n\n\t\tmin-width: var(--ck-image-insert-insert-by-url-width);\n\t}\n\n\t/* This is the case when there are no other integrations configured than insert by URL */\n\t& > .ck.ck-image-insert-url {\n\t\tmin-width: var(--ck-image-insert-insert-by-url-width);\n\t\tpadding: var(--ck-spacing-large);\n\t}\n\n\t&:focus {\n\t\toutline: none;\n\t}\n}\n'],sourceRoot:""}]);const a=s},1091:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,".ck.ck-editor__editable img.image_placeholder{background-size:100% 100%}","",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-image/theme/imageplaceholder.css"],names:[],mappings:"AAMC,8CACC,yBACD",sourcesContent:["/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n.ck.ck-editor__editable {\n\t& img.image_placeholder {\n\t\tbackground-size: 100% 100%;\n\t}\n}\n"],sourceRoot:""}]);const a=s},4214:(e,t,o)=>{"use strict";o.d(t,{A:()=>a});var n=o(1354),i=o.n(n),r=o(6314),s=o.n(r)()(i());s.push([e.id,".ck-content img.image_resized{height:auto}.ck-content .image.image_resized{box-sizing:border-box;display:block;max-width:100%}.ck-content .image.image_resized img{width:100%}.ck-content .image.image_resized>figcaption{display:block}.ck.ck-editor__editable td .image-inline.image_resized img,.ck.ck-editor__editable th .image-inline.image_resized img{max-width:100%}[dir=ltr] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-left:var(--ck-spacing-standard)}.ck.ck-dropdown .ck-button.ck-resize-image-button .ck-button__label{width:4em}","",{version:3,sources:["webpack://./node_modules/@ckeditor/ckeditor5-image/theme/imageresize.css"],names:[],mappings:"AAMA,8BACC,WACD,CAEA,iCAQC,qBAAsB,CADtB,aAAc,CANd,cAkBD,CATC,qCAEC,UACD,CAEA,4CAEC,aACD,CAQC,sHACC,cACD,CAIF,oFACC,uCACD,CAEA,oFACC,sCACD,CAEA,oEACC,SACD",sourcesContent:['/*\n * Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/* Preserve aspect ratio of the resized image after introducing image height attribute. */\n.ck-content img.image_resized {\n\theight: auto;\n}\n\n.ck-content .image.image_resized {\n\tmax-width: 100%;\n\t/*\n\tThe `