Merge remote-tracking branch 'origin/dev' into fix/73735-review-suggestions

This commit is contained in:
Tomas Hykel
2026-04-13 22:18:12 +02:00
488 changed files with 6147 additions and 3639 deletions
+14
View File
@@ -190,6 +190,9 @@ Rails/FindEach:
- limit
- select
- lock
Exclude:
- "spec/**/*"
- "modules/**/spec/**/*"
# The http verbs in Rack::Test do not accept named parameters (params: params)
Rails/HttpPositionalArguments:
@@ -201,11 +204,13 @@ Rails/I18nLocaleAssignment:
Enabled: true
Exclude:
- "spec/**/*.rb"
- "modules/*/spec/**/*.rb"
Rails/I18nLocaleTexts:
Enabled: true
Exclude:
- "spec/**/*.rb"
- "modules/*/spec/**/*.rb"
# We have config.active_record.belongs_to_required_by_default = false ,
# which means, we do have to declare presence validators on belongs_to relations.
@@ -219,6 +224,9 @@ Rails/RequireDependency:
# Require save! to prevent saving without validation when saving outside of a condition.
Rails/SaveBang:
Enabled: true
Exclude:
- "spec/**/*"
- "modules/**/spec/**/*"
# There are valid cases in which to use methods like:
# * update_all
@@ -325,6 +333,7 @@ RSpec/SpecFilePathFormat:
CustomTransform:
OpenIDConnect: openid_connect
OAuthClients: oauth_clients
XWikiProviders: xwiki_providers
EnforcedInflector: active_support
IgnoreMethods: true
@@ -475,6 +484,11 @@ Style/Proc:
Style/RaiseArgs:
Enabled: false
Style/RescueModifier:
Exclude:
- "spec/**/*"
- "modules/**/spec/**/*"
Style/RegexpLiteral:
Enabled: false
+1 -1
View File
@@ -227,7 +227,7 @@ gem "dry-validation"
gem "store_attribute", "~> 2.0"
# Appsignal integration
gem "appsignal", "~> 4.7", require: false
gem "appsignal", "~> 4.8", require: false
# Yabeda integration
gem "yabeda-activerecord"
+5 -5
View File
@@ -337,7 +337,7 @@ GEM
android_key_attestation (0.3.0)
anyway_config (2.8.0)
ruby-next-core (~> 1.0)
appsignal (4.8.3)
appsignal (4.8.4)
logger
rack (>= 2.0.0)
ast (2.4.3)
@@ -1351,7 +1351,7 @@ GEM
rubocop-factory_bot (2.28.0)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-openproject (0.3.0)
rubocop-openproject (0.4.0)
rubocop
rubocop-performance (1.26.1)
lint_roller (~> 1.1)
@@ -1577,7 +1577,7 @@ DEPENDENCIES
acts_as_tree (~> 2.9.0)
addressable (~> 2.8.9)
airbrake (~> 13.0.0)
appsignal (~> 4.7)
appsignal (~> 4.8)
auto_strip_attributes (~> 2.5)
awesome_nested_set (~> 3.9.0)
aws-sdk-core (~> 3.244)
@@ -1820,7 +1820,7 @@ CHECKSUMS
airbrake-ruby (6.2.2) sha256=293e34fb36e763e1b6d67ab584cce7c5b6fe9eea1a70c26d8c13c0f5d7de2fbc
android_key_attestation (0.3.0) sha256=467eb01a99d2bb48ef9cf24cc13712669d7056cba5a52d009554ff037560570b
anyway_config (2.8.0) sha256=f6797a7231f81202dcd3d0c07284e836e45713e761d320180348b13a5c7c9306
appsignal (4.8.3) sha256=aa0ea5ffd39fe7530c56a6eb6efda60825ab061ef31376126cae93b009844dd7
appsignal (4.8.4) sha256=5c708a41c2913383d19ae581140da1904dbf642b974220d6c1bc4c7fdb1cf667
ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383
attr_required (1.0.2) sha256=f0ebfc56b35e874f4d0ae799066dbc1f81efefe2364ca3803dc9ea6a4de6cb99
auto_strip_attributes (2.6.0) sha256=a7e2e0cf744de2bcd947fd68014220702bcc88c81274c1cd9ce6f7316aae39b0
@@ -2233,7 +2233,7 @@ CHECKSUMS
rubocop-ast (1.49.1) sha256=4412f3ee70f6fe4546cc489548e0f6fcf76cafcfa80fa03af67098ffed755035
rubocop-capybara (2.22.1) sha256=ced88caef23efea53f46e098ff352f8fc1068c649606ca75cb74650970f51c0c
rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb
rubocop-openproject (0.3.0) sha256=9554496e7ef0a2cf65dc2b32bee1bfa223b4f9ae058a5c603489d34e9001a828
rubocop-openproject (0.4.0) sha256=ce56d9e591f9be5a4d98125b10a73564b0557a5e408f97918f9630fb15ae66ae
rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834
rubocop-rails (2.34.3) sha256=10d37989024865ecda8199f311f3faca990143fbac967de943f88aca11eb9ad2
rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2
@@ -45,7 +45,7 @@ class WorkPackages::DialogsController < ApplicationController
call = WorkPackages::CreateService.new(user: current_user).call(create_params)
if call.success?
flash[:notice] = I18n.t("work_package_relations_tab.relations.label_new_child_created")
flash[:notice] = create_success_message(call.result)
redirect_back fallback_location: project_work_package_path(@project, call.result), status: :see_other
else
form_component = WorkPackages::Dialogs::CreateFormComponent.new(work_package: call.result, project: @project)
@@ -99,4 +99,12 @@ class WorkPackages::DialogsController < ApplicationController
project: @project
}
end
def create_success_message(work_package)
if work_package.child?
I18n.t("work_package_relations_tab.relations.label_new_child_created")
else
I18n.t(:notice_successful_create)
end
end
end
+1 -1
View File
@@ -38,7 +38,7 @@ module PaginationHelper
def pagination_links_full(paginator, params: {}, allowed_params: nil, per_page_links: true, **)
return unless paginator.total_entries > 0
content_tag(:div, class: "op-pagination") do
content_tag(:div, class: ["op-pagination", { "op-pagination--single-page": paginator.total_pages <= 1 }]) do
concat pagination_pages_section(paginator, params:, allowed_params:, **)
concat pagination_options_section(paginator, params:, allowed_params:) if per_page_links
end
+90
View File
@@ -30,6 +30,8 @@
module Import
class JiraImport < ApplicationRecord
include Import::JiraOpenProjectReferenceCreation
self.table_name = "jira_imports"
belongs_to :jira, class_name: "Import::Jira"
@@ -81,5 +83,93 @@ module Import
Import::JiraUser.where(jira_import_id: id).destroy_all
end
# rubocop:enable Metrics/AbcSize
def import_users
Import::JiraUser.where(jira_import_id: id).find_each do |jira_user|
import_user(jira_user)
end
end
private
# rubocop:disable Metrics/PerceivedComplexity
# rubocop:disable Metrics/AbcSize
def import_user(jira_user)
call = Users::CreateService
.new(user: User.system, contract_class: EmptyContract)
.call(jira_user.to_op_attributes)
call.on_success do |_result|
create_reference!(
op_leg: call.result,
jira_leg: jira_user,
jira_import: self,
uses_existing: false
)
end
call.on_failure do |_result|
if call.errors.find { |error| error.type == :taken }.present?
user = jira_user.try_to_find_existing_op_users.first
if user.present?
create_reference!(
op_leg: user,
jira_leg: jira_user,
jira_import: self,
uses_existing: true
)
else
raise "Existing User is expected to be found, because there was an email " \
"or login collision. See attributes: #{jira_user.to_op_attributes}"
end
else
raise call.message
end
end
jira_user_groups = jira_user.payload["groups"]["items"].pluck("name")
jira_user_groups.each do |group_name|
call = Groups::CreateService
.new(user: User.system, contract_class: EmptyContract)
.call(name: group_name)
call.on_success do |result|
group = result.result
create_reference!(
op_leg: group,
jira_leg: nil,
jira_import: self,
uses_existing: false
)
end
call.on_failure do |_result|
if call.errors.find { |error| error.type == :taken }.present?
group = Group.where(name: group_name).first
if group.present?
create_reference!(
op_leg: group,
jira_leg: nil,
jira_import: self,
uses_existing: true
)
else
raise "Existing Group is expected to be found. Group name: #{group_name}"
end
else
raise call.message
end
end
member_id = Import::JiraOpenProjectReference.where(
jira_import_id: id,
jira_entity_id: jira_user.id,
jira_entity_class: jira_user.class.to_s
).pick(:op_entity_id)
group = Group.find_by!(name: group_name)
Groups::AddUsersService
.new(group, current_user: User.system)
.call(ids: [member_id], send_notifications: false)
end
end
# rubocop:enable Metrics/PerceivedComplexity
# rubocop:enable Metrics/AbcSize
end
end
+1 -1
View File
@@ -43,7 +43,7 @@ module Import
firstname, lastname = split_display_name(payload["displayName"])
{
login: payload["name"],
password: SecureRandom.uuid,
password: OpenProject::Passwords::Generator.random_password,
firstname:,
lastname:,
mail: payload["emailAddress"],
@@ -39,7 +39,7 @@ module Import
fetch_and_save_users_data(jira_import)
Journal::NotificationConfiguration.with(false) do
import_users(jira_import)
jira_import.import_users
Import::JiraImportProjectsJob.perform_now(jira_import_id)
end
@@ -163,91 +163,5 @@ module Import
raise "Error fetching user data for user key #{jira_user_key}: #{e.message}"
end
end
def import_users(jira_import)
Import::JiraUser.where(jira_import_id: jira_import.id).find_each do |jira_user|
import_user(jira_user, jira_import)
end
end
# rubocop:disable Metrics/PerceivedComplexity
# rubocop:disable Metrics/AbcSize
def import_user(jira_user, jira_import)
call = Users::CreateService
.new(user: User.system, contract_class: EmptyContract)
.call(jira_user.to_op_attributes)
call.on_success do |_result|
create_reference!(
op_leg: call.result,
jira_leg: jira_user,
jira_import:,
uses_existing: false
)
end
call.on_failure do |_result|
if call.errors.find { |error| error.type == :taken }.present?
user = jira_user.try_to_find_existing_op_users.first
if user.present?
create_reference!(
op_leg: user,
jira_leg: jira_user,
jira_import:,
uses_existing: true
)
else
raise "Existing User is expected to be found, because there was an email " \
"or login collision. See attributes: #{jira_user.to_op_attributes}"
end
else
raise call.message
end
end
jira_user_groups = jira_user.payload["groups"]["items"].pluck("name")
jira_user_groups.each do |group_name|
call = Groups::CreateService
.new(user: User.system, contract_class: EmptyContract)
.call(name: group_name)
call.on_success do |result|
group = result.result
create_reference!(
op_leg: group,
jira_leg: nil,
jira_import:,
uses_existing: false
)
end
call.on_failure do |_result|
if call.errors.find { |error| error.type == :taken }.present?
group = Group.where(name: group_name).first
if group.present?
create_reference!(
op_leg: group,
jira_leg: nil,
jira_import:,
uses_existing: true
)
else
raise "Existing Group is expected to be found. Group name: #{group_name}"
end
else
raise call.message
end
end
member_id = Import::JiraOpenProjectReference.where(
jira_import_id: jira_import.id,
jira_entity_id: jira_user.id,
jira_entity_class: jira_user.class.to_s
).pick(:op_entity_id)
group = Group.find_by!(name: group_name)
Groups::AddUsersService
.new(group, current_user: User.system)
.call(ids: [member_id], send_notifications: false)
end
end
# rubocop:enable Metrics/PerceivedComplexity
# rubocop:enable Metrics/AbcSize
end
end
+194 -194
View File
@@ -108,13 +108,13 @@ es:
trial: Prueba
jemalloc_allocator: Asignador de memoria Jemalloc
journal_aggregation:
caption: 'User actions on a work package (changing description, status, values, or writing comments) are grouped if performed within this period. It also controls notification and [webhook](webhook_link) delays.
caption: 'Las acciones del usuario en un paquete de trabajo (cambiar la descripción, el estado, los valores o escribir comentarios) se agrupan si se realizan dentro de este periodo. También controla los plazos de notificación y de [webhook](webhook_link).
'
import:
title: Importar
jira:
title: Jira Migrator
title: Migrador Jira
description: Utilice esta herramienta para importar datos desde su instancia de Jira. Puede configurar varios hosts de Jira y elegir qué importar en cada ejecución de importación.
errors:
cannot_delete_with_imports: No se puede eliminar el host de Jira con importaciones existentes
@@ -125,8 +125,8 @@ es:
title: Configuración de Jira
new: Nueva configuración
banner:
title: Limited import capabilities
description: 'This Jira Migrator is currently in beta and can only import basic data: projects, issues (name, title, description, attachments), users (name, email, project membership), statuses, and types. It cannot import workflows, custom fields, issue relations, or permissions. We currently only support Jira Server/Data Center versions 10.x and 11.x. Cloud instances are not supported at this time.'
title: Capacidades de importación limitadas
description: 'Este Migrador de Jira se encuentra actualmente en fase beta y solo puede importar datos básicos: proyectos, incidencias (nombre, título, descripción, archivos adjuntos), usuarios (nombre, correo electrónico, pertenencia a proyectos), estados y tipos. No puede importar flujos de trabajo, campos personalizados, relaciones entre incidencias ni permisos. Actualmente solo es compatible con las versiones 10.x y 11.x de Jira Server/Data Center. Por el momento, no es compatible con instancias en la nube.'
form:
fields:
name: Nombre
@@ -162,9 +162,9 @@ es:
run:
title: Importar ejecución
history: Historial
remove_error: A Jira import run cannot be removed while it is running
remove_error: No se puede quitar una importación de Jira mientras se está ejecutando
import_blocked_error: Actualmente hay otra importación de Jira en curso o pendiente de revisión. Complétela o revierta antes de iniciar una nueva importación.
project_identifier_taken: 'You are trying to import a project with an already used identifier: %{taken_identifier}. Please update the project identifier in Jira then click on Retry.'
project_identifier_taken: 'Estás intentando importar un proyecto con un identificador que ya está en uso: %{taken_identifier}. Actualiza el identificador del proyecto en Jira y, a continuación, haz clic en «Reintentar».'
blank:
title: Aún no se han configurado ejecuciones de importación
description: Cree una ejecución de importación para comenzar a importar información de esta instancia de Jira
@@ -273,9 +273,9 @@ es:
button_revert: Revertir importación
button_done: Finalizar importación
preview_description: Los datos importados se encuentran actualmente en modo de revisión. Haga clic en «Finalizar importación» para que la importación sea permanente o en «Revertir importación» para deshacer todos los cambios realizados en esta importación.
label_finalize_import: Finalize import
label_finalizing: Finalizing import...
label_finalizing_done: Import finalized.
label_finalize_import: Finalizar importación
label_finalizing: Finalizando importación...
label_finalizing_done: Importación finalizada.
label_revert_progress: Revirtiendo importación...
label_reverted: Importación revertida.
select_dialog:
@@ -387,74 +387,74 @@ es:
notification_text_default: "<p>Hola,</p> <p>Se ha creado un nuevo proyecto: projectValue:name</p> <p>Muchas gracias</p>\n"
work_packages_identifier:
page_header:
description: Choose between classic numerical work package IDs or semantic project-specific ones that prepend the project identifier to the work package ID.
description: Elige entre los ID numéricos clásicos de los paquetes de trabajo o los ID semánticos específicos del proyecto, que añaden el identificador del proyecto al principio del ID del paquete de trabajo.
banner:
existing_identifiers_notice: 'Existing identifiers for %{project_count} projects don''t meet requirements for project-based semantic identifiers. OpenProject can automatically update these so that they are valid as in the examples below. Click on ''Autofix and save'' to update identifiers for all projects in this manner and enable project-based semantic identifiers.
existing_identifiers_notice: 'Los identificadores actuales de %{project_count} proyectos no cumplen los requisitos para ser identificadores semánticos basados en proyectos. OpenProject puede actualizarlos automáticamente para que sean válidos, tal y como se muestra en los ejemplos siguientes. Haz clic en «Corregir automáticamente y guardar» para actualizar los identificadores de todos los proyectos de esta manera y habilitar los identificadores semánticos basados en proyectos.
'
box_header:
label_project: Project
label_previous_identifier: Previous identifier
label_autofixed_suggestion: Future identifier
label_example_work_package_id: Example work package ID
label_project: Proyecto
label_previous_identifier: Identificador anterior
label_autofixed_suggestion: Identificador futuro
label_example_work_package_id: Ejemplo de ID del paquete de trabajo
autofix_preview:
error_too_long: Has to be 10 characters or fewer
error_numerical: Cannot be purely numerical
error_starts_with_number: Cannot start with a number
error_special_characters: Special characters not allowed
error_not_fully_uppercased: Must be uppercase
error_in_use: Already in use as another project's active handle
error_reserved: Reserved by another project's handle history
error_unknown: Needs manual review
error_too_long: Debe tener 10 caracteres o menos
error_numerical: No puede ser puramente numérico
error_starts_with_number: No puede comenzar con un número
error_special_characters: No se permiten caracteres especiales
error_not_fully_uppercased: Debe estar en mayúsculas
error_in_use: Ya está en uso como identificador activo de otro proyecto
error_reserved: Reservado por el historial de identificadores de otro proyecto
error_unknown: Necesita revisión manual
remaining_projects:
one: "... 1 more project"
other: "... %{count} more projects"
button_autofix: Autofix and save
one: "... 1 proyecto más"
other: "... %{count} proyectos más"
button_autofix: Corregir automáticamente y guardar
dialog:
title: Change work package identifiers
heading: Enable project-based work package IDs?
description: 'This will change IDs for all work packages in all projects in this instance. Previous identifiers and URLs will continue to redirect properly. This change will take some time to complete.
title: Cambiar los identificadores de los paquetes de trabajo
heading: "¿Activar los ID de paquetes de trabajo basados en proyectos?"
description: 'Esto cambiará los ID de todos los paquetes de trabajo de todos los proyectos de esta instancia. Los identificadores y las URL anteriores seguirán redirigiendo correctamente. Este cambio tardará un tiempo en completarse.
'
confirm_button: Change identifiers
checkbox_label: I understand that this will permanently change all work package IDs
success_banner: Successfully updated work package identifier format.
confirm_button: Cambiar identificadores
checkbox_label: Entiendo que esto cambiará de forma permanente todos los ID de los paquetes de trabajo
success_banner: Se ha actualizado correctamente el formato del identificador del paquete de trabajo.
in_progress:
banner_message: Project identifiers are currently being updated to project-based semantic identifiers. This may take some time.
banner_message: Actualmente se están actualizando los identificadores de proyectos para convertirlos en identificadores semánticos basados en proyectos. Esto puede llevar algún tiempo.
workflows:
tabs:
default_transitions: Transiciones predeterminadas
user_author: Usuario es autor
user_assignee: Usuario es asignado
index:
description: Configure status transitions for each work package type.
description: Configura las transiciones de estado para cada tipo de paquete de trabajo.
type_filter:
label: Filter by type name
status_button: Status
label: Filtrar por nombre de tipo
status_button: Estado
statuses_dialog:
title: Statuses
label: Statuses enabled for this type
caption: Add or remove statuses you would like to associate with this type. Removing a status will also delete the workflow associated with it.
title: Estados
label: Estados habilitados para este tipo
caption: Añade o elimina los estados que quieras asociar a este tipo. Si eliminas un estado, también se borrará el flujo de trabajo asociado a él.
statuses_removal_dialog:
title: Remove statuses
title: Eliminar estados
heading:
one: Remove 1 status?
other: Remove %{count} statuses?
description: Removing these statuses will make them unavailable to this type and delete existing workflows. Are you sure you want to proceed?
confirm: Remove
one: "¿Eliminar 1 estado?"
other: "¿Eliminar %{count} estados?"
description: Si eliminas estos estados, dejarán de estar disponibles para este tipo y se borrarán los flujos de trabajo existentes. ¿Seguro que quieres continuar?
confirm: Eliminar
leave_confirmation:
title: Save changes before continuing?
description: You are about to leave this page but you have unsaved changes. Would you like to save them before continuing?
ignore: Ignore changes
save: Save changes and continue
title: "¿Guardar los cambios antes de continuar?"
description: Estás a punto de salir de esta página, pero tienes cambios sin guardar. ¿Quieres guardarlos antes de continuar?
ignore: Descartar cambios
save: Guardar cambios y continuar
role_selector:
label: 'Role: %{role}'
no_role: Select role
label: 'Rol: %{role}'
no_role: Seleccionar rol
blankslate:
title: No status transitions configured
description: Add statuses to start configuring workflows for this role
title: No hay transiciones de estado configuradas
description: Añade estados para empezar a configurar los flujos de trabajo de este rol
info:
database_deprecation_html: 'Starting with OpenProject 16.0, PostgreSQL 16 is required to use OpenProject. Your installation will remain functional with your current database, but anticipate incompatability in future releases. <br/> We have prepared [upgrade guides for all installation methods](upgrade_guide). You can perform the upgrade ahead of the next release at any time by following the guides.
database_deprecation_html: 'A partir de OpenProject 16.0, se requiere PostgreSQL 16 para utilizar OpenProject. Tu instalación seguirá funcionando con tu base de datos actual, pero ten en cuenta que puede haber incompatibilidades en futuras versiones. <br/> Hemos preparado [guías de actualización para todos los métodos de instalación](upgrade_guide). Puedes realizar la actualización antes del próximo lanzamiento en cualquier momento siguiendo las guías.
'
authentication:
@@ -684,13 +684,13 @@ es:
confirmation_live_message_checked: El botón para continuar ya está activo.
confirmation_live_message_unchecked: El botón para continuar ya está inactivo. Debe marcar la casilla para continuar.
pagination:
label: Pagination
prev: Previous
prev_page: Previous Page
next: Next
next_page: Next Page
page: Page %{number}
page_with_more: Page %{number}...
label: Paginación
prev: Anterior
prev_page: Página anterior
next: Siguiente
next_page: Página siguiente
page: Página %{number}
page_with_more: Página %{number}...
mcp_configurations:
server_url_component:
caption: La URL en la que se podrá acceder al servidor OpenProject MCP. Es necesaria para configurar los clientes de MCP.
@@ -854,10 +854,10 @@ es:
'
change_identifier: Cambiar identificador
change_identifier_dialog_title: Change project identifier
change_identifier_format_hint_semantic: Only uppercase letters (AZ), numbers or underscores. Max 10 characters. Must start with a letter.
change_identifier_format_hint_legacy: Only lowercase letters (az), numbers, dashes or underscores.
change_identifier_warning: 'This will permanently change identifiers and URLs of all work packages in this project. The previous identifier and URLs will nevertheless continue to redirect properly.
change_identifier_dialog_title: Cambiar el identificador del proyecto
change_identifier_format_hint_semantic: Solo mayúsculas (AZ), números o guiones bajos. Máximo 10 caracteres. Debe empezar por una letra.
change_identifier_format_hint_legacy: Solo letras minúsculas (az), números, guiones o guiones bajos.
change_identifier_warning: 'Esto cambiará de forma permanente los identificadores y las URL de todos los paquetes de trabajo de este proyecto. No obstante, los identificadores y las URL anteriores seguirán redirigiendo correctamente.
'
subitems:
@@ -1095,9 +1095,9 @@ es:
groups:
member_in_these_groups: 'Este usuario es miembro actualmente de los grupos siguientes:'
no_results_title_text: Este usuario no es miembro actualmente de ningún grupo.
summary_with_more_html: Member of %{names} and %{count_link}.
summary_with_more_html: Miembro de %{names} y %{count_link}.
more: "%{count} más"
summary_html: Member of %{names}.
summary_html: Miembro de %{names}.
memberships:
no_results_title_text: El usuario no es actualmente un miembro del proyecto.
open_profile: Abrir perfil
@@ -1155,29 +1155,29 @@ es:
group: El grupo ya forma parte de %{project}. Mientras tanto, puede crear planes con ese grupo y asignar paquetes de trabajo a este.
working_hours:
current_schedule:
title: Current schedule
work_days: Work days
work_hours: Work hours
availability_factor: Availability factor
availability_subtitle: Dedicated to project work
effective_hours: Effective work hours
effective_subtitle: Per week
not_set: Not set
title: Planificación actual
work_days: Días laborables
work_hours: Horas laborales
availability_factor: Factor de disponibilidad
availability_subtitle: Dedicado al trabajo en proyectos
effective_hours: Horas efectivas de trabajo
effective_subtitle: A la semana
not_set: No establecido
future:
title: Future schedules
description: Plan working schedule changes ahead of time. Once the date arrives your working schedules will be updated automatically.
add_button: Add future schedule
blank_title: No future schedules planned
blank_description: Create a future schedule to plan changes ahead of time
title: Horarios futuros
description: Planifica los cambios en los horarios de trabajo con antelación. Cuando llegue la fecha, los horarios se actualizarán automáticamente.
add_button: Añadir el horario futuro
blank_title: No hay horarios previstos para el futuro
blank_description: Crea un horario provisional para planificar los cambios con antelación
history:
title: Schedule history
description: View your past work schedules.
blank_title: No schedule history yet
blank_description: Past schedule changes will appear here
title: Historial de horarios
description: Consulta tus horarios de trabajo anteriores.
blank_title: Aún no hay historial de horarios
blank_description: Los cambios de horario anteriores aparecerán aquí
destroy:
confirm: Are you sure you want to delete this working schedule?
form:
title: Plan a future work schedule
title: Planifica tu programa para el futuro
title_current: Edit current work schedule
start_date: Start date
start_date_caption: Select the date from when the new work schedule will be effective.
@@ -1197,7 +1197,7 @@ es:
total_available_hours: Total available work hours
title_availability_factor: Availability factor
title_days_and_hours: Days and hours
title_future_dates: Future dates
title_future_dates: Fechas futuras
table:
mobile_title: Working schedules
start_date: Start date
@@ -1220,12 +1220,12 @@ es:
'
delete_tooltip: Eliminar usuario de marcador de posición
deletion_info:
heading_html: Delete placeholder user %{name}
heading_html: Eliminar usuario de marcador de posición %{name}
data_consequences: 'Todas las repeticiones del usuario de marcador de posición (por ejemplo, como asignado, responsable u otros valores de usuario) se reasignarán a una cuenta denominada «Usuario eliminado». Como los datos de todas las cuentas eliminadas se reasignarán a esta cuenta, no podrán distinguirse los datos del usuario de los datos creados con cualquier otra cuenta eliminada.
'
irreversible: Esta acción no se puede deshacer
confirmation_html: Enter the placeholder user name %{name} to confirm the deletion.
confirmation_html: Escriba el nombre de usuario de marcador de posición %{name} para confirmar la eliminación.
priorities:
edit:
priority_color_text: |
@@ -1526,7 +1526,7 @@ es:
'
login_with_auth_provider: o inicie sesión con su cuenta existente
signup_with_auth_provider: o regístrate usando
auth_source_login_html: Please login as <em>%{login}</em> to activate your account.
auth_source_login_html: Inicia sesión como <em>%{login}</em> para activar tu cuenta.
omniauth_login: Por favor inicie sesión para activar su cuenta.
actionview_instancetag_blank_option: Por favor, elija
activemodel:
@@ -1546,7 +1546,7 @@ es:
personal_access_token: Token de acceso personal
import/jira_open_project_reference:
jira: Jira
jira_import: Jira Migrator
jira_import: Migrador Jira
announcements:
show_until: Mostrar hasta
attachment:
@@ -1837,24 +1837,24 @@ es:
start_date: Start date
end_date: End date
user_working_hours:
valid_from: Valid from
monday: Monday
monday_hours: Monday hours
tuesday: Tuesday
tuesday_hours: Tuesday hours
wednesday: Wednesday
wednesday_hours: Wednesday hours
thursday: Thursday
thursday_hours: Thursday hours
friday: Friday
friday_hours: Friday hours
saturday: Saturday
saturday_hours: Saturday hours
sunday: Sunday
sunday_hours: Sunday hours
availability_factor: Availability factor
shared_hours: Work hours
days: Working days
valid_from: Válido desde
monday: Lunes
monday_hours: Horario de los lunes
tuesday: Martes
tuesday_hours: Horario de los martes
wednesday: Miércoles
wednesday_hours: Horario de los miércoles
thursday: Jueves
thursday_hours: Horario de los jueves
friday: Viernes
friday_hours: Horario de los viernes
saturday: Sábado
saturday_hours: Horario de los sábados
sunday: Domingo
sunday_hours: Horario de los domingos
availability_factor: Factor de disponibilidad
shared_hours: Horas laborales
days: Días laborables
version:
effective_date: Fecha de finalización
sharing: Compartiendo
@@ -1909,8 +1909,8 @@ es:
before: debe ser antes de %{date}.
before_or_equal_to: debe ser antes o igual a %{date}.
blank: no puede estar en blanco.
not_before_start_date: must not be before the start date.
overlapping_range: overlaps with an existing non-working day range.
not_before_start_date: no debe ser anterior a la fecha de inicio.
overlapping_range: se solapa con un intervalo de días no laborables ya existente.
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 los proyectos y, por tanto, no puede modificarse.
@@ -1947,9 +1947,9 @@ es:
less_than_or_equal_to: debe ser menor o igual a %{count}.
not_available: no está disponible debido a una configuración del sistema.
not_deletable: no se puede eliminar.
not_editable: cannot be edited because it is already in effect.
not_editable: no se puede editar porque ya está en vigor.
not_current_user: no es el usuario actual.
system_wide_non_working_day_exists: conflicts with an existing system-wide non-working day for this date.
system_wide_non_working_day_exists: entra en conflicto con un día no laborable ya establecido para todo el sistema en esta fecha.
not_found: no encontrado.
not_a_date: no es una fecha válida.
not_a_datetime: no es una fecha/hora válida.
@@ -2305,7 +2305,7 @@ es:
user_working_hours:
attributes:
days:
no_working_day: At least one day needs to be configured as a working day.
no_working_day: Hay que configurar al menos un día como día laborable.
member:
principal_blank: Por favor seleccione al menos un usuario o grupo.
role_blank: necesita ser asignado.
@@ -3298,13 +3298,13 @@ es:
'
new_features_list:
line_0: 'Big Agile update: dedicated sprint objects, all work packages visible on Backlogs, and automatic sprint board creation.'
line_1: In-place editing of project attributes on the Project Overview page.
line_2: Sharing of meeting templates (Basic plan and higher).
line_3: Better search in Time and Costs, Boards, and more.
line_4: Option to safely change project identifiers.
line_5: Improved workflow configuration for administrators.
line_6: Action boards released to Community.
line_0: 'Gran actualización de Agile: objetos de sprint específicos, todos los paquetes de trabajo visibles en los backlogs y creación automática del tablero de sprints.'
line_1: Edición directa de los atributos del proyecto en la página «Resumen del proyecto».
line_2: Compartir plantillas de reuniones (plan Basic y superiores).
line_3: Mejora la búsqueda en «Tiempo y costes», «Tableros» y mucho más.
line_4: Opción para cambiar de forma segura los identificadores de proyecto.
line_5: Configuración mejorada del flujo de trabajo para los administradores.
line_6: Se han publicado los tableros de acciones en la comunidad.
links:
upgrade_enterprise_edition: Actualizar a Enterprise
postgres_migration: Migrando su instalación a PostgreSQL
@@ -3369,15 +3369,15 @@ es:
progress_calculation_adjusted: Cálculo de progreso automático <a href="%{href}" target="_blank">ajustado con la actualización de versión</a>.
scheduling_mode_adjusted: El modo de programación se ajusta automáticamente con la actualización de la versión.
totals_removed_from_childless_work_packages: Los totales de trabajo y progreso se eliminan automáticamente para los paquetes de trabajo no padres con la <a href="%{href}" target="_blank">actualización de la versión</a>. Se trata de una tarea de mantenimiento y puede ignorarse con seguridad.
sprint_migration: Version '%{version_name}' has been copied as a sprint.
sprint_migration: La versión «%{version_name}» se ha copiado como sprint.
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 secundarios.
links:
configuration_guide: Guía de configuración
get_in_touch: "¿Tiene alguna pregunta? Póngase en contacto con nosotros."
instructions_after_registration_link: You can sign in as soon as your account has been activated by clicking [here](signin_url).
instructions_after_logout_link: You can sign in again by clicking [here](signin_url).
instructions_after_error_link: You can try to sign in again by clicking [here](signin_url). If the error persists, ask your admin for help.
instructions_after_registration_link: Puedes iniciar sesión en cuanto se haya activado tu cuenta haciendo clic [aquí](signin_url).
instructions_after_logout_link: Puedes volver a iniciar sesión haciendo clic [aquí](signin_url).
instructions_after_error_link: Puedes intentar iniciar sesión de nuevo haciendo clic [aquí](signin_url). Si el error persiste, pide ayuda a tu administrador.
menus:
admin:
ai: Inteligencia artificial (IA)
@@ -3488,40 +3488,40 @@ es:
submit_button: Update alerts
notifications:
participating:
title: Participating
submit_button: Update preferences
mentioned: Mentioned
watched: Watching
assignee: Assignee
responsible: Accountable
shared: Shared with me
title: Participando
submit_button: Actualizar preferencias
mentioned: Mencionado
watched: Observando
assignee: Asignado
responsible: Responsable
shared: Compartido conmigo
date_alerts:
title: Date alerts
submit_button: Update date alerts
start_date: Start date
due_date: Finish date
overdue: Overdue
title: Alertas de fecha
submit_button: Alertas de fecha de actualización
start_date: Fecha de inicio
due_date: Fecha de finalización
overdue: Vencido
times:
same_day: On the same day
one_day_before: 1 day before
three_days_before: 3 days before
seven_days_before: 7 days before
one_day_after: 1 day after
three_days_after: 3 days after
seven_days_after: 7 days after
same_day: El mismo día
one_day_before: 1 día antes
three_days_before: 3 días antes
seven_days_before: 7 días antes
one_day_after: 1 día después
three_days_after: 3 días después
seven_days_after: 7 días después
non_participating:
title: Non-participating
submit_button: Update preferences
work_package_created: New work packages
work_package_commented: All new comments
work_package_processed: All status changes
work_package_prioritized: All priority changes
work_package_scheduled: All date changes
title: No participando
submit_button: Actualizar preferencias
work_package_created: Nuevos paquetes de trabajo
work_package_commented: Todos los nuevos comentarios
work_package_processed: Todos los cambios de estado
work_package_prioritized: Todos los cambios de prioridad
work_package_scheduled: Todos los cambios de fecha
project_specific_settings:
title: Project-specific notification settings
add_button: Add project-specific notifications
dialog_title: Add project-specific notifications
list_header: Projects with specific notifications
title: Configuración de notificaciones específicas de proyectos
add_button: Añadir notificaciones específicas del proyecto
dialog_title: Añadir notificaciones específicas del proyecto
list_header: Proyectos con notificaciones específicas
notifications:
reasons:
assigned: Asignado a
@@ -3594,7 +3594,7 @@ es:
label_ical_access_key_generation_hint: Se genera automáticamente al suscribirse a un calendario.
label_ical_access_key_latest: último
label_ical_access_key_revoke: Revocar
label_integrations: Integrations
label_integrations: Integraciones
label_add_column: Añadir columna
label_applied_status: Estado aplicado
label_archive_project: Archivar proyecto
@@ -3642,8 +3642,8 @@ es:
label_calendar_show: Mostrar Calendario
label_category: Categoría
label_completed: Completado
label_committed_at_html: "%{committed_revision_link} at %{date}"
label_committed_link: committed revision %{revision_identifier}
label_committed_at_html: "%{committed_revision_link} el %{date}"
label_committed_link: revisión confirmada %{revision_identifier}
label_consent_settings: Consentimiento del usuario
label_wiki_menu_item: Elemento de menú wiki
label_select_main_menu_item: Seleccione nuevo elemento de menú principal
@@ -3810,7 +3810,7 @@ es:
label_subject_or_id: Asunto o ID
label_calendar_subscriptions: Suscripciones al calendario
label_identifier: Identificador
label_project_identifier: Project identifier
label_project_identifier: Identificador del proyecto
label_in: en
label_in_less_than: en menos de
label_in_more_than: en más de
@@ -3845,7 +3845,7 @@ es:
label_external_links: Enlaces externos
label_locale: Idioma y región
label_jump_to_a_project: Saltar a un proyecto...
label_jira_import: Jira Migrator
label_jira_import: Migrador Jira
label_keyword_plural: Palabras clave
label_language_based: Basado en el idioma del usuario
label_last_activity: Última actividad
@@ -3944,13 +3944,13 @@ es:
label_news_view_all: Ver todas las noticias
label_next: Siguiente
label_next_week: La próxima semana
label_next_year: Next year
label_next_year: Próximo año
label_no_change_option: "(No hay cambios)"
label_no_data: No hay datos disponibles
label_no_due_date: sin fecha de finalización
label_no_start_date: sin fecha de inicio
label_no_parent_page: Sin página principal
label_no_parent_group: "(No parent group)"
label_no_parent_group: "(Sin grupo principal)"
label_notification_center_plural: Notificaciones
label_nothing_display: Nada que mostrar
label_nobody: nadie
@@ -3979,7 +3979,7 @@ es:
label_overall_activity: Actividad general
label_overview: Resumen
label_page_title: Título de la página
label_parent_group_caption: 'Setting a parent group will make this group a subgroup of the selected parent group. This will also inherit all memberships, including permissions of the parent group.
label_parent_group_caption: 'Si estableces un grupo principal, este grupo se convertirá en un subgrupo del grupo principal seleccionado. Además, heredará todas las pertenencias, incluidos los permisos, del grupo principal.
'
label_part_of: parte de
@@ -4008,7 +4008,7 @@ es:
label_preview_not_available: Vista previa no disponible
label_previous: Anterior
label_previous_week: Semana anterior
label_previous_year: Previous year
label_previous_year: Año anterior
label_principal_invite_via_email: " o invitar nuevos usuarios vía email"
label_principal_search: Añadir usuarios o grupos existentes
label_privacy_policy: Política de privacidad y seguridad de datos
@@ -4120,7 +4120,7 @@ es:
label_start_to_start: iniciar para iniciar
label_statistics: Estadísticas
label_status: Estado
label_status_plural: Statuses
label_status_plural: Estados
label_storage_free_space: Espacio de disco restante
label_storage_used_space: Espacio de disco utilizado
label_storage_group: Sistema de archivos de almacenamiento %{identifier}
@@ -4170,7 +4170,7 @@ es:
label_user: Usuario
label_user_and_permission: Usuarios y permisos
label_user_named: Usuario %{name}
label_user_activity_html: "%{value}'s activity"
label_user_activity_html: Actividad de %{value}
label_user_anonymous: Anónimo
label_user_menu: Menú de usuario
label_user_new: Nuevo usuario
@@ -4258,14 +4258,14 @@ es:
other: "%{count} archivos"
zero: sin archivos
label_x_days:
one: 1 day
other: "%{count} days"
one: 1 día
other: "%{count} días"
label_x_working_days:
one: 1 working day
other: "%{count} working days"
one: 1 día laborable
other: "%{count} días laborables"
label_x_working_days_time_off:
one: 'Time off: 1 working day'
other: 'Time off: %{count} working days'
one: 'Tiempo libre: 1 día laborable'
other: 'Tiempo libre: %{count} días laborables'
label_yesterday: ayer
label_zen_mode: Modo zen
label_role_type: Tipo
@@ -4274,22 +4274,22 @@ es:
label_not_changeable: "(no modificable)"
label_global: Global
label_seeded_from_env_warning: Este registro se ha creado a través de una variable de entorno de configuración. No es editable a través de la interfaz de usuario.
label_schedule_and_availability: Schedule and availability
label_working_hours: Work schedule
label_non_working_days: Availability calendar
label_non_working_days_with_count: Non-working days (%{count})
label_non_working_days_summary: Summary
label_schedule_and_availability: Horario y disponibilidad
label_working_hours: Horario de trabajo
label_non_working_days: Calendario de disponibilidad
label_non_working_days_with_count: Días no laborables (%{count})
label_non_working_days_summary: Resumen
button_add_non_working_time: Time off
button_edit_non_working_time: Edit time off
label_continued_from_previous_year: continued from previous year
label_continues_into_next_year: continues into next year
label_end_date: Finish date
label_working_days: Working days
label_non_working_times_with_count: "%{year} time off (%{count})"
label_non_working_times_summary: "%{year} summary"
label_total_user_non_working_times: Personal non-working days
label_total_global_non_working_days: Global non-working days
label_total_days_off: Total days off
label_continued_from_previous_year: continuación del año anterior
label_continues_into_next_year: se prolongará hasta el año que viene
label_end_date: Fecha de finalización
label_working_days: Días laborables
label_non_working_times_with_count: Tiempo libre en %{year} (%{count})
label_non_working_times_summary: Resumen de %{year}
label_total_user_non_working_times: Días libres por motivos personales
label_total_global_non_working_days: Días festivos a nivel mundial
label_total_days_off: Total de días libres
macro_execution_error: Error ejecutando el macro %{macro_name}
macro_unavailable: Macro %{macro_name} no puede ser mostrado.
macros:
@@ -4900,7 +4900,7 @@ es:
setting_apiv3_cors_title: Intercambio de recursos entre orígenes (CORS)
setting_apiv3_cors_enabled: Habilitar CORS
setting_apiv3_cors_origins: Orígenes permitidos de la API de CORS (uso compartido de recursos entre orígenes) V3
setting_apiv3_cors_origins_instructions_html: 'If CORS is enabled, these are the origins that are allowed to access OpenProject API. <br/> Please check the [Documentation on the Origin header](docs_url) on how to specify the expected values.
setting_apiv3_cors_origins_instructions_html: 'Si CORS está habilitado, estos son los orígenes a los que se les permite acceder a la API de OpenProject. <br/> Consulta la [documentación sobre el encabezado Origin](docs_url) para saber cómo especificar los valores esperados.
'
setting_apiv3_write_readonly_attributes: Acceso de escritura a atributos de solo lectura
@@ -4910,7 +4910,7 @@ es:
setting_apiv3_write_readonly_attributes_warning: 'Este ajuste tiene un caso de uso para, por ejemplo, la importación de datos, pero permite a los administradores suplantar la creación de elementos como otros usuarios. Sin embargo, todas las solicitudes de creación se registran con el verdadero autor.
'
setting_apiv3_write_readonly_attributes_additional_html: 'For more information on attributes and supported resources, please see the [API documentation](api_documentation_link).
setting_apiv3_write_readonly_attributes_additional_html: 'Para obtener más información sobre los atributos y los recursos compatibles, consulta la [documentación de la API](api_documentation_link).
'
setting_apiv3_max_page_size: Tamaño máximo de página API
@@ -5095,12 +5095,12 @@ es:
setting_welcome_text: Bloque de texto de bienvenida
setting_welcome_title: Título del bloque de bienvenida
setting_welcome_on_homescreen: Mostrar bloque de bienvenida en la pagina de inicio
setting_work_packages_identifier_classic: Instance-wide numerical sequence (default)
setting_work_packages_identifier_classic_caption: 'Every work package gets a sequential number starting with 1 and incremented with every new one. The numbers are unique within this instance so they remain the same even if work packages are moved between projects.
setting_work_packages_identifier_classic: Secuencia numérica para toda la instancia (predeterminada)
setting_work_packages_identifier_classic_caption: 'Cada paquete de trabajo recibe un número secuencial que empieza por 1 y se incrementa con cada nuevo paquete. Los números son únicos dentro de esta instancia, por lo que siguen siendo los mismos aunque los paquetes de trabajo se trasladen de un proyecto a otro.
'
setting_work_packages_identifier_semantic: Project-based semantic identifiers
setting_work_packages_identifier_semantic_caption: 'Every project has a unique identifier that is prefixed to the work package ID. If a work package moved to another project, a new identifier is generated but the old one continues to function.
setting_work_packages_identifier_semantic: Identificadores semánticos basados en proyectos
setting_work_packages_identifier_semantic_caption: 'Cada proyecto tiene un identificador único que se añade al principio del ID del paquete de trabajo. Si un paquete de trabajo se traslada a otro proyecto, se genera un nuevo identificador, pero el antiguo sigue funcionando.
'
setting_work_package_list_default_highlighting_mode: Modo de resaltado predeterminado
@@ -5433,10 +5433,10 @@ es:
text_plugin_assets_writable: Directorio de extensiones activos escribible
text_powered_by: Con tecnología de %{link}
text_project_identifier_info: Se permiten sólo letras minúsculas (a-z), números, guiones y guiones bajos, debe comenzar con una letra minúscula.
text_project_identifier_description: The project identifier is prepended to all work package IDs. If the identifier is "PROJ" for example, the work package identifier will be "PROJ-12" or "PROJ-246".
text_project_identifier_url_description: The project identifier is included in the URL of the project.
text_project_identifier_handle_format: Must start with a letter and contain only uppercase letters, numbers, and underscores (max 10 characters).
text_project_identifier_format: Must start with a lowercase letter. Only lowercase letters (a-z), numbers, dashes and underscores are allowed.
text_project_identifier_description: El identificador del proyecto se antepone a todos los identificadores de los paquetes de trabajo. Si el identificador es «PROJ», por ejemplo, el identificador del paquete de trabajo será «PROJ-12» o «PROJ-246».
text_project_identifier_url_description: El identificador del proyecto aparece en la URL del proyecto.
text_project_identifier_handle_format: Debe empezar por una letra y contener solo letras mayúsculas, números y guiones bajos (máximo 10 caracteres).
text_project_identifier_format: Debe empezar con una letra minúscula. Solo se permiten letras minúsculas (a-z), números, guiones y guiones bajos.
text_reassign: 'Reasignar al paquete de trabajo:'
text_regexp_multiline: La expresión regular se aplica en modo multilínea. Por ejemplo, ^---\s+
text_repository_usernames_mapping: Seleccione o actualize el usuario de OpenProject asignado a cada nombre en el registro del repositorio. Los usuarios con el mismo nombre o email serán mapeados automáticamente.
+112 -115
View File
@@ -126,7 +126,7 @@ fr:
new: Nouvelle configuration
banner:
title: Capacités d'importation limitées
description: 'This Jira Migrator is currently in beta and can only import basic data: projects, issues (name, title, description, attachments), users (name, email, project membership), statuses, and types. It cannot import workflows, custom fields, issue relations, or permissions. We currently only support Jira Server/Data Center versions 10.x and 11.x. Cloud instances are not supported at this time.'
description: 'Cet outil Jora Migrator est actuellement en version bêta et ne peut importer que des données de base : projets, tickets (nom, titre, description, pièces jointes), utilisateurs (nom, e-mail, appartenance à un projet), statuts et types. Il ne peut pas importer les flux de travail, les champs personnalisés, les relations entre les tickets ou les autorisations. Nous ne prenons actuellement en charge que les versions 10.x et 11.x de Jira Server/Data Center. Les instances cloud ne sont pas prises en charge pour le moment.'
form:
fields:
name: Nom
@@ -164,7 +164,7 @@ fr:
history: Historique
remove_error: Une exécution d'importation Jira ne peut pas être supprimée lorsqu'elle est en cours d'exécution
import_blocked_error: Un autre cycle d'importation Jira est actuellement en cours ou en attente de révision. Veuillez le terminer ou l'annuler avant de commencer une nouvelle importation.
project_identifier_taken: 'You are trying to import a project with an already used identifier: %{taken_identifier}. Please update the project identifier in Jira then click on Retry.'
project_identifier_taken: 'Vous essayez d''importer un projet avec un identifiant déjà utilisé : %{taken_identifier}. Veuillez mettre à jour l''identifiant du projet dans Jira, puis cliquez sur Réessayer.'
blank:
title: Aucun cycle d'importation n'a encore été configuré
description: Créez un cycle d'importation pour commencer à importer des informations à partir de cette instance Jira
@@ -387,9 +387,9 @@ fr:
notification_text_default: "<p>Bonjour,</p> <p>Un nouveau projet a été créé : projectValue:name</p> <p>Nous vous remercions de votre attention et vous prions d'agréer nos salutations distinguées.</p>\n"
work_packages_identifier:
page_header:
description: Choose between classic numerical work package IDs or semantic project-specific ones that prepend the project identifier to the work package ID.
description: Vous avez le choix entre des identifiants numériques classiques pour les lots de travaux et des identifiants sémantiques spécifiques aux projets, qui ajoutent l'identifiant du projet à l'identifiant du lot de travaux.
banner:
existing_identifiers_notice: 'Existing identifiers for %{project_count} projects don''t meet requirements for project-based semantic identifiers. OpenProject can automatically update these so that they are valid as in the examples below. Click on ''Autofix and save'' to update identifiers for all projects in this manner and enable project-based semantic identifiers.
existing_identifiers_notice: 'Les identifiants existants de %{project_count} projets ne répondent pas aux exigences des identifiants sémantiques basés sur les projets. OpenProject peut les mettre à jour automatiquement pour qu''ils soient valides, comme dans les exemples ci-dessous. Cliquez sur « Corriger automatiquement et enregistrer » pour mettre à jour les identifiants de tous les projets de cette manière et activer les identifiants sémantiques basés sur les projets.
'
box_header:
@@ -403,8 +403,8 @@ fr:
error_starts_with_number: Ne peut pas commencer par un chiffre
error_special_characters: Caractères spéciaux non autorisés
error_not_fully_uppercased: Doit être en majuscules
error_in_use: Already in use as another project's active handle
error_reserved: Reserved by another project's handle history
error_in_use: Déjà utilisé comme alias actif d'un autre projet
error_reserved: Réservé par l'historique des alias d'un autre projet
error_unknown: Nécessite une vérification manuelle
remaining_projects:
one: "... 1 projet supplémentaire"
@@ -413,14 +413,14 @@ fr:
dialog:
title: Modifier les identifiants de lots de travaux
heading: Activer les ID de lots de travaux basés sur le projet ?
description: 'This will change IDs for all work packages in all projects in this instance. Previous identifiers and URLs will continue to redirect properly. This change will take some time to complete.
description: 'Cette opération modifiera les identifiants de tous les lots de travaux de tous les projets dans cette instance. Les identifiants et URL précédents continueront de rediriger correctement. Cette modification prendra un certain temps.
'
confirm_button: Modifier les identifiants
checkbox_label: Je comprends que cela changera définitivement tous les identifiants du lot de travaux
success_banner: Le format de l'identifiant du lot de travaux a été mis à jour.
in_progress:
banner_message: Project identifiers are currently being updated to project-based semantic identifiers. This may take some time.
banner_message: Les identifiants de projet sont actuellement mis à jour pour devenir des identifiants sémantiques basés sur les projets. Cela peut prendre un certain temps.
workflows:
tabs:
default_transitions: Transitions par défaut
@@ -1176,15 +1176,15 @@ fr:
blank_title: Pas encore d'historique des horaires
blank_description: Les changements d'horaire antérieurs seront affichés ici
destroy:
confirm: Are you sure you want to delete this working schedule?
confirm: Voulez-vous vraiment supprimer cet horaire de travail ?
form:
title: Plan a future work schedule
title_current: Edit current work schedule
title: Planifier un futur horaire de travail
title_current: Modifier l'horaire de travail actuel
start_date: Date de début
start_date_caption: Select the date from when the new work schedule will be effective.
start_date_caption: Sélectionnez la date à partir de laquelle le nouvel horaire de travail entrera en vigueur.
work_days: Journées de travail
working_hours_label: Heures de travail
hours_mode_label: Hours mode
hours_mode_label: Mode heures
same_hours_mode: Mêmes heures par jour
individual_hours_mode: Heures individuelles par jour
work_hours: Heures de travail
@@ -1194,8 +1194,8 @@ fr:
total_work_hours: Heures de travail totales 
availability_description: Le facteur de disponibilité représente le pourcentage réel de votre temps de travail consacré aux tâches du projet. Il tient compte des réunions, des courriels, du travail administratif et d'autres activités non liées au projet.
availability_factor: Facteur de disponibilité
availability_factor_caption: Define the percentage of your working time dedicated to project work.
total_available_hours: Total available work hours
availability_factor_caption: Définissez le pourcentage de votre temps de travail consacré au projet.
total_available_hours: Total des heures de travail disponibles
title_availability_factor: Facteur de disponibilité
title_days_and_hours: Jours et heures
title_future_dates: Dates futures
@@ -1208,9 +1208,9 @@ fr:
effective_work_hours: Heures de travail effectives
work_days_count:
one: 1 jour ouvrable
other: "%{count} working days"
other: "%{count} jours ouvrables"
user_preferences:
disable_keyboard_shortcuts_caption: 'You can choose to disable default [keyboard shortcuts](docs_url) if you use a screen reader or want to avoid accidentally triggering an action with a shortcut.
disable_keyboard_shortcuts_caption: 'Vous pouvez choisir de désactiver les [raccourcis clavier](docs_url) par défaut si vous utilisez un lecteur d''écran ou si vous voulez éviter de déclencher accidentellement une action avec un raccourci.
'
page:
@@ -1221,12 +1221,12 @@ fr:
'
delete_tooltip: Supprimer lutilisateur fictif
deletion_info:
heading_html: Delete placeholder user %{name}
heading_html: Supprimer lutilisateur fictif %{name}
data_consequences: 'Toutes les occurrences de l''utilisateur fictif (par exemple, en tant que responsable ou autre valeur utilisateur) seront réaffectées à un compte appelé « Utilisateur supprimé ». Comme les données de chaque compte supprimé sont réaffectées à ce compte, il ne sera pas possible de distinguer les données que l''utilisateur a créées des données d''un autre compte supprimé.
'
irreversible: Cette action est irréversible
confirmation_html: Enter the placeholder user name %{name} to confirm the deletion.
confirmation_html: Saisissez le nom d'utilisateur fictif %{name} pour confirmer sa suppression.
priorities:
edit:
priority_color_text: |
@@ -1255,10 +1255,7 @@ fr:
Elle peut être utilisée pour mettre en évidence les lots de travaux dans le tableau.
status_default_text: Les nouveaux lots de travaux sont définis par défaut sur ce type. Ils ne peuvent pas être en lecture seule.
status_excluded_from_totals_text: Cochez cette option pour exclure les lots de travaux ayant ce statut des totaux de Travail, Travail restant et % réalisé dans une hiérarchie.
status_percent_complete_text_html: |-
In [status-based progress calculation mode](setting_url), the % Complete of a work
package is automatically set to this value when this status is selected.
Ignored in work-based mode.
status_percent_complete_text_html: En [mode de calcul de la progression basé sur le statut](setting_url), le pourcentage d'achèvement d'un lot de travaux est automatiquement fixé sur cette valeur lorsque ce statut est sélectionné. Cette valeur est ignorée en mode basé sur le travail.
status_readonly_html: |
Cochez cette option pour marquer les lots de travaux avec ce statut en lecture seule.
Aucun attribut ne peut être modifié à l'exception du statut.
@@ -1527,7 +1524,7 @@ fr:
'
login_with_auth_provider: ou connectez-vous avec votre compte existant
signup_with_auth_provider: ou inscrivez-vous à l'aide de
auth_source_login_html: Please login as <em>%{login}</em> to activate your account.
auth_source_login_html: Veuillez vous connecter en tant que <em>%{login}</em> pour activer votre compte.
omniauth_login: Veuillez vous connecter pour activer votre compte.
actionview_instancetag_blank_option: Veuillez sélectionner
activemodel:
@@ -3036,8 +3033,8 @@ fr:
'
domain_caption: Le jeton sera valable pour votre nom d'hôte actuellement configuré.
receive_newsletter: I want to receive the OpenProject [newsletter](newsletter_url).
consent: I agree with the [terms of service](tos_url) and the [privacy policy](privacy_url).
receive_newsletter: Je souhaite recevoir la [lettre d'information](newsletter_url) d'OpenProject.
consent: J'accepte les [conditions d'utilisation](tos_url) et la [politique de confidentialité](privacy_url).
email_calendar_updates:
state:
disabled: Désactivé.
@@ -3299,17 +3296,17 @@ fr:
learn_about: En savoir plus sur les nouvelles fonctionnalités
missing: Il n'y a pas encore de fonctionnalités mises en évidence.
'17_3':
new_features_title: 'The release contains various new features and improvements, such as:
new_features_title: 'Cette version contient plusieurs nouvelles fonctionnalités et améliorations, telles que :
'
new_features_list:
line_0: 'Big Agile update: dedicated sprint objects, all work packages visible on Backlogs, and automatic sprint board creation.'
line_1: In-place editing of project attributes on the Project Overview page.
line_2: Sharing of meeting templates (Basic plan and higher).
line_3: Better search in Time and Costs, Boards, and more.
line_4: Option to safely change project identifiers.
line_5: Improved workflow configuration for administrators.
line_6: Action boards released to Community.
line_0: 'Grande mise à jour agile : objets de sprint dédiés, tous les lots de travaux visibles sur les backlogs, et création automatique du tableau de sprint.'
line_1: Modification sur place des attributs du projet sur la page de vue d'ensemble du projet.
line_2: Partage de modèles de réunion (abonnements Basic et supérieurs).
line_3: Une meilleure recherche dans les délais et les coûts, les tableaux, etc.
line_4: Option permettant de modifier en toute sécurité les identifiants des projets.
line_5: Amélioration de la configuration du flux de travail pour les administrateurs.
line_6: Des tableaux d'action sont mis à la disposition de la communauté.
links:
upgrade_enterprise_edition: Passer à la version Enterprise
postgres_migration: Migration de votre installation vers PostgreSQL
@@ -3381,8 +3378,8 @@ fr:
configuration_guide: Guide de configuration
get_in_touch: Vous avez des questions ? Contactez-nous.
instructions_after_registration_link: Vous pourrez vous connecter après avoir activé votre compte en cliquant [Ici](signin_url).
instructions_after_logout_link: You can sign in again by clicking [here](signin_url).
instructions_after_error_link: You can try to sign in again by clicking [here](signin_url). If the error persists, ask your admin for help.
instructions_after_logout_link: Vous pouvez vous reconnecter en cliquant [ici](signin_url).
instructions_after_error_link: Vous pouvez essayer de vous reconnecter en cliquant [ici](signin_url). Si l'erreur persiste, demandez de l'aide à votre administrateur.
menus:
admin:
ai: Intelligence artificielle (IA)
@@ -3395,10 +3392,10 @@ fr:
label: Ajouter…
my_account:
notifications_and_email:
title: Notification and email
title: Notification et e-mail
tabs:
notifications: Notification settings
email_reminders: Email reminders
notifications: Paramètres de notifications
email_reminders: Rappels par e-mail
access_tokens:
description: Les jetons de fournisseur sont émis par OpenProject, ce qui permet à d'autres applications d'y accéder. Les jetons clients sont émis par d'autres applications, permettant à OpenProject d'y accéder.
no_results:
@@ -3463,70 +3460,70 @@ fr:
unknown_storage: Espace de stockage inconnu
email_reminders:
immediate_reminders:
title: Send me an email reminder
mentioned: Notify me when I am mentioned
personal_reminder: Notify me for personal reminders
title: M'envoyer un rappel par e-mail
mentioned: M'avertir lorsque je suis mentionné(e)
personal_reminder: M'avertir pour les rappels personnels
daily_reminders:
title: Send me daily email reminders for unread notifications
caption: You will receive these reminders only for unread notifications and only at hours you specify. Until you configure a time zone for your account, the times will be interpreted to be in UTC.
enabled: Enable daily email reminders
add_time: Add time
remove_time: Remove time
time_slot_label: Reminder time (UTC)
title: M'envoyer des rappels quotidiens par e-mail pour les notifications non lues
caption: Vous ne recevrez ces rappels que pour les notifications non lues et seulement aux heures que vous aurez spécifiées. Tant que vous n'aurez pas configuré un fuseau horaire pour votre compte, les heures seront interprétées comme étant en UTC.
enabled: Activer les rappels quotidiens par e-mail
add_time: Ajouter une heure
remove_time: Supprimer l'heure
time_slot_label: Heure de rappel (UTC)
workdays:
title: Receive email reminders on these days
submit_button: Update reminder days
title: Recevoir des rappels par e-mail aux jours spécifiés
submit_button: Mettre à jour les jours de rappel
pause_reminders:
title: Pause email notifications
enabled: Temporarily pause daily email reminders
date_range: Pause period
title: Suspendre les notifications par e-mail
enabled: Suspendre temporairement les rappels quotidiens par e-mail
date_range: Période de pause
email_alerts:
title: Email alerts for other items that are not work packages
news_added: News added
news_commented: Comment on a news item
document_added: Document added
forum_messages: Forum message posted
wiki_page_added: Wiki page added
wiki_page_updated: Wiki page updated
membership_added: Membership added
membership_updated: Membership updated
submit_button: Update alerts
title: Alertes par e-mail pour les autres éléments qui ne sont pas des lots de travaux
news_added: Actualités ajoutées
news_commented: Commenter un article d'actualité
document_added: Document ajouté
forum_messages: Message de forum publié
wiki_page_added: Page wiki ajoutée
wiki_page_updated: Page wiki mise à jour
membership_added: Adhésion ajoutée
membership_updated: Adhésion mise à jour
submit_button: Mettre à jour les alertes
notifications:
participating:
title: Participating
submit_button: Update preferences
mentioned: Mentioned
watched: Watching
assignee: Assignee
responsible: Accountable
shared: Shared with me
title: Participant
submit_button: Mettre à jour les préférences
mentioned: Mentionné
watched: En cours
assignee: Personne assignée
responsible: Responsable
shared: Partagé avec moi
date_alerts:
title: Date alerts
submit_button: Update date alerts
start_date: Start date
due_date: Finish date
overdue: Overdue
title: Alertes de date
submit_button: Mettre à jour les alertes de date
start_date: Date de début
due_date: Date de fin
overdue: En retard
times:
same_day: On the same day
one_day_before: 1 day before
three_days_before: 3 days before
seven_days_before: 7 days before
one_day_after: 1 day after
three_days_after: 3 days after
seven_days_after: 7 days after
same_day: Le même jour
one_day_before: 1 jour avant
three_days_before: 3 jours avant
seven_days_before: 7 jours avant
one_day_after: 1 jour après
three_days_after: 3 jours après
seven_days_after: 7 jours après
non_participating:
title: Non-participating
submit_button: Update preferences
work_package_created: New work packages
work_package_commented: All new comments
work_package_processed: All status changes
work_package_prioritized: All priority changes
work_package_scheduled: All date changes
title: Non participant
submit_button: Mettre à jour les préférences
work_package_created: Nouveaux lots de travaux
work_package_commented: Tous les nouveaux commentaires
work_package_processed: Tous les changements de statut
work_package_prioritized: Tous les changements de priorité
work_package_scheduled: Tous les changements de date
project_specific_settings:
title: Project-specific notification settings
add_button: Add project-specific notifications
dialog_title: Add project-specific notifications
list_header: Projects with specific notifications
title: Paramètres de notification spécifiques au projet
add_button: Ajouter des notifications spécifiques au projet
dialog_title: Ajouter des notifications spécifiques au projet
list_header: Projets avec notifications spécifiques
notifications:
reasons:
assigned: Personne assignée
@@ -3648,7 +3645,7 @@ fr:
label_category: Catégorie
label_completed: Terminé
label_committed_at_html: "%{committed_revision_link} le %{date}"
label_committed_link: committed revision %{revision_identifier}
label_committed_link: révision validée %{revision_identifier}
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
@@ -4175,7 +4172,7 @@ fr:
label_user: Utilisateur
label_user_and_permission: Utilisateurs et autorisations
label_user_named: Utilisateur %{name}
label_user_activity_html: "%{value}'s activity"
label_user_activity_html: Activité de %{value}
label_user_anonymous: Anonyme
label_user_menu: Menu utilisateur
label_user_new: Nouvel utilisateur
@@ -4266,8 +4263,8 @@ fr:
one: un jour
other: "%{count} jours"
label_x_working_days:
one: 1 working day
other: "%{count} working days"
one: 1 jour ouvrable
other: "%{count} jours ouvrables"
label_x_working_days_time_off:
one: 'Temps libre : 1 jour ouvrable'
other: 'Temps libre : %{count} jours ouvrables'
@@ -4286,14 +4283,14 @@ fr:
label_non_working_days_summary: Résumé
button_add_non_working_time: Temps libre
button_edit_non_working_time: Modifier les temps libres
label_continued_from_previous_year: continued from previous year
label_continued_from_previous_year: suite de l'année précédente
label_continues_into_next_year: se poursuit dans l'année suivante
label_end_date: Date de fin
label_working_days: Journées de travail
label_non_working_times_with_count: "%{year} de temps libre (%{count})"
label_non_working_times_summary: "%{year} summary"
label_total_user_non_working_times: Personal non-working days
label_total_global_non_working_days: Global non-working days
label_non_working_times_summary: Résumé de %{year}
label_total_user_non_working_times: Jours non travaillés personnels
label_total_global_non_working_days: Jours non travaillés généraux
label_total_days_off: Nombre total de jours de congé
macro_execution_error: Erreur lors de l'exécution de la macro %{macro_name}
macro_unavailable: La macro %{macro_name} ne peut être affichée.
@@ -4909,7 +4906,7 @@ fr:
setting_apiv3_cors_title: Partage croisé des ressources (CORS)
setting_apiv3_cors_enabled: Activer CORS
setting_apiv3_cors_origins: Origines autorisées de l'API V3 Cross-Origin Resource Sharing (CORS)
setting_apiv3_cors_origins_instructions_html: 'If CORS is enabled, these are the origins that are allowed to access OpenProject API. <br/> Please check the [Documentation on the Origin header](docs_url) on how to specify the expected values.
setting_apiv3_cors_origins_instructions_html: 'Si CORS est activé, ce sont les origines qui sont autorisées à accéder à l''API OpenProject. <br/> Veuillez vérifier la [documentation sur l''en-tête original](docs_url) pour connaître la façon de spécifier les valeurs attendues.
'
setting_apiv3_write_readonly_attributes: Accès en écriture aux attributs en lecture seule
@@ -4919,7 +4916,7 @@ fr:
setting_apiv3_write_readonly_attributes_warning: 'Ce paramètre est utile, par exemple, pour l''importation de données, mais il permet aux administrateurs de se faire passer pour d''autres utilisateurs lors de la création d''éléments. Toutes les demandes de création sont toutefois enregistrées avec le véritable auteur.
'
setting_apiv3_write_readonly_attributes_additional_html: 'For more information on attributes and supported resources, please see the [API documentation](api_documentation_link).
setting_apiv3_write_readonly_attributes_additional_html: 'Pour obtenir plus d''informations sur les attributs et les ressources prises en charge, veuillez consulter la [documentation de l''API](api_documentation_link).
'
setting_apiv3_max_page_size: Taille maximale de page d'API
@@ -5104,12 +5101,12 @@ fr:
setting_welcome_text: Bloc de texte de bienvenue
setting_welcome_title: Bloc de titre de bienvenue
setting_welcome_on_homescreen: Afficher le bloc de bienvenue sur l'écran d'accueil
setting_work_packages_identifier_classic: Instance-wide numerical sequence (default)
setting_work_packages_identifier_classic_caption: 'Every work package gets a sequential number starting with 1 and incremented with every new one. The numbers are unique within this instance so they remain the same even if work packages are moved between projects.
setting_work_packages_identifier_classic: Séquence numérique à l'échelle de l'instance (par défaut)
setting_work_packages_identifier_classic_caption: 'Chaque lot de travaux obtient un numéro séquentiel commençant par 1 et incrémenté à chaque nouveau. Les nombres sont uniques dans cette instance, donc ils restent les mêmes même si les lots de travaux sont déplacés entre les projets.
'
setting_work_packages_identifier_semantic: Project-based semantic identifiers
setting_work_packages_identifier_semantic_caption: 'Every project has a unique identifier that is prefixed to the work package ID. If a work package moved to another project, a new identifier is generated but the old one continues to function.
setting_work_packages_identifier_semantic: Identifiants sémantiques basés sur le projet
setting_work_packages_identifier_semantic_caption: 'Chaque projet a un identifiant unique qui est préfixé à l''ID du lot de travaux. Si un lot de travaux a été déplacé vers un autre projet, un nouvel identifiant est généré, mais l''ancien continue de fonctionner.
'
setting_work_package_list_default_highlighting_mode: Mode de surbrillance par défaut
@@ -5297,7 +5294,7 @@ fr:
not_allowed_text: Vous n'avez pas les autorisations nécessaires pour voir cette page.
activities:
enable_internal_comments: Activer les commentaires internes
helper_text_html: 'Internal comments allow an internal team to communicate amongst themselves privately. These are only visible to selected roles that have the necessary permissions and will not be visible publicly. [Click here to learn more](docs_url)
helper_text_html: 'Les commentaires internes permettent aux membres d''une équipe interne de communiquer entre eux en privé. Les commentaires ne sont visibles que pour les rôles sélectionnés qui ont les autorisations nécessaires et ne seront pas visibles publiquement. [Cliquez ici pour en savoir plus](docs_url)
'
text_formatting:
@@ -5447,7 +5444,7 @@ fr:
text_project_identifier_description: L'identifiant du projet est préfixé à tous les identifiants du lot de travaux. Si, par exemple, l'identifiant est "PROJ", l'identifiant du lot de travaux sera "PROJ-12" ou "PROJ-246".
text_project_identifier_url_description: L'identifiant du projet est inclus dans l'URL du projet.
text_project_identifier_handle_format: Doit commencer par une lettre et ne contenir que des majuscules, des chiffres et des traits de soulignement (10 caractères au maximum).
text_project_identifier_format: Must start with a lowercase letter. Only lowercase letters (a-z), numbers, dashes and underscores are allowed.
text_project_identifier_format: Doit commencer par une lettre minuscule. Seules les lettres minuscules (a-z), les chiffres, les tirets et les traits de soulignement sont autorisés.
text_reassign: 'Réaffecter au lot de travaux :'
text_regexp_multiline: L'expression régulière est appliquée en mode multi-ligne, e.g. ^---\\s+
text_repository_usernames_mapping: |-
@@ -5560,10 +5557,10 @@ fr:
version_status_locked: verrouillé
version_status_open: ouvert
note: Note
note_password_login_disabled_link: Password login has been disabled through a [configuration setting](configuration_url).
note_password_login_disabled_link: La connexion par mot de passe a été désactivée par un [paramètre de configuration](configuration_url).
warning: Attention
warning_attachments_not_saved: "%{count} fichier(s) n'ont pu être sauvegardés."
warning_imminent_user_limit_html: 'You invited more users than are supported by your current plan. Invited users may not be able to join your OpenProject environment. Please [upgrade your plan](upgrade_url) or block existing users in order to allow invited and registered users to join.
warning_imminent_user_limit_html: 'Vous avez invité plus d''utilisateurs que ne le permet votre abonnement actuel. Les utilisateurs invités peuvent ne pas être en mesure de rejoindre votre environnement OpenProject. Veuillez [mettre à niveau votre abonnement](upgrade_url) ou bloquer les utilisateurs existants afin de permettre aux utilisateurs invités et enregistrés de rejoindre votre environnement.
'
warning_registration_token_expired: 'L’émail dactivation a expiré. Nous vous avons envoyé un nouveau lien à l''adresse %{email}. Merci de cliquer sur ce lien pour activer votre compte.
@@ -5572,7 +5569,7 @@ fr:
warning_user_limit_reached: 'L''ajout d''utilisateurs supplémentaires dépassera la limite actuelle. Veuillez contacter un administrateur pour augmenter la limite d''utilisateurs afin que les utilisateurs externes puissent accéder à cette instance.
'
warning_user_limit_reached_admin_html: 'Adding additional users will exceed the current limit. Please [upgrade your plan](upgrade_url) to be able to ensure external users are able to access this instance.
warning_user_limit_reached_admin_html: 'L''ajout d''utilisateurs supplémentaires dépassera la limite actuelle. Veuillez [mettre à jour votre abonnement](upgrade_url) pour que les utilisateurs externes puissent accéder à cette instance.
'
warning_user_limit_reached_instructions: 'Vous avez atteint le nombre limite d''utilisateurs (%{current}/%{max} utilisateurs actifs). Veuillez contacter sales@openproject.com pour mettre à jour votre abonnement Entreprise et ajouter des utilisateurs supplémentaires.
@@ -5637,7 +5634,7 @@ fr:
reminders:
label_remind_at: Date
note_placeholder: Pourquoi définissez-vous ce rappel ?
create_success_message_html: Reminder set successfully. You will receive a notification for this work package %{reminder_time}.
create_success_message_html: Le rappel a été défini avec succès. Vous recevrez une notification pour ce lot de travaux %{reminder_time}.
success_update_message: Rappel mis à jour avec succès.
success_deletion_message: Rappel supprimé avec succès.
sharing:
@@ -5669,7 +5666,7 @@ fr:
warning_user_limit_reached: 'L''ajout d''utilisateurs supplémentaires dépassera la limite actuelle. Veuillez contacter un administrateur pour augmenter la limite d''utilisateurs afin que les utilisateurs externes puissent accéder à ce(tte) %{entity}.
'
warning_user_limit_reached_admin_html: 'Adding additional users will exceed the current limit. Please [upgrade your plan](upgrade_url) to be able to ensure external users are able to access this %{entity}.
warning_user_limit_reached_admin_html: 'L''ajout d''utilisateurs supplémentaires dépassera la limite actuelle. Veuillez [mettre à jour votre abonnement](upgrade_url) pour que les utilisateurs externes puissent accéder à cette %{entity}.
'
warning_no_selected_user: Veuillez sélectionner les utilisateurs avec lesquels vous souhaitez partager ce(tte) %{entity}
@@ -5793,7 +5790,7 @@ fr:
project: Non divulgué - Le projet est invisible parce qu'il n'a pas les autorisations nécessaires.
ancestor: Non divulgué - l'ancêtre est invisible en raison d'un manque de permissions.
definingProject: Non divulgué - Le projet est invisible parce qu'il n'a pas les autorisations nécessaires.
definingWorkspace: Undisclosed - The workspace is invisible because of lacking permissions.
definingWorkspace: Non divulgué - L'espace de travail est invisible parce qu'il n'a pas les autorisations nécessaires.
doorkeeper:
pre_authorization:
status: Préautorisation
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1149,5 +1149,5 @@ it:
network_on: La rete è tornata. Stiamo provando.
projects:
identifier_suggestion:
loading: Loading suggestion...
set_name_first: Please set the name first.
loading: Caricamento suggerimento...
set_name_first: Inserisci prima il nome.
+2 -2
View File
@@ -1145,5 +1145,5 @@ ko:
network_on: 네트워크가 복원되었습니다. 작업 중입니다.
projects:
identifier_suggestion:
loading: Loading suggestion...
set_name_first: Please set the name first.
loading: 제안 로드 중...
set_name_first: 먼저 이름을 설정하세요.
+2 -2
View File
@@ -1149,5 +1149,5 @@ pt-BR:
network_on: A rede voltou. Estamos tentando.
projects:
identifier_suggestion:
loading: Loading suggestion...
set_name_first: Please set the name first.
loading: Carregando sugestão...
set_name_first: Defina o nome primeiro.
+2 -2
View File
@@ -1157,5 +1157,5 @@ uk:
network_on: З’єднання відновлено. Ми намагаємося.
projects:
identifier_suggestion:
loading: Loading suggestion...
set_name_first: Please set the name first.
loading: Завантаження пропозиції…
set_name_first: Спочатку укажіть ім’я.
+2 -2
View File
@@ -1145,5 +1145,5 @@ zh-CN:
network_on: 网络已恢复。我们正在努力。
projects:
identifier_suggestion:
loading: Loading suggestion...
set_name_first: Please set the name first.
loading: 正在加载建议...
set_name_first: 请先设置名称。
+265 -265
View File
@@ -404,47 +404,47 @@ ko:
dialog:
title: 작업 패키지 식별자 변경
heading: 프로젝트 기반 작업 패키지 ID를 활성화하시겠습니까?
description: 'This will change IDs for all work packages in all projects in this instance. Previous identifiers and URLs will continue to redirect properly. This change will take some time to complete.
description: '이렇게 하면 해당 인스턴스의 모든 프로젝트에 있는 모든 작업 패키지의 ID가 변경됩니다. 이전 식별자 및 URL은 계속해서 제대로 리디렉션됩니다. 이 변경 사항은 완료되는 데 다소 시간이 걸립니다.
'
confirm_button: Change identifiers
checkbox_label: I understand that this will permanently change all work package IDs
success_banner: Successfully updated work package identifier format.
confirm_button: 식별자 변경
checkbox_label: 이렇게 하면 모든 작업 패키지 ID가 영구적으로 변경됨을 이해합니다
success_banner: 작업 패키지 식별자 형식을 업데이트했습니다.
in_progress:
banner_message: Project identifiers are currently being updated to project-based semantic identifiers. This may take some time.
banner_message: 프로젝트 기반 시맨틱 식별자로 프로젝트 식별자를 현재 업데이트하는 중입니다. 시간이 다소 걸릴 수 있습니다.
workflows:
tabs:
default_transitions: 기본 전환
user_author: 사용자가 작성자입니다
user_assignee: 사용자가 담당자입니다
index:
description: Configure status transitions for each work package type.
description: 각 작업 패키지 유형에 대한 상태 전환을 구성합니다.
type_filter:
label: Filter by type name
status_button: Status
label: 유형 이름으로 필터링
status_button: 상태
statuses_dialog:
title: Statuses
label: Statuses enabled for this type
caption: Add or remove statuses you would like to associate with this type. Removing a status will also delete the workflow associated with it.
title: 상태
label: 이 유형에 대해 활성화된 상태
caption: 이 유형과 연결하려는 상태를 추가하거나 제거하세요. 상태를 제거하면 연결된 워크플로도 삭제됩니다.
statuses_removal_dialog:
title: Remove statuses
title: 상태 제거
heading:
other: Remove %{count} statuses?
description: Removing these statuses will make them unavailable to this type and delete existing workflows. Are you sure you want to proceed?
confirm: Remove
other: "%{count}개 상태를 제거하시겠습니까?"
description: 이러한 상태를 제거하면 이 유형에서 사용할 수 없게 되고 기존 워크플로가 삭제됩니다. 계속 진행하시겠습니까?
confirm: 제거
leave_confirmation:
title: Save changes before continuing?
description: You are about to leave this page but you have unsaved changes. Would you like to save them before continuing?
ignore: Ignore changes
save: Save changes and continue
title: 변경 사항을 저장한 후에 계속하시겠습니까?
description: 이 페이지를 나가려고 하는데, 저장되지 않은 변경 사항이 있습니다. 저장한 후에 계속하시겠습니까?
ignore: 변경 사항 무시
save: 변경 사항을 저장하고 계속하기
role_selector:
label: 'Role: %{role}'
no_role: Select role
label: '역할: %{role}'
no_role: 역할 선택
blankslate:
title: No status transitions configured
description: Add statuses to start configuring workflows for this role
title: 구성된 상태 전환 없음
description: 상태를 추가하여 이 역할에 대한 워크플로 구성을 시작합니다
info:
database_deprecation_html: 'Starting with OpenProject 16.0, PostgreSQL 16 is required to use OpenProject. Your installation will remain functional with your current database, but anticipate incompatability in future releases. <br/> We have prepared [upgrade guides for all installation methods](upgrade_guide). You can perform the upgrade ahead of the next release at any time by following the guides.
database_deprecation_html: 'OpenProject 16.0부터, OpenProject를 사용하려면 PostgreSQL 16이 필요합니다. 현재 데이터베이스에서는 해당 설치가 계속 작동되지만, 향후 릴리스에서는 호환되지 않을 수 있습니다. <br/> [모든 설치 방법에 대한 업그레이드 가이드](upgrade_guide)를 준비했습니다. 가이드에 따라 언제든지 다음 릴리스에 앞서 업그레이드를 수행할 수 있습니다.
'
authentication:
@@ -677,13 +677,13 @@ ko:
confirmation_live_message_checked: 진행 버튼이 이제 활성화되었습니다.
confirmation_live_message_unchecked: 진행 버튼이 이제 비활성화되었습니다. 계속하려면 확인란을 선택해야 합니다.
pagination:
label: Pagination
prev: Previous
prev_page: Previous Page
next: Next
next_page: Next Page
page: Page %{number}
page_with_more: Page %{number}...
label: 페이지 매김
prev: 이전
prev_page: 이전 페이지
next: 다음
next_page: 다음 페이지
page: "%{number}페이지"
page_with_more: "%{number}페이지..."
mcp_configurations:
server_url_component:
caption: OpenProject MCP 서버에 연결할 수 있는 URL입니다. MCP 클라이언트를 설정하는 데 필요합니다.
@@ -691,13 +691,13 @@ ko:
op_dry_validation:
or: 또는
errors:
unexpected_key: is not allowed.
unexpected_key: "- 허용되지 않습니다."
array?: "- 배열이어야 합니다."
decimal?: "- 소수여야 합니다."
defined: "- 정의해서는 안 됩니다."
eql?: "- %{left}과(와) 같아야 합니다."
filled?: "- 입력해야 합니다."
format?: is in invalid format.
format?: "- 형식이 잘못되었습니다."
greater_or_equal_zero: "- 0보다 크거나 같아야 합니다."
gteq?: "- %{num}보다 크거나 같아야 합니다."
hash?: "- 해시여야 합니다."
@@ -724,9 +724,9 @@ ko:
parent:
not_descendant: "- 계층 루트의 하위 항목이어야 합니다."
str?: "- 문자열이어야 합니다."
time?: must be a time.
time?: "- 시간이어야 합니다."
type?: "- %{type}이어야(여야) 합니다."
uri?: is not a valid URI.
uri?: "- 올바른 URI가 아닙니다."
rules:
copy_workflow_from: 워크플로 복사의 유형
enabled: 활성화됨
@@ -846,10 +846,10 @@ ko:
'
change_identifier: 식별자 변경
change_identifier_dialog_title: Change project identifier
change_identifier_format_hint_semantic: Only uppercase letters (AZ), numbers or underscores. Max 10 characters. Must start with a letter.
change_identifier_format_hint_legacy: Only lowercase letters (az), numbers, dashes or underscores.
change_identifier_warning: 'This will permanently change identifiers and URLs of all work packages in this project. The previous identifier and URLs will nevertheless continue to redirect properly.
change_identifier_dialog_title: 프로젝트 식별자 변경
change_identifier_format_hint_semantic: 대문자(A-Z), 숫자 또는 밑줄만 사용할 수 있습니다. 최대 10자이고, 문자로 시작해야 합니다.
change_identifier_format_hint_legacy: 소문자(a-z), 숫자, 대시 또는 밑줄만 사용할 수 있습니다.
change_identifier_warning: '이렇게 하면 이 프로젝트에 있는 모든 작업 패키지의 식별자 및 URL이 영구적으로 변경됩니다. 그렇지만 이전 식별자 및 URL은 계속해서 제대로 리디렉션됩니다.
'
subitems:
@@ -1081,9 +1081,9 @@ ko:
groups:
member_in_these_groups: '이 사용자는 현재 다음 그룹의 멤버입니다:'
no_results_title_text: 이 사용자는 현재 어떤 그룹의 멤버도 아닙니다.
summary_with_more_html: Member of %{names} and %{count_link}.
summary_with_more_html: "%{names} %{count_link}의 멤버입니다."
more: "%{count}개 더 보기"
summary_html: Member of %{names}.
summary_html: "%{names}의 멤버입니다."
memberships:
no_results_title_text: 이 사용자는 프로젝트의 멤버가 아닙니다.
open_profile: 프로필 열기
@@ -1141,60 +1141,60 @@ ko:
group: 이제 이 그룹은 %{project}의 일부입니다. 한편 당신은 해당 사용자에 대한 계획을 세우거나 작업 패키지를 할당할 수 있습니다.
working_hours:
current_schedule:
title: Current schedule
work_days: Work days
work_hours: Work hours
availability_factor: Availability factor
availability_subtitle: Dedicated to project work
effective_hours: Effective work hours
effective_subtitle: Per week
not_set: Not set
title: 현재 스케줄
work_days: 근무일
work_hours: 근무 시간
availability_factor: 가용성 요소
availability_subtitle: 프로젝트 작업 전용
effective_hours: 유효한 근무 시간
effective_subtitle: 주별
not_set: 설정되지 않음
future:
title: Future schedules
description: Plan working schedule changes ahead of time. Once the date arrives your working schedules will be updated automatically.
add_button: Add future schedule
blank_title: No future schedules planned
blank_description: Create a future schedule to plan changes ahead of time
title: 향후 스케줄
description: 근무 스케줄 변경 사항을 미리 계획하세요. 해당 날짜가 되면 근무 스케줄이 자동으로 업데이트됩니다.
add_button: 향후 스케줄 추가
blank_title: 계획된 향후 스케줄 없음
blank_description: 향후 스케줄을 만들어 변경 사항을 미리 계획합니다
history:
title: Schedule history
description: View your past work schedules.
blank_title: No schedule history yet
blank_description: Past schedule changes will appear here
title: 스케줄 기록
description: 이전 근무 스케줄을 봅니다.
blank_title: 아직 스케줄 기록 없음
blank_description: 이전 스케줄 변경 사항이 여기에 표시됩니다
destroy:
confirm: Are you sure you want to delete this working schedule?
confirm: 이 근무 스케줄을 삭제하시겠습니까?
form:
title: Plan a future work schedule
title_current: Edit current work schedule
start_date: Start date
start_date_caption: Select the date from when the new work schedule will be effective.
work_days: Work days
working_hours_label: Working hours
hours_mode_label: Hours mode
same_hours_mode: Same hours per day
individual_hours_mode: Individual hours per day
work_hours: Work hours
hours_per_day: Hours per day
per_day: per day
per_week: per week
total_work_hours: Total work hours
availability_description: The availability factor represents the actual percentage of your working time dedicated to project tasks. This accounts for meetings, emails, administrative work, and other non-project activities.
availability_factor: Availability factor
availability_factor_caption: Define the percentage of your working time dedicated to project work.
total_available_hours: Total available work hours
title_availability_factor: Availability factor
title_days_and_hours: Days and hours
title_future_dates: Future dates
title: 향후 근무 스케줄 계획
title_current: 현재 근무 스케줄 편집
start_date: 시작 날짜
start_date_caption: 새로운 근무 스케줄이 적용되는 날짜를 선택하세요.
work_days: 근무일
working_hours_label: 근무 시간
hours_mode_label: 시간 모드
same_hours_mode: 일별 동일한 시간
individual_hours_mode: 일별 개별 시간
work_hours: 근무 시간
hours_per_day: 일별 시간
per_day: 일별
per_week: 주별
total_work_hours: 총 근무 시간
availability_description: 가용성 요소는 프로젝트 작업에 투입된 실제 근무 시간 비율을 나타냅니다. 여기에는 미팅, 이메일, 관리 작업 및 프로젝트 이외의 기타 활동이 포함됩니다.
availability_factor: 가용성 요소
availability_factor_caption: 프로젝트 작업에 투입된 근무 시간 비율을 정의하세요.
total_available_hours: 총 사용 가능한 근무 시간
title_availability_factor: 가용성 요소
title_days_and_hours: 일 및 시간
title_future_dates: 향후 날짜
table:
mobile_title: Working schedules
start_date: Start date
work_days: Work days
work_hours: Work hours
availability_factor: Availability factor
effective_work_hours: Effective work hours
mobile_title: 근무 스케줄
start_date: 시작 날짜
work_days: 근무일
work_hours: 근무 시간
availability_factor: 가용성 요소
effective_work_hours: 유효한 근무 시간
work_days_count:
other: "%{count} working days"
other: 근무일 %{count}
user_preferences:
disable_keyboard_shortcuts_caption: 'You can choose to disable default [keyboard shortcuts](docs_url) if you use a screen reader or want to avoid accidentally triggering an action with a shortcut.
disable_keyboard_shortcuts_caption: '화면 리더를 사용하는 경우 또는 바로 가기로 실수로 액션을 트리거하지 않게 방지하려는 경우 기본 [키보드 바로 가기](docs_url)를 비활성화하도록 선택할 수 있습니다.
'
page:
@@ -1205,12 +1205,12 @@ ko:
'
delete_tooltip: 플레이스홀더 사용자 삭제
deletion_info:
heading_html: Delete placeholder user %{name}
heading_html: 플레이스홀더 사용자 %{name} 삭제
data_consequences: '플레이스홀더 사용자의 모든 항목(예: 담당자, 책임자, 기타 사용자 값 등)은 "삭제된 사용자"라는 계정에 다시 할당됩니다. 삭제된 모든 계정의 데이터는 이 계정에 다시 할당되기 때문에 사용자가 생성한 데이터와 다른 삭제된 계정의 데이터를 구별할 수 없습니다.
'
irreversible: 이 작업은 취소할 수 없습니다
confirmation_html: Enter the placeholder user name %{name} to confirm the deletion.
confirmation_html: 삭제를 확인하려면 플레이스홀더 사용자 이름 %{name}(을)를 입력하세요.
priorities:
edit:
priority_color_text: |
@@ -1241,9 +1241,9 @@ ko:
계층의 총 작업, 남은 작업 및 완료 %에서 이 상태의 작업 패키지를
제외하려면 이 옵션을 선택하세요.
status_percent_complete_text_html: |-
In [status-based progress calculation mode](setting_url), the % Complete of a work
package is automatically set to this value when this status is selected.
Ignored in work-based mode.
[상태 기반 진행률 계산 모드](setting_url)에서, 이 상태를 선택하면 작업
패키지의 완료 %가 자동으로 이 값으로 설정됩니다.
작업 기반 모드에서는 무시됩니다.
status_readonly_html: |
이 상태를 읽기 전용으로 작업 패키지에 표시하려면 이 옵션을 선택합니다.
상태를 제외하고 특성은 변경할 수 없습니다.
@@ -1511,7 +1511,7 @@ ko:
'
login_with_auth_provider: 또는 이미 있는 계정으로 로그인
signup_with_auth_provider: 또는 사용 가입하기
auth_source_login_html: Please login as <em>%{login}</em> to activate your account.
auth_source_login_html: "<em>%{login}</em>(으)로 로그인하여 계정을 활성화하세요."
omniauth_login: 계정을 활성화하려면 로그인하시기 바랍니다.
actionview_instancetag_blank_option: 선택하십시오
activemodel:
@@ -1521,8 +1521,8 @@ ko:
activerecord:
attributes:
work_package_semantic_alias:
identifier: Identifier
work_package: Work package
identifier: 식별자
work_package: 작업 패키지
jira_import:
projects: 프로젝트
import/jira:
@@ -1785,11 +1785,11 @@ ko:
consented_at: '동의함:'
group:
identity_url: ID URL
parent: Parent group
organizational_unit: Organizational unit
parent: 부모 그룹
organizational_unit: 조직 단위
group_detail:
parent: Parent group
organizational_unit: Organizational unit
parent: 부모 그룹
organizational_unit: 조직 단위
user_preference:
header_look_and_feel: 모양 및 느낌
header_alerts: 알림
@@ -1819,27 +1819,27 @@ ko:
principal_type: 초대 유형
id_or_email: 이름 또는 이메일 주소
user_non_working_time:
start_date: Start date
end_date: End date
start_date: 시작 날짜
end_date: 종료 날짜
user_working_hours:
valid_from: Valid from
monday: Monday
monday_hours: Monday hours
tuesday: Tuesday
tuesday_hours: Tuesday hours
wednesday: Wednesday
wednesday_hours: Wednesday hours
thursday: Thursday
thursday_hours: Thursday hours
friday: Friday
friday_hours: Friday hours
saturday: Saturday
saturday_hours: Saturday hours
sunday: Sunday
sunday_hours: Sunday hours
availability_factor: Availability factor
shared_hours: Work hours
days: Working days
valid_from: 다음부터 유효함
monday: 월요일
monday_hours: 월요일 시간
tuesday: 화요일
tuesday_hours: 화요일 시간
wednesday: 수요일
wednesday_hours: 수요일 시간
thursday: 목요일
thursday_hours: 목요일 시간
friday: 금요일
friday_hours: 금요일 시간
saturday: 토요일
saturday_hours: 토요일 시간
sunday: 일요일
sunday_hours: 일요일 시간
availability_factor: 가용성 요소
shared_hours: 근무 시간
days: 근무일
version:
effective_date: 완료 날짜
sharing: 공유
@@ -1894,8 +1894,8 @@ ko:
before: 은(는) %{date} 보다 전이어야 합니다.
before_or_equal_to: 은(는) %{date} 이전이어야 합니다.
blank: 내용을 입력해주세요
not_before_start_date: must not be before the start date.
overlapping_range: overlaps with an existing non-working day range.
not_before_start_date: "- 시작 날짜 전이 아니어야 합니다."
overlapping_range: "- 기존 휴무일 범위와 겹칩니다."
blank_nested: "- '%{property}' 속성이 설정되어 있어야 합니다."
cannot_delete_mapping: "- 필수입니다. 삭제할 수 없습니다."
is_for_all_cannot_modify: "- 모든 프로젝트용므로 수정할 수 없습니다."
@@ -1932,9 +1932,9 @@ ko:
less_than_or_equal_to: 은(는) %{count} 보다 작거나 같아야 합니다
not_available: "- 시스템 구성으로 인해 사용 가능하지 않습니다."
not_deletable: "- 삭제할 수 없습니다."
not_editable: cannot be edited because it is already in effect.
not_editable: "- 이미 적용 중이므로 편집할 수 없습니다."
not_current_user: 은(는) 현재 유효한 사용자가 아닙니다.
system_wide_non_working_day_exists: conflicts with an existing system-wide non-working day for this date.
system_wide_non_working_day_exists: "- 이 날짜의 기존 시스템 전체 휴무일과 충돌합니다."
not_found: "- 찾을 수 없습니다."
not_a_date: 은(는) 유효한 날짜가 아닙니다.
not_a_datetime: 은(는) 유효한 날짜가 아닙니다.
@@ -1969,7 +1969,7 @@ ko:
group:
attributes:
parent_id:
circular_dependency: would create a circular group hierarchy.
circular_dependency: "- 순환 그룹 계층을 생성합니다."
ldap_auth_source:
attributes:
tls_certificate_string:
@@ -2080,8 +2080,8 @@ ko:
types:
in_use_by_work_packages: '아직 작업 패키지에 사용됨: %{types}'
identifier:
must_start_with_letter: must start with a letter
no_special_characters: may only contain uppercase letters, numbers, and underscores
must_start_with_letter: "- 문자로 시작해야 합니다"
no_special_characters: "- 대문자, 숫자 및 밑줄만 포함될 수 있습니다"
enabled_modules:
dependency_missing: "'%{module}' 모듈이 '%{dependency}' 모듈에 의존하므로 해당 모듈도 활성화되어 있어야 합니다."
format: "%{message}"
@@ -2288,7 +2288,7 @@ ko:
user_working_hours:
attributes:
days:
no_working_day: At least one day needs to be configured as a working day.
no_working_day: 하루 이상을 근무일로 구성해야 합니다.
member:
principal_blank: 하나 이상의 사용자 또는 그룹을 선택 하십시오.
role_blank: 할당해야 합니다.
@@ -2537,7 +2537,7 @@ ko:
info: '백업을 생성하려면 백업 토큰을 생성해야 합니다. 백업을 요청할 때마다 토큰을 입력해야 합니다. 백업 토큰을 삭제하면 해당 사용자의 백업을 비활성화할 수 있습니다.
'
verification_html: 'Enter %{word} to confirm you want to %{action} the backup token.
verification_html: '백업 토큰을 %{action}하려면 %{word}(을)를 입력하여 확인하세요.
'
verification_word_reset: 초기화
@@ -2977,7 +2977,7 @@ ko:
teaser:
title:
other: "%{trial_plan} 평가판 토큰 %{count}일 남음"
description_html: You have access to all %{trial_plan} features.
description_html: 모든 %{trial_plan} 기능에 액세스할 수 있습니다.
trial:
not_found: 평가판 토큰을 요청했지만 해당 요청은 더 이상 사용할 수 없습니다. 다시 시도해 주세요.
wait_for_confirmation: 평가판 토큰을 받을 수 있도록 주소를 확인하기 위한 이메일을 보내드렸습니다.
@@ -2997,8 +2997,8 @@ ko:
'
domain_caption: 토큰은 현재 구성된 호스트 이름에 유효하게 됩니다.
receive_newsletter: I want to receive the OpenProject [newsletter](newsletter_url).
consent: I agree with the [terms of service](tos_url) and the [privacy policy](privacy_url).
receive_newsletter: OpenProject [뉴스레터](newsletter_url)를 받고 싶습니다.
consent: 본인은 [서비스 약관](tos_url) 및 [개인정보 취급방침](privacy_url)에 동의합니다.
email_calendar_updates:
state:
disabled: 비활성화되었습니다.
@@ -3087,8 +3087,8 @@ ko:
work_package_edit: 작업 패키지 편집됨
work_package_note: 작업 패키지 메모 추가됨
title:
project_html: 'Project: %{name}'
subproject_html: 'Subproject: %{name}'
project_html: '프로젝트: %{name}'
subproject_html: '하위 프로젝트: %{name}'
export:
dialog:
title: 내보내기
@@ -3260,17 +3260,17 @@ ko:
learn_about: 새로운 모든 기능에 대해 자세히 알아보기
missing: 아직 강조 표시된 기능이 없습니다.
'17_3':
new_features_title: 'The release contains various new features and improvements, such as:
new_features_title: '이 릴리스에는 다음과 같은 다양한 새로운 기능과 개선 사항이 포함되어 있습니다.
'
new_features_list:
line_0: 'Big Agile update: dedicated sprint objects, all work packages visible on Backlogs, and automatic sprint board creation.'
line_1: In-place editing of project attributes on the Project Overview page.
line_2: Sharing of meeting templates (Basic plan and higher).
line_3: Better search in Time and Costs, Boards, and more.
line_4: Option to safely change project identifiers.
line_5: Improved workflow configuration for administrators.
line_6: Action boards released to Community.
line_0: '대규모 애자일 업데이트: 전용 스프린트 개체, 백로그에 표시되는 모든 작업 패키지, 자동 스프린트 보드 생성.'
line_1: 프로젝트 개요 페이지에서 프로젝트 특성을 바로 편집 가능.
line_2: 미팅 템플릿 공유(Basic 플랜 이상).
line_3: 시간 및 비용, 보드 등에서 개선된 검색 기능.
line_4: 프로젝트 식별자를 안전하게 변경하는 옵션.
line_5: 개선된 관리자용 워크플로 구성.
line_6: 커뮤니티에 릴리스된 액션 보드.
links:
upgrade_enterprise_edition: Enterprise Edition으로 업그레이드
postgres_migration: 설치를 PostgreSQL로 마이그레이션
@@ -3335,15 +3335,15 @@ ko:
progress_calculation_adjusted: 진행률 계산은 자동으로 <a href="%{href}" target="_blank">버전 업데이트에 따라 조정됩니다</a>.
scheduling_mode_adjusted: 버전 업데이트에 따라 자동으로 조정되는 스케줄링 모드입니다.
totals_removed_from_childless_work_packages: <a href="%{href}" target="_blank">버전 업데이트</a>를 통해 부모가 아닌 작업 패키지의 작업 및 진행률 합계가 자동으로 제거됩니다. 유지 관리 작업이므로 무시해도 됩니다.
sprint_migration: Version '%{version_name}' has been copied as a sprint.
sprint_migration: 버전 '%{version_name}'이(가) 스프린트로 복사되었습니다.
total_percent_complete_mode_changed_to_work_weighted_average: 작업이 없는 자식 작업 패키지는 무시됩니다.
total_percent_complete_mode_changed_to_simple_average: 자식 작업 패키지의 작업 값은 무시됩니다.
links:
configuration_guide: 구성 가이드
get_in_touch: 질문이 있으신가요? 문의해 주세요.
instructions_after_registration_link: You can sign in as soon as your account has been activated by clicking [here](signin_url).
instructions_after_logout_link: You can sign in again by clicking [here](signin_url).
instructions_after_error_link: You can try to sign in again by clicking [here](signin_url). If the error persists, ask your admin for help.
instructions_after_registration_link: "[여기](signin_url)를 클릭하여 계정을 활성화하면 바로 로그인할 수 있습니다."
instructions_after_logout_link: "[여기](signin_url)를 클릭하면 다시 로그인할 수 있습니다."
instructions_after_error_link: "[여기](signin_url)를 클릭하여 다시 로그인해 볼 수 있습니다. 오류가 계속되면 관리자에게 도움을 요청하세요."
menus:
admin:
ai: 인공 지능(AI)
@@ -3356,10 +3356,10 @@ ko:
label: 추가…
my_account:
notifications_and_email:
title: Notification and email
title: 알림 및 이메일
tabs:
notifications: Notification settings
email_reminders: Email reminders
notifications: 알림 설정
email_reminders: 이메일 미리 알림
access_tokens:
description: 공급자 토큰은 OpenProject에서 발급하며, 다른 애플리케이션이 액세스하도록 허용합니다. 클라이언트 토큰은 다른 애플리케이션에서 발급하며, OpenProject가 액세스하도록 허용합니다.
no_results:
@@ -3424,70 +3424,70 @@ ko:
unknown_storage: 알 수 없는 저장소
email_reminders:
immediate_reminders:
title: Send me an email reminder
mentioned: Notify me when I am mentioned
personal_reminder: Notify me for personal reminders
title: 이메일 미리 알림 보내기
mentioned: 내가 멘션되면 알림 보내기
personal_reminder: 개인 미리 알림 보내기
daily_reminders:
title: Send me daily email reminders for unread notifications
caption: You will receive these reminders only for unread notifications and only at hours you specify. Until you configure a time zone for your account, the times will be interpreted to be in UTC.
enabled: Enable daily email reminders
add_time: Add time
remove_time: Remove time
time_slot_label: Reminder time (UTC)
title: 읽지 않은 알림에 대한 일일 이메일 미리 알림 보내기
caption: 읽지 않은 알림에 대해서만 그리고 사용자가 지정한 시간에만 이러한 미리 알림이 전송됩니다. 계정의 표준 시간대를 구성할 때까지, 시간은 UTC로 적용됩니다.
enabled: 일일 이메일 미리 알림 활성화
add_time: 시간 추가
remove_time: 시간 제거
time_slot_label: 미리 알림 시간(UTC)
workdays:
title: Receive email reminders on these days
submit_button: Update reminder days
title: 해당 요일에 이메일 미리 알림 받기
submit_button: 미리 알림 요일 업데이트
pause_reminders:
title: Pause email notifications
enabled: Temporarily pause daily email reminders
date_range: Pause period
title: 이메일 알림 일시 중지
enabled: 임시로 일일 이메일 미리 알림 일시 중지
date_range: 일시 중지 기간
email_alerts:
title: Email alerts for other items that are not work packages
news_added: News added
news_commented: Comment on a news item
document_added: Document added
forum_messages: Forum message posted
wiki_page_added: Wiki page added
wiki_page_updated: Wiki page updated
membership_added: Membership added
membership_updated: Membership updated
submit_button: Update alerts
title: 작업 패키지가 아닌 기타 항목에 대한 이메일 알림
news_added: 뉴스 추가됨
news_commented: 뉴스 항목의 코멘트
document_added: 문서 추가됨
forum_messages: 포럼 메시지 게시됨
wiki_page_added: 위키 페이지 추가됨
wiki_page_updated: 위키 페이지 업데이트됨
membership_added: 멤버십 추가됨
membership_updated: 멤버십 업데이트됨
submit_button: 알림 업데이트
notifications:
participating:
title: Participating
submit_button: Update preferences
mentioned: Mentioned
watched: Watching
assignee: Assignee
responsible: Accountable
shared: Shared with me
title: 참여
submit_button: 기본 설정 업데이트
mentioned: 멘션됨
watched: 지켜보는 중
assignee: 담당자
responsible: 담당
shared: 나와 공유됨
date_alerts:
title: Date alerts
submit_button: Update date alerts
start_date: Start date
due_date: Finish date
overdue: Overdue
title: 날짜 알림
submit_button: 날짜 알림 업데이트
start_date: 시작 날짜
due_date: 완료 날짜
overdue: 기한 지남
times:
same_day: On the same day
one_day_before: 1 day before
three_days_before: 3 days before
seven_days_before: 7 days before
one_day_after: 1 day after
three_days_after: 3 days after
seven_days_after: 7 days after
same_day: 같은 날
one_day_before: 1일 전
three_days_before: 3일 전
seven_days_before: 7일 전
one_day_after: 1일 후
three_days_after: 3일 후
seven_days_after: 7일 후
non_participating:
title: Non-participating
submit_button: Update preferences
work_package_created: New work packages
work_package_commented: All new comments
work_package_processed: All status changes
work_package_prioritized: All priority changes
work_package_scheduled: All date changes
title: 참여하지 않음
submit_button: 기본 설정 업데이트
work_package_created: 새 작업 패키지
work_package_commented: 모든 새로운 코멘트
work_package_processed: 모든 상태 변경 사항
work_package_prioritized: 모든 우선 순위 변경 사항
work_package_scheduled: 모든 날짜 변경 사항
project_specific_settings:
title: Project-specific notification settings
add_button: Add project-specific notifications
dialog_title: Add project-specific notifications
list_header: Projects with specific notifications
title: 프로젝트별 알림 설정
add_button: 프로젝트별 알림 추가
dialog_title: 프로젝트별 알림 추가
list_header: 특정 알림이 있는 프로젝트
notifications:
reasons:
assigned: 담당자
@@ -3560,7 +3560,7 @@ ko:
label_ical_access_key_generation_hint: 캘린더 구독 시 자동으로 생성됩니다.
label_ical_access_key_latest: 최신
label_ical_access_key_revoke: 취소
label_integrations: Integrations
label_integrations: 통합
label_add_column: 열 추가
label_applied_status: 적용된 상태
label_archive_project: 프로젝트 아카이브하기
@@ -3608,8 +3608,8 @@ ko:
label_calendar_show: 달력 표시
label_category: 카테고리
label_completed: 완료
label_committed_at_html: "%{committed_revision_link} at %{date}"
label_committed_link: committed revision %{revision_identifier}
label_committed_at_html: "%{committed_revision_link}, %{date}"
label_committed_link: "%{revision_identifier} 리비전이 커밋됨"
label_consent_settings: 사용자 동의
label_wiki_menu_item: 위키 메뉴 항목
label_select_main_menu_item: 새 기본 메뉴 항목 선택
@@ -3776,7 +3776,7 @@ ko:
label_subject_or_id: 제목 또는 ID
label_calendar_subscriptions: 캘린더 구독
label_identifier: 식별자
label_project_identifier: Project identifier
label_project_identifier: 프로젝트 식별자
label_in: "-"
label_in_less_than: 보다 작음
label_in_more_than: 보다 큼
@@ -3910,13 +3910,13 @@ ko:
label_news_view_all: 모든 뉴스 보기
label_next: 다음
label_next_week: 다음 주
label_next_year: Next year
label_next_year: 다음 연도
label_no_change_option: "(변경 없음)"
label_no_data: 표시할 데이터가 없습니다.
label_no_due_date: 완료 날짜 없음
label_no_start_date: 시작 날짜 없음
label_no_parent_page: 부모 페이지 없음
label_no_parent_group: "(No parent group)"
label_no_parent_group: "(부모 그룹 없음)"
label_notification_center_plural: 알림
label_nothing_display: 표시할 것이 없음
label_nobody: 아무도 없음
@@ -3945,7 +3945,7 @@ ko:
label_overall_activity: 전체 작업
label_overview: 요약
label_page_title: 페이지 제목
label_parent_group_caption: 'Setting a parent group will make this group a subgroup of the selected parent group. This will also inherit all memberships, including permissions of the parent group.
label_parent_group_caption: '부모 그룹을 설정하면 선택한 부모 그룹의 하위 그룹으로 이 그룹이 지정됩니다. 또한 부모 그룹의 권한을 포함한 모든 멤버십이 상속됩니다.
'
label_part_of: 부분의
@@ -3974,7 +3974,7 @@ ko:
label_preview_not_available: 미리 보기를 사용할 수 없음
label_previous: 이전
label_previous_week: 이전 주
label_previous_year: Previous year
label_previous_year: 이전 연도
label_principal_invite_via_email: " 또는 이메일을 통해 새 사용자 초대하기"
label_principal_search: 기존 사용자 또는 그룹 추가
label_privacy_policy: 데이터 프라이버시 및 보안 정책
@@ -4086,7 +4086,7 @@ ko:
label_start_to_start: 시작 - 시작
label_statistics: 통계
label_status: 상태
label_status_plural: Statuses
label_status_plural: 상태
label_storage_free_space: 남은 디스크 공간
label_storage_used_space: 사용 중 디스크 공간
label_storage_group: 저장 파일 시스템 %{identifier}
@@ -4136,7 +4136,7 @@ ko:
label_user: 사용자
label_user_and_permission: 사용자 및 권한
label_user_named: 사용자 %{name}
label_user_activity_html: "%{value}'s activity"
label_user_activity_html: "%{value}의 활동"
label_user_anonymous: 익명
label_user_menu: 사용자 메뉴
label_user_new: 새 사용자
@@ -4224,11 +4224,11 @@ ko:
other: 파일 %{count}개
zero: 파일 없음
label_x_days:
other: "%{count} days"
other: "%{count}"
label_x_working_days:
other: "%{count} working days"
other: 근무일 %{count}
label_x_working_days_time_off:
other: 'Time off: %{count} working days'
other: '휴가: 근무일 %{count}'
label_yesterday: 어제
label_zen_mode: 젠 모드
label_role_type: 유형
@@ -4237,22 +4237,22 @@ ko:
label_not_changeable: "(변경할 수 없음)"
label_global: 글로벌
label_seeded_from_env_warning: 이 레코드는 설정 환경 변수를 통해 생성되었습니다. UI에서 편집할 수 없습니다.
label_schedule_and_availability: Schedule and availability
label_working_hours: Work schedule
label_non_working_days: Availability calendar
label_non_working_days_with_count: Non-working days (%{count})
label_non_working_days_summary: Summary
button_add_non_working_time: Time off
button_edit_non_working_time: Edit time off
label_continued_from_previous_year: continued from previous year
label_continues_into_next_year: continues into next year
label_end_date: Finish date
label_working_days: Working days
label_non_working_times_with_count: "%{year} time off (%{count})"
label_non_working_times_summary: "%{year} summary"
label_total_user_non_working_times: Personal non-working days
label_total_global_non_working_days: Global non-working days
label_total_days_off: Total days off
label_schedule_and_availability: 스케줄 및 가능 여부
label_working_hours: 근무 스케줄
label_non_working_days: 가능 여부 캘린더
label_non_working_days_with_count: 휴무일(%{count})
label_non_working_days_summary: 요약
button_add_non_working_time: 휴가
button_edit_non_working_time: 휴가 편집
label_continued_from_previous_year: 이전 연도에서 계속
label_continues_into_next_year: 다음 연도에 계속
label_end_date: 완료 날짜
label_working_days: 근무일
label_non_working_times_with_count: "%{year}년 휴가(%{count})"
label_non_working_times_summary: "%{year}년 요약"
label_total_user_non_working_times: 개인 휴무일
label_total_global_non_working_days: 글로벌 휴무일
label_total_days_off: 총 휴가
macro_execution_error: 매크로 %{macro_name} 실행 중에 오류 발생
macro_unavailable: 매크로 %{macro_name}은(는) 표시할 수 없습니다.
macros:
@@ -4287,7 +4287,7 @@ ko:
center: 알림 센터로
see_in_center: 알림 센터의 코멘트 보기
settings: 이메일 설정 변경
salutation: Hello %{user},
salutation: 안녕하세요, %{user},
salutation_full_name: 전체 이름
work_packages:
created_at: "%{timestamp}, %{user} 님이 생성함 "
@@ -4316,7 +4316,7 @@ ko:
note: '참고: "%{note}"'
sharing:
work_packages:
allowed_actions_html: You may %{allowed_actions} this work package. This can change depending on your project role and permissions.
allowed_actions_html: 이 작업 패키지를 %{allowed_actions}할 수 있습니다. 이는 프로젝트 역할 및 권한에 따라 변경될 수 있습니다.
create_account: 이 작업 패키지에 액세스하려면 %{instance}에서 계정을 생성하고 활성화해야 합니다.
open_work_package: 작업 패키지 열기
subject: '작업 패키지 #%{id}이(가) 귀하와 공유되었습니다'
@@ -4416,8 +4416,8 @@ ko:
mail_user_activation_limit_reached:
subject: 사용자 활성화 제한에 도달함
message_html: |
A new user (%{email}) tried to create an account on an OpenProject environment that you manage (%{host}).
The user cannot activate their account since the user limit has been reached.
회원님이 관리하는 OpenProject 환경(%{host})에서 새로운 사용자(%{email})가 계정을 만들려고 시도했습니다.
사용자 제한에 도달한 후에는 해당 사용자가 계정을 활성화할 수 없습니다.
steps:
label: '사용자가 로그인하게 허용하려면 다음 중 하나를 수행할 수 있습니다. '
a: 결제 플랜([here](upgrade_url)) 업그레이드
@@ -4483,7 +4483,7 @@ ko:
notice_parent_item_not_found: 부모 항목을 찾을 수 없습니다.
notice_project_not_deleted: 프로젝트가 삭제되지 않았습니다.
notice_project_not_found: 프로젝트를 찾을 수 없습니다.
notice_smtp_address_unsafe_env_hint: SMTP address %{address} is not safe. Please add it to the whitelist using the %{env_name} environment variable.
notice_smtp_address_unsafe_env_hint: SMTP 주소 %{address}은(는) 안전하지 않습니다. %{env_name} 환경 변수를 사용하여 허용 목록에 추가하세요.
notice_successful_connection: 연결에 성공했습니다.
notice_successful_create: 생성에 성공했습니다.
notice_successful_delete: 삭제에 성공했습니다.
@@ -4610,12 +4610,12 @@ ko:
permission_manage_versions: 버전 관리
permission_manage_wiki: 위키 관리
permission_manage_wiki_menu: 위키 메뉴 관리
permission_manage_own_working_times: Manage own working times
permission_manage_own_working_times_explanation: 'Allows users to manage their own working times, and personal non-working days.
permission_manage_own_working_times: 내 근무 시간 관리
permission_manage_own_working_times_explanation: '사용자가 자신의 근무 시간과 개인 휴무일을 관리할 수 있습니다.
'
permission_manage_working_times: Manage working times for all users
permission_manage_working_times_explanation: 'Allows users to manage working times for all users, including personal non-working days.
permission_manage_working_times: 모든 사용자의 근무 시간 관리
permission_manage_working_times_explanation: '사용자가 개인 휴무일을 포함하여 모든 사용자의 근무 시간을 관리할 수 있습니다.
'
permission_move_work_packages: 작업 패키지 이동
@@ -4760,10 +4760,10 @@ ko:
info: 리포지토리 삭제는 취소할 수 없는 작업입니다.
info_not_managed: '참고: 이렇게 해도 이 리포지토리의 콘텐츠는 삭제되지 않습니다. OpenProject에 의해 관리되지 않기 때문입니다.'
managed_path_note: 다음 디렉터리가 지워집니다. %{path}
repository_verification_html: Enter the project's identifier %{identifier} to verify the deletion of its repository.
repository_verification_html: 해당 리포지토리의 삭제를 확인하려면 프로젝트의 식별자 %{identifier}을(를) 입력하세요.
subtitle: 프로젝트 %{project_name}의 %{repository_type}을(를) 삭제하시겠습니까?
subtitle_not_managed_html: Do you really want to remove the linked %{repository_type} %{url} from the project %{project_name}?
title_html: Delete the %{repository_type}
subtitle_not_managed_html: 프로젝트 %{project_name}에서 링크된 %{repository_type} %{url}을(를) 제거하시겠습니까?
title_html: "%{repository_type} 삭제"
title_not_managed: 연결된 %{repository_type}을(를) 제거하시겠습니까?
errors:
build_failed: 선택한 구성으로 리포지토리를 만들 수 없습니다. %{reason}
@@ -4814,7 +4814,7 @@ ko:
update_timeout: |-
N분 동안 리포지토리의 마지막 필요한 디스크 공간 정보를 유지하세요.
리포지토리의 필요한 디스크 저장소 공간 계산에는 비용이 많이 소요될 수 있으므로, 이 값을 늘려 성능 영향을 줄이세요.
oauth_application_details_html: 'The client secret value will not be accessible again after you close this window. Please copy these values into the Nextcloud OpenProject Integration settings:'
oauth_application_details_html: '이 창을 닫으면 클라이언트 비밀번호 값에 다시 액세스할 수 없습니다. 다음 값을 Nextcloud OpenProject 통합 설정에 복사하세요:'
oauth_application_details_link_text: 설정 페이지로 이동
setup_documentation_details: '새 파일 저장소를 구성하는 데 도움이 필요하면 설명서를 확인하세요. '
setup_documentation_details_link_text: 파일 저장소 설정
@@ -4864,7 +4864,7 @@ ko:
setting_apiv3_cors_title: CORS(크로스 원본 리소스 공유)
setting_apiv3_cors_enabled: CORS 사용
setting_apiv3_cors_origins: API V3 CORS(크로스-원본 리소스 공유) 허용 원본
setting_apiv3_cors_origins_instructions_html: 'If CORS is enabled, these are the origins that are allowed to access OpenProject API. <br/> Please check the [Documentation on the Origin header](docs_url) on how to specify the expected values.
setting_apiv3_cors_origins_instructions_html: 'CORS가 활성화된 경우, OpenProject API에 액세스하도록 허용된 원본이 있습니다. <br/> [원본 헤더의 문서](docs_url)에서 예상 값 지정 방법을 확인하세요.
'
setting_apiv3_write_readonly_attributes: 읽기 전용 특성에 대한 쓰기 액세스
@@ -4874,7 +4874,7 @@ ko:
setting_apiv3_write_readonly_attributes_warning: '이 설정에는 데이터 가져오기 등의 사용 사례가 있지만 관리자가 다른 사용자로 항목을 만든 것처럼 가장할 수 있습니다. 그러나 모든 생성 요청은 실제 작성자로 기록됩니다.
'
setting_apiv3_write_readonly_attributes_additional_html: 'For more information on attributes and supported resources, please see the [API documentation](api_documentation_link).
setting_apiv3_write_readonly_attributes_additional_html: '특성 및 지원되는 리소스에 대한 자세한 내용은 [API 문서](api_documentation_link)를 참조하세요.
'
setting_apiv3_max_page_size: 최대 API 페이지 크기
@@ -4974,7 +4974,7 @@ ko:
setting_work_package_properties: 작업 패키지 속성
setting_work_package_startdate_is_adddate: 새 작업 패키지에 대한 시작 날짜로 현재 날짜 사용
setting_work_packages_projects_export_limit: 작업 패키지/프로젝트 내보내기 제한
setting_journal_aggregation_time_minutes: Aggregation period
setting_journal_aggregation_time_minutes: 집계 기간
setting_log_requesting_user: 모든 요청에 대한 로그 사용자 로그인, 이름 및 메일 주소
setting_login_required: 인증이 필요함
setting_login_required_caption: 이 옵션을 선택하면 애플리케이션에 대한 모든 요청이 인증되어야 합니다.
@@ -5057,12 +5057,12 @@ ko:
setting_welcome_text: 환영 블록 텍스트
setting_welcome_title: 환영 블록 제목
setting_welcome_on_homescreen: 홈 화면에 환영 블록 표시
setting_work_packages_identifier_classic: Instance-wide numerical sequence (default)
setting_work_packages_identifier_classic_caption: 'Every work package gets a sequential number starting with 1 and incremented with every new one. The numbers are unique within this instance so they remain the same even if work packages are moved between projects.
setting_work_packages_identifier_classic: 인스턴스 전체의 숫자 시퀀스(기본값)
setting_work_packages_identifier_classic_caption: '모든 작업 패키지는 1로 시작하는 순차 번호가 있으며, 새로운 패키지마다 순차 번호가 증가합니다. 이 번호는 해당 인스턴스 내에서 고유하므로 작업 패키지가 프로젝트 간에 이동되더라도 동일하게 유지됩니다.
'
setting_work_packages_identifier_semantic: Project-based semantic identifiers
setting_work_packages_identifier_semantic_caption: 'Every project has a unique identifier that is prefixed to the work package ID. If a work package moved to another project, a new identifier is generated but the old one continues to function.
setting_work_packages_identifier_semantic: 프로젝트 기반 시맨틱 식별자
setting_work_packages_identifier_semantic_caption: '모든 프로젝트에는 작업 패키지 ID 앞에 붙는 고유 식별자가 있습니다. 작업 패키지가 다른 프로젝트로 이동된 경우 새 식별자가 생성되지만 이전 식별자도 계속 작동됩니다.
'
setting_work_package_list_default_highlighting_mode: 기본 강조 표시 모드
@@ -5246,11 +5246,11 @@ ko:
section_work_week: 근무 주
section_holidays_and_closures: 공휴일 및 휴업일
work_packages:
work_package_identifier: Work package identifier
work_package_identifier: 작업 패키지 식별자
not_allowed_text: 이 페이지를 보는 데 필요한 권한이 없습니다.
activities:
enable_internal_comments: 내부 코멘트 활성화
helper_text_html: 'Internal comments allow an internal team to communicate amongst themselves privately. These are only visible to selected roles that have the necessary permissions and will not be visible publicly. [Click here to learn more](docs_url)
helper_text_html: '내부 코멘트를 사용하여 내부 팀이 비공개로 서로 커뮤니케이션할 수 있습니다. 이러한 코멘트는 필요한 권한을 가진 선택된 역할에만 표시되며 공개적으로 표시되지 않습니다. [자세히 알아보려면 여기를 클릭하세요](docs_url)
'
text_formatting:
@@ -5338,7 +5338,7 @@ ko:
text_default_administrator_account_changed: 기본 관리자 계정 변경됨
text_default_encoding: '기본: UTF-8'
text_destroy: 삭제
text_destroy_with_associated: 'There are additional objects associated with the work package(s) that are to be deleted. Those objects are of the following types:'
text_destroy_with_associated: '삭제할 작업 패키지와 연결된 추가 개체가 있습니다. 이러한 개체의 유형은 다음과 같습니다:'
text_destroy_what_to_do: 어떤 작업을 수행하시겠습니까?
text_diff_truncated: "... 이 차이점은 표시할 수 있는 최대 크기를 초과하므로 잘렸습니다."
text_email_delivery_not_configured: |-
@@ -5397,10 +5397,10 @@ ko:
text_plugin_assets_writable: 플러그인 자산 디렉터리 쓰기 가능
text_powered_by: "%{link} 제공"
text_project_identifier_info: 소문자(a-z), 숫자, 대시(-) 및 밑줄(_)만 허용됩니다. 소문자로 시작해야 합니다.
text_project_identifier_description: The project identifier is prepended to all work package IDs. If the identifier is "PROJ" for example, the work package identifier will be "PROJ-12" or "PROJ-246".
text_project_identifier_url_description: The project identifier is included in the URL of the project.
text_project_identifier_handle_format: Must start with a letter and contain only uppercase letters, numbers, and underscores (max 10 characters).
text_project_identifier_format: Must start with a lowercase letter. Only lowercase letters (a-z), numbers, dashes and underscores are allowed.
text_project_identifier_description: 프로젝트 식별자는 모든 작업 패키지 ID 앞에 붙습니다. 예를 들어, 식별자가 "PROJ"인 경우, 작업 패키지 식별자는 "PROJ-12" 또는 "PROJ-246"이 됩니다.
text_project_identifier_url_description: 프로젝트 식별자는 프로젝트의 URL에 포함되어 있습니다.
text_project_identifier_handle_format: 문자로 시작하고 대문자, 숫자 및 밑줄만 포함해야 합니다(최대 10자).
text_project_identifier_format: 소문자로 시작해야 합니다. 소문자(a-z), 숫자, 대시 및 밑줄만 허용됩니다.
text_reassign: '작업 패키지에 다시 할당:'
text_regexp_multiline: 멀티라인 모드에서 정규식이 적용됩니다. 예, e.g., ^---\s+
text_repository_usernames_mapping: |-
@@ -5512,10 +5512,10 @@ ko:
version_status_locked: 잠김
version_status_open: 열기
note: 메모
note_password_login_disabled_link: Password login has been disabled through a [configuration setting](configuration_url).
note_password_login_disabled_link: 암호 로그인이 [구성 설정](configuration_url)에서 비활성화되었습니다.
warning: 경고
warning_attachments_not_saved: "%{count}개 파일을 저장할 수 없습니다."
warning_imminent_user_limit_html: 'You invited more users than are supported by your current plan. Invited users may not be able to join your OpenProject environment. Please [upgrade your plan](upgrade_url) or block existing users in order to allow invited and registered users to join.
warning_imminent_user_limit_html: '현재 플랜으로 지원되는 사용자보다 많은 사용자를 초대했습니다. 초대된 사용자가 OpenProject 환경에 참여하지 못할 수 있습니다. 초대된 사용자와 등록된 사용자가 참여할 수 있도록 하려면 [플랜을 업그레이드](upgrade_url)하거나 기존 사용자를 차단하세요.
'
warning_registration_token_expired: |
@@ -5524,7 +5524,7 @@ ko:
warning_user_limit_reached: '사용자를 더 추가하면 현재 한도가 초과됩니다. 외부 사용자가 이 인스턴스에 액세스할 수 있도록 관리자에게 문의하여 사용자 한도를 늘리세요.
'
warning_user_limit_reached_admin_html: 'Adding additional users will exceed the current limit. Please [upgrade your plan](upgrade_url) to be able to ensure external users are able to access this instance.
warning_user_limit_reached_admin_html: '사용자를 더 추가하면 현재 한도가 초과됩니다. 외부 사용자가 이 인스턴스에 액세스할 수 있도록 하려면 [플랜을 업그레이드](upgrade_url)하세요.
'
warning_user_limit_reached_instructions: '사용자 제한(활성 사용자 %{current}/%{max}명)에 도달했습니다. sales@openproject.com으로 연락하여 Enterprise Edition 플랜을 업그레이드하고 사용자를 더 추가하세요.
@@ -5589,7 +5589,7 @@ ko:
reminders:
label_remind_at: 날짜
note_placeholder: 이 미리 알림을 설정하는 이유는 무엇입니까?
create_success_message_html: Reminder set successfully. You will receive a notification for this work package %{reminder_time}.
create_success_message_html: 미리 알림이 설정되었습니다. %{reminder_time}에 이 작업 패키지에 대한 알림을 받게 됩니다.
success_update_message: 미리 알림이 업데이트되었습니다.
success_deletion_message: 미리 알림이 삭제되었습니다.
sharing:
@@ -5621,7 +5621,7 @@ ko:
warning_user_limit_reached: '사용자를 더 추가하면 현재 한도가 초과됩니다. 외부 사용자가 이 %{entity}에 액세스할 수 있도록 관리자에게 문의하여 사용자 한도를 늘리세요.
'
warning_user_limit_reached_admin_html: 'Adding additional users will exceed the current limit. Please [upgrade your plan](upgrade_url) to be able to ensure external users are able to access this %{entity}.
warning_user_limit_reached_admin_html: '사용자를 더 추가하면 현재 한도가 초과됩니다. 외부 사용자가 이 %{entity}에 액세스할 수 있도록 하려면 [플랜을 업그레이드](upgrade_url)하세요.
'
warning_no_selected_user: 이 %{entity}을(를) 공유할 사용자를 선택하세요
@@ -5745,7 +5745,7 @@ ko:
project: 숨겨짐 - 권한이 없어 프로젝트를 볼 수 없습니다.
ancestor: 숨겨짐 - 권한이 없어 상위 항목을 볼 수 없습니다.
definingProject: 숨겨짐 - 권한이 없어 프로젝트를 볼 수 없습니다.
definingWorkspace: Undisclosed - The workspace is invisible because of lacking permissions.
definingWorkspace: 숨겨짐 - 권한이 없으므로 워크스페이스를 볼 수 없습니다.
doorkeeper:
pre_authorization:
status: 사전 권한 부여
+1 -1
View File
@@ -4248,7 +4248,7 @@ pl:
label_subproject: Podprojekt
label_subproject_new: Nowy podprojekt
label_subproject_plural: Podprojekty
label_subitems: Podppzycje
label_subitems: Podpozycje
label_subtask_plural: Zadania podrzędne
label_summary: Podsumowanie
label_system: System
File diff suppressed because it is too large Load Diff
+261 -262
View File
@@ -108,7 +108,7 @@ uk:
trial: Пробний період
jemalloc_allocator: Розподіл пам'яті Jemalloc
journal_aggregation:
caption: 'User actions on a work package (changing description, status, values, or writing comments) are grouped if performed within this period. It also controls notification and [webhook](webhook_link) delays.
caption: 'Дії користувача над пакетом робіт (зміни опису, статусу чи значень або написання коментарів) групуються, якщо їх було виконано протягом цього періоду. Це налаштування також керує сповіщеннями й затримками [вебхука](webhook_link).
'
import:
@@ -125,8 +125,8 @@ uk:
title: Конфігурація Jira
new: Нова конфігурація
banner:
title: Limited import capabilities
description: 'This Jira Migrator is currently in beta and can only import basic data: projects, issues (name, title, description, attachments), users (name, email, project membership), statuses, and types. It cannot import workflows, custom fields, issue relations, or permissions. We currently only support Jira Server/Data Center versions 10.x and 11.x. Cloud instances are not supported at this time.'
title: Обмежені можливості імпорту
description: 'Інструмент Jira Migrator зараз доступний лише як бета-версія і може імпортувати тільки основні дані: проєкти, задачі (назву, заголовок, опис, вкладення), користувачів (ім’я, електронну адресу, дані про участь у проєктах), статуси й типи. Він не може імпортувати робочі процеси, користувацькі поля, зв’язки між задачами чи дозволи. Зараз ми підтримуємо лише версії Jira Server / Data Center 10.x і 11.x. Хмарні екземпляри поки що не підтримуються.'
form:
fields:
name: Назва
@@ -162,9 +162,9 @@ uk:
run:
title: Цикл імпорту
history: Історія
remove_error: A Jira import run cannot be removed while it is running
remove_error: Цикл імпорту Jira не можна видалити, поки він виконується
import_blocked_error: Зараз виконується або очікує на перевірку ще один цикл імпорту Jira. Завершіть або скасуйте його, якщо потрібно почати новий імпорт.
project_identifier_taken: 'You are trying to import a project with an already used identifier: %{taken_identifier}. Please update the project identifier in Jira then click on Retry.'
project_identifier_taken: 'Ви намагаєтесь імпортувати проєкт з ідентифікатором, який уже використовується: %{taken_identifier}. Будь ласка, оновіть ідентифікатор проєкту в Jira, а потім натисніть на кнопку «Повторити спробу».'
blank:
title: Немає налаштованих циклів імпорту
description: Створіть цикл імпорту, щоб почати переносити інформацію із цього екземпляра Jira
@@ -187,11 +187,11 @@ uk:
imported: Режим перевірки
reverting: Скасування внесених змін
revert_error: Помилка під час скасування внесених змін
revert_cancelling: Cancelling revert
revert_cancelled: Revert cancelled
revert_cancelling: Відміна скасування внесених змін
revert_cancelled: Скасування внесених змін відмінено
reverted: Внесені зміни скасовано
finalizing: Finalizing
finalizing_error: Error during finalizing
finalizing: Завершення
finalizing_error: Помилка під час завершення
finalizing_done: Завершено
wizard:
button_retry: Повторити спробу
@@ -399,78 +399,78 @@ uk:
notification_text_default: "<p>Вітаємо,</p> <p>Новий проєкт створено: projectValue:name</p> <p>Дякуємо</p>\n"
work_packages_identifier:
page_header:
description: Choose between classic numerical work package IDs or semantic project-specific ones that prepend the project identifier to the work package ID.
description: Виберіть класичні числові ідентифікатори пакетів робіт або семантичні із зазначенням проєкту (до ідентифікатора пакета робіт додається префікс з ідентифікатором проєкту).
banner:
existing_identifiers_notice: 'Existing identifiers for %{project_count} projects don''t meet requirements for project-based semantic identifiers. OpenProject can automatically update these so that they are valid as in the examples below. Click on ''Autofix and save'' to update identifiers for all projects in this manner and enable project-based semantic identifiers.
existing_identifiers_notice: 'Наявні ідентифікатори для кількох проєктів (%{project_count}) не відповідають вимогам до семантичних ідентифікаторів із зазначенням проєктів. OpenProject може автоматично оновити їх, щоб вони стали дійсними, як показано в прикладах нижче. Натисніть кнопку «Виправити й зберегти», щоб оновити в такий спосіб ідентифікатори для всіх проєктів і ввімкнути семантичні ідентифікатори із зазначенням проєктів.
'
box_header:
label_project: Проєкт
label_previous_identifier: Previous identifier
label_autofixed_suggestion: Future identifier
label_example_work_package_id: Example work package ID
label_previous_identifier: Попередній ідентифікатор
label_autofixed_suggestion: Майбутній ідентифікатор
label_example_work_package_id: Приклад ідентифікатора пакета робіт
autofix_preview:
error_too_long: Has to be 10 characters or fewer
error_numerical: Cannot be purely numerical
error_starts_with_number: Cannot start with a number
error_special_characters: Special characters not allowed
error_not_fully_uppercased: Must be uppercase
error_in_use: Already in use as another project's active handle
error_reserved: Reserved by another project's handle history
error_unknown: Needs manual review
error_too_long: Має містити щонайбільше 10 символів
error_numerical: Не може містити лише числа
error_starts_with_number: Не може починатись із числа
error_special_characters: Не дозволяється використовувати спеціальні символи
error_not_fully_uppercased: Літери мають бути великими
error_in_use: Уже використовується як активний дескриптор іншого проєкту
error_reserved: Зарезервовано в історії дескрипторів іншого проєкту
error_unknown: Потребує ручної перевірки
remaining_projects:
one: "... 1 more project"
few: "... %{count} more projects"
many: "... %{count} more projects"
other: "... %{count} more projects"
button_autofix: Autofix and save
one: "… ще 1 проєкт"
few: "… ще %{count} проєкти"
many: "… ще %{count} проєктів"
other: "… ще %{count} проєкту"
button_autofix: Виправити й зберегти
dialog:
title: Change work package identifiers
heading: Enable project-based work package IDs?
description: 'This will change IDs for all work packages in all projects in this instance. Previous identifiers and URLs will continue to redirect properly. This change will take some time to complete.
title: Змінити ідентифікатори пакетів робіт
heading: Увімкнути ідентифікатори пакетів робіт із зазначенням проєктів?
description: 'Це призведе до зміни ідентифікаторів усіх пакетів робіт у всіх проєктах цього екземпляра. Попередні ідентифікатори і URL-адреси й далі перенаправлятимуть, куди слід. Для впровадження цієї зміни знадобиться деякий час.
'
confirm_button: Change identifiers
checkbox_label: I understand that this will permanently change all work package IDs
success_banner: Successfully updated work package identifier format.
confirm_button: Змінити ідентифікатори
checkbox_label: Я розумію, що ця дія назавжди змінить усі ідентифікатори пакетів робіт
success_banner: Формат ідентифікаторів пакетів робіт успішно оновлено.
in_progress:
banner_message: Project identifiers are currently being updated to project-based semantic identifiers. This may take some time.
banner_message: Ідентифікатори проєктів зараз замінюються на семантичні ідентифікатори із зазначенням проєктів. Це може зайняти деякий час.
workflows:
tabs:
default_transitions: Стандартні переходи
user_author: Користувач є автором
user_assignee: Користувач є призначеною особою
index:
description: Configure status transitions for each work package type.
description: Налаштуйте переходи статусів для кожного типу пакета робіт.
type_filter:
label: Filter by type name
status_button: Стан
label: Фільтрувати за назвою типу
status_button: Статус
statuses_dialog:
title: Statuses
label: Statuses enabled for this type
caption: Add or remove statuses you would like to associate with this type. Removing a status will also delete the workflow associated with it.
title: Статуси
label: Статуси, увімкнені для цього типу
caption: Додайте або видаліть статуси, які ви хочете пов’язати із цим типом. Вилучення статусу також призведе до видалення пов’язаного з ним робочого процесу.
statuses_removal_dialog:
title: Remove statuses
title: Видалити статуси
heading:
one: Remove 1 status?
few: Remove %{count} statuses?
many: Remove %{count} statuses?
other: Remove %{count} statuses?
description: Removing these statuses will make them unavailable to this type and delete existing workflows. Are you sure you want to proceed?
one: Видалити 1 статус?
few: Видалити %{count} статуси?
many: Видалити %{count} статусів?
other: Видалити %{count} статусу?
description: Якщо ви вилучите ці статуси, вони стануть недоступні для цього типу, а наявні робочі процеси буде видалено. Справді продовжити?
confirm: Вилучити
leave_confirmation:
title: Save changes before continuing?
description: You are about to leave this page but you have unsaved changes. Would you like to save them before continuing?
ignore: Ignore changes
save: Save changes and continue
title: Зберегти зміни перед продовженням?
description: Ви збираєтеся покинути цю сторінку, однак деякі зміни не збережено. Бажаєте зберегти їх, перш ніж продовжити?
ignore: Ігнорувати зміни
save: Зберегти зміни й продовжити
role_selector:
label: 'Role: %{role}'
no_role: Select role
label: 'Роль: %{role}'
no_role: Виберіть роль
blankslate:
title: No status transitions configured
description: Add statuses to start configuring workflows for this role
title: Переходи статусів не налаштовано
description: Додайте статуси, щоб почати налаштовувати робочі процеси для цієї ролі
info:
database_deprecation_html: 'Starting with OpenProject 16.0, PostgreSQL 16 is required to use OpenProject. Your installation will remain functional with your current database, but anticipate incompatability in future releases. <br/> We have prepared [upgrade guides for all installation methods](upgrade_guide). You can perform the upgrade ahead of the next release at any time by following the guides.
database_deprecation_html: 'Починаючи з OpenProject 16.0, для використання OpenProject потрібна версія PostgreSQL 16. Ваша конфігурація працюватиме з поточною базою даних, але передбачається несумісність із майбутніми випусками. <br/> Ми підготували [посібники з оновлення для всіх методів встановлення](upgrade_guide). Дотримуючись цих інструкцій, ви можете виконати оновлення до наступного випуску в будь-який час.
'
authentication:
@@ -703,13 +703,13 @@ uk:
confirmation_live_message_checked: Кнопка для продовження активна.
confirmation_live_message_unchecked: Кнопка для продовження зараз неактивна. Щоб продовжити, поставте прапорець.
pagination:
label: Pagination
label: Розбиття на сторінки
prev: Попереднє
prev_page: Previous Page
prev_page: Попередня сторінка
next: Наступний
next_page: Next Page
next_page: Наступна сторінка
page: Сторінка %{number}
page_with_more: Page %{number}...
page_with_more: Сторінка %{number}
mcp_configurations:
server_url_component:
caption: URL-адреса для доступу до сервера MCP OpenProject. Потрібна для налаштування клієнтів MCP.
@@ -717,13 +717,13 @@ uk:
op_dry_validation:
or: або
errors:
unexpected_key: is not allowed.
unexpected_key: не дозволяється.
array?: має бути масивом.
decimal?: має бути десятковим числом.
defined: не має визначатися.
eql?: має бути «%{left}».
filled?: "— слід заповнити."
format?: is in invalid format.
format?: має недійсний формат.
greater_or_equal_zero: має бути більше ніж 0 або дорівнювати йому.
gteq?: має бути більше ніж %{num} або дорівнювати цьому значенню.
hash?: має бути гешом.
@@ -750,9 +750,9 @@ uk:
parent:
not_descendant: має бути нащадком кореня ієрархії.
str?: має бути рядком.
time?: must be a time.
time?: має бути часом.
type?: має бути типом «%{type}».
uri?: is not a valid URI.
uri?: не є дійсною URL-адресою.
rules:
copy_workflow_from: Тип копії робочого процесу
enabled: Увімкнено
@@ -875,10 +875,10 @@ uk:
'
change_identifier: Ідентифікатор змін
change_identifier_dialog_title: Change project identifier
change_identifier_format_hint_semantic: Only uppercase letters (AZ), numbers or underscores. Max 10 characters. Must start with a letter.
change_identifier_format_hint_legacy: Only lowercase letters (az), numbers, dashes or underscores.
change_identifier_warning: 'This will permanently change identifiers and URLs of all work packages in this project. The previous identifier and URLs will nevertheless continue to redirect properly.
change_identifier_dialog_title: Змінити ідентифікатор проєкту
change_identifier_format_hint_semantic: Може містити лише великі літери (A–Z), цифри або символи підкреслення; усього — щонайбільше 10 символів. Має починатися з літери.
change_identifier_format_hint_legacy: Може містити лише малі літери (a–z), цифри, тире або символи підкреслення.
change_identifier_warning: 'Ця дія назавжди змінить ідентифікатори і URL-адреси всіх пакетів робіт у цьому проєкті. Однак попередні ідентифікатори і URL-адреси й далі перенаправлятимуть, куди слід.
'
subitems:
@@ -1188,63 +1188,63 @@ uk:
group: Ця група тепер входить у проєкт «%{project}». Тим часом ви вже можете включати її в план і призначати їй пакети робіт.
working_hours:
current_schedule:
title: Current schedule
work_days: Work days
work_hours: Work hours
availability_factor: Availability factor
availability_subtitle: Dedicated to project work
effective_hours: Effective work hours
effective_subtitle: Per week
title: Поточний розклад
work_days: Робочі дні
work_hours: Робочі години
availability_factor: Коефіцієнт доступності
availability_subtitle: Час на роботу над проєктами
effective_hours: Ефективні робочі години
effective_subtitle: На тиждень
not_set: Не встановлено
future:
title: Future schedules
description: Plan working schedule changes ahead of time. Once the date arrives your working schedules will be updated automatically.
add_button: Add future schedule
blank_title: No future schedules planned
blank_description: Create a future schedule to plan changes ahead of time
title: Майбутні розклади
description: Заздалегідь плануйте зміни розкладів роботи. Коли настане відповідна дата, розклади буде оновлено автоматично.
add_button: Додати майбутній розклад
blank_title: Немає запланованих майбутніх розкладів
blank_description: Створіть майбутній розклад, щоб запланувати зміни заздалегідь
history:
title: Schedule history
description: View your past work schedules.
blank_title: No schedule history yet
blank_description: Past schedule changes will appear here
title: Історія розкладів
description: Перегляньте свої минулі розклади роботи.
blank_title: Історії розкладів ще немає
blank_description: Тут з’являться минулі зміни розкладу
destroy:
confirm: Are you sure you want to delete this working schedule?
confirm: Справді видалити цей розклад роботи?
form:
title: Plan a future work schedule
title_current: Edit current work schedule
title: Планування майбутнього розкладу роботи
title_current: Редагування поточного розкладу роботи
start_date: Дата початку
start_date_caption: Select the date from when the new work schedule will be effective.
work_days: Work days
working_hours_label: Working hours
hours_mode_label: Hours mode
same_hours_mode: Same hours per day
individual_hours_mode: Individual hours per day
work_hours: Work hours
start_date_caption: Виберіть дату, з якої почне діяти новий розклад роботи.
work_days: Робочі дні
working_hours_label: Робочі години
hours_mode_label: Режим годин
same_hours_mode: Однакові години на день
individual_hours_mode: Індивідуальні години на день
work_hours: Робочі години
hours_per_day: Годин на день
per_day: per day
per_week: per week
total_work_hours: Total work hours
availability_description: The availability factor represents the actual percentage of your working time dedicated to project tasks. This accounts for meetings, emails, administrative work, and other non-project activities.
availability_factor: Availability factor
availability_factor_caption: Define the percentage of your working time dedicated to project work.
total_available_hours: Total available work hours
title_availability_factor: Availability factor
per_day: на день
per_week: на тиждень
total_work_hours: Усього робочих годин
availability_description: Коефіцієнт доступності — це фактичний відсоток робочого часу, який ви присвячуєте роботі над завданнями проєктів. Це дає змогу врахувати час, потрібний на зустрічі, електронну пошту, адміністративну роботу й інші види діяльності, не пов’язані з проєктами.
availability_factor: Коефіцієнт доступності
availability_factor_caption: Визначте відсоток свого робочого часу, який ви присвячуєте роботі над проєктами.
total_available_hours: Усього доступних робочих годин
title_availability_factor: Коефіцієнт доступності
title_days_and_hours: Дні й години
title_future_dates: Future dates
title_future_dates: Майбутні дати
table:
mobile_title: Working schedules
mobile_title: Розклади роботи
start_date: Дата початку
work_days: Work days
work_hours: Work hours
availability_factor: Availability factor
effective_work_hours: Effective work hours
work_days: Робочі дні
work_hours: Робочі години
availability_factor: Коефіцієнт доступності
effective_work_hours: Ефективні робочі години
work_days_count:
one: 1 working day
few: "%{count} working days"
many: "%{count} working days"
other: "%{count} working days"
one: 1 робочий день
few: "%{count} робочих дні"
many: "%{count} робочих днів"
other: "%{count} робочого дня"
user_preferences:
disable_keyboard_shortcuts_caption: 'You can choose to disable default [keyboard shortcuts](docs_url) if you use a screen reader or want to avoid accidentally triggering an action with a shortcut.
disable_keyboard_shortcuts_caption: 'Ви можете вимкнути стандартні [комбінації клавіш](docs_url), якщо використовуєте невізуальний екран або хочете, щоб відповідні дії не запускалися, коли ви натискаєте ці комбінації клавіш випадково.
'
page:
@@ -1292,9 +1292,8 @@ uk:
status_default_text: Цей тип за замовчуванням мають нові пакети робіт. Вони не можуть бути доступні лише для читання.
status_excluded_from_totals_text: Поставте цей прапорець, щоб виключити пакети робіт із цим статусом із підсумків атрибутів «Робота», «Залишок роботи» й «% завершення» в ієрархії.
status_percent_complete_text_html: |-
In [status-based progress calculation mode](setting_url), the % Complete of a work
package is automatically set to this value when this status is selected.
Ignored in work-based mode.
У [режимі обчислення прогресу на основі статусу](setting_url) для атрибута «% завершення» пакета робіт автоматично встановлюється це значення, коли вибрано цей статус.
Ігнорується в режимі на основі роботи.
status_readonly_html: |
Установіть цей прапорець, щоб позначити пакети робіт із цим статусом як доступні лише для читання.
Крім статусу, ви не зможете змінювати жодні атрибути.
@@ -1837,11 +1836,11 @@ uk:
consented_at: Згоден на
group:
identity_url: URL-адреса ідентичності
parent: Parent group
organizational_unit: Organizational unit
parent: Батьківська група
organizational_unit: Організаційний підрозділ
group_detail:
parent: Parent group
organizational_unit: Organizational unit
parent: Батьківська група
organizational_unit: Організаційний підрозділ
user_preference:
header_look_and_feel: Оформлення
header_alerts: Сповіщення
@@ -1876,21 +1875,21 @@ uk:
user_working_hours:
valid_from: Діє з
monday: Понеділок
monday_hours: Monday hours
monday_hours: Години понеділка
tuesday: Вівторок
tuesday_hours: Tuesday hours
tuesday_hours: Години вівторка
wednesday: Середа
wednesday_hours: Wednesday hours
wednesday_hours: Години середи
thursday: Четвер
thursday_hours: Thursday hours
thursday_hours: Години четверга
friday: П'ятниця
friday_hours: Friday hours
friday_hours: Години п’ятниці
saturday: Субота
saturday_hours: Saturday hours
saturday_hours: Години суботи
sunday: Неділя
sunday_hours: Sunday hours
availability_factor: Availability factor
shared_hours: Work hours
sunday_hours: Години неділі
availability_factor: Коефіцієнт доступності
shared_hours: Робочі години
days: Робочі дні
version:
effective_date: Дата закінчення
@@ -1946,8 +1945,8 @@ uk:
before: має бути раніше %{date}
before_or_equal_to: має бути до або %{date}
blank: не може бути порожнім.
not_before_start_date: must not be before the start date.
overlapping_range: overlaps with an existing non-working day range.
not_before_start_date: не має передувати даті початку.
overlapping_range: збігається з наявним діапазоном неробочих днів.
blank_nested: "– потрібно встановити властивість «%{property}»."
cannot_delete_mapping: "– обов’язкове. Неможливо видалити."
is_for_all_cannot_modify: призначений для всіх проєктів, тому його не можна бути змінити.
@@ -1984,9 +1983,9 @@ uk:
less_than_or_equal_to: має бути меншим або рівним %{count}
not_available: "– недоступно через налаштування системи."
not_deletable: не можна видалити.
not_editable: cannot be edited because it is already in effect.
not_editable: уже використовується, тому вносити зміни не можна.
not_current_user: не поточний користувач.
system_wide_non_working_day_exists: conflicts with an existing system-wide non-working day for this date.
system_wide_non_working_day_exists: конфліктує з наявним загальним неробочим днем, указаним для цієї дати.
not_found: не знайдено.
not_a_date: не є дійсною датою.
not_a_datetime: не є дійсним датою.
@@ -2023,7 +2022,7 @@ uk:
group:
attributes:
parent_id:
circular_dependency: would create a circular group hierarchy.
circular_dependency: призведе до створення ієрархії циклічної групи.
ldap_auth_source:
attributes:
tls_certificate_string:
@@ -2139,8 +2138,8 @@ uk:
types:
in_use_by_work_packages: 'як і раніше використовуються робочі пакети: %{types}'
identifier:
must_start_with_letter: must start with a letter
no_special_characters: may only contain uppercase letters, numbers, and underscores
must_start_with_letter: має починатися з літери
no_special_characters: може містити лише великі літери, цифри й символи підкреслення
enabled_modules:
dependency_missing: Модуль «%{dependency}» потрібно також увімкнути, оскільки від нього залежить модуль «%{module}».
format: "%{message}"
@@ -2350,7 +2349,7 @@ uk:
user_working_hours:
attributes:
days:
no_working_day: At least one day needs to be configured as a working day.
no_working_day: Принаймні один день має бути робочим.
member:
principal_blank: Виберіть принаймні одного користувача або групу.
role_blank: повинні бути призначені.
@@ -3158,8 +3157,8 @@ uk:
'
domain_caption: Маркер буде дійсним для вашого поточного імені хосту.
receive_newsletter: I want to receive the OpenProject [newsletter](newsletter_url).
consent: I agree with the [terms of service](tos_url) and the [privacy policy](privacy_url).
receive_newsletter: Я хочу отримувати [інформаційний бюлетень](newsletter_url) OpenProject.
consent: Я погоджуюся з [умовами використання](tos_url) й [політикою конфіденційності](privacy_url).
email_calendar_updates:
state:
disabled: Вимкнено.
@@ -3425,13 +3424,13 @@ uk:
'
new_features_list:
line_0: 'Big Agile update: dedicated sprint objects, all work packages visible on Backlogs, and automatic sprint board creation.'
line_1: In-place editing of project attributes on the Project Overview page.
line_2: Sharing of meeting templates (Basic plan and higher).
line_3: Better search in Time and Costs, Boards, and more.
line_4: Option to safely change project identifiers.
line_5: Improved workflow configuration for administrators.
line_6: Action boards released to Community.
line_0: 'Велике оновлення Agile: спеціальні об’єкти спринтів, відображення всіх пакетів робіт у розділі беклогів, а також автоматичне створення дощок спринтів.'
line_1: Редагування атрибутів проєкту на місці на сторінці «Огляд проєкту».
line_2: Надання доступу до шаблонів нарад (починаючи з тарифного плану Basic).
line_3: Покращений пошук у розділах «Час і витрати», «Дошки» тощо.
line_4: Налаштування, що дає змогу безпечно змінювати ідентифікатори проєктів.
line_5: Покращене налаштування робочих процесів для адміністраторів.
line_6: Випуск дощок дій для версії Community.
links:
upgrade_enterprise_edition: Оновлення до версії Enterprise
postgres_migration: Міграція інсталяції в PostgreSQL
@@ -3496,15 +3495,15 @@ uk:
progress_calculation_adjusted: Результати обчислення прогресу автоматично <a href="%{href}" target="_blank">скориговано відповідно до оновленої версії</a>.
scheduling_mode_adjusted: Режим планування автоматично змінюється з оновленням версії.
totals_removed_from_childless_work_packages: Результати обчислення обсягу й прогресу виконання роботи автоматично вилучено з небатьківських пакетів робіт з <a href="%{href}" target="_blank">оновленням версії</a>. Це завдання з технічного обслуговування, і його можна ігнорувати.
sprint_migration: Version '%{version_name}' has been copied as a sprint.
sprint_migration: Версію «%{version_name}» скопійовано як спринт.
total_percent_complete_mode_changed_to_work_weighted_average: Дочірні пакети робіт без атрибута «Робота» ігноруються.
total_percent_complete_mode_changed_to_simple_average: Значення атрибута «Робота» дочірніх пакетів робіт ігноруються.
links:
configuration_guide: Посібник з налаштування
get_in_touch: У вас виникли запитання? Зв'яжіться з нами.
instructions_after_registration_link: You can sign in as soon as your account has been activated by clicking [here](signin_url).
instructions_after_logout_link: You can sign in again by clicking [here](signin_url).
instructions_after_error_link: You can try to sign in again by clicking [here](signin_url). If the error persists, ask your admin for help.
instructions_after_registration_link: Щойно ваш обліковий запис буде активовано, ви зможете ввійти, перейшовши за [цим посиланням](signin_url).
instructions_after_logout_link: Ви можете ввійти знову, перейшовши за [цим посиланням](signin_url).
instructions_after_error_link: Ви можете спробувати ввійти знову, перейшовши за [цим посиланням](signin_url). Якщо помилка не зникне, зверніться до адміністратора за допомогою.
menus:
admin:
ai: Штучний інтелект (ШІ)
@@ -3517,10 +3516,10 @@ uk:
label: Додати…
my_account:
notifications_and_email:
title: Notification and email
title: Сповіщення й електронні листи
tabs:
notifications: Notification settings
email_reminders: Email reminders
notifications: Налаштування сповіщень
email_reminders: Нагадування електронною поштою
access_tokens:
description: Маркери постачальника послуг випускаються в OpenProject, що дає змогу іншим додаткам отримувати до них доступ. Клієнтські маркери випускаються іншими додатками, що дає змогу OpenProject отримати до них доступ.
no_results:
@@ -3585,70 +3584,70 @@ uk:
unknown_storage: Невідоме сховище
email_reminders:
immediate_reminders:
title: Send me an email reminder
mentioned: Notify me when I am mentioned
personal_reminder: Notify me for personal reminders
title: Надсилати мені нагадування електронною поштою
mentioned: Повідомляти мене, коли мене згадують
personal_reminder: Повідомляти мене про персональні нагадування
daily_reminders:
title: Send me daily email reminders for unread notifications
caption: You will receive these reminders only for unread notifications and only at hours you specify. Until you configure a time zone for your account, the times will be interpreted to be in UTC.
enabled: Enable daily email reminders
add_time: Add time
remove_time: Remove time
time_slot_label: Reminder time (UTC)
title: Надсилати мені щоденні нагадування електронною поштою про непрочитані сповіщення
caption: Ви отримуватимете лише нагадування про непрочитані сповіщення, і вони надходитимуть тільки у вказаний вами час. Доки ви не налаштуєте для свого облікового запису часовий пояс, використовуватиметься UTC.
enabled: Увімкнути щоденні нагадування електронною поштою
add_time: Додати час
remove_time: Вилучити час
time_slot_label: Час нагадування (UTC)
workdays:
title: Receive email reminders on these days
submit_button: Update reminder days
title: Отримувати нагадування електронною поштою в ці дні
submit_button: Оновити дні нагадувань
pause_reminders:
title: Pause email notifications
enabled: Temporarily pause daily email reminders
date_range: Pause period
title: Призупинити сповіщення електронною поштою
enabled: Тимчасово призупинити щоденні нагадування, що надсилаються електронною поштою
date_range: Період призупинення
email_alerts:
title: Email alerts for other items that are not work packages
news_added: News added
news_commented: Comment on a news item
document_added: Document added
forum_messages: Forum message posted
wiki_page_added: Wiki page added
wiki_page_updated: Wiki page updated
membership_added: Membership added
membership_updated: Membership updated
submit_button: Update alerts
title: Сповіщення електронною поштою для інших елементів, які не є пакетами робіт
news_added: Новину додано
news_commented: Коментар щодо новини
document_added: Документ додано
forum_messages: Повідомлення на форумі опубліковано
wiki_page_added: Wiki-сторінку додано
wiki_page_updated: Wiki-сторінку оновлено
membership_added: Членство додано
membership_updated: Членство оновлено
submit_button: Оновити сповіщення
notifications:
participating:
title: Participating
submit_button: Update preferences
mentioned: Mentioned
watched: Watching
assignee: Assignee
responsible: Accountable
shared: Shared with me
title: Бере участь
submit_button: Оновити налаштування
mentioned: Вас згадали
watched: Відстеження
assignee: Виконавець
responsible: Відповідальний
shared: Доступ надано мені
date_alerts:
title: Date alerts
submit_button: Update date alerts
start_date: Start date
due_date: Finish date
overdue: Overdue
title: Сповіщення про дати
submit_button: Оновити сповіщення про дати
start_date: Дата початку
due_date: Дата завершення
overdue: Прострочено
times:
same_day: On the same day
one_day_before: 1 day before
three_days_before: 3 days before
seven_days_before: 7 days before
one_day_after: 1 day after
three_days_after: 3 days after
seven_days_after: 7 days after
same_day: Того самого дня
one_day_before: За 1 день
three_days_before: За 3 дні
seven_days_before: За 7 днів
one_day_after: Через 1 день
three_days_after: Через 3 дні
seven_days_after: Через 7 днів
non_participating:
title: Non-participating
submit_button: Update preferences
work_package_created: New work packages
work_package_commented: All new comments
work_package_processed: All status changes
work_package_prioritized: All priority changes
work_package_scheduled: All date changes
title: Не бере участі
submit_button: Оновити налаштування
work_package_created: Нові пакети робіт
work_package_commented: Усі нові коментарі
work_package_processed: Усі зміни статусу
work_package_prioritized: Усі зміни пріоритету
work_package_scheduled: Усі зміни дат
project_specific_settings:
title: Project-specific notification settings
add_button: Add project-specific notifications
dialog_title: Add project-specific notifications
list_header: Projects with specific notifications
title: Налаштування сповіщень щодо проєктів
add_button: Додати сповіщення щодо проєктів
dialog_title: Додати сповіщення щодо проєктів
list_header: Проєкти зі спеціальними сповіщеннями
notifications:
reasons:
assigned: Виконавець
@@ -3721,7 +3720,7 @@ uk:
label_ical_access_key_generation_hint: Автоматично створено під час оформлення підписки на календар.
label_ical_access_key_latest: останні
label_ical_access_key_revoke: Анулювати
label_integrations: Integrations
label_integrations: Інтеграції
label_add_column: Додати стовпець
label_applied_status: Застосовний статус
label_archive_project: Архівний проект
@@ -3937,7 +3936,7 @@ uk:
label_subject_or_id: Тема або ідентифікатор
label_calendar_subscriptions: Підписки на календарі
label_identifier: Ідентифікатор
label_project_identifier: Project identifier
label_project_identifier: Ідентифікатор проєкту
label_in: в
label_in_less_than: менш ніж
label_in_more_than: більше ніж
@@ -4071,13 +4070,13 @@ uk:
label_news_view_all: Подивитися всі новини
label_next: Далі
label_next_week: Наступний тиждень
label_next_year: Next year
label_next_year: Наступний рік
label_no_change_option: "(Немає змін)"
label_no_data: Немає даних для відображення
label_no_due_date: немає дати завершення
label_no_start_date: немає дати початку
label_no_parent_page: Немає початкової сторінки
label_no_parent_group: "(No parent group)"
label_no_parent_group: "(Немає батьківської групи)"
label_notification_center_plural: Сповіщення
label_nothing_display: Нічого не відображається
label_nobody: жодні
@@ -4106,7 +4105,7 @@ uk:
label_overall_activity: Загальна активність
label_overview: Огляд
label_page_title: Заголовок сторінки
label_parent_group_caption: 'Setting a parent group will make this group a subgroup of the selected parent group. This will also inherit all memberships, including permissions of the parent group.
label_parent_group_caption: 'Якщо вказати батьківську групу, ця група стане її підгрупою. Вона також успадкує всі дані про членство, зокрема дозволи батьківської групи.
'
label_part_of: частина
@@ -4135,7 +4134,7 @@ uk:
label_preview_not_available: Попередній перегляд недоступний
label_previous: Попередній
label_previous_week: Попередній тиждень
label_previous_year: Previous year
label_previous_year: Попередній рік
label_principal_invite_via_email: або запрошувати нових користувачів електронною поштою
label_principal_search: Додати існуючих користувачів або групи
label_privacy_policy: Політика конфіденційності та безпеки даних
@@ -4247,7 +4246,7 @@ uk:
label_start_to_start: початок
label_statistics: Статистика
label_status: Стан
label_status_plural: Statuses
label_status_plural: Статуси
label_storage_free_space: Залишок на диску
label_storage_used_space: Використовується дисковий простір
label_storage_group: Зберігання файлової системи %{identifier}
@@ -4386,19 +4385,19 @@ uk:
zero: немає файлів
label_x_days:
one: 1 день
few: "%{count} days"
many: "%{count} days"
other: "%{count} дн."
few: "%{count} дні"
many: "%{count} днів"
other: "%{count} дня"
label_x_working_days:
one: 1 working day
few: "%{count} working days"
many: "%{count} working days"
other: "%{count} working days"
one: 1 робочий день
few: "%{count} робочих дні"
many: "%{count} робочих днів"
other: "%{count} робочого дня"
label_x_working_days_time_off:
one: 'Time off: 1 working day'
few: 'Time off: %{count} working days'
many: 'Time off: %{count} working days'
other: 'Time off: %{count} working days'
one: 'Вільний час: 1 робочий день'
few: 'Вільний час: %{count} робочих дні'
many: 'Вільний час: %{count} робочих днів'
other: 'Вільний час: %{count} робочого дня'
label_yesterday: вчора
label_zen_mode: Режим «Дзен»
label_role_type: Тип
@@ -4407,22 +4406,22 @@ uk:
label_not_changeable: "(не змінюється)"
label_global: Глобальний
label_seeded_from_env_warning: Цей запис створено за допомогою змінної середовища конфігурації. Його не можна змінити в інтерфейсі користувача.
label_schedule_and_availability: Schedule and availability
label_working_hours: Work schedule
label_non_working_days: Availability calendar
label_non_working_days_with_count: Non-working days (%{count})
label_schedule_and_availability: Розклад і доступність
label_working_hours: Розклад роботи
label_non_working_days: Календар доступності
label_non_working_days_with_count: Неробочі дні (%{count})
label_non_working_days_summary: Резюме
button_add_non_working_time: Time off
button_edit_non_working_time: Edit time off
label_continued_from_previous_year: continued from previous year
label_continues_into_next_year: continues into next year
button_add_non_working_time: Вільний час
button_edit_non_working_time: Редагувати вільний час
label_continued_from_previous_year: продовжується з попереднього року
label_continues_into_next_year: продовжується наступного року
label_end_date: Дата закінчення
label_working_days: Робочі дні
label_non_working_times_with_count: "%{year} time off (%{count})"
label_non_working_times_summary: "%{year} summary"
label_total_user_non_working_times: Personal non-working days
label_total_global_non_working_days: Global non-working days
label_total_days_off: Total days off
label_non_working_times_with_count: Вільний час за %{year} р. (%{count})
label_non_working_times_summary: Зведення за %{year} р.
label_total_user_non_working_times: Особисті неробочі дні
label_total_global_non_working_days: Загальні неробочі дні
label_total_days_off: Усього вихідних днів
macro_execution_error: Помилка виконання макросу %{macro_name}
macro_unavailable: Макрос %{macro_name} не може бути відображений.
macros:
@@ -4457,7 +4456,7 @@ uk:
center: Центр сповіщень
see_in_center: Переглянути коментарі у центрі сповіщень
settings: Змінити налаштування електронної пошти
salutation: Hello %{user},
salutation: Добрий день, %{user}!
salutation_full_name: Повне ім’я
work_packages:
created_at: Створено о %{timestamp} користувачем %{user} 
@@ -4651,7 +4650,7 @@ uk:
notice_parent_item_not_found: Батьківський об’єкт не знайдено.
notice_project_not_deleted: Проект не був видалений.
notice_project_not_found: Проєкт не знайдено.
notice_smtp_address_unsafe_env_hint: SMTP address %{address} is not safe. Please add it to the whitelist using the %{env_name} environment variable.
notice_smtp_address_unsafe_env_hint: SMTP-адреса %{address} не є безпечною. Будь ласка, додайте її в білий список, використовуючи змінну середовища %{env_name}.
notice_successful_connection: Підключення успішно встановлене.
notice_successful_create: Створення успішно завершене.
notice_successful_delete: Видалення успішно завершене.
@@ -4778,12 +4777,12 @@ uk:
permission_manage_versions: Управління версіями
permission_manage_wiki: Управління wiki
permission_manage_wiki_menu: Керування wiki-меню
permission_manage_own_working_times: Manage own working times
permission_manage_own_working_times_explanation: 'Allows users to manage their own working times, and personal non-working days.
permission_manage_own_working_times: Керувати власним робочим часом
permission_manage_own_working_times_explanation: 'Дозволяє користувачам керувати власним робочим часом і особистими неробочими днями.
'
permission_manage_working_times: Manage working times for all users
permission_manage_working_times_explanation: 'Allows users to manage working times for all users, including personal non-working days.
permission_manage_working_times: Керуйте робочим часом для всіх користувачів
permission_manage_working_times_explanation: 'Дозволяє керувати робочим часом усіх користувачів, зокрема особистими неробочими днями.
'
permission_move_work_packages: Переміщення робочих пакетів
@@ -5042,7 +5041,7 @@ uk:
setting_apiv3_cors_title: Спільне використання ресурсів із різних джерел (CORS)
setting_apiv3_cors_enabled: Увімкнути CORS
setting_apiv3_cors_origins: Дозволені джерела CORS (Cross-Origin Resource Sharing) в API версії 3
setting_apiv3_cors_origins_instructions_html: 'If CORS is enabled, these are the origins that are allowed to access OpenProject API. <br/> Please check the [Documentation on the Origin header](docs_url) on how to specify the expected values.
setting_apiv3_cors_origins_instructions_html: 'Якщо CORS увімкнено, це джерела, які можуть отримувати доступ до OpenProject API. <br/> Щоб дізнатися, як указати очікувані значення, ознайомтеся з [документацією щодо заголовка джерела](docs_url).
'
setting_apiv3_write_readonly_attributes: Дозвіл для записування атрибутів лише для читання
@@ -5052,7 +5051,7 @@ uk:
setting_apiv3_write_readonly_attributes_warning: 'Це налаштування використовується, наприклад, для імпорту даних, але дає змогу адміністраторам створювати елементи від імені інших користувачів. Однак усі запити на створення реєструються із зазначенням справжнього автора.
'
setting_apiv3_write_readonly_attributes_additional_html: 'For more information on attributes and supported resources, please see the [API documentation](api_documentation_link).
setting_apiv3_write_readonly_attributes_additional_html: 'Щоб дізнатися більше про атрибути й підтримувані ресурси, ознайомтеся з [документацією API](api_documentation_link).
'
setting_apiv3_max_page_size: Максимальний розмір сторінки API
@@ -5154,7 +5153,7 @@ uk:
setting_work_package_properties: Властивості робочого пакета
setting_work_package_startdate_is_adddate: Використовувати поточну дату в якості дати початку роботи для нових пакетів
setting_work_packages_projects_export_limit: Ліміт експорту пакетів робіт / проєктів
setting_journal_aggregation_time_minutes: Aggregation period
setting_journal_aggregation_time_minutes: Період агрегації
setting_log_requesting_user: Запишіть логін користувача, ім'я та поштову адресу для всіх запитів
setting_login_required: Необхідна аутентифікація
setting_login_required_caption: Якщо встановлено, усі запити до додатка мають проходити автентифікацію.
@@ -5237,12 +5236,12 @@ uk:
setting_welcome_text: Текст блоку привітання
setting_welcome_title: Заголовок вітального блоку
setting_welcome_on_homescreen: Відображати вітальний блок на робочому столі
setting_work_packages_identifier_classic: Instance-wide numerical sequence (default)
setting_work_packages_identifier_classic_caption: 'Every work package gets a sequential number starting with 1 and incremented with every new one. The numbers are unique within this instance so they remain the same even if work packages are moved between projects.
setting_work_packages_identifier_classic: Числова послідовність для всього екземпляра (за умовчанням)
setting_work_packages_identifier_classic_caption: 'Кожному пакету робіт присвоюється порядковий номер, який починається з одиниці й збільшується з кожним новим пакетом. Номери є унікальними в межах цього екземпляра, тому залишаються незмінними, навіть якщо пакети робіт переміщуються між проєктами.
'
setting_work_packages_identifier_semantic: Project-based semantic identifiers
setting_work_packages_identifier_semantic_caption: 'Every project has a unique identifier that is prefixed to the work package ID. If a work package moved to another project, a new identifier is generated but the old one continues to function.
setting_work_packages_identifier_semantic: Семантичні ідентифікатори із зазначенням проєктів
setting_work_packages_identifier_semantic_caption: 'Кожен проєкт має унікальний ідентифікатор, який додається як префікс до ідентифікатора пакета робіт. Якщо пакет робіт переміщується в інший проєкт, генерується новий ідентифікатор, однак старий продовжує працювати.
'
setting_work_package_list_default_highlighting_mode: Режим виділення за умовчанням
@@ -5426,11 +5425,11 @@ uk:
section_work_week: Робочий тиждень
section_holidays_and_closures: Свята й вихідні
work_packages:
work_package_identifier: Work package identifier
work_package_identifier: Ідентифікатор пакета робіт
not_allowed_text: У вас немає дозволів для перегляду цієї сторінки.
activities:
enable_internal_comments: Увімкнути внутрішні коментарі
helper_text_html: 'Internal comments allow an internal team to communicate amongst themselves privately. These are only visible to selected roles that have the necessary permissions and will not be visible publicly. [Click here to learn more](docs_url)
helper_text_html: 'Завдяки внутрішнім коментарям учасники внутрішньої команди можуть спілкуватися одне з одним приватно. Ці коментарі доступні лише користувачам із певними ролями й необхідними дозволами; вони ніколи не відображаються для всіх. [Натисніть тут, щоб дізнатися більше.](docs_url)
'
text_formatting:
@@ -5518,7 +5517,7 @@ uk:
text_default_administrator_account_changed: Обліковий запис адміністратора за замовчуванням змінений
text_default_encoding: 'По замовчуванню: UTF-8'
text_destroy: Видалити
text_destroy_with_associated: 'There are additional objects associated with the work package(s) that are to be deleted. Those objects are of the following types:'
text_destroy_with_associated: 'Існують додаткові об’єкти, пов’язані з пакетом(-ами) робіт, які потрібно видалити. Це об’єкти таких типів:'
text_destroy_what_to_do: Що ти хочеш зробити?
text_diff_truncated: "... Це порівняння (diff) було скорочене, оскільки воно перевищує максимальний розмір, який можна відобразити."
text_email_delivery_not_configured: |-
@@ -5577,10 +5576,10 @@ uk:
text_plugin_assets_writable: Каталог ресурсів модулів доступний для запису
text_powered_by: Працює на %{link}
text_project_identifier_info: Допускаються тільки рядкові малі букви (a-z), цифри, тире та нижнє підкреслення. Початок має бути з малої літери.
text_project_identifier_description: The project identifier is prepended to all work package IDs. If the identifier is "PROJ" for example, the work package identifier will be "PROJ-12" or "PROJ-246".
text_project_identifier_url_description: The project identifier is included in the URL of the project.
text_project_identifier_handle_format: Must start with a letter and contain only uppercase letters, numbers, and underscores (max 10 characters).
text_project_identifier_format: Must start with a lowercase letter. Only lowercase letters (a-z), numbers, dashes and underscores are allowed.
text_project_identifier_description: Префікс з ідентифікатором проєкту додається до всіх ідентифікаторів пакетів робіт. Наприклад, якщо ідентифікатор проєкту — PROJ, то ідентифікатором пакета робіт може бути PROJ-12 чи PROJ-246.
text_project_identifier_url_description: Ідентифікатор проєкту міститься в URL-адресі проєкту.
text_project_identifier_handle_format: Має починатися з літери й містити лише великі літери, цифри й символи підкреслення (усього — щонайбільше 10).
text_project_identifier_format: Має починатися з малої літери й містити лише малі літери (az), цифри, тире й символи підкреслення.
text_reassign: 'Перепризначити робочому пакету:'
text_regexp_multiline: Реестр застосовується в багаторядковому режимі. наприклад, --- ---
text_repository_usernames_mapping: |-
@@ -5695,10 +5694,10 @@ uk:
version_status_locked: Заблоковано
version_status_open: відкрити
note: Замітка
note_password_login_disabled_link: Password login has been disabled through a [configuration setting](configuration_url).
note_password_login_disabled_link: Вхід із використанням пароля було вимкнено за допомогою [налаштування конфігурації](configuration_url).
warning: Попередження
warning_attachments_not_saved: "%{count} Не вдалося зберегти файл (файли)."
warning_imminent_user_limit_html: 'You invited more users than are supported by your current plan. Invited users may not be able to join your OpenProject environment. Please [upgrade your plan](upgrade_url) or block existing users in order to allow invited and registered users to join.
warning_imminent_user_limit_html: 'Ви запросили більше користувачів, ніж кількість, яку підтримує ваш поточний план. У запрошених користувачів може не бути змоги приєднатися до вашого середовища OpenProject. Будь ласка, [оновіть свій план](upgrade_url) або заблокуйте наявних користувачів, щоб дати змогу приєднатися запрошеним користувачам, які зареєструвалися.
'
warning_registration_token_expired: 'Термін дії електронної пошти для активації минув. Ми надіслали вам нову %{email} Натисніть посилання в ньому, щоб активувати свій обліковий запис.
@@ -5707,7 +5706,7 @@ uk:
warning_user_limit_reached: 'Додавання користувачів призведе до перевищення поточного ліміту. Зверніться до адміністратора, щоб збільшити ліміт користувачів і таким чином забезпечити доступ до цього екземпляра зовнішнім користувачам.
'
warning_user_limit_reached_admin_html: 'Adding additional users will exceed the current limit. Please [upgrade your plan](upgrade_url) to be able to ensure external users are able to access this instance.
warning_user_limit_reached_admin_html: 'Додавання користувачів призведе до перевищення поточного ліміту. [Оновіть свій план](upgrade_url), щоб забезпечити доступ до цього екземпляра зовнішнім користувачам.
'
warning_user_limit_reached_instructions: 'Ви досягли обмеження користувача (%{current}/%{max} активних користувачів). Напишіть на адресу sales@openproject.com, щоб перейти на версію Enterprise і додати більше користувачів.
@@ -5804,7 +5803,7 @@ uk:
warning_user_limit_reached: 'Додавання користувачів призведе до перевищення поточного ліміту. Зверніться до адміністратора, щоб збільшити ліміт користувачів і таким чином забезпечити доступ до цього %{entity} зовнішнім користувачам.
'
warning_user_limit_reached_admin_html: 'Adding additional users will exceed the current limit. Please [upgrade your plan](upgrade_url) to be able to ensure external users are able to access this %{entity}.
warning_user_limit_reached_admin_html: 'Додавання користувачів призведе до перевищення поточного ліміту. [Оновіть свій план](upgrade_url), щоб забезпечити доступ до %{entity} зовнішнім користувачам.
'
warning_no_selected_user: Виберіть користувачів, яким потрібно надати спільний доступ до цього %{entity}
@@ -5928,7 +5927,7 @@ uk:
project: 'Нерозкритий: проєкт невидимий через відсутність дозволів.'
ancestor: Нерозкритий – предок невидимий через відсутність дозволів.
definingProject: 'Нерозкритий: проєкт невидимий через відсутність дозволів.'
definingWorkspace: Undisclosed - The workspace is invisible because of lacking permissions.
definingWorkspace: 'Нерозкритий: робочий простір невидимий через відсутність дозволів.'
doorkeeper:
pre_authorization:
status: Попередня авторизація
File diff suppressed because it is too large Load Diff
+35 -3
View File
@@ -1,7 +1,6 @@
# Setup guide
A minimal setup guide for using a local XWiki inside a docker stack. The example compose file is connected to the
standard setup of the TLS-ready stack with `traefik`.
A minimal setup guide for using a local XWiki inside a docker stack. The example compose file is connected to the standard setup of the [TLS-ready](https://www.openproject.org/docs/development/development-environment/docker/#tls-support) stack with `traefik`.
## First steps
@@ -9,4 +8,37 @@ standard setup of the TLS-ready stack with `traefik`.
- Go to https://xwiki.local
- Wait for initialisation to succeed
- Create admin user
- Select XWiki standard flavor and install it
- Select XWiki standard flavor and install it**this is highly recommended** as many XWiki
features and the OpenProject plugin depend on it
## Recommended extensions
For integration with OpenProject, install the following after the standard flavor is set up:
- **[OpenProject Integration](https://store.xwiki.com/xwiki/bin/view/Extension/OpenProjectIntegration)** — connects XWiki with OpenProject
Install it via the Extension Manager (Administration → Extensions → search for "OpenProject Integration").
## Updating XWiki
To update XWiki to a newer version, pull the latest image and recreate the container:
```bash
docker compose --project-directory docker/dev/xwiki/ pull
docker compose --project-directory docker/dev/xwiki/ up -d
```
After the container starts, go to <https://xwiki.local> — XWiki will detect the new version and
present an upgrade wizard. Follow it to completion before using XWiki again.
## Certificates
### Trusting the local CA in XWiki (for outbound HTTPS calls)
XWiki runs on Java/Tomcat which has its own certificate truststore, independent of the system CA
bundle. If XWiki needs to make HTTPS requests to OpenProject (e.g. for OAuth), it must trust the
local step-ca root certificate.
Copy `docker-compose.override.example.yml` to `docker-compose.override.yml` — it wraps the XWiki
entrypoint to automatically import the step-ca certificate into Java's truststore on every container
start, including after recreations. Requires the TLS stack (`docker/dev/tls`) to be running.
@@ -0,0 +1,22 @@
services:
web:
volumes:
- step-certs:/step:ro
# Automatically imports the local step-ca root certificate into Java's truststore on every
# container start, so XWiki can make HTTPS calls to OpenProject without certificate errors.
# Requires the TLS stack (docker/dev/tls) to be running.
entrypoint:
- /bin/bash
- -c
- |
keytool -import -trustcacerts \
-keystore /opt/java/openjdk/lib/security/cacerts \
-storepass changeit -noprompt \
-alias step-ca \
-file /step/certs/root_ca.crt 2>/dev/null || true
exec docker-entrypoint.sh xwiki
volumes:
step-certs:
external: true
name: tls_step # volume created by the TLS stack (docker/dev/tls)
@@ -3,14 +3,14 @@ sidebar_navigation:
title: Statement on security
priority: 600
description: Statement of data security in OpenProject
keywords: GDPR, data security, security, OpenProject security, security alerts, single sign-on, password security, mailing list
keywords: GDPR, data security, security, OpenProject security, security alerts, single sign-on, password security, mailing list, vulnerability, responsible disclosure, bug bounty
---
# Statement on security
At its core, OpenProject is an open-source software that is [developed and published on GitHub](https://github.com/opf/openproject). Every change to the OpenProject code base ends up in an open repository accessible to everyone. This results in a transparent software where every commit can be traced back to the contributor.
Automated tests and manual code reviews ensure that these contributions are safe for the entire community of OpenProject. These tests encompass the correctness of security and access control features. We have ongoing collaborations with security professionals from to test the OpenProject code base for security exploits.
Automated tests and manual code reviews ensure that these contributions are safe for the entire community of OpenProject. These tests encompass the correctness of security and access control features. We have ongoing collaborations with security professionals to test the OpenProject code base for security exploits.
For more information on security and data privacy for OpenProject, please visit: [www.openproject.org/security-and-privacy](https://www.openproject.org/security-and-privacy/).
@@ -21,7 +21,9 @@ You can find our `security.txt` here: [www.openproject.org/security.txt](https:/
Please see [securitytxt.org](https://securitytxt.org/) for more information.
## Security announcements mailing list
## Communication channels
### Security announcements mailing list
If you want to receive immediate security notifications via email as we publish them, please sign up to our [security mailing list](https://www.openproject.org/security-and-privacy/#mailing-list).
@@ -29,28 +31,19 @@ No messages except for security advisories or security related announcements wil
To unsubscribe, you will find a link at the end of every email.
Any security related information will also be published on our [blog](https://www.openproject.org/blog/) and in the [release notes](../../release-notes/).
Any security related information will also be published in the [release notes](../../release-notes/) and as [GitHub Security Advisories](https://github.com/opf/openproject/security/advisories).
## Security advisory list
### Security advisory list
OpenProject uses GitHub to manage and publish [security advisory listings](https://github.com/opf/openproject/security/advisories)
OpenProject uses GitHub to manage and publish [security advisory listings](https://github.com/opf/openproject/security/advisories). All publicly known security issues on OpenProject with at least a medium CVSS score are reported as CVEs and can be found through these advisories. All published CVEs will also be listed on [cve.org](https://www.cve.org/CVERecord/SearchResults?query=OpenProject).
## Security vulnerability processing
### Email
When we receive vulnerability reports from researchers or through internal identification, the following process is taking place immediately:
1. A security vulnerability is reported internally or through [security@openproject.com](mailto:security@openproject.com) (see below on how to disclose vulnerabilities responsibly).
2. A security engineer is receiving and validating the report. An internal tracking ticket is created with a checklist template on how to process the report.
3. The reporter receives a timely response with an acknowledgement of the report, further questions if present, and an estimated timeline and complexity of a potential fix.
4. The security engineer coordinates with the security and development team to prepare and test a fix for the report.
5. A GitHub advisory draft is created and a CVE is requested, if appropriate. Security researchers are invited to collaborate on the draft, if available.
6. A patch is returned to the reporter and awaited for confirmation unless fix is trivial
7. A patch release is created, published and distributed for all supported installations
8. The security vulnerability is publicly disclosed on GitHub and communicated through the mailing list
Next to GitHub advisories, you may also directly reach out to the security team via email using [security@openproject.com](mailto:security@openproject.com).
## Reporting a vulnerability
We take all facets of security seriously at OpenProject. If you want to report a security concerns, have remarks, or contributions regarding security at OpenProject, please reach out to us at [security@openproject.com](mailto:security@openproject.com).
We take all facets of security seriously at OpenProject. If you want to report a security concern, have remarks, or contributions regarding security at OpenProject, please reach out to us at [security@openproject.com](mailto:security@openproject.com).
If you can, please send us a PGP-encrypted email using the following key:
@@ -58,15 +51,103 @@ If you can, please send us a PGP-encrypted email using the following key:
- Fingerprint BDCF E01E DE84 EA19 9AE1 72CE 7D66 9C6D 4753 3958
- You may also find the key [attached in our OpenProject repository.](security-at-openproject.com.asc)
You can also [report a vulnerability directly in GitHub](https://github.com/opf/openproject/security/advisories/new), if you prefer. In that case, please _also_ send an informal email to [security@openproject.com](mailto:security@openproject.com) with the link to the advisory, as GitHub notifications are sometimes hard to fully dig through, and we wouldn't want to miss your report.
You can also [report a vulnerability directly in GitHub](https://github.com/opf/openproject/security/advisories/new), if you prefer. When in doubt, please _also_ send an informal email to [security@openproject.com](mailto:security@openproject.com) with the link to the advisory. The advisories allows us to communicate and collaborate privately with you, and it will remain private until we publish the vulnerability.
Please include a description on how to reproduce the issue if possible. Our security team will get your email and will attempt to reproduce and fix the issue as soon as possible.
### What to include in a report
To help us validate and address the issue efficiently, your report should include:
- A general description of the vulnerability
- Details about the impacted function and specific conditions to be met, including the vulnerable code snippet (if applicable)
- The impacted version of OpenProject
- Step-by-step instructions to reliably reproduce the issue
- Screenshots, videos, logs, or other evidence demonstrating the full exploitation
- The security impact on the application, its users, and the organization
- Recommendations and fix suggestions (optional, but appreciated)
Providing clear reproduction steps is essential. Reports that lack sufficient detail for us to validate the issue may take significantly longer to process.
### Responsible disclosure and testing policy
Please adhere to the following rules when reporting or researching security issues:
- **Only test your own instances**: Targeting other users' instances is forbidden. Only test against your own OpenProject installation. If you need additional testing instances or other data from us, feel free to reach out.
- **No public disclosure without agreement**: No vulnerability disclosure, full, partial, or otherwise, is allowed without prior agreement from us. Please avoid submitting security issues on our public repositories before reporting them through the proper channels.
- **Redact sensitive data**: Do not include Personally Identifiable Information (PII) in your report. Redact or obfuscate PII, secrets, keys, and credentials that appear in screenshots, server responses, or other evidence.
- **Human interaction required:** Please do not report unchecked and obvious AI-generated reports, or we may have to close them without further comments.
## Criteria for security vulnerabilities
We appreciate your time in every security report you communicate to us. There are a number of cases that can be viewed as security vulnerabilities, but for which we might either reject or not follow up with a full CVE publication. We still welcome you to reach out and discuss potential mitigations or attack vectors with us. Examples for these cases could be
- Outdated versions of OpenProject. Please ensure you have confirmed the vulnerability against the latest stable version of OpenProject. If you have found new issues as part of the unreleased `dev` branch, of course please also contact us for that.
- Tab nabbing
- Content/text injections that do not result in an XSS attack due to other mitigations
- Denial of service attacks through memory exhaustion, content size, or similar measures
- Race conditions for business logic constraints (e.g., duplicating unique names through timing attacks) without further impact
- HTML injection in formattable content (e.g., links, images) that duplicates what Markdown already allows. Formattable content is sanitized, and reports need to demonstrate impact beyond basic HTML injection
- Clickjacking / UI redressing due to inline CSS styles being allowed in certain formattable places.
- Recently disclosed CVEs (less than 30 days since patch release) for third party libraries
- Presence of autocomplete attribute on web forms
- Vulnerabilities affecting outdated browsers or platforms
- Hypothetical flaws or best practice recommendation without an exploitable vulnerability and proof of concept
- Reports with attack scenarios requiring MITM or physical access to the victim's device
- Disclosure of information without exploitable vulnerabilities (e.g., stack traces, path disclosure, directory listings, software versions, IP disclosure, third-party secrets, EXIF metadata, origin IP)
- Blind SSRF without exploitable vulnerabilities and proof of concept (e.g., DNS and HTTP pingback)
- Ability to spam users (email, SMS, or direct message flooding)
- Exploits that rely on a voluntarily downgraded configuration, or on not-recommended security settings
- Stolen secrets, credentials, or information gathered from a third-party asset outside our control
## Severity assessment
The severity of security issues is assessed on a case-by-case basis by our security team using the [CVSS v3.1 calculator](https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator). We consider both the potential impact (e.g., a vulnerability affecting all users is more severe than one requiring specific conditions) and the difficulty to exploit (e.g., a vulnerability requiring administrator access or advanced permissions is less severe than one exploitable by unauthenticated users).
As a general guideline:
- **Critical**: Vulnerabilities with a high CVSS score that can be exploited remotely with no or low privileges, no user interaction, and high impact on confidentiality, integrity, or availability.
- **High**: Vulnerabilities with significant impact but that require some privileges, user interaction, or have high attack complexity.
- **Medium/Low**: Vulnerabilities with limited impact or that require high privileges, unusual configurations, or active user interaction to exploit.
## Security vulnerability processing
When we receive vulnerability reports from researchers or through internal identification, the following process takes place:
1. A security vulnerability is reported internally, through GitHub advisories, an active bug bounty program, or through [security@openproject.com](mailto:security@openproject.com).
2. A security engineer receives and validates the report. An internal tracking ticket is created with a checklist template on how to process the report.
3. The reporter receives a timely response with an acknowledgement of the report, further questions if present, and an estimated timeline and complexity of a potential fix.
4. The security engineer coordinates with the security and development team to prepare and test a fix.
5. A GitHub advisory draft is created and a CVE is requested, if appropriate. Security researchers are invited to collaborate on the draft, if available.
6. If possible, a patch or fixed version is provided to the reporter for feedback and confirmation.
7. For critical and high-severity issues, a **pre-release notification** is sent to the security mailing list at least 7 days before the planned release, including the release date and severity (but no vulnerability details).
- This information will include the current releases an upgrade will be available for.
- For security fixes deemed critical, we will attempt to provide fixes for the newest versions of the last two major releases
- Generally, OpenProject only supports the latest major release. Please consult your enterprise contract or our [terms of services](https://www.openproject.org/legal/terms-of-service/) for details.
9. A patch release is created, published, and distributed for all supported installations. The CVE, advisory, and full details are disclosed **simultaneously** with the release.
10. The security mailing list is notified of the publication with upgrade guidance.
### How long does it take to fix a security issue?
All vulnerabilities are treated with the highest priority. Critical and high impact vulnerabilities are aimed to be available as an upgradable fix within 21 days after confirmation of the vulnerability, so 14 days until the pre-announcement. This timeline represents our targets. Actual resolution times may vary depending on the complexity of the issue and the availability of our team.
### When is a security issue considered fixed?
A security issue is considered fixed only once the fix has been released for all supported versions affected by the issue.
### Pre-release notification
For critical and high-severity vulnerabilities, subscribers of our [security mailing list](#security-announcements-mailing-list) will receive a pre-release notification **7 days before** the security release. This notification will include the planned release date and the severity of the issue, but will **not** include vulnerability details or patches. This gives administrators time to schedule maintenance windows and prepare for an upgrade.
### Public disclosure
Because OpenProject is open source, any fix committed to our public repository is inherently visible. Adding additional wait time between official releases and communication about vulnerabilities would allow exploitation of the vulnerabilities by simply reading the published code. For this reason, we follow a **simultaneous disclosure** approach:
- The CVE, GitHub security advisory, and full vulnerability details are published **at the same time** as the patch release.
- The security mailing list is notified immediately upon publication.
- Fixed security issues will appear in the corresponding release notes.
## Bug bounty program
OpenProject is currently subject of a bug bounty program, kindly sponsored by the European Commission. Please see https://yeswehack.com/programs/openproject for more details.
Please note that OpenProject does not offer its own bug bounty program. For any security vulnerability you responsibly disclose to it, whether it's through another bug bounty program or through our website, we will do our best to give you the appropriate credits for responsibly disclosing a security vulnerability to us. We will gladly reference your work, name, website on every publication we do related to the security update.
Please note that OpenProject does not currently offer its own bug bounty program. For any security vulnerability you responsibly disclose to us, whether through another bug bounty program or through our website, we will do our best to give you appropriate credit. We will gladly reference your work, name, and website on every publication we make related to the security update.
## OpenProject security features
@@ -96,7 +177,7 @@ Security updates allow a fast fix of security issues in the system. Relevant cha
### LDAP sync (Enterprise add-on)
Synchronize OpenProject users and groups with your companys LDAP to update users and group memberships based on LDAP group members.
Synchronize OpenProject users and groups with your company's LDAP to update users and group memberships based on LDAP group members.
### Single sign-on
+67 -108
View File
@@ -138,8 +138,8 @@
"@angular-eslint/template-parser": "20.7.0",
"@angular/language-service": "21.1.6",
"@eslint/js": "^9.39.2",
"@html-eslint/eslint-plugin": "^0.57.1",
"@html-eslint/parser": "^0.57.1",
"@html-eslint/eslint-plugin": "^0.58.1",
"@html-eslint/parser": "^0.58.1",
"@jsdevtools/coverage-istanbul-loader": "3.0.5",
"@stylistic/eslint-plugin": "^5.7.1",
"@types/codemirror": "5.60.5",
@@ -172,7 +172,7 @@
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.0.1",
"globals": "^17.3.0",
"jasmine-core": "~6.0.1",
"jasmine-core": "~6.1.0",
"jasmine-spec-reporter": "~7.0.0",
"karma": "~6.4.4",
"karma-chrome-launcher": "~3.2.0",
@@ -4803,19 +4803,6 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/css-tree": {
"version": "3.6.9",
"resolved": "https://registry.npmjs.org/@eslint/css-tree/-/css-tree-3.6.9.tgz",
"integrity": "sha512-3D5/OHibNEGk+wKwNwMbz63NMf367EoR4mVNNpxddCHKEb2Nez7z62J2U6YjtErSsZDoY0CsccmoUpdEbkogNA==",
"dev": true,
"dependencies": {
"mdn-data": "2.23.0",
"source-map-js": "^1.0.1"
},
"engines": {
"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
}
},
"node_modules/@eslint/eslintrc": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
@@ -5301,13 +5288,12 @@
}
},
"node_modules/@html-eslint/core": {
"version": "0.57.0",
"resolved": "https://registry.npmjs.org/@html-eslint/core/-/core-0.57.0.tgz",
"integrity": "sha512-X/cKrOmXrxZSdgyKwtbaCuuJ1k/u82MK58Q6p1TzfwPatwIYx+icfBv1Vp1dLui0L0y1fwBW4H+TKhBf7mMKmg==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/core/-/core-0.58.1.tgz",
"integrity": "sha512-GHYDt2Q3ws9aa0/bmMhkv21ExQJnrjKY/iByjdBVp3lBq49wlzIzvAfcx4Bsp+RMV3oPZhzlnLhPpXLuVYt2mQ==",
"dev": true,
"dependencies": {
"@html-eslint/types": "^0.57.0",
"eslint": "^9.39.1",
"@html-eslint/types": "^0.58.1",
"html-standard": "^0.0.13"
},
"engines": {
@@ -5315,17 +5301,17 @@
}
},
"node_modules/@html-eslint/eslint-plugin": {
"version": "0.57.1",
"resolved": "https://registry.npmjs.org/@html-eslint/eslint-plugin/-/eslint-plugin-0.57.1.tgz",
"integrity": "sha512-IDfdk3V27eebNpdXD2NLy/lnTSbUuKrro/6YJICBn/9aiXPXagNqWJB38qcSWEoxADbXfSSn17DJWcXvQTkHBg==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/eslint-plugin/-/eslint-plugin-0.58.1.tgz",
"integrity": "sha512-aizTTKbNF2sW+lXWP+uWBoo5Ud9xtUkr70+0pYhItwJF0yhRqLQ91PhW+9afC0daymQjn13MunzDPwGPG0seDg==",
"dev": true,
"dependencies": {
"@eslint/plugin-kit": "^0.4.1",
"@html-eslint/core": "^0.57.0",
"@html-eslint/parser": "^0.57.1",
"@html-eslint/template-parser": "^0.57.0",
"@html-eslint/template-syntax-parser": "^0.57.0",
"@html-eslint/types": "^0.57.0",
"@html-eslint/core": "^0.58.1",
"@html-eslint/parser": "^0.58.1",
"@html-eslint/template-parser": "^0.58.1",
"@html-eslint/template-syntax-parser": "^0.58.1",
"@html-eslint/types": "^0.58.1",
"@rviscomi/capo.js": "^2.1.0",
"html-standard": "^0.0.13"
},
@@ -5337,47 +5323,45 @@
}
},
"node_modules/@html-eslint/parser": {
"version": "0.57.1",
"resolved": "https://registry.npmjs.org/@html-eslint/parser/-/parser-0.57.1.tgz",
"integrity": "sha512-nQ5vw7Os+Snjxq9hLLBak2bv502Obn77BNOWfGK2+GIrShxtGd8w1ehlKW3EB5/RQzqBk6VDK8nPfexlR3M7kg==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/parser/-/parser-0.58.1.tgz",
"integrity": "sha512-a87peH9HcVDrKZZIYdfMlPZ+72nIktAitKcdoHQevuaXWsgvDtClKihJyy5dZS9md6hIbCh62Og5gQRhl85ZMg==",
"dev": true,
"dependencies": {
"@eslint/css-tree": "^3.6.9",
"@html-eslint/template-syntax-parser": "^0.57.0",
"@html-eslint/types": "^0.57.0",
"@html-eslint/template-syntax-parser": "^0.58.1",
"@html-eslint/types": "^0.58.1",
"css-tree": "^3.1.0",
"es-html-parser": "0.3.1"
}
},
"node_modules/@html-eslint/template-parser": {
"version": "0.57.0",
"resolved": "https://registry.npmjs.org/@html-eslint/template-parser/-/template-parser-0.57.0.tgz",
"integrity": "sha512-tddyBo4dEl4W4Ehxuyd6H4jsSqvsfL5F7Bj9/aFfdQyv36q7BGWM2BRHb6FMmYKAPGZ3VzyEbUlcqIwXpDkY3w==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/template-parser/-/template-parser-0.58.1.tgz",
"integrity": "sha512-qo6jTc4Y6vVgwPc2w+EQigH7uCAn+LExxE5oG1URRT98UiJ7dItX0Qk44r/+5XQwSS1TsdvBNLxM2NAktETSWA==",
"dev": true,
"dependencies": {
"@html-eslint/types": "^0.57.0",
"@html-eslint/types": "^0.58.1",
"es-html-parser": "0.3.1"
}
},
"node_modules/@html-eslint/template-syntax-parser": {
"version": "0.57.0",
"resolved": "https://registry.npmjs.org/@html-eslint/template-syntax-parser/-/template-syntax-parser-0.57.0.tgz",
"integrity": "sha512-vHp5y4TR+HhgMDi3rAkgm90LBptSZaQUJudZSj+WdvnSBjLe/fgJC4aVjtLVHTS9ynORrFio8AmH1Bz20kYk4g==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/template-syntax-parser/-/template-syntax-parser-0.58.1.tgz",
"integrity": "sha512-P1ZhxIPm9qFWSees2/EZ7Etg1OXziqzRZEuI9goO91fJS6dmdT4JnHLugN06FLL706RwpvenBUlE0iZA9/MXdg==",
"dev": true,
"dependencies": {
"@html-eslint/types": "^0.57.0"
"@html-eslint/types": "^0.58.1"
}
},
"node_modules/@html-eslint/types": {
"version": "0.57.0",
"resolved": "https://registry.npmjs.org/@html-eslint/types/-/types-0.57.0.tgz",
"integrity": "sha512-wZAHc9FHZRVAcKyx1NdMNGpw1Jo/Anh+9y+bTQ/cKjh5MHJlbs8ogthIG8efBVFIVlIgzxEA8yrX+DPXmuWisA==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/types/-/types-0.58.1.tgz",
"integrity": "sha512-1F2A5XXpgfHQ8dm14E/EztyERoVldT91VGMZCJECZpidf5Cbc21vxeHLT6/POTJm0ICJOmyBlocF62i/rkoVEQ==",
"dev": true,
"dependencies": {
"@types/css-tree": "^2.3.11",
"@types/estree": "^1.0.6",
"es-html-parser": "0.3.1",
"eslint": "^9.39.1"
"es-html-parser": "0.3.1"
}
},
"node_modules/@humanfs/core": {
@@ -17029,9 +17013,9 @@
}
},
"node_modules/jasmine-core": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-6.0.1.tgz",
"integrity": "sha512-gUtzV5ASR0MLBwDNqri4kBsgKNCcRQd9qOlNw/w/deavD0cl3JmWXXfH8JhKM4LTg6LPTt2IOQ4px3YYfgh2Xg==",
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-6.1.0.tgz",
"integrity": "sha512-p/tjBw58O6vxKIWMlrU+yys8lqR3+l3UrqwNTT7wpj+dQ7N4etQekFM8joI+cWzPDYqZf54kN+hLC1+s5TvZvg==",
"dev": true
},
"node_modules/jasmine-spec-reporter": {
@@ -18577,12 +18561,6 @@
"url": "https://opencollective.com/unified"
}
},
"node_modules/mdn-data": {
"version": "2.23.0",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.23.0.tgz",
"integrity": "sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ==",
"dev": true
},
"node_modules/mdurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
@@ -28755,16 +28733,6 @@
"@types/json-schema": "^7.0.15"
}
},
"@eslint/css-tree": {
"version": "3.6.9",
"resolved": "https://registry.npmjs.org/@eslint/css-tree/-/css-tree-3.6.9.tgz",
"integrity": "sha512-3D5/OHibNEGk+wKwNwMbz63NMf367EoR4mVNNpxddCHKEb2Nez7z62J2U6YjtErSsZDoY0CsccmoUpdEbkogNA==",
"dev": true,
"requires": {
"mdn-data": "2.23.0",
"source-map-js": "^1.0.1"
}
},
"@eslint/eslintrc": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
@@ -29125,74 +29093,71 @@
}
},
"@html-eslint/core": {
"version": "0.57.0",
"resolved": "https://registry.npmjs.org/@html-eslint/core/-/core-0.57.0.tgz",
"integrity": "sha512-X/cKrOmXrxZSdgyKwtbaCuuJ1k/u82MK58Q6p1TzfwPatwIYx+icfBv1Vp1dLui0L0y1fwBW4H+TKhBf7mMKmg==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/core/-/core-0.58.1.tgz",
"integrity": "sha512-GHYDt2Q3ws9aa0/bmMhkv21ExQJnrjKY/iByjdBVp3lBq49wlzIzvAfcx4Bsp+RMV3oPZhzlnLhPpXLuVYt2mQ==",
"dev": true,
"requires": {
"@html-eslint/types": "^0.57.0",
"eslint": "^9.39.1",
"@html-eslint/types": "^0.58.1",
"html-standard": "^0.0.13"
}
},
"@html-eslint/eslint-plugin": {
"version": "0.57.1",
"resolved": "https://registry.npmjs.org/@html-eslint/eslint-plugin/-/eslint-plugin-0.57.1.tgz",
"integrity": "sha512-IDfdk3V27eebNpdXD2NLy/lnTSbUuKrro/6YJICBn/9aiXPXagNqWJB38qcSWEoxADbXfSSn17DJWcXvQTkHBg==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/eslint-plugin/-/eslint-plugin-0.58.1.tgz",
"integrity": "sha512-aizTTKbNF2sW+lXWP+uWBoo5Ud9xtUkr70+0pYhItwJF0yhRqLQ91PhW+9afC0daymQjn13MunzDPwGPG0seDg==",
"dev": true,
"requires": {
"@eslint/plugin-kit": "^0.4.1",
"@html-eslint/core": "^0.57.0",
"@html-eslint/parser": "^0.57.1",
"@html-eslint/template-parser": "^0.57.0",
"@html-eslint/template-syntax-parser": "^0.57.0",
"@html-eslint/types": "^0.57.0",
"@html-eslint/core": "^0.58.1",
"@html-eslint/parser": "^0.58.1",
"@html-eslint/template-parser": "^0.58.1",
"@html-eslint/template-syntax-parser": "^0.58.1",
"@html-eslint/types": "^0.58.1",
"@rviscomi/capo.js": "^2.1.0",
"html-standard": "^0.0.13"
}
},
"@html-eslint/parser": {
"version": "0.57.1",
"resolved": "https://registry.npmjs.org/@html-eslint/parser/-/parser-0.57.1.tgz",
"integrity": "sha512-nQ5vw7Os+Snjxq9hLLBak2bv502Obn77BNOWfGK2+GIrShxtGd8w1ehlKW3EB5/RQzqBk6VDK8nPfexlR3M7kg==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/parser/-/parser-0.58.1.tgz",
"integrity": "sha512-a87peH9HcVDrKZZIYdfMlPZ+72nIktAitKcdoHQevuaXWsgvDtClKihJyy5dZS9md6hIbCh62Og5gQRhl85ZMg==",
"dev": true,
"requires": {
"@eslint/css-tree": "^3.6.9",
"@html-eslint/template-syntax-parser": "^0.57.0",
"@html-eslint/types": "^0.57.0",
"@html-eslint/template-syntax-parser": "^0.58.1",
"@html-eslint/types": "^0.58.1",
"css-tree": "^3.1.0",
"es-html-parser": "0.3.1"
}
},
"@html-eslint/template-parser": {
"version": "0.57.0",
"resolved": "https://registry.npmjs.org/@html-eslint/template-parser/-/template-parser-0.57.0.tgz",
"integrity": "sha512-tddyBo4dEl4W4Ehxuyd6H4jsSqvsfL5F7Bj9/aFfdQyv36q7BGWM2BRHb6FMmYKAPGZ3VzyEbUlcqIwXpDkY3w==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/template-parser/-/template-parser-0.58.1.tgz",
"integrity": "sha512-qo6jTc4Y6vVgwPc2w+EQigH7uCAn+LExxE5oG1URRT98UiJ7dItX0Qk44r/+5XQwSS1TsdvBNLxM2NAktETSWA==",
"dev": true,
"requires": {
"@html-eslint/types": "^0.57.0",
"@html-eslint/types": "^0.58.1",
"es-html-parser": "0.3.1"
}
},
"@html-eslint/template-syntax-parser": {
"version": "0.57.0",
"resolved": "https://registry.npmjs.org/@html-eslint/template-syntax-parser/-/template-syntax-parser-0.57.0.tgz",
"integrity": "sha512-vHp5y4TR+HhgMDi3rAkgm90LBptSZaQUJudZSj+WdvnSBjLe/fgJC4aVjtLVHTS9ynORrFio8AmH1Bz20kYk4g==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/template-syntax-parser/-/template-syntax-parser-0.58.1.tgz",
"integrity": "sha512-P1ZhxIPm9qFWSees2/EZ7Etg1OXziqzRZEuI9goO91fJS6dmdT4JnHLugN06FLL706RwpvenBUlE0iZA9/MXdg==",
"dev": true,
"requires": {
"@html-eslint/types": "^0.57.0"
"@html-eslint/types": "^0.58.1"
}
},
"@html-eslint/types": {
"version": "0.57.0",
"resolved": "https://registry.npmjs.org/@html-eslint/types/-/types-0.57.0.tgz",
"integrity": "sha512-wZAHc9FHZRVAcKyx1NdMNGpw1Jo/Anh+9y+bTQ/cKjh5MHJlbs8ogthIG8efBVFIVlIgzxEA8yrX+DPXmuWisA==",
"version": "0.58.1",
"resolved": "https://registry.npmjs.org/@html-eslint/types/-/types-0.58.1.tgz",
"integrity": "sha512-1F2A5XXpgfHQ8dm14E/EztyERoVldT91VGMZCJECZpidf5Cbc21vxeHLT6/POTJm0ICJOmyBlocF62i/rkoVEQ==",
"dev": true,
"requires": {
"@types/css-tree": "^2.3.11",
"@types/estree": "^1.0.6",
"es-html-parser": "0.3.1",
"eslint": "^9.39.1"
"es-html-parser": "0.3.1"
}
},
"@humanfs/core": {
@@ -36867,9 +36832,9 @@
}
},
"jasmine-core": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-6.0.1.tgz",
"integrity": "sha512-gUtzV5ASR0MLBwDNqri4kBsgKNCcRQd9qOlNw/w/deavD0cl3JmWXXfH8JhKM4LTg6LPTt2IOQ4px3YYfgh2Xg==",
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-6.1.0.tgz",
"integrity": "sha512-p/tjBw58O6vxKIWMlrU+yys8lqR3+l3UrqwNTT7wpj+dQ7N4etQekFM8joI+cWzPDYqZf54kN+hLC1+s5TvZvg==",
"dev": true
},
"jasmine-spec-reporter": {
@@ -37986,12 +37951,6 @@
"@types/mdast": "^4.0.0"
}
},
"mdn-data": {
"version": "2.23.0",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.23.0.tgz",
"integrity": "sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ==",
"dev": true
},
"mdurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+3 -3
View File
@@ -14,8 +14,8 @@
"@angular-eslint/template-parser": "20.7.0",
"@angular/language-service": "21.1.6",
"@eslint/js": "^9.39.2",
"@html-eslint/eslint-plugin": "^0.57.1",
"@html-eslint/parser": "^0.57.1",
"@html-eslint/eslint-plugin": "^0.58.1",
"@html-eslint/parser": "^0.58.1",
"@jsdevtools/coverage-istanbul-loader": "3.0.5",
"@stylistic/eslint-plugin": "^5.7.1",
"@types/codemirror": "5.60.5",
@@ -48,7 +48,7 @@
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.0.1",
"globals": "^17.3.0",
"jasmine-core": "~6.0.1",
"jasmine-core": "~6.1.0",
"jasmine-spec-reporter": "~7.0.0",
"karma": "~6.4.4",
"karma-chrome-launcher": "~3.2.0",
@@ -7,7 +7,6 @@ import {
ElementRef,
HostListener,
Input,
NgZone,
OnDestroy,
ViewChild,
ViewEncapsulation,
@@ -141,7 +140,6 @@ export class GlobalSearchInputComponent implements AfterViewInit, OnDestroy {
readonly deviceService:DeviceService,
readonly cdRef:ChangeDetectorRef,
readonly halNotification:HalResourceNotificationService,
readonly ngZone:NgZone,
readonly recentItemsService:RecentItemsService,
) {
populateInputsFromDataset(this);
@@ -34,13 +34,14 @@ import { HalLink } from 'core-app/features/hal/hal-link/hal-link';
export class BcfThumbnailDisplayField extends DisplayField {
@InjectField() bcfPathHelper:BcfPathHelperService;
public render(element:HTMLElement, displayText:string):void {
const viewpoints = this.resource.bcfViewpoints;
public render(element:HTMLElement, _displayText:string):void {
const viewpoints = this.resource.bcfViewpoints as HalLink[];
if (viewpoints && viewpoints.length > 0) {
const viewpoint = viewpoints[0];
element.innerHTML = `
<img src="${this.bcfPathHelper.snapshotPath(viewpoint as HalLink)}" class="thumbnail" alt="">
`;
const img = document.createElement('img');
img.src = this.bcfPathHelper.snapshotPath(viewpoint);
img.classList.add('thumbnail');
element.appendChild(img);
} else {
element.innerHTML = '';
}
@@ -27,7 +27,7 @@
//++
import {
ChangeDetectionStrategy, Component, Input, NgZone, OnInit,
ChangeDetectionStrategy, Component, Input, OnInit,
} from '@angular/core';
import { UIRouterGlobals } from '@uirouter/core';
import { States } from 'core-app/core/states/states.service';
@@ -81,8 +81,6 @@ export class BcfListComponent extends WorkPackageListViewComponent implements Un
@InjectField() bcfApi:BcfApiService;
@InjectField() zone:NgZone;
public wpTableConfiguration = {
dragAndDropEnabled: false,
};
@@ -105,9 +103,7 @@ export class BcfListComponent extends WorkPackageListViewComponent implements Un
if (!this.showViewPointInFlight) {
this.showViewPointInFlight = true;
this.zone.runOutsideAngular(() => {
setTimeout(() => { this.showViewPointInFlight = false; }, 500);
});
setTimeout(() => { this.showViewPointInFlight = false; }, 500);
const wp = this.states.workPackages.get(workPackageId).value;
@@ -1,4 +1,4 @@
import { ApplicationRef, Injector, NgZone } from '@angular/core';
import { ApplicationRef, Injector } from '@angular/core';
import { ToastService } from 'core-app/shared/components/toaster/toast.service';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import {
@@ -89,8 +89,13 @@ export class OpenProjectPluginContext {
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
public readonly hooks:Record<string, (callback:(...args:any[]) => unknown) => void> = {};
// Angular zone reference
@InjectField() public readonly zone:NgZone;
/**
* @deprecated Noop shim the app is zoneless. Remove usages.
*/
public readonly zone = {
run: <T>(cb:() => T):T => cb(),
runOutsideAngular: <T>(cb:() => T):T => cb(),
};
// Angular application reference
@InjectField() public readonly appRef:ApplicationRef;
@@ -105,12 +110,10 @@ export class OpenProjectPluginContext {
}
/**
* Run the given callback in the angular zone,
* resulting in triggered change detection that would otherwise not occur.
*
* @param cb
* @deprecated This method is a no-op since the app is zoneless.
* Replace calls with direct invocation of the callback.
*/
public runInZone(cb:() => void) {
this.zone.run(cb);
cb();
}
}
@@ -0,0 +1,81 @@
//-- 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.
//++
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { FormsModule } from '@angular/forms';
import { By } from '@angular/platform-browser';
import { I18nService } from 'core-app/core/i18n/i18n.service';
import { CustomDateActionAdminComponent } from './custom-date-action-admin.component';
describe('CustomDateActionAdminComponent', () => {
let fixture:ComponentFixture<CustomDateActionAdminComponent>;
let component:CustomDateActionAdminComponent;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [CustomDateActionAdminComponent],
imports: [FormsModule],
providers: [
{
provide: I18nService,
useValue: {
t:(key:string) => {
switch (key) {
case 'js.custom_actions.date.specific':
return 'on';
case 'js.custom_actions.date.current_date':
return 'Current date';
default:
return key;
}
},
},
},
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
fixture = TestBed.createComponent(CustomDateActionAdminComponent);
component = fixture.componentInstance;
fixture.nativeElement.dataset.fieldName = 'custom_action[actions][date]';
});
it('stores the current date sentinel when the operator is changed to current date', () => {
fixture.detectChanges();
const select = fixture.debugElement.query(By.css('select')).nativeElement as HTMLSelectElement;
const hiddenInput = fixture.debugElement.query(By.css('input[type="hidden"]')).nativeElement as HTMLInputElement;
select.value = 'current';
select.dispatchEvent(new Event('change'));
expect(component.selectedOperatorKey).toBe('current');
expect(hiddenInput.value).toBe('%CURRENT_DATE%');
});
});
@@ -94,6 +94,7 @@ export class CustomDateActionAdminComponent implements OnInit {
}
this.updateDbValue();
this.cdRef.detectChanges();
}
private updateDbValue() {
@@ -94,14 +94,12 @@ export class WorkPackageRelationsAutocompleteComponent extends OpAutocompleterCo
opened() {
// Force reposition as a workaround for BUG
// https://github.com/ng-select/ng-select/issues/1259
this.ngZone.runOutsideAngular(() => {
setTimeout(() => {
this.ngSelectInstance.dropdownPanel.adjustPosition();
document.querySelector(this.hiddenOverflowContainer)?.addEventListener('scroll', () => {
this.ngSelectInstance.close();
}, { once: true });
}, 25);
});
setTimeout(() => {
this.ngSelectInstance.dropdownPanel.adjustPosition();
document.querySelector(this.hiddenOverflowContainer)?.addEventListener('scroll', () => {
this.ngSelectInstance.close();
}, { once: true });
}, 25);
}
getAutocompleterData(query:string|null):Observable<HalResource[]> {
@@ -34,7 +34,6 @@ import {
EventEmitter,
Injector,
Input,
NgZone,
OnInit,
Output,
ViewEncapsulation, OnDestroy,
@@ -144,7 +143,6 @@ export class WorkPackagesTableComponent extends UntilDestroyedMixin implements O
readonly querySpace:IsolatedQuerySpace,
readonly I18n:I18nService,
readonly cdRef:ChangeDetectorRef,
readonly zone:NgZone,
readonly wpTableGroupBy:WorkPackageViewGroupByService,
readonly wpTableTimeline:WorkPackageViewTimelineService,
readonly wpTableColumns:WorkPackageViewColumnsService,
@@ -33,7 +33,6 @@ import {
ElementRef,
inject,
Injector,
NgZone,
OnInit,
} from '@angular/core';
import { take } from 'rxjs/operators';
@@ -83,8 +82,7 @@ export class WorkPackageListViewComponent extends UntilDestroyedMixin implements
readonly CurrentProject = inject(CurrentProjectService);
readonly wpDisplayRepresentation = inject(WorkPackageViewDisplayRepresentationService);
readonly cdRef = inject(ChangeDetectorRef);
readonly elementRef = inject(ElementRef);
readonly ngZone = inject(NgZone);
readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);
readonly wpTableBaseline = inject(WorkPackageViewBaselineService);
readonly pathHelper = inject(PathHelperService);
@@ -135,24 +133,21 @@ export class WorkPackageListViewComponent extends UntilDestroyedMixin implements
// the 'back button', the last selected card is visible on this list.
// ngAfterViewInit doesn't find the .-checked elements on components
// that inherit from this class (BcfListContainerComponent) so
// opting for a timeout 'runOutsideAngular' to avoid running change
// detection on the entire app
this.ngZone.runOutsideAngular(() => {
setTimeout(() => {
const selectedRow = this.elementRef.nativeElement.querySelector('.wp-table--row.-checked');
const selectedCard = this.elementRef.nativeElement.querySelector('[data-test-selector="op-wp-single-card"].-checked');
// opting for a timeout to defer until the DOM is ready
setTimeout(() => {
const selectedRow = this.elementRef.nativeElement.querySelector('.wp-table--row.-checked');
const selectedCard = this.elementRef.nativeElement.querySelector('[data-test-selector="op-wp-single-card"].-checked');
// The header of the table hides the scrolledIntoView element
// so we scrollIntoView the previous element, if any
if (selectedRow?.previousSibling) {
selectedRow.previousSibling.scrollIntoView({ block: 'start' });
}
// The header of the table hides the scrolledIntoView element
// so we scrollIntoView the previous element, if any
if (selectedRow?.previousElementSibling) {
selectedRow.previousElementSibling.scrollIntoView({ block: 'start' });
}
if (selectedCard) {
selectedCard.scrollIntoView({ block: 'start' });
}
}, 0);
});
if (selectedCard) {
selectedCard.scrollIntoView({ block: 'start' });
}
}, 0);
}
protected setupInformationLoadedListener() {
@@ -12,7 +12,6 @@ import {
HostBinding,
Injector,
Input,
NgZone,
OnChanges,
OnInit,
Output,
@@ -306,7 +305,6 @@ export class OpAutocompleterComponent<T extends IAutocompleteItem = IAutocomplet
readonly http:HttpClient,
readonly apiV3Service:ApiV3Service,
readonly cdRef:ChangeDetectorRef,
readonly ngZone:NgZone,
readonly vcRef:ViewContainerRef,
readonly I18n:I18nService,
readonly halResourceService:HalResourceService,
@@ -412,11 +410,9 @@ export class OpAutocompleterComponent<T extends IAutocompleteItem = IAutocomplet
}
public focusSelect():void {
this.ngZone.runOutsideAngular(() => {
setTimeout(() => {
this.ngSelectInstance.focus();
}, 25);
});
setTimeout(() => {
this.ngSelectInstance.focus();
}, 25);
}
public closed():void {
@@ -34,6 +34,10 @@ $pagination--font-size: 0.8125rem
width: 100%
min-height: 45px
&--single-page
@media screen and (max-width: $breakpoint-sm)
display: none
&--pages
display: flex
flex-grow: 2
@@ -0,0 +1,71 @@
/*
* -- 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.
* ++
*/
import { Controller } from '@hotwired/stimulus';
export default class UpdateOccurrenceParticipantsController extends Controller {
static targets = ['removeButton', 'controlCheckbox'];
// Tracks checkbox state so it isn't reset after every action
// Initially true to match the rendered default
private applyToUpcoming = true;
controlCheckboxTargetConnected(element:HTMLInputElement):void {
element.checked = this.applyToUpcoming;
element.addEventListener('change', this.handleCheckboxChange);
}
controlCheckboxTargetDisconnected(element:HTMLInputElement):void {
element.removeEventListener('change', this.handleCheckboxChange);
}
removeButtonTargetConnected(element:HTMLAnchorElement):void {
element.addEventListener('click', this.handleRemoveClick);
}
removeButtonTargetDisconnected(element:HTMLAnchorElement):void {
element.removeEventListener('click', this.handleRemoveClick);
}
private handleCheckboxChange = (event:Event):void => {
this.applyToUpcoming = (event.target as HTMLInputElement).checked;
};
private handleRemoveClick = (event:MouseEvent):void => {
const button = event.currentTarget as HTMLAnchorElement;
const url = new URL(button.href);
if (this.applyToUpcoming) {
url.searchParams.set('apply_to_upcoming', '1');
} else {
url.searchParams.delete('apply_to_upcoming');
}
button.href = url.toString();
};
}
@@ -0,0 +1,60 @@
/*
* -- 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.
* ++
*/
/**
* Primer `<action-menu>` with `src` (via `Primer::Alpha::ActionMenu`) lazy loads
* the menu items via `<include-fragment>`.
* It registers `include-fragment-replaced` only in `connectedCallback`, while Turbo
* Idiomorph can leave the same `<action-menu>` host connected while swapping
* in a new `<include-fragment>`. Since the `<action-menu>` is not replaced, the fragment
* replaced event is never fired, the component will stay in a loading state after morph.
*
* Replacing each affected `<action-menu>` host forces `connectedCallback` and
* a correct listener. We hook `turbo:morph-element` so this applies to turbo-stream
* morph, frame morph, and full-page morph alike.
*/
interface TurboMorphElementDetail {
currentElement:HTMLElement;
newElement:HTMLElement;
}
export function registerActionMenuMorphRemount():void {
document.addEventListener('turbo:morph-element', (event:Event) => {
const { detail } = event as CustomEvent<TurboMorphElementDetail>;
const currentElement = detail?.currentElement;
if (!currentElement?.matches('action-menu:has(include-fragment[src])')) {
return;
}
const clone = currentElement.cloneNode(true);
currentElement.replaceWith(clone);
});
}
+2
View File
@@ -11,6 +11,7 @@ import { debugLog, whenDebugging } from 'core-app/shared/helpers/debug_output';
import { TURBO_EVENTS } from './constants';
import { StreamActions } from '@hotwired/turbo';
import { addTurboAngularWrapper } from 'core-turbo/turbo-angular-wrapper';
import { registerActionMenuMorphRemount } from './action-menu-morph-remount';
Turbo.session.drive = true;
Turbo.config.drive.progressBarDelay = 100;
@@ -37,6 +38,7 @@ whenDebugging(() => {
// Register our own actions
addTurboEventListeners();
addTurboGlobalListeners();
registerActionMenuMorphRemount();
registerDialogStreamAction();
registerFlashStreamAction();
registerLiveRegionStreamAction();
@@ -0,0 +1,55 @@
<%#-- copyright
OpenProject is an open source project management software.
Copyright (C) the OpenProject GmbH
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 3.
OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
Copyright (C) 2006-2013 Jean-Philippe Lang
Copyright (C) 2010-2013 the ChiliProject Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
See COPYRIGHT and LICENSE files for more details.
++#%>
<%=
render(
Primer::OpenProject::DangerDialog.new(
title: I18n.t("saml.delete_title"),
form_arguments:,
size: :large
)
) do |dialog|
%>
<% dialog.with_confirmation_message do |message|
message.with_heading(tag: :h2) { I18n.t("saml.delete_heading") }
message.with_description_content(
I18n.t("provider.delete_warning.provider_html", name: @provider.display_name)
)
end %>
<% dialog.with_additional_details do %>
<ul>
<li><%= I18n.t("provider.delete_warning.delete_result_1") %></li>
<li><%= I18n.t("provider.delete_warning.delete_result_user_count", count: @provider.user_count) %></li>
<% if direct_login? %>
<li><%= I18n.t("provider.delete_warning.delete_result_direct") %></li>
<% end %>
</ul>
<% end %>
<% dialog.with_confirmation_check_box_content(I18n.t(:text_permanent_delete_confirmation_checkbox_label)) %>
<% end %>
@@ -0,0 +1,53 @@
# frozen_string_literal: true
#-- copyright
# OpenProject is an open source project management software.
# Copyright (C) the OpenProject GmbH
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 3.
#
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
# Copyright (C) 2006-2013 Jean-Philippe Lang
# Copyright (C) 2010-2013 the ChiliProject Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# See COPYRIGHT and LICENSE files for more details.
#++
module Saml
module Providers
class ConfirmDestroyDialogComponent < ApplicationComponent
include OpTurbo::Streamable
def initialize(provider:)
super
@provider = provider
end
def form_arguments
{
action: saml_provider_path(@provider),
method: :delete
}
end
def direct_login?
Setting.omniauth_direct_login_provider == @provider.slug
end
end
end
end
@@ -51,8 +51,8 @@ module Saml
link_to(
helpers.op_icon("icon icon-delete button--link"),
url_for(action: :destroy, id: provider.id),
data: { turbo_method: :delete, turbo_confirm: I18n.t(:text_are_you_sure) },
url_for(action: :confirm_destroy, id: provider.id),
data: { turbo_stream: true },
title: t(:button_delete)
)
end
@@ -84,7 +84,9 @@ module Saml
end
end
def confirm_destroy; end
def confirm_destroy
respond_with_dialog Saml::Providers::ConfirmDestroyDialogComponent.new(provider: @provider)
end
def destroy
call = ::Saml::Providers::DeleteService
@@ -1,69 +0,0 @@
<%# -- 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.
++# %>
<%= styled_form_tag(
saml_provider_path(@provider),
class: "danger-zone",
method: :delete
) do %>
<section class="form--section">
<h3 class="form--section-title">
<%= t("saml.delete_title") %>
</h3>
<p>
<%= t("provider.delete_warning.provider_html", name: content_tag(:strong, @provider.display_name)) %>
</p>
<ul class="mb-3">
<li><%= t("provider.delete_warning.delete_result_1") %></li>
<li><%= t("provider.delete_warning.delete_result_user_count", count: @provider.user_count) %></li>
<% if Setting.omniauth_direct_login_provider == @provider.slug %>
<li><%= t("provider.delete_warning.delete_result_direct") %></li>
<% end %>
</ul>
<p class="danger-zone--warning">
<span class="icon icon-error"></span>
<span><%= t("provider.delete_warning.irreversible_notice") %></span>
</p>
<p>
<%= t("provider.delete_warning.input_delete_confirmation_html",
name: content_tag(:em, @provider.display_name, class: "danger-zone--expected-value")) %>
</p>
<div class="danger-zone--verification">
<%= text_field_tag :delete_confirmation %>
<%= styled_button_tag title: t(:button_delete), class: "-primary", disabled: true do
concat content_tag :i, "", class: "button--icon icon-delete"
concat content_tag :span, t(:button_delete), class: "button--text"
end %>
<%= link_to saml_providers_path,
title: t(:button_cancel),
class: "button -with-icon icon-cancel" do %>
<%= t(:button_cancel) %>
<% end %>
</div>
</section>
<% end %>
@@ -18,6 +18,7 @@
size: :medium,
href: confirm_destroy_saml_provider_path(@provider),
aria: { label: I18n.t(:button_delete) },
data: { turbo_stream: true },
title: I18n.t(:button_delete)
) do |button|
button.with_leading_visual_icon(icon: :trash)
@@ -34,6 +34,7 @@ af:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ ar:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ az:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ be:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ bg:
saml:
menu_title: Доставчици на SAML
delete_title: Изтриване на SAML доставчик
delete_heading: Delete this SAML provider?
info:
title: Параметри на конфигурацията на протокола SAML
description: 'Използвайте тези параметри, за да конфигурирате връзката на вашия доставчик на идентичност с OpenProject.
@@ -34,6 +34,7 @@ ca:
saml:
menu_title: Proveïdors SAML
delete_title: Suprimeix el proveïdor SAML
delete_heading: Delete this SAML provider?
info:
title: Paràmetres de configuració del protocol SAML
description: 'Utilitzeu aquests paràmetres per configurar la connexió del vostre proveïdor d''identitat a OpenProject.
@@ -34,6 +34,7 @@ ckb-IR:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ cs:
saml:
menu_title: Poskytovatelé SAML
delete_title: Smazat poskytovatele SAML
delete_heading: Delete this SAML provider?
info:
title: Parametry konfigurace SAML protokolu
description: 'Pomocí těchto parametrů nakonfigurujte připojení poskytovatele identit k aplikaci OpenProject.
@@ -34,6 +34,7 @@ da:
saml:
menu_title: SAML-udbydere
delete_title: Slet SAML-udbyder
delete_heading: Delete this SAML provider?
info:
title: SAML-protokolopsætnningsparametre
description: 'Brug disse parametre til at opsætte identitetsudbyderforbindelsen til OpenProject.
@@ -34,6 +34,7 @@ de:
saml:
menu_title: SAML-Anbieter
delete_title: SAML-Anbieter löschen
delete_heading: Delete this SAML provider?
info:
title: Konfigurationsparameter für das SAML-Protokoll
description: 'Verwenden Sie diese Parameter, um Ihre Identitätsanbieter-Verbindung zu OpenProject zu konfigurieren.
@@ -34,6 +34,7 @@ el:
saml:
menu_title: Πάροχοι SAML
delete_title: Διαγραφή παρόχου SAML
delete_heading: Delete this SAML provider?
info:
title: Παράμετροι Διαμόρφωσης Πρωτοκόλλου SAML
description: 'Χρησιμοποιήστε αυτές τις παραμέτρους για να ρυθμίσετε τη σύνδεση του παρόχου ταυτότητας με το OpenProject.
@@ -34,6 +34,7 @@ eo:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ es:
saml:
menu_title: Proveedores SAML
delete_title: Eliminar proveedor SAML
delete_heading: Delete this SAML provider?
info:
title: Parámetros de configuración del protocolo SAML
description: 'Utilice estos parámetros para configurar la conexión de su proveedor de identidad con OpenProject.
@@ -34,6 +34,7 @@ et:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ eu:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ fa:
saml:
menu_title: ارائه دهندگان سخت افزاری
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: پارامترهای پیکربندی پروتکل احراز هویت سخت افزاری
description: 'جهت پیکربندی ابزار احراز هویت سخت افزاری از این پارامترها استفاده نمایید.
@@ -34,6 +34,7 @@ fi:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ fil:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ fr:
saml:
menu_title: Fournisseurs SAML
delete_title: Supprimer le fournisseur SAML
delete_heading: Supprimer ce fournisseur SAML ?
info:
title: Paramètres de configuration du protocole SAML
description: 'Utilisez ces paramètres pour configurer la connexion de votre fournisseur d''identité à OpenProject.
@@ -34,6 +34,7 @@ he:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ hi:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ hr:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ hu:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ id:
saml:
menu_title: Penyedia SAML
delete_title: Hapus penyedia SAML
delete_heading: Delete this SAML provider?
info:
title: Parameter Konfigurasi Protokol SAML
description: 'Gunakan parameter ini untuk mengkonfigurasi koneksi penyedia identitas Anda ke OpenProject.
@@ -34,6 +34,7 @@ it:
saml:
menu_title: Fornitori SAML
delete_title: Elimina fornitore SAML
delete_heading: Eliminare questo provider SAML?
info:
title: Parametri di configurazione del protocollo SAML
description: 'Utilizzare questi parametri per configurare la connessione del fornitore di identità a OpenProject.
@@ -34,6 +34,7 @@ ja:
saml:
menu_title: SAML プロバイダ
delete_title: SAML プロバイダの削除
delete_heading: Delete this SAML provider?
info:
title: SAML プロトコル構成パラメータ
description: 'これらのパラメータを使用して、OpenProject への ID プロバイダ接続を設定します。
@@ -34,6 +34,7 @@ ka:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ kk:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ ko:
saml:
menu_title: SAML 공급자
delete_title: SAML 공급자 삭제
delete_heading: Delete this SAML provider?
info:
title: SAML 프로토콜 구성 매개 변수
description: '이러한 매개 변수를 사용하여 OpenProject에 대한 ID 공급자 연결을 구성합니다.
@@ -34,6 +34,7 @@ lt:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ lv:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ mn:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ ms:
saml:
menu_title: Penyedia SAML
delete_title: Padam Penyedia SAML
delete_heading: Delete this SAML provider?
info:
title: Parameter Konfigurasi Protokol SAML
description: 'Gunakan parameter ini untuk mengkonfigurasi sambungan pembekal identiti anda kepada OpenProject.
@@ -34,6 +34,7 @@ ne:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ nl:
saml:
menu_title: SAML-leveranciers
delete_title: SAML provider verwijderen
delete_heading: Delete this SAML provider?
info:
title: SAML-protocol configuratieparameters
description: 'Gebruik deze parameters om uw identity provider verbinding met OpenProject te configureren.
@@ -34,6 +34,7 @@
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ pl:
saml:
menu_title: Dostawcy SAML
delete_title: Usuń dostawcę SAML
delete_heading: Delete this SAML provider?
info:
title: Parametry konfiguracji protokołu SAML
description: 'Użyj tych parametrów, aby skonfigurować połączenie dostawcy tożsamości z OpenProject.
@@ -34,6 +34,7 @@ pt-BR:
saml:
menu_title: Provedores SAML
delete_title: Excluir provedor SAML
delete_heading: Deseja excluir este provedor SAML?
info:
title: Parâmetros de configuração do protocolo SAML
description: 'Use esses parâmetros para configurar a conexão do seu provedor de identidade ao OpenProject.
@@ -34,6 +34,7 @@ pt-PT:
saml:
menu_title: Fornecedores SAML
delete_title: Eliminar fornecedor SAML
delete_heading: Delete this SAML provider?
info:
title: Parâmetros de configuração do protocolo SAML
description: 'Utilize estes parâmetros para configurar a ligação do seu fornecedor de identidade ao OpenProject.
@@ -34,6 +34,7 @@ ro:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ ru:
saml:
menu_title: Провайдеры SAML
delete_title: Удалить провайдера SAML
delete_heading: Delete this SAML provider?
info:
title: Параметры конфигурации протокола SAML
description: 'Используйте эти параметры для настройки подключения провайдера идентификации.
@@ -34,6 +34,7 @@ rw:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ si:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ sk:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ sl:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ sr:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ sv:
saml:
menu_title: SAML leverantörer
delete_title: Ta bort SAML-leverantör
delete_heading: Delete this SAML provider?
info:
title: Konfigurationsparametrar för SAML-protokoll
description: 'Använd dessa parametrar för att konfigurera din identitetsleverantörsanslutning till OpenProject.
@@ -34,6 +34,7 @@ th:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ tr:
saml:
menu_title: SAML sağlayıcıları
delete_title: SAML sağlayıcısını sil
delete_heading: Delete this SAML provider?
info:
title: SAML Protokolü Yapılandırma Parametreleri
description: 'OpenProject ile kimlik sağlayıcı bağlantınızı yapılandırmak için bu parametreleri kullanın.
@@ -34,6 +34,7 @@ uk:
saml:
menu_title: Постачальники SAML
delete_title: Видалити постачальника SAML
delete_heading: Delete this SAML provider?
info:
title: Параметри конфігурації протоколу SAML
description: 'Використовуйте ці параметри, щоб налаштувати підключення свого постачальника ідентифікаційних даних в OpenProject.
@@ -34,6 +34,7 @@ uz:
saml:
menu_title: SAML providers
delete_title: Delete SAML provider
delete_heading: Delete this SAML provider?
info:
title: SAML Protocol Configuration Parameters
description: 'Use these parameters to configure your identity provider connection to OpenProject.
@@ -34,6 +34,7 @@ vi:
saml:
menu_title: Nhà cung cấp SAML
delete_title: Xóa nhà cung cấp SAML
delete_heading: Delete this SAML provider?
info:
title: Thông số cấu hình giao thức SAML
description: 'Sử dụng các tham số này để định cấu hình kết nối nhà cung cấp danh tính của bạn với OpenProject.
@@ -34,6 +34,7 @@ zh-CN:
saml:
menu_title: SAML 提供商
delete_title: 删除 SAML 提供商
delete_heading: 删除此 SAML 提供程序?
info:
title: SAML 协议配置参数
description: '使用这些参数配置您的身份提供商与 OpenProject 的连接。
@@ -34,6 +34,7 @@ zh-TW:
saml:
menu_title: SAML 提供商
delete_title: 刪除 SAML 提供者
delete_heading: Delete this SAML provider?
info:
title: SAML 通訊協定組態參數
description: '使用這些參數設定您與 OpenProject 的身分提供者連線。

Some files were not shown because too many files have changed in this diff Show More