Capítulo 8. I18N e L10N

# Capítulo 8. I18N e L10N

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

- Internationalization (I18N): Para fazer com que o software lide potencialmente com múltiplos locales.

- Localization (L10N): Tornar o software útil num locale específico.

| Dica
Existem 17, 18 ou 10 letras entre "m" e "n", "i" e "n", ou "l" e "n" na multi-linguagem, internacionalização e localização, que correspondem a M17N, I18N e L10N. Consulte Internacionalização e localização para obter detalhes.

## 8.1. O locale

O comportamento dos programas que suportam a internacionalização é configurado pela variável de ambiente "`$LANG`" para suportar a localização. O suporte de funcionalidades dependentes da configuração regional pela biblioteca `libc` requer a instalação dos pacotes `locales` ou `locales-all`. O pacote `locales` necessita de ser inicializado corretamente.

Se nem o pacote `locales` nem o pacote `locales-all` estiverem instalados, o suporte a funcionalidades regionais perde-se e o sistema utiliza mensagens em inglês dos EUA e trata os dados como ASCII. Este comportamento é o mesmo que "`$LANG`" é definido por "`LANG=`", "`LANG=C`", ou "`LANG=POSIX`".

O software moderno como o GNOME e o KDE são multilingue. 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 configuração local independentes.

O atual sistema GUI de área de trabalho Debian normalmente define a configuração regional sob o ambiente GUI como "`LANG=xx_YY.UTF-8`". Aqui, "`xx`" são códigos de idioma ISO 639 e "`YY`" são códigos de país ISO 3166. Estes valores são definidos pela caixa de diálogo GUI de configuração do ambiente de trabalho e alteram o comportamento do programa. Veja Seção 1.5.2, “A variável "`$LANG`"”

### 8.1.1. Fundamentos para o locale UTF-8

A representação mais simples dos dados de texto é o ASCII, que é suficiente para o inglês e utiliza menos de 127 caracteres (representáveis com 7 bits).

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.

    “double quoted text” is not "double quoted ASCII"
    ‘single quoted text’ is not 'single quoted ASCII'

A fim de suportar mais caracteres, foram utilizados muitos conjuntos de caracteres e sistemas de codificação para suportar muitas línguas (ver Tabela 11.2, “Lista de valores de codificação e a utilização deles”).

O conjunto de caracteres Unicode pode representar praticamente todos os caracteres conhecidos pelo ser humano com uma gama de pontos de código de 21 bits (ou seja, de 0 a 10FFFF em notação hexadecimal).

O sistema de codificação de texto UTF-8 adapta os pontos de código Unicode a um fluxo de dados de 8 bits sensato, compatível sobretudo com o sistema de processamento de dados ASCII. Este facto torna o UTF-8 a escolha mais moderna e preferida. UTF significa Unicode Transformation Format (Formato de Transformação Unicode). Quando os dados de texto simples ASCII são convertidos para UTF-8, têm exatamente o mesmo conteúdo e tamanho que o ASCII original. Por isso, não perde nada ao implementar a configuração regional UTF-8.

Sob a configurações regionais UTF-8 com programa de aplicação compatível, pode apresentar e editar dados de texto em qualquer língua estrangeira desde que as fontes e os métodos de introdução necessários estejam instalados e ativados. Por exemplo, sob a configuração regional "`LANG=fr_FR.UTF-8`", o `gedit`(1) (editor de texto para o ambiente de trabalho GNOME) pode mostrar e editar dados de texto em caracteres chineses enquanto apresenta menus em francês.

| Dica

Tanto a nova configuração regional padrão "`en_US.UTF-8`" como a antiga configuração regional padrão "`C`"/"`POSIX`" utilizam a mensagem padrão do Inglês dos EUA, têm diferenças subtis na ordem de ordenação, etc. Se quiser lidar não só com caracteres ASCII mas também com todos os caracteres codificados em UTF-8 graciosamente enquanto mantém o antigo comportamento local "`C`", use em Debian a configuração regional não-padrão "`C.UTF-8`".

