From c4ef566a42ab6af880ec11ce6c3886b9e9b0b918 Mon Sep 17 00:00:00 2001 From: "Frederick [Bot]" Date: Fri, 21 Mar 2025 00:21:23 +0000 Subject: [PATCH] chore(i18n): update translations via Crowdin --- frontend/src/i18n/lang/ar-SA.json | 1 + frontend/src/i18n/lang/bg-BG.json | 1 + frontend/src/i18n/lang/ca-ES.json | 1 + frontend/src/i18n/lang/cs-CZ.json | 1 + frontend/src/i18n/lang/da-DK.json | 1 + frontend/src/i18n/lang/de-DE.json | 1 + frontend/src/i18n/lang/de-swiss.json | 2 +- frontend/src/i18n/lang/eo-UY.json | 1 + frontend/src/i18n/lang/fi-FI.json | 1 + frontend/src/i18n/lang/fr-FR.json | 1 + frontend/src/i18n/lang/hr-HR.json | 1 + frontend/src/i18n/lang/nl-NL.json | 1 + frontend/src/i18n/lang/no-NO.json | 4 +- frontend/src/i18n/lang/pt-PT.json | 314 ++++----- frontend/src/i18n/lang/tr-TR.json | 2 +- frontend/src/i18n/lang/vi-VN.json | 986 +++++++++++++-------------- frontend/src/i18n/lang/zh-CN.json | 1 + frontend/src/i18n/lang/zh-TW.json | 1 + pkg/i18n/lang/de-DE.json | 14 +- pkg/i18n/lang/de-swiss.json | 14 +- pkg/i18n/lang/no-NO.json | 38 +- pkg/i18n/lang/pt-PT.json | 14 +- pkg/i18n/lang/tr-TR.json | 14 +- pkg/i18n/lang/vi-VN.json | 126 ++-- 24 files changed, 813 insertions(+), 728 deletions(-) diff --git a/frontend/src/i18n/lang/ar-SA.json b/frontend/src/i18n/lang/ar-SA.json index e1701cf12..12fa8a61e 100644 --- a/frontend/src/i18n/lang/ar-SA.json +++ b/frontend/src/i18n/lang/ar-SA.json @@ -100,6 +100,7 @@ "timezone": "Time zone", "overdueTasksRemindersTime": "وقت تذكير للمهام المتأخرة بالبريد الإلكتروني", "filterUsedOnOverview": "الفلتر المحفوظ والمستخدم في صفحة العرض العام", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." }, "totp": { diff --git a/frontend/src/i18n/lang/bg-BG.json b/frontend/src/i18n/lang/bg-BG.json index c71faa238..c6abc34da 100644 --- a/frontend/src/i18n/lang/bg-BG.json +++ b/frontend/src/i18n/lang/bg-BG.json @@ -100,6 +100,7 @@ "timezone": "Часова зона", "overdueTasksRemindersTime": "Час за напомняне за просрочени задачи", "filterUsedOnOverview": "Запазен филтър, използван на страницата за общ преглед", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." }, "totp": { diff --git a/frontend/src/i18n/lang/ca-ES.json b/frontend/src/i18n/lang/ca-ES.json index 69c654c72..0b1df19af 100644 --- a/frontend/src/i18n/lang/ca-ES.json +++ b/frontend/src/i18n/lang/ca-ES.json @@ -100,6 +100,7 @@ "timezone": "Time zone", "overdueTasksRemindersTime": "Overdue tasks reminder email time", "filterUsedOnOverview": "Saved filter used on the overview page", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." }, "totp": { diff --git a/frontend/src/i18n/lang/cs-CZ.json b/frontend/src/i18n/lang/cs-CZ.json index 6f1155ac2..260d60526 100644 --- a/frontend/src/i18n/lang/cs-CZ.json +++ b/frontend/src/i18n/lang/cs-CZ.json @@ -100,6 +100,7 @@ "timezone": "Time zone", "overdueTasksRemindersTime": "Čas odeslání emailu o zpožděných úkolech", "filterUsedOnOverview": "Uložený filtr použitý na stránce přehledu", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." }, "totp": { diff --git a/frontend/src/i18n/lang/da-DK.json b/frontend/src/i18n/lang/da-DK.json index ce6723f18..d70bde19f 100644 --- a/frontend/src/i18n/lang/da-DK.json +++ b/frontend/src/i18n/lang/da-DK.json @@ -100,6 +100,7 @@ "timezone": "Time zone", "overdueTasksRemindersTime": "Forfaldne opgaver påmindelse e-mail tidspunkt", "filterUsedOnOverview": "Saved filter used on the overview page", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." }, "totp": { diff --git a/frontend/src/i18n/lang/de-DE.json b/frontend/src/i18n/lang/de-DE.json index ecd036dc5..fa2d79319 100644 --- a/frontend/src/i18n/lang/de-DE.json +++ b/frontend/src/i18n/lang/de-DE.json @@ -100,6 +100,7 @@ "timezone": "Zeitzone", "overdueTasksRemindersTime": "Zeit der E-Mail-Zusammenfassung der überfälligen Aufgaben", "filterUsedOnOverview": "Gespeicherter Filter, der für die Startseite verwendet wird", + "minimumPriority": "Minimal sichtbare Aufgaben-Priorität", "externalUserNameChange": "Dein Name wird von deinem Login-Provider verwaltet ({provider}). Um ihn zu ändern, aktualisiere ihn bitte dort." }, "totp": { diff --git a/frontend/src/i18n/lang/de-swiss.json b/frontend/src/i18n/lang/de-swiss.json index 0a805c327..90291d7d1 100644 --- a/frontend/src/i18n/lang/de-swiss.json +++ b/frontend/src/i18n/lang/de-swiss.json @@ -100,7 +100,7 @@ "timezone": "Zeitzone", "overdueTasksRemindersTime": "Zeit der E-Mail-Zusammenfassung der überfälligen Aufgaben", "filterUsedOnOverview": "Gespeicherter Filter, der für die Startseite verwendet wird", - "minimumPriority": "Minimum visible task priority", + "minimumPriority": "Minimal sichtbare Aufgaben-Priorität", "externalUserNameChange": "Dein Name wird von deinem Login-Provider verwaltet ({provider}). Um ihn zu ändern, aktualisiere ihn bitte dort." }, "totp": { diff --git a/frontend/src/i18n/lang/eo-UY.json b/frontend/src/i18n/lang/eo-UY.json index 69c654c72..0b1df19af 100644 --- a/frontend/src/i18n/lang/eo-UY.json +++ b/frontend/src/i18n/lang/eo-UY.json @@ -100,6 +100,7 @@ "timezone": "Time zone", "overdueTasksRemindersTime": "Overdue tasks reminder email time", "filterUsedOnOverview": "Saved filter used on the overview page", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." }, "totp": { diff --git a/frontend/src/i18n/lang/fi-FI.json b/frontend/src/i18n/lang/fi-FI.json index db335f55e..9d36401af 100644 --- a/frontend/src/i18n/lang/fi-FI.json +++ b/frontend/src/i18n/lang/fi-FI.json @@ -100,6 +100,7 @@ "timezone": "Aikavyöhyke", "overdueTasksRemindersTime": "Erääntyneiden tehtävien muistutus sähköpostin aika", "filterUsedOnOverview": "Tallennettu yleisnäkymä-sivulla käytetty suodatin", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Nimeäsi hallinnoi kirjautumisoperaattori ({provider}). Muuttaaksesi sen, päivitä se siellä." }, "totp": { diff --git a/frontend/src/i18n/lang/fr-FR.json b/frontend/src/i18n/lang/fr-FR.json index 035fe2f06..99f9c7739 100644 --- a/frontend/src/i18n/lang/fr-FR.json +++ b/frontend/src/i18n/lang/fr-FR.json @@ -100,6 +100,7 @@ "timezone": "Time zone", "overdueTasksRemindersTime": "Heure du courriel de rappel des tâches en retard", "filterUsedOnOverview": "Filtre enregistré utilisé sur la vue d’ensemble", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." }, "totp": { diff --git a/frontend/src/i18n/lang/hr-HR.json b/frontend/src/i18n/lang/hr-HR.json index 7c2abf488..1385ba171 100644 --- a/frontend/src/i18n/lang/hr-HR.json +++ b/frontend/src/i18n/lang/hr-HR.json @@ -100,6 +100,7 @@ "timezone": "Time zone", "overdueTasksRemindersTime": "Vrijeme podsjetnika za zakašnjele zadatke putem e-pošte", "filterUsedOnOverview": "Spremljeni filtar korišten na stranici pregleda", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." }, "totp": { diff --git a/frontend/src/i18n/lang/nl-NL.json b/frontend/src/i18n/lang/nl-NL.json index 87bfdba31..fdc7dd5e6 100644 --- a/frontend/src/i18n/lang/nl-NL.json +++ b/frontend/src/i18n/lang/nl-NL.json @@ -100,6 +100,7 @@ "timezone": "Time zone", "overdueTasksRemindersTime": "Overdue tasks reminder email time", "filterUsedOnOverview": "Saved filter used on the overview page", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." }, "totp": { diff --git a/frontend/src/i18n/lang/no-NO.json b/frontend/src/i18n/lang/no-NO.json index 7963305b8..542111d3f 100644 --- a/frontend/src/i18n/lang/no-NO.json +++ b/frontend/src/i18n/lang/no-NO.json @@ -100,7 +100,7 @@ "timezone": "Tidssone", "overdueTasksRemindersTime": "Påminnelsestid for utløpte oppgaver", "filterUsedOnOverview": "Lagret filter brukt på siden med oversikt", - "minimumPriority": "Minimum visible task priority", + "minimumPriority": "Minimum synlig oppgaveprioritet", "externalUserNameChange": "Navnet ditt blir administrert av din innloggingsleverandør ({provider}). For å endre det, vennligst oppdater det hos leverandøren." }, "totp": { @@ -455,7 +455,7 @@ "title": "Spørring", "placeholder": "Angi et søk eller filter…", "help": { - "intro": "For å filtrere oppgaver kan du bruke en spørringssyntaks lik SQL. De tilgjengelige feltene for filtrering omfatter:", + "intro": "For å filtrere oppgaver kan du bruke en spørresyntaks på samme måte som SQL. De tilgjengelige feltene for filtrering omfatter:", "link": "Hvordan virker dette?", "canUseDatemath": "Du kan bruke datokalkulering for å angi relative datoer. Klikk på datoverdier i spørringen for å finne ut mer.", "fields": { diff --git a/frontend/src/i18n/lang/pt-PT.json b/frontend/src/i18n/lang/pt-PT.json index 65bf37e0c..324d8dd76 100644 --- a/frontend/src/i18n/lang/pt-PT.json +++ b/frontend/src/i18n/lang/pt-PT.json @@ -43,7 +43,7 @@ "forgotPassword": "Esqueceste a tua palavra-passe?", "resetPassword": "Redefine a tua palavra-passe", "resetPasswordAction": "Enviem-me um link para redefinição da palavra-passe", - "resetPasswordSuccess": "Check your inbox! You should have an email with instructions on how to reset your password.", + "resetPasswordSuccess": "Verifica a tua caixa de correio! Deves ter um e-mail com instruções sobre como redefinir a tua palavra-passe.", "passwordsDontMatch": "As palavras-passe não coincidem", "confirmEmailSuccess": "Confirmaste com sucesso o teu e-mail! Podes agora iniciar sessão.", "totpTitle": "Código de autenticação de dois fatores", @@ -53,7 +53,7 @@ "loginWith": "Iniciar sessão com {provider}", "authenticating": "A autenticar…", "openIdStateError": "O estado não coincide, a recusar continuar!", - "openIdGeneralError": "An error occurred while authenticating against the third party.", + "openIdGeneralError": "Ocorreu um erro na autenticação perante a entidade externa.", "logout": "Terminar Sessão", "emailInvalid": "Por favor, insire um endereço de e-mail válido.", "usernameRequired": "Por favor, fornece um nome de utilizador.", @@ -61,32 +61,32 @@ "usernameMustNotLookLikeUrl": "O nome de utilizador não se deve assemelhar a um URL.", "passwordRequired": "Por favor, fornece uma palavra-passe.", "passwordNotMin": "A palavra-passe deve ter no mínimo 8 caracteres.", - "passwordNotMax": "Password must have at most 72 characters.", + "passwordNotMax": "A palavra-passe deve ter, no máximo, 72 caracteres.", "showPassword": "Mostrar a palavra-passe", "hidePassword": "Esconder a palavra-passe", "noAccountYet": "Ainda não tens uma conta?", "alreadyHaveAnAccount": "Já tens uma conta?", "remember": "Permanecer autenticado", - "registrationDisabled": "Registration is disabled." + "registrationDisabled": "O registo está desativado." }, "settings": { "title": "Definições", "newPasswordTitle": "Atualizar Palavra-Passe", - "newPassword": "New password", - "newPasswordConfirm": "New password confirmation", - "currentPassword": "Current password", + "newPassword": "Nova palavra-passe", + "newPasswordConfirm": "Confirmação da nova palavra-passe", + "currentPassword": "Palavra-passe atual", "currentPasswordPlaceholder": "A tua palavra-passe atual", "passwordsDontMatch": "A nova palavra-passe e a sua confirmação não correspondem.", "passwordUpdateSuccess": "A sua palavra-passe foi atualizada com sucesso.", "updateEmailTitle": "Atualiza o Teu Endereço de E-mail", - "updateEmailNew": "New email address", + "updateEmailNew": "Novo endereço de e-mail", "updateEmailSuccess": "E-mail atualizado com sucesso. Foi enviado um link de confirmação.", "general": { "title": "Definições Gerais", - "name": "My Name", - "newName": "The new name", + "name": "O Meu Nome", + "newName": "O novo nome", "savedSuccess": "As definições foram atualizadas com sucesso.", - "emailReminders": "Send me reminders for tasks via email", + "emailReminders": "Enviem-me lembretes de tarefas por e-mail", "overdueReminders": "Envie-me diariamente um resumo das minhas tarefas pendentes", "discoverableByName": "Permitir que outros utilizadores me adicionem como membro a equipas ou projetos quando pesquisem pelo meu nome", "discoverableByEmail": "Permitir que outros utilizadores me adicionem como membro a equipas ou projetos quando pesquisem pelos meu endereço de e-mail completo", @@ -95,26 +95,26 @@ "weekStartSunday": "Domingo", "weekStartMonday": "Segunda-Feira", "language": "Idioma", - "defaultProject": "Default project", - "defaultView": "Default view", - "timezone": "Time zone", + "defaultProject": "Projeto padrão", + "defaultView": "Vista padrão", + "timezone": "Fuso horário", "overdueTasksRemindersTime": "Horário do e-mail de lembrete de tarefas pendentes", "filterUsedOnOverview": "Salvo filtro utilizado na vista geral", - "minimumPriority": "Minimum visible task priority", - "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." + "minimumPriority": "Prioridade mínima de tarefa a visualizar", + "externalUserNameChange": "O teu nome é gerido pelo teu fornecedor de início de sessão ({provider}). Para o alterar, atualiza-o antes lá." }, "totp": { "title": "Autenticação de Dois Fatores", "enroll": "Registar", - "finishSetupPart1": "To finish your setup, use this secret in your TOTP app (Google Authenticator or similar):", + "finishSetupPart1": "Para concluir a tua configuração, utiliza este código no teu aplicativo TOTP (Google Authenticator ou similar):", "finishSetupPart2": "Depois disso, insere um código do teu aplicativo abaixo.", "scanQR": "Como alternativa, podes digitalizar este código QR:", "passcode": "Código", - "passcodePlaceholder": "A code generated by your TOTP application", + "passcodePlaceholder": "Um código gerado pelo teu aplicativo TOTP", "setupSuccess": "Configuraste com sucesso a autenticação de dois fatores!", "enterPassword": "Por favor, insere a tua palavra-passe", "disable": "Desativar a autenticação de dois fatores", - "confirmSuccess": "You've successfully confirmed your TOTP setup and can use it from now on!", + "confirmSuccess": "Confirmaste com sucesso a tua configuração TOTP e podes utilizá-la de agora em diante!", "disableSuccess": "A autenticação de dois fatores foi desativada com sucesso." }, "caldav": { @@ -138,7 +138,7 @@ "uploadAvatar": "Carregar Avatar", "statusUpdateSuccess": "Estado do avatar foi atualizado com sucesso!", "setSuccess": "O avatar foi configurado com sucesso!", - "ldap": "Your avatar is automagically synced from your organization's directory service (LDAP). You can ask your IT team for information on how to change it." + "ldap": "O teu avatar é sincronizado automaticamente a partir do serviço de diretório da tua organização (LDAP). Podes solicitar à tua equipa de TI mais informação sobre como o alterar." }, "quickAddMagic": { "title": "Modo de Introdução Mágica Rápida", @@ -166,7 +166,7 @@ "90d": "90 Dias", "permissionExplanation": "As permissões permitem-te definir o âmbito para o qual o token de API pode ser utilizado.", "titleRequired": "O título é requerido", - "permissionRequired": "Please select at least one permission from the list.", + "permissionRequired": "Por favor, seleciona pelo menos uma permissão da lista.", "expired": "Este token expirou {ago}.", "tokenCreatedSuccess": "Aqui está o teu novo token de API: {token}", "tokenCreatedNotSeeAgain": "Guarda-o num local seguro, não o vais poder visualizar novamente!", @@ -213,7 +213,7 @@ "archivedMessage": "Este projeto está arquivado. Não é possível editar ou criar novas tarefas para ele.", "archived": "Arquivado", "showArchived": "Mostrar Arquivados", - "title": "Title", + "title": "Título", "color": "Cor", "projects": "Projetos", "parent": "Projeto Principal", @@ -222,10 +222,10 @@ "shared": "Projetos Partilhados", "noDescriptionAvailable": "Não está disponível nenhuma descrição do projeto.", "inboxTitle": "Caixa de Entrada", - "favorite": "Mark this project as favorite", - "unfavorite": "Remove this project from favorites", - "openSettingsMenu": "Open project settings menu", - "description": "Project description", + "favorite": "Marcar este projeto como favorito", + "unfavorite": "Remover este projeto dos favoritos", + "openSettingsMenu": "Abrir o menu de definições do projeto", + "description": "Descrição do projeto", "create": { "header": "Novo projeto", "titlePlaceholder": "O título do projeto será aqui…", @@ -237,8 +237,8 @@ "title": "Arquivar \"{project}\"", "archive": "Arquivar este projeto", "unarchive": "Desarquivar este projeto", - "unarchiveText": "You will be able to create tasks or edit it.", - "archiveText": "You won't be able to edit this project or create tasks until you un-archive it.", + "unarchiveText": "Vais ser capaz de criar tarefas ou editá-las.", + "archiveText": "Não poderás editar este projeto ou criar tarefas até o desarquivares.", "success": "Este projeto foi arquivado com sucesso." }, "background": { @@ -258,7 +258,7 @@ "text2": "Isto inclui todas as tarefas e NÃO PODE SER REVERTIDO!", "success": "O projeto foi eliminado com sucesso.", "tasksToDelete": "Isto irá remover irremediavelmente aprox. {count} tarefas.", - "tasksAndChildProjectsToDelete": "This will irrevocably remove approx. {tasks} tasks and {projects} projects.", + "tasksAndChildProjectsToDelete": "Isto irá remover irremediavelmente cerca de {tasks} tarefas e {projects} projetos.", "noTasksToDelete": "Este projeto não contém tarefas, deve ser seguro eliminá-lo." }, "duplicate": { @@ -287,7 +287,7 @@ "title": "Links Partilhados", "what": "Como funcionam os links partilhados?", "explanation": "Links Partilhados permite-lhe partilhar facilmente um projeto com outros utilizadores que não têm uma conta no Vikunja.", - "create": "Create a link share", + "create": "Criar um link partilhado", "name": "Nome (opcional)", "namePlaceholder": "ex.: Lorem Ipsum", "nameExplanation": "Todas as ações realizadas através deste link partilhado vão aparecer com este nome.", @@ -325,14 +325,14 @@ } }, "first": { - "title": "First View" + "title": "Vista Principal" }, "list": { "title": "Lista", "add": "Adicionar", - "addPlaceholder": "Add a task…", + "addPlaceholder": "Adicionar uma tarefa…", "empty": "Este projeto está atualmente vazio.", - "newTaskCta": "Create a task.", + "newTaskCta": "Cria uma tarefa.", "editTask": "Editar Tarefa" }, "gantt": { @@ -364,7 +364,7 @@ "addTaskPlaceholder": "Introduz o título da nova tarefa…", "addTask": "Adicionar uma tarefa", "addAnotherTask": "Adicionar outra tarefa", - "addBucket": "Create a bucket", + "addBucket": "Criar um conjunto", "addBucketPlaceholder": "Introduz o título do novo conjunto…", "deleteHeaderBucket": "Eliminar o conjunto", "deleteBucketText1": "Tens a certeza que pretendes eliminar este conjunto?", @@ -373,7 +373,7 @@ "bucketTitleSavedSuccess": "O título do conjunto foi salvo com sucesso.", "bucketLimitSavedSuccess": "O limite do conjunto foi salvo com sucesso.", "collapse": "Encolher este conjunto", - "bucketLimitReached": "You have reached the bucket limit. Remove tasks or increase the limit to add new tasks." + "bucketLimitReached": "Atingis-te o limite do conjunto. Remove tarefas ou aumenta o limite para adicionares novas tarefas." }, "pseudo": { "favorites": { @@ -396,30 +396,30 @@ "secretDocs": "Verifica a documentação para mais detalhes sobre como utilizar segredos." }, "views": { - "header": "Edit views", - "title": "Title", - "actions": "Actions", - "kind": "Kind", - "bucketConfigMode": "Bucket configuration mode", - "bucketConfig": "Bucket configuration", + "header": "Editar vista", + "title": "Título", + "actions": "Ações", + "kind": "Tipo", + "bucketConfigMode": "Modo de configuração do conjunto", + "bucketConfig": "Configuração do conjunto", "bucketConfigManual": "Manual", - "filter": "Filter", - "create": "Create view", - "createSuccess": "The view was created successfully.", - "titleRequired": "Please provide a title.", - "delete": "Delete this view", - "deleteText": "Are you sure you want to remove this view? It will no longer be possible to use it to view tasks in this project. This action won't delete any tasks. This cannot be undone!", - "deleteSuccess": "The view was deleted successfully.", - "onlyAdminsCanEdit": "Only project admins can edit views.", - "updateSuccess": "The view was updated successfully." + "filter": "Filtro", + "create": "Criar vista", + "createSuccess": "A vista foi criada com sucesso.", + "titleRequired": "Por favor, insere um título.", + "delete": "Eliminar esta vista", + "deleteText": "Tens a certeza que queres remover esta vista? Não será mais possível utilizá-la para visualizar tarefas neste projeto. Esta ação não irá eliminar nenhuma tarefa. Isto não pode ser revertido!", + "deleteSuccess": "Esta vista foi eliminada com sucesso.", + "onlyAdminsCanEdit": "Apenas administradores do projeto podem editar esta vista.", + "updateSuccess": "A vista foi atualizada com sucesso." } }, "filters": { "title": "Filtros", "clear": "Limpar Filtros", - "showResults": "Show results", - "fromView": "The current view has a filter set as well:", - "fromViewBoth": "It will be used in combination with what you enter here.", + "showResults": "Mostrar resultados", + "fromView": "A vista atual tem também um filtro definido:", + "fromViewBoth": "Será utilizado em combinação com o que inserires aqui.", "attributes": { "title": "Título", "titlePlaceholder": "O título do filtro memorizado será aqui…", @@ -439,7 +439,7 @@ "create": { "title": "Novo Filtro Memorizado", "description": "Um filtro memorizado é um projeto virtual que é compilado a partir de um conjunto de filtros de cada vez que é acedido.", - "action": "Create saved filter", + "action": "Criar filtro memorizado", "titleRequired": "Por favor, insere um título para o filtro." }, "delete": { @@ -452,52 +452,52 @@ "success": "O filtro foi memorizado com sucesso." }, "query": { - "title": "Query", - "placeholder": "Type a search or filter query…", + "title": "Pesquisa", + "placeholder": "Introduz uma pesquisa ou filtro…", "help": { - "intro": "To filter tasks, you can use a query syntax similar to SQL. The available fields for filtering include:", - "link": "How does this work?", - "canUseDatemath": "You can use date math to set relative dates. Click on the date value in a query to find out more.", + "intro": "Para filtrar tarefas, podes utilizar uma sintaxe de pesquisa semelhante à SQL. Os campos disponíveis para filtragem incluem:", + "link": "Como é que isto funciona?", + "canUseDatemath": "Podes utilizar a matemática de datas para definir datas relativas. Clica no valor da data numa pesquisa para saber mais.", "fields": { - "done": "Whether the task is completed or not", - "priority": "The priority level of the task (1-5)", - "percentDone": "The percentage of completion for the task (0-100)", - "dueDate": "The due date of the task", - "startDate": "The start date of the task", - "endDate": "The end date of the task", - "doneAt": "The date and time when the task was completed", - "assignees": "The assignees of the task", - "labels": "The labels associated with the task", - "project": "The project the task belongs to (only available for saved filters, not on a project level)", - "reminders": "The reminders of the task as a date field, will return all tasks with at least one reminder matching the query", - "created": "The time and date when the task was created", - "updated": "The time and date when the task was last changed" + "done": "Se a tarefa está concluída ou não", + "priority": "O nível de prioridade da tarefa (1-5)", + "percentDone": "A percentagem de conclusão da tarefa (0-100)", + "dueDate": "A data de vencimento da tarefa", + "startDate": "A data de início da tarefa", + "endDate": "A data de fim da tarefa", + "doneAt": "A data e a hora em que a tarefa foi concluída", + "assignees": "Os responsáveis pela tarefa", + "labels": "As etiquetas associadas à tarefa", + "project": "O projeto a que a tarefa pertence (apenas disponível para filtros memorizados, não ao nível do projeto)", + "reminders": "Os lembretes da tarefa como um campo de data, apresentará todas as tarefas com pelo menos um lembrete que corresponda à pesquisa", + "created": "A hora e a data em que a tarefa foi criada", + "updated": "A hora e a data em que a tarefa foi alterada pela última vez" }, "operators": { - "intro": "The available operators for filtering include:", - "notEqual": "Not equal to", - "equal": "Equal to", - "greaterThan": "Greater than", - "greaterThanOrEqual": "Greater than or equal to", - "lessThan": "Less than", - "lessThanOrEqual": "Less than or equal to", - "like": "Matches a pattern (using wildcard %)", - "in": "Matches any value in a comma-seperated list of values", - "notIn": "Matches any value not present in a comma-seperated list of values" + "intro": "Os operadores disponíveis para filtragem incluem:", + "notEqual": "Não igual a", + "equal": "Igual a", + "greaterThan": "Maior que", + "greaterThanOrEqual": "Maior ou igual a", + "lessThan": "Menor que", + "lessThanOrEqual": "Menor ou igual a", + "like": "Corresponde a um padrão (utilizando o carater universal %)", + "in": "Faz corresponder qualquer valor numa lista de valores separados por vírgulas", + "notIn": "Faz corresponder qualquer valor não presente numa lista de valores separados por vírgulas" }, "logicalOperators": { - "intro": "To combine multiple conditions, you can use the following logical operators:", - "and": "AND operator, matches if all conditions are true", - "or": "OR operator, matches if any of the conditions are true", - "parentheses": "Parentheses for grouping conditions" + "intro": "Para combinar várias condições, pode utilizar os seguintes operadores lógicos:", + "and": "Operador AND, faz a correspondência se todas as condições forem verdadeiras", + "or": "Operador OR, faz a correspondência se qualquer das condições for verdadeira", + "parentheses": "Parênteses para agrupar condições" }, "examples": { - "intro": "Here are some examples of filter queries:", - "priorityEqual": "Matches tasks with priority level 4", - "dueDatePast": "Matches tasks with a due date in the past", - "undoneHighPriority": "Matches undone tasks with priority level 3 or higher", - "assigneesIn": "Matches tasks assigned to either \"user1\" or \"user2\"", - "priorityOneOrTwoPastDue": "Matches tasks with priority level 1 or 2 and a due date in the past" + "intro": "Eis alguns exemplos de pesquisas de filtros:", + "priorityEqual": "Faz corresponder tarefas com o nível de prioridade 4", + "dueDatePast": "Faz corresponder tarefas com uma data de vencimento já passada", + "undoneHighPriority": "Faz corresponder tarefas não concluídas com um nível de prioridade 3 ou superior", + "assigneesIn": "Faz corresponder tarefas atribuídas a “utilizador1” ou “utilizador2”", + "priorityOneOrTwoPastDue": "Faz corresponder tarefas com prioridade 1 ou 2 e uma data de vencimento já passada" } } } @@ -527,7 +527,7 @@ "search": "Escreve para pesquisar uma etiqueta…", "create": { "header": "Nova etiqueta", - "title": "Create a label", + "title": "Cria uma etiqueta", "titleRequired": "Por favor, especifica um título.", "success": "A etiqueta foi criada com sucesso." }, @@ -548,7 +548,7 @@ "sharing": { "authenticating": "A autenticar…", "passwordRequired": "Este projeto partilhado requer uma palavra-passe. Por favor, introduz-a abaixo:", - "error": "An error occurred.", + "error": "Ocorreu um erro.", "invalidPassword": "A palavra-passe é inválida." }, "navigation": { @@ -591,7 +591,7 @@ "createdBy": "Criado por {0}", "actions": "Ações", "cannotBeUndone": "Isto não pode ser revertido!", - "avatarOfUser": "{user}'s profile image" + "avatarOfUser": "Avatar de {user}" }, "input": { "resetColor": "Repor cor", @@ -663,14 +663,14 @@ } }, "multiselect": { - "createPlaceholder": "Create", + "createPlaceholder": "Criar", "selectPlaceholder": "Clica ou pressiona Enter para selecionar" }, "datepickerRange": { "to": "Até", "from": "De", "fromto": "{from} até {to}", - "date": "Date", + "date": "Data", "ranges": { "today": "Hoje", "thisWeek": "Esta semana", @@ -687,25 +687,25 @@ "restOfThisYear": "O Resto Deste Ano" }, "values": { - "now": "Now", - "startOfToday": "Start of today", - "endOfToday": "End of today", - "beginningOflastWeek": "Beginning of last week", - "endOfLastWeek": "End of last week", - "beginningOfThisWeek": "Beginning of this week", - "endOfThisWeek": "End of this week", - "startOfNextWeek": "Start of next week", - "endOfNextWeek": "End of next week", - "in7Days": "In 7 days", - "beginningOfLastMonth": "Beginning of last month", - "endOfLastMonth": "End of last month", - "startOfThisMonth": "Start of this month", - "endOfThisMonth": "End of this month", - "startOfNextMonth": "Start of next month", - "endOfNextMonth": "End of next month", - "in30Days": "In 30 days", - "startOfThisYear": "Beginning of this year", - "endOfThisYear": "End of this year" + "now": "Agora", + "startOfToday": "Início de hoje", + "endOfToday": "Final de hoje", + "beginningOflastWeek": "Início da semana passada", + "endOfLastWeek": "Final da semana passada", + "beginningOfThisWeek": "Início desta semana", + "endOfThisWeek": "Final desta semana", + "startOfNextWeek": "Início da próxima semana", + "endOfNextWeek": "Final da próxima semana", + "in7Days": "Em 7 dias", + "beginningOfLastMonth": "Início do mês passado", + "endOfLastMonth": "Final do mês passado", + "startOfThisMonth": "Início deste mês", + "endOfThisMonth": "Final deste mês", + "startOfNextMonth": "Início do próximo mês", + "endOfNextMonth": "Final do próximo mês", + "in30Days": "Em 30 dias", + "startOfThisYear": "Início deste ano", + "endOfThisYear": "Final deste ano" } }, "datemathHelp": { @@ -742,13 +742,13 @@ }, "task": { "task": "Tarefa", - "new": "Create a task", + "new": "Cria uma tarefa", "delete": "Eliminar esta tarefa", "createSuccess": "A tarefa for criada com sucesso.", - "addReminder": "Add a reminder…", + "addReminder": "Adicionar um lembrete…", "doneSuccess": "A tarefa foi marcada como concluída.", "undoneSuccess": "A tarefa foi desmarcada como concluída.", - "revertSuccess": "The task change was successfully undone.", + "revertSuccess": "A alteração da tarefa foi anulada com sucesso.", "undo": "Desfazer", "openDetail": "Abrir vista detalhada da tarefa", "checklistTotal": "{checked} de {total} tarefas", @@ -864,7 +864,7 @@ "deleteText1": "Tens a certeza que pretendes eliminar este comentário?", "deleteSuccess": "O comentário foi eliminado com sucesso.", "addedSuccess": "O comentário foi adicionada com sucesso.", - "permalink": "Copy permalink to this comment" + "permalink": "Copiar o link permanente para este comentário" }, "deferDueDate": { "title": "Adiar data de vencimento", @@ -883,7 +883,7 @@ "unassignSuccess": "O utilizador foi desatribuido com sucesso." }, "label": { - "placeholder": "Type to add a label…", + "placeholder": "Escreve para adicionar uma etiqueta…", "createPlaceholder": "Adicionar isto como nova etiqueta", "addSuccess": "A etiqueta foi adicionada com sucesso.", "createSuccess": "A etiqueta foi criada com sucesso.", @@ -906,8 +906,8 @@ "relation": { "add": "Adicionar Nova Relação Entre Tarefas", "new": "Nova Relação Entre Tarefas", - "searchPlaceholder": "Type search for a task to add as related…", - "createPlaceholder": "Add this as related task", + "searchPlaceholder": "Escreve para pesquisar uma tarefa a adicionar como relacionada…", + "createPlaceholder": "Adicionar esta como tarefa relacionada", "differentProject": "Esta tarefa pertence a um projeto diferente.", "noneYet": "Ainda sem tarefas relacionadas.", "delete": "Eliminar Relação Entre Tarefas", @@ -945,7 +945,7 @@ "every30d": "A cada 30 Dias", "mode": "Modo de repetição", "monthly": "Mensal", - "fromCurrentDate": "From completion date", + "fromCurrentDate": "Da data de conclusão", "each": "Cada", "specifyAmount": "Especifica uma quantidade…", "hours": "Horas", @@ -985,7 +985,7 @@ "title": "Equipas", "noTeams": "Atualmente não fazes parte de nenhuma equipa.", "create": { - "title": "Create a team", + "title": "Criar uma equipa", "success": "A equipa foi criada com sucesso." }, "edit": { @@ -1027,8 +1027,8 @@ "descriptionPlaceholder": "Descreve aqui a equipa, pressiona '/' para mais opções…", "admin": "Administrador", "member": "Membro", - "isPublic": "Public Team", - "isPublicDescription": "Make the team publicly discoverable. When enabled, anyone can share projects with this team even when not being a direct member." + "isPublic": "Equipa Pública", + "isPublicDescription": "Torna a equipa publicamente visível. Quando ativado, qualquer pessoa pode partilhar projetos com esta equipa, mesmo que não seja um membro direto." } }, "keyboardShortcuts": { @@ -1083,13 +1083,13 @@ "duplicate": "Duplicar", "delete": "Eliminar", "unarchive": "Desarquivar", - "setBackground": "Background settings", + "setBackground": "Definições do fundo", "share": "Partilhar", "newProject": "Novo projeto", "createProject": "Criar projeto", "cantArchiveIsDefault": "Não podes arquivar isto porque é o teu projeto padrão.", "cantDeleteIsDefault": "Não podes eliminar isto porque é o teu projeto padrão.", - "views": "Views" + "views": "Vistas" }, "apiConfig": { "url": "URL do Vikunja", @@ -1136,10 +1136,10 @@ "altFormatShort": "j M Y" }, "reaction": { - "reactedWith": "{user} reacted with {value}", - "reactedWithAnd": "{users} and {lastUser} reacted with {value}", - "reactedWithAndMany": "{users} and {num} more reacted reacted with {value}", - "add": "Add your reaction" + "reactedWith": "{user} reagiu com {value}", + "reactedWithAnd": "{users} e {lastUser} reagiram com {value}", + "reactedWithAndMany": "{users} e {num} mais reagiram com {value}", + "add": "Adiciona a tua reação" }, "error": { "error": "Erro", @@ -1157,28 +1157,28 @@ "1012": "Endereço de e-mail do utlizador não confirmado.", "1013": "Campo de nova palavra-passe vazio.", "1014": "Campo de antiga palavra-passe vazio.", - "1015": "TOTP is already enabled for this user.", - "1016": "TOTP is not enabled for this user.", - "1017": "The TOTP passcode is invalid.", + "1015": "TOTP já está ativado para este utilizador.", + "1016": "TOTP não está ativado para este utilizador.", + "1017": "O código TOTP é inválido.", "1018": "A definição do tipo de avatar do utilizador é inválida.", - "1019": "No email address was provided by the OpenID provider.Please make sure the openid provider publicly provides an email address for your account.", - "1020": "This account is disabled. Check your emails or ask your administrator.", - "1021": "This account is managed by a third-party authentication provider.", - "1022": "The username must not contain spaces.", - "1023": "You can't do that as a link share.", - "1024": "Invalid claim data for field {field} of type {type}.", - "1025": "The timezone '{timezone}' is invalid. Please select a valid timezone from the list.", + "1019": "O fornecedor de OpenID não forneceu nenhum endereço de e-mail. Certifica-te que o fornecedor de OpenID fornece publicamente um endereço de e-mail para a tua conta.", + "1020": "Esta conta está desativada. Verifica os teus e-mails ou informa-te junto do teu administrador.", + "1021": "Esta conta é gerida por um fornecedor de autenticação de terceiros.", + "1022": "O nome de utilizador não deve conter espaços.", + "1023": "Não é possível fazer isso como um link partilhado.", + "1024": "Dados do pedido inválidos para o campo {field} do tipo {type}.", + "1025": "O fuso horário '{timezone}' é inválido. Por favor, seleciona um fuso horário válido da lista.", "2001": "O ID não pode ser 0 ou estar vazio.", "2002": "Alguns dos dados solicitados eram inválidos.", - "2003": "The timezone '{timezone}' is invalid.", + "2003": "O fuso horário '{timezone}' é inválido.", "3001": "O projeto não existe.", "3004": "Precisas ter permissão de leitura nesse projeto para executar essa ação.", "3005": "O nome do projeto não pode estar em branco.", "3006": "O projeto partiilhado não existe.", "3007": "Já existe um projeto com este identificador.", "3008": "O projeto está arquivado, portanto, só pode ser acedido para leitura. Isto é também verdade para todas as tarefas associadas a este projeto.", - "4001": "The task title cannot be empty.", - "4002": "The task does not exist.", + "4001": "O título da lista não pode estar em branco.", + "4002": "A tarefa não existe.", "4003": "Todas as tarefas para edição em massa devem pertencer ao mesmo projeto.", "4004": "Precisas selecionar pelo menos uma tarefa para realizar uma edição em massa.", "4005": "Não possuis permissão para ver esta tarefa.", @@ -1196,18 +1196,18 @@ "4017": "Filtro de comparação de tarefas inválido.", "4018": "Filtro de encademanto de tarefas inválido.", "4019": "Valor de filtro de tarefas inválido.", - "4020": "This attachment does not belong to that task.", - "4021": "This user is already assigned to that task.", - "4022": "Please provide what the reminder date is relative to.", - "4023": "Cannot create a task relation cycle.", + "4020": "Este anexo não pertence a essa tarefa.", + "4021": "Este utilizador já está atribuído a essa tarefa.", + "4022": "Por favor, indica a que se deve relacionar a data do lembrete.", + "4023": "Não é possível criar um ciclo de relação de tarefas.", "6001": "O nome da equipa não pode estar vazio.", "6002": "A equipa não existe.", "6004": "A equipa tem já acesso a esse projeto.", "6005": "O utilizador é já membro dessa equipa.", "6006": "Não podes eliminar o último membro da equipa.", "6007": "A equipa não tem acesso ao projeto para executar essa ação.", - "6008": "No team could be found for the given OIDC ID and issuer.", - "6009": "No Teams with property oidcId could be found for User.", + "6008": "Não foi possível encontrar nenhuma equipa para o ID OIDC e o emissor indicados.", + "6009": "Não foi possível encontrar Equipas com propriedade OIDC ID para o Utilizador.", "7002": "O utilizador tem já acesso a esse projeto.", "7003": "Não tens acesso a esse projeto.", "8001": "Esta etiqueta já existe nessa lista.", @@ -1223,12 +1223,12 @@ "11002": "Filtros memorizados não estão disponíveis para links partilhados.", "12001": "O tipo de entidade da subscrição é inválido.", "12002": "Já estás subcrito na entidade ou numa entidade parente.", - "12003": "You must provide a user to fetch subscriptions.", + "12003": "É necessário fornecer um utilizador para consultar as subscrições.", "13001": "Este link partilhado requer uma palavra-passe para autenticação, mas nenhuma foi fornecida.", - "13002": "The provided link share password is invalid.", - "13003": "The provided link share token is invalid.", - "14001": "The provided api token is invalid.", - "14002": "The permission {permission} of group {group} is invalid." + "13002": "A palavra-passe fornecida para o link partilhado é inválida.", + "13003": "O token fornecido para o link partilhado é inválido.", + "14001": "O token de API fornecido é inválido.", + "14002": "A permissão {permission} do grupo {group} é inválida." }, "about": { "title": "Sobre", diff --git a/frontend/src/i18n/lang/tr-TR.json b/frontend/src/i18n/lang/tr-TR.json index a1da4a9a6..89dbe3611 100644 --- a/frontend/src/i18n/lang/tr-TR.json +++ b/frontend/src/i18n/lang/tr-TR.json @@ -100,7 +100,7 @@ "timezone": "Zaman dilimi", "overdueTasksRemindersTime": "Gecikmiş görevler hatırlatma e-posta zamanı", "filterUsedOnOverview": "Genel bakış sayfasında kullanılan kaydedilmiş filtre", - "minimumPriority": "Minimum visible task priority", + "minimumPriority": "Minimum görünür görev önceliği", "externalUserNameChange": "Adınız, oturum açma sağlayıcınız ({provider}) tarafından yönetiliyor. Değiştirmek için lütfen orada güncelleyin." }, "totp": { diff --git a/frontend/src/i18n/lang/vi-VN.json b/frontend/src/i18n/lang/vi-VN.json index 2f691978c..b892ed2bf 100644 --- a/frontend/src/i18n/lang/vi-VN.json +++ b/frontend/src/i18n/lang/vi-VN.json @@ -1,21 +1,21 @@ { "home": { - "welcomeNight": "Good Night {username}!", - "welcomeMorning": "Good Morning {username}!", - "welcomeDay": "Hi {username}!", - "welcomeEvening": "Good Evening {username}!", + "welcomeNight": "Chào buổi tối, {username}!", + "welcomeMorning": "Chào buổi sáng, {username}!", + "welcomeDay": "Chào, {username}!", + "welcomeEvening": "Chào buổi tối, {username}!", "lastViewed": "Xem gần đây", - "addToHomeScreen": "Add this app to your home screen for faster access and improved experience.", - "goToOverview": "Go to overview", + "addToHomeScreen": "Thêm ứng dụng vào màn hình chính để truy cập nhanh hơn với trải nghiệm tốt hơn.", + "goToOverview": "Đến phần tổng quan", "project": { - "importText": "Import your projects and tasks from other services into Vikunja:", - "import": "Import your data into Vikunja" + "importText": "Nhập các dự án và các tác vụ từ các ứng dụng khác vào Vikunja:", + "import": "Nhập dữ liệu của bạn vào Vikunja" } }, "demo": { - "title": "This instance is in demo mode. Do not use this for real data!", - "everythingWillBeDeleted": "Everything will be deleted in regular intervals!", - "accountWillBeDeleted": "Your account will be deleted, including all projects, tasks and attachments you might create." + "title": "Ví dụ này ở trong chế độ demo. Không sử dụng phần này cho dữ liệu thực!", + "everythingWillBeDeleted": "Mọi thứ sẽ được xóa theo chu kì!", + "accountWillBeDeleted": "Tài khoản của bạn sẽ bị xóa, bao gồm tất cả các dự án, tác vụ, và tệp đính kèm mà bạn đã tạo." }, "404": { "title": "Không tìm thấy gì cả", @@ -23,7 +23,7 @@ }, "ready": { "loading": "Vikunja đang tải…", - "errorOccured": "An error occurred:", + "errorOccured": "Đã có lỗi xảy ra:", "checkApiUrl": "Vui lòng kiểm tra lại url api.", "noApiUrlConfigured": "Không có url API nào được cấu hình. Hãy đặt một cái:" }, @@ -43,7 +43,7 @@ "forgotPassword": "Bạn quên mật khẩu?", "resetPassword": "Reset mật khẩu của bạn", "resetPasswordAction": "Gửi cho tôi liên kết reset mật khẩu", - "resetPasswordSuccess": "Check your inbox! You should have an email with instructions on how to reset your password.", + "resetPasswordSuccess": "Kiểm tra hộp thư của bạn! Bạn sẽ nhận được một email với chỉ dẫn đặt lại mật khẩu của mình.", "passwordsDontMatch": "Mật khẩu không trùng khớp", "confirmEmailSuccess": "Bạn đã xác nhận thành công email của mình! Bạn có thể đăng nhập ngay bây giờ.", "totpTitle": "Mã xác thực hai lớp", @@ -53,81 +53,81 @@ "loginWith": "Đăng nhập với {provider}", "authenticating": "Đang xác thực…", "openIdStateError": "Trạng thái không khớp, từ chối tiếp tục!", - "openIdGeneralError": "An error occurred while authenticating against the third party.", + "openIdGeneralError": "Đã xảy ra lỗi khi xác thực với bên thứ ba.", "logout": "Đăng xuất", "emailInvalid": "Vui lòng nhập một địa chỉ email hợp lệ.", "usernameRequired": "Vui lòng cung cấp tên người dùng.", - "usernameMustNotContainSpace": "The username must not contain spaces.", - "usernameMustNotLookLikeUrl": "The username must not look like a URL.", + "usernameMustNotContainSpace": "Tên ngườu dùng không được chứa khoảng cách.", + "usernameMustNotLookLikeUrl": "Tên người dùng không được ở dạng URL.", "passwordRequired": "Vui lòng cung cấp một mật khẩu.", - "passwordNotMin": "Password must have at least 8 characters.", - "passwordNotMax": "Password must have at most 72 characters.", + "passwordNotMin": "Mật khẩu phải có ít nhất 8 ký tự.", + "passwordNotMax": "Mật khẩu chỉ được gồm nhiều nhất 72 kí tự.", "showPassword": "Hiển thị mật khẩu", "hidePassword": "Ẩn mật khẩu", "noAccountYet": "Bạn chưa có tài khoản?", "alreadyHaveAnAccount": "Đã có tài khoản?", "remember": "Duy trì đăng nhập", - "registrationDisabled": "Registration is disabled." + "registrationDisabled": "Đăng ký bị vô hiệu hóa." }, "settings": { "title": "Cài đặt", "newPasswordTitle": "Thay đổi mật khẩu", - "newPassword": "New password", - "newPasswordConfirm": "New password confirmation", - "currentPassword": "Current password", + "newPassword": "Mật khẩu mới", + "newPasswordConfirm": "Xác nhận mật khẩu mới", + "currentPassword": "Mật khẩu hiện tại", "currentPasswordPlaceholder": "Nhập mật khẩu hiện tại của bạn", "passwordsDontMatch": "Mật khẩu mới và xác nhận của nó không khớp.", "passwordUpdateSuccess": "Mật khẩu đã được cập nhật thành công.", "updateEmailTitle": "Cập nhật địa chỉ e-mail của bạn", - "updateEmailNew": "New email address", + "updateEmailNew": "Địa chỉ email mới", "updateEmailSuccess": "Địa chỉ email của bạn đã được cập nhật thành công. Chúng tôi đã gửi cho bạn một liên kết để xác nhận nó.", "general": { "title": "Cài đặt chung", - "name": "My Name", - "newName": "The new name", + "name": "Tên của tôi", + "newName": "Tên mới", "savedSuccess": "Cài đặt đã được lưu lại.", - "emailReminders": "Send me reminders for tasks via email", - "overdueReminders": "Send me a summary of my undone overdue tasks every day", - "discoverableByName": "Allow other users to add me as a member to teams or projects when they search for my name", - "discoverableByEmail": "Allow other users to add me as a member to teams or projects when they search for my full email", + "emailReminders": "Gửi nhắc nhở tác vụ qua email", + "overdueReminders": "Gửi cho tôi một bản tổng hợp các tác vụ quá hạn chưa được hoàn thành mỗi ngày", + "discoverableByName": "Cho phép người dùng khác thêm tôi vào nhóm hoặc dự án khi họ tìm kiếm tên của tôi", + "discoverableByEmail": "Cho phép người dùng khác thêm tôi vào nhóm hoặc dự án khi họ tìm kiếm theo địa chỉ email của tôi", "playSoundWhenDone": "Phát âm thanh khi đánh dấu nhiệm vụ hoàn thành", "weekStart": "Tuần bắt đầu vào", "weekStartSunday": "Chủ nhật", "weekStartMonday": "Thứ hai", "language": "Ngôn ngữ", - "defaultProject": "Default project", - "defaultView": "Default view", - "timezone": "Time zone", - "overdueTasksRemindersTime": "Overdue tasks reminder email time", - "filterUsedOnOverview": "Saved filter used on the overview page", + "defaultProject": "Dự án mặc định", + "defaultView": "Chế độ xem mặc định", + "timezone": "Múi giờ", + "overdueTasksRemindersTime": "Thời gian gửi email lời nhắc cho các tác vụ quá hạn", + "filterUsedOnOverview": "", "minimumPriority": "Minimum visible task priority", - "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." + "externalUserNameChange": "Tên của bạn được đồng bộ qua phương thức đăng nhập bạn chọn({provider}). Để thay đổi, vui lòng cập nhật tại trang của nhà cung cấp dịch vụ." }, "totp": { "title": "Xác thực hai lớp", "enroll": "Đăng ký", - "finishSetupPart1": "To finish your setup, use this secret in your TOTP app (Google Authenticator or similar):", + "finishSetupPart1": "Để hoàn thành cài đặt, sử dụng mã bí mật này trong ứng dụng TOTP của bạn (Google Authenticator hoặc các ứng dụng tương tự):", "finishSetupPart2": "Sau đó, nhập mã từ ứng dụng của bạn bên dưới.", "scanQR": "Ngoài ra, bạn có thể quét mã QR này:", "passcode": "Mã xác thực", - "passcodePlaceholder": "A code generated by your TOTP application", - "setupSuccess": "You've successfully set up two factor authentication!", + "passcodePlaceholder": "Mã tạo bởi ứng dụng TOTP của bạn", + "setupSuccess": "Bạn đã thiết lập thành công xác thực hai lớp!", "enterPassword": "Vui lòng nhập mật khẩu", "disable": "Tắt xác thực 2 lớp", - "confirmSuccess": "You've successfully confirmed your TOTP setup and can use it from now on!", - "disableSuccess": "Two factor authentication was successfully disabled." + "confirmSuccess": "Bạn đã xác nhận thành công cài đặt TOTP và có thể sự dụng từ bây giờ!", + "disableSuccess": "Xác thực hai lớp đã bị vô hiệu hóa thành công." }, "caldav": { "title": "CalDAV", - "howTo": "You can connect Vikunja to CalDAV clients to view and manage all tasks from different clients. Enter this url into your client:", - "more": "More information about CalDAV in Vikunja", + "howTo": "Bạn có thể kết nối Vikunja tới các khách hàng trên CalDAV để xem và quản lý các tác vụ từ nhiều khách hàng khác nhau. Nhập url vào phần khách hàng:", + "more": "Tìm hiểu thêm về CalDAV trên Vikunja", "tokens": "CalDAV Tokens", - "tokensHowTo": "You can use a CalDAV token to use instead of a password to log in the above endpoint.", - "createToken": "Create a token", - "tokenCreated": "Here is your token: {token}", - "wontSeeItAgain": "Write it down, you won't be able to see it again.", - "mustUseToken": "You need to create a CalDAV token if you want to use CalDAV with a third party client. Use the token as the password.", - "usernameIs": "Your username is: {0}" + "tokensHowTo": "Bạn có thể sử dụng mã token CalDAV thay cho mật khẩu để đăng nhập ở bước vừa rồi.", + "createToken": "Tạo mã token", + "tokenCreated": "Đây là mã token của bạn: {token}", + "wontSeeItAgain": "Ghi lại, bạn sẽ không thể thấy nó thêm lần nữa.", + "mustUseToken": "Bạn cần tạo mã token CalDAV nếu như muốn sử dụng CalDAV với dịch vụ bên thứ ba. Sử dụng mã token như mật khẩu.", + "usernameIs": "Tên đăng nhập của bạn là: {0}" }, "avatar": { "title": "Avatar", @@ -138,7 +138,7 @@ "uploadAvatar": "Tải lên Avatar", "statusUpdateSuccess": "Avatar đã được cập nhật!", "setSuccess": "Avatar đã được đặt thành công!", - "ldap": "Your avatar is automagically synced from your organization's directory service (LDAP). You can ask your IT team for information on how to change it." + "ldap": "Ảnh đại diện của bạn được đồng bộ tự động từ kho dịch vụ thuộc tổ chức của bạn (LDAP). Bạn có thể truy vấn thêm thông tin từ đội ngũ IT để thực hiện thay đổi." }, "quickAddMagic": { "title": "Chế độ Quick Add Magic", @@ -156,39 +156,39 @@ } }, "apiTokens": { - "title": "API Tokens", - "general": "API tokens allow you to use Vikunja's API without user credentials.", - "apiDocs": "Check out the api docs", - "createAToken": "Create a token", - "createToken": "Create token", - "30d": "30 Days", - "60d": "60 Days", - "90d": "90 Days", - "permissionExplanation": "Permissions allow you to scope what an api token is allowed to do.", - "titleRequired": "The title is required", - "permissionRequired": "Please select at least one permission from the list.", - "expired": "This token has expired {ago}.", - "tokenCreatedSuccess": "Here is your new api token: {token}", - "tokenCreatedNotSeeAgain": "Store it in a secure location, you won't see it again!", - "selectAll": "Select all", + "title": "", + "general": "API tokens cho phép bạn sử dụng API của Vikunja mà không cần user credentials.", + "apiDocs": "Xem Api docs", + "createAToken": "Tạo mã token", + "createToken": "Tạo token", + "30d": "30 Ngày", + "60d": "60 Ngày", + "90d": "90 Ngày", + "permissionExplanation": "Quyền cho phép bạn giới hạn công việc mà một api token được phép làm.", + "titleRequired": "Tiêu đề là bắt buộc", + "permissionRequired": "Chọn ít nhất một quyền từ danh sách.", + "expired": "Token này đã hết hạn {ago}.", + "tokenCreatedSuccess": "Đây là mã api token mới của bạn: {token}", + "tokenCreatedNotSeeAgain": "Hãy lưu trữ token tại nơi bảo mật, bạn sẽ không thể xem lại token!", + "selectAll": "Chọn tất cả", "delete": { - "header": "Delete this token", - "text1": "Are you sure you want to delete the token \"{token}\"?", - "text2": "This will revoke access to all applications or integrations using it. You cannot undo this." + "header": "Xóa token này", + "text1": "Bạn có chắc muốn xóa cột token \"{token}\"?", + "text2": "Điều này sẽ ngăn chặn mọi truy cập tới tất cả các ứng dụng hay các tích hợp có sử dụng mã này. Bạn sẽ không thể hoàn tác." }, "attributes": { - "title": "Title", - "titlePlaceholder": "Enter a title you will recognize later", - "expiresAt": "Expires at", - "permissions": "Permissions" + "title": "Tiêu đề", + "titlePlaceholder": "Đặt tiêu đề để bạn có thể nhận biết mã sau này", + "expiresAt": "Hết hạn lúc", + "permissions": "Quyền" } } }, "deletion": { "title": "Xóa tài khoản của bạn", - "text1": "The deletion of your account is permanent and cannot be undone. We will delete all your projects, tasks and everything associated with it.", + "text1": "Việc xóa tài khoản của bạn là vĩnh viễn và không thể hoàn tác. Chúng tôi sẽ xóa tất cả các dự án, tác vụ và mọi thứ liên quan.", "text2": "Để tiếp tục, vui lòng nhập mật khẩu của bạn. Bạn sẽ nhận được một email hướng dẫn thêm.", - "text3": "To proceed, please press the button below. You will receive an email with further instructions.", + "text3": "Để tiếp tục, vui lòng nhấn nút bên dưới. Bạn sẽ nhận được một email hướng dẫn các bước tiếp theo.", "confirm": "Xóa tài khoản của tôi", "requestSuccess": "Yêu cầu đã thành công. Bạn sẽ nhận được một email hướng dẫn thêm.", "passwordRequired": "Vui lòng nhập mật khẩu.", @@ -196,13 +196,13 @@ "scheduled": "Chúng tôi sẽ xóa tài khoản của bạn vào {date} ({dateSince}).", "scheduledCancel": "Để hủy việc xóa tài khoản của bạn, hãy nhấp vào đây.", "scheduledCancelText": "Để hủy việc xóa tài khoản, vui lòng nhập mật khẩu của bạn vào ô bên dưới:", - "scheduledCancelButton": "To cancel the deletion of your account, please press the button below:", + "scheduledCancelButton": "Để hủy việc xóa tài khoản, vui lòng nhấn nút bên dưới:", "scheduledCancelConfirm": "Hủy lệnh xóa tài khoản", "scheduledCancelSuccess": "Chúng tôi sẽ không xóa tài khoản của bạn nữa." }, "export": { "title": "Xuất dữ liệu Vikunja của bạn", - "description": "You can request a copy of all your Vikunja data. This includes Projects, Tasks and everything associated to them. You can import this data in any Vikunja instance through the migration function.", + "description": "Bạn có thể yêu cầu một bản sao tất cả dữ liệu Vikunja của mình. Điều này bao gồm Dự Án, Tác vụ và mọi thứ liên quan. Bạn có thể nhập dữ liệu này vào bất kỳ phiên bản Vikunja nào thông qua chức năng chuyển.", "descriptionPasswordRequired": "Vui lòng nhập mật khẩu của bạn để tiếp tục:", "request": "Yêu cầu một bản sao Dữ liệu Vikunja của tôi", "success": "Bạn đã yêu cầu dữ liệu Vikunja của mình thành công! Chúng tôi sẽ gửi cho bạn một email sau khi nó sẵn sàng để tải xuống.", @@ -210,221 +210,221 @@ } }, "project": { - "archivedMessage": "This project is archived. It is not possible to create new or edit tasks for it.", - "archived": "Archived", - "showArchived": "Show Archived", - "title": "Title", - "color": "Color", - "projects": "Projects", - "parent": "Parent Project", - "search": "Type to search for a project…", - "searchSelect": "Click or press enter to select this project", - "shared": "Shared Projects", - "noDescriptionAvailable": "No project description is available.", - "inboxTitle": "Inbox", - "favorite": "Mark this project as favorite", - "unfavorite": "Remove this project from favorites", - "openSettingsMenu": "Open project settings menu", - "description": "Project description", + "archivedMessage": "Dự án này đã được lưu trữ. Không thể tạo mới hoặc chỉnh sửa tác vụ bên trong.", + "archived": "Đã lưu trữ", + "showArchived": "Hiển thị mục lưu trữ", + "title": "Tiêu đề", + "color": "Màu sắc", + "projects": "Dự án", + "parent": "Dự án tổng", + "search": "Gõ để tìm kiếm dự án…", + "searchSelect": "Nhấp hoặc nhấn enter để chọn dự án này", + "shared": "Dự án được chia sẻ", + "noDescriptionAvailable": "Không có sẵn mô tả về dự án.", + "inboxTitle": "Hộp thư đến", + "favorite": "Đánh dấu là dự án yêu thích", + "unfavorite": "Gỡ dự án này khỏi mục yêu thích", + "openSettingsMenu": "Cài đặt dự án", + "description": "Mô tả dự án", "create": { - "header": "New project", - "titlePlaceholder": "The project's title goes here…", - "addTitleRequired": "Please specify a title.", - "createdSuccess": "The project was successfully created.", - "addProjectRequired": "Please specify a project or set a default project in the settings." + "header": "Dự án mới", + "titlePlaceholder": "Tên dự án nằm ở đây…", + "addTitleRequired": "Hãy đặt một tiêu đề.", + "createdSuccess": "Dự án được tạo thành công.", + "addProjectRequired": "Vui lòng chỉ định một dự án hoặc cài đặt dự án mặc định trong phần cài đặt." }, "archive": { - "title": "Archive \"{project}\"", - "archive": "Archive this project", - "unarchive": "Un-Archive this project", - "unarchiveText": "You will be able to create tasks or edit it.", - "archiveText": "You won't be able to edit this project or create tasks until you un-archive it.", - "success": "The project was successfully archived." + "title": "Lưu trữ \"{project}\"", + "archive": "Lưu trữ dự án này", + "unarchive": "Bỏ lưu trữ dự án này", + "unarchiveText": "Bạn có thể tạo các tác vụ và chỉnh sửa chúng.", + "archiveText": "Bạn sẽ không thể chỉnh sửa dự án này hay tạo các tác vụ mới cho đến khi bạn bỏ lưu trữ dự án.", + "success": "Dự án đã được lưu trữ." }, "background": { - "title": "Set project background", - "remove": "Remove Background", - "upload": "Choose a background from your pc", - "searchPlaceholder": "Search for a background…", - "poweredByUnsplash": "Powered by Unsplash", - "loadMore": "Load more photos", - "success": "The background has been set successfully!", - "removeSuccess": "The background has been removed successfully!" + "title": "Cài đặt ảnh nền dự án", + "remove": "Gỡ hình nền", + "upload": "Chọn hình nền từ máy tính", + "searchPlaceholder": "Tìm kiếm hình nền…", + "poweredByUnsplash": "Cung cấp bởi Unsplash", + "loadMore": "Tải thêm ảnh", + "success": "Hình nền được cài đặt thành công!", + "removeSuccess": "Hình nền đã được gỡ bỏ!" }, "delete": { - "title": "Delete \"{project}\"", - "header": "Delete this project", - "text1": "Are you sure you want to delete this project and all of its contents?", - "text2": "This includes all tasks and CANNOT BE UNDONE!", - "success": "The project was successfully deleted.", - "tasksToDelete": "This will irrevocably remove approx. {count} tasks.", - "tasksAndChildProjectsToDelete": "This will irrevocably remove approx. {tasks} tasks and {projects} projects.", - "noTasksToDelete": "This project does not contain any tasks, it should be safe to delete." + "title": "Xóa \"{project}\"", + "header": "Xóa dự án này", + "text1": "Bạn có chắc muốn xóa dự án này cùng toàn bộ nội dung của dự án?", + "text2": "Điều này bao gồm tất cả các đầu việc và KHÔNG THỂ HOÀN TÁC!", + "success": "Dự án đã được xóa.", + "tasksToDelete": "Điều này sẽ ngay lập tức gỡ bảo khoảng {count} đầu việc.", + "tasksAndChildProjectsToDelete": "Điều này sẽ ngay lập tức gỡ bỏ khoảng {tasks} đầu việc và {projects} dự án.", + "noTasksToDelete": "Dự án này không bao gồm bất kì đầu việc nào, bạn có thể xóa nó." }, "duplicate": { - "title": "Duplicate this project", - "label": "Duplicate", - "text": "Select a parent project which should hold the duplicated project:", - "success": "The project was successfully duplicated." + "title": "Tạo bản sao dự án này", + "label": "Tạo bản sao", + "text": "Chọn một dự án mẹ để quản lý dự án được sao chép:", + "success": "Dự án được nhân bản thành công." }, "edit": { - "header": "Edit This Project", - "title": "Edit \"{project}\"", - "titlePlaceholder": "The project title goes here…", - "identifierTooltip": "The project identifier can be used to uniquely identify a task across projects. You can set it to empty to disable it.", - "identifier": "Project Identifier", - "identifierPlaceholder": "The project identifier goes here…", - "description": "Description", - "descriptionPlaceholder": "Enter a description for this project, hit '/' for more options…", - "color": "Color", - "success": "The project was successfully updated." + "header": "Chỉnh sửa dự án", + "title": "Chỉnh sửa \"{project}\"", + "titlePlaceholder": "Tên dự án nằm ở đây…", + "identifierTooltip": "Mã dự án có thể được sử dụng để xác định cụ thể các đầu công việc giữa các dự án với nhau. Bạn có thể để trống nếu không sử dụng.", + "identifier": "Mã dự án", + "identifierPlaceholder": "Mã dự án nằm ở đây…", + "description": "Mô tả", + "descriptionPlaceholder": "Viết mô tả cho dự án này, gõ '/' để hiển thị các lựa chọn…", + "color": "Màu sắc", + "success": "Dự án được cập nhật thành công." }, "share": { - "header": "Share this project", - "title": "Share \"{project}\"", - "share": "Share", + "header": "Chia sẻ dự án", + "title": "Chia sẻ \"{project}\"", + "share": "Chia sẻ", "links": { - "title": "Share Links", - "what": "What is a share link?", - "explanation": "Share Links allow you to easily share a project with other users who don't have an account on Vikunja.", - "create": "Create a link share", - "name": "Name (optional)", - "namePlaceholder": "e.g. Lorem Ipsum", - "nameExplanation": "All actions done by this link share will show up with the name.", - "password": "Password (optional)", - "passwordExplanation": "When signing in, the user will be required to enter this password.", - "noName": "No name set", - "remove": "Remove a link share", - "removeText": "Are you sure you want to remove this link share? It will no longer be possible to access this project with this link share. This cannot be undone!", - "createSuccess": "The link share was successfully created.", - "deleteSuccess": "The link share was successfully deleted", - "view": "View", - "sharedBy": "Shared by {0}" + "title": "Liên kết chia sẻ", + "what": "Một liên kết chia sẻ là gì?", + "explanation": "Liên kết chia sẻ cho phép bạn dễ dàng chia sẻ dự án với những người dùng không có tài khoản trên Vikunjia.", + "create": "Tạo một liên kết chia sẻ", + "name": "Tên (tùy chọn)", + "namePlaceholder": "ví dụ: Nguyễn Minh Hùng", + "nameExplanation": "Tất cả các hành động được thực hiện trên liên kết chia sẻ này sẽ hiển thị cùng với tên.", + "password": "Mật khẩu (tùy chọn)", + "passwordExplanation": "Khi đăng nhập, người dùng sẽ được yêu cầu nhập mật khẩu này.", + "noName": "Không có tên", + "remove": "Gỡ liên kết chia sẻ", + "removeText": "Bạn có chắc muốn gỡ liên kết chia sẻ này? Những người khác sẽ không thể truy cập tới dự án thông qua liên kết chia sẻ này nữa. Điều này không thể hoàn tác!", + "createSuccess": "Liên kết chia sẻ đã được tạo thành công.", + "deleteSuccess": "Liên kết chia sẻ đã được xóa bỏ", + "view": "Xem", + "sharedBy": "Được chia sẻ bởi {0}" }, "userTeam": { - "typeUser": "user | users", - "typeTeam": "team | teams", - "shared": "Shared with these {type}", - "you": "You", - "notShared": "Not shared with any {type} yet.", - "removeHeader": "Remove a {type} from the {sharable}", - "removeText": "Are you sure you want to remove this {sharable} from the {type}? This cannot be undone!", - "removeSuccess": "The {sharable} was successfully removed from the {type}.", - "addedSuccess": "The {type} was successfully added.", - "updatedSuccess": "The {type} was successfully added." + "typeUser": "người dùng | nhiều người dùng", + "typeTeam": "team | các team", + "shared": "Được chia sẻ với {type}", + "you": "Bạn", + "notShared": "Chưa được chia sẻ với bất kì {type} nào khác.", + "removeHeader": "Xóa {type} khỏi {sharable}", + "removeText": "Bạn có chắc chắn muốn xóa {sharable} này khỏi {type} không? Hành động này không thể hoàn tác!", + "removeSuccess": "{sharable} đã được xóa khỏi {type}.", + "addedSuccess": "{type} đã được thêm thành công.", + "updatedSuccess": "{type} đã được thêm thành công." }, "right": { - "title": "Permission", - "read": "Read only", - "readWrite": "Read & write", - "admin": "Admin" + "title": "Quyền", + "read": "Chỉ đọc", + "readWrite": "Đọc & ghi", + "admin": "Quản trị viên" }, "attributes": { - "link": "Link", - "delete": "Delete" + "link": "Liên kết", + "delete": "Xóa" } }, "first": { - "title": "First View" + "title": "Trang đầu" }, "list": { - "title": "List", - "add": "Add", - "addPlaceholder": "Add a task…", - "empty": "This project is currently empty.", - "newTaskCta": "Create a task.", - "editTask": "Edit Task" + "title": "Danh sách", + "add": "Thêm", + "addPlaceholder": "Thêm đầu việc…", + "empty": "Dự án này hiện đang trống.", + "newTaskCta": "Tạo đầu việc.", + "editTask": "Chỉnh sửa đầu việc" }, "gantt": { - "title": "Gantt", - "size": "Size", - "default": "Default", - "month": "Month", - "day": "Day", - "hour": "Hour", - "range": "Date Range", - "noDates": "This task has no dates set." + "title": "Biểu đồ Gantt", + "size": "Kích thước", + "default": "Mặc định", + "month": "Tháng", + "day": "Ngày", + "hour": "Giờ", + "range": "Khoảng thời gian", + "noDates": "Đầu việc này không có thiết lập ngày." }, "table": { - "title": "Table", - "columns": "Columns" + "title": "Bảng", + "columns": "Cột" }, "kanban": { "title": "Kanban", - "limit": "Limit: {limit}", - "noLimit": "Not Set", - "doneBucket": "Done bucket", - "doneBucketHint": "All tasks moved into this bucket will automatically marked as done.", - "doneBucketHintExtended": "All tasks moved into the done bucket will be marked as done automatically. All tasks marked as done from elsewhere will be moved as well.", - "doneBucketSavedSuccess": "The done bucket has been saved successfully.", - "defaultBucket": "Default bucket", - "defaultBucketHint": "When creating tasks without specifying a bucket, they will be added to this bucket.", - "defaultBucketSavedSuccess": "The default bucket has been saved successfully.", - "deleteLast": "You cannot remove the last bucket.", - "addTaskPlaceholder": "Enter the new task title…", - "addTask": "Add a task", - "addAnotherTask": "Add another task", - "addBucket": "Create a bucket", - "addBucketPlaceholder": "Enter the new bucket title…", - "deleteHeaderBucket": "Delete the bucket", - "deleteBucketText1": "Are you sure you want to delete this bucket?", - "deleteBucketText2": "This will not delete any tasks but move them into the default bucket.", - "deleteBucketSuccess": "The bucket has been deleted successfully.", - "bucketTitleSavedSuccess": "The bucket title has been saved successfully.", - "bucketLimitSavedSuccess": "The bucket limit been saved successfully.", - "collapse": "Collapse this bucket", - "bucketLimitReached": "You have reached the bucket limit. Remove tasks or increase the limit to add new tasks." + "limit": "Giới hạn: {limit}", + "noLimit": "Không giới hạn", + "doneBucket": "Cột hoàn thành", + "doneBucketHint": "Tất cả các tác vụ được chuyển đến cột này sẽ được tự động đánh dấu là hoàn thành.", + "doneBucketHintExtended": "Tất cả các tác vụ được đưa đến cột hoàn thành sẽ được tự động đánh dấu là hoàn thành. Tất cả các tác vụ hoàn thành từ các phần khác cũng sẽ được chuyển tới đây.", + "doneBucketSavedSuccess": "Cột hoàn hành đã được lưu thành công.", + "defaultBucket": "Cột mặc định", + "defaultBucketHint": "Khi tạo tác vụ mới mà không xác định cột, các tác vụ sẽ được thêm ở cột này.", + "defaultBucketSavedSuccess": "Cột mặc định đã được lưu thành công.", + "deleteLast": "Bạn không thể gỡ bỏ cột cuối cùng.", + "addTaskPlaceholder": "Nhập tên tác vụ mới…", + "addTask": "Thêm một tác vụ", + "addAnotherTask": "Thêm tác vụ khác", + "addBucket": "Tạo một cột", + "addBucketPlaceholder": "Nhập tên cột mới…", + "deleteHeaderBucket": "Xóa cột", + "deleteBucketText1": "Bạn có chắc muốn xóa cột này?", + "deleteBucketText2": "Điều này sẽ không xóa bất kì đầu việc nào nhưng sẽ chuyển các đầu việc tới phần mặc định.", + "deleteBucketSuccess": "Cột đã được xóa thành công.", + "bucketTitleSavedSuccess": "Tên cột đã được lưu thành công.", + "bucketLimitSavedSuccess": "Giới hạn cột đã được lưu thành công.", + "collapse": "Thu gọn cột này", + "bucketLimitReached": "Bạn đã dùng hết số lượng cột cho phép. Vui lòng xóa bớt tác vụ hoặc tăng giới hạn để thêm tác vụ mới." }, "pseudo": { "favorites": { - "title": "Favorites" + "title": "Yêu thích" } }, "webhooks": { "title": "Webhooks", - "targetUrl": "Target URL", - "targetUrlInvalid": "Please provide a valid URL.", - "events": "Events", - "eventsHint": "Select all events this webhook should recieve updates for (within the current project).", - "mustSelectEvents": "You must select at least one event.", - "delete": "Delete this webhook", - "deleteText": "Are you sure you want to delete this webhook? External targets will not be notified of its events anymore.", - "deleteSuccess": "The webhook was successfully deleted.", - "create": "Create webhook", - "secret": "Secret", - "secretHint": "If provided, all requests to the webhook target URL will be signed using HMAC.", - "secretDocs": "Check out the docs for more details about how to use secrets." + "targetUrl": "URL đích", + "targetUrlInvalid": "Cung cấp một URL hợp lệ.", + "events": "Sự kiện", + "eventsHint": "Chon tất cả các sự kiện mà webhook này sẽ nhận cập nhật (trong phạm vi dự án hiện tại).", + "mustSelectEvents": "Bạn cần chọn ít nhất một sự kiện.", + "delete": "Xóa webhook này", + "deleteText": "Bạn có chắc muốn xóa webhook này? Các bên khác sẽ không thể nhận thông báo về các sự kiện được nữa.", + "deleteSuccess": "Webhook đã được xóa thành công.", + "create": "Tạo webhook", + "secret": "Bí mật", + "secretHint": "Nếu được cho phép, tất cả các yêu cầu tới URL đích của webhook sẽ được đăng kí bởi HMAC.", + "secretDocs": "Xem tài liệu chi tiết về cách sử dụng mã bí mật." }, "views": { - "header": "Edit views", - "title": "Title", - "actions": "Actions", - "kind": "Kind", - "bucketConfigMode": "Bucket configuration mode", - "bucketConfig": "Bucket configuration", - "bucketConfigManual": "Manual", - "filter": "Filter", - "create": "Create view", - "createSuccess": "The view was created successfully.", - "titleRequired": "Please provide a title.", - "delete": "Delete this view", - "deleteText": "Are you sure you want to remove this view? It will no longer be possible to use it to view tasks in this project. This action won't delete any tasks. This cannot be undone!", - "deleteSuccess": "The view was deleted successfully.", - "onlyAdminsCanEdit": "Only project admins can edit views.", - "updateSuccess": "The view was updated successfully." + "header": "Chỉnh sửa chế độ xem", + "title": "Tiêu đề", + "actions": "Hành động", + "kind": "Loại", + "bucketConfigMode": "Chế độ cài đặt cột", + "bucketConfig": "Cài đặt cột", + "bucketConfigManual": "Thủ công", + "filter": "Bộ lọc", + "create": "Tạo chế độ xem", + "createSuccess": "Chế độ xem được tạo thành công.", + "titleRequired": "Vui lòng cung cấp tiêu đề.", + "delete": "Xóa chế độ xem này", + "deleteText": "Bạn có chắc muốn xóa chế độ xem này? Sẽ không thể dùng chế độ xem này để xem tác vụ trong dự án được nữa. Hành động này sẽ không xóa các tác vụ. Không thể hoàn tác!", + "deleteSuccess": "Chế độ xem được xóa thành công.", + "onlyAdminsCanEdit": "Chỉ các quản trị viên của dự án có thể chỉnh sửa chế độ xem.", + "updateSuccess": "Chế độ xem được cập nhật thành công." } }, "filters": { "title": "Bộ lọc", "clear": "Xoá các bộ lọc", - "showResults": "Show results", - "fromView": "The current view has a filter set as well:", + "showResults": "Hiện Kết quả", + "fromView": "Chế độ xem hiện tại cũng đang được áp dụng bộ lọc:", "fromViewBoth": "It will be used in combination with what you enter here.", "attributes": { "title": "Tiêu đề", "titlePlaceholder": "Tiêu đề bộ lọc đã lưu ở đây…", "description": "Mô tả", - "descriptionPlaceholder": "Add a description for this filter here, hit '/' for more options…", + "descriptionPlaceholder": "Viết mô tả cho bộ lọc này ở đây, gõ '/' để hiển thị các lựa chọn…", "includeNulls": "Bao gồm các Công việc không có bộ giá trị", "requireAll": "Yêu cầu tất cả các bộ lọc phải đúng để một công việc được hiển thị", "showDoneTasks": "Hiển thị các công việc đã hoàn thành", @@ -438,9 +438,9 @@ }, "create": { "title": "Bộ lọc đã lưu mới", - "description": "A saved filter is a virtual project which is computed from a set of filters each time it is accessed.", - "action": "Create saved filter", - "titleRequired": "Please provide a title for the filter." + "description": "Một bộ lọc được lưu là một dự án ảo tạo từ một nhóm các bộ lọc tại mỗi lần được truy cập.", + "action": "Tạo bộ lọc sẵn", + "titleRequired": "Tạo tên cho bộ lọc." }, "delete": { "header": "Xóa bộ lọc sẵn này", @@ -452,58 +452,58 @@ "success": "Bộ lọc đã được lưu thành công." }, "query": { - "title": "Query", - "placeholder": "Type a search or filter query…", + "title": "Truy vấn", + "placeholder": "Nhập tìm kiếm hoặc truy vấn bộ lọc…", "help": { - "intro": "To filter tasks, you can use a query syntax similar to SQL. The available fields for filtering include:", - "link": "How does this work?", - "canUseDatemath": "You can use date math to set relative dates. Click on the date value in a query to find out more.", + "intro": "Để lọc tác vụ, bạn có thể sử dụng các cú pháp truy vấn tương tự như SQL. Các trường có sẵn trong bộ lọc bao gồm:", + "link": "Cách thức hoạt động?", + "canUseDatemath": "Bạn có thể sử dụng phép tính ngày để cài đặt một ngày liên quan. Nhấp vào giá trị ngày trong truy vấn để tìm hiểu thêm.", "fields": { - "done": "Whether the task is completed or not", - "priority": "The priority level of the task (1-5)", - "percentDone": "The percentage of completion for the task (0-100)", - "dueDate": "The due date of the task", - "startDate": "The start date of the task", - "endDate": "The end date of the task", - "doneAt": "The date and time when the task was completed", - "assignees": "The assignees of the task", - "labels": "The labels associated with the task", - "project": "The project the task belongs to (only available for saved filters, not on a project level)", - "reminders": "The reminders of the task as a date field, will return all tasks with at least one reminder matching the query", - "created": "The time and date when the task was created", - "updated": "The time and date when the task was last changed" + "done": "Bất kể tác vụ được hoàn thành hay chưa", + "priority": "Mức độ ưu tiên của tác vụ (1-5)", + "percentDone": "Tỉ lệ hoàn thành tác vụ (0-100)", + "dueDate": "Ngày đến hạn của tác vụ", + "startDate": "Ngày bắt đầu của tác vụ", + "endDate": "Ngày kết thúc của tác vụ", + "doneAt": "Ngày giờ khi tác vụ được hoàn thành", + "assignees": "Người phụ trách tác vụ", + "labels": "Các nhãn đính kèm tác vụ", + "project": "Dự án mà tác vụ thuốc về (chỉ áo dụng cho bộ lọc sẵn, không có sẵn trên cấp độ dự án)", + "reminders": "Các nhắc nhở của dự án giá trị ngày, sẽ trả ra các tác vụ có ít nhất một nhắc nhở khớp với truy vấn", + "created": "Ngày giờ khi tác vụ được tạo", + "updated": "Ngày giờ khi tác vụ được thay đổi lần cuối" }, "operators": { - "intro": "The available operators for filtering include:", - "notEqual": "Not equal to", - "equal": "Equal to", - "greaterThan": "Greater than", - "greaterThanOrEqual": "Greater than or equal to", - "lessThan": "Less than", - "lessThanOrEqual": "Less than or equal to", - "like": "Matches a pattern (using wildcard %)", - "in": "Matches any value in a comma-seperated list of values", - "notIn": "Matches any value not present in a comma-seperated list of values" + "intro": "Các toán tử sẵn có bao gồm:", + "notEqual": "Không bằng với", + "equal": "Bằng với", + "greaterThan": "Lớn hơn", + "greaterThanOrEqual": "Lớn hơn hoặc bằng", + "lessThan": "Nhỏ hơn", + "lessThanOrEqual": "Nhỏ hơn hoặc bằng", + "like": "Khớp với một kí tự (sử dụng kí tự %)", + "in": "Khớp với bất kì giá trị nào trong danh sách các gía trị được phân cách bởi dấu phẩy", + "notIn": "Khớp với bất kì giá trị nào không có trong danh sách các giá trị được phân cách bởi dấu phẩy" }, "logicalOperators": { - "intro": "To combine multiple conditions, you can use the following logical operators:", - "and": "AND operator, matches if all conditions are true", - "or": "OR operator, matches if any of the conditions are true", - "parentheses": "Parentheses for grouping conditions" + "intro": "Để kết hợp nhiều điều kiện, bạn có thể sử dụng các chức năng lọc luận lý:", + "and": "AND, khớp nếu tất cả các điều kiện được đáp ứng", + "or": "OR, khớp nếu bất kì điều kiện nào được đáp ứng", + "parentheses": "Dấu ngoặc đơn để nhóm các điều kiện" }, "examples": { - "intro": "Here are some examples of filter queries:", - "priorityEqual": "Matches tasks with priority level 4", - "dueDatePast": "Matches tasks with a due date in the past", - "undoneHighPriority": "Matches undone tasks with priority level 3 or higher", - "assigneesIn": "Matches tasks assigned to either \"user1\" or \"user2\"", - "priorityOneOrTwoPastDue": "Matches tasks with priority level 1 or 2 and a due date in the past" + "intro": "Đây là một số số ví dụ về các truy vấn lọc:", + "priorityEqual": "Khớp với các tác vụ có độ ưu tiên là 4", + "dueDatePast": "Khớp với các tác vụ có ngày đến hạn trong quá khứ", + "undoneHighPriority": "Khớp với các tác vụ chưa hoàn thành có độ ưu tiên là 3 hoặc cao hơn", + "assigneesIn": "Khớp với các tác vụ được giao cho \"user1\" hoặc \"user2\"", + "priorityOneOrTwoPastDue": "Khớp với các tác vụ có độ ưu tiên là 1 hoặc 2 và ngày đến hạn trong quá khứ" } } } }, "migrate": { - "title": "Import from other services", + "title": "Nhập từ các thiết bị khác", "titleService": "Nhập dữ liệu của bạn từ {name} vào Vikunja", "import": "Nhập dữ liệu của bạn vào Vikunja", "description": "Nhấp vào Logo của một trong các dịch vụ bên dưới để bắt đầu.", @@ -516,24 +516,24 @@ "confirm": "Tôi chắc như đinh, hãy bắt đầu di chuyển thôi!", "importUpload": "Để nhập dữ liệu từ {name} vào Vikunja, hãy nhấp vào nút bên dưới để chọn tệp.", "upload": "Tải tệp lên", - "migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.", - "migrationInProgress": "A migration is currently in progress. Please wait until it is done." + "migrationStartedWillReciveEmail": "Vikuja hiện giờ sẽ nhập các danh sách/ dự án, tác vụ, ghi chú, nhắc nhở và thư mục của bạn từ {service}. Vì điều này có thể mất một khoảng thời gian, chúng tôi sẽ gửi một email tới bạn khi quá trình hoàn thành. Bạn hiện tại có thể đóng cửa sổ này.", + "migrationInProgress": "Quá trình nhập đang diễn ra. Vui lòng đợi đến khi hoàn thành." }, "label": { "title": "Nhãn", "manage": "Quản lý nhãn", - "description": "Click on a label to edit it. You can edit all labels you created, you can use all labels which are associated with a task to whose project you have access.", + "description": "Bấm vào một nhãn để chỉnh sửa. Bạn có thể chỉnh sửa các nhãn do bạn tạo, bạn có thể sử dụng tất cả các nhãn liên kết với tác vụ thuộc về dự án mà bạn có quyền truy cập.", "newCTA": "Bạn không có nhãn nào cả.", "search": "Gõ để tìm kiếm nhãn…", "create": { "header": "Nhãn mới", - "title": "Create a label", + "title": "Tạo một mới", "titleRequired": "Hãy đặt một tiêu đề.", "success": "Nhãn đã được tạo thành công." }, "edit": { "header": "Chỉnh sửa nhãn", - "forbidden": "You are not allowed to edit this label because you don't own it.", + "forbidden": "Bạn không có quyền được sửa nhãn này do bạn không sở hữu nó.", "success": "Nhãn được cập nhật thành công." }, "deleteSuccess": "Nhãn đã được xóa thành công.", @@ -547,8 +547,8 @@ }, "sharing": { "authenticating": "Đang xác thực…", - "passwordRequired": "This shared project requires a password. Please enter it below:", - "error": "An error occurred.", + "passwordRequired": "Dự án được chia sẻ này yêu cầu mật khẩu. Vui lòng nhập mật khẩu bên dưới:", + "error": "Đã có lỗi xảy ra.", "invalidPassword": "Mật khẩu không hợp lệ." }, "navigation": { @@ -567,7 +567,7 @@ "refresh": "Làm mới", "disable": "Vô hiệu hóa", "copy": "Sao chép vào khay nhớ tạm", - "copyError": "Copy to clipboard failed", + "copyError": "Sao chép vào bảng ghi tạm không thành công", "search": "Tìm Kiếm", "searchPlaceholder": "Gõ để tìm kiếm…", "previous": "Trước đó", @@ -587,11 +587,11 @@ "welcomeBack": "Mừng quá! Bạn trở lại rồi.", "custom": "Tuỳ chỉnh", "id": "ID", - "created": "Created at", - "createdBy": "Created by {0}", - "actions": "Actions", - "cannotBeUndone": "This cannot be undone!", - "avatarOfUser": "{user}'s profile image" + "created": "Đã tạo lúc", + "createdBy": "Được tạo bởi {0}", + "actions": "Thao tác", + "cannotBeUndone": "Việc này không thể hoàn tác!", + "avatarOfUser": "ảnh hồ sơ của {user}" }, "input": { "resetColor": "Đặt lại màu", @@ -608,69 +608,69 @@ "edit": "Chỉnh sửa", "done": "Hoàn thành", "heading1": "Tiêu đề 1", - "heading1Tooltip": "Big section heading.", + "heading1Tooltip": "Đề mục lớn.", "heading2": "Tiêu đề 2", - "heading2Tooltip": "Medium section heading.", + "heading2Tooltip": "Đề mục trung.", "heading3": "Tiêu đề 3", - "heading3Tooltip": "Smaller section header.", + "heading3Tooltip": "Đề mục nhỏ.", "headingSmaller": "Tiêu đề nhỏ hơn", "headingBigger": "Tiêu đề lớn hơn", "bold": "In đậm", "italic": "In nghiêng", "strikethrough": "Gạch ngang", - "underline": "Underline", + "underline": "Gạch dưới", "code": "Code", - "codeTooltip": "Capture a code snippet.", + "codeTooltip": "Chụp lại các mẫu code snippet.", "quote": "Trích dẫn", - "quoteTooltip": "Capture a quote.", - "bulletList": "Bullet list", - "bulletListTooltip": "Create a simple bullet list.", - "unorderedList": "Unordered list", - "orderedList": "Ordered list", - "orderedListTooltip": "Create a list with numbering.", + "quoteTooltip": "Chụp lại trích dẫn.", + "bulletList": "Danh sách gạch đầu dòng", + "bulletListTooltip": "Tạo một danh sách gạch đầu dòng đơn giản.", + "unorderedList": "Danh sách không được xắp xếp", + "orderedList": "Danh sách được xắp xếp", + "orderedListTooltip": "Tạo một danh sách được đánh số.", "cleanBlock": "Làm sạch Khối", "link": "Liên kết", "image": "Ảnh", - "imageTooltip": "Upload an image from your computer.", + "imageTooltip": "Tải một hình ảnh từ máy tính của bạn.", "horizontalRule": "Dòng kẻ ngang", - "horizontalRuleTooltip": "Divide a section.", + "horizontalRuleTooltip": "Chia nhỏ một phần.", "sideBySide": "Chia đôi cửa sổ", "guide": "Hướng dẫn", - "text": "Text", - "textTooltip": "Just start typing with plain text.", - "taskList": "Task list", - "taskListTooltip": "Track tasks with a to-do list.", - "undo": "Undo", - "redo": "Redo", - "placeholder": "Type some text or hit '/' to see more options…", + "text": "Văn bản", + "textTooltip": "Bắt đầu nhập với văn bản thuần.", + "taskList": "Danh sách tác vụ", + "taskListTooltip": "Theo dõi tác vụ với danh sách việc cần làm.", + "undo": "Hoàn tác", + "redo": "Làm lại", + "placeholder": "Gõ một vài chữ hoặc gõ '/' để hiển thị thêm lựa chọn…", "table": { - "title": "Table", - "insert": "Insert table", - "addColumnBefore": "Add column before", - "addColumnAfter": "Add column after", - "deleteColumn": "Delete column", - "addRowBefore": "Add row before", - "addRowAfter": "Add row after", - "deleteRow": "Delete row", - "deleteTable": "Delete table", - "mergeCells": "Merge cells", - "splitCell": "Split cell", - "toggleHeaderColumn": "Toggle header column", - "toggleHeaderRow": "Toggle header row", - "toggleHeaderCell": "Toggle header cell", - "mergeOrSplit": "Merge or split", - "fixTables": "Fix tables" + "title": "Bảng", + "insert": "Chèn bảng", + "addColumnBefore": "Thêm cột phía trước", + "addColumnAfter": "Thêm cột phía sau", + "deleteColumn": "Xóa cột", + "addRowBefore": "Thêm hàng bên trên", + "addRowAfter": "Thêm hàng bên dưới", + "deleteRow": "Xóa hàng", + "deleteTable": "Xóa bảng", + "mergeCells": "Hợp ô", + "splitCell": "Chia ô", + "toggleHeaderColumn": "Mở rộng tiêu đề cột", + "toggleHeaderRow": "Mở rộng tiêu đề hàng", + "toggleHeaderCell": "Mở rộng tiêu đề ô", + "mergeOrSplit": "Nhập hoặc tách", + "fixTables": "Sửa bảng" } }, "multiselect": { - "createPlaceholder": "Create", + "createPlaceholder": "Tạo", "selectPlaceholder": "Nhấp hoặc nhấn enter để chọn" }, "datepickerRange": { "to": "Đến", "from": "Từ", "fromto": "{from} đến {to}", - "date": "Date", + "date": "Ngày", "ranges": { "today": "Hôm nay", "thisWeek": "Tuần này", @@ -687,39 +687,39 @@ "restOfThisYear": "Toàn bộ ngày còn lại trong năm" }, "values": { - "now": "Now", - "startOfToday": "Start of today", - "endOfToday": "End of today", - "beginningOflastWeek": "Beginning of last week", - "endOfLastWeek": "End of last week", - "beginningOfThisWeek": "Beginning of this week", - "endOfThisWeek": "End of this week", - "startOfNextWeek": "Start of next week", - "endOfNextWeek": "End of next week", - "in7Days": "In 7 days", - "beginningOfLastMonth": "Beginning of last month", - "endOfLastMonth": "End of last month", - "startOfThisMonth": "Start of this month", - "endOfThisMonth": "End of this month", - "startOfNextMonth": "Start of next month", - "endOfNextMonth": "End of next month", - "in30Days": "In 30 days", - "startOfThisYear": "Beginning of this year", - "endOfThisYear": "End of this year" + "now": "Bây giờ", + "startOfToday": "Đầu ngày hôm nay", + "endOfToday": "Cuối ngày hôm nay", + "beginningOflastWeek": "Đầu tuần trước", + "endOfLastWeek": "Cuối tuần trước", + "beginningOfThisWeek": "Đầu tuần này", + "endOfThisWeek": "Cuối tuần này", + "startOfNextWeek": "Đầu tuần sau", + "endOfNextWeek": "Cuối tuần sau", + "in7Days": "Trong 7 ngày", + "beginningOfLastMonth": "Đầu tháng trước", + "endOfLastMonth": "Cuối tháng trước", + "startOfThisMonth": "Đầu tháng này", + "endOfThisMonth": "Cuối tháng này", + "startOfNextMonth": "Đầu tháng sau", + "endOfNextMonth": "Cuối tháng sau", + "in30Days": "Trong 30 ngày", + "startOfThisYear": "Đầu năm nay", + "endOfThisYear": "Cuối năm nay" } }, "datemathHelp": { "canuse": "Bạn có thể sử dụng biểu thức tính ngày để lọc những ngày liên quan.", "learnhow": "Xem cách hoạt động", "title": "Tính Ngày", - "intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.", + "intro": "Xác định các ngày liên quan được xử lý bới Vikunda khi áp dụng cho bộ lọc.", "expression": "Mỗi Biểu thức tính ngày bắt đầu bằng một ngày cố định, có thể là {0}, hoặc kết thúc bằng {1}. Ngày cố định này có thể được theo sau bởi một hoặc nhiều biểu thức toán học.", "similar": "Những biểu thức này tương tự như những biểu thức được cung cấp bởi {0} và {1}.", "add1Day": "Thêm một ngày", "minus1Day": "Bớt đi một ngày", "roundDay": "Làm tròn đến ngày gần nhất", - "supportedUnits": "Supported time units", - "someExamples": "Examples of time expressions", + "supportedUnits": "Đơn vị thời gian có sẵn", + "someExamples": "Các ví dụ về cách hiển thị thời gian", "units": { "seconds": "Giây", "minutes": "Phút", @@ -742,14 +742,14 @@ }, "task": { "task": "Công việc", - "new": "Create a task", + "new": "Tạo một tác vụ", "delete": "Xóa công việc này", "createSuccess": "Công việc đã được tạo thành công.", - "addReminder": "Add a reminder…", + "addReminder": "Thêm một nhắc nhở…", "doneSuccess": "Công việc đã được đánh dấu Hoàn thành.", "undoneSuccess": "Công việc đã được bỏ đánh dấu Hoàn thành.", - "revertSuccess": "The task change was successfully undone.", - "undo": "Undo", + "revertSuccess": "Tác vụ được hoàn tác thành công.", + "undo": "Hoàn tác", "openDetail": "Xem chi tiết công việc", "checklistTotal": "{checked} trong số {total} công việc", "checklistAllDone": "{total} coogn việc", @@ -766,7 +766,7 @@ "chooseDueDate": "Bấm vào đây để đặt ngày đến hạn", "chooseStartDate": "Bấm vào đây để đặt ngày bắt đầu", "chooseEndDate": "Bấm vào đây để đặt ngày kết thúc", - "move": "Move task to a different project", + "move": "Chuyển tác vụ tới một dự án khác", "done": "Đánh dấu đã xong!", "undone": "Đánh dấu Chưa xong", "created": "Đã tạo được {0} bởi {1}", @@ -774,12 +774,12 @@ "doneAt": "Hoàn thành {0}", "updateSuccess": "Công việc đã được lưu.", "deleteSuccess": "Công việc đã được xóa.", - "belongsToProject": "This task belongs to project '{project}'", + "belongsToProject": "Tác vụ này thuộc về dự án '{project}'", "due": "Đến hạn {at}", "closePopup": "Đóng cửa sổ", - "organization": "Organization", - "management": "Management", - "dateAndTime": "Date and time", + "organization": "Tổ chức", + "management": "Quản lý", + "dateAndTime": "Ngày và giờ", "delete": { "header": "Xóa công công việc này", "text1": "Bạn có chắc muốn xóa công việc này không?", @@ -797,7 +797,7 @@ "percentDone": "Đặt tiến trình", "attachments": "Thêm Tệp đính kèm", "relatedTasks": "Thêm Quan hệ", - "moveProject": "Move", + "moveProject": "Di chuyển", "color": "Đặt màu", "delete": "Xóa", "favorite": "Thêm vào mục yêu thích", @@ -822,20 +822,20 @@ "startDate": "Ngày bắt đầu", "title": "Tiêu đề", "updated": "Đã cập nhật", - "doneAt": "Done At" + "doneAt": "Hoàn thành lúc" }, "subscription": { - "subscribedTaskThroughParentProject": "You can't unsubscribe here because you are subscribed to this task through its project.", - "subscribedProject": "You are currently subscribed to this project and will receive notifications for changes.", - "notSubscribedProject": "You are not subscribed to this project and won't receive notifications for changes.", - "subscribedTask": "You are currently subscribed to this task and will receive notifications for changes.", - "notSubscribedTask": "You are not subscribed to this task and won't receive notifications for changes.", + "subscribedTaskThroughParentProject": "Bạn không thể hủy theo dõi ở đây vì bạn đã theo dõi tác vụ này thông qua dự án của nó.", + "subscribedProject": "Bạn hiện đã đăng kí theo dõi dự án này và sẽ nhận được thông báo về các thay đổi của dự án.", + "notSubscribedProject": "Bạn chưa đăng kí theo dõi dự án này và sẽ không nhận được thông báo cho các thay đổi của dự án.", + "subscribedTask": "Bạn hiện đã đăng kí tác vụ này và sẽ nhận được thông báo cho các thay đổi của nó.", + "notSubscribedTask": "Bạn chưa đăng kí tác vụ này và sẽ không nhận được thông báo cho các thay đổi của nó.", "subscribe": "Theo dõi", "unsubscribe": "Bỏ theo dõi", - "subscribeSuccessProject": "You are now subscribed to this project", - "unsubscribeSuccessProject": "You are now unsubscribed to this project", - "subscribeSuccessTask": "You are now subscribed to this task", - "unsubscribeSuccessTask": "You are now unsubscribed to this task" + "subscribeSuccessProject": "Bạn hiện đã theo dõi dự án này", + "unsubscribeSuccessProject": "Bạn hiện đã bỏ theo dõi dự án này", + "subscribeSuccessTask": "Bạn hiện đã theo dõi tác vụ này", + "unsubscribeSuccessTask": "Bạn hiện đã bỏ theo dõi tác vụ này" }, "attachment": { "title": "Tệp đính kèm", @@ -848,23 +848,23 @@ "deleteText1": "Bạn có chắc chắn muốn xóa tệp đính kèm {filename} không?", "copyUrl": "Sao chép URL", "copyUrlTooltip": "Sao chép url của tệp đính kèm này để sử dụng trong văn bản", - "setAsCover": "Make cover", - "unsetAsCover": "Remove cover", - "successfullyChangedCoverImage": "The cover image was successfully changed.", - "usedAsCover": "Cover image" + "setAsCover": "Tạo ảnh bìa", + "unsetAsCover": "Gỡ ảnh bìa", + "successfullyChangedCoverImage": "Ảnh bìa đã được đổi thành công.", + "usedAsCover": "Ảnh bìa" }, "comment": { "title": "Bình luận", "loading": "Đang tải bình luận…", "edited": "đã sửa {date}", "creating": "Đang tạo bình luận…", - "placeholder": "Add your comment, hit '/' for more options…", + "placeholder": "Thêm bình luận, gõ '/' để hiển thị thêm lựa chọn…", "comment": "Bình luận", "delete": "Xóa bình luận này", "deleteText1": "Bạn có chắc muốn xóa bình luận này không?", - "deleteSuccess": "The comment was deleted successfully.", + "deleteSuccess": "Bình luận đã được xóa thành công.", "addedSuccess": "Bình luận đã được thêm vào.", - "permalink": "Copy permalink to this comment" + "permalink": "Sao chép liên kết permalink tới bình luận này" }, "deferDueDate": { "title": "Trì hoãn ngày đến hạn", @@ -873,7 +873,7 @@ "1week": "1 tuần" }, "description": { - "placeholder": "Enter a description, hit '/' for more options…", + "placeholder": "Viết mô tả, gõ '/' để hiển thị các lựa chọn…", "empty": "Chưa có mô tả." }, "assignee": { @@ -883,37 +883,37 @@ "unassignSuccess": "Bỏ chỉ định thành công." }, "label": { - "placeholder": "Type to add a label…", + "placeholder": "Nhập để thêm nhãn mới…", "createPlaceholder": "Thêm nhãn mới này", "addSuccess": "Nhãn đã được thêm thành công.", "createSuccess": "Nhãn đã được thêm thành công.", "removeSuccess": "Nhãn đã được gỡ ra.", "addCreateSuccess": "Nhãn đã được tạo và thêm vào.", "delete": { - "header": "Delete this label", - "text1": "Are you sure you want to delete this label?", - "text2": "This will remove it from all tasks and cannot be restored." + "header": "Xóa nhãn này", + "text1": "Bạn có chắc muốn xóa nhãn này không?", + "text2": "Điều này sẽ gỡ bỏ nhãn khỏi tất cả các tác vụ và không thể hoàn tác." } }, "priority": { "unset": "Không cài", "low": "Thấp", "medium": "Bình thường", - "high": "High", + "high": "Cao", "urgent": "Khẩn cấp", "doNow": "Ngay lập tức" }, "relation": { "add": "Thêm một Công việc liên quan", "new": "Công việc liên quan mới", - "searchPlaceholder": "Type search for a task to add as related…", - "createPlaceholder": "Add this as related task", - "differentProject": "This task belongs to a different project.", + "searchPlaceholder": "Gõ tìm kiếm một tác vụ để thêm dưới dạng liên quan…", + "createPlaceholder": "Thêm như một tác vụ liên quan", + "differentProject": "Tác vụ này thuộc về một dự án khác.", "noneYet": "Không có công việc liên quan nào.", "delete": "Xóa công việc liên quan", "deleteText1": "Bạn có chắc muốn xóa công việc liên quan này không?", "select": "Chọn kiểu liên kết", - "taskRequired": "Please select a task or enter a new task title.", + "taskRequired": "Vui lòng chọn một công việc hoặc nhập tên công việc mới.", "kinds": { "subtask": "Công việc con | Công việc con", "parenttask": "Công việc gốc | Công việc gốc", @@ -929,23 +929,23 @@ } }, "reminder": { - "before": "{amount} {unit} before {type}", - "after": "{amount} {unit} after {type}", - "beforeShort": "before", - "afterShort": "after", - "onDueDate": "On the due date", - "onStartDate": "On the start date", - "onEndDate": "On the end date", - "custom": "Custom", - "dateAndTime": "Date and time" + "before": "{amount}{unit} trước {type}", + "after": "{amount}{unit} sau{type}", + "beforeShort": "trước", + "afterShort": "sau", + "onDueDate": "Vào ngày đến hạn", + "onStartDate": "Vào ngày bắt đầu", + "onEndDate": "Vào ngày kết thúc", + "custom": "Tuỳ chỉnh", + "dateAndTime": "Ngày và giờ" }, "repeat": { "everyDay": "Mỗi ngày", "everyWeek": "Mỗi tuần", - "every30d": "Every 30 Days", + "every30d": "Mỗi 30 ngày", "mode": "Chế độ lặp lại", "monthly": "Hàng tháng", - "fromCurrentDate": "From completion date", + "fromCurrentDate": "Từ ngày hoàn thành", "each": "Mỗi", "specifyAmount": "Chỉ định một số lượng…", "hours": "Giờ", @@ -953,24 +953,24 @@ "weeks": "Tuần", "months": "Tháng", "years": "Năm", - "invalidAmount": "Please enter more than 0." + "invalidAmount": "Vui lòng nhập nhiều hơn 0." }, "quickAddMagic": { - "hint": "Use magic prefixes to define due dates, assignees and other task properties.", + "hint": "Sử dụng các tiền tố để xác định ngày đến hạn, người phụ trách, và các thông tin tác vụ khác.", "title": "Quick Add Magic", "intro": "Khi tạo một tác vụ, bạn có thể sử dụng các từ khóa đặc biệt để thêm trực tiếp các thuộc tính cho tác vụ mới tạo. Điều này cho phép thêm các thuộc tính thường được sử dụng vào các tác vụ nhanh hơn nhiều.", "multiple": "Bạn có thể sử dụng tác vụ này nhiều lần.", "label1": "Để thêm một nhãn, chỉ cần đặt tiền tố tên nhãn bằng {prefix}.", "label2": "Đầu tiên Vikunja sẽ kiểm tra xem nhãn đã tồn tại chưa và tạo nó nếu chưa.", - "label3": "To use spaces, simply add a \" or ' around the label name.", + "label3": "Để sử dụng dấu cách, chỉ cần thêm dấu \" hoặc ' xung quanh tên nhãn.", "label4": "Ví dụ: {prefix} \"Nhãn có dấu cách\".", "priority1": "Để đặt mức độ ưu tiên của công việc, hãy thêm số từ 1-5, có tiền tố là {prefix}.", "priority2": "Số càng lớn, độ ưu tiên càng cao.", "assignees": "Để chỉ định trực tiếp công việc cho một người, hãy thêm tên người dùng của họ có tiền tố là {prefix} vào nhiệm vụ.", - "project1": "To set a project for the task to appear in, enter its name prefixed with {prefix}.", - "project2": "This will return an error if the project does not exist.", - "project3": "To use spaces, simply add a \" or ' around the project name.", - "project4": "For example: {prefix}\"Project with spaces\".", + "project1": "Để chọn một dự án trong đó tác vụ sẽ xuất hiện, hãy nhập tên của tác vụ có tiền tố là {prefix}.", + "project2": "Việc này sẽ trả về lỗi nếu dự án không tồn tại.", + "project3": "Để sử dụng dấu cách, chỉ cần thêm dấu \" hoặc ' trước và sau tên dự án.", + "project4": "Ví dụ: {prefix} \"Dự án có dấu cách\".", "dateAndTime": "Ngày và giờ", "date": "Bất kỳ ngày nào sẽ được sử dụng làm ngày hết hạn của nhiệm vụ mới. Bạn có thể sử dụng ngày ở bất kỳ định dạng nào sau đây:", "dateWeekday": "bất kỳ ngày nào trong tuần, sẽ sử dụng ngày tiếp theo với ngày đó", @@ -985,7 +985,7 @@ "title": "Team", "noTeams": "Bạn chưa thuộc bất kỳ Team nào.", "create": { - "title": "Create a team", + "title": "Tạo nhóm", "success": "Team đã được tạo thành công." }, "edit": { @@ -999,24 +999,24 @@ "userAddedSuccess": "Thành viên Team đã được thêm.", "madeMember": "Vai trò thanh viên đã được cập nhật.", "madeAdmin": "Vai trò thành viên đã được cập nhật.", - "mustSelectUser": "Please select a user.", + "mustSelectUser": "Chọn một người dùng.", "delete": { "header": "Giải tán Team", "text1": "Bạn có chắc giải tán Team này không?", - "text2": "All team members will lose access to projects shared with this team. This CANNOT BE UNDONE!", + "text2": "Tất cả các thành viên sẽ mất quyền truy cập các dự án đã được chia sẻ với nhóm. Hành động này KHÔNG THỂ HOÀN TÁC!", "success": "Team đã giải tán." }, "deleteUser": { "header": "Đưa thành viên ra khỏi Team", "text1": "Bạn có chắc muốn đưa thành viên này ra khỏi Team không?", - "text2": "They will lose access to all projects this team has access to. This CANNOT BE UNDONE!", + "text2": "Họ sẽ mất quyền truy cập vào tất cả các dự án mà nhóm này có quyền truy cập. Điều đó KHÔNG THỂ HOÀN TÁC!", "success": "Thành viên đã rời khỏi Team." }, "leave": { - "title": "Leave team", - "text1": "Are you sure you want to leave this team?", - "text2": "You will lose access to all projects this team has access to. If you change your mind you'll need a team admin to add you again.", - "success": "You have successfully left the team." + "title": "Rời nhóm", + "text1": "Bạn có chắc bạn muốn rời khỏi nhóm này?", + "text2": "Bạn sẽ mất tất cả quyền truy cập đến tất cả các dự án mà nhóm này có quyền truy cập tới. Nếu bạn thay đổi quyết đinh bạn sẽ cần quản trị viên của nhóm thêm bạn vào nhóm lần nữa.", + "success": "Bạn đã rời khỏi nhóm." } }, "attributes": { @@ -1024,11 +1024,11 @@ "namePlaceholder": "Tên của Team ở đây…", "nameRequired": "Hãy đặt một cái tên.", "description": "Mô tả", - "descriptionPlaceholder": "Describe the team here, hit '/' for more options…", + "descriptionPlaceholder": "Mô tả về nhóm tại đây, gõ '/' để hiển thị thêm lựa chọn…", "admin": "Quản trị viên", "member": "Thành viên", - "isPublic": "Public Team", - "isPublicDescription": "Make the team publicly discoverable. When enabled, anyone can share projects with this team even when not being a direct member." + "isPublic": "Nhóm công khai", + "isPublicDescription": "Giúp nhóm có thể tìm thấy công khai. Khi bật tính năng này, bất kì ai cũng có thể chia sẻ dự án với nhóm ngay cả khi không phải là thành viên trực thuộc." } }, "keyboardShortcuts": { @@ -1049,32 +1049,32 @@ "attachment": "Thêm tệp đính kèm cho công việc này", "related": "Sửa đổi các công việc liên kết", "color": "Thay đổi màu công việc này", - "move": "Move this task to another project", - "reminder": "Manage reminders of this task", - "description": "Toggle editing of the task description", - "delete": "Delete this task", - "priority": "Change the priority of this task", - "favorite": "Mark this task as favorite / unfavorite", - "save": "Save the current task" + "move": "Di chuyển tác vụ sang dự án khác", + "reminder": "Quản lý nhắc nhở cho tác vụ này", + "description": "Chỉnh sửa Toggle cho mô tả của tác vụ", + "delete": "Xóa tác vụ này", + "priority": "Thay đổi ưu tiên của tác vụ này", + "favorite": "Đánh dấu tác vụ này là yêu thích/phụ", + "save": "Lưu tác vụ hiện tại" }, "project": { - "title": "Project Views", - "switchToListView": "Switch to list view", - "switchToGanttView": "Switch to gantt view", - "switchToKanbanView": "Switch to kanban view", - "switchToTableView": "Switch to table view" + "title": "Chế độ xem dự án", + "switchToListView": "Chuyển sang chế độ danh sách", + "switchToGanttView": "Chuyển sang chế độ biểu đồ gantt", + "switchToKanbanView": "Chuyển sang chế độ bảng Kanban", + "switchToTableView": "Chuyển qua chế độ bảng" }, "navigation": { "title": "Điều hướng", - "overview": "Navigate to overview", - "upcoming": "Navigate to upcoming tasks", + "overview": "Điều hướng đến trang tổng quan", + "upcoming": "Điều hướng đến công việc sắp tới", "labels": "Điều hướng đến nhãn", "teams": "Điều hướng đến Team", - "projects": "Navigate to projects" + "projects": "Điều hướng đến dự án" } }, "update": { - "available": "There is an update available!", + "available": "Đã có bản cập nhật!", "do": "Cập nhật bây giờ" }, "menu": { @@ -1083,20 +1083,20 @@ "duplicate": "Nhân bản", "delete": "Xóa", "unarchive": "Bỏ lưu trữ", - "setBackground": "Background settings", + "setBackground": "Cài đặt nền", "share": "Chia sẻ", - "newProject": "New project", - "createProject": "Create project", - "cantArchiveIsDefault": "You cannot archive this because it is your default project.", - "cantDeleteIsDefault": "You cannot delete this because it is your default project.", - "views": "Views" + "newProject": "Dự án mới", + "createProject": "Tạo dự án", + "cantArchiveIsDefault": "Bạn không thể lưu trữ dự án này bởi đây là dự án mặc định.", + "cantDeleteIsDefault": "Bạn không thể xóa bởi đây là dự án mặc định.", + "views": "Chế độ xem" }, "apiConfig": { "url": "URL Vikunja", "urlPlaceholder": "ví dụ: https://localhost:3456", "change": "thay đổi", "use": "Sử dụng cài đặt Vikunja tại {0}", - "error": "Could not find or use Vikunja installation at \"{domain}\". Please check if the url has the correct format and you can reach it when accessing it directly and try again.", + "error": "Không thể tìm thấy hay sử dụng cài đặt Vikunja tại \"{domain}\". Vui lòng kiểm tra url đúng định dạng và có thể truy cập được trực tiếp và thử lại.", "success": "Sử dụng cài đặt Vikunja tại \"{domain}\".", "urlRequired": "Cần có một url." }, @@ -1108,26 +1108,26 @@ "notification": { "title": "Thông báo", "none": "Bạn không có thông báo nào. Chúc một ngày tốt lành!", - "explainer": "Notifications will appear here when actions projects or tasks you subscribed to happen.", - "markAllRead": "Mark all notifications as read", - "markAllReadSuccess": "Successfully marked all notifications as read." + "explainer": "Thông báo sẽ xuất hiện tại đây khi các hành động dự án và tác vụ bạn theo dõi diễn ra.", + "markAllRead": "Đánh dẫu tất cả đã đọc", + "markAllReadSuccess": "Đánh dấu tất cả đã đọc thành công." }, "quickActions": { "commands": "Các lệnh", "placeholder": "Gõ một lệnh hoặc tìm kiếm…", - "hint": "You can use {project} to limit the search to a project. Combine {project} or {label} (labels) with a search query to search for a task with these labels or on that project. Use {assignee} to only search for teams.", + "hint": "Bạn có thể sử dụng {project} để hạn chế tìm kiếm một dự án. Kết hợp {project} hoặc {label} (các nhãn) với một truy vấn tìm kiếm để tìm kiếm một tác vụ với các nhãn đó hoặc trong dự án đó. Sử dụng {assignee} để chỉ tìm theo các đội nhóm.", "tasks": "Tác vụ", - "projects": "Projects", + "projects": "Dự án", "teams": "Team", - "labels": "Labels", - "newProject": "Enter the title of the new project…", + "labels": "Nhãn", + "newProject": "Nhập tên cho dự án mới…", "newTask": "Đặt tên cho tác vụ mới…", "newTeam": "Đặt tên cho đội nhóm mới…", - "createTask": "Create a task in the current project ({title})", - "createProject": "Create a project", + "createTask": "Tạo một tác vụ trong dự án hiện tại ({title})", + "createProject": "Tạo một dự án", "cmds": { "newTask": "Tác vụ mới", - "newProject": "New project", + "newProject": "Dự án mới", "newTeam": "Team mới" } }, @@ -1136,10 +1136,10 @@ "altFormatShort": "j M Y" }, "reaction": { - "reactedWith": "{user} reacted with {value}", - "reactedWithAnd": "{users} and {lastUser} reacted with {value}", - "reactedWithAndMany": "{users} and {num} more reacted reacted with {value}", - "add": "Add your reaction" + "reactedWith": "{user} đã tương tác với {value}", + "reactedWithAnd": "{users} và {lastUser} đã tương tác với {value}", + "reactedWithAndMany": "{users} và {num} đã tương tác thêm với {value}", + "add": "Thêm tương tác của bạn" }, "error": { "error": "Lỗi", @@ -1157,29 +1157,29 @@ "1012": "Địa chỉ Email của người dùng chưa được xác nhận.", "1013": "Mật khẩu mới không để trống.", "1014": "Mật khẩu cũng đang để trống.", - "1015": "TOTP is already enabled for this user.", - "1016": "TOTP is not enabled for this user.", - "1017": "The TOTP passcode is invalid.", + "1015": "TOTP đã được kích hoạt cho người dùng này.", + "1016": "TOTP không được kích hoạt cho người dùng này.", + "1017": "Mật khẩu TOTP không hợp lệ.", "1018": "Cài đặt loại hình đại diện của người dùng không hợp lệ.", - "1019": "No email address was provided by the OpenID provider.Please make sure the openid provider publicly provides an email address for your account.", - "1020": "This account is disabled. Check your emails or ask your administrator.", - "1021": "This account is managed by a third-party authentication provider.", - "1022": "The username must not contain spaces.", + "1019": "Không có địa chỉ email nào được cung cấp bởi OpenID. Hãy chắc chắc nhà cung cấp openid cung cấp công khai một địa chỉ email cho tài khoản của bạn.", + "1020": "Tài khoản này đã bị vô hiệu hóa. Vui lòng kiểm tra email hoặc liên hệ quản trị viên của bạn.", + "1021": "Tài khoản này được quản lý bởi nhà cung cấp xác thực bên thứ ba.", + "1022": "Tên người dùng không được chứa khoảng cách.", "1023": "You can't do that as a link share.", "1024": "Invalid claim data for field {field} of type {type}.", - "1025": "The timezone '{timezone}' is invalid. Please select a valid timezone from the list.", + "1025": "Múi giờ '{timezone}' không hợp lệ. Vui lòng chọn một múi giờ hợp lệ từ danh sách.", "2001": "ID không thể để trống hoặc là 0.", "2002": "Một số dữ liệu được yêu cầu không không hợp lệ.", - "2003": "The timezone '{timezone}' is invalid.", - "3001": "The project does not exist.", - "3004": "You need to have read permissions on that project to perform that action.", - "3005": "The project title cannot be empty.", - "3006": "The project share does not exist.", - "3007": "A project with this identifier already exists.", - "3008": "The project is archived and can therefore only be accessed read only. This is also true for all tasks associated with this project.", - "4001": "The task title cannot be empty.", - "4002": "The task does not exist.", - "4003": "All bulk editing tasks must belong to the same project.", + "2003": "Múi giờ '{timezone}' không hợp lệ.", + "3001": "Dự án không tồn tại.", + "3004": "Bạn cần có quyền đọc dự án đó để thực hiện hành động.", + "3005": "Tên dự án không được để trống.", + "3006": "Chia sẻ dự án không tồn tại.", + "3007": "Một dự án với mã định danh này đã tồn tại.", + "3008": "Dự án đã được lưu trữ và vì thế thì có thể đọc. Điều này đồng thời áp dụng với tất cả các tác vụ liên kết với dự án này.", + "4001": "Tên tác vụ không được để trống.", + "4002": "Tác vụ không tồn tại.", + "4003": "Tất cả các tác vụ chỉnh sửa cùng lúc phải thuộc cùng một dự án.", "4004": "Cần ít nhất một công việc khi chỉnh sửa hàng loạt.", "4005": "Bạn không có quyền xem công việc.", "4006": "Bạn không thể đặt một công việc gốc làm chính công việc đó.", @@ -1196,53 +1196,53 @@ "4017": "Bộ so sánh bộ lọc công việc không hợp lệ.", "4018": "Bộ lọc kết hợp không hợp lệ.", "4019": "Giá trị bộ lọc công việc không hợp lệ.", - "4020": "This attachment does not belong to that task.", - "4021": "This user is already assigned to that task.", + "4020": "Phần đính kèm này không thuộc về tác vụ đó.", + "4021": "Người dùng này đã được giao tác vụ đó.", "4022": "Please provide what the reminder date is relative to.", "4023": "Cannot create a task relation cycle.", "6001": "Tên của Team không được để trống.", "6002": "Team không tồn tại.", - "6004": "The team already has access to that project.", + "6004": "Đội nhóm đã truy cập tới dự án này.", "6005": "Người này đã là thành viên của Team đó rồi.", "6006": "Không thể loại bỏ thành viên cuối cùng của Team.", - "6007": "The team does not have access to the project to perform that action.", + "6007": "Đội nhóm không có quyền truy cập dự án để thực hiện hành động đó.", "6008": "No team could be found for the given OIDC ID and issuer.", "6009": "No Teams with property oidcId could be found for User.", - "7002": "The user already has access to that project.", - "7003": "You do not have access to that project.", + "7002": "Người dùng đã truy cập tới dự án đó.", + "7003": "Bạn không có quyền truy cập dự án đó.", "8001": "Nhãn này đã tồn tại trên công việc đó.", "8002": "Nhãn không tồn tại.", "8003": "Bạn không có quyền truy cập vào nhãn này.", "9001": "Quyền không hợp lệ.", "10001": "Cột không tồn tại.", - "10002": "The bucket does not belong to that project.", - "10003": "You cannot remove the last bucket on a project.", + "10002": "Cột không thuộc dự án đó.", + "10003": "Bạn không thể gỡ bỏ cột cuối cùng trong một dự án.", "10004": "Bạn không thể thêm công việc vào cột này vì nó đã vượt quá giới hạn công việc có thể chứa.", - "10005": "There can be only one done bucket per project.", + "10005": "Chỉ có thể có một cột hoàn thành trong mỗi dự án.", "11001": "Bộ lọc sẵn không tồn tại.", "11002": "Bộ lọc đã lưu không có sẵn cho chia sẻ liên kết.", "12001": "Loại đăng ký không hợp lệ.", "12002": "Bạn đã đăng ký với tổ chức này hoặc tổ chức chính rồi.", "12003": "You must provide a user to fetch subscriptions.", "13001": "Chia sẻ liên kết này yêu cầu mật khẩu để xác thực, nhưng không có mật khẩu nào được cung cấp.", - "13002": "The provided link share password is invalid.", + "13002": "Liên kết chia sẻ mật khẩu vừa được cung cấp không hợp lệ.", "13003": "The provided link share token is invalid.", "14001": "The provided api token is invalid.", "14002": "The permission {permission} of group {group} is invalid." }, "about": { "title": "Về ứng dụng", - "version": "Version: {version}" + "version": "Phiên bản: {version}" }, "time": { "units": { - "seconds": "second|seconds", - "minutes": "minute|minutes", - "hours": "hour|hours", - "days": "day|days", - "weeks": "week|weeks", - "months": "month|months", - "years": "year|years" + "seconds": "giây|giây", + "minutes": "phút|phút", + "hours": "giờ|giờ", + "days": "ngày|ngày", + "weeks": "tuần|tuần", + "months": "tháng|tháng", + "years": "năm|năm" } } } diff --git a/frontend/src/i18n/lang/zh-CN.json b/frontend/src/i18n/lang/zh-CN.json index ef927362c..00ec95408 100644 --- a/frontend/src/i18n/lang/zh-CN.json +++ b/frontend/src/i18n/lang/zh-CN.json @@ -100,6 +100,7 @@ "timezone": "Time zone", "overdueTasksRemindersTime": "逾期任务提醒邮件时间", "filterUsedOnOverview": "概述页面上使用已保存过滤器", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." }, "totp": { diff --git a/frontend/src/i18n/lang/zh-TW.json b/frontend/src/i18n/lang/zh-TW.json index 69c654c72..0b1df19af 100644 --- a/frontend/src/i18n/lang/zh-TW.json +++ b/frontend/src/i18n/lang/zh-TW.json @@ -100,6 +100,7 @@ "timezone": "Time zone", "overdueTasksRemindersTime": "Overdue tasks reminder email time", "filterUsedOnOverview": "Saved filter used on the overview page", + "minimumPriority": "Minimum visible task priority", "externalUserNameChange": "Your name is managed by your login provider ({provider}). To change it, please update it there instead." }, "totp": { diff --git a/pkg/i18n/lang/de-DE.json b/pkg/i18n/lang/de-DE.json index 431c5b235..a231c81f0 100644 --- a/pkg/i18n/lang/de-DE.json +++ b/pkg/i18n/lang/de-DE.json @@ -132,7 +132,19 @@ }, "common": { "have_nice_day": "Hab einen schönen Tag!", - "copy_url": "Falls der Button oben nicht funktioniert, kopiere die untenstehende URL und füge sie in die Adressleiste deines Browsers ein:" + "copy_url": "Falls der Button oben nicht funktioniert, kopiere die untenstehende URL und füge sie in die Adressleiste deines Browsers ein:", + "actions": { + "open_task": "Open Task", + "open_vikunja": "Open Vikunja", + "open_project": "Open Project", + "open_team": "Open Team", + "download": "Download", + "reset_password": "Reset your password", + "go_to_settings": "Go to settings", + "confirm_email": "Confirm your email address", + "abort_deletion": "Abort the deletion", + "confirm_account_deletion": "Confirm the deletion of my account" + } } } } \ No newline at end of file diff --git a/pkg/i18n/lang/de-swiss.json b/pkg/i18n/lang/de-swiss.json index 431c5b235..a231c81f0 100644 --- a/pkg/i18n/lang/de-swiss.json +++ b/pkg/i18n/lang/de-swiss.json @@ -132,7 +132,19 @@ }, "common": { "have_nice_day": "Hab einen schönen Tag!", - "copy_url": "Falls der Button oben nicht funktioniert, kopiere die untenstehende URL und füge sie in die Adressleiste deines Browsers ein:" + "copy_url": "Falls der Button oben nicht funktioniert, kopiere die untenstehende URL und füge sie in die Adressleiste deines Browsers ein:", + "actions": { + "open_task": "Open Task", + "open_vikunja": "Open Vikunja", + "open_project": "Open Project", + "open_team": "Open Team", + "download": "Download", + "reset_password": "Reset your password", + "go_to_settings": "Go to settings", + "confirm_email": "Confirm your email address", + "abort_deletion": "Abort the deletion", + "confirm_account_deletion": "Confirm the deletion of my account" + } } } } \ No newline at end of file diff --git a/pkg/i18n/lang/no-NO.json b/pkg/i18n/lang/no-NO.json index 330dcecfc..22892f295 100644 --- a/pkg/i18n/lang/no-NO.json +++ b/pkg/i18n/lang/no-NO.json @@ -37,15 +37,15 @@ "subject": "Someone just tried to login to your Vikunja account, but failed to provide a correct password", "message": "Someone just tried to log in into your account with a wrong password three times in a row.", "warning": "If this was not you, this could be someone else trying to break into your account.", - "enhance_security": "To enhance the security of you account you may want to set a stronger password or enable TOTP authentication in the settings:" + "enhance_security": "For å forbedre sikkerheten på kontoen bør du sette et sterkere passord eller aktivere TOTP-autentisering i innstillingene:" } }, "account": { "deletion": { "confirm": { - "subject": "Please confirm the deletion of your Vikunja account", + "subject": "Bekreft sletting av Vikunja-kontoen din", "request": "You have requested the deletion of your account. To confirm this, please click the link below:", - "valid_duration": "This link will be valid for 24 hours.", + "valid_duration": "Denne lenken vil være gyldig i 24 timer.", "schedule_info": "Once you confirm the deletion we will schedule the deletion of your account in three days and send you another email until then.", "consequences": "If you proceed with the deletion of your account, we will remove all of your projects and tasks you created. Everything you shared with another user or team will transfer ownership to them.", "changed_mind": "If you did not requested the deletion or changed your mind, you can simply ignore this email." @@ -59,24 +59,24 @@ "changed_mind": "If you changed your mind, simply click the link below to cancel the deletion and follow the instructions there:" }, "completed": { - "subject": "Your Vikunja Account has been deleted", - "confirmation": "As requested, we've deleted your Vikunja account.", - "permanent": "This deletion is permanent. If did not create a backup and need your data back now, talk to your administrator." + "subject": "Din Vikunja-konto er slettet", + "confirmation": "Som forespurt har vi slettet Vikunja-kontoen din.", + "permanent": "Denne slettingen er permanent. Hvis det ikke er opprettet en sikkerhetskopi og trenger dataene dine tilbake nå, kontakt administrator." } } }, "task": { "reminder": { - "subject": "Reminder for \"%[1]s\" (%[2]s)", - "message": "This is a friendly reminder of the task \"%[1]s\" (%[2]s)." + "subject": "Påminnelse for \"%[1]s\" (%[2]s)", + "message": "Dette er en påminnelse om oppgaven «%[1]» (%[2]s)." }, "comment": { - "subject": "Re: %[1]s", - "mentioned_subject": "%[1]s mentioned you in a comment in \"%[2]s\"", - "mentioned_message": "**%[1]s** mentioned you in a comment:" + "subject": "Sv: %[1]s", + "mentioned_subject": "%[1]s nevnte deg i en kommentar i \"%[2]s\"", + "mentioned_message": "**%[1]s nevnte deg i en kommentar i \"%[]s:" }, "assigned": { - "subject_to_assignee": "You have been assigned to %[1]s (%[2]s)", + "subject_to_assignee": "Du er tildelt %[1]s (%[2]s)", "message_to_assignee": "%[1]s has assigned you to %[2]s.", "subject_to_others": "%[1]s(%[2]s) has been assigned to %[3]s", "message_to_others": "%[1]s has assigned this task to %[2]s." @@ -132,7 +132,19 @@ }, "common": { "have_nice_day": "Have a nice day!", - "copy_url": "If the button above doesn't work, copy the url below and paste it in your browser's address bar:" + "copy_url": "If the button above doesn't work, copy the url below and paste it in your browser's address bar:", + "actions": { + "open_task": "Open Task", + "open_vikunja": "Open Vikunja", + "open_project": "Open Project", + "open_team": "Open Team", + "download": "Download", + "reset_password": "Reset your password", + "go_to_settings": "Go to settings", + "confirm_email": "Confirm your email address", + "abort_deletion": "Abort the deletion", + "confirm_account_deletion": "Confirm the deletion of my account" + } } } } \ No newline at end of file diff --git a/pkg/i18n/lang/pt-PT.json b/pkg/i18n/lang/pt-PT.json index be07b7e9b..afdee7bce 100644 --- a/pkg/i18n/lang/pt-PT.json +++ b/pkg/i18n/lang/pt-PT.json @@ -132,7 +132,19 @@ }, "common": { "have_nice_day": "Have a nice day!", - "copy_url": "If the button above doesn't work, copy the url below and paste it in your browser's address bar:" + "copy_url": "If the button above doesn't work, copy the url below and paste it in your browser's address bar:", + "actions": { + "open_task": "Open Task", + "open_vikunja": "Open Vikunja", + "open_project": "Open Project", + "open_team": "Open Team", + "download": "Download", + "reset_password": "Reset your password", + "go_to_settings": "Go to settings", + "confirm_email": "Confirm your email address", + "abort_deletion": "Abort the deletion", + "confirm_account_deletion": "Confirm the deletion of my account" + } } } } \ No newline at end of file diff --git a/pkg/i18n/lang/tr-TR.json b/pkg/i18n/lang/tr-TR.json index 940ed81f1..509087f08 100644 --- a/pkg/i18n/lang/tr-TR.json +++ b/pkg/i18n/lang/tr-TR.json @@ -132,7 +132,19 @@ }, "common": { "have_nice_day": "İyi günler dileriz!", - "copy_url": "Yukarıdaki düğme çalışmazsa, aşağıdaki URL'yi kopyalayıp tarayıcınızın adres çubuğuna yapıştırın:" + "copy_url": "Yukarıdaki düğme çalışmazsa, aşağıdaki URL'yi kopyalayıp tarayıcınızın adres çubuğuna yapıştırın:", + "actions": { + "open_task": "Open Task", + "open_vikunja": "Open Vikunja", + "open_project": "Open Project", + "open_team": "Open Team", + "download": "Download", + "reset_password": "Reset your password", + "go_to_settings": "Go to settings", + "confirm_email": "Confirm your email address", + "abort_deletion": "Abort the deletion", + "confirm_account_deletion": "Confirm the deletion of my account" + } } } } \ No newline at end of file diff --git a/pkg/i18n/lang/vi-VN.json b/pkg/i18n/lang/vi-VN.json index be07b7e9b..acf255157 100644 --- a/pkg/i18n/lang/vi-VN.json +++ b/pkg/i18n/lang/vi-VN.json @@ -1,124 +1,124 @@ { "notifications": { - "greeting": "Hi %[1]s,", + "greeting": "Chào %[1]s,", "email_confirm": { - "subject": "%[1]s, please confirm your email address at Vikunja", + "subject": "%[1]s, vui lòng xác thực địa chỉ email trên Vikunja của bạn", "subject_new": "%[1]s + Vikunja = <3", - "welcome": "Welcome to Vikunja!", - "confirm": "To confirm your email address, click the link below:" + "welcome": "Chào mừng đến với Vikunja!", + "confirm": "Để xác nhận địa chỉ email của mình, hãy nhấn vào liên kết bên dưới:" }, "password": { "changed": { - "subject": "Your Password on Vikunja was changed", - "success": "Your account password was successfully changed.", - "warning": "If this wasn't you, it could mean someone compromised your account. In this case contact your server's administrator." + "subject": "Mật khẩu của bạn trên Vikunja đã được thay đổi", + "success": "Mật khẩu tài khoản của bạn đã được thay đổi thành công.", + "warning": "Nếu đây không phải là bạn, có thể đã có ai đó xâm nhập vào tài khoản của bạn. Trong trường hợp này vui lòng liên hệ với quản trị viên server của bạn." }, "reset": { - "subject": "Reset your password on Vikunja", - "instructions": "To reset your password, click the link below:", - "valid_duration": "This link will be valid for 24 hours." + "subject": "Đặt lại mật khẩu của bạn trên Vikunja", + "instructions": "Để đặt lại mật khẩu, vui lòng nhấn vào đường dẫn bên dưới:", + "valid_duration": "Đường dẫn này có hiệu lực trong vòng 24 giờ." } }, "totp": { "invalid": { - "subject": "Someone just tried to login to your Vikunja account, but failed", - "message": "Someone just tried to log in into your account with correct username and password but a wrong TOTP passcode.", - "warning": "**If this was not you, someone else knows your password. You should set a new one immediately!**" + "subject": "Có ai đó vừa cố gắng đăng nhập vào tài khoản Vikunja của bạn, nhưng thất bại", + "message": "Có ai đó vừa cố đăng nhập vào tài khoản của bạn với tên đăng nhập và mật khẩu chính xác nhưng sai mã TOTP.", + "warning": "**Nếu đây không phải là bạn, ai đó khác đã biết mật khẩu của bạn. Bạn nên đặt mới mật khẩu ngay!**" }, "account_locked": { - "subject": "We've disabled your account on Vikunja", - "message": "Someone tried to log in with your credentials but failed to provide a valid TOTP passcode.", - "disabled": "After 10 failed attempts, we've disabled your account and reset your password. To set a new one, follow the instructions in the reset email we just sent you.", - "reset_instructions": "If you did not receive an email with reset instructions, you can always request a new one at [%[1]s](%[2]s)." + "subject": "Chúng tôi vừa vô hiệu hóa tài khoản của bạn trên Vikunja", + "message": "Có ai đó vừa cố gắng đăng nhập bằng thông tin của bạn nhưng không cung cấp được mã TOTP hợp lệ.", + "disabled": "Sau 10 lần thất bại, chúng tôi đã vô hiệu hóa tài khoản của bạn và đặt lại mật khẩu. Để đặt một mật khẩu mới, hãy làm theo hướng dẫn trong email đặt lại mật khẩu mà chúng tôi vừa gửi cho bạn.", + "reset_instructions": "Nếu bạn không nhận được email hướng dẫn đặt lại mật khẩu, bạn vẫn có thể gửi yêu cầu nhận một email mới tại [%[1]s](%[2]s)." } }, "login": { "failed": { - "subject": "Someone just tried to login to your Vikunja account, but failed to provide a correct password", - "message": "Someone just tried to log in into your account with a wrong password three times in a row.", - "warning": "If this was not you, this could be someone else trying to break into your account.", - "enhance_security": "To enhance the security of you account you may want to set a stronger password or enable TOTP authentication in the settings:" + "subject": "Có ai đó vừa cố gắng đăng nhập vào tài khoản Vikunja của bạn, nhưng không cung cấp đúng mật khẩu", + "message": "Có ai đó vừa cố đăng nhập vào tài khoản của bạn với mật khẩu nhập sai ba lần liên tiếp.", + "warning": "Nếu đây không phải bạn, có thể đang có ai đó cố gắng xâm nhập vào tài khoản của bạn.", + "enhance_security": "Để nâng cao bảo mật cho tài khoản, bạn có thể sẽ cần thiết lập một mật khẩu mạnh hơn hoặc bật xác thực TOTP trong phần cài đặt:" } }, "account": { "deletion": { "confirm": { - "subject": "Please confirm the deletion of your Vikunja account", - "request": "You have requested the deletion of your account. To confirm this, please click the link below:", - "valid_duration": "This link will be valid for 24 hours.", - "schedule_info": "Once you confirm the deletion we will schedule the deletion of your account in three days and send you another email until then.", - "consequences": "If you proceed with the deletion of your account, we will remove all of your projects and tasks you created. Everything you shared with another user or team will transfer ownership to them.", - "changed_mind": "If you did not requested the deletion or changed your mind, you can simply ignore this email." + "subject": "Vui lòng xác nhận việc xóa bỏ tài khoản Vikunja của bạn", + "request": "Bạn đã yêu cầu xóa tài khoản của mình. Để xác nhận, vui lòng nhấn vào đường dẫn bên dưới:", + "valid_duration": "Liên kết này có hiệu lực trong vòng 24 giờ.", + "schedule_info": "Ngay khi bạn xác nhận việc xóa này chúng tôi sẽ lên lịch xóa tài khoản của bạn trong vòng 3 ngày và sẽ gửi bạn một email khác cho đến lúc đó.", + "consequences": "Nếu bạn xóa tài khoản của mình, chúng tôi sẽ gỡ bỏ tất cả các dự án và tác vụ mà bạn đã tạo. Mọi thứ bạn đã chia sẻ với người dùng hoặc team khác sẽ được chuyển giao quyền sở hữu sang cho người dùng hoặc team đó.", + "changed_mind": "Nếu bạn không yêu cầu xóa hay thay đổi quyết định, bạn chỉ cần bỏ qua email này." }, "scheduled": { - "subject_days": "Your Vikunja account will be deleted in %[1]s days", - "subject_tomorrow": "Your Vikunja account will be deleted tomorrow", - "request_reminder": "You recently requested the deletion of your Vikunja account.", - "deletion_time_days": "We will delete your account in %[1]s days.", - "deletion_time_tomorrow": "We will delete your account tomorrow.", - "changed_mind": "If you changed your mind, simply click the link below to cancel the deletion and follow the instructions there:" + "subject_days": "Tài khoản Vikunja của bạn sẽ được xóa trong %[1]s ngày nữa", + "subject_tomorrow": "Tài khoản Vikunjia của bạn sẽ được xóa vào ngày mai", + "request_reminder": "Bạn gần đây có yêu cầu xóa tài khoản Vikunja của mình.", + "deletion_time_days": "Chúng tôi sẽ xóa tài khoản của bạn trong %[1]s ngày nữa.", + "deletion_time_tomorrow": "Chúng tôi sẽ xóa tài khoản của bạn vào ngày mai.", + "changed_mind": "Nếu bạn thay đổi quyết đinh, chỉ cần nhấn vào đường dẫn bên dưới để hủy xóa và làm theo hướng dẫn:" }, "completed": { - "subject": "Your Vikunja Account has been deleted", - "confirmation": "As requested, we've deleted your Vikunja account.", - "permanent": "This deletion is permanent. If did not create a backup and need your data back now, talk to your administrator." + "subject": "Tài khoản Vikunja của bạn đã được xóa", + "confirmation": "Theo như yêu cầu, chúng tôi đã xóa tài khoản Vikunja của bạn.", + "permanent": "Việc xóa này là vĩnh viễn. Nếu chưa tạo bản sao lưu và hiện tại cần lấy lại dữ liệu của mình, vui lòng liên hệ với quản trị viên." } } }, "task": { "reminder": { - "subject": "Reminder for \"%[1]s\" (%[2]s)", + "subject": "Nhắc nhở cho \"%[1]s\" (%[2]s)", "message": "This is a friendly reminder of the task \"%[1]s\" (%[2]s)." }, "comment": { "subject": "Re: %[1]s", - "mentioned_subject": "%[1]s mentioned you in a comment in \"%[2]s\"", - "mentioned_message": "**%[1]s** mentioned you in a comment:" + "mentioned_subject": "%[1]s đã nhắc đến bạn trong một bình luận của \"%[2]s\"", + "mentioned_message": "**%[1]s** đã nhắc đến bạn trong một bình luận:" }, "assigned": { "subject_to_assignee": "You have been assigned to %[1]s (%[2]s)", "message_to_assignee": "%[1]s has assigned you to %[2]s.", "subject_to_others": "%[1]s(%[2]s) has been assigned to %[3]s", - "message_to_others": "%[1]s has assigned this task to %[2]s." + "message_to_others": "%[1]s đã giao tác vụ này cho %[2]s." }, "deleted": { - "subject": "%[1]s (%[2]s) has been deleted", - "message": "%[1]s has deleted the task %[2]s (%[3]s)" + "subject": "%[1]s (%[2]s) đã được xóa", + "message": "%[1]s đã xóa tác vụ %[2]s (%[3]s)" }, "mentioned": { - "subject_new": "%[1]s mentioned you in a new task \"%[2]s\"", - "subject": "%[1]s mentioned you in a task \"%[2]s\"", - "message": "**%[1]s** mentioned you in a task:" + "subject_new": "%[1]s nhắc đến bạn trong một tác vụ mới \"%[2]s\"", + "subject": "%[1]s đã nhắc đến bạn trong một tác vụ \"%[2]s\"", + "message": "**%[1]s** đã nhắc đến bạn trong một tác vụ:" }, "overdue": { - "subject": "Task \"%[1]s\" (%[2]s) is overdue", + "subject": "Tác vụ \"%[1]s\" (%[2]s) bị quá hạn", "message": "This is a friendly reminder of the task \"%[1]s\" (%[2]s) which is %[3]s and not yet done.", - "multiple_subject": "Your overdue tasks", - "multiple_message": "You have the following overdue tasks:", - "overdue_since": "overdue since %[1]s", - "overdue_now": "overdue now" + "multiple_subject": "Các tác vụ quá hạn của bạn", + "multiple_message": "Bạn có các tác vụ quá hạn sau:", + "overdue_since": "quá hạn kể từ %[1]s", + "overdue_now": "hiện đang quá hạn" } }, "project": { - "created": "%[1]s created the project \"%[2]s\"" + "created": "%[1]s đã tạo dự án \"%[2]s\"" }, "team": { "member_added": { - "subject": "%[1]s added you to the %[2]s team in Vikunja", - "message": "%[1]s has just added you to the %[2]s team in Vikunja." + "subject": "%[1]s đã thêm bạn vào Team %[2]s trong Vikunja", + "message": "%[1]s vừa thêm bạn vào Team %[2]s trong Vikunja." } }, "data_export": { "ready": { "subject": "Your Vikunja Data Export is ready", "message": "Your Vikunja Data Export is ready for you to download. Click the button below to download it:", - "availability": "The download will be available for the next 7 days." + "availability": "Bản tải xuống sẽ có sẵn trong vòng 7 ngày tới." } }, "migration": { "done": { "subject": "The migration from %[1]s to Vikunja was completed", - "imported": "Vikunja has imported all lists/projects, tasks, notes, reminders and files from %[1]s you have access to.", + "imported": "Vikunjia đã nhập toàn bộ danh sách/dự án, tác vụ, ghi chú, nhắc nhở và tệp từ %[1]s mà bạn có quyền truy cập.", "have_fun": "Have fun with your new (old) projects!" }, "failed": { @@ -131,8 +131,20 @@ } }, "common": { - "have_nice_day": "Have a nice day!", - "copy_url": "If the button above doesn't work, copy the url below and paste it in your browser's address bar:" + "have_nice_day": "Chúc một ngày tốt lành!", + "copy_url": "Nếu nút bấm bên trên không hoạt động, hãy sao chép url bên dưới và dán vào thanh địa chỉ trong trình duyệt của bạn:", + "actions": { + "open_task": "Open Task", + "open_vikunja": "Open Vikunja", + "open_project": "Open Project", + "open_team": "Open Team", + "download": "Download", + "reset_password": "Reset your password", + "go_to_settings": "Go to settings", + "confirm_email": "Confirm your email address", + "abort_deletion": "Abort the deletion", + "confirm_account_deletion": "Confirm the deletion of my account" + } } } } \ No newline at end of file