+ -
当前位置:首页 → 问答吧 → 请教:关于LXDE组件的中文问题

请教:关于LXDE组件的中文问题

时间:2009-09-22

来源:互联网

受不了kde gnome庞大的编译时间,我选择了lxde作为桌面环境,可是大部分组件为英文,本来以为是版本太新,中文locale没跟上导致,一气之下,打算自己翻译lxde,可是解开源码,居然大都有zh_CN的po文件,可是/usr/share/locale目录下却只有稀稀拉拉的几个zh_CN.mo文件,我立刻重新emerge了pcmanfm一次,发现所有的语言文件都没安装.......

大家指教下怎么才能安装中文语言啊?

作者: yafeng   发布时间: 2009-09-22

你应该先配置locale吧。首先改一下配置文件,然后locale-gen生成需要的locale啊

作者: wzl12356   发布时间: 2009-09-22

是emerge不安装zh_CN的i18n文件,而不是locale的问题,我不会犯这么低级的错误的

作者: yafeng   发布时间: 2009-09-22

是不是要设置Languas?

作者: anarchist   发布时间: 2009-09-22

是設置LINGUAS。不過我對lxde的情況不瞭解。你再試試吧。

作者: 亞利艾爾   发布时间: 2009-09-22

设置了也是英文的

作者: easycat   发布时间: 2009-09-22

LANGUAGE
LANG

作者: zhllg   发布时间: 2009-09-22

有这样的问题,我的pcmanfm也是E文菜单。可能是ebuild中对语言的处理不太好,还真不受语言环境变量的控制。

作者: zhou3345   发布时间: 2009-09-22

只要po文件里都翻译了,安装了mo文件,设置对了环境变量,有对应的locale
就能显示中文

现在似乎还不可以选择的不安装mo,或者只安装某个语言的mo

所以和ebuild没有关系

作者: zhllg   发布时间: 2009-09-22

Debian的pcmanfm可以正常显示中文没有问题,而gentoo的却只能显示E文。
两边都是LC_ALL="zh_CN.UTF-8"
从实际效果上讲,可否归结为ebuild的语言包处理不当呢。

作者: zhou3345   发布时间: 2009-09-23

再看看LANGUAGE的设定

作者: zhllg   发布时间: 2009-09-25

代码:
locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8
除此之外还有别的可以影响界面的么?

作者: zhou3345   发布时间: 2009-09-25

LANGUAGE是一个变量

echo $LANGUAGE...

对于界面语言来说,LANGUAGE的优先级是最高的

作者: zhllg   发布时间: 2009-09-25

LANGUAGE 不是标准:
偶这里无此变量,设置后也无影响,执行 locale 没有列出,glibc-2.7+
debian lenny 中默认没有这个变量,执行 locale 没有列出,glibc-2.7
ubuntu 8.04 中有此变量,执行 locale 有列出,glibc-2.7
freebsd 7 中有此变量,但执行 locale 没有列出,freebsd libc

gentoo 是不是 类似 ubuntu 打了什么补丁,有 LANGUAGE 这个变量?

作者: 聚焦深空   发布时间: 2009-09-25

locale命令本来就和LANGUAGE无关
很惊讶居然这么多人不知道LANGUAGE
这是我4年前写的文章
http://www.linuxsir.org/bbs/showthread.php?t=237877

作者: zhllg   发布时间: 2009-09-25

呵呵,老大别急,您那帖子早看过。
google 得到的资料和您帖子说法类似,但日期都较早。

如果 LANGUAGE 真的是标准,怎么那么多发行版默认不设置。
再一个偶这里设置 LANGUAGE 与否,真的是一点影响也没有。

也许该深挖下,升级下您那个帖子了。

作者: 聚焦深空   发布时间: 2009-09-25

你真应该去爬爬墙,看我的blog里的那篇文章(上文中有提到)

LANGUAGE这个东西4年前的glibc本身即已支持

作者: zhllg   发布时间: 2009-09-25

另外我上文中提到的LANGUAGE设定方式:多个语言,用:分开,是我参考别的发行版才得知的

作者: zhllg   发布时间: 2009-09-25

您那篇 blog 早前看过的。
您好像还在 glibc 邮件列表上有过类似说明,记不请了,好像说的是 LC_xxx 一族变量。

好吧,俺查查,看到底为什么 LANGUAGE 变量在俺这里失效。

作者: 聚焦深空   发布时间: 2009-09-25

或许你要看看你是否有对应的mo文件

你试验的是什么程序
我刚刚试了xscreensaver-demo,没有问题

作者: zhllg   发布时间: 2009-09-25

作者: zhllg   发布时间: 2009-09-25

