¿Cómo funciona la internacionalización en JavaScript?

143

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.?

Ya he leído Internacionalización dentro de JavaScript .

rajakvk
fuente
Microsoft ha lanzado recientemente un complemento de globalización jquery. Los detalles están aquí
Adeel

Respuestas:

161

El soporte de localización en navegadores heredados es deficiente. Originalmente, esto se debió a frases en la ECMAScriptespecificación del lenguaje 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 host. Esta función depende de la implementación, y es permisible, pero no recomendable, que devuelva lo mismo que toString .

Cada método de localización definido en la especificación se define como "dependiente de la implementación", lo que resulta en muchas inconsistencias. En este caso, Chrome Opera y Safari devolverían lo mismo que .toString(). Firefox e IE devolverán cadenas con formato local, e IE incluso incluye un separador de mil (perfecto para cadenas de divisas). Chrome se actualizó recientemente para devolver una cadena separada por miles, aunque sin un decimal fijo.

Para entornos modernos , la especificación de API de internacionalización ECMAScript , un nuevo estándar que complementa la especificación del lenguaje ECMAScript, proporciona un soporte 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 aquí . Las implementaciones están disponibles en:

  • Cromo 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 aún 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 solo 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 se formatea como JavaScript, se puede pasar a los constructores de API de internacionalización, que elegirán automáticamente la mejor configuración regional (o la primera admitida).

En resumen, debe realizar una gran parte del trabajo usted mismo o utilizar un marco / biblioteca , porque no puede confiar en que el navegador lo haga por usted.

Varias bibliotecas y complementos para localización:

  • Otros:

Siéntase libre de agregar / editar.

Andy E
fuente
13
Gracias a todas las personas que contribuyeron; Nunca hubiera pensado que podría aprender algo leyendo mis viejas respuestas. Me alegra ver la actualización de la especificación de API de internacionalización allí, eso es realmente increíble y solo tengo que probarlo en Chrome.
Andy E
1
Gracias por la excelente compilación. En una nota positiva, parece que Mozilla podría enviar un toLocaleString moderna () pronto - posiblemente FF28: bugzilla.mozilla.org/show_bug.cgi?id=769871
Chris Adams
1
i18next.com ahora viene con una administración de traducción basada en locize.com superior ; esto podría ser una gran victoria si necesita resolver el proceso de traducción completo, no solo instrumentar su código para i18n. Plus tiene una buena función de editor de contexto ...
jamuhl
12

Mozilla lanzó recientemente el impresionante L20n o localización 2.0. En sus propias palabras, L20n es

un lenguaje de script de código abierto, específico de localización utilizado para procesar género, plurales, conjugaciones y la mayoría de los otros elementos extravagantes del lenguaje natural.

Su implementación js está en el repositorio github L20n.

fresnos
fuente
He comenzado un proyecto que necesita localización y hemos decidido usar L20n también;). Así que escribí una primera versión de un L20n Plugin para RequireJS ( github.com/fernandogmar/L20n-RequireJS ) en caso de que use RequireJS, espero que sea útil para usted también. Cualquier sugerencia será bienvenida.
Fernando Gm
0

Algunos son nativos, el resto está disponible a través de bibliotecas.

Por ejemplo, Datejs es una buena biblioteca de fechas internacionales.

Por lo demás, se trata solo de traducción de idiomas, y JavaScript es compatible de forma nativa con Unicode (así como con todos los principales navegadores).

Luca Matteis
fuente
0

También puede probar con otra biblioteca: https://github.com/wikimedia/jquery.i18n .

Además del reemplazo de parámetros y las múltiples formas plurales, admite el género, una característica bastante única de las reglas gramaticales personalizadas que algunos idiomas necesitan.

Amir E. Aharoni
fuente