Em contraste com os arquivos .xml, tornar os arquivos .js de um plugin traduzíveis requer mais trabalho personalizado. A principal diferença aqui é que não há uma maneira automática adequada de determinar se uma string deve ser exibida como uma string legível por humanos ou como um trecho de código. Portanto, você precisa marcá-la você mesmo. Já mostramos exemplos disso ao longo do texto. Aqui está uma descrição mais completa das funções de internacionalização (i18n) disponíveis no código JavaScript e algumas dicas para casos mais complexos:
- i18n (msgid, [...])
A função mais importante. Marca a string para tradução. A string (traduzida ou não) é retornada entre aspas duplas (''). Um número arbitrário de marcadores de posição pode ser usado na string, como mostrado abaixo. Usar esses marcadores de posição em vez de concatenar pequenas substrings é muito mais fácil para os tradutores:
i18n ("Comparar objetos %1 e %2", getString ('x'), getString ('y'));- i18nc (msgctxt, msgid, [...])
O mesmo que i18n(), mas fornecendo adicionalmente uma mensagem de contexto:
i18nc ("nome próprio, não estado de espírito", "Teste de humor");- i18np (msgid_singular, msgid_plural, n, [...])
Semelhante a i18n(), mas para mensagens que podem ser diferentes no singular ou plural (e algumas linguagens diferenciam ainda mais formas numéricas). Observe que, assim como com i18n(), você pode usar um número arbitrário de substituições, mas a primeira ('%1') é obrigatória e deve ser um número inteiro.
i18np ("Comparando um único par", "Comparando %1 pares distintos", n_pairs);- i18ncp (msgctxt, msgid_singular, msgid_plural, n, [...])
i18np() com mensagem de contexto adicionada.
- comment (comentário, [endentação])
Exibe um comentário de código, marcado para tradução. Ao contrário das outras funções i18n(), esta não é colocada entre aspas, mas um '#' é adicionado a cada linha do comentário.
comment ("Transpor a matriz"); echo ('x <- t (x)\n');
Para adicionar comentários aos tradutores (consulte acima para uma discussão sobre as diferenças entre comentário e contexto), adicione um comentário começando com "i18n:" ou "translators:" diretamente acima da chamada de comentário i18n(). Exemplo:
// i18n: A grafia está correta: Scree plot.
echo ('rk.header (' + i18n ("Scree plot") + ')\n');
Na maioria dos casos, você não precisará se preocupar com o comportamento do i18n() em relação às aspas. Como, normalmente, as strings traduzíveis são literais de string, colocá-las entre aspas é a coisa certa a fazer e economiza digitação. Além disso, em funções como makeHeaderCode()/Header() que geralmente colocam seus argumentos entre aspas, as strings i18n() são protegidas contra aspas duplicadas. Essencialmente, isso funciona enviando a string traduzida primeiro por meio de quote() (para colocá-la entre aspas) e, em seguida, por meio de noquote() (para protegê-la de aspas adicionais). Caso você precise de uma string traduzível que não esteja entre aspas, use i18n(noquote ("Minha mensagem")). Caso você precise que uma string traduzível seja citada uma segunda vez, envie-a através de: quote(), duas vezes.
Dito isso, geralmente não é uma boa ideia tornar partes como nomes de funções ou nomes de variáveis traduzíveis. Para começar, o R, a linguagem de programação, é inerentemente em inglês e não há internacionalização da linguagem em si. Comentários de código são um caso à parte, mas você deve usar a função comment() para eles. Em segundo lugar, tornar partes sintaticamente relevantes do código gerado traduzíveis significa que as traduções podem, na verdade, quebrar seu plugin. Por exemplo, se um tradutor desavisado traduzir uma string destinada a ser um nome de variável em duas palavras distintas com um espaço entre elas.