Localizaci贸n de JavaScript con jQuery.i18n

Translation into Spanish of an interesting article by Wai Foong, senior AI engineer and content writer specialized in NLP, data science, programming and machine learning.

JavaScriptlocalizacion de softwaretranslation into spanish
9 August, 2022 l10n your website with JavaScript framework jQuery.i18n
9 August, 2022 l10n your website with JavaScript framework jQuery.i18n

A free translation by Chema, a Spain-based translator specializing in English to Spanish software translations

An original text written by Wai Foong, originally published in
https://betterprogramming.pub/how-to-do-javascript-localization-with-jquery-i18n-1320ff5d7a4e

* * *

Una biblioteca de internacionalizaci贸n de JavaScript basada en jQuery

Este art铆culo trata sobre los pasos necesarios para localizar una p谩gina web a trav茅s de un framework de JavaScript llamado jQuery.i18n. Seg煤n lo que dice su p谩gina de GitHub:

jQuery.i18n es una biblioteca de internacionalizaci贸n de JavaScript basada en jQuery. Te ayuda a internacionalizar tus aplicaciones web de forma sencilla.

Este es un proyecto del equipo de ingenier铆a de idiomas de la fundaci贸n Wikimedia y se utiliza en algunos de sus proyectos, como Universal Language Selector.

La biblioteca jquery.i18n utiliza un formato de archivo de localizaci贸n basado en JSON llamado “banana”, que se utiliza como formato de archivo de localizaci贸n para MediaWiki y otros proyectos.

Echemos un vistazo al siguiente ejemplo para saber m谩s sobre c贸mo localizar el contenido de una aplicaci贸n web sin que se tenga que volver a cargar.

Hay cuatro apartados en este art铆culo:

  1. Configuraci贸n
  2. Formato de archivo de mensaje
  3. Uso principal
  4. Conclusi贸n

1. Configuraci贸n

Crearemos una carpeta en el directorio ra铆z de nuestra aplicaci贸n web, y la llamaremosjquery.i18n. All铆 incluiremos luego todos los archivos JavaScript necesarios. Podemos hacerlo de varias maneras: se pueden clonar los archivos git o simplemente guardar los archivos necesarios uno por uno desde la carpeta GitHub.

Clonar (m茅todo 1)

Abrimos el terminal Git y ejecutamos lo siguiente:

git clone https://github.com/wikimedia/jquery.i18n.git

Descargar zip (m茅todo 2)

Se puede descargar como un archivo zip desde la p谩gina oficial de GitHub.

Archivos JavaScript i18n

Vamos a la carpeta src, y copiamos los siguientes archivos a la carpeta jquery.i18n (excepto languages):

  1. jquery.i18n.emitter.bidi.js
  2. jquery.i18n.emitter.js
  3. jquery.i18n.fallbacks.js
  4. jquery.i18n.js
  5. jquery.i18n.language.js
  6. jquery.i18n.messagestore.js
  7. jquery.i18n.parser.js

CLDRPluralRuleParser

Vamos a la carpeta libs/ CLDRPLuralRuleParser /src, y copiamos el siguiente archivo en la carpeta jquery.i18n:

  1. CLDRPluralRuleParser.js

jQuery

Esta biblioteca se basa en jQuery y se recomienda utilizar su 煤ltima versi贸n. Iremos al siguiente enlace y descargaremos la versi贸n que queramos. Yo usar茅 la versi贸n minificada 3.4.1.

Archivos de idiomas

Crearemos una carpeta languages en el mismo directorio, donde luego meteremos los archivos de los diferentes idiomas.

La carpeta jquery.i18ndeber铆a contener los siguientes archivos:

2. Formato de archivo de mensaje

Todos los archivos de idioma se basar谩n en el formato de archivo JSON. Se recomienda utilizar el c贸digo de idioma en el nombre de cada archivo de idioma o de configuraci贸n regional. Por ejemplo:

  • Ingl茅s: en.json
  • Japon茅s: ja.json
  • Chino: zh.json

Vamos a crear un archivo JSON simple usando la siguiente plantilla:

{
"@metadata": {
"authors": [
"Wai Foong"
],
"last-updated": "2019-10-10",
"locale": "en",
"other-metadata": "sample json format"
},
"appname-title": "Javascript Localization via jQuery.i18n",
"appname-sub-title": "A jQuery based Javascript internationalization library.",
"appname-introduction": "Introduction"
}

La etiqueta de metadatos se utiliza para almacenar datos que no son mensajes y que sirven como referencias o informaci贸n de lectura. La p谩gina oficial recomienda lo siguiente:

Los mensajes son pares clave-valor. Es aconsejable prefijar las claves como appname para que los mensajes sean 煤nicos. Es el espacio donde pondremos el nombre para indicar las claves del mensaje. Tambi茅n es recomendable separar las claves con guiones, todo en min煤sculas.

El archivo debe ser un JSON v谩lido. Se tiene que evitar el uso de comillas simples cuando se est茅 trabajando con pares clave-valor. Puedes consultar m谩s ejemplos de archivos JSON v谩lidos en este repositorio.

3. Uso principal

La localizaci贸n se puede realizar f谩cilmente utilizando el c贸digo JavaScript personalizado o la API de datos definida a trav茅s de la etiqueta HTML.

Puesta en marcha

Debemos vincular los archivos JavaScript a la p谩gina HTML de la aplicaci贸n web. Este es un ejemplo de c贸mo lo hice yo en mi proyecto.

