Localization/HOWTO

From Gentoo Wiki
Localization
Revision as of 12:26, 10 December 2013 by SwifT (Talk | contribs)

Jump to: navigation, search
Other languages:čeština 93% • ‎Deutsch 19% • ‎English 100% • ‎español 100% • ‎français 100% • ‎日本語 46% • ‎한국어 99%

Time zone

In order to keep time properly, you need to select your timezone so that your system knows where it is located.

OpenRC

Look for your timezone in /usr/share/zoneinfo. 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.

Suppose you want to use Brussels' timezone:

root # cp /usr/share/zoneinfo/Europe/Brussels /etc/localtime

Now specify your timezone:

root # nano -w /etc/timezone
Europe/Brussels
root # date
Wed Mar  8 00:46:05 CET 2006
Note
Make sure that the timezone indicator (in this case "CET") is correct for your area.
Note
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 TZ="Europe/Berlin".

systemd

If you're using systemd you should set the timezone with the timedatectl command. First check the available timezones:

root # timedatectl list-timezones

Then set your chosen timezone:

root # timedatectl set-timezone Europe/Brussels

Finally check the results by issuing the timedatectl command with no arguments:

root # timedatectl

Hardware Clock

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 .

CodeUse UTC clock in /etc/conf.d/hwclock

clock="UTC"
CodeUse local timezone clock in /etc/conf.d/hwclock

clock="local"

Locale system

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

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.

Variable name Explanation
LANG Defines all locale settings at once, while allowing further individual customization via the LC_* settings below.
LC_COLLATE Define alphabetical ordering of strings. This affects e.g. output of sorted directory listing.
LC_CTYPE 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.
LC_MESSAGES 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).
LC_MONETARY Defines currency units and formatting of currency type numeric values.
LC_NUMERIC Defines formatting of numeric values which aren't monetary. Affects things such as thousand separator and decimal separator.
LC_TIME Defines formatting of dates and times.
LC_PAPER Defines default paper size.
LC_ALL A special variable for overriding all other settings.
Note
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.
Warning
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.

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.

CodeAdding locales to /etc/locale.gen

en_GB ISO-8859-1
en_GB.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15

The next step is to run locale-gen. It will generate all the locales you have specified in the /etc/locale.gen file.

Note
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 -a.

Setting a locale

OpenRC

When using OpenRC 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, and can be managed through eselect locale. For instance, to set the LANG variable to the C value:

root # eselect locale list
Available targets for the LANG variable:
  [1]   C 
  [2]   POSIX
  [3]   en_US
  [4]   en_US.iso885915
  [5]   en_US.utf8
  [ ]   (free form)
root # eselect locale set 1

Of course, you can edit the file manually as well and diversify the locale variables.

CodeSetting the default system locale in /etc/env.d/02locale

LANG="de_DE.UTF-8"
LC_COLLATE="C"
Note
Use de_DE@euro as your LANG if you want to use the Euro currency symbol (€) on non UTF-8 based locales.

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 file:

CodeSetting the user locale in ~/.bashrc

export LANG="de_DE.UTF-8"
export LC_COLLATE="C"

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:

CodeUsing traditional C locale while specifying UTF-8

LC_CTYPE=de_DE.UTF-8

Using the above snippet, users will be able to see localized file names properly, while not being forced to your preferred language.

Once you have set the right locale, be sure to update your environment variables to make your system aware of the change.

For a system-wide default locale:

root # env-update && source /etc/profile

For a user-specific locale:

user $ 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:

user $ locale

systemd

If you use systemd you should set your locale with the localectl command. Check the list of available locales with:

root # localectl list-locales

Then set the locale you want:

root # localectl set-locale LANG=de_DE.utf8

Finally check if the result is good:

root # localectl | grep "System Locale"
   System Locale: LANG=de_DE.utf8

Keyboard layout for the console

OpenRC

