Internacionalizando strings de interface do usuário internationalizing-ui-strings

As APIs do Java™ e do JavaScript permitem internacionalizar strings nos seguintes tipos de recursos:

  • Arquivos de origem Java™.
  • Scripts JSP.
  • JavaScript em bibliotecas do lado do cliente ou na origem da página.
  • Valores de propriedade do nó JCR usados em caixas de diálogo e propriedades de configuração do componente.

Para obter uma visão geral do processo de internacionalização e localização, consulte Internacionalizando componentes.

Internacionalizando strings em código Java™ e JSP internationalizing-strings-in-java-and-jsp-code

O pacote Java™ com.day.cq.i18n permite exibir cadeias de caracteres localizadas na interface do usuário. A classe I18n fornece o método get que recupera strings localizadas do dicionário Adobe Experience Manager (AEM). O único parâmetro obrigatório do método get é o literal da cadeia de caracteres no idioma inglês. O inglês é o idioma padrão da interface do usuário do. O exemplo a seguir localiza a palavra Search:

i18n.get("Search");

A identificação da sequência de caracteres no idioma inglês difere das estruturas de internacionalização típicas, onde um ID identifica uma sequência de caracteres e é usado para fazer referência à sequência de caracteres no tempo de execução. Usar o literal de string em inglês oferece os seguintes benefícios:

  • O código é fácil de entender.
  • A cadeia de caracteres no idioma padrão está sempre disponível.

Determinar o idioma do usuário determining-the-user-s-language

Há duas maneiras de determinar o idioma preferido pelo usuário:

  • Para usuários autenticados, determine o idioma nas preferências da conta do usuário.
  • A localidade da página solicitada.

A propriedade language da conta do usuário é o método preferido porque é mais confiável. No entanto, o usuário deve estar conectado para usar esse método.

Criação do objeto Java™ I18n creating-the-i-n-java-object

A classe I18n fornece dois construtores. A maneira como você determina a linguagem preferencial do usuário determina o construtor a ser usado.

Para apresentar a cadeia de caracteres no idioma especificado na conta de usuário, use o seguinte construtor (após a importação de com.day.cq.i18n.I18n):

I18n i18n = new I18n(slingRequest);

O construtor usa SlingHTTPRequest para recuperar a configuração de idioma do usuário.

Para usar o local da página para determinar o idioma, primeiro obtenha o ResourceBundle para o idioma da página solicitada:

Locale pageLang = currentPage.getLanguage(false);
ResourceBundle resourceBundle = slingRequest.getResourceBundle(pageLang);
I18n i18n = new I18n(resourceBundle);

Internacionalizando uma string internationalizing-a-string

Use o método get do objeto I18n para internacionalizar uma cadeia de caracteres. O único parâmetro obrigatório do método get é a cadeia de caracteres a ser internacionalizada. A string corresponde a uma string em um dicionário do Translator. O método get pesquisa a string no dicionário e retorna a tradução para o idioma atual.

O primeiro argumento do método get deve estar em conformidade com as seguintes regras:

  • O valor deve ser um literal de cadeia de caracteres. Uma variável do tipo String não é aceitável.
  • O literal da cadeia de caracteres deve ser expresso em uma única linha.
  • A cadeia de caracteres diferencia maiúsculas de minúsculas.
i18n.get("Enter a search keyword");

Uso de dicas de tradução using-translation-hints

Especifique a dica de tradução da string internacionalizada para distinguir entre strings duplicadas no dicionário. Use o segundo parâmetro opcional do método get para fornecer a dica de tradução. A dica de tradução deve corresponder exatamente à propriedade Comentário do item no dicionário.

Por exemplo, o dicionário contém a sequência de caracteres Request duas vezes: uma como verbo e outra como substantivo. O código a seguir inclui a dica de tradução como argumento no método get:

i18n.get("Request","A noun, as in a request for a web page");

Inclusão de variáveis em frases localizadas including-variables-in-localized-sentences

Inclua variáveis na string localizada para criar significado contextual em uma frase. Por exemplo, depois de fazer logon em um aplicativo web, a página inicial exibe a mensagem "Bem-vindo de volta, Administrador. Você tem duas mensagens na sua caixa de entrada." O contexto da página determina o nome de usuário e o número de mensagens.

No dicionário, as variáveis são representadas em strings como índices entre colchetes. Especifique os valores das variáveis como argumentos do método get. Os argumentos são colocados após a dica de tradução e os índices correspondem à ordem dos argumentos:

i18n.get("Welcome back {0}. You have {1} messages.", "user name, number of messages", user.getDisplayName(), numItems);

