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
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 locale man page).
These variables are passed to the shell without the
RC_ prefix and represent the listed
categories. The shell profiles concerned are listed below. The current
setting can be shown with the command locale.
This variable, if set, overwrites the values of the variables already mentioned.
If none of the previous 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.
no variable. If it is set
always works in the POSIX environment.
The variables can be set with the YaST sysconfig editor (see Section 8.3.1, “Changing the System Configuration Using 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:
You should always set the language and country codes together. Language settings follow the standard ISO 639 available at http://www.evertype.com/standards/iso639/iso639-en.html and http://www.loc.gov/standards/iso639-2/. Country codes are listed in ISO 3166 available at 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
/usr/lib/locale. Additional description files
can be created from the files in
the command localedef. The description files are part of
glibc-i18ndata package. A description file for
en_US.UTF-8 (for English and United States) can be
localedef -i en_US -f UTF-8 en_US.UTF-8
This is the default setting if American English is selected during installation. If you selected another language, that language is enabled but still with UTF-8 as the character encoding.
This sets the language to English, country to United States, and
the character set to
ISO-8859-1. This character set
does not support the Euro sign, but it can be useful sometimes for
programs that have not been updated to support
The string defining the charset (
ISO-8859-1 in this
case) is then evaluated by programs like Emacs.
The above example explicitly includes the Euro sign in a language setting. Strictly speaking, this setting is obsolete now, because UTF-8 also covers the Euro symbol. It is only useful if an application does not support UTF-8, but ISO-8859-15.
SuSEconfig reads the variables in
/etc/sysconfig/language and writes the necessary
/etc/SuSEconfig/profile is read or
/etc/SuSEconfig/csh.cshrc is sourced by
/etc/csh.cshrc. This makes the settings available
Users can override the system defaults by editing their
~/.bashrc accordingly. For instance, if you do not want
to use the systemwide
en_US for program messages,
LC_MESSAGES=es_ES so messages are
displayed in Spanish instead.
If you are not satisfied with locale system defaults, change the
~/.i18n. Entries in
~/.i18n override system defaults from
/etc/sysconfig/language. Use the same variable names
but without the
RC_ namespace prefixes, for example, use
LANG instead of
Files in the category Messages are, as a rule, only
stored in the corresponding language directory (like
en) to have a fallback. If you set
en_US and the
message file in
/usr/share/locale/en_US/LC_MESSAGES does not exist, it
falls back to
A fallback chain can also be defined, for example, for Breton to French or for Galician to Spanish to Portuguese:
If desired, use the Norwegian variants Nynorsk
and Bokmål instead (with additional fallback to
Note that in Norwegian,
is also treated differently.
One problem that can arise is a separator used to delimit groups of digits
not being recognized properly. This occurs if
is set to only a two-letter language code like
the definition file glibc uses is located in
LC_NUMERIC must be set to
to make the separator definition visible to the system.
The GNU C Library Reference Manual,
Chapter “Locales and Internationalization”. It is included in
Markus Kuhn, UTF-8 and Unicode FAQ for Unix/Linux, currently at http://www.cl.cam.ac.uk/~mgk25/unicode.html.
Unicode-Howto, by Bruno Haible: