URN Logo
UNIX Resources » Linux » China Linux Forum » Linux 中文环境和中文化 » 15 » [精华] 英文环境输中文的问题
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
[精华] 英文环境输中文的问题
[精华] 英文环境输中文的问题 - jimin [2004-02-25 20:38 | 281 byte(s)]
 
Re: 英文环境输中文的问题 - jeff_yecn [2004-03-19 11:31 | 471 byte(s)]
 
Re: 英文环境输中文的问题 - yuking [2004-03-19 14:46 | 39 byte(s)]
 
Re: 英文环境输中文的问题 - cnchun [2004-04-17 16:49 | 796 byte(s)]
 
[精华] 可以这样做 - xiaohuo [2004-02-26 11:29 | 5,473 byte(s)]
 
[精华] 谢谢 - yuking [2004-02-26 14:16 | 40 byte(s)]
 
Re: 谢谢 - jimin [2004-02-29 23:39 | 67 byte(s)]
 
还有一些小改动, - xiaohuo [2004-02-27 10:41 | 952 byte(s)]
 
Re: 还有一些小改动, - xyb [2004-02-27 12:12 | 725 byte(s)]
 
交作业 - xiaohuo [2004-03-01 09:52 | 591 byte(s)]
 
Re: 交作业 - yuking [2004-03-01 11:23 | 50 byte(s)]
 
Re: 交作业 - xyb [2004-03-01 10:53 | 262 byte(s)]
 
Re: 还有一些小改动, - yuking [2004-02-27 11:28 | 92 byte(s)]
 
Re: 还有一些小改动, - xyb [2004-02-27 12:05 | 61 byte(s)]
 
Subject: [精华] 英文环境输中文的问题
Author: jimin    Posted: 2004-02-25 20:38    Length: 281 byte(s)
[Original] [Print] [Top]
看了精华区基本搞定了,现在就是用fcitx
不过有个小问题,貌似必须把LC_CTYPE设成zh_CN才行
这样一来英文界面的字体就好象变成仿宋体了,不是很习惯,觉得很难看
有什么方法仍然用原来英文的字体吗?
本人初次驾道,看到这里大侠不少,还请多多指教。
:)
[Original] [Print] [Top]
Subject: [精华] 可以这样做
Author: xiaohuo    Posted: 2004-02-26 11:29    Length: 5,473 byte(s)
[Original] [Print] [Top]
首先,你所谓“英文环境”准确的讲,应该是“使用UTF-8编码的英文环境”,否
则,如果是用ASCII的英文环境,XIM类的输入法,就没法打中文(不属XIM类
的输入法,自然不在此列)。

以Fcitx为例,为了看是不是用UTF-8编码,他先去查LC_CTYPE,然后查LANG
这些环境变量—这不是个好办法。

该怎么做呢?

Markus Kuhn在《UTF-8 and Unicode FAQ for Unix/Linux》里说得很
详细:对于Linux和FreeBSD这些系统,用什么编码最好问
nl_langinfo(CODESET)
实在不成,才去依次查看LC_ALL,LC_TYPE,LANG这些坏境变量。于是,可对
Fcitx这部分改一下:


Index: main.c
===================================================================
@@ -3,6 +3,8 @@

/*Program closes with a mouse click or keypress */

+#include <langinfo.h>
+
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
@@ -32,8 +35,8 @@

extern IME imeIndex;
extern Bool bBackground;
+extern Bool bIsUtf8;
extern HIDE_MAINWINDOW hideMainWindow;
extern Bool bRunLocal;

@@ -58,9 +59,9 @@

LoadProfile ();
LoadConfig (True);
- GetLocale ();
CreateFont ();
- SetLocale ();
+ setlocale (LC_ALL, "");
+ bIsUtf8 = (strcmp(nl_langinfo(CODESET), "UTF-8") == 0);

if (!LoadPuncDict ())


去掉那两个GetLocale(),SetLocale(),用nl_langinfo(CODESET),简单省
事。


Index: SetLocale.c
===================================================================
@@ -6,29 +6,7 @@

char strUserLocale[20];

-extern Bool bIsUtf8;
-extern char *strDefaultLocale;
extern Bool bUseGBK;
-
-void GetLocale (void)
-{
- if (strUserLocale[0] != '')
- strDefaultLocale = strUserLocale;
- else {
- strDefaultLocale = (char *) getenv ("LC_CTYPE");
- if (!strDefaultLocale)
- strDefaultLocale = (char *) getenv ("LANG");
- }
-
- if (!strcasecmp (strDefaultLocale, "zh_CN.UTF8") || !strcasecmp
(strDefaultLocale, "zh_CN.UTF-8"))
- bIsUtf8 = True;
-}
-
-void SetLocale (void)
-{
-// GetLocale ();
- setlocale (LC_CTYPE, strDefaultLocale);
-}

