Capítulo 8. I18N e L10N

Índice

8.1. A entrada do teclado
8.1.1. O suporte a método de entrada com IBus
8.1.2. Um exemplo para Japonês
8.1.3. Desactivar o método de entrada
8.2. O mostrador de resultados
8.3. O locale
8.3.1. Bases de codificação
8.3.2. Fundamentos para o locale UTF-8
8.3.3. A reconfiguração do locale
8.3.4. O valor da variável de ambiente "$LANG"
8.3.5. O locale específico apenas sob X Window
8.3.6. Codificação de nomes de ficheiros
8.3.7. Mensagens localizadas e documentação traduzida
8.3.8. Efeitos do locale

O Multilingualization (M17N) ou Suporte de Linguagem Nativa para um software de aplicação é feito em 2 passos.

[Dica] Dica

Existem 17, 18, ou 10 letras entre "m" e "n", "i" e "n", ou "l" e "n" em 'multilingualization', 'internationalization', e 'localization' os quais correspondem a M17N, I18N, e L10N.

O software moderno como o GNOME e o KDE está multi-lingualizado. Eles são internacionalizados ao fazê-los lidar com dados UTF-8 e localizados ao disponibilizar as suas mensagens traduzidas através da infraestrutura gettext(1). As mensagens traduzidas podem ser disponibilizadas em pacotes de localização separados. Podem ser seleccionados simplesmente ao definir variáveis de ambiente pertinentes ao locale apropriado.

A representação mais simples dos dados de texto é o ASCII o qual é suficiente para Inglês e usa menos de 127 caracteres (representados em 7 bits). De modo a suportar muitos mais caracteres para o suporte in internacional, foram inventados muitos sistemas de codificação de caracteres. O sistema mais moderno e sensível é o UTF-8 o qual pode lidar com praticamente todos os caracteres conhecidos dos humanos (veja Secção 8.3.1, “Bases de codificação”).

Veja Introdução ao i18n para mais detalhes.

O suporte a hardware internacional é activado com dados de configuração de hardware localizados.

O sistema Debian pode ser configurado para funcionar com muitas disposições internacionais de teclado usando os pacotes keyboard-configuration e console-setup.

# dpkg-reconfigure keyboard-configuration
# dpkg-reconfigure console-setup

Isto configura o teclado para a consola Linux e o X Window actualiza os parâmetros de configuração em "/etc/default/keyboard" e "/etc/default/console-setup". Isto também configura o tipo de letra (font) da consola Linux.

Muitos caracteres não-ASCII incluindo caracteres acentuados usados por muitas linguagens Europeias podem ficar disponíveis com tecla morta, tecla AltGr, e tecla compose.

Para as linguagens Asiáticas, você precisa de um suporte de método de entrada mais complicado como o IBus discutido em seguida.

A consola do Linux apenas pode mostrar caracteres limitados. (Você precisa usar programas de terminal especiais como o jfbterm(1) para mostrar linguagens não-Europeias numa consola não-X.)

O X Window pode mostrar quaisquer caracteres em UTF-8 desde que a font necessária exista. (A codificação dos dados da font original fica ao cuidado do Sistema X Window e é transparente para o utilizador.)

O seguinte foca-se no locale para aplicações que correm sob ambiente X Window iniciado a partir do gdm3(1).

A variável de ambiente "LANG=xx_YY.ZZZZ" define o locale para o código de linguagem "xx", código de país "yy", e codificação "ZZZZ" (veja Secção 1.5.2, “A variável "$LANG"”).

O sistema Debian actual normalmente define o locale como "LANG=xx_YY.UTF-8". Isto usa a codificação UTF-8 com o conjunto de caracteres Unicode. Este sistema de codificação UTF-8 é um sistema de código multibyte e usa pontos de código inteligentemente. Os dados ASCII, que consistem apenas em códigos com alcance de 7 bits, são sempre dados UTF-8 válidos consistindo apenas com 1 byte por caractere.

O sistema Debian anterior costumava definir o locale como "LANG=C" ou "LANG=xx_YY" (sem ".UTF-8").

  • O conjunto de caracteres ASCII é usado para "LANG=C" ou "LANG=POSIX".

  • O sistema de codificação tradicional em Unix é usado para "LANG=xx_YY".

O sistema de codificação tradicional actual usado para "LANG=xx_YY" pode ser identificado ao verificar "/usr/share/i18n/SUPPORTED". Por exemplo, "en_US" usa codificação "ISO-8859-1" e "fr_FR@euro" usa codificação "ISO-8859-15".

[Dica] Dica

Para o significado dos valores de codificação, veja Tabela 11.2, “Lista de valores de codificação e a sua utilização”.

O conjunto de caracteres Unicode pode representar praticamente todos os caracteres conhecidos dos humanos com um alcance de códigos de 0 até 10FFFF em hexadecimal. O seu armazenamento requer pelo menos 21 bits.

O sistema de codificação de texto UTF-8 encaixa pontos de código Unicode num fluxo de dados de 8 bits sensível compatível com o sistema de processamento de dados ASCII. UTF significa Unicode Transformation Format.

Eu recomendo usar o locale UTF-8 para o seu ambiente de trabalho, ex. "LANG=en_US.UTF-8". A primeira parte do locale determina as mensagens apresentadas pelas aplicações. Por exemplo, o gedit(1) (editor de texto para o ambiente GNOME) sob o locale "LANG=fr_FR.UTF-8" pode mostrar e editar dados de texto em caracteres Chineses enquanto apresenta os menus em Francês, desde que as fonts e métodos de entrada necessários estejam instalados.

