This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
本地化/指南
时区
为了在现在的位置保持正确的系统时间,必须设置时区。在 系统时间 这篇文章中可以找到有关基于 OpenRC 系统 和 基于 systemd 的系统 的说明。
Locale系统
什么是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/i18n/locales/ on most systems. A locale name is generally named ab_CD
where ab
is the two (or three) letter language code (as specified in ISO-639) and CD
is the two letter country code (as specified in ISO-3166). Variants like @euro
or @latin
are often appended to locale names, e.g. de_DE@euro
or nan_TW@latin
. Please explore Wikipedia to read more about locales and related articles.
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 listings. |
LC_CTYPE | Define the character-handling properties for the system. This determines which characters are seen as alphabetic, numeric, and so on. This also determines the character set used, if applicable. |
LC_MESSAGES | Programs' localizations stored in /usr/share/locale/ for applications that use a message-based localization scheme (the majority of GNU programs; see the next chapters for further information on which programs 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 | Overrides 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 automatically overrides all other LC_* variables (LANG is not affected). This means that changes made by other means will be hidden until LC_ALL is set to a null string. It is probably best not to set it in a startup file.
Most typically, users only set the LANG variable globally.
生成特定 locales
大多数用户可能只会在其系统上使用一个或两个locale 。可以在 /etc/locale.gen 文件中说明可以指定其他 locale。
en_US.UTF-8 UTF-8 en_US ISO-8859-1 zh_CN GB2312 zh_CN.UTF-8 UTF-8
Use an
@euro
value from /usr/share/i18n/SUPPORTED/ as the locale when using the Euro currency symbol (€) on non UTF-8 based locales.The next step is to run locale-gen. It will generate all the locales specified in the /etc/locale.gen file and write them to the locale-archive (/usr/lib/locale/locale-archive).
root #
locale-gen
* Generating 4 locales (this might take a while) with 1 jobs * (1/4) Generating en_GB.ISO-8859-1 ... [ ok ] * (2/4) Generating en_GB.UTF-8 ... [ ok ] * (3/4) Generating zh_CN GB2312 ... [ ok ] * (4/4) Generating zh_CN.UTF-8 UTF-8 ... [ ok ] * Generation complete
用locale -a验证所选择的 locale 是否可用。
user $
locale -a
C POSIX de_DE de_DE.iso88591 de_DE.iso885915@euro de_DE@euro deutsch en_GB en_GB.iso88591 en_GB.utf8 german
The /usr/lib/locale/locale-archive file can be shown by localedef.
user $
localedef --list-archive
Its raw content can be displayed using the strings command.
user $
strings /usr/lib/locale/locale-archive | less
设定 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. More details can be found in the UTF-8 article. The system wide settings (/etc/env.d/02locale) 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, editing the file manually is possible as well to diversify the locale variables.
/etc/env.d/02locale
Setting the default system locale in /etc/env.d/02localeLANG="de_DE.UTF-8" LC_COLLATE="C"
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:
~/.bashrc
Setting the user localeexport 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:
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 completely use the selected language.
Once the right locale is set up, be sure to update the environment variables to make the 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, kill the X server by pressing Ctrl+Alt+Backspace, log out, then log in as a user.
Now, verify that the changes have taken effect:
user $
locale
systemd
With systemd set the locale with the localectl command. Check the list of available locales with:
root #
localectl list-locales
Then set the desired locale:
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
控制台的键盘布局
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 - experiment with the various options to decide which one fits the needs best.
/etc/conf.d/keymaps
Setting the console keymapkeymap="de" #keymap="de-latin1" #keymap="de-latin1-nodeadkeys"
systemd
With systemd the keymap layout used for the console can be set using the localectl command. First check the available keymap layouts:
root #
localectl list-keymaps
Then set the requested console keymap layout:
root #
localectl set-keymap it
Finally check if the console keymap layout was set correctly:
root #
localectl | grep "VC Keymap"
VC Keymap: it
X服务的键盘布局
OpenRC
The keyboard layout to be used by the X server is specified in /etc/X11/xorg.conf.d/30-keyboard.conf by the XkbLayout option. For details visit the Xorg guide and the article about Keyboard layout switching.
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 requested X11 keymap layout:
root #
localectl set-x11-keymap it
Finally check if the X11 keymap layout was set correctly:
root #
localectl | grep "X11 Layout"
X11 Layout: it
NLS
For message based localization to work in programs that support it and have the nls
(Native Language Support) USE flag, compile the programs with this flag set. Message strings are installed in /usr/share/locale/<locale>/LC_MESSAGES/<package>.mo files. 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 some packages might need to be re-emerged:
root #
emerge --ask --changed-use --deep --with-bdeps=y @world
LINGUAS
There is also an additional USE_EXPAND flag called LINGUAS [1], which affects the localization files that get installed in gettext-based programs. The variable takes in space-separated list of language codes, and a 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"
With LINGUAS=""
, most ebuilds would install only the packages' default language but none of the LC_MESSAGES
files.
A list of installed programs making use of the LINGUAS USE_EXPAND flag and their supported languages can be shown as follows:
user $
eix -I -U linguas
A list of LINGUAS values 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_EXPAND flag it may be necessary to re-emerge some packages:
root #
emerge --ask --changed-use --deep --with-bdeps=y @world
LINGUAS as a USE_EXPAND'ed variable is being replaced by the L10N variable (see below). This avoids a conceptual clash with the standard gettext behaviour. After a transition time for packages to be converted, LINGUAS will become a regular environment variable.
L10N
Another USE_EXPAND variable called L10N decides which extra localization support will be installed. This is commonly used for downloads of additional language packs by packages. Similar to LINGUAS, the variable takes a space separated list of language tags, and it can be set in /etc/portage/make.conf:
root #
nano -w /etc/portage/make.conf
## (Add in the L10N variable. For instance, for German and Brazilian Portuguese:) L10N="de pt-BR"
To set it per-package, edit /etc/portage/package.use and prefix the requested language packs with "l10n_", as shown in the next example:
/etc/portage/package.use
app-text/aspell l10n_de l10n_pt_BR
Note that while the common two letter language codes (like de
or fr
) are identical in LINGUAS and L10N, more complex entries have a different syntax because L10N uses IETF language tags (aka BCP 47). For example, pt_BR
and sr@latin
in LINGUAS become pt-BR
and sr-Latn
in L10N, respectively.
A list of L10N values that can be used is provided as /usr/portage/profiles/desc/l10n.desc:
user $
grep -i portuguese /usr/portage/profiles/desc/l10n.desc
pt - Portuguese pt-BR - Portuguese (Brazil) pt-PT - Portuguese (Portugal)
After setting the L10N USE_EXPAND variable it may be necessary to re-emerge some packages:
root #
emerge --ask --changed-use --deep --with-bdeps=y @world
另请参阅
- Configuring locales (Gentoo Handbooks)
- Keyboard layout inside the Evdev article
- X resources
- The Euro symbol (€) for the console and in X
外部资源
- Locales and Internationalization (gnu.org)
- L10N USE_EXPAND variable replacing LINGUAS
- Michał Górny:How LINGUAS are thrice wrong!
- [gentoo-dev] [RFC] How to deal with LINGUAS mess?
- [gentoo-dev] [RFC] Masterplan for solving LINGUAS problems
参考
This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Alexander Holler, Steven Lucy, Benny Chuang, Lars Weiler, Tobias Scherbaum, Flammie Pirinen, nightmorph, klondike
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.