Opis
Użyj infrastruktury chrome.i18n
, aby wdrożyć internacjonalizację całej aplikacji lub rozszerzenia.
Plik manifestu
Jeśli rozszerzenie ma katalog /_locales
, w pliku manifestu musi być wskazana wartość "default_locale"
.
Pojęcia i wykorzystanie
Wszystkie ciągi znaków widoczne dla użytkowników musisz umieścić w pliku o nazwie messages.json
. Za każdym razem
dodajesz nowe ustawienia regionalne, dodajesz plik wiadomości w katalogu o nazwie /_locales/_localeCode_
, gdzie
localeCode to kod, np. en
w przypadku języka angielskiego.
Oto hierarchia plików umiędzynarodowionego rozszerzenia, które obsługuje język angielski (en
), hiszpański
(es
) i koreański (ko
):
Obsługa wielu języków
Załóżmy, że masz rozszerzenie z plikami przedstawionymi na tym rysunku:
Aby przetłumaczyć to rozszerzenie, musisz nadać mu nazwę każdy ciąg widoczny dla użytkowników i umieścić go w wiadomościach. . Plik manifestu rozszerzenia, pliki CSS i kod JavaScript używają nazwy każdego ciągu znaków, aby uzyskać jego wersji zlokalizowanej.
Tak będzie wyglądać rozszerzenie po umiędzynarodowieniu (zwróć uwagę, że nadal zawiera ono angielskie):
<img "__msg_extname__",="" "default_locale"="" "pl".="" "extname"."="" "Cześć="" _locates="" a="" alt="W pliku manifest.json " and="" był="" changed="" chrome.i18n.getmessage("extname").="" defines="" en="" file="" file,="" has="" hello="" in="" item="" javascript="" messages.json="" named="" nowy="" src="/static/docs/extensions/mv2/reference/i18n/images/i18n-after-1.gif" the="" to="" wartość="" świecie"="" />
Uwagi na temat umiędzynarodawiania:
- Możesz używać dowolnego z obsługiwanych języków. Jeśli używasz nieobsługiwanego języka, Google Chrome ignoruje go.
W pliku
manifest.json
i pliku CSS odwołaj się do ciągu o nazwie messagename w następujący sposób:__MSG_messagename__
W kodzie JavaScript rozszerzenia lub aplikacji znajdź ciąg o nazwie messagename w ten sposób:
chrome.i18n.getMessage("messagename")
W każdym wywołaniu funkcji
getMessage()
możesz podać do 9 ciągów, które zostaną umieszczone w wiadomości. Zobacz Przykłady: getMessage w przypadku szczegółowych informacji.Niektóre wiadomości, na przykład
@@bidi_dir
i@@ui_locale
, są dostarczane w ramach internacjonalizacji systemu. Pełną listę wstępnie zdefiniowanych nazw wiadomości znajdziesz w sekcji Wstępnie zdefiniowane komunikaty.W
messages.json
każdy ciąg widoczny dla użytkowników ma nazwę – „wiadomość” oraz opcjonalnie "description" elementu. Nazwa to klucz, np. „extName” lub „search_string” identyfikującego ciągu znaków. Komunikat określa wartość ciągu znaków w tym języku. Opcjonalny „description” umożliwia tłumaczom, którzy mogą nie być w stanie zobaczyć, jak dany ciąg znaków jest używany w . Na przykład:{ "search_string": { "message": "hello%20world", "description": "The string we search for. Put %20 between words that go together." }, ... }
Więcej informacji znajdziesz w artykule Formaty wiadomości związanych z różnymi językami.
Po umiędzynarodowieniu rozszerzenia tłumaczenie jest proste. Kopiujesz: messages.json
,
przetłumaczyć i umieścić kopię w nowym katalogu pod adresem /_locates
. Na przykład, aby obsługiwać
Hiszpański, tylko umieść przetłumaczoną kopię tekstu messages.json
pod tytułem /_locates/es
. Następujący rysunek
pokazuje poprzednie rozszerzenie z nowym tłumaczeniem na język hiszpański.
Wstępnie zdefiniowane komunikaty
System internacjonalizacji udostępnia kilka wstępnie zdefiniowanych komunikatów, które pomogą Ci zlokalizować treści. Te
uwzględnij @@ui_locale
(dzięki czemu możesz wykryć bieżący język interfejsu użytkownika) oraz kilka komunikatów @@bidi_...
, które
pozwalają określić kierunek tekstu. Te ostatnie wiadomości mają podobne nazwy do stałych w elemencie
gadżetów BIDI (dwukierunkowy) API.
Specjalnego komunikatu @@extension_id
można używać w plikach CSS i JavaScript niezależnie od tego, czy
rozszerzenie lub aplikacja są zlokalizowane. Ten komunikat nie działa w plikach manifestu.
Tabela poniżej zawiera opis wszystkich wstępnie zdefiniowanych komunikatów.
Nazwa wiadomości | Opis |
---|---|
@@extension_id | rozszerzenie lub identyfikator aplikacji; możesz używać tego ciągu do tworzenia adresów URL zasobów wewnątrz rozszerzenia. Tej wiadomości mogą używać nawet niezlokalizowane rozszerzenia. Uwaga: tej wiadomości nie można użyć w pliku manifestu. |
@@ui_locale | Obecny język, możesz używać tego ciągu do tworzenia adresów URL dla określonych języków. |
@@bidi_dir | Kierunek tekstu w bieżącym języku, „ltr” dla języków pisanych od lewej do prawej, takich jak angielski czy „rtl”. dla języków pisanych od prawej do lewej, np. arabskiego. |
@@bidi_reversed_dir | Jeśli @@bidi_dir to „ltr”, jest to „rtl”; W przeciwnym razie ma wartość „ltr”. |
@@bidi_start_edge | Jeśli @@bidi_dir ma wartość „ltr”, jest to „left”; w przeciwnym razie jest uznawana za „prawidłową”. |
@@bidi_end_edge | Jeśli @@bidi_dir to „ltr”, to ma wartość „right”; W przeciwnym razie jest to wartość „lewa”. |
Oto przykład użycia właściwości @@extension_id
w pliku CSS do utworzenia adresu URL:
body {
background-image:url('chrome-extension://__MSG_@@extension_id__/background.png');
}
Jeśli identyfikator rozszerzenia to abcdefghijklmnopqrstuvwxyzabcdef, to w poprzednim kodzie należy użyć pogrubionego wiersza. fragment kodu zmieni się w:
background-image:url('chrome-extension://abcdefghijklmnopqrstuvwxyzabcdef/background.png');
Oto przykład użycia wiadomości @@bidi_*
w pliku CSS:
body {
direction: __MSG_@@bidi_dir__;
}
div#header {
margin-bottom: 1.05em;
overflow: hidden;
padding-bottom: 1.5em;
padding-__MSG_@@bidi_start_edge__: 0;
padding-__MSG_@@bidi_end_edge__: 1.5em;
position: relative;
}
W językach zapisywanych od lewej do prawej, na przykład w języku angielskim, pogrubione linie wyglądają tak:
dir: ltr;
padding-left: 0;
padding-right: 1.5em;
Języki
Masz do wyboru wiele regionów, w tym te (np. en
), które pozwalają na pojedyncze tłumaczenie z uwzględnieniem wielu odmian danego języka (np. en_GB
czy en_US
).
Możesz zlokalizować rozszerzenie w dowolnym języku obsługiwanym w Chrome Web Store. Jeśli Twojego języka nie ma na liście, wybierz najbliższą alternatywę. Jeśli na przykład domyślne język rozszerzenia to "de_CH"
, wybierz "de"
w Chrome Web Store.
Kod języka | Język (region) |
---|---|
ar | arabski |
am | amharski |
bg | bułgarski |
bn | bengalski |
urząd certyfikacji | kataloński |
cs | czeski |
da | duński |
de | niemiecki |
el | grecki |
en | angielski |
en_AU | angielski (Australia) |
en_GB | angielski (Wielka Brytania) |
pl_PL | angielski (Stany Zjednoczone) |
es | hiszpański |
es_419 | hiszpański (Ameryka Łacińska i Karaiby) |
et | estoński |
fa | perski |
fi | fiński |
fil | filipiński |
fr | francuski |
gu | gudżarati |
on | hebrajski |
hi | hindi |
h | chorwacki |
hu | węgierski |
id | indonezyjski |
it | włoski |
ja | japoński |
kn | kannada |
ko | koreański |
lt | litewski |
lv | łotewski |
ml | malajalam |
mr | marathi |
ms | malajski |
nl | niderlandzki |
nie | norweski |
pl | polski |
pt_BR | portugalski (Brazylia) |
pt_PT | portugalski (Portugalia) |
ro | rumuński |
ru | rosyjski |
sk | słowacki |
sl | słoweński |
sr | serbski |
sv | szwedzki |
sw | suahili |
ta | tamilski |
te | telugu |
th | tajski |
tr | turecki |
uk | ukraiński |
vi | wietnamski |
zh_CN | chiński (Chiny) |
zh_TW | chiński (Tajwan) |
Wyszukiwanie wiadomości
Nie musisz definiować każdego ciągu dla każdego obsługiwanego języka. Jeśli język domyślny
messages.json
zawiera wartość każdego ciągu. Rozszerzenie lub aplikacja będzie działać niezależnie od tego,
jest rozproszone. Oto jak system rozszerzeń wyszukuje wiadomość:
- Wyszukaj plik z wiadomościami (jeśli jest dostępny) pod kątem preferowanego języka użytkownika. Jeśli na przykład Google
Język Chrome jest ustawiony na angielski (brytyjski) (
en_GB
). System najpierw szuka wiadomości w/_locates/en_GB/messages.json
Jeśli plik istnieje i komunikat jest widoczny, system sprawdza, Już nie musisz. - Jeśli preferowany język użytkownika określa region (czyli ma podkreślenie: _), wyszukaj
w lokalizacji bez tego regionu. Jeśli na przykład plik z wiadomościami
en_GB
nie istnieje lub nie będzie zawierać tej wiadomości, system sprawdzi plik z wiadomościamien
. Jeśli plik istnieje, system nie szuka już jej. - Wyszukaj język domyślny w pliku wiadomości. Na przykład, jeśli rozszerzenie
„default_locale” jest ustawiona na „es”, a nie
/_locates/en_GB/messages.json
ani/_locates/en/messages.json
zawiera wiadomość, a rozszerzenie używa wiadomości z adresu/_locates/es/messages.json
Na ilustracji poniżej komunikat o nazwie „colores” we wszystkich 3 językach, w których rozszerzenie obsługuje, ale „extName” działa tylko w dwóch regionach. Zawsze, gdy użytkownik korzysta z Google Chrome w Stanach Zjednoczonych Angielski widzi etykietę „Kolory”, a użytkownik posługujący się brytyjskim angielskim widzi „Kolory”. angielski (USA) i Użytkownicy Wielkiej Brytanii widzą rozszerzenie „Hello World”. Domyślnym językiem jest hiszpański, użytkownicy korzystający z przeglądarki Google Chrome w językach innych niż angielski zobaczą etykietę „Kolory”. oraz rozszerzenie pod tytułem „Hola mundo”.
Ustaw język przeglądarki
Aby przetestować tłumaczenia, warto ustawić język przeglądarki. W tej sekcji znajdziesz wskazówki, jak ustawienia regionalne w systemach Windows, Mac OS X, Linux i ChromeOS.
Windows
Możesz zmienić język przy użyciu skrótu lub interfejsu użytkownika Google Chrome. jest szybsza, jeśli go skonfigurujesz i możesz używać kilku języków jednocześnie.
Użyj skrótu specyficznego dla języka
Aby utworzyć skrót, który będzie uruchamiać Google Chrome w określonym języku, i go używać:
- Utwórz kopię skrótu do Google Chrome, który jest już na pulpicie.
- Zmień nazwę nowego skrótu, aby pasował do nowego języka.
Zmień właściwości skrótu, tak aby pole Cel określało
--lang
oraz--user-data-dir
. Wartość docelowa powinna wyglądać mniej więcej tak:path_to_chrome.exe --lang=locale --user-data-dir=c:\locale_profile_dir
Uruchom Google Chrome, klikając dwukrotnie skrót.
Na przykład, aby utworzyć skrót do uruchamiania Google Chrome w języku hiszpańskim (es
), możesz utworzyć skrót
skrót o nazwie chrome-es
z następującą wartością docelową:
path_to_chrome.exe --lang=es --user-data-dir=c:\chrome-profile-es
Możesz utworzyć dowolną liczbę skrótów, co ułatwi testowanie w wielu językach. Przykład:
path_to_chrome.exe --lang=en --user-data-dir=c:\chrome-profile-en
path_to_chrome.exe --lang=en_GB --user-data-dir=c:\chrome-profile-en_GB
path_to_chrome.exe --lang=ko --user-data-dir=c:\chrome-profile-ko
Korzystanie z interfejsu
Poniżej opisano, jak zmienić ustawienia regionalne za pomocą interfejsu użytkownika przeglądarki Google Chrome dla systemu Windows:
- Ikona aplikacji > Opcje
- Wybierz kartę Dla zaawansowanych.
- Przewiń w dół do sekcji Treść internetowa.
- Kliknij Zmień ustawienia czcionki i języka.
- Wybierz kartę Języki.
- Wybierz z menu język Google Chrome.
- Uruchom ponownie Chrome
Mac OS X
Aby zmienić język na Macu, użyj preferencji systemowych.
- Z menu Apple wybierz Preferencje systemowe.
- W sekcji Osobiste wybierz Międzynarodowe.
- Wybierz język i lokalizację
- Uruchom ponownie Chrome
Linux
Aby zmienić ustawienia regionalne w systemie Linux, najpierw zamknij Google Chrome. Następnie w jednym wierszu ustaw język LANGUAGE. i uruchomić przeglądarkę Google Chrome. Na przykład:
LANGUAGE=es ./chrome
ChromeOS
Aby zmienić język w ChromeOS:
- W obszarze powiadomień wybierz Ustawienia.
- W sekcji Języki i metody wprowadzania kliknij menu Język.
- Jeśli Twojego języka nie ma na liście, kliknij Dodaj języki i dodaj go.
- Po dodaniu języka kliknij opcję menu Więcej działań z 3 kropkami obok języka i wybierz Wyświetlaj ChromeOS w tym języku.
- Kliknij przycisk Uruchom ponownie obok ustawionego języka, aby ponownie uruchomić ChromeOS.
Przykłady
Proste przykłady internacjonalizacji znajdziesz w katalogu examples/api/i18n. Dla pełny przykład: examples/extensions/news. Inne przykłady oraz pomoc w wyświetlaniu kodu źródłowego znajdziesz w sekcji Przykłady.
getMessage()
Poniższy kod pobiera zlokalizowaną wiadomość z przeglądarki i wyświetla ją w postaci ciągu znaków. it zastępuje dwie zmienne w wiadomości ciągami „ciąg1” i „ciąg2”.
function getMessage() {
var message = chrome.i18n.getMessage("click_here", ["string1", "string2"]);
document.getElementById("languageSpan").innerHTML = message;
}
Aby podać i użyć pojedynczego ciągu znaków:
// In JavaScript code
status.innerText = chrome.i18n.getMessage("error", errorDetails);
"error": {
"message": "Error: $details$",
"description": "Generic error template. Expects error parameter to be passed in.",
"placeholders": {
"details": {
"content": "$1",
"example": "Failed to fetch RSS feed."
}
}
}
Więcej informacji o symbolach zastępczych znajdziesz na stronie Wiadomości o określonych regionach. Więcej informacji:
wywołującego getMessage()
znajdziesz w dokumentacji interfejsu API.
getAcceptLanguages()
Poniższy kod pobiera z przeglądarki języki akceptowane i wyświetla je jako ciąg znaków przez rozdzielając je znakiem „,”.
function getAcceptLanguages() {
chrome.i18n.getAcceptLanguages(function(languageList) {
var languages = languageList.join(",");
document.getElementById("languageSpan").innerHTML = languages;
})
}
Szczegółowe informacje o wywoływaniu funkcji getAcceptLanguages()
znajdziesz w dokumentacji interfejsu API.
detectLanguage()
Ten kod wykrywa do 3 języków na podstawie danego ciągu i wyświetla wynik jako ciągi tekstowe rozdzielone znakami nowego wiersza.
function detectLanguage(inputText) {
chrome.i18n.detectLanguage(inputText, function(result) {
var outputLang = "Detected Language: ";
var outputPercent = "Language Percentage: ";
for(i = 0; i < result.languages.length; i++) {
outputLang += result.languages[i].language + " ";
outputPercent +=result.languages[i].percentage + " ";
}
document.getElementById("languageSpan").innerHTML = outputLang + "\n" + outputPercent + "\nReliable: " + result.isReliable;
});
}
Więcej informacji o wywoływaniu funkcji detectLanguage(inputText)
znajdziesz w dokumentacji interfejsu API.
Typy
LanguageCode
Kod języka ISO, np. en
lub fr
. Pełną listę języków obsługiwanych przez tę metodę znajdziesz na stronie kLanguageInfoTable. W przypadku nieznanego języka zostanie zwrócona wartość und
, co oznacza, że [percentage] tekstu jest nieznanych w CLD.
Typ
ciąg znaków
Metody
detectLanguage()
chrome.i18n.detectLanguage(
text: string,
callback?: function,
)
Określa język podanego tekstu za pomocą CLD.
Parametry
-
tekst
ciąg znaków
Dane wejściowe użytkownika do przetłumaczenia.
-
wywołanie zwrotne
funkcja optional
Parametr
callback
wygląda tak:(result: object) => void
-
wynik
Obiekt
Obiekt LanguageDetectionResult zawiera wykrytą niezawodność języka i tablicę DetectedLanguage
-
isReliable
wartość logiczna
Zgodność języka wykryta przez CLD
-
języki
object[]
tablica wykrytychLanguage
-
language
ciąg znaków
-
procent
liczba
Odsetek wykrytego języka
-
-
-
Zwroty
-
Promise<object>
Chrome w wersji 99 lub nowszej .Obietnice są obsługiwane w Manifest V3 i nowszych, ale wywołania zwrotne są podane w przypadku zgodność wsteczną. Nie można użyć obu w tym samym wywołaniu funkcji. Polecenie promowana jest realizowane z tym samym typem, który jest przekazywany do wywołania zwrotnego.
getAcceptLanguages()
chrome.i18n.getAcceptLanguages(
callback?: function,
)
Pobiera języki przeglądarki. Jest inny niż język używany w przeglądarce. aby uzyskać język, użyj i18n.getUILanguage
.
Parametry
-
wywołanie zwrotne
funkcja optional
Parametr
callback
wygląda tak:(languages: string[]) => void
-
języki
ciąg znaków[]
Tablica kodu języka
-
Zwroty
-
Promise<LanguageCode[]>
Chrome w wersji 99 lub nowszej .Obietnice są obsługiwane w Manifest V3 i nowszych, ale wywołania zwrotne są podane w przypadku zgodność wsteczną. Nie można użyć obu w tym samym wywołaniu funkcji. Polecenie promowana jest realizowane z tym samym typem, który jest przekazywany do wywołania zwrotnego.
getMessage()
chrome.i18n.getMessage(
messageName: string,
substitutions?: any,
options?: object,
)
Pobiera zlokalizowany ciąg znaków dla określonej wiadomości. Jeśli brakuje komunikatu, ta metoda zwraca pusty ciąg znaków („”). Jeśli format wywołania getMessage()
jest nieprawidłowy – na przykład messageName nie jest ciągiem znaków lub tablica substitutions ma więcej niż 9 elementów, ta metoda zwraca undefined
.
Parametry
-
messageName
ciąg znaków
Nazwa wiadomości podana w pliku
messages.json
. -
zamienniki
dowolne opcjonalne
Maksymalnie 9 ciągów zastępowania, jeśli wiadomość wymaga ich.
-
Opcje
obiekt opcjonalny
Chrome w wersji 79 lub nowszej .-
escapeLt
Wartość logiczna opcjonalna
Escape
<
– tłumaczenie na język<
. Dotyczy to tylko samej wiadomości, a nie obiektów zastępczych. Może być przydatna, jeśli tłumaczenie jest używane w kontekście HTML. Szablony Closure używane z Closure Compiler generują go automatycznie.
-
Zwroty
-
ciąg znaków
Wiadomość zlokalizowana dla bieżącego języka.
getUILanguage()
chrome.i18n.getUILanguage()
Pobiera język interfejsu przeglądarki. Ta wartość różni się od metody i18n.getAcceptLanguages
, która zwraca preferowane języki użytkownika.
Zwroty
-
ciąg znaków
Kod języka interfejsu przeglądarki, np. en-US lub fr-FR.