封鎖可翻譯成使用者語言的區塊定義。透過使用字串表格,JSON 區塊定義中的訊息字串可以調整輸入、欄位與標籤,以反映語言的詞彙、字詞排序和方向。
這些情況都共用相同的 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
屬性 (及 message1
、message2
等) 決定輸入、欄位和周圍標籤文字。針對 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 的合作夥伴。如要進一步瞭解如何提供協助,請參閱翻譯的相關附註。