Formatos Strings de mensagens da UTI com número, data, plural e selecione os espaços reservados para criar mensagens localizadas.
Este pacote tem como objetivo fornecer uma maneira de gerenciar e formatar as mensagens de string do seu aplicativo JavaScript em seqüências de caracteres localizadas para pessoas que usam seu aplicativo. Você pode usar este pacote no navegador e no servidor via node.js.
Essa implementação é baseada na proposta de Strawman, mas existem alguns lugares que essa implementação diverge.
Nota: Esta API IntlMessageFormat pode mudar para permanecer sincronizada com o ECMA-402, mas este pacote seguirá o Semver.
As mensagens são fornecidas no construtor como uma mensagem String ou um objeto AST pré-parto.
var msg = new IntlMessageFormat ( message , locales , [ formats ] ) ; A message da string é analisada e depois armazenada internamente em um formulário compilado que é otimizado para o método format() para produzir a sequência formatada para exibir para o usuário.
var output = msg . format ( values ) ;Um exemplo muito comum é formatar mensagens que têm números com rótulos plurais. Com este pacote, você pode garantir que a string seja formatada corretamente para a localidade de uma pessoa, por exemplo:
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."A sintaxe da mensagem que este pacote usa não é proprietária, na verdade é uma sintaxe de mensagem padrão comum que funciona em linguagens de programação e com as quais os tradutores profissionais estão familiarizados. Este pacote usa a sintaxe da mensagem da UTI e funciona para todas as linguagens de CLDR que possuem regras de pluralização definidas.
Usa os padrões do setor: sintaxe da mensagem da UTI e dados de localidade de CLDR.
Suporta argumentos de mensagens plural , selecione e seletordinal .
Formatos números e datas/tempos nas mensagens usando Intl.NumberFormat e Intl.DateTimeFormat , respectivamente.
Otimizado para chamadas repetidas para um método format() da instância IntlMessageFormat .
Suporta a definição de estilos/opções de formato personalizado.
Suporta sequências de escape para a sintaxe da mensagem chars, por exemplo: "\{foo\}" será lançado: "{foo}" na saída formatada em vez de interpretá -lo como um argumento foo .
Intl moderna Este pacote pressupõe que exista o objeto Global Intl no tempo de execução. Intl está presente em todos os navegadores modernos (IE11+) e nó (com UTI completa). Os métodos Intl em que confiamos são:
Intl.NumberFormat para formatação de números (pode ser poli -preenchido usando intl.js)Intl.DateTimeFormat para a formatação da hora da data (pode ser poli -preenchido usando Intl.js)Intl.PluralRules para formatação plural/ordinal (podem ser poli-preenchidos usando INTL-PLURALRULES) < script src =" intl-messageformat/intl-messageformat.min.js " > </ script > Simplesmente require() este pacote:
var IntlMessageFormat = require ( 'intl-messageformat' ) ;Nota: seu nó deve incluir a UTI completa
IntlMessageFormat Para criar uma mensagem para formatar, use o construtor IntlMessageFormat . O construtor leva três parâmetros:
mensagem - {string | AST} - Mensagem da String (ou AST pré -paralisado) que serve como padrão de formatação.
Locais - {String | String []} - Uma string com uma tag BCP 47 ou uma matriz de tais strings. Se você não fornecer um local, o local padrão será usado. Quando uma variedade de locais é fornecida, cada item e seus locais ancestrais são verificados e a primeira com dados de localidade registrada é retornada. Veja: Resolução do local para obter mais detalhes.
[formatos] - {objeto} - Objeto opcional com opções definidas pelo usuário para estilos de formato.
var msg = new IntlMessageFormat ( 'My name is {name}.' , 'en-US' ) ; IntlMessageFormat usa Intl.NumberFormat.supportedLocalesOf() para determinar quais dados do local a serem usados com base no valor de locales passados para o construtor. O resultado desse processo de resolução pode ser determinado pela chamada do método do protótipo resolvedOptions() .
resolvedOptions() Este método retorna um objeto com os valores de opções que foram resolvidos durante a criação de instância. Atualmente, contém apenas uma propriedade locale ; Aqui está um exemplo:
var msg = new IntlMessageFormat ( '' , 'en-us' ) ;
console . log ( msg . resolvedOptions ( ) . locale ) ; // => "en-US" Observe como o local especificado era o valor de todos os casos mais baixo: "en-us" , mas foi resolvido e normalizado para: "en-US" .
format(values) Depois que a mensagem é criada, a formatação da mensagem é feita chamando o método format() na instância e passando uma coleção de values :
var output = msg . format ( { name : "Eric" } ) ;
console . log ( output ) ; // => "My name is Eric."Nota: Um valor deve ser fornecido para todos os argumentos no padrão de mensagem com os quais a instância foi construída.
Definir estilos de formato personalizado é útil, você precisa fornecer um conjunto de opções para o formatador subjacente; por exemplo, produzindo um número em 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" Neste exemplo, estamos definindo um estilo de formato de número USD que é passado para a instância Intl.NumberFormat subjacente como suas opções.
Este exemplo mostra como usar a sintaxe da mensagem da UTI para definir uma mensagem que possui um rótulo plural; por exemplo, "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." Nota: Como quando numPhotos era 1000 , o número é formatado com o separador de milhares corretos.
Este software é gratuito para usar no Yahoo! Inc. Licença BSD. Consulte o arquivo de licença para obter informações sobre texto e direitos autorais.