The keyboard layout used by the console is set in /etc/conf.d/keymaps by the keymap variable. Valid values can be found in /usr/share/keymaps/YOUR_ARCH/. 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.

CodeSetting the console keymap

keymap="de"
#keymap="de-latin1"
#keymap="de-latin1-nodeadkeys"

systemd

With systemd the keymap layout used for your console can be set using the localectl command. First check the available keymap layouts:

root # localectl list-keymaps

Then set the console keymap layout you want:

root # localectl set-keymap it

Finally check if the console keymap layout was set correctly:

root # localectl | grep "VC Keymap"
       VC Keymap: it

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 option.

CodeSetting the X keymap

Section "InputClass"
	Identifier "keyboard-all"
	Driver "evdev"
	Option "XkbLayout" "de"
	#Option "XkbModel" "pc105"
	MatchIsKeyboard "on"
EndSection

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. 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 command.

CodeSwitching between two keyboard layouts

Section "InputClass"
	Identifier "keyboard-all"
	Driver "evdev"
	Option "XkbLayout"    "us,ru"
	Option "XkbOptions"   "grp:alt_shift_toggle,grp_led:scroll"
	MatchIsKeyboard "on"
EndSection

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.

systemd

With systemd the keymap layout for the X11 server can be set using the localectl command. First check the available X11 keymap layouts:

root # localectl list-x11-keymap-layouts

Then set the X11 keymap layout you want:

root # localectl set-x11-keymap it

Finally check if the X11 keymap layout was set correctly:

root # localectl | grep "X11 Layout"
      X11 Layout: it

KDE

For KDE you have to install the kde-base/kde-l10n and app-office/calligra-l10n packages. These respect the 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.

CodeSetting the console font

consolefont="lat9w-16"

You should verify that consolefont is in the boot runlevel:

root # rc-update -v show | grep consolefont

If no runlevel is displayed for consolefont , then add it to the proper level:

root # rc-update add consolefont boot

The Euro Symbol in X

Most Applications

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 .

CodeSetting default X fonts

fixed        -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-15
variable     -*-helvetica-bold-r-normal-*-*-120-*-*-*-*-iso8859-15

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:

user $ echo 'XTerm*font: fixed' >> ~/.Xresources
user $
xrdb -merge ~/.Xresources

The Euro symbol in (X)Emacs

To use the Euro symbol in (X)Emacs, add the following to .Xdefaults :

Codesetting the font for emacs

Emacs.default.attributeFont: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-15

For XEmacs (not plain Emacs), you have to do a little more. In /home/user/.xemacs/init.el , add:

Codesetting the font for xemacs

(define-key global-map '(EuroSign) '[€])

LibreOffice

The current stable app-office/libreoffice and app-office/libreoffice-bin ebuilds support the 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 site .

NLS

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.

After enabling the nls USE flag you may need to re-emerge some packages:

root # emerge --ask --newuse --deep --with-bdeps=y @world

LINGUAS

There is also additional localization variable called LINGUAS, which affects to localization files that get installed in gettext-based programs, and decides used localization 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:

root # nano -w /etc/portage/make.conf
## (Add in the LINGUAS variable. For instance, for German, Finnish and English:)
LINGUAS="de fi en"

A list of locales that can be used is provided as /usr/portage/profiles/desc/linguas.desc :

user $ grep -i french /usr/portage/profiles/desc/linguas.desc
fr - French locale
fr_CA - French locale for Canada
fr_FR - French locale for France

After setting the LINGUAS USE flag you may need to re-emerge some packages:

root # emerge --ask --newuse --deep --with-bdeps=y @world

Resources

Xorg resources:

Acknowledgements

We would like to thank the following authors and editors for their contributions to this guide:

  • Alexander Holler
  • Steven Lucy
  • Benny Chuang
  • Lars Weiler
  • Tobias Scherbaum
  • Flammie Pirinen
  • nightmorph
  • klondike