Descrição
Use a infraestrutura chrome.i18n
para implementar a internacionalização em todo o app ou extensão.
Manifesto
Se uma extensão tiver um diretório /_locales
, o manifesto precisará definir "default_locale"
.
Conceitos e uso
Você precisa colocar todas as strings visíveis ao usuário em um arquivo chamado messages.json
. Cada vez que
você adiciona uma nova localidade, um arquivo de mensagens é adicionado em um diretório chamado /_locales/_localeCode_
, em que
localeCode é um código como en
para inglês.
Esta é a hierarquia de arquivos de uma extensão internacionalizada que oferece suporte a inglês (en
), espanhol
(es
) e coreano (ko
):
Oferecer suporte a vários idiomas
Suponha que você tenha uma extensão com os arquivos mostrados na figura a seguir:
Para internacionalizar essa extensão, nomeie cada string visível para o usuário e coloque-a em um arquivo de mensagens. O manifesto, os arquivos CSS e o código JavaScript da extensão usam o nome de cada string para receber a versão localizada.
Esta é a aparência da extensão quando ela é internacionalizada (observe que ela ainda tem apenas strings em inglês):
Algumas observações sobre internacionalização:
- É possível usar qualquer uma das localidades compatíveis. Se você usar uma localidade não compatível, o Google Chrome vai ignorá-la.
Em arquivos
manifest.json
e CSS, consulte uma string chamada messagename assim:__MSG_messagename__
No código JavaScript da sua extensão ou app, faça referência a uma string chamada messagename desta forma:
chrome.i18n.getMessage("messagename")
Em cada chamada para
getMessage()
, é possível fornecer até nove strings para serem incluídas na mensagem. Consulte Exemplos: getMessage para mais detalhes.Algumas mensagens, como
@@bidi_dir
e@@ui_locale
, são fornecidas pelo sistema de internacionalização. Consulte a seção Mensagens predefinidas para ver uma lista completa de nomes de mensagens predefinidas.Em
messages.json
, cada string visível ao usuário tem um nome, um item "message" e um item opcional "description". O nome é uma chave, como "extName" ou "search_string", que identifica a string. A "message" especifica o valor da string nessa localidade. A "descrição" opcional ajuda os tradutores, que talvez não consigam ver como a string é usada na sua extensão. Exemplo:{ "search_string": { "message": "hello%20world", "description": "The string we search for. Put %20 between words that go together." }, ... }
Para mais informações, consulte Formatos: mensagens específicas da localidade.
Depois que uma extensão é internacionalizada, a tradução dela é simples. Você copia messages.json
,
traduz e coloca a cópia em um novo diretório em /_locales
. Por exemplo, para oferecer suporte ao
espanhol, basta colocar uma cópia traduzida de messages.json
em /_locales/es
. A figura a seguir mostra a extensão anterior com uma nova tradução em espanhol.
Mensagens predefinidas
O sistema de internacionalização oferece algumas mensagens predefinidas para ajudar na localização. Isso inclui @@ui_locale
, para que você possa detectar a localidade atual da interface, e algumas mensagens @@bidi_...
que permitem detectar a direção do texto. As últimas mensagens têm nomes semelhantes a constantes na
API BIDI (bidirecional) de gadgets.
A mensagem especial @@extension_id
pode ser usada nos arquivos CSS e JavaScript, independente de a extensão ou o app estar localizado. Essa mensagem não funciona em arquivos de manifesto.
A tabela a seguir descreve cada mensagem predefinida.
Nome da mensagem | Descrição |
---|---|
@@extension_id | O ID da extensão ou do app. Você pode usar essa string para criar URLs de recursos dentro da extensão. Mesmo extensões não localizadas podem usar essa mensagem. Observação:não é possível usar essa mensagem em um arquivo de manifesto. |
@@ui_locale | A localidade atual. Você pode usar essa string para criar URLs específicos à localidade. |
@@bidi_dir | A direção do texto para a localidade atual, "ltr" para idiomas da esquerda para a direita, como inglês, ou "rtl" para idiomas da direita para a esquerda, como árabe. |
@@bidi_reversed_dir | Se @@bidi_dir for "ltr", será "rtl". Caso contrário, será "ltr". |
@@bidi_start_edge | Se @@bidi_dir for "ltr", será "left". Caso contrário, será "right". |
@@bidi_end_edge | Se @@bidi_dir for "ltr", será "right". Caso contrário, será "left". |
Veja um exemplo de como usar @@extension_id
em um arquivo CSS para construir um URL:
body {
background-image:url('chrome-extension://__MSG_@@extension_id__/background.png');
}
Se o ID da extensão for abcdefghijklmnopqrstuvwxyzabcdef, a linha em negrito no snippet de código anterior será:
background-image:url('chrome-extension://abcdefghijklmnopqrstuvwxyzabcdef/background.png');
Confira um exemplo de como usar mensagens @@bidi_*
em um arquivo 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;
}
Para idiomas da esquerda para a direita, como o inglês, as linhas em negrito ficam assim:
dir: ltr;
padding-left: 0;
padding-right: 1.5em;
Localidades
É possível escolher entre várias localidades, incluindo algumas (como en
) que permitem que uma única tradução seja compatível com várias variações de um idioma (como en_GB
e en_US
).
É possível localizar sua extensão para qualquer localidade compatível com a Chrome Web Store. Se sua localidade não estiver listada aqui, escolha a alternativa mais próxima. Por exemplo, se o local padrão da sua extensão for "de_CH"
, escolha "de"
na Chrome Web Store.
Código da localidade | Idioma (região) |
---|---|
ar |
Árabe |
am |
Amárico |
bg |
Búlgaro |
bn |
Bengali |
ca |
Catalão |
cs |
Tcheco |
da |
Dinamarquês |
de |
Alemão |
el |
Grego |
en |
Inglês |
en_AU |
Inglês (Austrália) |
en_GB |
Inglês (Grã-Bretanha) |
en_US |
Inglês (EUA) |
es |
Espanhol |
es_419 |
Espanhol (América Latina e Caribe) |
et |
Estoniano |
fa |
Persa |
fi |
Finlandês |
fil |
Filipino |
fr |
Francês |
gu |
Guzerate |
he |
Hebraico |
hi |
Hindi |
hr |
Croata |
hu |
Húngaro |
id |
Indonésio |
it |
Italiano |
ja |
Japonês |
kn |
Canarês |
ko |
Coreano |
lt |
Lituano |
lv |
Letão |
ml |
Malaiala |
mr |
Marati |
ms |
Malaio |
nl |
Holandês |
no |
Norueguês |
pl |
Polonês |
pt_BR |
Português (Brasil) |
pt_PT |
Português (Portugal) |
ro |
Romeno |
ru |
Russo |
sk |
Eslovaco |
sl |
Esloveno |
sr |
Sérvio |
sv |
Sueco |
sw |
Suaíli |
ta |
Tâmil |
te |
Télugo |
th |
Tailandês |
tr |
Turco |
uk |
Ucraniano |
vi |
Vietnamita |
zh_CN |
Chinês (China) |
zh_TW |
Chinês (Taiwan) |
Pesquisar mensagens
Não é necessário definir todas as strings para todas as localidades compatíveis. Desde que o arquivo messages.json
do local padrão tenha um valor para cada string, a extensão ou o app será executado, não importa o quão esparsa seja uma tradução. Veja como o sistema de extensão pesquisa uma mensagem:
- Pesquise no arquivo de mensagens (se houver) a localidade de preferência do usuário. Por exemplo, quando a localidade do Google
Chrome está definida como inglês britânico (
en_GB
), o sistema primeiro procura a mensagem em/_locales/en_GB/messages.json
. Se o arquivo existir e a mensagem estiver lá, o sistema não vai procurar mais. - Se a localidade de preferência do usuário tiver uma região (ou seja, a localidade tem um sublinhado: _), pesquise a localidade sem essa região. Por exemplo, se o arquivo de mensagens
en_GB
não existir ou não contiver a mensagem, o sistema vai procurar no arquivo de mensagensen
. Se o arquivo existir e a mensagem estiver lá, o sistema não vai procurar mais. - Pesquise o arquivo de mensagens para a localidade padrão. Por exemplo, se o "default_locale" da extensão estiver definido como "es", e nem
/_locales/en_GB/messages.json
nem/_locales/en/messages.json
contiverem a mensagem, a extensão usará a mensagem de/_locales/es/messages.json
.
Na figura a seguir, a mensagem chamada "colores" está em todas as três localidades compatíveis com a extensão, mas "extName" está em apenas duas delas. Em qualquer lugar em que um usuário que executa o Google Chrome em inglês dos EUA vê o rótulo "Colors", um usuário do inglês britânico vê "Colours". Os usuários do inglês americano e britânico veem o nome da extensão "Hello World". Como o idioma padrão é o espanhol, os usuários que executam o Google Chrome em qualquer idioma que não seja o inglês veem o rótulo "Colores" e o nome da extensão "Hola mundo".
Definir a localidade do navegador
Para testar traduções, talvez seja necessário definir a localidade do navegador. Esta seção mostra como definir a localidade no Windows, Mac OS, Linux e ChromeOS.
Windows
É possível mudar a localidade usando um atalho específico ou a interface do Google Chrome. O método de atalho é mais rápido depois de configurado e permite usar vários idiomas ao mesmo tempo.
Usar um atalho específico da localidade
Para criar e usar um atalho que inicia o Google Chrome com uma localidade específica:
- Faça uma cópia do atalho do Google Chrome que já está na sua área de trabalho.
- Renomeie o novo atalho para corresponder à nova localidade.
Mude as propriedades do atalho para que o campo "Destino" especifique as flags
--lang
e--user-data-dir
. O destino será parecido com isto:path_to_chrome.exe --lang=locale --user-data-dir=c:\locale_profile_dir
Clique duas vezes no atalho para iniciar o Google Chrome.
Por exemplo, para criar um atalho que inicie o Google Chrome em espanhol (es
), você pode criar um
atalho chamado chrome-es
com o seguinte destino:
path_to_chrome.exe --lang=es --user-data-dir=c:\chrome-profile-es
Você pode criar quantos atalhos quiser, facilitando o teste em vários idiomas. Por exemplo:
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
Usar a interface
Veja como mudar a localidade usando a interface no Google Chrome para Windows:
- Ícone do app > Opções
- Escolha a guia Por dentro do Google Chrome.
- Role a tela até Conteúdo da Web.
- Clique em Mudar configurações de fonte e idioma.
- Escolha a guia Idiomas.
- Use o menu suspenso para definir o idioma do Google Chrome.
- Reinicie o Chrome.
Mac OS
Para mudar a localidade no Mac, use as preferências do sistema.
- No menu Apple, escolha Preferências do Sistema.
- Na seção Pessoal, escolha Internacional.
- Escolher seu idioma e local
- Reinicie o Chrome.
Linux
Para mudar a localidade no Linux, saia do Google Chrome primeiro. Em seguida, em uma única linha, defina a variável de ambiente LANGUAGE e inicie o Google Chrome. Exemplo:
LANGUAGE=es ./chrome
ChromeOS
Para mudar a localidade no ChromeOS:
- Na bandeja do sistema, escolha Configurações.
- Na seção Idiomas e entrada, escolha o menu suspenso Idioma.
- Se o idioma não estiver na lista, clique em Adicionar idiomas e adicione.
- Depois de adicionar, clique no item de menu de três pontos Mais ações ao lado do idioma e escolha Mostrar o ChromeOS neste idioma.
- Clique no botão Reiniciar que aparece ao lado do idioma definido para reiniciar o ChromeOS.
Exemplos
Confira exemplos de internacionalização no diretório examples/api/i18n. Para um exemplo completo, consulte examples/extensions/news. Para outros exemplos e ajuda para visualizar o código-fonte, consulte Exemplos.
getMessage()
O código a seguir recebe uma mensagem localizada do navegador e a mostra como uma string. Ele substitui dois marcadores de posição na mensagem pelas strings "string1" e "string2".
function getMessage() {
var message = chrome.i18n.getMessage("click_here", ["string1", "string2"]);
document.getElementById("languageSpan").innerHTML = message;
}
Veja como fornecer e usar uma única string:
// 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."
}
}
}
Para mais informações sobre marcadores de posição, consulte a página Mensagens específicas da localidade. Para detalhes sobre
como chamar getMessage()
, consulte a referência da API.
getAcceptLanguages()
O código a seguir recebe os idiomas aceitos do navegador e os mostra como uma string, separando cada um com ",".
function getAcceptLanguages() {
chrome.i18n.getAcceptLanguages(function(languageList) {
var languages = languageList.join(",");
document.getElementById("languageSpan").innerHTML = languages;
})
}
Para detalhes sobre como chamar getAcceptLanguages()
, consulte a referência da API.
detectLanguage()
O código a seguir detecta até três idiomas da string especificada e mostra o resultado como strings separadas por novas linhas.
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;
});
}
Para mais detalhes sobre como chamar detectLanguage(inputText)
, consulte a referência da API.
Tipos
LanguageCode
Um código de idioma ISO, como en
ou fr
. Para uma lista completa de idiomas compatíveis com esse método, consulte kLanguageInfoTable. Para um idioma desconhecido, und
será retornado, o que significa que [porcentagem] do texto é desconhecido para a CLD.
Tipo
string
Métodos
detectLanguage()
chrome.i18n.detectLanguage(
text: string,
): Promise<object>
Detecta o idioma do texto fornecido usando o CLD.
Parâmetros
-
texto
string
String de entrada do usuário a ser traduzida.
Retorna
-
Promise<object>
Chrome 99+
getAcceptLanguages()
chrome.i18n.getAcceptLanguages(): Promise<LanguageCode[]>
Recebe os idiomas aceitos do navegador. Isso é diferente da localidade usada pelo navegador. Para receber a localidade, use i18n.getUILanguage
.
Retorna
-
Promise<LanguageCode[]>
Chrome 99+
getMessage()
chrome.i18n.getMessage(
messageName: string,
substitutions?: any,
options?: object,
): string
Recebe a string localizada da mensagem especificada. Se a mensagem estiver faltando, esse método vai retornar uma string vazia (''). Se o formato da chamada getMessage()
estiver incorreto, por exemplo, se messageName não for uma string ou se a matriz substitutions tiver mais de nove elementos, esse método vai retornar undefined
.
Parâmetros
-
messageName
string
O nome da mensagem, conforme especificado no arquivo
messages.json
. -
substitutions
qualquer opcional
Até nove strings de substituição, se a mensagem exigir alguma.
-
opções
objeto opcional
Chrome 79 ou mais recente-
escapeLt
booleano opcional
Escape
<
na tradução para<
. Isso se aplica apenas à mensagem em si, não aos marcadores de posição. Os desenvolvedores podem usar isso se a tradução for usada em um contexto HTML. Os modelos do Closure usados com o Closure Compiler geram isso automaticamente.
-
Retorna
-
string
Mensagem localizada para a localidade atual.
getUILanguage()
chrome.i18n.getUILanguage(): string
Recebe o idioma da interface do navegador. Isso é diferente de i18n.getAcceptLanguages
, que retorna os idiomas preferidos do usuário.
Retorna
-
string
O código do idioma da interface do navegador, como en-US ou fr-FR.