[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ A ] [ 下一页 ]
在一个系统中配置欧元支持包括两个步骤,应该相当简单
告诉系统您想要使用欧元(又名本地化)
拥有一个可用的字体来表示欧元。
提供一种机制,使键盘可以发送欧元字符。
在欧元区,现代键盘上生成欧元符号的推荐机制
是 AltGr+e 组合用于欧元货币,AltGr+c 用于分。注意:笔记本电脑用户可能没有 AltGr 键。
本文档将着眼于 Debian 中的欧元配置,首先关注本地化问题,以及如何在 Debian 中正确配置本地化。之后,它将深入探讨如何配置所有 Debian GNU/Linux 系统中可用的控制台(虚拟终端)。许多用户可能想要跳过本节,直接转到下一节,该节讨论了图形环境(X 窗口)中欧元支持的正确配置。
即使有时可能会使读者感到困惑,但针对旧的 Debian 版本(截至本文撰写时为 Debian 2.2 代码名 'potato')和最新的 Debian 版本(Debian 3.0 代码名 'woody')都讨论了不同的配置问题。本文件的未来版本可能会分离关于不同 Debian 版本的信息(当情况变得真正混乱时:)
程序使用本地化环境来了解正在使用的语言和字符集。目前没有分离,除非您正在使用 UTF-8 从区域设置和表示。环境区域设置同时使用语言,例如
es_ES.ISO-8859-1 en_US.utf ....
区域设置定义存储在 Debian 的 /etc/locale.alias
(用于 libc 库)和 /usr/X11R6/lib/X11/locale/locale.alias
中。为了指示您正在使用的字符集,您需要设置您的 LANG 环境变量。执行此操作的方法之一是更改 /etc/environment
或 /etc/profile
。
然而,由于 XFree86 (Xlib) 和 glibc 中区域设置的不同表示(一个使用 ISO8859,另一个使用 ISO-8859,注意破折号),因此存在问题。因此,在 /etc/environment
中将区域设置设置为 XX_XX.ISO-8859-15 注定会在 X 环境中引起问题(可能无法识别或在应用程序中生成错误)。
自 Debian 3.0 起,/usr/X11R6/lib/X11/locale/locale.alias
和 /etc/locale.alias
中提供了 XX_XX@euro 别名,希望设置其区域设置环境的用户应使用此缩写而不是之前的 XX_XX@ISO-...
您可以使用 locale 查看您当前的运行环境,并使用 locale charmap 查看您当前的字符映射。为了更改您的区域设置,请编辑 /etc/environment
或 /etc/profile
并添加(示例为西班牙语,根据需要更改)
export LANG=es_ES@euro export LC_ALL=es_ES@euro
注意:您必须使用 @euro 部分。否则,如果您仅使用 es_ES,则区域设置定义将是 ISO-8859-1 字符集的定义。
请注意,LANG 和 LC_ALL 定义应相似(甚至最好相同)。否则,库可能会警告不兼容的区域设置。例如,如果您设置以下内容,您将看到警告
export LANG=spanish export LC_ALL=es_ES@euro
因为 'spanish' 别名为 es_ES.ISO-8859-1,而 es_ES@euro 别名为 es_ES.ISO-8859-15。请注意这个问题,因为某些程序不检查 locale.aliases
文件,而是使用它们的硬编码值。不建议更改 locale.alias
以例如将 'spanish' 别名为 es_ES.ISO-8859-15,因为使用这些方法的程序将无法正常工作。如果您的常用软件不适用于 'XX_XX@euro',请对其提交错误报告。
您可以通过运行 locale -a 来检查所有可用的区域设置
对于由于本地化/表示问题而发出过多警告的程序,类似于
Gdk-WARNING **: locale not supported by C library
或
Warning: locale not supported by C library, locale unchanged
使用 LANG=XX_XX.ISO-8859-1 program& 运行它们以避免错误/警告。在任何情况下,请检查您是否已正确设置区域设置,如果已正确设置,请针对违规软件包提交错误报告。
为了使您的 X 环境工作,在 /usr/X11R6/lib/X11/locale
中应该有一个 iso8859-15 定义。如果您没有正确配置区域设置,X 可能会对此发出警告(在它运行任何程序之前)。请检查您的 ~/.xsession-errors
文件,因为这可能会在现代桌面环境中发生而用户没有注意到(所有错误都定向到那里而不是屏幕)。一个示例警告是
Warning: locale not supported by Xlib, locale set to C
为了使您的区域设置在 3.0 中工作,管理员必须正确配置系统的本地化。进行这些修改的最简单方法是调用 dpkg-reconfigure -plow locales,并在带有 @euro 附加的版本中选择您的区域设置。
您也可以直接编辑 /etc/locale.gen
,在那里插入欧元区域设置定义并运行 locale-gen。如果您的区域设置已在那里定义,但附加了 '#' 符号,请取消注释(删除该符号)用户区域设置所需的行。主要是 XX_XX.ISO-8859-15 行和 XX_XX@euro 行,并运行 locale-gen。这应该创建 /usr/lib/locale/XX_XX@euro
。
如果您使用的是 Debian 2.2,则无法编辑 /etc/locale.gen
,因为它不存在。但是,在任何情况下,您都不需要这样做,因为所有区域设置都默认包含在 Debian 中。但是,Debian 2.2 locales
(版本 2.1.3-13)不提供欧元定义。如果无法升级到 woody (3.0) 的 locale(此升级很可能会更改 libc 版本),您将需要手动进行更改。
在 Debian 2.2 中,用户需要更改一些文件(这些更改在 3.0 中是不必要的,因为它们已经完成)。假设是西班牙语环境(es_ES 区域设置),/etc/locale.alias
的更改是
es_ES@euro es_ES.ISO-8859-15
对于 /usr/X11R6/lib/X11/locale/locale.alias
的更改是
es_ES@euro es_ES.ISO8859-15
完成此操作后,您必须生成您的区域设置。您可以手动运行 localedef
来完成此操作。字符映射文件位于 /usr/share/i18n/charmaps
中,输入文件可以在 /usr/share/i18n/locales
中找到。为了创建,例如,en_US.ISO-8859-15 区域设置,您需要这样做
$ localedef --force -i /usr/share/i18n/locales/en_US \ -f /usr/share/i18n/charmaps/ISO-8859-15 \ en_US.ISO-8859-15
您通常也可以使用简化版本,因为 localedef
应该能够自行找到字符映射和区域设置
$ localedef --force -v -i en_US -f ISO-8859-15 en_US.ISO-8859-15
创建的目录名为 /usr/share/locale/en_US.iso885915
。您还必须创建 en_US.ISO-8859-15 目录,通过将其符号链接到前一个目录来执行此操作。
$ cd /usr/share/locale $ ln -s en_US.ISO-8859-15 en_US.iso885915
配置文本控制台以准备好欧元符号很简单。以下方法适用于 Debian GNU/Linux 系统
$ loadkeys euro.inc $ consolechars -f lat0-16.psf
但是,这些更改在重启后会丢失。为了使它们永久生效,需要对 Debian 软件包的配置文件进行一些更改。
更改按键映射涉及更改 /etc/console-tools/default.map.gz
或 /etc/kbd/default.map.gz
。通常,此键盘映射通过使用 kbdconfig 来更改(如果您不使用 console-tools,请参阅下文了解 Debian 中不同的控制台键盘方案),因为它在任何网络文件系统挂载之前加载,您无法直接更改它(例如通过在那里添加 include euro),因为它可能无法加载扩展(因为它们位于 /usr/share/keymaps
)。为了获得欧元支持,如果您的键盘映射当前没有欧元支持,您将必须修改现有的键盘映射。这是一个关于如何更改西班牙语键盘映射以支持欧元字符的示例(kbdconfig 将询问一些问题,仅显示答案如下)
$ cd /usr/share/keymaps/i386/qwerty $ cp es.kmap.gz es-euro.kmap.gz $ gzip -d es-euro.kmap.gz $ echo "include \"euro\"" >>es-euro.kmap $ echo "altgr keycode 46 = cent" >>es-euro.kmap $ gzip es-euro.kmap $ kbdconfig -----ANSWERS: n i386 qwerty es-euro y y $ zgrep "keycode 18" /etc/console-tools/default.kmap.gz keycode 18 = +e +E currency Control_e Control_e Meta_e Meta_E Meta_Control_e
待办事项:应该针对 console-data 提交一个错误报告,以便默认情况下将其包含在所有欧元区语言映射中。
Debian 3.0 中的 console-common
安装了 /etc/init.d/keymap.sh
,它运行 console-tools 的 loadkeys(使用 /etc/console-tools/default.map.gz
)或 kbd 的 loadkeys(使用 /etc/console/boottime.kmap.gz
)。此文件是使用 /usr/sbin/install-keymap 生成的。
当系统启动时,它会运行 /etc/rcS.d/S05keymap.sh
(对于 kbd)或 /etc/rcS.d/S05keymap-lct.sh
(对于 console-tools),它们安装适当的键盘映射。这两个脚本都将使 /etc/init.d/keymap.sh
或 /etc/init.d/S05keymap-lct.sh
以 'start' 选项被调用。
在 Debian 系统中配置控制台的简单方法是安装自 Debian 2.2 起提供的 fonty
,并告诉它使用 iso15 字体(fonty 目前尚不支持 iso-8859-16)。这些字体将包含欧元字符,并且软件包将正确配置所需的配置文件。但是,您需要配置键盘映射,如前所述。
如果您不想要(或不喜欢)fonty
字体,您可以自己配置控制台字体。为了在系统启动时自动加载字体,您(作为超级用户)必须更改一些配置文件。
如果系统正在使用 console-tools
软件包,则 /etc/console-tools/config
文件将存在。为了加载适当的字体,您需要包含以下行
SCREEN_FONT=lat0-16 APP_CHARSET_MAP=iso15
如果您正在使用多个虚拟终端,您可能想要添加此行
APP_CHARSET_MAP_vc1=iso15 APP_CHARSET_MAP_vc2=iso15 APP_CHARSET_MAP_vc3=iso15 APP_CHARSET_MAP_vc4=iso15 APP_CHARSET_MAP_vc5=iso15 APP_CHARSET_MAP_vc6=iso15
如果您正在使用 kbd
软件包,您将需要编辑 /etc/kbd/config
添加,例如
CONSOLE_FONT=lat0-16.psfu.gz # CONSOLE_MAP=iso15 CONSOLE_MAP=8859-15_to_uni
当然,lat0-16 字体不是唯一可用的字体,自 console-data 软件包版本 1999.08.29-11.1 以来,在 /usr/share/consolefonts
中有相当多的 latin9(又名 latin0)字体可用。有些人更喜欢 lat0-sun16 字体,这只是个人品味问题。
如果您正在使用 svgatextmode
软件包(已被帧缓冲取代),您也可以通过更改 /etc/TextConfig
文件来配置控制台字体。
注意:如果您正在使用帧缓冲设备进行控制台文本,请阅读 /etc/console-tools/config
文件中关于 console-tools 配置的注释。基本上,全局定义仅适用于第一个虚拟终端,您需要像这样显式声明其他终端的字体
SCREEN_FONT_vc1=lat0-16 SCREEN_FONT_vc2=lat0-16 SCREEN_FONT_vc3=lat0-16 ....
为了使图形环境表示欧元,您还需要
包含欧元符号的字体
键盘的正确配置
自版本 3.3.3.1 起,XFree86 包括了欧元就绪字体,例如 7x13euro.bdf 或 7x13euroB.bdf。但是,用户可能未安装它们,因为 ISO-8859-15 字体不是默认(基本)XFree86 安装的一部分。
此外,Debian 3.0 为大多数语言提供了正确的键盘配置。但是,由于未正确定义键码,某些语言不提供完整的欧元支持。如果您的语言在 X 中行为不正常,请针对 xlibs
软件包提交一个 愿望清单错误
(已知的相关错误包括 #117185
、#127609
和 #139826
)
此处的键盘配置比控制台中的更容易。如果您在 X 服务器中使用 Xkb 扩展(自 3.3.5 以来的默认设置),您可以使用 X 配置文件的 InputDevice 部分中的 XkbLayout 选项来更改它。对于 XFree86 3.3.6,该文件位于 /etc/X11/XF86Config
中,对于 XFree86 4.1,该文件位于 /etc/X11/XF86Config-4
中。
您可以通过几种方式添加对欧元定义的支持
通过更改 X 服务器中包含的 xkb 扩展。
通过加载新的 modmap(使用 xmodmap
)
如果您使用 xmodmap
更改了 modmap 并且它有效,这是一个临时修复,重启服务器后更改将丢失。为了在启动时加载此定义,您必须通过执行以下操作将以下定义添加到您的 Xmodmap
中
$ xmodmap -pke > ~/.xmodmap
注意:Xmodmap 已过时,请使用 Xkb 扩展。未来版本的 XFree86 甚至可能不支持用户定义的 xmodmap。
注意:区域设置必须在 Xsession 启动之前完成设置,因此请确保您的配置在执行 startx 之前正确加载(如果您正在使用 XDM 应用程序(如 gdm),您可以从中选择设置)。
注意:用于欧元符号的符号从 Xfree 3.3.6(Debian 2.2 中的标准 X 服务器)到 Xfree 4.1(Debian 3.0 中的标准 X 服务器)有所不同。在 Xfree 3.3.6 中,您必须使用 "currency" 而不是 "EuroSign" 作为符号定义。这在 Xfree 4.1 中已更改,它内置了对 EuroSign 字符的支持。如果您在 Xfree 4.1 中使用 currency 相同的符号,由于 UTF 支持,它可能无法正确表示欧元字符。
如果您正在使用 Debian woody (3.0),其中包含 XFree86 4.1,您只需要将其正确配置为欧元区的语言,这在配置文件 /etc/X11/XF86Config-4
中完成。输入欧元符号应该可以正常工作(如果不行,请提交错误报告)。
如果您的系统无法正常工作,您也可以进行一些更改以提供欧元支持。您可以更改 Xkb 扩展(位于 /etc/X11/xkb/symbols
中的文件),以包含欧元支持,类似于
key <AD03> { [ e, E ], [ EuroSign, cent ] };
但是,这应该已经包含在欧元区语言(es、de...)的所有文件中。
或者,您可以使用以下内容更改您的 Xmodmap 定义
$ echo "keycode 0x1A = e E EuroSign cent" | xmodmap -
如果您不使用 Xkb 扩展,您将必须更改 /usr/share/xmodmap/
目录中可用的定义(文件名为 xmodmap.XXX,其中 XXX 适合您的语言)。
由于 Xkb 扩展是默认行为,因此 Xfree86 4.1 提供的 Xmodmap 文件可能未正确更新。检查与 keycode 26(E 字符)相关的行是否看起来像以下行
keycode 26 = e E EuroSign cent
如果您使用的版本等于或早于 Debian potato (2.2),则语言定义可能未正确定义。如果无法升级到较新版本的 XFree86,您可以使用任何先前的方法来添加对欧元定义的支持
您可以更改 Xkb 扩展 (/etc/X11/xkb/symbols
) 以包含货币支持,类似于
key <AD03> { [ e, E ], [ currency, cent ] };
或者,您可以使用以下内容更改您的 Xmodmap 定义
$ echo "keycode 0x1A = e E currency cent" | xmodmap -
如果您不使用 Xkb 扩展,您也可以使用 /usr/share/xmodmap/
目录中可用的定义(更改适合您语言的文件)。检查与 keycode 26(E 字符)相关的行是否看起来像以下行
keycode 26 = e E currency cent
欧元区语言的 Debian 2.2 Xmodmap 定义包含欧元字符(使用货币符号),因此您可以使用以下 xmodmap /usr/share/xmodmap/xmodmap.XX(XX 是您想要使用的语言)。
为了在 X 中表示欧元符号,您需要具有适当的字体来表示 ISO-8859-15 编码(如果不使用 UTF-8)。您可以通过执行以下操作来查看哪些字体可用于此目的
$ xlsfonts | grep 'iso8859-15$'
在默认的 Debian 安装中,唯一提供此编码的字体是 fixed (misc) 字体,它可能适合 xterm,但在许多其他应用程序中可能显示不佳。但是,Debian 3.0 (woody) 提供了转码软件包字体,其中包括其他 ISO-8859-15 字体。这些软件包是 xfonts-base-transcoded
、xfonts-75dpi-transcoded
、xfonts-100dpi-transcoded
,您可以通过运行 apt-get install 'xfonts.*transcoded' 来安装它们。
有些人可能不想安装这些软件包,因为它们相当大,大约 15 Mb。有一个修改版可用,其中删除了所有非 15 字体,大小小于 3Mb。您可以在 http://sites.inka.de/W1752/reduced-xfonts/
找到它。请注意,这不属于标准 Debian 发行版。
(待办事项:如果用户真的需要这个,应该将转码软件包分成两个。)
请注意,如果您正在使用 Debian 2.2,则无法在不进行系统升级的情况下安装这些软件包,因为它们依赖于 XFree86 4。
以下软件包也提供 ISO-8859-15 字体:xfonts-jmk、xfonts-arphic-bsmi00lp、xfonts-arphic-gbsn00lp、xfonts-arphic-bkai00mp 和 xfonts-arphic-gkai00mp。
xfonts-cyrillic
软件包(在 XFree86 3.3.6 中)也提供了一些 ISO-8859-15 字体。
待办事项:验证最后这句话(似乎是由于从 euro-test 程序的用户发送给我的数据)
注意:请确保您的 .Xdefaults
文件中没有另一个字体的默认定义。例如
*VT100.font: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-16
如果您找不到任何合适的字体,您可以使用 ISO10646-1 字体,它是不同 ISO8859-X 字体的超集,并且也在 Debian 中提供。Markus Kuhn 提供了一个名为 ucs2any.pl 的脚本,其中声明
This Perl script allows you to generate from an ISO10646-1 encoded BDF font other BDF fonts in any possible encoding. This way, you can derive from a single ISO10646-1 master font a whole set of 8-bit fonts in all ISO 8859 and various other encodings.
在 http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html
上提供了用于 X-windows 的 Unicode 字体。在 ucs-fonts.tar.gz 和 ucs-fonts-75dpi100dpi.tar.gz 中,有 Times、Helvetica、Lucida、Utopia、New Century、Schoolbook、Courier... 等字体可以使用。您也可以使用 yudit 程序来更改这些字体。
有 Debian 软件包可用于安装 Kuhn 的 unicode 字体。待办事项:它们的名称是什么?
在 http://linux.ee/~ville/vh-fonts-0.99.2.tar.gz
上还有其他有用的 XFree86 3.3.6 ISO-8859-15 字体,即使主要为爱沙尼亚用户提供,它们也是正确的字体,并且包括修改后的 helvetica、times、courier 和一种终端字体。
[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ A ] [ 下一页 ]
Debian Euro HOWTO (已过时的文档)
版本 1.2,2003 年 6 月 4 日。jfs@computer.org