+ [ndcDynamicInputs]="{ resource: workPackage }">
();
@@ -112,7 +112,7 @@ export class AttachmentListItemComponent {
this.removeAttachment.emit();
- if (!!this.selfDestroy) {
+ if (this.destroyImmediately) {
this
.resource
.removeAttachment(this.attachment);
diff --git a/frontend/src/app/modules/attachments/attachment-list/attachment-list.component.ts b/frontend/src/app/modules/attachments/attachment-list/attachment-list.component.ts
index d1fd9de98a..f8aae367b9 100644
--- a/frontend/src/app/modules/attachments/attachment-list/attachment-list.component.ts
+++ b/frontend/src/app/modules/attachments/attachment-list/attachment-list.component.ts
@@ -42,13 +42,15 @@ import {AngularTrackingHelpers} from "core-components/angular/tracking-functions
})
export class AttachmentListComponent implements OnInit, OnChanges, OnDestroy {
@Input() public resource:HalResource;
- @Input() public selfDestroy:boolean = false;
+ @Input() public destroyImmediately:boolean = true;
trackByHref = AngularTrackingHelpers.trackByHref;
attachments:HalResource[] = [];
+ deletedAttachments:HalResource[] = [];
public $element:JQuery;
+ public $formElement:JQuery;
constructor(protected elementRef:ElementRef,
protected states:States,
@@ -64,6 +66,10 @@ export class AttachmentListComponent implements OnInit, OnChanges, OnDestroy {
this.attachments = this.resource.attachments.elements;
this.setupResourceUpdateListener();
+
+ if (!this.destroyImmediately) {
+ this.setupAttachmentDeletionCallback();
+ }
}
public setupResourceUpdateListener() {
@@ -81,7 +87,9 @@ export class AttachmentListComponent implements OnInit, OnChanges, OnDestroy {
}
ngOnDestroy():void {
- // Nothing to do
+ if (!this.destroyImmediately) {
+ this.$formElement.off('submit.attachment-component');
+ }
}
ngOnChanges() {
@@ -91,6 +99,7 @@ export class AttachmentListComponent implements OnInit, OnChanges, OnDestroy {
}
public removeAttachment(attachment:HalResource) {
+ this.deletedAttachments.push(attachment);
this.attachments = this.attachments.filter((el) => el !== attachment);
this.cdRef.detectChanges();
}
@@ -98,6 +107,21 @@ export class AttachmentListComponent implements OnInit, OnChanges, OnDestroy {
private get attachmentsUpdatable() {
return (this.resource.attachments && this.resource.attachmentsBackend);
}
+
+ public setupAttachmentDeletionCallback() {
+ this.$formElement = this.$element.closest('form');
+ this.$formElement.on('submit.attachment-component', () => {
+ this.destroyRemovedAttachments();
+ });
+ }
+
+ private destroyRemovedAttachments() {
+ this.deletedAttachments.forEach((attachment) => {
+ this
+ .resource
+ .removeAttachment(attachment);
+ });
+ }
}
DynamicBootstrapper.register({
diff --git a/frontend/src/app/modules/attachments/attachment-list/attachment-list.html b/frontend/src/app/modules/attachments/attachment-list/attachment-list.html
index ae07c84b77..bc4881ef74 100644
--- a/frontend/src/app/modules/attachments/attachment-list/attachment-list.html
+++ b/frontend/src/app/modules/attachments/attachment-list/attachment-list.html
@@ -4,7 +4,7 @@
diff --git a/frontend/src/app/modules/attachments/attachments.component.ts b/frontend/src/app/modules/attachments/attachments.component.ts
index e33f41085b..5128bbffe3 100644
--- a/frontend/src/app/modules/attachments/attachments.component.ts
+++ b/frontend/src/app/modules/attachments/attachments.component.ts
@@ -42,14 +42,11 @@ import {filter, takeUntil} from 'rxjs/operators';
})
export class AttachmentsComponent implements OnInit, OnDestroy {
@Input('resource') public resource:HalResource;
- @Input() public selfDestroy:boolean = false;
public $element:JQuery;
public allowUploading:boolean;
public destroyImmediately:boolean;
public text:any;
- public $formElement:JQuery;
- public initialAttachments:HalResource[];
constructor(protected elementRef:ElementRef,
protected I18n:I18nService,
@@ -78,17 +75,11 @@ export class AttachmentsComponent implements OnInit, OnDestroy {
this.destroyImmediately = true;
}
- this.setupAttachmentDeletionCallback();
this.setupResourceUpdateListener();
}
- public setupAttachmentDeletionCallback() {
- this.memoizeCurrentAttachments();
-
- this.$formElement = this.$element.closest('form');
- this.$formElement.on('submit.attachment-component', () => {
- this.destroyRemovedAttachments();
- });
+ ngOnDestroy():void {
+ // nothing to do
}
public setupResourceUpdateListener() {
@@ -99,45 +90,14 @@ export class AttachmentsComponent implements OnInit, OnDestroy {
)
.subscribe((newResource:HalResource) => {
this.resource = newResource || this.resource;
-
- if (this.destroyImmediately) {
- this.destroyRemovedAttachments();
- this.memoizeCurrentAttachments();
- }
});
}
- ngOnDestroy() {
- this.$formElement.off('submit.attachment-component');
- }
-
// Only show attachment list when allow uploading is set
// or when at least one attachment exists
public showAttachments() {
return this.allowUploading || _.get(this.resource, 'attachments.count', 0) > 0;
}
-
- private destroyRemovedAttachments() {
- if (this.selfDestroy) {
- return;
- }
-
- let missingAttachments = _.differenceBy(this.initialAttachments,
- this.resource.attachments.elements,
- (attachment:HalResource) => attachment.id);
-
- if (missingAttachments.length) {
- missingAttachments.forEach((attachment) => {
- this
- .resource
- .removeAttachment(attachment);
- });
- }
- }
-
- private memoizeCurrentAttachments() {
- this.initialAttachments = _.clone(this.resource.attachments.elements);
- }
}
DynamicBootstrapper.register({ selector: 'attachments', cls: AttachmentsComponent, embeddable: true });
diff --git a/frontend/src/app/modules/attachments/attachments.html b/frontend/src/app/modules/attachments/attachments.html
index 648c7d8968..c521d159b3 100644
--- a/frontend/src/app/modules/attachments/attachments.html
+++ b/frontend/src/app/modules/attachments/attachments.html
@@ -5,7 +5,7 @@
+ [destroyImmediately]="destroyImmediately">
{
this.inFlight = false;
- board.sortWidgets();
return board;
})
.catch((error) => {
diff --git a/frontend/src/app/modules/boards/board/board.service.ts b/frontend/src/app/modules/boards/board/board.service.ts
index a6b8ea6b6f..2742043ba4 100644
--- a/frontend/src/app/modules/boards/board/board.service.ts
+++ b/frontend/src/app/modules/boards/board/board.service.ts
@@ -74,6 +74,7 @@ export class BoardService {
this.reorderWidgets(board);
return this.boardDm.save(board)
.then(board => {
+ board.sortWidgets();
this.boardCache.update(board);
return board;
});
diff --git a/frontend/src/app/modules/common/back-routing/back-routing.service.ts b/frontend/src/app/modules/common/back-routing/back-routing.service.ts
index f4261a308e..b0f545f295 100644
--- a/frontend/src/app/modules/common/back-routing/back-routing.service.ts
+++ b/frontend/src/app/modules/common/back-routing/back-routing.service.ts
@@ -46,7 +46,9 @@ export class BackRoutingService {
}
public goBack(preferListOverSplit:boolean = false) {
- if (!this.backRoute) {
+ // Default: back to list
+ // When coming from a deep link or a create form
+ if (!this.backRoute || this.backRoute.name.includes('new')) {
this.$state.go('work-packages.list', this.$state.params);
} else {
if (this.keepTab.isDetailsState(this.backRoute.parent)) {
diff --git a/frontend/src/app/modules/grids/widgets/custom-text/custom-text.component.html b/frontend/src/app/modules/grids/widgets/custom-text/custom-text.component.html
index f003a97bf3..561621a5c3 100644
--- a/frontend/src/app/modules/grids/widgets/custom-text/custom-text.component.html
+++ b/frontend/src/app/modules/grids/widgets/custom-text/custom-text.component.html
@@ -29,7 +29,6 @@
diff --git a/frontend/src/app/modules/grids/widgets/custom-text/custom-text.component.ts b/frontend/src/app/modules/grids/widgets/custom-text/custom-text.component.ts
index e285a4dfd5..1da78f2461 100644
--- a/frontend/src/app/modules/grids/widgets/custom-text/custom-text.component.ts
+++ b/frontend/src/app/modules/grids/widgets/custom-text/custom-text.component.ts
@@ -63,10 +63,11 @@ export class WidgetCustomTextComponent extends AbstractWidgetComponent implement
return;
}
- // load the attachments so that they are displayed in the list;
- this.resource.grid.updateAttachments();
-
- this.handler.activate();
+ // Load the attachments so that they are displayed in the list.
+ // Once that is done, we can show the edit form.
+ this.resource.grid.updateAttachments().then(() => {
+ this.handler.activate();
+ });
}
public get placeholderText() {
diff --git a/frontend/src/app/modules/hal/resources/mixins/attachable-mixin.ts b/frontend/src/app/modules/hal/resources/mixins/attachable-mixin.ts
index b65b13c8fc..7adbeb2c42 100644
--- a/frontend/src/app/modules/hal/resources/mixins/attachable-mixin.ts
+++ b/frontend/src/app/modules/hal/resources/mixins/attachable-mixin.ts
@@ -110,7 +110,7 @@ export function Attachable>(Base:TBase) {
}
/**
- * Get updated attachments and activities from the server and push the state
+ * Get updated attachments from the server and push the state
*
* Return a promise that returns the attachments. Reject, if the work package has
* no attachments.
diff --git a/lib/api/helpers/attachment_renderer.rb b/lib/api/helpers/attachment_renderer.rb
index 5ae693317f..49fbe4d4ff 100644
--- a/lib/api/helpers/attachment_renderer.rb
+++ b/lib/api/helpers/attachment_renderer.rb
@@ -43,7 +43,7 @@ module API
redirect attachment.external_url.to_s
else
content_type attachment.content_type
- header['Content-Disposition'] = attachment.content_disposition
+ header['Content-Disposition'] = "#{attachment.content_disposition}; filename=#{attachment.filename}"
env['api.format'] = :binary
attachment.diskfile.read
end
diff --git a/modules/avatars/config/locales/crowdin/es.yml b/modules/avatars/config/locales/crowdin/es.yml
index 515becc7ae..3e09c45b5c 100644
--- a/modules/avatars/config/locales/crowdin/es.yml
+++ b/modules/avatars/config/locales/crowdin/es.yml
@@ -1,39 +1,39 @@
es:
label_avatar: "Avatar"
- label_avatar_plural: "Avatars"
- label_current_avatar: "Current Avatar"
- label_choose_avatar: "Choose Avatar from file"
- message_avatar_uploaded: "Avatar changed successfully."
- error_image_upload: "Error saving the image."
- error_image_size: "The image is too large."
- button_change_avatar: "Change avatar"
- are_you_sure_delete_avatar: "Are you sure you want to delete your avatar?"
- avatar_deleted: "Avatar deleted successfully."
- unable_to_delete_avatar: "Avatar could not be deleted."
- wrong_file_format: "Allowed formats are jpg, png, gif"
- empty_file_error: "Please upload a valid image (jpg, png, gif)"
+ label_avatar_plural: "Avatares"
+ label_current_avatar: "Avatar actual"
+ label_choose_avatar: "Seleccionar avatar de un archivo"
+ message_avatar_uploaded: "El avatar se ha cambiado correctamente."
+ error_image_upload: "Error al guardar la imagen."
+ error_image_size: "El tamaño de la imagen es demasiado grande."
+ button_change_avatar: "Cambiar avatar"
+ are_you_sure_delete_avatar: "¿Está seguro de que quiere eliminar su avatar?"
+ avatar_deleted: "El avatar se ha eliminado correctamente."
+ unable_to_delete_avatar: "No se pudo eliminar el avatar."
+ wrong_file_format: "Los formatos permitidos son JPG, PNG y GIF"
+ empty_file_error: "Cargue un archivo de imagen válido (JPG, PNG o GIF)"
avatars:
label_avatar: "Avatar"
label_gravatar: 'Gravatar'
- label_current_avatar: 'Current avatar'
- label_local_avatar: 'Custom avatar'
+ label_current_avatar: 'Avatar actual'
+ label_local_avatar: 'Avatar personalizado'
text_current_avatar: |
- The following image shows the current avatar.
+ En la imagen siguiente, se muestra el avatar actual.
text_upload_instructions: |
- Upload your own custom avatar of 128 by 128 pixels. Larger files will be resized and cropped to match.
- A preview of your avatar will be shown before uploading, once you selected an image.
- text_change_gravatar_html: 'To change or add the Gravatar for your mail address, go to %{gravatar_url}.'
+ Cargue su propio avatar personalizado de 128 × 128 píxeles. Si se agregan archivos más grandes, se cambiará el tamaño y se recortará para que coincida.
+ Después de seleccionar una imagen, se mostrará una vista previa del avatar antes de cargarlo.
+ text_change_gravatar_html: 'Para cambiar o agregar el Gravatar a su dirección de correo electrónico, vaya a %{gravatar_url}.'
text_your_local_avatar: |
- OpenProject allows you to upload your own custom avatar.
+ OpenProject le permite cargar su propio avatar personalizado.
text_local_avatar_over_gravatar: |
- If you set one, this custom avatar is used in precedence over the gravatar above.
+ Si establece uno, este avatar personalizado se usará antes que el Gravatar anterior.
text_your_current_gravatar: |
- OpenProject uses your gravatar if you registered one, or a default image or icon if one exists.
- The current gravatar is as follows:
+ OpenProject usará su Gravatar (si registró uno) o usará una imagen o icono predeterminado (si existe).
+ El Gravatar actual es el siguiente:
settings:
- enable_gravatars: 'Enable user gravatars'
+ enable_gravatars: 'Habilitar Gravatar de usuario'
gravatar_default: "Imagen de gravatar por defecto"
- enable_local_avatars: 'Enable user custom avatars'
+ enable_local_avatars: 'Habilitar avatares personalizados de usuario'
diff --git a/modules/avatars/config/locales/crowdin/fr.yml b/modules/avatars/config/locales/crowdin/fr.yml
index ae85237894..063c37b6f3 100644
--- a/modules/avatars/config/locales/crowdin/fr.yml
+++ b/modules/avatars/config/locales/crowdin/fr.yml
@@ -28,12 +28,12 @@ fr:
text_local_avatar_over_gravatar: |
Si vous en avez défini un, cet avatar personnalisé sera utilisé à la place du gravatar ci-dessus.
text_your_current_gravatar: |
- OpenProject uses your gravatar if you registered one, or a default image or icon if one exists.
- The current gravatar is as follows:
+ OpenProject utilise votre gravatar si vous en possédez un, ou bien une image ou icône par défaut si celle-ci existe.
+ Le gravatar actuel est le suivant :
settings:
- enable_gravatars: 'Enable user gravatars'
+ enable_gravatars: 'Activer les gravatars de l''utilisateur'
gravatar_default: "Image Gravatar par défaut"
- enable_local_avatars: 'Enable user custom avatars'
+ enable_local_avatars: 'Activer les avatars personnalisés de l''utilisateur'
diff --git a/modules/avatars/config/locales/crowdin/js-es.yml b/modules/avatars/config/locales/crowdin/js-es.yml
index 8e117db159..ca75ef69ac 100644
--- a/modules/avatars/config/locales/crowdin/js-es.yml
+++ b/modules/avatars/config/locales/crowdin/js-es.yml
@@ -3,12 +3,12 @@ es:
label_preview: 'Vista preliminar'
button_update: 'Actualizar'
avatars:
- label_choose_avatar: "Choose Avatar from file"
- uploading_avatar: "Uploading your avatar."
+ label_choose_avatar: "Seleccionar avatar de un archivo"
+ uploading_avatar: "Cargando su avatar."
text_upload_instructions: |
- Upload your own custom avatar of 128 by 128 pixels. Larger files will be resized and cropped to match.
- A preview of your avatar will be shown before uploading, once you selected an image.
- error_image_too_large: "Image is too large."
- wrong_file_format: "Allowed formats are jpg, png, gif"
- empty_file_error: "Please upload a valid image (jpg, png, gif)"
+ Cargue su propio avatar personalizado de 128 × 128 píxeles. Si se agregan archivos más grandes, se cambiará el tamaño y se recortará para que coincida.
+ Después de seleccionar una imagen, se mostrará una vista previa del avatar antes de cargarlo.
+ error_image_too_large: "La imagen es demasiado grande."
+ wrong_file_format: "Los formatos permitidos son JPG, PNG y GIF"
+ empty_file_error: "Cargue un archivo de imagen válido (JPG, PNG o GIF)"
diff --git a/modules/avatars/config/locales/crowdin/js-fr.yml b/modules/avatars/config/locales/crowdin/js-fr.yml
index 4cb69511c1..c423ff8155 100644
--- a/modules/avatars/config/locales/crowdin/js-fr.yml
+++ b/modules/avatars/config/locales/crowdin/js-fr.yml
@@ -4,11 +4,11 @@ fr:
button_update: 'Mettre à jour'
avatars:
label_choose_avatar: "Choisir un avatar depuis un fichier"
- uploading_avatar: "Uploading your avatar."
+ uploading_avatar: "Chargement de votre avatar."
text_upload_instructions: |
Téléchargez votre propre avatar personnalisé de 128 par 128 pixels. Les fichiers plus gros seront redimensionnés et recadrés pour correspondre.
Un aperçu de votre avatar sera affiché avant le téléchargement, une fois que vous aurez sélectionné une image.
- error_image_too_large: "Image is too large."
+ error_image_too_large: "L'image est trop grande."
wrong_file_format: "Les formats autorisés sont Jpg, Png et Gif"
empty_file_error: "Veuillez téléverser une image valide (Jpg, Png, Gif)"
diff --git a/modules/avatars/config/locales/crowdin/js-ko.yml b/modules/avatars/config/locales/crowdin/js-ko.yml
index a890653c0c..8fc8f504ea 100644
--- a/modules/avatars/config/locales/crowdin/js-ko.yml
+++ b/modules/avatars/config/locales/crowdin/js-ko.yml
@@ -4,11 +4,11 @@ ko:
button_update: '업데이트'
avatars:
label_choose_avatar: "파일에서 아바타 선택"
- uploading_avatar: "Uploading your avatar."
+ uploading_avatar: "아바타를 업로드 중입니다."
text_upload_instructions: |
- Upload your own custom avatar of 128 by 128 pixels. Larger files will be resized and cropped to match.
- A preview of your avatar will be shown before uploading, once you selected an image.
- error_image_too_large: "Image is too large."
+ 128 × 128픽셀 크기의 사용자 지정 아바타를 업로드하십시오. 더 큰 파일은 이 크기에 맞게 조정되고 잘립니다.
+ 이미지를 선택하면, 업로드하기 전에 아바타의 미리 보기가 표시됩니다.
+ error_image_too_large: "이미지가 너무 큽니다."
wrong_file_format: "허용된 형식은 jpg, png, gif입니다."
empty_file_error: "유효한 이미지(jpg, png, gif)를 업로드하십시오."
diff --git a/modules/avatars/config/locales/crowdin/js-pl.yml b/modules/avatars/config/locales/crowdin/js-pl.yml
index bedc0dccbb..a8ece58a4d 100644
--- a/modules/avatars/config/locales/crowdin/js-pl.yml
+++ b/modules/avatars/config/locales/crowdin/js-pl.yml
@@ -3,12 +3,12 @@ pl:
label_preview: 'Podgląd'
button_update: 'Aktualizacja'
avatars:
- label_choose_avatar: "Choose Avatar from file"
- uploading_avatar: "Uploading your avatar."
+ label_choose_avatar: "Wybierz awatar z pliku"
+ uploading_avatar: "Przesyłanie tego awatara."
text_upload_instructions: |
- Upload your own custom avatar of 128 by 128 pixels. Larger files will be resized and cropped to match.
- A preview of your avatar will be shown before uploading, once you selected an image.
- error_image_too_large: "Image is too large."
- wrong_file_format: "Allowed formats are jpg, png, gif"
- empty_file_error: "Please upload a valid image (jpg, png, gif)"
+ Prześlij swój własny awatar 128 na 128 pikseli. Rozmiar większych plików zostanie zmieniony i zostaną one odpowiednio przycięte.
+ Podgląd awatara zostanie wyświetlony przed przesłaniem, po wybraniu obrazu.
+ error_image_too_large: "Obraz jest zbyt duży."
+ wrong_file_format: "Dozwolone są formaty jpg, png, gif"
+ empty_file_error: "Prześlij prawidłowy obraz (jpg, png, gif)"
diff --git a/modules/avatars/config/locales/crowdin/js-pt.yml b/modules/avatars/config/locales/crowdin/js-pt.yml
index 73382872d5..62461fc758 100644
--- a/modules/avatars/config/locales/crowdin/js-pt.yml
+++ b/modules/avatars/config/locales/crowdin/js-pt.yml
@@ -6,7 +6,7 @@ pt:
label_choose_avatar: "Escolher Avatar a partir de ficheiro"
uploading_avatar: "A carregar o seu avatar."
text_upload_instructions: |
- Carregue o seu próprio avatar personalizado de 128 por 128 pixels. Os ficheiros maiores serão redimensionados e cortados para coincidir.
+ Carregue o seu avatar personalizado de 128 por 128 pixels. Os ficheiros maiores serão redimensionados e cortados para coincidir.
Será mostrada uma visualização do seu avatar antes do carregamento, uma vez que selecionou uma imagem.
error_image_too_large: "A imagem é grande demais."
wrong_file_format: "Os formatos permitidos são jpg, png, gif"
diff --git a/modules/avatars/config/locales/crowdin/ko.yml b/modules/avatars/config/locales/crowdin/ko.yml
index 89bf9ba671..3d8d881e5d 100644
--- a/modules/avatars/config/locales/crowdin/ko.yml
+++ b/modules/avatars/config/locales/crowdin/ko.yml
@@ -14,26 +14,26 @@ ko:
empty_file_error: "유효한 이미지(jpg, png, gif)를 업로드하십시오."
avatars:
label_avatar: "아바타"
- label_gravatar: '그라바타'
+ label_gravatar: 'Gravatar'
label_current_avatar: '현재 아바타'
label_local_avatar: '사용자 지정 아바타'
text_current_avatar: |
다음 이미지는 현재 아바타를 보여줍니다.
text_upload_instructions: |
- Upload your own custom avatar of 128 by 128 pixels. Larger files will be resized and cropped to match.
- A preview of your avatar will be shown before uploading, once you selected an image.
- text_change_gravatar_html: 'To change or add the Gravatar for your mail address, go to %{gravatar_url}.'
+ 128 × 128픽셀 크기의 사용자 지정 아바타를 업로드하십시오. 더 큰 파일은 이 크기에 맞게 조정되고 잘립니다.
+ 이미지를 선택하면, 업로드하기 전에 아바타의 미리 보기가 표시됩니다.
+ text_change_gravatar_html: '메일 주소에 대한 Gravatar를 변경하거나 추가하려면 %{gravatar_url}(으)로 이동하십시오.'
text_your_local_avatar: |
- OpenProject allows you to upload your own custom avatar.
+ OpenProject에서 사용자 지정 아바타를 업로드할 수 있습니다.
text_local_avatar_over_gravatar: |
- If you set one, this custom avatar is used in precedence over the gravatar above.
+ 사용자 지정 아바타를 설정하는 경우, 이 아바타가 위의 Gravatar보다 우선하여 사용됩니다.
text_your_current_gravatar: |
- OpenProject uses your gravatar if you registered one, or a default image or icon if one exists.
- The current gravatar is as follows:
+ 사용자가 Gravatar를 등록한 경우 OpenProject는 해당 Gravatar를 사용합니다. 또는 기본 이미지나 아이콘이 존재하는 경우 이를 사용합니다.
+ 현재 Gravatar는 다음과 같습니다.
settings:
- enable_gravatars: 'Enable user gravatars'
+ enable_gravatars: '사용자 Gravatar 사용'
gravatar_default: "기본 Gravatar 이미지"
- enable_local_avatars: 'Enable user custom avatars'
+ enable_local_avatars: '사용자 커스텀 Gravatar 사용'
diff --git a/modules/avatars/config/locales/crowdin/pl.yml b/modules/avatars/config/locales/crowdin/pl.yml
index 677dc2671e..d9771a0f6b 100644
--- a/modules/avatars/config/locales/crowdin/pl.yml
+++ b/modules/avatars/config/locales/crowdin/pl.yml
@@ -1,39 +1,39 @@
pl:
- label_avatar: "Avatar"
- label_avatar_plural: "Avatars"
- label_current_avatar: "Current Avatar"
- label_choose_avatar: "Choose Avatar from file"
- message_avatar_uploaded: "Avatar changed successfully."
- error_image_upload: "Error saving the image."
- error_image_size: "The image is too large."
- button_change_avatar: "Change avatar"
- are_you_sure_delete_avatar: "Are you sure you want to delete your avatar?"
- avatar_deleted: "Avatar deleted successfully."
- unable_to_delete_avatar: "Avatar could not be deleted."
- wrong_file_format: "Allowed formats are jpg, png, gif"
- empty_file_error: "Please upload a valid image (jpg, png, gif)"
+ label_avatar: "Awatar"
+ label_avatar_plural: "Awatary"
+ label_current_avatar: "Bieżący awatar"
+ label_choose_avatar: "Wybierz awatar z pliku"
+ message_avatar_uploaded: "Awatar został zmieniony."
+ error_image_upload: "Błąd podczas zapisywania obrazu."
+ error_image_size: "Obraz jest za duży."
+ button_change_avatar: "Zmień awatar"
+ are_you_sure_delete_avatar: "Czy na pewno chcesz usunąć ten awatar?"
+ avatar_deleted: "Awatar został usunięty."
+ unable_to_delete_avatar: "Nie można usunąć awatara."
+ wrong_file_format: "Dozwolone są formaty jpg, png, gif"
+ empty_file_error: "Prześlij prawidłowy obraz (jpg, png, gif)"
avatars:
- label_avatar: "Avatar"
+ label_avatar: "Awatar"
label_gravatar: 'Gravatar'
- label_current_avatar: 'Current avatar'
- label_local_avatar: 'Custom avatar'
+ label_current_avatar: 'Bieżący awatar'
+ label_local_avatar: 'Awatar niestandardowy'
text_current_avatar: |
- The following image shows the current avatar.
+ Poniższy obraz przedstawia aktualny awatar.
text_upload_instructions: |
- Upload your own custom avatar of 128 by 128 pixels. Larger files will be resized and cropped to match.
- A preview of your avatar will be shown before uploading, once you selected an image.
- text_change_gravatar_html: 'To change or add the Gravatar for your mail address, go to %{gravatar_url}.'
+ Prześlij swój własny awatar 128 na 128 pikseli. Rozmiar większych plików zostanie zmieniony i zostaną one odpowiednio przycięte.
+ Podgląd awatara zostanie wyświetlony przed przesłaniem, po wybraniu obrazu.
+ text_change_gravatar_html: 'Aby zmienić lub dodać Gravatar dla tego adresu e-mail, przejdź na stronę %{gravatar_url}.'
text_your_local_avatar: |
- OpenProject allows you to upload your own custom avatar.
+ OpenProject umożliwia przesłanie własnego, niestandardowego awatara.
text_local_avatar_over_gravatar: |
- If you set one, this custom avatar is used in precedence over the gravatar above.
+ Jeśli go ustawisz, ten niestandardowy awatar będzie używany w pierwszej kolejności przed powyższym Gravatarem.
text_your_current_gravatar: |
- OpenProject uses your gravatar if you registered one, or a default image or icon if one exists.
- The current gravatar is as follows:
+ OpenProject używa Gravatara, jeśli użytkownik go zarejestrował albo domyślnego obrazu lub ikony, jeśli taka istnieje.
+ Bieżący Gravatar jest następujący:
settings:
- enable_gravatars: 'Enable user gravatars'
+ enable_gravatars: 'Włącz Gravatary użytkownika'
gravatar_default: "Domyślny obraz Gravatar"
- enable_local_avatars: 'Enable user custom avatars'
+ enable_local_avatars: 'Włącz niestandardowe awatary użytkownika'
diff --git a/modules/avatars/config/locales/crowdin/pt.yml b/modules/avatars/config/locales/crowdin/pt.yml
index 8d25d7d8e1..86a90a1832 100644
--- a/modules/avatars/config/locales/crowdin/pt.yml
+++ b/modules/avatars/config/locales/crowdin/pt.yml
@@ -20,15 +20,15 @@ pt:
text_current_avatar: |
A seguinte imagem mostra o avatar atual.
text_upload_instructions: |
- Carregue o seu próprio avatar personalizado de 128 por 128 pixels. Os ficheiros maiores serão redimensionados e cortados para coincidir.
+ Carregue o seu avatar personalizado de 128 por 128 pixels. Os ficheiros maiores serão redimensionados e cortados para coincidir.
Será mostrada uma visualização do seu avatar antes do carregamento, uma vez que selecionou uma imagem.
text_change_gravatar_html: 'Para alterar ou adicionar o Gravatar ao seu endereço de email, vá a %{gravatar_url}.'
text_your_local_avatar: |
- O OpenProject permite que carregue o seu próprio avatar personalizado.
+ O OpenProject permite que carregue o seu avatar personalizado.
text_local_avatar_over_gravatar: |
Se definir um, este avatar personalizado será usado em precedência sobre o gravatar acima.
text_your_current_gravatar: |
- O OpenProject usa o seu gravatar caso tenha registado um, ou uma imagem ou ícone padrão caso exista.
+ O OpenProject usa o seu gravatar caso tenha registado algum, ou uma imagem ou ícone padrão caso exista.
O gravatar atual é o seguinte:
settings:
enable_gravatars: 'Ativar Gravatars de utilizadores'
diff --git a/modules/avatars/config/locales/crowdin/zh-CN.yml b/modules/avatars/config/locales/crowdin/zh-CN.yml
index 18312fef91..c60551654b 100644
--- a/modules/avatars/config/locales/crowdin/zh-CN.yml
+++ b/modules/avatars/config/locales/crowdin/zh-CN.yml
@@ -8,8 +8,8 @@ zh-CN:
error_image_size: "图像太大。"
button_change_avatar: "更改头像"
are_you_sure_delete_avatar: "确定要删除头像吗?"
- avatar_deleted: "头像删除成功。"
- unable_to_delete_avatar: "头像无法删除。"
+ avatar_deleted: "成功删除头像。"
+ unable_to_delete_avatar: "无法删除头像。"
wrong_file_format: "允许的格式是 jpg、png、gif"
empty_file_error: "请上传一张有效的图像(jpg、png、gif)"
avatars:
@@ -28,7 +28,7 @@ zh-CN:
text_local_avatar_over_gravatar: |
如果您设置了一个自定义头像,则此头像将优先于上面的 Gravatar。
text_your_current_gravatar: |
- OpenProject 将使用您的 Gravatar(如果已注册)或默认图像或图标(如果存在)。
+ OpenProject 将使用您的 Gravatar(如果已注册)或者默认图像或图标(如果存在)。
当前头像如下:
settings:
enable_gravatars: '启用用户 Gravatar'
diff --git a/modules/bcf/config/locales/crowdin/es.yml b/modules/bcf/config/locales/crowdin/es.yml
index 80d8c4ecb6..4696444351 100644
--- a/modules/bcf/config/locales/crowdin/es.yml
+++ b/modules/bcf/config/locales/crowdin/es.yml
@@ -1,62 +1,62 @@
es:
bcf:
label_bcf: 'BCF'
- label_imported_failed: 'Failed imports of BCF topics'
- label_imported_successfully: 'Successfully imported BCF topics'
- issues: "Issues"
- recommended: 'recommended'
- not_recommended: 'not recommended'
- no_viewpoints: 'No viewpoints'
+ label_imported_failed: 'No se pudieron importar los temas de BCF'
+ label_imported_successfully: 'Los temas de BCF se importaron correctamente'
+ issues: "Problemas"
+ recommended: 'recomendado'
+ not_recommended: 'no recomendado'
+ no_viewpoints: 'Sin áreas de visualización'
new_badge: "Nuevo"
exceptions:
- file_invalid: "BCF file invalid"
+ file_invalid: "Archivo BCF no válido"
x_bcf_issues:
- one: 'One BCF issue'
- other: '%{count} BCF issues'
+ one: 'Un problema de BCF'
+ other: '%{count} problemas de BCF'
bcf_xml:
- xml_file: 'BCF XML File'
+ xml_file: 'Archivo XML de BCF'
import_title: 'Importar'
export: 'Exportar'
- import_update_comment: '(Updated in BCF import)'
- import_failed: 'Cannot import BCF file: %{error}'
- import_successful: 'Imported %{count} BCF issues'
- import_canceled: 'BCF-XML import canceled.'
- type_not_active: "The issue type is not activated for this project."
+ import_update_comment: '(Actualizado en la importación de BCF)'
+ import_failed: 'No se puede importar el archivo BCF: %{error}'
+ import_successful: 'Se importaron %{count} problemas de BCF'
+ import_canceled: 'La importación de BCF-XML se ha cancelado.'
+ type_not_active: "El tipo de problema no está activo para este proyecto."
import:
- num_issues_found: '%{x_bcf_issues} are contained in the BCF-XML file, their details are listed below.'
- button_prepare: 'Prepare import'
- button_perform_import: 'Confirm import'
- button_proceed: 'Proceed'
- button_back_to_list: 'Back to list'
- no_permission_to_add_members: 'You do not have sufficient permissions to add them as members to the project.'
- contact_project_admin: 'Contact your project admin to add them as members and start this import again.'
- continue_anyways: 'Do you want to proceed and finish the import anyways?'
- description: "Provide a BCF-XML v2.1 file to import into this project. You can examine its contents before performing the import."
- invalid_types_found: 'Invalid topic type names found'
- invalid_statuses_found: 'Invalid status names found'
- invalid_priorities_found: 'Invalid priority names found'
- invalid_emails_found: 'Invalid email addresses found'
- unknown_emails_found: 'Unknown email addresses found'
- unknown_property: 'Unknown property'
- non_members_found: 'Non project members found'
- import_types_as: 'Set all these types to'
- import_statuses_as: 'Set all these statuses to'
- import_priorities_as: 'Set all these priorities to'
- invite_as_members_with_role: 'Invite them as members to the project "%{project}" with role'
- add_as_members_with_role: 'Add them as members to the project "%{project}" with role'
- no_type_provided: 'No type provided'
- no_status_provided: 'No status provided'
- no_priority_provided: 'No priority provided'
- perform_description: "Do you want to import or update the issues listed above?"
- replace_with_system_user: 'Replace them with "System" user'
- import_as_system_user: 'Import them as "System" user.'
+ num_issues_found: '%{x_bcf_issues} están presentes en el archivo BCF-XML y a continuación se muestran los detalles.'
+ button_prepare: 'Preparar importación'
+ button_perform_import: 'Confirmar importación'
+ button_proceed: 'Continuar'
+ button_back_to_list: 'Volver a la lista'
+ no_permission_to_add_members: 'No tiene permisos suficientes para agregarlos como miembros al proyecto.'
+ contact_project_admin: 'Póngase en contacto con el administrador del proyecto para agregarlos como miembros y vuelva a iniciar esta importación.'
+ continue_anyways: '¿Quiere continuar y finalizar la importación de todas formas?'
+ description: "Proporcione un archivo BCF-XML v2.1 para importarlo en este proyecto. Puede examinar el contenido antes de realizar la importación."
+ invalid_types_found: 'Se encontraron nombres de tipo de tema no válidos'
+ invalid_statuses_found: 'Se encontraron nombres de estado no válidos'
+ invalid_priorities_found: 'Se encontraron nombres de prioridad no válidos'
+ invalid_emails_found: 'Se encontraron direcciones de correo electrónico no válidas'
+ unknown_emails_found: 'Se encontraron direcciones de correo electrónico desconocidas'
+ unknown_property: 'Propiedad desconocida'
+ non_members_found: 'No se encontraron miembros del proyecto'
+ import_types_as: 'Establecer todos estos tipos en'
+ import_statuses_as: 'Establecer todos estos estados en'
+ import_priorities_as: 'Establecer todas estas prioridades en'
+ invite_as_members_with_role: 'Invitarlos como miembros de proyecto “%{project}” con el rol'
+ add_as_members_with_role: 'Agregarlos como miembros de proyecto “%{project}” con el rol'
+ no_type_provided: 'No se ha especificado ningún tipo'
+ no_status_provided: 'No se ha especificado ningún estado'
+ no_priority_provided: 'No se ha especificado ninguna prioridad'
+ perform_description: "¿Quiere importar o actualizar los problemas de la lista anterior?"
+ replace_with_system_user: 'Reemplazarlos con el usuario “System”'
+ import_as_system_user: 'Se importan como el usuario “System”.'
what_to_do: "¿Qué quieres hacer?"
- work_package_has_newer_changes: "Outdated! This topic was not updated as the latest changes on the server were newer than the \"ModifiedDate\" of the imported topic. However, comments to the topic were imported."
+ work_package_has_newer_changes: "No actualizado. Este tema no está actualizado, ya que los últimos cambios en el servidor eran más recientes que la fecha de modificación del tema importado. Sin embargo, se importaron los comentarios en el tema."
export:
format:
bcf: "BCF-XML"
attributes:
- bcf_thumbnail: "BCF snapshot"
+ bcf_thumbnail: "Instantánea de BCF"
project_module_bcf: "BCF"
- permission_view_linked_issues: "View BCF issues"
- permission_manage_bcf: "Import and manage BCF issues"
+ permission_view_linked_issues: "Ver problemas de BCF"
+ permission_manage_bcf: "Importar y administrar problemas de BCF"
diff --git a/modules/bcf/config/locales/crowdin/fr.yml b/modules/bcf/config/locales/crowdin/fr.yml
index 7b12368700..18979e64ce 100644
--- a/modules/bcf/config/locales/crowdin/fr.yml
+++ b/modules/bcf/config/locales/crowdin/fr.yml
@@ -1,62 +1,62 @@
fr:
bcf:
label_bcf: 'BCF'
- label_imported_failed: 'Failed imports of BCF topics'
- label_imported_successfully: 'Successfully imported BCF topics'
- issues: "Issues"
- recommended: 'recommended'
- not_recommended: 'not recommended'
- no_viewpoints: 'No viewpoints'
+ label_imported_failed: 'Impossible d''importer les sujets BCF'
+ label_imported_successfully: 'Sujets BCF importés avec succès'
+ issues: "Problèmes"
+ recommended: 'recommandé'
+ not_recommended: 'déconseillé'
+ no_viewpoints: 'Aucun point de vue'
new_badge: "nouveau"
exceptions:
- file_invalid: "BCF file invalid"
+ file_invalid: "Fichier BCF invalide"
x_bcf_issues:
- one: 'One BCF issue'
- other: '%{count} BCF issues'
+ one: 'Un problème BCF'
+ other: '%{count} problèmes BCF'
bcf_xml:
- xml_file: 'BCF XML File'
+ xml_file: 'Fichier XML BCF'
import_title: 'Importer'
export: 'Exporter'
- import_update_comment: '(Updated in BCF import)'
- import_failed: 'Cannot import BCF file: %{error}'
- import_successful: 'Imported %{count} BCF issues'
- import_canceled: 'BCF-XML import canceled.'
- type_not_active: "The issue type is not activated for this project."
+ import_update_comment: '(Mis à jour dans l''importation BCF)'
+ import_failed: 'Impossible d''importer le fichier BCF : %{error}'
+ import_successful: '%{count} problèmes BCF importés'
+ import_canceled: 'Importation BCF-XML annulée.'
+ type_not_active: "Le type de problème n'est pas activé pour ce projet."
import:
- num_issues_found: '%{x_bcf_issues} are contained in the BCF-XML file, their details are listed below.'
- button_prepare: 'Prepare import'
- button_perform_import: 'Confirm import'
- button_proceed: 'Proceed'
- button_back_to_list: 'Back to list'
- no_permission_to_add_members: 'You do not have sufficient permissions to add them as members to the project.'
- contact_project_admin: 'Contact your project admin to add them as members and start this import again.'
- continue_anyways: 'Do you want to proceed and finish the import anyways?'
- description: "Provide a BCF-XML v2.1 file to import into this project. You can examine its contents before performing the import."
- invalid_types_found: 'Invalid topic type names found'
- invalid_statuses_found: 'Invalid status names found'
- invalid_priorities_found: 'Invalid priority names found'
- invalid_emails_found: 'Invalid email addresses found'
- unknown_emails_found: 'Unknown email addresses found'
- unknown_property: 'Unknown property'
- non_members_found: 'Non project members found'
- import_types_as: 'Set all these types to'
- import_statuses_as: 'Set all these statuses to'
- import_priorities_as: 'Set all these priorities to'
- invite_as_members_with_role: 'Invite them as members to the project "%{project}" with role'
- add_as_members_with_role: 'Add them as members to the project "%{project}" with role'
- no_type_provided: 'No type provided'
- no_status_provided: 'No status provided'
- no_priority_provided: 'No priority provided'
- perform_description: "Do you want to import or update the issues listed above?"
- replace_with_system_user: 'Replace them with "System" user'
- import_as_system_user: 'Import them as "System" user.'
+ num_issues_found: '%{x_bcf_issues} sont contenus dans le fichier BCF-XML, leurs détails sont repris ci-dessous.'
+ button_prepare: 'Préparer l''importation'
+ button_perform_import: 'Confirmer l''importation'
+ button_proceed: 'Continuer'
+ button_back_to_list: 'Retour à la liste'
+ no_permission_to_add_members: 'Vous n''avez pas les autorisations suffisantes pour les ajouter en tant que membres du projet.'
+ contact_project_admin: 'Contactez votre administrateur du projet pour les ajouter en tant que membres et recommencer cette importation.'
+ continue_anyways: 'Voulez-vous quand même continuer et terminer l''importation ?'
+ description: "Fournissez un fichier BCF-XML v2.1 à importer dans ce projet. Vous pouvez examiner son contenu avant d'effectuer l'importation."
+ invalid_types_found: 'Un nom de type de sujet invalide a été trouvé'
+ invalid_statuses_found: 'Un nom de statut invalide a été trouvé'
+ invalid_priorities_found: 'Des noms de priorité invalides ont été trouvés'
+ invalid_emails_found: 'Des adresses e-mail invalides ont été trouvées'
+ unknown_emails_found: 'Des adresses e-mail inconnues ont été trouvées'
+ unknown_property: 'Propriété inconnue'
+ non_members_found: 'Aucun membre du projet n''a été trouvé'
+ import_types_as: 'Définir tous ces types comme'
+ import_statuses_as: 'Définir tous ces statuts comme'
+ import_priorities_as: 'Définir toutes ces priorités comme'
+ invite_as_members_with_role: 'Les inviter en tant que membres du projet "%{project}" avec un rôle'
+ add_as_members_with_role: 'Les ajouter en tant que membres du projet "%{project}" avec un rôle'
+ no_type_provided: 'Aucun type fourni'
+ no_status_provided: 'Aucun statut fourni'
+ no_priority_provided: 'Aucune priorité fournie'
+ perform_description: "Voulez-vous importer ou mettre à jour les problèmes repris ci-dessus ?"
+ replace_with_system_user: 'Les remplacer par l''utilisateur "Système"'
+ import_as_system_user: 'Les importer comme utilisateur "Système".'
what_to_do: "Que voulez-vous faire?"
- work_package_has_newer_changes: "Outdated! This topic was not updated as the latest changes on the server were newer than the \"ModifiedDate\" of the imported topic. However, comments to the topic were imported."
+ work_package_has_newer_changes: "Obsolète ! Ce sujet n'a pas été mis à jour, car les derniers changements sur le serveur étaient plus récents que la \"ModifiedDate\" du sujet importé. Toutefois, les commentaires sur le sujet ont été importés."
export:
format:
bcf: "BCF-XML"
attributes:
- bcf_thumbnail: "BCF snapshot"
+ bcf_thumbnail: "Capture d'écran BCF"
project_module_bcf: "BCF"
permission_view_linked_issues: "Voir les problèmes BCF"
permission_manage_bcf: "Importer et gérer les problèmes BCF"
diff --git a/modules/bcf/config/locales/crowdin/ko.yml b/modules/bcf/config/locales/crowdin/ko.yml
index 58aac2ac49..b33ed2b499 100644
--- a/modules/bcf/config/locales/crowdin/ko.yml
+++ b/modules/bcf/config/locales/crowdin/ko.yml
@@ -1,28 +1,28 @@
ko:
bcf:
label_bcf: 'BCF'
- label_imported_failed: 'Failed imports of BCF topics'
- label_imported_successfully: 'Successfully imported BCF topics'
- issues: "Issues"
- recommended: 'recommended'
- not_recommended: 'not recommended'
- no_viewpoints: 'No viewpoints'
+ label_imported_failed: 'BCF 항목 가져오기 실패'
+ label_imported_successfully: 'BCF 항목 가져오기 성공'
+ issues: "이슈"
+ recommended: '추천'
+ not_recommended: '추천하지 않음'
+ no_viewpoints: '뷰포인트 없음'
new_badge: "새로 만들기"
exceptions:
- file_invalid: "BCF file invalid"
+ file_invalid: "잘못된 BCF 파일"
x_bcf_issues:
- other: '%{count} BCF issues'
+ other: '%{count}개 BCF 이슈'
bcf_xml:
xml_file: 'BCF XML 파일'
import_title: '가져오기'
export: '내보내기'
import_update_comment: '(BCF 가져오기에서 업데이트됨)'
import_failed: 'BCF 파일을 가져올 수 없음: %{error}'
- import_successful: 'Imported %{count} BCF issues'
- import_canceled: 'BCF-XML import canceled.'
- type_not_active: "The issue type is not activated for this project."
+ import_successful: '%{count}개 BCF 이슈 가져옴'
+ import_canceled: 'BCF-XML 가져오기가 취소되었습니다.'
+ type_not_active: "이 프로젝트에 대해 해당 이슈 유형이 활성화되지 않았습니다."
import:
- num_issues_found: '%{x_bcf_issues} are contained in the BCF-XML file, their details are listed below.'
+ num_issues_found: '%{x_bcf_issues}은(는) BCF-XML 파일에 포함되어 있지 않습니다. 세부 정보는 아래에 나와 있습니다.'
button_prepare: '가져오기 준비'
button_perform_import: '가져오기 확인'
button_proceed: '계속하기'
@@ -30,32 +30,32 @@ ko:
no_permission_to_add_members: '프로젝트에 멤버로 추가할 권한이 부족합니다.'
contact_project_admin: '프로젝트 관리자에게 문의하여 멤버로 추가한 후 이 가져오기를 다시 시작하십시오.'
continue_anyways: '그래도 가져오기를 계속하고 마치시겠습니까?'
- description: "Provide a BCF-XML v2.1 file to import into this project. You can examine its contents before performing the import."
- invalid_types_found: 'Invalid topic type names found'
- invalid_statuses_found: 'Invalid status names found'
- invalid_priorities_found: 'Invalid priority names found'
- invalid_emails_found: 'Invalid email addresses found'
- unknown_emails_found: 'Unknown email addresses found'
- unknown_property: 'Unknown property'
- non_members_found: 'Non project members found'
- import_types_as: 'Set all these types to'
- import_statuses_as: 'Set all these statuses to'
- import_priorities_as: 'Set all these priorities to'
- invite_as_members_with_role: 'Invite them as members to the project "%{project}" with role'
- add_as_members_with_role: 'Add them as members to the project "%{project}" with role'
- no_type_provided: 'No type provided'
- no_status_provided: 'No status provided'
- no_priority_provided: 'No priority provided'
- perform_description: "Do you want to import or update the issues listed above?"
- replace_with_system_user: 'Replace them with "System" user'
- import_as_system_user: 'Import them as "System" user.'
+ description: "이 프로젝트에 가져올 BCF-XML v2.1 파일을 제공하십시오. 가져오기를 수행하기 전에 해당 내용을 검사할 수 있습니다."
+ invalid_types_found: '잘못된 항목 유형 이름이 발견됨'
+ invalid_statuses_found: '잘못된 상태 이름이 발견됨'
+ invalid_priorities_found: '잘못된 우선 순위 이름이 발견됨'
+ invalid_emails_found: '잘못된 이메일 주소가 발견됨'
+ unknown_emails_found: '알 수 없는 이메일 주소가 발견됨'
+ unknown_property: '알 수 없는 속성'
+ non_members_found: '프로젝트 멤버를 찾지 못함'
+ import_types_as: '모든 해당 유형을 다음으로 설정:'
+ import_statuses_as: '모든 해당 상태를 다음으로 설정:'
+ import_priorities_as: '모든 해당 우선 순위를 다음으로 설정:'
+ invite_as_members_with_role: '다음 역할의 사용자를 멤버로 "%{project}" 프로젝트에 초대:'
+ add_as_members_with_role: '다음 역할의 사용자를 멤버로 "%{project}" 프로젝트에 추가:'
+ no_type_provided: '제공된 유형 없음'
+ no_status_provided: '제공된 상태 없음'
+ no_priority_provided: '제공된 우선 순위 없음'
+ perform_description: "위에 나열된 이슈를 가져오거나 업데이트하시겠습니까?"
+ replace_with_system_user: '이들을 "시스템" 사용자로 바꾸기'
+ import_as_system_user: '이들을 "시스템" 사용자로 가져오기'
what_to_do: "어떤 작업을 수행하시겠습니까?"
- work_package_has_newer_changes: "Outdated! This topic was not updated as the latest changes on the server were newer than the \"ModifiedDate\" of the imported topic. However, comments to the topic were imported."
+ work_package_has_newer_changes: "오래된 내용입니다! 서버의 최신 변경 사항은 가져온 항목의 \"수정된 날짜\"보다 최신이므로 이 항목이 업데이트되지 않았습니다. 그러나 이 항목에 대한 코멘트는 가져왔습니다."
export:
format:
bcf: "BCF-XML"
attributes:
- bcf_thumbnail: "BCF snapshot"
+ bcf_thumbnail: "BCF 스냅샷"
project_module_bcf: "BCF"
- permission_view_linked_issues: "View BCF issues"
- permission_manage_bcf: "Import and manage BCF issues"
+ permission_view_linked_issues: "BCF 이슈 보기"
+ permission_manage_bcf: "BCF 이슈 가져오기 및 관리"
diff --git a/modules/bcf/config/locales/crowdin/pl.yml b/modules/bcf/config/locales/crowdin/pl.yml
index 4b8afd826d..a0b74874f6 100644
--- a/modules/bcf/config/locales/crowdin/pl.yml
+++ b/modules/bcf/config/locales/crowdin/pl.yml
@@ -1,64 +1,64 @@
pl:
bcf:
label_bcf: 'BCF'
- label_imported_failed: 'Failed imports of BCF topics'
- label_imported_successfully: 'Successfully imported BCF topics'
- issues: "Issues"
- recommended: 'recommended'
- not_recommended: 'not recommended'
- no_viewpoints: 'No viewpoints'
+ label_imported_failed: 'Nieudane importy tematów BCF'
+ label_imported_successfully: 'Zaimportowane z powodzeniem tematy BCF'
+ issues: "Problemy"
+ recommended: 'zalecane'
+ not_recommended: 'niezalecane'
+ no_viewpoints: 'Brak punktów widzenia'
new_badge: "Nowy"
exceptions:
- file_invalid: "BCF file invalid"
+ file_invalid: "Nieprawidłowy plik BCF"
x_bcf_issues:
- one: 'One BCF issue'
- few: '%{count} BCF issues'
- many: '%{count} BCF issues'
- other: '%{count} BCF issues'
+ one: 'Jeden problem BCF'
+ few: '%{count} problemy BCF'
+ many: '%{count} problemów BCF'
+ other: '%{count} problemów BCF'
bcf_xml:
- xml_file: 'BCF XML File'
+ xml_file: 'Plik BCF-XML'
import_title: 'Importuj'
export: 'Eksportuj'
- import_update_comment: '(Updated in BCF import)'
- import_failed: 'Cannot import BCF file: %{error}'
- import_successful: 'Imported %{count} BCF issues'
- import_canceled: 'BCF-XML import canceled.'
- type_not_active: "The issue type is not activated for this project."
+ import_update_comment: '(Zaktualizowano w imporcie BCF)'
+ import_failed: 'Nie można zaimportować pliku BCF: %{error}'
+ import_successful: 'Zaimportowano problemy BCF (%{count})'
+ import_canceled: 'Anulowano import BCF-XML.'
+ type_not_active: "Typ problemu nie jest aktywowany dla tego projektu."
import:
- num_issues_found: '%{x_bcf_issues} are contained in the BCF-XML file, their details are listed below.'
- button_prepare: 'Prepare import'
- button_perform_import: 'Confirm import'
- button_proceed: 'Proceed'
- button_back_to_list: 'Back to list'
- no_permission_to_add_members: 'You do not have sufficient permissions to add them as members to the project.'
- contact_project_admin: 'Contact your project admin to add them as members and start this import again.'
- continue_anyways: 'Do you want to proceed and finish the import anyways?'
- description: "Provide a BCF-XML v2.1 file to import into this project. You can examine its contents before performing the import."
- invalid_types_found: 'Invalid topic type names found'
- invalid_statuses_found: 'Invalid status names found'
- invalid_priorities_found: 'Invalid priority names found'
- invalid_emails_found: 'Invalid email addresses found'
- unknown_emails_found: 'Unknown email addresses found'
- unknown_property: 'Unknown property'
- non_members_found: 'Non project members found'
- import_types_as: 'Set all these types to'
- import_statuses_as: 'Set all these statuses to'
- import_priorities_as: 'Set all these priorities to'
- invite_as_members_with_role: 'Invite them as members to the project "%{project}" with role'
- add_as_members_with_role: 'Add them as members to the project "%{project}" with role'
- no_type_provided: 'No type provided'
- no_status_provided: 'No status provided'
- no_priority_provided: 'No priority provided'
- perform_description: "Do you want to import or update the issues listed above?"
- replace_with_system_user: 'Replace them with "System" user'
- import_as_system_user: 'Import them as "System" user.'
+ num_issues_found: 'Plik BCF-XML zawiera %{x_bcf_issues}, ich szczegóły są wyświetlane poniżej.'
+ button_prepare: 'Przygotuj import'
+ button_perform_import: 'Potwierdź import'
+ button_proceed: 'Kontynuuj'
+ button_back_to_list: 'Powrót do listy'
+ no_permission_to_add_members: 'Nie masz wystarczających uprawnień, aby dodać ich jako członków do projektu.'
+ contact_project_admin: 'Skontaktuj się z administratorem projektu, aby dodać ich jako członków i ponownie uruchomić ten import.'
+ continue_anyways: 'Czy chcesz kontynuować i dokończyć import?'
+ description: "Podaj plik BCF-XML v2.1 w celu zaimportowania go do tego projektu. Przed wykonaniem importu możesz sprawdzić jego zawartość."
+ invalid_types_found: 'Znalezione nieprawidłowe nazwy typów tematów'
+ invalid_statuses_found: 'Znalezione nieprawidłowe nazwy stanów'
+ invalid_priorities_found: 'Znalezione nieprawidłowe nazwy priorytetów'
+ invalid_emails_found: 'Znaleziono nieprawidłowe adresy email'
+ unknown_emails_found: 'Znaleziono nieznane adresy email'
+ unknown_property: 'Nieznana właściwość'
+ non_members_found: 'Nie znaleziono członków projektu'
+ import_types_as: 'Ustaw wszystkie te typy na'
+ import_statuses_as: 'Ustaw wszystkie te stany na'
+ import_priorities_as: 'Ustaw wszystkie te priorytety na'
+ invite_as_members_with_role: 'Zaproś ich jako członków do projektu "%{project}" z rolą'
+ add_as_members_with_role: 'Dodaj ich jako członków do projektu "%{project}" z rolą'
+ no_type_provided: 'Nie podano typu'
+ no_status_provided: 'Nie podano stanu'
+ no_priority_provided: 'Nie podano priorytetu'
+ perform_description: "Czy chcesz zaimportować lub zaktualizować wyżej wymienione problemy?"
+ replace_with_system_user: 'Zastąp ich użytkownikiem "System"'
+ import_as_system_user: 'Zaimportuj ich jako użytkownika "System".'
what_to_do: "Co chcesz zrobić?"
- work_package_has_newer_changes: "Outdated! This topic was not updated as the latest changes on the server were newer than the \"ModifiedDate\" of the imported topic. However, comments to the topic were imported."
+ work_package_has_newer_changes: "Przestarzały! Ten temat nie został zaktualizowany, ponieważ najnowsze zmiany na serwerze były nowsze niż data modyfikacji (\"ModifiedDate\") importowanego tematu. Komentarze do tematu zostały natomiast zaimportowane."
export:
format:
bcf: "BCF-XML"
attributes:
- bcf_thumbnail: "BCF snapshot"
+ bcf_thumbnail: "Migawka BCF"
project_module_bcf: "BCF"
- permission_view_linked_issues: "View BCF issues"
- permission_manage_bcf: "Import and manage BCF issues"
+ permission_view_linked_issues: "Wyświetlanie problemów BCF"
+ permission_manage_bcf: "Importowanie problemów BCF i zarządzanie nimi"
diff --git a/modules/bcf/config/locales/crowdin/zh-CN.yml b/modules/bcf/config/locales/crowdin/zh-CN.yml
index 9a97a84a5c..758b7627d8 100644
--- a/modules/bcf/config/locales/crowdin/zh-CN.yml
+++ b/modules/bcf/config/locales/crowdin/zh-CN.yml
@@ -2,7 +2,7 @@ zh-CN:
bcf:
label_bcf: 'BCF'
label_imported_failed: '导入 BCF 主题失败'
- label_imported_successfully: '成功导入 BCF 主题'
+ label_imported_successfully: '已成功导入 BCF 主题'
issues: "问题"
recommended: '推荐'
not_recommended: '不推荐'
@@ -18,9 +18,9 @@ zh-CN:
export: '导出'
import_update_comment: '(在 BCF 导入中更新)'
import_failed: '无法导入 BCF 文件:%{error}'
- import_successful: '导入了 %{count} 个 BCF 问题'
+ import_successful: '已导入 %{count} 个 BCF 问题'
import_canceled: 'BCF-XML 导入已取消。'
- type_not_active: "此项目未激活问题类型。"
+ type_not_active: "此项目未激活该问题类型。"
import:
num_issues_found: '%{x_bcf_issues} 包含在 BCF-XML 文件中,其详细信息在下面列出。'
button_prepare: '准备导入'
@@ -29,7 +29,7 @@ zh-CN:
button_back_to_list: '返回列表'
no_permission_to_add_members: '您没有足够的权限将它们添加为项目的成员。'
contact_project_admin: '请联系您的项目管理员将它们添加为成员,然后重新开始导入。'
- continue_anyways: '您是否仍要继续完成导入?'
+ continue_anyways: '仍要继续完成导入?'
description: "提供一个 BCF-XML v2.1 文件以导入到此项目中。您可以在执行导入之前检查其内容。"
invalid_types_found: '找到无效的主题类型名称'
invalid_statuses_found: '找到无效的状态名称'
@@ -41,14 +41,14 @@ zh-CN:
import_types_as: '将所有这些类型设置为'
import_statuses_as: '将所有这些状态设置为'
import_priorities_as: '将所有这些优先级设置为'
- invite_as_members_with_role: '使用以下角色邀请它们作为项目“%{project}”的成员'
- add_as_members_with_role: '使用以下角色将它们添加为项目“%{project}”的成员'
+ invite_as_members_with_role: '使用以下角色邀请他们作为项目“%{project}”的成员'
+ add_as_members_with_role: '使用以下角色将他们添加为项目“%{project}”的成员'
no_type_provided: '未提供类型'
no_status_provided: '未提供状态'
no_priority_provided: '未提供优先级'
- perform_description: "您想要导入或更新上面列出的问题吗?"
- replace_with_system_user: '用“系统”用户替换它们'
- import_as_system_user: '将它们导入为“系统”用户。'
+ perform_description: "要导入或更新上面列出的问题吗?"
+ replace_with_system_user: '用“系统”用户替换他们'
+ import_as_system_user: '将他们导入为“系统”用户。'
what_to_do: "你想做什么?"
work_package_has_newer_changes: "已过时!此主题未更新,因为服务器上的最新更改比导入主题的“ModifiedDate”更新。但是,已导入该主题的注释。"
export:
diff --git a/modules/boards/config/locales/crowdin/es.yml b/modules/boards/config/locales/crowdin/es.yml
index fe680ceafd..94584f95b3 100644
--- a/modules/boards/config/locales/crowdin/es.yml
+++ b/modules/boards/config/locales/crowdin/es.yml
@@ -1,6 +1,6 @@
es:
- permission_show_board_views: "View boards"
- permission_manage_board_views: "Manage boards"
+ permission_show_board_views: "Ver paneles"
+ permission_manage_board_views: "Administrar paneles"
project_module_board_view: "Tableros"
boards:
label_boards: "Tableros"
diff --git a/modules/boards/config/locales/crowdin/fr.yml b/modules/boards/config/locales/crowdin/fr.yml
index c13cbc54f0..47a931c882 100644
--- a/modules/boards/config/locales/crowdin/fr.yml
+++ b/modules/boards/config/locales/crowdin/fr.yml
@@ -1,6 +1,6 @@
fr:
- permission_show_board_views: "View boards"
- permission_manage_board_views: "Manage boards"
+ permission_show_board_views: "Afficher les tableaux"
+ permission_manage_board_views: "Gérer les tableaux"
project_module_board_view: "Tableaux"
boards:
label_boards: "Tableaux"
diff --git a/modules/boards/config/locales/crowdin/js-es.yml b/modules/boards/config/locales/crowdin/js-es.yml
index 7450fbcf83..a7923618d6 100644
--- a/modules/boards/config/locales/crowdin/js-es.yml
+++ b/modules/boards/config/locales/crowdin/js-es.yml
@@ -1,45 +1,45 @@
es:
js:
boards:
- label_unnamed_board: 'Unnamed board'
- label_unnamed_list: 'Unnamed list'
- label_board_type: 'Board type'
+ label_unnamed_board: 'Panel sin nombre'
+ label_unnamed_list: 'Lista sin nombre'
+ label_board_type: 'Tipo de panel'
upsale:
- teaser_text: 'Improve your agile project management with this flexible Boards view. Create as many boards as you like for anything you would like to keep track of.'
- upgrade_to_ee_text: 'Boards is an Enterprise feature. Please upgrade to a paid plan.'
- upgrade: 'Upgrade now'
- personal_demo: 'Get a personal demo'
+ teaser_text: 'Mejore su administración de proyectos ágiles con esta vista flexible de paneles. Cree tantos paneles como prefiera para cualquier elemento del que quiera realizar un seguimiento.'
+ upgrade_to_ee_text: 'Los paneles son una característica de la versión Enterprise. Actualice a un plan de pago.'
+ upgrade: 'Actualizar ahora'
+ personal_demo: 'Obtener una demostración personal'
lists:
delete: 'Eliminar lista'
version:
- is_locked: 'Version is locked. No items can be added to this version.'
- is_closed: 'Version is closed. No items can be added to this version.'
- close_version: 'Close version'
- open_version: 'Open version'
- lock_version: 'Lock version'
- unlock_version: 'Unlock version'
- edit_version: 'Edit version'
- show_version: 'Show version'
+ is_locked: 'La versión está bloqueada. No se pueden agregar elementos a esta versión.'
+ is_closed: 'La versión está cerrada. No se pueden agregar elementos a esta versión.'
+ close_version: 'Cerrar versión'
+ open_version: 'Abrir versión'
+ lock_version: 'Bloquear versión'
+ unlock_version: 'Desbloquear versión'
+ edit_version: 'Editar versión'
+ show_version: 'Mostrar versión'
locked: 'Bloqueado'
closed: 'Cerrado'
- new_board: 'New board'
- add_list: 'Add list'
- add_card: 'Add card'
- error_attribute_not_writable: "Cannot move the work package, %{attribute} is not writable."
- error_loading_the_list: "Error loading the list: %{error_message}"
- error_permission_missing: "The permission to create public queries is missing"
- click_to_remove_list: "Click to remove this list"
+ new_board: 'Nuevo panel'
+ add_list: 'Agregar lista'
+ add_card: 'Agregar tarjeta'
+ error_attribute_not_writable: "No se puede mover el paquete de trabajo porque %{attribute} no permite la escritura."
+ error_loading_the_list: "Error al cargar la lista: %{error_message}"
+ error_permission_missing: "Falta el permiso para crear consultas públicas"
+ click_to_remove_list: "Haga clic para quitar esta lista"
board_type:
- free: 'Basic board'
+ free: 'Panel básico'
free_text: >
- Create a board in which you can freely create lists and order your work packages within. Moving work packages between lists do not change the work package itself.
- action: 'Action board'
- action_by_attribute: 'Action board (%{attribute})'
+ Cree un panel donde pueda crear libremente listas y ordenar los paquetes de trabajo que contenga. Al mover los paquetes de trabajo entre las listas, no se cambia del paquete de trabajo en sí.
+ action: 'Panel de acciones'
+ action_by_attribute: 'Panel de acciones (%{attribute})'
action_text: >
- Create a board with filtered lists on a single attribute. Moving work packages to other lists will update their attribute.
- select_attribute: "Action attribute"
+ Cree un panel con listas filtradas en un único atributo. Al mover los paquetes de trabajo a otras listas, se actualizará su atributo.
+ select_attribute: "Atributo de acción"
configuration_modal:
- title: 'Configure this board'
+ title: 'Configurar este panel'
display_settings:
- card_mode: "Display as cards"
- table_mode: "Display as table"
+ card_mode: "Mostrar como tarjetas"
+ table_mode: "Mostrar como tabla"
diff --git a/modules/boards/config/locales/crowdin/js-fr.yml b/modules/boards/config/locales/crowdin/js-fr.yml
index 08e60ee633..86fb543a9a 100644
--- a/modules/boards/config/locales/crowdin/js-fr.yml
+++ b/modules/boards/config/locales/crowdin/js-fr.yml
@@ -1,45 +1,45 @@
fr:
js:
boards:
- label_unnamed_board: 'Unnamed board'
- label_unnamed_list: 'Unnamed list'
- label_board_type: 'Board type'
+ label_unnamed_board: 'Tableau sans nom'
+ label_unnamed_list: 'Liste sans nom'
+ label_board_type: 'Type de tableau'
upsale:
- teaser_text: 'Improve your agile project management with this flexible Boards view. Create as many boards as you like for anything you would like to keep track of.'
- upgrade_to_ee_text: 'Boards is an Enterprise feature. Please upgrade to a paid plan.'
- upgrade: 'Upgrade now'
- personal_demo: 'Get a personal demo'
+ teaser_text: 'Améliorez votre gestion de projet agile avec cette vue des tableaux flexible. Créez autant de tableaux que vous voulez pour tout ce que vous souhaitez conserver.'
+ upgrade_to_ee_text: 'Les tableaux sont une fonctionnalité du plan Enterprise. Veuillez passer à un forfait payant.'
+ upgrade: 'Passer au plan supérieur'
+ personal_demo: 'Obtenir une démo personnelle'
lists:
delete: 'Supprimer la liste'
version:
- is_locked: 'Version is locked. No items can be added to this version.'
- is_closed: 'Version is closed. No items can be added to this version.'
- close_version: 'Close version'
- open_version: 'Open version'
- lock_version: 'Lock version'
- unlock_version: 'Unlock version'
- edit_version: 'Edit version'
- show_version: 'Show version'
+ is_locked: 'La version est verrouillée. Aucun élément ne peut être ajouté à cette version.'
+ is_closed: 'La version est fermée. Aucun élément ne peut être ajouté à cette version.'
+ close_version: 'Fermer la version'
+ open_version: 'Ouvrir la version'
+ lock_version: 'Verrouiller la version'
+ unlock_version: 'Déverrouiller la version'
+ edit_version: 'Éditer la version'
+ show_version: 'Afficher la version'
locked: 'Verrouillé'
closed: 'Clôturé'
- new_board: 'New board'
- add_list: 'Add list'
- add_card: 'Add card'
- error_attribute_not_writable: "Cannot move the work package, %{attribute} is not writable."
- error_loading_the_list: "Error loading the list: %{error_message}"
+ new_board: 'Nouveau tableau'
+ add_list: 'Ajouter une liste'
+ add_card: 'Ajouter une carte'
+ error_attribute_not_writable: "Impossible de déplacer le lot de travaux, %{attribute} n'est pas modifiable."
+ error_loading_the_list: "Erreur lors du chargement de la liste : %{error_message}"
error_permission_missing: "La permission pour créer des requêtes publiques est manquante"
- click_to_remove_list: "Click to remove this list"
+ click_to_remove_list: "Cliquez pour supprimer cette liste"
board_type:
- free: 'Basic board'
+ free: 'Tableau de base'
free_text: >
- Create a board in which you can freely create lists and order your work packages within. Moving work packages between lists do not change the work package itself.
- action: 'Action board'
- action_by_attribute: 'Action board (%{attribute})'
+ Créez un tableau dans lequel vous pouvez créer librement des listes et ordonner vos lots de travaux dans celles-ci. Déplacer des lots de travaux entre les listes ne modifie pas le lot de travaux en lui-même.
+ action: 'Tableau d''action'
+ action_by_attribute: 'Tableau d''action (%{attribute})'
action_text: >
- Create a board with filtered lists on a single attribute. Moving work packages to other lists will update their attribute.
- select_attribute: "Action attribute"
+ Créez un tableau avec des listes filtrées sur un seul attribut. Déplacer des lots de travaux vers d'autres listes mettra à jour leur attribut.
+ select_attribute: "Attribut d'action"
configuration_modal:
- title: 'Configure this board'
+ title: 'Configurer ce tableau'
display_settings:
- card_mode: "Display as cards"
- table_mode: "Display as table"
+ card_mode: "Affichage en cartes"
+ table_mode: "Affichage en tableau"
diff --git a/modules/boards/config/locales/crowdin/js-ko.yml b/modules/boards/config/locales/crowdin/js-ko.yml
index 1494a6afb7..b0eeb73669 100644
--- a/modules/boards/config/locales/crowdin/js-ko.yml
+++ b/modules/boards/config/locales/crowdin/js-ko.yml
@@ -1,45 +1,45 @@
ko:
js:
boards:
- label_unnamed_board: 'Unnamed board'
- label_unnamed_list: 'Unnamed list'
- label_board_type: 'Board type'
+ label_unnamed_board: '명명되지 않은 보드'
+ label_unnamed_list: '명명되지 않은 목록'
+ label_board_type: '보드 유형'
upsale:
- teaser_text: 'Improve your agile project management with this flexible Boards view. Create as many boards as you like for anything you would like to keep track of.'
- upgrade_to_ee_text: 'Boards is an Enterprise feature. Please upgrade to a paid plan.'
- upgrade: 'Upgrade now'
- personal_demo: 'Get a personal demo'
+ teaser_text: '이 유연한 보드 보기에서 애자일 프로젝트 관리를 개선하십시오. 계속 추적하고 싶은 사항에 따라 원하는 만큼 보드를 생성하십시오.'
+ upgrade_to_ee_text: '보드는 Enterprise 기능입니다. 유료 플랜으로 업그레이드하십시오.'
+ upgrade: '지금 업그레이드'
+ personal_demo: '개인 데모 이용'
lists:
delete: '목록 삭제'
version:
- is_locked: 'Version is locked. No items can be added to this version.'
- is_closed: 'Version is closed. No items can be added to this version.'
- close_version: 'Close version'
- open_version: 'Open version'
- lock_version: 'Lock version'
- unlock_version: 'Unlock version'
- edit_version: 'Edit version'
- show_version: 'Show version'
+ is_locked: '버전이 잠겨 있습니다. 이 버전에 항목을 추가할 수 없습니다.'
+ is_closed: '버전이 닫혔습니다. 이 버전에 항목을 추가할 수 없습니다.'
+ close_version: '버전 닫기'
+ open_version: '버전 열기'
+ lock_version: '버전 잠금'
+ unlock_version: '버전 잠금 해제'
+ edit_version: '버전 편집'
+ show_version: '버전 표시'
locked: '잠김'
closed: '닫음'
- new_board: 'New board'
- add_list: 'Add list'
- add_card: 'Add card'
- error_attribute_not_writable: "Cannot move the work package, %{attribute} is not writable."
- error_loading_the_list: "Error loading the list: %{error_message}"
- error_permission_missing: "The permission to create public queries is missing"
- click_to_remove_list: "Click to remove this list"
+ new_board: '새로운 보드'
+ add_list: '목록 추가'
+ add_card: '카드 추가'
+ error_attribute_not_writable: "작업 패키지를 이동할 수 없습니다. %{attribute}은(는) 쓰기 가능하지 않습니다."
+ error_loading_the_list: "목록 로드 중 오류 발생: %{error_message}"
+ error_permission_missing: "공용 쿼리를 만들 수 있는 권한이 없습니다"
+ click_to_remove_list: "이 목록을 제거하려면 클릭"
board_type:
- free: 'Basic board'
+ free: '기본 보드'
free_text: >
- Create a board in which you can freely create lists and order your work packages within. Moving work packages between lists do not change the work package itself.
- action: 'Action board'
- action_by_attribute: 'Action board (%{attribute})'
+ 자유롭게 목록을 만들고 작업 패키지를 주문할 수 있는 보드를 생성하십시오. 목록 간에 작업 패키지를 이동해도 작업 패키지 자체는 변경되지 않습니다.
+ action: '작업 보드'
+ action_by_attribute: '작업 보드(%{attribute})'
action_text: >
- Create a board with filtered lists on a single attribute. Moving work packages to other lists will update their attribute.
- select_attribute: "Action attribute"
+ 단일 특성에서 필터가 적용한 목록을 사용하여 보드를 생성하십시오. 작업 패키지를 다른 목록으로 이동하면 해당 특성이 업데이트됩니다.
+ select_attribute: "작업 특성"
configuration_modal:
- title: 'Configure this board'
+ title: '이 보드 구성'
display_settings:
- card_mode: "Display as cards"
- table_mode: "Display as table"
+ card_mode: "카드로 표시"
+ table_mode: "테이블로 표시"
diff --git a/modules/boards/config/locales/crowdin/js-pl.yml b/modules/boards/config/locales/crowdin/js-pl.yml
index 106ec5e923..ad944630ee 100644
--- a/modules/boards/config/locales/crowdin/js-pl.yml
+++ b/modules/boards/config/locales/crowdin/js-pl.yml
@@ -1,45 +1,45 @@
pl:
js:
boards:
- label_unnamed_board: 'Unnamed board'
- label_unnamed_list: 'Unnamed list'
- label_board_type: 'Board type'
+ label_unnamed_board: 'Tablica bez nazwy'
+ label_unnamed_list: 'Lista bez nazwy'
+ label_board_type: 'Typ tablicy'
upsale:
- teaser_text: 'Improve your agile project management with this flexible Boards view. Create as many boards as you like for anything you would like to keep track of.'
- upgrade_to_ee_text: 'Boards is an Enterprise feature. Please upgrade to a paid plan.'
- upgrade: 'Upgrade now'
- personal_demo: 'Get a personal demo'
+ teaser_text: 'Usprawnij swoje zwinne zarządzanie projektami dzięki temu elastycznemu widokowi Tablice. Twórz tyle tablic, ile chcesz, dla czegokolwiek, co zechcesz śledzić.'
+ upgrade_to_ee_text: 'Tablice to funkcja wersji Enterprise. Przejdź na plan płatny.'
+ upgrade: 'Zmień plan teraz'
+ personal_demo: 'Pobierz osobistą wersję demonstracyjną'
lists:
delete: 'Usuń listę'
version:
- is_locked: 'Version is locked. No items can be added to this version.'
- is_closed: 'Version is closed. No items can be added to this version.'
- close_version: 'Close version'
- open_version: 'Open version'
- lock_version: 'Lock version'
- unlock_version: 'Unlock version'
- edit_version: 'Edit version'
- show_version: 'Show version'
+ is_locked: 'Wersja jest zablokowana. Do tej wersji nie można dodać żadnych elementów.'
+ is_closed: 'Wersja jest zamknięta. Do tej wersji nie można dodać żadnych elementów.'
+ close_version: 'Zamknij wersję'
+ open_version: 'Otwórz wersję'
+ lock_version: 'Zablokuj wersję'
+ unlock_version: 'Odblokuj wersję'
+ edit_version: 'Edytuj wersję'
+ show_version: 'Pokaż wersję'
locked: 'Zablokowany'
closed: 'Zamknięte'
- new_board: 'New board'
- add_list: 'Add list'
- add_card: 'Add card'
- error_attribute_not_writable: "Cannot move the work package, %{attribute} is not writable."
- error_loading_the_list: "Error loading the list: %{error_message}"
- error_permission_missing: "The permission to create public queries is missing"
- click_to_remove_list: "Click to remove this list"
+ new_board: 'Nowa tablica'
+ add_list: 'Dodaj listę'
+ add_card: 'Dodaj kartę'
+ error_attribute_not_writable: "Nie można przenieść pakietu roboczego, nie można zapisać %{attribute}."
+ error_loading_the_list: "Błąd podczas ładowania listy: %{error_message}"
+ error_permission_missing: "Brakuje uprawnienia do tworzenia zapytań publicznych"
+ click_to_remove_list: "Kliknij, aby usunąć tę listę"
board_type:
- free: 'Basic board'
+ free: 'Tablica podstawowa'
free_text: >
- Create a board in which you can freely create lists and order your work packages within. Moving work packages between lists do not change the work package itself.
- action: 'Action board'
- action_by_attribute: 'Action board (%{attribute})'
+ Utwórz tablicę, na której możesz dowolnie tworzyć listy i zlecać pakiety robocze. Przenoszenie pakietów roboczych pomiędzy listami nie zmienia samego pakietu roboczego.
+ action: 'Tablica działania'
+ action_by_attribute: 'Tablica działania (%{attribute})'
action_text: >
- Create a board with filtered lists on a single attribute. Moving work packages to other lists will update their attribute.
- select_attribute: "Action attribute"
+ Utwórz tablicę z listami filtrowanymi według jednego atrybutu. Przeniesienie pakietów roboczych na inne listy spowoduje aktualizację ich atrybutu.
+ select_attribute: "Atrybut działania"
configuration_modal:
- title: 'Configure this board'
+ title: 'Skonfiguruj tę tablicę'
display_settings:
- card_mode: "Display as cards"
- table_mode: "Display as table"
+ card_mode: "Wyświetlaj jako karty"
+ table_mode: "Wyświetlaj jako tabelę"
diff --git a/modules/boards/config/locales/crowdin/js-pt.yml b/modules/boards/config/locales/crowdin/js-pt.yml
index e3b7297244..37d50469bc 100644
--- a/modules/boards/config/locales/crowdin/js-pt.yml
+++ b/modules/boards/config/locales/crowdin/js-pt.yml
@@ -5,7 +5,7 @@ pt:
label_unnamed_list: 'Lista sem nome'
label_board_type: 'Tipo de quadro'
upsale:
- teaser_text: 'Melhore a sua gestão ágil de projetos com esta visualização flexível de Quadros. Crie os quadros que quiser para qualquer coisa que queira acompanhar.'
+ teaser_text: 'Melhore e agilize a sua gestão de projetos com esta visualização flexível de Quadros. Crie os quadros que quiser para qualquer coisa que queira acompanhar.'
upgrade_to_ee_text: 'Os Quadros são um recurso Empresarial. Por favor atualize para um plano pago.'
upgrade: 'Atualizar agora'
personal_demo: 'Obter uma demonstração pessoal'
diff --git a/modules/boards/config/locales/crowdin/js-zh-CN.yml b/modules/boards/config/locales/crowdin/js-zh-CN.yml
index c8ec86489f..ee37aefe8b 100644
--- a/modules/boards/config/locales/crowdin/js-zh-CN.yml
+++ b/modules/boards/config/locales/crowdin/js-zh-CN.yml
@@ -5,41 +5,41 @@ zh-CN:
label_unnamed_list: '未命名列表'
label_board_type: '面板类型'
upsale:
- teaser_text: 'Improve your agile project management with this flexible Boards view. Create as many boards as you like for anything you would like to keep track of.'
- upgrade_to_ee_text: 'Boards is an Enterprise feature. Please upgrade to a paid plan.'
- upgrade: 'Upgrade now'
- personal_demo: 'Get a personal demo'
+ teaser_text: '通过此灵活的面板视图改进您的敏捷项目管理。为您想要跟踪的一切创建任意数量的面板。'
+ upgrade_to_ee_text: '面板是企业版功能。请升级到付费计划。'
+ upgrade: '立即升级'
+ personal_demo: '获取个人演示'
lists:
delete: '删除列表'
version:
- is_locked: 'Version is locked. No items can be added to this version.'
- is_closed: 'Version is closed. No items can be added to this version.'
- close_version: 'Close version'
- open_version: 'Open version'
- lock_version: 'Lock version'
- unlock_version: 'Unlock version'
- edit_version: 'Edit version'
- show_version: 'Show version'
+ is_locked: '版本已锁定。无法向此版本添加项目。'
+ is_closed: '版本已关闭。无法向此版本添加项目。'
+ close_version: '关闭版本'
+ open_version: '打开版本'
+ lock_version: '锁定版本'
+ unlock_version: '解锁版本'
+ edit_version: '编辑版本'
+ show_version: '显示版本'
locked: '锁定'
closed: '已关闭'
- new_board: 'New board'
- add_list: 'Add list'
- add_card: 'Add card'
- error_attribute_not_writable: "Cannot move the work package, %{attribute} is not writable."
- error_loading_the_list: "Error loading the list: %{error_message}"
+ new_board: '新建面板'
+ add_list: '添加列表'
+ add_card: '添加卡片'
+ error_attribute_not_writable: "无法移动工作包,%{attribute} 不可写。"
+ error_loading_the_list: "加载列表时出错:%{error_message}"
error_permission_missing: "缺少创建公共查询的权限"
- click_to_remove_list: "Click to remove this list"
+ click_to_remove_list: "点击以移除此列表"
board_type:
- free: 'Basic board'
+ free: '基本面板'
free_text: >
- Create a board in which you can freely create lists and order your work packages within. Moving work packages between lists do not change the work package itself.
- action: 'Action board'
- action_by_attribute: 'Action board (%{attribute})'
+ 创建一个可在其中自由创建列表和订购工作包的面板。在列表之间移动工作包不会更改工作包本身。
+ action: '操作面板'
+ action_by_attribute: '操作面板 (%{attribute})'
action_text: >
- Create a board with filtered lists on a single attribute. Moving work packages to other lists will update their attribute.
- select_attribute: "Action attribute"
+ 创建一个在单个属性上具有筛选列表的面板。将工作包移动到其他列表将更新其属性。
+ select_attribute: "操作属性"
configuration_modal:
- title: 'Configure this board'
+ title: '配置此面板'
display_settings:
- card_mode: "Display as cards"
- table_mode: "Display as table"
+ card_mode: "显示为卡片"
+ table_mode: "显示为表"
diff --git a/modules/boards/config/locales/crowdin/ko.yml b/modules/boards/config/locales/crowdin/ko.yml
index 6844a2d555..e6e8c74832 100644
--- a/modules/boards/config/locales/crowdin/ko.yml
+++ b/modules/boards/config/locales/crowdin/ko.yml
@@ -1,6 +1,6 @@
ko:
- permission_show_board_views: "View boards"
- permission_manage_board_views: "Manage boards"
+ permission_show_board_views: "보드 보기"
+ permission_manage_board_views: "보드 관리"
project_module_board_view: "보드"
boards:
label_boards: "보드"
diff --git a/modules/boards/config/locales/crowdin/pl.yml b/modules/boards/config/locales/crowdin/pl.yml
index a3a2a8fbb4..eb73368297 100644
--- a/modules/boards/config/locales/crowdin/pl.yml
+++ b/modules/boards/config/locales/crowdin/pl.yml
@@ -1,6 +1,6 @@
pl:
- permission_show_board_views: "View boards"
- permission_manage_board_views: "Manage boards"
+ permission_show_board_views: "Wyświetl tablice"
+ permission_manage_board_views: "Zarządzaj tablicami"
project_module_board_view: "Tablice"
boards:
label_boards: "Tablice"
diff --git a/modules/costs/app/views/cost_types/_list.html.erb b/modules/costs/app/views/cost_types/_list.html.erb
index ef8a8a65aa..0b9db32341 100644
--- a/modules/costs/app/views/cost_types/_list.html.erb
+++ b/modules/costs/app/views/cost_types/_list.html.erb
@@ -96,9 +96,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
method: :delete,
html: { id: "delete_cost_type_#{cost_type.id}",
class: 'delete_cost_type',
- title: t(:button_delete) } do |f| %>
+ title: t(:button_lock) } do |f| %>
<% end %>
diff --git a/modules/costs/app/views/cost_types/_list_deleted.html.erb b/modules/costs/app/views/cost_types/_list_deleted.html.erb
index 8da2821a6d..b54b7109c3 100644
--- a/modules/costs/app/views/cost_types/_list_deleted.html.erb
+++ b/modules/costs/app/views/cost_types/_list_deleted.html.erb
@@ -74,7 +74,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
html: { id: "restore_cost_type_#{cost_type.id}",
class: 'restore_cost_type' } do |f| %>
<% end %>
diff --git a/modules/dashboards/config/locales/crowdin/es.yml b/modules/dashboards/config/locales/crowdin/es.yml
index 8871788f6e..251f40f980 100644
--- a/modules/dashboards/config/locales/crowdin/es.yml
+++ b/modules/dashboards/config/locales/crowdin/es.yml
@@ -1,5 +1,5 @@
es:
dashboards:
- label: 'Dashboards'
- menu_badge: 'Alpha'
- project_module_dashboards: 'Dashboards'
+ label: 'Paneles'
+ menu_badge: 'Alfa'
+ project_module_dashboards: 'Paneles'
diff --git a/modules/dashboards/config/locales/crowdin/fr.yml b/modules/dashboards/config/locales/crowdin/fr.yml
index 4b21451b79..e8234cd757 100644
--- a/modules/dashboards/config/locales/crowdin/fr.yml
+++ b/modules/dashboards/config/locales/crowdin/fr.yml
@@ -1,5 +1,5 @@
fr:
dashboards:
- label: 'Dashboards'
+ label: 'Tableaux de bord'
menu_badge: 'Alpha'
- project_module_dashboards: 'Dashboards'
+ project_module_dashboards: 'Tableaux de bord'
diff --git a/modules/dashboards/config/locales/crowdin/js-es.yml b/modules/dashboards/config/locales/crowdin/js-es.yml
index 37207722f7..56bec7f95c 100644
--- a/modules/dashboards/config/locales/crowdin/js-es.yml
+++ b/modules/dashboards/config/locales/crowdin/js-es.yml
@@ -1,4 +1,4 @@
es:
js:
dashboards:
- label: 'Dashboard'
+ label: 'Paneles'
diff --git a/modules/dashboards/config/locales/crowdin/js-fr.yml b/modules/dashboards/config/locales/crowdin/js-fr.yml
index 69309dffdf..ee0ce85efd 100644
--- a/modules/dashboards/config/locales/crowdin/js-fr.yml
+++ b/modules/dashboards/config/locales/crowdin/js-fr.yml
@@ -1,4 +1,4 @@
fr:
js:
dashboards:
- label: 'Dashboard'
+ label: 'Tableau de bord'
diff --git a/modules/dashboards/config/locales/crowdin/js-ko.yml b/modules/dashboards/config/locales/crowdin/js-ko.yml
index 74df70a72c..94acd88b21 100644
--- a/modules/dashboards/config/locales/crowdin/js-ko.yml
+++ b/modules/dashboards/config/locales/crowdin/js-ko.yml
@@ -1,4 +1,4 @@
ko:
js:
dashboards:
- label: 'Dashboard'
+ label: '대시보드'
diff --git a/modules/dashboards/config/locales/crowdin/js-pl.yml b/modules/dashboards/config/locales/crowdin/js-pl.yml
index 771d50b1b5..79f9e05f25 100644
--- a/modules/dashboards/config/locales/crowdin/js-pl.yml
+++ b/modules/dashboards/config/locales/crowdin/js-pl.yml
@@ -1,4 +1,4 @@
pl:
js:
dashboards:
- label: 'Dashboard'
+ label: 'Pulpit nawigacyjny'
diff --git a/modules/dashboards/config/locales/crowdin/js-zh-CN.yml b/modules/dashboards/config/locales/crowdin/js-zh-CN.yml
index e2dd42e7f6..ea3bd4b6ff 100644
--- a/modules/dashboards/config/locales/crowdin/js-zh-CN.yml
+++ b/modules/dashboards/config/locales/crowdin/js-zh-CN.yml
@@ -1,4 +1,4 @@
zh-CN:
js:
dashboards:
- label: 'Dashboard'
+ label: '仪表板'
diff --git a/modules/dashboards/config/locales/crowdin/ko.yml b/modules/dashboards/config/locales/crowdin/ko.yml
index ea60f39036..9f0e1feaab 100644
--- a/modules/dashboards/config/locales/crowdin/ko.yml
+++ b/modules/dashboards/config/locales/crowdin/ko.yml
@@ -1,5 +1,5 @@
ko:
dashboards:
- label: 'Dashboards'
- menu_badge: 'Alpha'
- project_module_dashboards: 'Dashboards'
+ label: '대시보드'
+ menu_badge: '알파'
+ project_module_dashboards: '대시보드'
diff --git a/modules/dashboards/config/locales/crowdin/pl.yml b/modules/dashboards/config/locales/crowdin/pl.yml
index d4f95a58ff..1e6ea79f0f 100644
--- a/modules/dashboards/config/locales/crowdin/pl.yml
+++ b/modules/dashboards/config/locales/crowdin/pl.yml
@@ -1,5 +1,5 @@
pl:
dashboards:
- label: 'Dashboards'
- menu_badge: 'Alpha'
- project_module_dashboards: 'Dashboards'
+ label: 'Pulpity nawigacyjne'
+ menu_badge: 'Alfa'
+ project_module_dashboards: 'Pulpity nawigacyjne'
diff --git a/modules/dashboards/config/locales/crowdin/zh-CN.yml b/modules/dashboards/config/locales/crowdin/zh-CN.yml
index 008e6deb85..a5f3a18744 100644
--- a/modules/dashboards/config/locales/crowdin/zh-CN.yml
+++ b/modules/dashboards/config/locales/crowdin/zh-CN.yml
@@ -1,5 +1,5 @@
zh-CN:
dashboards:
- label: 'Dashboards'
- menu_badge: 'Alpha'
- project_module_dashboards: 'Dashboards'
+ label: '仪表板'
+ menu_badge: 'Alpha 版'
+ project_module_dashboards: '仪表板'
diff --git a/modules/github_integration/config/locales/crowdin/es.yml b/modules/github_integration/config/locales/crowdin/es.yml
index 547dac84c4..1002214076 100644
--- a/modules/github_integration/config/locales/crowdin/es.yml
+++ b/modules/github_integration/config/locales/crowdin/es.yml
@@ -1,10 +1,10 @@
es:
github_integration:
pull_request_opened_comment: >
- **PR Opened:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been opened by [%{github_user}](%{github_user_url}).
+ **PR abierta:** la solicitud de incorporación de cambios %{pr_number} [%{pr_title}](%{pr_url}) para [%{repository}](%{repository_url}) ha sido abierta por [%{github_user}](%{github_user_url}).
pull_request_closed_comment: >
- **PR Closed:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been closed by [%{github_user}](%{github_user_url}).
+ **PR cerrada:** la solicitud de incorporación de cambios %{pr_number} [%{pr_title}](%{pr_url}) para [%{repository}](%{repository_url}) ha sido cerrada por [%{github_user}](%{github_user_url}).
pull_request_merged_comment: >
- **PR Merged:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been merged by [%{github_user}](%{github_user_url}).
+ **PR combinada:** la solicitud de incorporación de cambios %{pr_number} [%{pr_title}](%{pr_url}) para [%{repository}](%{repository_url}) ha sido combinada por [%{github_user}](%{github_user_url}).
pull_request_referenced_comment: >
- **Referenced in PR:** [%{github_user}](%{github_user_url}) referenced this work package in Pull request %{pr_number} [%{pr_title}](%{pr_url}) on [%{repository}](%{repository_url}).
+ **Con referencia en PR:** [%{github_user}](%{github_user_url}) hizo referencia a este paquete de trabajo en la solicitud de incorporación de cambios %{pr_number} [%{pr_title}](%{pr_url}) en [%{repository}](%{repository_url}).
diff --git a/modules/github_integration/config/locales/crowdin/fr.yml b/modules/github_integration/config/locales/crowdin/fr.yml
index e331a85fd4..cf8ffb7d56 100644
--- a/modules/github_integration/config/locales/crowdin/fr.yml
+++ b/modules/github_integration/config/locales/crowdin/fr.yml
@@ -1,10 +1,10 @@
fr:
github_integration:
pull_request_opened_comment: >
- **PR Opened:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been opened by [%{github_user}](%{github_user_url}).
+ **PR Ouvert :** Demande pull %{pr_number} [%{pr_title}](%{pr_url}) pour [%{repository}](%{repository_url}) ouverte par [%{github_user}](%{github_user_url}).
pull_request_closed_comment: >
- **PR Closed:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been closed by [%{github_user}](%{github_user_url}).
+ **PR Fermé :** Demande pull %{pr_number} [%{pr_title}](%{pr_url}) pour [%{repository}](%{repository_url}) fermée par [%{github_user}](%{github_user_url}).
pull_request_merged_comment: >
- **PR Merged:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been merged by [%{github_user}](%{github_user_url}).
+ **PR Fusionné :** Demande pull %{pr_number} [%{pr_title}](%{pr_url}) pour [%{repository}](%{repository_url}) fusionnée par [%{github_user}](%{github_user_url}).
pull_request_referenced_comment: >
- **Referenced in PR:** [%{github_user}](%{github_user_url}) referenced this work package in Pull request %{pr_number} [%{pr_title}](%{pr_url}) on [%{repository}](%{repository_url}).
+ **Référencé dans PR:** [%{github_user}](%{github_user_url}) a référencé ce lots de travaux dans la demande Pull %{pr_number} [%{pr_title}](%{pr_url}) dans [%{repository}](%{repository_url}).
diff --git a/modules/github_integration/config/locales/crowdin/ko.yml b/modules/github_integration/config/locales/crowdin/ko.yml
index 8612f2e93e..fa6732e89a 100644
--- a/modules/github_integration/config/locales/crowdin/ko.yml
+++ b/modules/github_integration/config/locales/crowdin/ko.yml
@@ -1,10 +1,10 @@
ko:
github_integration:
pull_request_opened_comment: >
- **PR Opened:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been opened by [%{github_user}](%{github_user_url}).
+ **PR 열림:** [%{repository}](%{repository_url})에 대한 끌어오기 요청 %{pr_number} [%{pr_title}](%{pr_url})이(가) [%{github_user}](%{github_user_url})님에 의해 열렸습니다.
pull_request_closed_comment: >
- **PR Closed:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been closed by [%{github_user}](%{github_user_url}).
+ **PR 닫힘:** [%{repository}](%{repository_url})에 대한 끌어오기 요청 %{pr_number} [%{pr_title}](%{pr_url})이(가) [%{github_user}](%{github_user_url})님에 의해 닫혔습니다.
pull_request_merged_comment: >
- **PR Merged:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been merged by [%{github_user}](%{github_user_url}).
+ **PR 병합됨:** [%{repository}](%{repository_url})에 대한 끌어오기 요청 %{pr_number} [%{pr_title}](%{pr_url})이(가) [%{github_user}](%{github_user_url})님에 의해 병합되었습니다.
pull_request_referenced_comment: >
- **Referenced in PR:** [%{github_user}](%{github_user_url}) referenced this work package in Pull request %{pr_number} [%{pr_title}](%{pr_url}) on [%{repository}](%{repository_url}).
+ **PR에서 참조됨:** [%{github_user}](%{github_user_url})님이 [%{repository}](%{repository_url})의 끌어오기 요청 %{pr_number} [%{pr_title}](%{pr_url})에서 이 작업 패키지를 참조했습니다.
diff --git a/modules/github_integration/config/locales/crowdin/pl.yml b/modules/github_integration/config/locales/crowdin/pl.yml
index 8e84b3206c..1c48dde353 100644
--- a/modules/github_integration/config/locales/crowdin/pl.yml
+++ b/modules/github_integration/config/locales/crowdin/pl.yml
@@ -1,10 +1,10 @@
pl:
github_integration:
pull_request_opened_comment: >
- **PR Opened:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been opened by [%{github_user}](%{github_user_url}).
+ **Otwarte PR:** Żądanie Pull Request %{pr_number} [%{pr_title}](%{pr_url}) dla [%{repository}](%{repository_url}) zostało otwarte przez [%{github_user}](%{github_user_url}).
pull_request_closed_comment: >
- **PR Closed:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been closed by [%{github_user}](%{github_user_url}).
+ **Zamknięte PR:** Żądanie Pull Request %{pr_number} [%{pr_title}](%{pr_url}) dla [%{repository}](%{repository_url}) zostało zamknięte przez [%{github_user}](%{github_user_url}).
pull_request_merged_comment: >
- **PR Merged:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been merged by [%{github_user}](%{github_user_url}).
+ **Scalone PR:** Żądanie Pull Request %{pr_number} [%{pr_title}](%{pr_url}) dla [%{repository}](%{repository_url}) zostało scalone przez [%{github_user}](%{github_user_url}).
pull_request_referenced_comment: >
- **Referenced in PR:** [%{github_user}](%{github_user_url}) referenced this work package in Pull request %{pr_number} [%{pr_title}](%{pr_url}) on [%{repository}](%{repository_url}).
+ **Wskazano w PR:** [%{github_user}](%{github_user_url}) wskazał ten pakiet roboczy w żądaniu Pull Request %{pr_number} [%{pr_title}](%{pr_url}), w [%{repository}](%{repository_url}).
diff --git a/modules/github_integration/config/locales/crowdin/zh-CN.yml b/modules/github_integration/config/locales/crowdin/zh-CN.yml
index 312f1c16a4..2a0dac10e6 100644
--- a/modules/github_integration/config/locales/crowdin/zh-CN.yml
+++ b/modules/github_integration/config/locales/crowdin/zh-CN.yml
@@ -1,10 +1,10 @@
zh-CN:
github_integration:
pull_request_opened_comment: >
- **PR Opened:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been opened by [%{github_user}](%{github_user_url}).
+ **拉取请求已打开:** [%{repository}](%{repository_url}) 的拉取请求 %{pr_number} [%{pr_title}](%{pr_url}) 已由 [%{github_user}](%{github_user_url}) 打开。
pull_request_closed_comment: >
- **PR Closed:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been closed by [%{github_user}](%{github_user_url}).
+ **拉取请求已关闭:** [%{repository}](%{repository_url}) 的拉取请求 %{pr_number} [%{pr_title}](%{pr_url}) 已由 [%{github_user}](%{github_user_url}) 关闭。
pull_request_merged_comment: >
- **PR Merged:** Pull request %{pr_number} [%{pr_title}](%{pr_url}) for [%{repository}](%{repository_url}) has been merged by [%{github_user}](%{github_user_url}).
+ **拉取请求已合并:** [%{repository}](%{repository_url}) 的拉取请求 %{pr_number} [%{pr_title}](%{pr_url}) 已由 [%{github_user}](%{github_user_url}) 合并。
pull_request_referenced_comment: >
- **Referenced in PR:** [%{github_user}](%{github_user_url}) referenced this work package in Pull request %{pr_number} [%{pr_title}](%{pr_url}) on [%{repository}](%{repository_url}).
+ **已在拉取请求中引用:** [%{github_user}](%{github_user_url}) 在 [%{repository}](%{repository_url}) 上的拉取请求 %{pr_number} [%{pr_title}](%{pr_url}) 中引用了此工作包。
diff --git a/modules/grids/config/locales/crowdin/js-es.yml b/modules/grids/config/locales/crowdin/js-es.yml
index 610cc7448b..f365420936 100644
--- a/modules/grids/config/locales/crowdin/js-es.yml
+++ b/modules/grids/config/locales/crowdin/js-es.yml
@@ -1,11 +1,11 @@
es:
js:
grid:
- add_widget: 'Add widget'
- remove: 'Remove widget'
+ add_widget: 'Agregar widget'
+ remove: 'Quitar widget'
upsale:
- text: "Some widgets, like the work package graph widget, are only available in the "
- link: 'enterprise edition.'
+ text: "Algunos widgets, como el widget del gráfico de paquetes de trabajo, solo están disponibles en la "
+ link: 'edición Enterprise.'
widgets:
custom_text:
title: 'Texto personalizado'
@@ -14,23 +14,23 @@ es:
no_results: 'No hay documentos.'
members:
title: 'Miembros'
- no_results: 'No visible members.'
+ no_results: 'No hay miembros visibles.'
view_all_members: 'Ver todos los miembros'
add: 'Miembro'
- too_many: 'Displaying %{count} of %{total} members.'
+ too_many: 'Mostrando %{count} de %{total} miembros.'
news:
title: 'Noticias'
at: 'en'
no_results: 'Nada nuevo sobre lo que informar.'
project_description:
title: 'Descripción del proyecto'
- no_results: "No description has been written yet. One can be provided in the 'Project settings'."
+ no_results: "Aún no se ha escrito ninguna descripción. Puede proporcionar una descripción en la configuración del proyecto."
project_details:
title: 'Detalles del proyecto'
- no_results: 'No custom fields have been defined for projects.'
+ no_results: 'No se han definido campos personalizados para los proyectos.'
subprojects:
title: 'Subproyectos'
- no_results: 'No subprojects.'
+ no_results: 'No hay subproyectos.'
time_entries_list:
title: 'Tiempo de gastos (últimos 7 días)'
no_results: 'Sin entradas temporales en los últimos 7 días.'
@@ -43,11 +43,11 @@ es:
work_packages_watched:
title: 'Paquetes de trabajo vigilados por mí'
work_packages_table:
- title: 'Work packages table'
+ title: 'Tabla de paquetes de trabajo'
work_packages_graph:
- title: 'Work packages graph'
+ title: 'Gráfico de paquetes de trabajo'
work_packages_calendar:
title: 'Calendario'
work_packages_overview:
- title: 'Work packages overview'
- placeholder: 'Click to edit ...'
+ title: 'Información general sobre paquete de trabajo'
+ placeholder: 'Haga clic para editar…'
diff --git a/modules/grids/config/locales/crowdin/js-fr.yml b/modules/grids/config/locales/crowdin/js-fr.yml
index 01dcda60be..91cb76149d 100644
--- a/modules/grids/config/locales/crowdin/js-fr.yml
+++ b/modules/grids/config/locales/crowdin/js-fr.yml
@@ -1,11 +1,11 @@
fr:
js:
grid:
- add_widget: 'Add widget'
- remove: 'Remove widget'
+ add_widget: 'Ajouter un widget'
+ remove: 'Supprimer le widget'
upsale:
- text: "Some widgets, like the work package graph widget, are only available in the "
- link: 'enterprise edition.'
+ text: "Certains widgets, comme le widget graphique des lots de travaux, ne sont disponibles que dans"
+ link: 'la version Entreprise.'
widgets:
custom_text:
title: 'Texte personnalisé'
@@ -14,23 +14,23 @@ fr:
no_results: 'Encore aucun document.'
members:
title: 'Membres'
- no_results: 'No visible members.'
+ no_results: 'Aucun membre visible.'
view_all_members: 'Afficher tous les membres'
add: 'Membre'
- too_many: 'Displaying %{count} of %{total} members.'
+ too_many: '%{count} membres sur %{total} affichés.'
news:
title: 'Actualités'
at: 'à'
no_results: 'Rien de nouveau à signaler.'
project_description:
title: 'Description du projet'
- no_results: "No description has been written yet. One can be provided in the 'Project settings'."
+ no_results: "Aucune description n'a encore été écrite. Vous pouvez en trouver une dans les \"Paramètres du projet\"."
project_details:
title: 'Détails du projet'
- no_results: 'No custom fields have been defined for projects.'
+ no_results: 'Aucun champ personnalisé n''a été défini pour les projets.'
subprojects:
title: 'Sous-projets'
- no_results: 'No subprojects.'
+ no_results: 'Aucun sous-projet.'
time_entries_list:
title: 'Temps passé (7 derniers jours)'
no_results: 'Aucune entrée de temps pour les 7 derniers jours.'
@@ -43,11 +43,11 @@ fr:
work_packages_watched:
title: 'Lots de travaux que j''ai observés'
work_packages_table:
- title: 'Work packages table'
+ title: 'Tableau des lots de travaux'
work_packages_graph:
- title: 'Work packages graph'
+ title: 'Graphique des lots de travaux'
work_packages_calendar:
title: 'Calendrier'
work_packages_overview:
- title: 'Work packages overview'
- placeholder: 'Click to edit ...'
+ title: 'Aperçu des lots de travaux'
+ placeholder: 'Cliquez pour éditer...'
diff --git a/modules/grids/config/locales/crowdin/js-ko.yml b/modules/grids/config/locales/crowdin/js-ko.yml
index 8f0a1d499a..d03d4de7fe 100644
--- a/modules/grids/config/locales/crowdin/js-ko.yml
+++ b/modules/grids/config/locales/crowdin/js-ko.yml
@@ -1,11 +1,11 @@
ko:
js:
grid:
- add_widget: 'Add widget'
- remove: 'Remove widget'
+ add_widget: '위젯 추가'
+ remove: '위젯 제거'
upsale:
- text: "Some widgets, like the work package graph widget, are only available in the "
- link: 'enterprise edition.'
+ text: "작업 패키지 그래프 위젯 같은 일부 위젯은 다음에서만 사용 가능합니다: "
+ link: 'Enterprise Edition.'
widgets:
custom_text:
title: '사용자 지정 텍스트'
@@ -14,23 +14,23 @@ ko:
no_results: '아직 문서가 없습니다.'
members:
title: '멤버'
- no_results: 'No visible members.'
+ no_results: '표시할 멤버가 없습니다.'
view_all_members: '모든 회원 보기'
add: '멤버'
- too_many: 'Displaying %{count} of %{total} members.'
+ too_many: '%{count}/%{total}명의 멤버를 표시 중입니다.'
news:
title: '뉴스'
at: '-'
no_results: '새로 보고할 것이 없음'
project_description:
title: '프로젝트 설명'
- no_results: "No description has been written yet. One can be provided in the 'Project settings'."
+ no_results: "설명이 아직 작성되지 않았습니다. '프로젝트 설정'에서 입력할 수 있습니다."
project_details:
title: '프로젝트 세부 정보'
- no_results: 'No custom fields have been defined for projects.'
+ no_results: '프로젝트에 대한 사용자 지정 필드가 정의되지 않았습니다.'
subprojects:
title: '하위 프로젝트'
- no_results: 'No subprojects.'
+ no_results: '하위 프로젝트가 없습니다.'
time_entries_list:
title: '경과 시간(지난 7 일)'
no_results: '지난 7일간 시간 항목이 없습니다.'
@@ -43,11 +43,11 @@ ko:
work_packages_watched:
title: '내가 본 작업 패키지'
work_packages_table:
- title: 'Work packages table'
+ title: '작업 패키지 테이블'
work_packages_graph:
- title: 'Work packages graph'
+ title: '작업 패키지 그래프'
work_packages_calendar:
title: '달력'
work_packages_overview:
- title: 'Work packages overview'
- placeholder: 'Click to edit ...'
+ title: '작업 패키지 개요'
+ placeholder: '편집하려면 클릭...'
diff --git a/modules/grids/config/locales/crowdin/js-pl.yml b/modules/grids/config/locales/crowdin/js-pl.yml
index 77a4e9cf37..bcf4e17faf 100644
--- a/modules/grids/config/locales/crowdin/js-pl.yml
+++ b/modules/grids/config/locales/crowdin/js-pl.yml
@@ -1,11 +1,11 @@
pl:
js:
grid:
- add_widget: 'Add widget'
- remove: 'Remove widget'
+ add_widget: 'Dodaj widżet'
+ remove: 'Usuń widżet'
upsale:
- text: "Some widgets, like the work package graph widget, are only available in the "
- link: 'enterprise edition.'
+ text: "Niektóre widżety, takie jak widżet wykresu pakietu roboczego, są dostępne jedynie w wersji"
+ link: 'Enterprise Edition.'
widgets:
custom_text:
title: 'Tekst niestandardowy/użytkownika'
@@ -14,23 +14,23 @@ pl:
no_results: 'Nie ma jeszcze dokumentów.'
members:
title: 'Członkowie'
- no_results: 'No visible members.'
+ no_results: 'Brak widocznych członków.'
view_all_members: 'Zobacz wszystkich członków'
add: 'Członek'
- too_many: 'Displaying %{count} of %{total} members.'
+ too_many: 'Wyświetlanie %{count} z %{total} członków.'
news:
title: 'Aktualności'
at: 'w'
no_results: 'Utwórz nowy raport.'
project_description:
title: 'Opis projektu'
- no_results: "No description has been written yet. One can be provided in the 'Project settings'."
+ no_results: "Nie napisano jeszcze opisu. Można go podać w sekcji Ustawienia projektu."
project_details:
title: 'Szczegóły Projektu'
- no_results: 'No custom fields have been defined for projects.'
+ no_results: 'Nie zdefiniowano żadnych pól niestandardowych dla projektów.'
subprojects:
title: 'Podprojekty'
- no_results: 'No subprojects.'
+ no_results: 'Brak podprojektów.'
time_entries_list:
title: 'Poświęcony czas (ostatnie 7 dni)'
no_results: 'Brak zarejestrowanego czasu pracy w ostatnich 7 dniach.'
@@ -43,11 +43,11 @@ pl:
work_packages_watched:
title: 'Pakiety robocze obserwowane przeze mnie'
work_packages_table:
- title: 'Work packages table'
+ title: 'Tabela pakietów roboczych'
work_packages_graph:
- title: 'Work packages graph'
+ title: 'Wykres pakietów roboczych'
work_packages_calendar:
title: 'Kalendarz'
work_packages_overview:
- title: 'Work packages overview'
- placeholder: 'Click to edit ...'
+ title: 'Przegląd pakietów roboczych'
+ placeholder: 'Kliknij, aby edytować...'
diff --git a/modules/grids/config/locales/crowdin/js-ru.yml b/modules/grids/config/locales/crowdin/js-ru.yml
index 4838da9472..e1a6237ced 100644
--- a/modules/grids/config/locales/crowdin/js-ru.yml
+++ b/modules/grids/config/locales/crowdin/js-ru.yml
@@ -1,11 +1,11 @@
ru:
js:
grid:
- add_widget: 'Add widget'
+ add_widget: 'Добавить виджет'
remove: 'Удалить виджет'
upsale:
- text: "Some widgets, like the work package graph widget, are only available in the "
- link: 'enterprise edition.'
+ text: "Некоторые виджеты, такие как виджет графика комплекса работ, доступны только в "
+ link: 'корпоративной версии.'
widgets:
custom_text:
title: 'Пользовательский текст'
@@ -24,10 +24,10 @@ ru:
no_results: 'Ничего нового для отчета.'
project_description:
title: 'Описание проекта'
- no_results: "No description has been written yet. One can be provided in the 'Project settings'."
+ no_results: "Описания еще нет. Его можно добавить в настройках проекта."
project_details:
title: 'Детали проекта'
- no_results: 'No custom fields have been defined for projects.'
+ no_results: 'Для проектов не определены настраиваемые поля.'
subprojects:
title: 'Подпроекты'
no_results: 'Подпроектов нет.'
diff --git a/modules/grids/config/locales/crowdin/js-zh-CN.yml b/modules/grids/config/locales/crowdin/js-zh-CN.yml
index 44ef4d7d37..45954a55df 100644
--- a/modules/grids/config/locales/crowdin/js-zh-CN.yml
+++ b/modules/grids/config/locales/crowdin/js-zh-CN.yml
@@ -1,11 +1,11 @@
zh-CN:
js:
grid:
- add_widget: 'Add widget'
- remove: 'Remove widget'
+ add_widget: '添加微件'
+ remove: '移除微件'
upsale:
- text: "Some widgets, like the work package graph widget, are only available in the "
- link: 'enterprise edition.'
+ text: "某些微件(例如工作包图微件)仅适用于"
+ link: '企业版。'
widgets:
custom_text:
title: '自定义文本'
@@ -14,23 +14,23 @@ zh-CN:
no_results: '没有文档。'
members:
title: '成员'
- no_results: 'No visible members.'
+ no_results: '无可见成员。'
view_all_members: '查看所有成员'
add: '成员'
- too_many: 'Displaying %{count} of %{total} members.'
+ too_many: '正在显示 %{count} 个成员,总共 %{total} 个。'
news:
title: '新闻'
at: '位置:'
no_results: '没有新消息报告。'
project_description:
title: '项目描述'
- no_results: "No description has been written yet. One can be provided in the 'Project settings'."
+ no_results: "尚未写入任何描述。可以在“项目设置”中提供一个描述。"
project_details:
title: '项目详细信息'
- no_results: 'No custom fields have been defined for projects.'
+ no_results: '没有为项目定义自定义字段。'
subprojects:
title: '子项目'
- no_results: 'No subprojects.'
+ no_results: '无子项目。'
time_entries_list:
title: '花费时间 (最近 7天)'
no_results: '过去7天没有时间记录。'
@@ -43,11 +43,11 @@ zh-CN:
work_packages_watched:
title: '由我汇报的工作包'
work_packages_table:
- title: 'Work packages table'
+ title: '工作包表'
work_packages_graph:
- title: 'Work packages graph'
+ title: '工作包图'
work_packages_calendar:
title: '日历'
work_packages_overview:
- title: 'Work packages overview'
- placeholder: 'Click to edit ...'
+ title: '工作包概览'
+ placeholder: '点击以编辑…'
diff --git a/modules/ldap_groups/config/locales/crowdin/es.yml b/modules/ldap_groups/config/locales/crowdin/es.yml
index c4c48831c6..bbbca2bcc9 100644
--- a/modules/ldap_groups/config/locales/crowdin/es.yml
+++ b/modules/ldap_groups/config/locales/crowdin/es.yml
@@ -2,31 +2,31 @@ es:
activerecord:
attributes:
ldap_groups/synchronized_group:
- entry: 'Entry identifier'
- auth_source: 'LDAP connection'
+ entry: 'Identificador de entrada'
+ auth_source: 'Conexión LDAP'
models:
- ldap_groups/synchronized_group: 'Synchronized LDAP group'
+ ldap_groups/synchronized_group: 'Grupo de LDAP sincronizado'
ldap_groups:
- label_menu_item: 'LDAP group synchronization'
- label_group_key: 'LDAP group filter key'
+ label_menu_item: 'Sincronización de grupos de LDAP'
+ label_group_key: 'Clave de filtro de grupo de LDAP'
settings:
- group_key: 'LDAP group attribute'
- group_key_text: 'The LDAP attribute name used to identify the groups.'
- group_base: 'LDAP group base'
- group_base_text: 'LDAP group base used to search for group entries.'
+ group_key: 'Atributo del grupo de LDAP'
+ group_key_text: 'El nombre de atributo LDAP usado para identificar los grupos.'
+ group_base: 'Base del grupo de LDAP'
+ group_base_text: 'Base del grupo de LDAP usado para buscar entradas del grupo.'
synchronized_groups:
- add_new: 'Add synchronized LDAP group'
+ add_new: 'Agregar grupo de LDAP sincronizado'
destroy:
- title: 'Remove synchronized group %{name}'
- confirmation: "If you continue, the synchronized group %{name} and all %{users_count} users synchronized through it will be removed."
- info: "Note: The OpenProject group itself and members added outside this LDAP synchronization will not be removed."
- verification: "Enter the group's name %{name} to verify the deletion."
- no_results: 'No synchronized groups found.'
- no_members: 'This group has no synchronized members yet.'
- plural: 'Synchronized LDAP groups'
- singular: 'Synchronized LDAP group'
+ title: 'Quitar grupo sincronizado %{name}'
+ confirmation: "Si continúa, se eliminarán el grupo sincronizado %{name} y %{users_count} usuarios sincronizados mediante este."
+ info: "Nota: El grupo de OpenProject en sí y los miembros agregados fuera de esta sincronización de LDAP no se eliminarán."
+ verification: "Escriba el nombre del grupo %{name} para verificar la eliminación."
+ no_results: 'No se encontraron grupos sincronizados.'
+ no_members: 'Este grupo aún no tiene miembros sincronizados.'
+ plural: 'Grupos de LDAP sincronizados'
+ singular: 'Grupo de LDAP sincronizado'
form:
- auth_source_text: 'Select which LDAP authentication mode is used.'
- entry_text: 'Define the LDAP group identifier.'
- group_text: 'Select an existing OpenProject group that members of the LDAP group shall be synchronized with'
+ auth_source_text: 'Seleccione el modo de autenticación LDAP usado.'
+ entry_text: 'Defina el identificador de grupo de LDAP.'
+ group_text: 'Seleccione un grupo de OpenProject existente con el que se sincronizarán los miembros del grupo de LDAP'
diff --git a/modules/ldap_groups/config/locales/crowdin/fr.yml b/modules/ldap_groups/config/locales/crowdin/fr.yml
index 6908e75998..1ea6785ae3 100644
--- a/modules/ldap_groups/config/locales/crowdin/fr.yml
+++ b/modules/ldap_groups/config/locales/crowdin/fr.yml
@@ -2,31 +2,31 @@ fr:
activerecord:
attributes:
ldap_groups/synchronized_group:
- entry: 'Entry identifier'
- auth_source: 'LDAP connection'
+ entry: 'Identificateur d''entrée'
+ auth_source: 'Connexion LDAP'
models:
- ldap_groups/synchronized_group: 'Synchronized LDAP group'
+ ldap_groups/synchronized_group: 'Groupe LDAP synchronisé'
ldap_groups:
- label_menu_item: 'LDAP group synchronization'
- label_group_key: 'LDAP group filter key'
+ label_menu_item: 'Synchronisation de groupe LDAP'
+ label_group_key: 'Clé de filtre de groupe LDAP'
settings:
- group_key: 'LDAP group attribute'
- group_key_text: 'The LDAP attribute name used to identify the groups.'
- group_base: 'LDAP group base'
- group_base_text: 'LDAP group base used to search for group entries.'
+ group_key: 'Attribut de groupe LDAP'
+ group_key_text: 'Le nom d''attribut LDAP utilisé pour identifier les groupes.'
+ group_base: 'Base du groupe LDAP'
+ group_base_text: 'Base du groupe LDAP utilisée pour rechercher des entrées du groupe.'
synchronized_groups:
- add_new: 'Add synchronized LDAP group'
+ add_new: 'Ajouter un groupe LDAP synchronisé'
destroy:
- title: 'Remove synchronized group %{name}'
- confirmation: "If you continue, the synchronized group %{name} and all %{users_count} users synchronized through it will be removed."
- info: "Note: The OpenProject group itself and members added outside this LDAP synchronization will not be removed."
- verification: "Enter the group's name %{name} to verify the deletion."
- no_results: 'No synchronized groups found.'
- no_members: 'This group has no synchronized members yet.'
- plural: 'Synchronized LDAP groups'
- singular: 'Synchronized LDAP group'
+ title: 'Supprimer le groupe synchronisé %{name}'
+ confirmation: "Si vous continuez, le groupe synchronisé %{name} et tous les utilisateurs %{users_count} synchronisés par le biais de celui-ci seront supprimés."
+ info: "Remarque : Le groupe OpenProject lui-même et les membres ajoutés en dehors de cette synchronisation LDAP ne seront pas supprimés."
+ verification: "Saisissez le nom du groupe %{name} pour valider la suppression."
+ no_results: 'Aucun groupe synchronisé trouvé.'
+ no_members: 'Ce groupe n''a pas encore de membres synchronisés.'
+ plural: 'Groupes LDAP synchronisés'
+ singular: 'Groupe LDAP synchronisé'
form:
- auth_source_text: 'Select which LDAP authentication mode is used.'
- entry_text: 'Define the LDAP group identifier.'
- group_text: 'Select an existing OpenProject group that members of the LDAP group shall be synchronized with'
+ auth_source_text: 'Sélectionnez le mode d''authentification LDAP utilisé.'
+ entry_text: 'Définissez l''identifiant du groupe LDAP.'
+ group_text: 'Sélectionnez un groupe OpenProject existant avec lequel les membres du groupe LDAP seront synchronisés'
diff --git a/modules/ldap_groups/config/locales/crowdin/ko.yml b/modules/ldap_groups/config/locales/crowdin/ko.yml
index 220fc4612a..97f0dc714c 100644
--- a/modules/ldap_groups/config/locales/crowdin/ko.yml
+++ b/modules/ldap_groups/config/locales/crowdin/ko.yml
@@ -2,31 +2,31 @@ ko:
activerecord:
attributes:
ldap_groups/synchronized_group:
- entry: 'Entry identifier'
- auth_source: 'LDAP connection'
+ entry: '항목 식별자'
+ auth_source: 'LDAP 연결'
models:
- ldap_groups/synchronized_group: 'Synchronized LDAP group'
+ ldap_groups/synchronized_group: '동기화된 LDAP 그룹'
ldap_groups:
- label_menu_item: 'LDAP group synchronization'
- label_group_key: 'LDAP group filter key'
+ label_menu_item: 'LDAP 그룹 동기화'
+ label_group_key: 'LDAP 그룹 필터 키'
settings:
- group_key: 'LDAP group attribute'
- group_key_text: 'The LDAP attribute name used to identify the groups.'
- group_base: 'LDAP group base'
- group_base_text: 'LDAP group base used to search for group entries.'
+ group_key: 'LDAP 그룹 특성'
+ group_key_text: '그룹을 식별하는 데 사용되는 LDAP 특성 이름입니다.'
+ group_base: 'LDAP 그룹 기반'
+ group_base_text: '그룹 항목 검색에 사용되는 LDAP 그룹 기반입니다.'
synchronized_groups:
- add_new: 'Add synchronized LDAP group'
+ add_new: '동기화된 LDAP 그룹 추가'
destroy:
- title: 'Remove synchronized group %{name}'
- confirmation: "If you continue, the synchronized group %{name} and all %{users_count} users synchronized through it will be removed."
- info: "Note: The OpenProject group itself and members added outside this LDAP synchronization will not be removed."
- verification: "Enter the group's name %{name} to verify the deletion."
- no_results: 'No synchronized groups found.'
- no_members: 'This group has no synchronized members yet.'
- plural: 'Synchronized LDAP groups'
- singular: 'Synchronized LDAP group'
+ title: '동기화된 그룹 %{name} 제거'
+ confirmation: "계속하는 경우, 동기화된 그룹 %{name} 및 이를 통해 동기화된 %{users_count}명의 사용자 모두가 제거됩니다."
+ info: "참고: OpenProject 그룹 자체 그리고 이 LDAP 동기화 이외에서 추가된 멤버는 제거되지 않습니다."
+ verification: "삭제를 확인하려면 프로젝트 이름 %{name}(을)를 입력하십시오."
+ no_results: '동기화된 그룹이 없습니다.'
+ no_members: '이 그룹에는 아직 동기화된 멤버가 없습니다.'
+ plural: '동기화된 LDAP 그룹'
+ singular: '동기화된 LDAP 그룹'
form:
- auth_source_text: 'Select which LDAP authentication mode is used.'
- entry_text: 'Define the LDAP group identifier.'
- group_text: 'Select an existing OpenProject group that members of the LDAP group shall be synchronized with'
+ auth_source_text: '사용되는 LDAP 인증 모드를 사용하십시오.'
+ entry_text: 'LDAP 그룹 식별자를 정의하십시오.'
+ group_text: 'LDAP 그룹의 멤버가 동기화되는 기존 OpenProject 그룹 선택'
diff --git a/modules/ldap_groups/config/locales/crowdin/pl.yml b/modules/ldap_groups/config/locales/crowdin/pl.yml
index 0e8c97f602..92083d0031 100644
--- a/modules/ldap_groups/config/locales/crowdin/pl.yml
+++ b/modules/ldap_groups/config/locales/crowdin/pl.yml
@@ -2,31 +2,31 @@ pl:
activerecord:
attributes:
ldap_groups/synchronized_group:
- entry: 'Entry identifier'
- auth_source: 'LDAP connection'
+ entry: 'Identyfikator wpisu'
+ auth_source: 'Połączenie LDAP'
models:
- ldap_groups/synchronized_group: 'Synchronized LDAP group'
+ ldap_groups/synchronized_group: 'Synchronizowana grupa LDAP'
ldap_groups:
- label_menu_item: 'LDAP group synchronization'
- label_group_key: 'LDAP group filter key'
+ label_menu_item: 'Synchronizacja grupy LDAP'
+ label_group_key: 'Klucz filtru grupy LDAP'
settings:
- group_key: 'LDAP group attribute'
- group_key_text: 'The LDAP attribute name used to identify the groups.'
- group_base: 'LDAP group base'
- group_base_text: 'LDAP group base used to search for group entries.'
+ group_key: 'Atrybut grupy LDAP'
+ group_key_text: 'Nazwa atrybutu LDAP używana do identyfikacji grup.'
+ group_base: 'Baza grupy LDAP'
+ group_base_text: 'Baza grupy LDAP używana do wyszukiwania wpisów grupy.'
synchronized_groups:
- add_new: 'Add synchronized LDAP group'
+ add_new: 'Dodaj synchronizowaną grupę LDAP'
destroy:
- title: 'Remove synchronized group %{name}'
- confirmation: "If you continue, the synchronized group %{name} and all %{users_count} users synchronized through it will be removed."
- info: "Note: The OpenProject group itself and members added outside this LDAP synchronization will not be removed."
- verification: "Enter the group's name %{name} to verify the deletion."
- no_results: 'No synchronized groups found.'
- no_members: 'This group has no synchronized members yet.'
- plural: 'Synchronized LDAP groups'
- singular: 'Synchronized LDAP group'
+ title: 'Usuń synchronizowaną grupę %{name}'
+ confirmation: "W przypadku kontynuacji usunięta zostanie synchronizowana grupa %{name} i wszyscy użytkownicy (%{users_count}) synchronizowani za jej pośrednictwem."
+ info: "Uwaga: nie zostanie usunięta sama grupa OpenProject ani członkowie dodani poza tą synchronizacją LDAP."
+ verification: "Wprowadź nazwę grupy %{name}, aby potwierdzić usunięcie."
+ no_results: 'Nie znaleziono żadnych synchronizowanych grup.'
+ no_members: 'Ta grupa nie ma jeszcze synchronizowanych członków.'
+ plural: 'Synchronizowane grupy LDAP'
+ singular: 'Synchronizowana grupa LDAP'
form:
- auth_source_text: 'Select which LDAP authentication mode is used.'
- entry_text: 'Define the LDAP group identifier.'
- group_text: 'Select an existing OpenProject group that members of the LDAP group shall be synchronized with'
+ auth_source_text: 'Wybierz tryb uwierzytelniania LDAP, który ma być używany.'
+ entry_text: 'Określ identyfikator grupy LDAP.'
+ group_text: 'Wybierz istniejącą grupę OpenProject, z którą będą synchronizowani członkowie grupy LDAP'
diff --git a/modules/ldap_groups/config/locales/crowdin/zh-CN.yml b/modules/ldap_groups/config/locales/crowdin/zh-CN.yml
index f60e0d2a2e..e2019293f1 100644
--- a/modules/ldap_groups/config/locales/crowdin/zh-CN.yml
+++ b/modules/ldap_groups/config/locales/crowdin/zh-CN.yml
@@ -12,15 +12,15 @@ zh-CN:
settings:
group_key: 'LDAP 组属性'
group_key_text: '用于识别组的 LDAP 属性名称。'
- group_base: 'LDAP 组基数'
- group_base_text: '用于搜索组条目的 LDAP 组基数。'
+ group_base: 'LDAP 组库'
+ group_base_text: '用于搜索组条目的 LDAP 组库。'
synchronized_groups:
add_new: '添加同步的 LDAP 组'
destroy:
- title: '删除同步组 %{name}'
- confirmation: "如果您继续,将删除同步组 %{name} 和通过该组同步的全部 %{users_count} 个用户。"
- info: "注意:OpenProject 组本身以及在 LDAP 同步之外添加的成员将不会被删除。"
- verification: "输入组名称 %{name} 来验证删除。"
+ title: '移除同步组 %{name}'
+ confirmation: "如果您继续,将移除同步组 %{name} 和通过该组同步的全部 %{users_count} 个用户。"
+ info: "注意:OpenProject 组本身以及在 LDAP 同步之外添加的成员将不会被移除。"
+ verification: "输入组名称 %{name} 以验证删除。"
no_results: '未找到同步的组。'
no_members: '此组尚无同步成员。'
plural: '同步的 LDAP 组'
@@ -28,5 +28,5 @@ zh-CN:
form:
auth_source_text: '选择使用哪种 LDAP 身份验证模式。'
entry_text: '定义 LDAP 组标识符。'
- group_text: '选择一个 LDAP 组的成员应与其同步的现有 OpenProject 组'
+ group_text: '选择 LDAP 组的成员应与其同步的现有 OpenProject 组'
diff --git a/modules/openid_connect/config/locales/crowdin/es.yml b/modules/openid_connect/config/locales/crowdin/es.yml
index 6eccf4ece3..41c23e3e8e 100644
--- a/modules/openid_connect/config/locales/crowdin/es.yml
+++ b/modules/openid_connect/config/locales/crowdin/es.yml
@@ -1,19 +1,19 @@
es:
logout_warning: >
- You have been logged out. The contents of any form you submit may be lost. Please [log in].
+ Se ha cerrado la sesión. Puede que se haya perdido el contenido de cualquier formulario que haya enviado. [Inicie la sesión].
activemodel:
attributes:
openid_connect/provider:
name: Nombre
- display_name: Display name
+ display_name: Nombre para mostrar
identifier: Identificador
- secret: Secret
- scope: Scope
+ secret: Secreto
+ scope: Ámbito
openid_connect:
- menu_title: OpenID providers
+ menu_title: Proveedores de OpenID
providers:
- label_add_new: Add a new OpenID provider
- label_edit: Edit OpenID provider %{name}
- no_results_table: No providers have been defined yet.
- plural: OpenID providers
- singular: OpenID provider
+ label_add_new: Agregar nuevo proveedor de OpenID
+ label_edit: Editar el proveedor de OpenID %{name}
+ no_results_table: Aún no se han definido proveedores.
+ plural: Proveedores de OpenID
+ singular: Proveedor de OpenID
diff --git a/modules/openid_connect/config/locales/crowdin/fr.yml b/modules/openid_connect/config/locales/crowdin/fr.yml
index b781ac449f..54295db294 100644
--- a/modules/openid_connect/config/locales/crowdin/fr.yml
+++ b/modules/openid_connect/config/locales/crowdin/fr.yml
@@ -5,7 +5,7 @@ fr:
attributes:
openid_connect/provider:
name: Nom
- display_name: Display name
+ display_name: Nom d'affichage
identifier: Identifiant
secret: Secret
scope: Portée
diff --git a/modules/openid_connect/config/locales/crowdin/ko.yml b/modules/openid_connect/config/locales/crowdin/ko.yml
index 5f72747193..00754dac52 100644
--- a/modules/openid_connect/config/locales/crowdin/ko.yml
+++ b/modules/openid_connect/config/locales/crowdin/ko.yml
@@ -1,19 +1,19 @@
ko:
logout_warning: >
- You have been logged out. The contents of any form you submit may be lost. Please [log in].
+ 로그아웃되었습니다. 제출한 양식의 내용이 손실될 수 있습니다. [로그인]하십시오.
activemodel:
attributes:
openid_connect/provider:
name: 이름
- display_name: Display name
+ display_name: 표시 이름
identifier: 식별자
- secret: Secret
- scope: Scope
+ secret: 비밀번호
+ scope: 범위
openid_connect:
- menu_title: OpenID providers
+ menu_title: OpenID 공급자
providers:
- label_add_new: Add a new OpenID provider
- label_edit: Edit OpenID provider %{name}
- no_results_table: No providers have been defined yet.
- plural: OpenID providers
- singular: OpenID provider
+ label_add_new: 새로운 OpenID 공급자 추가
+ label_edit: OpenID 공급자 %{name} 편집
+ no_results_table: 아직 정의된 공급자가 없습니다.
+ plural: OpenID 공급자
+ singular: OpenID 공급자
diff --git a/modules/openid_connect/config/locales/crowdin/pl.yml b/modules/openid_connect/config/locales/crowdin/pl.yml
index b1bd1ed79b..09d2aad9de 100644
--- a/modules/openid_connect/config/locales/crowdin/pl.yml
+++ b/modules/openid_connect/config/locales/crowdin/pl.yml
@@ -1,19 +1,19 @@
pl:
logout_warning: >
- You have been logged out. The contents of any form you submit may be lost. Please [log in].
+ Wylogowano cię. Zawartość każdego przesłanego formularza może zostać utracona. [Zaloguj się].
activemodel:
attributes:
openid_connect/provider:
name: Nazwa
- display_name: Display name
+ display_name: Nazwa wyświetlana
identifier: Identyfikator
- secret: Secret
- scope: Scope
+ secret: Tajny klucz
+ scope: Zakres
openid_connect:
- menu_title: OpenID providers
+ menu_title: Dostawcy OpenID
providers:
- label_add_new: Add a new OpenID provider
- label_edit: Edit OpenID provider %{name}
- no_results_table: No providers have been defined yet.
- plural: OpenID providers
- singular: OpenID provider
+ label_add_new: Dodaj nowego dostawcę OpenID
+ label_edit: Edytuj dostawcę OpenID %{name}
+ no_results_table: Jeszcze nie określono żadnych dostawców.
+ plural: Dostawcy OpenID
+ singular: Dostawca OpenID
diff --git a/modules/openid_connect/config/locales/crowdin/zh-CN.yml b/modules/openid_connect/config/locales/crowdin/zh-CN.yml
index 67469d2092..e4dfe0ac8a 100644
--- a/modules/openid_connect/config/locales/crowdin/zh-CN.yml
+++ b/modules/openid_connect/config/locales/crowdin/zh-CN.yml
@@ -1,6 +1,6 @@
zh-CN:
logout_warning: >
- 您已注销。您提交的任何表单的内容可能丢失。请[登录]。
+ 您已退出。您提交的任何表单的内容可能丢失。请[登录]。
activemodel:
attributes:
openid_connect/provider:
@@ -10,10 +10,10 @@ zh-CN:
secret: 密钥
scope: 范围
openid_connect:
- menu_title: OpenID 提供者
+ menu_title: OpenID 提供商
providers:
- label_add_new: 添加一个新的 OpenID 提供者
- label_edit: 编辑 OpenID 提供者 %{name}
- no_results_table: 尚未定义提供者。
- plural: OpenID 提供者
- singular: OpenID 提供者
+ label_add_new: 添加一个新的 OpenID 提供商
+ label_edit: 编辑 OpenID 提供商 %{name}
+ no_results_table: 尚未定义提供商。
+ plural: OpenID 提供商
+ singular: OpenID 提供商
diff --git a/modules/recaptcha/config/locales/crowdin/es.yml b/modules/recaptcha/config/locales/crowdin/es.yml
index 04982b1f76..298ec29f7f 100644
--- a/modules/recaptcha/config/locales/crowdin/es.yml
+++ b/modules/recaptcha/config/locales/crowdin/es.yml
@@ -1,17 +1,17 @@
es:
recaptcha:
label_recaptcha: "reCAPTCHA"
- button_please_wait: 'Please wait ...'
- verify_account: "Verify your account"
- error_captcha: "Your account could not be verified. Please contact an administrator."
+ button_please_wait: 'Espere…'
+ verify_account: "Verifique su cuenta"
+ error_captcha: "No se pudo verificar su cuenta. Póngase en contacto con un administrador."
settings:
- website_key: 'Website key'
- website_key_text: 'Enter the website key you created on the reCAPTCHA admin console for this domain.'
+ website_key: 'Clave del sitio web'
+ website_key_text: 'Especifique la clave del sitio web que ha creado en la consola de administración de reCAPTCHA para este dominio.'
secret_key: 'Llave secreta'
- secret_key_text: 'Enter the secret key you created on the reCAPTCHA admin console.'
- type: 'Use reCAPTCHA'
- type_disabled: 'Disable reCAPTCHA'
+ secret_key_text: 'Especifique la clave secreta que ha creado en la consola de administración de reCAPTCHA.'
+ type: 'Usar reCAPTCHA'
+ type_disabled: 'Deshabilitar reCAPTCHA'
type_v2: 'reCAPTCHA v2'
type_v3: 'reCAPTCHA v3'
recaptcha_description_html: >
- reCAPTCHA is a free service by Google that can be enabled for your OpenProject instance. If enabled, a captcha form will be rendered upon login for all users that have not verified a captcha yet. Please see the following link for more details on reCAPTCHA and their versions, and how to create the website and secret keys: %{recaptcha_link}
+ reCAPTCHA es un servicio gratuito ofrecido por Google que se puede habilitar para su instancia de OpenProject. Si se habilita, se mostrará un formulario de CAPTCHA cuando inicien sesión los usuarios que aún no se hayan verificado mediante un CAPTCHA. Consulte el vínculo siguiente para obtener más información sobre reCAPTCHA y sus versiones, y cómo crear el sitio web y las claves secretas: %{recaptcha_link}
diff --git a/modules/recaptcha/config/locales/crowdin/fr.yml b/modules/recaptcha/config/locales/crowdin/fr.yml
index b437d4832f..8448bc7599 100644
--- a/modules/recaptcha/config/locales/crowdin/fr.yml
+++ b/modules/recaptcha/config/locales/crowdin/fr.yml
@@ -1,17 +1,17 @@
fr:
recaptcha:
label_recaptcha: "reCAPTCHA"
- button_please_wait: 'Please wait ...'
- verify_account: "Verify your account"
- error_captcha: "Your account could not be verified. Please contact an administrator."
+ button_please_wait: 'Veuillez patienter ...'
+ verify_account: "Vérifiez votre compte"
+ error_captcha: "Votre compte n'a pas pu être vérifié. Veuillez contacter un administrateur."
settings:
- website_key: 'Website key'
- website_key_text: 'Enter the website key you created on the reCAPTCHA admin console for this domain.'
+ website_key: 'Clé du site Web'
+ website_key_text: 'Entrez la clé du site Web que vous avez créée dans la console d''administration reCAPTCHA pour ce domaine.'
secret_key: 'Clé secrète'
- secret_key_text: 'Enter the secret key you created on the reCAPTCHA admin console.'
- type: 'Use reCAPTCHA'
- type_disabled: 'Disable reCAPTCHA'
+ secret_key_text: 'Entrez la clé secrète que vous avez créée dans la console d''administration reCAPTCHA.'
+ type: 'Utiliser reCAPTCHA'
+ type_disabled: 'Désactiver reCAPTCHA'
type_v2: 'reCAPTCHA v2'
type_v3: 'reCAPTCHA v3'
recaptcha_description_html: >
- reCAPTCHA is a free service by Google that can be enabled for your OpenProject instance. If enabled, a captcha form will be rendered upon login for all users that have not verified a captcha yet. Please see the following link for more details on reCAPTCHA and their versions, and how to create the website and secret keys: %{recaptcha_link}
+ reCAPTCHA est un service gratuit de Google qui peut être activé pour votre instance OpenProject. Si cette option est activée, un formulaire captcha sera affiché lors de la connexion pour tous les utilisateurs qui n'ont pas encore été vérifiés par un captcha. Veuillez consulter le lien suivant pour plus de détails sur reCAPTCHA et ses versions, et sur la façon de créer le site et les clés secrètes : %{recaptcha_link}
diff --git a/modules/recaptcha/config/locales/crowdin/ko.yml b/modules/recaptcha/config/locales/crowdin/ko.yml
index 5c8c7636f1..9c8e4b7db0 100644
--- a/modules/recaptcha/config/locales/crowdin/ko.yml
+++ b/modules/recaptcha/config/locales/crowdin/ko.yml
@@ -1,17 +1,17 @@
ko:
recaptcha:
label_recaptcha: "reCAPTCHA"
- button_please_wait: 'Please wait ...'
- verify_account: "Verify your account"
- error_captcha: "Your account could not be verified. Please contact an administrator."
+ button_please_wait: '기다려주십시오...'
+ verify_account: "계정 인증"
+ error_captcha: "계정을 인증할 수 없습니다. 관리자에게 문의하십시오."
settings:
- website_key: 'Website key'
- website_key_text: 'Enter the website key you created on the reCAPTCHA admin console for this domain.'
+ website_key: '웹사이트 키'
+ website_key_text: '이 도메인의 reCAPTCHA 관리 콘솔에서 만든 웹사이트 키를 입력하십시오.'
secret_key: '비밀 키'
- secret_key_text: 'Enter the secret key you created on the reCAPTCHA admin console.'
- type: 'Use reCAPTCHA'
- type_disabled: 'Disable reCAPTCHA'
+ secret_key_text: 'reCAPTCHA 관리 콘솔에서 만든 비밀 키를 입력하십시오.'
+ type: 'reCAPTCHA 사용'
+ type_disabled: 'reCAPTCHA 사용 안 함'
type_v2: 'reCAPTCHA v2'
type_v3: 'reCAPTCHA v3'
recaptcha_description_html: >
- reCAPTCHA is a free service by Google that can be enabled for your OpenProject instance. If enabled, a captcha form will be rendered upon login for all users that have not verified a captcha yet. Please see the following link for more details on reCAPTCHA and their versions, and how to create the website and secret keys: %{recaptcha_link}
+ reCAPTCHA는 해당 OpenProject 인스턴스에 대해 활성화할 수 있는 Google의 무료 서비스입니다. 활성화하면, 캡차를 아직 확인하지 않은 모든 사용자가 로그인할 때 캡차 양식이 렌더링됩니다. reCAPTCHA와 해당 버전 관련 세부 정보 및 웹사이트 키와 비밀 키를 생성하는 방법은 다음 링크를 참조하십시오: %{recaptcha_link}
diff --git a/modules/recaptcha/config/locales/crowdin/pl.yml b/modules/recaptcha/config/locales/crowdin/pl.yml
index dd4a68d41f..52b4f5f98b 100644
--- a/modules/recaptcha/config/locales/crowdin/pl.yml
+++ b/modules/recaptcha/config/locales/crowdin/pl.yml
@@ -1,17 +1,17 @@
pl:
recaptcha:
label_recaptcha: "reCAPTCHA"
- button_please_wait: 'Please wait ...'
- verify_account: "Verify your account"
- error_captcha: "Your account could not be verified. Please contact an administrator."
+ button_please_wait: 'Czekaj...'
+ verify_account: "Zweryfikuj swoje konto"
+ error_captcha: "Nie można zweryfikować tego konta. Skontaktuj się z administratorem."
settings:
- website_key: 'Website key'
- website_key_text: 'Enter the website key you created on the reCAPTCHA admin console for this domain.'
+ website_key: 'Klucz witryny internetowej'
+ website_key_text: 'Wprowadź klucz witryny utworzony w konsoli administracyjnej reCAPTCHA tej domeny.'
secret_key: 'Tajny klucz'
- secret_key_text: 'Enter the secret key you created on the reCAPTCHA admin console.'
- type: 'Use reCAPTCHA'
- type_disabled: 'Disable reCAPTCHA'
+ secret_key_text: 'Wprowadź tajny klucz utworzony w konsoli administracyjnej reCAPTCHA.'
+ type: 'Użyj reCAPTCHA'
+ type_disabled: 'Wyłącz reCAPTCHA'
type_v2: 'reCAPTCHA v2'
type_v3: 'reCAPTCHA v3'
recaptcha_description_html: >
- reCAPTCHA is a free service by Google that can be enabled for your OpenProject instance. If enabled, a captcha form will be rendered upon login for all users that have not verified a captcha yet. Please see the following link for more details on reCAPTCHA and their versions, and how to create the website and secret keys: %{recaptcha_link}
+ reCAPTCHA jest bezpłatną usługą Google, którą można włączyć dla wystąpienia OpenProject. Jeśli jest włączona, formularz captcha będzie wyświetlany po zalogowaniu wszystkim użytkownikom, którzy nie zweryfikowali jeszcze captcha. Aby uzyskać więcej informacji na temat reCAPTCHA i jej wersji oraz sposobu tworzenia witryny internetowej i tajnych kluczy, sprawdź następujące łącze: %{recaptcha_link}
diff --git a/modules/recaptcha/config/locales/crowdin/ru.yml b/modules/recaptcha/config/locales/crowdin/ru.yml
index 703aeebd54..ea3dcb4cba 100644
--- a/modules/recaptcha/config/locales/crowdin/ru.yml
+++ b/modules/recaptcha/config/locales/crowdin/ru.yml
@@ -1,17 +1,17 @@
ru:
recaptcha:
label_recaptcha: "reCAPTCHA"
- button_please_wait: 'Please wait ...'
- verify_account: "Verify your account"
- error_captcha: "Your account could not be verified. Please contact an administrator."
+ button_please_wait: 'Пожалуйста, подождите...'
+ verify_account: "Подтвердить учетную запись"
+ error_captcha: "Невозможно подтвердить учетную запись. Пожалуйста, свяжитесь с администратором."
settings:
- website_key: 'Website key'
- website_key_text: 'Enter the website key you created on the reCAPTCHA admin console for this domain.'
+ website_key: 'Ключ веб-сайта'
+ website_key_text: 'Введите ключ веб-сайта, который вы создали на консоли администратора reCAPTCHA для этого домена.'
secret_key: 'Секретный ключ'
- secret_key_text: 'Enter the secret key you created on the reCAPTCHA admin console.'
- type: 'Use reCAPTCHA'
- type_disabled: 'Disable reCAPTCHA'
+ secret_key_text: 'Введите секретный ключ, который вы создали на консоли администратора reCAPTCHA.'
+ type: 'Использовать reCAPTCHA'
+ type_disabled: 'Отключить reCAPTCHA'
type_v2: 'reCAPTCHA v2'
type_v3: 'reCAPTCHA v3'
recaptcha_description_html: >
- reCAPTCHA is a free service by Google that can be enabled for your OpenProject instance. If enabled, a captcha form will be rendered upon login for all users that have not verified a captcha yet. Please see the following link for more details on reCAPTCHA and their versions, and how to create the website and secret keys: %{recaptcha_link}
+ reCAPTCHA — это бесплатный сервис Google, который можно включить для OpenProject. Если он включен, форма ввода капчи будет отображаться при входе для всех пользователей, которые еще не подтвердили капчу. Пожалуйста, перейдите по следующей ссылке, чтобы узнать больше о reCAPTCHA и его версиях, а также о том, как создать веб-сайт и секретные ключи: %{recaptcha_link}
diff --git a/modules/recaptcha/config/locales/crowdin/zh-CN.yml b/modules/recaptcha/config/locales/crowdin/zh-CN.yml
index 9c29fabf64..dfd62f4d9c 100644
--- a/modules/recaptcha/config/locales/crowdin/zh-CN.yml
+++ b/modules/recaptcha/config/locales/crowdin/zh-CN.yml
@@ -1,17 +1,17 @@
zh-CN:
recaptcha:
label_recaptcha: "reCAPTCHA"
- button_please_wait: 'Please wait ...'
- verify_account: "Verify your account"
- error_captcha: "Your account could not be verified. Please contact an administrator."
+ button_please_wait: '请稍候…'
+ verify_account: "验证您的帐户"
+ error_captcha: "您的帐户无法验证。请联系管理员。"
settings:
- website_key: 'Website key'
- website_key_text: 'Enter the website key you created on the reCAPTCHA admin console for this domain.'
+ website_key: '网站密钥'
+ website_key_text: '输入您在 reCAPTCHA 管理控制台上为此域创建的网站密钥。'
secret_key: '密钥'
- secret_key_text: 'Enter the secret key you created on the reCAPTCHA admin console.'
- type: 'Use reCAPTCHA'
- type_disabled: 'Disable reCAPTCHA'
+ secret_key_text: '输入您在 reCAPTCHA 管理控制台上创建的密钥。'
+ type: '使用 reCAPTCHA'
+ type_disabled: '禁用 reCAPTCHA'
type_v2: 'reCAPTCHA v2'
type_v3: 'reCAPTCHA v3'
recaptcha_description_html: >
- reCAPTCHA is a free service by Google that can be enabled for your OpenProject instance. If enabled, a captcha form will be rendered upon login for all users that have not verified a captcha yet. Please see the following link for more details on reCAPTCHA and their versions, and how to create the website and secret keys: %{recaptcha_link}
+ reCAPTCHA 是一项可为您的 OpenProject 实例启用的 Google 免费服务。如果启用,则在登录时将为尚未验证验证码的所有用户提供一个验证码表单。 请参见以下链接,获取有关 reCAPTCHA 及其版本以及如何创建网站和密钥的更多详细信息:%{recaptcha_link}
diff --git a/modules/webhooks/config/locales/crowdin/es.yml b/modules/webhooks/config/locales/crowdin/es.yml
index d8e72cd570..f9d8a353ed 100644
--- a/modules/webhooks/config/locales/crowdin/es.yml
+++ b/modules/webhooks/config/locales/crowdin/es.yml
@@ -2,55 +2,55 @@ es:
activerecord:
attributes:
webhooks/webhook:
- url: 'Payload URL'
- secret: 'Signature secret'
- events: 'Events'
+ url: 'URL de carga'
+ secret: 'Secreto de firma'
+ events: 'Eventos'
projects: 'Proyectos habilitados'
webhooks/log:
- event_name: 'Event name'
- url: 'Payload URL'
- response_code: 'Response code'
- response_body: 'Response'
+ event_name: 'Nombre del evento'
+ url: 'URL de carga'
+ response_code: 'Código de respuesta'
+ response_body: 'Respuesta'
models:
- webhooks/outgoing_webhook: "Outgoing webhook"
+ webhooks/outgoing_webhook: "Webhook de salida"
webhooks:
singular: Webhook
plural: Webhooks
outgoing:
- no_results_table: No webhooks have been defined yet.
- label_add_new: Add new webhook
- label_edit: Edit webhook
- label_event_resources: Event resources
+ no_results_table: Aún no se han definido webhooks.
+ label_add_new: Agregar nuevo webhook
+ label_edit: Editar webhook
+ label_event_resources: Recursos del evento
events:
created: "Creado"
- updated: "Updated"
+ updated: "Actualizado"
status:
- enabled: 'Webhook is enabled'
- disabled: 'Webhook is disabled'
- enabled_text: 'The webhook will emit payloads for the defined events below.'
- disabled_text: 'Click the edit button to activate the webhook.'
+ enabled: 'El webhook está habilitado'
+ disabled: 'El webhook está deshabilitado'
+ enabled_text: 'El webhook emitirá cargas para los eventos definidos a continuación.'
+ disabled_text: 'Haga clic en el botón Editar para activar el webhook.'
deliveries:
- no_results_table: No deliveries have been made for this webhook.
- title: 'Recent deliveries'
- time: 'Delivery time'
+ no_results_table: No se han realizado entregas para este webhook.
+ title: 'Entregas recientes'
+ time: 'Hora de entrega'
form:
introduction: >
- Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
- apiv3_doc_url: For more information, visit the API documentation
+ Envíe una solicitud POST a la URL de carga siguiente para cualquier evento en el proyecto al que se haya suscrito. La carga se corresponderá con la representación de APIv3 del objeto que se vaya a modificar.
+ apiv3_doc_url: Para obtener más información, visite la documentación de la API
description:
- placeholder: 'Optional description for the webhook.'
+ placeholder: 'Descripción opcional del webhook.'
enabled:
description: >
- When checked, the webhook will trigger on the selected events. Uncheck to disable the webhook.
+ Al activar esta opción, el webhook se activará cuando se produzcan los eventos seleccionados. Desactive esta opción para deshabilitar el webhook.
events:
- title: 'Enabled events'
+ title: 'Eventos habilitados'
project_ids:
title: 'Proyectos habilitados'
- description: 'Select for which projects this webhook should be executed for.'
- all: 'All projects'
- selected: 'Selected projects only'
+ description: 'Seleccione para qué proyectos se ejecutará este webhook.'
+ all: 'Todos los proyectos'
+ selected: 'Solo los proyectos seleccionados'
selected_project_ids:
- title: 'Selected projects'
+ title: 'Proyectos seleccionados'
secret:
description: >
- If set, this secret value is used by OpenProject to sign the webhook payload.
+ Si se establece el valor secreto, OpenProject se usará para firmar la carga del webhook.
diff --git a/modules/webhooks/config/locales/crowdin/fr.yml b/modules/webhooks/config/locales/crowdin/fr.yml
index 54c5617336..0d78ca38c3 100644
--- a/modules/webhooks/config/locales/crowdin/fr.yml
+++ b/modules/webhooks/config/locales/crowdin/fr.yml
@@ -2,55 +2,55 @@ fr:
activerecord:
attributes:
webhooks/webhook:
- url: 'Payload URL'
- secret: 'Signature secret'
- events: 'Events'
+ url: 'URL de payload'
+ secret: 'Secret de la signature'
+ events: 'Événements'
projects: 'Projets activés'
webhooks/log:
- event_name: 'Event name'
- url: 'Payload URL'
- response_code: 'Response code'
- response_body: 'Response'
+ event_name: 'Nom de l''événement'
+ url: 'URL de payload'
+ response_code: 'Code de réponse'
+ response_body: 'Réponse'
models:
- webhooks/outgoing_webhook: "Outgoing webhook"
+ webhooks/outgoing_webhook: "Webhook sortant"
webhooks:
singular: Webhook
plural: Webhooks
outgoing:
- no_results_table: No webhooks have been defined yet.
- label_add_new: Add new webhook
- label_edit: Edit webhook
- label_event_resources: Event resources
+ no_results_table: Aucun webhook n'a encore été défini.
+ label_add_new: Ajouter un nouveau webhook
+ label_edit: Modifier le webhook
+ label_event_resources: Ressources de l'événement
events:
created: "Créé"
- updated: "Updated"
+ updated: "Mis à jour"
status:
- enabled: 'Webhook is enabled'
- disabled: 'Webhook is disabled'
- enabled_text: 'The webhook will emit payloads for the defined events below.'
- disabled_text: 'Click the edit button to activate the webhook.'
+ enabled: 'Webhook activé'
+ disabled: 'Webhook désactivé'
+ enabled_text: 'Le webhook émettra des payloads pour les événements définis ci-dessous.'
+ disabled_text: 'Cliquez sur le bouton Modifier pour activer le webhook.'
deliveries:
- no_results_table: No deliveries have been made for this webhook.
- title: 'Recent deliveries'
- time: 'Delivery time'
+ no_results_table: Aucune livraison n'a été effectuée pour ce webhook.
+ title: 'Livraisons récentes'
+ time: 'Délai de livraison'
form:
introduction: >
- Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
- apiv3_doc_url: For more information, visit the API documentation
+ Envoyez une demande POST à l'URL de payload ci-dessous pour tout événement dans le projet auquel vous êtes abonné. Payload correspond à la représentation APIv3 de l'objet en cours de modification.
+ apiv3_doc_url: Pour plus d'informations, consultez la documentation API
description:
- placeholder: 'Optional description for the webhook.'
+ placeholder: 'Description facultative pour le webhook.'
enabled:
description: >
- When checked, the webhook will trigger on the selected events. Uncheck to disable the webhook.
+ En cochant cette option, le webhook déclenchera les événements sélectionnés. Décochez pour désactiver le webhook.
events:
- title: 'Enabled events'
+ title: 'Événements activés'
project_ids:
title: 'Projets activés'
- description: 'Select for which projects this webhook should be executed for.'
- all: 'All projects'
- selected: 'Selected projects only'
+ description: 'Sélectionnez les projets pour lesquels ce webhook doit être exécuté.'
+ all: 'Tous les projets'
+ selected: 'Projets sélectionnés uniquement'
selected_project_ids:
- title: 'Selected projects'
+ title: 'Projets sélectionnés'
secret:
description: >
- If set, this secret value is used by OpenProject to sign the webhook payload.
+ Si définie, cette valeur secrète est utilisée par OpenProject pour signer le payload du webhook.
diff --git a/modules/webhooks/config/locales/crowdin/ko.yml b/modules/webhooks/config/locales/crowdin/ko.yml
index ec484c2f8a..254f718775 100644
--- a/modules/webhooks/config/locales/crowdin/ko.yml
+++ b/modules/webhooks/config/locales/crowdin/ko.yml
@@ -2,55 +2,55 @@ ko:
activerecord:
attributes:
webhooks/webhook:
- url: 'Payload URL'
- secret: 'Signature secret'
- events: 'Events'
+ url: '페이로드 URL'
+ secret: '서명 비밀번호'
+ events: '이벤트'
projects: '활성화 된 프로젝트'
webhooks/log:
- event_name: 'Event name'
- url: 'Payload URL'
- response_code: 'Response code'
- response_body: 'Response'
+ event_name: '이벤트 이름'
+ url: '페이로드 URL'
+ response_code: '응답 코드'
+ response_body: '응답'
models:
- webhooks/outgoing_webhook: "Outgoing webhook"
+ webhooks/outgoing_webhook: "발신 Webhook"
webhooks:
singular: Webhook
- plural: Webhooks
+ plural: Webhook
outgoing:
- no_results_table: No webhooks have been defined yet.
- label_add_new: Add new webhook
- label_edit: Edit webhook
- label_event_resources: Event resources
+ no_results_table: 아직 정의된 Webhook이 없습니다.
+ label_add_new: 새로운 Webhook 추가
+ label_edit: Webhook 편집
+ label_event_resources: 이벤트 리소스
events:
created: "생성됨"
- updated: "Updated"
+ updated: "업데이트됨"
status:
- enabled: 'Webhook is enabled'
- disabled: 'Webhook is disabled'
- enabled_text: 'The webhook will emit payloads for the defined events below.'
- disabled_text: 'Click the edit button to activate the webhook.'
+ enabled: 'Webhook이 활성화되었습니다'
+ disabled: 'Webhook이 비활성화되었습니다'
+ enabled_text: 'Webhook은 아래에 정의된 이벤트의 페이로드를 내보냅니다.'
+ disabled_text: '편집 버튼을 클릭하여 Webhook을 활성화하십시오.'
deliveries:
- no_results_table: No deliveries have been made for this webhook.
- title: 'Recent deliveries'
- time: 'Delivery time'
+ no_results_table: 이 Webhook에 대한 배달이 진행되지 않았습니다.
+ title: '최근 배달'
+ time: '배달 시간'
form:
introduction: >
- Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
- apiv3_doc_url: For more information, visit the API documentation
+ 구독하는 프로젝트의 모든 이벤트에 대해 아래의 페이로드 URL에 POST 요청을 보내십시오. 페이로드는 수정될 개체의 APIv3 표현에 해당합니다.
+ apiv3_doc_url: 자세한 내용은 API 설명서를 참조하십시오.
description:
- placeholder: 'Optional description for the webhook.'
+ placeholder: 'Webhook에 대한 선택적 설명입니다.'
enabled:
description: >
- When checked, the webhook will trigger on the selected events. Uncheck to disable the webhook.
+ 선택한 경우, 선택된 이벤트에서 Webhook이 트리거됩니다. Webhook을 비활성화하려면 선택 취소하십시오.
events:
- title: 'Enabled events'
+ title: '활성화된 이벤트'
project_ids:
title: '활성화 된 프로젝트'
- description: 'Select for which projects this webhook should be executed for.'
- all: 'All projects'
- selected: 'Selected projects only'
+ description: '이 Webhook이 실행되는 프로젝트를 선택하십시오.'
+ all: '모든 프로젝트'
+ selected: '선택한 프로젝트만'
selected_project_ids:
- title: 'Selected projects'
+ title: '선택한 프로젝트'
secret:
description: >
- If set, this secret value is used by OpenProject to sign the webhook payload.
+ 설정한 경우 이 비밀번호 값은 OpenProject에 의해 Webhook 페이로드에 서명하는 데 사용됩니다.
diff --git a/modules/webhooks/config/locales/crowdin/pl.yml b/modules/webhooks/config/locales/crowdin/pl.yml
index 576864a090..2a936435e9 100644
--- a/modules/webhooks/config/locales/crowdin/pl.yml
+++ b/modules/webhooks/config/locales/crowdin/pl.yml
@@ -2,55 +2,55 @@ pl:
activerecord:
attributes:
webhooks/webhook:
- url: 'Payload URL'
- secret: 'Signature secret'
- events: 'Events'
+ url: 'URL do wywołania'
+ secret: 'Tajny klucz podpisu'
+ events: 'Zdarzenia'
projects: 'Aktywne projekty'
webhooks/log:
- event_name: 'Event name'
- url: 'Payload URL'
- response_code: 'Response code'
- response_body: 'Response'
+ event_name: 'Nazwa zdarzenia'
+ url: 'URL do wywołania'
+ response_code: 'Kod odpowiedzi'
+ response_body: 'Odpowiedź'
models:
- webhooks/outgoing_webhook: "Outgoing webhook"
+ webhooks/outgoing_webhook: "Webhook wychodzący"
webhooks:
singular: Webhook
- plural: Webhooks
+ plural: Webhooki
outgoing:
- no_results_table: No webhooks have been defined yet.
- label_add_new: Add new webhook
- label_edit: Edit webhook
- label_event_resources: Event resources
+ no_results_table: Jeszcze nie określono żadnych webhooków.
+ label_add_new: Dodaj nowy webhook
+ label_edit: Edytuj webhook
+ label_event_resources: Zasoby zdarzeń
events:
created: "Utworzono"
- updated: "Updated"
+ updated: "Zaktualizowano"
status:
- enabled: 'Webhook is enabled'
- disabled: 'Webhook is disabled'
- enabled_text: 'The webhook will emit payloads for the defined events below.'
- disabled_text: 'Click the edit button to activate the webhook.'
+ enabled: 'Webhook jest włączony'
+ disabled: 'Webhook jest wyłączony'
+ enabled_text: 'Webhook będzie emitować zawartość zdarzeń określonych poniżej.'
+ disabled_text: 'Kliknij przycisk edycji, aby aktywować webhook.'
deliveries:
- no_results_table: No deliveries have been made for this webhook.
- title: 'Recent deliveries'
- time: 'Delivery time'
+ no_results_table: Nie wykonano żadnych dostaw dla tego webhooka.
+ title: 'Ostatnie dostawy'
+ time: 'Czas dostawy'
form:
introduction: >
- Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
- apiv3_doc_url: For more information, visit the API documentation
+ Wyślij żądanie POST na adres URL zawartości każdego zdarzenia w subskrybowanym projekcie. Zawartość będzie odpowiadała reprezentacji modyfikowanego obiektu w APIv3.
+ apiv3_doc_url: Więcej informacji zawiera dokumentacja interfejsu API
description:
- placeholder: 'Optional description for the webhook.'
+ placeholder: 'Opcjonalny opis webhooka.'
enabled:
description: >
- When checked, the webhook will trigger on the selected events. Uncheck to disable the webhook.
+ W razie zaznaczenia webhook będzie uruchamiany przez wybrane zdarzenia. Usuń zaznaczenie, aby wyłączyć webhook.
events:
- title: 'Enabled events'
+ title: 'Włączone zdarzenia'
project_ids:
title: 'Aktywne projekty'
- description: 'Select for which projects this webhook should be executed for.'
- all: 'All projects'
- selected: 'Selected projects only'
+ description: 'Wybierz projekty, dla których ma być wykonywany ten webhook.'
+ all: 'Wszystkie projekty'
+ selected: 'Tylko wybrane projekty'
selected_project_ids:
- title: 'Selected projects'
+ title: 'Wybrane projekty'
secret:
description: >
- If set, this secret value is used by OpenProject to sign the webhook payload.
+ W razie ustawienia ta wartość tajnego klucza jest używana przez OpenProject do podpisywania zawartości webhooka.
diff --git a/modules/webhooks/config/locales/crowdin/zh-CN.yml b/modules/webhooks/config/locales/crowdin/zh-CN.yml
index ec4ddab4f7..2b56bf2b2e 100644
--- a/modules/webhooks/config/locales/crowdin/zh-CN.yml
+++ b/modules/webhooks/config/locales/crowdin/zh-CN.yml
@@ -2,55 +2,55 @@ zh-CN:
activerecord:
attributes:
webhooks/webhook:
- url: 'Payload URL'
- secret: 'Signature secret'
- events: 'Events'
+ url: '有效载荷 URL'
+ secret: '签名密钥'
+ events: '事件'
projects: '已启用的项目'
webhooks/log:
- event_name: 'Event name'
- url: 'Payload URL'
- response_code: 'Response code'
- response_body: 'Response'
+ event_name: '事件名称'
+ url: '有效载荷 URL'
+ response_code: '响应代码'
+ response_body: '响应'
models:
- webhooks/outgoing_webhook: "Outgoing webhook"
+ webhooks/outgoing_webhook: "传出 Webhook"
webhooks:
singular: Webhook
- plural: Webhooks
+ plural: Webhook
outgoing:
- no_results_table: No webhooks have been defined yet.
- label_add_new: Add new webhook
- label_edit: Edit webhook
- label_event_resources: Event resources
+ no_results_table: 尚未定义任何 Webhook。
+ label_add_new: 添加新的 Webhook
+ label_edit: 编辑 Webhook
+ label_event_resources: 事件资源
events:
created: "已创建"
- updated: "Updated"
+ updated: "已更新"
status:
- enabled: 'Webhook is enabled'
- disabled: 'Webhook is disabled'
- enabled_text: 'The webhook will emit payloads for the defined events below.'
- disabled_text: 'Click the edit button to activate the webhook.'
+ enabled: 'Webhook 已启用'
+ disabled: 'Webhook 已禁用'
+ enabled_text: 'Webhook 将为下面的定义事件释放有效载荷。'
+ disabled_text: '点击“编辑”按钮以激活 Webhook。'
deliveries:
- no_results_table: No deliveries have been made for this webhook.
- title: 'Recent deliveries'
- time: 'Delivery time'
+ no_results_table: 此 Webhook 尚未进行任何传送。
+ title: '最近传送'
+ time: '传送时间'
form:
introduction: >
- Send a POST request to the payload URL below for any event in the project your subscribe. Payload will correspond to the APIv3 representation of the object being modified.
- apiv3_doc_url: For more information, visit the API documentation
+ 对于您所订阅项目中的任何事件,将 POST 请求发送到下面的有效载荷 URL。有效载荷将对应于要修改的对象的 APIv3 表示。
+ apiv3_doc_url: 有关更多信息,请访问 API 文档
description:
- placeholder: 'Optional description for the webhook.'
+ placeholder: 'Webhook 的可选描述。'
enabled:
description: >
- When checked, the webhook will trigger on the selected events. Uncheck to disable the webhook.
+ 选中时,Webhook 将触发选定事件。取消选中可以禁用 Webhook。
events:
- title: 'Enabled events'
+ title: '已启用事件'
project_ids:
title: '已启用的项目'
- description: 'Select for which projects this webhook should be executed for.'
- all: 'All projects'
- selected: 'Selected projects only'
+ description: '选择此 Webhook 应当针对哪些项目执行。'
+ all: '所有项目'
+ selected: '仅限选定项目'
selected_project_ids:
- title: 'Selected projects'
+ title: '选定项目'
secret:
description: >
- If set, this secret value is used by OpenProject to sign the webhook payload.
+ 如果设置,OpenProject 将使用此密钥值对 Webhook 有效载荷进行签名。
diff --git a/modules/xls_export/config/locales/crowdin/es.yml b/modules/xls_export/config/locales/crowdin/es.yml
index c1f7ef8a44..89e524de4d 100644
--- a/modules/xls_export/config/locales/crowdin/es.yml
+++ b/modules/xls_export/config/locales/crowdin/es.yml
@@ -1,13 +1,13 @@
es:
- export_to_excel: "Export as Excel spreadsheet"
- print_with_description: "Print preview with description"
+ export_to_excel: "Exportar como hoja de cálculo de Excel"
+ print_with_description: "Vista previa de impresión con descripción"
sentence_separator_or: "o bien"
- different_formats: Different formats
+ different_formats: Diferentes formatos
export:
format:
xls: "XLS"
xls_with_descriptions: "XLS con descripciones"
- xls_with_relations: "XLS with relations"
+ xls_with_relations: "XLS con relaciones"
xls_export:
- child_of: child of
- parent_of: parent of
+ child_of: elemento secundario de
+ parent_of: elemento principal de
diff --git a/modules/xls_export/config/locales/crowdin/ko.yml b/modules/xls_export/config/locales/crowdin/ko.yml
index 88c672a752..1698ae4c8f 100644
--- a/modules/xls_export/config/locales/crowdin/ko.yml
+++ b/modules/xls_export/config/locales/crowdin/ko.yml
@@ -1,13 +1,13 @@
ko:
- export_to_excel: "Export as Excel spreadsheet"
- print_with_description: "Print preview with description"
+ export_to_excel: "Excel 스프레드시트 내보내기"
+ print_with_description: "설명이 포함된 미리 보기 인쇄"
sentence_separator_or: "또는"
- different_formats: Different formats
+ different_formats: 다른 형식
export:
format:
xls: "XLS"
- xls_with_descriptions: "XLS with descriptions"
- xls_with_relations: "XLS with relations"
+ xls_with_descriptions: "설명이 포함된 XLS"
+ xls_with_relations: "관계가 포함된 XLS"
xls_export:
- child_of: child of
- parent_of: parent of
+ child_of: '다음의 자식:'
+ parent_of: '다음의 부모:'
diff --git a/modules/xls_export/config/locales/crowdin/pl.yml b/modules/xls_export/config/locales/crowdin/pl.yml
index b36f91998c..b3782a6e62 100644
--- a/modules/xls_export/config/locales/crowdin/pl.yml
+++ b/modules/xls_export/config/locales/crowdin/pl.yml
@@ -1,13 +1,13 @@
pl:
- export_to_excel: "Export as Excel spreadsheet"
- print_with_description: "Print preview with description"
+ export_to_excel: "Wyeksportuj jako arkusz kalkulacyjny programu Excel"
+ print_with_description: "Podgląd wydruku z opisem"
sentence_separator_or: "lub"
- different_formats: Different formats
+ different_formats: Odmienne formaty
export:
format:
xls: "XLS"
xls_with_descriptions: "XLS z opisami"
- xls_with_relations: "XLS with relations"
+ xls_with_relations: "XLS z relacjami"
xls_export:
- child_of: child of
- parent_of: parent of
+ child_of: element podrzędny
+ parent_of: element nadrzędny
diff --git a/spec/controllers/account_controller_spec.rb b/spec/controllers/account_controller_spec.rb
index 97b28da8d0..13b40212ed 100644
--- a/spec/controllers/account_controller_spec.rb
+++ b/spec/controllers/account_controller_spec.rb
@@ -29,6 +29,32 @@
require 'spec_helper'
describe AccountController, type: :controller do
+ # class AccountHook < Redmine::Hook::ViewListener; end
+
+ class UserHook < Redmine::Hook::ViewListener
+ attr_reader :registered_user
+ attr_reader :first_login_user
+
+ def user_registered(context)
+ @registered_user = context[:user]
+ end
+
+ def user_first_login(context)
+ @first_login_user = context[:user]
+ end
+
+ def reset!
+ @registered_user = nil
+ @first_login_user = nil
+ end
+ end
+
+ let(:hook) { UserHook.instance }
+
+ before do
+ hook.reset!
+ end
+
after do
User.delete_all
User.current = nil
@@ -91,6 +117,36 @@ describe AccountController, type: :controller do
end
end
+ context 'with first login' do
+ before do
+ admin.update first_login: true
+
+ post :login, params: { username: admin.login, password: 'adminADMIN!' }
+ end
+
+ it 'redirect to default path with ?first_time_user=true' do
+ expect(response).to redirect_to "/?first_time_user=true"
+ end
+
+ it 'calls the user_first_login hook' do
+ expect(hook.first_login_user).to eq admin
+ end
+ end
+
+ context 'without first login' do
+ before do
+ post :login, params: { username: admin.login, password: 'adminADMIN!' }
+ end
+
+ it 'redirect to the my page' do
+ expect(response).to redirect_to "/my/page"
+ end
+
+ it 'does not call the user_first_login hook' do
+ expect(hook.first_login_user).to be_nil
+ end
+ end
+
describe 'User logging in with back_url' do
it 'should redirect to a relative path' do
post :login,
@@ -413,6 +469,10 @@ describe AccountController, type: :controller do
it 'informs the user that registration is disabled' do
expect(flash[:error]).to eq(I18n.t('account.error_self_registration_disabled'))
end
+
+ it 'does not call the user_registered callback' do
+ expect(hook.registered_user).to be_nil
+ end
end
context 'GET #register' do
@@ -498,7 +558,7 @@ describe AccountController, type: :controller do
}
end
- it 'redirects to my page' do
+ it 'redirects to the expected path' do
is_expected.to respond_with :redirect
expect(assigns[:user]).not_to be_nil
is_expected.to redirect_to(redirect_to_path)
@@ -510,6 +570,23 @@ describe AccountController, type: :controller do
expect(user).not_to be_nil
expect(user.status).to eq(User::STATUSES[:active])
end
+
+ it 'calls the user_registered callback' do
+ user = hook.registered_user
+
+ expect(user.mail).to eq "register@example.com"
+ expect(user).to be_active
+ end
+ end
+
+ it_behaves_like 'automatic self registration succeeds' do
+ let(:redirect_to_path) { "/?first_time_user=true" }
+
+ it "calls the user_first_login callback" do
+ user = hook.first_login_user
+
+ expect(user.mail).to eq "register@example.com"
+ end
end
context "with user limit reached" do
@@ -547,6 +624,10 @@ describe AccountController, type: :controller do
expect(mail.to.first).to eq admin.mail
expect(mail.body.parts.first.to_s).to match /new user \(#{params[:user][:mail]}\)/
end
+
+ it 'does not call the user_registered callback' do
+ expect(hook.registered_user).to be_nil
+ end
end
end
@@ -592,6 +673,13 @@ describe AccountController, type: :controller do
expect(token.user.mail).to eq('register@example.com')
expect(token).not_to be_expired
end
+
+ it 'calls the user_registered callback' do
+ user = hook.registered_user
+
+ expect(user.mail).to eq "register@example.com"
+ expect(user).to be_registered
+ end
end
context 'with password login disabled' do
@@ -631,6 +719,13 @@ describe AccountController, type: :controller do
it "doesn't activate the user" do
expect(User.find_by_login('register')).not_to be_active
end
+
+ it 'calls the user_registered callback' do
+ user = hook.registered_user
+
+ expect(user.mail).to eq "register@example.com"
+ expect(user).to be_registered
+ end
end
context 'with back_url' do
@@ -642,6 +737,13 @@ describe AccountController, type: :controller do
expect(response).to redirect_to(
'/login?back_url=https%3A%2F%2Fexample.net%2Fsome_back_url')
end
+
+ it 'calls the user_registered callback' do
+ user = hook.registered_user
+
+ expect(user.mail).to eq "register@example.com"
+ expect(user).to be_registered
+ end
end
context 'with password login disabled' do
diff --git a/spec/features/projects/projects_index_spec.rb b/spec/features/projects/projects_index_spec.rb
index 22ec8916c1..182d6e8c65 100644
--- a/spec/features/projects/projects_index_spec.rb
+++ b/spec/features/projects/projects_index_spec.rb
@@ -788,5 +788,15 @@ describe 'Projects index page',
child_project_z,
public_project)
end
+
+ feature 'blacklisted filters' do
+ scenario 'are not visible' do
+ load_and_open_filters admin
+
+ expect(page).to_not have_select('add_filter_select', with_options: ["Principal"])
+ expect(page).to_not have_select('add_filter_select', with_options: ["ID"])
+ expect(page).to_not have_select('add_filter_select', with_options: ["Subproject of"])
+ end
+ end
end
end
diff --git a/spec/requests/api/v3/attachments/attachment_resource_shared_examples.rb b/spec/requests/api/v3/attachments/attachment_resource_shared_examples.rb
index 54f8036335..33829dd9eb 100644
--- a/spec/requests/api/v3/attachments/attachment_resource_shared_examples.rb
+++ b/spec/requests/api/v3/attachments/attachment_resource_shared_examples.rb
@@ -287,14 +287,14 @@ shared_examples 'an APIv3 attachment resource', type: :request, content_type: :j
context 'for a local text file' do
it_behaves_like 'for a local file' do
let(:mock_file) { FileHelpers.mock_uploaded_file name: 'foobar.txt' }
- let(:content_disposition) { "inline" }
+ let(:content_disposition) { "inline; filename=foobar.txt" }
end
end
context 'for a local binary file' do
it_behaves_like 'for a local file' do
let(:mock_file) { FileHelpers.mock_uploaded_file name: 'foobar.dat', content_type: "application/octet-stream" }
- let(:content_disposition) { "attachment" }
+ let(:content_disposition) { "attachment; filename=foobar.dat" }
end
end