Come funziona l'internazionalizzazione in JavaScript?


143

Mi chiedo come gestire l'internazionalizzazione in JavaScript. Ho cercato su Google ma non ricevo risposte convincenti per:

  • JavaScript ha il supporto nativo per l'internazionalizzazione?
  • Che cos'è i18n in JavaScript?
  • Come gestire calendari, valute, date, ecc.?

Ho già letto l' internazionalizzazione all'interno di JavaScript .


Microsoft ha recentemente rilasciato un plug-in di globalizzazione jquery. I dettagli sono qui
Adeel,

Risposte:


161

Il supporto di localizzazione nei browser legacy è scadente. Inizialmente, ciò era dovuto a frasi nelle ECMAScriptspecifiche della lingua che assomigliavano a questo:

Number.prototype.toLocaleString ()
Produce un valore stringa che rappresenta il valore del Numero formattato in base alle convenzioni della locale corrente dell'ambiente host. Questa funzione dipende dall'implementazione ed è consentita, ma non incoraggiata, per restituire la stessa cosa a String .

Ogni metodo di localizzazione definito nelle specifiche è definito "dipendente dall'implementazione", il che comporta molte incoerenze. In questo caso, Chrome Opera e Safari restituirebbero la stessa cosa di .toString(). Firefox e IE restituiranno stringhe formattate in locale e IE include persino un separatore di migliaia (perfetto per le stringhe di valuta). Chrome è stato recentemente aggiornato per restituire una stringa separata da migliaia, sebbene senza decimali fissi.

Per ambienti moderni , le specifiche dell'API per l'internazionalizzazione di ECMAScript , un nuovo standard che integra le specifiche del linguaggio ECMAScript, forniscono un supporto molto migliore per il confronto delle stringhe, la formattazione dei numeri e la formattazione di data e ora; corregge anche le funzioni corrispondenti nelle specifiche della lingua. Un'introduzione può essere trovata qui . Le implementazioni sono disponibili in:

  • Chrome 24
  • Firefox 29
  • Internet Explorer 11
  • Opera 15

Esiste anche un'implementazione di compatibilità, Intl.js , che fornirà l'API in ambienti in cui non esiste già.

Determinare la lingua preferita dell'utente rimane un problema poiché non ci sono specifiche per ottenere la lingua corrente. Ogni browser implementa un metodo per ottenere una stringa di lingua, ma questa potrebbe essere basata sulla lingua del sistema operativo dell'utente o solo sulla lingua del browser:

// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;

Una buona soluzione per questo è scaricare l'header Accept-Language dal server al client. Se formattato come JavaScript, può essere passato ai costruttori dell'API per l'internazionalizzazione, che sceglieranno automaticamente le impostazioni locali migliori (o supportate per prime).

In breve, devi dedicarti molto al lavoro o utilizzare un framework / libreria , perché non puoi fare affidamento sul browser per farlo per te.

Varie librerie e plugin per la localizzazione:

  • Altri:

Sentiti libero di aggiungere / modificare.


13
Grazie a tutte le persone che hanno contribuito; Non avrei mai pensato di poter imparare qualcosa leggendo le mie vecchie risposte. Sono lieto di vedere l'aggiornamento per le specifiche dell'API di internazionalizzazione, è davvero fantastico e devo solo testarlo su Chrome.
Andy E

1
Grazie per l'eccellente raccolta. Una nota positiva, sembra che Mozilla potrebbe presto spedire un moderno toLocaleString () - possibilmente FF28: bugzilla.mozilla.org/show_bug.cgi?id=769871
Chris Adams,

1
i18next.com ora viene fornito con una gestione della traduzione basata su locize.com , che potrebbe essere una grande vittoria se devi risolvere l'intero processo di traduzione, non solo strumentare il tuo codice per i18n. Plus ha una bella funzione Editor Incontext ...
jamuhl,

12

Mozilla ha recentemente rilasciato il fantastico L20n o la localizzazione 2.0. Nelle loro parole L20n è

un linguaggio di scripting open source specifico per la localizzazione utilizzato per elaborare genere, plurali, coniugazioni e la maggior parte degli altri elementi eccentrici del linguaggio naturale.

La loro implementazione js è sul repository github L20n.


Ho avviato un progetto che necessita di localizzazione e abbiamo deciso di utilizzare anche L20n;). Quindi ho creato una prima versione di un plug-in L20n per RequireJS ( github.com/fernandogmar/L20n-RequireJS ) nel caso in cui usi RequireJS spero che possa essere utile anche per te. Ogni suggerimento sarà accolto.
Fernando Gm,

0

Alcuni sono nativi, il resto è disponibile attraverso le librerie.

Ad esempio Datejs è una buona libreria di date internazionale.

Per il resto, si tratta solo di traduzione in lingua e JavaScript è nativamente compatibile con Unicode (così come tutti i principali browser).


0

Puoi anche provare un'altra libreria: https://github.com/wikimedia/jquery.i18n .

Oltre alla sostituzione dei parametri e alle forme plurali multiple, ha il supporto per il genere una caratteristica piuttosto unica delle regole grammaticali personalizzate di cui alcune lingue hanno bisogno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.