숫자, 날짜, 복수 및 선택 자리 표시자가있는 ICU 메시지 문자열을 형식으로하여 현지화 된 메시지를 만듭니다.
이 패키지는 앱을 사용하는 사람들을 위해 JavaScript 앱의 문자열 메시지를 현지화 된 문자열로 관리하고 형식화 할 수있는 방법을 제공하는 것을 목표로합니다. 이 패키지는 브라우저와 Node.js를 통해 서버에서 사용할 수 있습니다.
이 구현은 Strawman 제안을 기반으로하지만이 구현이 다달리는 곳은 몇 가지 있습니다.
참고 :이 IntlMessageFormat API는 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 instance의 format() 메소드에 대한 반복 호출에 최적화되었습니다.
사용자 정의 형식 스타일/옵션 정의를 지원합니다.
메시지 구문 char에 대한 탈출 시퀀스를 지원합니다. 예 : "\{foo\}" foo 인수로 해석하는 대신 형식의 출력에서 "{foo}" 출력됩니다.
Intl 의존성 이 패키지는 Intl Global 객체가 런타임에 존재한다고 가정합니다. Intl 모든 최신 브라우저 (IE11+) 및 노드 (전체 ICU 포함)에 존재합니다. 우리가 의존하는 Intl 방법은 다음과 같습니다.
Intl.NumberFormat (intl.js를 사용하여 폴리 채워질 수 있음)Intl.DateTimeFormat (intl.js를 사용하여 폴리 채워질 수 있음)Intl.PluralRules (Intl-Plourules를 사용하여 폴리 채워질 수 있음) < script src =" intl-messageformat/intl-messageformat.min.js " > </ script > 간단히 require() 이 패키지 :
var IntlMessageFormat = require ( 'intl-messageformat' ) ;참고 : 노드에는 전체 ICU가 포함되어야합니다
IntlMessageFormat 생성자 형식에 메시지를 작성하려면 IntlMessageFormat 생성자를 사용하십시오. 생성자는 세 가지 매개 변수를 가져옵니다.
메시지 - {문자열 | AST} - 형식 패턴 역할을하는 문자열 메시지 (또는 사전 정렬 된 AST).
로컬 - {문자열 | String []} - BCP 47 언어 태그가있는 문자열 또는 그러한 문자열 배열. 로케일을 제공하지 않으면 기본 로케일이 사용됩니다. 로케일의 배열이 제공되면 각 품목과 조상 로케일이 점검되고 등록 된 로케일 데이터가있는 첫 번째 항목이 반환됩니다. 자세한 내용은 로케일 해상도를 참조하십시오.
[형식] - {Object} - 형식 스타일에 대한 사용자 정의 옵션이있는 선택적 객체.
var msg = new IntlMessageFormat ( 'My name is {name}.' , 'en-US' ) ; IntlMessageFormat Intl.NumberFormat.supportedLocalesOf() 사용하여 생성자에게 전달 된 locales 값을 기반으로 사용할 로케일 데이터를 결정합니다. 이 해상도 프로세스의 결과는 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."참고 : 인스턴스가 구성된 메시지 패턴의 모든 인수에 대해 값을 제공 해야합니다 .
사용자 정의 형식 스타일 정의 유용합니다. 기본 포맷터에 일련의 옵션을 공급해야합니다. 예를 들어 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" 이 예에서는 옵션으로 기본 Intl.NumberFormat 인스턴스로 전달되는 USD 번호 형식 스타일을 정의합니다.
이 예제는 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!에서 무료로 사용할 수 있습니다. BSD 라이센스. 라이센스 텍스트 및 저작권 정보는 라이센스 파일을 참조하십시오.