公司与华为合作在科威特实施一个项目,之前部门做的项目都是国内的,还从来没有做过国外的,所以公司领导特别重视,只许成功不许失败;
首先要做的就是国际化的支持,之前系统只有部分做过国际化,而且很多做的不完善,有的只有中文资源文件,没有英文资源文件,有的直接就没做;这个任务落在我和另一位同事身上,我负责做国际化,同事负责国际化后界面的调整;这么多一个一个去改是不可能的,工程量巨大,而且还会遗漏,这种活怎么能让我们这懒懒的程序猿去做,于是写了三个国际化用的扫描程序,分别扫描java,js和jsp文件,提取出其中的中文替换为国际化的key,同时生成国际化资源文件,然后拿给翻译去翻;最后将个别没有扫描到的人工修改;
除了系统界面,还有一部分需要做国际化!那就后台任务,自动发送报表、报警邮件、短信之类的功能,这个改写成了根据服务器本地的设置来选择语言;
全部改好了后,本来以为万事大吉,只欠东风了,结果实施的童鞋发难了,如果对方服务器默认语言不是英文怎么办,那好办,度娘一下全部解决,只需要修改linux系统文件/etc/sysconfig/i18n
LANG="en_US.UTF-8"
然后执行一下source /etc/sysconfig/i18n即可;
后来客户说要在redhat7上进行安装,实施的童鞋为了确保万无一失,专门做了个redhat7的系统,安装了一遍,更改系统语言的时候发现竟然没有/etc/sysconfig/i18n这个文件;于是自己创建了一个,放上去,为了验证器正不正确,先改为了中文,结果没有起作用,系统发送的邮件仍然是英文邮件,于是各种百度;发现全都是更改/etc/sysconfig/i18n这个文件,要么就是在桌面上更改,我去,我们服务器端安装桌面是不可能的;看样子还是自己动手丰衣食足;
想了一下解决思路,既然redhat7没有i18n这个文件那么有可能是写在别的地方了, 我们要找的就是看看/etc/sysconfig/i18n会在什么时候加载,找到其他系统加载这个文件的位置,再去看redhat7上是不是也在这个位置加载了其它文件,想了一下linux系统启动时加载配置文件的过程
- /etc/profile
- ~/.bash_profile | ~/.bash_login | ~/.profile
- ~/.bashrc
- /etc/bashrc
- ~/.bash_logout
先从/etc/profile开始查看
vi /etc/profile,在该文件的67行,有了这样的发现
for i in <span style="background-color: rgb(255, 255, 102);"><span style="color:#FF0000;">/etc/profile.d/*.sh</span></span> ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null 2>&1
fi
fi
done
原来它会执行/etc/profile.d/目录下所有的 *.sh脚本文件;
于是进入到/etc/profile.d/ 目录:
[root@localhost profile.d]# ll
total 44
-rw-r--r--. 1 root root 1127 Oct 17 2013 colorls.csh
-rw-r--r--. 1 root root 1143 Oct 17 2013 colorls.sh
-rw-r--r--. 1 root root 192 Aug 27 2013 glib2.csh
-rw-r--r--. 1 root root 192 Aug 27 2013 glib2.sh
-rw-r--r--. 1 root root 1741 Nov 23 2013 lang.csh
<span style="color:#FF0000;">-rw-r--r--. 1 root root 2706 Nov 23 2013 lang.sh</span>
-rw-r--r--. 1 root root 122 Feb 7 2007 less.csh
-rw-r--r--. 1 root root 108 Feb 7 2007 less.sh
-rw-r--r--. 1 root root 97 Apr 5 2012 vim.csh
-rw-r--r--. 1 root root 269 Apr 5 2012 vim.sh
-rw-r--r--. 1 root root 169 May 20 2009 which2.sh
一眼就瞄到了lang.sh,打开它看看里面有什么内容:
# /etc/profile.d/lang.sh - set i18n stuff
sourced=0
if [ -n "$LANG" ]; then
saved_lang="$LANG"
[ -f "$HOME/.i18n" ] && . "$HOME/.i18n" && sourced=1
LANG="$saved_lang"
unset saved_lang
else
for langfile in <span style="color:#FF0000;">/etc/sysconfig/i18n</span> <span style="color:#FF0000;">"$HOME/.i18n"</span> ; do
[ -f $langfile ] && . $langfile && sourced=1
done
fi
来的真是全不费功夫,在开头的位置发现了标红的这两个文件/etc/sysconfig/i18bn 和 用户目录下的.i18n文件;
然后如出一辙,在redhat7上顺藤摸瓜找到了这个文件lang.sh打开一看
else
for langfile in <span style="background-color: rgb(255, 255, 153);"><span style="color:#FF0000;">/etc/locale.conf</span></span> <span style="color:#FF0000;">"$HOME/.i18n"</span> ; do
[ -f $langfile ] && . $langfile && sourced=1
done
fi
原来redhat7已经将系统语言的设置迁移到了/etc/locale.conf文件里
打开这个文件,设置为中文,重启服务,问题解决!