ブロックをローカライズする

Blockly は、ユーザーの言語にローカライズ可能なブロック定義をサポートしています。 文字列テーブルを使用することで、JSON ブロック定義のメッセージ文字列は、入力、フィールド、ラベルを適応させて、言語の語彙、単語の順序、方向を反映できます。

英語の list_繰り返しブロック スペイン語の list_繰り返しブロック 韓国語の list_繰り返しブロック アラビア語の list_repeat ブロック(右から左)

これらはすべて、同じ JSON ブロック定義を共有します。

// Block for creating a list with one element repeated.
{
  "type": "lists_repeat",
  "message0": "%{BKY_LISTS_REPEAT_TITLE}",
  "args0": [
    {
      "type": "input_value",
      "name": "ITEM"
    },
    {
      "type": "input_value",
      "name": "NUM",
      "check": "Number"
    }
  ],
  "output": "Array",
  "colour": "%{BKY_LISTS_HUE}",
  "tooltip": "%{BKY_LISTS_REPEAT_TOOLTIP}",
  "helpUrl": "%{BKY_LISTS_REPEAT_HELPURL}"
}

文字列テーブル

lists_repeat の例には、複数の "%{BKY_...}" 文字列が含まれています。これらは、Blockly.Msg 文字列テーブルの文字列への参照です。ブロックがインスタンス化されると、Blockly は文字列を値に置き換えようとします。

たとえば、%{BKY_LISTS_REPEAT_TITLE} が存在する場合は、Blockly.Msg['LISTS_REPEAT_TITLE'] の値に置き換えられます。値が存在しない場合は %{BKY_...} 表記が残され、Blockly は翻訳されていないという警告を出力します。

この例に示されているように、表記はいくつかの場所で機能します。メッセージとツールチップを使用して、ユーザーに表示される文字列を置き換えることができます。同様に、プルダウン フィールドでもアイテム テキストの表記を使用できます。ヘルプ URL をローカライズして、同様にローカライズされたページにユーザーを誘導できます。最後に、colour 値では、表記を使用してブロックのパレットを一元化できます。

JavaScript の実装を使用していて、実行時にユーザーの言語を変更することを想定していない場合は、直接参照を使用する方が簡単な場合があります。たとえば、Blockly.Msg['LISTS_REPEAT_TITLE'] または Blockly.Msg.LISTS_REPEAT_TITLE' です。

文字列テーブルは、msg/js にある言語固有の .js ファイルのいずれかを使用して読み込まれます。適切なファイルをウェブページに読み込み、正しいブロック翻訳を読み込みます。

JSON メッセージの補間

message0 属性(および message1message2 など)は、入力、フィールド、周囲のラベルテキストを決定します。lists_repeat ブロックの LISTS_REPEAT_TITLE の場合、英語の値は次のようになります。

Blockly.Msg.LISTS_REPEAT_TITLE = 'create list with item %1 repeated %2 times';

2 つの補間マーカー %1%2 が、2 つの入力の位置を示します。詳細は args0 配列にあります。args1message1 文字列に対応します。ブロックの入力とフィールドの指定の詳細については、カスタム ブロックを作成するガイドをご覧ください。

補間マーカー間のテキストは、名前のないラベル フィールドに変換されます。これにより、ブロックの語順と、その以下の内容が作成されます。

// In Spanish
Blockly.Msg.LISTS_REPEAT_TITLE = "crear lista con el elemento %1 repetido %2 veces";
// In Korean
Blockly.Msg.LISTS_REPEAT_TITLE = "%1을 %2번 넣어, 리스트 생성";

右から左に表記する言語に翻訳する場合、メッセージ文字列は視覚的な順序で記述します。Unicode 方向コマンドを含めることはできません。

// In Arabic. Note how %2 is left of %1, since it read right to left.
Blockly.Msg.LISTS_REPEAT_TITLE = "إنشئ قائمة مع العنصر  %1 %2 مرات";

文字列テーブルの再構築

文字列テーブルの .js ファイルの作成は build:langfiles スクリプトの一部です。このスクリプトは、msg/messages.js から識別子キーと英語の翻訳を取得して、新しい en.json を作成します。その後、他の JSON ファイルにある翻訳と組み合わせることで、新しい en.js を含むすべての言語の更新された JavaScript 文字列テーブルを再作成します。

英語以外の JSON ファイルは TranslateWiki のパートナーから提供されています。支援方法について詳しくは、翻訳に関する注意事項をご覧ください。