From 7a05bf2a30baa26d466ab96c922fe17d0637354f Mon Sep 17 00:00:00 2001 From: Roger Clotet Date: Wed, 12 Nov 2025 19:19:29 +0100 Subject: [PATCH] feat: Add Catalan (ca-ES) translation (#1424) --- client/src/locales/ca-ES/core.js | 499 ++++++++++++++++++ client/src/locales/ca-ES/index.js | 8 + client/src/locales/ca-ES/login.js | 35 ++ client/src/locales/ca-ES/markdown-editor.json | 165 ++++++ client/src/locales/index.js | 2 + .../controllers/access-tokens/accept-terms.js | 2 +- server/api/controllers/users/create.js | 2 +- server/api/controllers/users/update.js | 2 +- server/api/models/User.js | 3 +- server/config/i18n.js | 1 + server/config/locales/ca-ES.json | 16 + server/config/locales/es-ES.json | 2 +- 12 files changed, 732 insertions(+), 5 deletions(-) create mode 100644 client/src/locales/ca-ES/core.js create mode 100644 client/src/locales/ca-ES/index.js create mode 100644 client/src/locales/ca-ES/login.js create mode 100644 client/src/locales/ca-ES/markdown-editor.json create mode 100644 server/config/locales/ca-ES.json diff --git a/client/src/locales/ca-ES/core.js b/client/src/locales/ca-ES/core.js new file mode 100644 index 00000000..0d3acc3a --- /dev/null +++ b/client/src/locales/ca-ES/core.js @@ -0,0 +1,499 @@ +import dateFns from 'date-fns/locale/ca'; +import timeAgo from 'javascript-time-ago/locale/ca'; + +import markdownEditor from './markdown-editor.json'; + +export default { + dateFns, + timeAgo, + markdownEditor, + + format: { + date: 'd/M/yyyy', + time: 'p', + dateTime: '$t(format:date) $t(format:time)', + longDate: 'd MMM', + longDateTime: "d 'de' MMMM 'a les' p", + fullDate: 'd MMM y', + fullDateTime: "d 'de' MMMM 'de' y 'a les' p", + }, + + translation: { + common: { + aboutPlanka: 'Quant a PLANKA', + accessToken: "Token d'accés", + account: 'Compte', + actions: 'Accions', + activateUser_title: 'Activar usuari', + active: 'Actiu', + addAttachment_title: 'Afegir fitxer adjunt', + addCustomFieldGroup_title: 'Afegir grup de camps personalitzats', + addCustomField_title: 'Afegir camp personalitzat', + addManager_title: 'Afegir gestor', + addMember_title: 'Afegir membre', + addTaskList_title: 'Afegir llista de tasques', + addUser_title: 'Afegir usuari', + admin: 'Administrador', + administration: 'Administració', + all: 'Tot', + allChangesWillBeAutomaticallySavedAfterConnectionRestored: + 'Tots els canvis es desaran automàticament
quan es restableixi la connexió.', + alphabetically: 'Alfabèticament', + alwaysDisplayCardCreator: 'Mostrar sempre el creador de la targeta', + apiKeyCreated_title: 'Clau API creada', + apiKey_title: 'Clau API', + archive: 'Arxivar', + archiveCard_title: 'Arxivar targeta', + archiveCards_title: 'Arxivar targetes', + areYouSureYouWantToActivateThisUser: 'Estàs segur que vols activar aquest usuari?', + areYouSureYouWantToArchiveCards: 'Estàs segur que vols arxivar les targetes?', + areYouSureYouWantToArchiveThisCard: 'Estàs segur que vols arxivar aquesta targeta?', + areYouSureYouWantToAssignThisProjectManagerAsOwner: + 'Estàs segur que vols assignar aquest gestor de projecte com a propietari?', + areYouSureYouWantToDeactivateThisUser: 'Estàs segur que vols desactivar aquest usuari?', + areYouSureYouWantToDeleteThisApiKey: 'Estàs segur que vols eliminar aquesta clau API?', + areYouSureYouWantToDeleteThisAttachment: + 'Estàs segur que vols eliminar aquest fitxer adjunt?', + areYouSureYouWantToDeleteThisBackgroundImage: + 'Estàs segur que vols eliminar aquesta imatge de fons?', + areYouSureYouWantToDeleteThisBoard: 'Estàs segur que vols eliminar aquest tauler?', + areYouSureYouWantToDeleteThisCard: 'Estàs segur que vols eliminar aquesta targeta?', + areYouSureYouWantToDeleteThisCardForever: + 'Estàs segur que vols eliminar aquesta targeta per sempre?', + areYouSureYouWantToDeleteThisComment: 'Estàs segur que vols eliminar aquest comentari?', + areYouSureYouWantToDeleteThisCustomField: + 'Estàs segur que vols eliminar aquest camp personalitzat?', + areYouSureYouWantToDeleteThisCustomFieldGroup: + 'Estàs segur que vols eliminar aquest grup de camps personalitzats?', + areYouSureYouWantToDeleteThisLabel: 'Estàs segur que vols eliminar aquesta etiqueta?', + areYouSureYouWantToDeleteThisList: + 'Estàs segur que vols eliminar aquesta llista? Totes les targetes es mouran a la paperera.', + areYouSureYouWantToDeleteThisNotificationService: + 'Estàs segur que vols eliminar aquest servei de notificació?', + areYouSureYouWantToDeleteThisProject: 'Estàs segur que vols eliminar aquest projecte?', + areYouSureYouWantToDeleteThisTask: 'Estàs segur que vols eliminar aquesta tasca?', + areYouSureYouWantToDeleteThisTaskList: + 'Estàs segur que vols eliminar aquesta llista de tasques?', + areYouSureYouWantToDeleteThisUser: 'Estàs segur que vols eliminar aquest usuari?', + areYouSureYouWantToDeleteThisWebhook: 'Estàs segur que vols eliminar aquest webhook?', + areYouSureYouWantToEmptyTrash: 'Estàs segur que vols buidar la paperera?', + areYouSureYouWantToLeaveBoard: 'Estàs segur que vols abandonar el tauler?', + areYouSureYouWantToLeaveProject: 'Estàs segur que vols abandonar el projecte?', + areYouSureYouWantToMakeThisProjectPrivate: + 'Estàs segur que vols canviar aquest projecte a privat?', + areYouSureYouWantToMakeThisProjectShared: + 'Estàs segur que vols canviar aquest projecte a compartit?', + areYouSureYouWantToRegenerateThisApiKey: + 'Estàs segur que vols regenerar aquesta clau API? La clau anterior ja no funcionarà.', + areYouSureYouWantToRemoveThisManagerFromProject: + 'Estàs segur que vols eliminar aquest gestor del projecte?', + areYouSureYouWantToRemoveThisMemberFromBoard: + 'Estàs segur que vols eliminar aquest membre del tauler?', + assignAsOwner_title: 'Assignar com a propietari', + atLeastOneListMustBePresent: "Hi ha d'haver com a mínim una llista", + attachment: 'Fitxer adjunt', + attachments: 'Fitxers adjunts', + authentication: 'Autenticació', + background: 'Fons', + baseCustomFields_title: 'Camps personalitzats base', + baseGroup: 'Grup base', + board: 'Tauler', + boardActions_title: 'Accions del tauler', + boardNotFound_title: 'Tauler no trobat', + boardSubscribed: 'Tauler subscrit', + boardUser: 'Usuari del tauler', + byCreationTime: 'Per data de creació', + byDefault: 'Per defecte', + byDueDate: 'Per data de venciment', + canBeInvitedToWorkInBoards: 'Pot ser convidat a treballar a taulers.', + canComment: 'Pot comentar', + canCreateOwnProjectsAndBeInvitedToWorkInOthers: + 'Pot crear projectes propis i ser convidat a treballar a altres.', + canEditBoardLayoutAndAssignMembersToCards: + 'Pot editar el disseny del tauler i assignar membres a les targetes.', + canManageSystemWideSettingsAndActAsProjectOwner: + 'Pot gestionar la configuració general del sistema i actuar com a propietari del projecte.', + canOnlyViewBoard: 'Només pot veure el tauler.', + cardActions_title: 'Accions de la targeta', + cardNotFound_title: 'Targeta no trobada', + cardsOnThisListAreAvailableToAllBoardMembers: + "Les targetes d'aquesta llista estan disponibles per a tots els membres del tauler.", + cardsOnThisListAreCompleteAndReadyToBeArchived: + "Les targetes d'aquesta llista estan completes i llestes per ser arxivades.", + cardsOnThisListAreReadyToBeWorkedOn: + "Les targetes d'aquesta llista estan llestes per treballar-hi.", + clickHereOrRefreshPageToUpdate: + '<0>Fes clic aquí o actualitza la pàgina per actualitzar.', + clientHostnameInEhlo: "Nom de l'amfitrió del client en EHLO", + closed: 'Tancat', + color: 'Color', + comments: 'Comentaris', + contentExceedsLimit: 'El contingut excedeix {{limit}}', + contentOfThisAttachmentIsTooBigToDisplay: + "El contingut d'aquest fitxer adjunt és massa gran per mostrar-se.", + copy_inline: 'còpia', + createBoard_title: 'Crear tauler', + createCustomFieldGroup_title: 'Crear grup de camps personalitzats', + createLabel_title: 'Crear etiqueta', + createNewOneOrSelectExistingOne: "Crea'n un de nou o selecciona'n
un d'existent.", + createProject_title: 'Crear projecte', + createTextFile_title: 'Crear fitxer de text', + creator: 'Creador', + currentPassword: 'Contrasenya actual', + currentUser: 'Usuari actual', + customFieldGroup_title: 'Grup de camps personalitzats', + customFieldGroups_title: 'Grups de camps personalitzats', + customField_title: 'Camp personalitzat', + customFields_title: 'Camps personalitzats', + dangerZone_title: 'Zona de perill', + date: 'Data', + deactivateUser_title: 'Desactivar usuari', + defaultCardType_title: 'Tipus de targeta per defecte', + defaultFrom: '"De" per defecte', + defaultView_title: 'Vista per defecte', + deleteAllBoardsToBeAbleToDeleteThisProject: + 'Elimina tots els taulers per poder eliminar aquest projecte', + deleteApiKey_title: 'Eliminar clau API', + deleteAttachment_title: 'Eliminar fitxer adjunt', + deleteBackgroundImage_title: 'Eliminar imatge de fons', + deleteBoard_title: 'Eliminar tauler', + deleteCardForever_title: 'Eliminar targeta per sempre', + deleteCard_title: 'Eliminar targeta', + deleteComment_title: 'Eliminar comentari', + deleteCustomFieldGroup_title: 'Eliminar grup de camps personalitzats', + deleteCustomField_title: 'Eliminar camp personalitzat', + deleteLabel_title: 'Eliminar etiqueta', + deleteList_title: 'Eliminar llista', + deleteNotificationService_title: 'Eliminar servei de notificació', + deleteProject_title: 'Eliminar projecte', + deleteTaskList_title: 'Eliminar llista de tasques', + deleteTask_title: 'Eliminar tasca', + deleteUser_title: 'Eliminar usuari', + deleteWebhook_title: 'Eliminar webhook', + deletedUser_title: 'Usuari eliminat', + description: 'Descripció', + display: 'Mostrar', + dropFileToUpload: 'Arrossega fitxer per pujar-lo', + dueDate_title: 'Data de venciment', + dynamicAndUnevenlySpacedLayout: 'Disseny dinàmic i amb espaiat irregular.', + editAttachment_title: 'Editar fitxer adjunt', + editAvatar_title: 'Editar avatar', + editColor_title: 'Editar color', + editCustomFieldGroup_title: 'Editar grup de camps personalitzats', + editCustomField_title: 'Editar camp personalitzat', + editDueDate_title: 'Editar data de venciment', + editEmail_title: 'Editar correu electrònic', + editInformation_title: 'Editar informació', + editLabel_title: 'Editar etiqueta', + editPassword_title: 'Editar contrasenya', + editPermissions_title: 'Editar permisos', + editRole_title: 'Editar rol', + editStopwatch_title: 'Editar cronòmetre', + editType_title: 'Editar tipus', + editUsername_title: "Editar nom d'usuari", + editor: 'Editor', + editors: 'Editors', + email: 'Correu electrònic', + emptyTrash_title: 'Buidar paperera', + enterCardTitle: 'Introdueix el títol de la targeta...', + enterDescription: 'Introdueix una descripció...', + enterFilename: 'Introdueix el nom del fitxer', + enterListTitle: 'Introdueix el títol de la llista...', + enterTaskDescription: 'Introdueix la descripció de la tasca...', + events: 'Esdeveniments', + excludedEvents: 'Esdeveniments exclosos', + expandTaskListsByDefault: 'Expandir llistes de tasques per defecte', + filterByLabels_title: 'Filtrar per etiquetes', + filterByMembers_title: 'Filtrar per membres', + forPersonalProjects: 'Per a projectes personals.', + forTeamBasedProjects: 'Per a projectes en equip.', + fromComputer_title: "Des de l'ordinador", + fromTrello: 'Des de Trello', + fullKeyIsHiddenForSecurityReasons: + 'La clau completa està oculta per raons de seguretat. Regenera-la per crear una de nova.', + general: 'General', + gradients: 'Degradats', + grid: 'Graella', + hideCompletedTasks: 'Ocultar tasques completes', + hideFromProjectListAndFavorites: 'Ocultar de la llista de projectes i favorits', + host: 'Amfitrió', + hours: 'Hores', + identity: 'Identitat', + importBoard_title: 'Importar tauler', + information: 'Informació', + invalidCurrentPassword: 'Contrasenya actual incorrecta', + kanban: 'Kanban', + labels: 'Etiquetes', + language: 'Idioma', + leaveBoard_title: 'Abandonar tauler', + leaveProject_title: 'Abandonar projecte', + limitCardTypesToDefaultOne: 'Limitar tipus de targeta al predeterminat', + linkToCard: 'Enllaç a la targeta', + list: 'Llista', + listActions_title: 'Accions de la llista', + lists: 'Llistes', + makeProjectPrivate_title: 'Canviar el projecte a privat', + makeProjectShared_title: 'Canviar el projecte a compartit', + managers: 'Gestors', + memberActions_title: 'Accions del membre', + members: 'Membres', + minutes: 'Minuts', + moreActions: 'Més accions', + moreActions_title: 'Més accions', + moveCard_title: 'Moure targeta', + moveList_title: 'Moure llista', + myOwn_title: 'Propis', + name: 'Nom', + newEmail: 'Nou correu electrònic', + newPassword: 'Nova contrasenya', + newUsername: "Nou nom d'usuari", + newVersionAvailable: 'Nova versió disponible', + newestFirst: 'Més recents primer', + noApiKeyCreated: "No s'ha creat cap clau API.", + noBoards: 'No hi ha taulers', + noCardsFound: "No s'han trobat targetes.", + noConnectionToServer: 'Sense connexió al servidor', + noLists: 'No hi ha llistes', + noProjects: 'No hi ha projectes', + noUnreadNotifications: 'No hi ha notificacions sense llegir.', + notifications: 'Notificacions', + oldestFirst: 'Més antics primer', + onlyOneManagerShouldRemainToMakeThisProjectPrivate: + 'Només ha de quedar un gestor per canviar aquest projecte a privat', + openBoard_title: 'Obrir tauler', + optional_inline: 'opcional', + organization: 'Organització', + others: 'Altres', + passwordIsSet: 'La contrasenya està establerta', + phone: 'Telèfon', + plankaUsesAppriseToSendNotificationsToOver100PopularServices: + 'PLANKA utilitza <1><0>Apprise per enviar notificacions a més de 100 serveis populars.', + port: 'Port', + preferences: 'Preferències', + pressPasteShortcutToAddAttachmentFromClipboard: + 'Consell: prem Ctrl-V (Cmd-V a Mac) per afegir un fitxer adjunt des del porta-retalls.', + private: 'Privat', + project: 'Projecte', + projectNotFound_title: "No s'ha trobat el projecte", + projectOwner: 'Propietari del projecte', + referenceDataAndKnowledgeStorage: 'Emmagatzematge de dades de referència i coneixement.', + regenerateApiKey_title: 'Regenerar clau API', + rejectUnauthorizedTlsCertificates: 'Rebutjar certificats TLS no autoritzats', + removeManager_title: 'Eliminar gestor', + removeMember_title: 'Eliminar membre', + role: 'Rol', + saveThisKeyItWillNotBeShownAgain: 'Desa aquesta clau, no es tornarà a mostrar!', + searchCards: 'Cercar targetes...', + searchCustomFieldGroups: 'Cercar grups de camps personalitzats...', + searchCustomFields: 'Cercar camps personalitzats...', + searchLabels: 'Cercar etiquetes...', + searchLists: 'Cercar llistes...', + searchMembers: 'Cercar membres...', + searchProjects: 'Cercar projectes...', + searchUsers: 'Cercar usuaris...', + seconds: 'Segons', + selectAssignee_title: 'Seleccionar assignat', + selectBoard: 'Seleccionar tauler', + selectList: 'Seleccionar llista', + selectListToRestoreThisCard: 'Selecciona una llista per restaurar aquesta targeta', + selectOrder_title: 'Seleccionar ordre', + selectPermissions_title: 'Seleccionar permisos', + selectProject: 'Seleccionar projecte', + selectRole_title: 'Seleccionar rol', + selectType_title: 'Seleccionar tipus', + sequentialDisplayOfCards: 'Visualització seqüencial de targetes.', + settings: 'Configuració', + shared: 'Compartit', + sharedWithMe_title: 'Compartit amb mi', + showOnFrontOfCard: 'Mostrar a la part frontal de la targeta', + smtp: 'SMTP', + sortList_title: 'Ordenar llista', + stopwatch: 'Cronòmetre', + story: 'Història', + subscribeToCardWhenCommenting: "Subscriure's a la targeta en comentar", + subscribeToMyOwnCardsByDefault: "Subscriure's a les meves pròpies targetes per defecte", + taskActions_title: 'Accions de la tasca', + taskAssignmentAndProjectCompletion: 'Assignació de tasques i finalització del projecte.', + taskListActions_title: 'Accions de la llista de tasques', + taskList_title: 'Llista de tasques', + team: 'Equip', + terms: 'Termes', + testLog_title: 'Registre de prova', + thereIsNoPreviewAvailableForThisAttachment: + 'No hi ha vista prèvia disponible per a aquest fitxer adjunt.', + time: 'Hora', + title: 'Títol', + trash: 'Paperera', + trashHasBeenSuccessfullyEmptied: "La paperera s'ha buidat correctament.", + turnOffRecentCardHighlighting: 'Desactivar ressaltat de targetes recents', + typeNameToConfirm: 'Escriu el nom per confirmar.', + typeTitleToConfirm: 'Escriu el títol per confirmar.', + unsavedChanges: 'Canvis sense desar', + uploadFailedFileIsTooBig: 'Error en pujar: El fitxer és massa gran.', + uploadFailedNotEnoughStorageSpace: "Error en pujar: No hi ha prou espai d'emmagatzematge.", + uploadedImages: 'Imatges pujades', + url: 'URL', + useSecureConnection: 'Utilitzar connexió segura', + userActions_title: "Accions de l'usuari", + userAddedCardToList: '<0>{{user}} ha afegit <2>{{card}} a {{list}}', + userAddedThisCardToList: '<0>{{user}} ha afegit aquesta targeta a {{list}}', + userAddedUserToCard: '<0>{{actorUser}} ha afegit {{addedUser}} a <4>{{card}}', + userAddedUserToThisCard: '<0>{{actorUser}} ha afegit {{addedUser}} a aquesta targeta', + userAddedYouToCard: "<0>{{user}} t'ha afegit a <2>{{card}}", + userCompletedTaskOnCard: '<0>{{user}} ha completat {{task}} a <4>{{card}}', + userCompletedTaskOnThisCard: '<0>{{user}} ha completat {{task}} a aquesta targeta', + userJoinedCard: "<0>{{user}} s'ha unit a <2>{{card}}", + userJoinedThisCard: "<0>{{user}} s'ha unit a aquesta targeta", + userLeftCard: '<0>{{user}} ha abandonat <2>{{card}}', + userLeftNewCommentToCard: + '<0>{{user}} ha deixat un nou comentari «{{comment}}» a <2>{{card}}', + userLeftThisCard: '<0>{{user}} ha abandonat aquesta targeta', + userMarkedTaskIncompleteOnCard: + '<0>{{user}} ha marcat {{task}} com a incompleta a <4>{{card}}', + userMarkedTaskIncompleteOnThisCard: + '<0>{{user}} ha marcat {{task}} com a incompleta a aquesta targeta', + userMentionedYouInCommentOnCard: + "<0>{{user}} t'ha esmentat en un comentari «{{comment}}» a <2>{{card}}", + userMovedCardFromListToList: + '<0>{{user}} ha mogut <2>{{card}} de {{fromList}} a {{toList}}', + userMovedThisCardFromListToList: + '<0>{{user}} ha mogut aquesta targeta de {{fromList}} a {{toList}}', + userRemovedUserFromCard: + '<0>{{actorUser}} ha eliminat {{removedUser}} de <4>{{card}}', + userRemovedUserFromThisCard: + "<0>{{actorUser}} ha eliminat {{removedUser}} d'aquesta targeta", + username: "Nom d'usuari", + users: 'Usuaris', + viewer: 'Observador', + viewers: 'Observadors', + visualTaskManagementWithLists: 'Gestió visual de tasques amb llistes.', + webhooks: 'Webhooks', + withoutBaseGroup: 'Sense grup base', + writeComment: 'Escriu un comentari...', + }, + + action: { + activateUser: 'Activar usuari', + activateUser_title: 'Activar usuari', + addAnotherCard: 'Afegir una altra targeta', + addAnotherList: 'Afegir una altra llista', + addAnotherTask: 'Afegir una altra tasca', + addCard: 'Afegir targeta', + addCard_title: 'Afegir targeta', + addComment: 'Afegir comentari', + addCustomField: 'Afegir camp personalitzat', + addCustomFieldGroup: 'Afegir grup de camps personalitzats', + addList: 'Afegir llista', + addMember: 'Afegir membre', + addMoreDetailedDescription: 'Afegir una descripció més detallada', + addTask: 'Afegir tasca', + addTaskList: 'Afegir llista de tasques', + addToCard: 'Afegir a targeta', + addUser: 'Afegir usuari', + addWebhook: 'Afegir webhook', + archive: 'Arxivar', + archiveCard: 'Arxivar targeta', + archiveCard_title: 'Arxivar targeta', + archiveCards: 'Arxivar targetes', + archiveCards_title: 'Arxivar targetes', + assignAsOwner: 'Assignar com a propietari', + cancel: 'Cancel·lar', + createApiKey: 'Crear clau API', + createBoard: 'Crear tauler', + createCustomFieldGroup: 'Crear grup de camps personalitzats', + createFile: 'Crear fitxer', + createLabel: 'Crear etiqueta', + createNewLabel: 'Crear nova etiqueta', + createProject: 'Crear projecte', + deactivateUser: 'Desactivar usuari', + deactivateUser_title: 'Desactivar usuari', + delete: 'Eliminar', + deleteApiKey: 'Eliminar clau API', + deleteAttachment: 'Eliminar fitxer adjunt', + deleteAvatar: 'Eliminar avatar', + deleteBackgroundImage: 'Eliminar imatge de fons', + deleteBoard: 'Eliminar tauler', + deleteBoard_title: 'Eliminar tauler', + deleteCard: 'Eliminar targeta', + deleteCardForever: 'Eliminar targeta per sempre', + deleteCard_title: 'Eliminar targeta', + deleteComment: 'Eliminar comentari', + deleteCustomField: 'Eliminar camp personalitzat', + deleteCustomFieldGroup: 'Eliminar grup de camps personalitzats', + deleteForever_title: 'Eliminar per sempre', + deleteGroup: 'Eliminar grup', + deleteLabel: 'Eliminar etiqueta', + deleteList: 'Eliminar llista', + deleteList_title: 'Eliminar llista', + deleteNotificationService: 'Eliminar servei de notificació', + deleteProject: 'Eliminar projecte', + deleteProject_title: 'Eliminar projecte', + deleteTask: 'Eliminar tasca', + deleteTaskList: 'Eliminar llista de tasques', + deleteTask_title: 'Eliminar tasca', + deleteUser: 'Eliminar usuari', + deleteUser_title: 'Eliminar usuari', + deleteWebhook: 'Eliminar webhook', + dismissAll: 'Descartar tot', + download: 'Descarregar', + duplicateCard_title: 'Duplicar targeta', + edit: 'Editar', + editColor_title: 'Editar color', + editDescription_title: 'Editar descripció', + editDueDate_title: 'Editar data de venciment', + editEmail_title: 'Editar correu electrònic', + editGroup: 'Editar grup', + editInformation_title: 'Editar informació', + editPassword_title: 'Editar contrasenya', + editPermissions: 'Editar permisos', + editRole_title: 'Editar rol', + editStopwatch_title: 'Editar cronòmetre', + editTitle_title: 'Editar títol', + editType_title: 'Editar tipus', + editUsername_title: "Editar nom d'usuari", + emptyTrash: 'Buidar paperera', + emptyTrash_title: 'Buidar paperera', + import: 'Importar', + join: 'Unir-se', + leave: 'Abandonar', + leaveBoard: 'Abandonar tauler', + leaveProject: 'Abandonar projecte', + logOut_title: 'Tancar sessió', + makeCover_title: 'Fer portada', + makeProjectPrivate: 'Fer projecte privat', + makeProjectPrivate_title: 'Fer projecte privat', + makeProjectShared: 'Fer projecte compartit', + makeProjectShared_title: 'Fer projecte compartit', + move: 'Moure', + moveCard_title: 'Moure targeta', + moveList_title: 'Moure llista', + regenerateApiKey: 'Regenerar clau API', + remove: 'Eliminar', + removeAssignee: 'Eliminar assignat', + removeColor: 'Eliminar color', + removeCover_title: 'Eliminar portada', + removeFromBoard: 'Eliminar del tauler', + removeFromProject: 'Eliminar del projecte', + removeManager: 'Eliminar gestor', + removeMember: 'Eliminar membre', + restoreToList: 'Restaurar a {{list}}', + returnToBoard: 'Tornar al tauler', + save: 'Desar', + sendTestEmail: 'Enviar correu de prova', + showActive: 'Mostrar actius', + showAllAttachments: 'Mostrar tots els fitxers adjunts ({{hidden}} ocults)', + showCardsWithThisUser: 'Mostrar targetes amb aquest usuari', + showDeactivated: 'Mostrar desactivats', + showFewerAttachments: 'Mostrar menys fitxers adjunts', + showLess: 'Mostrar menys', + showMore: 'Mostrar més', + sortList_title: 'Ordenar llista', + start: 'Iniciar', + stop: 'Aturar', + subscribe: "Subscriure's", + unsubscribe: 'Cancel·lar subscripció', + uploadNewAvatar: 'Pujar nou avatar', + uploadNewImage: 'Pujar nova imatge', + }, + }, +}; diff --git a/client/src/locales/ca-ES/index.js b/client/src/locales/ca-ES/index.js new file mode 100644 index 00000000..c8c63826 --- /dev/null +++ b/client/src/locales/ca-ES/index.js @@ -0,0 +1,8 @@ +import login from './login'; + +export default { + language: 'ca-ES', + country: 'es', + name: 'Català', + embeddedLocale: login, +}; diff --git a/client/src/locales/ca-ES/login.js b/client/src/locales/ca-ES/login.js new file mode 100644 index 00000000..0c58e6f7 --- /dev/null +++ b/client/src/locales/ca-ES/login.js @@ -0,0 +1,35 @@ +export default { + translation: { + common: { + activeUsersLimitReached: "S'ha assolit el límit d'usuaris actius", + adminLoginRequiredToInitializeInstance: + "Es requereix inici de sessió d'administrador per inicialitzar la instància", + emailAlreadyInUse: 'Correu electrònic ja en ús', + emailOrUsername: "Correu electrònic o nom d'usuari", + iHaveReadAndAgreeToTheseTerms: 'He llegit i accepto aquests termes', + invalidCredentials: 'Credencials no vàlides', + invalidEmailOrUsername: "Correu electrònic o nom d'usuari no vàlid", + invalidPassword: 'Contrasenya no vàlida', + logIn_title: 'Iniciar sessió', + noInternetConnection: 'Sense connexió a internet', + or: 'O', + pageNotFound_title: 'Pàgina no trobada', + password: 'Contrasenya', + poweredByPlanka: 'Desenvolupat amb <1>PLANKA', + serverConnectionFailed: 'Error de connexió amb el servidor', + unknownError: 'Error desconegut, torna-ho a provar més tard', + useSingleSignOn: 'Utilitzar inici de sessió únic', + usernameAlreadyInUse: "Nom d'usuari ja en ús", + whoops_title: 'Ups!', + }, + + action: { + cancelAndClose: 'Cancel·lar i tancar', + continue: 'Continuar', + goBack: 'Tornar', + goHome: "Anar a l'inici", + logIn: 'Iniciar sessió', + logInWithSso: 'Iniciar sessió amb SSO', + }, + }, +}; diff --git a/client/src/locales/ca-ES/markdown-editor.json b/client/src/locales/ca-ES/markdown-editor.json new file mode 100644 index 00000000..964fc983 --- /dev/null +++ b/client/src/locales/ca-ES/markdown-editor.json @@ -0,0 +1,165 @@ +{ + "action-previews": { + "text": "Aquest és un text sense títol.\nTant el títol com el text\npoden ressaltar-se en negreta, cursiva, color,\nratllat i subratllat.", + "text-with-head": "Aquest és un text amb títol.\nTant el títol com el text\npoden ressaltar-se en negreta, cursiva, color,\nratllat i subratllat.", + "heading": "Títol" + }, + "bundle": { + "error-title": "Error en l'editor de markdown", + "settings_wysiwyg": "Editor visual (wysiwyg)", + "settings_markup": "Markdown", + "markup_placeholder": "Introdueix markdown..." + }, + "codeblock": { + "remove": "Eliminar", + "empty_option": "No s'han trobat coincidències" + }, + "common": { + "delete": "Eliminar", + "edit": "Editar", + "toolbar_action_disabled": "Element de marcat incompatible" + }, + "forms": { + "common_action_cancel": "Cancel·lar", + "common_action_submit": "Enviar", + "common_action_upload": "Seleccionar", + "common_tab_attach": "Afegir des del dispositiu", + "common_tab_link": "Afegir per enllaç", + "common_link": "Enllaç", + "common_sizes": "Mida, px", + "image_name": "Títol", + "image_link_href": "Enllaç de la imatge", + "image_link_href_help": "Adreça a la qual porta l'enllaç de la imatge.", + "image_alt": "Text alternatiu", + "image_alt_help": "El text alternatiu es mostra si la imatge no es pot carregar.", + "image_upload_help": "Imatge JPEG, GIF o PNG no més gran que 1 MB.", + "image_upload_failed": "Error en afegir imatge", + "image_size_width": "Amplada", + "image_size_height": "Alçada", + "link_url_help": "Adreça a la qual porta l'enllaç.", + "link_text": "Text de l'enllaç", + "link_text_help": "Text mostrat com a enllaç.", + "link_open_help": "Obrir l'enllaç en una nova pestanya" + }, + "md-hints": { + "header_title": "Capçalera", + "header_hint": "# El teu text", + "italic_title": "Cursiva", + "italic_hint": "_El teu text_", + "bold_title": "Negreta", + "bold_hint": "**El teu text**", + "strikethrough_title": "Ratllat", + "strikethrough_hint": "~~El teu text~~", + "blockquote_title": "Cita", + "blockquote_hint": "> El teu text", + "code_title": "Codi", + "code_hint": "```El teu text```", + "link_title": "Enllaç", + "link_hint": "[El teu text](url)", + "image_title": "Imatge", + "image_hint": "![El teu text](url)", + "list_title": "Element de llista", + "list_hint": "- El teu text", + "numbered-list_title": "Llista numerada", + "numbered-list_hint": "1. El teu text", + "documentation": "Documentació", + "documentation_link": "https://diplodoc.com/docs/en/syntax/" + }, + "menubar": { + "bold": "Negreta", + "code": "Codi", + "code_inline": "Codi en línia", + "codeblock": "Bloc de codi", + "colorify": "Color del text", + "colorify__color_blue": "Blau", + "colorify__color_default": "Per defecte", + "colorify__color_gray": "Gris", + "colorify__color_green": "Verd", + "colorify__color_orange": "Taronja", + "colorify__color_red": "Vermell", + "colorify__color_violet": "Violeta", + "colorify__color_yellow": "Groc", + "colorify__group_text": "Text", + "cut": "Tallar", + "emoji": "Emoji", + "emoji__hint": "Els emojis es poden afegir en WYSIWYG o manualment amb marcat", + "heading": "Capçalera", + "heading1": "Capçalera 1", + "heading2": "Capçalera 2", + "heading3": "Capçalera 3", + "heading4": "Capçalera 4", + "heading5": "Capçalera 5", + "heading6": "Capçalera 6", + "hrule": "Separador", + "image": "Imatge", + "italic": "Cursiva", + "link": "Enllaç", + "list": "Llista", + "list__action_lift": "Elevar element", + "list__action_sink": "Baixar element", + "list_action_disabled": "Contradiu la lògica de la llista", + "mark": "Marcat", + "mono": "Monospace", + "more_action": "Més accions", + "note": "Nota", + "olist": "Llista ordenada", + "quote": "Cita", + "redo": "Refer", + "strike": "Ratllat", + "table": "Taula", + "text": "Text", + "ulist": "Llista amb vinyetes", + "underline": "Subratllat", + "undo": "Desfer" + }, + "placeholder": { + "doc_empty": "Escriu / per usar ordres de barra...", + "checkbox": "Introdueix descripció de la tasca...", + "deflist_term": "Terme", + "deflist_desc": "Descripció de la definició", + "heading": "Capçalera", + "cut_title": "Títol", + "cut_content": "Contingut a mostrar en fer clic", + "note_title": "Títol", + "note_content": "Contingut de la nota", + "table_cell": "Contingut de la cel·la", + "select_filter": "Cercar idiomes..." + }, + "search": { + "label_case-sensitive": "Distinguir majúscules", + "label_whole-word": "Paraula completa", + "title": "Cercar en el codi" + }, + "suggest": { + "empty-msg": "No trobat" + }, + "widgets": { + "image": "Afegir imatge", + "link": "Afegir enllaç" + }, + "yfm-note": { + "info": "Informació", + "tip": "Consell", + "warning": "Advertència", + "alert": "Alerta", + "remove": "Eliminar" + }, + "yfm-table": { + "column.add.before": "Afegir columna abans", + "column.add.after": "Afegir columna després", + "column.remove": "Eliminar columna", + "row.add.before": "Afegir fila abans", + "row.add.after": "Afegir fila després", + "row.remove": "Eliminar fila", + "table.remove": "Eliminar taula", + "table.menu.cell.align.left": "Alinear contingut de la cel·la a l'esquerra", + "table.menu.cell.align.right": "Alinear contingut de la cel·la a la dreta", + "table.menu.cell.align.center": "Centrar contingut de la cel·la", + "table.menu.row.add": "Afegir fila després", + "table.menu.row.remove": "Eliminar fila", + "table.menu.column.add": "Afegir columna després", + "table.menu.column.remove": "Eliminar columna", + "table.menu.convert.yfm": "Convertir a taula YFM", + "table.menu.table.remove": "Eliminar taula" + } +} diff --git a/client/src/locales/index.js b/client/src/locales/index.js index cfac362b..19c4a50f 100644 --- a/client/src/locales/index.js +++ b/client/src/locales/index.js @@ -7,6 +7,7 @@ import keyBy from 'lodash/keyBy'; import arYE from './ar-YE'; import bgBG from './bg-BG'; +import caES from './ca-ES'; import csCZ from './cs-CZ'; import daDK from './da-DK'; import deDE from './de-DE'; @@ -42,6 +43,7 @@ import zhTW from './zh-TW'; const locales = [ arYE, bgBG, + caES, csCZ, daDK, deDE, diff --git a/server/api/controllers/access-tokens/accept-terms.js b/server/api/controllers/access-tokens/accept-terms.js index fb407d52..9e21a9f0 100644 --- a/server/api/controllers/access-tokens/accept-terms.js +++ b/server/api/controllers/access-tokens/accept-terms.js @@ -35,7 +35,7 @@ * example: 940226c4c41f51afe3980ceb63704e752636526f4c52a4ea579e85b247493d94 * initialLanguage: * type: string - * enum: [ar-YE, bg-BG, cs-CZ, da-DK, de-DE, el-GR, en-GB, en-US, es-ES, et-EE, fa-IR, fi-FI, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sr-Cyrl-RS, sr-Latn-RS, sv-SE, tr-TR, uk-UA, uz-UZ, zh-CN, zh-TW] + * enum: [ar-YE, bg-BG, ca-ES, cs-CZ, da-DK, de-DE, el-GR, en-GB, en-US, es-ES, et-EE, fa-IR, fi-FI, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sr-Cyrl-RS, sr-Latn-RS, sv-SE, tr-TR, uk-UA, uz-UZ, zh-CN, zh-TW] * nullable: true * description: Preferred language for user interface and notifications (used only if user language is not set) * example: en-US diff --git a/server/api/controllers/users/create.js b/server/api/controllers/users/create.js index cc1366f2..9fa87382 100755 --- a/server/api/controllers/users/create.js +++ b/server/api/controllers/users/create.js @@ -67,7 +67,7 @@ * example: Acme Corporation * language: * type: string - * enum: [ar-YE, bg-BG, cs-CZ, da-DK, de-DE, el-GR, en-GB, en-US, es-ES, et-EE, fa-IR, fi-FI, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sr-Cyrl-RS, sr-Latn-RS, sv-SE, tr-TR, uk-UA, uz-UZ, zh-CN, zh-TW] + * enum: [ar-YE, bg-BG, ca-ES, cs-CZ, da-DK, de-DE, el-GR, en-GB, en-US, es-ES, et-EE, fa-IR, fi-FI, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sr-Cyrl-RS, sr-Latn-RS, sv-SE, tr-TR, uk-UA, uz-UZ, zh-CN, zh-TW] * nullable: true * description: Preferred language for user interface and notifications (if null - will be set automatically on the first login) * example: en-US diff --git a/server/api/controllers/users/update.js b/server/api/controllers/users/update.js index 59d46a6c..19cebcb4 100755 --- a/server/api/controllers/users/update.js +++ b/server/api/controllers/users/update.js @@ -56,7 +56,7 @@ * example: Acme Corporation * language: * type: string - * enum: [ar-YE, bg-BG, cs-CZ, da-DK, de-DE, el-GR, en-GB, en-US, es-ES, et-EE, fa-IR, fi-FI, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sr-Cyrl-RS, sr-Latn-RS, sv-SE, tr-TR, uk-UA, uz-UZ, zh-CN, zh-TW] + * enum: [ar-YE, bg-BG, ca-ES, cs-CZ, da-DK, de-DE, el-GR, en-GB, en-US, es-ES, et-EE, fa-IR, fi-FI, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sr-Cyrl-RS, sr-Latn-RS, sv-SE, tr-TR, uk-UA, uz-UZ, zh-CN, zh-TW] * description: Preferred language for user interface and notifications * example: en-US * apiKey: diff --git a/server/api/models/User.js b/server/api/models/User.js index da3070f3..fc660444 100755 --- a/server/api/models/User.js +++ b/server/api/models/User.js @@ -96,7 +96,7 @@ * example: Acme Corporation * language: * type: string - * enum: [ar-YE, bg-BG, cs-CZ, da-DK, de-DE, el-GR, en-GB, en-US, es-ES, et-EE, fa-IR, fi-FI, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sr-Cyrl-RS, sr-Latn-RS, sv-SE, tr-TR, uk-UA, uz-UZ, zh-CN, zh-TW] + * enum: [ar-YE, bg-BG, ca-ES, cs-CZ, da-DK, de-DE, el-GR, en-GB, en-US, es-ES, et-EE, fa-IR, fi-FI, fr-FR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, nl-NL, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-SK, sr-Cyrl-RS, sr-Latn-RS, sv-SE, tr-TR, uk-UA, uz-UZ, zh-CN, zh-TW] * nullable: true * description: Preferred language for user interface and notifications (personal field) * example: en-US @@ -207,6 +207,7 @@ const ProjectOrders = { const LANGUAGES = [ 'ar-YE', 'bg-BG', + 'ca-ES', 'cs-CZ', 'da-DK', 'de-DE', diff --git a/server/config/i18n.js b/server/config/i18n.js index 85d0781b..6eede354 100644 --- a/server/config/i18n.js +++ b/server/config/i18n.js @@ -22,6 +22,7 @@ module.exports.i18n = { locales: [ 'ar-YE', 'bg-BG', + 'ca-ES', 'cs-CZ', 'da-DK', 'de-DE', diff --git a/server/config/locales/ca-ES.json b/server/config/locales/ca-ES.json new file mode 100644 index 00000000..db59f100 --- /dev/null +++ b/server/config/locales/ca-ES.json @@ -0,0 +1,16 @@ +{ + "Card Created": "Targeta creada", + "Card Moved": "Targeta moguda", + "New Comment": "Comentari nou", + "Test Title": "Títol de prova", + "This is a test text message!": "Aquest és un missatge de text de prova!", + "This is a *test* **markdown** `message`!": "Aquest és un *missatge* **markdown** `de prova`!", + "This is a test html message!": "Aquest és un missatge html de prova!", + "You Were Added to Card": "Has estat afegit a la targeta", + "You Were Mentioned in Comment": "Has estat mencionat en un comentari", + "%s added you to %s on %s": "%s t'ha afegit a %s el %s", + "%s created %s in %s on %s": "%s s'ha creat %s a %s el %s", + "%s left a new comment to %s on %s": "%s ha deixat un comentari nou a %s el %s", + "%s mentioned you in %s on %s": "%s t'ha mencionat a %s el %s", + "%s moved %s from %s to %s on %s": "%s s'ha mogut %s de %s a %s el %s" +} diff --git a/server/config/locales/es-ES.json b/server/config/locales/es-ES.json index 0004be75..f3bfc152 100644 --- a/server/config/locales/es-ES.json +++ b/server/config/locales/es-ES.json @@ -5,7 +5,7 @@ "Test Title": "Título de prueba", "This is a test text message!": "¡Este es un mensaje de texto de prueba!", "This is a *test* **markdown** `message`!": "¡Este es un *mensaje* **markdown** `de prueba`!", - "This is a test html message!": "Este es un mensaje html de prueba!", + "This is a test html message!": "¡Este es un mensaje html de prueba!", "You Were Added to Card": "Fuiste añadido a la tarjeta", "You Were Mentioned in Comment": "Fuiste mencionado en un comentario", "%s added you to %s on %s": "%s te añadió a %s en %s",