From 50024b2c3adbb03d65945305aefa11e98d553229 Mon Sep 17 00:00:00 2001 From: Roberto Fontanarosa Date: Fri, 21 Nov 2025 13:05:38 +0100 Subject: [PATCH 1/4] Portuguese and Spanish translation --- firebase.json | 8 ++ web/angular.json | 18 ++++ web/src/locale/messages.es.json | 150 ++++++++++++++++++++++++++++++++ web/src/locale/messages.fr.json | 2 +- web/src/locale/messages.json | 2 +- web/src/locale/messages.pt.json | 150 ++++++++++++++++++++++++++++++++ web/src/locale/messages.vi.json | 2 +- 7 files changed, 329 insertions(+), 3 deletions(-) create mode 100644 web/src/locale/messages.es.json create mode 100644 web/src/locale/messages.pt.json diff --git a/firebase.json b/firebase.json index e413d0cb8..d11627a71 100644 --- a/firebase.json +++ b/firebase.json @@ -29,10 +29,18 @@ "source": "/en{,/**}", "destination": "/en/index.html" }, + { + "source": "/es{,/**}", + "destination": "/es/index.html" + }, { "source": "/fr{,/**}", "destination": "/fr/index.html" }, + { + "source": "/pt{,/**}", + "destination": "/pt/index.html" + }, { "source": "/vi{,/**}", "destination": "/vi/index.html" diff --git a/web/angular.json b/web/angular.json index 0cc929014..2e2515f5f 100644 --- a/web/angular.json +++ b/web/angular.json @@ -12,9 +12,15 @@ "i18n": { "sourceLocale": "en", "locales": { + "es": { + "translation": "src/locale/messages.es.json" + }, "fr": { "translation": "src/locale/messages.fr.json" }, + "pt": { + "translation": "src/locale/messages.pt.json" + }, "vi": { "translation": "src/locale/messages.vi.json" } @@ -102,9 +108,15 @@ "en": { "localize": ["en"] }, + "es": { + "localize": ["es"] + }, "fr": { "localize": ["fr"] }, + "pt": { + "localize": ["pt"] + }, "vi": { "localize": ["vi"] } @@ -125,9 +137,15 @@ "prod": { "buildTarget": "web:build:prod,en" }, + "es": { + "buildTarget": "web:build:dev,es" + }, "fr": { "buildTarget": "web:build:dev,fr" }, + "pt": { + "buildTarget": "web:build:dev,pt" + }, "vi": { "buildTarget": "web:build:dev,vi" } diff --git a/web/src/locale/messages.es.json b/web/src/locale/messages.es.json new file mode 100644 index 000000000..35b3e9423 --- /dev/null +++ b/web/src/locale/messages.es.json @@ -0,0 +1,150 @@ +{ + "locale": "es", + "translations": { + "app.labels.copyLink": "Copiar link", + "app.labels.copyQrCode": "Copiar código QR", + "app.texts.generalAccess.restricted": "Solo las personas con acceso pueden abrir con el enlace", + "app.labels.restricted": "Restringido", + "app.texts.generalAccess.unlisted": "Con el código QR o enlace de la encuesta cualquier persona puede recolectar datos para esta encuesta", + "app.labels.unlisted": "No listado", + "app.texts.generalAccess.public": "Todos pueden recopilar datos para esta encuesta", + "app.labels.signOut": " Cerrar sesión ", + "app.labels.manageSurvey": "Administrar encuestas", + "app.labels.cancel": " Cancelar ", + "app.labels.publishChanges": "Publicar cambios", + "app.labels.termsOfService": "Términos de servicio", + "app.labels.about": "Acerca de", + "app.dialogs.importSites.importingSites": "Importando sitios...", + "app.dialogs.importSites.title": "Importar sitios de recolección de datos (.geojson)", + "app.labels.upload": " Subir ", + "app.labels.downloadCsv": "Descargar los datos de este trabajo (CSV)", + "app.labels.downloadGeojson": "Descargar ubicaciones de sitio (GeoJSON)", + "app.cards.freeForm.title": " Recolección de datos libre ", + "app.cards.freeForm.description": " Permitir a los recolectores de datos añadir y recolectar datos sobre nuevas ubicaciones. ", + "app.cards.predefinedSampleSites.title": " Sitios predefinidos ", + "app.cards.predefinedSampleSites.description": " Importe áreas o puntos de interés para los que se deben recolectar datos. ", + "app.labels.import": "Importar", + "app.labels.deleteAll": "Eliminar todo", + "app.labels.roles.owner": "Propietario", + "app.labels.remove": "Eliminar", + "app.cards.share.title": "Usuarios con acceso", + "app.labels.addParticipants": "Añadir participantes", + "app.cards.generalAccess.title": "Acceso general", + "app.cards.dataVisibility.title": "Visibilidad de datos", + "app.cards.dataVisibility.description": "Permitir a los recolectores de datos ver los datos de los demás usuarios", + "app.login.signIn": " Inicie sesión para continuar ", + "app.labels.surveys": "Encuestas", + "app.labels.createSurvey": " Crear encuesta ", + "app.labels.createSurveyDescription": " Definir los trabajos y sitios para los recopiladores de datos ", + "app.labels.all": "Todos", + "app.labels.public": "Público", + "app.labels.required": "Obligatorio", + "app.labels.duplicate": "Duplicar", + "app.labels.delete": "Borrar", + "app.taskEditor.question.label": "Responder a una pregunta", + "app.taskEditor.question.placeholder": "Pregunta", + "app.taskEditor.question.requiredMessage": "Pregunta obligatoria", + "app.taskEditor.takeAPhoto.label": "Tome una foto", + "app.taskEditor.takeAPhoto.placeholder": "Instrucciones", + "app.taskEditor.takeAPhoto.requiredMessage": "Las instrucciones son obligatorias", + "app.taskEditor.pinDrop.label": "Colocar un marcador", + "app.taskEditor.pinDrop.placeholder": "Instrucciones", + "app.taskEditor.pinDrop.requiredMessage": "Las instrucciones son obligatorias", + "app.taskEditor.drawArea.label": "Dibuje o camine el perímetro", + "app.taskEditor.drawArea.placeholder": "Instrucciones", + "app.taskEditor.drawArea.requiredMessage": "Las instrucciones son obligatorias", + "app.taskEditor.captureLocation.label": "Capturar la ubicación", + "app.taskEditor.captureLocation.placeholder": "Instrucciones", + "app.taskEditor.captureLocation.requiredMessage": "Las instrucciones son obligatorias", + "app.taskEditor.instructions.label": "Instrucciones", + "app.taskEditor.instructions.placeholder": "Instrucciones", + "app.taskEditor.instructions.requiredMessage": "Las instrucciones son obligatorias", + "app.texts.whenAdding": " Al añadir un nuevo sitio de recolección de datos... ", + "app.labels.addATask": "Añadir una tarea", + "app.cards.dataSharingTerms.private.description": "Los recolectores de datos deben aceptar compartir datos con los organizadores de la encuesta", + "app.cards.dataSharingTerms.public.description": "Los recolectores de datos renuncian a todos los derechos a los datos recolectados como parte de esta encuesta bajo la licencia C0. Los organizadores de encuestas pueden compartir datos libremente.", + "app.cards.dataSharingTerms.custom.description": "Defina los términos personalizados que los recolectores de datos deben aceptar", + "app.texts.about.section1": "Ground es un proyecto comunitario de código abierto construido por la FAO y Google bajo el Forest Data Partnership con colaboración de SIG, Ecam, y de la comunidad de código abierto.", + "app.texts.about.section2": "¿Qué datos deben ser recolectados?", + "app.texts.about.section3": "Copyright 2024 {$START_LINK}Los autores de Ground {$CLOSE_LINK}", + "app.labels.back": "Volver", + "app.labels.loadingSurvey": "Cargando encuesta...", + "app.labels.goToSurvey": "Ir a la encuesta", + "app.labels.continue": "Continuar", + "app.createSurvey.surveyDetails.progress": "Crear una encuesta", + "app.createSurvey.surveyDetails.title": "Comience a construir su encuesta", + "app.createSurvey.surveyDetails.description": "Proporcione información básica sobre su encuesta", + "app.createSurvey.jobDetails.progress": "Añadir un trabajo", + "app.createSurvey.jobDetails.title": "Añadir un trabajo", + "app.createSurvey.jobDetails.description": "En los siguientes pasos, definirá los datos que deben ser recolectados para ciertos sitios como parte de este trabajo", + "app.createSurvey.defineLois.progress": "Especifique sitios de recolección de datos", + "app.createSurvey.defineLois.title": "¿Dónde deben recolectarse los datos?", + "app.createSurvey.defineLois.description": "Los recolectores de datos completarán las tareas especificadas para estos sitios", + "app.createSurvey.defineTasks.progress": "Definir tareas de recolección de datos", + "app.createSurvey.defineTasks.title": "¿Qué datos deben ser recolectados?", + "app.createSurvey.defineTasks.description": "Se pedirá a los recolectores de datos que completen las siguientes tareas para cada sitio", + "app.createSurvey.defineDataSharingTerms.progress": "Definir términos para compartir los datos", + "app.createSurvey.defineDataSharingTerms.title": "¿Qué términos deben aceptar los recolectores de datos?", + "app.createSurvey.defineDataSharingTerms.description": "Seleccione los términos con los que los recolectores de datos deben estar de acuerdo antes de comenzar", + "app.createSurvey.shareSurvey.progress": "Comparta su encuesta", + "app.createSurvey.shareSurvey.title": "Comparta su encuesta", + "app.labels.customizeAgreement": "Personalizar el acuerdo", + "app.texts.customAgreement": " Crear un acuerdo personalizado que se mostrará a los recolectores de datos antes de que puedan recolectar datos. Los recolectores de datos deben aceptar los términos de este acuerdo. ", + "app.forms.placeholders.customAgreement": "Introduzca los términos de su acuerdo personalizado...", + "app.cards.dataSharingTerms.private.title": "Privado", + "app.cards.dataSharingTerms.public.title": "Público", + "app.cards.dataSharingTerms.custom.title": "Personalizar", + "app.forms.labels.jobName": "Nombre del trabajo", + "app.forms.placeholders.jobName": "Ej. Áreas de producción del mapa", + "app.labels.job": "Trabajo", + "app.forms.labels.surveyName": "Nombre de la encuesta", + "app.forms.placeholders.surveyName": "Ej. Encuesta sobre agricultura regenerativa", + "app.forms.labels.surveyDescription": "Descripción", + "app.forms.placeholders.surveyDescription": "Ej. Auto reporte de actividades de agricultura regenerativa impulsadas por la comunidad", + "app.cards.surveyDetails.title": "Nombre y descripción de la encuesta", + "app.cards.dataSharingAgreement.title": "Acuerdo de compartición de datos", + "app.labels.customTerms": "Términos personalizados", + "app.labels.copySurvey": "Copy survey", + "app.cards.copySurvey.title": "Copy survey", + "app.cards.copySurvey.description": "Copies jobs and tasks in this survey. Data collection sites and submission data are not copied.", + "app.labels.deleteSurvey": "Eliminar encuesta", + "app.cards.deleteSurvey.title": "Eliminar encuesta", + "app.cards.deleteSurvey.description": "Eliminar permanentemente la encuesta y los datos asociados", + "app.labels.tasks": "Tareas", + "app.labels.sites": "Sitios", + "app.editSurvey.surveyDetails.title": " Detalles de la encuesta ", + "app.editSurvey.sharing.title": " Compartir ", + "app.labels.jobs": "Tareas", + "app.labels.rename": " Renombrar ", + "app.dialogs.addJob.title": "Añadir nuevo trabajo", + "app.labels.create": "Crear", + "app.dialogs.renameJob.title": "Renombrar trabajo", + "app.dialogs.unpublishedChanges.title": "Cambios no publicados", + "app.dialogs.unpublishedChanges.content": "Si abandona esta página, los cambios que haya hecho a esta encuesta no serán publicados. ¿Está seguro de que quiere continuar?", + "app.labels.goBack": "Volver", + "app.dialogs.copySurvey.title": "Copy survey", + "app.dialogs.copySurvey.content": "This survey and all its associated jobs will be copied. Data collection sites and submission data won't be included in the copy.", + "app.dialogs.deleteJob.title": "Eliminar trabajo", + "app.dialogs.deleteJob.content": "Este trabajo y todos sus datos asociados se eliminarán. Esta operación no se puede deshacer. ¿Está seguro?", + "app.labels.confirm": "Confirmar", + "app.dialogs.deleteLois.title": "Eliminar sitios predefinidos", + "app.dialogs.deleteLois.content": "Todos los sitios de recolección de datos predefinidos y sus datos asociados serán eliminados inmediatamente de forma permanente. Esta acción no se puede deshacer.", + "app.dialogs.deleteOption.title": "Eliminar opción", + "app.dialogs.deleteOption.content": "¿Está seguro que desea eliminar esta encuesta? Todos los datos asociados se perderán. Esto no se puede deshacer.", + "app.dialogs.deleteSurvey.title": "Eliminar encuesta", + "app.dialogs.deleteSurvey.content": "¿Está seguro que desea eliminar esta encuesta? Todos los datos asociados se perderán. Esto no se puede deshacer.", + "app.dialogs.disableFreeForm.title": "¿Deshabilitar la recolección de datos de forma abierta?", + "app.dialogs.disableFreeForm.content": "El recolector de datos ya no podrá añadir nuevos sitios para este trabajo. Los datos sólo se recolectarán para los sitios existentes.", + "app.dialogs.invalidSurvey.title": "Corregir problemas con la encuesta", + "app.dialogs.invalidSurvey.content": "Para publicar los cambios, corrija cualquier problema pendiente en su encuesta.", + "app.dialogs.surveyCreationDenied.title": "Registration required", + "app.dialogs.surveyCreationDenied.content": "You must register for an account to create a new survey. Click \"Continue\" to be redirected to the registration form.", + "app.error.generic": "Vaya, algo ha salido mal", + "app.error.accessDenied": "Acceso denegado", + "app.error.clickHereToRegister": " Haga clic aquí para registrarse ", + "app.labels.agreeWithTermsOfService": " He leído y estoy de acuerdo con los términos del servicio. ", + "app.labels.roles.dataCollector": "Recolector de datos", + "app.labels.roles.surveyOrganizer": "Organizador de la encuesta", + "app.labels.roles.viewer": "Observador" + } +} \ No newline at end of file diff --git a/web/src/locale/messages.fr.json b/web/src/locale/messages.fr.json index 6144b1e4f..fa1f01281 100644 --- a/web/src/locale/messages.fr.json +++ b/web/src/locale/messages.fr.json @@ -8,7 +8,6 @@ "app.texts.generalAccess.unlisted": "Toute personne disposant du QR code ou du lien de l'enquête peut collecter des données pour cette enquête", "app.labels.unlisted": "Non répertorié", "app.texts.generalAccess.public": "Tout le monde peut collecter des données pour cette enquête", - "app.labels.public": "Public", "app.labels.signOut": "Se déconnecter", "app.labels.manageSurvey": "Gérer l'enquête", "app.labels.cancel": "Annuler", @@ -38,6 +37,7 @@ "app.labels.createSurvey": "Créer une enquête", "app.labels.createSurveyDescription": "Définir les missions et les sites pour les collecteurs de données", "app.labels.all": "Tous", + "app.labels.public": "Public", "app.labels.required": "Requis", "app.labels.duplicate": "Dupliquer", "app.labels.delete": "Supprimer", diff --git a/web/src/locale/messages.json b/web/src/locale/messages.json index 9502e033f..871e2ff4f 100644 --- a/web/src/locale/messages.json +++ b/web/src/locale/messages.json @@ -8,7 +8,6 @@ "app.texts.generalAccess.unlisted": "Everyone with the survey QR code or link can collect data for this survey", "app.labels.unlisted": "Unlisted", "app.texts.generalAccess.public": "Everyone can collect data for this survey", - "app.labels.public": "Public", "app.labels.signOut": " Sign out ", "app.labels.manageSurvey": "Manage survey", "app.labels.cancel": " Cancel ", @@ -38,6 +37,7 @@ "app.labels.createSurvey": " Create survey ", "app.labels.createSurveyDescription": " Define jobs and sites for data collectors ", "app.labels.all": "All", + "app.labels.public": "Public", "app.labels.required": "Required", "app.labels.duplicate": "Duplicate", "app.labels.delete": "Delete", diff --git a/web/src/locale/messages.pt.json b/web/src/locale/messages.pt.json new file mode 100644 index 000000000..72ea1cda3 --- /dev/null +++ b/web/src/locale/messages.pt.json @@ -0,0 +1,150 @@ +{ + "locale": "pt", + "translations": { + "app.labels.copyLink": "Copiar ligação", + "app.labels.copyQrCode": "Copiar código QR", + "app.texts.generalAccess.restricted": "Apenas pessoas com acesso podem abrir através da ligação", + "app.labels.restricted": "Restrito", + "app.texts.generalAccess.unlisted": "Qualquer pessoa com o código QR ou a ligação do inquérito pode coletar dados", + "app.labels.unlisted": "Não listado", + "app.texts.generalAccess.public": "Qualquer pessoa pode coletar dados para este inquérito", + "app.labels.signOut": " Terminar sessão ", + "app.labels.manageSurvey": "Gerir inquérito", + "app.labels.cancel": " Cancelar ", + "app.labels.publishChanges": "Publicar alterações", + "app.labels.termsOfService": "Termos de serviço", + "app.labels.about": "Sobre", + "app.dialogs.importSites.importingSites": "Importando sítios...", + "app.dialogs.importSites.title": "Importar sítios de coleção de dados (.geojson)", + "app.labels.upload": " Carregar ", + "app.labels.downloadCsv": "Descarregar dados da tarefa (CSV)", + "app.labels.downloadGeojson": "Descarregar localizações dos sítios (GeoJSON)", + "app.cards.freeForm.title": " Recolha de dados de forma livre ", + "app.cards.freeForm.description": " Permitir que os coletores de dados adicionem e coletem dados sobre novos locais. ", + "app.cards.predefinedSampleSites.title": " Locais de amostragem predefinidos ", + "app.cards.predefinedSampleSites.description": " Importar áreas ou pontos de interesse para os quais os dados devem ser recolhidos. ", + "app.labels.import": "Importar", + "app.labels.deleteAll": "Eliminar tudo", + "app.labels.roles.owner": "Proprietário", + "app.labels.remove": "Remover", + "app.cards.share.title": "Pessoas com acesso", + "app.labels.addParticipants": "Adicionar participantes", + "app.cards.generalAccess.title": "Acesso geral", + "app.cards.dataVisibility.title": "Visibilidade dos dados", + "app.cards.dataVisibility.description": "Permitir que os coletores de dados vejam os dados uns dos outros", + "app.login.signIn": " Iniciar sessão para continuar ", + "app.labels.surveys": "Inquéritos", + "app.labels.createSurvey": " Criar inquérito ", + "app.labels.createSurveyDescription": " Definir tarefas e locais para os coletores de dados ", + "app.labels.all": "Todos", + "app.labels.public": "Público", + "app.labels.required": "Obrigatório", + "app.labels.duplicate": "Duplicar", + "app.labels.delete": "Eliminar", + "app.taskEditor.question.label": "Responder a uma pergunta", + "app.taskEditor.question.placeholder": "Pergunta", + "app.taskEditor.question.requiredMessage": "A pergunta é obrigatória", + "app.taskEditor.takeAPhoto.label": "Tirar uma foto", + "app.taskEditor.takeAPhoto.placeholder": "Instruções", + "app.taskEditor.takeAPhoto.requiredMessage": "As instruções são obrigatórias", + "app.taskEditor.pinDrop.label": "Marcar um ponto", + "app.taskEditor.pinDrop.placeholder": "Instruções", + "app.taskEditor.pinDrop.requiredMessage": "As instruções são obrigatórias", + "app.taskEditor.drawArea.label": "Desenhar ou percorrer o perímetro", + "app.taskEditor.drawArea.placeholder": "Instruções", + "app.taskEditor.drawArea.requiredMessage": "As instruções são obrigatórias", + "app.taskEditor.captureLocation.label": "Capturar a localização", + "app.taskEditor.captureLocation.placeholder": "Instruções", + "app.taskEditor.captureLocation.requiredMessage": "As instruções são obrigatórias", + "app.taskEditor.instructions.label": "Instruções", + "app.taskEditor.instructions.placeholder": "Instruções", + "app.taskEditor.instructions.requiredMessage": "As instruções são obrigatórias", + "app.texts.whenAdding": " Ao adicionar um novo local de recolha... ", + "app.labels.addATask": "Adicionar uma tarefa", + "app.cards.dataSharingTerms.private.description": "Os coletores de dados devem concordar em partilhar os dados com os organizadores do inquérito", + "app.cards.dataSharingTerms.public.description": "Os coletores de dados renunciam a todos os direitos sobre os dados recolhidos como parte deste inquérito, sob a licença CC0. Os organizadores do inquérito podem compartilhar dados livremente.", + "app.cards.dataSharingTerms.custom.description": "Definir termos personalizados que os coletores de dados devem aceitar", + "app.texts.about.section1": "O Ground é um projeto open-source desenvolvido pela Google e pela FAO no âmbito da Forest Data Partnership, com a colaboração da SIG, da Ecam e de contribuidores da comunidade open-source.", + "app.texts.about.section2": "Está licenciado sob a {$START_LINK}Licença Apache, Versão 2.0{$CLOSE_LINK}.", + "app.texts.about.section3": "Copyright 2024 {$START_LINK}Os autores de Ground{$CLOSE_LINK}", + "app.labels.back": "Voltar", + "app.labels.loadingSurvey": "A carregar inquérito...", + "app.labels.goToSurvey": "Ir para inquérito", + "app.labels.continue": "Continuar", + "app.createSurvey.surveyDetails.progress": "Criar um inquérito", + "app.createSurvey.surveyDetails.title": "Comece a criar o seu inquérito", + "app.createSurvey.surveyDetails.description": "Forneça algumas informações básicas sobre o seu inquérito", + "app.createSurvey.jobDetails.progress": "Adicionar uma tarefa", + "app.createSurvey.jobDetails.title": "Adicionar uma tarefa", + "app.createSurvey.jobDetails.description": "Nos passos a seguir, irá definir os dados que devem ser coletados em determinados sítios como parte desta tarefa", + "app.createSurvey.defineLois.progress": "Especificar locais de recolha de dados", + "app.createSurvey.defineLois.title": "Onde devem ser recolhidos os dados?", + "app.createSurvey.defineLois.description": "Os coletores de dados irão completar tarefas especificadas para estes sítios", + "app.createSurvey.defineTasks.progress": "Definir tarefas de recolha de dados", + "app.createSurvey.defineTasks.title": "Quais dados devem ser recolhidos?", + "app.createSurvey.defineTasks.description": "Os coletores de dados serão solicitados a completar as seguintes tarefas para cada sítio", + "app.createSurvey.defineDataSharingTerms.progress": "Definir os termos de partilha de dados", + "app.createSurvey.defineDataSharingTerms.title": "Com que termos os coletores de dados devem concordar?", + "app.createSurvey.defineDataSharingTerms.description": "Selecionar os termos com os quais os coletores de dados devem concordar antes de começar", + "app.createSurvey.shareSurvey.progress": "Partilhe o seu inquérito", + "app.createSurvey.shareSurvey.title": "Partilhe o seu inquérito", + "app.labels.customizeAgreement": "Personalizar acordo", + "app.texts.customAgreement": " Crie um acordo personalizado que será apresentado aos coletores de dados antes de poderem recolher dados. Os coletores de dados têm de concordar com os termos deste acordo. ", + "app.forms.placeholders.customAgreement": "Insira os termos do seu acordo personalizado...", + "app.cards.dataSharingTerms.private.title": "Privado", + "app.cards.dataSharingTerms.public.title": "Público", + "app.cards.dataSharingTerms.custom.title": "Personalizado", + "app.forms.labels.jobName": "Nome da tarefa", + "app.forms.placeholders.jobName": "Ex. Mapear áreas de produção", + "app.labels.job": "Tarefa", + "app.forms.labels.surveyName": "Nome do inquérito", + "app.forms.placeholders.surveyName": "Ex. Inquérito sobre agricultura regenerativa", + "app.forms.labels.surveyDescription": "Descrição", + "app.forms.placeholders.surveyDescription": "Ex. Auto-relato de atividades de agricultura regenerativa lideradas pela comunidade", + "app.cards.surveyDetails.title": "Nome e descrição do inquérito", + "app.cards.dataSharingAgreement.title": "Acordo de partilha de dados", + "app.labels.customTerms": "Termos personalizados", + "app.labels.copySurvey": "Copy survey", + "app.cards.copySurvey.title": "Copy survey", + "app.cards.copySurvey.description": "Copies jobs and tasks in this survey. Data collection sites and submission data are not copied.", + "app.labels.deleteSurvey": "Eliminar inquérito", + "app.cards.deleteSurvey.title": "Eliminar inquérito", + "app.cards.deleteSurvey.description": "Eliminar permanentemente o inquérito e os dados associados", + "app.labels.tasks": "Tarefas", + "app.labels.sites": "Locais", + "app.editSurvey.surveyDetails.title": " Detalhes do inquérito ", + "app.editSurvey.sharing.title": " Partilha ", + "app.labels.jobs": "Tarefas", + "app.labels.rename": " Renomear ", + "app.dialogs.addJob.title": "Adicionar nova tarefa", + "app.labels.create": "Criar", + "app.dialogs.renameJob.title": "Renomear tarefa", + "app.dialogs.unpublishedChanges.title": "Alterações não publicadas", + "app.dialogs.unpublishedChanges.content": "Se sair desta página, as alterações feitas neste inquérito não serão publicadas. Tem a certeza de que deseja continuar?", + "app.labels.goBack": "Voltar", + "app.dialogs.copySurvey.title": "Copy survey", + "app.dialogs.copySurvey.content": "This survey and all its associated jobs will be copied. Data collection sites and submission data won't be included in the copy.", + "app.dialogs.deleteJob.title": "Eliminar tarefa", + "app.dialogs.deleteJob.content": "Esta tarefa e todos os dados associados serão apagados. Esta operação é irreversível. Tem a certeza?", + "app.labels.confirm": "Confirmar", + "app.dialogs.deleteLois.title": "Eliminar locais predefinidos", + "app.dialogs.deleteLois.content": "Todos os locais de recolha de dados pré-definidos e os respetivos dados associados serão apagados imediatamente. Esta ação é irreversível.", + "app.dialogs.deleteOption.title": "Eliminar opção", + "app.dialogs.deleteOption.content": "Tem a certeza de que deseja eliminar esta opção? Todos os dados associados serão perdidos. Esta ação é irreversível.", + "app.dialogs.deleteSurvey.title": "Eliminar inquérito", + "app.dialogs.deleteSurvey.content": "Tem a certeza de que deseja eliminar este inquérito? Todos os dados associados serão perdidos. Esta ação é irreversível.", + "app.dialogs.disableFreeForm.title": "Desativar a recolha de dados em formato livre?", + "app.dialogs.disableFreeForm.content": "Quem recolhe dados não poderá adicionar novos locais para esta tarefa. Os dados só poderão ser recolhidos para os locais existentes.", + "app.dialogs.invalidSurvey.title": "Corrigir problemas com o inquérito", + "app.dialogs.invalidSurvey.content": "Para publicar as alterações, corrija quaisquer problemas pendentes no seu inquérito.", + "app.dialogs.surveyCreationDenied.title": "Registration required", + "app.dialogs.surveyCreationDenied.content": "You must register for an account to create a new survey. Click \"Continue\" to be redirected to the registration form.", + "app.error.generic": "Ups, algo correu mal", + "app.error.accessDenied": "Acesso negado", + "app.error.clickHereToRegister": " Clique aqui para se registar ", + "app.labels.agreeWithTermsOfService": " Li e concordo com os termos de serviço. ", + "app.labels.roles.dataCollector": "Coletor de dados", + "app.labels.roles.surveyOrganizer": "Organizador do inquérito", + "app.labels.roles.viewer": "Visualizador" + } +} \ No newline at end of file diff --git a/web/src/locale/messages.vi.json b/web/src/locale/messages.vi.json index afbc3622b..d7cada433 100644 --- a/web/src/locale/messages.vi.json +++ b/web/src/locale/messages.vi.json @@ -8,7 +8,6 @@ "app.texts.generalAccess.unlisted": "Mọi người có mã QR hoặc liên kết khảo sát đều có thể thu thập dữ liệu cho khảo sát này", "app.labels.unlisted": "Không công khai", "app.texts.generalAccess.public": "Mọi người đều có thể thu thập dữ liệu cho khảo sát này", - "app.labels.public": "Công khai", "app.labels.signOut": "Đăng xuất", "app.labels.manageSurvey": "Quản lý khảo sát", "app.labels.cancel": "Hủy", @@ -38,6 +37,7 @@ "app.labels.createSurvey": "Tạo khảo sát", "app.labels.createSurveyDescription": "Xác định công việc và địa điểm cho người thu thập dữ liệu", "app.labels.all": "Tất cả", + "app.labels.public": "Công khai", "app.labels.required": "Bắt buộc", "app.labels.duplicate": "Nhân bản", "app.labels.delete": "Xóa", From 287e9beb4603ad469f4f02f7240b979d53f0ceb7 Mon Sep 17 00:00:00 2001 From: Roberto Fontanarosa Date: Fri, 21 Nov 2025 13:10:06 +0100 Subject: [PATCH 2/4] fixed old default translation string --- .../app/pages/edit-survey/job-dialog/job-dialog.component.ts | 2 +- web/src/locale/messages.es.json | 2 +- web/src/locale/messages.pt.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/src/app/pages/edit-survey/job-dialog/job-dialog.component.ts b/web/src/app/pages/edit-survey/job-dialog/job-dialog.component.ts index 01b00c7a3..9265ffc4a 100644 --- a/web/src/app/pages/edit-survey/job-dialog/job-dialog.component.ts +++ b/web/src/app/pages/edit-survey/job-dialog/job-dialog.component.ts @@ -100,7 +100,7 @@ export const dialogConfigs: Record = { }, [DialogType.SurveyCreationDenied]: { title: $localize`:@@app.dialogs.surveyCreationDenied.title:Registration required`, - content: $localize`:@@app.dialogs.surveyCreationDenied.content:You must register for an account to create a new survey. Click "Continue" to be redirected to the registration form.`, + content: $localize`:@@app.dialogs.surveyCreationDenied.content:You do not have permission to create surveys. Click "Continue" to request access.`, backButtonLabel: $localize`:@@app.labels.goBack:Go back`, continueButtonLabel: $localize`:@@app.labels.continue:Continue`, }, diff --git a/web/src/locale/messages.es.json b/web/src/locale/messages.es.json index 35b3e9423..50dd57413 100644 --- a/web/src/locale/messages.es.json +++ b/web/src/locale/messages.es.json @@ -138,7 +138,7 @@ "app.dialogs.invalidSurvey.title": "Corregir problemas con la encuesta", "app.dialogs.invalidSurvey.content": "Para publicar los cambios, corrija cualquier problema pendiente en su encuesta.", "app.dialogs.surveyCreationDenied.title": "Registration required", - "app.dialogs.surveyCreationDenied.content": "You must register for an account to create a new survey. Click \"Continue\" to be redirected to the registration form.", + "app.dialogs.surveyCreationDenied.content": "You do not have permission to create surveys. Click \"Continue\" to request access.", "app.error.generic": "Vaya, algo ha salido mal", "app.error.accessDenied": "Acceso denegado", "app.error.clickHereToRegister": " Haga clic aquí para registrarse ", diff --git a/web/src/locale/messages.pt.json b/web/src/locale/messages.pt.json index 72ea1cda3..0988e5b00 100644 --- a/web/src/locale/messages.pt.json +++ b/web/src/locale/messages.pt.json @@ -138,7 +138,7 @@ "app.dialogs.invalidSurvey.title": "Corrigir problemas com o inquérito", "app.dialogs.invalidSurvey.content": "Para publicar as alterações, corrija quaisquer problemas pendentes no seu inquérito.", "app.dialogs.surveyCreationDenied.title": "Registration required", - "app.dialogs.surveyCreationDenied.content": "You must register for an account to create a new survey. Click \"Continue\" to be redirected to the registration form.", + "app.dialogs.surveyCreationDenied.content": "You do not have permission to create surveys. Click \"Continue\" to request access.", "app.error.generic": "Ups, algo correu mal", "app.error.accessDenied": "Acesso negado", "app.error.clickHereToRegister": " Clique aqui para se registar ", From 84ce89f946ce76c8d415e408cdd1ea991a27a35c Mon Sep 17 00:00:00 2001 From: Roberto Fontanarosa Date: Fri, 21 Nov 2025 13:14:36 +0100 Subject: [PATCH 3/4] aligned with untranslated strings --- web/src/locale/messages.fr.json | 2 +- web/src/locale/messages.vi.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/locale/messages.fr.json b/web/src/locale/messages.fr.json index fa1f01281..7b15d6667 100644 --- a/web/src/locale/messages.fr.json +++ b/web/src/locale/messages.fr.json @@ -138,7 +138,7 @@ "app.dialogs.invalidSurvey.title": "Corriger les problèmes de l’enquête", "app.dialogs.invalidSurvey.content": "Pour enregistrer et publier les modifications, corrigez les problèmes en suspens dans votre enquête.", "app.dialogs.surveyCreationDenied.title": "Inscription requise", - "app.dialogs.surveyCreationDenied.content": "Vous devez vous inscrire pour créer une nouvelle enquête. Cliquez sur \"Continuer\" pour être redirigé vers le formulaire d'inscription.", + "app.dialogs.surveyCreationDenied.content": "You do not have permission to create surveys. Click \"Continue\" to request access.", "app.error.generic": "Oups, une erreur s'est produite !", "app.error.accessDenied": "Accès refusé", "app.error.clickHereToRegister": "Cliquez ici pour vous inscrire", diff --git a/web/src/locale/messages.vi.json b/web/src/locale/messages.vi.json index d7cada433..d5c706f3e 100644 --- a/web/src/locale/messages.vi.json +++ b/web/src/locale/messages.vi.json @@ -138,7 +138,7 @@ "app.dialogs.invalidSurvey.title": "Sửa các vấn đề trong khảo sát", "app.dialogs.invalidSurvey.content": "Để xuất bản thay đổi, hãy sửa các vấn đề còn tồn đọng trong khảo sát.", "app.dialogs.surveyCreationDenied.title": "Yêu cầu đăng ký", - "app.dialogs.surveyCreationDenied.content": "Bạn phải đăng ký tài khoản để tạo khảo sát mới. Nhấp vào \"Tiếp tục\" để được chuyển hướng đến biểu mẫu đăng ký.", + "app.dialogs.surveyCreationDenied.content": "You do not have permission to create surveys. Click \"Continue\" to request access.", "app.error.generic": "Rất tiếc, đã xảy ra lỗi", "app.error.accessDenied": "Truy cập bị từ chối", "app.error.clickHereToRegister": "Nhấp vào đây để đăng ký", From 3d5a296a7f23ffa29e2282e31773651c63fd2a27 Mon Sep 17 00:00:00 2001 From: Roberto Fontanarosa Date: Tue, 9 Dec 2025 14:26:23 +0100 Subject: [PATCH 4/4] added missing translations --- web/src/locale/messages.es.json | 4 ++++ web/src/locale/messages.pt.json | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/web/src/locale/messages.es.json b/web/src/locale/messages.es.json index 50dd57413..f40d843a2 100644 --- a/web/src/locale/messages.es.json +++ b/web/src/locale/messages.es.json @@ -68,6 +68,10 @@ "app.texts.about.section2": "¿Qué datos deben ser recolectados?", "app.texts.about.section3": "Copyright 2024 {$START_LINK}Los autores de Ground {$CLOSE_LINK}", "app.labels.back": "Volver", + "app.texts.platformNotSupported.iosMessage": "{$START_TAG_STRONG}Platform Not Supported:{$CLOSE_TAG_STRONG} We've detected you're using an iOS device. Currently, {$START_TAG_STRONG}Ground is only available for Android.{$CLOSE_TAG_STRONG}", + "app.texts.launchingGround": "Launching {$START_TAG_STRONG}Ground{$CLOSE_TAG_STRONG}...", + "app.texts.installRedirectMessage": "If it doesn't open automatically, you will be redirected to Google Play to install it.", + "app.labels.googlePlayBadgeAlt": "Get in on Google Play", "app.labels.loadingSurvey": "Cargando encuesta...", "app.labels.goToSurvey": "Ir a la encuesta", "app.labels.continue": "Continuar", diff --git a/web/src/locale/messages.pt.json b/web/src/locale/messages.pt.json index 0988e5b00..b047c905a 100644 --- a/web/src/locale/messages.pt.json +++ b/web/src/locale/messages.pt.json @@ -68,6 +68,10 @@ "app.texts.about.section2": "Está licenciado sob a {$START_LINK}Licença Apache, Versão 2.0{$CLOSE_LINK}.", "app.texts.about.section3": "Copyright 2024 {$START_LINK}Os autores de Ground{$CLOSE_LINK}", "app.labels.back": "Voltar", + "app.texts.platformNotSupported.iosMessage": "{$START_TAG_STRONG}Platform Not Supported:{$CLOSE_TAG_STRONG} We've detected you're using an iOS device. Currently, {$START_TAG_STRONG}Ground is only available for Android.{$CLOSE_TAG_STRONG}", + "app.texts.launchingGround": "Launching {$START_TAG_STRONG}Ground{$CLOSE_TAG_STRONG}...", + "app.texts.installRedirectMessage": "If it doesn't open automatically, you will be redirected to Google Play to install it.", + "app.labels.googlePlayBadgeAlt": "Get in on Google Play", "app.labels.loadingSurvey": "A carregar inquérito...", "app.labels.goToSurvey": "Ir para inquérito", "app.labels.continue": "Continuar",