LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 859|回复: 9

如何在不改locales的情况下让单一软件使用其它语言?

[复制链接]
发表于 2005-7-20 17:43:46 | 显示全部楼层 |阅读模式
  比如我现在的locales设置的是utf-8,结果是所有的bash提示包括很多的软件的界面都自动设置成了中文,尤其是mc,如果不启动zhcon,根本没用使用菜单,可是即使启动zhcon,字符仍然不全,使用起来很麻烦

  在命令行的环境下,在不想改默认locales的情况下,如果想让单一软件使用另一种语言的界面和提示(比如英文),请问,可以怎么实现,现在主要是解决mc的问题,请高手指教

  这又带着另外一个问题,zhcon的刷屏速度实是太慢了,简单是慢动作,请问如何能让它的工作跟英文界面上的差不多呢?这肯定与电脑速度关系不大了,当年偶在P75下面跑UCDOS7.0那也是飞快的说……应该是哪里设置不到位了,有了解的不?
发表于 2005-7-20 18:41:36 | 显示全部楼层
dieken:/home/dieken# set | grep -i lc_   
LC_ALL=zh_CN.UTF-8                       
dieken:/home/dieken# bash               
dieken:/home/dieken# echo $SHLVL         
3                                       
dieken:/home/dieken# set | grep -i lc_   
LC_ALL=zh_CN.UTF-8                       
dieken:/home/dieken# export LC_ALL=en_US
dieken:/home/dieken# set | grep -i lc_   
LC_ALL=en_US                             
_=LC_ALL                                 
dieken:/home/dieken# echo $SHLVL         
3                                       
dieken:/home/dieken# exit               
exit                                    
dieken:/home/dieken# echo $SHLVL         
2                                       
dieken:/home/dieken# set | grep -i lc_   
LC_ALL=zh_CN.UTF-8

===========
这样就可以用run.sh mycommand&

--->
# run.sh
export LC_ALL=en_US
$@

<---
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-20 20:14:22 | 显示全部楼层
感谢指教

只是………

没看懂……
回复 支持 反对

使用道具 举报

发表于 2005-7-20 20:26:57 | 显示全部楼层
locale 设成 en_US.UTF-8 不就行了
不可能不改变 locale 的,至少要临时改变一下,楼上就是这个意思吧
回复 支持 反对

使用道具 举报

发表于 2005-7-20 22:34:27 | 显示全部楼层
非常简单,这么运行呗:

leira@Leira:~$ LANG="C" mc

bash在运行命令之前可以单独为他制定环境变量~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-20 23:23:02 | 显示全部楼层
向Leira同志学习,向Leira同志致敬~~~~~~~搞定
回复 支持 反对

使用道具 举报

发表于 2005-7-21 09:10:09 | 显示全部楼层
Post by Leira
非常简单,这么运行呗:

leira@Leira:~$ LANG="C" mc
~~~~~~~~~~~~~~~~~~~~LANG=C; mc

bash在运行命令之前可以单独为他制定环境变量~


这样的话在这个shell内(不包括在此shell中派生的shell)执行其它程序
时环境变量LANG就一直是C了。
回复 支持 反对

使用道具 举报

发表于 2005-7-21 09:33:47 | 显示全部楼层
SHLVL变量表示当前shell是第几层,比如刚登陆时的
SHLVL是1,在提示符输入bash, 就是在shell内又派生了一个shell,后者
是前者的子进程,这时SHLVL变为2,输入exit,退出第二个shell,回到
第一个shell,SHLVL恢复为1。

子进程会继承父进程中*导出的*变量(无所谓“环境”二字):
export VAR=value中export的作用就是说把这个变量定义暴露给此进程
派生的进程,就是说
bash1>var=value
bash1>bash
bash2>echo $var
# var没有定义
bash2>exit
bash1>export var=value
bash1>bash
bash2>echo $var
# 派生的bash是第一个bash的子进程,它能看到var的定义
bash2>exit
bash1>

所以我们常见到在.bash_profile和.bashrc中声明环境变量时前面加了
export(对于csh似乎是用env),这样这个shell派生的子进程以及子子
进程都能看到这些定义。



Post by dieken_qfz
dieken:/home/dieken# set | grep -i lc_   
LC_ALL=zh_CN.UTF-8                       
dieken:/home/dieken# bash               
dieken:/home/dieken# echo $SHLVL         
3                                       
dieken:/home/dieken# set | grep -i lc_   
LC_ALL=zh_CN.UTF-8                       
dieken:/home/dieken# export LC_ALL=en_US
dieken:/home/dieken# set | grep -i lc_   
LC_ALL=en_US                             
_=LC_ALL                                 
dieken:/home/dieken# echo $SHLVL         
3                                       
dieken:/home/dieken# exit               
exit                                    
dieken:/home/dieken# echo $SHLVL         
2                                       
dieken:/home/dieken# set | grep -i lc_   
LC_ALL=zh_CN.UTF-8

===========
这样就可以用run.sh "mycommand&"

--->
# run.sh
export LC_ALL=en_US
$@

<---


$@的意思是所有命令行参数,比如
run.sh "foobar; hello; world&"
这个命令就开了一个新的shell(run.sh由一个派生shell解释执行),
在这个shell内重新定义了变量LC_ALL并导出给这个派生的shell的子进程
以及子子进程, 并执行命令"foobar; hello; world&"
加入&的用意是是让这些命令后台执行,而这个派生的shell可以马上退出,然后
用户可以在原先的shell里继续输入命令了,而且随后在这个shell里面是用的LC_ALL
仍然是最初设置的那个值。

注意:run.sh后面的命令要用引号括起来,否则就会把;和&和重定向符号解释为
用于当前shell的。
回复 支持 反对

使用道具 举报

发表于 2005-7-21 11:23:30 | 显示全部楼层
把 export LC_ALL=POSIX 一句写到 ~/.bashrc 中即可.
回复 支持 反对

使用道具 举报

发表于 2005-7-21 16:40:07 | 显示全部楼层
我的locale是en,x中为zh_CN.UTF-8。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表