Chromeアプリの国際化はとてもシンプルです。
メッセージリソース作成
まずはメッセージリソースファイル
/_locales/<locale_name>/messages.json を作成します。 <locale_name> は、ISO 639 規格の文字列です。例えば、日本語なら ja、 英語なら en となります。英語(en)メッセージリソースの例:
_locales/en/messages.json
{
"appName": {
"message": "HelloWorld App",
"description": "This is Application's name."
},
...
}日本語(ja)メッセージリソースの例:
_locales/ja/messages.json
{
"appName": {
"message": "ハローワールドアプリ",
"description": "これはアプリケーションの名前です。"
},
...
}manifest.json の国際化対応
次に
manifest.json ファイルを国際化対応させます。manifest.json 内では
__MSG_*__ のような記述で messages.json で定義された文言を置き換え表示させることができます。manifest.json
{
"name": "__MSG_appName__",
...
"default_locale": "en"
}JavaScriptからメッセージリソースを呼び出す
もちろんプログラムからメッセージリソースを呼び出すこともできます。
var appName = chrome.i18n.getMessage("appName");ユーザの locale が "en" の時は appName に "HelloWorld App" が入り、 "ja" の時には "ハローワールドアプリ" という文字列が格納されます。
他にも、messages.json で "placeholders" を使うことでメッセージリソースの一部を置き換えるといったこともできます。
下のサンプルはエラーメッセージの詳細部分を置き換え可能にしています。
_locales/en/messages.json
{
"app_name": {
"message": "HelloWorld App"
},
...
"error": {
"message": "Error: $errorCode$ $errorDetails$",
"description": "部分的に置き換え可能なメッセージです。",
"placeholders": {
"errorCode": {
"content": "$1",
"example": "404"
},
"errorDetails": {
"content": "$2",
"example": "Not Found."
}
}
}
}JavaScript側
console.log(chrome.i18n.getMessage("error", [ "xxx", "data not found." ]));
// output 'Error: xxx data not found.'messages.json の
$errorCode$ と $errorDetails$ がそれぞれ chrome.i18n.getMessage() の第二引数の配列の第一要素, 第二要素の文字列に置き換えられます。htmlの国際化
現時点では残念ながらHTMLファイル内のメッセージを国際化する便利な仕組みは用意されていないようです。これを実現するには、content script 内でメッセージリソースを取得して
dom.innerHTML = chrome.i18n.getMessage("hoge"); のようにするしかなさそうですね。
0 件のコメント:
コメントを投稿