| Nota
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 selcionado. Mais uma vez, não perde nada ao implantar o locale UTF-8.

### 8.1.2. A reconfiguração do locale

Para que o sistema aceda a uma determinada configuração regional, os dados dessa localização devem ser compilados a partir da base de dados das configurações regionais.

O pacote `locales` não vem com dados de localidade pré-compilados. É necessário configurá-lo como:

    # dpkg-reconfigure locales

Este processo involve 2 passos.

1. Selecione todas as configurações regionais necessárias para serem compiladas no formato binário. (Certifique-se de que inclui pelo menos uma configuração UTF-8)

2. Definir a configuração regional predefinida de todo o sistema em "`/etc/default/locale`" para usar com o PAM (veja Seção 4.5, “PAM e NSS”).

O valor da configuração regional por defeito do sistema definido em "`/etc/default/locale`" pode ser substituído pela configuração GUI para aplicações GUI.

| Nota
O sistema de codificação tradicional atual pode ser identificado por "`/usr/share/i18n/SUPPORTED`". Assim, "`LANG=pt_US`" é "`LANG=pt_US.ISO-8859-1`".

O pacote `locales-all` vem com dados de regionais pré-compilados para todos os dados de região. Uma vez que não cria o ficheiro "`/etc/default/locale`", poderá ter de instalar também o pacote `locales`.

| Dica
O pacote `locales` de algumas distribuições derivadas de Debian vêm com dados da configuração de região pré-compilados para todos os dados regionais. Você precisa de instalar ambos os pacotes `locales` e `locales-all` em Debian para emular esse ambiente de sistema.

### 8.1.3. Codificação de nomes de ficheiros

Para troca de dados entre plataformas (veja Seção 10.1.7, “Aparelho de armazenamento amovível”), 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. Precisa de fornecer uma opção explícita de montagem para usar UTF-8 ou CP932 para os nomes dos ficheiros.

| Nota
When auto-mounting a hot-pluggable USB flash drive under modern desktop environment such as GNOME, you may provide such mount option by right clicking the icon on the desktop, click "Drive" tab, click to expand "Setting", and entering "utf8" to "Mount options:". The next time this USB flash drive is mounted, mount with UTF-8 is enabled.

| Nota
Se está a atualizar 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 convertê-los para UTF-8. Veja Seçã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 a usar "`dos charset`" no ficheiro "`/etc/samba/smb.conf`" por exemplo para CP932 para Japonês.

### 8.1.4. Mensagens localizadas e documentação traduzida

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 atividades 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, 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 programname

O GNU gettext pode acomodar uma lista prioritária de idiomas de tradução com a variável de ambiente `$LANGUAGE`. Por exemplo:

     $ export LANGUAGE="pt:pt_BR:es:it:fr"

Para mais informações, consulte `info gettext` e leia a secção "A variável LANGUAGE".

### 8.1.5. Efeitos do locale

A ordem de ordenação dos caracteres com `sort`(1) e `ls`(1) é afetada pelas configurações regionais. Exportando `LANG=en_US.UTF-8` ordena pelo dicionário `A->a->B->b...->Z->z`, enquanto a exportação de `LANG=C.UTF-8` ordena na ordem binária `A->B->...->Z->a->b...` do dicionário.

O formato de data de `ls`(1) é afetado pela configuração regional (ver Seção 9.3.4, “Amostragem personalizada de hora e data”).

O formato de data de `date`(1) é afetado pela configuração regional. Por exemplo:

     $ unset LC_ALL
     $ LANG=en_US.UTF-8 date
    Thu Dec 24 08:30:00 PM JST 2023
     $ LANG=en_GB.UTF-8 date
    Thu 24 Dec 20:30:10 JST 2023
     $ LANG=es_ES.UTF-8 date
    jue 24 dic 2023 20:30:20 JST
     $ LC_TIME=en_DK.UTF-8 date
    2023-12-24T20:30:30 JST

