diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index fbeabfd68b2e..079034343892 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -172,12 +172,6 @@ def labeled_check_box_tags(name, collection, options = {})
end.join.html_safe
end
- def html_hours(text)
- html_safe_gsub(text,
- %r{(\d+)\.(\d+)},
- '\1.\2')
- end
-
def html_safe_gsub(string, *gsub_args, &)
html_safe = string.html_safe?
result = string.gsub(*gsub_args, &)
diff --git a/app/views/versions/show.html.erb b/app/views/versions/show.html.erb
index b1c43a297acc..63198f80c000 100644
--- a/app/views/versions/show.html.erb
+++ b/app/views/versions/show.html.erb
@@ -73,12 +73,12 @@ See COPYRIGHT and LICENSE files for more details.
<%= Version.human_attribute_name(:estimated_hours) %> |
- <%= html_hours(l_hours(@version.estimated_hours)) %> |
+ <%= l_hours(@version.estimated_hours) %> |
<% if User.current.allowed_in_project?(:view_time_entries, @project) %>
<%= t(:label_spent_time) %> |
- <%= html_hours(l_hours(@version.spent_hours)) %> |
+ <%= l_hours(@version.spent_hours) %> |
<% end %>
diff --git a/app/workers/application_job.rb b/app/workers/application_job.rb
index 44c81ab93723..c2197a5f15bd 100644
--- a/app/workers/application_job.rb
+++ b/app/workers/application_job.rb
@@ -30,13 +30,7 @@
class ApplicationJob < ActiveJob::Base
include ::JobStatus::ApplicationJobWithStatus
-
- ##
- # By default, do not log the arguments of a background job
- # to avoid leaking sensitive information to logs
- self.log_arguments = false
-
- around_perform :prepare_job_context
+ include SharedJobSetup
##
# Return a priority number on the given payload
@@ -65,45 +59,7 @@ def self.queue_with_priority(value = :default)
end
end
- # Resets the thread local request store.
- # This should be done, because normal application code expects the RequestStore to be
- # invalidated between multiple requests and does usually not care whether it is executed
- # from a request or from a delayed job.
- # For a delayed job, each job execution is the thing that comes closest to
- # the concept of a new request.
- def with_clean_request_store
- store = RequestStore.store
-
- begin
- RequestStore.clear!
- yield
- ensure
- # Reset to previous value
- RequestStore.clear!
- RequestStore.store.merge! store
- end
- end
-
- # Reloads the thread local ActionMailer configuration.
- # Since the email configuration is now done in the web app, we need to
- # make sure that any changes to the configuration is correctly picked up
- # by the background jobs at runtime.
- def reload_mailer_settings!
- Setting.reload_mailer_settings!
- end
-
def job_scheduled_at
GoodJob::Job.where(id: job_id).pick(:scheduled_at)
end
-
- private
-
- def prepare_job_context
- with_clean_request_store do
- ::OpenProject::Appsignal.tag_request
- reload_mailer_settings!
-
- yield
- end
- end
end
diff --git a/app/workers/mails/mailer_job.rb b/app/workers/mails/mailer_job.rb
index beaed7c77fae..696daa79ec4a 100644
--- a/app/workers/mails/mailer_job.rb
+++ b/app/workers/mails/mailer_job.rb
@@ -26,46 +26,44 @@
# See COPYRIGHT and LICENSE files for more details.
#++
-##
-# This job gets called when internally using
+# OpenProject is configured to use this job when sending emails like this:
#
# ```
# UserMailer.some_mail("some param").deliver_later
# ```
#
-# because we want to have the sending of the email run in an `ApplicationJob`
-# as opposed to using `ActiveJob::QueueAdapters::DelayedJobAdapter::JobWrapper`.
-# We want it to run in an `ApplicationJob` because of the shared setup required
-# such as reloading the mailer configuration and resetting the request store.
-class Mails::MailerJob < ApplicationJob
- queue_as { ActionMailer::Base.deliver_later_queue_name }
-
- # Retry mailing jobs three times with polinomial backoff
- retry_on StandardError, wait: :polynomially_longer, attempts: 3
-
- # If exception is handled in mail handler
- # retry_on will be ignored
- rescue_from StandardError, with: :handle_exception_with_mailer_class
-
- def perform(mailer, mail_method, delivery, args:)
- mailer.constantize.public_send(mail_method, *args).send(delivery)
- end
-
- private
-
- # "Deserialize" the mailer class name by hand in case another argument
- # (like a Global ID reference) raised DeserializationError.
- def mailer_class
- if mailer = Array(@serialized_arguments).first || Array(arguments).first
- mailer.constantize
- end
- end
+# This job is used because all our `XxxMailer` classes inherit from
+# `ApplicationMailer`, and `ApplicationMailer.delivery_job` is set to
+# `::Mails::MailerJob`.
+#
+# The `delivery_job` is customized to add the shared job setup required for
+# OpenProject such as reloading the mailer configuration and resetting the
+# request store on each job execution.
+#
+# It also adds retry logic to the job.
+class Mails::MailerJob < ActionMailer::MailDeliveryJob
+ include SharedJobSetup
- def handle_exception_with_mailer_class(exception)
- if klass = mailer_class
- klass.handle_exception exception
- else
- raise exception
- end
- end
+ # Retry mailing jobs 14 times with polynomial backoff (retries for ~ 1.5 days).
+ #
+ # with polynomial backoff, the formula to get wait_duration is:
+ #
+ # ((executions**4) + (Kernel.rand * (executions**4) * jitter)) + 2
+ #
+ # as the default jitter is 0.0, the formula becomes:
+ #
+ # ((executions**4) + 2)
+ #
+ # To get the numbers, run this:
+ #
+ # (1..20).reduce(0) do |total_wait, i|
+ # wait = (i**4) + 2
+ # total_wait += wait
+ # puts "Execution #{i} waits #{wait} secs. Total wait: #{total_wait} secs"
+ # total_wait
+ # end
+ #
+ # We set attemps to 14 to have it retry for 127715 seconds which is more than
+ # 1 day (~= 1 day 11 hours 30 min)
+ retry_on StandardError, wait: :polynomially_longer, attempts: 14
end
diff --git a/app/workers/shared_job_setup.rb b/app/workers/shared_job_setup.rb
new file mode 100644
index 000000000000..21019b136b1d
--- /dev/null
+++ b/app/workers/shared_job_setup.rb
@@ -0,0 +1,92 @@
+# 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.
+#++
+
+# Shared setup for jobs.
+#
+# This module is included in `ApplicationJob` and `Mails::MailerJob` and does
+# the following:
+#
+# - disable logging of arguments
+# - before each job execution:
+# - reloads the mailer settings
+# - resets the request store
+# - tags the request for AppSignal
+module SharedJobSetup
+ extend ActiveSupport::Concern
+
+ included do
+ # By default, do not log the arguments of a background job
+ # to avoid leaking sensitive information to logs
+ self.log_arguments = false
+
+ around_perform :prepare_job_context
+ end
+
+ # Prepare the job execution by cleaning the request store, reloading the
+ # mailer settings and tagging the request
+ def prepare_job_context
+ with_clean_request_store do
+ ::OpenProject::Appsignal.tag_request
+ reload_mailer_settings!
+
+ yield
+ end
+ end
+
+ # Resets the thread local request store.
+ #
+ # This should be done, because normal application code expects the
+ # RequestStore to be invalidated between multiple requests and does usually
+ # not care whether it is executed from a request or from a job.
+ #
+ # For a job, each job execution is the thing that comes closest to the concept
+ # of a new request.
+ def with_clean_request_store
+ store = RequestStore.store
+
+ begin
+ RequestStore.clear!
+ yield
+ ensure
+ # Reset to previous value
+ RequestStore.clear!
+ RequestStore.store.merge! store
+ end
+ end
+
+ # Reloads the thread local ActionMailer configuration.
+ #
+ # Since the email configuration is done in the web app, it makes sure that any
+ # changes to the configuration is correctly picked up by the background jobs
+ # at runtime.
+ def reload_mailer_settings!
+ Setting.reload_mailer_settings!
+ end
+end
diff --git a/config/locales/crowdin/af.yml b/config/locales/crowdin/af.yml
index 4c0028225c86..0167913ad3ae 100644
--- a/config/locales/crowdin/af.yml
+++ b/config/locales/crowdin/af.yml
@@ -813,7 +813,7 @@ af:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/ar.yml b/config/locales/crowdin/ar.yml
index 757722d22c9b..4344ce673d6b 100644
--- a/config/locales/crowdin/ar.yml
+++ b/config/locales/crowdin/ar.yml
@@ -841,7 +841,7 @@ ar:
blank: "لا يمكن أن يكون فارغا."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "حزمة العمل لا يمكن أن تكون مرتبطة إلى واحدة من المهام الفرعية."
circular_dependency: "ان هذه العلاقة خلق تبعية دائرية."
confirmation: "لا يتطابق مع %{attribute}."
diff --git a/config/locales/crowdin/az.yml b/config/locales/crowdin/az.yml
index 8c1d910aa90a..33b6a300eb20 100644
--- a/config/locales/crowdin/az.yml
+++ b/config/locales/crowdin/az.yml
@@ -813,7 +813,7 @@ az:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/be.yml b/config/locales/crowdin/be.yml
index 9ba756954d59..22fd9237c5a5 100644
--- a/config/locales/crowdin/be.yml
+++ b/config/locales/crowdin/be.yml
@@ -827,7 +827,7 @@ be:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/bg.yml b/config/locales/crowdin/bg.yml
index ec3975f47567..a2ee01f88351 100644
--- a/config/locales/crowdin/bg.yml
+++ b/config/locales/crowdin/bg.yml
@@ -813,7 +813,7 @@ bg:
blank: "не може да бъде празно."
blank_nested: "трябва да бъде зададено свойството '%{property}'."
cannot_delete_mapping: "е необходимо. Не може да бъде изтрит."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Работния пакет не може да бъде свързан с една от неговите подзадачи."
circular_dependency: "Тази връзка ще доведе до циклична зависимост."
confirmation: "не съвпада с %{attribute}."
diff --git a/config/locales/crowdin/ca.yml b/config/locales/crowdin/ca.yml
index f7fddd1ecfc2..1916c7f98f3c 100644
--- a/config/locales/crowdin/ca.yml
+++ b/config/locales/crowdin/ca.yml
@@ -809,7 +809,7 @@ ca:
blank: "no pot estar en blanc."
blank_nested: "és necessari de definir la propietat '%{property}' ."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Un paquet de treball no es pot enllaçar a una de les seves subtasques."
circular_dependency: "Aquesta relació crearia una dependència circular."
confirmation: "no coincideix amb el %{attribute}."
diff --git a/config/locales/crowdin/ckb-IR.yml b/config/locales/crowdin/ckb-IR.yml
index 0d17830c386f..7d0575a44357 100644
--- a/config/locales/crowdin/ckb-IR.yml
+++ b/config/locales/crowdin/ckb-IR.yml
@@ -813,7 +813,7 @@ ckb-IR:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/cs.yml b/config/locales/crowdin/cs.yml
index 4fb69fb01462..0dc71dd91eed 100644
--- a/config/locales/crowdin/cs.yml
+++ b/config/locales/crowdin/cs.yml
@@ -827,7 +827,7 @@ cs:
blank: "nemůže být prázdné."
blank_nested: "musí mít nastavenou vlastnost '%{property}'."
cannot_delete_mapping: "je povinné. Nelze odstranit."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Pracovní balíček nemůže být propojen s jedním z jeho podúkolů."
circular_dependency: "Tento vztah by vytvořil kruhovou závislost."
confirmation: "neshoduje se s %{attribute}."
diff --git a/config/locales/crowdin/da.yml b/config/locales/crowdin/da.yml
index 1de17870c4b5..78db37daada1 100644
--- a/config/locales/crowdin/da.yml
+++ b/config/locales/crowdin/da.yml
@@ -811,7 +811,7 @@ da:
blank: "må ikke være tomt."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "En arbejdspakke kan ikke knyttes til en af dens underopgaver."
circular_dependency: "Denne relation vil skabe en cirkulær afhængighed."
confirmation: "matcher ikke %{attribute}."
diff --git a/config/locales/crowdin/de.yml b/config/locales/crowdin/de.yml
index b4312498faf8..9be1b3f132dc 100644
--- a/config/locales/crowdin/de.yml
+++ b/config/locales/crowdin/de.yml
@@ -807,7 +807,7 @@ de:
blank: "muss ausgefüllt werden."
blank_nested: "muss die Eigenschaft '%{property}' gesetzt haben."
cannot_delete_mapping: "ist erforderlich. Kann nicht gelöscht werden."
- is_for_all_cannot_modify: "ist für alle. Kann nicht geändert werden."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Ein Arbeitspaket kann nicht mit einer seiner Unteraufgaben verlinkt werden."
circular_dependency: "Diese Beziehung würde eine zyklische Abhängigkeit erzeugen."
confirmation: "stimmt nicht mit %{attribute} überein."
@@ -1797,8 +1797,8 @@ de:
progress_mode_changed_to_status_based: "Fortschrittsberechnung aktualisiert"
status_changed: "Status '%{status_name}'"
system_update: "OpenProject-Systemaktualisierung:"
- total_percent_complete_mode_changed_to_work_weighted_average: "Calculation of % Complete totals now weighted by Work."
- total_percent_complete_mode_changed_to_simple_average: "Calculation of % Complete totals now based on a simple average of only % Complete values."
+ total_percent_complete_mode_changed_to_work_weighted_average: "Die Berechnung der Gesamtwerte für % abgeschlossen wird jetzt nach Aufwand gewichtet."
+ total_percent_complete_mode_changed_to_simple_average: "Die Berechnung der Gesamtwerte für % abgeschlossen basiert jetzt auf dem einfachen Durchschnitt der % abgeschlossen-Werte."
cause_descriptions:
work_package_predecessor_changed_times: durch Änderungen am Vorgänger %{link}
work_package_parent_changed_times: durch Änderungen am übergeordneten Arbeitspaket %{link}
@@ -3199,13 +3199,13 @@ de:
setting_sys_api_enabled: "Den Web-Service zur Projektarchiv-Verwaltung aktivieren"
setting_sys_api_description: "Der Web-Service für Projektarchiv-Verwaltung erlaubt Integration und Nutzer-Autorisierung für den Zugriff auf Projektarchive."
setting_time_format: "Zeit"
- setting_total_percent_complete_mode: "Calculation of % Complete hierarchy totals"
+ setting_total_percent_complete_mode: "Berechnung des Gesamtwerts % abgeschlossen in Hierarchien"
setting_total_percent_complete_mode_work_weighted_average: "Nach Arbeit gewichtet"
setting_total_percent_complete_mode_work_weighted_average_caption_html: >-
- The total % Complete will be weighted against the Work of each work package in the hierarchy. Work packages without Work will be ignored.
+ Der Gesamtwert % abgeschlossen wird gegen den Aufwand der einzelnen Arbeitspakete in der Hierarchie gewichtet. Arbeitspakete ohne Aufwand werden ignoriert.
setting_total_percent_complete_mode_simple_average: "Einfacher Durchschnitt"
setting_total_percent_complete_mode_simple_average_caption_html: >-
- Work is ignored and the total % Complete will be a simple average of % Complete values of work packages in the hierarchy.
+ Der Aufwand wird ignoriert und der Gesamtwert % abgeschlossen ist der einfache Durchschnitt der % abgeschlossen Werte der Arbeitspakete in der Hierarchie.
setting_accessibility_mode_for_anonymous: "Barrierefreien Modus für nicht angemeldete Nutzer aktivieren"
setting_user_format: "Format des Benutzernamens"
setting_user_default_timezone: "Standard-Zeitzone für Benutzer"
diff --git a/config/locales/crowdin/el.yml b/config/locales/crowdin/el.yml
index ec4b48c0b0b8..3551d0a8653f 100644
--- a/config/locales/crowdin/el.yml
+++ b/config/locales/crowdin/el.yml
@@ -809,7 +809,7 @@ el:
blank: "δεν πρέπει να είναι κενό."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Ένα πακέτο εργασίας δεν μπορεί να συνδεθεί με μια από τις υποεργασίες του."
circular_dependency: "Αυτή η σχέση θα δημιουργήσει κυκλική εξάρτηση."
confirmation: "δεν ταιριάζει με %{attribute}."
diff --git a/config/locales/crowdin/eo.yml b/config/locales/crowdin/eo.yml
index 07f7079bc16b..59eba78af17a 100644
--- a/config/locales/crowdin/eo.yml
+++ b/config/locales/crowdin/eo.yml
@@ -813,7 +813,7 @@ eo:
blank: "ne povas esti malplena."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Laborpakaĵo ne povis esti ligita al unu el siaj subtaskoj."
circular_dependency: "Tiu ĉi rilato povus krei cirklan dependon."
confirmation: "ne kongruas kun %{attribute}"
diff --git a/config/locales/crowdin/es.yml b/config/locales/crowdin/es.yml
index ecddb4721874..066dc9696c4b 100644
--- a/config/locales/crowdin/es.yml
+++ b/config/locales/crowdin/es.yml
@@ -31,9 +31,9 @@ es:
custom_styles:
color_theme: "Tema de color"
color_theme_custom: "(Personalizado)"
- tab_interface: "Interface"
- tab_branding: "Branding"
- tab_pdf_export_styles: "PDF export styles"
+ tab_interface: "Interfaz"
+ tab_branding: "Personalización de marca"
+ tab_pdf_export_styles: "Estilos de exportación PDF"
colors:
primary-button-color: "Botón primario"
accent-color: "Acento"
@@ -82,7 +82,7 @@ es:
contact: "Contáctenos para una demostración"
enterprise_info_html: "es una extensión Enterprise ."
upgrade_info: "Actualice a un plan de pago para activarlo y empezar a usarlo en su equipo."
- jemalloc_allocator: Jemalloc memory allocator
+ jemalloc_allocator: Asignador de memoria Jemalloc
journal_aggregation:
explanation:
text: "Las acciones individuales de un usuario (como actualizar dos veces un paquete de trabajo) se combinan en una sola acción si la diferencia de antigüedad es inferior al intervalo de tiempo especificado. Se mostrarán como una sola acción en la aplicación. También se retrasarán las notificaciones por la misma cantidad de tiempo, lo que reducirá el número de correos electrónicos enviados y causará también que se retrase el %{webhook_link}."
@@ -206,8 +206,8 @@ es:
admin:
custom_field_projects:
is_for_all_blank_slate:
- heading: For all projects
- description: This custom field is enabled in all projects since the "For all projects" option is checked. It cannot be deactivated for individual projects.
+ heading: Para todos los proyectos
+ description: Este campo personalizado está activado en todos los proyectos, ya que la opción «Para todos los proyectos» está marcada. No puede desactivarse para proyectos individuales.
text_add_new_custom_field: >
Para agregar nuevos campos personalizados a un proyecto, primero debe crearlos, y luego añadirlos a este proyecto.
is_enabled_globally: "Está activado a nivel global"
@@ -637,8 +637,8 @@ es:
uid: "ID de cliente"
secret: "Clave de cliente secreta"
owner: "Propietario"
- builtin: "Builtin"
- enabled: "Active"
+ builtin: "Incorporado"
+ enabled: "Activo"
redirect_uri: "Redireccionar URI"
client_credentials_user_id: "ID de Usuario de Credenciales del Cliente"
scopes: "Ámbitos"
@@ -810,7 +810,7 @@ es:
blank: "no puede estar en blanco."
blank_nested: "necesita tener la propiedad '%{property}' definida."
cannot_delete_mapping: "es obligatorio. No se puede eliminar."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Un paquete de trabajo no puede ser vinculado a una de sus subtareas."
circular_dependency: "Esta relación podría crear una dependencia circular."
confirmation: "no coincide con %{attribute}."
@@ -887,7 +887,7 @@ es:
custom_fields_project:
attributes:
project_ids:
- blank: "Please select a project."
+ blank: "Seleccione un proyecto."
custom_actions:
only_one_allowed: "Solo se permite un valor (%{name})."
empty: "El valor (%{name}) no puede estar vacío."
@@ -919,7 +919,7 @@ es:
blank: "es obligatorio. Por favor, seleccione un nombre."
not_unique: "ya está en uso. Por favor, seleccione otro nombre."
meeting:
- error_conflict: "Unable to save because the meeting was updated by someone else in the meantime. Please reload the page."
+ error_conflict: "No se ha podido guardar porque otra persona ha actualizado la reunión mientras tanto. Vuelva a cargar la página."
notifications:
at_least_one_channel: "Debe especificarse al menos un canal para enviar notificaciones."
attributes:
@@ -1411,8 +1411,8 @@ es:
failure_message: Consentimiento fallido, no puede continuar.
title: Consentimiento del usuario
decline_warning_message: Usted ha declinado consentir y ha sido desconectado.
- user_has_consented: The user gave their consent to your [configured consent information text](consent_settings).
- not_yet_consented: The user has not yet given their consent to your [configured consent information text](consent_settings). They will be reminded the next time they log in.
+ user_has_consented: El usuario ha dado su consentimiento a su [texto de información de consentimiento configurado](consent_settings).
+ not_yet_consented: El usuario aún no ha dado su consentimiento a su [texto de información de consentimiento configurado](consent_settings). Se le recordará la próxima vez que se conecte.
contact_mail_instructions: Defina la dirección de correo a la que los usuarios pueden acceder a un controlador de datos a fin de realizar cambios de datos o solicitudes de eliminación.
contact_your_administrator: Por favor, contacte su administrador si desea eliminar su cuenta.
contact_this_mail_address: Por favor, contacte con %{mail_address} para eliminar su cuenta.
@@ -1645,7 +1645,7 @@ es:
error_menu_item_not_saved: Elemento de menú no podría ser guardado
error_wiki_root_menu_item_conflict: >
No se puede renombrar "%{old_name}" a "%{new_name}" debido a un conflicto en el elemento de menú resultante con el elemento de menú existente "%{existing_caption}" (%{existing_identifier}).
- error_external_authentication_failed_message: "An error occurred during external authentication: %{message}"
+ error_external_authentication_failed_message: "Se ha producido un error durante la autenticación externa: %{message}"
error_attribute_not_highlightable: "Atributos que no pueden resaltarse: %{attributes}"
events:
changeset: "Set de cambios editado"
@@ -1800,8 +1800,8 @@ es:
progress_mode_changed_to_status_based: "Cálculo del progreso actualizado"
status_changed: "Estado «%{status_name}»"
system_update: "Actualización del sistema OpenProject:"
- total_percent_complete_mode_changed_to_work_weighted_average: "Calculation of % Complete totals now weighted by Work."
- total_percent_complete_mode_changed_to_simple_average: "Calculation of % Complete totals now based on a simple average of only % Complete values."
+ total_percent_complete_mode_changed_to_work_weighted_average: "El cálculo de los totales de % completado ahora se pondera por Trabajo."
+ total_percent_complete_mode_changed_to_simple_average: "El cálculo de los totales de % completado se basa ahora en una media simple de solo los valores de % completado."
cause_descriptions:
work_package_predecessor_changed_times: por cambios al %{link} predecesor
work_package_parent_changed_times: por cambios al %{link} principal
@@ -1819,7 +1819,7 @@ es:
progress_mode_changed_to_status_based: Modo de cálculo del progreso establecido como basado en el estado
status_excluded_from_totals_set_to_false_message: ahora incluido en totales de jerarquía
status_excluded_from_totals_set_to_true_message: ahora excluido de los totales de la jerarquía
- status_percent_complete_changed: "% Complete changed from %{old_value}% to %{new_value}%"
+ status_percent_complete_changed: "% completado cambiado de %{old_value} % a %{new_value} %"
system_update:
file_links_journal: >
A partir de ahora, la actividad relacionada con los enlaces de archivos (archivos almacenados en almacenamiento externo) aparecerá aquí en la pestaña Actividad. La siguiente representa la actividad relativa a los enlaces que ya existían:
@@ -1830,9 +1830,9 @@ es:
totals_removed_from_childless_work_packages: >-
Los totales de trabajo y progreso se eliminan automáticamente para los paquetes de trabajo no padres con la actualización de la versión. Se trata de una tarea de mantenimiento y puede ignorarse con seguridad.
total_percent_complete_mode_changed_to_work_weighted_average: >-
- Child work packages without Work are ignored.
+ Los paquetes de trabajo para niños sin Trabajo se ignoran.
total_percent_complete_mode_changed_to_simple_average: >-
- Work values of child work packages are ignored.
+ Se ignoran los valores de trabajo de los paquetes de trabajo secundarios.
links:
configuration_guide: "Guía de configuración"
get_in_touch: "¿Tiene alguna pregunta? Póngase en contacto con nosotros."
@@ -1932,8 +1932,8 @@ es:
label_additional_workflow_transitions_for_assignee: "Transiciones adicionales permitidas cuando el usuario es el asignado"
label_additional_workflow_transitions_for_author: "Transiciones adicionales permitidas cuando el usuario es el autor"
label_administration: "Administración"
- label_interface_colors: "Interface colors"
- label_interface_colors_description: "These colors control how the application looks. If you modify them the theme will automatically be changed to Custom theme, but we can’t assure the compliance of the accessibility contrast minimums (WCAG 2.1). "
+ label_interface_colors: "Colores de la interfaz"
+ label_interface_colors_description: "Estos colores controlan el aspecto de la aplicación. Si los modifica, el tema cambiará automáticamente a Tema personalizado, pero no podemos asegurar el cumplimiento de los mínimos de contraste de accesibilidad (WCAG 2.1). "
label_age: "Edad"
label_ago: "días antes"
label_all: "todos"
@@ -1966,7 +1966,7 @@ es:
label_attribute_expand_text: "El texto completo para «%{attribute}»"
label_authentication: "Autentificación"
label_authentication_settings: "Ajustes de autenticación"
- label_available_custom_fields_projects: "Available custom fields projects"
+ label_available_custom_fields_projects: "Proyectos de campos personalizados disponibles"
label_available_global_roles: "Roles globales disponibles"
label_available_project_attributes: "Atributos del proyecto disponibles"
label_available_project_forums: "Foros disponibles"
@@ -2039,7 +2039,7 @@ es:
label_copy_project: "Copiar proyecto"
label_core_version: "Versión base"
label_core_build: "Núcleo base"
- label_created_by: "Created by %{user}"
+ label_created_by: "Creado por %{user}"
label_current_status: "Estado actual"
label_current_version: "Version actual"
label_custom_field_add_no_type: "Agregue este campo a un tipo de paquete de trabajo"
@@ -2047,7 +2047,7 @@ es:
label_custom_field_plural: "Campos personalizados"
label_custom_field_default_type: "Tipo vacío"
label_custom_style: "Diseño"
- label_custom_style_description: "Choose how OpenProject looks to you with themes, select your default colors to use in the app and how exports look like."
+ label_custom_style_description: "Elija el aspecto que OpenProject le ofrece con los temas, seleccione los colores predeterminados que desea utilizar en la aplicación y el aspecto de las exportaciones."
label_dashboard: "Paneles de control"
label_database_version: "Versión de PostgreSQL"
label_date: "Fecha"
@@ -2169,8 +2169,8 @@ es:
label_share_project_list: "Listas de proyectos compartidas"
label_share_work_package: "Compartir paquete de trabajo"
label_show_all_registered_users: "Mostrar todos los usuarios registrados"
- label_show_less: "Show less"
- label_show_more: "Show more"
+ label_show_less: "Mostrar menos"
+ label_show_more: "Mostra més"
label_journal: "Diario"
label_journal_diff: "Comparación de la descripción"
label_language: "Idioma"
@@ -2320,7 +2320,7 @@ es:
label_product_version: "Versión del producto"
label_profile: "Perfil"
label_percent_complete: "% compleado"
- label_progress_tracking: "Progress tracking"
+ label_progress_tracking: "Seguimiento del progreso"
label_project: "Proyecto"
label_project_activity: "Actividad del proyecto"
label_project_attribute_plural: "Atributos del proyecto"
@@ -2390,8 +2390,8 @@ es:
label_role_plural: "Perfiles"
label_role_search: "Asignar rol a nuevos miembros"
label_scm: "SCM"
- label_scroll_left: "Scroll left"
- label_scroll_right: "Scroll right"
+ label_scroll_left: "Desplazar hacia la izquierda"
+ label_scroll_right: "Desplazar hacia la derecha"
label_search: "Buscar"
label_search_by_name: "Buscar por nombre"
label_send_information: "Enviar nuevas credenciales al usuario"
@@ -3143,13 +3143,13 @@ es:
setting_hours_per_day_explanation: >-
Define lo que se considera un "día" cuando se muestra la duración en días y horas (por ejemplo, si un día tiene 8 horas, 32 horas serían 4 días).
setting_invitation_expiration_days: "El correo electrónico de activación caduca después de"
- setting_work_package_done_ratio: "Progress calculation mode"
+ setting_work_package_done_ratio: "Modo de cálculo del progreso"
setting_work_package_done_ratio_field: "Basado en el trabajo"
setting_work_package_done_ratio_field_caption_html: >-
- % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived.
+ % completado puede fijarse libremente en cualquier valor. Si introduce opcionalmente un valor para Trabajo, se derivará automáticamente Trabajo restante.
setting_work_package_done_ratio_status: "Basado en el estado"
setting_work_package_done_ratio_status_caption_html: >-
- Each status has a % Complete value associated with it. Changing status will change % Complete.
+ Cada estado tiene asociado un valor de % completado. El cambio de estado modificará el % completado.
setting_work_package_done_ratio_explanation_html: >
En el modo basado en trabajo, el % completado puede fijarse libremente en cualquier valor. Si introduce opcionalmente un valor para Trabajo, se derivará automáticamente Trabajo restante. En el modo basado en estados, cada estado tiene asociado un valor de % completado. Si cambia de estado, cambiará el % completado.
setting_work_package_properties: "Propiedades de paquete de trabajo"
@@ -3170,13 +3170,13 @@ es:
setting_password_min_length: "Longitud mínima"
setting_password_min_adhered_rules: "Numero mínimo de clases requeridas"
setting_per_page_options: "Objetos por página de opciones"
- setting_percent_complete_on_status_closed: "% Complete when status is closed"
- setting_percent_complete_on_status_closed_no_change: "No change"
+ setting_percent_complete_on_status_closed: "% completado cuando el estado es cerrado"
+ setting_percent_complete_on_status_closed_no_change: "Sin cambios"
setting_percent_complete_on_status_closed_no_change_caption_html: >-
- The value of % Complete will not change even when a work package is closed.
- setting_percent_complete_on_status_closed_set_100p: "Automatically set to 100%"
+ El valor de % completado no cambiará aunque se cierre un paquete de trabajo.
+ setting_percent_complete_on_status_closed_set_100p: "Ajustado automáticamente al 100 %"
setting_percent_complete_on_status_closed_set_100p_caption: >-
- A closed work package is considered complete.
+ Un paquete de trabajo cerrado se considera completo.
setting_plain_text_mail: "Correo en texto plano (sin HTML)"
setting_protocol: "Protocolo"
setting_project_gantt_query: "Diagrama de Gantt de la cartera de proyectos"
@@ -3201,13 +3201,13 @@ es:
setting_sys_api_enabled: "Habilitar el servicio web de administración de repositorios"
setting_sys_api_description: "El servicio web de administración de repositorios proporciona integración y autorización de usuario para acceder a los repositorios."
setting_time_format: "Hora"
- setting_total_percent_complete_mode: "Calculation of % Complete hierarchy totals"
- setting_total_percent_complete_mode_work_weighted_average: "Weighted by work"
+ setting_total_percent_complete_mode: "Cálculo de los totales de la jerarquía % completado"
+ setting_total_percent_complete_mode_work_weighted_average: "Ponderado por trabajo"
setting_total_percent_complete_mode_work_weighted_average_caption_html: >-
- The total % Complete will be weighted against the Work of each work package in the hierarchy. Work packages without Work will be ignored.
- setting_total_percent_complete_mode_simple_average: "Simple average"
+ El % total completado se ponderará con respecto al Trabajo de cada paquete de trabajo de la jerarquía. Los paquetes de trabajo sin Trabajo se ignorarán.
+ setting_total_percent_complete_mode_simple_average: "Media simple"
setting_total_percent_complete_mode_simple_average_caption_html: >-
- Work is ignored and the total % Complete will be a simple average of % Complete values of work packages in the hierarchy.
+ Trabajo se ignora y el % total completado será una media simple de los valores de % completado de los paquetes de trabajo de la jerarquía.
setting_accessibility_mode_for_anonymous: "Activar el modo de accesibilidad para usuarios anónimos"
setting_user_format: "Formato de nombre de usuarios"
setting_user_default_timezone: "Zona horaria por defecto de los usuarios"
@@ -3756,16 +3756,16 @@ es:
close_warning: "Ignore esta advertencia."
oauth:
application:
- builtin: Built-in instance application
- confidential: Confidential
+ builtin: Aplicación de instancia incorporada
+ confidential: Confidencial
singular: "Aplicación OAuth"
plural: "Aplicaciones OAuth"
named: "Aplicación OAuth '%{name}'"
new: "Nueva aplicación OAuth"
- non_confidential: Non confidential
+ non_confidential: No confidencial
default_scopes: "(Ámbitos por defecto)"
instructions:
- enabled: "Enable this application, allowing users to perform authorization grants with it."
+ enabled: "Habilite esta aplicación, permitiendo a los usuarios realizar concesiones de autorización con ella."
name: "El nombre de tu aplicación. Se mostrará a otros usuarios tras previa autorización."
redirect_uri_html: >
Las URLs permitidas a las que los usuarios autorizados serán redirigidos. Una entrada por línea.
Si estás registrando una aplicación de escritorio, usa la siguiente URL.
@@ -3775,9 +3775,9 @@ es:
register_intro: "Si estás desarrollando una aplicación de cliente API de OAuth para OpenProject, puedes registrarla usando este formulario para todos los usuarios."
default_scopes: ""
header:
- builtin_applications: Built-in OAuth applications
- other_applications: Other OAuth applications
- empty_application_lists: No OAuth applications have been registered.
+ builtin_applications: Aplicaciones OAuth integradas
+ other_applications: Otras aplicaciones OAuth
+ empty_application_lists: No se ha registrado ninguna aplicación OAuth.
client_id: "ID de cliente"
client_secret_notice: >
Esta es la única vez que podremos imprimirte la clave de cliente secreta, por favor apúntalo y mantenlo en un lugar seguro. Debe tratarse como una contraseña y no puede ser recuperado de OpenProject más adelante.
diff --git a/config/locales/crowdin/et.yml b/config/locales/crowdin/et.yml
index ed866a6b21cc..ddbbbb84a082 100644
--- a/config/locales/crowdin/et.yml
+++ b/config/locales/crowdin/et.yml
@@ -813,7 +813,7 @@ et:
blank: "ei tohi olla tühi."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/eu.yml b/config/locales/crowdin/eu.yml
index 74da822b4a27..ac1041b0b170 100644
--- a/config/locales/crowdin/eu.yml
+++ b/config/locales/crowdin/eu.yml
@@ -813,7 +813,7 @@ eu:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/fa.yml b/config/locales/crowdin/fa.yml
index 2c905853be1c..ecd459caaa9a 100644
--- a/config/locales/crowdin/fa.yml
+++ b/config/locales/crowdin/fa.yml
@@ -813,7 +813,7 @@ fa:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/fi.yml b/config/locales/crowdin/fi.yml
index 1757904b2127..225ac3b3983e 100644
--- a/config/locales/crowdin/fi.yml
+++ b/config/locales/crowdin/fi.yml
@@ -813,7 +813,7 @@ fi:
blank: "ei voi olla sisällötön."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Tehtävää ei voida yhdistää alitehtäviin."
circular_dependency: "Tämä riippuvuus loisi kehän."
confirmation: "ei vastaa %{attribute}."
diff --git a/config/locales/crowdin/fil.yml b/config/locales/crowdin/fil.yml
index de8b4b72d561..1fe58f93250a 100644
--- a/config/locales/crowdin/fil.yml
+++ b/config/locales/crowdin/fil.yml
@@ -813,7 +813,7 @@ fil:
blank: "hindi pwedeng blanko."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Ang isang package ng pagawaan ay hindi maaring mai-ugnay sa isa sa mga substak."
circular_dependency: "Itong pakikipag-ugnayan ay lilikha ng kabilugang dependecia."
confirmation: "hindi tugma %{attribute}."
diff --git a/config/locales/crowdin/fr.yml b/config/locales/crowdin/fr.yml
index 34605b9a3581..798daeb9c343 100644
--- a/config/locales/crowdin/fr.yml
+++ b/config/locales/crowdin/fr.yml
@@ -32,8 +32,8 @@ fr:
color_theme: "Thème de couleur"
color_theme_custom: "(Personnalisé)"
tab_interface: "Interface"
- tab_branding: "Branding"
- tab_pdf_export_styles: "PDF export styles"
+ tab_branding: "Image de marque"
+ tab_pdf_export_styles: "Styles d'exportation PDF"
colors:
primary-button-color: "Bouton principal"
accent-color: "Couleur d'accentuation"
@@ -82,7 +82,7 @@ fr:
contact: "Contactez-nous pour une démo"
enterprise_info_html: "est un module de la version Enterprise."
upgrade_info: "Veuillez passer à un plan payant pour l'activer et commencer à l'utiliser dans votre équipe."
- jemalloc_allocator: Jemalloc memory allocator
+ jemalloc_allocator: Allocateur de mémoire Jemalloc
journal_aggregation:
explanation:
text: "Les actions individuelles d'un utilisateur (par ex. mis à jour un lot de travaux deux fois) sont agrégés en une seule action si leur différence d'âge est inférieure à la période spécifiée. Elles seront affichées en une seule action dans l'application. Cela retardera également les notifications du même temps réduisant donc le nombre d'e-mails envoyés et affectera également le délai %{webhook_link}."
@@ -209,8 +209,8 @@ fr:
admin:
custom_field_projects:
is_for_all_blank_slate:
- heading: For all projects
- description: This custom field is enabled in all projects since the "For all projects" option is checked. It cannot be deactivated for individual projects.
+ heading: Pour tous les projets
+ description: Ce champ personnalisé est activé dans tous les projets, car l'option « Pour tous les projets » est cochée. Il ne peut pas être désactivé pour les projets individuels.
text_add_new_custom_field: >
Pour ajouter de nouveaux champs personnalisés à un projet, vous devez d’abord les créer avant de pouvoir les ajouter à ce projet.
is_enabled_globally: "Est activé globalement"
@@ -639,8 +639,8 @@ fr:
uid: "Id du client"
secret: "Clé secrète du client"
owner: "Propriétaire"
- builtin: "Builtin"
- enabled: "Active"
+ builtin: "Intégré"
+ enabled: "Actif"
redirect_uri: "URI de redirection"
client_credentials_user_id: "ID d'utilisateur d'informations d'identification client"
scopes: "Portées"
@@ -812,7 +812,7 @@ fr:
blank: "ne peut pas être vide."
blank_nested: "doit avoir la propriété « %{property} » définie."
cannot_delete_mapping: "est requis. Ne peut être supprimé."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "s'applique à tous les projets et ne peut donc pas être modifié."
cant_link_a_work_package_with_a_descendant: "Un lot de travaux ne peut pas être lié à l'une de ses sous-tâches."
circular_dependency: "Cette relation créerait une dépendance circulaire."
confirmation: "ne correspond pas à %{attribute}."
@@ -889,7 +889,7 @@ fr:
custom_fields_project:
attributes:
project_ids:
- blank: "Please select a project."
+ blank: "Veuillez sélectionner un projet."
custom_actions:
only_one_allowed: "(%{name}) seule valeur est autorisée."
empty: "La zone (%{name}) ne peut pas être vide."
@@ -921,7 +921,7 @@ fr:
blank: "est obligatoire. Veuillez sélectionner un nom."
not_unique: "est déjà utilisé. Veuillez choisir un autre nom."
meeting:
- error_conflict: "Unable to save because the meeting was updated by someone else in the meantime. Please reload the page."
+ error_conflict: "Impossible d'enregistrer, car la réunion a été mise à jour par quelqu'un d'autre entre-temps. Veuillez recharger la page."
notifications:
at_least_one_channel: "Au moins un canal pour envoyer des notifications doit être spécifié."
attributes:
@@ -1413,8 +1413,8 @@ fr:
failure_message: Échec de l'accord, impossible de continuer.
title: Accord de l'utilisateur
decline_warning_message: Vous avez refusé l'accord et avez été déconnecté.
- user_has_consented: The user gave their consent to your [configured consent information text](consent_settings).
- not_yet_consented: The user has not yet given their consent to your [configured consent information text](consent_settings). They will be reminded the next time they log in.
+ user_has_consented: L'utilisateur a donné son consentement à votre [texte d'information sur le consentement configuré](consent_settings).
+ not_yet_consented: L'utilisateur n'a pas encore donné son consentement à votre [texte d'information sur le consentement configuré](consent_settings). Un rappel lui sera envoyé lors de sa prochaine connexion.
contact_mail_instructions: Définissez l'adresse mail à laquelle les utilisateurs peuvent joindre un contrôleur de données pour effectuer des modifications de données ou des demandes de suppression.
contact_your_administrator: Veuillez contacter votre administrateur si vous souhaitez que votre compte soit supprimé.
contact_this_mail_address: Veuillez contacter %{mail_address} si vous voulez que votre compte soit supprimé.
@@ -1647,7 +1647,7 @@ fr:
error_menu_item_not_saved: L'élément de menu n'a pas pu être sauvegardé
error_wiki_root_menu_item_conflict: >
Impossible de renommer "%{old_name}" en "%{new_name}" en raison d’un conflit dans l’élément de menu résultant avec l’élément de menu existant "%{existing_caption}" (%{existing_identifier}).
- error_external_authentication_failed_message: "An error occurred during external authentication: %{message}"
+ error_external_authentication_failed_message: "Une erreur s'est produite lors de l'authentification externe : %{message}"
error_attribute_not_highlightable: "Attribut(s) ne pouvant pas être mis en surbrillance: %{attributes}"
events:
changeset: "Lot de modification édité"
@@ -1802,8 +1802,8 @@ fr:
progress_mode_changed_to_status_based: "Mise à jour du calcul de la progression"
status_changed: "Statut « %{status_name} »"
system_update: "Mise à jour du système OpenProject :"
- total_percent_complete_mode_changed_to_work_weighted_average: "Calculation of % Complete totals now weighted by Work."
- total_percent_complete_mode_changed_to_simple_average: "Calculation of % Complete totals now based on a simple average of only % Complete values."
+ total_percent_complete_mode_changed_to_work_weighted_average: "Le calcul des totaux de % d'achèvement est désormais pondéré par le travail."
+ total_percent_complete_mode_changed_to_simple_average: "Le calcul des totaux de % d'achèvement est désormais basé sur une simple moyenne des seules valeurs de % d'achèvement."
cause_descriptions:
work_package_predecessor_changed_times: par changement vers le prédécesseur %{link}
work_package_parent_changed_times: par changement vers le parent %{link}
@@ -1821,7 +1821,7 @@ fr:
progress_mode_changed_to_status_based: Le calcul de la progression est désormais basé sur le statut
status_excluded_from_totals_set_to_false_message: désormais inclus dans les totaux de la hiérarchie
status_excluded_from_totals_set_to_true_message: désormais exclus des totaux de la hiérarchie
- status_percent_complete_changed: "% Complete changed from %{old_value}% to %{new_value}%"
+ status_percent_complete_changed: "Le % d'achèvement a changé de %{old_value} % à %{new_value} %"
system_update:
file_links_journal: >
À partir de maintenant, l'activité liée aux liens de fichiers (fichiers stockés sur des supports externes) apparaîtra ici dans l'onglet Activité. Les activités suivantes concernent des liens déjà existants :
@@ -1832,9 +1832,9 @@ fr:
totals_removed_from_childless_work_packages: >-
Les totaux de travail et de progression sont automatiquement supprimés pour les lots de travaux non parents avec la mise à jour de la version. Il s'agit d'une tâche de maintenance qui peut être ignorée.
total_percent_complete_mode_changed_to_work_weighted_average: >-
- Child work packages without Work are ignored.
+ Les lots de travaux enfants sans travail sont ignorés.
total_percent_complete_mode_changed_to_simple_average: >-
- Work values of child work packages are ignored.
+ Les valeurs de travail des lots de travaux enfants sont ignorées.
links:
configuration_guide: "Guide de configuration"
get_in_touch: "Vous avez des questions ? Contactez-nous."
@@ -1934,8 +1934,8 @@ fr:
label_additional_workflow_transitions_for_assignee: "Transitions supplémentaires autorisées lorsque l'utilisateur est l'assigné"
label_additional_workflow_transitions_for_author: "Transitions supplémentaires autorisées lorsque l'utilisateur est l'auteur"
label_administration: "Administration"
- label_interface_colors: "Interface colors"
- label_interface_colors_description: "These colors control how the application looks. If you modify them the theme will automatically be changed to Custom theme, but we can’t assure the compliance of the accessibility contrast minimums (WCAG 2.1). "
+ label_interface_colors: "Couleurs de l'interface"
+ label_interface_colors_description: "Ces couleurs contrôlent l'apparence de l'application. Si vous les modifiez, le thème sera automatiquement remplacé par le thème personnalisé, mais nous ne pouvons pas garantir la conformité aux normes minimales d'accessibilité (WCAG 2.1). "
label_age: "Âge"
label_ago: "il y a"
label_all: "tous"
@@ -1968,7 +1968,7 @@ fr:
label_attribute_expand_text: "Le texte complet pour « %{attribute} »."
label_authentication: "Authentification"
label_authentication_settings: "Paramètres d'authentification"
- label_available_custom_fields_projects: "Available custom fields projects"
+ label_available_custom_fields_projects: "Projets de champs personnalisés disponibles"
label_available_global_roles: "Rôles globaux disponibles"
label_available_project_attributes: "Attributs de projet disponibles"
label_available_project_forums: "Forums disponibles"
@@ -2041,7 +2041,7 @@ fr:
label_copy_project: "Copier projet"
label_core_version: "Version du cœur"
label_core_build: "Construction de base"
- label_created_by: "Created by %{user}"
+ label_created_by: "Créé par %{user}"
label_current_status: "Statut actuel"
label_current_version: "Version actuelle"
label_custom_field_add_no_type: "Ajouter ce champ à un type de lot de travaux"
@@ -2049,7 +2049,7 @@ fr:
label_custom_field_plural: "Champs personnalisés"
label_custom_field_default_type: "Type défaut"
label_custom_style: "Apparence"
- label_custom_style_description: "Choose how OpenProject looks to you with themes, select your default colors to use in the app and how exports look like."
+ label_custom_style_description: "Choisissez l'apparence d'OpenProject avec des thèmes, sélectionnez les couleurs par défaut à utiliser dans l'application et l'apparence des exportations."
label_dashboard: "Tableau de bord"
label_database_version: "Version de PostgreSQL"
label_date: "Date"
@@ -2171,8 +2171,8 @@ fr:
label_share_project_list: "Partager la liste des projets"
label_share_work_package: "Partager le lot de travaux"
label_show_all_registered_users: "Afficher tous les utilisateurs enregistrés"
- label_show_less: "Show less"
- label_show_more: "Show more"
+ label_show_less: "Afficher moins"
+ label_show_more: "Afficher plus"
label_journal: "Journal"
label_journal_diff: "Comparaison de description"
label_language: "Langue"
@@ -2322,7 +2322,7 @@ fr:
label_product_version: "Version du produit"
label_profile: "Profil"
label_percent_complete: "% réalisé"
- label_progress_tracking: "Progress tracking"
+ label_progress_tracking: "Suivi des progrès"
label_project: "Projet"
label_project_activity: "Activité du projet"
label_project_attribute_plural: "Attributs du projet"
@@ -3146,13 +3146,13 @@ fr:
setting_hours_per_day_explanation: >-
Cela définit ce qui est considéré comme un « jour » lors de l'affichage de la durée en jours et en heures (par exemple, si un jour dure 8 heures, 32 heures représentent 4 jours).
setting_invitation_expiration_days: "L'émail d’activation expire après"
- setting_work_package_done_ratio: "Progress calculation mode"
+ setting_work_package_done_ratio: "Mode de calcul de l'avancement"
setting_work_package_done_ratio_field: "Basé sur le travail"
setting_work_package_done_ratio_field_caption_html: >-
- % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived.
+ Le % d'achèvement peut être fixé librement sur n'importe quelle valeur. Si vous saisissez une valeur facultative pour le travail, le travail restant sera automatiquement dérivé.
setting_work_package_done_ratio_status: "Basé sur le statut"
setting_work_package_done_ratio_status_caption_html: >-
- Each status has a % Complete value associated with it. Changing status will change % Complete.
+ Chaque statut est associé à une valeur de % d'achèvement. Le changement de statut modifie le % d'achèvement.
setting_work_package_done_ratio_explanation_html: >
En mode Basé sur le travail, le % d'achèvement peut être librement défini sur n'importe quelle valeur. Si vous saisissez une valeur pour le travail, le travail restant sera automatiquement dérivé. En mode Basé sur le statut, chaque état a une valeur de % d'achèvement associée. Le changement de statut changera la valeur de % d'achèvement.
setting_work_package_properties: "Propriétés du Lot de Travaux"
@@ -3173,13 +3173,13 @@ fr:
setting_password_min_length: "Longueur minimale"
setting_password_min_adhered_rules: "Nombre minimale des classe de caractère requise"
setting_per_page_options: "Options des objets par page"
- setting_percent_complete_on_status_closed: "% Complete when status is closed"
- setting_percent_complete_on_status_closed_no_change: "No change"
+ setting_percent_complete_on_status_closed: "% d'achèvement lorsque le statut est fermé"
+ setting_percent_complete_on_status_closed_no_change: "Aucun changement"
setting_percent_complete_on_status_closed_no_change_caption_html: >-
- The value of % Complete will not change even when a work package is closed.
- setting_percent_complete_on_status_closed_set_100p: "Automatically set to 100%"
+ La valeur du % d'achèvement ne changera pas même si un lot de travaux est clôturé.
+ setting_percent_complete_on_status_closed_set_100p: "Réglé automatiquement à 100 %"
setting_percent_complete_on_status_closed_set_100p_caption: >-
- A closed work package is considered complete.
+ Un lot de travaux clôturé est considéré comme terminé.
setting_plain_text_mail: "Courriel au format texte (pas de HTML)"
setting_protocol: "Protocole"
setting_project_gantt_query: "Vue Gantt du portefeuille du projet"
@@ -3204,13 +3204,13 @@ fr:
setting_sys_api_enabled: "Activer le service web de gestion de dépôt"
setting_sys_api_description: "Le service web de gestion de dépôt fournit l'intégration et l'autorisation d'accès aux dépôts."
setting_time_format: "Heure"
- setting_total_percent_complete_mode: "Calculation of % Complete hierarchy totals"
- setting_total_percent_complete_mode_work_weighted_average: "Weighted by work"
+ setting_total_percent_complete_mode: "Calcul des totaux de la hiérarchie en % d'achèvement"
+ setting_total_percent_complete_mode_work_weighted_average: "Pondéré par le travail"
setting_total_percent_complete_mode_work_weighted_average_caption_html: >-
- The total % Complete will be weighted against the Work of each work package in the hierarchy. Work packages without Work will be ignored.
- setting_total_percent_complete_mode_simple_average: "Simple average"
+ Le % d'achèvement total sera pondéré en fonction du travail de chaque lot de travaux repris dans la hiérarchie. Les lots de travaux sans travail seront ignorés.
+ setting_total_percent_complete_mode_simple_average: "Moyenne simple"
setting_total_percent_complete_mode_simple_average_caption_html: >-
- Work is ignored and the total % Complete will be a simple average of % Complete values of work packages in the hierarchy.
+ Le travail est ignoré et le % d'achèvement total sera une simple moyenne des valeurs de % d'achèvement des lots de travaux repris dans la hiérarchie.
setting_accessibility_mode_for_anonymous: "Activer le mode d'accessibilité pour les utilisateurs anonymes"
setting_user_format: "Format du nom d'utilisateur"
setting_user_default_timezone: "Fuseau horaire par défaut des utilisateurs"
@@ -3759,16 +3759,16 @@ fr:
close_warning: "Ignorer cet avertissement."
oauth:
application:
- builtin: Built-in instance application
- confidential: Confidential
+ builtin: Application d'instance intégrée
+ confidential: Confidentiel
singular: "Application OAuth"
plural: "Applications OAuth"
named: "Application OAuth '%{name}'"
new: "Nouvelle application Oauth"
- non_confidential: Non confidential
+ non_confidential: Non confidentiel
default_scopes: "(Portée par défaut)"
instructions:
- enabled: "Enable this application, allowing users to perform authorization grants with it."
+ enabled: "Activez cette application et permettez aux utilisateurs de l'utiliser pour attribuer des autorisations."
name: "Le nom de votre application. Ceci sera affiché aux autres utilisateurs sur autorisation."
redirect_uri_html: >
Les URL autorisées où peuvent être redirigés les utilisateurs. Une entrée par ligne.
Si vous enregistrez une application de bureau, utilisez l'URL suivante.
@@ -3778,9 +3778,9 @@ fr:
register_intro: "Si vous développez une application client OAuth API pour OpenProject, vous pouvez l'enregistrer en utilisant ce formulaire pour qu’elle soit utilisée par tous les utilisateurs."
default_scopes: ""
header:
- builtin_applications: Built-in OAuth applications
- other_applications: Other OAuth applications
- empty_application_lists: No OAuth applications have been registered.
+ builtin_applications: Applications OAuth intégrées
+ other_applications: Autres applications OAuth
+ empty_application_lists: Aucune application OAuth n'a été enregistrée.
client_id: "Id du client"
client_secret_notice: >
Il s’agit de la seule fois où nous pouvons imprimer le secret du client, veuillez en prendre note et le garder dans un lieu sûr. Il doit être traité comme un mot de passe et ne peut pas être récupéré par OpenProject ultérieurement.
diff --git a/config/locales/crowdin/he.yml b/config/locales/crowdin/he.yml
index e1e1b1bac932..f391e6a87194 100644
--- a/config/locales/crowdin/he.yml
+++ b/config/locales/crowdin/he.yml
@@ -827,7 +827,7 @@ he:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/hi.yml b/config/locales/crowdin/hi.yml
index 7de356675512..ae9323352423 100644
--- a/config/locales/crowdin/hi.yml
+++ b/config/locales/crowdin/hi.yml
@@ -811,7 +811,7 @@ hi:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/hr.yml b/config/locales/crowdin/hr.yml
index 5f6254af5fde..ccef1bf35a9b 100644
--- a/config/locales/crowdin/hr.yml
+++ b/config/locales/crowdin/hr.yml
@@ -820,7 +820,7 @@ hr:
blank: "ne može biti prazan unos."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Radni paket ne može biti pridružen podređenim radnim zadacima."
circular_dependency: "Ova relacija izraditi će skupnu odnosno cirkularnu ovisnost."
confirmation: "ne odgovara %{attribute}."
diff --git a/config/locales/crowdin/hu.yml b/config/locales/crowdin/hu.yml
index 2250078385b6..df9e0254bfc5 100644
--- a/config/locales/crowdin/hu.yml
+++ b/config/locales/crowdin/hu.yml
@@ -810,7 +810,7 @@ hu:
blank: "nem lehet üres."
blank_nested: "be kell állítani a '%{property}' tulajdonságot.\n"
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A feladatcsoport nem kapcsolható saját részfeladatához."
circular_dependency: "Ez a kapcsolat egy körkörös függőséget eredményezne."
confirmation: "%{attribute} nem egyezik."
diff --git a/config/locales/crowdin/id.yml b/config/locales/crowdin/id.yml
index 6e2eb7d8cd4d..8972e4366e47 100644
--- a/config/locales/crowdin/id.yml
+++ b/config/locales/crowdin/id.yml
@@ -799,7 +799,7 @@ id:
blank: "harus di isi."
blank_nested: "harus menyetel properti '%{property}'."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Work package tidak dapat dihubungkan dengan subtask-nya."
circular_dependency: "Relasi ini menyebabkan dependensi circular."
confirmation: "tidak sesuai dengan %{attribute}."
diff --git a/config/locales/crowdin/it.yml b/config/locales/crowdin/it.yml
index 3baadf1232c5..8e547a1ce741 100644
--- a/config/locales/crowdin/it.yml
+++ b/config/locales/crowdin/it.yml
@@ -31,9 +31,9 @@ it:
custom_styles:
color_theme: "Tema a colori"
color_theme_custom: "(Personalizzato)"
- tab_interface: "Interface"
+ tab_interface: "Interfaccia"
tab_branding: "Branding"
- tab_pdf_export_styles: "PDF export styles"
+ tab_pdf_export_styles: "Stili di esportazione PDF"
colors:
primary-button-color: "Pulsante principale"
accent-color: "Accento"
@@ -82,7 +82,7 @@ it:
contact: "Contattaci per una demo"
enterprise_info_html: "è un componente aggiuntivo di Imprese ."
upgrade_info: "Esegui l'upgrade a un piano a pagamento per attivarlo e iniziare a usarlo nel tuo team."
- jemalloc_allocator: Jemalloc memory allocator
+ jemalloc_allocator: Allocatore di memoria Jemalloc
journal_aggregation:
explanation:
text: "Le singole azioni di un utente (es. l'aggiornamento di una macro-attività due volte) vengono aggregate in un'unica azione se il tempo intercorso tra esse è inferiore al periodo minimo di tempo impostato. Verranno visualizzate quindi come un'unica azione all'interno dell'applicazione. Questo ritarderà anche le notifiche della stessa quantità di tempo, riducendo così il numero di email inviate, e influirà anche sul ritardo di %{webhook_link}."
@@ -206,8 +206,8 @@ it:
admin:
custom_field_projects:
is_for_all_blank_slate:
- heading: For all projects
- description: This custom field is enabled in all projects since the "For all projects" option is checked. It cannot be deactivated for individual projects.
+ heading: Per tutti i progetti
+ description: Questo campo personalizzato è attivato in tutti i progetti, poiché l'opzione "Per tutti i progetti" è selezionata. Non può essere disattivato per i singoli progetti.
text_add_new_custom_field: >
Per aggiungere nuovi campi personalizzati a un progetto, è necessario prima crearli.
is_enabled_globally: "Abilitato a livello globale"
@@ -637,8 +637,8 @@ it:
uid: "Client ID"
secret: "Chiave segreta del client"
owner: "Proprietario"
- builtin: "Builtin"
- enabled: "Active"
+ builtin: "Integrato"
+ enabled: "Attivo"
redirect_uri: "Reindirizzamento URI"
client_credentials_user_id: "ID utente delle credenziali client"
scopes: "Ambiti"
@@ -810,7 +810,7 @@ it:
blank: "non può essere lasciato vuoto."
blank_nested: "deve avere la proprietà '%{property}' impostata."
cannot_delete_mapping: "è necessario. Non può essere cancellato."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Una macro-attività non può essere collegato a una delle sue sottoattività."
circular_dependency: "Questa relazione creerebbe una dipendenza circolare."
confirmation: "non coincide con %{attribute}."
@@ -887,7 +887,7 @@ it:
custom_fields_project:
attributes:
project_ids:
- blank: "Please select a project."
+ blank: "Seleziona un progetto."
custom_actions:
only_one_allowed: "(%{name}) solo un valore è permesso."
empty: "(%{name}) valore non può essere vuoto."
@@ -919,7 +919,7 @@ it:
blank: "è obbligatorio. Sei pregato di selezionare un nome."
not_unique: "è già in uso. Sei pregato di selezionare un altro nome."
meeting:
- error_conflict: "Unable to save because the meeting was updated by someone else in the meantime. Please reload the page."
+ error_conflict: "Impossibile salvare perché la riunione è stata aggiornata da qualcun altro nel frattempo. Ricarica la pagina."
notifications:
at_least_one_channel: "Deve essere specificato almeno un canale per l'invio delle notifiche."
attributes:
@@ -1411,8 +1411,8 @@ it:
failure_message: Consenso respinto, impossibile procedere.
title: Consenso dell'utente
decline_warning_message: Hai rifiutato il consenso e sei stato disconnesso.
- user_has_consented: The user gave their consent to your [configured consent information text](consent_settings).
- not_yet_consented: The user has not yet given their consent to your [configured consent information text](consent_settings). They will be reminded the next time they log in.
+ user_has_consented: L'utente ha dato il proprio consenso al [testo informativo sul consenso configurato](consent_settings).
+ not_yet_consented: L'utente non ha ancora dato il suo consenso al tuo [testo informativo sul consenso configurato](consent_settings). Riceverà un promemoria la prossima volta che effettuerà l'accesso.
contact_mail_instructions: Definire l'indirizzo mail di un controllore che gli utenti possono raggiungere per eseguire la modifica dei dati o le richieste di rimozione.
contact_your_administrator: Contattare l'amministratore se desideri che il tuo account venga eliminato.
contact_this_mail_address: Per favore contatta %{mail_address} se desideri che il tuo account venga eliminato.
@@ -1645,7 +1645,7 @@ it:
error_menu_item_not_saved: La voce di menu non può essere salvata
error_wiki_root_menu_item_conflict: >
Impossibile rinominare "%{old_name}" a "%{new_name}" a causa di un conflitto nella voce di menu risultante con la voce di menu esistente "%{existing_caption}" (%{existing_identifier}).
- error_external_authentication_failed_message: "An error occurred during external authentication: %{message}"
+ error_external_authentication_failed_message: "Si è verificato un errore durante l'autenticazione esterna: %{message}"
error_attribute_not_highlightable: "Attributo/i non sottolineabile/i: %{attributes}"
events:
changeset: "Changeset modificato"
@@ -1800,8 +1800,8 @@ it:
progress_mode_changed_to_status_based: "Calcolo dei progressi aggiornato"
status_changed: "Stato '%{status_name}'"
system_update: "Aggiornamento del sistema OpenProject:"
- total_percent_complete_mode_changed_to_work_weighted_average: "Calculation of % Complete totals now weighted by Work."
- total_percent_complete_mode_changed_to_simple_average: "Calculation of % Complete totals now based on a simple average of only % Complete values."
+ total_percent_complete_mode_changed_to_work_weighted_average: "Il calcolo dei totali della % completamento è ora ponderato in base al Lavoro."
+ total_percent_complete_mode_changed_to_simple_average: "Il calcolo dei totali della % completamento si basa ora su una media semplice dei soli valori della % completamento."
cause_descriptions:
work_package_predecessor_changed_times: da modifiche al predecessore %{link}
work_package_parent_changed_times: da modifiche al genitore %{link}
@@ -1819,7 +1819,7 @@ it:
progress_mode_changed_to_status_based: La modalità di calcolo dell'avanzamento è impostata in funzione dello stato.
status_excluded_from_totals_set_to_false_message: ora incluso nei totali della gerarchia
status_excluded_from_totals_set_to_true_message: ora escluso dai totali della gerarchia
- status_percent_complete_changed: "% Complete changed from %{old_value}% to %{new_value}%"
+ status_percent_complete_changed: "% completamento cambiata da %{old_value}% a %{new_value}%"
system_update:
file_links_journal: >
D'ora in poi, l'attività relativa ai collegamenti ai file (file archiviati in archivi esterni) verrà visualizzata qui nella scheda Attività. Di seguito trovi attività riguardanti link già esistenti:
@@ -1830,9 +1830,9 @@ it:
totals_removed_from_childless_work_packages: >-
I totali di lavoro e avanzamento vengono rimossi automaticamente per le macro-attività non principali con l'aggiornamento della versione. Questa è un'attività di manutenzione e può essere tranquillamente ignorata.
total_percent_complete_mode_changed_to_work_weighted_average: >-
- Child work packages without Work are ignored.
+ Le macro-attività figlie senza Lavoro vengono ignorate.
total_percent_complete_mode_changed_to_simple_average: >-
- Work values of child work packages are ignored.
+ I valori di Lavoro delle macro-attività figlie vengono ignorati.
links:
configuration_guide: "Guida di configurazione"
get_in_touch: "Hai dei dubbi? Mettiti in contatto con noi."
@@ -1932,8 +1932,8 @@ it:
label_additional_workflow_transitions_for_assignee: "Transizioni aggiuntive consentite quando l'utente è l'assegnatario"
label_additional_workflow_transitions_for_author: "Transizioni aggiuntive consentite quando l'utente è l'autore"
label_administration: "Amministrazione"
- label_interface_colors: "Interface colors"
- label_interface_colors_description: "These colors control how the application looks. If you modify them the theme will automatically be changed to Custom theme, but we can’t assure the compliance of the accessibility contrast minimums (WCAG 2.1). "
+ label_interface_colors: "Colori dell'interfaccia"
+ label_interface_colors_description: "Questi colori controllano l'aspetto dell'applicazione. Se li modifichi, il tema verrà automaticamente cambiato in Tema personalizzato, ma non possiamo garantire la conformità ai minimi di contrasto di accessibilità (WCAG 2.1). "
label_age: "Età"
label_ago: "giorni fa"
label_all: "tutti"
@@ -1966,7 +1966,7 @@ it:
label_attribute_expand_text: "Testo completo per \"%{attribute}\""
label_authentication: "Autenticazione"
label_authentication_settings: "Impostazioni di autenticazione"
- label_available_custom_fields_projects: "Available custom fields projects"
+ label_available_custom_fields_projects: "Progetti di campi personalizzati disponibili"
label_available_global_roles: "Ruoli globali disponibili"
label_available_project_attributes: "Attributi del progetto disponibili"
label_available_project_forums: "Forum disponibili"
@@ -2039,7 +2039,7 @@ it:
label_copy_project: "Copia progetto"
label_core_version: "Versione core"
label_core_build: "Core build"
- label_created_by: "Created by %{user}"
+ label_created_by: "Creato da %{user}"
label_current_status: "Stato attuale"
label_current_version: "Versione corrente"
label_custom_field_add_no_type: "Aggiungi questo campo a un tipo di macro-attività"
@@ -2047,7 +2047,7 @@ it:
label_custom_field_plural: "Campo personalizzato"
label_custom_field_default_type: "Tipo vuoto"
label_custom_style: "Progettazione"
- label_custom_style_description: "Choose how OpenProject looks to you with themes, select your default colors to use in the app and how exports look like."
+ label_custom_style_description: "Scegli l'aspetto che vuoi dare a OpenProject con i temi, seleziona i colori predefiniti da utilizzare nell'app e l'aspetto delle esportazioni."
label_dashboard: "Dashboard"
label_database_version: "Versione di PostgreSQL"
label_date: "Data"
@@ -2169,8 +2169,8 @@ it:
label_share_project_list: "Condividi elenco progetti"
label_share_work_package: "Condividi macro-attività"
label_show_all_registered_users: "Mostra tutti gli utenti registrati"
- label_show_less: "Show less"
- label_show_more: "Show more"
+ label_show_less: "Mostra meno"
+ label_show_more: "Mostra di più"
label_journal: "Diario"
label_journal_diff: "Confronto Descrizione"
label_language: "Linguaggio"
@@ -2320,7 +2320,7 @@ it:
label_product_version: "Versione del prodotto"
label_profile: "Profilo"
label_percent_complete: "% completamento"
- label_progress_tracking: "Progress tracking"
+ label_progress_tracking: "Monitoraggio dei progressi"
label_project: "Progetto"
label_project_activity: "Attività del progetto"
label_project_attribute_plural: "Attributi del progetto"
@@ -3144,13 +3144,13 @@ it:
setting_hours_per_day_explanation: >-
Definisce ciò che viene considerato un "giorno" quando si visualizza la durata in giorni e ore (per esempio, se un giorno è di 8 ore, 32 ore sono 4 giorni).
setting_invitation_expiration_days: "L'email di attivazione scade dopo"
- setting_work_package_done_ratio: "Progress calculation mode"
+ setting_work_package_done_ratio: "Modalità di calcolo dei progressi"
setting_work_package_done_ratio_field: "Basato sul lavoro"
setting_work_package_done_ratio_field_caption_html: >-
- % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived.
+ La % completamento può essere liberamente impostata su qualsiasi valore. Se si inserisce facoltativamente un valore per Lavoro, il Lavoro residuo verrà derivato automaticamente.
setting_work_package_done_ratio_status: "Basato sullo stato"
setting_work_package_done_ratio_status_caption_html: >-
- Each status has a % Complete value associated with it. Changing status will change % Complete.
+ Ogni stato ha un valore di % completamento associato a esso. Cambiando lo stato cambierà la % completamento.
setting_work_package_done_ratio_explanation_html: >
Nella modalità basata sul lavoro, la % completamento può assumere qualsiasi valore. Se inserisci facoltativamente un Lavoro, il Lavoro residuo verrà automaticamente calcolato. Nella modalità basata sullo stato, a ogni stato è associato un valore di % completamento. La modifica dello stato cambierà la % completamento.
setting_work_package_properties: "Proprietà della macro-attività"
@@ -3171,13 +3171,13 @@ it:
setting_password_min_length: "Lunghezza minima"
setting_password_min_adhered_rules: "Numero minimo di classi richieste"
setting_per_page_options: "Opzioni degli oggetti per pagina"
- setting_percent_complete_on_status_closed: "% Complete when status is closed"
- setting_percent_complete_on_status_closed_no_change: "No change"
+ setting_percent_complete_on_status_closed: "% completamento quando lo stato è chiuso"
+ setting_percent_complete_on_status_closed_no_change: "Nessun cambiamento"
setting_percent_complete_on_status_closed_no_change_caption_html: >-
- The value of % Complete will not change even when a work package is closed.
- setting_percent_complete_on_status_closed_set_100p: "Automatically set to 100%"
+ Il valore della % completamento non cambierà nemmeno quando una macro-attività è chiusa.
+ setting_percent_complete_on_status_closed_set_100p: "Imposta automaticamente al 100%"
setting_percent_complete_on_status_closed_set_100p_caption: >-
- A closed work package is considered complete.
+ Una macro-attività chiusa è considerata completata.
setting_plain_text_mail: "Posta in formato testo semplice (no HTML)"
setting_protocol: "Protocollo"
setting_project_gantt_query: "Visione Gantt portafoglio progetti"
@@ -3202,13 +3202,13 @@ it:
setting_sys_api_enabled: "Abilita la gestione di archivi via web service"
setting_sys_api_description: "Il web service di gestione archivio fornisce servizi per integrare ed autorizzare gli utenti nell'accesso agli archivi."
setting_time_format: "Tempo"
- setting_total_percent_complete_mode: "Calculation of % Complete hierarchy totals"
- setting_total_percent_complete_mode_work_weighted_average: "Weighted by work"
+ setting_total_percent_complete_mode: "Calcolo della % completamento totale della gerarchia"
+ setting_total_percent_complete_mode_work_weighted_average: "Ponderato in base al lavoro"
setting_total_percent_complete_mode_work_weighted_average_caption_html: >-
- The total % Complete will be weighted against the Work of each work package in the hierarchy. Work packages without Work will be ignored.
- setting_total_percent_complete_mode_simple_average: "Simple average"
+ La % completamento totale sarà ponderata in base al Lavoro di ogni macro-attività nella gerarchia. Le macro-attività senza Lavoro verranno ignorate.
+ setting_total_percent_complete_mode_simple_average: "Media semplice"
setting_total_percent_complete_mode_simple_average_caption_html: >-
- Work is ignored and the total % Complete will be a simple average of % Complete values of work packages in the hierarchy.
+ Il Lavoro viene ignorato e la % completamento totale sarà una semplice media dei valori di % completamento delle macro-attività nella gerarchia.
setting_accessibility_mode_for_anonymous: "Abilita la modalità di accesso facilitato per utenti anonimi"
setting_user_format: "Formato del nome utente"
setting_user_default_timezone: "Orario predefinito utenti"
@@ -3758,16 +3758,16 @@ it:
close_warning: "Ignora questo avviso."
oauth:
application:
- builtin: Built-in instance application
- confidential: Confidential
+ builtin: Applicazione di istanza integrata
+ confidential: Confidenziale
singular: "Applicazione OAuth"
plural: "Applicazioni OAuth"
named: "Applicazione OAuth \"%{name}\""
new: "Nuova Applicazione OAuth"
- non_confidential: Non confidential
+ non_confidential: Non confidenziale
default_scopes: "(Ambiti predefiniti)"
instructions:
- enabled: "Enable this application, allowing users to perform authorization grants with it."
+ enabled: "Abilita questa applicazione, consentendo agli utenti di eseguire le autorizzazioni concesse con essa."
name: "Il nome della tua applicazione. Verrà visualizzato dagli altri utenti all'autorizzazione."
redirect_uri_html: >
Gli URL consentiti a cui possono essere reindirizzati gli utenti autorizzati. Una voce per riga.
Se stai registrando un'applicazione desktop, usa il seguente URL.
@@ -3777,9 +3777,9 @@ it:
register_intro: "Se stai sviluppando un'applicazione client OAuth API per OpenProject è possibile registrarla utilizzando questo modulo per consentirne l'uso a tutti gli utenti."
default_scopes: ""
header:
- builtin_applications: Built-in OAuth applications
- other_applications: Other OAuth applications
- empty_application_lists: No OAuth applications have been registered.
+ builtin_applications: Applicazioni OAuth integrate
+ other_applications: Altre applicazioni OAuth
+ empty_application_lists: Nessuna applicazione OAuth è stata registrata.
client_id: "Client ID"
client_secret_notice: >
Questa è l'unico momento in cui possiamo stampare il segreto del client, abbi cura di annotarlo e tenerlo al sicuro. Dovrebbe essere trattato come una password e non può essere recuperato da OpenProject in un momento successivo.
diff --git a/config/locales/crowdin/ja.yml b/config/locales/crowdin/ja.yml
index ef79be3065a8..6f2d875c71d6 100644
--- a/config/locales/crowdin/ja.yml
+++ b/config/locales/crowdin/ja.yml
@@ -802,7 +802,7 @@ ja:
blank: "は空白にすることができません。"
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "親子関係にあるワークパッケージ間で関係の設定はできません。"
circular_dependency: "この関係は循環依存になります。"
confirmation: "は%{attribute} と一致しません。"
diff --git a/config/locales/crowdin/js-de.yml b/config/locales/crowdin/js-de.yml
index 8f63453a8bd4..ee724ee03687 100644
--- a/config/locales/crowdin/js-de.yml
+++ b/config/locales/crowdin/js-de.yml
@@ -358,7 +358,7 @@ de:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ Die Version bietet Ihnen verschiedene Funktionen und Verbesserungen, z.B.
- Profitieren Sie von flexibleren Fortschrittsberichten - dank des Feedbacks der Benutzer.
- Erhalten Sie eine Update-Benachrichtigung mit der Möglichkeit, Meetings neu zu laden.
- Aktivieren Sie ein benutzerdefiniertes Feld für mehrere Projekte auf einmal.
- Verwenden Sie Makros für relative Arbeitspaketattribute.
- Zeigen Sie leere Zeilen im gespeicherten Rich Text an.
- Sehen Sie vergangene Besprechungen, die jetzt in der Nummer neben der Registerkarte Besprechungen enthalten sind.
ical_sharing_modal:
title: "Kalender abonnieren"
inital_setup_error_message: "Beim Abrufen der Daten ist ein Fehler aufgetreten."
diff --git a/config/locales/crowdin/js-es.yml b/config/locales/crowdin/js-es.yml
index d4e0bf4f8222..6e301f7be396 100644
--- a/config/locales/crowdin/js-es.yml
+++ b/config/locales/crowdin/js-es.yml
@@ -359,7 +359,7 @@ es:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ La versión trae varias características y mejoras para usted, por ejemplo
- Benefíciese de informes de progreso más flexibles, gracias a los comentarios de los usuarios.
- Reciba una notificación de actualización con opción de recarga para las reuniones.
- Habilite un campo personalizado para varios proyectos a la vez.
- Utilice macros de atributos relativos del paquete de trabajo.
- Muestre las líneas vacías en el texto enriquecido guardado.
- Vea las reuniones anteriores incluidas en el número junto a la pestaña Reuniones.
ical_sharing_modal:
title: "Suscribirse al calendario"
inital_setup_error_message: "Se ha producido un error al obtener los datos."
@@ -612,7 +612,7 @@ es:
assigned: "Asignado a"
#The enum value is named 'responsible' in the database and that is what is transported through the API
#up to the frontend.
- responsible: "Accountable"
+ responsible: "Responsable"
created: "Creado"
scheduled: "Programado"
commented: "Comentado"
diff --git a/config/locales/crowdin/js-fr.yml b/config/locales/crowdin/js-fr.yml
index 9366df2f8818..4713b1edf71c 100644
--- a/config/locales/crowdin/js-fr.yml
+++ b/config/locales/crowdin/js-fr.yml
@@ -359,7 +359,7 @@ fr:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ Cette version apporte diverses fonctionnalités et améliorations, p. ex.,
- Bénéficiez de rapports de progression plus flexibles grâce aux commentaires des utilisateurs.
- Recevez une notification de mise à jour avec option de rechargement pour les réunions.
- Activez un champ personnalisé pour plusieurs projets à la fois.
- Utilisez des macros d'attributs relatifs pour les lots de travaux.
- Affichez les lignes vides dans le texte enrichi enregistré.
- Affichez les réunions passées incluses dans le nombre situé à côté de l'onglet Réunions.
ical_sharing_modal:
title: "S'abonner au calendrier"
inital_setup_error_message: "Une erreur est survenue lors de la récupération des données."
@@ -612,7 +612,7 @@ fr:
assigned: "Personne assignée"
#The enum value is named 'responsible' in the database and that is what is transported through the API
#up to the frontend.
- responsible: "Accountable"
+ responsible: "Responsable"
created: "Créé"
scheduled: "Planifié"
commented: "Commenté"
diff --git a/config/locales/crowdin/js-it.yml b/config/locales/crowdin/js-it.yml
index f5ec781270d7..a93d84c1e76d 100644
--- a/config/locales/crowdin/js-it.yml
+++ b/config/locales/crowdin/js-it.yml
@@ -359,7 +359,7 @@ it:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ Questa versione offre diverse funzionalità e miglioramenti, come:
- Report di avanzamento più flessibili, grazie al feedback degli utenti.
- Notifiche di aggiornamento con opzione di ricarica per le riunioni.
- Campi personalizzati per più progetti contemporaneamente.
- Procedure automatizzate (macro) sugli attributi relativi alle macro-attività.
- Righe vuote visibili in testi formattati salvati.
- Visualizzare il numero di riunioni passate accanto alla scheda Riunioni.
ical_sharing_modal:
title: "Iscriviti al calendario"
inital_setup_error_message: "Si è verificato un errore recuperando i dati."
@@ -612,7 +612,7 @@ it:
assigned: "Assegnatario"
#The enum value is named 'responsible' in the database and that is what is transported through the API
#up to the frontend.
- responsible: "Accountable"
+ responsible: "Responsabile"
created: "Creato"
scheduled: "Programmato"
commented: "Commentato"
diff --git a/config/locales/crowdin/js-ko.yml b/config/locales/crowdin/js-ko.yml
index 0d9429c2d545..5e4654ea1c14 100644
--- a/config/locales/crowdin/js-ko.yml
+++ b/config/locales/crowdin/js-ko.yml
@@ -359,7 +359,7 @@ ko:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ 이 릴리스는 다음을 비롯한 다양한 기능과 개선 사항을 제공합니다.
- 사용자 피드백이 반영되여, 더욱 유연한 진행률 보고의 이점을 누립니다.
- 미팅에 대한 다시 로드 옵션이 포함된 업데이트 알림을 받습니다.
- 한 번에 여러 프로젝트에 대한 사용자 지정 필드를 활성화합니다.
- 상대적 작업 패키지 특성 매크로를 사용합니다.
- 저장된 서식 있는 텍스트로 빈 줄을 표시합니다.
- 미팅 탭 옆의 숫자에 포함된 이전 미팅을 확인합니다.
ical_sharing_modal:
title: "캘린더 구독"
inital_setup_error_message: "데이터를 가져오는 중에 오류가 발생했습니다."
@@ -612,7 +612,7 @@ ko:
assigned: "담당자"
#The enum value is named 'responsible' in the database and that is what is transported through the API
#up to the frontend.
- responsible: "Accountable"
+ responsible: "담당"
created: "생성됨"
scheduled: "예약됨"
commented: "코멘트 작성됨"
diff --git a/config/locales/crowdin/js-pl.yml b/config/locales/crowdin/js-pl.yml
index 37779043ca4d..5ce93da5a2fa 100644
--- a/config/locales/crowdin/js-pl.yml
+++ b/config/locales/crowdin/js-pl.yml
@@ -359,7 +359,7 @@ pl:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ Ta wersja wprowadza różne funkcje i ulepszenia m.in.
- Korzystaj z bardziej elastycznej sprawozdawczości o postępach – dzięki opiniom użytkowników.
- Otrzymuj powiadomienia o aktualizacjach z opcją przeładowania spotkań.
- Włączaj pole niestandardowe dla wielu projektów jednocześnie.
- Używaj makr dla względnego atrybutu pakietu roboczego.
- Wyświetlaj puste linie w zapisanym formatowanym tekście.
- Oglądaj wcześniejsze spotkania znajdujące się na karcie Spotkania.
ical_sharing_modal:
title: "Subskrybuj kalendarz"
inital_setup_error_message: "Podczas pobierania danych wystąpił błąd."
@@ -612,7 +612,7 @@ pl:
assigned: "Przypisana osoba"
#The enum value is named 'responsible' in the database and that is what is transported through the API
#up to the frontend.
- responsible: "Accountable"
+ responsible: "Osoba odpowiedzialna"
created: "Utworzono"
scheduled: "Zaplanowany"
commented: "Skomentował"
diff --git a/config/locales/crowdin/js-pt-BR.yml b/config/locales/crowdin/js-pt-BR.yml
index 1f9df9e21844..f2ccbe6c8f1e 100644
--- a/config/locales/crowdin/js-pt-BR.yml
+++ b/config/locales/crowdin/js-pt-BR.yml
@@ -358,7 +358,7 @@ pt-BR:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ A nova versão traz diversas funcionalidades e melhorias para você, como:
- Aproveite um relatório de progresso mais flexível – graças ao feedback dos usuários.
- Receba uma notificação de atualização com opção de recarregar para as reuniões.
- Ative um campo personalizado para vários projetos ao mesmo tempo.
- Utilize macros de atributos relativos dos pacotes de trabalho.
- Mostre linhas em branco em textos enriquecidos salvos.
- Veja reuniões passadas incluídas no número ao lado da aba Reuniões.
ical_sharing_modal:
title: "Assinar calendário"
inital_setup_error_message: "Ocorreu um erro ao buscar dados."
@@ -611,7 +611,7 @@ pt-BR:
assigned: "Cessionário"
#The enum value is named 'responsible' in the database and that is what is transported through the API
#up to the frontend.
- responsible: "Accountable"
+ responsible: "Responsável"
created: "Criado"
scheduled: "Planejado"
commented: "Comentado"
diff --git a/config/locales/crowdin/js-pt-PT.yml b/config/locales/crowdin/js-pt-PT.yml
index 9aaa555b4c7f..1ff770497a55 100644
--- a/config/locales/crowdin/js-pt-PT.yml
+++ b/config/locales/crowdin/js-pt-PT.yml
@@ -359,7 +359,7 @@ pt-PT:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ A versão traz várias funcionalidades e melhorias para si, por exemplo,
- Beneficie de relatórios de progresso mais flexíveis – graças ao feedback dos utilizadores.
- Receba uma notificação de atualização com opção de recarregamento para as reuniões.
- Ative um campo personalizado para vários projetos de uma só vez.
- Utilize macros de atributos de pacotes de trabalho relativos.
- Mostre linhas vazias em rich text guardado.
- Veja as reuniões anteriores incluídas no número junto ao separador Reuniões.
ical_sharing_modal:
title: "Subscrever o calendário"
inital_setup_error_message: "Ocorreu um erro ao recuperar os dados."
@@ -612,7 +612,7 @@ pt-PT:
assigned: "Pessoa atribuída"
#The enum value is named 'responsible' in the database and that is what is transported through the API
#up to the frontend.
- responsible: "Accountable"
+ responsible: "Responsável"
created: "Criado"
scheduled: "Agendado"
commented: "Comentado"
diff --git a/config/locales/crowdin/js-ru.yml b/config/locales/crowdin/js-ru.yml
index 7b5006506090..2f9977f43d8f 100644
--- a/config/locales/crowdin/js-ru.yml
+++ b/config/locales/crowdin/js-ru.yml
@@ -358,7 +358,7 @@ ru:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ В этом выпуске представлены различные функции и улучшения, например,
- Воспользуйтесь преимуществами более гибких отчетов о проделанной работе.
- Получайте уведомления об обновлениях с возможностью перезагрузки собраний.
- Включайте настраиваемое поле для нескольких проектов одновременно.
- Используйте макросы относительно атрибутов пакетов работ.
- Отображение пустых строк в сохраненном форматированном тексте.
- Просматривайте прошедшие встречи на вкладке «Совещания».
ical_sharing_modal:
title: "Подписаться на календарь"
inital_setup_error_message: "Произошла ошибка при получении данных."
@@ -416,7 +416,7 @@ ru:
label_committed_at: "%{committed_revision_link} в %{date}"
label_committed_link: "завершенная версия %{revision_identifier}"
label_contains: "содержит"
- label_created_on: "создано на"
+ label_created_on: "создано"
label_edit_comment: "Редактировать этот комментарий"
label_edit_status: "Изменить статус пакета работ"
label_email: "Эл. почта"
@@ -642,7 +642,7 @@ ru:
with_current_filter: "На данный момент в этом представлении нет уведомлений"
mark_all_read: "Отметить всё как прочитанное"
mark_as_read: "Отметить как прочитанное"
- text_update_date_by: "по %{date}"
+ text_update_date_by: "%{date}"
total_count_warning: "Показаны %{newest_count} самые последние уведомления. Ещё %{more_count} не отображаются."
empty_state:
no_notification: "Похоже, вы все сделали."
diff --git a/config/locales/crowdin/js-uk.yml b/config/locales/crowdin/js-uk.yml
index 64d10ef45058..2c1a5d69869f 100644
--- a/config/locales/crowdin/js-uk.yml
+++ b/config/locales/crowdin/js-uk.yml
@@ -359,7 +359,7 @@ uk:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ Цей випуск включає багато нових функцій і покращень.
- Використовуйте гнучкіші звіти про прогрес завдяки відгукам користувачів.
- Отримуйте сповіщення про оновлення з можливістю перезавантаження для нарад.
- Увімкніть користувацьке поле для кількох проектів одночасно.
- Використовуйте макроси атрибутів пов’язаних пакетів робіт.
- Відображайте порожні рядки в збереженому форматованому тексті.
- Переглядайте завершені наради, натиснувши число біля вкладки «Наради».
ical_sharing_modal:
title: "Підписатися на календар"
inital_setup_error_message: "Під час отримання даних сталася помилка."
diff --git a/config/locales/crowdin/js-zh-CN.yml b/config/locales/crowdin/js-zh-CN.yml
index 430b0cca81d7..8d0ec26b0257 100644
--- a/config/locales/crowdin/js-zh-CN.yml
+++ b/config/locales/crowdin/js-zh-CN.yml
@@ -358,7 +358,7 @@ zh-CN:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ 此版本为您带来了各种功能和改进,例如:
- 得益于用户反馈,从更灵活的进度报告中受益。
- 接收带有会议重新加载选项的更新通知。
- 同时为多个项目启用自定义字段。
- 使用相对工作包属性宏。
- 在已保存的富文本中显示空行。
- 查看“会议”选项卡旁边的数字中包含的过往会议。
ical_sharing_modal:
title: "订阅日历"
inital_setup_error_message: "获取数据时发生错误。"
diff --git a/config/locales/crowdin/js-zh-TW.yml b/config/locales/crowdin/js-zh-TW.yml
index 32cb4f78aefc..b6f7474f0495 100644
--- a/config/locales/crowdin/js-zh-TW.yml
+++ b/config/locales/crowdin/js-zh-TW.yml
@@ -357,7 +357,7 @@ zh-TW:
"14_6":
standard:
new_features_html: >
- The release brings various features and improvements for you, e.g.
- Benefit from more flexible progress reporting – thanks to user feedback.
- Receive an update notification with reload option for meetings.
- Enable a custom field for multiple projects at once.
- Use relative work package attribute macros.
- Show empty lines in saved rich text.
- See past meetings included in the number next to the Meetings tab.
+ 該版本為您帶來了各種功能和改進,例如:
- 受益於更靈活的進度報告- 感謝用戶回饋。
- 接收帶有會議重新載入選項的更新通知.
- 同時為多個專案啟用自訂欄位。
- 使用相關工作項目屬性巨集。
- 已儲存文字已可顯示空白行。
- 「會議」標籤旁的編號可查看過去的會議。
ical_sharing_modal:
title: "訂閱日曆"
inital_setup_error_message: "更新資料時發生錯誤"
diff --git a/config/locales/crowdin/ka.yml b/config/locales/crowdin/ka.yml
index 3f60e14e6ed3..a98418531d0c 100644
--- a/config/locales/crowdin/ka.yml
+++ b/config/locales/crowdin/ka.yml
@@ -813,7 +813,7 @@ ka:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/kk.yml b/config/locales/crowdin/kk.yml
index 73910cc52c5b..3b42c387d1a1 100644
--- a/config/locales/crowdin/kk.yml
+++ b/config/locales/crowdin/kk.yml
@@ -813,7 +813,7 @@ kk:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/ko.yml b/config/locales/crowdin/ko.yml
index 22df069b86d2..a70600103921 100644
--- a/config/locales/crowdin/ko.yml
+++ b/config/locales/crowdin/ko.yml
@@ -31,9 +31,9 @@ ko:
custom_styles:
color_theme: "컬러 테마"
color_theme_custom: "(사용자 지정)"
- tab_interface: "Interface"
- tab_branding: "Branding"
- tab_pdf_export_styles: "PDF export styles"
+ tab_interface: "인터페이스"
+ tab_branding: "브랜딩"
+ tab_pdf_export_styles: "PDF 내보내기 스타일"
colors:
primary-button-color: "기본 버튼"
accent-color: "강조 색"
@@ -82,7 +82,7 @@ ko:
contact: "당사에 데모 요청하기"
enterprise_info_html: "- Enterprise 추가 기능입니다."
upgrade_info: "활성화하고 팀에서 사용하려면 유료 플랜으로 업그레이드하세요."
- jemalloc_allocator: Jemalloc memory allocator
+ jemalloc_allocator: Jemalloc 메모리 할당기
journal_aggregation:
explanation:
text: "사용자의 개별 작업(예: 작업 패키지를 두 번 업데이트)은 연령 차이가 지정된 기간 미만인 경우 단일 작업으로 집계됩니다. 애플리케이션 내에서 단일 작업으로 표시됩니다. 또한 이는 전송되는 이메일 수를 줄이는 동일한 시간만큼 알림을 지연시키고 %{webhook_link} 지연에도 영향을 미칩니다."
@@ -116,7 +116,7 @@ ko:
ldap_auth_sources:
ldap_error: "LDAP 오류: %{error_message}"
ldap_auth_failed: "LDAP 서버에서 인증할 수 없습니다."
- sync_failed: "LDAP에서 동기화하지 못함: %{message}."
+ sync_failed: "LDAP에서 동기화하지 못했습니다: %{message}."
back_to_index: "연결 목록으로 돌아가려면 여기를 클릭하세요."
technical_warning_html: |
이 LDAP 양식을 사용하려면 LDAP / Active Directory 설정에 대한 기술 지식이 필요합니다.
@@ -209,8 +209,8 @@ ko:
admin:
custom_field_projects:
is_for_all_blank_slate:
- heading: For all projects
- description: This custom field is enabled in all projects since the "For all projects" option is checked. It cannot be deactivated for individual projects.
+ heading: 모든 프로젝트용
+ description: '"모든 프로젝트용" 옵션이 선택되었으므로 모든 프로젝트에서 이 사용자 지정 필드가 활성화되었습니다. 개별 프로젝트에 대해 비활성화할 수 없습니다.'
text_add_new_custom_field: >
프로젝트에 새 사용자 지정 필드를 추가하려면 먼저 해당 필드를 만들어야 합니다. 그래야 이 프로젝트에 해당 필드를 추가할 수 있습니다.
is_enabled_globally: "는 세계적으로 사용 가능합니다."
@@ -632,8 +632,8 @@ ko:
uid: "고객 ID"
secret: "클라이언트 비밀번호"
owner: "소유자"
- builtin: "Builtin"
- enabled: "Active"
+ builtin: "기본 제공"
+ enabled: "활성"
redirect_uri: "리디렉션 URI"
client_credentials_user_id: "클라이언트 자격 증명 사용자 ID"
scopes: "범위"
@@ -805,7 +805,7 @@ ko:
blank: "내용을 입력해주세요"
blank_nested: "- '%{property}' 속성이 설정되어 있어야 합니다."
cannot_delete_mapping: "- 필수입니다. 삭제할 수 없습니다."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "- 모든 프로젝트용므로 수정할 수 없습니다."
cant_link_a_work_package_with_a_descendant: "작업 패키지는 하위 작업패키지들 중 하나에 연결 될 수 없습니다."
circular_dependency: "이 연계는 순환 종속관계를 만듭니다."
confirmation: "%{attribute} 속성에 부합하지 않습니다."
@@ -882,7 +882,7 @@ ko:
custom_fields_project:
attributes:
project_ids:
- blank: "Please select a project."
+ blank: "프로젝트를 선택하세요."
custom_actions:
only_one_allowed: "(%{name}) 하나의 값만 허용됩니다."
empty: "(%{name}) 값은 비워둘 수 없습니다."
@@ -914,7 +914,7 @@ ko:
blank: "- 필수입니다. 이름을 선택하세요."
not_unique: "- 사용 중입니다. 다른 이름을 선택하세요."
meeting:
- error_conflict: "Unable to save because the meeting was updated by someone else in the meantime. Please reload the page."
+ error_conflict: "그 사이에 다른 사람이 미팅을 업데이트했기 때문에 저장할 수 없습니다. 페이지를 다시 로드하세요."
notifications:
at_least_one_channel: "알림을 보낼 채널을 하나 이상 지정해야 합니다."
attributes:
@@ -1396,8 +1396,8 @@ ko:
failure_message: 동의에 실패했습니다. 계속할 수 없습니다.
title: 사용자 동의
decline_warning_message: 동의를 거부하고 로그아웃했습니다.
- user_has_consented: The user gave their consent to your [configured consent information text](consent_settings).
- not_yet_consented: The user has not yet given their consent to your [configured consent information text](consent_settings). They will be reminded the next time they log in.
+ user_has_consented: 사용자가 [구성된 동의 정보 텍스트](consent_settings)에 동의했습니다.
+ not_yet_consented: 사용자가 [구성된 동의 정보 텍스트](consent_settings)에 아직 동의하지 않았습니다. 다음에 로그인할 때 알림이 표시됩니다.
contact_mail_instructions: 사용자가 데이터 변경 또는 제거 요청을 수행하기 위해 데이터 컨트롤러에게 연락할 수 있는 메일 주소를 정의합니다.
contact_your_administrator: 계정을 삭제하려는 경우 관리자에 문의하세요.
contact_this_mail_address: 계정을 삭제하려는 경우 %{mail_address}에 문의하세요.
@@ -1612,7 +1612,7 @@ ko:
error_menu_item_not_saved: 메뉴 항목을 저장할 수 없습니다.
error_wiki_root_menu_item_conflict: >
결과 메뉴 항목에서 기존 메뉴 항목 "%{existing_caption}" (%{existing_identifier})과(와)의 충돌로 인해 "%{old_name}"을(를) "%{new_name}"(으)로 이름을 바꿀 수 없습니다.
- error_external_authentication_failed_message: "An error occurred during external authentication: %{message}"
+ error_external_authentication_failed_message: "외부 인증 중에 오류가 발생했습니다: %{message}"
error_attribute_not_highlightable: "강조 표시되지 않는 특성: %{attributes}"
events:
changeset: "변경 집합 편집됨"
@@ -1767,8 +1767,8 @@ ko:
progress_mode_changed_to_status_based: "진행률 계산 업데이트됨"
status_changed: "상태 '%{status_name}'"
system_update: "OpenProject 시스템 업데이트:"
- total_percent_complete_mode_changed_to_work_weighted_average: "Calculation of % Complete totals now weighted by Work."
- total_percent_complete_mode_changed_to_simple_average: "Calculation of % Complete totals now based on a simple average of only % Complete values."
+ total_percent_complete_mode_changed_to_work_weighted_average: "이제 완료 % 합계 계산에는 작업별로 가중치가 적용됩니다."
+ total_percent_complete_mode_changed_to_simple_average: "이제 완료 % 합계 계산은 완료 % 값의 단순 평균만을 기반으로 합니다."
cause_descriptions:
work_package_predecessor_changed_times: 이전 %{link}에 대한 변경 사항 기준
work_package_parent_changed_times: 부모 %{link}에 대한 변경 사항 기준
@@ -1786,7 +1786,7 @@ ko:
progress_mode_changed_to_status_based: 진행률 계산 모드가 상태 기반으로 설정되었습니다
status_excluded_from_totals_set_to_false_message: 이제 계층 합계에 포함됨
status_excluded_from_totals_set_to_true_message: 이제 계층 합계에서 제외됨
- status_percent_complete_changed: "% Complete changed from %{old_value}% to %{new_value}%"
+ status_percent_complete_changed: "완료 %가 %{old_value}%에서 %{new_value}%로 변경되었습니다"
system_update:
file_links_journal: >
지금부터 파일 링크(외부 저장소에 저장된 파일)와 관련된 활동이 활동 탭에 표시됩니다. 다음은 이미 존재하는 링크와 관련된 활동을 나타냅니다.
@@ -1797,9 +1797,9 @@ ko:
totals_removed_from_childless_work_packages: >-
버전 업데이트를 통해 부모가 아닌 작업 패키지의 작업 및 진행률 합계가 자동으로 제거됩니다. 유지 관리 작업이므로 무시해도 됩니다.
total_percent_complete_mode_changed_to_work_weighted_average: >-
- Child work packages without Work are ignored.
+ 작업이 없는 자식 작업 패키지는 무시됩니다.
total_percent_complete_mode_changed_to_simple_average: >-
- Work values of child work packages are ignored.
+ 자식 작업 패키지의 작업 값은 무시됩니다.
links:
configuration_guide: "구성 가이드"
get_in_touch: "질문이 있으신가요? 문의해 주세요."
@@ -1899,8 +1899,8 @@ ko:
label_additional_workflow_transitions_for_assignee: "사용자가 담당자일 때 허용되는 추가 전환"
label_additional_workflow_transitions_for_author: "사용자가 작성자일 때 허용되는 추가 전환"
label_administration: "관리"
- label_interface_colors: "Interface colors"
- label_interface_colors_description: "These colors control how the application looks. If you modify them the theme will automatically be changed to Custom theme, but we can’t assure the compliance of the accessibility contrast minimums (WCAG 2.1). "
+ label_interface_colors: "인터페이스 색상"
+ label_interface_colors_description: "이러한 색상은 애플리케이션의 모양을 제어합니다. 색상을 수정하면 테마가 자동으로 사용자 지정 테마로 변경되지만, 접근성 대비 최소값(WCAG 2.1)을 준수하는지 확인할 수 없습니다. "
label_age: "기간"
label_ago: "일 전"
label_all: "모두"
@@ -1933,7 +1933,7 @@ ko:
label_attribute_expand_text: "'%{attribute}'의 전체 텍스트"
label_authentication: "인증"
label_authentication_settings: "인증 설정"
- label_available_custom_fields_projects: "Available custom fields projects"
+ label_available_custom_fields_projects: "사용 가능한 사용자 지정 필드 프로젝트"
label_available_global_roles: "사용 가능한 글로벌 역할"
label_available_project_attributes: "사용 가능한 프로젝트 특성"
label_available_project_forums: "사용 가능한 포럼"
@@ -2006,7 +2006,7 @@ ko:
label_copy_project: "프로젝트 복사"
label_core_version: "코어 버전"
label_core_build: "코어 빌드"
- label_created_by: "Created by %{user}"
+ label_created_by: "작성자: %{user}"
label_current_status: "현재 상태"
label_current_version: "현재 버전"
label_custom_field_add_no_type: "작업 패키지 유형에 이 필드 추가"
@@ -2014,7 +2014,7 @@ ko:
label_custom_field_plural: "사용자 정의 필드"
label_custom_field_default_type: "빈 유형"
label_custom_style: "디자인"
- label_custom_style_description: "Choose how OpenProject looks to you with themes, select your default colors to use in the app and how exports look like."
+ label_custom_style_description: "테마를 사용하여 OpenProject의 모양을 선택하고, 앱에서 사용할 기본 색상 및 내보내기의 모양을 선택하세요."
label_dashboard: "대시보드"
label_database_version: "PostgreSQL 버전"
label_date: "날짜"
@@ -2136,8 +2136,8 @@ ko:
label_share_project_list: "프로젝트 목록 공유"
label_share_work_package: "작업 패키지 공유"
label_show_all_registered_users: "등록된 사용자 모두 표시"
- label_show_less: "Show less"
- label_show_more: "Show more"
+ label_show_less: "간단히 표시"
+ label_show_more: "자세히 표시"
label_journal: "기록일지"
label_journal_diff: "설명 비교"
label_language: "언어"
@@ -2287,7 +2287,7 @@ ko:
label_product_version: "제품 버전"
label_profile: "프로필"
label_percent_complete: "완료 %"
- label_progress_tracking: "Progress tracking"
+ label_progress_tracking: "진행률 추적"
label_project: "프로젝트"
label_project_activity: "프로젝트 활동"
label_project_attribute_plural: "프로젝트 특성"
@@ -3106,13 +3106,13 @@ ko:
setting_hours_per_day_explanation: >-
일 및 시간으로 기간을 표시할 때 "하루"로 간주되는 시간을 정의합니다(예: 하루가 8시간이면 32시간은 4일이 됩니다).
setting_invitation_expiration_days: "활성화 이메일 만료 기간:"
- setting_work_package_done_ratio: "Progress calculation mode"
+ setting_work_package_done_ratio: "진행률 계산 모드"
setting_work_package_done_ratio_field: "작업 기반"
setting_work_package_done_ratio_field_caption_html: >-
- % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived.
+ 완료 %는 원하는 값으로 자유롭게 설정할 수 있습니다. 선택적으로 작업에 대한 값을 입력하면 남은 작업이 자동으로 나옵니다.
setting_work_package_done_ratio_status: "상태 기반"
setting_work_package_done_ratio_status_caption_html: >-
- Each status has a % Complete value associated with it. Changing status will change % Complete.
+ 각 상태에는 완료 % 값이 연관되어 있습니다. 상태를 변경하면 완료 %가 변경됩니다.
setting_work_package_done_ratio_explanation_html: >
작업 기반 모드에서 완료 %는 어떤 값으로든 자유롭게 설정할 수 있습니다. 선택적으로 작업에 대한 값을 입력하면 남은 작업이 자동으로 파생됩니다. 상태 기반 모드에서는 각 상태에 완료 % 값이 연결되어 있습니다. 상태를 변경하면 완료 %도 변경됩니다.
setting_work_package_properties: "작업 패키지 속성"
@@ -3133,13 +3133,13 @@ ko:
setting_password_min_length: "최소 길이"
setting_password_min_adhered_rules: "최소 필수 클래스 수"
setting_per_page_options: "페이지당 개체 옵션"
- setting_percent_complete_on_status_closed: "% Complete when status is closed"
- setting_percent_complete_on_status_closed_no_change: "No change"
+ setting_percent_complete_on_status_closed: "상태가 닫힘인 경우 완료 %"
+ setting_percent_complete_on_status_closed_no_change: "변경 없음"
setting_percent_complete_on_status_closed_no_change_caption_html: >-
- The value of % Complete will not change even when a work package is closed.
- setting_percent_complete_on_status_closed_set_100p: "Automatically set to 100%"
+ 완료 % 값은 작업 패키지가 닫혀도 변경되지 않습니다.
+ setting_percent_complete_on_status_closed_set_100p: "100%로 자동 설정"
setting_percent_complete_on_status_closed_set_100p_caption: >-
- A closed work package is considered complete.
+ 닫힌 작업 패키지는 완료로 간주됩니다.
setting_plain_text_mail: "일반 텍스트 메일(HTML 없음)"
setting_protocol: "프로토콜"
setting_project_gantt_query: "프로젝트 포트폴리오 Gantt 보기"
@@ -3164,13 +3164,13 @@ ko:
setting_sys_api_enabled: "리포지토리 관리 웹 서비스 사용"
setting_sys_api_description: "리포지토리 관리 웹 서비스는 리포지토리에 액세스하기 위한 통합 및 사용자 인증을 제공합니다."
setting_time_format: "시간"
- setting_total_percent_complete_mode: "Calculation of % Complete hierarchy totals"
- setting_total_percent_complete_mode_work_weighted_average: "Weighted by work"
+ setting_total_percent_complete_mode: "완료 % 계층 합계 계산"
+ setting_total_percent_complete_mode_work_weighted_average: "작업별 가중치 적용됨"
setting_total_percent_complete_mode_work_weighted_average_caption_html: >-
- The total % Complete will be weighted against the Work of each work package in the hierarchy. Work packages without Work will be ignored.
- setting_total_percent_complete_mode_simple_average: "Simple average"
+ 총 완료 %는 계층에 있는 각 작업 패키지의 작업에 따라 가중치가 적용됩니다. 작업이 없는 작업 패키지는 무시됩니다.
+ setting_total_percent_complete_mode_simple_average: "단순 평균"
setting_total_percent_complete_mode_simple_average_caption_html: >-
- Work is ignored and the total % Complete will be a simple average of % Complete values of work packages in the hierarchy.
+ 작업은 무시되며 총 완료 %는 계층에 있는 작업 패키지의 완료 % 값에 대한 단순 평균이 됩니다.
setting_accessibility_mode_for_anonymous: "익명 사용자에 대해 접근성 모드 사용"
setting_user_format: "사용자 이름 형식"
setting_user_default_timezone: "사용자의 기본 표준 시간대"
@@ -3719,16 +3719,16 @@ ko:
close_warning: "이 경고를 무시하십시오."
oauth:
application:
- builtin: Built-in instance application
- confidential: Confidential
+ builtin: 기본 제공 인스턴스 애플리케이션
+ confidential: 기밀
singular: "OAuth 애플리케이션"
plural: "OAuth 애플리케이션"
named: "OAuth 애플리케이션 '%{name}'"
new: "새로운 OAuth 애플리케이션"
- non_confidential: Non confidential
+ non_confidential: 기밀 아님
default_scopes: "(기본 범위)"
instructions:
- enabled: "Enable this application, allowing users to perform authorization grants with it."
+ enabled: "이 애플리케이션을 활성화하여 사용자가 이 애플리케이션으로 권한 부여를 수행할 수 있도록 합니다."
name: "애플리케이션 이름입니다. 권한 부여 시 다른 사용자에게 표시됩니다."
redirect_uri_html: >
허용된 URL 인증 사용자로 리디렉션될 수 있습니다. 라인별로 하나의 항목이 있습니다.
데스크톱 애플리케이션을 등록하려면 다음 URL을 사용하세요.
@@ -3738,9 +3738,9 @@ ko:
register_intro: "OpenProject용 OAuth API 클라이언트 애플리케이션을 개발할 경우 이 양식을 사용하여 모든 사용자가 사용할 수 있도록 등록할 수 있습니다."
default_scopes: ""
header:
- builtin_applications: Built-in OAuth applications
- other_applications: Other OAuth applications
- empty_application_lists: No OAuth applications have been registered.
+ builtin_applications: 기본 제공 OAuth 애플리케이션
+ other_applications: 기타 OAuth 애플리케이션
+ empty_application_lists: 등록된 OAuth 애플리케이션이 없습니다.
client_id: "고객 ID"
client_secret_notice: >
클라이언트 비밀번호를 인쇄할 수 있는 유일한 순간입니다. 이 비밀번호를 기록하고 안전하게 보관하십시오. 이 비밀번호는 암호로 취급해야 하며 나중에 OpenProject로 검색할 수 없습니다.
diff --git a/config/locales/crowdin/lt.yml b/config/locales/crowdin/lt.yml
index 0847e1e1e8f3..3362a0ee71fd 100644
--- a/config/locales/crowdin/lt.yml
+++ b/config/locales/crowdin/lt.yml
@@ -824,7 +824,7 @@ lt:
blank: "negali būti tuščia."
blank_nested: "reikalauja, kad savybė '%{property}' būtų nustatyta."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Darbų paketas negali būti susietas su viena iš savo vidinių užduočių."
circular_dependency: "Šis ryšys sukurtų ciklinę priklausomybę."
confirmation: "nesutampa su %{attribute}."
diff --git a/config/locales/crowdin/lv.yml b/config/locales/crowdin/lv.yml
index 65d18ec7e109..f41d8a095150 100644
--- a/config/locales/crowdin/lv.yml
+++ b/config/locales/crowdin/lv.yml
@@ -820,7 +820,7 @@ lv:
blank: "nevar būt tukšs."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Darbu kompleksu nevar saistīt vienu no tā apakšuzdevumiem."
circular_dependency: "Šī attiecība radītu riņķveida saistību."
confirmation: "neatbilst %{attribute}."
diff --git a/config/locales/crowdin/mn.yml b/config/locales/crowdin/mn.yml
index da3d5a5b94ab..0804a534e8b6 100644
--- a/config/locales/crowdin/mn.yml
+++ b/config/locales/crowdin/mn.yml
@@ -813,7 +813,7 @@ mn:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/ms.yml b/config/locales/crowdin/ms.yml
index 183868c67dc8..b850b091a97b 100644
--- a/config/locales/crowdin/ms.yml
+++ b/config/locales/crowdin/ms.yml
@@ -804,7 +804,7 @@ ms:
blank: "tidak boleh dibiarkan kosong."
blank_nested: "perlu ada ciri-ciri '%{property}' yang ditetapkan."
cannot_delete_mapping: "diperlukan. Tidak boleh dipadam."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Pakej kerja tidak boleh dipautkan ke salah satu subtugasnya."
circular_dependency: "Hubungan ini akan mencipta kebergantungan bulat."
confirmation: "tidak sepadan dengan %{attribute}."
diff --git a/config/locales/crowdin/ne.yml b/config/locales/crowdin/ne.yml
index 283ae40fb674..366a785ecd3c 100644
--- a/config/locales/crowdin/ne.yml
+++ b/config/locales/crowdin/ne.yml
@@ -813,7 +813,7 @@ ne:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/nl.yml b/config/locales/crowdin/nl.yml
index a7d9d1b6404f..0914895a0ec8 100644
--- a/config/locales/crowdin/nl.yml
+++ b/config/locales/crowdin/nl.yml
@@ -810,7 +810,7 @@ nl:
blank: "mag niet leeg zijn."
blank_nested: "moet de eigenschap '%{property}' ingesteld hebben."
cannot_delete_mapping: "is vereist. Kan niet worden verwijderd."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Een werkpakket kan niet worden gekoppeld aan een van de bijbehorende subtaken."
circular_dependency: "Deze relatie zou een circulaire afhankelijkheid creëren."
confirmation: "komt niet overeen met %{attribute}."
diff --git a/config/locales/crowdin/no.yml b/config/locales/crowdin/no.yml
index 426eaadb6099..544ccc5608b8 100644
--- a/config/locales/crowdin/no.yml
+++ b/config/locales/crowdin/no.yml
@@ -812,7 +812,7 @@
blank: "kan ikke være blank."
blank_nested: "må ha egenskapen '%{property}' aktivert."
cannot_delete_mapping: "er påkrevd. Kan ikke slettes."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "En arbeidspakke kan ikke knyttes til en av sine deloppgaver."
circular_dependency: "En slik relasjon ville lage en sirkulær avhengighet."
confirmation: "samsvarer ikke med %{attribute}."
diff --git a/config/locales/crowdin/pl.yml b/config/locales/crowdin/pl.yml
index 7bc407a1581a..7a83e89afe99 100644
--- a/config/locales/crowdin/pl.yml
+++ b/config/locales/crowdin/pl.yml
@@ -31,9 +31,9 @@ pl:
custom_styles:
color_theme: "Kolor motywu"
color_theme_custom: "(Niestandardowe)"
- tab_interface: "Interface"
+ tab_interface: "Interfejs"
tab_branding: "Branding"
- tab_pdf_export_styles: "PDF export styles"
+ tab_pdf_export_styles: "Style eksportu PDF"
colors:
primary-button-color: "Przycisk główny"
accent-color: "Akcent"
@@ -82,7 +82,7 @@ pl:
contact: "Skontaktuj się z nami, aby uzyskać demo"
enterprise_info_html: "jest dodatkiem wersji Enterprise ."
upgrade_info: "Aby ją aktywować i zacząć korzystać z niej w zespole, przejdź na plan płatny."
- jemalloc_allocator: Jemalloc memory allocator
+ jemalloc_allocator: Alokator pamięci Jemalloc
journal_aggregation:
explanation:
text: "Indywidualne działania użytkownika (np. dwukrotna aktualizacja pakietu roboczego) są agregowane w jedno działanie, jeśli różnica czasowa między nimi jest mniejsza niż określony przedział czasowy. Będą one wyświetlane jako jedno działanie w aplikacji. Spowoduje to również opóźnienie powiadomień o tę samą ilość czasu, zmniejszając liczbę wysyłanych wiadomości e-mail i wpłynie też na opóźnienie %{webhook_link}."
@@ -206,8 +206,8 @@ pl:
admin:
custom_field_projects:
is_for_all_blank_slate:
- heading: For all projects
- description: This custom field is enabled in all projects since the "For all projects" option is checked. It cannot be deactivated for individual projects.
+ heading: Dla wszystkich projektów
+ description: To pole niestandardowe jest włączone we wszystkich projektach, ponieważ jest zaznaczona opcja „Dla wszystkich projektów”. Nie można go wyłączyć dla poszczególnych projektów.
text_add_new_custom_field: >
Aby dodać do projektu nowe pola niestandardowe, najpierw należy je utworzyć.
is_enabled_globally: "Jest włączony globalnie"
@@ -651,8 +651,8 @@ pl:
uid: "Numer klienta"
secret: "Hasło klienta"
owner: "Właściciel"
- builtin: "Builtin"
- enabled: "Active"
+ builtin: "Wbudowany"
+ enabled: "Aktywny"
redirect_uri: "Identyfikator URI przekerowania"
client_credentials_user_id: "Identyfikator użytkownika poświadczeń klienta"
scopes: "Zakresy"
@@ -824,7 +824,7 @@ pl:
blank: "nie może być puste."
blank_nested: "musi mieć ustawioną właściwość '%{property}'."
cannot_delete_mapping: "jest wymagane. Nie można usunąć."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Zestaw zadań nie może być powiązany z jego podzadaniami."
circular_dependency: "Ta relacja może wytworzyć zależność cykliczną."
confirmation: "nie pasuje do %{attribute}."
@@ -901,7 +901,7 @@ pl:
custom_fields_project:
attributes:
project_ids:
- blank: "Please select a project."
+ blank: "Wybierz projekt."
custom_actions:
only_one_allowed: "(%{name}) – dozwolona jest tylko jedna wartość."
empty: "(%{name}) – wartość nie może być pusta."
@@ -933,7 +933,7 @@ pl:
blank: "jest obowiązkowy. Wybierz nazwę."
not_unique: "jest już w użyciu. Wybierz inną nazwę."
meeting:
- error_conflict: "Unable to save because the meeting was updated by someone else in the meantime. Please reload the page."
+ error_conflict: "Nie można zapisać, ponieważ w tym czasie spotkanie zostało zaktualizowane przez inną osobę. Odśwież stronę."
notifications:
at_least_one_channel: "Należy określić co najmniej jeden kanał dla wysyłania powiadomień."
attributes:
@@ -1445,8 +1445,8 @@ pl:
failure_message: Zgoda nie powiodła się, nie można kontynuować.
title: Zgoda użytkownika
decline_warning_message: Odrzuciłeś zgodę i wylogowano Cię.
- user_has_consented: The user gave their consent to your [configured consent information text](consent_settings).
- not_yet_consented: The user has not yet given their consent to your [configured consent information text](consent_settings). They will be reminded the next time they log in.
+ user_has_consented: Użytkownik wyraził zgodę na Twój [skonfigurowany tekst informacji o zgodzie](consent_settings).
+ not_yet_consented: Użytkownik nie wyraził jeszcze zgody na Twój [skonfigurowany tekst informacji o zgodzie](consent_settings). Otrzyma przypomnienie podczas kolejnego logowania.
contact_mail_instructions: Zdefiniuj adres e-mail, na który użytkownicy mogą skontaktować się z administratorem danych w celu wykonania żądań zmiany lub usunięcia danych.
contact_your_administrator: Jeśli chcesz usunąć swoje konto, skontaktuj się z administratorem.
contact_this_mail_address: Jeśli chcesz usunąć swoje konto, skontaktuj się z %{mail_address}.
@@ -1715,7 +1715,7 @@ pl:
error_menu_item_not_saved: Nie można zapisać elementu menu
error_wiki_root_menu_item_conflict: >
Nie można zmienić nazwy "%{old_name}" na "%{new_name}", ze względu na konflikt w istniejącym elemencie menu "%{existing_caption}" (%{existing_identifier}).
- error_external_authentication_failed_message: "An error occurred during external authentication: %{message}"
+ error_external_authentication_failed_message: "Podczas uwierzytelniania zewnętrznego wystąpił błąd: %{message}"
error_attribute_not_highlightable: "Atrybuty, których nie można wyróżnić: %{attributes}"
events:
changeset: "Komentarze edytowane"
@@ -1870,8 +1870,8 @@ pl:
progress_mode_changed_to_status_based: "Zaktualizowano obliczenie postępu"
status_changed: "Status „%{status_name}”"
system_update: "Aktualizacja systemu OpenProjekt:"
- total_percent_complete_mode_changed_to_work_weighted_average: "Calculation of % Complete totals now weighted by Work."
- total_percent_complete_mode_changed_to_simple_average: "Calculation of % Complete totals now based on a simple average of only % Complete values."
+ total_percent_complete_mode_changed_to_work_weighted_average: "Obliczanie % Ukończenia jest teraz ważone parametrem Praca."
+ total_percent_complete_mode_changed_to_simple_average: "Obliczanie % Ukończenia opiera się teraz na średniej arytmetycznej % Ukończenia."
cause_descriptions:
work_package_predecessor_changed_times: przez zmiany poprzednika %{link}
work_package_parent_changed_times: przez zmiany elementu nadrzędnego %{link}
@@ -1889,7 +1889,7 @@ pl:
progress_mode_changed_to_status_based: Tryb obliczania postępu ustawiono na oparty na statusie
status_excluded_from_totals_set_to_false_message: teraz uwzględniono w sumach hierarchii
status_excluded_from_totals_set_to_true_message: teraz wyłączono z sum hierarchii
- status_percent_complete_changed: "% Complete changed from %{old_value}% to %{new_value}%"
+ status_percent_complete_changed: "% Ukończenia zmienił się z %{old_value}% na %{new_value}%"
system_update:
file_links_journal: >
Od teraz aktywność związana z linkami do plików (plików przechowywanych w magazynach zewnętrznych) będzie wyświetlana na karcie Aktywność. Poniżej przedstawiono aktywność dotyczącą linków, które już istniały:
@@ -1900,9 +1900,9 @@ pl:
totals_removed_from_childless_work_packages: >-
Sumy pracy i postępu są automatycznie usuwane dla pakietów pracy innych niż nadrzędne wraz z aktualizacją wersji. Jest to zadanie konserwacyjne i można je bezpiecznie zignorować.
total_percent_complete_mode_changed_to_work_weighted_average: >-
- Child work packages without Work are ignored.
+ Podrzędne pakiety robocze bez parametru Praca są ignorowane.
total_percent_complete_mode_changed_to_simple_average: >-
- Work values of child work packages are ignored.
+ Wartości parametru Praca podrzędnych pakietów roboczych są ignorowane.
links:
configuration_guide: "Przewodnik po konfiguracji"
get_in_touch: "Masz pytania? Skontaktuj się z nami."
@@ -2002,8 +2002,8 @@ pl:
label_additional_workflow_transitions_for_assignee: "Dodatkowe przejścia dozwolone, gdy użytkownik jest cesjonariuszem"
label_additional_workflow_transitions_for_author: "Dodatkowe przejścia dozwolone, gdy użytkownik jest autorem"
label_administration: "Administracja"
- label_interface_colors: "Interface colors"
- label_interface_colors_description: "These colors control how the application looks. If you modify them the theme will automatically be changed to Custom theme, but we can’t assure the compliance of the accessibility contrast minimums (WCAG 2.1). "
+ label_interface_colors: "Kolory interfejsu"
+ label_interface_colors_description: "Te kolory definiują wygląd aplikacji. Jeśli je zmodyfikujesz, motyw zostanie automatycznie zmieniony na niestandardowy, ale nie możemy zapewnić zgodności z minimalnymi wymaganiami w kwestii kontrastu (WCAG 2)."
label_age: "Wiek"
label_ago: "dni temu"
label_all: "wszystkie"
@@ -2036,7 +2036,7 @@ pl:
label_attribute_expand_text: "Pełny tekst atrybutu „%{attribute}”"
label_authentication: "Uwierzytelnianie"
label_authentication_settings: "Ustawienia uwierzytelniania"
- label_available_custom_fields_projects: "Available custom fields projects"
+ label_available_custom_fields_projects: "Dostępne niestandardowe projekty pól"
label_available_global_roles: "Dostępne role globalne"
label_available_project_attributes: "Dostępne atrybuty projektu"
label_available_project_forums: "Dostępne fora"
@@ -2109,7 +2109,7 @@ pl:
label_copy_project: "Kopiuj projekt"
label_core_version: "Wersja bazowa"
label_core_build: "Kompilacja bazowa"
- label_created_by: "Created by %{user}"
+ label_created_by: "Autor: %{user}"
label_current_status: "Aktualny stan"
label_current_version: "Aktualna wersja"
label_custom_field_add_no_type: "Dodaj to pole do typu zadania"
@@ -2117,7 +2117,7 @@ pl:
label_custom_field_plural: "Pola niestandardowe"
label_custom_field_default_type: "Typ pusty"
label_custom_style: "Kompozycja"
- label_custom_style_description: "Choose how OpenProject looks to you with themes, select your default colors to use in the app and how exports look like."
+ label_custom_style_description: "Skonfiguruj wygląd OpenProject za pomocą motywów, wybierz domyślne kolory do wykorzystania w aplikacji i zaprojektuj wygląd eksportu produktów."
label_dashboard: "Pulpit nawigacyjny"
label_database_version: "Wersja PostgreSQL"
label_date: "Data"
@@ -2239,8 +2239,8 @@ pl:
label_share_project_list: "Udostępnij listę projektów"
label_share_work_package: "Udostępnij pakiet roboczy"
label_show_all_registered_users: "Pokaż wszystkich zarejestrowanych użytkowników"
- label_show_less: "Show less"
- label_show_more: "Show more"
+ label_show_less: "Pokaż mniej"
+ label_show_more: "Pokaż więcej"
label_journal: "Dziennik"
label_journal_diff: "Opis porównania"
label_language: "Język"
@@ -2390,7 +2390,7 @@ pl:
label_product_version: "Wersja produktu"
label_profile: "Profil"
label_percent_complete: "% ukończenia"
- label_progress_tracking: "Progress tracking"
+ label_progress_tracking: "Śledzenie postępów"
label_project: "Projekt"
label_project_activity: "Aktywność projektu"
label_project_attribute_plural: "Cechy projektu"
@@ -3215,13 +3215,13 @@ pl:
setting_hours_per_day_explanation: >-
To definiuje, co jest uważane za „dzień” podczas wyświetlania czasu trwania w dniach i godzinach (na przykład, jeśli dzień ma 8 godzin, 32 godziny będą 4 dniami).
setting_invitation_expiration_days: "Ważność aktywacyjnej waidomości e-mail wygasa po"
- setting_work_package_done_ratio: "Progress calculation mode"
+ setting_work_package_done_ratio: "Tryb obliczania postępów"
setting_work_package_done_ratio_field: "Oparte na pracy"
setting_work_package_done_ratio_field_caption_html: >-
- % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived.
+ % Ukończenia można ustawić na dowolną wartość. Jeśli opcjonalnie wprowadzisz wartość dla parametru Praca, automatycznie zostanie wyprowadzona wartość dla parametru Pozostała praca.
setting_work_package_done_ratio_status: "Oparte na statusie"
setting_work_package_done_ratio_status_caption_html: >-
- Each status has a % Complete value associated with it. Changing status will change % Complete.
+ Każdy status ma powiązaną wartość parametru % Ukończenia. Zmiana statusu zmieni % Ukończenia.
setting_work_package_done_ratio_explanation_html: >
W trybie opartym na pracy % ukończenia można swobodnie ustawić na dowolną wartość. Jeśli opcjonalnie wprowadzisz wartość Praca, Pozostała praca zostanie wyprowadzona automatycznie. W trybie opartym na statusie każdy status ma powiązaną wartość % ukończenia. Zmiana statusu spowoduje zmianę wartości % ukończenia.
setting_work_package_properties: "Właściwości pakietu roboczego"
@@ -3242,13 +3242,13 @@ pl:
setting_password_min_length: "Minimalna długość"
setting_password_min_adhered_rules: "Minimalna liczba wymaganych klas"
setting_per_page_options: "Obiektów na stronie"
- setting_percent_complete_on_status_closed: "% Complete when status is closed"
- setting_percent_complete_on_status_closed_no_change: "No change"
+ setting_percent_complete_on_status_closed: "% Ukończenia, gdy status jest zamknięty"
+ setting_percent_complete_on_status_closed_no_change: "Bez zmian"
setting_percent_complete_on_status_closed_no_change_caption_html: >-
- The value of % Complete will not change even when a work package is closed.
- setting_percent_complete_on_status_closed_set_100p: "Automatically set to 100%"
+ Wartość % Ukończenia nie zmieni się nawet, gdy pakiet roboczy jest zamknięty.
+ setting_percent_complete_on_status_closed_set_100p: "Automatycznie ustaw na 100%"
setting_percent_complete_on_status_closed_set_100p_caption: >-
- A closed work package is considered complete.
+ Zamknięty pakiet roboczy jest uważany za ukończony.
setting_plain_text_mail: "Poczta czystym tekstem (bez HTML)"
setting_protocol: "Protokół"
setting_project_gantt_query: "Widok wykresu Gantta portfolio projektu"
@@ -3273,13 +3273,13 @@ pl:
setting_sys_api_enabled: "Uaktywnij zarządzanie repozytoriami przez www"
setting_sys_api_description: "Zarządzanie repozytoriami przez www umożliwia integrację i autoryzację użytkowników do dostępu do repozytoriów."
setting_time_format: "Czas"
- setting_total_percent_complete_mode: "Calculation of % Complete hierarchy totals"
- setting_total_percent_complete_mode_work_weighted_average: "Weighted by work"
+ setting_total_percent_complete_mode: "Obliczenie % Ukończenia pełnej hierarchii"
+ setting_total_percent_complete_mode_work_weighted_average: "Ważone według pracy"
setting_total_percent_complete_mode_work_weighted_average_caption_html: >-
- The total % Complete will be weighted against the Work of each work package in the hierarchy. Work packages without Work will be ignored.
- setting_total_percent_complete_mode_simple_average: "Simple average"
+ Całkowity % Ukończenia będzie ważony względem parametru Praca każdego pakietu roboczego w hierarchii. Zadania bez parametru Praca zostaną zignorowane.
+ setting_total_percent_complete_mode_simple_average: "Średnia arytmetyczna"
setting_total_percent_complete_mode_simple_average_caption_html: >-
- Work is ignored and the total % Complete will be a simple average of % Complete values of work packages in the hierarchy.
+ Parametr Praca jest ignorowany, a całkowita wartość % Ukończenia będzie średnią arytmetyczną % Ukończenia wartości pakietów roboczych w hierarchii.
setting_accessibility_mode_for_anonymous: "Włącz tryb dostępu dla użytkowników anonimowych"
setting_user_format: "Format nazw użytkowników"
setting_user_default_timezone: "Domyślna strefa czasowa użytkowników"
@@ -3831,16 +3831,16 @@ pl:
close_warning: "Zignoruj to ostrzeżenie."
oauth:
application:
- builtin: Built-in instance application
- confidential: Confidential
+ builtin: Wbudowana aplikacja
+ confidential: Poufne
singular: "Aplikacje OAuth"
plural: "Aplikacje OAuth"
named: "Aplikacja OAuth „%{name}”"
new: "Nowa aplikacja OAuth"
- non_confidential: Non confidential
+ non_confidential: Niepoufne
default_scopes: "(Zakresy domyślne)"
instructions:
- enabled: "Enable this application, allowing users to perform authorization grants with it."
+ enabled: "Włącz tę aplikację, aby pozwolić użytkownikom na przeprowadzanie autoryzacji z jej pomocą."
name: "Nazwa aplikacji. Będzie wyświetlana innym użytkownikom po autoryzacji."
redirect_uri_html: >
Dozwolone adresy URL, do których mogą być przekierowywani autoryzowani użytkownicy. Jeden wpis w każdym wierszu.
Jeśli rejestrujesz aplikację komputerową, użyj następującego adresu URL.
@@ -3850,9 +3850,9 @@ pl:
register_intro: "Jeśli tworzysz aplikację kliencką interfejsu API OAuth do OpenProject, możesz zarejestrować ją za pomocą tego formularza do użytku wszystkich użytkowników."
default_scopes: ""
header:
- builtin_applications: Built-in OAuth applications
- other_applications: Other OAuth applications
- empty_application_lists: No OAuth applications have been registered.
+ builtin_applications: Wbudowane aplikacje OAuth
+ other_applications: Inne aplikacje OAuth
+ empty_application_lists: Nie zarejestrowano żadnych aplikacji OAuth.
client_id: "Numer klienta"
client_secret_notice: >
Jest to jedyny moment, w którym możemy wydrukować tajne hasło klienta, zanotuj je i przechowuj w bezpiecznym miejscu. Należy je traktować jak hasło i nie można go później odzyskać przez OpenProject.
diff --git a/config/locales/crowdin/pt-BR.yml b/config/locales/crowdin/pt-BR.yml
index cc6bcbfa2e7f..a8c140b71c48 100644
--- a/config/locales/crowdin/pt-BR.yml
+++ b/config/locales/crowdin/pt-BR.yml
@@ -32,8 +32,8 @@ pt-BR:
color_theme: "Tema Colorido"
color_theme_custom: "(Personalizado)"
tab_interface: "Interface"
- tab_branding: "Branding"
- tab_pdf_export_styles: "PDF export styles"
+ tab_branding: "Gestão de marca"
+ tab_pdf_export_styles: "Estilos de exportação em PDF"
colors:
primary-button-color: "Botão primário"
accent-color: "Destaque"
@@ -82,7 +82,7 @@ pt-BR:
contact: "Contate-nos para uma demonstração"
enterprise_info_html: "é um complemento do Enterprise."
upgrade_info: "Por favor, faça o upgrade para um plano pago para ativar e começar a usá-lo em sua equipe."
- jemalloc_allocator: Jemalloc memory allocator
+ jemalloc_allocator: Alocador de memória Jemalloc
journal_aggregation:
explanation:
text: "As ações individuais de um usuário (por exemplo, atualizar um pacote de trabalho duas vezes) são agregadas em uma única ação se o intervalo de tempo for menor que o intervalo especificado. Eles serão exibidos como uma única ação dentro do aplicativo. Isso também atrasará as notificações no mesmo intervalo de tempo, reduzindo o número de e-mails enviados e também afetará o atraso de %{webhook_link}."
@@ -638,8 +638,8 @@ pt-BR:
uid: "ID do cliente"
secret: "Segredo do cliente"
owner: "Proprietário"
- builtin: "Builtin"
- enabled: "Active"
+ builtin: "Integrado"
+ enabled: "Ativo"
redirect_uri: "Redirecionar URI"
client_credentials_user_id: "ID do usuário de credenciais do cliente"
scopes: "Escopos"
@@ -811,7 +811,7 @@ pt-BR:
blank: "não pode ficar em branco."
blank_nested: "precisa ter a propriedade '%{property}' definida. "
cannot_delete_mapping: "é obrigatório. Não pode ser excluído."
- is_for_all_cannot_modify: "é para todos. Não pode ser modificado."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Um pacote de trabalho não pode ser vinculado a uma das suas subtarefas."
circular_dependency: "Esta relação vai criar uma dependência circular."
confirmation: "não coincide com %{attribute}."
@@ -920,7 +920,7 @@ pt-BR:
blank: "é obrigatório. Selecione um nome."
not_unique: "já está em uso. Selecione outro nome."
meeting:
- error_conflict: "Unable to save because the meeting was updated by someone else in the meantime. Please reload the page."
+ error_conflict: "Não foi possível salvar, pois a reunião foi atualizada por outra pessoa enquanto isso. Atualize a página, por favor."
notifications:
at_least_one_channel: "É necessário especificar pelo menos um canal para o envio de notificações."
attributes:
@@ -1412,8 +1412,8 @@ pt-BR:
failure_message: Consentimento falhou, não pode continuar.
title: Consentimento do usuário
decline_warning_message: Você se recusou a consentir e foi desconectado.
- user_has_consented: The user gave their consent to your [configured consent information text](consent_settings).
- not_yet_consented: The user has not yet given their consent to your [configured consent information text](consent_settings). They will be reminded the next time they log in.
+ user_has_consented: O usuário deu seu consentimento para as [informações de consentimento configuradas](consent_settings).
+ not_yet_consented: O usuário ainda não deu seu consentimento para as [informações de consentimento configuradas](consent_settings). Ele será lembrado disso na próxima vez que fizer login.
contact_mail_instructions: Defina o endereço de e-mail que os usuários devem utilizar para solicitar alteração ou remoção de dados.
contact_your_administrator: Por favor, entre em contato com o administrador se quiser ter sua conta excluída.
contact_this_mail_address: Por favor, entre em contato com %{mail_address} se quiser ter sua conta excluída.
@@ -1646,7 +1646,7 @@ pt-BR:
error_menu_item_not_saved: Item de menu não pôde ser salvo
error_wiki_root_menu_item_conflict: >
Não é possível renomear de"%{old_name}" para "%{new_name}" devido a um conflito no item de menu resultante com o item de menu existente "%{existing_caption}" (%{existing_identifier}).
- error_external_authentication_failed_message: "An error occurred during external authentication: %{message}"
+ error_external_authentication_failed_message: "Ocorreu um erro durante a autenticação externa: %{message}"
error_attribute_not_highlightable: "Atributo(s) não destacado(s): %{attributes}"
events:
changeset: "Conjunto de alterações editadas"
@@ -1801,8 +1801,8 @@ pt-BR:
progress_mode_changed_to_status_based: "Cálculo de progresso atualizado"
status_changed: "Status '%{status_name}'"
system_update: "Atualização do sistema OpenProject:"
- total_percent_complete_mode_changed_to_work_weighted_average: "Calculation of % Complete totals now weighted by Work."
- total_percent_complete_mode_changed_to_simple_average: "Calculation of % Complete totals now based on a simple average of only % Complete values."
+ total_percent_complete_mode_changed_to_work_weighted_average: "O cálculo dos totais de % de conclusão agora é ponderado pelo Trabalho."
+ total_percent_complete_mode_changed_to_simple_average: "O cálculo dos totais de % de conclusão agora é feito com base na média simples dos valores de % de conclusão."
cause_descriptions:
work_package_predecessor_changed_times: por alterações ao antecessor %{link}
work_package_parent_changed_times: por alterações ao primário %{link}
@@ -1820,7 +1820,7 @@ pt-BR:
progress_mode_changed_to_status_based: Modo de cálculo de progresso definido como com base no status
status_excluded_from_totals_set_to_false_message: agora incluído nos totais da hierarquia
status_excluded_from_totals_set_to_true_message: agora excluído dos totais da hierarquia
- status_percent_complete_changed: "% Complete changed from %{old_value}% to %{new_value}%"
+ status_percent_complete_changed: "% de conclusão alterada de %{old_value}% para %{new_value}%"
system_update:
file_links_journal: >
A partir de agora, a atividade relacionada a links de arquivos (arquivos armazenados em armazenamentos externos) aparecerá aqui na guia Atividade. O seguinte representa a atividade relacionada aos links que já existiam:
@@ -1831,9 +1831,9 @@ pt-BR:
totals_removed_from_childless_work_packages: >-
Os totais de trabalho e progresso foram removidos automaticamente para pacotes de trabalho que não são principais com a atualização de versão. Esta é uma tarefa de manutenção e pode ser ignorada com segurança.
total_percent_complete_mode_changed_to_work_weighted_average: >-
- Child work packages without Work are ignored.
+ Pacotes de trabalho infantil sem Trabalho são ignorados.
total_percent_complete_mode_changed_to_simple_average: >-
- Work values of child work packages are ignored.
+ Os valores de trabalho dos pacotes de trabalho filhos são ignorados.
links:
configuration_guide: "Guia de configuração"
get_in_touch: "Com dúvidas? Entre em contato conosco."
@@ -1933,8 +1933,8 @@ pt-BR:
label_additional_workflow_transitions_for_assignee: "Transições adicionais permitidas quando o usuário é o responsável"
label_additional_workflow_transitions_for_author: "Transições adicionais permitidas quando o usuário é o autor"
label_administration: "Administração"
- label_interface_colors: "Interface colors"
- label_interface_colors_description: "These colors control how the application looks. If you modify them the theme will automatically be changed to Custom theme, but we can’t assure the compliance of the accessibility contrast minimums (WCAG 2.1). "
+ label_interface_colors: "Cores da interface"
+ label_interface_colors_description: "Essas cores controlam a aparência do aplicativo. Se você alterá-las, o tema mudará automaticamente para Tema Personalizado, mas não podemos garantir que atenda aos mínimos de contraste de acessibilidade (WCAG 2.1). "
label_age: "Idade"
label_ago: "dias atrás"
label_all: "todos"
@@ -2040,7 +2040,7 @@ pt-BR:
label_copy_project: "Cópiar projeto"
label_core_version: "Versão do núcleo"
label_core_build: "Construção principal"
- label_created_by: "Created by %{user}"
+ label_created_by: "Criado por %{user}"
label_current_status: "Situação atual"
label_current_version: "Versão atual"
label_custom_field_add_no_type: "Adicionar este campo a um tipo de pacote de trabalho"
@@ -2048,7 +2048,7 @@ pt-BR:
label_custom_field_plural: "Campos personalizados"
label_custom_field_default_type: "Tipo vazio"
label_custom_style: "Design"
- label_custom_style_description: "Choose how OpenProject looks to you with themes, select your default colors to use in the app and how exports look like."
+ label_custom_style_description: "Escolha como o OpenProject será exibido para você com os temas, selecione suas cores padrão para usar no aplicativo e defina a aparência das exportações."
label_dashboard: "Painel"
label_database_version: "Versão do PostgreSQL"
label_date: "Data"
@@ -2170,8 +2170,8 @@ pt-BR:
label_share_project_list: "Compartilhar lista de projeto"
label_share_work_package: "Compartilhar pacote de trabalho"
label_show_all_registered_users: "Mostrar todos usuários registrados"
- label_show_less: "Show less"
- label_show_more: "Show more"
+ label_show_less: "Exibir menos"
+ label_show_more: "Exibir mais"
label_journal: "Diário"
label_journal_diff: "Comparação de Descrição"
label_language: "Idioma"
@@ -2321,7 +2321,7 @@ pt-BR:
label_product_version: "Versão do produto"
label_profile: "Perfil"
label_percent_complete: "% de conclusão"
- label_progress_tracking: "Progress tracking"
+ label_progress_tracking: "Rastreamento de progresso"
label_project: "Projeto"
label_project_activity: "Atividade do projeto"
label_project_attribute_plural: "Atributos do projeto"
@@ -3143,13 +3143,13 @@ pt-BR:
setting_hours_per_day_explanation: >-
Isso define o que é considerado um "dia" ao exibir a duração em dias e horas (por exemplo, se um dia tem 8 horas, 32 horas serão exibidas como 4 dias).
setting_invitation_expiration_days: "E-mail de ativação expira após"
- setting_work_package_done_ratio: "Progress calculation mode"
+ setting_work_package_done_ratio: "Modo de cálculo de progresso"
setting_work_package_done_ratio_field: "Com base no trabalho"
setting_work_package_done_ratio_field_caption_html: >-
- % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived.
+ % de conclusão pode ser ajustado para qualquer valor. Se você inserir um valor para Trabalho, o Trabalho restante será calculado automaticamente.
setting_work_package_done_ratio_status: "Com base no estado"
setting_work_package_done_ratio_status_caption_html: >-
- Each status has a % Complete value associated with it. Changing status will change % Complete.
+ Cada status tem um valor de % de conclusão associado. Ao mudar o status, o % de conclusão será atualizado automaticamente.
setting_work_package_done_ratio_explanation_html: >
No modo baseado em trabalho, você pode definir o % de conclusão para qualquer valor desejado. Se você inserir um valor para o Trabalho, o Trabalho restante será calculado automaticamente. No modo baseado em status, cada status está associado a um valor de % de conclusão. Alterar o status irá atualizar o % de conclusão correspondente.
setting_work_package_properties: "Propriedades do pacote de trabalho"
@@ -3170,13 +3170,13 @@ pt-BR:
setting_password_min_length: "Tamanho mínimo"
setting_password_min_adhered_rules: "Número mínimo de classes de caracteres obrigatórias"
setting_per_page_options: "Opções de objetos por página"
- setting_percent_complete_on_status_closed: "% Complete when status is closed"
- setting_percent_complete_on_status_closed_no_change: "No change"
+ setting_percent_complete_on_status_closed: "% de conclusão quando o status for fechado"
+ setting_percent_complete_on_status_closed_no_change: "Sem alteração"
setting_percent_complete_on_status_closed_no_change_caption_html: >-
- The value of % Complete will not change even when a work package is closed.
- setting_percent_complete_on_status_closed_set_100p: "Automatically set to 100%"
+ O valor de % de conclusão não será alterado mesmo quando um pacote de trabalho for fechado.
+ setting_percent_complete_on_status_closed_set_100p: "Automaticamente definido para 100%"
setting_percent_complete_on_status_closed_set_100p_caption: >-
- A closed work package is considered complete.
+ Um pacote de trabalho fechado é considerado concluído.
setting_plain_text_mail: "Mensagens de texto simples (sem HTML)"
setting_protocol: "Protocolo"
setting_project_gantt_query: "Visualização Gantt do portfólio de projetos"
@@ -3201,13 +3201,13 @@ pt-BR:
setting_sys_api_enabled: "Habilitar o serviço web de gerenciamento de repositório"
setting_sys_api_description: "O serviço de web de gerenciamento de repositório fornece integração e autorização de usuário para acessar repositórios."
setting_time_format: "Horário"
- setting_total_percent_complete_mode: "Calculation of % Complete hierarchy totals"
- setting_total_percent_complete_mode_work_weighted_average: "Weighted by work"
+ setting_total_percent_complete_mode: "Cálculo de totais de hierarquia de % de conclusão"
+ setting_total_percent_complete_mode_work_weighted_average: "Ponderado pelo trabalho"
setting_total_percent_complete_mode_work_weighted_average_caption_html: >-
- The total % Complete will be weighted against the Work of each work package in the hierarchy. Work packages without Work will be ignored.
- setting_total_percent_complete_mode_simple_average: "Simple average"
+ O total % de conclusão será calculado com base no Trabalho de cada pacote de trabalho na hierarquia. Pacotes de trabalho sem Trabalho serão desconsiderados.
+ setting_total_percent_complete_mode_simple_average: "Média simples"
setting_total_percent_complete_mode_simple_average_caption_html: >-
- Work is ignored and the total % Complete will be a simple average of % Complete values of work packages in the hierarchy.
+ O Trabalho será ignorado, e o total % de conclusão será calculado como uma média simples dos valores de % de conclusão dos pacotes de trabalho na hierarquia.
setting_accessibility_mode_for_anonymous: "Ativar o modo de acessibilidade para usuários anônimos"
setting_user_format: "Formato do nome de usuário"
setting_user_default_timezone: "Fuso horário padrão"
@@ -3756,16 +3756,16 @@ pt-BR:
close_warning: "Ignorar este aviso."
oauth:
application:
- builtin: Built-in instance application
- confidential: Confidential
+ builtin: Aplicativo de instância integrado
+ confidential: Confidencial
singular: "Aplicação OAuth"
plural: "Aplicações OAuth"
named: "Aplicação OAuth '%{name}'"
new: "Nova aplicação OAuth"
- non_confidential: Non confidential
+ non_confidential: Não confidencial
default_scopes: "(Escopos padrão)"
instructions:
- enabled: "Enable this application, allowing users to perform authorization grants with it."
+ enabled: "Habilite este aplicativo para permitir que os usuários realizem concessões de autorização com ele."
name: "O nome da sua aplicação. Isto será exibido para outros usuários mediante autorização."
redirect_uri_html: >
Os URLs permitidos dos usuários autorizados podem ser redirecionadas para. Uma entrada por linha.
Se você estiver registrando uma aplicação desktop, use o seguinte URL.
@@ -3775,9 +3775,9 @@ pt-BR:
register_intro: "Se você estiver desenvolvendo uma aplicação cliente da API OAuth do OpenProject, poderá registrá-la usando este formulário para ser usada por todos os usuários."
default_scopes: ""
header:
- builtin_applications: Built-in OAuth applications
- other_applications: Other OAuth applications
- empty_application_lists: No OAuth applications have been registered.
+ builtin_applications: Aplicativo OAuth integrado
+ other_applications: Outras aplicações OAuth
+ empty_application_lists: Nenhuma aplicação OAuth foi registrada.
client_id: "ID do cliente"
client_secret_notice: >
Esta é a única vez que podemos imprimir o segredo do cliente, por favor, anote-o e mantenha-o em local seguro. Ele deve ser tratado como uma senha e não poderá ser recuperado pelo OpenProject mais tarde.
diff --git a/config/locales/crowdin/pt-PT.yml b/config/locales/crowdin/pt-PT.yml
index 7c76b9f9934a..fbd4cd2d0048 100644
--- a/config/locales/crowdin/pt-PT.yml
+++ b/config/locales/crowdin/pt-PT.yml
@@ -32,8 +32,8 @@ pt-PT:
color_theme: "Cores do tema"
color_theme_custom: "(Personalizado)"
tab_interface: "Interface"
- tab_branding: "Branding"
- tab_pdf_export_styles: "PDF export styles"
+ tab_branding: "Marca"
+ tab_pdf_export_styles: "Estilos de exportação PDF"
colors:
primary-button-color: "Botão principal"
accent-color: "Destaque"
@@ -82,7 +82,7 @@ pt-PT:
contact: "Contacte-nos para obter uma demonstração"
enterprise_info_html: "é um complemento de Enterprise ."
upgrade_info: "Faça o upgrade para um plano pago para ativar e começar a usar na sua equipa."
- jemalloc_allocator: Jemalloc memory allocator
+ jemalloc_allocator: Alocador de memória Jemalloc
journal_aggregation:
explanation:
text: "As ações individuais de um utilizador (por exemplo, atualizar um pacote de trabalho duas vezes) são agregadas numa única ação se a sua diferença de idade for menor que o intervalo de tempo especificado. Serão mostradas como uma única ação dentro da aplicação. Também vai atrasar as notificações pelo mesmo período de tempo, o que reduz o número de e-mails enviados, e afeta ainda o atraso de %{webhook_link}."
@@ -207,8 +207,8 @@ pt-PT:
admin:
custom_field_projects:
is_for_all_blank_slate:
- heading: For all projects
- description: This custom field is enabled in all projects since the "For all projects" option is checked. It cannot be deactivated for individual projects.
+ heading: Para todos os projetos
+ description: Este campo personalizado é ativado em todos os projetos, uma vez que a opção "Para todos os projetos" está assinalada. Não pode ser desativado para projetos individuais.
text_add_new_custom_field: >
Para adicionar novos campos personalizados a um projeto, primeiro precisa de criá-los para depois adicioná-los a este projeto.
is_enabled_globally: "Ativado a nível global"
@@ -638,8 +638,8 @@ pt-PT:
uid: "ID de cliente"
secret: "Segredo do cliente"
owner: "Proprietário"
- builtin: "Builtin"
- enabled: "Active"
+ builtin: "Incorporado"
+ enabled: "Ativo"
redirect_uri: "Redirecionar URI"
client_credentials_user_id: "ID de utilizador de Credenciais do Cliente"
scopes: "Âmbitos"
@@ -811,7 +811,7 @@ pt-PT:
blank: "não pode ficar em branco."
blank_nested: "precisa de ter a propriedade '%{property}' configurada."
cannot_delete_mapping: "é necessário. Não pode ser eliminado."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Um pacote de trabalho não pode ser ligado a uma das suas sub-tarefas."
circular_dependency: "Esta relação vai criar uma dependência circular."
confirmation: "não coincide %{attribute}."
@@ -888,7 +888,7 @@ pt-PT:
custom_fields_project:
attributes:
project_ids:
- blank: "Please select a project."
+ blank: "Selecione um projeto."
custom_actions:
only_one_allowed: "(%{name}) só é permitido um valor."
empty: "(%{name}) valor não pode ficar vazio."
@@ -920,7 +920,7 @@ pt-PT:
blank: "é obrigatório. Selecione um nome."
not_unique: "já está a ser utilizado. Escolha outro nome."
meeting:
- error_conflict: "Unable to save because the meeting was updated by someone else in the meantime. Please reload the page."
+ error_conflict: "Não foi possível guardar porque a reunião entretanto foi atualizada por outra pessoa. Recarregue a página."
notifications:
at_least_one_channel: "É necessário especificar pelo menos um canal para o envio de notificações."
attributes:
@@ -1412,8 +1412,8 @@ pt-PT:
failure_message: Consentimento falhou, não pode continuar.
title: Consentimento do utilizador
decline_warning_message: Recusou consentir e foi desligado.
- user_has_consented: The user gave their consent to your [configured consent information text](consent_settings).
- not_yet_consented: The user has not yet given their consent to your [configured consent information text](consent_settings). They will be reminded the next time they log in.
+ user_has_consented: O utilizador deu o seu consentimento ao seu [texto de informação de consentimento configurado](consent_settings).
+ not_yet_consented: O utilizador ainda não deu o seu consentimento ao seu [texto de informação de consentimento configurado] (consent_settings). Ser-lhe-á recordado quando iniciar sessão pela próxima vez.
contact_mail_instructions: Defina o endereço de email que os utilizadores podem utilizar para contatar um controlador de dados a solicitar alteração ou remoção de dados.
contact_your_administrator: Entre em contato com o administrador caso pretenda apagar a sua conta.
contact_this_mail_address: Entre em contato com %{mail_address} caso pretenda apagar a sua conta.
@@ -1646,7 +1646,7 @@ pt-PT:
error_menu_item_not_saved: Item de menu não pôde ser guardado
error_wiki_root_menu_item_conflict: >
Não é possível mudar o nome de"%{old_name}" para "%{new_name}" devido a um conflito no item de menu resultante com o item de menu existente "%{existing_caption}" (%{existing_identifier}).
- error_external_authentication_failed_message: "An error occurred during external authentication: %{message}"
+ error_external_authentication_failed_message: "Ocorreu um erro durante a autenticação externa: %{message}"
error_attribute_not_highlightable: "Atributos não destacáveis: %{attributes}"
events:
changeset: "Changeset editado"
@@ -1801,8 +1801,8 @@ pt-PT:
progress_mode_changed_to_status_based: "Cálculo do progresso atualizado"
status_changed: "Estado \"%{status_name}\""
system_update: "Atualização do sistema OpenProject:"
- total_percent_complete_mode_changed_to_work_weighted_average: "Calculation of % Complete totals now weighted by Work."
- total_percent_complete_mode_changed_to_simple_average: "Calculation of % Complete totals now based on a simple average of only % Complete values."
+ total_percent_complete_mode_changed_to_work_weighted_average: "O cálculo dos totais da % de conclusão é agora ponderado pelo Trabalho."
+ total_percent_complete_mode_changed_to_simple_average: "O cálculo dos totais da % de conclusão baseia-se agora numa média simples de apenas os valores da % de conclusão."
cause_descriptions:
work_package_predecessor_changed_times: por alterações no %{link} antecessor
work_package_parent_changed_times: por alterações no %{link} principal
@@ -1820,7 +1820,7 @@ pt-PT:
progress_mode_changed_to_status_based: Modo de cálculo do progresso definido como baseado no estado
status_excluded_from_totals_set_to_false_message: agora incluído nos totais da hierarquia
status_excluded_from_totals_set_to_true_message: agora excluído dos totais da hierarquia
- status_percent_complete_changed: "% Complete changed from %{old_value}% to %{new_value}%"
+ status_percent_complete_changed: "% de conclusão alterada de %{old_value}% para %{new_value}%"
system_update:
file_links_journal: >
A partir de agora, a atividade relacionada a links de arquivos (arquivos armazenados em armazenamentos externos) aparecerá aqui na guia Atividade. O seguinte representa a atividade relacionada aos links que já existiam:
@@ -1831,9 +1831,9 @@ pt-PT:
totals_removed_from_childless_work_packages: >-
Os totais de trabalho e de progresso são automaticamente removidos dos pacotes de trabalho que não são principais com a atualização da versão. Esta é uma tarefa de manutenção e pode ser ignorada com segurança.
total_percent_complete_mode_changed_to_work_weighted_average: >-
- Child work packages without Work are ignored.
+ Os pacotes de trabalho para crianças sem Trabalho são ignorados.
total_percent_complete_mode_changed_to_simple_average: >-
- Work values of child work packages are ignored.
+ Os valores de trabalho dos pacotes de trabalho para crianças são ignorados.
links:
configuration_guide: "Guia de configuração"
get_in_touch: "Tem questões? Entre em contato conosco."
@@ -1933,8 +1933,8 @@ pt-PT:
label_additional_workflow_transitions_for_assignee: "Transições adicionais permitidas quando a tarefa está atribuída ao utilizador"
label_additional_workflow_transitions_for_author: "Transições adicionais permitidas quando o utilizador é o autor da tarefa"
label_administration: "Administração"
- label_interface_colors: "Interface colors"
- label_interface_colors_description: "These colors control how the application looks. If you modify them the theme will automatically be changed to Custom theme, but we can’t assure the compliance of the accessibility contrast minimums (WCAG 2.1). "
+ label_interface_colors: "Cores da interface"
+ label_interface_colors_description: "Estas cores controlam o aspeto da aplicação. Se as modificar, o tema será automaticamente alterado para Tema personalizado, mas não podemos garantir a conformidade com os mínimos de contraste de acessibilidade (WCAG 2.1). "
label_age: "Idade"
label_ago: "dias atrás"
label_all: "todos"
@@ -1967,7 +1967,7 @@ pt-PT:
label_attribute_expand_text: "O texto completo para \"%{attribute}\""
label_authentication: "Autenticação"
label_authentication_settings: "Definições da autenticação"
- label_available_custom_fields_projects: "Available custom fields projects"
+ label_available_custom_fields_projects: "Projetos de campos personalizados disponíveis"
label_available_global_roles: "Papéis globais disponíveis"
label_available_project_attributes: "Atributos do projeto disponíveis"
label_available_project_forums: "Fóruns disponíveis"
@@ -2040,7 +2040,7 @@ pt-PT:
label_copy_project: "Copiar projeto"
label_core_version: "Versão do núcleo"
label_core_build: "Construção principal"
- label_created_by: "Created by %{user}"
+ label_created_by: "Criado por %{user}"
label_current_status: "Estado atual"
label_current_version: "Versão atual"
label_custom_field_add_no_type: "Adicionar este campo a um tipo de pacote de trabalho"
@@ -2048,7 +2048,7 @@ pt-PT:
label_custom_field_plural: "Campos personalizados"
label_custom_field_default_type: "Tipo de vazio"
label_custom_style: "Design"
- label_custom_style_description: "Choose how OpenProject looks to you with themes, select your default colors to use in the app and how exports look like."
+ label_custom_style_description: "Escolha o aspeto do OpenProject com temas, selecione as cores predefinidas a utilizar na aplicação e o aspeto das exportações."
label_dashboard: "Painel"
label_database_version: "versão PostgreSQL"
label_date: "Data"
@@ -2170,8 +2170,8 @@ pt-PT:
label_share_project_list: "Partilhar lista de projetos"
label_share_work_package: "Partilhar pacote de trabalho"
label_show_all_registered_users: "Mostrar todos utilizadores registrados"
- label_show_less: "Show less"
- label_show_more: "Show more"
+ label_show_less: "Mostrar menos"
+ label_show_more: "Mostrar mais"
label_journal: "Diário"
label_journal_diff: "Comparação de descrição"
label_language: "Idioma"
@@ -2321,7 +2321,7 @@ pt-PT:
label_product_version: "Versão do produto"
label_profile: "Perfil"
label_percent_complete: "% de conclusão"
- label_progress_tracking: "Progress tracking"
+ label_progress_tracking: "Acompanhamento do progresso"
label_project: "Projeto"
label_project_activity: "Atividade do projeto"
label_project_attribute_plural: "Atributos do projeto"
@@ -3142,13 +3142,13 @@ pt-PT:
setting_hours_per_day_explanation: >-
Isto define o que é considerado um "dia" ao apresentar a duração em dias e horas (por exemplo, se um dia tiver 8 horas, 32 horas seriam 4 dias).
setting_invitation_expiration_days: "O email de ativação expira após"
- setting_work_package_done_ratio: "Progress calculation mode"
+ setting_work_package_done_ratio: "Modo do cálculo do progresso"
setting_work_package_done_ratio_field: "Baseado no trabalho"
setting_work_package_done_ratio_field_caption_html: >-
- % Complete can be freely set to any value. If you optionally enter a value for Work, Remaining work will automatically be derived.
+ A % de conclusão pode ser definida livremente para qualquer valor. Se, opcionalmente, introduzir um valor para Trabalho, o Trabalho restante será automaticamente derivado.
setting_work_package_done_ratio_status: "Baseado no estado"
setting_work_package_done_ratio_status_caption_html: >-
- Each status has a % Complete value associated with it. Changing status will change % Complete.
+ Cada estado tem um valor de % de conclusão associado. A alteração do estado altera a % de conclusão.
setting_work_package_done_ratio_explanation_html: >
No modo baseado no trabalho, a % de conclusão pode ser definida livremente para qualquer valor. Se, opcionalmente, introduzir um valor para Trabalho, o Trabalho restante será automaticamente derivado. 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.
setting_work_package_properties: "Propriedades das tarefas"
@@ -3169,13 +3169,13 @@ pt-PT:
setting_password_min_length: "Tamanho mínimo"
setting_password_min_adhered_rules: "Número mínimo de classes obrigatórias"
setting_per_page_options: "Opções de objetos por página"
- setting_percent_complete_on_status_closed: "% Complete when status is closed"
- setting_percent_complete_on_status_closed_no_change: "No change"
+ setting_percent_complete_on_status_closed: "% de conclusão quando o estado é encerrado"
+ setting_percent_complete_on_status_closed_no_change: "Sem alterações"
setting_percent_complete_on_status_closed_no_change_caption_html: >-
- The value of % Complete will not change even when a work package is closed.
- setting_percent_complete_on_status_closed_set_100p: "Automatically set to 100%"
+ O valor da % de conclusão não se altera mesmo quando um pacote de trabalho é encerrado.
+ setting_percent_complete_on_status_closed_set_100p: "Definido automaticamente para 100%"
setting_percent_complete_on_status_closed_set_100p_caption: >-
- A closed work package is considered complete.
+ Um pacote de trabalho fechado é considerado completo.
setting_plain_text_mail: "Mensagens de texto simples (sem HTML)"
setting_protocol: "Protocolo"
setting_project_gantt_query: "Visualização de portfólio Gantt do projeto"
@@ -3200,13 +3200,13 @@ pt-PT:
setting_sys_api_enabled: "Habilitar o serviço web de gestão do repositório"
setting_sys_api_description: "O serviço de web de gestão de repositório fornece integração e autorização ao utilizador para aceder a repositórios."
setting_time_format: "Tempo"
- setting_total_percent_complete_mode: "Calculation of % Complete hierarchy totals"
- setting_total_percent_complete_mode_work_weighted_average: "Weighted by work"
+ setting_total_percent_complete_mode: "Cálculo dos totais da hierarquia da % de conclusão"
+ setting_total_percent_complete_mode_work_weighted_average: "Ponderado pelo trabalho"
setting_total_percent_complete_mode_work_weighted_average_caption_html: >-
- The total % Complete will be weighted against the Work of each work package in the hierarchy. Work packages without Work will be ignored.
- setting_total_percent_complete_mode_simple_average: "Simple average"
+ A % de conclusão total será ponderada em função do Trabalho de cada pacote de trabalho na hierarquia. Os pacotes de trabalho sem Trabalho serão ignorados.
+ setting_total_percent_complete_mode_simple_average: "Média simples"
setting_total_percent_complete_mode_simple_average_caption_html: >-
- Work is ignored and the total % Complete will be a simple average of % Complete values of work packages in the hierarchy.
+ O Trabalho é ignorado e a % de conclusão total será uma média simples dos valores da % de conclusão dos pacotes de trabalho na hierarquia.
setting_accessibility_mode_for_anonymous: "Ativar modo de acessibilidade para utilizadores anónimos"
setting_user_format: "Formato de nomes de utilizador"
setting_user_default_timezone: "Fuso horário padrão dos utilizadores"
@@ -3756,16 +3756,16 @@ pt-PT:
close_warning: "Ignore este aviso."
oauth:
application:
- builtin: Built-in instance application
- confidential: Confidential
+ builtin: Aplicação de instância incorporada
+ confidential: Confidencial
singular: "Aplicação OAuth"
plural: "Aplicações OAuth"
named: "Aplicação OAuth '%{name}'"
new: "Nova aplicação OAuth"
- non_confidential: Non confidential
+ non_confidential: Não confidencial
default_scopes: "(Âmbitos predefinidos)"
instructions:
- enabled: "Enable this application, allowing users to perform authorization grants with it."
+ enabled: "Ative esta aplicação, permitindo que os utilizadores efetuem concessões de autorização com ela."
name: "O nome da sua aplicação. Isto será exibido aos outros utilizadores após a autorização."
redirect_uri_html: >
Os utilizadores autorizados com URLs podem ser redirecionados para. Uma entrada por linha.
Se estiver a registar uma aplicação de desktop, use a seguinte URL.
@@ -3775,9 +3775,9 @@ pt-PT:
register_intro: "Se está a desenvolver uma aplicação de cliente OAuth API para OpenProject, pode registá-la através deste formulário para que todos os utilizadores a possam usar."
default_scopes: ""
header:
- builtin_applications: Built-in OAuth applications
- other_applications: Other OAuth applications
- empty_application_lists: No OAuth applications have been registered.
+ builtin_applications: Aplicações OAuth incorporadas
+ other_applications: Outras aplicações OAuth
+ empty_application_lists: Não foram registadas aplicações OAuth.
client_id: "ID de cliente"
client_secret_notice: >
Esta é a única vez que podemos imprimir o segredo do cliente, por favor anote-o e mantenha-o seguro. Deve ser tratado como uma palavra-passe e não pode ser recuperado mais tarde pelo OpenProject.
diff --git a/config/locales/crowdin/ro.yml b/config/locales/crowdin/ro.yml
index fcdd6f024276..a3faa6de720d 100644
--- a/config/locales/crowdin/ro.yml
+++ b/config/locales/crowdin/ro.yml
@@ -820,7 +820,7 @@ ro:
blank: "nu poate fi gol."
blank_nested: "trebuie să aibă setul '%{property}' al proprietății."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Un pachet de lucru nu poate fi legat de una din sub-activitățile sale."
circular_dependency: "Această relație ar crea o dependință circulară."
confirmation: "nu se potrivește cu %{attribute}."
diff --git a/config/locales/crowdin/ru.yml b/config/locales/crowdin/ru.yml
index 9ea6815b233c..d1f3d37974df 100644
--- a/config/locales/crowdin/ru.yml
+++ b/config/locales/crowdin/ru.yml
@@ -739,7 +739,7 @@ ru:
is_closed: "Пакет работ закрыт"
is_readonly: "Пакет работ только для просмотра"
excluded_from_totals: "Исключить из расчета итогов в иерархии"
- default_done_ratio: "% Завершено"
+ default_done_ratio: "% Завершения"
time_entry:
activity: "Деятельность"
hours: "Часы"
@@ -789,7 +789,7 @@ ru:
derived_done_ratio: "Всего % завершено"
derived_remaining_hours: "Всего оставшихся работ"
derived_remaining_time: "Всего оставшихся работ"
- done_ratio: "% Завершено"
+ done_ratio: "% Завершения"
duration: "Продолжительность"
end_insertion: "Завершение вставки"
end_deletion: "Завершение удаления"
@@ -803,7 +803,7 @@ ru:
parent_issue: "Родитель"
parent_work_package: "Родитель"
priority: "Приоритет"
- progress: "% Завершено"
+ progress: "% Завершения"
readonly: "Только для чтения"
remaining_hours: "Оставшиеся часы"
remaining_time: "Оставшиеся часы"
@@ -826,7 +826,7 @@ ru:
blank: "не может быть пустым."
blank_nested: "должно быть установлено свойство '%{property}'."
cannot_delete_mapping: "требуется. Невозможно удалить."
- is_for_all_cannot_modify: "предназначен для всех. Не может быть изменен."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Пакет работ не может быть связан с одной из своих подзадач."
circular_dependency: "Это отношение создаст циклическую зависимость."
confirmation: "не совпадает со значением поля %{attribute}."
@@ -1447,8 +1447,8 @@ ru:
failure_message: Согласие не получено, продолжение невозможно.
title: Согласие пользователя
decline_warning_message: Вы отказались согласиться и были занесены в журнал.
- user_has_consented: The user gave their consent to your [configured consent information text](consent_settings).
- not_yet_consented: The user has not yet given their consent to your [configured consent information text](consent_settings). They will be reminded the next time they log in.
+ user_has_consented: Пользователь дал свое согласие на [настроенный текст информации о согласии](consent_settings).
+ not_yet_consented: Пользователь еще не дал своего согласия на [настроенный текст информации о согласии](consent_settings). При следующем входе в систему ему об этом напомнят.
contact_mail_instructions: Укажите адрес электронной почты для контроля пользователями выполнения запросов на изменение или удаление данных.
contact_your_administrator: Пожалуйста, обратитесь к администратору, если хотите, чтобы ваша учетная запись была удалена.
contact_this_mail_address: Пожалуйста, свяжитесь по %{mail_address}, если хотите, чтобы ваша учетная запись была удалена.
@@ -1872,8 +1872,8 @@ ru:
progress_mode_changed_to_status_based: "Расчет прогресса обновлен"
status_changed: "Статус '%{status_name}'"
system_update: "Обновление системы OpenProject:"
- total_percent_complete_mode_changed_to_work_weighted_average: "Calculation of % Complete totals now weighted by Work."
- total_percent_complete_mode_changed_to_simple_average: "Calculation of % Complete totals now based on a simple average of only % Complete values."
+ total_percent_complete_mode_changed_to_work_weighted_average: "Вычисление % Завершения теперь взвешивается по Работе."
+ total_percent_complete_mode_changed_to_simple_average: "Вычисление % Завершения теперь основано на среднем арифметическом % Завершения."
cause_descriptions:
work_package_predecessor_changed_times: внесением изменений в предшественника %{link}
work_package_parent_changed_times: внесением изменений в родительский %{link}
@@ -1902,9 +1902,9 @@ ru:
totals_removed_from_childless_work_packages: >-
При обновлении версии автоматически удаляются итоги работы и прогресса для неродительских пакетов работ. Это задача по обслуживанию, и её можно смело игнорировать.
total_percent_complete_mode_changed_to_work_weighted_average: >-
- Child work packages without Work are ignored.
+ Дочерние пакеты работ без Работы игнорируются.
total_percent_complete_mode_changed_to_simple_average: >-
- Work values of child work packages are ignored.
+ Значения Работы дочерних пакетов работ игнорируются.
links:
configuration_guide: "Руководство по конфигурации"
get_in_touch: "У вас есть вопросы? Свяжитесь с нами."
@@ -3275,13 +3275,13 @@ ru:
setting_sys_api_enabled: "Разрешить веб-сервис управления репозиторием"
setting_sys_api_description: "Веб-сервис управления репозиторием обеспечивает интеграцию и авторизацию пользователя для доступа к репозиторию."
setting_time_format: "Время"
- setting_total_percent_complete_mode: "Calculation of % Complete hierarchy totals"
- setting_total_percent_complete_mode_work_weighted_average: "Weighted by work"
+ setting_total_percent_complete_mode: "Расчет общего % Завершения полной иерархии"
+ setting_total_percent_complete_mode_work_weighted_average: "Взвешенное по работе"
setting_total_percent_complete_mode_work_weighted_average_caption_html: >-
- The total % Complete will be weighted against the Work of each work package in the hierarchy. Work packages without Work will be ignored.
- setting_total_percent_complete_mode_simple_average: "Simple average"
+ Общий % Завершения будет взвешен по Работе каждого пакета работ в иерархии. Пакеты работ без Работы будут игнорироваться.
+ setting_total_percent_complete_mode_simple_average: "Среднее арифметическое"
setting_total_percent_complete_mode_simple_average_caption_html: >-
- Work is ignored and the total % Complete will be a simple average of % Complete values of work packages in the hierarchy.
+ Работа игнорируется, и Общий % Завершения будет средним арифметическим значением % Завершения пакетов работ в иерархии.
setting_accessibility_mode_for_anonymous: "Разрешить режим доступа людей с ограниченными возможностями для анонимных пользователей"
setting_user_format: "Формат имени пользователя"
setting_user_default_timezone: "Часовой пояс пользователя по умолчанию"
@@ -3445,8 +3445,8 @@ ru:
text_work_packages_destroy_confirmation: "Вы уверены, что хотите удалить выбранные пакет(-ы) работ?"
text_work_packages_ref_in_commit_messages: "Привязка и фиксация пакетов работ в сообщениях коммитов"
text_journal_added: "%{label} %{value} добавлено"
- text_journal_attachment_added: "%{label} %{value} добавлено как вложение"
- text_journal_attachment_deleted: "%{label} %{old} удален как вложение"
+ text_journal_attachment_added: "%{label} %{value} добавлено вложение"
+ text_journal_attachment_deleted: "%{label} %{old} удалено вложение"
text_journal_changed_plain: "%{label} изменено с %{old} %{linebreak}на %{new}"
text_journal_changed_no_detail: "%{label} обновлено"
text_journal_changed_with_diff: "%{label} изменена (%{link})"
diff --git a/config/locales/crowdin/rw.yml b/config/locales/crowdin/rw.yml
index 02bb43be447f..d9c75bb6379a 100644
--- a/config/locales/crowdin/rw.yml
+++ b/config/locales/crowdin/rw.yml
@@ -813,7 +813,7 @@ rw:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/si.yml b/config/locales/crowdin/si.yml
index 9e4276feced0..d0c9c4e8969a 100644
--- a/config/locales/crowdin/si.yml
+++ b/config/locales/crowdin/si.yml
@@ -813,7 +813,7 @@ si:
blank: "හිස් විය නොහැක."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "වැඩ පැකේජයක් එහි එක් උප කර්තව්යයකට සම්බන්ධ කළ නොහැක."
circular_dependency: "මෙම සම්බන්ධතාවය චක්රලේඛය යැපීමක් නිර්මාණය කරනු ඇත."
confirmation: "%{attribute}නොගැලපේ."
diff --git a/config/locales/crowdin/sk.yml b/config/locales/crowdin/sk.yml
index cff0325e6de8..ecf74d258ac8 100644
--- a/config/locales/crowdin/sk.yml
+++ b/config/locales/crowdin/sk.yml
@@ -827,7 +827,7 @@ sk:
blank: "nemôže byť prázdne."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Pracovný balíček nemôže byť previazaný na žiadny zo svojich podriadenými balíčkov."
circular_dependency: "Tento vzťah by vytvoril cyklickú závislosť."
confirmation: "%{attribute} sa nezhoduje."
diff --git a/config/locales/crowdin/sl.yml b/config/locales/crowdin/sl.yml
index 2525e11f5420..23be4e53279c 100644
--- a/config/locales/crowdin/sl.yml
+++ b/config/locales/crowdin/sl.yml
@@ -824,7 +824,7 @@ sl:
blank: "ne sme biti prazno."
blank_nested: "mora imeti nastavljeno lastnost '%{property}'."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Zahtevek ne more biti povezan s svojo podnalogo"
circular_dependency: "Ta povezava bi ustvarila krožno odvisnost."
confirmation: "se ne ujema %{attribute}"
diff --git a/config/locales/crowdin/sr.yml b/config/locales/crowdin/sr.yml
index be2dde88e229..47597083f275 100644
--- a/config/locales/crowdin/sr.yml
+++ b/config/locales/crowdin/sr.yml
@@ -820,7 +820,7 @@ sr:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/sv.yml b/config/locales/crowdin/sv.yml
index d3699a8dc5d7..57b5e80d4b61 100644
--- a/config/locales/crowdin/sv.yml
+++ b/config/locales/crowdin/sv.yml
@@ -812,7 +812,7 @@ sv:
blank: "kan inte vara tomt."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Ett arbetspaket kan inte kopplas till någon av dess underaktiviteter."
circular_dependency: "Detta förhållande skulle skapa ett cirkelberoende."
confirmation: "matchar inte %{attribute}."
diff --git a/config/locales/crowdin/th.yml b/config/locales/crowdin/th.yml
index 4c48d8cd1141..1de530a6e311 100644
--- a/config/locales/crowdin/th.yml
+++ b/config/locales/crowdin/th.yml
@@ -806,7 +806,7 @@ th:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/tr.yml b/config/locales/crowdin/tr.yml
index 24eb1c8c114e..962e820ad8aa 100644
--- a/config/locales/crowdin/tr.yml
+++ b/config/locales/crowdin/tr.yml
@@ -31,8 +31,8 @@ tr:
custom_styles:
color_theme: "Renk teması"
color_theme_custom: "(Özel)"
- tab_interface: "Interface"
- tab_branding: "Branding"
+ tab_interface: "Arayüz"
+ tab_branding: "Markalama"
tab_pdf_export_styles: "PDF export styles"
colors:
primary-button-color: "Primary button"
@@ -68,7 +68,7 @@ tr:
add_token: "Bir Enterprise sürümü destek belirteci yükleyin"
delete_token_modal:
text: "Kullanılan geçerli Enterprise sürümü belirtecini kaldırmak istediğinizden emin misiniz?"
- title: "Belirteci sil"
+ title: "Anahtarı sil"
replace_token: "Geçerli destek anahtarını değiştirin"
order: "Enterprise on-premises edition sipariş edin"
paste: "Enterprise sürümü destek belirtecinizi yapıştırın"
@@ -310,11 +310,11 @@ tr:
label_enable_single: "Active in this project, click to disable"
label_disable_single: "Inactive in this project, click to enable"
remove_from_project: "Remove from project"
- label_enable_all: "Enable all"
- label_disable_all: "Disable all"
+ label_enable_all: "Tümünü etkinleştir"
+ label_disable_all: "Tümünü devre dışı bırak"
is_required_blank_slate:
- heading: Required in all projects
- description: This project attribute is activated in all projects since the "Required in all projects" option is checked. It cannot be deactivated for individual projects.
+ heading: Tüm projelerde zorunludur
+ description: '"Tüm projelerde zorunlu" seçeneği işaretli olduğu için bu proje niteliği tüm projelerde etkindir. Projeler için bağımsız olarak devre dışı bırakılamaz.'
types:
no_results_title_text: Şu anda hiçbir tip mevcut değil.
form:
@@ -329,13 +329,13 @@ tr:
success: "The modified list has been saved as a new list"
failure: "The modified list cannot be saved: %{errors}"
update:
- success: "The modified list has been saved"
+ success: "Değiştirilen liste kaydedildi"
failure: "The modified list cannot be saved: %{errors}"
publish:
- success: "The list has been made public"
+ success: "Liste herkese açık hale getirildi"
failure: "The list cannot be made public: %{errors}"
unpublish:
- success: "The list has been made private"
+ success: "Liste gizli hale getirildi"
failure: "The list cannot be made private: %{errors}"
can_be_saved: "List modified:"
can_be_saved_as: "The modifications can only be saved in a new list:"
@@ -366,8 +366,8 @@ tr:
however_work_packages_shared_with_group_html:
one: "However, %{shared_work_packages_link} has also been shared with this group."
other: "However, %{shared_work_packages_link} have also been shared with this group."
- remove_work_packages_shared_with_user_too: "A user that has been removed as member can still access shared work packages. Would you like to remove the shares too?"
- remove_work_packages_shared_with_group_too: "A group that has been removed as member can still access shared work packages. Would you like to remove the shares too?"
+ remove_work_packages_shared_with_user_too: "Üyelikten kaldırılan bir kullanıcı paylaşılan iş paketlerine erişmeye devam edebilir. Paylaşımları da kaldırmak ister misiniz?"
+ remove_work_packages_shared_with_group_too: "Üyelikten kaldırılan bir grup paylaşılan iş paketlerine erişmeye devam edebilir. Paylaşımları da kaldırmak ister misiniz?"
will_not_affect_inherited_shares: "(This will not affect work packages shared with their group)."
can_remove_direct_but_not_shared_roles: "You can remove this user as a direct project member but a group they are in is also a member of this project, so they will continue being a member via the group."
also_work_packages_shared_with_user_html:
@@ -404,11 +404,11 @@ tr:
header: The %{type} token has been generated
warning: Note that this is the only time you will see this token, make sure to copy it now.
errors:
- token_name_blank: "Please provide an API token name"
- token_name_in_use: "This API token name is already in use, please select a different one"
- new_access_token_dialog_title: "Create new API token"
- new_access_token_dialog_show_button_text: "API token"
- new_access_token_dialog_text_field_placeholder_text: "My API token"
+ token_name_blank: "Lütfen API anahtarı için bir ad girin"
+ token_name_in_use: "Bu API anahtarı adı kullanılmaktadır, lütfen başka bir tane seçin"
+ new_access_token_dialog_title: "Yeni bir API anahtarı oluştur"
+ new_access_token_dialog_show_button_text: "API anahtarı"
+ new_access_token_dialog_text_field_placeholder_text: "API anahtarım"
new_access_token_dialog_text_field_label: "İsim"
new_access_token_dialog_submit_button_text: "Oluştur"
new_access_token_dialog_text: "This token will allow third-party applications to communicate with your instance. To differentiate the new API token, please give it a name."
@@ -812,7 +812,7 @@ tr:
blank: "boş bırakılamaz."
blank_nested: "'%{property}' özelliğinin ayarlanmış olması gerekir."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "İş paketi alt görevlerinden birine bağlanamaz."
circular_dependency: "Bu ilişki döngüsel bağımlılık oluşturacak."
confirmation: "%{attribute} eşleşmiyor."
@@ -1184,8 +1184,8 @@ tr:
other: "Yetkiler"
status: "İş paketi durumu"
token/api:
- one: Access token
- other: Access tokens
+ one: Erişim anahtarı
+ other: Erişim anahtarları
type: "Tür"
user: "Kullanıcı"
version: "Sürüm"
diff --git a/config/locales/crowdin/uk.yml b/config/locales/crowdin/uk.yml
index fc2c47b9d3dd..893d5f27a749 100644
--- a/config/locales/crowdin/uk.yml
+++ b/config/locales/crowdin/uk.yml
@@ -821,7 +821,7 @@ uk:
blank: "не може бути порожнім."
blank_nested: "– потрібно встановити властивість «%{property}»."
cannot_delete_mapping: "– обов’язкове. Неможливо видалити."
- is_for_all_cannot_modify: "для всіх. Не можна змінити."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Робочий пакет не може бути пов'язаний з одним з підзадач."
circular_dependency: "Це співвідношення створить кругову залежність."
confirmation: "не збігається %{attribute}"
@@ -1442,8 +1442,8 @@ uk:
failure_message: Згода не отримана, продовження неможливе.
title: Згода користувача
decline_warning_message: Ви відхилили згоду і вийшли з системи.
- user_has_consented: The user gave their consent to your [configured consent information text](consent_settings).
- not_yet_consented: The user has not yet given their consent to your [configured consent information text](consent_settings). They will be reminded the next time they log in.
+ user_has_consented: Користувач надав згоду на [налаштований текст інформації про згоду](consent_settings).
+ not_yet_consented: Користувач ще не надав згоду на [налаштований текст інформації про згоду] (consent_settings). Він отримає нагадування під час наступного входу.
contact_mail_instructions: Визначте адресу електронної пошти, на яку користувачі можуть звертатися, для запитів на зміну або видалення даних.
contact_your_administrator: Зверніться до свого адміністратора, якщо ви хочете, щоб ваш обліковий запис був видалений.
contact_this_mail_address: Будь ласка зв'яжіться %{mail_address} якщо ви бажаєте, щоб ваш обліковий запис був видалений.
@@ -1867,8 +1867,8 @@ uk:
progress_mode_changed_to_status_based: "Обчислення прогресу оновлено"
status_changed: "Статус «%{status_name}»"
system_update: "Оновлення системи OpenProject"
- total_percent_complete_mode_changed_to_work_weighted_average: "Calculation of % Complete totals now weighted by Work."
- total_percent_complete_mode_changed_to_simple_average: "Calculation of % Complete totals now based on a simple average of only % Complete values."
+ total_percent_complete_mode_changed_to_work_weighted_average: "Під час обчислення підсумків атрибута «% завершення» тепер враховується значення атрибута «Робота»."
+ total_percent_complete_mode_changed_to_simple_average: "Обчислення підсумків атрибута «% завершення» тепер ґрунтується на середньому арифметичному значень лише атрибута «% завершення»."
cause_descriptions:
work_package_predecessor_changed_times: внесенням змін у попередній елемент %{link}
work_package_parent_changed_times: внесенням змін у батькіський елемент %{link}
@@ -1897,9 +1897,9 @@ uk:
totals_removed_from_childless_work_packages: >-
Результати обчислення обсягу й прогресу виконання роботи автоматично вилучено з небатьківських пакетів робіт з оновленням версії. Це завдання з технічного обслуговування, і його можна ігнорувати.
total_percent_complete_mode_changed_to_work_weighted_average: >-
- Child work packages without Work are ignored.
+ Дочірні пакети робіт без атрибута «Робота» ігноруються.
total_percent_complete_mode_changed_to_simple_average: >-
- Work values of child work packages are ignored.
+ Значення атрибута «Робота» дочірніх пакетів робіт ігноруються.
links:
configuration_guide: "Посібник з налаштування"
get_in_touch: "У вас виникли запитання? Зв'яжіться з нами."
@@ -3270,13 +3270,13 @@ uk:
setting_sys_api_enabled: "Увімкнути веб-службу керування сховищем"
setting_sys_api_description: "Веб-сервіс управління сховищем забезпечує інтеграцію та авторизацію користувача для доступу до сховищ."
setting_time_format: "Час"
- setting_total_percent_complete_mode: "Calculation of % Complete hierarchy totals"
- setting_total_percent_complete_mode_work_weighted_average: "Weighted by work"
+ setting_total_percent_complete_mode: "Обчислення підсумків ієрархів «% завершення»"
+ setting_total_percent_complete_mode_work_weighted_average: "Зважено за роботою"
setting_total_percent_complete_mode_work_weighted_average_caption_html: >-
- The total % Complete will be weighted against the Work of each work package in the hierarchy. Work packages without Work will be ignored.
- setting_total_percent_complete_mode_simple_average: "Simple average"
+ Атрибут Загальний % завершення буде зважено за атрибутом Робота кожного пакета робіт в ієрархії. Пакети робіт без атрибута Робота ігноруватимуться.
+ setting_total_percent_complete_mode_simple_average: "Середнє арифметичне"
setting_total_percent_complete_mode_simple_average_caption_html: >-
- Work is ignored and the total % Complete will be a simple average of % Complete values of work packages in the hierarchy.
+ Атрибут Робота ігнорується, а Загальний % завершення дорівнюватиме середньому арифметичному значень атрибута % завершення пакетів робіт в ієрархії.
setting_accessibility_mode_for_anonymous: "Увімкніть режим доступності для анонімних користувачів"
setting_user_format: "Формат імені користувача"
setting_user_default_timezone: "Часовий пояс користувача за замовчуванням"
diff --git a/config/locales/crowdin/uz.yml b/config/locales/crowdin/uz.yml
index 2c293733eb48..334998397cba 100644
--- a/config/locales/crowdin/uz.yml
+++ b/config/locales/crowdin/uz.yml
@@ -813,7 +813,7 @@ uz:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/config/locales/crowdin/vi.yml b/config/locales/crowdin/vi.yml
index 32bf684b3ddc..398353db1aa2 100644
--- a/config/locales/crowdin/vi.yml
+++ b/config/locales/crowdin/vi.yml
@@ -808,7 +808,7 @@ vi:
blank: "không được để trống"
blank_nested: "cần có thuộc tính '%{property}' được thiết lập."
cannot_delete_mapping: "là bắt buộc. Không thể xóa."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "Một gói công việc không thể liên kết với một trong các nhiệm vụ con của nó."
circular_dependency: "Mối quan hệ này sẽ tạo ra một sự phụ thuộc tuần hoàn."
confirmation: "không khớp %{attribute}."
diff --git a/config/locales/crowdin/zh-CN.yml b/config/locales/crowdin/zh-CN.yml
index 413f1cd1db78..ecf41dfc3095 100644
--- a/config/locales/crowdin/zh-CN.yml
+++ b/config/locales/crowdin/zh-CN.yml
@@ -802,7 +802,7 @@ zh-CN:
blank: "不能为空。"
blank_nested: "需要设置属性“%{property}”。"
cannot_delete_mapping: "必需项,不能删除"
- is_for_all_cannot_modify: "适用于全部。不可修改。"
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "工作包无法链接到它的子任务之一。"
circular_dependency: "这种关系将创建循环依赖项。"
confirmation: "不匹配 %{attribute}。"
diff --git a/config/locales/crowdin/zh-TW.yml b/config/locales/crowdin/zh-TW.yml
index c2dfd41cc658..6d97ad57d414 100644
--- a/config/locales/crowdin/zh-TW.yml
+++ b/config/locales/crowdin/zh-TW.yml
@@ -804,7 +804,7 @@ zh-TW:
blank: "不可空白"
blank_nested: "需要設置屬性 '%{property}' "
cannot_delete_mapping: "必需項,不能刪除"
- is_for_all_cannot_modify: "全域使用。無法修改。"
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "一個工作項目不能聯結到它的一個子項目"
circular_dependency: "這個關係會建立一個循環依賴"
confirmation: "不吻合 %{attribute}。"
diff --git a/config/locales/en.yml b/config/locales/en.yml
index d1f67e88e412..bafd6760b00b 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -890,7 +890,7 @@ en:
blank: "can't be blank."
blank_nested: "needs to have the property '%{property}' set."
cannot_delete_mapping: "is required. Cannot be deleted."
- is_for_all_cannot_modify: "is for all. Cannot be modified."
+ is_for_all_cannot_modify: "is for all projects and can therefore not be modified."
cant_link_a_work_package_with_a_descendant: "A work package cannot be linked to one of its subtasks."
circular_dependency: "This relation would create a circular dependency."
confirmation: "doesn't match %{attribute}."
diff --git a/docs/release-notes/14-0-0/README.md b/docs/release-notes/14-0-0/README.md
index e64a3b5cb49b..8d7b81dc0e3c 100644
--- a/docs/release-notes/14-0-0/README.md
+++ b/docs/release-notes/14-0-0/README.md
@@ -41,7 +41,7 @@ methods. For more information, see [#51212](https://community.openproject.org/wo
### Reduced number of configurable design variables
-We have changed the number and naming of the [configurable design variables](../../system-admin-guide/design/#advanced-settings). This simplifies the process of setting the desired color scheme for users. It also allows us to get closer to the **Primer design system** in order to benefit from its other modes such as the dark mode or the colorblind mode in the future.
+We have changed the number and naming of the [configurable design variables](../../system-admin-guide/design/#interface-colors). This simplifies the process of setting the desired color scheme for users. It also allows us to get closer to the **Primer design system** in order to benefit from its other modes such as the dark mode or the colorblind mode in the future.
The following variables have been changed:
diff --git a/docs/release-notes/14-6-0/README.md b/docs/release-notes/14-6-0/README.md
index f1200affcc95..e08d50f6fbdf 100644
--- a/docs/release-notes/14-6-0/README.md
+++ b/docs/release-notes/14-6-0/README.md
@@ -56,7 +56,7 @@ Macros such as *workPackageValue:assignee* have been implemented, allowing the d
![Screenshot showing a work package with macros in the description](openproject-14-6-macros.png)
-See our [documentation for a list of available attributes for work packages](../../user-guide/wysiwyg/#available-attributes-for-work-packages).
+See our [documentation for a list of available attributes for work packages](../../user-guide/wysiwyg/#available-attributes-for-work-packages) and take a look at [this blog article to learn more about using macros with OpenProject](https://www.openproject.org/blog/how-to-use-macros/).
### Show empty lines in saved rich text
@@ -138,6 +138,10 @@ On the Meetings tab in the split screen view, the number next to the “Meetings
A very special thank you goes to City of Cologne again for sponsoring features in project lists. Also, a big thanks to our Community members for reporting bugs and helping us identify and provide fixes.
Special thanks for reporting and finding bugs go to Jan H, Joris Ceelen, André van Kaam, and Christian Jeschke.
-Last but not least, we are very grateful for our very engaged translation contributors on Crowdin, who translated quite a few OpenProject strings! This release, we would like to highlight [DKrukoff](https://crowdin.com/profile/dkrukoff), for an outstanding number of translations into Russian.
+Last but not least, we are very grateful for our very engaged translation contributors on Crowdin, who translated quite a few OpenProject strings! This release we would like to highlight
+- [DKrukoff](https://crowdin.com/profile/dkrukoff), for translations into Russian.
+- [Sara Ruela](https://crowdin.com/profile/Sara.PT), for translations into Portuguese.
+- [BigSeung](https://crowdin.com/profile/BigSeung), for translations into Korean.
+- [Raffaele Brevetti](https://crowdin.com/profile/rbrevetti), for translations into Italian.
Would you like to help out with translations yourself? Then take a look at our [translation guide](../../development/translate-openproject/) and find out exactly how you can contribute. It is very much appreciated!
\ No newline at end of file
diff --git a/docs/system-admin-guide/design/README.md b/docs/system-admin-guide/design/README.md
index fed0d3b21a9d..1bc54b52e2e6 100644
--- a/docs/system-admin-guide/design/README.md
+++ b/docs/system-admin-guide/design/README.md
@@ -11,28 +11,31 @@ As an OpenProject Enterprise add-on you can replace the default OpenProject log
Navigate to *Administration* -> *Design* in order to customize your OpenProject theme and logo.
-The design page provides several options to customize your OpenProject Enterprise edition:
+The design page provides several options to customize your OpenProject Enterprise edition, grouped under three tabs, **Interface, Branding, PDF export styles**. You can [choose a color theme](#choose-a-color-theme) under any of these tabs.
-1. Choose a default color theme: OpenProject, Light or Dark. Press the Save button to apply your changes.
-2. Upload your own **custom logo** to replace the default OpenProject logo.
-3. Set a custom **favicon** which is shown as an icon in your browser window/tab.
-4. Upload a custom **touch icon** which is shown on your smartphone or tablet when you bookmark OpenProject on your home screen.
-5. Set the **Custom PDF export settings** for [exporting work packages in a PDF format](../../user-guide/work-packages/exporting/#pdf-export).
-6. [Advanced settings](#advanced-settings) to configure **custom colors** to adjust nearly any aspect of OpenProject, such as the color of the header and side menu, the link color and the hover color.
+Under **Interface** you can also choose [custom colors](#interface-colors) for elements of the interface such as the primary link colour, secondary accent colour, the background of the top navigation header and the main menu.
-![Design settings in an OpenProject system admin guide](openproject_system_guide_design.png)
+![Design interface settings in OpenProject adminstration](openproject_system_guide_design_interface.png)
+
+Under the **Branding** tab you can also [upload a custom logo](#upload-a-custom-logo) to replace the default OpenProject logo, [set a custom favicon](#set-a-custom-favicon), which is shown as an icon in your browser window/tab, and [upload a custom touch icon](#set-a-custom-touch-icon), which is shown on your smartphone or tablet when you bookmark OpenProject on your home screen.
+
+![Branding settings in OpenProject administration](openproject_system_guide_design_branding.png)
+
+Under **PDF export settings** you can set the preferences for [exporting work packages in a PDF format](../../user-guide/work-packages/exporting/#pdf-export).
+
+![PDF export styles settings in OpenProject administration](openproject_system_guide_design_pdf_export_styles.png)
## Choose a color theme
You can choose between the three default color themes for OpenProject:
* OpenProject
-* OpenProject Light
-* OpenProject Dark
+* OpenProject Gray (previously called OpenProject Light)
+* OpenProject Navy Blue (previously called OpenProject Dark)
Press the Save button to apply your changes. The theme will then be changed.
-![System-admin-guide_color-theme](System-admin-guide_color-theme.png)
+![Change color theme in OpenProject administration settings](openproject_system_guide_design_color_theme_navy_blue.png)
## Upload a custom logo
@@ -40,9 +43,11 @@ To replace the default OpenProject logo with your own logo, make sure that your
Click the *Upload* button to confirm and upload your logo.
-![Sys-admin-design-upload-logo](Sys-admin-design-upload-logo.png)
+![Upload custom logo in OpenProject administration settings](openproject_system_guide_design_upload_custom_logo.png)
+
+
-![upload logo](system_admin_logo_updated.png)
+![Custom logo updated in OpenProject admistration](openproject_system_guide_design_custom_logo_uploaded.png)
## Set a custom favicon
@@ -50,7 +55,7 @@ To set a custom favicon to be shown in your browser’s tab, make sure you have
Then click the *Upload* button to confirm and upload your favicon.
-![Sys-admin-design-favicon](Sys-admin-design-favicon.png)
+![Custom favicon in OpenProject design settings](openproject_system_guide_design_custom_favicon.png)
## Set a custom touch icon
@@ -60,16 +65,16 @@ Click the *Upload* button to confirm and upload your custom touch icon.
When you bookmark your OpenProject environment’s URL, you will see that the uploaded icon is used as a custom touch icon.
-## Advanced settings
+## Interface colors
Aside from uploading logos and icons, you can also customize the colors used within your OpenProject environment.
-To do this change the color values (entered as color hex code) in the *Advanced settings* section. In order to find the right hex code for a color, you can use a website, such as [color-hex.com](https://www.color-hex.com/).
- You can see the selected color in the preview area next to the color hex code. Therefore, it is possible to see the selected color before saving the changes.
+To do this, enter the hex value for any color you would like to change. You can use a website like [htmlcolorcodes.com](https://htmlcolorcodes.com/color-picker/) to help you find the perfect color.
+You can see the selected color in the preview area next to the color hex code. Therefore, it is possible to see the selected color before saving the changes.
> [!TIP]
> If the button color you select is too light to have white text on top of it, the icon and text color will be displayed in black instead.
-![Advanced color settings in OpenProject](openproject_system_guide_design_advanced_settings_primer.png)
+![Advanced color settings in OpenProject](openproject_system_guide_design_interface_colors.png)
As soon as you press the **Save** button your changes are applied and the colors of your OpenProject environment are adjusted accordingly.
diff --git a/docs/system-admin-guide/design/Sys-admin-design-favicon.png b/docs/system-admin-guide/design/Sys-admin-design-favicon.png
deleted file mode 100644
index e0c4d6516e8a..000000000000
Binary files a/docs/system-admin-guide/design/Sys-admin-design-favicon.png and /dev/null differ
diff --git a/docs/system-admin-guide/design/Sys-admin-design-upload-logo.png b/docs/system-admin-guide/design/Sys-admin-design-upload-logo.png
deleted file mode 100644
index deee0aefa7ea..000000000000
Binary files a/docs/system-admin-guide/design/Sys-admin-design-upload-logo.png and /dev/null differ
diff --git a/docs/system-admin-guide/design/System-admin-guide_color-theme.png b/docs/system-admin-guide/design/System-admin-guide_color-theme.png
deleted file mode 100644
index 6e0befe01cda..000000000000
Binary files a/docs/system-admin-guide/design/System-admin-guide_color-theme.png and /dev/null differ
diff --git a/docs/system-admin-guide/design/openproject_system_guide_design.png b/docs/system-admin-guide/design/openproject_system_guide_design.png
deleted file mode 100644
index d5a8fc355f66..000000000000
Binary files a/docs/system-admin-guide/design/openproject_system_guide_design.png and /dev/null differ
diff --git a/docs/system-admin-guide/design/openproject_system_guide_design_branding.png b/docs/system-admin-guide/design/openproject_system_guide_design_branding.png
new file mode 100644
index 000000000000..92ec47350a6e
Binary files /dev/null and b/docs/system-admin-guide/design/openproject_system_guide_design_branding.png differ
diff --git a/docs/system-admin-guide/design/openproject_system_guide_design_color_theme_navy_blue.png b/docs/system-admin-guide/design/openproject_system_guide_design_color_theme_navy_blue.png
new file mode 100644
index 000000000000..279ffe936036
Binary files /dev/null and b/docs/system-admin-guide/design/openproject_system_guide_design_color_theme_navy_blue.png differ
diff --git a/docs/system-admin-guide/design/openproject_system_guide_design_color_theme_pick.png b/docs/system-admin-guide/design/openproject_system_guide_design_color_theme_pick.png
new file mode 100644
index 000000000000..0d2ea09b400d
Binary files /dev/null and b/docs/system-admin-guide/design/openproject_system_guide_design_color_theme_pick.png differ
diff --git a/docs/system-admin-guide/design/openproject_system_guide_design_custom_favicon.png b/docs/system-admin-guide/design/openproject_system_guide_design_custom_favicon.png
new file mode 100644
index 000000000000..ee2cc0ac6cf6
Binary files /dev/null and b/docs/system-admin-guide/design/openproject_system_guide_design_custom_favicon.png differ
diff --git a/docs/system-admin-guide/design/openproject_system_guide_design_custom_logo_uploaded.png b/docs/system-admin-guide/design/openproject_system_guide_design_custom_logo_uploaded.png
new file mode 100644
index 000000000000..157bcae936da
Binary files /dev/null and b/docs/system-admin-guide/design/openproject_system_guide_design_custom_logo_uploaded.png differ
diff --git a/docs/system-admin-guide/design/openproject_system_guide_design_interface.png b/docs/system-admin-guide/design/openproject_system_guide_design_interface.png
new file mode 100644
index 000000000000..155ab93bd129
Binary files /dev/null and b/docs/system-admin-guide/design/openproject_system_guide_design_interface.png differ
diff --git a/docs/system-admin-guide/design/openproject_system_guide_design_interface_colors.png b/docs/system-admin-guide/design/openproject_system_guide_design_interface_colors.png
new file mode 100644
index 000000000000..aaf4d8cf1d54
Binary files /dev/null and b/docs/system-admin-guide/design/openproject_system_guide_design_interface_colors.png differ
diff --git a/docs/system-admin-guide/design/openproject_system_guide_design_pdf_export_styles.png b/docs/system-admin-guide/design/openproject_system_guide_design_pdf_export_styles.png
new file mode 100644
index 000000000000..194e5e107c02
Binary files /dev/null and b/docs/system-admin-guide/design/openproject_system_guide_design_pdf_export_styles.png differ
diff --git a/docs/system-admin-guide/design/openproject_system_guide_design_upload_custom_logo.png b/docs/system-admin-guide/design/openproject_system_guide_design_upload_custom_logo.png
new file mode 100644
index 000000000000..d9be0ba6c1e8
Binary files /dev/null and b/docs/system-admin-guide/design/openproject_system_guide_design_upload_custom_logo.png differ
diff --git a/docs/system-admin-guide/design/system_admin_logo_updated.png b/docs/system-admin-guide/design/system_admin_logo_updated.png
deleted file mode 100644
index cb4768e1067a..000000000000
Binary files a/docs/system-admin-guide/design/system_admin_logo_updated.png and /dev/null differ
diff --git a/docs/system-admin-guide/files/external-file-storages/health-status/README.md b/docs/system-admin-guide/files/external-file-storages/health-status/README.md
index 90b91ec5ed1d..b0379e7eb39a 100644
--- a/docs/system-admin-guide/files/external-file-storages/health-status/README.md
+++ b/docs/system-admin-guide/files/external-file-storages/health-status/README.md
@@ -44,12 +44,13 @@ view. This check is available after the file storage is fully configured.
There are several possible errors that can occur during the connection test. The following table lists the error codes
with a description of the possible reasons and suggested solutions.
-| Error code | Error description | Possible reasons | Next steps and solutions |
-|--------------------------|--------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| ERR_HOST_NOT_FOUND | No Nextcloud server was found at the configured host URL. | There might be a typo or the URL has changed. | Please check the configuration. |
-| ERR_MISSING_DEPENDENCIES | A required dependency is missing on the file storage. | Either the Integration OpenProject app or the Group Folders app is not enabled in Nextcloud. | Please add the following dependency: %{dependency}. |
+| Error code | Error description | Possible reasons | Next steps and solutions |
+| ------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| ERR_HOST_NOT_FOUND | No Nextcloud server was found at the configured host URL. | There might be a typo or the URL has changed. | Please check the configuration. |
+| ERR_MISSING_DEPENDENCIES | A required dependency is missing on the file storage. | Either the Integration OpenProject app or the Group Folders app is not enabled in Nextcloud. | Please add the following dependency: %{dependency}. |
| ERR_UNEXPECTED_VERSION | The Integration OpenProject app version or the Group Folders app version is not supported. | Either the Integration OpenProject app or the Group Folders app is outdated or was not updated to the officially minimal supported version. | Please update your apps to the latest version. It might be necessary to update your Nextcloud server to the latest version in order to be able to install the latest app versions. |
-| ERR_UNKNOWN | An unknown error occurred. | There can be multiple reasons and the error source was not foreseen. | Errors of this kind are logged to the server logs. Look for a log entry starting with `Connection validation failed with unknown error:` |
+| ERR_UNKNOWN | An unknown error occurred. | There can be multiple reasons and the error source was not foreseen. | Errors of this kind are logged to the server logs. Look for a log entry starting with `Connection validation failed with unknown error:` |
+| WRN_UNEXPECTED_CONTENT | The connection request was successful, but unexpected content was found in the drive. | This warning is only shown, if the file storage is configured to automatically managed project folder permissions. There was data found in the drive, that is not a project folder created by OpenProject. | Go to your storage and migrate or delete the data in the OpenProject folder, that was not created by OpenProject. Further information about the unexpected data is found in the server logs. |
The officially minimal supported app versions are listed in
the [system admin guide](../../../../system-admin-guide/integrations/nextcloud/#required-system-versions).
diff --git a/docs/user-guide/team-planner/README.md b/docs/user-guide/team-planner/README.md
index 64c79e0c99fb..c45e3dcc2eb9 100644
--- a/docs/user-guide/team-planner/README.md
+++ b/docs/user-guide/team-planner/README.md
@@ -10,11 +10,12 @@ keywords: team planner, planning, calendar, resource management, assign, team vi
The team planner module helps you get a complete overview of what each member of your team is working on. You can use it to track the current progress of work packages your team is working on, schedule new tasks, reschedule them or even reassign them to different members.
-![Example team planner showing a two-week view of work packages assigned to team members](TeamPlanner-12.4-twoWeeks.png)
+![Example team planner showing an eight-week view of work packages assigned to team members](openproject_user_guide_teamplanner_overview.png)
Essentially, the team planner is a calendar view with an assignee column on the left side. Each work package assigned to a team member will appear as a card that spans a certain duration (start date to finish date). These cards can be moved, stretched, shortened or removed to organize the planning of your team.
-> **Note**: Team planner is an Enterprise add-on and can only be used with [Enterprise cloud](../../enterprise-guide/enterprise-cloud-guide/) or [Enterprise on-premises](../../enterprise-guide/enterprise-on-premises-guide/). An upgrade from the free community edition is easy and helps support OpenProject.
+> [!NOTE]
+> Team planner is an Enterprise add-on and can only be used with [Enterprise cloud](../../enterprise-guide/enterprise-cloud-guide/) or [Enterprise on-premises](../../enterprise-guide/enterprise-on-premises-guide/). An upgrade from the free community edition is easy and helps support OpenProject.
To use this module, you must have the work packages module enabled.
@@ -32,19 +33,20 @@ To use this module, you must have the work packages module enabled.
Clicking on the **Team planners** entry on the left sidebar takes you to the team planner module with a list of all existing team planners:
-![A screenshot of a list of team planners visible after clicking on Team Planners on the left-hand menu](TeamPlanner-12.4-listAllAvailable.png)
+![A screenshot of a list of team planners visible after clicking on Team Planners on the left-hand menu](openproject_user_guide_teamplanner_overview_explained.png)
1. You can create a new team planner using either the **+ Team planner** button in the top right near your avatar or at the bottom of the left menu bar.
-
2. Click on an existing (saved) team planner to open it.
-3. Team planners with *public* visibility settings appear under the **Public** heading in the menu bar.
-4. New team planners by default appear under the **Private** heading in the left menu bar. These are visible only to you.
+3. Team planners marked as *favorite* under visibility settings appear under the **Favorite** heading in the menu bar.
+4. Team planners with *public* visibility settings appear under the **Public** heading in the menu bar.
+5. New team planners by default appear under the **Private** heading in the left menu bar. These are visible only to you.
-> **Info**: Both *public* and *private* team planners can be added as **favored** planners; they will then appear under the **Favorite** heading in the menu bar.
+> [!TIP]
+> Both *public* and *private* team planners can be added as **favored** planners.
## Team planner basics
-![A screenshot of an example team planner with different functions highlighted](TeamPlanner-12.4-oneWeek.png)
+![A screenshot of an example team planner with different functions highlighted](openproject_user_guide_teamplanner_detailed_view_explained.png)
A team planner has a number of features numbered 1 to 8 in the above screenshot:
@@ -57,7 +59,8 @@ A team planner has a number of features numbered 1 to 8 in the above screenshot:
7. The **\[⋮\]** (more) button gives you additional options, such as saving, renaming and saving a copy (saving as), or deleting the team planner. This is also where you can modify the visibility options.
8. By default the team planner only shows the [work week](../../system-admin-guide/calendars-and-dates/#working-days-and-hours) (week excluding the weekend and non-working days). Use the drop down to toggle between work week, 1-week, 2-week, 4-week or 8-week views. With the arrows you can navigate the weeks back and forth. The Today button brings you to the current week.
-> **Note**: The team planner will highlight non-working days in the calendar with a darker background color. By default, a work package cannot be dragged or resized such that it begins or ends on these days unless the "Working days only" switch is turned off for that work package. To learn how to do this, refer to the documentation on [Working days and duration](../work-packages/set-change-dates/#working-days-and-duration).
+> [!TIP]
+> The team planner will highlight non-working days in the calendar with a darker background color. By default, a work package cannot be dragged or resized such that it begins or ends on these days unless the "Working days only" switch is turned off for that work package. To learn how to do this, refer to the documentation on [Working days and duration](../work-packages/set-change-dates/#working-days-and-duration).
## Add team members and work packages
@@ -65,13 +68,13 @@ A team planner has a number of features numbered 1 to 8 in the above screenshot:
When you create a new team planner, it will be empty, like so:
-![An example of a newly-created empty team planner](TeamPlanner-12.4-emptyNew.png)
+![An example of a newly-created empty team planner in OpenProject](openproject_user_guide_teamplanner_new_unnamed_empty.png)
-The first step in setting up your team planning calendar is to add team members. To do so, click on the **+ Add assignee** button then search for the team member you would like to add from the the drop-down list (1). This will add a new row to the calendar view for that team member.
+The first step in setting up your team planning calendar is to add team members. To do so, click on the **+ Assignee** button then search for the team member you would like to add from the the drop-down list (1). This will add a new row to the calendar view for that team member.
Repeat this step until all relevant team members are added and then save it using the floppy disk icon in the top header (2).
-![Adding team members](TeamPlanner-12.4-addAssignee.png)
+![Adding team members to a team planner in OpenProject](openproject_user_guide_teamplanner_add_assignee.png)
If you need to remove a member from this list, hover over their name and click on the **X button** that appears next to their name. (This action simply removes the row and does not affect the user's status in the project).
@@ -85,13 +88,14 @@ Next, you can add existing work packages to your planner. You can do this by eit
You can create a new work package for a particular member of your team by clicking on a cell in that team member's assignee row.
-> **Note:** You can also click and drag across a date range to create a work package that spans those dates. The first square will be the start date and the last one the finish date.
+> [!TIP]
+> You can also click and drag across a date range to create a work package that spans those dates. The first square will be the start date and the last one the finish date.
-![Creating a new work package by clicking and dragging across multiple day cells](TeamPlanner-12.4-newTask-drag.png)
+![Creating a new work package by clicking and dragging across multiple day cells](openproject_user_guide_teamplanner_add_task_select_row.png)
A **new work package dialog** will open. The assignee, start and finish dates will already be set based on where you clicked to create the work package. You can add any additional details, such as subject, work package type, a description and add attachments. Scrolling further down on the split screen also gives you access to other attributes such as cost and time and custom fields that might exist.
-![An example of the new work package split screen view](TeamPlanner-12.4-newTask-splitScreen.png)
+![An example of the new work package split screen view](openproject_user_guide_teamplanner_add_task.png)
#### Add an existing work package
@@ -99,15 +103,16 @@ If you would like to take an existing work package and assign it to your team me
Start by pressing the **+ Add existing** button below the name of the team planner and search for the work package you would like to add. Once you find it, drag and drop the work package card to the calendar, depending to whom you would like to assign it, and to which start date. The finish date will automatically be derived based on the duration of the work package.
-> **Info:** Scheduling tasks by adding existing work packages is easier in the one or two week view, especially if you have work packages that can span a weekend.
+> [!NOTE]
+> Scheduling tasks by adding existing work packages is easier in the one or two week view, especially if you have work packages that can span a weekend.
-![Searching for existing work packages to add to the team planner](TeamPlanner-12.4-addExisting.png)
+![Searching for existing work packages to add to the team planner](openproject_user_guide_teamplanner_add_existing_task.png)
Sometimes, it is not possible to assign an existing work package to a particular team member for a variety of reasons: they might not be a member of the project the selected work package belongs to, might not have the necessary permissions, or you yourself might not have the necessary permissions to edit the dates or the assignee for that work package. In this case, a small error message will indicate that the operation was not successful.
#### Move and resize a work package
-![Hover on a work package to see drag handles](TeamPlanner-12.4-hoverWorkPackageCard-dragHandles.png)
+![Hover on a work package to see drag handles](openproject_user_guide_teamplanner_task_drag_handles.png)
The team planner allows you to quickly re-schedule and re-assign work packages cards:
@@ -116,7 +121,8 @@ The team planner allows you to quickly re-schedule and re-assign work packages c
- To change finish date only, hover over the work package and **click and drag the *drag handles* on the right edge** (2) of the work package card to shorten or lengthen the total duration.
- To maintain duration but to move the work package forwards or backwards in time, **simply click and drag the work package horizontally**.
-> **Info**: Work packages can also expand and retract in width depending on how many non-working days are spanned (for example, a 3-day task starting on Thursday and ending on Monday will spread across 5 calendar days; dragging that same work package so that it starts on a Tuesday and ends on a Thursday means that it will spread across 3 calendar days. In both cases, the duration remains 3 days.
+> [!NOTE]
+> Work packages can also expand and retract in width depending on how many non-working days are spanned (for example, a 3-day task starting on Thursday and ending on Monday will spread across 5 calendar days; dragging that same work package so that it starts on a Tuesday and ends on a Thursday means that it will spread across 3 calendar days. In both cases, the duration remains 3 days.
Sometimes, it is not possible to modify the dates or the assignee of work packages for a variety of reasons. It could be, for example, because you might not have the necessary permissions to make that change or because existing relations make it impossible. In such cases, an error message will appear on the top of the screen to let you know that the change was not possible.
@@ -126,11 +132,11 @@ When you want to understand what a team member is working on, or want to re-sche
To open the work package details in split screen, hover on a work package card and click on the **i icon** (information):
-![Click on the i icon in a work package card to open details in split screen view](TeamPlanner-12.4-hoverWorkPackageCard.png)
+![Click on the i icon in a work package card to open details in split screen view](openproject_user_guide_teamplanner_task_info_icon.png)
This will open the work package details in split screen view, where you can view and edit all work package attributes, consult recent activity, view linked files and link new or attach ones and view and create work package relations.
-![An example of the work package detail view in split screen](TeamPlanner-12.4-splitScreen.png)
+![An example of the work package detail view in split screen](openproject_user_guide_teamplanner_task_splitscreen.png)
## Remove a work package
@@ -142,4 +148,4 @@ Since the team planner is simply a view that displays work packages for certain
Alternatively, the team planner offers an easy way to remove a work package by combining 2 and 3 in one action. When you start dragging a work package, a *remove drop zone* appears at the bottom of the team planner. You can drag a work package card to that drop zone to clear the assignee, start date and finish date attributes in one go.
-![The remove drop zone appears when dragging a work package card](TeamPlanner-12.4-removeAssigneeDates.png)
+![The remove drop zone appears when dragging a work package card](openproject_user_guide_teamplanner_delete_task.png)
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_assignee.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_assignee.png
new file mode 100644
index 000000000000..a13a29935196
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_assignee.png differ
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_existing_task.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_existing_task.png
new file mode 100644
index 000000000000..63a6191e78b3
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_existing_task.png differ
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_task.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_task.png
new file mode 100644
index 000000000000..adf25121631b
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_task.png differ
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_task_select_row.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_task_select_row.png
new file mode 100644
index 000000000000..f2be4b6446e2
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_add_task_select_row.png differ
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_delete_task.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_delete_task.png
new file mode 100644
index 000000000000..5c5363da8a69
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_delete_task.png differ
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_detailed_view_explained.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_detailed_view_explained.png
new file mode 100644
index 000000000000..1d2dda9c1d2d
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_detailed_view_explained.png differ
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_new_unnamed_empty.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_new_unnamed_empty.png
new file mode 100644
index 000000000000..58b792b368c3
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_new_unnamed_empty.png differ
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_overview.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_overview.png
new file mode 100644
index 000000000000..c8e5bba4c372
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_overview.png differ
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_overview_explained.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_overview_explained.png
new file mode 100644
index 000000000000..a9cbc585392a
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_overview_explained.png differ
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_task_drag_handles.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_task_drag_handles.png
new file mode 100644
index 000000000000..60ad059c639b
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_task_drag_handles.png differ
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_task_info_icon.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_task_info_icon.png
new file mode 100644
index 000000000000..0af81c4753a3
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_task_info_icon.png differ
diff --git a/docs/user-guide/team-planner/openproject_user_guide_teamplanner_task_splitscreen.png b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_task_splitscreen.png
new file mode 100644
index 000000000000..8f6d053cb23d
Binary files /dev/null and b/docs/user-guide/team-planner/openproject_user_guide_teamplanner_task_splitscreen.png differ
diff --git a/frontend/src/global_styles/content/_tables.sass b/frontend/src/global_styles/content/_tables.sass
index fc1f477de2b4..18725c164daa 100644
--- a/frontend/src/global_styles/content/_tables.sass
+++ b/frontend/src/global_styles/content/_tables.sass
@@ -55,8 +55,6 @@ table
font-style: normal
font-weight: var(--base-text-weight-bold)
background-color: #EEEEEE
- .hours-dec
- font-size: 0.9em
#workflow_form
.generic-table--results-container
@@ -144,8 +142,6 @@ tr
td
&.hours
font-weight: var(--base-text-weight-bold)
- .hours-dec
- font-size: 0.9em
.date
.spot-drop-modal
display: block
diff --git a/frontend/src/global_styles/layout/_base.sass b/frontend/src/global_styles/layout/_base.sass
index 08da9c9412eb..c6465b61d7b9 100644
--- a/frontend/src/global_styles/layout/_base.sass
+++ b/frontend/src/global_styles/layout/_base.sass
@@ -49,7 +49,7 @@
margin: 0 0 0 0
padding: 0
// Needed for Safari
- height: calc(100vh - var(--header-height))
+ height: calc(100dvh - var(--header-height))
overflow-y: auto
overflow-x: hidden
background-color: var(--body-background)
diff --git a/frontend/src/global_styles/primer/_overrides.sass b/frontend/src/global_styles/primer/_overrides.sass
index 570bc7c90340..396c4ded90bd 100644
--- a/frontend/src/global_styles/primer/_overrides.sass
+++ b/frontend/src/global_styles/primer/_overrides.sass
@@ -91,3 +91,7 @@ sub-header,
&:hover
background: var(--header-item-bg-hover-color)
color: var(--header-item-font-hover-color)
+
+// Todo: Remove once https://github.com/primer/view_components/pull/3087 is merged
+.FormControl-spacingWrapper
+ row-gap: var(--stack-gap-normal)
diff --git a/lookbook/docs/patterns/02-forms.md.erb b/lookbook/docs/patterns/02-forms.md.erb
index 81a134ef375c..5008f1872a85 100644
--- a/lookbook/docs/patterns/02-forms.md.erb
+++ b/lookbook/docs/patterns/02-forms.md.erb
@@ -45,14 +45,6 @@ The options are:
<%= embed Patterns::FormsPreview, :default, panels: %i[] %>
-## Vertical spacing
-
-By default, form elements do not have proper vertical spacing in Primer. We recommend a 16px (`stack/gap/normal`) vertical separate between individual elements. There is an [open issue in Primer's GitHub](https://github.com/primer/view_components/issues/3042) to fix this.
-
-Until this is fixed at a component level, please do not manually apply form padding.
-
-An alternative approach is to wrap individual form elements using `Form group`. Please only use this sparingly and only when it is absolutely necessarily.
-
## Technical notes
### Usage
diff --git a/modules/backlogs/config/locales/crowdin/tr.yml b/modules/backlogs/config/locales/crowdin/tr.yml
index 791ee9005f5a..32da621a8f83 100644
--- a/modules/backlogs/config/locales/crowdin/tr.yml
+++ b/modules/backlogs/config/locales/crowdin/tr.yml
@@ -141,7 +141,7 @@ tr:
points_resolved: "puanlar çözüldü"
points_to_accept: "puan kabul edilmedi"
points_to_resolve: "puan çözülmedi"
- project_module_backlogs: "İş listeleri"
+ project_module_backlogs: "Bekleyen İşler"
rb_label_copy_tasks: "İş paketlerini kopyala"
rb_label_copy_tasks_all: "Hepsi"
rb_label_copy_tasks_none: "Hiçbiri"
diff --git a/modules/bim/config/locales/crowdin/ru.yml b/modules/bim/config/locales/crowdin/ru.yml
index ec3734247f36..9c6dccc7c3ae 100644
--- a/modules/bim/config/locales/crowdin/ru.yml
+++ b/modules/bim/config/locales/crowdin/ru.yml
@@ -120,7 +120,7 @@ ru:
label: 'Обработка?'
pending: 'В ожидании'
processing: 'В процессе'
- completed: 'Выполнено'
+ completed: 'Завершено'
error: 'Ошибка'
processing_notice:
processing_default: 'Следующие модели IFC по умолчанию еще обрабатываются и поэтому недоступны:'
diff --git a/modules/github_integration/config/locales/crowdin/js-fr.yml b/modules/github_integration/config/locales/crowdin/js-fr.yml
index ca8e9ba6fa6a..5feba158fe67 100644
--- a/modules/github_integration/config/locales/crowdin/js-fr.yml
+++ b/modules/github_integration/config/locales/crowdin/js-fr.yml
@@ -40,9 +40,9 @@ fr:
empty: 'Il n''y a pas encore de demandes de pull liées. Liez une PR existante en utilisant le code OP#%{wp_id}
dans la description de la PR ou créez une nouvelle PR.'
github_actions: Actions
pull_requests:
- message: "La demande pull #%{pr_number} %{pr_link} pour %{repository_link} créée par %{github_user_link} a été %{pr_state}."
- merged_message: "La demande pull #%{pr_number} %{pr_link} pour %{repository_link} a été %{pr_state} par %{github_user_link}."
- referenced_message: "La demande pull #%{pr_number} %{pr_link} pour %{repository_link} créée par %{github_user_link} a référencé ce lot de travaux."
+ message: "La requête pull #%{pr_number} %{pr_link} pour %{repository_link} créée par %{github_user_link} a été %{pr_state}."
+ merged_message: "La requête pull #%{pr_number} %{pr_link} pour %{repository_link} a été %{pr_state} par %{github_user_link}."
+ referenced_message: "La requête pull #%{pr_number} %{pr_link} pour %{repository_link} créée par %{github_user_link} a référencé ce lot de travaux."
states:
opened: 'ouverte'
closed: 'clôturé'
diff --git a/modules/gitlab_integration/config/locales/crowdin/js-ru.yml b/modules/gitlab_integration/config/locales/crowdin/js-ru.yml
index aca553b3ecd5..9c82c691e16e 100644
--- a/modules/gitlab_integration/config/locales/crowdin/js-ru.yml
+++ b/modules/gitlab_integration/config/locales/crowdin/js-ru.yml
@@ -47,7 +47,7 @@ ru:
tab_mrs:
empty: 'Запросы на слияние пока не связаны. Свяжите существующий MR, используя код OP#%{wp_id}
(или PP#%{wp_id}
для частных ссылок) в названии/описании MR, или создайте новый MR.'
gitlab_pipelines: Пайплайны
- updated_on: Обновлено на
+ updated_on: Обновлено
work_packages:
tabs:
gitlab: "GitLab"
diff --git a/modules/meeting/config/locales/crowdin/tr.yml b/modules/meeting/config/locales/crowdin/tr.yml
index 18439c4c0c66..0004117eb6df 100644
--- a/modules/meeting/config/locales/crowdin/tr.yml
+++ b/modules/meeting/config/locales/crowdin/tr.yml
@@ -173,54 +173,54 @@ tr:
text_notificiation_invited: "Bu posta, aşağıdaki toplantı için bir ics girişi içermektedir:"
text_meeting_empty_heading: "Toplantınız boş"
text_meeting_empty_description_1: "Ajanda maddelerini aşağıya ekleyerek başlayın. Her bir madde sadece başlık içerecek kadar basit olabilir ama toplantı süresi ve notları gibi ek detaylar da ekleyebilirsiniz."
- text_meeting_empty_description_2: 'You can also add references to existing work packages. When you do, related notes will automatically be visible in the work package''s "Meetings" tab.'
+ text_meeting_empty_description_2: 'Ayrıca mevcut iş parçalarına referans ekleyebilirsiniz. Bu takdirde, ilişkili notlar iş parçacığının "Toplantılar" sekmesine eklenecektir.'
label_meeting_empty_action: "Gündem maddesi ekle"
label_meeting_actions: "Toplantı eylemleri"
label_meeting_edit_title: "Toplantı başlığını düzenle"
label_meeting_delete: "Toplantıyı sil"
label_meeting_created_by: "Oluşturan"
label_meeting_last_updated: "Son güncelleme"
- label_meeting_reload: "Reload"
+ label_meeting_reload: "Yeniden yükle"
label_agenda_items: "Gündem maddeleri"
label_agenda_items_reordered: "yeniden sıralandı"
- label_agenda_item_remove: "Remove from agenda"
- label_agenda_item_undisclosed_wp: "Work package #%{id} not visible"
- label_agenda_item_deleted_wp: "Deleted work package reference"
- label_agenda_item_actions: "Agenda items actions"
+ label_agenda_item_remove: "Ajandadan kaldır"
+ label_agenda_item_undisclosed_wp: "#%{id} numaralı iş parçası görünmez"
+ label_agenda_item_deleted_wp: "Silinmiş iş parçsına referans"
+ label_agenda_item_actions: "Ajanda maddeleri için eylemler"
label_agenda_item_move_to_top: "Yukarıya taşı"
label_agenda_item_move_to_bottom: "Aşağıya taşı"
label_agenda_item_move_up: "Yukarı taşı"
label_agenda_item_move_down: "Aşağı taşı"
label_agenda_item_add_notes: "Not eklemek"
- label_agenda_item_work_package: "Agenda item work package"
- text_agenda_item_title: 'Agenda item "%{title}"'
- text_agenda_work_package_deleted: 'Agenda item for deleted work package'
- text_deleted_agenda_item: 'Deleted agenda item'
+ label_agenda_item_work_package: "Ajanda maddesinin iş parçası"
+ text_agenda_item_title: 'Ajanda maddesi %{title}"'
+ text_agenda_work_package_deleted: 'Silinen iş parçası için ajanda maddesi'
+ text_deleted_agenda_item: 'Silinen ajanda maddesi'
label_initial_meeting_details: "Toplantı"
- label_meeting_details: "Meeting details"
- label_meeting_details_edit: "Edit meeting details"
- label_meeting_state: "Meeting status"
+ label_meeting_details: "Toplantı detayları"
+ label_meeting_details_edit: "Toplantı detaylarını düzenle"
+ label_meeting_state: "Toplantı durumu"
label_meeting_state_open: "Aç"
- label_meeting_state_open_html: "Open"
+ label_meeting_state_open_html: "Açık"
label_meeting_state_closed: "Kapalı"
- label_meeting_state_closed_html: "Closed"
- label_meeting_reopen_action: "Reopen meeting"
- label_meeting_close_action: "Close meeting"
- text_meeting_open_description: "This meeting is open. You can add/remove agenda items and edit them as you please. After the meeting is over, close it to lock it."
- text_meeting_closed_description: "This meeting is closed. You cannot add/remove agenda items anymore."
- label_meeting_manage_participants: "Manage participants"
- label_meeting_no_participants: "No participants"
- label_meeting_show_hide_participants: "Show/hide %{count} more"
+ label_meeting_state_closed_html: "Kapalı"
+ label_meeting_reopen_action: "Toplantıyı tekrar aç"
+ label_meeting_close_action: "Toplantıyı kapat"
+ text_meeting_open_description: "Bu toplantı açık. Gündem maddesi ekleyip çıkartabilir ve bu maddeleri düzenleyebilirsiniz. Toplantı bittikten sonra kilitlemek için toplantıyı kapatın."
+ text_meeting_closed_description: "Toplantı kapatılmış. Artık gündem maddesi ekleyip çıkartamazsınız."
+ label_meeting_manage_participants: "Katılımcıları yönet"
+ label_meeting_no_participants: "Katılımcı yok"
+ label_meeting_show_hide_participants: "%{count} kişi daha göster/sakla"
label_meeting_show_all_participants: "Tümünü göster"
- label_meeting_add_participants: "Add participants"
- text_meeting_not_editable_anymore: "This meeting is not editable anymore."
- text_meeting_not_present_anymore: "This meeting was deleted. Please select another meeting."
- label_add_work_package_to_meeting_dialog_title: "Add work package to meeting"
- label_add_work_package_to_meeting_dialog_button: "Add to meeting"
+ label_meeting_add_participants: "Katılımcı ekle"
+ text_meeting_not_editable_anymore: "Bu toplantıyı artık düzenleyemezsiniz."
+ text_meeting_not_present_anymore: "Toplantı silinmiş. Başka bir toplantı seçin lütfen."
+ label_add_work_package_to_meeting_dialog_title: "Toplantıya iş parçası ekleyin"
+ label_add_work_package_to_meeting_dialog_button: "Toplantıya ekle"
label_meeting_selection_caption: "It's only possible to add this work package to upcoming or ongoing open meetings."
- text_add_work_package_to_meeting_description: "A work package can be added to one or multiple meetings for discussion. Any notes concerning it are also visible here."
- text_agenda_item_no_notes: "No notes provided"
- text_agenda_item_not_editable_anymore: "This agenda item is not editable anymore."
- text_work_package_has_no_upcoming_meeting_agenda_items: "This work package is not scheduled in an upcoming meeting agenda yet."
- text_work_package_add_to_meeting_hint: 'Use the "Add to meeting" button to add this work package to an upcoming meeting.'
- text_work_package_has_no_past_meeting_agenda_items: "This work package was not mentioned in a past meeting."
+ text_add_work_package_to_meeting_description: "Bir iş paketi tartışılmak üzere bir veya birden fazla toplantıya eklenebilir. Bununla ilgili tüm notlar da burada görülebilir."
+ text_agenda_item_no_notes: "Not verilmemiştir"
+ text_agenda_item_not_editable_anymore: "Bu takvim maddesi artık düzenlenemez."
+ text_work_package_has_no_upcoming_meeting_agenda_items: "Bu iş paketi henüz yaklaşan bir toplantı gündemine alınmamıştır."
+ text_work_package_add_to_meeting_hint: 'Bu iş paketini yaklaşan bir toplantıya eklemek için "Toplantıya ekle" düğmesini kullanın.'
+ text_work_package_has_no_past_meeting_agenda_items: "Bu iş paketinden daha önceki bir toplantıda bahsedilmemişti."
diff --git a/modules/reporting/config/locales/crowdin/es.yml b/modules/reporting/config/locales/crowdin/es.yml
index bc14acc88e65..3f00d37bf8d0 100644
--- a/modules/reporting/config/locales/crowdin/es.yml
+++ b/modules/reporting/config/locales/crowdin/es.yml
@@ -23,7 +23,7 @@ es:
plugin_openproject_reporting:
name: "Informes de OpenProject"
description: "Este plug-in permite crear reportes de costos personalizados con filtrado y agrupación creados por los plug-ins OpenProject Time y costes."
- button_save_report_as: "Save report as..."
+ button_save_report_as: "Guardar informe como..."
comments: "Comentario"
cost_reports_title: "Tiempo y costos"
label_cost_report: "Informe costo"
diff --git a/modules/reporting/config/locales/crowdin/fr.yml b/modules/reporting/config/locales/crowdin/fr.yml
index ce06066d9c18..056f59b49830 100644
--- a/modules/reporting/config/locales/crowdin/fr.yml
+++ b/modules/reporting/config/locales/crowdin/fr.yml
@@ -23,7 +23,7 @@ fr:
plugin_openproject_reporting:
name: "Rapports OpenProject"
description: "Ce plugin permet de créer des rapports de coûts personnalisés avec filtrage et regroupement."
- button_save_report_as: "Save report as..."
+ button_save_report_as: "Enregistrer le rapport sous..."
comments: "Commentaire"
cost_reports_title: "Temps et coûts"
label_cost_report: "Rapport de coût"
diff --git a/modules/reporting/config/locales/crowdin/it.yml b/modules/reporting/config/locales/crowdin/it.yml
index e0073e2d0867..d68fba3b8275 100644
--- a/modules/reporting/config/locales/crowdin/it.yml
+++ b/modules/reporting/config/locales/crowdin/it.yml
@@ -23,7 +23,7 @@ it:
plugin_openproject_reporting:
name: "Reportistica OpenProject"
description: "Questo plugin consente di creare report di costo personalizzati con filtraggio e raggruppamento creato dal plugin OpenProject Time and costs."
- button_save_report_as: "Save report as..."
+ button_save_report_as: "Salva il report come..."
comments: "Commento"
cost_reports_title: "Tempi e costi"
label_cost_report: "Relazione sui costi"
diff --git a/modules/reporting/config/locales/crowdin/ko.yml b/modules/reporting/config/locales/crowdin/ko.yml
index 9fafe2f8877b..ab4a55fcc858 100644
--- a/modules/reporting/config/locales/crowdin/ko.yml
+++ b/modules/reporting/config/locales/crowdin/ko.yml
@@ -23,7 +23,7 @@ ko:
plugin_openproject_reporting:
name: "OpenProject 보고"
description: "이 플러그인을 사용하면 OpenProject 시간 및 비용 플러그인에서 생성된 필터링 및 그룹화를 사용하여 사용자 지정 비용 보고서를 생성할 수 있습니다."
- button_save_report_as: "Save report as..."
+ button_save_report_as: "다른 이름으로 보고서로 저장..."
comments: "코멘트"
cost_reports_title: "시간 및 비용"
label_cost_report: "비용 보고서"
diff --git a/modules/reporting/config/locales/crowdin/pl.yml b/modules/reporting/config/locales/crowdin/pl.yml
index 87d91e2c5917..33ea7fac3472 100644
--- a/modules/reporting/config/locales/crowdin/pl.yml
+++ b/modules/reporting/config/locales/crowdin/pl.yml
@@ -23,7 +23,7 @@ pl:
plugin_openproject_reporting:
name: "Raportowanie OpenProject"
description: "Ta wtyczka umożliwia tworzenie niestandardowych raportów kosztów z filtrowaniem i grupowaniem utworzonym przez wtyczkę OpenProject Czas i koszty."
- button_save_report_as: "Save report as..."
+ button_save_report_as: "Zapisz raport jako..."
comments: "Komentarz"
cost_reports_title: "Czas i koszty"
label_cost_report: "Raport kosztów"
diff --git a/modules/reporting/config/locales/crowdin/pt-PT.yml b/modules/reporting/config/locales/crowdin/pt-PT.yml
index 859cb59a4c71..eb8aa480d16f 100644
--- a/modules/reporting/config/locales/crowdin/pt-PT.yml
+++ b/modules/reporting/config/locales/crowdin/pt-PT.yml
@@ -23,7 +23,7 @@ pt-PT:
plugin_openproject_reporting:
name: "Relatórios do OpenProject"
description: "Este plugin permite criar relatórios de custos personalizados com filtragem e agrupamento criados pelo plugin OpenProject Time e custos."
- button_save_report_as: "Save report as..."
+ button_save_report_as: "Guardar relatório como..."
comments: "Comentário"
cost_reports_title: "Tempo e custos"
label_cost_report: "Relatório de custo"
diff --git a/modules/storages/config/locales/crowdin/es.yml b/modules/storages/config/locales/crowdin/es.yml
index 4f0ad55c86fc..04fd5ff61caa 100644
--- a/modules/storages/config/locales/crowdin/es.yml
+++ b/modules/storages/config/locales/crowdin/es.yml
@@ -91,8 +91,8 @@ es:
rename_project_folder: 'Cambiar el nombre de la carpeta del proyecto gestionado:'
errors:
messages:
- error: An unexpected error occurred. Please check OpenProject logs for more information or contact an administrator
- unauthorized: OpenProject could not authenticate with the Storage Provider. Please ensure that you have access to it.
+ error: Se ha producido un error inesperado. Compruebe los registros de OpenProject para obtener más información o póngase en contacto con un administrador
+ unauthorized: OpenProject no pudo autenticarse con el proveedor de almacenamiento. Asegúrese de que tiene acceso al mismo.
models:
copy_project_folders_service:
conflict: La carpeta %{destination_path} ya existe. Interrumpiendo el proceso para evitar sobreescrituras.
@@ -150,7 +150,7 @@ es:
unauthorized: OpenProject no pudo sincronizarse con OneDrive. Compruebe su almacenamiento y la configuración de la aplicación Azure.
user_does_not_exist: "%{user} no existe en Nextcloud."
upload_link_service:
- not_found: The destination folder %{folder} could not be found on %{storage_name}.
+ not_found: No se ha podido encontrar la carpeta de destino %{folder} en %{storage_name}.
storages:
buttons:
complete_without_setup: Completar sin usar
@@ -214,7 +214,7 @@ es:
client_id_wrong: El id de cliente OAuth 2 configurado no es válido. Por favor, compruebe la configuración.
client_secret_wrong: El secreto de cliente OAuth 2 configurado no es válido. Por favor, compruebe la configuración.
drive_id_wrong: No se ha podido encontrar el drive id configurado. Por favor, compruebe la configuración.
- group_folder_not_found: The group folder could not be found.
+ group_folder_not_found: No se ha podido encontrar la carpeta del grupo.
group_folder_version_mismatch: La versión de la Carpeta de grupo no es compatible. Actualice su servidor Nextcloud.
host_not_found: No se ha encontrado ningún servidor Nextcloud en la URL de host configurada. Compruebe la configuración.
missing_dependencies: 'Falta una dependencia necesaria en el almacenamiento de archivos. Añada la siguiente dependencia: %{dependency}.'
@@ -223,10 +223,10 @@ es:
subtitle: Validación de conexión
tenant_id_wrong: El id de directorio (tenant) configurado no es válido. Por favor, compruebe la configuración.
unexpected_content:
- nextcloud: Unexpected content found in the managed group folder.
- one_drive: Unexpected content found in the drive.
+ nextcloud: Se ha encontrado contenido inesperado en la carpeta del grupo gestionado.
+ one_drive: Contenido inesperado encontrado dentro la unidad.
unknown_error: No se ha podido validar la conexión. Se ha producido un error desconocido. Compruebe los registros del servidor para obtener más información.
- userless_access_denied: The configured app password is invalid.
+ userless_access_denied: La contraseña configurada de la aplicación no es válida.
label_error: Error
label_healthy: Correcto
label_pending: Pendiente
diff --git a/modules/storages/config/locales/crowdin/fr.yml b/modules/storages/config/locales/crowdin/fr.yml
index cb9b2113a65f..afa82e6821da 100644
--- a/modules/storages/config/locales/crowdin/fr.yml
+++ b/modules/storages/config/locales/crowdin/fr.yml
@@ -91,8 +91,8 @@ fr:
rename_project_folder: 'Renommer le dossier du projet géré :'
errors:
messages:
- error: An unexpected error occurred. Please check OpenProject logs for more information or contact an administrator
- unauthorized: OpenProject could not authenticate with the Storage Provider. Please ensure that you have access to it.
+ error: Une erreur inattendue s'est produite. Veuillez consulter les journaux d'OpenProject pour obtenir plus d'informations ou contactez un administrateur
+ unauthorized: OpenProject n'a pas pu s'authentifier auprès du fournisseur de stockage. Veuillez vous assurer que vous y avez accès.
models:
copy_project_folders_service:
conflict: Le dossier %{destination_path} existe déjà. Interruption du processus pour éviter les écrasements.
@@ -150,7 +150,7 @@ fr:
unauthorized: OpenProject n'a pas pu se synchroniser avec OneDrive. Veuillez vérifier votre espace de stockage et la configuration de l'application Azure.
user_does_not_exist: "%{user} n'existe pas dans Nextcloud."
upload_link_service:
- not_found: The destination folder %{folder} could not be found on %{storage_name}.
+ not_found: Le dossier de destination %{folder} n'a pas été trouvé sur %{storage_name}.
storages:
buttons:
complete_without_setup: Compléter sans
@@ -214,7 +214,7 @@ fr:
client_id_wrong: L'identifiant du client OAuth 2 configuré n'est pas valide. Veuillez vérifier la configuration.
client_secret_wrong: Le secret client OAuth 2 configuré n'est pas valide. Veuillez vérifier la configuration.
drive_id_wrong: L'identifiant du lecteur configuré est introuvable. Veuillez vérifier la configuration.
- group_folder_not_found: The group folder could not be found.
+ group_folder_not_found: Le dossier du groupe est introuvable.
group_folder_version_mismatch: La version du dossier de groupe n'est pas prise en charge. Veuillez mettre à jour votre serveur Nextcloud.
host_not_found: Aucun serveur Nextcloud n'a été trouvé à l'adresse configurée. Veuillez vérifier la configuration.
missing_dependencies: 'Une dépendance requise est manquante dans l''espace de stockage de fichiers. Veuillez ajouter la dépendance suivante : %{dependency}.'
@@ -223,10 +223,10 @@ fr:
subtitle: Validation de la connexion
tenant_id_wrong: L'identifiant du répertoire (locataire) configuré n'est pas valide. Veuillez vérifier la configuration.
unexpected_content:
- nextcloud: Unexpected content found in the managed group folder.
- one_drive: Unexpected content found in the drive.
+ nextcloud: Contenu inattendu trouvé dans le dossier du groupe géré.
+ one_drive: Contenu inattendu trouvé dans le lecteur.
unknown_error: La connexion n'a pas pu être validée. Une erreur inconnue s'est produite. Veuillez consulter les journaux du serveur pour en savoir plus.
- userless_access_denied: The configured app password is invalid.
+ userless_access_denied: Le mot de passe de l'application configurée n'est pas valide.
label_error: Erreur
label_healthy: Sain
label_pending: En attente
diff --git a/modules/storages/config/locales/crowdin/it.yml b/modules/storages/config/locales/crowdin/it.yml
index 754c9c34e536..16aa0020be69 100644
--- a/modules/storages/config/locales/crowdin/it.yml
+++ b/modules/storages/config/locales/crowdin/it.yml
@@ -91,8 +91,8 @@ it:
rename_project_folder: 'Rinomina la cartella di progetto gestita:'
errors:
messages:
- error: An unexpected error occurred. Please check OpenProject logs for more information or contact an administrator
- unauthorized: OpenProject could not authenticate with the Storage Provider. Please ensure that you have access to it.
+ error: Si è verificato un errore inatteso. Controlla i log di OpenProject per maggiori informazioni o contatta un amministratore
+ unauthorized: OpenProject non è riuscito ad autenticarsi con il fornitore di servizi di archiviazione. Assicurati di avervi accesso.
models:
copy_project_folders_service:
conflict: La cartella %{destination_path} esiste già. Interrompi il processo per evitare sovrascritture.
@@ -150,7 +150,7 @@ it:
unauthorized: OpenProject non è riuscito a sincronizzarsi con OneDrive. Verifica la configurazione dell'archiviazione e dell'applicazione Azure.
user_does_not_exist: "%{user} non esiste in Nextcloud."
upload_link_service:
- not_found: The destination folder %{folder} could not be found on %{storage_name}.
+ not_found: Impossibile trovare la cartella di destinazione %{folder} su %{storage_name}.
storages:
buttons:
complete_without_setup: Completa senza
@@ -214,7 +214,7 @@ it:
client_id_wrong: L'ID del client OAuth 2 non è valido. Verifica la configurazione.
client_secret_wrong: Il codice segreto del client OAuth 2 non è valido. Verifica la configurazione.
drive_id_wrong: Il Drive ID non è stato trovato. Verifica la configurazione.
- group_folder_not_found: The group folder could not be found.
+ group_folder_not_found: Impossibile trovare la cartella del gruppo.
group_folder_version_mismatch: La versione della cartella di gruppo non è supportata. Aggiorna il server Nextcloud.
host_not_found: Non è stato trovato alcun server Nextcloud all'indirizzo host configurato. Controlla la configurazione.
missing_dependencies: 'Manca una dipendenza necessaria per l''archiviazione dei file. Aggiungi la seguente dipendenza: %{dependency}.'
@@ -223,10 +223,10 @@ it:
subtitle: Verifica della connessione
tenant_id_wrong: L'ID della directory non è valido. Verifica la configurazione.
unexpected_content:
- nextcloud: Unexpected content found in the managed group folder.
- one_drive: Unexpected content found in the drive.
+ nextcloud: Contenuto inatteso trovato nella cartella di gruppo gestita.
+ one_drive: Contenuto inatteso nello spazio di archiviazione.
unknown_error: Non è stato possibile verificare la connessione. Si è verificato un errore sconosciuto. Per maggiori informazioni consulta i log del server.
- userless_access_denied: The configured app password is invalid.
+ userless_access_denied: La password dell'app configurata non è valida.
label_error: Errore
label_healthy: Tutto ok
label_pending: In sospeso
diff --git a/modules/storages/config/locales/crowdin/ko.yml b/modules/storages/config/locales/crowdin/ko.yml
index 5ca55ad50b2c..23a58a37990b 100644
--- a/modules/storages/config/locales/crowdin/ko.yml
+++ b/modules/storages/config/locales/crowdin/ko.yml
@@ -91,8 +91,8 @@ ko:
rename_project_folder: '관리되는 프로젝트 폴더의 이름 바꾸기:'
errors:
messages:
- error: An unexpected error occurred. Please check OpenProject logs for more information or contact an administrator
- unauthorized: OpenProject could not authenticate with the Storage Provider. Please ensure that you have access to it.
+ error: 예기치 않은 오류가 발생했습니다. OpenProject 로그에서 자세한 내용을 확인하거나 관리자에게 문의하세요
+ unauthorized: OpenProject가 저장소 공급자를 인증할 수 없습니다. 액세스 권한이 있는지 확인하세요.
models:
copy_project_folders_service:
conflict: '%{destination_path} 폴더가 이미 존재합니다. 덮어쓰기를 방지하기 위해 프로세스가 중단됩니다.'
@@ -150,7 +150,7 @@ ko:
unauthorized: OpenProject가 OneDrive와 동기화할 수 없습니다. 저장소 및 Azure 애플리케이션 구성을 확인하세요.
user_does_not_exist: "%{user}이(가) Nextcloud에 없습니다."
upload_link_service:
- not_found: The destination folder %{folder} could not be found on %{storage_name}.
+ not_found: '%{storage_name}에서 대상 폴더 %{folder}을(를) 찾을 수 없습니다.'
storages:
buttons:
complete_without_setup: 이것 없이 완료
@@ -214,7 +214,7 @@ ko:
client_id_wrong: 구성된 OAuth 2 클라이언트 ID가 잘못되었습니다. 구성을 확인하세요.
client_secret_wrong: 구성된 OAuth 2 클라이언트 비밀번호가 잘못되었습니다. 구성을 확인하세요.
drive_id_wrong: 구성된 Drive ID를 찾을 수 없습니다. 구성을 확인하세요.
- group_folder_not_found: The group folder could not be found.
+ group_folder_not_found: 그룹 폴더를 찾을 수 없습니다.
group_folder_version_mismatch: 그룹 폴더 버전은 지원되지 않습니다. Nextcloud 서버를 업데이트하세요.
host_not_found: 구성된 호스트 URL에서 Nextcloud 서버를 찾을 수 없습니다. 구성을 확인하세요.
missing_dependencies: '파일 저장소에 필수 종속성이 누락되었습니다. 다음 종속성을 추가하세요: %{dependency}.'
@@ -223,10 +223,10 @@ ko:
subtitle: 연결 유효성 검사
tenant_id_wrong: 구성된 디렉터리(테넌트) ID가 잘못되었습니다. 구성을 확인하세요.
unexpected_content:
- nextcloud: Unexpected content found in the managed group folder.
- one_drive: Unexpected content found in the drive.
+ nextcloud: 관리되는 그룹 폴더에서 예기치 않은 콘텐츠가 발견되었습니다.
+ one_drive: 드라이브에서 예기치 않은 콘텐츠가 발견되었습니다.
unknown_error: 연결에 대한 유효성 검사를 할 수 없습니다. 알 수 없는 오류가 발생했습니다. 자세한 내용은 서버 로그를 확인하세요.
- userless_access_denied: The configured app password is invalid.
+ userless_access_denied: 구성된 앱 암호가 잘못되었습니다.
label_error: 오류
label_healthy: 정상
label_pending: 대기 중
diff --git a/modules/storages/config/locales/crowdin/pl.yml b/modules/storages/config/locales/crowdin/pl.yml
index 59f3758a5878..113ec5c035a0 100644
--- a/modules/storages/config/locales/crowdin/pl.yml
+++ b/modules/storages/config/locales/crowdin/pl.yml
@@ -91,8 +91,8 @@ pl:
rename_project_folder: 'Zmień nazwę zarządzanego folderu projektu:'
errors:
messages:
- error: An unexpected error occurred. Please check OpenProject logs for more information or contact an administrator
- unauthorized: OpenProject could not authenticate with the Storage Provider. Please ensure that you have access to it.
+ error: Wystąpił nieoczekiwany błąd. Sprawdź dzienniki OpenProject, aby uzyskać więcej informacji lub skontaktuj się z administratorem
+ unauthorized: OpenProject nie mógł uwierzytelnić się z dostawcą magazynu. Upewnij się, że masz do niego dostęp.
models:
copy_project_folders_service:
conflict: Folder %{destination_path} już istnieje. Przerywanie procesu, aby uniknąć zastąpień.
@@ -150,7 +150,7 @@ pl:
unauthorized: OpenProject nie może zsynchronizować się z OneDrive. Sprawdź konfigurację magazynu i aplikacji Azure.
user_does_not_exist: "Użytkownik %{user} nie istnieje w Nextcloud."
upload_link_service:
- not_found: The destination folder %{folder} could not be found on %{storage_name}.
+ not_found: Folder docelowy %{folder} nie został znaleziony w magazynie %{storage_name}.
storages:
buttons:
complete_without_setup: Ukończ bez tego
@@ -214,7 +214,7 @@ pl:
client_id_wrong: Skonfigurowany identyfikator klienta OAuth 2 jest nieprawidłowy. Sprawdź konfigurację.
client_secret_wrong: Skonfigurowany klucz tajny klienta OAuth 2 jest nieprawidłowy. Sprawdź konfigurację.
drive_id_wrong: Nie można znaleźć skonfigurowanego Drive ID. Sprawdź konfigurację.
- group_folder_not_found: The group folder could not be found.
+ group_folder_not_found: Folder grupy nie został znaleziony.
group_folder_version_mismatch: Wersja folderu grupy jest nieobsługiwana. Zaktualizuj swój serwer Nextcloud.
host_not_found: Nie znaleziono serwera Nextcloud pod skonfigurowanym adresem URL hosta. Sprawdź konfigurację.
missing_dependencies: 'Brakuje wymaganej zależności magazynu plików. Dodaj następującą zależność: %{dependency}.'
@@ -223,10 +223,10 @@ pl:
subtitle: Weryfikacja połączenia
tenant_id_wrong: Skonfigurowany katalog (dzierżawca) jest nieprawidłowy. Sprawdź konfigurację.
unexpected_content:
- nextcloud: Unexpected content found in the managed group folder.
- one_drive: Unexpected content found in the drive.
+ nextcloud: W folderze zarządzanej grupy znaleziono nieoczekiwaną zawartość.
+ one_drive: Na dysku znaleziono nieoczekiwaną zawartość.
unknown_error: Nie można zweryfikować połączenia. Wystąpił nieznany błąd. Aby uzyskać dalsze informacje, sprawdź dzienniki serwera.
- userless_access_denied: The configured app password is invalid.
+ userless_access_denied: Skonfigurowane hasło aplikacji jest nieprawidłowe.
label_error: Błąd
label_healthy: Zdrowe
label_pending: Oczekujący
diff --git a/modules/storages/config/locales/crowdin/pt-BR.yml b/modules/storages/config/locales/crowdin/pt-BR.yml
index 34b6120d0365..2d4e432d8186 100644
--- a/modules/storages/config/locales/crowdin/pt-BR.yml
+++ b/modules/storages/config/locales/crowdin/pt-BR.yml
@@ -91,8 +91,8 @@ pt-BR:
rename_project_folder: 'Renomear pasta do projeto gerido:'
errors:
messages:
- error: An unexpected error occurred. Please check OpenProject logs for more information or contact an administrator
- unauthorized: OpenProject could not authenticate with the Storage Provider. Please ensure that you have access to it.
+ error: Ocorreu um erro inesperado. Verifique os registros do OpenProject para obter mais informações ou entre em contato com um administrador
+ unauthorized: O OpenProject não conseguiu se autenticar com o provedor de armazenamento. Verifique se você possui acesso a ele.
models:
copy_project_folders_service:
conflict: A pasta %{destination_path} já existe. Interrompa o processo para evitar substituições.
@@ -150,7 +150,7 @@ pt-BR:
unauthorized: O OpenProject não pôde sincronizar com o OneDrive. Verifique o armazenamento e a configuração do aplicativo Azure.
user_does_not_exist: "%{user} não existe no Nextcloud."
upload_link_service:
- not_found: The destination folder %{folder} could not be found on %{storage_name}.
+ not_found: A pasta de destino %{folder} não foi encontrada em %{storage_name}.
storages:
buttons:
complete_without_setup: Concluir sem isso
@@ -214,7 +214,7 @@ pt-BR:
client_id_wrong: O ID do cliente OAuth 2 configurado é inválido. Verifique a configuração.
client_secret_wrong: O segredo do cliente OAuth 2 configurado é inválido. Verifique a configuração.
drive_id_wrong: O drive ID configurado não foi encontrado. Verifique a configuração.
- group_folder_not_found: The group folder could not be found.
+ group_folder_not_found: A pasta do grupo não pôde ser localizada.
group_folder_version_mismatch: A versão da Pasta de Grupo não é suportada. Por favor, atualize seu servidor NextCloud.
host_not_found: Nenhum servidor Nextcloud encontrado no URL do host configurado. Por favor, verifique a configuração.
missing_dependencies: 'Está faltando uma dependência necessária do armazenamento de arquivos. Por favor, adicione a seguinte dependência: %{dependency}.'
@@ -223,10 +223,10 @@ pt-BR:
subtitle: Validação de conexão
tenant_id_wrong: O ID do diretório (inquilino) configurado é inválido. Verifique a configuração.
unexpected_content:
- nextcloud: Unexpected content found in the managed group folder.
- one_drive: Unexpected content found in the drive.
+ nextcloud: Conteúdo inesperado encontrado na pasta do grupo gerenciado.
+ one_drive: Conteúdo inesperado encontrado na unidade.
unknown_error: A conexão não pôde ser validada. Ocorreu um erro desconhecido. Verifique os registros do servidor para obter mais informações.
- userless_access_denied: The configured app password is invalid.
+ userless_access_denied: A senha configurada do aplicativo não é válida.
label_error: Erro
label_healthy: Saudável
label_pending: Pendente
diff --git a/modules/storages/config/locales/crowdin/pt-PT.yml b/modules/storages/config/locales/crowdin/pt-PT.yml
index 58550fca9164..6c114e6ef5aa 100644
--- a/modules/storages/config/locales/crowdin/pt-PT.yml
+++ b/modules/storages/config/locales/crowdin/pt-PT.yml
@@ -91,8 +91,8 @@ pt-PT:
rename_project_folder: 'Renomear pasta do projeto gerido:'
errors:
messages:
- error: An unexpected error occurred. Please check OpenProject logs for more information or contact an administrator
- unauthorized: OpenProject could not authenticate with the Storage Provider. Please ensure that you have access to it.
+ error: Ocorreu um erro inesperado. Verifique os registos do OpenProject para obter mais informações ou contacte um administrador
+ unauthorized: Não foi possível autenticar o OpenProject com o fornecedor de armazenamento. Certifique-se de que tem acesso ao mesmo.
models:
copy_project_folders_service:
conflict: A pasta %{destination_path} já existe. Interrompa o processo para evitar substituições.
@@ -150,7 +150,7 @@ pt-PT:
unauthorized: Não foi possível sincronizar o OpenProject com o OneDrive. Verifique o seu armazenamento e a configuração da aplicação do Azure.
user_does_not_exist: "%{user} não existe no Nextcloud."
upload_link_service:
- not_found: The destination folder %{folder} could not be found on %{storage_name}.
+ not_found: Não foi possível encontrar a pasta de destino %{folder} em %{storage_name}.
storages:
buttons:
complete_without_setup: Concluir sem isso
@@ -214,7 +214,7 @@ pt-PT:
client_id_wrong: O ID de cliente OAuth 2 configurado é inválido. Verifique a configuração.
client_secret_wrong: O segredo do cliente OAuth 2 configurado é inválido. Verifique a configuração.
drive_id_wrong: Não foi possível encontrar o Drive ID configurado. Verifique a configuração.
- group_folder_not_found: The group folder could not be found.
+ group_folder_not_found: Não foi possível encontrar a pasta do grupo.
group_folder_version_mismatch: A versão da pasta de grupo não é suportada. Atualize o seu servidor do Nextcloud.
host_not_found: Não foi encontrado nenhum servidor do Nextcloud no URL do anfitrião configurado. Verifique a configuração.
missing_dependencies: 'Está em falta uma dependência necessária no armazenamento de ficheiros. Adicione a seguinte dependência: %{dependency}.'
@@ -223,10 +223,10 @@ pt-PT:
subtitle: Validação da ligação
tenant_id_wrong: O ID do diretório (inquilino) configurado é inválido. Verifique a configuração.
unexpected_content:
- nextcloud: Unexpected content found in the managed group folder.
- one_drive: Unexpected content found in the drive.
+ nextcloud: Conteúdo inesperado encontrado na pasta do grupo gerido.
+ one_drive: Conteúdo inesperado encontrado na unidade.
unknown_error: Não foi possível validar a ligação. Ocorreu um erro desconhecido. Consulte os registos do servidor para obter mais informações.
- userless_access_denied: The configured app password is invalid.
+ userless_access_denied: A palavra-passe da aplicação configurada é inválida.
label_error: Erro
label_healthy: Bom estado
label_pending: Pendente
diff --git a/modules/storages/config/locales/crowdin/ru.yml b/modules/storages/config/locales/crowdin/ru.yml
index 461a9ab7e28d..5a299736364b 100644
--- a/modules/storages/config/locales/crowdin/ru.yml
+++ b/modules/storages/config/locales/crowdin/ru.yml
@@ -286,7 +286,7 @@ ru:
label_active: Активный
label_add_new_storage: Добавить новое хранилище
label_automatic_folder: Новая папка с автоматически управляемыми правами
- label_completed: Выполнено
+ label_completed: Завершено
label_creation_time: Время создания
label_creator: Создатель
label_delete_storage: Удалить хранилище
diff --git a/modules/team_planner/config/locales/crowdin/js-es.yml b/modules/team_planner/config/locales/crowdin/js-es.yml
index a86450b8c449..ba6f2a9a5e93 100644
--- a/modules/team_planner/config/locales/crowdin/js-es.yml
+++ b/modules/team_planner/config/locales/crowdin/js-es.yml
@@ -8,7 +8,7 @@ es:
create_title: 'Crear nuevo planificador de equipos'
unsaved_title: 'Planificador de equipo sin nombre'
no_data: 'Añadir asignados para configurar su planificador de equipo.'
- add_assignee: 'Assignee'
+ add_assignee: 'Asignado a'
remove_assignee: 'Eliminar asignado'
two_weeks: '2 semanas'
one_week: '1 semana'
diff --git a/modules/team_planner/config/locales/crowdin/js-fr.yml b/modules/team_planner/config/locales/crowdin/js-fr.yml
index d3e50e56757e..695779007b45 100644
--- a/modules/team_planner/config/locales/crowdin/js-fr.yml
+++ b/modules/team_planner/config/locales/crowdin/js-fr.yml
@@ -8,7 +8,7 @@ fr:
create_title: 'Créer un nouveau planificateur d''équipe'
unsaved_title: 'Planificateur d''équipe sans nom'
no_data: 'Ajoutez des personnes pour configurer votre planificateur d''équipe.'
- add_assignee: 'Assignee'
+ add_assignee: 'Attributaire'
remove_assignee: 'Retirer l''assigné'
two_weeks: '2 semaines'
one_week: '1 semaine'
diff --git a/modules/team_planner/config/locales/crowdin/js-it.yml b/modules/team_planner/config/locales/crowdin/js-it.yml
index 7fbf92d620ae..71735a603d6f 100644
--- a/modules/team_planner/config/locales/crowdin/js-it.yml
+++ b/modules/team_planner/config/locales/crowdin/js-it.yml
@@ -8,7 +8,7 @@ it:
create_title: 'Crea nuovo pianificatore di team'
unsaved_title: 'Team planner senza nome'
no_data: 'Aggiungi assegnatari per configurare il tuo team planner.'
- add_assignee: 'Assignee'
+ add_assignee: 'Assegnatario'
remove_assignee: 'Rimuovi assegnatario'
two_weeks: '2 settimane'
one_week: '1 settimana'
diff --git a/modules/team_planner/config/locales/crowdin/js-ko.yml b/modules/team_planner/config/locales/crowdin/js-ko.yml
index 784a6fcfa3a3..976bddc5f403 100644
--- a/modules/team_planner/config/locales/crowdin/js-ko.yml
+++ b/modules/team_planner/config/locales/crowdin/js-ko.yml
@@ -8,7 +8,7 @@ ko:
create_title: '새로운 팀 플래너 만들기'
unsaved_title: '이름 없는 팀 플래너'
no_data: '담당자를 추가하여 팀 플래너를 설정하세요.'
- add_assignee: 'Assignee'
+ add_assignee: '담당자'
remove_assignee: '담당자 제거'
two_weeks: '2주'
one_week: '1주'
diff --git a/modules/team_planner/config/locales/crowdin/js-pl.yml b/modules/team_planner/config/locales/crowdin/js-pl.yml
index f29953d1622d..c09e759ff2df 100644
--- a/modules/team_planner/config/locales/crowdin/js-pl.yml
+++ b/modules/team_planner/config/locales/crowdin/js-pl.yml
@@ -8,7 +8,7 @@ pl:
create_title: 'Utwórz nowego planistę zespołu'
unsaved_title: 'Planista zespołu bez nazwy'
no_data: 'Aby skonfigurować planistę zespołu, dodaj przypisane osoby.'
- add_assignee: 'Assignee'
+ add_assignee: 'Osoba przydzielona'
remove_assignee: 'Usuń osobę przypisaną'
two_weeks: '2 tygodnie'
one_week: '1 tydzień'
diff --git a/modules/team_planner/config/locales/crowdin/js-pt-BR.yml b/modules/team_planner/config/locales/crowdin/js-pt-BR.yml
index 49c654f18e4d..e5e78c3def31 100644
--- a/modules/team_planner/config/locales/crowdin/js-pt-BR.yml
+++ b/modules/team_planner/config/locales/crowdin/js-pt-BR.yml
@@ -8,7 +8,7 @@ pt-BR:
create_title: 'Criar novo planejador de equipe'
unsaved_title: 'Planejador de equipe não nomeado'
no_data: 'Adicione responsáveis para configurar seu planejador de equipe.'
- add_assignee: 'Assignee'
+ add_assignee: 'Encarregado'
remove_assignee: 'Remover responsável'
two_weeks: '2 semanas'
one_week: '1 semana'
diff --git a/modules/team_planner/config/locales/crowdin/js-pt-PT.yml b/modules/team_planner/config/locales/crowdin/js-pt-PT.yml
index 0b8e1a2d2905..4f7740c4bfb4 100644
--- a/modules/team_planner/config/locales/crowdin/js-pt-PT.yml
+++ b/modules/team_planner/config/locales/crowdin/js-pt-PT.yml
@@ -8,7 +8,7 @@ pt-PT:
create_title: 'Criar novo planeador de equipa'
unsaved_title: 'Planeador de equipa sem nome'
no_data: 'Adicione responsáveis para configurar o planeador da sua equipa.'
- add_assignee: 'Assignee'
+ add_assignee: 'Pessoa atribuída'
remove_assignee: 'Remover responsável'
two_weeks: '2 semanas'
one_week: '1 semana'
diff --git a/modules/webhooks/app/workers/attachment_webhook_job.rb b/modules/webhooks/app/workers/attachment_webhook_job.rb
index 97a301136d6c..f05d2e855850 100644
--- a/modules/webhooks/app/workers/attachment_webhook_job.rb
+++ b/modules/webhooks/app/workers/attachment_webhook_job.rb
@@ -38,10 +38,7 @@ def accepted_in_project?
webhook.enabled_for_project?(project.id)
end
- def payload_representer
- User.system.run_given do |user|
- ::API::V3::Attachments::AttachmentRepresenter
- .create(resource, current_user: user, embed_links: true)
- end
+ def payload_representer_class
+ ::API::V3::Attachments::AttachmentRepresenter
end
end
diff --git a/modules/webhooks/app/workers/project_webhook_job.rb b/modules/webhooks/app/workers/project_webhook_job.rb
index 732563074593..b96fd7771840 100644
--- a/modules/webhooks/app/workers/project_webhook_job.rb
+++ b/modules/webhooks/app/workers/project_webhook_job.rb
@@ -39,10 +39,7 @@ def accepted_in_project?
end
end
- def payload_representer
- User.system.run_given do |user|
- ::API::V3::Projects::ProjectRepresenter
- .create(resource, current_user: user, embed_links: true)
- end
+ def payload_representer_class
+ ::API::V3::Projects::ProjectRepresenter
end
end
diff --git a/modules/webhooks/app/workers/represented_webhook_job.rb b/modules/webhooks/app/workers/represented_webhook_job.rb
index 0d4ca6a21163..0903395d604a 100644
--- a/modules/webhooks/app/workers/represented_webhook_job.rb
+++ b/modules/webhooks/app/workers/represented_webhook_job.rb
@@ -68,14 +68,22 @@ def payload_key
raise NotImplementedError
end
- def payload_representer
+ def represented_payload
+ User.system.run_given do |user|
+ payload_representer_class
+ .create(resource, current_user: user, embed_links: true)
+ .to_hash # to_hash needs to be called within the system user block
+ end
+ end
+
+ def payload_representer_class
raise NotImplementedError
end
def request_body
{
:action => event_name,
- payload_key => payload_representer
+ payload_key => represented_payload
}.to_json
end
end
diff --git a/modules/webhooks/app/workers/time_entry_webhook_job.rb b/modules/webhooks/app/workers/time_entry_webhook_job.rb
index c8c2013caddb..d9400d8da954 100644
--- a/modules/webhooks/app/workers/time_entry_webhook_job.rb
+++ b/modules/webhooks/app/workers/time_entry_webhook_job.rb
@@ -31,10 +31,7 @@ def payload_key
:time_entry
end
- def payload_representer
- User.system.run_given do |user|
- ::API::V3::TimeEntries::TimeEntryRepresenter
- .create(resource, current_user: user, embed_links: true)
- end
+ def payload_representer_class
+ ::API::V3::TimeEntries::TimeEntryRepresenter
end
end
diff --git a/modules/webhooks/app/workers/work_package_webhook_job.rb b/modules/webhooks/app/workers/work_package_webhook_job.rb
index b25b01d043a1..4f9cb3928f1b 100644
--- a/modules/webhooks/app/workers/work_package_webhook_job.rb
+++ b/modules/webhooks/app/workers/work_package_webhook_job.rb
@@ -31,10 +31,7 @@ def payload_key
:work_package
end
- def payload_representer
- User.system.run_given do |user|
- ::API::V3::WorkPackages::WorkPackageRepresenter
- .create(resource, current_user: user, embed_links: true)
- end
+ def payload_representer_class
+ ::API::V3::WorkPackages::WorkPackageRepresenter
end
end
diff --git a/modules/webhooks/spec/workers/project_webhook_job_spec.rb b/modules/webhooks/spec/workers/project_webhook_job_spec.rb
index 03f81354a124..3eac1560955a 100644
--- a/modules/webhooks/spec/workers/project_webhook_job_spec.rb
+++ b/modules/webhooks/spec/workers/project_webhook_job_spec.rb
@@ -29,7 +29,6 @@
require "spec_helper"
RSpec.describe ProjectWebhookJob, :webmock, type: :job do
- shared_let(:user) { create(:admin) }
shared_let(:request_url) { "http://example.net/test/42" }
shared_let(:project) { create(:project, name: "Foo Bar") }
shared_let(:webhook) { create(:webhook, all_projects: true, url: request_url, secret: nil) }
@@ -50,6 +49,10 @@
{ content_type: "text/plain", x_spec: "foobar" }
end
+ let(:expected_payload) do
+ {}
+ end
+
let(:stub) do
stub_request(:post, stubbed_url.sub("http://", ""))
.with(
@@ -57,7 +60,8 @@
"action" => event,
"project" => hash_including(
"_type" => "Project",
- "name" => "Foo Bar"
+ "name" => "Foo Bar",
+ **expected_payload
)
),
headers: request_headers
@@ -78,7 +82,6 @@
before do
allow(Webhooks::Webhook).to receive(:find).with(webhook.id).and_return(webhook)
- login_as user
stub
end
@@ -133,7 +136,7 @@
end
end
- describe "triggering a projec creation" do
+ describe "triggering a project creation" do
it_behaves_like "a project webhook call" do
let(:event) { "project:created" }
end
@@ -146,4 +149,30 @@
let(:response_body) { "not found" }
end
end
+
+ describe "triggering an update with a custom field set" do
+ shared_let(:custom_field) { create(:project_custom_field, :string, projects: [project]) }
+ shared_let(:custom_value) do
+ create(:custom_value,
+ custom_field:,
+ customized: project,
+ value: "wat")
+ end
+
+ it_behaves_like "a project webhook call" do
+ let(:expected_payload) do
+ { custom_field.attribute_name(:camel_case) => "wat" }
+ end
+
+ it "includes the custom field value" do
+ subject
+
+ expect(stub).to have_been_requested
+
+ log = Webhooks::Log.last
+ request = JSON.parse(log.request_body)
+ expect(request["project"][custom_field.attribute_name(:camel_case)]).to eq "wat"
+ end
+ end
+ end
end
diff --git a/spec/workers/mails/mailer_job_spec.rb b/spec/workers/mails/mailer_job_spec.rb
new file mode 100644
index 000000000000..d8697d8376e5
--- /dev/null
+++ b/spec/workers/mails/mailer_job_spec.rb
@@ -0,0 +1,101 @@
+# 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.
+#++
+
+require "spec_helper"
+
+class MyRSpecExampleMailer < ApplicationMailer
+ default from: "openproject@example.com",
+ subject: "Welcome to OpenProject"
+
+ def welcome_email
+ user = params[:user]
+ mail(to: user) do |format|
+ format.text { render plain: "Welcome!" }
+ format.html { render html: "Welcome!
".html_safe }
+ end
+ end
+
+ def welcome2(user)
+ mail(to: user) do |format|
+ format.text { render plain: "Welcome!" }
+ format.html { render html: "Welcome!
".html_safe }
+ end
+ end
+end
+
+RSpec.describe Mails::MailerJob do
+ subject { described_class.new }
+
+ it "is used to send emails when calling .deliver_later on a mailer" do
+ user = create(:user, mail: "user@example.com")
+ job = MyRSpecExampleMailer.with(user:).welcome_email.deliver_later
+ expect(job).to be_an_instance_of(described_class)
+ expect(enqueued_jobs).to contain_exactly(a_hash_including("job_class" => described_class.name))
+ enqueued_job = enqueued_jobs.first
+
+ perform_enqueued_jobs
+ # job has been performed
+ expect(performed_jobs).to contain_exactly(enqueued_job)
+ # there are no more jobs
+ expect(enqueued_jobs).to be_empty
+ end
+
+ it "retries sending email on StandardError" do
+ user = "Will raise ArgumentError because ApplicationMailer expect a User instance as recipient"
+ MyRSpecExampleMailer.with(user:).welcome_email.deliver_later
+ expect(enqueued_jobs).to contain_exactly(a_hash_including("job_class" => "Mails::MailerJob",
+ "executions" => 0,
+ "exception_executions" => {}))
+
+ # let's execute the mailer job
+ job1 = enqueued_jobs.first
+ perform_enqueued_jobs
+
+ # job has been performed, but has encountered an error
+ expect(performed_jobs).to contain_exactly(job1)
+ expect(job1).to include("exception_executions" => { "[StandardError]" => 1 })
+
+ # and it is being retried: another identical job is queued with an increased execution count
+ expect(enqueued_jobs).to contain_exactly(a_hash_including("job_class" => "Mails::MailerJob",
+ "executions" => 1,
+ "exception_executions" => { "[StandardError]" => 1 }))
+
+ # we can run this retried job, it will be performed, fail again, and enqueue another retry job again
+ job2 = enqueued_jobs.first
+ perform_enqueued_jobs
+ expect(performed_jobs).to contain_exactly(job1, job2)
+ expect(job2).to include("exception_executions" => { "[StandardError]" => 2 })
+ expect(enqueued_jobs).to contain_exactly(a_hash_including("job_class" => "Mails::MailerJob",
+ "executions" => 2,
+ "exception_executions" => { "[StandardError]" => 2 }))
+
+ # and so on...
+ end
+end