Gentoo Linux Localization Guide
In order to keep time properly, you need to select your timezone so that your
system knows where it is located. Look for your timezone in
/usr/share/zoneinfo. You then set your timezone in
/etc/timezone. Please avoid the
/usr/share/zoneinfo/Etc/GMT* timezones as their names do not
indicate the expected zones. For instance, GMT-8 is in fact GMT+8.
Code Listing 1.1: Setting the timezone information
# ls /usr/share/zoneinfo
# cp /usr/share/zoneinfo/Europe/Brussels /etc/localtime
# nano -w /etc/timezone
Wed Mar 8 00:46:05 CET 2006
Make sure that the timezone indicator (in this case "CET")
is correct for your area.
You can set the value of TZ to be everything after the
/usr/share/zoneinfo in your shell rc file
(.bash_profile for bash) for a user-level setting. In this case
In most Gentoo Linux installations, your hardware clock is set to
UTC (or GMT, Greenwich Mean Time) and then your timezone is
taken into account to determine the actual, local time. If,
for some reason, you need your hardware clock not to be in UTC,
you will need to edit /etc/conf.d/hwclock (or if you use Gentoo
BSD: /etc/conf.d/adjkerntz) and change the
value of clock from UTC to local.
Code Listing 2.1: local vs. GMT clock
What are locales?
A Locale is a set of information that most programs use for determining country
and language specific settings. The locales and their data are part of the
system library and can be found at /usr/share/locale on most
systems. A locale name is generally named ab_CD where ab is your
two (or three) letter language code (as specified in ISO-639) and CD is
your two letter country code (as specified in ISO-3166). Variants are often
appended to locale names, e.g. en_GB.UTF-8 or de_DE@euro. Please
explore Wikipedia to read
more about locales and related articles.
Environment variables for locales
Locale settings are stored in environment variables. These are typically
set in the /etc/env.d/02locale (for system-wide
settings) and ~/.bashrc (for user-specific settings) file.
The variables controlling different aspects of locale settings
are given in the table below. All of them
take one name of a locale in ab_CD format given above.
Defines all locale settings at once, while allowing further individual
customization via the LC_* settings below.
Define alphabetical ordering of strings. This affects e.g. output of sorted
Define the character handling properties for the system. This determines
which characters are seen as part of alphabet, numeric and so on. This also
determines the character set used, if applicable.
Programs' localizations for applications that use message based localization
scheme (majority of Gnu programs, see next chapters for closer information
which do, and how to get the programs, that don't, to work).
||Defines currency units and formatting of currency type numeric values.
Defines formatting of numeric values which aren't monetary. Affects things
such as thousand separator and decimal separator.
||Defines formatting of dates and times.
||Defines default paper size.
A special variable for overriding all other settings.
Some programs are written in such a way that they expect traditional English
ordering of the alphabet, while some locales, most notably the Estonian one, use
a different ordering. Therefore it's recommended to explicitly set LC_COLLATE to C
when dealing with system-wide settings.
Using LC_ALL is strongly discouraged as it can't be overridden later on. Please
use it only when testing and never set it in a startup file.
Most typically users only set the LANG variable on the global basis. This
example is for a unicode German locale:
Code Listing 3.1: Setting the default system locale in /etc/env.d/02locale
Use de_DE@euro as your LANG if you want to use the Euro currency symbol
(€) on non UTF-8 based locales.
A list of locales that can be used is provided as
Code Listing 3.2: Getting usable locales for the French language
$ grep -i french /usr/portage/profiles/desc/linguas.desc
fr - French locale
fr_CA - French locale for Canada
fr_FR - French locale for France
It's also possible, and pretty common especially in a more traditional UNIX
environment, to leave the global settings unchanged, i.e. in the "C"
locale. Users can still specify their preferred locale in their own shell RC
Code Listing 3.3: Setting the user locale in ~/.bashrc
Another way of configuring system is to leave it in the default C locale, but
enable UTF-8 character representation at the same time. This option is achieved
using the following settings in /etc/env.d/02locale:
Code Listing 3.4: Using traditional C locale while specifying UTF-8
Using the above snippet, users will be able to see localized file names
properly, while not being forced to your preferred language.
For message based localization to work in programs that support it, you will
probably need to have programs compiled with the nls (Native language
support) USE flag set. Most of the programs using nls also need the gettext
library to extract and use localized messages. Of course, Portage will
automatically install it when needed.
Once you have set the right locale, be sure to update your environment
variables to make your system aware of the change:
Code Listing 3.5: Update the environment
# env-update && source /etc/profile
$ source ~/.bashrc
After this, you will need to kill your X server by pressing
Ctrl-Alt-Backspace, log out, then log in as user.
Now, verify that the changes have taken effect:
Code Listing 3.6: Verify env changes
There is also additional localisation variable called LINGUAS, which affects
to localisation files that get installed in gettext-based programs, and decides
used localisation for some specific software packages, such as
kde-base/kde-l10n and app-office/libreoffice. The variable
takes in space-separated list of language codes, and suggested
place to set it is /etc/portage/make.conf:
Code Listing 3.7: Setting LINGUAS in make.conf
# nano -w /etc/portage/make.conf
LINGUAS="de fi en"
Generating Specific Locales
You will probably only use one or maybe two locales on your system. You can
specify locales you will need in /etc/locale.gen.
Code Listing 3.8: Adding locales to /etc/locale.gen
The next step is to run locale-gen. It will generate all the locales you
have specified in the /etc/locale.gen file.
locale-gen is available in glibc-2.3.6-r4 and newer. If you have
an older version of glibc, you should update it now.
You can verify that your selected locales are available by running locale
Keyboard layout for the console
The keyboard layout used by the console is set in
/etc/conf.d/keymaps by the keymap variable.
Valid values can be found in
i386 has further subdivisions into layout
(qwerty/, azerty/, etc.). Some
languages have multiple options, so you may wish to experiment
to decide which one fits your needs best.
Code Listing 4.1: Setting the console keymap
Keyboard layout for the X server
The keyboard layout to be used by the X server is specified
in /etc/X11/xorg.conf by the XkbLayout
Code Listing 5.1: Setting the X keymap
Option "XkbLayout" "de"
#Option "XkbModel" "pc105"
If you have an international keyboard layout, you should set the option
XkbModel to pc102 or pc105, as this will allow mapping of the
additional keys specific to your keyboard.
Deadkeys allow you to press keys that will not show immediately but will be
combined with another letter to produce a single character such as é,è,á,à,
etc. Setting XkbVariant to nodeadkeys allows input these special
characters into X terminals.
If you would like to switch between more than one keyboard layout (for example
English and Russian), all you have to do is add a few lines to
xorg.conf that specify the desired layouts and the shortcut
Code Listing 5.2: Switching between two keyboard layouts
Option "XkbLayout" "us,ru"
Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll"
Here, XkbOptions allows you to toggle between keyboard layouts by simply
pressing Alt-Shift. This will also toggle the Scroll Lock light on or
off, thanks to the grp_led:scroll option. This is a handy visual
indicator of which keyboard layout you are using at the moment.
For KDE you have to install the kde-base/kde-l10n and
app-office/calligra-l10n packages. These respect the LINGUAS variable described earlier.
The Euro Symbol for the Console
In order to get your console to display the Euro symbol, you will need to set
consolefont in /etc/conf.d/consolefont to a file found in
/usr/share/consolefonts/ (without the .psfu.gz).
lat9w-16 has the Euro symbol.
Code Listing 7.1: Setting the console font
You should verify that consolefont is in the boot runlevel:
Code Listing 7.2: Verify the proper runlevel
# rc-update -v show | grep consolefont
If no runlevel is displayed for consolefont, then add it to the proper level:
Code Listing 7.3: Add consolefont to boot
# rc-update add consolefont boot
The Euro Symbol in X
Getting the Euro symbol to work properly in X is a little bit tougher. The
first thing you should do is change the fixed and variable
definitions in /usr/share/fonts/misc/fonts.alias to end in
iso8859-15 instead of iso8859-1.
Code Listing 8.1: Setting default X fonts
Some applications use their own font, and you will have to tell them separately
to use a font with the Euro symbol. You can do this at a user-specific level in
.Xdefaults (you can copy this file to /etc/skel/ for
use by new users), or at a global level for any application with a resource file
in /usr/share/X11/app-defaults/ (like xterm). In these files you
generally have to change an existing line, rather than adding a new one. To
change our xterm font, for instance:
Code Listing 8.2: Setting fonts for xterm
$ echo 'XTerm*font: fixed' >> .Xresources
$ xrdb -merge .Xresources
The Euro symbol in (X)Emacs
To use the Euro symbol in (X)Emacs, add the following to
Code Listing 8.3: setting the font for emacs
For XEmacs (not plain Emacs), you have to do a little
more. In /home/user/.xemacs/init.el, add:
Code Listing 8.4: setting the font for xemacs
(define-key global-map '(EuroSign) '[€])
The symbol in the s is the Euro symbol.
The current stable app-office/libreoffice and
app-office/libreoffice-bin ebuilds support the LINGUAS variable for selecting installed GUI language
packs. To see the status of GUI translation, hyphenation, spell checking and
other localisations on your language, please refer to LibreOffice translation web