或许你应该把你的环境设定和命令贴出来

有一种情况是不行的
就是locale没有设定,而只设定了LANGUAGE

作者: zhllg   发布时间: 2009-09-25

系统确认没问题:
全中文,全英文,都可以登录,mo 不缺。

中文 GUI 环境开一虚拟终端 gnome-terminal,
代码:
$ locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8
export LANGUAGE=en 或设置为 en_US,
接着启动其他程序,还是中文界面,至少到这里偶自己认为正常,确认 LANGUAGE 无影响。

修改 LANG LC_ALL 为英文后,则打开的程序为英文界面
代码:
$ export LANG=en_US.UTF-8
$ export LC_ALL=en_US.UTF-8
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.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_ALL=en_US.UTF-8
$ gvim
xscreensaver-demo 等 x11 一族程序默认好像只有英文界面,如 xedit 什么的。

作者: 聚焦深空   发布时间: 2009-09-25

/usr/share/locale/zh_CN/LC_MESSAGES/xscreensaver.mo
只是翻译的不全而已

作者: zhllg   发布时间: 2009-09-26

你看看你有没有xscreensaver的这个mo
然后那xscreensaver-demo来试试

作者: zhllg   发布时间: 2009-09-26

如果还是不行,那就是程序本身的问题了
调用setlocale时的参数不合标准

作者: zhllg   发布时间: 2009-09-26

没装 xscreensaver,偶是用 gvim 测试的,至少偶这里还没看到那个程序对 LANGUAGE 有反应。

偶机机上所有软件包都不和标准? 这么说就过了:)
等会找个 debian lenny 试试。

一个值得注意的问题是,LANGUAGE 生效的机机,locale 输出有 LANGUAGE 结果,不生效的机机则没有。
ubuntu 如此,您机机应该也如此。

作者: 聚焦深空   发布时间: 2009-09-26

作者: zhllg   发布时间: 2009-09-26

我从来没见过locale的输出含有LANGUAGE的

作者: zhllg   发布时间: 2009-09-26

随便找了台 ubuntu 8.04
代码:
$ locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8

作者: 聚焦深空   发布时间: 2009-09-26

我又没有否定ubuntu有这东西
我只是说我没见过这东西,所以不能说有这东西的LANGUAGE就生效,没有这东西的就不生效

LANGUAGE在我的gentoo里从来都是生效的

作者: zhllg   发布时间: 2009-09-26

感谢各位老大的帮助,可能是我没把问题说清楚,locale什么是没问题的,有中文mo文件的程序也正常显示中文
LINGUAS设的是zh zh_CN en_US,不过这个对LXDE组件没用的,因为lxde根本没LINGUAS的选项.
老大们可以试着emerge任何一个组件,比如pcmanfm,会发现pcmanfm的所有的语言mo文件都不安装.我的问题是:如何让emerge编译的时候自动安装这些locale文件(mo文件)

btw:貌似是无解的,想装可能得自己改ebuild文件.老大们可以试验一下.

作者: yafeng   发布时间: 2009-09-26

USE=nls

作者: zhllg   发布时间: 2009-09-26

nls我也有的,我解完stage的第一步就是把nls等USE加到make.conf了,有部分程序是有中文界面的.比如lxde的lxsession就有中文.

Calculating dependencies... done!
[ebuild R ] x11-misc/pcmanfm-0.5.1 USE="hal" 676 kB

现在似乎只能归结为:lxde各组件的locale文件(mo)需要在ebuild里边处理一下,生成类似firefox的
LINGUAS="zh_CN -af -ar -a....."
这种USE才成.......
lxde组件的ebuild我看过,没有任何关于语言方面的语句,估计makefile里边又默认不安装mo文件

作者: yafeng   发布时间: 2009-09-26

那应该是pcmanfm自己的makefile的问题
一般来说一个程序所有语言的mo,都会在make install这一步一股脑全装上
这也是localepurge程序诞生的原因

作者: zhllg   发布时间: 2009-09-26

gvim确实是个例外,它没有用gettext

要验证的话用ltrace

作者: zhllg   发布时间: 2009-09-26

引用:
作者: zhllg
那应该是pcmanfm自己的makefile的问题
一般来说一个程序所有语言的mo,都会在make install这一步一股脑全装上
这也是localepurge程序诞生的原因

是的老大,我也是这么认为的

作者: yafeng   发布时间: 2009-09-26

犯傻了

深空同学,不如你在你的机机上用ls试一下吧