As pontuações numéricas são diferentes consoante as configurações locais. Por exemplo, na configuração regional Inglês, mil virgula um é mostrado como "`1,000.1`" enquanto na configuração regional Alemão é mostrado como `1.000,1`". Pode ver esta diferença num programa de folha de cálculo.

Cada caraterística pormenorizada da variável de ambiente "`$LANG`" pode ser substituída pela definição das variáveis "`$LC_*`". Estas variáveis de ambiente podem ser substituídas novamente pela definição da variável "`$LC_ALL`". Veja a página de manual do `locale`(7) para mais detalhes. A não ser que tenha uma razão forte para criar configurações complicadas, por favor mantenha-se afastado delas e use apenas a variável "`$LANG`" definida para uma das configurações regionais UTF-8.

## 8.2. A entrada do teclado

### 8.2.1. A entrada de teclado para a consola Linux e o X Window

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

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

Para a consola Linux e o sistema X Window, isto atualiza os parâmetros de configuração em "`/etc/default/keyboard`" e "`/etc/default/console-setup`". Isto também configura a fonte da consola Linux. Muitos caracteres não-ASCII incluindo caracteres acentuados usados por muitas línguas europeias podem ser disponibilizados com a tecla dead, a tecla AltGr, e a tecla compose.

### 8.2.2. A entrada de teclado para o Wayland

Para o GNOME no sistema de ambiente de trabalho Wayland, o Seção 8.2.1, “A entrada de teclado para a consola Linux e o X Window” não suporta idiomas europeus que não sejam ingleses. O IBus foi criado para suportar não apenas idiomas asiáticos, mas também idiomas europeus. A dependência de pacotes do Ambiente de Trabalho GNOME recomenda o "`ibus`" através do "`gnome-shell`". O código do "`ibus`" foi atualizado para integrar as funcionalidades das opções `setxkbmap` e XKB. É necessário configurar o `ibus` em "Configurações do GNOME" ou "Ajustes do GNOME" para a entrada de teclado multilíngua.

| Nota
Se o ibus estiver ativo, a sua configuração clássica do teclado X através do `setxkbmap` pode ser sobreposta pelo `ibus` mesmo sob o ambiente de trabalho clássico baseado no X. Pode desativar o `ibus` instalado utilizando o `im-config` para definir o método de entrada para "None". Para mais, veja Debian Wiki sobre teclado.

### 8.2.3. O suporte a método de entrada com IBus

Uma vez que o ambiente de trabalho GNOME recomenda "`ibus`" através de "`gnome-shell`", "`ibus`" é a melhor escolha para o método de entrada.

Entrada multilingue para a aplicação é processada como:

    Keyboard                                       Application
       |                                                 ^
       |                                                 |
       +-> Linux kernel ->  Input method (ibus)  -> Gtk, Qt, X, Wayland
                              +-- Engine--+

A lista do IBus e dos seus pacotes de motores é a seguinte.

Tabela 8.1. Lista do IBus e dos seus pacotes de motores

pacote | popcon | tamanho | locale suportado
--- | --- | --- | ---
ibus | V:217, I:264 | 1874 | estrutura de método de entrada que usa dbus
ibus-mozc | V:2, I:3 | 980 | Japonês
ibus-anthy | V:0, I:1 | 8867 | , ,
ibus-skk | V:0, I:0 | 243 | , ,
ibus-kkc | V:0, I:0 | 211 | , ,
ibus-libpinyin | V:1, I:4 | 2769 | Chinês (para zh_CN)
ibus-chewing | V:0, I:0 | 288 | , , (para zh_TW)
ibus-libzhuyin | I:0 | 41009 | , , (para zh_TW)
ibus-rime | V:0, I:0 | 78 | , , (for zh_CN/zh_TW)
ibus-cangjie | V:0, I:0 | 235 | , , (for zh_HK)
ibus-hangul | V:0, I:2 | 264 | Coreano
ibus-libthai | I:0 | 84 | Thai
ibus-table-thai | I:0 | 59 | Thai
ibus-unikey | V:0, I:0 | 286 | Vietnamita
ibus-keyman | V:0, I:0 | 191 | Multilingue: motor Keyman para mais de 2000 idiomas
ibus-table | V:0, I:1 | 2271 | motor de tabela para IBus
ibus-m17n | V:0, I:1 | 448 | Multilingue: Indiano, Árabe e outros
plasma-widgets-addons | V:68, I:113 | 5132 | widgets adicionais para o Plasma 5 que contêm o indicador de teclado

