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

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

フィールドの概要

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

messages.json:

{
  "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 つのメッセージが定義されています。

messages.json:

{
  "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

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

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

  • 名前順(昇順)
  • a-z
  • 0~9
  • _(アンダースコア)
  • @

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

messages.json:

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

名前のその他の使用例については、多言語対応のページをご覧ください。

message

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

セクションから抜粋したメッセージの例を 3 つ紹介します。

messages.json:

"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 $):

messages.json:

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

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

messages.json:

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

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

description

省略可。メッセージの説明。翻訳者が最適な翻訳を行えるように、コンテキストや詳細を記載します。

セクションから抜粋した説明の例を 3 つ紹介します。

messages.json:

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

placeholders

省略可。メッセージ内で使用される 1 つ以上の部分文字列を定義します。プレースホルダを使用する理由は 2 つあります。

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

各プレースホルダには、名前、「content」項目、省略可能な「example」項目があります。プレースホルダの名前では大文字と小文字が区別されません。また、メッセージ名と同じ文字を含めることができます。

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

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

「サンプル」項目(省略可だが強く推奨)は、コンテンツがエンドユーザーにどのように表示されるかを示すことで、翻訳者に役立ちます。たとえば、金額のプレースホルダは "$23.45" のようになります。

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

messages.json:

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