ローカリゼーションの機能はプレリリースです。APIは変更されることがあります。
Polymer.AppLocalizeBehaviorは、アプリケーションの国際化をサポートするformat.jsライブラリをラップしています。Intlオブジェクトをネイティブにサポートしていないブラウザを使用している場合は、**自分でポリフィルを読み込む必要があります。**polyfillの利用例は、Intl.jsを参照してください。
Polymer.AppLocalizeBehavior
は、format.js
とまったく同じメッセージ構文をサポートしています。利用可能なメッセージ形式とオプションのリファレンスはformat.jsライブラリのドキュメントを参照してください。
コンテンツをローカライズして表示する要素には、それぞれPolymer.AppLocalizeBehavior
を追加する必要があります。これらの要素はすべて共通のローカリゼーションキャッシュを共有しており、翻訳は一度読む込むだけで済みます。
Polymer 1.x要素とPolymer 2.xのハイブリッド要素では、AppLocalizeBehavior
を直接使用できます。クラススタイルの要素の場合は、mixinBehaviors
メソッドを使用します。
AppLocalizeBehaviorをインストール
2.0リリース候補(RC)の場合は、2.0-preview
ブランチを使用します。:
bower install --save PolymerElements/app-localize-behavior#2.0-preview
アプリケーションにローカリゼーションを追加
通常、メインアプリケーションが、ローカライズされたメッセージのロードと言語環境の設定を担います。
サンプルアプリケーション(クラススタイル要素)
<dom-module id="x-app">
<template>
<!-- use the localize method to localize text -->
<div>{{localize('hello', 'name', 'Batman')}}</div>
</template>
<script>
class XApp extends Polymer.mixinBehaviors([Polymer.AppLocalizeBehavior], Polymer.Element) {
static get is() { return 'x-app'}
static get properties() {
return {
// set the current language—shared across all elements in the app
// that use AppLocalizeBehavior
language: {
value: 'en'
},
// Initialize locale data
resources: {
value() {
return {
'en': { 'hello': 'My name is {name}.' },
'fr': { 'hello': 'Je m\'apelle {name}.' }
}
}
}
};
}
}
customElements.define(XApp.is, XApp);
</script>
</dom-module>
一般的には、次の例に示すように、アプリケーションは外部ファイルからリソースをロードします。
サンプルアプリケーション(ハイブリッド要素)
<dom-module id="x-app">
<template>
<!-- use the localize method to localize text -->
<div>{{localize('hello', 'name', 'Batman')}}</div>
</template>
<script>
Polymer({
is: "x-app",
// include the behavior
behaviors: [
Polymer.AppLocalizeBehavior
],
// set the current language—shared across all elements in the app
// that use AppLocalizeBehavior
properties: {
language: {
value: 'en'
},
}
// load localized messages
attached: function() {
this.loadResources(this.resolveUrl('locales.json'));
},
});
</script>
</dom-module>
メインアプリケーションは、ポリフィルIntl
の読み込みも担います。(上記には示されていません)
メッセージをローカライズする必要がある要素には、それぞれPolymer.AppLocalizeBehavior
を追加し、上記のようにlocalize
メソッドを使用して文字列を変換する必要があります。