Como usar a tradução específica do local no Bash?

5

Examinando o manual do bash, encontrei a seção de tradução específica do local Manual de referência do Bash → 3.1.2.5 Tradução específica de local :

3.1.2.5 Locale-Specific Translation

A double-quoted string preceded by a dollar sign (‘$’) will cause the string to be translated according to the current locale. If the current locale is C or POSIX, the dollar sign is ignored. If the string is translated and replaced, the replacement is double-quoted.

Some systems use the message catalog selected by the LC_MESSAGES shell variable. Others create the name of the message catalog from the value of the TEXTDOMAIN shell variable, possibly adding a suffix of ‘.mo’. If you use the TEXTDOMAIN variable, you may need to set the TEXTDOMAINDIR variable to the location of the message catalog files. Still others use both variables in this fashion: TEXTDOMAINDIR/LC_MESSAGES/LC_MESSAGES/TEXTDOMAIN.mo.

Então eu decidi testá-lo.

Minha máquina usa o idioma inglês dos EUA:

$ echo $LANG
en_US.UTF-8

E escrever uma palavra em inglês funcionou bem:

$ echo $"Hello"
Hello

Eu verifiquei quais locais estão disponíveis aqui e descobri muitos:

$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
...
en_ZM.utf8
en_ZW.utf8
es_ES.utf8
POSIX

Então eu decidi testar essa funcionalidade com o espanhol. No entanto, a alteração da localidade não fez com que a tradução fosse acionada:

$ LANG=es_ES.UTF8 echo $"Hello"
Hello              # Still in English. Should be "Hola", in Spanish

Por que isso? O que estou perdendo aqui? Eu suspeito que há um conjunto de palavras que são traduzidas em algum lugar, mas não consigo descobrir onde.

Esta é a minha versão do Bash:

$ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
    
por fedorqui 04.01.2017 / 12:00

1 resposta

6

Você está perdendo a tradução real. (O computador não sabe inglês ou espanhol, tudo o que ele sabe é procurar a seqüência de caracteres em um catálogo.) Consulte Localização no Guia Avançado de Script Bash . Veja as FAQ para um exemplo elaborado. Existe aviso de segurança para a construção $"..." ; na prática, isso significa que você deve proteger o arquivo de traduções, bem como o próprio script.

    
por 04.01.2017 / 12:27

Tags