日志文章

2007年12月06日 11:16:01

本地化的完美解决方案

我装了gentoo后,感觉在国内论坛上发帖没有一个中文输入法很不方便。于是就想装一个。又因为本人日语选修课的需要,顺便装个日文输入法。需要韩文的朋友可以如法炮制。以前有人说这方面的贴子很多但深入的没有,这次我来个最深入的,让别人不动脑筋不会有在深入的贴在出现。
下面开始。我是amd64-Sempron(tm) Processor 3000+,1.5Gmemory。我的目标是英文界面,带中文日文输入法。
post1.make.conf
CFLAGS="-march=k8 -O2 -pipe"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
ACCEPT_KEYWORDS="amd64"
MAKEOPTS="-j2"
LDFLAGS="-Wl,-O1"
GENTOO_MIRRORS="http://gentoo.netnitco.net/ http://mirror.utdlug.org/linux/distributions/gentoo/ http://gentoo.chem.wisc.edu/gentoo/"
SYNC="rsync://rsync.gentoo.org/gentoo-portage"
CONFIG_PROTECT="-*"
USE="3dnow 3dnowext X a52 aac aalib acpi alsa apm berkdb bindist bonobo bzip2 cjk crypt cscope dri dvd encode esd firefox ftp gd gdbm gif gnome gtk icq imlib ipv6 java javascript jikes jpeg libg++ libwww mad mikmod mmx mng motif mp3 mpeg mplayer multilib ncurses nls nptl odbc ogg opengl oss pam pdf perl png python quicktime readline real samba sdl spell sse sse2 ssl tcpd truetype unicode usb xml xv zlib"
INPUT_DEVICES="keyboard mouse"
VIDEO_CARDS="nv"
#LINGUAS="zh_CN"

LINGUAS的具体用途是:你加入这一选项,在firefox,openoffice,kde-i18n...中生成带有中文的空间。
举例:我在编译openoffice时加入了这一选项,结果出来openoffice是中文的(我系统中所有applications均是英文的)。

post2./etc/env.d/100i18n
LANG="en_US.UTF-8"
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"

唯独LC_CTYPE设置成zh_CN.UTF-8,原因是这样设置才会有中文输入法,同时日文输入法也会有,我想韩文大抵也如此。我曾经试过设置成en_US.UTF-8,结果中日输入法均无法使用。

post3./etc/locale.gen
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
zh_CN.GBK GBK

要用中文日文输入法zh_CN.UTF-8 UTF-8和ja_JP.UTF-8 UTF-8是少不了的。韩文的ko_KR.UTF-8 UTF-8是少不了的。
测试:我曾在上面的/etc/locale.gen中没有设ja_JP.UTF-8 UTF-8,结果只有中文输入法能用。
Why zh_CN.GBK GBK?其实没有这个也行,只是我们的周围充斥着软弱的政府与恶心的微软联合缔造的gbk。加入这一项就是为了能够阅读从Windows那里过来的中文文档。怎么读?这里有:http://www.linuxsir.org/bbs/showthread.php?t=313264
没有加入gb2312原因是gbk是gb2312的超集,所以gbk就够了。至于gb18030我以前加过,但是从来没有用到过,如果有需要可以视情况而定。
还有所有的UTF-8,GBK,GB2312最后都会自动转换成utf8,不信你执行locale -a试一下就都明
白了。

command1.source /etc/make.conf
command2.source /etc/env.d/100i18n
command3.locale-gen
command4.emerge scim scim-pinyin scim-anthy(韩文是scim-hangul.切记要最后emerge,后面会提到why)
完事之后根据提示建立.gnomerc or .xinitrc,然后post
LANG="zh_CN.UTF-8" scim -d
export XMODIFIERS=@im=SCIM
export GTK_IM_MODULE="scim"
export QT_IM_MODULE="scim"
command5.source .gnomerc or source .xinitrc

其实这里的LANG可以不设。这与前面的最后emerge皆源于一个bug.
在command5后,系统会弹出一个bug reporting tool,是scim和nautilus的冲突,我提交了,但是人家给我发了一封邮件,说让我安装一个东西,再让bug出来一次,这样他们就会很容易的发现错误。但是问题是这个bug是存在的,到但是弹出bug reporting tool必须重新emerge scim一次,我懒得做。要是那位希望出力的请看:http://live.gnome.org/GettingTraces    
先安装一下在执行command5即可。
这个bug是什么呢?
That is安装了scim后,locale就不会变了,即/etc/env.d/02locale没用了,你把它删除重启,locale还是不变,所以说要最后 emerge,所以说LANG不设也可。要想改变locale的唯一方法是--emerge -e system.在此之后02locale又管用了,不过设置后要重启,执行env-update不管用。

emerge -e system是很好用的东西,在系统崩溃后,想办法chroot到原来的系统,然后执行之,一切OK!

上面的方法会使tty下中文产生乱码,经过讨论,这里提供另一方法。此法好处是不会使一些软件的中文无法显示,同时保持系统的locale的不变。这种方式只有vim无法显示和输入中文,emacs无法输入中文,其他的都可以。我也推荐这种方法。
设置locale
File:/etc/locale.gen

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
ko_KR.UTF-8 UTF-8
zh_CN.GBK GBK

run locale-gen
安装输入法

emerge scim scim-pinyin scim-anthy scim-hangul

在~/.bashrc中添加两行:

export XMODIFIERS=@im=SCIM
export GTK_IM_MODULE="scim"(gnome)
export QT_IM_MODULE="scim"(kde)

重启,一切OK!




Tags: gentoo   locale   中文输入法  

类别: linux |  评论(0) |  浏览(3847) |  收藏
发表评论
看不清楚,换一张