diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 30d3d658d32..12f90110f14 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -1,6 +1,7 @@ name: "Test suite" # https://securitylab.github.com/research/github-actions-preventing-pwn-requests on: + workflow_dispatch: push: branches: - dev diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4844b432b12..e8343fe0e8f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,7 +4,7 @@ We are pleased that you are thinking about contributing to OpenProject! This gui ## Get in touch -Please get in touch with us using our [develompment forum](https://community.openproject.org/projects/openproject/boards/7) or send us an email to info@openproject.com. +Please get in touch with us using our [development forum](https://community.openproject.org/projects/openproject/boards/7) or send us an email to info@openproject.com. ## Issue tracking and coordination @@ -61,7 +61,7 @@ git push origin - Create a pull request against a branch of of the repository, containing a ***clear description*** of what the pull request attempts to change and/or fix. -If your pull request **does not contain a description** for what it does and what it's intentions are, +If your pull request **does not contain a description** for what it does and what its intentions are, we will reject it. If you are working on a specific work package from the [list](https://community.openproject.org/projects/openproject/work_packages), you may include a link to that work package in the description, so we can track your work. @@ -83,12 +83,10 @@ More on this topic can be found in our [blog post](https://www.openproject.org/h Please add tests to your code to verify functionality, especially if it is a new feature. -Pull requests will be verified by TravisCI as well, +Pull requests will be verified by GitHub Actions as well, but please run them locally as well and make sure they are green before creating your pull request. We have a lot of pull requests coming in and it takes some time to run the complete suite for each one. -If you push to your branch in quick succession, please consider stopping the associated Travis builds, as Travis will run for each commit. This is especially true if you force push to the branch. - Please also use `[ci skip]` in your commit message to suppress builds which are not necessary (e.g. after fixing a typo in the `README`). @@ -100,11 +98,11 @@ A fix for the current version (called "Hotfix" and the branch ideally being name should target `release/*` and a fix for the former version (called "Backport" and the branch ideally being named `backport/XYZ`) should target `backport/*`. We will try to merge hotfixes into dev branch -but if that is no trivial task, we might ask you to create another PR for that. +but if that is a non-trivial task, we might ask you to create another PR for that. ## Inactive pull requests -We want to keep the Pull request list as cleaned up as possible - we will aim close pull requests +We want to keep the Pull request list as tidy as possible - we will aim close pull requests after an **inactivity period of 30 days** (no comments, no further pushes) which are not labelled as `work in progress` by us. diff --git a/Gemfile.lock b/Gemfile.lock index 80dcef72c81..483bd9d9e7d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1030,7 +1030,7 @@ GEM rack (>= 1.1) rubocop (>= 1.52.0, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (3.0.5) + rubocop-rspec (3.1.0) rubocop (~> 1.61) rubocop-rspec_rails (2.30.0) rubocop (~> 1.61) @@ -1104,7 +1104,7 @@ GEM attr_required (>= 0.0.5) faraday (~> 2.0) faraday-follow_redirects - sys-filesystem (1.5.0) + sys-filesystem (1.5.3) ffi (~> 1.1) table_print (1.5.7) terminal-table (3.0.2) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index fbeabfd68b2..07903434389 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -172,12 +172,6 @@ module ApplicationHelper 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 b1c43a297ac..63198f80c00 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. - + <% if User.current.allowed_in_project?(:view_time_entries, @project) %> - + <% end %>
<%= Version.human_attribute_name(:estimated_hours) %><%= html_hours(l_hours(@version.estimated_hours)) %><%= l_hours(@version.estimated_hours) %>
<%= t(:label_spent_time) %><%= html_hours(l_hours(@version.spent_hours)) %><%= l_hours(@version.spent_hours) %>
diff --git a/app/workers/application_job.rb b/app/workers/application_job.rb index 44c81ab9372..c2197a5f15b 100644 --- a/app/workers/application_job.rb +++ b/app/workers/application_job.rb @@ -30,13 +30,7 @@ require "active_job" 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 @@ class ApplicationJob < ActiveJob::Base 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 beaed7c77fa..696daa79ec4 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 } +# 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 - # 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 - - 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 00000000000..21019b136b1 --- /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 82e19b532a6..28ddc2f4f59 100644 --- a/config/locales/crowdin/af.yml +++ b/config/locales/crowdin/af.yml @@ -820,7 +820,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 f225cd70806..a32ccd424d9 100644 --- a/config/locales/crowdin/ar.yml +++ b/config/locales/crowdin/ar.yml @@ -848,7 +848,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 6de13b1923b..6e53285071d 100644 --- a/config/locales/crowdin/az.yml +++ b/config/locales/crowdin/az.yml @@ -820,7 +820,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 059c915ecbf..3741042917a 100644 --- a/config/locales/crowdin/be.yml +++ b/config/locales/crowdin/be.yml @@ -834,7 +834,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 514ec2f6ecd..c75e1f8ed66 100644 --- a/config/locales/crowdin/bg.yml +++ b/config/locales/crowdin/bg.yml @@ -820,7 +820,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 65b4985d0e4..28c418018df 100644 --- a/config/locales/crowdin/ca.yml +++ b/config/locales/crowdin/ca.yml @@ -816,7 +816,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 2fd3a0e8439..999dc7b539c 100644 --- a/config/locales/crowdin/ckb-IR.yml +++ b/config/locales/crowdin/ckb-IR.yml @@ -820,7 +820,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 30550a4c9f5..46e9599e941 100644 --- a/config/locales/crowdin/cs.yml +++ b/config/locales/crowdin/cs.yml @@ -834,7 +834,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 4cf05920591..9409827e634 100644 --- a/config/locales/crowdin/da.yml +++ b/config/locales/crowdin/da.yml @@ -818,7 +818,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 4e8ae91faa0..109eb80ba62 100644 --- a/config/locales/crowdin/de.yml +++ b/config/locales/crowdin/de.yml @@ -814,7 +814,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." @@ -2251,7 +2251,7 @@ de: label_more: "Mehr" label_more_than_ago: "vor mehr als (Tage)" label_move_work_package: "Arbeitspaket verschieben" - label_my_account: "Account settings" + label_my_account: "Kontoeinstellungen" label_my_activity: "Meine Aktivität" label_my_account_data: "Meine Kontodaten" label_my_avatar: "Mein Avatar" diff --git a/config/locales/crowdin/el.yml b/config/locales/crowdin/el.yml index d1e76ddd59d..99969c2c933 100644 --- a/config/locales/crowdin/el.yml +++ b/config/locales/crowdin/el.yml @@ -816,7 +816,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 94d3cf8c887..61adbc0a4e2 100644 --- a/config/locales/crowdin/eo.yml +++ b/config/locales/crowdin/eo.yml @@ -820,7 +820,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 6ede988c782..8dbb66ef8c3 100644 --- a/config/locales/crowdin/es.yml +++ b/config/locales/crowdin/es.yml @@ -211,7 +211,7 @@ es: items: blankslate: title: "Su lista de artículos está vacía" - description: "Comience añadiendo elementos al campo personalizado de tipo jerarquía. Cada elemento puede utilizarse para crear una jerarquía debajo de él. Para navegar y crear subelementos dentro de una jerarquía haga clic en el elemento creado." + description: "Comience añadiendo elementos al campo personalizado de tipo jerarquía. Cada elemento puede utilizarse para crear una jerarquía debajo de él. Para navegar y crear subelementos dentro de una jerarquía, haga clic en el elemento creado." notice: remember_items_and_projects: "Recuerde configurar los artículos y proyectos en las pestañas respectivas para este campo personalizado." text_add_new_custom_field: > @@ -817,7 +817,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: "es para todos. No se puede modificar." + 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}." @@ -926,7 +926,7 @@ es: blank: "es obligatorio. Por favor, seleccione un nombre." not_unique: "ya está en uso. Por favor, seleccione otro nombre." meeting: - error_conflict: "No se ha podido guardar porque la reunión ha sido actualizada por otra persona mientras tanto. Por favor, vuelva a cargar la página." + 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: @@ -1808,8 +1808,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: "El cálculo de los totales de % Completo ahora se pondera por Trabajo." - total_percent_complete_mode_changed_to_simple_average: "El cálculo de los totales de % Completo se basa ahora en una media simple de sólo los valores de % Completo." + 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 @@ -1840,7 +1840,7 @@ es: total_percent_complete_mode_changed_to_work_weighted_average: >- Los paquetes de trabajo para niños sin Trabajo se ignoran. total_percent_complete_mode_changed_to_simple_average: >- - Se ignoran los valores de trabajo de los paquetes de trabajo hijos. + 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." @@ -1941,7 +1941,7 @@ es: label_additional_workflow_transitions_for_author: "Transiciones adicionales permitidas cuando el usuario es el autor" label_administration: "Administración" 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_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" @@ -3160,10 +3160,10 @@ es: 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: >- - % Completo puede fijarse libremente en cualquier valor. Si introduce opcionalmente un valor para Trabajo, se derivará automáticamente Trabajo restante. + % 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: >- - Cada estado tiene asociado un valor de % Completo. El cambio de estado modificará el % Completo. + 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" @@ -3184,10 +3184,10 @@ 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: "% Completo cuando el estado es cerrado" + 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: >- - El valor de % Completo no cambiará aunque se cierre un paquete de trabajo. + 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: >- Un paquete de trabajo cerrado se considera completo. @@ -3215,13 +3215,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: "Cálculo de los totales de la jerarquía % Completo" + 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: >- - El Total % Completo se ponderará con respecto al Trabajo de cada paquete de trabajo de la jerarquía. Los paquetes de trabajo sin Trabajo serán ignorados. + 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: >- - Trabajo se ignora y el % Total Completo será una media simple de los valores de % Completo de los paquetes de trabajo de la jerarquía. + 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" diff --git a/config/locales/crowdin/et.yml b/config/locales/crowdin/et.yml index 8fd841133cd..4c0a47584dd 100644 --- a/config/locales/crowdin/et.yml +++ b/config/locales/crowdin/et.yml @@ -820,7 +820,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 499ebebe1da..d6918546d38 100644 --- a/config/locales/crowdin/eu.yml +++ b/config/locales/crowdin/eu.yml @@ -820,7 +820,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 ffff93aa265..4b9299cad1c 100644 --- a/config/locales/crowdin/fa.yml +++ b/config/locales/crowdin/fa.yml @@ -820,7 +820,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 547f6edaf49..87ee3eb74d1 100644 --- a/config/locales/crowdin/fi.yml +++ b/config/locales/crowdin/fi.yml @@ -820,7 +820,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 9a24c4d2257..25503f7c90d 100644 --- a/config/locales/crowdin/fil.yml +++ b/config/locales/crowdin/fil.yml @@ -820,7 +820,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 a42693b253f..6a6ece1caa2 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,14 +209,14 @@ 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. items: blankslate: - title: "Your list of items is empty" - description: "Start by adding items to the custom field of type hierarchy. Each item can be used to create a hierarchy bellow it. To navigate and create sub-items inside a hierarchy click on the created item." + title: "Votre liste d'articles est vide" + description: "Commencez par ajouter des éléments au champ personnalisé de type hiérarchie. Chaque élément peut être utilisé pour créer une hiérarchie en dessous de lui. Pour naviguer et créer des sous-éléments à l'intérieur d'une hiérarchie, cliquez sur l'élément créé." notice: - remember_items_and_projects: "Remember to set items and projects in the respective tabs for this custom field." + remember_items_and_projects: "N'oubliez pas de définir les éléments et les projets dans les onglets respectifs de ce champ personnalisé." 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" @@ -541,7 +541,7 @@ fr: could_not_be_saved: "Les lots de travaux suivants n'ont pas pu être sauvegardés :" none_could_be_saved: "Aucun des %{total} lots de travaux n'a pu être mis à jour." x_out_of_y_could_be_saved: "%{failing} lots de travaux sur les %{total} n'ont pas pu être mis à jour alors que %{success} l'ont été." - selected_because_descendants: "While %{selected} work packages were selected, in total %{total} work packages are affected which includes descendants." + selected_because_descendants: "Bien que %{selected} lots de travaux aient été sélectionnés, un total de %{total} lots de travaux sont concernés, y compris les descendants." descendant: "descendant de la sélection" move: no_common_statuses_exists: "Il n’y a pas de statut disponible pour tous les lots de travaux sélectionnés. Ce statut ne peut pas être changé." @@ -631,7 +631,7 @@ fr: editable: "Modifiable" field_format: "Format" is_filter: "Utilisé comme filtre" - is_for_all: "For all projects" + is_for_all: "Pour tous les projets" is_required: "Obligatoire" max_length: "Longueur maximale" min_length: "Longueur minimale" @@ -646,8 +646,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" @@ -819,7 +819,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}." @@ -896,7 +896,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." @@ -928,7 +928,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: @@ -1368,7 +1368,7 @@ fr: button_expand_all: "Tout déplier" button_favorite: "Ajouter aux favoris" button_filter: "Filtrer" - button_finish_setup: "Finish setup" + button_finish_setup: "Terminer la configuration" button_generate: "Générer" button_list: "Liste" button_lock: "Verrouiller" @@ -1421,8 +1421,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é. @@ -1655,7 +1655,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é" @@ -1810,8 +1810,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} @@ -1829,7 +1829,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 : @@ -1840,9 +1840,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." @@ -1942,8 +1942,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" @@ -1976,7 +1976,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" @@ -2006,7 +2006,7 @@ fr: label_calendars_and_dates: "Calendriers et dates" label_calendar_show: "Afficher le calendrier" label_category: "Catégorie" - label_completed: Completed + label_completed: Terminé label_consent_settings: "Accord de l'utilisateur" label_wiki_menu_item: Élément de menu wiki label_select_main_menu_item: Sélectionner nouvel élément de menu principal @@ -2050,7 +2050,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" @@ -2058,7 +2058,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" @@ -2155,7 +2155,7 @@ fr: label_here: ici label_hide: "Masquer" label_history: "Historique" - label_hierarchy: "Hierarchy" + label_hierarchy: "Hiérarchie" label_hierarchy_leaf: "Feuille de hiérarchie" label_home: "Accueil" label_subject_or_id: "Objet ou ID" @@ -2167,7 +2167,7 @@ fr: label_inactive: "Désactivé" label_incoming_emails: "Courriels entrants" label_includes: "comporte" - label_incomplete: Incomplete + label_incomplete: Incomplet label_include_sub_projects: Inclure les sous-projets label_index_by_date: "Index par date" label_index_by_title: "Index par titre" @@ -2178,14 +2178,14 @@ fr: label_internal: "Interne" label_introduction_video: "Vidéo de présentation" label_invite_user: "Inviter utilisateur" - label_item: "Item" - label_item_plural: "Items" + label_item: "Élément" + label_item_plural: "Éléments" label_share: "Partager" 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" @@ -2256,7 +2256,7 @@ fr: label_more: "Plus" label_more_than_ago: "il y a plus de quelques jours" label_move_work_package: "Déplacer le Lot de Travaux" - label_my_account: "Account settings" + label_my_account: "Paramètres du compte" label_my_activity: "Mon activité" label_my_account_data: "Info sur mon compte" label_my_avatar: "Mon avatar" @@ -2283,7 +2283,7 @@ fr: label_no_parent_page: "Aucune page parente" label_nothing_display: "Rien à afficher" label_nobody: "personne" - label_not_configured: "Not configured" + label_not_configured: "Non configuré" label_not_found: "non trouvé" label_none: "aucune" label_none_parentheses: "(none)" @@ -2336,7 +2336,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" @@ -3160,13 +3160,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" @@ -3187,13 +3187,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" @@ -3218,13 +3218,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" @@ -3773,16 +3773,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. @@ -3792,9 +3792,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 21ae4399b9e..7024e549c43 100644 --- a/config/locales/crowdin/he.yml +++ b/config/locales/crowdin/he.yml @@ -834,7 +834,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 6187d89c121..396675c52a1 100644 --- a/config/locales/crowdin/hi.yml +++ b/config/locales/crowdin/hi.yml @@ -818,7 +818,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 5f34650c5ef..d8ae06a4bd3 100644 --- a/config/locales/crowdin/hr.yml +++ b/config/locales/crowdin/hr.yml @@ -827,7 +827,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 6c5c0c43959..299b5937652 100644 --- a/config/locales/crowdin/hu.yml +++ b/config/locales/crowdin/hu.yml @@ -817,7 +817,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 838b7c2b14e..833ff09410b 100644 --- a/config/locales/crowdin/id.yml +++ b/config/locales/crowdin/id.yml @@ -806,7 +806,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 bdcff8dad34..8d3fcad9c7c 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,14 +206,14 @@ 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. items: blankslate: - title: "Your list of items is empty" - description: "Start by adding items to the custom field of type hierarchy. Each item can be used to create a hierarchy bellow it. To navigate and create sub-items inside a hierarchy click on the created item." + title: "La tua lista di elementi è vuota" + description: "Inizia aggiungendo elementi al campo personalizzato di tipo gerarchia. Ogni elemento può essere utilizzato per creare una gerarchia sottostante. Per navigare e creare sottoelementi all'interno di una gerarchia, fai clic sull'elemento creato." notice: - remember_items_and_projects: "Remember to set items and projects in the respective tabs for this custom field." + remember_items_and_projects: "Ricorda di impostare elementi e progetti nelle rispettive schede per questo campo personalizzato." text_add_new_custom_field: > Per aggiungere nuovi campi personalizzati a un progetto, è necessario prima crearli. is_enabled_globally: "Abilitato a livello globale" @@ -539,7 +539,7 @@ it: could_not_be_saved: "Le seguenti macro-attività non possono essere salvate:" none_could_be_saved: "Nessuna delle %{total} macro-attività può essere aggiornata." x_out_of_y_could_be_saved: "%{failing} di %{total} macro-attività non possono essere aggiornate, mentre %{success} possono essere aggiornate." - selected_because_descendants: "While %{selected} work packages were selected, in total %{total} work packages are affected which includes descendants." + selected_because_descendants: "Sono selezionate %{selected} macro-attività ma in totale sono interessate %{total} macro-attività, compresi i relativi figli." descendant: "figlio della macro-attività selezionata" move: no_common_statuses_exists: "Nessuno stato disponibile per tutte le macro-attività selezionate. Non è possibile cambiare lo stato." @@ -629,7 +629,7 @@ it: editable: "Modificabile" field_format: "Formato" is_filter: "Usato come filtro" - is_for_all: "For all projects" + is_for_all: "Per tutti i progetti" is_required: "Richiesto" max_length: "Lunghezza massima" min_length: "Lunghezza minima" @@ -644,8 +644,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" @@ -817,7 +817,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}." @@ -894,7 +894,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." @@ -926,7 +926,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: @@ -1366,7 +1366,7 @@ it: button_expand_all: "Espandi tutto" button_favorite: "Aggiunti ai preferiti" button_filter: "Filtro" - button_finish_setup: "Finish setup" + button_finish_setup: "Termina la configurazione" button_generate: "Genera" button_list: "Elenca" button_lock: "Blocca" @@ -1419,8 +1419,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. @@ -1653,7 +1653,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" @@ -1808,8 +1808,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} @@ -1827,7 +1827,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: @@ -1838,9 +1838,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." @@ -1940,8 +1940,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" @@ -1974,7 +1974,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" @@ -2004,7 +2004,7 @@ it: label_calendars_and_dates: "Calendari e date" label_calendar_show: "Mostra Calendario" label_category: "Categoria" - label_completed: Completed + label_completed: Completato label_consent_settings: "Consenso dell'utente" label_wiki_menu_item: Voce di menu wiki label_select_main_menu_item: Seleziona una nuova voce del menu principale @@ -2048,7 +2048,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à" @@ -2056,7 +2056,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" @@ -2153,7 +2153,7 @@ it: label_here: qui label_hide: "Nascondi" label_history: "Registro cronologico" - label_hierarchy: "Hierarchy" + label_hierarchy: "Gerarchia" label_hierarchy_leaf: "Foglia della gerarchia" label_home: "Radice (home)" label_subject_or_id: "Oggetto o ID" @@ -2165,7 +2165,7 @@ it: label_inactive: "Inattivo" label_incoming_emails: "Email in arrivo" label_includes: "include" - label_incomplete: Incomplete + label_incomplete: Incompleto label_include_sub_projects: Includi sottoprogetti label_index_by_date: "Indicizza per data" label_index_by_title: "Indicizza per titolo" @@ -2176,14 +2176,14 @@ it: label_internal: "Interno" label_introduction_video: "Video introduttivo" label_invite_user: "Invita utente" - label_item: "Item" - label_item_plural: "Items" + label_item: "Elemento" + label_item_plural: "Elementi" label_share: "Condividi" 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" @@ -2254,7 +2254,7 @@ it: label_more: "Più" label_more_than_ago: "più di qualche giorno fa" label_move_work_package: "Sposta la macro-attività" - label_my_account: "Account settings" + label_my_account: "Impostazioni account" label_my_activity: "La mia attività" label_my_account_data: "I miei dati dell'account" label_my_avatar: "Il mio avatar" @@ -2281,7 +2281,7 @@ it: label_no_parent_page: "Nessuna pagina genitore" label_nothing_display: "Niente da visualizzare" label_nobody: "nessuno" - label_not_configured: "Not configured" + label_not_configured: "Non configurato" label_not_found: "non trovato" label_none: "nessuno" label_none_parentheses: "(nessuno)" @@ -2334,7 +2334,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" @@ -3158,13 +3158,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à" @@ -3185,13 +3185,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" @@ -3216,13 +3216,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" @@ -3772,16 +3772,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. @@ -3791,9 +3791,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 0086ec18aad..049ed14f777 100644 --- a/config/locales/crowdin/ja.yml +++ b/config/locales/crowdin/ja.yml @@ -809,7 +809,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-es.yml b/config/locales/crowdin/js-es.yml index 4a177b9fb9a..6e301f7be39 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: > - La versión trae varias características y mejoras para usted, por ejemplo
+ La versión trae varias características y mejoras para usted, por ejemplo
ical_sharing_modal: title: "Suscribirse al calendario" inital_setup_error_message: "Se ha producido un error al obtener los datos." diff --git a/config/locales/crowdin/js-fr.yml b/config/locales/crowdin/js-fr.yml index 9366df2f881..4713b1edf71 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.
+ Cette version apporte diverses fonctionnalités et améliorations, p. ex.,
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 f5ec781270d..a93d84c1e76 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.
+ Questa versione offre diverse funzionalità e miglioramenti, come:
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 0d9429c2d54..5e4654ea1c1 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.
+ 이 릴리스는 다음을 비롯한 다양한 기능과 개선 사항을 제공합니다.
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 ed54ebc4445..5ce93da5a2f 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: > - Ta wersja zawiera różne funkcje i ulepszenia m.in.
+ Ta wersja wprowadza różne funkcje i ulepszenia m.in.
ical_sharing_modal: title: "Subskrybuj kalendarz" inital_setup_error_message: "Podczas pobierania danych wystąpił błąd." diff --git a/config/locales/crowdin/js-pt-PT.yml b/config/locales/crowdin/js-pt-PT.yml index 9aaa555b4c7..1ff770497a5 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.
+ A versão traz várias funcionalidades e melhorias para si, por exemplo,
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-uk.yml b/config/locales/crowdin/js-uk.yml index 64d10ef4505..2c1a5d69869 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.
+ Цей випуск включає багато нових функцій і покращень.
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 67fb1a5cf7b..8d0ec26b025 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: > - 此版本为您带来了各种功能和改进,例如:
+ 此版本为您带来了各种功能和改进,例如:
ical_sharing_modal: title: "订阅日历" inital_setup_error_message: "获取数据时发生错误。" diff --git a/config/locales/crowdin/ka.yml b/config/locales/crowdin/ka.yml index a3a713f5f0c..f6070748636 100644 --- a/config/locales/crowdin/ka.yml +++ b/config/locales/crowdin/ka.yml @@ -820,7 +820,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 a1e8122d642..73e038789ef 100644 --- a/config/locales/crowdin/kk.yml +++ b/config/locales/crowdin/kk.yml @@ -820,7 +820,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 45bcd173bef..ea9174ebfd1 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,14 +209,14 @@ 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: '"모든 프로젝트용" 옵션이 선택되었으므로 모든 프로젝트에서 이 사용자 지정 필드가 활성화되었습니다. 개별 프로젝트에 대해 비활성화할 수 없습니다.' items: blankslate: - title: "Your list of items is empty" - description: "Start by adding items to the custom field of type hierarchy. Each item can be used to create a hierarchy bellow it. To navigate and create sub-items inside a hierarchy click on the created item." + title: "항목 목록이 비어 있습니다" + description: "먼저 유형 계층의 사용자 지정 필드에 항목을 추가하여 시작하세요. 각 항목을 사용하여 그 아래에 계층을 만들 수 있습니다. 계층 내에서 하위 항목을 탐색하고 만들려면 생성된 항목을 클릭하세요." notice: - remember_items_and_projects: "Remember to set items and projects in the respective tabs for this custom field." + remember_items_and_projects: "이 사용자 지정 필드의 각 탭에서 항목과 프로젝트를 설정해야 합니다." text_add_new_custom_field: > 프로젝트에 새 사용자 지정 필드를 추가하려면 먼저 해당 필드를 만들어야 합니다. 그래야 이 프로젝트에 해당 필드를 추가할 수 있습니다. is_enabled_globally: "는 세계적으로 사용 가능합니다." @@ -534,7 +534,7 @@ ko: could_not_be_saved: "다음 작업 패키지를 저장할 수 없습니다:" none_could_be_saved: "%{total}개 작업 패키지 중 아무것도 업데이트할 수 없습니다." x_out_of_y_could_be_saved: "%{failing}/%{total}개 작업 패키지를 업데이트할 수 없지만 %{success}개는 성공했습니다." - selected_because_descendants: "While %{selected} work packages were selected, in total %{total} work packages are affected which includes descendants." + selected_because_descendants: "%{selected}개 작업 패키지가 선택되었지만, 하위 작업 패키지를 포함하여 총 %{total}개 작업 패키지가 영향을 받았습니다." descendant: "선택한 항목의 하위 작업 패키지" move: no_common_statuses_exists: "선택한 모든 작업 패키지에 사용 가능한 상태가 없습니다. 해당 상태를 변경할 수 없습니다." @@ -624,7 +624,7 @@ ko: editable: "편집 가능" field_format: "형식" is_filter: "필터사용" - is_for_all: "For all projects" + is_for_all: "모든 프로젝트용" is_required: "필수" max_length: "최대 길이" min_length: "최소 길이" @@ -639,8 +639,8 @@ ko: uid: "고객 ID" secret: "클라이언트 비밀번호" owner: "소유자" - builtin: "Builtin" - enabled: "Active" + builtin: "기본 제공" + enabled: "활성" redirect_uri: "리디렉션 URI" client_credentials_user_id: "클라이언트 자격 증명 사용자 ID" scopes: "범위" @@ -812,7 +812,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} 속성에 부합하지 않습니다." @@ -889,7 +889,7 @@ ko: custom_fields_project: attributes: project_ids: - blank: "Please select a project." + blank: "프로젝트를 선택하세요." custom_actions: only_one_allowed: "(%{name}) 하나의 값만 허용됩니다." empty: "(%{name}) 값은 비워둘 수 없습니다." @@ -921,7 +921,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: @@ -1351,7 +1351,7 @@ ko: button_expand_all: "모두 확장" button_favorite: "즐겨찾기에 추가" button_filter: "필터" - button_finish_setup: "Finish setup" + button_finish_setup: "설정 완료" button_generate: "생성" button_list: "목록" button_lock: "잠금" @@ -1404,8 +1404,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}에 문의하세요. @@ -1620,7 +1620,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: "변경 집합 편집됨" @@ -1775,8 +1775,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}에 대한 변경 사항 기준 @@ -1794,7 +1794,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: > 지금부터 파일 링크(외부 저장소에 저장된 파일)와 관련된 활동이 활동 탭에 표시됩니다. 다음은 이미 존재하는 링크와 관련된 활동을 나타냅니다. @@ -1805,9 +1805,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: "질문이 있으신가요? 문의해 주세요." @@ -1907,8 +1907,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: "모두" @@ -1941,7 +1941,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: "사용 가능한 포럼" @@ -1971,7 +1971,7 @@ ko: label_calendars_and_dates: "캘린더와 날짜" label_calendar_show: "달력 표시" label_category: "카테고리" - label_completed: Completed + label_completed: 완료 label_consent_settings: "사용자 동의" label_wiki_menu_item: 위키 메뉴 항목 label_select_main_menu_item: 새 기본 메뉴 항목 선택 @@ -2015,7 +2015,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: "작업 패키지 유형에 이 필드 추가" @@ -2023,7 +2023,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: "날짜" @@ -2120,7 +2120,7 @@ ko: label_here: 여기 label_hide: "숨기기" label_history: "기록" - label_hierarchy: "Hierarchy" + label_hierarchy: "계층" label_hierarchy_leaf: "계층 구조 리프" label_home: "홈" label_subject_or_id: "제목 또는 ID" @@ -2132,7 +2132,7 @@ ko: label_inactive: "비활성화" label_incoming_emails: "들어오는 이메일" label_includes: "포함" - label_incomplete: Incomplete + label_incomplete: 미완료 label_include_sub_projects: 하위 프로젝트 포함 label_index_by_date: "날짜별 색인" label_index_by_title: "제목별 색인" @@ -2143,14 +2143,14 @@ ko: label_internal: "내부" label_introduction_video: "소개 동영상" label_invite_user: "사용자 초대" - label_item: "Item" - label_item_plural: "Items" + label_item: "항목" + label_item_plural: "항목" label_share: "공유" 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: "언어" @@ -2221,7 +2221,7 @@ ko: label_more: "기타" label_more_than_ago: "일 이상 전" label_move_work_package: "작업 패키지 이동" - label_my_account: "Account settings" + label_my_account: "계정 설정" label_my_activity: "내 활동" label_my_account_data: "내 계정 데이터" label_my_avatar: "내 아바타" @@ -2248,7 +2248,7 @@ ko: label_no_parent_page: "부모 페이지 없음" label_nothing_display: "표시할 것이 없음" label_nobody: "아무도 없음" - label_not_configured: "Not configured" + label_not_configured: "구성되지 않음" label_not_found: "찾을 수 없음" label_none: "없음" label_none_parentheses: "(없음)" @@ -2301,7 +2301,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: "프로젝트 특성" @@ -3120,13 +3120,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: "작업 패키지 속성" @@ -3147,13 +3147,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 보기" @@ -3178,13 +3178,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: "사용자의 기본 표준 시간대" @@ -3733,16 +3733,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을 사용하세요. @@ -3752,9 +3752,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 73a168fd0c5..e53ac9a5ec3 100644 --- a/config/locales/crowdin/lt.yml +++ b/config/locales/crowdin/lt.yml @@ -831,7 +831,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 40efb73f7a7..6f6eddae1a2 100644 --- a/config/locales/crowdin/lv.yml +++ b/config/locales/crowdin/lv.yml @@ -827,7 +827,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 73dd99be47f..d6b378e1da6 100644 --- a/config/locales/crowdin/mn.yml +++ b/config/locales/crowdin/mn.yml @@ -820,7 +820,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 9225b65f9f6..3c8537786c3 100644 --- a/config/locales/crowdin/ms.yml +++ b/config/locales/crowdin/ms.yml @@ -811,7 +811,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 09bf55ad3e1..f2c3f0c93ad 100644 --- a/config/locales/crowdin/ne.yml +++ b/config/locales/crowdin/ne.yml @@ -820,7 +820,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 fdd986fdd89..54e14252dd5 100644 --- a/config/locales/crowdin/nl.yml +++ b/config/locales/crowdin/nl.yml @@ -817,7 +817,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 d8bf0af69c8..b9a74f5d877 100644 --- a/config/locales/crowdin/no.yml +++ b/config/locales/crowdin/no.yml @@ -819,7 +819,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 83a13b572cc..c9b345c4e78 100644 --- a/config/locales/crowdin/pl.yml +++ b/config/locales/crowdin/pl.yml @@ -33,7 +33,7 @@ pl: color_theme_custom: "(Niestandardowe)" tab_interface: "Interfejs" tab_branding: "Branding" - tab_pdf_export_styles: "Styl eksportu PDF" + tab_pdf_export_styles: "Style eksportu PDF" colors: primary-button-color: "Przycisk główny" accent-color: "Akcent" @@ -831,7 +831,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: "jest przeznaczony dla wszystkich. Nie można modyfikować." + 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}." @@ -940,7 +940,7 @@ pl: blank: "jest obowiązkowy. Wybierz nazwę." not_unique: "jest już w użyciu. Wybierz inną nazwę." meeting: - error_conflict: "Nie można zapisać, ponieważ w tym czasie spotkanie zostało zaktualizowane przez kogoś innego. Odśwież stronę." + 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: @@ -1454,7 +1454,7 @@ pl: title: Zgoda użytkownika decline_warning_message: Odrzuciłeś zgodę i wylogowano Cię. 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). Przypomni mu się o tym, gdy zaloguje się następnym razem. + 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}. @@ -1878,7 +1878,7 @@ 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: "Obliczenie % Ukończenia jest teraz ważone Pracą." + 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} @@ -1908,9 +1908,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: >- - Podrzędne pakiety robocze bez Pracy są ignorowane. + Podrzędne pakiety robocze bez parametru Praca są ignorowane. total_percent_complete_mode_changed_to_simple_average: >- - Wartości Pracy podrzędnych pakietów roboczych są ignorowane. + 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." @@ -2011,7 +2011,7 @@ pl: label_additional_workflow_transitions_for_author: "Dodatkowe przejścia dozwolone, gdy użytkownik jest autorem" label_administration: "Administracja" 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 motyw, ale nie możemy zapewnić zgodności z minimalnymi wymaganiami w kwestii kontrastu (WCAG 2)." + 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" @@ -2118,7 +2118,7 @@ pl: label_copy_project: "Kopiuj projekt" label_core_version: "Wersja bazowa" label_core_build: "Kompilacja bazowa" - label_created_by: "Utworzone przez %{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" @@ -2235,7 +2235,7 @@ pl: label_inactive: "Nieaktywny" label_incoming_emails: "Przychodzące e-maile" label_includes: "obejmuje" - label_incomplete: Niekompletny + label_incomplete: Nie ukończono label_include_sub_projects: Uwzględnij podprojekty label_index_by_date: "Indeks wg daty" label_index_by_title: "Indeks tytułów" @@ -3293,7 +3293,7 @@ pl: 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: >- - Praca jest ignorowana, a całkowita wartość % Ukończenia będzie średnią arytmetyczną z % Ukończenia wartości pakietów roboczych w hierarchii. + 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" diff --git a/config/locales/crowdin/pt-BR.yml b/config/locales/crowdin/pt-BR.yml index 74cad8099b7..e53245dc88e 100644 --- a/config/locales/crowdin/pt-BR.yml +++ b/config/locales/crowdin/pt-BR.yml @@ -818,7 +818,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}." diff --git a/config/locales/crowdin/pt-PT.yml b/config/locales/crowdin/pt-PT.yml index a546c1b057f..7923903b520 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,14 +207,14 @@ 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. items: blankslate: - title: "Your list of items is empty" - description: "Start by adding items to the custom field of type hierarchy. Each item can be used to create a hierarchy bellow it. To navigate and create sub-items inside a hierarchy click on the created item." + title: "A sua lista de itens está vazia" + description: "Comece por adicionar itens ao campo personalizado do tipo hierarquia. Cada item pode ser utilizado para criar uma hierarquia abaixo dele. Para navegar e criar subitens dentro de uma hierarquia, clique no item criado." notice: - remember_items_and_projects: "Remember to set items and projects in the respective tabs for this custom field." + remember_items_and_projects: "Lembre-se de definir itens e projetos nos respetivos separadores para este campo personalizado." 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" @@ -540,7 +540,7 @@ pt-PT: could_not_be_saved: "Os seguintes pacotes de trabalho não puderam ser guardados:" none_could_be_saved: "Não foi possível atualizar nenhum dos %{total} pacotes de trabalho." x_out_of_y_could_be_saved: "%{failing} dos %{total} pacotes de trabalho não puderam ser atualizados, e %{success} puderam." - selected_because_descendants: "While %{selected} work packages were selected, in total %{total} work packages are affected which includes descendants." + selected_because_descendants: "Enquanto %{selected} pacotes de trabalho foram selecionados, %{total} pacotes de trabalho foram afetados, o que inclui descendentes." descendant: "descendente de selecionados" move: no_common_statuses_exists: "Não há nenhum status disponível para todos os pacotes de trabalho selecionados. O seu status não pode ser alterado." @@ -630,7 +630,7 @@ pt-PT: editable: "Editável" field_format: "Formato" is_filter: "Usado como filtro" - is_for_all: "For all projects" + is_for_all: "Para todos os projetos" is_required: "Obrigatório" max_length: "Tamanho máximo" min_length: "Tamanho mínimo" @@ -645,8 +645,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" @@ -818,7 +818,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}." @@ -895,7 +895,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." @@ -927,7 +927,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: @@ -1367,7 +1367,7 @@ pt-PT: button_expand_all: "Expandir Tudo" button_favorite: "Adicionar aos favoritos" button_filter: "Filtro" - button_finish_setup: "Finish setup" + button_finish_setup: "Concluir configuração" button_generate: "Gerar" button_list: "Lista" button_lock: "Bloquear" @@ -1420,8 +1420,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. @@ -1654,7 +1654,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" @@ -1809,8 +1809,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 @@ -1828,7 +1828,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: @@ -1839,9 +1839,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." @@ -1941,8 +1941,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" @@ -1975,7 +1975,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" @@ -2005,7 +2005,7 @@ pt-PT: label_calendars_and_dates: "Calendários e datas" label_calendar_show: "Mostrar calendário" label_category: "Categoria" - label_completed: Completed + label_completed: Concluído label_consent_settings: "Consentimento do utilizador" label_wiki_menu_item: Item do menu wiki label_select_main_menu_item: Seleccione novo item do menu principal @@ -2049,7 +2049,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" @@ -2057,7 +2057,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" @@ -2154,7 +2154,7 @@ pt-PT: label_here: aqui label_hide: "Ocultar" label_history: "Histórico" - label_hierarchy: "Hierarchy" + label_hierarchy: "Hierarquia" label_hierarchy_leaf: "Folha da hierarquia" label_home: "Início" label_subject_or_id: "ID ou Assunto" @@ -2166,7 +2166,7 @@ pt-PT: label_inactive: "Inativo" label_incoming_emails: "E-mails recebidos" label_includes: "inclui" - label_incomplete: Incomplete + label_incomplete: Incompleto label_include_sub_projects: Incluir subprojetos label_index_by_date: "Índice por data" label_index_by_title: "Índice por título" @@ -2178,13 +2178,13 @@ pt-PT: label_introduction_video: "Vídeo introdutório" label_invite_user: "Convidar utilizador" label_item: "Item" - label_item_plural: "Items" + label_item_plural: "Itens" label_share: "Partilhar" 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" @@ -2255,7 +2255,7 @@ pt-PT: label_more: "Mais" label_more_than_ago: "mais do que dias atrás" label_move_work_package: "Mover tarefa" - label_my_account: "Account settings" + label_my_account: "Definições da conta" label_my_activity: "A minha atividade" label_my_account_data: "Dados da minha conta" label_my_avatar: "O meu avatar" @@ -2282,7 +2282,7 @@ pt-PT: label_no_parent_page: "Sem página pai" label_nothing_display: "Nada para exibir" label_nobody: "ninguém" - label_not_configured: "Not configured" + label_not_configured: "Não configurado" label_not_found: "não encontrado" label_none: "nenhum" label_none_parentheses: "(nenhum)" @@ -2335,7 +2335,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" @@ -3156,13 +3156,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" @@ -3183,13 +3183,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" @@ -3214,13 +3214,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" @@ -3770,16 +3770,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. @@ -3789,9 +3789,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 941a2f49864..50b87dc9695 100644 --- a/config/locales/crowdin/ro.yml +++ b/config/locales/crowdin/ro.yml @@ -827,7 +827,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 67db2a30f75..cfac7a0a2f2 100644 --- a/config/locales/crowdin/ru.yml +++ b/config/locales/crowdin/ru.yml @@ -212,8 +212,8 @@ ru: description: Это пользовательское поле включено во всех проектах, так как отмечена опция «Для всех проектов». Его нельзя отключить для отдельных проектов. items: blankslate: - title: "Your list of items is empty" - description: "Start by adding items to the custom field of type hierarchy. Each item can be used to create a hierarchy bellow it. To navigate and create sub-items inside a hierarchy click on the created item." + title: "Ваш список элементов пуст" + description: "Начните с добавления элементов в настраиваемое поле иерархии. Каждый элемент может быть использован для создания иерархии ниже его. Чтобы переместить и создать подпункты внутри иерархии, нажмите на созданный элемент." notice: remember_items_and_projects: "Не забудьте задать элементы и проекты на соответствующих вкладках для этого настраиваемого поля." text_add_new_custom_field: > @@ -833,7 +833,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}." @@ -2248,8 +2248,8 @@ ru: label_internal: "Внутренние" label_introduction_video: "Вводное видео" label_invite_user: "Пригласить пользователя" - label_item: "Item" - label_item_plural: "Items" + label_item: "Элемент" + label_item_plural: "Элементы" label_share: "Поделиться" label_share_project_list: "Поделитесь списком проектов" label_share_work_package: "Поделиться пакетом работ" @@ -2326,7 +2326,7 @@ ru: label_more: "Более" label_more_than_ago: "больше, чем дней назад" label_move_work_package: "Переместить пакет работ" - label_my_account: "Account settings" + label_my_account: "Настройки учетной записи" label_my_activity: "Моя активность" label_my_account_data: "Данные моей учетной записи" label_my_avatar: "Мой аватар" diff --git a/config/locales/crowdin/rw.yml b/config/locales/crowdin/rw.yml index f65fe6dde92..38927ca3128 100644 --- a/config/locales/crowdin/rw.yml +++ b/config/locales/crowdin/rw.yml @@ -820,7 +820,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 79b93e1d9f6..9d585952884 100644 --- a/config/locales/crowdin/si.yml +++ b/config/locales/crowdin/si.yml @@ -820,7 +820,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 752f32910ed..1dd453c1e58 100644 --- a/config/locales/crowdin/sk.yml +++ b/config/locales/crowdin/sk.yml @@ -834,7 +834,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 9c1b3f83818..d938223140a 100644 --- a/config/locales/crowdin/sl.yml +++ b/config/locales/crowdin/sl.yml @@ -831,7 +831,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 5b2d7ed5cce..e76f1b1d2c1 100644 --- a/config/locales/crowdin/sr.yml +++ b/config/locales/crowdin/sr.yml @@ -827,7 +827,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 9bc566a8b8c..854cb3d4da2 100644 --- a/config/locales/crowdin/sv.yml +++ b/config/locales/crowdin/sv.yml @@ -819,7 +819,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 07c9436517e..5645be42296 100644 --- a/config/locales/crowdin/th.yml +++ b/config/locales/crowdin/th.yml @@ -813,7 +813,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 76a52639957..aa6dc9dc727 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" @@ -213,7 +213,7 @@ tr: description: This custom field is enabled in all projects since the "For all projects" option is checked. It cannot be deactivated for individual projects. items: blankslate: - title: "Your list of items is empty" + title: "Öğeler listeniz boş" description: "Start by adding items to the custom field of type hierarchy. Each item can be used to create a hierarchy bellow it. To navigate and create sub-items inside a hierarchy click on the created item." notice: remember_items_and_projects: "Remember to set items and projects in the respective tabs for this custom field." @@ -316,11 +316,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: @@ -335,13 +335,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:" @@ -372,8 +372,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: @@ -410,11 +410,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." @@ -819,7 +819,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." @@ -1191,8 +1191,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 4855728b075..5ad7ea5fe89 100644 --- a/config/locales/crowdin/uk.yml +++ b/config/locales/crowdin/uk.yml @@ -828,7 +828,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}" @@ -1450,8 +1450,8 @@ uk: failure_message: Згода не отримана, продовження неможливе. title: Згода користувача decline_warning_message: Ви відхилили згоду і вийшли з системи. - user_has_consented: Користувач надав свою згоду на [налаштований текст інформації про згоду](consent_settings). - not_yet_consented: Користувач ще не надав свою згоду на [налаштований текст інформації про згоду] (налаштування_згоди). Він отримає нагадування під час наступного входу. + user_has_consented: Користувач надав згоду на [налаштований текст інформації про згоду](consent_settings). + not_yet_consented: Користувач ще не надав згоду на [налаштований текст інформації про згоду] (consent_settings). Він отримає нагадування під час наступного входу. contact_mail_instructions: Визначте адресу електронної пошти, на яку користувачі можуть звертатися, для запитів на зміну або видалення даних. contact_your_administrator: Зверніться до свого адміністратора, якщо ви хочете, щоб ваш обліковий запис був видалений. contact_this_mail_address: Будь ласка зв'яжіться %{mail_address} якщо ви бажаєте, щоб ваш обліковий запис був видалений. @@ -1875,8 +1875,8 @@ uk: progress_mode_changed_to_status_based: "Обчислення прогресу оновлено" status_changed: "Статус «%{status_name}»" system_update: "Оновлення системи OpenProject" - total_percent_complete_mode_changed_to_work_weighted_average: "Під час обчислення підсумків атрибута «% виконання» тепер враховується значення атрибута «Робота»." - total_percent_complete_mode_changed_to_simple_average: "Під час обчислення підсумків атрибута «% виконання» тепер ґрунтується на середньому арифметичному значень лише атрибута «% виконання»." + 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} @@ -3284,13 +3284,13 @@ uk: setting_sys_api_enabled: "Увімкнути веб-службу керування сховищем" setting_sys_api_description: "Веб-сервіс управління сховищем забезпечує інтеграцію та авторизацію користувача для доступу до сховищ." setting_time_format: "Час" - setting_total_percent_complete_mode: "Обчислення підсумків ієрархів «% виконання»" - 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: "Середнє арифметичне" 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 e55207a8853..e01ffd55b4e 100644 --- a/config/locales/crowdin/uz.yml +++ b/config/locales/crowdin/uz.yml @@ -820,7 +820,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 2249651b1fe..e2fdc66d7c0 100644 --- a/config/locales/crowdin/vi.yml +++ b/config/locales/crowdin/vi.yml @@ -815,7 +815,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 0b34b6f0c9c..7b3abaa784f 100644 --- a/config/locales/crowdin/zh-CN.yml +++ b/config/locales/crowdin/zh-CN.yml @@ -809,7 +809,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 2a3be949e06..9416c59ec73 100644 --- a/config/locales/crowdin/zh-TW.yml +++ b/config/locales/crowdin/zh-TW.yml @@ -811,7 +811,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 613ada194fd..0d88e67097f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -897,7 +897,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-6-0/README.md b/docs/release-notes/14-6-0/README.md index f1200affcc9..e08d50f6fbd 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/frontend/package-lock.json b/frontend/package-lock.json index 96b55adb72a..89e4ba289d2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -5588,9 +5588,9 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.17.9", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.9.tgz", - "integrity": "sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w==", + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==", "dev": true }, "node_modules/@types/mime": { @@ -10272,9 +10272,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.9.0.tgz", - "integrity": "sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -10304,9 +10304,9 @@ "dev": true }, "node_modules/eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "dependencies": { "@rtsao/scc": "^1.1.0", @@ -10317,7 +10317,7 @@ "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", + "eslint-module-utils": "^2.12.0", "hasown": "^2.0.2", "is-core-module": "^2.15.1", "is-glob": "^4.0.3", @@ -10326,13 +10326,14 @@ "object.groupby": "^1.0.3", "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -15439,9 +15440,9 @@ } }, "node_modules/moment-timezone": { - "version": "0.5.45", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", - "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "version": "0.5.46", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.46.tgz", + "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==", "dependencies": { "moment": "^2.29.4" }, @@ -26005,9 +26006,9 @@ "dev": true }, "@types/lodash": { - "version": "4.17.9", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.9.tgz", - "integrity": "sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w==", + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==", "dev": true }, "@types/mime": { @@ -29606,9 +29607,9 @@ } }, "eslint-module-utils": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.9.0.tgz", - "integrity": "sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "requires": { "debug": "^3.2.7" @@ -29632,9 +29633,9 @@ "dev": true }, "eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "requires": { "@rtsao/scc": "^1.1.0", @@ -29645,7 +29646,7 @@ "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", + "eslint-module-utils": "^2.12.0", "hasown": "^2.0.2", "is-core-module": "^2.15.1", "is-glob": "^4.0.3", @@ -29654,6 +29655,7 @@ "object.groupby": "^1.0.3", "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "dependencies": { @@ -33362,9 +33364,9 @@ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" }, "moment-timezone": { - "version": "0.5.45", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", - "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "version": "0.5.46", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.46.tgz", + "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==", "requires": { "moment": "^2.29.4" } diff --git a/frontend/src/global_styles/content/_tables.sass b/frontend/src/global_styles/content/_tables.sass index fc1f477de2b..18725c164da 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_mobile.sass b/frontend/src/global_styles/layout/_base_mobile.sass index 2e17194bb34..0eb5ec9de40 100644 --- a/frontend/src/global_styles/layout/_base_mobile.sass +++ b/frontend/src/global_styles/layout/_base_mobile.sass @@ -47,9 +47,6 @@ padding-left: 15px padding-right: 15px - #main - grid-template-columns: auto - #breadcrumb, .hidden-for-mobile display: none !important @@ -66,6 +63,9 @@ display: none !important @media screen and (max-width: $breakpoint-lg) + #main + grid-template-columns: auto + #content:has(#content-bodyRight > *) grid-template-columns: 1fr auto diff --git a/frontend/src/global_styles/layout/_main_menu.sass b/frontend/src/global_styles/layout/_main_menu.sass index be0d5a2a151..95be3b1c753 100644 --- a/frontend/src/global_styles/layout/_main_menu.sass +++ b/frontend/src/global_styles/layout/_main_menu.sass @@ -191,17 +191,17 @@ $arrow-left-width: 40px padding: 10px 10px 0 10px height: calc(var(--main-menu-item-height) + 10px) -.main-menu--arrow-left-to-project - display: inline-block - width: $arrow-left-width - float: left - border-radius: 3px - padding-left: 14px - padding-right: 14px - border: 1px solid transparent + .main-menu--arrow-left-to-project + display: inline-block + width: $arrow-left-width + float: left + border-radius: 3px + padding-left: 14px + padding-right: 14px + border: 1px solid transparent - &:hover, &:focus, &:active - @include main-menu-hover + &:hover, &:focus, &:active + @include main-menu-hover a.main-menu--parent-node border: 1px solid transparent diff --git a/lib/api/v3/custom_fields/hierarchy/hierarchy_item_representer.rb b/lib/api/v3/custom_fields/hierarchy/hierarchy_item_representer.rb new file mode 100644 index 00000000000..bf1c63b26e2 --- /dev/null +++ b/lib/api/v3/custom_fields/hierarchy/hierarchy_item_representer.rb @@ -0,0 +1,43 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See COPYRIGHT and LICENSE files for more details. +#++ + +module API + module V3 + module CustomFields + module Hierarchy + class HierarchyItemRepresenter < ::API::Decorators::Single + def _type + "HierarchyItem" + end + + property :id + end + end + end + end +end diff --git a/lib/api/v3/utilities/custom_field_injector.rb b/lib/api/v3/utilities/custom_field_injector.rb index 8cb34ef32e4..55cfa7a5272 100644 --- a/lib/api/v3/utilities/custom_field_injector.rb +++ b/lib/api/v3/utilities/custom_field_injector.rb @@ -58,7 +58,7 @@ module API "user" => "::API::V3::Principals::PrincipalRepresenterFactory", "version" => "::API::V3::Versions::VersionRepresenter", "list" => "::API::V3::CustomOptions::CustomOptionRepresenter", - "hierarchy" => "::API::V3::HierarchyItems::HierarchyItemRepresenter" + "hierarchy" => "::API::V3::CustomFields::Hierarchy::HierarchyItemRepresenter" }.freeze class << self diff --git a/lookbook/docs/patterns/02-forms.md.erb b/lookbook/docs/patterns/02-forms.md.erb index 81a134ef375..5008f1872a8 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/auth_saml/config/locales/crowdin/af.yml b/modules/auth_saml/config/locales/crowdin/af.yml index 370f3e15263..21412aa41fc 100644 --- a/modules/auth_saml/config/locales/crowdin/af.yml +++ b/modules/auth_saml/config/locales/crowdin/af.yml @@ -98,7 +98,7 @@ af: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/ar.yml b/modules/auth_saml/config/locales/crowdin/ar.yml index 8da93bee875..c0b94d20711 100644 --- a/modules/auth_saml/config/locales/crowdin/ar.yml +++ b/modules/auth_saml/config/locales/crowdin/ar.yml @@ -98,7 +98,7 @@ ar: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/az.yml b/modules/auth_saml/config/locales/crowdin/az.yml index 2cff5f1eac0..6ea9f7c1e17 100644 --- a/modules/auth_saml/config/locales/crowdin/az.yml +++ b/modules/auth_saml/config/locales/crowdin/az.yml @@ -98,7 +98,7 @@ az: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/be.yml b/modules/auth_saml/config/locales/crowdin/be.yml index ec3cdd401ac..ba9e8df0b64 100644 --- a/modules/auth_saml/config/locales/crowdin/be.yml +++ b/modules/auth_saml/config/locales/crowdin/be.yml @@ -98,7 +98,7 @@ be: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/bg.yml b/modules/auth_saml/config/locales/crowdin/bg.yml index 0ad25df0e77..221b67f1f0c 100644 --- a/modules/auth_saml/config/locales/crowdin/bg.yml +++ b/modules/auth_saml/config/locales/crowdin/bg.yml @@ -98,7 +98,7 @@ bg: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/ca.yml b/modules/auth_saml/config/locales/crowdin/ca.yml index 78da8916b1e..7d8f5e78518 100644 --- a/modules/auth_saml/config/locales/crowdin/ca.yml +++ b/modules/auth_saml/config/locales/crowdin/ca.yml @@ -98,7 +98,7 @@ ca: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/ckb-IR.yml b/modules/auth_saml/config/locales/crowdin/ckb-IR.yml index 9f2d10eda45..663c4e2039b 100644 --- a/modules/auth_saml/config/locales/crowdin/ckb-IR.yml +++ b/modules/auth_saml/config/locales/crowdin/ckb-IR.yml @@ -98,7 +98,7 @@ ckb-IR: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/cs.yml b/modules/auth_saml/config/locales/crowdin/cs.yml index 9545f4b8531..73a4608ce85 100644 --- a/modules/auth_saml/config/locales/crowdin/cs.yml +++ b/modules/auth_saml/config/locales/crowdin/cs.yml @@ -98,7 +98,7 @@ cs: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/da.yml b/modules/auth_saml/config/locales/crowdin/da.yml index 46521580e4b..f4894c1ad46 100644 --- a/modules/auth_saml/config/locales/crowdin/da.yml +++ b/modules/auth_saml/config/locales/crowdin/da.yml @@ -98,7 +98,7 @@ da: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/de.yml b/modules/auth_saml/config/locales/crowdin/de.yml index c84a76fad75..da9a749b6f9 100644 --- a/modules/auth_saml/config/locales/crowdin/de.yml +++ b/modules/auth_saml/config/locales/crowdin/de.yml @@ -6,21 +6,21 @@ de: identifier: Kennung secret: Geheim scope: Geltungsbereich - assertion_consumer_service_url: ACS (Assertion consumer service) URL + assertion_consumer_service_url: ACS (Assertion Consumer Service) URL limit_self_registration: Selbstregistrierung begrenzen - sp_entity_id: Service entity ID + sp_entity_id: Entity-ID des Services metadata_url: Metadaten-URL des Identitätsanbieters name_identifier_format: Format der Namenskennung idp_sso_service_url: Endpunkt für die Anmeldung beim Identitätsanbieter idp_slo_service_url: Endpunkt für die Abmeldung beim Identitätsanbieter idp_cert: Öffentliches Zertifikat des Identitätsanbieters - authn_requests_signed: Sign SAML AuthnRequests + authn_requests_signed: SAML AuthnRequests signieren want_assertions_signed: Signierte Antworten erfordern want_assertions_encrypted: Verschlüsselte Antworten erfordern certificate: Von OpenProject verwendetes Zertifikat für SAML-Anfragen private_key: Zugehöriger privater Schlüssel für OpenProject SAML-Anfragen signature_method: Signatur-Algorithmus - digest_method: Digest algorithm + digest_method: Digest-Algorithmus format: "Format" icon: "Benutzerdefiniertes Symbol" activerecord: @@ -62,15 +62,15 @@ de: requested_attributes: Angeforderte Attribute attribute_mapping: Attributzuordnung attribute_mapping_text: > - The following fields control which attributes provided by the SAML identity provider are used to provide user attributes in OpenProject + Die folgenden Felder steuern, welche vom SAML-Identitätsanbieter bereitgestellten Attribute verwendet werden, um Benutzerattribute in OpenProject bereitzustellen metadata: - dialog: "This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider:" + dialog: "Dies ist die URL, unter der die OpenProject SAML-Metadaten verfügbar sind. Sie können sie auch verwenden, um Ihren Identitätsanbieter zu konfigurieren:" upsale: description: OpenProject mit einem SAML-Identitätsanbieter verbinden request_attributes: title: 'Angeforderte Attribute' legend: > - These attributes are added to the SAML XML metadata to signify to the identify provider which attributes OpenProject requires. You may still need to explicitly configure your identity provider to send these attributes. Please refer to your IdP's documentation. + Diese Attribute werden zu den SAML-XML-Metadaten hinzugefügt, um dem Identitätsanbieter zu signalisieren, welche Attribute OpenProject benötigt. Möglicherweise müssen Sie Ihren Identitätsanbieter noch explizit so konfigurieren, dass er diese Attribute sendet. Bitte lesen Sie dazu die Dokumentation Ihres Anbieters. name: 'Angeforderter Attributschlüssel' format: 'Attributformat' section_headers: @@ -78,47 +78,47 @@ de: attributes: "Attribute" section_texts: display_name: "Konfigurieren Sie den Anzeigenamen des SAML-Anbieters." - metadata: "Pre-fill configuration using a metadata URL or by pasting metadata XML" - metadata_form: "If your identity provider has a metadata endpoint or XML download, add it below to pre-fill the configuration." - metadata_form_banner: "Editing the metadata may override existing values in other sections. " - configuration: "Configure the endpoint URLs for the identity provider, certificates, and further SAML options." - configuration_metadata: "This information has been pre-filled using the supplied metadata. In most cases, they do not require editing." - encryption: "Configure assertion signatures and encryption for SAML requests and responses." - encryption_form: "You may optionally want to encrypt the assertion response, or have requests from OpenProject signed." - mapping: "Manually adjust the mapping between the SAML response and user attributes in OpenProject." - requested_attributes: "Define the set of attributes to be requested in the SAML request sent to your identity provider." - seeded_from_env: "This provider was seeded from the environment configuration. It cannot be edited." + metadata: "Vorkonfigurieren der SAML-Anbindung mithilfe einer Metadaten-URL oder durch Hochladen von Metadaten-XML" + metadata_form: "Wenn Ihr Identitätsanbieter über einen Metadaten-Endpunkt oder einen XML-Download verfügt, fügen Sie ihn unten hinzu, um die Konfiguration daraus zu erzeugen." + metadata_form_banner: "Die Bearbeitung der Metadaten kann bestehende Werte in anderen Abschnitten überschreiben." + configuration: "Konfigurieren Sie die URLs für den Identitätsanbieter, dessen Zertifikate sowie weitere SAML-Optionen." + configuration_metadata: "Diese Informationen wurden bereits mit den mitgelieferten Metadaten ausgefüllt. In den meisten Fällen müssen sie nicht bearbeitet werden." + encryption: "Konfigurieren Sie Signaturen der SAML-Assertions sowie Verschlüsselung für SAML-Anfragen und -Antworten." + encryption_form: "Optional können Sie die Antworten des Identitätsproviders verschlüsseln oder Anfragen von OpenProject signieren lassen." + mapping: "Passen Sie die Zuordnung von Benutzerattributen zwischen der SAML-Antwort und OpenProject manuell an." + requested_attributes: "Definieren Sie die Attribute, die in der an Ihren Identitätsanbieter gesendeten SAML-Anfrage angefordert werden sollen." + seeded_from_env: "Dieser Anbieter wurde über Umgebungsvariablen konfiguriert. Er kann nicht in der Oberfläche bearbeitet werden." settings: metadata_none: "Ich habe keine Metadaten" metadata_url: "Metadaten-URL" metadata_xml: "Metadaten-XML" instructions: documentation_link: > - Please refer to our [documentation on configuring SAML providers](docs_url) for more information on these configuration options. + Weitere Informationen zu diesen Optionen finden Sie in unserer [Dokumentation zur Konfiguration von SAML](docs_url). display_name: > - The name of the provider. This will be displayed as the login button and in the list of providers. + Der Name des Anbieters. Dieser wird in der Login-Schaltfläche und in der Liste der Anbieter angezeigt. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Ihr Identitätsanbieter verfügt nicht über einen Metadaten-Endpunkt oder eine XML-Download-Option. Sie können die Konfiguration händisch fortsetzen. metadata_url: > Ihr Identitätsanbieter stellt eine Metadaten-URL zur Verfügung. metadata_xml: > Ihr Identitätsanbieter bietet einen XML-Download für Metadaten an. limit_self_registration: > - If enabled users can only register using this provider if the self registration setting allows for it. + Wenn aktiviert, können sich Benutzer nur dann mit diesem Anbieter registrieren, wenn die Einstellung zur Selbstregistrierung dies zulässt. sp_entity_id: > - The entity ID of the service provider (SP). Sometimes also referred to as Audience. This is the unique client identifier of the OpenProject instance. + Die Entity-ID des Services Providers (SP). Wird manchmal auch als Audience bezeichnet. Dies ist der eindeutige Client-Identifier der OpenProject-Instanz. idp_sso_service_url: > Die URL des Endpunkts für die Anmeldung beim Identitätsanbieter. idp_slo_service_url: > Die URL des Endpunkts für die Anmeldung beim Identitätsanbieter. idp_cert: > - Enter the X509 PEM-formatted public certificate of the identity provider. You can enter multiple certificates by separating them with a newline. + Geben Sie das öffentliche X509 PEM formatierte Zertifikat des Identitätsanbieters ein. Sie können mehrere Zertifikate eingeben, indem Sie sie durch einen Zeilenumbruch trennen. name_identifier_format: > - Set the name identifier format to be used for the SAML assertion. + Legen Sie das Format des Namensbezeichners (Name identifier) fest, der für die SAML-Assertion verwendet werden soll. sp_metadata_endpoint: > - This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider. + Dies ist die URL, unter der die OpenProject SAML-Metadaten verfügbar sind. Sie können sie auch verwenden, um Ihren Identitätsanbieter zu konfigurieren. mapping: > - Configure the mapping between the SAML response and user attributes in OpenProject. You can configure multiple attribute names to look for. OpenProject will choose the first available attribute from the SAML response. + Konfigurieren Sie die Zuordnung der Benutzerattribute zwischen der SAML-Antwort und OpenProject. Sie können mehrere Attributnamen konfigurieren, nach denen gesucht werden soll. OpenProject wird das erste verfügbare Attribut aus der SAML-Antwort auswählen. mapping_login: > Als Login des Nutzers genutztes Attribut der SAML-Response. mapping_mail: > @@ -128,27 +128,27 @@ de: mapping_lastname: > Als Nachname des Nutzers genutztes Attribut der SAML-Response. mapping_uid: > - SAML attribute to use for the internal user ID. Leave empty to use the name_id attribute instead + Name des Attributs in der SAML-Antwort, das für die interne Benutzer-ID verwendet werden soll. Leer lassen, um stattdessen das Attribut des Namensbezeichners (Name identifier) zu verwenden request_uid: > - SAML attribute to request for the internal user ID. By default, the name_id will be used for this field. + Attribut aus der SAML-Antwort, das für die interne Benutzer-ID abgefragt wird. Standardmäßig wird der Namensbezeichner (Name identifier) für dieses Feld verwendet. requested_attributes: > - These attributes are added to the SAML request XML to communicate to the identity provider which attributes OpenProject requires. + Diese Attribute werden der SAML-Anfrage-XML hinzugefügt, um dem Identitätsanbieter mitzuteilen, welche Attribute OpenProject benötigt. requested_format: > Das Format des angeforderten Attributs. Damit wird das Format des Attributs in der SAML-Anfrage angegeben. Weitere Informationen finden Sie in der [Dokumentation zur Konfiguration von angeforderten Attributen](docs_url). authn_requests_signed: > - If checked, OpenProject will sign the SAML AuthnRequest. You will have to provide a signing certificate and private key using the fields below. + Wenn diese Option aktiviert ist, signiert OpenProject den SAML AuthnRequest. Sie müssen ein Signierzertifikat und einen privaten Schlüssel in den unten stehenden Feldern angeben. want_assertions_signed: > - If checked, OpenProject will required signed responses from the identity provider using it's own certificate keypair. OpenProject will verify the signature against the certificate from the basic configuration section. + Wenn diese Option aktiviert ist, verlangt OpenProject signierte Antworten vom Identitätsanbieter unter Verwendung seines eigenen Zertifikat-Schlüsselpaars. OpenProject prüft die Signatur anhand des Zertifikats aus der Konfiguration des Identitätsanbieters. want_assertions_encrypted: > - If enabled, require the identity provider to encrypt the assertion response using the certificate pair that you provide. + Falls aktiviert, erwartet OpenProject eine verschlüsselte Antwort des Identitätsanbieters mit dem von Ihnen bereitgestellten Zertifikatspaar. certificate: > - Enter the X509 PEM-formatted certificate used by OpenProject for signing SAML requests. + Geben Sie das X509 PEM formatierte Zertifikat ein, das OpenProject zum Signieren von SAML-Anfragen verwendet. private_key: > - Enter the X509 PEM-formatted private key for the above certificate. This needs to be an RSA private key. + Geben Sie den zugehörigen privaten Schlüssel im X509 PEM-Format für das obige Zertifikat ein. Dies muss ein privater RSA-Schlüssel sein. signature_method: > - Select the signature algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + Wählen Sie den Signaturalgorithmus, der für die von OpenProject durchgeführte Signatur der SAML-Anfrage verwendet werden soll (Standard: %{default_option}). digest_method: > - Select the digest algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + Wählen Sie den Algorithmus für den Digest, der für die von OpenProject durchgeführte Signatur der SAML-Anfrage verwendet werden soll (Standard: %{default_option}). icon: > Geben Sie optional eine öffentliche URL zu einer Symbolgrafik an, die neben dem Anbieternamen angezeigt wird. metadata_for_idp: > diff --git a/modules/auth_saml/config/locales/crowdin/el.yml b/modules/auth_saml/config/locales/crowdin/el.yml index e9f39f9f0eb..82b26f443dd 100644 --- a/modules/auth_saml/config/locales/crowdin/el.yml +++ b/modules/auth_saml/config/locales/crowdin/el.yml @@ -98,7 +98,7 @@ el: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/eo.yml b/modules/auth_saml/config/locales/crowdin/eo.yml index 4e9c2ec4093..d7401e04e6f 100644 --- a/modules/auth_saml/config/locales/crowdin/eo.yml +++ b/modules/auth_saml/config/locales/crowdin/eo.yml @@ -98,7 +98,7 @@ eo: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/es.yml b/modules/auth_saml/config/locales/crowdin/es.yml index b7541dd04d3..bae8409c09d 100644 --- a/modules/auth_saml/config/locales/crowdin/es.yml +++ b/modules/auth_saml/config/locales/crowdin/es.yml @@ -6,15 +6,15 @@ es: identifier: Identificador secret: Secreto scope: Ámbito - assertion_consumer_service_url: ACS (Servicio de consumidor de aserciones) URL + assertion_consumer_service_url: URL de ACS (Assertion consumer service) limit_self_registration: Limitar autorregistro sp_entity_id: ID de la entidad de servicio metadata_url: URL de metadatos del proveedor de identidad name_identifier_format: Formato del identificador del nombre - idp_sso_service_url: Punto final de inicio de sesión del proveedor de identidad - idp_slo_service_url: Punto final de cierre de sesión del proveedor de identidad + idp_sso_service_url: Terminal de inicio de sesión del proveedor de identidad + idp_slo_service_url: Terminal de cierre de sesión del proveedor de identidad idp_cert: Certificado público del proveedor de identidad - authn_requests_signed: Firmar SAML AuthnRequests + authn_requests_signed: Firmar solicitudes de autenticación SAML want_assertions_signed: Exigir respuestas firmadas want_assertions_encrypted: Exigir respuestas cifradas certificate: Certificado utilizado por OpenProject para las solicitudes SAML @@ -43,18 +43,18 @@ es: error: "Error al recuperar los metadatos del proveedor de identidad: %{error}" providers: label_empty_title: "Aún no hay proveedores SAML configurados." - label_empty_description: "Añada un proveedor para verlos aquí." + label_empty_description: "Añada un proveedor para verlo aquí." label_automatic_configuration: Configuración automática label_metadata: Metadatos - label_metadata_endpoint: Punto final de metadatos de OpenProject + label_metadata_endpoint: Terminal de metadatos de OpenProject label_openproject_information: Información sobre OpenProject - label_configuration_details: "Puntos finales y certificados del proveedor de identidad" + label_configuration_details: "Terminales y certificados del proveedor de identidad" label_configuration_encryption: "Firmas y cifrado" label_add_new: Nuevo proveedor de identidad SAML label_edit: Editar proveedor de identidad SAML %{name} label_uid: ID de usuario interno label_mapping: Asignación - label_mapping_for: "Elige un idioma de partida. El idioma seleccionado en este momento es:\ninglés\nMapping for: %{attribute}\n\n\n\n\n\n\nElige un idioma de llegada. El idioma seleccionado en este momento es:\nespañol\n\nOpciones\n\n\n\n\nHaz clic en una palabra para buscarla en el diccionario o ver traducciones alternativas.\nHas iniciado sesión y tienes una cuenta DeepL Pro. Tu contenido está seguro. \n\n\n\n\n" + label_mapping_for: "Asignación para: %{attribute}" label_requested_attribute_for: "Atributo solicitado para: %{attribute}" no_results_table: Aún no se han definido proveedores de identidad SAML. plural: Proveedores de identidad SAML @@ -64,7 +64,7 @@ es: attribute_mapping_text: > Los siguientes campos controlan qué atributos proporcionados por el proveedor de identidad SAML se utilizan para proporcionar atributos de usuario en OpenProject metadata: - dialog: "Esta es la URL donde están disponibles los metadatos SAML de OpenProject. Opcionalmente utilícela para configurar su proveedor de identidad:" + dialog: "Esta es la URL donde están disponibles los metadatos SAML de OpenProject. Puede usarla para configurar su proveedor de identidad:" upsale: description: Conectar OpenProject a un proveedor de identidad SAML request_attributes: @@ -72,33 +72,33 @@ es: legend: > Estos atributos se añaden a los metadatos SAML XML para indicar al proveedor de identidad qué atributos requiere OpenProject. Es posible que aún tenga que configurar explícitamente su proveedor de identidad para enviar estos atributos. Consulte la documentación de su proveedor de identidad. name: 'Clave de atributo solicitada' - format: 'Formato de los atributos' + format: 'Formato de atributo' section_headers: configuration: "Configuración primaria" attributes: "Atributos" section_texts: display_name: "Configure el nombre para mostrar del proveedor SAML." metadata: "Rellene previamente la configuración mediante una URL de metadatos o pegando el XML de metadatos" - metadata_form: "Si su proveedor de identidad tiene un punto final de metadatos o una descarga XML, añádalo a continuación para rellenar previamente la configuración." - metadata_form_banner: "La edición de los metadatos puede anular los valores existentes en otras secciones." - configuration: "Configure las direcciones URL del punto final para el proveedor de identidad, los certificados y otras opciones SAML." + metadata_form: "Si su proveedor de identidad tiene un terminal de metadatos o una descarga XML, añádalo a continuación para rellenar previamente la configuración." + metadata_form_banner: "La edición de los metadatos puede reemplazar los valores existentes en otras secciones." + configuration: "Configure las direcciones URL del terminal para el proveedor de identidad, los certificados y otras opciones SAML." configuration_metadata: "Esta información se ha rellenado previamente utilizando los metadatos suministrados. En la mayoría de los casos, no requieren edición." encryption: "Configure las firmas de aserción y el cifrado para las solicitudes y respuestas SAML." encryption_form: "Si lo desea, puede cifrar la respuesta de la aserción o hacer que se firmen las solicitudes de OpenProject." - mapping: "Ajuste manualmente el mapeo entre la respuesta SAML y los atributos de usuario en OpenProject." + mapping: "Ajuste manualmente la asignación entre la respuesta SAML y los atributos de usuario en OpenProject." requested_attributes: "Defina el conjunto de atributos que se solicitarán en la petición SAML enviada a su proveedor de identidades." seeded_from_env: "Este proveedor fue sembrado desde la configuración del entorno. No puede editarse." settings: metadata_none: "No tengo metadatos" metadata_url: "URL de metadatos" - metadata_xml: "Metadatos XML" + metadata_xml: "XML de metadatos" instructions: documentation_link: > Consulte nuestra [documentación sobre la configuración de proveedores SAML](docs_url) para obtener más información sobre estas opciones de configuración. display_name: > El nombre del proveedor. Aparecerá como botón de inicio de sesión y en la lista de proveedores. metadata_none: > - Su proveedor de identidad no dispone de un punto final de metadatos ni de una opción de descarga XML. Puede la configuración manualmente. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Su proveedor de identidad proporciona una URL de metadatos. metadata_xml: > @@ -106,19 +106,19 @@ es: limit_self_registration: > Si está habilitado, los usuarios solo pueden registrarse usando este proveedor si la configuración de autorregistro lo permite. sp_entity_id: > - El identificador de entidad del proveedor de servicios (SP). A veces también se denomina Audiencia. Es el identificador único de cliente de la instancia OpenProject. + El identificador de entidad del proveedor de servicios (SP). A veces también se denomina Público. Es el identificador único de cliente de la instancia OpenProject. idp_sso_service_url: > - La URL del punto final de inicio de sesión del proveedor de identidad. + La URL del terminal de inicio de sesión del proveedor de identidad. idp_slo_service_url: > - La URL del punto final de inicio de sesión del proveedor de identidad. + La URL del terminal de inicio de sesión del proveedor de identidad. idp_cert: > Introduzca el certificado público con formato X509 PEM del proveedor de identidad. Puede introducir varios certificados separándolos con una nueva línea. name_identifier_format: > Establezca el formato del identificador de nombre que se utilizará para la aserción SAML. sp_metadata_endpoint: > - Esta es la URL donde están disponibles los metadatos SAML de OpenProject. Opcionalmente utilícela para configurar su proveedor de identidad. + Esta es la URL donde están disponibles los metadatos SAML de OpenProject. Puede usarla para configurar su proveedor de identidad. mapping: > - Configure el mapeo entre la respuesta SAML y los atributos de usuario en OpenProject. Puede configurar varios nombres de atributos para buscar. OpenProject elegirá el primer atributo disponible de la respuesta SAML. + Configure la asignación entre la respuesta SAML y los atributos de usuario en OpenProject. Puede configurar varios nombres de atributos para buscar. OpenProject elegirá el primer atributo disponible de la respuesta SAML. mapping_login: > Atributos SAML de la respuesta utilizada para el inicio de sesión. mapping_mail: > @@ -134,9 +134,9 @@ es: requested_attributes: > Estos atributos se añaden al XML de solicitud SAML para comunicar al proveedor de identidad qué atributos requiere OpenProject. requested_format: > - El formato del atributo solicitado. Se utiliza para especificar el formato del atributo en la solicitud SAML. Consulte [documentación sobre la configuración de atributos solicitados](docs_url) para obtener más información. + El formato del atributo solicitado. Se utiliza para especificar el formato del atributo en la solicitud SAML. Consulte la [documentación sobre la configuración de atributos solicitados](docs_url) para obtener más información. authn_requests_signed: > - Si está marcada, OpenProject firmará la SAML AuthnRequest. Tendrá que proporcionar un certificado de firma y una clave privada utilizando los campos siguientes. + Si está marcada, OpenProject firmará la solicitud de autenticación SAML. Tendrá que proporcionar un certificado de firma y una clave privada utilizando los campos siguientes. want_assertions_signed: > Si está marcada, OpenProject requerirá respuestas firmadas del proveedor de identidad utilizando su propio par de claves de certificado. OpenProject verificará la firma contra el certificado de la sección de configuración básica. want_assertions_encrypted: > @@ -146,10 +146,10 @@ es: private_key: > Introduzca la clave privada con formato X509 PEM para el certificado anterior. Tiene que ser una clave privada RSA. signature_method: > - Seleccione el algoritmo de firma que se utilizará para la firma de la solicitud SAML realizada por OpenProject (Predeterminado: %{default_option}). + Seleccione el algoritmo de firma que se utilizará para la firma de la solicitud SAML realizada por OpenProject (Por defecto: %{default_option}). digest_method: > - Seleccione el algoritmo de compendio a utilizar para la firma de la solicitud SAML realizada por OpenProject (Predeterminado: %{default_option}). + Seleccione el algoritmo de resumen que se usará para la firma de la solicitud SAML realizada por OpenProject (Por defecto: %{default_option}). icon: > Opcionalmente, proporcione una URL pública a un gráfico de icono que se mostrará junto al nombre del proveedor. metadata_for_idp: > - Esta información podría ser solicitada por su proveedor de identidad SAML. + Esta información podría solicitarla su proveedor de identidad SAML. diff --git a/modules/auth_saml/config/locales/crowdin/et.yml b/modules/auth_saml/config/locales/crowdin/et.yml index c00261e189a..dd219fb55bc 100644 --- a/modules/auth_saml/config/locales/crowdin/et.yml +++ b/modules/auth_saml/config/locales/crowdin/et.yml @@ -98,7 +98,7 @@ et: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/eu.yml b/modules/auth_saml/config/locales/crowdin/eu.yml index 46ef44fe861..887d96812a5 100644 --- a/modules/auth_saml/config/locales/crowdin/eu.yml +++ b/modules/auth_saml/config/locales/crowdin/eu.yml @@ -98,7 +98,7 @@ eu: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/fa.yml b/modules/auth_saml/config/locales/crowdin/fa.yml index 1806b1c2574..b782e6a116b 100644 --- a/modules/auth_saml/config/locales/crowdin/fa.yml +++ b/modules/auth_saml/config/locales/crowdin/fa.yml @@ -98,7 +98,7 @@ fa: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/fi.yml b/modules/auth_saml/config/locales/crowdin/fi.yml index 762392563b4..1e605f3a084 100644 --- a/modules/auth_saml/config/locales/crowdin/fi.yml +++ b/modules/auth_saml/config/locales/crowdin/fi.yml @@ -98,7 +98,7 @@ fi: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/fil.yml b/modules/auth_saml/config/locales/crowdin/fil.yml index c511d27eee5..4c33656e92d 100644 --- a/modules/auth_saml/config/locales/crowdin/fil.yml +++ b/modules/auth_saml/config/locales/crowdin/fil.yml @@ -98,7 +98,7 @@ fil: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/fr.yml b/modules/auth_saml/config/locales/crowdin/fr.yml index c8ad0516c33..c3cd27f7a3c 100644 --- a/modules/auth_saml/config/locales/crowdin/fr.yml +++ b/modules/auth_saml/config/locales/crowdin/fr.yml @@ -2,154 +2,154 @@ fr: activemodel: attributes: saml/provider: - display_name: Name - identifier: Identifier + display_name: Nom + identifier: Identifiant secret: Secret - scope: Scope - assertion_consumer_service_url: ACS (Assertion consumer service) URL - limit_self_registration: Limit self registration - sp_entity_id: Service entity ID - metadata_url: Identity provider metadata URL - name_identifier_format: Name identifier format - idp_sso_service_url: Identity provider login endpoint - idp_slo_service_url: Identity provider logout endpoint - idp_cert: Public certificate of identity provider - authn_requests_signed: Sign SAML AuthnRequests - want_assertions_signed: Require signed responses - want_assertions_encrypted: Require encrypted responses - certificate: Certificate used by OpenProject for SAML requests - private_key: Corresponding private key for OpenProject SAML requests - signature_method: Signature algorithm - digest_method: Digest algorithm + scope: Portée + assertion_consumer_service_url: URL ACS (Assertion Consumer Service) + limit_self_registration: Limiter l'inscription automatique + sp_entity_id: ID de l'entité de service + metadata_url: URL des métadonnées du fournisseur d'identité + name_identifier_format: Format de l'identifiant du nom + idp_sso_service_url: Point de terminaison de connexion du fournisseur d'identité + idp_slo_service_url: Point de terminaison de déconnexion du fournisseur d'identité + idp_cert: Certificat public du fournisseur d'identité + authn_requests_signed: Signer les requêtes AuthnRequests SAML + want_assertions_signed: Exiger des réponses signées + want_assertions_encrypted: Exiger des réponses chiffrées + certificate: Certificat utilisé par OpenProject pour les requêtes SAML + private_key: Clé privée correspondante pour les requêtes SAML d'OpenProject + signature_method: Algorithme de signature + digest_method: Algorithme de chiffrement format: "Format" - icon: "Custom icon" + icon: "Icône personnalisée" activerecord: errors: models: saml/provider: - invalid_certificate: "is not a valid PEM-formatted certificate: %{additional_message}" - invalid_private_key: "is not a valid PEM-formatted private key: %{additional_message}" - certificate_expired: "is expired and can no longer be used." - unmatched_private_key: "does not belong to the given certificate" + invalid_certificate: "n'est pas un certificat valide au format PEM : %{additional_message}" + invalid_private_key: "n'est pas une clé privée valide au format PEM : %{additional_message}" + certificate_expired: "a expiré et ne peut plus être utilisé." + unmatched_private_key: "n'appartient pas au certificat donné" saml: - menu_title: SAML providers + menu_title: Fournisseurs SAML info: - title: "SAML Protocol Configuration Parameters" + title: "Paramètres de configuration du protocole SAML" description: > - Use these parameters to configure your identity provider connection to OpenProject. + Utilisez ces paramètres pour configurer la connexion de votre fournisseur d'identité à OpenProject. metadata_parser: - success: "Successfully updated the configuration using the identity provider metadata." - invalid_url: "Provided metadata URL is invalid. Provide a HTTP(s) URL." - error: "Failed to retrieve the identity provider metadata: %{error}" + success: "Mise à jour réussie de la configuration à l'aide des métadonnées du fournisseur d'identité." + invalid_url: "L'URL des métadonnées fournie n'est pas valide. Fournissez une URL HTTP(s)." + error: "Échec de la récupération des métadonnées du fournisseur d'identité : %{error}" providers: - label_empty_title: "No SAML providers configured yet." - label_empty_description: "Add a provider to see them here." - label_automatic_configuration: Automatic configuration - label_metadata: Metadata - label_metadata_endpoint: OpenProject metadata endpoint - label_openproject_information: OpenProject information - label_configuration_details: "Identity provider endpoints and certificates" - label_configuration_encryption: "Signatures and Encryption" - label_add_new: New SAML identity provider - label_edit: Edit SAML identity provider %{name} - label_uid: Internal user id - label_mapping: Mapping - label_mapping_for: "Mapping for: %{attribute}" - label_requested_attribute_for: "Requested attribute for: %{attribute}" - no_results_table: No SAML identity providers have been defined yet. - plural: SAML identity providers - singular: SAML identity provider - requested_attributes: Requested attributes - attribute_mapping: Attribute mapping + label_empty_title: "Aucun fournisseur SAML n'est encore configuré." + label_empty_description: "Ajoutez un fournisseur pour le voir ici." + label_automatic_configuration: Configuration automatique + label_metadata: Métadonnées + label_metadata_endpoint: Point de terminaison des métadonnées OpenProject + label_openproject_information: Informations d'OpenProject + label_configuration_details: "Points de terminaison et certificats du fournisseur d'identité" + label_configuration_encryption: "Signatures et chiffrement" + label_add_new: Nouveau fournisseur d'identité SAML + label_edit: Modifier le fournisseur d'identité SAML %{name} + label_uid: Identifiant de l'utilisateur interne + label_mapping: Mappage + label_mapping_for: "Mappage pour : %{attribute}" + label_requested_attribute_for: "Attribut demandé pour : %{attribute}" + no_results_table: Aucun fournisseur d'identité SAML n'a encore été défini. + plural: Fournisseurs d'identité SAML + singular: Fournisseur d'identité SAML + requested_attributes: Attributs demandés + attribute_mapping: Mappage des attributs attribute_mapping_text: > - The following fields control which attributes provided by the SAML identity provider are used to provide user attributes in OpenProject + Les champs suivants contrôlent quels attributs fournis par le fournisseur d'identité SAML sont utilisés pour fournir des attributs d'utilisateur dans OpenProject metadata: - dialog: "This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider:" + dialog: "Il s'agit de l'URL où les métadonnées SAML d'OpenProject sont disponibles. Vous pouvez également l'utiliser pour configurer votre fournisseur d'identité :" upsale: - description: Connect OpenProject to a SAML identity provider + description: Connecter OpenProject à un fournisseur d'identité SAML request_attributes: - title: 'Requested attributes' + title: 'Attributs demandés' legend: > - These attributes are added to the SAML XML metadata to signify to the identify provider which attributes OpenProject requires. You may still need to explicitly configure your identity provider to send these attributes. Please refer to your IdP's documentation. - name: 'Requested attribute key' - format: 'Attribute format' + Ces attributs sont ajoutés aux métadonnées XML SAML pour indiquer au fournisseur d'identité les attributs dont OpenProject a besoin. Il se peut que vous deviez configurer explicitement votre fournisseur d'identité pour qu'il envoie ces attributs. Veuillez vous référer à la documentation de votre fournisseur d'identité. + name: 'Clé d''attribut demandée' + format: 'Format des attributs' section_headers: - configuration: "Primary configuration" - attributes: "Attributes" + configuration: "Configuration principale" + attributes: "Attributs" section_texts: - display_name: "Configure the display name of the SAML provider." - metadata: "Pre-fill configuration using a metadata URL or by pasting metadata XML" - metadata_form: "If your identity provider has a metadata endpoint or XML download, add it below to pre-fill the configuration." - metadata_form_banner: "Editing the metadata may override existing values in other sections. " - configuration: "Configure the endpoint URLs for the identity provider, certificates, and further SAML options." - configuration_metadata: "This information has been pre-filled using the supplied metadata. In most cases, they do not require editing." - encryption: "Configure assertion signatures and encryption for SAML requests and responses." - encryption_form: "You may optionally want to encrypt the assertion response, or have requests from OpenProject signed." - mapping: "Manually adjust the mapping between the SAML response and user attributes in OpenProject." - requested_attributes: "Define the set of attributes to be requested in the SAML request sent to your identity provider." - seeded_from_env: "This provider was seeded from the environment configuration. It cannot be edited." + display_name: "Configurez le nom d'affichage du fournisseur SAML." + metadata: "Préremplir la configuration à l'aide d'une URL de métadonnées ou en collant des métadonnées XML" + metadata_form: "Si votre fournisseur d'identité dispose d'un point de terminaison de métadonnées ou d'un téléchargement XML, ajoutez-le ci-dessous pour préremplir la configuration." + metadata_form_banner: "La modification des métadonnées peut remplacer des valeurs existantes dans d'autres sections. " + configuration: "Configurez les URL des points de terminaison pour le fournisseur d'identité, les certificats et les autres options SAML." + configuration_metadata: "Ces informations ont été préremplies à l'aide des métadonnées fournies. Dans la plupart des cas, elles n'ont pas besoin d'être modifiées." + encryption: "Configurez les signatures d'assertion et le chiffrement des requêtes et des réponses SAML." + encryption_form: "Vous pouvez éventuellement vouloir chiffrer la réponse à l'assertion ou faire signer les requêtes d'OpenProject." + mapping: "Ajustez manuellement la correspondance entre la réponse SAML et les attributs de l'utilisateur dans OpenProject." + requested_attributes: "Définissez l'ensemble des attributs à demander dans la requête SAML envoyée à votre fournisseur d'identité." + seeded_from_env: "Ce fournisseur a été ajouté à partir de la configuration de l'environnement. Il ne peut pas être modifié." settings: - metadata_none: "I don't have metadata" - metadata_url: "Metadata URL" - metadata_xml: "Metadata XML" + metadata_none: "Je n'ai pas de métadonnées" + metadata_url: "URL de métadonnées" + metadata_xml: "XML de métadonnées" instructions: documentation_link: > - Please refer to our [documentation on configuring SAML providers](docs_url) for more information on these configuration options. + Veuillez consulter notre [documentation sur la configuration des fournisseurs SAML](docs_url) pour obtenir plus d'informations sur ces options de configuration. display_name: > - The name of the provider. This will be displayed as the login button and in the list of providers. + Le nom du fournisseur. Il sera affiché comme bouton de connexion et dans la liste des fournisseurs. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > - Your identity provider provides a metadata URL. + Votre fournisseur d'identité fournit une URL de métadonnées. metadata_xml: > - Your identity provider provides a metadata XML download. + Votre fournisseur d'identité fournit un téléchargement de métadonnées XML. limit_self_registration: > - If enabled users can only register using this provider if the self registration setting allows for it. + Si cette option est activée, les utilisateurs ne peuvent s'inscrire en utilisant ce fournisseur que si le paramètre d'inscription automatique le permet. sp_entity_id: > - The entity ID of the service provider (SP). Sometimes also referred to as Audience. This is the unique client identifier of the OpenProject instance. + L'identifiant de l'entité du fournisseur de services (SP). Parfois également appelé Audience. Il s'agit de l'identifiant client unique de l'instance OpenProject. idp_sso_service_url: > - The URL of the identity provider login endpoint. + L'URL du point de connexion du fournisseur d'identité. idp_slo_service_url: > - The URL of the identity provider login endpoint. + L'URL du point de connexion du fournisseur d'identité. idp_cert: > - Enter the X509 PEM-formatted public certificate of the identity provider. You can enter multiple certificates by separating them with a newline. + Saisissez le certificat public au format X509 PEM du fournisseur d'identité. Vous pouvez saisir plusieurs certificats en les séparant par une nouvelle ligne. name_identifier_format: > - Set the name identifier format to be used for the SAML assertion. + Définissez le format de l'identifiant de nom à utiliser pour l'assertion SAML. sp_metadata_endpoint: > - This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider. + Il s'agit de l'URL où les métadonnées SAML d'OpenProject sont disponibles. Vous pouvez également l'utiliser pour configurer votre fournisseur d'identité. mapping: > - Configure the mapping between the SAML response and user attributes in OpenProject. You can configure multiple attribute names to look for. OpenProject will choose the first available attribute from the SAML response. + Configurez la correspondance entre la réponse SAML et les attributs de l'utilisateur dans OpenProject. Vous pouvez configurer plusieurs noms d'attributs à rechercher. OpenProject choisira le premier attribut disponible dans la réponse SAML. mapping_login: > - SAML attributes from the response used for the login. + Attributs SAML de la réponse utilisée pour la connexion. mapping_mail: > - SAML attributes from the response used for the email of the user. + Attributs SAML de la réponse utilisée pour l'adresse e-mail de l'utilisateur. mapping_firstname: > - SAML attributes from the response used for the given name. + Attributs SAML de la réponse utilisée pour le prénom. mapping_lastname: > - SAML attributes from the response used for the last name. + Attributs SAML de la réponse utilisés pour le nom de famille. mapping_uid: > - SAML attribute to use for the internal user ID. Leave empty to use the name_id attribute instead + Attribut SAML à utiliser pour l'identifiant interne de l'utilisateur. Laissez l'espace vide pour utiliser l'attribut name_id à la place request_uid: > - SAML attribute to request for the internal user ID. By default, the name_id will be used for this field. + Attribut SAML à demander pour l'identifiant interne de l'utilisateur. Par défaut, l'attribut name_id sera utilisé pour ce champ. requested_attributes: > - These attributes are added to the SAML request XML to communicate to the identity provider which attributes OpenProject requires. + Ces attributs sont ajoutés à la requête SAML XML pour communiquer au fournisseur d'identité les attributs dont OpenProject a besoin. requested_format: > - The format of the requested attribute. This is used to specify the format of the attribute in the SAML request. Please see [documentation on configuring requested attributes](docs_url) for more information. + Le format de l'attribut demandé. Il est utilisé pour spécifier le format de l'attribut dans la requête SAML. Veuillez consulter la [documentation sur la configuration des attributs demandés](docs_url) pour obtenir plus d'informations. authn_requests_signed: > - If checked, OpenProject will sign the SAML AuthnRequest. You will have to provide a signing certificate and private key using the fields below. + Si cette option est cochée, OpenProject signera la requête SAML AuthnRequest. Vous devrez fournir un certificat de signature et une clé privée en utilisant les champs ci-dessous. want_assertions_signed: > - If checked, OpenProject will required signed responses from the identity provider using it's own certificate keypair. OpenProject will verify the signature against the certificate from the basic configuration section. + Si cette case est cochée, OpenProject exigera des réponses signées du fournisseur d'identité en utilisant sa propre paire de clés de certificat. OpenProject vérifiera la signature par rapport au certificat de la section de configuration de base. want_assertions_encrypted: > - If enabled, require the identity provider to encrypt the assertion response using the certificate pair that you provide. + Si cette option est activée, le fournisseur d'identité doit chiffrer la réponse d'assertion à l'aide de la paire de certificats que vous lui fournissez. certificate: > - Enter the X509 PEM-formatted certificate used by OpenProject for signing SAML requests. + Saisissez le certificat X509 au format PEM utilisé par OpenProject pour signer les requêtes SAML. private_key: > - Enter the X509 PEM-formatted private key for the above certificate. This needs to be an RSA private key. + Saisissez la clé privée X509 au format PEM pour le certificat ci-dessus. Il doit s'agir d'une clé privée RSA. signature_method: > - Select the signature algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + Sélectionnez l'algorithme de signature à utiliser pour la signature de la requête SAML effectuée par OpenProject (par défaut : %{default_option}). digest_method: > - Select the digest algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + Sélectionnez l'algorithme de chiffrement à utiliser pour la signature de la requête SAML effectuée par OpenProject (par défaut : %{default_option}). icon: > - Optionally provide a public URL to an icon graphic that will be displayed next to the provider name. + Vous pouvez également fournir une URL publique vers une icône graphique qui sera affichée à côté du nom du fournisseur. metadata_for_idp: > - This information might be requested by your SAML identity provider. + Ces informations peuvent être demandées par votre fournisseur d'identité SAML. diff --git a/modules/auth_saml/config/locales/crowdin/he.yml b/modules/auth_saml/config/locales/crowdin/he.yml index 042c624c03e..0841c48589c 100644 --- a/modules/auth_saml/config/locales/crowdin/he.yml +++ b/modules/auth_saml/config/locales/crowdin/he.yml @@ -98,7 +98,7 @@ he: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/hi.yml b/modules/auth_saml/config/locales/crowdin/hi.yml index 8e8ef91f815..f6ac57c109a 100644 --- a/modules/auth_saml/config/locales/crowdin/hi.yml +++ b/modules/auth_saml/config/locales/crowdin/hi.yml @@ -98,7 +98,7 @@ hi: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/hr.yml b/modules/auth_saml/config/locales/crowdin/hr.yml index 85ad438b2a5..1040b066bdf 100644 --- a/modules/auth_saml/config/locales/crowdin/hr.yml +++ b/modules/auth_saml/config/locales/crowdin/hr.yml @@ -98,7 +98,7 @@ hr: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/hu.yml b/modules/auth_saml/config/locales/crowdin/hu.yml index fd3dd2c2b91..819ceed1b8b 100644 --- a/modules/auth_saml/config/locales/crowdin/hu.yml +++ b/modules/auth_saml/config/locales/crowdin/hu.yml @@ -98,7 +98,7 @@ hu: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/id.yml b/modules/auth_saml/config/locales/crowdin/id.yml index 6d53b05d8e1..3ab7e5d0e95 100644 --- a/modules/auth_saml/config/locales/crowdin/id.yml +++ b/modules/auth_saml/config/locales/crowdin/id.yml @@ -98,7 +98,7 @@ id: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/it.yml b/modules/auth_saml/config/locales/crowdin/it.yml index 00a687aaf63..6e2b4f4880b 100644 --- a/modules/auth_saml/config/locales/crowdin/it.yml +++ b/modules/auth_saml/config/locales/crowdin/it.yml @@ -2,154 +2,154 @@ it: activemodel: attributes: saml/provider: - display_name: Name - identifier: Identifier - secret: Secret - scope: Scope - assertion_consumer_service_url: ACS (Assertion consumer service) URL - limit_self_registration: Limit self registration - sp_entity_id: Service entity ID - metadata_url: Identity provider metadata URL - name_identifier_format: Name identifier format - idp_sso_service_url: Identity provider login endpoint - idp_slo_service_url: Identity provider logout endpoint - idp_cert: Public certificate of identity provider - authn_requests_signed: Sign SAML AuthnRequests - want_assertions_signed: Require signed responses - want_assertions_encrypted: Require encrypted responses - certificate: Certificate used by OpenProject for SAML requests - private_key: Corresponding private key for OpenProject SAML requests - signature_method: Signature algorithm - digest_method: Digest algorithm - format: "Format" - icon: "Custom icon" + display_name: Nome + identifier: Identificatore + secret: Segreto + scope: Ambito + assertion_consumer_service_url: URL ACS (Assertion consumer service) + limit_self_registration: Limita registrazione autonoma + sp_entity_id: ID dell'entità di servizio + metadata_url: URL dei metadati del fornitore di identità + name_identifier_format: Formato dell'identificatore del nome + idp_sso_service_url: Endpoint di login del fornitore di identità + idp_slo_service_url: Endpoint di logout del fornitore di identità + idp_cert: Certificato pubblico del fornitore di identità + authn_requests_signed: Firma le richieste SAML Authn + want_assertions_signed: Richiedi risposte firmate + want_assertions_encrypted: Richiedi risposte crittografate + certificate: Certificato utilizzato da OpenProject per richieste SAML + private_key: Chiave privata corrispondente per le richieste di OpenProject SAML + signature_method: Algoritmo di firma + digest_method: Algoritmo di digest + format: "Formato" + icon: "Icona personalizzata" activerecord: errors: models: saml/provider: - invalid_certificate: "is not a valid PEM-formatted certificate: %{additional_message}" - invalid_private_key: "is not a valid PEM-formatted private key: %{additional_message}" - certificate_expired: "is expired and can no longer be used." - unmatched_private_key: "does not belong to the given certificate" + invalid_certificate: "non è un certificato valido in formato PEM: %{additional_message}" + invalid_private_key: "non è una chiave privata valida in formato PEM: %{additional_message}" + certificate_expired: "è scaduto e non può più essere utilizzato." + unmatched_private_key: "non appartiene al certificato fornito" saml: - menu_title: SAML providers + menu_title: Fornitori SAML info: - title: "SAML Protocol Configuration Parameters" + title: "Parametri di configurazione del protocollo SAML" description: > - Use these parameters to configure your identity provider connection to OpenProject. + Utilizzare questi parametri per configurare la connessione del fornitore di identità a OpenProject. metadata_parser: - success: "Successfully updated the configuration using the identity provider metadata." - invalid_url: "Provided metadata URL is invalid. Provide a HTTP(s) URL." - error: "Failed to retrieve the identity provider metadata: %{error}" + success: "La configurazione è stata aggiornata utilizzando i metadati del fornitore di identità." + invalid_url: "L'URL dei metadati forniti non è valido. Fornire un URL HTTP(s)." + error: "Impossibile recuperare i metadati del fornitore di identità: %{error}" providers: - label_empty_title: "No SAML providers configured yet." - label_empty_description: "Add a provider to see them here." - label_automatic_configuration: Automatic configuration - label_metadata: Metadata - label_metadata_endpoint: OpenProject metadata endpoint - label_openproject_information: OpenProject information - label_configuration_details: "Identity provider endpoints and certificates" - label_configuration_encryption: "Signatures and Encryption" - label_add_new: New SAML identity provider - label_edit: Edit SAML identity provider %{name} - label_uid: Internal user id - label_mapping: Mapping - label_mapping_for: "Mapping for: %{attribute}" - label_requested_attribute_for: "Requested attribute for: %{attribute}" - no_results_table: No SAML identity providers have been defined yet. - plural: SAML identity providers - singular: SAML identity provider - requested_attributes: Requested attributes - attribute_mapping: Attribute mapping + label_empty_title: "Nessun fornitore SAML configurato." + label_empty_description: "Aggiungi un fornitore per vederli qui." + label_automatic_configuration: Configurazione automatica + label_metadata: Metadati + label_metadata_endpoint: Endpoint metadati OpenProject + label_openproject_information: Informazioni su OpenProject + label_configuration_details: "Endpoint e certificati del fornitore di identità" + label_configuration_encryption: "Firme e crittografia" + label_add_new: Nuovo fornitore di identità SAML + label_edit: Modifica il fornitore di identità SAML %{name} + label_uid: Id utente interno + label_mapping: Mappatura + label_mapping_for: "Mappatura per: %{attribute}" + label_requested_attribute_for: "Attributo richiesto per: %{attribute}" + no_results_table: Nessun fornitore di identità SAML è stato ancora definito. + plural: Fornitori di identità SAML + singular: Fornitore di identità SAML + requested_attributes: Attributi richiesti + attribute_mapping: Mappatura attributi attribute_mapping_text: > - The following fields control which attributes provided by the SAML identity provider are used to provide user attributes in OpenProject + I seguenti campi controllano quali attributi forniti dal fornitore di identità SAML vengono utilizzati per fornire attributi utente in OpenProject metadata: - dialog: "This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider:" + dialog: "Questo è l'URL dove sono disponibili i metadati di OpenProject SAML. Usalo opzionalmente per configurare il tuo fornitore di identità:" upsale: - description: Connect OpenProject to a SAML identity provider + description: Connetti OpenProject a un fornitore di identità SAML request_attributes: - title: 'Requested attributes' + title: 'Attributi richiesti' legend: > - These attributes are added to the SAML XML metadata to signify to the identify provider which attributes OpenProject requires. You may still need to explicitly configure your identity provider to send these attributes. Please refer to your IdP's documentation. - name: 'Requested attribute key' - format: 'Attribute format' + Questi attributi vengono aggiunti ai metadati XML SAML per indicare al fornitore di identità quali attributi OpenProject richiede. Potrebbe essere necessario configurare esplicitamente il tuo fornitore di identità per inviare questi attributi. Fai riferimento alla documentazione del tuo fornitore. + name: 'Chiave attributo richiesta' + format: 'Formato dell''attributo' section_headers: - configuration: "Primary configuration" - attributes: "Attributes" + configuration: "Configurazione principale" + attributes: "Attributi" section_texts: - display_name: "Configure the display name of the SAML provider." - metadata: "Pre-fill configuration using a metadata URL or by pasting metadata XML" - metadata_form: "If your identity provider has a metadata endpoint or XML download, add it below to pre-fill the configuration." - metadata_form_banner: "Editing the metadata may override existing values in other sections. " - configuration: "Configure the endpoint URLs for the identity provider, certificates, and further SAML options." - configuration_metadata: "This information has been pre-filled using the supplied metadata. In most cases, they do not require editing." - encryption: "Configure assertion signatures and encryption for SAML requests and responses." - encryption_form: "You may optionally want to encrypt the assertion response, or have requests from OpenProject signed." - mapping: "Manually adjust the mapping between the SAML response and user attributes in OpenProject." - requested_attributes: "Define the set of attributes to be requested in the SAML request sent to your identity provider." - seeded_from_env: "This provider was seeded from the environment configuration. It cannot be edited." + display_name: "Configura il nome visualizzato del fornitore SAML." + metadata: "Precompila la configurazione utilizzando un URL di metadati o incollando i metadati XML" + metadata_form: "Se il tuo fornitore di identità ha un endpoint o download o un download di metadati in XML, aggiungilo qui sotto per precompilare la configurazione." + metadata_form_banner: "La modifica dei metadati può sovrascrivere i valori esistenti in altre sezioni. " + configuration: "Configura gli URL degli endpoint per il fornitore di identità, i certificati e ulteriori opzioni SAML." + configuration_metadata: "Queste informazioni sono state precompilate utilizzando i metadati forniti. Nella maggior parte dei casi, non è necessario modificarle." + encryption: "Configura le firme di asserzione e la crittografia per le richieste e le risposte SAML." + encryption_form: "Potresti opzionalmente voler crittografare la risposta di asserzione, o avere richieste firmate da OpenProject." + mapping: "Regola manualmente la mappatura tra la risposta SAML e gli attributi utente in OpenProject." + requested_attributes: "Definisci l'insieme di attributi da richiedere nella richiesta SAML inviata al fornitore di identità." + seeded_from_env: "Questo fornitore è stato salvato dalla configurazione dell'ambiente. Non può essere modificato." settings: - metadata_none: "I don't have metadata" - metadata_url: "Metadata URL" - metadata_xml: "Metadata XML" + metadata_none: "Non ho metadati" + metadata_url: "URL dei metadati" + metadata_xml: "XML dei metadati" instructions: documentation_link: > - Please refer to our [documentation on configuring SAML providers](docs_url) for more information on these configuration options. + Per maggiori informazioni su queste opzioni di configurazione, fai riferimento alla nostra [documentazione sulla configurazione dei fornitori SAML](docs_url). display_name: > - The name of the provider. This will be displayed as the login button and in the list of providers. + Il nome del fornitore. Questo verrà visualizzato come pulsante di accesso e nell'elenco dei fornitori. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > - Your identity provider provides a metadata URL. + Il tuo fornitore di identità fornisce un URL di metadati. metadata_xml: > - Your identity provider provides a metadata XML download. + Il tuo fornitore di identità fornisce un download in XML dei metadati. limit_self_registration: > - If enabled users can only register using this provider if the self registration setting allows for it. + Se abilitato, gli utenti possono registrarsi esclusivamente utilizzando questo fornitore, se l'impostazione di registrazione autonoma lo consente. sp_entity_id: > - The entity ID of the service provider (SP). Sometimes also referred to as Audience. This is the unique client identifier of the OpenProject instance. + L'ID dell'entità del fornitore di servizi (SP). A volte viene indicato anche come Audience. Si tratta dell'identificatore unico del cliente dell'istanza OpenProject. idp_sso_service_url: > - The URL of the identity provider login endpoint. + L'URL dell'endpoint di login del fornitore di identità. idp_slo_service_url: > - The URL of the identity provider login endpoint. + L'URL dell'endpoint di login del fornitore di identità. idp_cert: > - Enter the X509 PEM-formatted public certificate of the identity provider. You can enter multiple certificates by separating them with a newline. + Inserisca il certificato pubblico in formato X509 PEM del fornitore di identità. Puoi inserire più certificati separandoli su righe diverse. name_identifier_format: > - Set the name identifier format to be used for the SAML assertion. + Imposta il formato dell'identificatore del nome da utilizzare per l'asserzione SAML. sp_metadata_endpoint: > - This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider. + Questo è l'URL dove sono disponibili i metadati di OpenProject SAML. Usalo opzionalmente per configurare il tuo fornitore di identità. mapping: > - Configure the mapping between the SAML response and user attributes in OpenProject. You can configure multiple attribute names to look for. OpenProject will choose the first available attribute from the SAML response. + Configura la mappatura tra la risposta SAML e gli attributi utente in OpenProject. È possibile configurare più nomi di attributi da cercare. OpenProject sceglierà il primo attributo disponibile dalla risposta SAML. mapping_login: > - SAML attributes from the response used for the login. + Attributi SAML dalla risposta utilizzati per il login. mapping_mail: > - SAML attributes from the response used for the email of the user. + Attributi SAML dalla risposta utilizzati per l'e-mail dell'utente. mapping_firstname: > - SAML attributes from the response used for the given name. + Attributi SAML dalla risposta utilizzati per il nome. mapping_lastname: > - SAML attributes from the response used for the last name. + Attributi SAML dalla risposta utilizzati per il cognome. mapping_uid: > - SAML attribute to use for the internal user ID. Leave empty to use the name_id attribute instead + Attributo SAML da utilizzare per l'ID utente interno. Lascia vuoto per utilizzare invece l'attributo name_id request_uid: > - SAML attribute to request for the internal user ID. By default, the name_id will be used for this field. + Attributo SAML da richiedere per l'ID utente interno. Per impostazione predefinita, verrà utilizzato name_id per questo campo. requested_attributes: > - These attributes are added to the SAML request XML to communicate to the identity provider which attributes OpenProject requires. + Questi attributi vengono aggiunti all'XML della richiesta SAML per comunicare al fornitore di identità quali attributi OpenProject richiede. requested_format: > - The format of the requested attribute. This is used to specify the format of the attribute in the SAML request. Please see [documentation on configuring requested attributes](docs_url) for more information. + Il formato dell'attributo richiesto. Viene utilizzato per specificare il formato dell'attributo nella richiesta SAML. Per maggiori informazioni, consulta la [documentazione sulla configurazione degli attributi richiesti](docs_url). authn_requests_signed: > - If checked, OpenProject will sign the SAML AuthnRequest. You will have to provide a signing certificate and private key using the fields below. + Se l'opzione è selezionata, OpenProject firmerà la SAML AuthnRequest. Dovrai fornire un certificato di firma e una chiave privata utilizzando i campi sottostanti. want_assertions_signed: > - If checked, OpenProject will required signed responses from the identity provider using it's own certificate keypair. OpenProject will verify the signature against the certificate from the basic configuration section. + Se l'opzione è selezionata, OpenProject richiederà risposte firmate dal fornitore di identità utilizzando la propria coppia di certificati. OpenProject verificherà la firma rispetto al certificato della sezione di configurazione di base. want_assertions_encrypted: > - If enabled, require the identity provider to encrypt the assertion response using the certificate pair that you provide. + Se l'opzione è abilitata, richiede al fornitore di identità di crittografare la risposta dell'asserzione utilizzando la coppia di certificati da te fornita. certificate: > - Enter the X509 PEM-formatted certificate used by OpenProject for signing SAML requests. + Inserisci il certificato formattato X509 PEM utilizzato da OpenProject per la firma delle richieste SAML. private_key: > - Enter the X509 PEM-formatted private key for the above certificate. This needs to be an RSA private key. + Inserisci la chiave privata formattata X509 PEM per il certificato di cui sopra. Deve essere una chiave privata RSA. signature_method: > - Select the signature algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + Seleziona l'algoritmo di firma da usare per la firma richiesta SAML eseguita da OpenProject (Predefinito: %{default_option}). digest_method: > - Select the digest algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + Seleziona l'algoritmo di digest da usare per la firma richiesta SAML eseguita da OpenProject (Predefinito: %{default_option}). icon: > - Optionally provide a public URL to an icon graphic that will be displayed next to the provider name. + Facoltativamente, fornisci un URL pubblico a una icona grafica che verranno visualizzati accanto al nome del fornitore. metadata_for_idp: > - This information might be requested by your SAML identity provider. + Queste informazioni potrebbero essere richieste dal tuo fornitore di identità SAML. diff --git a/modules/auth_saml/config/locales/crowdin/ja.yml b/modules/auth_saml/config/locales/crowdin/ja.yml index 7c08efcb1eb..9dfd12f8628 100644 --- a/modules/auth_saml/config/locales/crowdin/ja.yml +++ b/modules/auth_saml/config/locales/crowdin/ja.yml @@ -98,7 +98,7 @@ ja: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/ka.yml b/modules/auth_saml/config/locales/crowdin/ka.yml index 6ef96a00254..d47579fbb83 100644 --- a/modules/auth_saml/config/locales/crowdin/ka.yml +++ b/modules/auth_saml/config/locales/crowdin/ka.yml @@ -98,7 +98,7 @@ ka: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/kk.yml b/modules/auth_saml/config/locales/crowdin/kk.yml index b9745264e3d..c4820555474 100644 --- a/modules/auth_saml/config/locales/crowdin/kk.yml +++ b/modules/auth_saml/config/locales/crowdin/kk.yml @@ -98,7 +98,7 @@ kk: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/ko.yml b/modules/auth_saml/config/locales/crowdin/ko.yml index eb1593cb948..bf3700f1dff 100644 --- a/modules/auth_saml/config/locales/crowdin/ko.yml +++ b/modules/auth_saml/config/locales/crowdin/ko.yml @@ -2,154 +2,154 @@ ko: activemodel: attributes: saml/provider: - display_name: Name - identifier: Identifier - secret: Secret - scope: Scope - assertion_consumer_service_url: ACS (Assertion consumer service) URL - limit_self_registration: Limit self registration - sp_entity_id: Service entity ID - metadata_url: Identity provider metadata URL - name_identifier_format: Name identifier format - idp_sso_service_url: Identity provider login endpoint - idp_slo_service_url: Identity provider logout endpoint - idp_cert: Public certificate of identity provider - authn_requests_signed: Sign SAML AuthnRequests - want_assertions_signed: Require signed responses - want_assertions_encrypted: Require encrypted responses - certificate: Certificate used by OpenProject for SAML requests - private_key: Corresponding private key for OpenProject SAML requests - signature_method: Signature algorithm - digest_method: Digest algorithm - format: "Format" - icon: "Custom icon" + display_name: 이름 + identifier: 식별자 + secret: 비밀번호 + scope: 범위 + assertion_consumer_service_url: ACS(Assertion Consumer Service) URL + limit_self_registration: 자체 등록 제한 + sp_entity_id: 서비스 엔티티 ID + metadata_url: ID 공급자 메타데이터 URL + name_identifier_format: 이름 식별자 형식 + idp_sso_service_url: ID 공급자 로그인 엔드포인트 + idp_slo_service_url: ID 공급자 로그아웃 엔드포인트 + idp_cert: ID 공급자의 공개 인증서 + authn_requests_signed: SAML AuthnRequests 서명 + want_assertions_signed: 서명된 응답 필요 + want_assertions_encrypted: 암호화된 응답 필요 + certificate: OpenProject에서 SAML 요청에 사용하는 인증서 + private_key: OpenProject SAML 요청에 해당하는 비공개 키 + signature_method: 서명 알고리즘 + digest_method: 다이제스트 알고리즘 + format: "형식" + icon: "사용자 지정 아이콘" activerecord: errors: models: saml/provider: - invalid_certificate: "is not a valid PEM-formatted certificate: %{additional_message}" - invalid_private_key: "is not a valid PEM-formatted private key: %{additional_message}" - certificate_expired: "is expired and can no longer be used." - unmatched_private_key: "does not belong to the given certificate" + invalid_certificate: "- 유효한 PEM 형식 인증서가 아닙니다: %{additional_message}" + invalid_private_key: "- 유효한 PEM 형식 비공개 키가 아닙니다: %{additional_message}" + certificate_expired: "- 만료되어 더 이상 사용할 수 없습니다." + unmatched_private_key: "- 지정된 인증서에 속하지 않습니다." saml: - menu_title: SAML providers + menu_title: SAML 공급자 info: - title: "SAML Protocol Configuration Parameters" + title: "SAML 프로토콜 구성 매개 변수" description: > - Use these parameters to configure your identity provider connection to OpenProject. + 이러한 매개 변수를 사용하여 OpenProject에 대한 ID 공급자 연결을 구성합니다. metadata_parser: - success: "Successfully updated the configuration using the identity provider metadata." - invalid_url: "Provided metadata URL is invalid. Provide a HTTP(s) URL." - error: "Failed to retrieve the identity provider metadata: %{error}" + success: "ID 공급자 메타데이터를 사용하여 구성을 업데이트했습니다." + invalid_url: "제공한 메타데이터 URL이 유효하지 않습니다. HTTP(s) URL을 입력하세요." + error: "ID 공급자 메타데이터를 검색하지 못했습니다: %{error}" providers: - label_empty_title: "No SAML providers configured yet." - label_empty_description: "Add a provider to see them here." - label_automatic_configuration: Automatic configuration - label_metadata: Metadata - label_metadata_endpoint: OpenProject metadata endpoint - label_openproject_information: OpenProject information - label_configuration_details: "Identity provider endpoints and certificates" - label_configuration_encryption: "Signatures and Encryption" - label_add_new: New SAML identity provider - label_edit: Edit SAML identity provider %{name} - label_uid: Internal user id - label_mapping: Mapping - label_mapping_for: "Mapping for: %{attribute}" - label_requested_attribute_for: "Requested attribute for: %{attribute}" - no_results_table: No SAML identity providers have been defined yet. - plural: SAML identity providers - singular: SAML identity provider - requested_attributes: Requested attributes - attribute_mapping: Attribute mapping + label_empty_title: "아직 구성된 SAML 공급자가 없습니다." + label_empty_description: "여기에서 보려면 공급자를 추가합니다." + label_automatic_configuration: 자동 구성 + label_metadata: 메타데이터 + label_metadata_endpoint: OpenProject 메타데이터 엔드포인트 + label_openproject_information: OpenProject 정보 + label_configuration_details: "ID 공급자 엔드포인트 및 인증서" + label_configuration_encryption: "서명 및 암호화" + label_add_new: 새로운 SAML ID 공급자 + label_edit: SAML ID 공급자 %{name} 편집 + label_uid: 내부 사용자 ID + label_mapping: 매핑 + label_mapping_for: "매핑 대상: %{attribute}" + label_requested_attribute_for: "요청된 특성 대상: %{attribute}" + no_results_table: 아직 정의된 SAML ID 공급자가 없습니다. + plural: SAML ID 공급자 + singular: SAML ID 공급자 + requested_attributes: 요청된 특성 + attribute_mapping: 특성 매핑 attribute_mapping_text: > - The following fields control which attributes provided by the SAML identity provider are used to provide user attributes in OpenProject + 다음 필드는 OpenProject에 사용자 특성을 제공하는 데 사용되는 SAML ID 공급자 제공 특성을 제어합니다. metadata: - dialog: "This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider:" + dialog: "OpenProject SAML 메타데이터를 사용할 수 있는 URL입니다. 선택적으로 이 URL을 사용하여 ID 공급자를 구성합니다:" upsale: - description: Connect OpenProject to a SAML identity provider + description: SAML ID 공급자에 OpenProject 연결 request_attributes: - title: 'Requested attributes' + title: '요청된 특성' legend: > - These attributes are added to the SAML XML metadata to signify to the identify provider which attributes OpenProject requires. You may still need to explicitly configure your identity provider to send these attributes. Please refer to your IdP's documentation. - name: 'Requested attribute key' - format: 'Attribute format' + 이러한 특성은 SAML XML 메타데이터에 추가되어 OpenProject에 필요한 특성이 무엇인지 ID 공급자에게 나타냅니다. 이러한 특성을 보내려면 ID 공급자를 명시적으로 구성해야 할 수도 있습니다. 해당 ID 공급자의 설명서를 참조하세요. + name: '요청된 특성 키' + format: '특성 형식' section_headers: - configuration: "Primary configuration" - attributes: "Attributes" + configuration: "기본 구성" + attributes: "특성" section_texts: - display_name: "Configure the display name of the SAML provider." - metadata: "Pre-fill configuration using a metadata URL or by pasting metadata XML" - metadata_form: "If your identity provider has a metadata endpoint or XML download, add it below to pre-fill the configuration." - metadata_form_banner: "Editing the metadata may override existing values in other sections. " - configuration: "Configure the endpoint URLs for the identity provider, certificates, and further SAML options." - configuration_metadata: "This information has been pre-filled using the supplied metadata. In most cases, they do not require editing." - encryption: "Configure assertion signatures and encryption for SAML requests and responses." - encryption_form: "You may optionally want to encrypt the assertion response, or have requests from OpenProject signed." - mapping: "Manually adjust the mapping between the SAML response and user attributes in OpenProject." - requested_attributes: "Define the set of attributes to be requested in the SAML request sent to your identity provider." - seeded_from_env: "This provider was seeded from the environment configuration. It cannot be edited." + display_name: "SAML 공급자의 표시 이름을 구성합니다." + metadata: "메타데이터 URL을 사용하거나 메타데이터 XML을 붙여넣어 구성 미리 채우기" + metadata_form: "ID 공급자에게 메타데이터 엔드포인트 또는 XML 다운로드가 있는 경우 아래에 추가하여 구성을 미리 채웁니다." + metadata_form_banner: "메타데이터를 편집하면 다른 섹션의 기존 값이 재정의될 수 있습니다. " + configuration: "ID 공급자, 인증서 및 추가 SAML 옵션에 대한 엔드포인트 URL을 구성합니다." + configuration_metadata: "이 정보는 제공된 메타데이터를 사용하여 미리 채워졌습니다. 대부분의 경우 편집할 필요가 없습니다." + encryption: "SAML 요청 및 응답에 대한 어설션 서명 및 암호화를 구성합니다." + encryption_form: "선택적으로 어설션 응답을 암호화하거나 OpenProject의 요청에 서명할 수 있습니다." + mapping: "OpenProject에서 SAML 응답과 사용자 특성 간 매핑을 수동으로 조정합니다." + requested_attributes: "ID 공급자에게 보내는 SAML 요청에서 요청할 특성 집합을 정의합니다." + seeded_from_env: "이 공급자는 환경 구성에서 시드되었으며, 편집할 수 없습니다." settings: - metadata_none: "I don't have metadata" - metadata_url: "Metadata URL" - metadata_xml: "Metadata XML" + metadata_none: "메타데이터가 없습니다" + metadata_url: "메타데이터 URL" + metadata_xml: "메타데이터 XML" instructions: documentation_link: > - Please refer to our [documentation on configuring SAML providers](docs_url) for more information on these configuration options. + 이러한 구성 옵션에 대한 자세한 내용은 [SAML 공급자 구성에 대한 문서](docs_url)를 참조하세요. display_name: > - The name of the provider. This will be displayed as the login button and in the list of providers. + 공급자 이름입니다. 로그인 버튼으로 표시되며 공급자 목록에 표시됩니다. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > - Your identity provider provides a metadata URL. + ID 공급자가 메타데이터 URL을 제공합니다. metadata_xml: > - Your identity provider provides a metadata XML download. + ID 공급자가 메타데이터 XML 다운로드를 제공합니다. limit_self_registration: > - If enabled users can only register using this provider if the self registration setting allows for it. + 활성화되면, 사용자는 자체 등록 설정에서 허용하는 경우에만 이 공급자를 사용하여 등록할 수 있습니다. sp_entity_id: > - The entity ID of the service provider (SP). Sometimes also referred to as Audience. This is the unique client identifier of the OpenProject instance. + 서비스 공급자(SP)의 엔티티 ID입니다. 오디언스라고 하는 경우도 있습니다. OpenProject 인스턴스의 고유한 클라이언트 ID입니다. idp_sso_service_url: > - The URL of the identity provider login endpoint. + ID 공급자 로그인 엔드포인트의 URL입니다. idp_slo_service_url: > - The URL of the identity provider login endpoint. + ID 공급자 로그인 엔드포인트의 URL입니다. idp_cert: > - Enter the X509 PEM-formatted public certificate of the identity provider. You can enter multiple certificates by separating them with a newline. + ID 공급자의 X509 PEM 형식 공개 인증서를 입력합니다. 여러 인증서를 새 줄로 구분하여 입력할 수 있습니다. name_identifier_format: > - Set the name identifier format to be used for the SAML assertion. + SAML 어설션에 사용할 이름 식별자 형식을 설정합니다. sp_metadata_endpoint: > - This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider. + OpenProject SAML 메타데이터를 사용할 수 있는 URL입니다. 선택적으로 이 URL을 사용하여 ID 공급자를 구성합니다. mapping: > - Configure the mapping between the SAML response and user attributes in OpenProject. You can configure multiple attribute names to look for. OpenProject will choose the first available attribute from the SAML response. + OpenProject에서 SAML 응답과 사용자 특성 간 매핑을 구성합니다. 찾을 특성 이름을 여러 개 구성할 수 있습니다. OpenProject는 SAML 응답에서 사용 가능한 첫 번째 특성을 선택합니다. mapping_login: > - SAML attributes from the response used for the login. + 로그인에 사용된 응답의 SAML 특성입니다. mapping_mail: > - SAML attributes from the response used for the email of the user. + 사용자 이메일에 사용된 응답의 SAML 특성입니다. mapping_firstname: > - SAML attributes from the response used for the given name. + 지정된 이름에 사용된 응답의 SAML 특성입니다. mapping_lastname: > - SAML attributes from the response used for the last name. + 성에 사용된 응답의 SAML 특성입니다. mapping_uid: > - SAML attribute to use for the internal user ID. Leave empty to use the name_id attribute instead + 내부 사용자 ID에 사용할 SAML 특성입니다. name_id 특성을 대신 사용하려면 비워 둡니다. request_uid: > - SAML attribute to request for the internal user ID. By default, the name_id will be used for this field. + 내부 사용자 ID를 요청하는 SAML 특성입니다. 기본적으로 이 필드에는 name_id가 사용됩니다. requested_attributes: > - These attributes are added to the SAML request XML to communicate to the identity provider which attributes OpenProject requires. + 이러한 특성은 SAML 요청 XML에 추가되어 OpenProject에 필요한 특성을 ID 공급자에게 전달합니다. requested_format: > - The format of the requested attribute. This is used to specify the format of the attribute in the SAML request. Please see [documentation on configuring requested attributes](docs_url) for more information. + 요청된 특성의 형식입니다. SAML 요청에서 특성의 형식을 지정하는 데 사용됩니다. 자세한 내용은 [요청된 특성 구성에 대한 문서](docs_url)를 참조하세요. authn_requests_signed: > - If checked, OpenProject will sign the SAML AuthnRequest. You will have to provide a signing certificate and private key using the fields below. + 이 옵션을 선택하면 OpenProject가 SAML AuthnRequest에 서명합니다. 아래 필드를 사용하여 서명 인증서와 비공개 키를 제공해야 합니다. want_assertions_signed: > - If checked, OpenProject will required signed responses from the identity provider using it's own certificate keypair. OpenProject will verify the signature against the certificate from the basic configuration section. + 이 옵션을 선택하면 OpenProject가 고유한 인증서 키 쌍을 사용한 ID 공급자의 서명된 응답을 요구합니다. OpenProject는 기본 구성 섹션의 인증서와 비교하여 서명을 확인합니다. want_assertions_encrypted: > - If enabled, require the identity provider to encrypt the assertion response using the certificate pair that you provide. + 이 옵션을 활성화하면 사용자가 제공하는 인증서 쌍을 사용하여 어설션 응답을 암호화하도록 ID 공급자에 요구합니다. certificate: > - Enter the X509 PEM-formatted certificate used by OpenProject for signing SAML requests. + OpenProject가 SAML 요청 서명에 사용하는 X509 PEM 형식 인증서를 입력합니다. private_key: > - Enter the X509 PEM-formatted private key for the above certificate. This needs to be an RSA private key. + 위 인증서에 대한 X509 PEM 형식 비공개 키를 입력합니다. 이 키는 RSA 비공개 키여야 합니다. signature_method: > - Select the signature algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + OpenProject에서 수행하는 SAML 요청 서명에 사용할 서명 알고리즘을 선택합니다(기본값: %{default_option}). digest_method: > - Select the digest algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + OpenProject에서 수행하는 SAML 요청 서명에 사용할 다이제스트 알고리즘을 선택합니다(기본값: %{default_option}). icon: > - Optionally provide a public URL to an icon graphic that will be displayed next to the provider name. + 공급자 이름 옆에 표시되는 아이콘 그래픽의 공개 URL을 선택적으로 제공합니다. metadata_for_idp: > - This information might be requested by your SAML identity provider. + 이 정보는 SAML ID 공급자가 요청할 수 있습니다. diff --git a/modules/auth_saml/config/locales/crowdin/lt.yml b/modules/auth_saml/config/locales/crowdin/lt.yml index 48b3bd06009..1d50f9a1a97 100644 --- a/modules/auth_saml/config/locales/crowdin/lt.yml +++ b/modules/auth_saml/config/locales/crowdin/lt.yml @@ -98,7 +98,7 @@ lt: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/lv.yml b/modules/auth_saml/config/locales/crowdin/lv.yml index 1b14bbea05c..0c2fe3ad7cd 100644 --- a/modules/auth_saml/config/locales/crowdin/lv.yml +++ b/modules/auth_saml/config/locales/crowdin/lv.yml @@ -98,7 +98,7 @@ lv: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/mn.yml b/modules/auth_saml/config/locales/crowdin/mn.yml index da9fca17e18..fba25985414 100644 --- a/modules/auth_saml/config/locales/crowdin/mn.yml +++ b/modules/auth_saml/config/locales/crowdin/mn.yml @@ -98,7 +98,7 @@ mn: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/ms.yml b/modules/auth_saml/config/locales/crowdin/ms.yml index d52dc493732..348f17bb621 100644 --- a/modules/auth_saml/config/locales/crowdin/ms.yml +++ b/modules/auth_saml/config/locales/crowdin/ms.yml @@ -98,7 +98,7 @@ ms: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/ne.yml b/modules/auth_saml/config/locales/crowdin/ne.yml index 40030e23d34..be26e30fed9 100644 --- a/modules/auth_saml/config/locales/crowdin/ne.yml +++ b/modules/auth_saml/config/locales/crowdin/ne.yml @@ -98,7 +98,7 @@ ne: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/nl.yml b/modules/auth_saml/config/locales/crowdin/nl.yml index a867c81c3a7..2909ccf6689 100644 --- a/modules/auth_saml/config/locales/crowdin/nl.yml +++ b/modules/auth_saml/config/locales/crowdin/nl.yml @@ -98,7 +98,7 @@ nl: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/no.yml b/modules/auth_saml/config/locales/crowdin/no.yml index f1ab6d510b6..d10af657767 100644 --- a/modules/auth_saml/config/locales/crowdin/no.yml +++ b/modules/auth_saml/config/locales/crowdin/no.yml @@ -98,7 +98,7 @@ display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/pl.yml b/modules/auth_saml/config/locales/crowdin/pl.yml index 6191f95ce6d..2474356e5e2 100644 --- a/modules/auth_saml/config/locales/crowdin/pl.yml +++ b/modules/auth_saml/config/locales/crowdin/pl.yml @@ -38,7 +38,7 @@ pl: description: > Użyj tych parametrów, aby skonfigurować połączenie dostawcy tożsamości z OpenProject. metadata_parser: - success: "Pomyślnie zaktualizowano konfigurację używając metadanych dostawcy tożsamości." + success: "Pomyślnie zaktualizowano konfigurację, używając metadanych dostawcy tożsamości." invalid_url: "Podany adres URL metadanych jest nieprawidłowy. Podaj adres URL HTTP(s)." error: "Nie udało się pobrać metadanych dostawcy identyfikacji: %{error}" providers: @@ -70,16 +70,16 @@ pl: request_attributes: title: 'Wymagane atrybuty' legend: > - Te atrybuty są dodawane do metadanych SAML XML, aby oznaczyć dostawcę tożsamości, którego atrybutów wymaga OpenProject. Nadal może być konieczne jednoznaczne skonfigurowanie dostawcy tożsamości do wysyłania tych atrybutów. Zapoznaj się z dokumentacją dostawcy tożsamości. + Te atrybuty są dodawane do metadanych SAML XML, aby pokazać dostawcy tożsamości, które atrybuty są wymagane przez OpenProject. Nadal może być konieczne jednoznaczne skonfigurowanie dostawcy tożsamości do wysyłania tych atrybutów. Zapoznaj się z dokumentacją swojego dostawcy tożsamości. name: 'Wymagany klucz atrybutu' format: 'Format atrybutu' section_headers: - configuration: "Podstawowa fkonfiguracja" + configuration: "Podstawowa konfiguracja" attributes: "Atrybuty" section_texts: display_name: "Skonfiguruj wyświetlaną nazwę dostawcy SAML." metadata: "Wstępnie wypełnij konfigurację, używając adresu URL metadanych lub wklej metadane XML" - metadata_form: "Jeśli Twój dostawca tożsamości ma punkt końcowy metadanych lub pobranie XML, dodaj go poniżej, aby wstępnie wypełnić konfigurację." + metadata_form: "Jeśli Twój dostawca tożsamości ma punkt końcowy metadanych lub możliwość pobrania XML, dodaj go poniżej, aby wstępnie wypełnić konfigurację." metadata_form_banner: "Edycja metadanych może zastąpić istniejące wartości w innych sekcjach. " configuration: "Skonfiguruj adresy URL punktu końcowego dla dostawcy tożsamości, certyfikatów i dalszych opcji SAML." configuration_metadata: "Te informacje zostały wypełnione przy użyciu dostarczonych metadanych. W większości przypadków nie wymagają one edycji." @@ -98,7 +98,7 @@ pl: display_name: > Nazwa dostawcy. Zostanie wyświetlona jako przycisk logowania i element listy dostawców. metadata_none: > - Dostawca Twojej tożsamości nie posiada punktu końcowego metadanych ani opcji pobierania XML. Możesz go skonfigurować ręcznie. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Dostawca tożsamości podaje adres URL metadanych. metadata_xml: > @@ -136,11 +136,11 @@ pl: requested_format: > Format żądanego atrybutu. Jest używany do określenia formatu atrybutu w żądaniu SAML. Zobacz [dokumentację dotyczącą konfiguracji żądanych atrybutów](docs_url), aby uzyskać więcej informacji. authn_requests_signed: > - Jeśli zaznaczone, OpenProject podpisze SAML AuthnRequest. Będzie trzeba podać certyfikat podpisu i klucz prywatny, używając poniższych pól. + Jeśli zaznaczone, OpenProject podpisze SAML AuthnRequest. Wymagane będzie podanie certyfikatu podpisu i klucza prywatnego, wykorzystując poniższe pola. want_assertions_signed: > Jeśli zaznaczone, OpenProject będzie wymagał podpisanych odpowiedzi od dostawcy tożsamości, używając własnego klucza certyfikatu. OpenProject zweryfikuje podpis z certyfikatu z sekcji podstawowej konfiguracji. want_assertions_encrypted: > - Jeśli opcja jest włączona, wymaga od dostawcy tożsamości zaszyfrowania jego odpowiedzi za pomocą pary certyfikatów, którą podasz. + Jeśli opcja jest włączona, wymaga od dostawcy tożsamości zaszyfrowania jego odpowiedzi za pomocą podanej przez Ciebie pary certyfikatów. certificate: > Wprowadź certyfikat w formacie X509 PEM używany przez OpenProject do podpisywania żądań SAML. private_key: > diff --git a/modules/auth_saml/config/locales/crowdin/pt-BR.yml b/modules/auth_saml/config/locales/crowdin/pt-BR.yml index ee67e75248d..61f5c08ab8c 100644 --- a/modules/auth_saml/config/locales/crowdin/pt-BR.yml +++ b/modules/auth_saml/config/locales/crowdin/pt-BR.yml @@ -98,7 +98,7 @@ pt-BR: display_name: > O nome do provedor. Isso será exibido como o botão de login e na lista de provedores. metadata_none: > - Seu provedor de identidade não tem um ponto de extremidade de metadados nem a opção de download de XML. Você pode fazer a configuração manualmente. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Seu provedor de identidade fornece uma URL de metadados. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/pt-PT.yml b/modules/auth_saml/config/locales/crowdin/pt-PT.yml index 86d76468ff3..c22bdacfe7e 100644 --- a/modules/auth_saml/config/locales/crowdin/pt-PT.yml +++ b/modules/auth_saml/config/locales/crowdin/pt-PT.yml @@ -3,153 +3,153 @@ pt-PT: attributes: saml/provider: display_name: Nome - identifier: Identifier - secret: Secret - scope: Scope - assertion_consumer_service_url: ACS (Assertion consumer service) URL - limit_self_registration: Limit self registration - sp_entity_id: Service entity ID - metadata_url: Identity provider metadata URL - name_identifier_format: Name identifier format - idp_sso_service_url: Identity provider login endpoint - idp_slo_service_url: Identity provider logout endpoint - idp_cert: Public certificate of identity provider - authn_requests_signed: Sign SAML AuthnRequests - want_assertions_signed: Require signed responses - want_assertions_encrypted: Require encrypted responses - certificate: Certificate used by OpenProject for SAML requests - private_key: Corresponding private key for OpenProject SAML requests - signature_method: Signature algorithm - digest_method: Digest algorithm - format: "Format" - icon: "Custom icon" + identifier: Identificador + secret: Segredo + scope: Âmbito + assertion_consumer_service_url: URL do ACS (Assertion consumer service) + limit_self_registration: Limitar auto-registo + sp_entity_id: ID da entidade de serviço + metadata_url: URL dos metadados do fornecedor de identidade + name_identifier_format: Formato do identificador do nome + idp_sso_service_url: Ponto final do início de sessão do fornecedor de identidade + idp_slo_service_url: Ponto final do fim de sessão do fornecedor de identidade + idp_cert: Certificado público do fornecedor de identidade + authn_requests_signed: Assinar SAML AuthnRequests + want_assertions_signed: Exigir respostas assinadas + want_assertions_encrypted: Exigir respostas encriptadas + certificate: Certificado utilizado pelo OpenProject para pedidos SAML + private_key: Chave privada correspondente para pedidos SAML do OpenProject + signature_method: Algoritmo de assinatura + digest_method: Algoritmo de resumo + format: "Formato" + icon: "Ícone personalizado" activerecord: errors: models: saml/provider: - invalid_certificate: "is not a valid PEM-formatted certificate: %{additional_message}" - invalid_private_key: "is not a valid PEM-formatted private key: %{additional_message}" - certificate_expired: "is expired and can no longer be used." - unmatched_private_key: "does not belong to the given certificate" + invalid_certificate: "não é um certificado válido em formato PEM: %{additional_message}" + invalid_private_key: "não é uma chave privada válida em formato PEM: %{additional_message}" + certificate_expired: "expirou e já não pode ser utilizado." + unmatched_private_key: "não pertence ao certificado fornecido" saml: - menu_title: SAML providers + menu_title: Fornecedores SAML info: - title: "SAML Protocol Configuration Parameters" + title: "Parâmetros de configuração do protocolo SAML" description: > - Use these parameters to configure your identity provider connection to OpenProject. + Utilize estes parâmetros para configurar a ligação do seu fornecedor de identidade ao OpenProject. metadata_parser: - success: "Successfully updated the configuration using the identity provider metadata." - invalid_url: "Provided metadata URL is invalid. Provide a HTTP(s) URL." - error: "Failed to retrieve the identity provider metadata: %{error}" + success: "Atualizou a configuração utilizando os metadados do fornecedor de identidade com êxito." + invalid_url: "O URL de metadados fornecido é inválido. Forneça um URL HTTP(s)." + error: "Falha ao recuperar os metadados do fornecedor de identidade: %{error}" providers: - label_empty_title: "No SAML providers configured yet." - label_empty_description: "Add a provider to see them here." - label_automatic_configuration: Automatic configuration - label_metadata: Metadata - label_metadata_endpoint: OpenProject metadata endpoint - label_openproject_information: OpenProject information - label_configuration_details: "Identity provider endpoints and certificates" - label_configuration_encryption: "Signatures and Encryption" - label_add_new: New SAML identity provider - label_edit: Edit SAML identity provider %{name} - label_uid: Internal user id - label_mapping: Mapping - label_mapping_for: "Mapping for: %{attribute}" - label_requested_attribute_for: "Requested attribute for: %{attribute}" - no_results_table: No SAML identity providers have been defined yet. - plural: SAML identity providers - singular: SAML identity provider - requested_attributes: Requested attributes - attribute_mapping: Attribute mapping + label_empty_title: "Ainda não existem fornecedores SAML configurados." + label_empty_description: "Adicione um fornecedor para vê-lo aqui." + label_automatic_configuration: Configuração automática + label_metadata: Metadados + label_metadata_endpoint: Ponto final de metadados do OpenProject + label_openproject_information: Informações sobre o OpenProject + label_configuration_details: "Pontos finais e certificados do fornecedor de identidade" + label_configuration_encryption: "Assinaturas e encriptação" + label_add_new: Novo fornecedor de identidade SAML + label_edit: Edite o fornecedor de identidade SAML %{name} + label_uid: ID do utilizador interno + label_mapping: Mapeamento + label_mapping_for: "Mapeamento para: %{attribute}" + label_requested_attribute_for: "Atributo solicitado para: %{attribute}" + no_results_table: Ainda não foram definidos fornecedores de identidade SAML. + plural: Fornecedores de identidade SAML + singular: Fornecedor de identidade SAML + requested_attributes: Atributos solicitados + attribute_mapping: Mapeamento de atributos attribute_mapping_text: > - The following fields control which attributes provided by the SAML identity provider are used to provide user attributes in OpenProject + Os seguintes campos controlam os atributos fornecidos pelo fornecedor de identidade SAML que são utilizados para fornecer atributos de utilizador no OpenProject metadata: - dialog: "This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider:" + dialog: "Este é o URL onde os metadados SAML do OpenProject estão disponíveis. Opcionalmente, utilize-o para configurar o seu fornecedor de identidade:" upsale: - description: Connect OpenProject to a SAML identity provider + description: Associar o OpenProject a um fornecedor de identidade SAML request_attributes: - title: 'Requested attributes' + title: 'Atributos solicitados' legend: > - These attributes are added to the SAML XML metadata to signify to the identify provider which attributes OpenProject requires. You may still need to explicitly configure your identity provider to send these attributes. Please refer to your IdP's documentation. - name: 'Requested attribute key' - format: 'Attribute format' + Estes atributos são adicionados aos metadados SAML XML para indicar ao fornecedor de identidade quais são os atributos exigidos pelo OpenProject. Poderá ainda ter de configurar explicitamente o seu fornecedor de identidade para enviar estes atributos. Consulte a documentação do seu IdP. + name: 'Chave de atributo solicitada' + format: 'Formato do atributo' section_headers: - configuration: "Primary configuration" - attributes: "Attributes" + configuration: "Configuração primária" + attributes: "Atributos" section_texts: - display_name: "Configure the display name of the SAML provider." - metadata: "Pre-fill configuration using a metadata URL or by pasting metadata XML" - metadata_form: "If your identity provider has a metadata endpoint or XML download, add it below to pre-fill the configuration." - metadata_form_banner: "Editing the metadata may override existing values in other sections. " - configuration: "Configure the endpoint URLs for the identity provider, certificates, and further SAML options." - configuration_metadata: "This information has been pre-filled using the supplied metadata. In most cases, they do not require editing." - encryption: "Configure assertion signatures and encryption for SAML requests and responses." - encryption_form: "You may optionally want to encrypt the assertion response, or have requests from OpenProject signed." - mapping: "Manually adjust the mapping between the SAML response and user attributes in OpenProject." - requested_attributes: "Define the set of attributes to be requested in the SAML request sent to your identity provider." - seeded_from_env: "This provider was seeded from the environment configuration. It cannot be edited." + display_name: "Configure o nome de apresentação do fornecedor SAML." + metadata: "Preencha previamente a configuração ao utilizar um URL de metadados ou ao colar XML de metadados" + metadata_form: "Se o seu fornecedor de identidade tiver um ponto final de metadados ou uma transferência XML, adicione-o abaixo para preencher previamente a configuração." + metadata_form_banner: "A edição dos metadados pode sobrepor-se aos valores existentes noutras secções. " + configuration: "Configure os URL do ponto final para o fornecedor de identidade, certificados e outras opções SAML." + configuration_metadata: "Estas informações foram pré-preenchidas utilizando os metadados fornecidos. Na maioria dos casos, não necessitam de edição." + encryption: "Configure assinaturas de afirmação e encriptação para pedidos e respostas SAML." + encryption_form: "Opcionalmente, pode querer encriptar a resposta da asserção ou ter pedidos do OpenProject assinados." + mapping: "Ajuste manualmente o mapeamento entre a resposta SAML e os atributos do utilizador no OpenProject." + requested_attributes: "Defina o conjunto de atributos a solicitar no pedido SAML enviado para o seu fornecedor de identidade." + seeded_from_env: "Este fornecedor foi semeado a partir da configuração do ambiente. Não pode ser editado." settings: - metadata_none: "I don't have metadata" - metadata_url: "Metadata URL" - metadata_xml: "Metadata XML" + metadata_none: "Não tenho metadados" + metadata_url: "URL de metadados" + metadata_xml: "XML de metadados" instructions: documentation_link: > - Please refer to our [documentation on configuring SAML providers](docs_url) for more information on these configuration options. + Consulte a nossa [documentação sobre a configuração de fornecedores SAML] (docs_url) para obter mais informações sobre estas opções de configuração. display_name: > - The name of the provider. This will be displayed as the login button and in the list of providers. + O nome do fornecedor. Este nome será apresentado no botão de início de sessão e na lista de fornecedores. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > - Your identity provider provides a metadata URL. + O seu fornecedor de identidade fornece um URL de metadados. metadata_xml: > - Your identity provider provides a metadata XML download. + O seu fornecedor de identidade fornece uma transferência XML de metadados. limit_self_registration: > - If enabled users can only register using this provider if the self registration setting allows for it. + Se estiver ativado, os utilizadores apenas podem registar-se utilizando este fornecedor se a definição de auto-registo o permitir. sp_entity_id: > - The entity ID of the service provider (SP). Sometimes also referred to as Audience. This is the unique client identifier of the OpenProject instance. + O ID da entidade do fornecedor de serviços (SP). Por vezes também referido como Audiência. Este é o identificador de cliente único da instância do OpenProject. idp_sso_service_url: > - The URL of the identity provider login endpoint. + O URL do ponto final de início de sessão do fornecedor de identidade. idp_slo_service_url: > - The URL of the identity provider login endpoint. + O URL do ponto final de início de sessão do fornecedor de identidade. idp_cert: > - Enter the X509 PEM-formatted public certificate of the identity provider. You can enter multiple certificates by separating them with a newline. + Introduza o certificado público com formato X509 PEM do fornecedor de identidade. Pode introduzir vários certificados, separando-os com uma nova linha. name_identifier_format: > - Set the name identifier format to be used for the SAML assertion. + Defina o formato do identificador de nome a ser utilizado para a afirmação SAML. sp_metadata_endpoint: > - This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider. + Este é o URL onde os metadados SAML do OpenProject estão disponíveis. Opcionalmente, utilize-o para configurar o seu fornecedor de identidade. mapping: > - Configure the mapping between the SAML response and user attributes in OpenProject. You can configure multiple attribute names to look for. OpenProject will choose the first available attribute from the SAML response. + Configure o mapeamento entre a resposta SAML e os atributos do utilizador no OpenProject. Pode configurar vários nomes de atributos para procurar. O OpenProject irá escolher o primeiro atributo disponível na resposta SAML. mapping_login: > - SAML attributes from the response used for the login. + Atributos SAML da resposta utilizados para o início de sessão. mapping_mail: > - SAML attributes from the response used for the email of the user. + Atributos SAML da resposta utilizados para o e-mail do utilizador. mapping_firstname: > - SAML attributes from the response used for the given name. + Atributos SAML da resposta utilizados para o nome indicado. mapping_lastname: > - SAML attributes from the response used for the last name. + Atributos SAML da resposta utilizados para o sobrenome. mapping_uid: > - SAML attribute to use for the internal user ID. Leave empty to use the name_id attribute instead + Atributo SAML a utilizar para o ID de utilizador interno. Deixe em branco para utilizar o atributo name_id request_uid: > - SAML attribute to request for the internal user ID. By default, the name_id will be used for this field. + Atributo SAML a solicitar para o ID de utilizador interno. Por predefinição, será utilizado o name_id para este campo. requested_attributes: > - These attributes are added to the SAML request XML to communicate to the identity provider which attributes OpenProject requires. + Estes atributos são adicionados ao XML do pedido SAML para comunicar ao fornecedor de identidade quais os atributos exigidos pelo OpenProject. requested_format: > - The format of the requested attribute. This is used to specify the format of the attribute in the SAML request. Please see [documentation on configuring requested attributes](docs_url) for more information. + O formato do atributo solicitado. Isto é utilizado para especificar o formato do atributo no pedido SAML. Consulte [documentação sobre a configuração de atributos solicitados](docs_url) para obter mais informações. authn_requests_signed: > - If checked, OpenProject will sign the SAML AuthnRequest. You will have to provide a signing certificate and private key using the fields below. + Se estiver selecionado, o OpenProject irá assinar o SAML AuthnRequest. Terá de fornecer um certificado de assinatura e uma chave privada utilizando os campos abaixo. want_assertions_signed: > - If checked, OpenProject will required signed responses from the identity provider using it's own certificate keypair. OpenProject will verify the signature against the certificate from the basic configuration section. + Se estiver selecionado, o OpenProject irá exigir respostas assinadas do fornecedor de identidade utilizando o seu próprio par de chaves de certificado. O OpenProject irá verificar a assinatura em relação ao certificado da secção de configuração básica. want_assertions_encrypted: > - If enabled, require the identity provider to encrypt the assertion response using the certificate pair that you provide. + Se estiver ativado, exija que o fornecedor de identidade encripte a resposta de afirmação utilizando o par de certificados que forneceu. certificate: > - Enter the X509 PEM-formatted certificate used by OpenProject for signing SAML requests. + Insira o certificado X509 PEM formatado usado pelo OpenProject para assinar solicitações SAML. private_key: > - Enter the X509 PEM-formatted private key for the above certificate. This needs to be an RSA private key. + Introduza a chave privada X509 PEM formatada para o certificado acima. Esta tem de ser uma chave privada RSA. signature_method: > - Select the signature algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + Selecione o algoritmo de assinatura a utilizar para a assinatura do pedido SAML efetuada pelo OpenProject (Predefinição: %{default_option}). digest_method: > - Select the digest algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + Selecione o algoritmo de resumo a utilizar para a assinatura do pedido SAML efetuada pelo OpenProject (Predefinição: %{default_option}). icon: > - Optionally provide a public URL to an icon graphic that will be displayed next to the provider name. + Opcionalmente, forneça um URL público para um ícone gráfico que será apresentado junto ao nome do fornecedor. metadata_for_idp: > - This information might be requested by your SAML identity provider. + Estas informações podem ser solicitadas pelo seu fornecedor de identidade SAML. diff --git a/modules/auth_saml/config/locales/crowdin/ro.yml b/modules/auth_saml/config/locales/crowdin/ro.yml index ce719565e17..d162a38adc5 100644 --- a/modules/auth_saml/config/locales/crowdin/ro.yml +++ b/modules/auth_saml/config/locales/crowdin/ro.yml @@ -98,7 +98,7 @@ ro: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/ru.yml b/modules/auth_saml/config/locales/crowdin/ru.yml index 6f7f638d49b..43f5b1bcd1d 100644 --- a/modules/auth_saml/config/locales/crowdin/ru.yml +++ b/modules/auth_saml/config/locales/crowdin/ru.yml @@ -98,7 +98,7 @@ ru: display_name: > Имя провайдера. Оно будет отображаться как кнопка входа и в списке провайдеров. metadata_none: > - Ваш провайдер идентификации не имеет конечной точки метаданных или возможности загрузки XML. Вы можете выполнить его настройку вручную. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Ваш провайдер идентификации предоставляет URL-адрес метаданных. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/rw.yml b/modules/auth_saml/config/locales/crowdin/rw.yml index ac419c282da..04c9051194d 100644 --- a/modules/auth_saml/config/locales/crowdin/rw.yml +++ b/modules/auth_saml/config/locales/crowdin/rw.yml @@ -98,7 +98,7 @@ rw: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/si.yml b/modules/auth_saml/config/locales/crowdin/si.yml index c5ed2de59d3..f28b9da6bdc 100644 --- a/modules/auth_saml/config/locales/crowdin/si.yml +++ b/modules/auth_saml/config/locales/crowdin/si.yml @@ -98,7 +98,7 @@ si: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/sk.yml b/modules/auth_saml/config/locales/crowdin/sk.yml index 94e52131a6d..7b934d21de6 100644 --- a/modules/auth_saml/config/locales/crowdin/sk.yml +++ b/modules/auth_saml/config/locales/crowdin/sk.yml @@ -98,7 +98,7 @@ sk: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/sl.yml b/modules/auth_saml/config/locales/crowdin/sl.yml index 05d2cdd2a35..b0f4be268c2 100644 --- a/modules/auth_saml/config/locales/crowdin/sl.yml +++ b/modules/auth_saml/config/locales/crowdin/sl.yml @@ -98,7 +98,7 @@ sl: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/sr.yml b/modules/auth_saml/config/locales/crowdin/sr.yml index 6123e2a6fd1..677f992d38a 100644 --- a/modules/auth_saml/config/locales/crowdin/sr.yml +++ b/modules/auth_saml/config/locales/crowdin/sr.yml @@ -98,7 +98,7 @@ sr: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/sv.yml b/modules/auth_saml/config/locales/crowdin/sv.yml index d8b4cc5e0d4..aec41b62f7d 100644 --- a/modules/auth_saml/config/locales/crowdin/sv.yml +++ b/modules/auth_saml/config/locales/crowdin/sv.yml @@ -98,7 +98,7 @@ sv: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/th.yml b/modules/auth_saml/config/locales/crowdin/th.yml index 1fc63a5127e..898c497c284 100644 --- a/modules/auth_saml/config/locales/crowdin/th.yml +++ b/modules/auth_saml/config/locales/crowdin/th.yml @@ -98,7 +98,7 @@ th: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/tr.yml b/modules/auth_saml/config/locales/crowdin/tr.yml index 8827b827a99..b396d4df36f 100644 --- a/modules/auth_saml/config/locales/crowdin/tr.yml +++ b/modules/auth_saml/config/locales/crowdin/tr.yml @@ -98,7 +98,7 @@ tr: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/uk.yml b/modules/auth_saml/config/locales/crowdin/uk.yml index b064196cddb..5b0e29b2209 100644 --- a/modules/auth_saml/config/locales/crowdin/uk.yml +++ b/modules/auth_saml/config/locales/crowdin/uk.yml @@ -2,10 +2,10 @@ uk: activemodel: attributes: saml/provider: - display_name: Назва + display_name: Ім’я identifier: Ідентифікатор - secret: Секретний ключ - scope: Область застосування + secret: Секрет + scope: Область assertion_consumer_service_url: URL-адреса ACS (Служба підтримки споживачів) limit_self_registration: Обмежити самостійну реєстрацію sp_entity_id: ID сервісної організації @@ -14,77 +14,77 @@ uk: idp_sso_service_url: Кінцева точка входу постачальника ідентифікаційних даних idp_slo_service_url: Кінцева точка виходу постачальника ідентифікаційних даних idp_cert: Загальнодоступний сертифікат постачальника ідентифікаційних даних - authn_requests_signed: Підписувати запити автентифікації SAML + authn_requests_signed: Підписувати запити SAML AuthnRequest want_assertions_signed: Вимагати підписані відповіді want_assertions_encrypted: Вимагати зашифровані відповіді certificate: Сертифікат, який OpenProject використовує для запитів SAML - private_key: Відповідний приватний ключ для запитів SAML в OpenProject + private_key: Відповідний закритий ключ для запитів SAML OpenProject signature_method: Алгоритм підпису - digest_method: Digest algorithm + digest_method: Алгоритм зведення format: "Формат" icon: "Користувацький значок" activerecord: errors: models: saml/provider: - invalid_certificate: "is not a valid PEM-formatted certificate: %{additional_message}" - invalid_private_key: "is not a valid PEM-formatted private key: %{additional_message}" - certificate_expired: "is expired and can no longer be used." - unmatched_private_key: "does not belong to the given certificate" + invalid_certificate: "не є дійсним сертифікатом у форматі PEM: %{additional_message}" + invalid_private_key: "не є дійсним закритим ключем у форматі PEM: %{additional_message}" + certificate_expired: "більше не діє і не може використовуватися." + unmatched_private_key: "не належить до даного сертифікату" saml: - menu_title: SAML providers + menu_title: Постачальники SAML info: - title: "SAML Protocol Configuration Parameters" + title: "Параметри конфігурації протоколу SAML" description: > - Use these parameters to configure your identity provider connection to OpenProject. + Використовуйте ці параметри, щоб налаштувати підключення свого постачальника ідентифікаційних даних в OpenProject. metadata_parser: - success: "Successfully updated the configuration using the identity provider metadata." - invalid_url: "Provided metadata URL is invalid. Provide a HTTP(s) URL." - error: "Failed to retrieve the identity provider metadata: %{error}" + success: "Конфігурацію оновлено за допомогою метаданих постачальника ідентифікаційних даних." + invalid_url: "Надано неправильну URL-адресу метаданих. Укажіть URL-адресу HTTP(s)." + error: "Не вдалось отримати метадані постачальника ідентифікаційних даних: %{error}" providers: - label_empty_title: "No SAML providers configured yet." - label_empty_description: "Add a provider to see them here." - label_automatic_configuration: Automatic configuration - label_metadata: Metadata - label_metadata_endpoint: OpenProject metadata endpoint - label_openproject_information: OpenProject information - label_configuration_details: "Identity provider endpoints and certificates" - label_configuration_encryption: "Signatures and Encryption" - label_add_new: New SAML identity provider - label_edit: Edit SAML identity provider %{name} - label_uid: Internal user id - label_mapping: Mapping - label_mapping_for: "Mapping for: %{attribute}" - label_requested_attribute_for: "Requested attribute for: %{attribute}" - no_results_table: No SAML identity providers have been defined yet. - plural: SAML identity providers - singular: SAML identity provider - requested_attributes: Requested attributes - attribute_mapping: Attribute mapping + label_empty_title: "Поки не налаштовано жодного постачальника послуг SAML." + label_empty_description: "Додайте постачальника послуг, і він з’явиться тут." + label_automatic_configuration: Автоматична конфігурація + label_metadata: Метадані + label_metadata_endpoint: Кінцева точка метаданих OpenProject + label_openproject_information: Інформація OpenProject + label_configuration_details: "Кінцеві точки й сертифікати постачальника ідентифікаційних даних" + label_configuration_encryption: "Підписи й шифрування" + label_add_new: Додати постачальника ідентифікаційних даних SAML + label_edit: Редагувати постачальника ідентифікаційних даних SAML %{name} + label_uid: Внутрішній ID користувача + label_mapping: Зіставлення + label_mapping_for: "Зіставлення для: %{attribute}" + label_requested_attribute_for: "Запитаний атрибут для: %{attribute}" + no_results_table: Поки не визначеного жодного постачальника ідентифікаційних даних SAML. + plural: Постачальники ідентифікаційних даних SAML + singular: Постачальник ідентифікаційних даних SAML + requested_attributes: Запитувані атрибути + attribute_mapping: Зіставлення атрибутів attribute_mapping_text: > - The following fields control which attributes provided by the SAML identity provider are used to provide user attributes in OpenProject + Наведені нижче поля визначають, які атрибути, надані постачальником ідентифікаційних даних SAML, використовуються для надання атрибутів користувача в OpenProject metadata: - dialog: "This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider:" + dialog: "Це URL-адреса, за якою доступні метадані SAML OpenProject. Ви можете використовувати її для налаштування свого постачальника ідентифікаційних даних:" upsale: - description: Connect OpenProject to a SAML identity provider + description: Підключіть OpenProject до постачальника ідентифікаційних даних SAML request_attributes: - title: 'Requested attributes' + title: 'Запитувані атрибути' legend: > - These attributes are added to the SAML XML metadata to signify to the identify provider which attributes OpenProject requires. You may still need to explicitly configure your identity provider to send these attributes. Please refer to your IdP's documentation. - name: 'Requested attribute key' - format: 'Attribute format' + Ці атрибути додаються до XML метаданих SAML. Таким чином постачальник ідентифікаційних даних може дізнатися, які атрибути потрібні OpenProject. Можливо, вам усе одно знадобиться явно налаштувати свого постачальника ідентифікаційних даних для надсилання цих атрибутів. Ознайомтеся з документацією постачальника ідентифікаційних даних. + name: 'Запитаний ключ атрибута' + format: 'Формат атрибута' section_headers: - configuration: "Primary configuration" - attributes: "Attributes" + configuration: "Основна конфігурація" + attributes: "Атрибути" section_texts: - display_name: "Configure the display name of the SAML provider." - metadata: "Pre-fill configuration using a metadata URL or by pasting metadata XML" - metadata_form: "If your identity provider has a metadata endpoint or XML download, add it below to pre-fill the configuration." - metadata_form_banner: "Editing the metadata may override existing values in other sections. " - configuration: "Configure the endpoint URLs for the identity provider, certificates, and further SAML options." - configuration_metadata: "This information has been pre-filled using the supplied metadata. In most cases, they do not require editing." - encryption: "Configure assertion signatures and encryption for SAML requests and responses." - encryption_form: "За бажанням ви можете зашифрувати відповідь підтвердження. Або ж отримуйте підписані запити з OpenProject." + display_name: "Налаштуйте коротке ім’я постачальника послуг SAML." + metadata: "Попередньо заповніть конфігурацію, використовуючи URL-адресу метаданих або вставивши XML метаданих" + metadata_form: "Якщо в постачальника ідентифікаційних даних є кінцева точка метаданих або він надає можливість завантажити XML, додайте його нижче, щоб заповнити конфігурацію." + metadata_form_banner: "Редагування метаданих може замінити наявні значення в інших розділах. " + configuration: "Налаштуйте URL-адреси кінцевих точок для постачальника ідентифікаційних даних, сертифікатів і інших параметрів SAML." + configuration_metadata: "Цю інформацію отримано з наданих метаданих. Здебільшого вона не потребує редагування." + encryption: "Налаштуйте підписи тверджень і шифрування для запитів SAML і відповідей." + encryption_form: "За бажанням ви можете зашифрувати відповідь твердження. Або ж використовуйте підписані запити з OpenProject." mapping: "Вручну налаштуйте зіставлення відповіді SAML і атрибутів користувача в OpenProject." requested_attributes: "Визначте набір атрибутів, які передаватимуться в запиті SAML, що надсилається вашому постачальнику ідентифікаційних даних." seeded_from_env: "Цього постачальника додано з конфігурації середовища. Його не можна змінити." @@ -94,62 +94,62 @@ uk: metadata_xml: "XML метаданих" instructions: documentation_link: > - Please refer to our [documentation on configuring SAML providers](docs_url) for more information on these configuration options. + Щоб дізнатися більше про ці варіанти конфігурації, ознайомтеся з нашою [документацією щодо налаштування постачальників SAML](docs_url). display_name: > - The name of the provider. This will be displayed as the login button and in the list of providers. + Ім’я постачальника послуг. Відображатиметься як кнопка входу й пункт у списку постачальників послуг. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > - Your identity provider provides a metadata URL. + Ваш постачальник ідентифікаційних надає URL-адресу метаданих. metadata_xml: > - Your identity provider provides a metadata XML download. + Ваш постачальник ідентифікаційних надає можливість завантаження XML метаданих. limit_self_registration: > - If enabled users can only register using this provider if the self registration setting allows for it. + Якщо ввімкнено, користувачі можуть зареєструватися лише через цього постачальника послуг, коли це дозволено параметром самостійної реєстрації. sp_entity_id: > - The entity ID of the service provider (SP). Sometimes also referred to as Audience. This is the unique client identifier of the OpenProject instance. + ID об’єкта постачальника послуг (SP), або «Аудиторія». Це унікальний ідентифікатор клієнта екземпляра OpenProject. idp_sso_service_url: > - The URL of the identity provider login endpoint. + URL-адреса кінцевої точки входу постачальника ідентифікаційних даних. idp_slo_service_url: > - The URL of the identity provider login endpoint. + URL-адреса кінцевої точки входу постачальника ідентифікаційних даних. idp_cert: > - Enter the X509 PEM-formatted public certificate of the identity provider. You can enter multiple certificates by separating them with a newline. + Введіть загальнодоступний сертифікат постачальника ідентифікаційних даних у форматі X509 PEM. Ви можете ввести кілька сертифікатів по одному в рядку. name_identifier_format: > - Set the name identifier format to be used for the SAML assertion. + Задайте формат ідентифікатора імені для твердження SAML. sp_metadata_endpoint: > - This is the URL where the OpenProject SAML metadata is available. Optionally use it to configure your identity provider. + Це URL-адреса, за якою доступні метадані SAML OpenProject. Ви можете використовувати її для налаштування свого постачальника ідентифікаційних даних. mapping: > - Configure the mapping between the SAML response and user attributes in OpenProject. You can configure multiple attribute names to look for. OpenProject will choose the first available attribute from the SAML response. + Налаштуйте зіставлення між відповіддю SAML і атрибутами користувача в OpenProject. Ви можете вказати кілька імен атрибутів для пошуку. OpenProject вибере перший доступний атрибут із відповіді SAML. mapping_login: > - SAML attributes from the response used for the login. + Атрибути SAML із відповіді, використані для облікових даних. mapping_mail: > - SAML attributes from the response used for the email of the user. + Атрибути SAML із відповіді, використані для електронної адреси користувача. mapping_firstname: > - SAML attributes from the response used for the given name. + Атрибути SAML із відповіді, використані для імені. mapping_lastname: > - SAML attributes from the response used for the last name. + Атрибути SAML із відповіді, використані для прізвища. mapping_uid: > - SAML attribute to use for the internal user ID. Leave empty to use the name_id attribute instead + Атрибути SAML для внутрішнього ідентифікатора користувача. Не вказуйте, щоб використовувати натомість атрибут name_id request_uid: > - SAML attribute to request for the internal user ID. By default, the name_id will be used for this field. + Атрибути SAML для запиту внутрішнього ідентифікатора користувача. За замовчуванням у цьому полі використовуватиметься атрибут name_id. requested_attributes: > - These attributes are added to the SAML request XML to communicate to the identity provider which attributes OpenProject requires. + Ці атрибути додано до XML запиту SAML. Так постачальник ідентифікаційних даних знатиме, які атрибути потрібні OpenProject. requested_format: > - The format of the requested attribute. This is used to specify the format of the attribute in the SAML request. Please see [documentation on configuring requested attributes](docs_url) for more information. + Формат запитуваного атрибута. Визначає формат атрибута в запиті SAML. Щоб дізнатися більше, ознайомтеся з [документацією щодо налаштування запитуваних атрибутів](docs_url). authn_requests_signed: > - If checked, OpenProject will sign the SAML AuthnRequest. You will have to provide a signing certificate and private key using the fields below. + Якщо вибрано, OpenProject підписуватиме запити SAML AuthnRequest. Вам потрібно буде надати сертифікат підпису й закритий ключ за допомогою полів нижче. want_assertions_signed: > - If checked, OpenProject will required signed responses from the identity provider using it's own certificate keypair. OpenProject will verify the signature against the certificate from the basic configuration section. + Якщо вибрано, OpenProject вимагатиме підписані відповіді від постачальника ідентифікаційних даних за допомогою власної пари сертифікатів. OpenProject перевірить підпис за сертифікатом із розділу базової конфігурації. want_assertions_encrypted: > - If enabled, require the identity provider to encrypt the assertion response using the certificate pair that you provide. + Якщо ввімкнено, постачальник ідентифікаційних зобов’язаний зашифрувати відповідь твердження за допомогою наданої вами пари сертифікатів. certificate: > - Enter the X509 PEM-formatted certificate used by OpenProject for signing SAML requests. + Введіть сертифікат X509 у форматі PEM, за допомогою якого OpenProject підписує запити SAML. private_key: > - Enter the X509 PEM-formatted private key for the above certificate. This needs to be an RSA private key. + Введіть закритий ключ X509 у форматі PEM для зазначеного вище сертифіката. Це має бути закритий ключ RSA. signature_method: > - Select the signature algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + Виберіть алгоритм підпису, який використовуватиметься для підпису запиту X509, що виконується в OpenProject (за замовчуванням: %{default_option}). digest_method: > - Select the digest algorithm to use for the SAML request signature performed by OpenProject (Default: %{default_option}). + Виберіть алгоритм зведення, який використовуватиметься для підпису запиту X509, що виконується в OpenProject (за замовчуванням: %{default_option}). icon: > - Optionally provide a public URL to an icon graphic that will be displayed next to the provider name. + За бажанням надайте загальнодоступну URL-адресу для значка, який відображатиметься біля імені постачальника послуг. metadata_for_idp: > - This information might be requested by your SAML identity provider. + Цю інформацію може запитати ваш постачальник ідентифікаційних даних SAML. diff --git a/modules/auth_saml/config/locales/crowdin/uz.yml b/modules/auth_saml/config/locales/crowdin/uz.yml index 02483ba09d0..c12abe576aa 100644 --- a/modules/auth_saml/config/locales/crowdin/uz.yml +++ b/modules/auth_saml/config/locales/crowdin/uz.yml @@ -98,7 +98,7 @@ uz: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/vi.yml b/modules/auth_saml/config/locales/crowdin/vi.yml index 68451062a0b..3c707d0ce73 100644 --- a/modules/auth_saml/config/locales/crowdin/vi.yml +++ b/modules/auth_saml/config/locales/crowdin/vi.yml @@ -98,7 +98,7 @@ vi: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/zh-CN.yml b/modules/auth_saml/config/locales/crowdin/zh-CN.yml index 72f62756e98..a901051eced 100644 --- a/modules/auth_saml/config/locales/crowdin/zh-CN.yml +++ b/modules/auth_saml/config/locales/crowdin/zh-CN.yml @@ -98,7 +98,7 @@ zh-CN: display_name: > 提供商的名称。这将作为登录按钮和供应商列表显示。 metadata_none: > - 您的身份提供商没有元数据端点或 XML 下载选项。您可以手动配置。 + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > 您的身份提供商提供了一个元数据 URL 。 metadata_xml: > diff --git a/modules/auth_saml/config/locales/crowdin/zh-TW.yml b/modules/auth_saml/config/locales/crowdin/zh-TW.yml index 02c3a08d1a3..f0180eeec52 100644 --- a/modules/auth_saml/config/locales/crowdin/zh-TW.yml +++ b/modules/auth_saml/config/locales/crowdin/zh-TW.yml @@ -98,7 +98,7 @@ zh-TW: display_name: > 提供商的名稱。這將會顯示在登入按鈕及提供者清單中。 metadata_none: > - 您的身分提供者沒有 metadata endpoint 或 XML 下載選項。您可以手動進行設定。 + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > 您的身分提供者會提供一個 metadata URL。 metadata_xml: > diff --git a/modules/auth_saml/config/locales/en.yml b/modules/auth_saml/config/locales/en.yml index 3ca767a5a95..62be3e7ff8f 100644 --- a/modules/auth_saml/config/locales/en.yml +++ b/modules/auth_saml/config/locales/en.yml @@ -100,7 +100,7 @@ en: display_name: > The name of the provider. This will be displayed as the login button and in the list of providers. metadata_none: > - Your identity provider does not have a metadata endpoint or XML download option. You can the configuration manually. + Your identity provider does not have a metadata endpoint or XML download option. You can configure it manually. metadata_url: > Your identity provider provides a metadata URL. metadata_xml: > diff --git a/modules/backlogs/config/locales/crowdin/tr.yml b/modules/backlogs/config/locales/crowdin/tr.yml index 791ee9005f5..32da621a8f8 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/backlogs/spec/features/resolved_status_spec.rb b/modules/backlogs/spec/features/resolved_status_spec.rb index 656177f3f3d..ce72102dc5e 100644 --- a/modules/backlogs/spec/features/resolved_status_spec.rb +++ b/modules/backlogs/spec/features/resolved_status_spec.rb @@ -54,7 +54,7 @@ RSpec.describe "Resolved status" do check status.name click_button "Save" - settings_page.expect_toast(message: "Successful update") + expect_flash(type: :success, message: "Successful update") expect(page) .to have_checked_field(status.name) diff --git a/modules/backlogs/spec/support/pages/backlogs.rb b/modules/backlogs/spec/support/pages/backlogs.rb index 2fb2ee4ebc7..c6800118012 100644 --- a/modules/backlogs/spec/support/pages/backlogs.rb +++ b/modules/backlogs/spec/support/pages/backlogs.rb @@ -290,9 +290,5 @@ module Pages def story_selector(story) "#story_#{story.id}" end - - def toast_type - :ruby - end end end diff --git a/modules/budgets/spec/support/pages/budget_form.rb b/modules/budgets/spec/support/pages/budget_form.rb index af534598cab..a57c6056cb4 100644 --- a/modules/budgets/spec/support/pages/budget_form.rb +++ b/modules/budgets/spec/support/pages/budget_form.rb @@ -179,9 +179,5 @@ module Pages def labor_rows @labor_rows ||= 0 end - - def toast_type - :rails - end end end diff --git a/modules/costs/config/locales/crowdin/fr.yml b/modules/costs/config/locales/crowdin/fr.yml index 08d1409d858..e761c7e7260 100644 --- a/modules/costs/config/locales/crowdin/fr.yml +++ b/modules/costs/config/locales/crowdin/fr.yml @@ -111,7 +111,7 @@ fr: label_rate: "Tarif" label_rate_plural: "Tarifs" label_status_finished: "Terminé" - label_show: "Show" + label_show: "Afficher" label_units: "Unités de coût" label_user: "Utilisateur" label_until: "jusque" diff --git a/modules/costs/config/locales/crowdin/it.yml b/modules/costs/config/locales/crowdin/it.yml index 036afee8a0b..471179ef7ce 100644 --- a/modules/costs/config/locales/crowdin/it.yml +++ b/modules/costs/config/locales/crowdin/it.yml @@ -111,7 +111,7 @@ it: label_rate: "Tariffa" label_rate_plural: "Tariffe" label_status_finished: "Terminato" - label_show: "Show" + label_show: "Mostra" label_units: "Unità di costo" label_user: "Utente" label_until: "finché" diff --git a/modules/costs/config/locales/crowdin/ko.yml b/modules/costs/config/locales/crowdin/ko.yml index dfb12a5be5c..0b091b0d258 100644 --- a/modules/costs/config/locales/crowdin/ko.yml +++ b/modules/costs/config/locales/crowdin/ko.yml @@ -110,7 +110,7 @@ ko: label_rate: "요금" label_rate_plural: "요금" label_status_finished: "마침" - label_show: "Show" + label_show: "표시" label_units: "단위 비용" label_user: "사용자" label_until: "다음까지:" diff --git a/modules/costs/config/locales/crowdin/pt-PT.yml b/modules/costs/config/locales/crowdin/pt-PT.yml index d164c9eeb44..ec400acdc32 100644 --- a/modules/costs/config/locales/crowdin/pt-PT.yml +++ b/modules/costs/config/locales/crowdin/pt-PT.yml @@ -111,7 +111,7 @@ pt-PT: label_rate: "Taxa" label_rate_plural: "Taxas" label_status_finished: "Terminado" - label_show: "Show" + label_show: "Mostrar" label_units: "Custos unitários" label_user: "Utilizador" label_until: "até" diff --git a/modules/github_integration/config/locales/crowdin/js-fr.yml b/modules/github_integration/config/locales/crowdin/js-fr.yml index ca8e9ba6fa6..5feba158fe6 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/meeting/config/locales/crowdin/tr.yml b/modules/meeting/config/locales/crowdin/tr.yml index 18439c4c0c6..0004117eb6d 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/meeting/spec/features/meetings_participants_spec.rb b/modules/meeting/spec/features/meetings_participants_spec.rb index df46446df81..a0a74477883 100644 --- a/modules/meeting/spec/features/meetings_participants_spec.rb +++ b/modules/meeting/spec/features/meetings_participants_spec.rb @@ -72,7 +72,8 @@ RSpec.describe "Meetings participants" do edit_page.uninvite(viewer_user) show_page = edit_page.click_save - show_page.expect_toast(message: "Successful update") + + expect_flash(message: "Successful update") show_page.expect_uninvited(viewer_user) end diff --git a/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb b/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb index c8f92c51737..cf8452870d0 100644 --- a/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb +++ b/modules/meeting/spec/features/structured_meetings/structured_meeting_crud_spec.rb @@ -86,7 +86,7 @@ RSpec.describe "Structured meetings CRUD", end it "can create a structured meeting and add agenda items" do - show_page.expect_toast(message: "Successful creation") + expect_flash(type: :success, message: "Successful creation") # Does not send invitation mails by default perform_enqueued_jobs @@ -248,7 +248,7 @@ RSpec.describe "Structured meetings CRUD", end it "shows an error toast trying to update an outdated item" do - show_page.expect_toast(message: "Successful creation") + expect_flash(type: :success, message: "Successful creation") # Can add and edit a single item show_page.add_agenda_item do @@ -271,7 +271,7 @@ RSpec.describe "Structured meetings CRUD", end it "can copy the meeting" do - show_page.expect_toast(message: "Successful creation") + expect_flash(type: :success, message: "Successful creation") # Can add and edit a single item show_page.add_agenda_item do @@ -327,7 +327,7 @@ RSpec.describe "Structured meetings CRUD", context "when starting with empty sections" do it "can add, edit and delete sections" do - show_page.expect_toast(message: "Successful creation") + expect_flash(type: :success, message: "Successful creation") # create the first section show_page.add_section do diff --git a/modules/meeting/spec/support/pages/meetings/base.rb b/modules/meeting/spec/support/pages/meetings/base.rb index 87d935388b5..d24b5b7c244 100644 --- a/modules/meeting/spec/support/pages/meetings/base.rb +++ b/modules/meeting/spec/support/pages/meetings/base.rb @@ -33,9 +33,5 @@ module Pages::Meetings def initialize(project) self.project = project end - - def toast_type - :rails - end end end diff --git a/modules/reporting/config/locales/crowdin/fr.yml b/modules/reporting/config/locales/crowdin/fr.yml index ce06066d9c1..056f59b4983 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 e0073e2d086..d68fba3b827 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 9fafe2f8877..ab4a55fcc85 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/pt-PT.yml b/modules/reporting/config/locales/crowdin/pt-PT.yml index 859cb59a4c7..eb8aa480d16 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/app/common/storages/peripherals/storage_interaction/nextcloud/add_user_to_group_command.rb b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/add_user_to_group_command.rb index 04ab1c6171b..0205180b3e3 100644 --- a/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/add_user_to_group_command.rb +++ b/modules/storages/app/common/storages/peripherals/storage_interaction/nextcloud/add_user_to_group_command.rb @@ -35,66 +35,73 @@ module Storages class AddUserToGroupCommand include TaggedLogging + def self.call(storage:, auth_strategy:, user:, group:) + new(storage).call(auth_strategy:, user:, group:) + end + def initialize(storage) @storage = storage - @username = storage.username - @password = storage.password - @group = storage.group end - # rubocop:disable Metrics/AbcSize - def self.call(storage:, user:, group: storage.group) - new(storage).call(user:, group:) - end - - def call(user:, group: @group) + def call(auth_strategy:, user:, group:) with_tagged_logger do - url = UrlBuilder.url(@storage.uri, "ocs/v1.php/cloud/users", user, "groups") - info "Adding #{user} to #{group} through #{url}" + Authentication[auth_strategy].call(storage: @storage, http_options:) do |http| + url = UrlBuilder.url(@storage.uri, "ocs/v1.php/cloud/users", user, "groups") + info "Adding #{user} to #{group} through #{url}" - response = OpenProject.httpx - .basic_auth(@username, @password) - .with(headers: { "OCS-APIRequest" => "true" }) - .post( - UrlBuilder.url(@storage.uri, "ocs/v1.php/cloud/users", user, "groups"), - form: { "groupid" => CGI.escapeURIComponent(group) } - ) + response = http.post(UrlBuilder.url(@storage.uri, "ocs/v1.php/cloud/users", user, "groups"), + form: { "groupid" => CGI.escapeURIComponent(group) }) - error_data = StorageErrorData.new(source: self.class, payload: response) - - case response - in { status: 200..299 } - statuscode = Nokogiri::XML(response.body.to_s).xpath("/ocs/meta/statuscode").text - - case statuscode - when "100" - info "User has been added to the group" - ServiceResult.success - when "101" - Util.error(:error, "No group specified", error_data) - when "102" - Util.error(:group_does_not_exist, "Group does not exist", error_data) - when "103" - Util.error(:user_does_not_exist, "User does not exist", error_data) - when "104" - Util.error(:insufficient_privileges, "Insufficient privileges", error_data) - when "105" - Util.error(:failed_to_add, "Failed to add user to group", error_data) - end - in { status: 405 } - Util.error(:not_allowed, "Outbound request method not allowed", error_data) - in { status: 401 } - Util.error(:not_found, "Outbound request destination not found", error_data) - in { status: 404 } - Util.error(:unauthorized, "Outbound request not authorized", error_data) - in { status: 409 } - Util.error(:conflict, Util.error_text_from_response(response), error_data) - else - Util.error(:error, "Outbound request failed", error_data) + handle_response(response) end end end - # rubocop:enable Metrics/AbcSize + + private + + def http_options + Util.ocs_api_request + end + + def handle_response(response) + error_data = StorageErrorData.new(source: self.class, payload: response) + + case response + in { status: 200..299 } + handle_success_response(response) + in { status: 405 } + Util.error(:not_allowed, "Outbound request method not allowed", error_data) + in { status: 401 } + Util.error(:not_found, "Outbound request destination not found", error_data) + in { status: 404 } + Util.error(:unauthorized, "Outbound request not authorized", error_data) + in { status: 409 } + Util.error(:conflict, Util.error_text_from_response(response), error_data) + else + Util.error(:error, "Outbound request failed", error_data) + end + end + + def handle_success_response(response) + error_data = StorageErrorData.new(source: self.class, payload: response) + statuscode = Nokogiri::XML(response.body.to_s).xpath("/ocs/meta/statuscode").text + + case statuscode + when "100" + info "User has been added to the group" + ServiceResult.success + when "101" + Util.error(:error, "No group specified", error_data) + when "102" + Util.error(:group_does_not_exist, "Group does not exist", error_data) + when "103" + Util.error(:user_does_not_exist, "User does not exist", error_data) + when "104" + Util.error(:insufficient_privileges, "Insufficient privileges", error_data) + when "105" + Util.error(:failed_to_add, "Failed to add user to group", error_data) + end + end end end end diff --git a/modules/storages/app/services/storages/nextcloud_managed_folder_sync_service.rb b/modules/storages/app/services/storages/nextcloud_managed_folder_sync_service.rb index 45e8798aa04..9a6554009f8 100644 --- a/modules/storages/app/services/storages/nextcloud_managed_folder_sync_service.rb +++ b/modules/storages/app/services/storages/nextcloud_managed_folder_sync_service.rb @@ -113,10 +113,12 @@ module Storages end def add_users_to_remote_group(users_to_add) + group = @storage.group + users_to_add.each do |user| - add_user_to_group.call(storage: @storage, user:).error_and do |error| - add_error(:add_user_to_group, error, options: { user:, group: @storage.group, reason: error.log_message }) - log_storage_error(error, group: @storage.group, user:, reason: error.log_message) + add_user_to_group.call(storage: @storage, auth_strategy:, user:, group:).error_and do |error| + add_error(:add_user_to_group, error, options: { user:, group:, reason: error.log_message }) + log_storage_error(error, group:, user:, reason: error.log_message) end end end diff --git a/modules/storages/config/locales/crowdin/es.yml b/modules/storages/config/locales/crowdin/es.yml index ff4c0d2c187..7d60ebdc339 100644 --- a/modules/storages/config/locales/crowdin/es.yml +++ b/modules/storages/config/locales/crowdin/es.yml @@ -92,7 +92,7 @@ es: errors: messages: 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. Por favor, asegúrese de que tiene acceso al mismo. + 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. @@ -223,7 +223,7 @@ 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: Contenido inesperado encontrado en la carpeta del grupo gestionado. + 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: La contraseña configurada de la aplicación no es válida. diff --git a/modules/storages/config/locales/crowdin/fr.yml b/modules/storages/config/locales/crowdin/fr.yml index ace9e4dd955..0d11d78a66c 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 7b9d3e96fe9..83c40087d23 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 90afb04c26b..95833da9938 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 6779ff456c0..068cfbc52aa 100644 --- a/modules/storages/config/locales/crowdin/pl.yml +++ b/modules/storages/config/locales/crowdin/pl.yml @@ -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: Folder docelowy %{folder} nie został znaleziony na magazynie %{storage_name}. + not_found: Folder docelowy %{folder} nie został znaleziony w magazynie %{storage_name}. storages: buttons: complete_without_setup: Ukończ bez tego diff --git a/modules/storages/config/locales/crowdin/pt-PT.yml b/modules/storages/config/locales/crowdin/pt-PT.yml index 638e03e98ea..17f67978fe7 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/spec/common/storages/peripherals/registry_spec.rb b/modules/storages/spec/common/storages/peripherals/registry_spec.rb index bcf7ee97c0f..4130e22f4db 100644 --- a/modules/storages/spec/common/storages/peripherals/registry_spec.rb +++ b/modules/storages/spec/common/storages/peripherals/registry_spec.rb @@ -106,47 +106,6 @@ RSpec.describe Storages::Peripherals::Registry, :webmock do end end - describe "#add_user_to_group_command" do - let(:expected_response) do - { - status: 200, - body: expected_response_body, - headers: {} - } - end - let(:expected_response_body) do - <<~XML - - - - ok - 100 - OK - - - - - - XML - end - - before do - stub_request(:post, "https://example.com/ocs/v1.php/cloud/users/#{origin_user_id}/groups") - .with( - headers: { - "Authorization" => "Basic T3BlblByb2plY3Q6T3BlblByb2plY3RTZWN1cmVQYXNzd29yZA==", - "OCS-APIRequest" => "true" - } - ) - .to_return(expected_response) - end - - it "adds user to the group" do - result = registry.resolve("nextcloud.commands.add_user_to_group").call(storage:, user: origin_user_id) - expect(result).to be_success - end - end - describe "#delete_folder_command" do let(:auth_strategy) { Storages::Peripherals::StorageInteraction::AuthenticationStrategies::BasicAuth.strategy } diff --git a/modules/storages/spec/services/storages/nextcloud_managed_folder_sync_service_spec.rb b/modules/storages/spec/services/storages/nextcloud_managed_folder_sync_service_spec.rb index 0e9c207829a..cce5b7cb51a 100644 --- a/modules/storages/spec/services/storages/nextcloud_managed_folder_sync_service_spec.rb +++ b/modules/storages/spec/services/storages/nextcloud_managed_folder_sync_service_spec.rb @@ -187,7 +187,11 @@ module Storages # No AuthStrategy on GroupUsers allow(group_users).to receive(:call).with(storage:, group: storage.group).and_return(group_users_result) # Updating the group users - allow(add_user).to receive(:call).with(storage:, user: "single_project_user").and_return(add_user_result) + allow(add_user).to receive(:call).with(storage:, + auth_strategy:, + user: "single_project_user", + group: storage.group) + .and_return(add_user_result) allow(remove_user).to receive(:call).with(storage:, auth_strategy:, user: "cookiemonster", diff --git a/modules/team_planner/config/locales/crowdin/js-fr.yml b/modules/team_planner/config/locales/crowdin/js-fr.yml index f912c2d4b1b..b0450fae0c8 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 7fbf92d620a..71735a603d6 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 784a6fcfa3a..976bddc5f40 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 75d757d2ddb..c09e759ff2d 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: 'Odpowiedzialny' + 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-PT.yml b/modules/team_planner/config/locales/crowdin/js-pt-PT.yml index 0b8e1a2d290..4f7740c4bfb 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/spec/features/forums/message_spec.rb b/spec/features/forums/message_spec.rb index 8f21988a9ea..4a5dbc0214c 100644 --- a/spec/features/forums/message_spec.rb +++ b/spec/features/forums/message_spec.rb @@ -74,7 +74,7 @@ RSpec.describe "messages", :js do create_page.set_subject "The message is" create_page.click_save - create_page.expect_toast(type: :error, message: "Content can't be blank") + expect_flash(type: :error, message: "Content can't be blank") SeleniumHubWaiter.wait create_page.add_text "There is no message here" diff --git a/spec/features/projects/modules_spec.rb b/spec/features/projects/modules_spec.rb index f6df8dbcb02..045ab880ed6 100644 --- a/spec/features/projects/modules_spec.rb +++ b/spec/features/projects/modules_spec.rb @@ -55,7 +55,7 @@ RSpec.describe "Projects module administration" do check "Activity" click_button "Save" - settings_page.expect_toast message: I18n.t(:notice_successful_update) + expect_flash type: :success, message: I18n.t(:notice_successful_update) expect(page).to have_checked_field "Activity" expect(page).to have_unchecked_field "Calendar" @@ -75,7 +75,7 @@ RSpec.describe "Projects module administration" do check "Work packages" click_button "Save" - settings_page.expect_toast message: I18n.t(:notice_successful_update) + expect_flash type: :success, message: I18n.t(:notice_successful_update) expect(page).to have_checked_field "Activity" expect(page).to have_checked_field "Calendars" diff --git a/spec/support/pages/admin/system_settings/page.rb b/spec/support/pages/admin/system_settings/page.rb index 64d10b57670..6041329f084 100644 --- a/spec/support/pages/admin/system_settings/page.rb +++ b/spec/support/pages/admin/system_settings/page.rb @@ -32,10 +32,6 @@ require "support/pages/page" module Pages::Admin::SystemSettings class Page < ::Pages::Page - def toast_type - :rails - end - def press_save_button scroll_to(:bottom) click_button("Save") diff --git a/spec/support/pages/messages/base.rb b/spec/support/pages/messages/base.rb index 9e4a1614539..33a1eda46dc 100644 --- a/spec/support/pages/messages/base.rb +++ b/spec/support/pages/messages/base.rb @@ -30,8 +30,5 @@ require "support/pages/page" module Pages::Messages class Base < ::Pages::Page - def toast_type - :rails - end end end diff --git a/spec/support/pages/my/password_page.rb b/spec/support/pages/my/password_page.rb index 227db085f50..aeade3f0566 100644 --- a/spec/support/pages/my/password_page.rb +++ b/spec/support/pages/my/password_page.rb @@ -45,24 +45,18 @@ module Pages end def expect_password_reuse_error_message(count) - expect_toast(type: :error, + expect_flash(type: :error, message: I18n.t(:"activerecord.errors.models.user.attributes.password.reused", count:)) end def expect_password_weak_error_message - expect_toast(type: :error, + expect_flash(type: :error, message: "Password Must contain characters of the following classes (at least 2 of 3): lowercase (e.g. 'a'), uppercase (e.g. 'A'), numeric (e.g. '1')") end def expect_password_updated_message expect_and_dismiss_flash(type: :info, message: I18n.t(:notice_account_password_updated)) end - - private - - def toast_type - :rails - end end end end diff --git a/spec/support/pages/projects/settings.rb b/spec/support/pages/projects/settings.rb index 1482c6e1e99..7b698f23e05 100644 --- a/spec/support/pages/projects/settings.rb +++ b/spec/support/pages/projects/settings.rb @@ -83,10 +83,6 @@ module Pages private - def toast_type - :rails - end - def path project_settings_general_path(project) end diff --git a/spec/support/pages/projects/show.rb b/spec/support/pages/projects/show.rb index 16e38f09e1a..7e1ea638a05 100644 --- a/spec/support/pages/projects/show.rb +++ b/spec/support/pages/projects/show.rb @@ -47,10 +47,6 @@ module Pages within("#menu-sidebar", &) end - def toast_type - :rails - end - def visit_page visit path end diff --git a/spec/support/pages/types/index.rb b/spec/support/pages/types/index.rb index 6cb9d3a734e..2f7077ba434 100644 --- a/spec/support/pages/types/index.rb +++ b/spec/support/pages/types/index.rb @@ -82,10 +82,6 @@ module Pages def canonical_name(type) type.respond_to?(:name) ? type.name : type end - - def toast_type - :rails - end end end end diff --git a/spec/support/toasts/expectations.rb b/spec/support/toasts/expectations.rb index 4ed7f4fd945..dba43f746a1 100644 --- a/spec/support/toasts/expectations.rb +++ b/spec/support/toasts/expectations.rb @@ -1,21 +1,7 @@ module Toasts module Expectations def expect_toast(message:, type: :success, wait: 20) - if toast_type == :angular - expect(page).to have_css(".op-toast.-#{type}", text: message, wait:) - elsif type == :error - ActiveSupport::Deprecation.warn( - "Use `expect_flash(type: :error, message: message)` instead of expect_toast with type: :error" - ) - expect_flash(type: :error, message:) - elsif type == :success - ActiveSupport::Deprecation.warn( - "Use `expect_flash(type: :success, message:)` instead of expect_toast with type: :success" - ) - expect_flash(message:) - else - raise NotImplementedError - end + expect(page).to have_css(".op-toast.-#{type}", text: message, wait:) end def expect_and_dismiss_toaster(message: nil, type: :success, wait: 20) @@ -43,9 +29,5 @@ module Toasts expect(page).to have_no_css(".op-toast.-#{type}", text: message, wait:) end end - - def toast_type - :angular - 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 00000000000..d8697d8376e --- /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