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)