10.4. Configurações de idioma e específicas de país

O SUSE Linux é amplamente internacionalizado e pode ser modificado para satisfazer as necessidades locais de maneira flexível. Em outras palavras, a internacionalização (I18N) permite localizações específicas (L10N). As abreviações I18N e L10N são derivadas das primeiras e últimas letras das palavras e, no meio, está o número de letras omitidas.

As configurações são feitas com variáveis LC_ definidas no arquivo /etc/sysconfig/language. Estas referem-se não somente ao suporte ao idioma nativo, mas também às categorias Mensagens (Idioma), Conjunto de Caracteres, Ordem de Classificação, Hora e Data, Números e Moeda. Cada uma dessas categorias pode ser definida diretamente com sua própria variável ou indiretamente com uma variável master no arquivo language (consulte a página de manual local).

RC_LC_MESSAGES, RC_LC_CTYPE, RC_LC_COLLATE, RC_LC_TIME, RC_LC_NUMERIC, RC_LC_MONETARY

Essas variáveis são passadas para o shell sem o prefixo RC_ e representa as categorias listadas. Os perfis shell de referência estão listados abaixo. A configuração atual pode ser exibida com o comando locale.

RC_LC_ALL

Esta variável, se definida, sobregrava os valores das variáveis já mencionadas.

RC_LANG

Se nenhuma das variáveis anteriores for definida, este é o fallback. Por padrão, o SUSE Linux apenas define RC_LANG. Isto facilita o processo para que os usuários informem seus próprios valores.

ROOT_USES_LANG

Uma variável yes ou no. Se for definida como no, root sempre funcionará no ambiente POSIX.

As variáveis podem ser definidas com o editor sysconfig do YaST (consulte a Seção 8.3.1, “Mudando a configuração do sistema usando o Editor sysconfig do YaST”). O valor de tal variável contém o código do idioma, código do país, codificação e modificador. Os componentes individuais são conectados por caracteres especiais:

  LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]

10.4.1. Alguns exemplos

Você deve sempre definir os códigos do idioma e do país juntos. As configurações do idioma seguem o padrão ISO 639 disponível em http://www.evertype.com/standards/iso639/iso639-en.html e http://www.loc.gov/standards/iso639-2/. Os códigos de país estão listados na variável ISO 3166 disponível em http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.html.

Só faz sentido definir valores para os quais os arquivos de descrição utilizáveis podem ser encontrados em /usr/lib/locale. Arquivos de descrição adicionais podem ser criados de arquivos em /usr/share/i18n utilizando o comando localedef. Os arquivos de descrição fazem parte do pacote glibc-i18ndata. Um arquivo de descrição para en_US.UTF-8 (para inglês e Estados Unidos) pode ser criado com:

localedef -i en_US -f UTF-8 en_US.UTF-8
LANG=en_US.UTF-8

Esta é a configuração padrão se Inglês americano for selecionado durante a instalação. Se você selecionou outro idioma, aquele idioma será habilitado, mas ainda com o UTF-8 como a codificação de caractere.

LANG=en_US.ISO-8859-1

Este define o idioma para inglês, país para Estados Unidos e a definição de caractere para ISO-8859-1. Esta definição de caractere não suporta o sinal de Euro, mas às vezes pode ser útil para programas que não foram atualizados para suportar UTF-8. A string que define o conjunto de caracteres (ISO-8859-1 neste caso) é então avaliada por programas como o Emacs.

LANG=en_IE@euro

O exemplo acima inclui explicitamente o sinal de Euro em uma configuração de idioma. Falando estritamente, esta configuração é atualmente obsoleta, porque o UTF-8 também cobre o símbolo de Euro. Ela é útil apenas se um aplicativo não suportar o UTF-8, mas o ISO-8859-15.

O SuSEconfig lê as variáveis em /etc/sysconfig/language e grava as mudanças necessárias em /etc/SuSEconfig/profile e /etc/SuSEconfig/csh.cshrc. /etc/SuSEconfig/profile é lido ou originado por /etc/profile. /etc/SuSEconfig/csh.cshrc é originado por /etc/csh.cshrc. Isso torna as configurações disponíveis em todo o sistema.

Os usuários podem anular os padrões do sistema editando o seu ~/.bashrc de acordo. Por exemplo, se você não quiser usar o en_US global de sistema para mensagens de programa, inclua LC_MESSAGES=es_ES, então as mensagens serão exibidas em espanhol.

10.4.2. Configurações locais em ~/.i18n

Se você não estiver satisfeito com padrões de sistema locais, mude as configurações em ~/.i18n. As entradas em ~/.i18n substituem padrões de sistema de /etc/sysconfig/language. Use os mesmos nomes de variáveis mas sem os prefixos de namespace RC_, por exemplo, use LANG em vez de RC_LANG.

10.4.3. Configurações de suporte de idioma

Arquivos na categoria Mensagens são, como regra, armazenados somente no diretório do idioma correspondente (como en) para ter um fallback. Se você definir LANG para en_US e o arquivo de mensagem em /usr/share/locale/en_US/LC_MESSAGES não existir, ele voltará para /usr/share/locale/en/LC_MESSAGES.

Uma cadeia de fallback também pode ser definida, por exemplo, de bretão para francês ou galego para espanhol ou português:

LANGUAGE="br_FR:fr_FR"

LANGUAGE="gl_ES:es_ES:pt_PT"

Se desejado, use as variantes norueguesas Nynorsk e Bokmål (com fallback adicional para não):

LANG="nn_NO"

LANGUAGE="nn_NO:nb_NO:no"

ou

LANG="nb_NO"

LANGUAGE="nb_NO:nn_NO:no"

Observe que em norueguês, LC_TIME também é tratado de maneira diferente.

Um problema que pode surgir é um separador usado para delimitar grupos de dígitos não ser reconhecido corretamente. Isso acontece se LANG for definido para um código de idioma com somente duas letras, como de, mas o arquivo de definição que o glibc utiliza está localizado em /usr/share/lib/de_DE/LC_NUMERIC. Por isso, LC_NUMERIC deve ser definido para de_DE para tornar a definição de separador visível para o sistema.

10.4.4. Mais informações

  • The GNU C Library Reference Manual, Capítulo “Locales and Internationalization”. Ele está incluído em glibc-info.

  • Markus Kuhn, UTF-8 and Unicode FAQ for Unix/Linux, atualmente em http://www.cl.cam.ac.uk/~mgk25/unicode.html.

  • Unicode-Howto, de Bruno Haible: /usr/share/doc/howto/en/html/Unicode-HOWTO.html.