From 91b4197b047cffada2262822ffb71ef98f8c072c Mon Sep 17 00:00:00 2001 From: vjrj Date: Thu, 21 Dec 2017 11:36:00 +0100 Subject: [PATCH] Updated translations --- imports/api/Users/Users.js | 2 +- imports/api/Utility/server/methods.js | 8 +++++ imports/startup/client/i18n.js | 10 ++++++ imports/startup/common/i18n.js | 10 +++--- public/locales/es/common.json | 45 ++++++++++++++++++++++++++- 5 files changed, 68 insertions(+), 7 deletions(-) diff --git a/imports/api/Users/Users.js b/imports/api/Users/Users.js index 059fe66..486730a 100644 --- a/imports/api/Users/Users.js +++ b/imports/api/Users/Users.js @@ -36,7 +36,7 @@ const schemaUser = new SimpleSchema({ emails: { type: Array, min: 1, - label() { return i18n.t('Lista de emails de contacto'); }, + // label() { return i18n.t('Lista de emails de contacto'); }, // For accounts-password, either emails or username is required, // but not both. // It is OK to make this optional here because the accounts-password diff --git a/imports/api/Utility/server/methods.js b/imports/api/Utility/server/methods.js index 498caae..fc692e9 100644 --- a/imports/api/Utility/server/methods.js +++ b/imports/api/Utility/server/methods.js @@ -1,5 +1,6 @@ import { Meteor } from 'meteor/meteor'; import { check } from 'meteor/check'; +import i18n from 'i18next'; import getPrivateFile from '../../../modules/server/get-private-file'; import parseMarkdown from '../../../modules/parse-markdown'; @@ -8,4 +9,11 @@ Meteor.methods({ check(fileName, String); return parseMarkdown(getPrivateFile(`pages/${fileName}.md`)); }, + 'utility.saveMissingI18n': function saveMissing(key, value) { + check(key, String); + check(value, String); + if (!Meteor.isProduction) { + i18n.t(key, value); + } + } }); diff --git a/imports/startup/client/i18n.js b/imports/startup/client/i18n.js index e2846d1..8e70ffb 100644 --- a/imports/startup/client/i18n.js +++ b/imports/startup/client/i18n.js @@ -1,5 +1,6 @@ /* global CookieConsent Intl */ import i18n from 'i18next'; +import { Meteor } from 'meteor/meteor'; import backend from 'i18next-xhr-backend'; import LngDetector from 'i18next-browser-languagedetector'; import Cache from 'i18next-localstorage-cache'; @@ -48,6 +49,15 @@ i18nOpts.react = { nsMode: 'default' */ }; +const sendMissing = false; +if (sendMissing && !Meteor.isProduction) { + i18nOpts.sendMissing = true; + i18nOpts.sendMissingTo = 'fallback'; + i18nOpts.missingKeyHandler = function miss(lng, ns, key, defaultValue, lngs) { + Meteor.call('utility.saveMissingI18n', key, defaultValue); + }; +} + i18n.use(backend) .use(LngDetector) .use(Cache) diff --git a/imports/startup/common/i18n.js b/imports/startup/common/i18n.js index d54e263..956e3f8 100644 --- a/imports/startup/common/i18n.js +++ b/imports/startup/common/i18n.js @@ -4,7 +4,7 @@ import moment from 'moment'; import es from 'meteor-accounts-t9n/build/es'; import en from 'meteor-accounts-t9n/build/en'; -var backOpts = { +const backOpts = { // path where resources get loaded from loadPath: '/locales/{{lng}}/{{ns}}.json', @@ -15,10 +15,10 @@ var backOpts = { jsonIndent: 2 }; -const forceDebug = false; +const forceDebug = true; const shouldDebug = (forceDebug && !Meteor.isProduction); -var i18nOpts = { +const i18nOpts = { backend: backOpts, lng: 'es', // fallbackLng: 'es', @@ -26,12 +26,12 @@ var i18nOpts = { 'en-US': ['en'], 'en-GB': ['en'], 'pt-BR': ['pt'], - 'default': ['es'] + default: ['es'] }, interpolation: { escapeValue: false, // not needed for react!! formatSeparator: ',', - format: function (value, format, lng) { + format: function f(value, format, lng) { // https://www.i18next.com/formatting.html // console.log(`Value: ${value} with format: ${format} to lang: ${lng}`); if (format === 'uppercase') return value.toUpperCase(); diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 51da188..1266dff 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -137,5 +137,48 @@ "Suscripción añadida": "Suscripción añadida", "Suscripción actualizada": - "Suscripción actualizada" + "Suscripción actualizada", + "Mis zonas": "Mis zonas", + "Nueva zona": "Nueva zona", + "Subscribirme a fuegos en este rádio": "Subscribirme a fuegos en este rádio", + "Créditos": "Créditos", + "Escribe aquí un lugar": "Escribe aquí un lugar", + "Indícanos la posición de la zona a vigilar (por ej. tu pueblo, una calle, etc):": "Indícanos la posición de la zona a vigilar (por ej. tu pueblo, una calle, etc):", + "También puedes seleccionar la zona en el mapa arrastrando el puntero naranja.": "También puedes seleccionar la zona en el mapa arrastrando el puntero naranja.", + "¿A que distancia a la redonda quieres recibir notificaciones?": "¿A que distancia a la redonda quieres recibir notificaciones?", + "Pulsa para activar": "Pulsa para activar", + "Arrastrar para seleccionar otro punto": "Arrastrar para seleccionar otro punto", + "Mapa gris de OpenStreetMap": "Mapa gris de OpenStreetMap", + "Mapa color de OpenStreetMap": "Mapa color de OpenStreetMap", + "Mapa de carreteras de Google": "Mapa de carreteras de Google", + "Mapa de terreno de Google": "Mapa de terreno de Google", + "Mapa de satélite de Google": "Mapa de satélite de Google", + "Zona añadida": "Zona añadida", + "Añadir zona": "Añadir zona", + "Editar": "Editar", + "Suscripciones a alertas de fuegos en zonas de mi interés": "Suscripciones a alertas de fuegos en zonas de mi interés", + "En verde, áreas de las que recibirás alertas de fuegos": "En verde, áreas de las que recibirás alertas de fuegos", + "Terminar": "Terminar", + "Pulsa para borrar": "Pulsa para borrar", + "Pulsa aquí para borrar la zona": "Pulsa aquí para borrar la zona", + "Los fuegos activos se actualizan en tiempo real.": "Los fuegos activos se actualizan en tiempo real.", + "Somos muchos ojos": "Somos muchos ojos", + "Usamos diferentes fuentes de datos para notificarte de fuegos activos en tus zonas de interés": "Usamos diferentes fuentes de datos para notificarte de fuegos activos en tus zonas de interés", + "Usa nuestro bot de Telegram para estar al tanto de los fuegos en tus área": "Usa nuestro bot de Telegram para estar al tanto de los fuegos en tus área", + "Correo electronico": "Correo electronico", + "Recibe nuestras notificaciones de fuegos por correo": "Recibe nuestras notificaciones de fuegos por correo", + "Otros dispositivos": "Otros dispositivos", + "support-us-home": "Estamos desarrollando nuestras herramientas para otros dispositivos. Puedes <1>contribuir a hacerlo posible.", + "Software Libre": "Software Libre", + "dev-with-us-home": "Todo nuestro trabajo es sofware libre. <1>Traductoræs y desarrolladoræs siempre bienvenid@s.", + "Suscríbete a alertas de fuegos": "Suscríbete a alertas de fuegos", + "Gracias por Participar": "Gracias por Participar", + "También puedes seguirnos en la web": "También puedes seguirnos en la web", + "Participar": "Participar", + "Dejarás de recibir notificaciones de fuegos en esa área ¿Estás seguro/a? ": "Dejarás de recibir notificaciones de fuegos en esa área ¿Estás seguro/a? ", + "Sí": "Sí", + "No": "No", + "Sobre los datos y imágenes usados": "Sobre los datos y imágenes usados", + "Términos de Servicio": "Términos de Servicio", + "Política de Privacidad": "Política de Privacidad" }