Localize Blocks
Blockly支持可以本地化爲用戶語言的塊定義。通過使用字符串表,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}"
}
String Table
列表重複示例包括幾個“%{BKY}”字符串。每個都是對Blockly.Msg string表中字符串的引用。當塊被實例化時,Blockly嘗試用值替換字符串。
例如,%{bkyiLists[RealthEngult}]用Buly.MSg [“ListsIn RealPythTepe”]的值替換,如果存在的話。如果該值不存在,則將%{BKYY} }符號放在適當位置,併爲丟失的翻譯發出警告。
如示例所示,符號在多個位置工作。消息和工具提示允許替換用戶可見的字符串。類似地,下拉字段也可以使用項目文本的符號。幫助URL可以本地化,以確保用戶被定向到類似的本地化頁面。最後,顏色值可以使用符號幫助集中塊的調色板。
如果您正在使用JavaScript實現,並且不希望在運行時更改用戶語言,那麼您可能會發現使用直接引用更容易。例如,Blockly.Msg['LISTS_REPEAT_TITLE']或Blockly.Msg.LISTS_REPEAT_TITLE'。因爲這不是有效的JSON,所以這種語法(引用在別處聲明的變量)對Android或iOS不起作用
字符串表通過msg/js中任何一個特定於語言的.js文件加載。將適當的文件加載到網頁中以加載正確的塊轉換。Blockly for iOS的操作稍有不同,自動從本地化消息中選擇正確的JSON文件。
JSON Message Interpolation
message0屬性(和message1、message2等)指示輸入、字段和周圍的標籤文本。對於“列表重複”塊中的“列表重複”標題,英文值爲:
Blockly.Msg.LISTS_REPEAT_TITLE = 'create list with item %1 repeated %2 times';
兩個插值標記%1和%2標記兩個輸入的位置。args0數組中提供了更多詳細信息。args1將對應於message1字符串。有關指定塊輸入和字段的詳細信息,請參見《創建自定義塊》指南。
插值標記之間的文本將轉換爲unnamed/blockly/reference/js/blockly.FieldLabel。這將創建塊的單詞順序及其讀取方式:
// 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 مرات";
Rebuilding string tables
構建string table.js文件是build.py腳本的一部分。該腳本從msg/messages.js獲取標識符鍵和英語翻譯,以創建一個新的en.json。然後,結合其他JSON文件中的翻譯,它將爲所有語言重新創建更新的JavaScript字符串表,包括一個新的en.js。
非英語JSON文件來自TranslateWiki的合作伙伴。有關如何提供幫助的詳細信息,請參閱翻譯說明。