sh shell 如何读取某个软件已安装的语言包并以菜单方式进行选择?
发表于 : 2012-08-01 12:26
sh shell 如何读取某个软件已安装的语言包并以菜单方式进行选择?
近期在维护 Emacs 的中文化菜单界面,但对shell 不是太熟,请高手指点, 提供编程思路和简单示例
简要说明:
脚本名称:
/usr/local/bin/emacs-locale
设计要求:
如果用户手动安装了 emacs-locale-zh-cn.deb (zh-cn代表简体中文)
(本人已制作,但仅汉化部分菜单,仅适用于部分版本,因为不同版本Emacs需要单独翻译有变更的 .el 文件);
也可能有其他网友翻译并制作了繁体中文包,如名为 emacs-locale-zh-tw.deb
那么执行 emacs-locale --list命令时,会查找相应的目录结构或配置文件,
方案一:读取标记文件夹:(这些文件夹下按原 .el 文件出处的子目录结构和文件名保存)
/usr/share/emacs/23.4/site-lisp/zh_CN/lisp/org/org.el
.....
则代表已安装某个特定版本的(AAA)、特定语言的(BBB)菜单包, 使用--list参数时会以列表形表显示菜单,
用户输入对应的数字编号,可以方便地切换到指定语言环境(类似于 im-switch -c 的效果)。
这样可实现多语言、多版本共存;
方案二:读写配置文件,暂定文件名为
/etc/emacs/locales.list (默认情况下这个文件不存在)
参考格式如下
当前状态:
Emacs 官方一直对软件的国际化菜单调用,并未作成熟的框架结构设计,且不同版本中.el 文件字符串变化较大,
客观上造成了很多旧插件的不兼容和失效。
近期在维护 Emacs 的中文化菜单界面,但对shell 不是太熟,请高手指点, 提供编程思路和简单示例
简要说明:
脚本名称:
/usr/local/bin/emacs-locale
设计要求:
如果用户手动安装了 emacs-locale-zh-cn.deb (zh-cn代表简体中文)
(本人已制作,但仅汉化部分菜单,仅适用于部分版本,因为不同版本Emacs需要单独翻译有变更的 .el 文件);
也可能有其他网友翻译并制作了繁体中文包,如名为 emacs-locale-zh-tw.deb
那么执行 emacs-locale --list命令时,会查找相应的目录结构或配置文件,
方案一:读取标记文件夹:(这些文件夹下按原 .el 文件出处的子目录结构和文件名保存)
如:某个翻译后的 org.el 文件的位置/usr/share/emacs/23.4/site-lisp/zh_CN/
/usr/share/emacs/23.4/site-lisp/zh_TW/
/usr/share/emacs/24.1/site-lisp/zh_CN/
......
/usr/share/emacs/AAA/site-lisp/BBB/
/usr/share/emacs/23.4/site-lisp/zh_CN/lisp/org/org.el
.....
则代表已安装某个特定版本的(AAA)、特定语言的(BBB)菜单包, 使用--list参数时会以列表形表显示菜单,
用户输入对应的数字编号,可以方便地切换到指定语言环境(类似于 im-switch -c 的效果)。
这样可实现多语言、多版本共存;
方案二:读写配置文件,暂定文件名为
/etc/emacs/locales.list (默认情况下这个文件不存在)
参考格式如下
代码: 全选
#------------
## NAME VERSION LANGUAGE INSTALLED DISABLE/SCHEME1/SCHEME2
emacs 23.4 zh_CN 1 1
emacs 24.1 zh_TW 0 0
emacs 24.1 zh_CN 1 2
#------------
这样以后处理 xemacs 时,也可参照这一原理处理;SCHEME1/SCHEME2的原由:
目前实现Emacs菜单的中文显示,主要有两种方案(SCHEME):
方案1:english-menu.el + chinese-menu.el + mule-menu.el
这是网友叶文彬于2006年提供的方案;
优点:基本通用于 Emacs for Linux 所有版本;
缺点:
* 需要针对不同Emacs版本,手动加入和调整菜单项;
* 在Emacs for Windows下会乱码,无法使用;
方案2:直接翻译 menu-bar.el 及其它.el文件, 另外存放在指定文件结构的文件夹中,即上面提到的
/usr/share/emacs/23.1/site-lisp/zh_CN/lisp/menu-bar.el
/usr/share/emacs/23.1/site-lisp/zh_CN/lisp/org/org.el
......
并在Emacs启动文件中,使用 load 语句强制加载特定语种的菜单;
启动文件的位置:
Linux: /etc/emacs/site-start.d/00aaaa.el (文件名必须以2个数字开头)
Windows: c:\emacs-23.4\site-lisp\default.el (文件名必须为 default.el)
原理结构很清晰,便于维护和更新;
优点:通用于 Emacs for Linux/Windows;
缺点:
* 需要针对不同Emacs版本,重新翻译或补充翻译 .el 文件,维护工作量较大;
* 因Windows/Linux 平台文件名编码系统差异,在Emacs for Windows 中,某些菜单项会乱码;
当前状态:
Emacs 官方一直对软件的国际化菜单调用,并未作成熟的框架结构设计,且不同版本中.el 文件字符串变化较大,
客观上造成了很多旧插件的不兼容和失效。