ローカライズ メッセージの形式

各国際化された拡張機能またはアプリには、ロケールに固有の文字列を提供する messages.json という名前のファイルが 1 つ以上あります。このページでは、messages.json ファイルの形式について説明します。国際化とローカライズの方法については、国際化のページをご覧ください。

フィールドの概要

次のコードは、messages.json でサポートされているフィールドを示しています。[name] フィールドと [message] フィールドのみが必須です。

{
  "name": {
    "message": "Message text, with optional placeholders.",
    "description": "Translator-aimed description of the message.",
    "placeholders": {
      "placeholder_name": {
        "content": "A string to be placed within the message.",
        "example": "Translator-aimed example of the placeholder string."
      },
      ...
    }
  },
  ...
}

次の messages.json ファイルでは、「prompt_for_name」、「hello」、「bye」という名前の 3 つのメッセージを定義しています。

{
  "prompt_for_name": {
    "message": "What's your name?",
    "description": "Ask for the user's name"
  },
  "hello": {
    "message": "Hello, $USER$",
    "description": "Greet the user",
    "placeholders": {
      "user": {
        "content": "$1",
        "example": "Cira"
      }
    }
  },
  "bye": {
    "message": "Goodbye, $USER$. Come back to $OUR_SITE$ soon!",
    "description": "Say goodbye to the user",
    "placeholders": {
      "our_site": {
        "content": "Example.com",
      },
      "user": {
        "content": "$1",
        "example": "Cira"
      }
    }
  }
}

フィールドの詳細

このセクションでは、messages.json ファイルに含めることができる各フィールドについて説明します。メッセージ ファイルの使用方法(ロケールですべてのメッセージが定義されていない場合の影響など)については、国際化をご覧ください。

name

実際には、「name」というフィールドはありません。このフィールドの名前はメッセージの名前です。__MSG__name___ または getMessage("_name_") に表示される名前と同じです。

名前は、ローカライズされたメッセージ テキストを取得できる大文字と小文字を区別しないキーです。名前には次の文字を使用できます。

  • 名前順(昇順)
  • a-z
  • 0~9
  • _(アンダースコア)
  • @
注: 「@@」で始まる名前を定義しないでください。これらは事前定義されたメッセージ用に予約されています。

セクションから、名前の例を 3 つ示します。

"prompt_for_name": {
  ...
},
"hello": {
  ...
},
"bye": {
  ...
}

名前の使用例については、国際化のページをご覧ください。

メッセージ

翻訳されたメッセージ。プレースホルダを含めることができる文字列形式になります。特定のプレースホルダを参照するには、$_placeholder_name_$(大文字と小文字を区別しない)を使用します。たとえば、「our_site」という名前のプレースホルダを $our_site$$OUR_SITE$$oUR_sITe$ として参照できます。

以下に、セクションから抜粋したメッセージの例を 3 つ示します。

"message": "What's your name?"
...
"message": "Hello, $USER$"
...
"message": "Goodbye, $USER$. Come back to $OUR_SITE$ soon!"

文字列にドル記号($)を入れるには、$$. For example, use the following code to specify the message Amount (in $):

"message": "Amount (in $$)"
 を使用します。

置換文字列i18n.getMessagesubstitutions パラメータを使用して指定された文字列)を参照する場合は、$USER$ などのプレースホルダを使用することをおすすめしますが、メッセージ内で直接参照することもできます。たとえば、次のメッセージは、getMessage() に渡される最初の 3 つの置換文字列を参照しています。

"message": "Params: $1, $2, $3"

上記の例でも、メッセージ内では $_n_ 文字列ではなく、プレースホルダを使用することをおすすめします。プレースホルダは、適切な変数名と考えてください。コードを書いてから 1 週間後には、$1 が何を参照しているかは忘れてしまっても、プレースホルダが何を参照しているかはわかるでしょう。プレースホルダと置換文字列の詳細については、プレースホルダのセクションをご覧ください。

description

省略可。翻訳者が最適な翻訳を行うために必要なコンテキストや詳細情報を提供するメッセージの説明。

セクションから、説明の例を 3 つ示します。

"description": "Ask for the user's name"
...
"description": "Greet the user"
...
"description": "Say goodbye to the user"

プレースホルダ

省略可。メッセージ内で使用する 1 つ以上のサブ文字列を定義します。プレースホルダを使用するメリットは 2 つあります。

  • 翻訳対象外のメッセージの部分のテキストを定義します。例: HTML コード、商標名、フォーマット指定子。
  • getMessage() に渡された置換文字列を参照します。例: $1

各プレースホルダには、名前、[content] アイテム、オプションの [example] アイテムがあります。プレースホルダ名は大文字と小文字を区別しません。また、メッセージ名と同じ文字を含めることができます。

「content」アイテムの値は、i18n.getMessage メソッドの substitutions パラメータを使用して指定される置換文字列を参照できる文字列です。通常、「content」アイテムの値は「Example.com」や「$1」などです。存在しない置換文字列を参照すると、空の文字列が返されます。次の表に、$_n_ 文字列が substitutions パラメータで指定された文字列とどのように対応するかを示します。

substitutions パラメータ1 ドルの価値2 ドルの価値3 ドルの価値
userNameuserName の値""""
["Cira", "Kathy"]"Cira""Kathy"""

「example」アイテム(省略可、ただし強く推奨)を使用すると、コンテンツがエンドユーザーからどのように見えるかを確認できます。たとえば、金額のプレースホルダは、"$23.45" のようになります。

次のスニペットは、のセクションから抜粋したものです。our_site と user という名前の 2 つのプレースホルダを含む「placeholders」アイテムを示しています。「our_site」プレースホルダには「content」フィールドから値が明らかなため、「example」アイテムはありません。

"placeholders": {
  "our_site": {
    "content": "Example.com",
  },
  "user": {
    "content": "$1",
    "example": "Cira"
  }
}