A string internacionalizada e a dica de tradução devem corresponder exatamente à string e ao comentário no dicionário. Você pode omitir a dica de localização fornecendo um valor null como segundo argumento.

Uso do Método Get Estático using-the-static-get-method

A classe I18N define um método get estático que é útil quando você deve localizar algumas cadeias de caracteres. Além dos parâmetros do método get de um objeto, o método estático requer o objeto SlingHttpRequest ou o ResourceBundle que você está usando, de acordo com a forma como você está determinando o idioma preferencial do usuário:

  • Usar a preferência de idioma do usuário: forneça o SlingHttpRequest como o primeiro parâmetro.

    I18n.get(slingHttpRequest, "Welcome back {}. You have {} messages.", "user name, number of messages", user.getDisplayName(), numItems);

  • Usar a linguagem da página: forneça o ResourceBundle como o primeiro parâmetro.

    I18n.get(resourceBundle,"Welcome back {}. You have {} messages.", "user name, number of messages", user.getDisplayName(), numItems);

Internacionalização de strings no JavaScript Code internationalizing-strings-in-javascript-code

A API do JavaScript permite localizar strings no cliente. Assim como no código Java™ e JSP, a API do JavaScript permite identificar cadeias de caracteres para localização, fornecer dicas de localização e incluir variáveis nas cadeias de caracteres localizadas.

A granite.utils pasta da biblioteca do cliente fornece a API do JavaScript. Para usar a API, inclua essa pasta da biblioteca do cliente na sua página. As funções de localização usam o namespace Granite.I18n.

Antes de apresentar cadeias de caracteres localizadas, defina a localidade usando a função Granite.I18n.setLocale. A função requer o código de idioma do local como argumento:

Granite.I18n.setLocale("fr");

Para apresentar uma cadeia de caracteres localizada, use a função Granite.I18n.get:

Granite.I18n.get("string to localize");

O exemplo a seguir internacionaliza a string "Bem-vindo de volta":

Granite.I18n.setLocale("fr");
Granite.I18n.get("string to localize", [variables], "localization hint");

Os parâmetros de função são diferentes do método Java™ I18n.get:

  • O primeiro parâmetro é o literal da string a ser localizado.
  • O segundo parâmetro é uma matriz de valores a serem inseridos no literal da string.
  • O terceiro parâmetro é a dica de localização.

O exemplo a seguir usa o JavaScript para localizar a caixa de diálogo "Bem-vindo de volta ao administrador". Você tem duas mensagens na sua caixa de entrada." frase:

Granite.I18n.setLocale("fr");
Granite.I18n.get("Welcome back {0}. You have {1} new messages in your inbox.", [username, numMsg], "user name, number of messages");

Internacionalizando strings de nós JCR internationalizing-strings-from-jcr-nodes

As cadeias de caracteres da interface do usuário geralmente se baseiam nas propriedades do nó JCR. Por exemplo, a propriedade jcr:title de uma página geralmente é usada como o conteúdo do elemento h1 no código da página. A classe I18n fornece o método getVar para localizar essas cadeias de caracteres.

O exemplo de script JSP a seguir recupera a propriedade jcr:title do repositório e exibe a cadeia de caracteres localizada na página:

<% title = properties.get("jcr:title", String.class);%>
<h1><%=i18n.getVar(title) %></h1>

Especificando dicas de tradução para nós JCR specifying-translation-hints-for-jcr-nodes

Semelhante às dicas de tradução na API Java™, você pode fornecer dicas de tradução para distinguir cadeias de caracteres duplicadas no dicionário. Forneça a dica de tradução como uma propriedade do nó que contém a propriedade internacionalizada. O nome da propriedade de dica é composto do nome da propriedade internacionalizada com o sufixo _commentI18n:

${prop}_commentI18n

Por exemplo, um nó cq:page inclui a propriedade jcr:title que está sendo localizada. A dica é fornecida como o valor da propriedade chamada jcr:title_commentI18n.

Testar cobertura de internacionalização testing-internationalization-coverage

Teste se você internacionalizou todas as strings na interface do usuário. Para ver quais cadeias de caracteres são cobertas, defina o idioma do usuário como zz_ZZ e abra a interface do usuário no navegador da Web. As strings internacionalizadas são exibidas com uma tradução stub no seguinte formato:

USR_*Default-String*_尠

A imagem a seguir mostra a tradução de stub para a página inicial do AEM:

Tradução de stub para a página inicial do AEM

Para definir o idioma do usuário, configure a propriedade language do nó de preferências para a conta do usuário.

O nó de preferências de um usuário tem um caminho como este:

/home/users/<letter>/<hash>/preferences

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab