openstack中的locale目录下是与国际化有关目录,你可以把这个目录看成是一个词典,一个有限词汇的词典;
在这个词典中,一个词语是用msgid来标示的,可以把这个msgid看成是一个词汇的id,然后再不同的语言中,这个msgid被翻译成不同的语言。
好了,这个词典已经放在这里了,那你程序中改怎么用这个词典呢?
step 1,在服务开启时加载字典,
例如在cinder-api的bin文件中可以看到:
from cinder.openstack.common import gettextutils
gettextutils.install('cinder')
gettextutils.install funciton:
*********************************
def install(domain):
gettext.install(domain,
localedir=os.environ.get(domain.upper() + '_LOCALEDIR'),
unicode=True)
*********************************
#从本地目录中加载了domain为cinder的字典
step 2,在程序中使用这个字典中的翻译工具:_(msg)
#导入翻译工具
from cinder.openstack.common.gettextutils import _
#使用翻译工具_
LOG.debug(_("Reloading cached file %s") % filename)
这里是一个打印调试log的语句,这里首先会从先前加载的cinder字典中,根据你设置的语言,从相应的字典中查找 msgid为"Reloading cached file"的词汇,然后与filename合并成一个字符串打印出来。
其中有一点困惑,我是这样理解的:
在cinder-api 文件中加载了这个字典,那我什么时候可以用你这个字典呢?
我理解为,只要cinder-api这个程序在运行过程中,那么其他任何地方都可以使用这个字典。
关于国际化可能有更多的细节,暂时能够快速的按照自己的理解,拿来用一用,日后可以细研究。