<script src="path/jquery.i18n/jquery-3.4.1.min.js"></script>
<script src="path/jquery.i18n/CLDRPluralRuleParser.js"></script>
<script src="path/jquery.i18n/jquery.i18n.js"></script>
<script src="path/jquery.i18n/jquery.i18n.messagestore.js"></script>
<script src="path/jquery.i18n/jquery.i18n.fallbacks.js"></script>
<script src="path/jquery.i18n/jquery.i18n.language.js"></script>
<script src="path/jquery.i18n/jquery.i18n.parser.js"></script>
<script src="path/jquery.i18n/jquery.i18n.emitter.js"></script>
<script src="path/jquery.i18n/jquery.i18n.emitter.bidi.js"></script>

Locale

En primer lugar, deberemos definir la configuraci贸n regional, ya que el mensaje que se va a mostrar se basar谩 en este par谩metro. Se puede definir f谩cilmente usando este c贸digo:

$.i18n( { 
locale: 'en' // Locale is English
});

Si no hemos definido la configuraci贸n regional, el framework se basar谩 en el c贸digo de idioma proporcionado por la etiqueta HTML.

<html lang="es">

驴Y si ninguno de estos dos se especifica? Lo 煤ltimo que podemos hacer es utilizar la configuraci贸n regional que introduce el propio navegador. Podremos cambiar la configuraci贸n regional con la siguiente funci贸n:

 $.i18n().locale = 'ja'; //Switching locale to Japanese 

Carga de archivos

Hay bastantes formas de cargar archivos de idioma en formato JSON. Se pueden cargar por partes, pero la forma m谩s f谩cil de hacerlo es desde una URL externa, de la siguiente manera:

$.i18n().load( {
en: {
'message-hello': 'Hello World',
'message-goodbye': 'Good bye' },
ja: 'i18n/messages-ja.json', // Messages for Japanese
zh: 'i18n/messages-zh.json' // Messages for Chinese
} );

Es importante acordarse de editar el archivo de idioma y agregarle message-hellomessage-goodbye.

API de datos

El c贸digo b谩sico para mostrar el mensaje es el siguiente:

 <li data-i18n="message-hello"></li> 

Para mostrarlo sin c贸digo JavaScript, debemos agregarle el atributo data-i18n con un valor que act煤e como clave de mensaje.

<li data-i18n="mensaje-hola"></li>

Podemos especificar un texto alternativo en caso de que message-hello no aparezca como clave en los archivos JSON que hemos cargado.

<li data-i18n="message-hello">Fallback text here!</li> 

Marcadores de posici贸n

Los mensajes pueden tener marcadores de posici贸n, que se representan mediante el signo del d贸lar (por ejemplo, $1, $2, $3, etc.). Ser谩n reemplazados en el momento de la ejecuci贸n.

 var message = "Welcome to Medium, $1";
$.i18n(message, 'Wai Foong'); // "Welcome to Medium, Wai Foong"

Podemos especificar m谩s de un marcador de posici贸n introduciendo m谩s par谩metros en la funci贸n.

 var message = "Welcome to $1, $2";
$.i18n(message, 'Medium', 'Wai Foong'); // "Welcome to Medium, Wai Foong"

Plurales

Este framework聽 admite formas plurales en el mensaje a trav茅s de la siguiente f贸rmula: {{PLURAL:$1|pluralform1|pluralform2|...}}

Hay que tener en cuenta que PLURALno distingue entre may煤sculas y min煤sculas. Todas las formas plurales se pueden indicar en la f贸rmula anterior, separadas por un s铆mbolo de barra vertical.

Las reglas para cada idioma se definen en el archivo CLDRPluralRuleParser.js. El siguiente es un ejemplo de c贸mo puede mostrar diferentes mensajes seg煤n el recuento de elementos:

var message = 'Box has {{PLURAL:$1|one egg|$1 eggs|12=a dozen eggs}}.';
$.i18n(message, 1); // "Box has one egg."
$.i18n(message, 6); // "Box has 6 eggs."
$.i18n(message, 12 ); // "Box has a dozen eggs."

G茅nero

Las formas para el g茅nero son similares a las formas para los plurales y se pueden usar para mostrar un mensaje basado en el g茅nero del contexto:

 var message = "$1 edited {{GENDER:$2|his|her}} article";
$.i18n(message, 'Amy', 'female' ); "Amy edited her article"
$.i18n(message, 'Bob', 'male' ); "Bob edited his article"

4. Conclusi贸n

驴Qu茅 hemos aprendido? Comenzamos con una introducci贸n b谩sica a la biblioteca de internacionalizaci贸n y luego continuamos explicando c贸mo configurar y crear los archivos y carpetas necesarios.

Despu茅s aprendimos sobre el formato de mensaje que se necesita para crear cada archivo de idioma. Debe ser un archivo con formato JSON v谩lido y se recomienda mucho ponerle al nombre el c贸digo de idioma.

Finalmente, hablamos de las f贸rmulas, el uso principal y las formas adecuadas de utilizar esta biblioteca de internacionalizaci贸n, que abarca unas funcionalidades muy 煤tiles para trabajar luego con localizaci贸n.

Gracias por leer el art铆culo, 隆espero verte de nuevo en el pr贸ximo! 隆Que tengas un buen d铆a!

Referencias

  1. https://github.com/wikimedia/jquery.i18n
  2. https://phrase.com/blog/posts/step-step-guide-javascript-localization/
  3. https://thottingal.in/projects/js/jquery.i18n/demo/
  4. https://github.com/wikimedia/mediawiki/tree/master/languages/i18n
Valora este art铆culo