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í0> 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>Apprise0>1> 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}}0> ha afegit <2>{{card}}2> a {{list}}',
+ userAddedThisCardToList: '<0>{{user}}0> ha afegit aquesta targeta a {{list}}',
+ userAddedUserToCard: '<0>{{actorUser}}0> ha afegit {{addedUser}} a <4>{{card}}4>',
+ userAddedUserToThisCard: '<0>{{actorUser}}0> ha afegit {{addedUser}} a aquesta targeta',
+ userAddedYouToCard: "<0>{{user}}0> t'ha afegit a <2>{{card}}2>",
+ userCompletedTaskOnCard: '<0>{{user}}0> ha completat {{task}} a <4>{{card}}4>',
+ userCompletedTaskOnThisCard: '<0>{{user}}0> ha completat {{task}} a aquesta targeta',
+ userJoinedCard: "<0>{{user}}0> s'ha unit a <2>{{card}}2>",
+ userJoinedThisCard: "<0>{{user}}0> s'ha unit a aquesta targeta",
+ userLeftCard: '<0>{{user}}0> ha abandonat <2>{{card}}2>',
+ userLeftNewCommentToCard:
+ '<0>{{user}}0> ha deixat un nou comentari «{{comment}}» a <2>{{card}}2>',
+ userLeftThisCard: '<0>{{user}}0> ha abandonat aquesta targeta',
+ userMarkedTaskIncompleteOnCard:
+ '<0>{{user}}0> ha marcat {{task}} com a incompleta a <4>{{card}}4>',
+ userMarkedTaskIncompleteOnThisCard:
+ '<0>{{user}}0> ha marcat {{task}} com a incompleta a aquesta targeta',
+ userMentionedYouInCommentOnCard:
+ "<0>{{user}}0> t'ha esmentat en un comentari «{{comment}}» a <2>{{card}}2>",
+ userMovedCardFromListToList:
+ '<0>{{user}}0> ha mogut <2>{{card}}2> de {{fromList}} a {{toList}}',
+ userMovedThisCardFromListToList:
+ '<0>{{user}}0> ha mogut aquesta targeta de {{fromList}} a {{toList}}',
+ userRemovedUserFromCard:
+ '<0>{{actorUser}}0> ha eliminat {{removedUser}} de <4>{{card}}4>',
+ userRemovedUserFromThisCard:
+ "<0>{{actorUser}}0> 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>PLANKA1>',
+ 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": "",
+ "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",