| Nota

Para os chineses, "`fcitx5`" pode ser uma estrutura de método de entrada alternativa. Para os aficionados do Emacs, "`uim`" pode ser uma alternativa. Em ambos os casos, pode ser necessário fazer uma configuração manual extra com o `im-config`. Alguns métodos de entrada clássicos antigos tais como "`kinput2`" podem ainda existir no repositório Debian mas não são recomendados para o ambiente moderno.

### 8.2.4. Um exemplo para Japonês

Acho muito útil o método de entrada de Japonês começado sob ambiente Inglês "`en_US.UTF-8`"). Aqui está como fiz isto com o IBus para GNOME em Wayland:

1. Instale o pacote de ferramentas de entrada em japonês `ibus-mozc` (ou `ibus-anthy`) com os seus pacotes recomendados, como o `im-config`.

2. Selecione "Definições" → "Teclado" → "Fontes de Introdução" → clique em "`+`" em "..." → "Outro" → "Japonês" e clique "Adicionar".

3. Pode escolher tantas fontes de entrada quantas desejar.

4. Voltar a fazer login na conta do utilizador.

5. Configure cada fonte de entrada clicando com o botão direito do rato no ícone da barra de ferramentas GUI.

6. Alterne entre as fontes de entrada instaladas com SUPER-ESPAÇO. (SUPER é normalmente a Tecla Windows.)

| Dica
Se pretender aceder ao ambiente de teclado só com o alfabeto com o teclado físico japonês no qual o `shift-2` tem gravado `"` (aspas duplas), selecione "Japonês" no procedimento acima. Pode introduzir a língua japonesa utilizando "Japanese mozc (ou anthy)" com o teclado físico "US" no qual o shift-`2` tem gravado `@` (arroba).

- A entrada do menu GUI para `im-config`(8) é "Input method" (Método de entrada).

- Em alternativa, execute "`"im-config`" a partir da shell do utilizador.

- O `im-config`(8) comporta-se de modo diferente se o comando for executado pelo root ou não.

- `im-config`(8) activa o melhor método de entrada do sistema e é predefinido sem qualquer acção do utilizador.

## 8.3. O ecrã de resultados

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

O ambiente GUI (Capítulo 7, Sistema GUI (interface gráfica de utilizador)) pode apresentar quaisquer caracteres em UTF-8, desde que as fontes necessárias estejam instaladas e ativadas. (A codificação dos dados originais do tipo de letra é tratada e transparente para o utilizador.)

## 8.4. Caracteres Asiáticos de Leste de Altura Ambígua

Under the East Asian locale, the box drawing, Greek, and Cyrillic characters may be displayed wider than your desired width to cause the unaligned terminal output (see Unicode Standard Annex #11, 4.2 Ambiguous Characters).

Pode contornar este problema:

- `gnome-terminal`: Preferências → Perfis → nome do perfil → Compatibilidade → Caracteres de Largura Ambígua → Estreito

- `ncurses`: Define ambiente `export NCURSES_NO_UTF8_ACS=0`.

Capítulo 7. Sistema GUI (interface gráfica de utilizador) |  | Capítulo 9. Dicas do sistema