Blockly obsługuje definicje bloków, które można zlokalizować na język użytkownika. Dzięki tabelom z ciągami znaków ciągi komunikatów w definicji bloku JSON mogą dostosowywać dane wejściowe, pola i etykiety do słownictwa, kolejności słów i kierunku języka.
Wszystkie te przypadki mają tę samą definicję bloku 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}"
}
Tabela ciągów znaków
Przykład lists_repeat
zawiera kilka ciągów tekstowych "%{BKY_...}"
. Każdy z tych elementów jest odwołaniem do ciągu znaków w tabeli Blockly.Msg
. Po utworzeniu wystąpienia blokady Blockly próbuje zastąpić ciąg wartością.
Na przykład ciąg %{BKY_LISTS_REPEAT_TITLE}
jest zastępowany wartością Blockly.Msg['LISTS_REPEAT_TITLE']
(jeśli istnieje). Jeśli wartość nie istnieje, zapis %{BKY_...}
pozostaje bez zmian, a blockly wyświetla ostrzeżenie o brakującym tłumaczeniu.
Jak widać na przykładzie, zapis działa w kilku lokalizacjach. Wiadomości i etykiety umożliwiają zastępowanie ciągów widocznych dla użytkowników. Podobnie pola menu mogą używać zapisu tekstowego elementu. Adres URL pomocy można zlokalizować, aby mieć pewność, że użytkownik będzie kierowany na podobnie zlokalizowaną stronę. Dodatkowo wartość colour
może wykorzystać zapis do scentralizowania palety bloków.
Jeśli korzystasz z implementacji JavaScriptu i nie spodziewasz się zmiany języka użytkownika w czasie działania, łatwiejszym rozwiązaniem może być użycie bezpośredniego odwołania. Na przykład Blockly.Msg['LISTS_REPEAT_TITLE']
lub Blockly.Msg.LISTS_REPEAT_TITLE'
.
Tabele z ciągami znaków są wczytywane za pomocą dowolnego z plików .js
określonych dla danego języka w msg/js
. Aby wczytać prawidłowe tłumaczenie blokowe, wczytaj na swojej stronie internetowej odpowiedni plik.
Interpolacja wiadomości JSON
Atrybut message0
(oraz message1
, message2
itp.) określa dane wejściowe, pola i otaczający tekst etykiety. Dla pola LISTS_REPEAT_TITLE
w bloku lists_repeat
wartość w języku angielskim to:
Blockly.Msg.LISTS_REPEAT_TITLE = 'create list with item %1 repeated %2 times';
Dwa znaczniki interpolacji: %1
i %2
, wskazują lokalizacje obu rodzajów danych wejściowych.
Więcej informacji można znaleźć w tablicy args0
. args1
odpowiada ciągowi znaków message1
. Więcej informacji o określaniu danych wejściowych i pól bloków znajdziesz w przewodniku Tworzenie bloków niestandardowych.
Tekst między znacznikami interpolacji jest konwertowany na nienazwane pola etykiet. W ten sposób powstaje blok słów (w języku angielskim) i jak wygląda zapis:
// 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번 넣어, 리스트 생성";
Przy tłumaczeniu na języki pisane od prawej do lewej ciąg komunikatu jest zapisywany w kolejności wizualnej i nie powinien zawierać poleceń kierunku Unicode:
// In Arabic. Note how %2 is left of %1, since it read right to left.
Blockly.Msg.LISTS_REPEAT_TITLE = "إنشئ قائمة مع العنصر %1 %2 مرات";
Ponowna kompilacja tabel ciągów znaków
Tworzenie plików .js
tabeli z ciągami znaków jest częścią skryptu build:langfiles
. Skrypt pobiera klucze identyfikatorów i tłumaczenia na język angielski z msg/messages.js
, aby utworzyć nowe en.json
.
Następnie w połączeniu z tłumaczeniami znalezionymi w pozostałych plikach JSON utworzy ponownie zaktualizowane tabele ciągu znaków JavaScript we wszystkich językach, w tym nową en.js
.
Pliki JSON w języku innym niż angielski pochodzą od partnerów z TranslateWiki. Szczegółowe informacje o tym, jak możesz pomóc, znajdziesz w uwagach na temat tłumaczenia.