Apesar de praticamente não saber nada sobre como a localização é implementada no Linux, eu tentei o meu melhor para entender isso.
Breve Descrição
/usr/lib/locale/locale-archive
locale-archive
é um arquivo mapeado na memória gerado por locale-gen(8)
que invoca localedef(1)
. Mapeado na memória significa que, uma vez criado e chamado por um programa, só é carregado uma vez na memória. Como todos os conjuntos de idiomas definidos em /etc/locale.gen
são predefinidos e o próprio arquivo é altamente estático, não há necessidade de ter várias vezes na memória. Assim, toda vez que é chamado por outro programa, o processo é apontado para o arquivo já carregado na memória, portanto, somando-se à memória virtual do programa. Desta forma, não apenas a pegada de memória física do processo é reduzida, mas também cada sistema relativo à localização é acelerado. (nenhum disco I / O adicional necessário!)
Além disso, parece funcionar como uma espécie de arquivo de localidade de failback contendo todos os idiomas do sistema. Além disso, o arquivo é muito usado por softwares escritos com a glibc.
/usr/share/locale/$LOCALE_DIR/LC_MESSAGES/$PROGRAM.mo
A internacionalização ( i18n, 18 chars between 'i' and 'n'
) do software no Linux pode ser obtida usando o GNU-gettext.
- Quando um programa é escrito, todas as instruções de impressão são adaptadas para usar a função
gettext()
do GNUs envolvendo a string que precisa ser impressa. - Em seguida,
xgettext(1)
itera sobre a origem, criando.pot (Portable Object Template Files)
em seu caminho. - O tradutor humano pode usar
msginit(1)
para analisá-lo em.po (Portable Object)
arquivos, geralmente representando um catálogo de mensagens. Então todas as cordas são traduzidas manualmente. - Depois disso,
msgfmt(1)
é usado para compilar o arquivo.po
editado em arquivos binários.mo (Message Object)
. Estes podem ser enviados junto com o pacote de software.
Ao instalar um pacote em um sistema, /usr/share/locale/<locale_dir>/LC_MESSAGES/
é preenchido com $PROGRAM.mo
arquivos. Quando, e. invocando wget, sua LANG
env-variable apontará wget
para usar sua configuração de localidade atual, o que resulta em wget
incluindo as traduções pré-compiladas corretas por meio de ponteiros para a leitura .mo binary
.
Detalhes adicionais e fontes
Para arquivo de localidade:
Mapeamento de memória: Centos-Mailing-List
Métodos Sub-pacotes I18N: Documentação do Fedora em diferentes compilações de arquivo de localidade
Considere também as páginas de manual para locale(1), localedef(1)
e locale-gen(8)
.
Para arquivos .mo
:
Processo de criação de arquivos .mo
: Wikipedia no Gettext
Formato de arquivo GNU MO: explicação e formato binário
Considere também as páginas de manual para xgettext(1), msginit(1)
e msgfmt(1)
.
Veja também as variáveis ENV LC_MESSAGE
e LOCPATH
.
Estou certo de que isso apenas arranhou a superfície deste vasto tópico. No entanto, espero que isso seja suficiente para você começar.