Jeśli dodasz do podstawowej wersji Blockly funkcję, która wymaga nowych ciągów widocznych dla użytkownika, musisz dodać te ciągi do Blockly.Msg
, aby można było je przetłumaczyć w Translatewiki. (Więcej informacji o dodawaniu tokenów lokalizacji do własnej aplikacji znajdziesz w sekcji Lokalizacja).
- Dodaj nowy ciąg znaków z odpowiednią nazwą i opisem do pliku
msg/messages.js
. - Uruchom polecenie
npm run messages
, aby automatycznie dodać tłumaczenie do plikówmsg/json/qqq.json
imsg/json/en.js
. W niektórych przypadkach ten krok może też zmienićmsg/json/constants.js
lubmsg/json/synonyms.js
. - Sprawdź, czy automatycznie wygenerowane pliki są prawidłowe. Pamiętaj, że skrypt może usunąć sekcję
@metadata
na początkuqqq.json
. Jeśli tak się stanie, należy ostrożnie cofnąć tę zmianę, aby dodać nowy ciąg znaków, ale nie usunąć znaku@metadata
. - W kodzie funkcji odwołaj się do nowego ciągu za pomocą kodu
Blockly.Msg['MY_NEW_MESSAGE']
. - Zatwierdź wszystkie zmiany w plikach
msg
wraz z kodem funkcji.
Jeśli na przykład dodasz ten kod do pliku msg/messages.js
:
/** @type {string} */
/// This is a hint to translators about the context for the message.
Blockly.Msg.MY_NEW_MESSAGE = 'This is a string that users will see!';
Następnie uruchom npm run messages
. W msg/en.json
powinny pojawić się te zmiany:
// ...
"MY_NEW_MESSAGE": "This is a message that users will see!",
// ...
oraz w msg/qqq.json
:
// ...
"MY_NEW_MESSAGE": "This is a hint to translators about the context for the message.",
// ...
Następnie możesz odwołać się do tego ciągu tekstowego w kodzie za pomocą Blockly.Msg['MY_NEW_MESSAGE']
.
Wskazówki dotyczące tłumaczenia
Komentarz z trzema ukośnikami w msg/messages.js
jest wyświetlany użytkownikom TranslateWiki jako dodatkowe informacje podczas tłumaczenia. Podaj kontekst dotyczący tego, gdzie komunikat będzie wyświetlany użytkownikom. Jeśli wiadomość zawiera parametry (np. %1
),
wyjaśnij, co oznaczają parametry.
Oto przykład dobrej wskazówki dotyczącej tłumaczenia, która wyjaśnia parametry i zawiera link do dodatkowych informacji.
/** @type {string} */
/// block text - Repeatedly counts a variable (%1)
/// starting with a (usually lower) number in a range (%2),
/// ending with a (usually higher) number in a range (%3), and counting the
/// iterations by a number of steps (%4). As in
/// [https://github.com/google/blockly/wiki/Loops#count-with
/// https://github.com/google/blockly/wiki/Loops#count-with].
Blockly.Msg.CONTROLS_FOR_TITLE = 'count with %1 from %2 to %3 by %4';
Typy kontekstu
Wiele wskazówek zawiera prefiks, który wyjaśnia kontekst wiadomości. Typowe prefiksy to:
- blokować tekst,
- tekst przycisku,
- menu kontekstowe
- menu rozwijane
- matematyka
- powiadomienie typu toast
- etykietka
Jeśli Twój komunikat pojawia się w jednym z tych kontekstów, użyj odpowiedniego prefiksu.
Synonimy
Czasami trzeba zmienić klucz wiadomości, ale nie tłumaczenia. W takim przypadku możesz ustawić starą wiadomość jako synonim nowej wiadomości, np. w ten sposób:
/** @type {string} */
Blockly.Msg.CONTROLS_FOR_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
Opcjonalne wiadomości
Niektóre ciągi tekstowe w wiadomościach raczej nie wymagają tłumaczenia, z wyjątkiem pewnych okoliczności, np. nazw własnych lub symboli. W Blockly adresy URL pomocy są często oznaczane jako opcjonalne.
Języki są dodawane do repozytorium Blockly tylko wtedy, gdy są przetłumaczone w co najmniej 25%. Dlatego oznaczenie wiadomości, które prawdopodobnie nie wymagają tłumaczenia, jako opcjonalnych pomoże tym językom osiągnąć próg bez konieczności uzupełniania opcjonalnych tłumaczeń.
/** @type {string} */
/// {{Optional}} math - The symbol for the binary operation addition.
Blockly.Msg.MATH_ADDITION_SYMBOL = '+';
Elementy notranslate
Kolory używane w przypadku domyślnych kategorii bloków są oznaczone {{notranslate}}
. Nie są one przeznaczone do lokalizacji, ale znajdują się w systemie lokalizacji, aby programiści mogli łatwo zmieniać kolory bloków w domyślnych kategoriach. Jeśli dodasz nowe kategorie blokowania, użyj dyrektywy {{notranslate}}
. Jeśli dodasz inny typ wiadomości, który Twoim zdaniem nigdy nie powinien być tłumaczony, zastanów się, czy system lokalizacji jest odpowiednim miejscem dla tego ciągu znaków.
/** @type {string} */
/// {{Notranslate}} Hue value for all logic blocks.
Blockly.Msg.LOGIC_HUE = '210';