本地化積木

封鎖可翻譯成使用者語言的區塊定義。透過使用字串表格,JSON 區塊定義中的訊息字串可以調整輸入、欄位與標籤,以反映語言的詞彙、字詞排序和方向。

英文的 list_repeat 區塊 西班牙文的 list_repeat 區塊 韓文中的 list_repeat 區塊 阿拉伯文清單_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 會針對缺少翻譯發出警告。

如範例所示,標記法適用於多個位置。這些訊息和工具提示可讓使用者替換可見字串。同樣地,下拉式選單欄位也可以使用項目文字的標記法。可翻譯說明網址,確保使用者能連往類似的本地化網頁。最後,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';

兩個內插標記 %1%2 會標示兩個輸入內容的位置。args0 陣列中會提供更多詳細資料。args1 會對應至 message1 字串。如要進一步瞭解如何指定區塊輸入和欄位,請參閱建立自訂區塊指南。

內插標記之間的文字會轉換為未命名的標籤欄位。這會建立區塊的文字順序,以及這類區塊的讀取方式:

// 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 的 ID 鍵和英文翻譯建立新的 en.json。然後與其他 JSON 檔案中的任何翻譯結合,系統會重新建立所有語言且新的 JavaScript 字串資料表,包括新的 en.js

非英文 JSON 檔案來自 TranslateWiki 的合作夥伴。如要進一步瞭解如何提供協助,請參閱翻譯的相關附註。