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

O sistema está em grande parte internacionalizado e pode ser modificado flexivelmente de acordo com as necessidades locais. 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. Elas 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 representam 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

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

RC_LANG

Se nenhuma das variáveis anteriores for definida, esse é o fallback. Por padrão, apenas RC_LANG está definida. Isso 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 9.3.1, “Mudando a configuração do sistema com o Editor sysconfig do YaST”). O valor dessa 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>]]

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

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

LANG=en_US.ISO-8859-1

Define o idioma como inglês, o país como Estados Unidos e o conjunto de caracteres como ISO-8859-1. Essa 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 nesse 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. Essa configuração está basicamente obsoleta agora, pois o UTF-8 também cobre o símbolo do Euro. Será útil apenas se um aplicativo suportar ISO-8859-15 e não UTF-8.

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 anular os padrões do sistema editando o seu ~/.bashrc da maneira adequada. Por exemplo, se você não quiser usar o en_US para mensagens de programa em todo o sistema, inclua LC_MESSAGES=es_ES para que as mensagens sejam exibidas em espanhol.

Configurações locais em ~/.i18n

Se não estiver satisfeito com os padrões do sistema local, mude as configurações em ~/.i18n de acordo com a sintaxe de script Bash. As entradas em ~/.i18n substituem os padrões do 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:

LANG=cs_CZ.UTF-8
LC_COLLATE=C

Configurações de suporte de idioma

Arquivos na categoria Mensagens são, via de 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, para bretão para francês ou galego para espanhol para português:

LANGUAGE="br_FR:fr_FR"

LANGUAGE="gl_ES:es_ES:pt_PT"

Se desejar, 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 estiver localizado em /usr/share/lib/de_DE/LC_NUMERIC. Por isso, LC_NUMERIC deve ser definido como de_DE para tornar a definição de separador visível para o sistema.

Para obter 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/txt/Unicode-HOWTO.gz (pacote howto).