diff --git a/client/src/locales/index.js b/client/src/locales/index.js index d0d2bad9..49ae52a8 100644 --- a/client/src/locales/index.js +++ b/client/src/locales/index.js @@ -24,6 +24,7 @@ import koKR from './ko-KR'; import nlNL from './nl-NL'; import plPL from './pl-PL'; import ptBR from './pt-BR'; +import ptPT from './pt-PT'; import roRO from './ro-RO'; import ruRU from './ru-RU'; import skSK from './sk-SK'; @@ -58,6 +59,7 @@ const locales = [ nlNL, plPL, ptBR, + ptPT, roRO, ruRU, skSK, diff --git a/client/src/locales/pt-PT/core.js b/client/src/locales/pt-PT/core.js new file mode 100644 index 00000000..02986f15 --- /dev/null +++ b/client/src/locales/pt-PT/core.js @@ -0,0 +1,234 @@ +import dateFns from 'date-fns/locale/pt'; +import timeAgo from 'javascript-time-ago/locale/pt'; + +import markdownEditor from './markdown-editor.json'; + +export default { + dateFns, + timeAgo, + markdownEditor, + + format: { + date: 'dd/MM/yyyy', + time: 'p', + dateTime: '$t(format:date) $t(format:time)', + longDate: 'd MMM', + longDateTime: "d 'de' MMMM 'às' p", + fullDate: 'd MMM, y', + fullDateTime: "d 'de' MMMM, y 'às' p", + }, + + translation: { + common: { + aboutPlanka: 'Sobre o PLANKA', + account: 'Conta', + actions: 'Ações', + addAttachment_title: 'Anexar Ficheiro', + addManager_title: 'Adicionar Gestor', + addMember_title: 'Adicionar Membro', + addUser_title: 'Adicionar Utilizador', + all: 'Todos', + allChangesWillBeAutomaticallySavedAfterConnectionRestored: + 'Todas as alterações serão automaticamente guardadas
após a ligação ser restabelecida.', + areYouSureYouWantToDeleteThisAttachment: 'Tem a certeza de que pretende eliminar este anexo?', + areYouSureYouWantToDeleteThisBoard: 'Tem a certeza de que pretende eliminar este quadro?', + areYouSureYouWantToDeleteThisCard: 'Tem a certeza de que pretende eliminar este cartão?', + areYouSureYouWantToDeleteThisComment: + 'Tem a certeza de que pretende eliminar este comentário?', + areYouSureYouWantToDeleteThisLabel: 'Tem a certeza de que pretende eliminar esta etiqueta?', + areYouSureYouWantToDeleteThisList: 'Tem a certeza de que pretende eliminar esta lista?', + areYouSureYouWantToDeleteThisProject: 'Tem a certeza de que pretende eliminar este projeto?', + areYouSureYouWantToDeleteThisTask: 'Tem a certeza de que pretende eliminar esta tarefa?', + areYouSureYouWantToDeleteThisUser: 'Tem a certeza de que pretende eliminar este utilizador?', + areYouSureYouWantToLeaveBoard: 'Tem a certeza de que pretende sair do quadro?', + areYouSureYouWantToLeaveProject: 'Tem a certeza de que pretende sair do projeto?', + areYouSureYouWantToRemoveThisManagerFromProject: + 'Tem a certeza de que pretende remover este gestor do projeto?', + areYouSureYouWantToRemoveThisMemberFromBoard: + 'Tem a certeza de que pretende remover este membro do quadro?', + attachment: 'Anexo', + attachments: 'Anexos', + authentication: 'Autenticação', + background: 'Fundo', + board: 'Quadro', + boardNotFound_title: 'Quadro não encontrado', + canComment: 'Pode comentar', + canOnlyViewBoard: 'Só pode visualizar o quadro.', + cardActions_title: 'Ações do Cartão', + cardNotFound_title: 'Cartão não encontrado', + color: 'Cor', + createBoard_title: 'Criar Quadro', + createLabel_title: 'Criar Etiqueta', + createNewOneOrSelectExistingOne: 'Crie um novo ou selecione
um existente.', + createProject_title: 'Criar Projeto', + createTextFile_title: 'Criar Ficheiro de Texto', + currentPassword: 'Palavra-passe atual', + dangerZone_title: 'Zona Perigosa', + date: 'Data', + deleteAttachment_title: 'Eliminar Anexo', + deleteBoard_title: 'Eliminar Quadro', + deleteCard_title: 'Eliminar Cartão', + deleteComment_title: 'Eliminar Comentário', + deleteLabel_title: 'Eliminar Etiqueta', + deleteList_title: 'Eliminar Lista', + deleteProject_title: 'Eliminar Projeto', + deleteTask_title: 'Eliminar Tarefa', + deleteUser_title: 'Eliminar Utilizador', + description: 'Descrição', + detectAutomatically: 'Detetar automaticamente', + dropFileToUpload: 'Largue o ficheiro para carregar', + dueDate_title: 'Data de Vencimento', + editAttachment_title: 'Editar Anexo', + editAvatar_title: 'Editar Avatar', + editDueDate_title: 'Editar Data de Vencimento', + editEmail_title: 'Editar E-mail', + editInformation_title: 'Editar Informações', + editLabel_title: 'Editar Etiqueta', + editPassword_title: 'Editar Palavra-passe', + editPermissions_title: 'Editar Permissões', + editStopwatch_title: 'Editar Cronómetro', + editUsername_title: 'Editar Nome de Utilizador', + editor: 'Editor', + email: 'E-mail', + enterCardTitle: 'Introduza o título do cartão...', + enterDescription: 'Introduza a descrição...', + enterFilename: 'Introduza o nome do ficheiro', + enterListTitle: 'Introduza o título da lista...', + enterTaskDescription: 'Introduza a descrição da tarefa...', + filterByLabels_title: 'Filtrar por Etiquetas', + filterByMembers_title: 'Filtrar por Membros', + fromComputer_title: 'Do Computador', + fromTrello: 'Do Trello', + general: 'Geral', + hours: 'Horas', + importBoard_title: 'Importar Quadro', + invalidCurrentPassword: 'Palavra-passe atual inválida', + labels: 'Etiquetas', + language: 'Idioma', + leaveBoard_title: 'Sair do Quadro', + leaveProject_title: 'Sair do Projeto', + list: 'Lista', + listActions_title: 'Ações da Lista', + managers: 'Gestores', + members: 'Membros', + minutes: 'Minutos', + moveCard_title: 'Mover Cartão', + name: 'Nome', + newEmail: 'Novo e-mail', + newPassword: 'Nova palavra-passe', + newUsername: 'Novo nome de utilizador', + noBoards: 'Sem quadros', + noConnectionToServer: 'Sem ligação ao servidor', + noLists: 'Sem listas', + noProjects: 'Sem projetos', + noUnreadNotifications: 'Nenhuma notificação por ler.', + notifications: 'Notificações', + openBoard_title: 'Abrir Quadro', + optional_inline: 'opcional', + organization: 'Organização', + phone: 'Telefone', + preferences: 'Preferências', + pressPasteShortcutToAddAttachmentFromClipboard: + 'Dica: prima Ctrl-V (Cmd-V no Mac) para adicionar um anexo da área de transferência.', + project: 'Projeto', + projectNotFound_title: 'Projeto não encontrado', + removeManager_title: 'Remover Gestor', + removeMember_title: 'Remover Membro', + searchLabels: 'Pesquisar etiquetas...', + searchMembers: 'Pesquisar membros...', + searchUsers: 'Pesquisar utilizadores...', + seconds: 'Segundos', + selectBoard: 'Selecionar quadro', + selectList: 'Selecionar lista', + selectPermissions_title: 'Selecionar Permissões', + selectProject: 'Selecionar projeto', + settings: 'Configurações', + stopwatch: 'Cronómetro', + subscribeToMyOwnCardsByDefault: 'Subscrever automaticamente os meus cartões', + taskActions_title: 'Ações da Tarefa', + thereIsNoPreviewAvailableForThisAttachment: + 'Não há pré-visualização disponível para este anexo.', + time: 'Tempo', + title: 'Título', + userActions_title: 'Ações do Utilizador', + userAddedThisCardToList: '<0>{{user}} adicionou este cartão à {{list}}', + userLeftNewCommentToCard: + '<0>{{user}} deixou um novo comentário «{{comment}}» em <2>{{card}}', + userMovedCardFromListToList: + '<0>{{user}} moveu <2>{{card}} de {{fromList}} para {{toList}}', + userMovedThisCardFromListToList: + '<0>{{user}} moveu este cartão de {{fromList}} para {{toList}}', + username: 'Nome de utilizador', + users: 'Utilizadores', + viewer: 'Visualizador', + writeComment: 'Escreva um comentário...', + }, + + action: { + addAnotherCard: 'Adicionar outro cartão', + addAnotherList: 'Adicionar outra lista', + addAnotherTask: 'Adicionar outra tarefa', + addCard: 'Adicionar cartão', + addCard_title: 'Adicionar Cartão', + addComment: 'Adicionar comentário', + addList: 'Adicionar lista', + addMember: 'Adicionar membro', + addMoreDetailedDescription: 'Adicionar descrição mais detalhada', + addTask: 'Adicionar tarefa', + addToCard: 'Adicionar ao cartão', + addUser: 'Adicionar utilizador', + createBoard: 'Criar quadro', + createFile: 'Criar ficheiro', + createLabel: 'Criar etiqueta', + createNewLabel: 'Criar nova etiqueta', + createProject: 'Criar projeto', + delete: 'Eliminar', + deleteAttachment: 'Eliminar anexo', + deleteAvatar: 'Eliminar avatar', + deleteBoard: 'Eliminar quadro', + deleteCard: 'Eliminar cartão', + deleteCard_title: 'Eliminar Cartão', + deleteComment: 'Eliminar comentário', + deleteLabel: 'Eliminar etiqueta', + deleteList: 'Eliminar lista', + deleteList_title: 'Eliminar Lista', + deleteProject: 'Eliminar projeto', + deleteProject_title: 'Eliminar Projeto', + deleteTask: 'Eliminar tarefa', + deleteTask_title: 'Eliminar Tarefa', + deleteUser: 'Eliminar utilizador', + edit: 'Editar', + editDescription_title: 'Editar Descrição', + editDueDate_title: 'Editar Data de Vencimento', + editEmail_title: 'Editar E-mail', + editInformation_title: 'Editar Informações', + editPassword_title: 'Editar Palavra-passe', + editPermissions: 'Editar permissões', + editStopwatch_title: 'Editar Cronómetro', + editTitle_title: 'Editar Título', + editUsername_title: 'Editar Nome de Utilizador', + import: 'Importar', + leaveBoard: 'Sair do quadro', + leaveProject: 'Sair do projeto', + logOut_title: 'Terminar Sessão', + makeCover_title: 'Definir como Capa', + move: 'Mover', + moveCard_title: 'Mover Cartão', + remove: 'Remover', + removeCover_title: 'Remover Capa', + removeFromBoard: 'Remover do quadro', + removeFromProject: 'Remover do projeto', + removeManager: 'Remover gestor', + removeMember: 'Remover membro', + save: 'Guardar', + showAllAttachments: 'Mostrar todos os anexos ({{hidden}} ocultos)', + showFewerAttachments: 'Mostrar menos anexos', + start: 'Iniciar', + stop: 'Parar', + subscribe: 'Subscrever', + unsubscribe: 'Cancelar subscrição', + uploadNewAvatar: 'Carregar novo avatar', + uploadNewImage: 'Carregar nova imagem', + }, + }, +}; diff --git a/client/src/locales/pt-PT/index.js b/client/src/locales/pt-PT/index.js new file mode 100644 index 00000000..f6a9a36a --- /dev/null +++ b/client/src/locales/pt-PT/index.js @@ -0,0 +1,8 @@ +import login from './login'; + +export default { + language: 'pt-PT', + country: 'pt', + name: 'Português', + embeddedLocale: login, +}; diff --git a/client/src/locales/pt-PT/login.js b/client/src/locales/pt-PT/login.js new file mode 100644 index 00000000..ec6e39a9 --- /dev/null +++ b/client/src/locales/pt-PT/login.js @@ -0,0 +1,22 @@ +export default { + translation: { + common: { + emailAlreadyInUse: 'E-mail já está em uso', + emailOrUsername: 'E-mail ou nome de utilizador', + invalidEmailOrUsername: 'E-mail ou nome de utilizador inválido', + invalidPassword: 'Palavra-passe inválida', + noInternetConnection: 'Sem ligação à internet', + pageNotFound_title: 'Página não encontrada', + password: 'Palavra-passe', + serverConnectionFailed: 'Falha na ligação ao servidor', + unknownError: 'Erro desconhecido, tente novamente mais tarde', + useSingleSignOn: 'Utilizar início de sessão único', + usernameAlreadyInUse: 'Nome de utilizador já está em uso', + }, + + action: { + logIn: 'Iniciar sessão', + logInWithSso: 'Iniciar sessão com SSO', + }, + }, +}; diff --git a/client/src/locales/pt-PT/markdown-editor.json b/client/src/locales/pt-PT/markdown-editor.json new file mode 100644 index 00000000..b6f8589d --- /dev/null +++ b/client/src/locales/pt-PT/markdown-editor.json @@ -0,0 +1,165 @@ +{ + "action-previews": { + "text": "Este é um texto sem título.\nTanto o título como o texto\npodem ser destacados a negrito, itálico, cor,\nriscado e sublinhado.", + "text-with-head": "Este é um texto com título.\nTanto o título como o texto\npodem ser destacados a negrito, itálico, cor,\nriscado e sublinhado.", + "heading": "Título" + }, + "bundle": { + "error-title": "Erro no editor markdown", + "settings_wysiwyg": "Editor visual (wysiwyg)", + "settings_markup": "Marcação Markdown", + "markup_placeholder": "Introduza a marcação markdown..." + }, + "codeblock": { + "remove": "Remover", + "empty_option": "Nenhuma correspondência encontrada" + }, + "common": { + "delete": "Eliminar", + "edit": "Editar", + "toolbar_action_disabled": "Elemento de marcação incompatível" + }, + "forms": { + "common_action_cancel": "Cancelar", + "common_action_submit": "Submeter", + "common_action_upload": "Selecionar", + "common_tab_attach": "Adicionar do dispositivo", + "common_tab_link": "Adicionar por link", + "common_link": "Ligação", + "common_sizes": "Tamanho, px", + "image_name": "Título", + "image_link_href": "Link da imagem", + "image_link_href_help": "Endereço para onde a ligação da imagem direciona.", + "image_alt": "Texto alternativo", + "image_alt_help": "O texto alternativo é apresentado se a imagem não puder ser carregada.", + "image_upload_help": "Imagem JPEG, GIF ou PNG até 1 MB.", + "image_upload_failed": "Falha ao adicionar imagem", + "image_size_width": "Largura", + "image_size_height": "Altura", + "link_url_help": "Endereço para onde a ligação direciona.", + "link_text": "Texto da ligação", + "link_text_help": "Texto apresentado como ligação.", + "link_open_help": "Abrir ligação numa nova aba" + }, + "md-hints": { + "header_title": "Cabeçalho", + "header_hint": "# O seu texto", + "italic_title": "Itálico", + "italic_hint": "_O seu texto_", + "bold_title": "Negrito", + "bold_hint": "**O seu texto**", + "strikethrough_title": "Riscado", + "strikethrough_hint": "~~O seu texto~~", + "blockquote_title": "Citação", + "blockquote_hint": "> O seu texto", + "code_title": "Código", + "code_hint": "``````", + "link_title": "Ligação", + "link_hint": "[O seu texto](url)", + "image_title": "Imagem", + "image_hint": "![O seu texto](url)", + "list_title": "Item da lista", + "list_hint": "- O seu texto", + "numbered-list_title": "Lista numerada", + "numbered-list_hint": "1. O seu texto", + "documentation": "Documentação", + "documentation_link": "https://diplodoc.com/docs/pt/syntax/" + }, + "menubar": { + "bold": "Negrito", + "code": "Código", + "code_inline": "Código em linha", + "codeblock": "Bloco de código", + "colorify": "Cor do texto", + "colorify__color_blue": "Azul", + "colorify__color_default": "Padrão", + "colorify__color_gray": "Cinzento", + "colorify__color_green": "Verde", + "colorify__color_orange": "Laranja", + "colorify__color_red": "Vermelho", + "colorify__color_violet": "Violeta", + "colorify__color_yellow": "Amarelo", + "colorify__group_text": "Texto", + "cut": "Cortar", + "emoji": "Emoji", + "emoji__hint": "Pode adicionar emojis no WYSIWYG ou manualmente com marcação", + "heading": "Cabeçalho", + "heading1": "Cabeçalho 1", + "heading2": "Cabeçalho 2", + "heading3": "Cabeçalho 3", + "heading4": "Cabeçalho 4", + "heading5": "Cabeçalho 5", + "heading6": "Cabeçalho 6", + "hrule": "Separador", + "image": "Imagem", + "italic": "Itálico", + "link": "Ligação", + "list": "Lista", + "list__action_lift": "Subir item", + "list__action_sink": "Descer item", + "list_action_disabled": "Contradiz a lógica da lista", + "mark": "Marcado", + "mono": "Monoespaçado", + "more_action": "Mais ações", + "note": "Nota", + "olist": "Lista ordenada", + "quote": "Citação", + "redo": "Refazer", + "strike": "Riscado", + "table": "Tabela", + "text": "Texto", + "ulist": "Lista com marcadores", + "underline": "Sublinhado", + "undo": "Desfazer" + }, + "placeholder": { + "doc_empty": "Digite / para ver comandos...", + "checkbox": "Introduza a descrição da tarefa...", + "deflist_term": "Termo", + "deflist_desc": "Descrição da definição", + "heading": "Cabeçalho", + "cut_title": "Título", + "cut_content": "Conteúdo apresentado ao clicar", + "note_title": "Título", + "note_content": "Conteúdo da nota", + "table_cell": "Conteúdo da célula", + "select_filter": "Procurar idiomas..." + }, + "search": { + "label_case-sensitive": "Diferenciar maiúsculas e minúsculas", + "label_whole-word": "Palavra inteira", + "title": "Procurar no código" + }, + "suggest": { + "empty-msg": "Não encontrado" + }, + "widgets": { + "image": "Adicionar imagem", + "link": "Adicionar ligação" + }, + "yfm-note": { + "info": "Nota", + "tip": "Dica", + "warning": "Aviso", + "alert": "Alerta", + "remove": "Remover" + }, + "yfm-table": { + "column.add.before": "Adicionar coluna antes", + "column.add.after": "Adicionar coluna depois", + "column.remove": "Remover coluna", + "row.add.before": "Adicionar linha antes", + "row.add.after": "Adicionar linha depois", + "row.remove": "Remover linha", + "table.remove": "Remover tabela", + "table.menu.cell.align.left": "Alinhar o conteúdo da célula à esquerda", + "table.menu.cell.align.right": "Alinhar o conteúdo da célula à direita", + "table.menu.cell.align.center": "Centrar o conteúdo da célula", + "table.menu.row.add": "Adicionar linha depois", + "table.menu.row.remove": "Remover linha", + "table.menu.column.add": "Adicionar coluna depois", + "table.menu.column.remove": "Remover coluna", + "table.menu.convert.yfm": "Converter para tabela YFM", + "table.menu.table.remove": "Remover tabela" + } +} diff --git a/server/api/models/User.js b/server/api/models/User.js index f1089a77..20873167 100755 --- a/server/api/models/User.js +++ b/server/api/models/User.js @@ -55,6 +55,7 @@ const LANGUAGES = [ 'nl-NL', 'pl-PL', 'pt-BR', + 'pt-PT', 'ro-RO', 'ru-RU', 'sk-SK',