本地化積木

Blockly 支援可依據使用者慣用語言的封鎖定義。 透過使用字串資料表,JSON 區塊定義中的訊息字串 可以調整輸入內容、欄位和標籤來反映語言詞彙 字詞順序和方向

「list_repeat Block」的英文文字 西班牙文的 list_repeat Block list_repeat block (韓文) list_repeat block (由右至左阿拉伯文)

以下情況都會共用相同的 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'

字串資料表會透過下列位置的任一種特定語言 .js 檔案載入: msg/js。載入 即可在網頁中載入正確的區塊翻譯

JSON 訊息內插

message0 屬性 (以及 message1message2 等) 會決定輸入內容, 欄位和前後標籤文字針對 LISTS_REPEAT_TITLE lists_repeat 區塊,英文值為:

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 指令碼的一部分。 指令碼會接收 ID 鍵和英文翻譯 msg/messages.js敬上 建立新的 en.json。 然後結合在 其他 JSON 檔案 系統就會重新建立 JavaScript 字串表格 加入新的 GRU 狀態 en.js

非英文 JSON 檔案來自以下合作夥伴: TranslateWiki。詳情請參閱 已開啟記事 正在翻譯