node - ¿Cómo funciona la internacionalización en JavaScript?
intl js (4)
Algunos de ellos son nativos, el resto está disponible a través de bibliotecas.
Por ejemplo, Datejs es una buena biblioteca internacional de fechas.
Por lo demás, se trata solo de la traducción de idiomas, y JavaScript es nativamente compatible con Unicode (así como con todos los principales navegadores).
Me pregunto cómo tratar la internacionalización en JavaScript. Busqué en Google pero no obtengo respuestas convincentes para:
- ¿JavaScript tiene soporte nativo para la internacionalización?
- ¿Qué es i18n en JavaScript?
- ¿Cómo lidiar con calendarios, monedas, fechas, etc.?
El soporte de localización en navegadores heredados es pobre. Originalmente, esto se debió a las frases en el lenguaje de ECMAScript que se ven así:
Number.prototype.toLocaleString ()
Produce un valor de cadena que representa el valor del Número formateado de acuerdo con las convenciones de la configuración regional actual del entorno de host. Esta función depende de la implementación, y es permisible, pero no recomendable, que devuelva lo mismo que a String .
Cada método de localización definido en la especificación se define como "dependiente de la implementación", lo que genera muchas inconsistencias. En este caso, Chrome Opera y Safari devolverían lo mismo que .toString()
. Firefox e IE devolverán cadenas con formato de localización, e IE incluso incluye un separador de miles (perfecto para cadenas de moneda). Chrome se actualizó recientemente para devolver una cadena separada en miles, aunque sin un decimal fijo.
Para entornos modernos , la especificación de la API de ECMAScript Internationalization , un nuevo estándar que complementa las especificaciones del lenguaje ECMAScript, proporciona una compatibilidad mucho mejor para la comparación de cadenas, el formato de números y el formato de fecha y hora; también corrige las funciones correspondientes en la especificación de idioma. Una introducción se puede encontrar here . Las implementaciones están disponibles en:
- Chrome 24
- Firefox 29
- Internet Explorer 11
- Opera 15
También hay una implementación de compatibilidad, Intl.js , que proporcionará la API en entornos donde todavía no existe.
Determinar el idioma preferido del usuario sigue siendo un problema, ya que no hay especificaciones para obtener el idioma actual. Cada navegador implementa un método para obtener una cadena de idioma, pero esto podría basarse en el idioma del sistema operativo del usuario o simplemente en el idioma del navegador:
// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;
Una buena solución para esto es volcar el encabezado Accept-Language del servidor al cliente. Si tiene el formato de JavaScript, puede pasarse a los constructores de la API de internacionalización, que seleccionará automáticamente la mejor configuración regional (o la primera compatible).
En resumen, usted debe realizar una gran parte del trabajo usted mismo, o usar un here , porque no puede confiar en que el navegador lo haga por usted.
Varias bibliotecas y complementos para localización:
Mantenido por una comunidad abierta (sin orden):
- Intl.js : una implementación de compatibilidad de la API de internacionalización
- i18next ( home ) para i18n (incluido el plugin jquery, traducción ui, ...)
- moment.js ( home ) para las fechas
- numbro.js ( home ) (era numeral.js ( home )) para números y monedas
- l10n.js ( home )
- L10ns ( inicio ) para el flujo de trabajo i18n y el formato complejo de cadenas
- jQuery Localization (plugin) ( home )
- Soporte de YUI Internationalization
- jquery.i18Now para las fechas
- browser-i18n con soporte para la pluralización
- counterpart está inspirada en la famosa gema I18n de Ruby
- jQuery Globalize La propia biblioteca i18n de jQuery
- js-lingui - Implementación de MessageFormat para JS (ES2016) y React
- Otros:
- here
- requirejs-i18n Define un paquete I18N con RequireJS.
Siéntase libre de agregar / editar.
Mozilla lanzó recientemente el increíble L20n o localización 2.0. En sus propias palabras L20n es
un lenguaje de scripting de fuente abierta y localización específica usado para procesar género, plurales, conjugaciones y la mayoría de los otros elementos estrafalarios del lenguaje natural.
Su implementación de js está en el repositorio github L20n.
También puede probar con otra biblioteca: https://github.com/wikimedia/jquery.i18n .
Además de la sustitución de parámetros y múltiples formas plurales, tiene soporte para el género, una característica bastante única de las reglas gramaticales personalizadas que necesitan algunos idiomas.