Também recomendo definir o locale usando a variável de ambiente "$LANG". Não vejo grande benefício ao definir uma combinação complicada de variáveis "LC_*" (veja locale(1)) sob locale UTF-8.

Mesmo o Inglês simples pode conter caracteres não-ASCII, ex. as marcas de citação esquerda e direita ligeiramente curvas não estão disponíveis em ASCII.

“texto com dupla citação” não é "ASCII com citação dupla"
‘texto com citação singular’ não é 'ASCII com citação singular'

Quando os dados de texto simples em ASCII são convertidos para UTF-8, fica exactamente com o mesmo conteúdo e tamanho que o original em ASCII. Portanto não se perde nada ao implantar o locale UTF-8.

Alguns programas consomem mais memória após suportarem I18N. Isto é porque estão codificados para usar UTF-32(UCS4) internamente para suportar Unicode para optimização de velocidade e consomem 4 bytes por cada caractere ASCII independentemente do locale seleccionado. Mais uma vez, você não perde nada ao implantar o locale UTF-8.

Os sistema de codificação não-UTF-8 antigos específicos de marcas tentem a ter diferenças menores mas aborrecidas em alguns caracteres como os gráficos para muitos países. A implantação do sistema UTF-8 pelos Sistemas Operativos modernos praticamente resolveu estes problemas de conflitos de codificação.

Você pode escolher um locale específico apenas sob X Window não relacionado com o seu locale predefinido de todo o sistema usando personalização do PAM (veja xref linkend="_pam_and_nss"/>) como se segue.

Este ambiente deverá disponibilizar-lhe a melhor experiência de ambiente de trabalho com estabilidade. Você tem acesso ao terminal de caracteres funcional com mensagens legíveis mesmo quando o Sistema X Window não está a funcionar. Isto torna-se essencial para linguagens que usam caracteres não-romanos como o Chinês, Japonês e Coreano.

[Nota] Nota

Pode existir outra maneira disponível como o melhoramento do pacote de gestão de sessão X, mas por favor leia o seguinte como o método genérico e básico de definir o locale. Para o gdm3(1), Eu sei que você pode seleccionar da sessão X através do seu menu.

A seguinte linha define a localização do ficheiro do ambiente de linguagem no ficheiro do configuração do PAM, como o "/etc/pam.d/gdm3.

auth    required        pam_env.so read_env=1 envfile=/etc/default/locale

Mude isto para o seguinte.

auth    required        pam_env.so read_env=1 envfile=/etc/default/locale-x

Para Japonês, crie um ficheiro "/etc/default/locale-x" com permissões "-rw-r--r-- 1 root root" contendo o seguinte.

LANG="ja_JP.UTF-8"

Mantenha o ficheiro "/etc/default/locale" predefinido para outros programas com o seguinte.

LANG="en_US.UTF-8"

Esta é a técnica mais genérica para personalizar o locale e faz com que o diálogo de selecção de menu do próprio gdm3(1) fique localizado (traduzido).

Alternativamente para este caso, você pode simplesmente alterar o locale usando o ficheiro "~/.xsessionrc".

Para troca de dados entre plataformas (veja Secção 10.1.7, “Dispositivo de armazenamento amovível”), você pode precisar de montar algum sistema de ficheiros com codificações particulares. por exemplo, o mount(8) para sistema de ficheiros vfat assume CP437 se usado sem opção. Você precisa de fornecer uma opção explícita de montagem para usar UTF-8 ou CP932 para os nomes dos ficheiros.

[Nota] Nota

Quando se monta automaticamente uma caneta de memória USB sob ambientes de trabalho modernos como o GNOME, você pode fornecer tal opção de montagem ao clicar com o botão direito no ícone no ambiente de trabalho, clique no separador "Drive", clique para expandir "Definições", e insira "utf8" nas "Opções de montagem:". Não próxima vez que esta caneta de memória for montada, está activa a montagem com UTF-8.

[Nota] Nota

Se você está a actualizar o sistema ou a mover os discos de um sistema antigo não-UTF-8, os nomes de ficheiros com caracteres não-ASCII podem ser codificados com as codificações históricas e obsoletas como a ISO-8859-1 ou eucJP. por favor procure a ajuda de ferramentas de conversão de texto para os converter para UTF-8. Veja Secção 11.1, “Ferramentas de conversão de dados em texto”.

O Samba usa Unicode para os clientes mais recentes (Windows NT, 200x, XP) mas usa CP850 para os clientes mais antigos (DOS e Windows 9x/Me) por predefinição. Esta predefinição para os clientes mais antigos pode ser alterada usando "dos charset" no ficheiro "/etc/samba/smb.conf" por exemplo para CP932 para Japonês.

Existem traduções para muitas das mensagens de texto e documentos que são mostrados no sistema Debian, tais como as mensagens de erro, as saídas normais dos programas, os menus e os manuais. A cadeia de ferramentas de comandos gettext(1) do GNU é usada como a ferramenta backend para a maioria das actividades de tradução.

Sob "Tarefas" → "Localização" o aptitude(8) disponibiliza uma lista extensa de pacotes binários úteis que adicionam mensagens localizadas às aplicações e fornecem documentação traduzida.

Por exemplo, você pode obter as mensagens localizadas para os manuais ao instalar o pacote manpages-<LANG>. Para ler o manual em linguagem Italiana para o <nome_do_programa> a partir de "/usr/share/man/it/", execute o seguinte.

LANG=it_IT.UTF-8 man <nome_do_programa>