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.
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
* * *
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:
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.
Abrimos el terminal Git y ejecutamos lo siguiente:
git clone https://github.com/wikimedia/jquery.i18n.git
Se puede descargar como un archivo zip desde la p谩gina oficial de GitHub.
Vamos a la carpeta src,
y copiamos los siguientes archivos a la carpeta jquery.i18n
(excepto languages
):
Vamos a la carpeta libs/ CLDRPLuralRuleParser /src, y copiamos el siguiente archivo en la carpeta jquery.i18n
:
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.
Crearemos una carpeta languages
en el mismo directorio, donde luego meteremos los archivos de los diferentes idiomas.
La carpeta jquery.i18n
deber铆a contener los siguientes archivos:
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:
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.
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.
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>
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
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-hello
y message-goodbye
.
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>
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"
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 PLURAL
no 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."
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"
驴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!