mantis的多语言支持特性分析
mantis是一个支持多种语言的bug管理系统。本文分析mantis是如何支持多语言的。
分析mantis的源码,会发现mantis的每个页面的任何一个字符串输出都是通过lang_get这个函数来实现的。
lang_get函数接受一个字符串id,返回该id对应的文本在当前语言设置下的字符串
例如:
lang_get('all_projects')
在系统设置为英文时,返回的内容是:'All Projects'
在系统设置为中文时,返回的内容是:'所有的项目'
mantis的lang目录下包含了很多txt文件,它们实际上是php文件。每个文件对应一种语言的字典表。字典表的key是变量名,value就是变量的值。
变量名对应的是lang_get的参数。例如上面的例子:
lang_get('all_projects')获取的是lang目录下某一个文件中定义的$s_all_projects这个变量的值。
我们可以在strings_english.txt中看到$s_all_projects = 'All Projects';
而在strings_chinese_simplified.txt中看到$s_all_projects = '所有的项目';
简单的说,就是通过设置(在config_inc.php中设置$g_default_language = {lang})使得mantis系统自动加载lang目录下的
strings_{lang}.txt文件,将很多$s_{word_id}类型的变量载入。然后,在显示的时候通过lang_get({word_id})获取。从而达到支持多语言的目的。
需要添加语言支持时,只需要在lang目录下添加相应的文件定义字典表并修改语言配置即可。
编写插件,添加了新的词语时,比如svn版本,可以这样做:在lang目录下每个文件中添加变量$s_svn_version
例如在strings_english.txt里面定义$s_svn_version = 'SVN Version';
在strings_chinese_simplified.txt里面定义$s_svn_version = 'SVN 版本';
在页面中输出lang_get('svn_version')