[zhangle@etoo ~] $ export LANG=zh_CN.UTF-8
[zhangle@etoo ~] $ export LC_ALL=zh_CN.UTF-8
[zhangle@etoo ~] $ ls jwoiefw
ls: cannot access jwoiefw: No such file or directory
[zhangle@etoo ~] $ export LANGUAGE=zh_CN
[zhangle@etoo ~] $ ls jfowief
ls: cannot access jfowief: 没有那个文件或目录
[zhangle@etoo ~] $ export LANGUAGE=en
[zhangle@etoo ~] $ ls jowiefw
ls: cannot access jowiefw: No such file or directory

作者: zhllg   发布时间: 2009-09-26

呵呵,LANGUAGE 变量在偶这里终于生效了。

这个变量只影响字符界面程序?

在 gettext 源码中到是可以看到一堆 LANGUAGE。

PS:工作多年,叫同学多别扭。

作者: 聚焦深空   发布时间: 2009-09-26

不是字符界面的程序
是所有使用gettext的程序

作者: zhllg   发布时间: 2009-09-26

确认偶这里 LANGUAGE 对 vim 起作用,确认 gvim 使用了 gettext:
编译时没有使用 --disable-nls, 另 gvim --version
代码:
$ LANG= LC_ALL= gvim --version
Compiled by root@localhost
Normal version with GTK2 GUI. Features included (+) or not (-):
-arabic +autocmd +balloon_eval +browse +builtin_terms +byte_offset +cindent 
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments 
+cryptv -cscope +cursorshape +dialog_con_gui +diff +digraphs +dnd -ebcdic 
-emacs_tags +eval +ex_extra +extra_search -farsi +file_in_path +find_in_path 
+folding -footer +fork() +gettext -hangul_input +iconv +insert_expand +jumplist
 -keymap -langmap +libcall +linebreak +lispindent +listcmds +localmap +menu 
+mksession +modify_fname +mouse +mouseshape -mouse_dec +mouse_gpm 
-mouse_jsbterm -mouse_netterm +mouse_xterm +multi_byte +multi_lang -mzscheme 
+netbeans_intg -osfiletype +path_extra -perl +postscript +printer -profile 
-python +quickfix +reltime -rightleft -ruby +scrollbind +signs +smartindent 
-sniff +statusline -sun_workshop +syntax +tag_binary +tag_old_static 
-tag_any_white -tcl +terminfo +termresponse +textobjects +title +toolbar 
+user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace 
+wildignore +wildmenu +windows +writebackup +X11 -xfontset +xim +xsmp_interact 
+xterm_clipboard -xterm_save 
 system vimrc file: "/etc/vimrc"
 user vimrc file: "$HOME/.vimrc"
 user exrc file: "$HOME/.exrc"
 system gvimrc file: "$VIM/gvimrc"
 user gvimrc file: "$HOME/.gvimrc"
 system menu file: "$VIMRUNTIME/menu.vim"
 fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -g -O2 
Linking: gcc -L/usr/local/lib -o vim -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lXt -lncurses -lgpm
确认 gnome 系软件包国际化不使用 gettext,LANGUAGE 无影响。
确认纯正 gtk 软件国际化,需要 gettext,LANGUAGE 有效,如 transmission,gvim 是特例。

另,debian lenny 默认不设置 LANGUAGE,执行 locale 也无输出;
但设置 LANGUAGE 后,执行 locale 有输出;
ubuntu 应是使用 debian glibc 补丁并默认设置该变量。
http://patch-tracker.debian.org/patc...-LANGUAGE.diff
代码:
Comments tell that LANG has to be the first value, and LC_ALL the last
one. Thus LANGUAGE is printed between them.

# DP: Dpatch author: Denis Barbier
# DP: Patch author: Denis Barbier
# DP: Upstream status: not submitted
# DP: Date: 2006-01-08

Index: locale/programs/locale.c
===================================================================
--- locale/programs/locale.c.orig       2007-10-23 08:46:19.000000000 -0400
+++ locale/programs/locale.c    2007-10-23 08:47:08.000000000 -0400
@@ -752,6 +752,7 @@
 {
 size_t cat_no;
 const char *lcall = getenv ("LC_ALL");
+ const char *language = getenv ("LANGUAGE");
 const char *lang = getenv ("LANG") ? : "";
 
 auto void get_source (const char *name);
@@ -770,6 +771,9 @@
 /* LANG has to be the first value. */
 printf ("LANG=%s\n", lang);
 
+ if (language != NULL && getenv ("POSIXLY_CORRECT") == NULL)
+ printf ("LANGUAGE=%s\n", language);
+
 /* Now all categories in an unspecified order. */
 for (cat_no = 0; cat_no < NCATEGORIES; ++cat_no)
 if (cat_no != LC_ALL)

作者: 聚焦深空   发布时间: 2009-09-26