12.8. Local Adjustments — I18N and L10N

SUSE LINUX is, to a very large extent, internationalized and can be modified for local needs in a flexible manner. In other words, internationalization (I18N) allows specific localizations (L10N). The abbreviations I18N and L10N are derived from the first and last letters of the words and, in between, the number of letters omitted.

Settings are made with LC_ variables defined in the file /etc/sysconfig/language. This refers not only to native language support, but also to the categories Messages (Language), Character Set, Sort Order, Time and Date, Numbers, and Money. Each of these categories can be defined directly with its own variable or indirectly with a master variable in the file language (see the manual page man locale).

  1. RC_LC_MESSAGES, RC_LC_CTYPE, RC_LC_COLLATE, RC_LC_TIME, RC_LC_NUMERIC, RC_LC_MONETARY: These variables are passed to the shell without the RC_ prefix and govern the above categories. The files concerned are listed below. The current setting can be shown with the command locale.

  2. RC_LC_ALL: This variable (if set) overwrites the values of the variables mentioned above.

  3. RC_LANG: If none of the above variables are set, this is the fallback. By default, SUSE LINUX only sets RC_LANG. This makes it easier for users to enter their own values.

  4. ROOT_USES_LANG: A yes or no variable. If it is set to no, root always works in the POSIX environment.

The other variables can be set via the YaST sysconfig editor. The value of such a variable contains the language code, country code, encoding, and modifier. The individual components are connected by special characters:

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

12.8.1. Some Examples

You should always set the language and country codes together. Language settings follow the standard ISO 639 (http://www.evertype.com/standards/iso639/iso639-en.html and http://www.loc.gov/standards/iso639-2/). Country codes are listed in ISO 3166, see (http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.html). It only makes sense to set values for which usable description files can be found in /usr/lib/locale. Additional description files can be created from the files in /usr/share/i18n using the command localedef. A description file for en_US.UTF-8 (for English and United States) can be created with:

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

This is the default setting if English is selected upon installation. If you selected another language, that language is enabled but still with UTF-8 as the character encoding.

LANG=en_US.ISO-8859-1

This sets the variable to English language, country to United States, and the character set to ISO-8859-1. This character set does not support the Euro sign, but it will be useful sometimes for programs that have not been updated to support UTF-8. The string defining the charset (ISO-8859-1 in our case) will then be evaluated by programs like Emacs.

SuSEconfig reads the variables in /etc/sysconfig/language and writes the necessary changes to /etc/SuSEconfig/profile and /etc/SuSEconfig/csh.cshrc. /etc/SuSEconfig/profile is read or sourced by /etc/profile. /etc/SuSEconfig/csh.cshrc is sourced by /etc/csh.cshrc. This makes the settings available system-wide.

Users can override the system defaults by editing their ~/.bashrc accordingly. For instance, if you do not want to use the system-wide en_US for program messages, you could include LC_MESSAGES=es_ES so messages are displayed in Spanish instead.

12.8.2. Settings for Language Support

Files in the category Messages are, as a rule, only stored in the corresponding language directory (for instance en) to have a fallback. If you set LANG to en_US and the message file in /usr/share/locale/en_US/LC_MESSAGES does not exist, it will fall back to /usr/share/locale/en/LC_MESSAGES.

A fallback chain can also be defined, for example, for Breton -> French or for Galician -> Spanish -> Portuguese:

LANGUAGE="br_FR:fr_FR"

LANGUAGE="gl_ES:es_ES:pt_PT"

If desired, use the Norwegian variants nynorsk and bokmål instead (with additional fallback to no):

LANG="nn_NO"

LANGUAGE="nn_NO:nb_NO:no"

or

LANG="nb_NO"

LANGUAGE="nb_NO:nn_NO:no"

Note that in Norwegian, LC_TIME is also treated differently.

12.8.2.1. Possible Problems

The thousands comma is not recognized. LANG is probably set to en, but the description the glibc uses is located in /usr/share/locale/en_US/LC_NUMERIC. LC_NUMERIC, for example, must be set to en_US.

12.8.2.2. For More Information