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>]]
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.
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
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.
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).