Bool CheckLocale (char *strHZ)
{
Index: SetLocale.h
===================================================================
@@ -3,8 +3,6 @@

#include "xim.h"

-void GetLocale (void);
-void SetLocale (void);
Bool CheckLocale (char *strHZ);

#endif


当然也不要那个strDefaultLocale了:


Index: ui.c
===================================================================
@@ -54,7 +54,6 @@
extern Bool bIsResizingInputWindow;
extern HIDE_MAINWINDOW hideMainWindow;
extern IC *CurrentIC;
-extern char *strDefaultLocale;

Bool InitX (void)
{
Index: xim.c
===================================================================
@@ -11,8 +11,6 @@

long filter_mask = KeyPressMask | KeyReleaseMask;
IC *CurrentIC;
Bool bRunLocal = False;
-char *strDefaultLocale;
Bool bUseCtrlShift = False;
Bool bBackground = True;

@@ -388,7 +386,14 @@
encodings->supported_encodings = zhEncodings;
strcpy (transport, "X/");

- ims = IMOpenIM (dpy, IMModifiers, "Xi18n", IMServerWindow, im_window,
IMServerName, imname, IMLocale, (strcasecmp (strDefaultLocale, "zh_CN.gb2312")) ?
strDefaultLocale : "zh_CN", IMServerTransport, transport, IMInputStyles, input_styles,
NULL);
+ ims = IMOpenIM (dpy,
+ IMModifiers, "Xi18n",
+ IMServerWindow, im_window,
+ IMServerName, imname,
+ IMServerTransport, transport,
+ IMLocale, "zh_CN,en_US.UTF-8",
+ IMInputStyles, input_styles,
+ NULL);


除了重新排了下版,读起来通顺一些外,这一段里最主要的改动是这一行:
IMLocale, "zh_CN,en_US.UTF-8",
即告诉人说,本输入法支持中文和使用UTF-8的英文locale,本来任何使用
UTF-8的locale都没问题,可惜IMdkit不让你说类似
IMLocale, "zh_CN,*.UTF-8",
这样的话,如果你想在使用UTF-8的法文、德文环境中使用Fcitx,你只好加上
fr_FR.UTF-8,de_DE.UTF-8
等一大堆。
[Original] [Print] [Top]
Subject: [精华] 谢谢
Author: yuking    Posted: 2004-02-26 14:16    Length: 40 byte(s)
[Original] [Print] [Top]
谢谢!
我将您的代码加到程序中!
----
本人总是爱冲动,得罪之处,敬请谅解
[Original] [Print] [Top]
Subject: 还有一些小改动,
Author: xiaohuo    Posted: 2004-02-27 10:41    Length: 952 byte(s)
[Original] [Print] [Top]
顺手作的,干脆并作一处:

1. 因为Fcitx未用autotools(就是被人亦称作autofool的那个,你不愿用
可以理解),这样有人想安装至别处时,不易另设;但大概为了方便试用,硬
加了一个install_local—其实用prefix更符合一般习惯。所以改动之一是
由prefix来定安装目录。没特别指定prefix时,就安装在/usr下;如果想安
装在/usr/local下,可以
make prefix=/usr/local
make install prefix=/usr/local
我的习惯则是一律先放到自己的区下做实验(相当于原install_local),比

make prefix=$HOME/FCITX
make install prefix=$HOME/FCITX
2. 改动之二是去掉Makefile.noxft,只要一个Makefile就行了。为区别
起见,加了一个make变量usexft:没特别指明时,即用Xft;如不想或不能用
Xft,则
make usexft=no
make install usexft=no
3. 其三就是前面那个locale改动。

Fcitx短小精悍,殊是难得。要说谢也该是谢你才对。
--
Attached file: 475848-fcitx-diff.txt
[Original] [Print] [Top]
Subject: Re: 还有一些小改动,
Author: yuking    Posted: 2004-02-27 11:28    Length: 92 byte(s)
[Original] [Print] [Top]
先谢谢!
不过,linuxsir的idkey已经写了个autoconf脚本,我已经将它放到新的fcitx中了。
----
本人总是爱冲动,得罪之处,敬请谅解
[Original] [Print] [Top]
Subject: Re: 还有一些小改动,
Author: xyb    Posted: 2004-02-27 12:05    Length: 61 byte(s)
[Original] [Print] [Top]
呵呵,idkey就是xyb,主要是我以前注册的xyb的密码忘掉了,哈哈。
[Original] [Print] [Top]
Subject: Re: 还有一些小改动,
Author: xyb    Posted: 2004-02-27 12:12    Length: 725 byte(s)
[Original] [Print] [Top]
如果 xiaohuo 感兴趣,可以到 http://cvs.cosoft.org.cn/cgi-bin/viewcvs.cgi/fcitx/fcitx/ 看看现在的 fcitx 代码,请给帮助检查错误,好吗?

# 匿名用户检出源代码
cvs -d:pserver:anonymous@cvs.cosoft.org.cn:/sfroot/cvs/fcitx login
cvs -z3 -d:pserver:anonymous@cvs.cosoft.org.cn:/sfroot/cvs/fcitx co fcitx

# 小组成员通过 SSH 进行 CVS 访问
export CVS_RSH=ssh
#cvs -z3 -d:ext:项目开发者用户名@cvs.cosoft.org.cn:/sfroot/cvs/fcitx co fcitx
#我是这样取开发代码的:
cvs -z3 -d:ext:xyb@cvs.cosoft.org.cn:/sfroot/cvs/fcitx co fcitx
[Original] [Print] [Top]
Subject: Re: 谢谢
Author: jimin    Posted: 2004-02-29 23:39    Length: 67 byte(s)
[Original] [Print] [Top]
哇哈,多谢个位牛人啊
希望加了新代码的fcitx能快点出来,呵呵
[Original] [Print] [Top]
Subject: 交作业
Author: xiaohuo    Posted: 2004-03-01 09:52    Length: 591 byte(s)
[Original] [Print] [Top]
小谢,布置的作业做完了,请批改。我在FC1上调试通过,locale是
en_US.UTF-8,步骤如下:
cd fcitx
autogen.sh
configure --prefix=$HOME/FCITX
make
make install
运行
$HOME/FCITX/bin/fcitx
Client是testtext。然而选字框中不能正确显示中文。修改
~/.fcitx/config
中字体一条后,再重来
killall fcitx
$HOME/FCITX/bin/fcitx
就好了。

另: CVS里能否去掉那些自动产生的文件,如Makefile.in,fcitx.spec,
src/version.h之类。
--
Attached file: 476244-fcitx-diff.txt
[Original] [Print] [Top]
Subject: Re: 交作业
Author: xyb    Posted: 2004-03-01 10:53    Length: 262 byte(s)
[Original] [Print] [Top]
谢谢!我们会在测试后放到cvs里。

我保留了 Makefile.in 这些文件,这可以让匿名检出代码的人没有automake也可以编译代码,只要有cc就可以了。src/version.h 是代码中必须的一个文件。fcitx.spec 也是为了使用的人方便,检出代码之后,就可以直接开始编译rpm了。
[Original] [Print] [Top]
Subject: Re: 交作业
Author: yuking    Posted: 2004-03-01 11:23    Length: 50 byte(s)
[Original] [Print] [Top]
再谢谢!
我已经将它放入自己的代码中了……
----
本人总是爱冲动,得罪之处,敬请谅解
[Original] [Print] [Top]
Subject: Re: 英文环境输中文的问题
Author: jeff_yecn    Posted: 2004-03-19 11:31    Length: 471 byte(s)
[Original] [Print] [Top]
Hi, YuKing

我根据 CVS 的 autoconf 版本,做了些修改,让它也可以在 OS X 下编译运行。在 RH 9 下测试也没有问题。

如果可以的话,请合并到新的版本中。

谢谢。

下载链接 http://vip.sinomac.net/jeff/unix/fcitx-2.0.2.tar.gz
不好意思,为了调试的时候对比方便,我把你的版本号加一了。:-)
[Original] [Print] [Top]
Subject: Re: 英文环境输中文的问题
Author: yuking    Posted: 2004-03-19 14:46    Length: 39 byte(s)
[Original] [Print] [Top]
非常感谢!
希望xyb能将它加入!
----
本人总是爱冲动,得罪之处,敬请谅解
[Original] [Print] [Top]
Subject: Re: 英文环境输中文的问题
Author: cnchun    Posted: 2004-04-17 16:49    Length: 796 byte(s)
[Original] [Print] [Top]
我也是乱搞搞好了。不过没有打补丁,这是我的.xinitrc

#FCITX
export XMODIFIERS="@im=fcitx"
export XIM=fcitx
export XIM_PROGRAM=fcitx
#LOCALE setup
export LC_TIME=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LANG=zh_CN
wmaker &
wmCalClock &
#load fcitx
#/root/FCITX/bin/fcitx
/root/fcitxtest/bin/fcitx

xchat &
xxkb &
exec rxvt +vb -ip -bg black -fg white -fn fixed -geometry 80x50+0+0 -name login
我用gentoo-1.4
下了那个fcitx-2.0.2的包。好象本来fcitx就支持utf-8,只是设置的时候要加上lang=zh_cn,同时language=en_us.utf-8就行了。
多谢大家,不错不错,输入法!
[Original] [Print] [Top]
« Previous thread
fcitx error!
Linux 中文环境和中文化
15
Next thread »
如何配置Redhat9.0,可以使得Exceed网络访问?
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 02:03:15, cost 0.03933310508728 ms.