Formatiert die ICU -Nachrichtenzeichenfolgen mit Nummer, Datum, Plural und Wählen Sie Platzhalter, um lokalisierte Nachrichten zu erstellen.
Dieses Paket soll Ihnen eine Möglichkeit bieten, die String -Nachrichten Ihrer JavaScript -App in lokalisierten Zeichenfolgen für Personen mit Ihrer App zu verwalten und zu formatieren. Sie können dieses Paket im Browser und auf dem Server über node.js.
Diese Implementierung basiert auf dem Strohanschlag, aber es gibt einige Orte, die diese Implementierung abweicht.
Hinweis: Diese IntlMessageFormat API kann sich ändern, um mit ECMA-402 synchron zu bleiben, aber dieses Paket folgt Semver.
Nachrichten werden als String Nachricht oder als vorgespottetes AST-Objekt in den Konstruktor zur Verfügung gestellt.
var msg = new IntlMessageFormat ( message , locales , [ formats ] ) ; Die String message wird analysiert und dann intern in einer kompilierten Form gespeichert, die für die format() -Methode optimiert ist, um die formatierte Zeichenfolge für das Anzeigen für den Benutzer zu erstellen.
var output = msg . format ( values ) ;Ein sehr häufiges Beispiel ist die Formatierung von Nachrichten mit Zahlen mit Pluraletiketten. Mit diesem Paket können Sie sicherstellen, dass die Zeichenfolge für das Gebietsschema einer Person ordnungsgemäß formatiert ist, z. B.:
var MESSAGES = {
'en-US' : {
NUM_PHOTOS : 'You have {numPhotos, plural, ' +
'=0 {no photos.}' +
'=1 {one photo.}' +
'other {# photos.}}'
} ,
'es-MX' : {
NUM_PHOTOS : 'Usted {numPhotos, plural, ' +
'=0 {no tiene fotos.}' +
'=1 {tiene una foto.}' +
'other {tiene # fotos.}}'
}
} ;
var output ;
var enNumPhotos = new IntlMessageFormat ( MESSAGES [ 'en-US' ] . NUM_PHOTOS , 'en-US' ) ;
output = enNumPhotos . format ( { numPhotos : 1000 } ) ;
console . log ( output ) ; // => "You have 1,000 photos."
var esNumPhotos = new IntlMessageFormat ( MESSAGES [ 'es-MX' ] . NUM_PHOTOS , 'es-MX' ) ;
output = esNumPhotos . format ( { numPhotos : 1000 } ) ;
console . log ( output ) ; // => "Usted tiene 1,000 fotos."Die Nachrichtensyntax, die dieses Paket verwendet, ist nicht proprietär. Tatsächlich handelt es sich um eine gängige Standard -Nachrichtensyntax, die über Programmiersprachen hinweg funktioniert, und eine, mit der professionelle Übersetzer vertraut sind. Dieses Paket verwendet die ICU -Nachrichtensyntax und funktioniert für alle CLDR -Sprachen, die Pluralisationsregeln definiert haben.
Verwendet Branchenstandards: ICU -Nachrichtensyntax und CLDR -Gebietsschemadaten.
Unterstützt Plural- , Select- und Selectordinal -Nachrichtenargumente.
Formatiert Nummern und Daten/Zeiten in Nachrichten unter Verwendung von Intl.NumberFormat bzw. Intl.DateTimeFormat .
Optimiert für wiederholte Aufrufe an eine IntlMessageFormat -Instanz format() -Methode.
Unterstützt es, benutzerdefinierte Formatstile/-optionen zu definieren.
Unterstützt Escape -Sequenzen für Nachrichtensyntax -Zeichen, z. B. "\{foo\}" wird in der formatierten Ausgabe ausgegeben: "{foo}" anstatt es als foo -Argument zu interpretieren.
Intl -Abhängigkeit In diesem Paket geht davon aus, dass das Intl Global Object in der Laufzeit existiert. Intl ist in allen modernen Browsern (IE11+) und Knoten (mit voller Intensivstation) vorhanden. Die Intl -Methoden, auf die wir uns verlassen, sind:
Intl.NumberFormat für die Zahlenformatierung (kann mit intl.js polyfillt werden)Intl.DateTimeFormat für das Datumszeitformatierung (kann mit intl.js polyfutiert werden)Intl.PluralRules für die Plural-/Ordinalformatierung (kann mit Intl-Pluralrules polyfutiert werden) < script src =" intl-messageformat/intl-messageformat.min.js " > </ script > Einfach require() dieses Paket:
var IntlMessageFormat = require ( 'intl-messageformat' ) ;HINWEIS: Ihr Knoten muss die volle Intensivstation enthalten
IntlMessageFormat Constructor Verwenden Sie den IntlMessageFormat -Konstruktor, um eine Nachricht zum Format zu erstellen. Der Konstruktor nimmt drei Parameter vor:
Nachricht - {String | AST} - String -Nachricht (oder vorgezogenes AST), das als Formatierungsmuster dient.
Orte - {String | String []} - Eine Zeichenfolge mit einem BCP 47 -Sprach -Tag oder einem Array solcher Zeichenfolgen. Wenn Sie kein Gebietsschema angeben, wird das Standardgebietsschema verwendet. Wenn eine Reihe von Lokalen bereitgestellt wird, werden jedes Element und seine Vorfahren überprüft und die erste mit registrierten Gebietsschemasdaten zurückgegeben. Weitere Informationen finden Sie in der Lösung: Lokale.
[Formate] - {Objekt} - Optionales Objekt mit benutzerdefinierten Optionen für Formatstile.
var msg = new IntlMessageFormat ( 'My name is {name}.' , 'en-US' ) ; IntlMessageFormat verwendet Intl.NumberFormat.supportedLocalesOf() um zu bestimmen, welche Gebietsschemas Daten basierend auf dem an den Konstruktor übergebenen locales verwendet werden sollen. Das Ergebnis dieses Auflösungsprozesses kann durch Aufrufen der Prototypmethode " resolvedOptions() bestimmt werden.
resolvedOptions() Methode Diese Methode gibt ein Objekt mit den Optionswerten zurück, die während der Instanzerstellung aufgelöst wurden. Es enthält derzeit nur ein locale . Hier ist ein Beispiel:
var msg = new IntlMessageFormat ( '' , 'en-us' ) ;
console . log ( msg . resolvedOptions ( ) . locale ) ; // => "en-US" Beachten Sie, wie das angegebene Gebietsschema der Gesamtwert von niedrigerem Fall war: "en-us" , aber es wurde gelöst und normalisiert: "en-US" .
format(values) Methode Sobald die Nachricht erstellt wurde, erfolgt die Formatierung der Nachricht, indem die format() -Methode auf der Instanz aufgerufen und eine Sammlung von values bestanden wird:
var output = msg . format ( { name : "Eric" } ) ;
console . log ( output ) ; // => "My name is Eric."Hinweis: Für jedes Argument im Nachrichtenmuster, mit dem die Instanz konstruiert wurde, muss ein Wert geliefert werden.
Definieren Sie benutzerdefinierte Formatstile sind nützlich. Sie benötigen dem zugrunde liegenden Formatier eine Reihe von Optionen. z. B. Ausgabe einer Zahl in USD:
var msg = new IntlMessageFormat ( 'The price is: {price, number, USD}' , 'en-US' , {
number : {
USD : {
style : 'currency' ,
currency : 'USD'
}
}
} ) ;
var output = msg . format ( { price : 100 } ) ;
console . log ( output ) ; // => "The price is: $100.00" In diesem Beispiel definieren wir einen USD -Nummernformatstil, der als Optionen an die zugrunde liegende Intl.NumberFormat -Instanz übergeben wird.
In diesem Beispiel wird angezeigt, wie die ICU -Nachrichtensyntax verwendet wird, um eine Nachricht mit einem Plural -Etikett zu definieren. zB "You have 10 photos" :
You have {numPhotos, plural,
=0 {no photos.}
=1 {one photo.}
other {# photos.}
}
var MESSAGES = {
photos : '...' , // String from code block above.
...
} ;
var msg = new IntlMessageFormat ( MESSAGES . photos , 'en-US' ) ;
console . log ( msg . format ( { numPhotos : 0 } ) ) ; // => "You have no photos."
console . log ( msg . format ( { numPhotos : 1 } ) ) ; // => "You have one photo."
console . log ( msg . format ( { numPhotos : 1000 } ) ) ; // => "You have 1,000 photos." HINWEIS: Wie ist die Zahl, wenn numPhotos 1000 war, mit dem richtigen Tausenden -Separator formatiert.
Diese Software kann unter dem Yahoo! Inc. BSD -Lizenz. In der Lizenzdatei für Lizenztext und Copyright -Informationen finden Sie.