Форматы строки сообщений ICU с номером, датой, множественным числом и выберите заполнители для создания локализованных сообщений.
Этот пакет направлен на то, чтобы предоставить вам способ управлять и форматировать строковые сообщения вашего приложения JavaScript в локализованные строки для людей, использующих ваше приложение. Вы можете использовать этот пакет в браузере и на сервере через node.js.
Эта реализация основана на предложении Strawman, но есть несколько мест, где эта реализация расходится.
Примечание. Этот API IntlMessageFormat может измениться, чтобы оставаться в синхронизации с ECMA-402, но этот пакет будет следовать за SEMVER.
Сообщения предоставляются в конструктор в виде String сообщения, или предварительно переписываемый объект AST.
var msg = new IntlMessageFormat ( message , locales , [ formats ] ) ; Строковое message анализируется, а затем хранится внутри в скомпилированной форме, которая оптимизирована для метода format() для создания форматированной строки для отображения пользователю.
var output = msg . format ( values ) ;Очень распространенным примером является форматирование сообщений, которые имеют числа с множественными этикетками. С помощью этого пакета вы можете убедиться, что строка правильно отформатирована для локали человека, например:
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."Синтаксис сообщений, который использует этот пакет, не является запатентованным, на самом деле это общий стандартный синтаксис сообщений, который работает на языках программирования, и тот, с которым знакомы профессиональные переводчики. В этом пакете используется синтаксис сообщений ICU и работает для всех языков CLDR, которые имеют определенные правила плюрализации.
Использует отраслевые стандарты: синтаксис сообщений ICU и данные локали CLDR.
Поддерживает множественные числа , выберите и селективные аргументы сообщения.
Форматы чисел и даты/время в сообщениях с использованием Intl.NumberFormat и Intl.DateTimeFormat , соответственно.
Оптимизирован для повторных вызовов в метод IntlMessageFormat format() .
Поддерживает определение пользовательских стилей формата/опций.
Поддерживает последовательности побега для синтаксиса сообщений Chars, например: "\{foo\}" вывод: "{foo}" в форматированном выводе вместо интерпретации его как аргумент foo .
Intl Этот пакет предполагает, что объект Intl Global существует во время выполнения. Intl присутствует во всех современных браузерах (IE11+) и узле (с полным ICU). Методы Intl на которые мы полагаемся:
Intl.NumberFormat для форматирования номеров (может быть многофильменным с использованием intl.js)Intl.DateTimeFormat для форматирования времени даты (может быть полиализирован с использованием intl.js)Intl.PluralRules для форматирования множественного числа/порядка (может быть полиализирована с использованием Intl-Plurarrules) < script src =" intl-messageformat/intl-messageformat.min.js " > </ script > Просто require() этот пакет:
var IntlMessageFormat = require ( 'intl-messageformat' ) ;Примечание: ваш узел должен включать полный ICU
IntlMessageFormat Constructor Чтобы создать сообщение для формата, используйте конструктор IntlMessageFormat . Конструктор берет три параметра:
Сообщение - {String | AST} - строковое сообщение (или предварительно перепутанное AST), которое служит как шаблон форматирования.
Локал - {String | String []} - строка с языковой тегом BCP 47 или массивом таких строк. Если вы не предоставите локаль, будет использоваться локаль по умолчанию. Когда предоставляется массив локалов, каждый пункт и его предки проверяются, а первый с зарегистрированными данными локали возвращается. См.: Резолюция локали для более подробной информации.
[Formats] - {Object} - необязательный объект с пользовательскими параметрами для стилей формата.
var msg = new IntlMessageFormat ( 'My name is {name}.' , 'en-US' ) ; IntlMessageFormat использует Intl.NumberFormat.supportedLocalesOf() чтобы определить, какие данные локали использовать на основе значения locales передаваемого конструктору. Результат этого процесса разрешения может быть определена методом прототипа Call The resolvedOptions() .
resolvedOptions() Метод Этот метод возвращает объект со значениями параметров, которые были разрешены во время создания экземпляра. В настоящее время он содержит только собственность locale ; Вот пример:
var msg = new IntlMessageFormat ( '' , 'en-us' ) ;
console . log ( msg . resolvedOptions ( ) . locale ) ; // => "en-US" Обратите внимание, как указанная локаль была всемирным значением: "en-us" , но он был разрешен и нормализован: "en-US" .
format(values) Метод После создания сообщения форматирование сообщения выполняется путем вызова метода format() на экземпляре и передачи коллекции values :
var output = msg . format ( { name : "Eric" } ) ;
console . log ( output ) ; // => "My name is Eric."Примечание. Значение должно быть предоставлено для каждого аргумента в шаблоне сообщения, с которым был построен экземпляр.
Определение пользовательских стилей формата полезно. Вам нужно предоставить набор опций для базового форматера; Например, вывод числа в долларах США:
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" В этом примере мы определяем стиль формата номеров USD , который передается в базовый экземпляр Intl.NumberFormat в качестве его параметров.
В этом примере показано, как использовать синтаксис сообщения ICU для определения сообщения с меткой множественного числа; Например, "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." Примечание. Как, когда numPhotos был 1000 , число отформатируется с правильным разделителем тысяч.
Это программное обеспечение может бесплатно использовать под Yahoo! Inc. BSD Лицензия. См. Файл лицензии для текста лицензии и информации об авторском праве.