Soy miembro de un equipo con más de 20 desarrolladores. Cada desarrollador trabaja en un módulo separado (algo cerca de 10 módulos). En cada módulo podríamos tener al menos 50 formularios CRUD, lo que significa que actualmente tenemos cerca de 500 botones de agregar , guardar , editar , etc.
Sin embargo, debido a que queremos globalizar nuestra aplicación, necesitamos poder traducir textos en nuestra aplicación. Por ejemplo, en todas partes, la palabra complemento debe convertirse en ajouter para los usuarios franceses.
Lo que hemos hecho hasta ahora es que para cada vista en UI o capa de presentación, tenemos un diccionario de pares de traducciones clave / valor. Luego, mientras renderizamos la vista, traducimos los textos y cadenas requeridos usando este diccionario. Sin embargo, este enfoque, hemos llegado a tener algo cerca de 500 complemento en 500 diccionarios. Esto significa que hemos violado al director DRY.
Por otro lado, si centralizamos cadenas comunes, como poner add en un lugar y pedimos a los desarrolladores que lo usen en todas partes, nos encontramos con el problema de no estar seguros de si una cadena ya está definida en el diccionario centralizado o no.
Otra opción podría ser no tener un diccionario de traducción y usar servicios de traducción en línea como Google Translate, Bing Translator, etc.
Otro problema que hemos encontrado es que algunos desarrolladores bajo el estrés de entregar el proyecto a tiempo no pueden recordar las claves de traducción . Por ejemplo, para el texto del botón Agregar, un desarrollador ha usado agregar mientras otro desarrollador ha usado nuevo , etc.
¿Cuál es la mejor práctica o el método más conocido para la globalización y localización de los recursos de cadena de una aplicación?
Respuestas:
Hasta donde sé, hay una buena biblioteca llamada
localeplanet
Localización e Internacionalización en JavaScript. Además, creo que es nativo y no depende de otras bibliotecas (por ejemplo, jQuery)Aquí está el sitio web de la biblioteca: http://www.localeplanet.com/
También mire este artículo de Mozilla, puede encontrar muy buenos métodos y algoritmos para la traducción del lado del cliente: http://blog.mozilla.org/webdev/2011/10/06/i18njs-internationalize-your-javascript-with- a-little-help-from-json-and-the-server /
La parte común de todos esos artículos / bibliotecas es que usan una
i18n
clase y unget
método (de alguna manera también definen un nombre de función más pequeño_
) para recuperar / convertir elkey
avalue
. En mi explicación de lakey
cadena de medios que desea traducir y lavalue
cadena de medios traducida.Luego, solo necesita un documento JSON para almacenar
key
's yvalue
' s.Por ejemplo:
Y aquí el JSON:
Creo que usar las soluciones actuales de bibliotecas populares es un buen enfoque.
fuente
Creo que ya existen muchas soluciones para este problema en lenguajes del lado del servidor como ASP.Net/C#.
He esbozado algunos de los principales aspectos del problema.
Problema : necesitamos cargar datos solo para el idioma deseado
Solución : para este fin, guardamos los datos en archivos separados para cada idioma
ex. res.de.js, res.fr.js, res.en.js, res.js (para el idioma predeterminado)
Problema: los archivos de recursos para cada página deben estar separados para que solo obtengamos los datos que necesitamos
Solución : Podemos usar algunas herramientas que ya existen como https://github.com/rgrove/lazyload
Problema: necesitamos una estructura de pares clave / valor para guardar nuestros datos
Solución : sugiero un objeto javascript en lugar de string / string air. Podemos beneficiarnos de la inteligencia de un IDE
Problema: los miembros generales deben almacenarse en un archivo público y todas las páginas deben acceder a ellos
Solución : para este propósito, creo una carpeta en la raíz de la aplicación web llamada Global_Resources y una carpeta para almacenar el archivo global para cada subcarpeta que llamamos 'Local_Resources'
Problema: cada miembro de subsistemas / subcarpetas / módulos debe anular a los miembros de Global_Resources en su alcance
Solución : consideré un archivo para cada
Estructura de la aplicación
El código correspondiente para los archivos:
Global_Resources / default.js
Global_Resources / default.fr.js
El archivo de recursos para el idioma deseado debe cargarse en la página seleccionada de Global_Resource: este debe ser el primer archivo que se carga en todas las páginas.
UserManagementSystem / Local_Resources / default.js
UserManagementSystem / Local_Resources / default.fr.js
UserManagementSystem / Local_Resources / createUser.js
UserManagementSystem / Local_Resources / createUser.fr.js
archivo manager.js (este archivo debe cargarse al final)
Espero eso ayude :)
fuente
"Create" : {"message": "Create", "description": "text on the button that opens the editor with a blank Foo"}
lo hacen para localizar extensiones de Chrome, por ejemplo. O cree un archivo separado que contenga estos comentarios.jQuery.i18n es un complemento ligero de jQuery para permitir la internacionalización en sus páginas web. Le permite empaquetar cadenas de recursos personalizadas en archivos '.properties', al igual que en los paquetes de recursos de Java. Carga y analiza paquetes de recursos (.properties) según el idioma proporcionado o el idioma informado por el navegador.
para saber más sobre esto, eche un vistazo a ¿Cómo internacionalizar sus páginas con JQuery?
fuente