我们通过使用Pylons和JQuery来创建应用程序。我们已经使用了翻译的标准方式,但它并不适用于JavaScript。如何翻译主塔中的JavaScript文件
的JS-翻译方法的尴尬是我们应该做重复的流程,选择语言等
是否有塔的JavaScript的翻译正确的支持?
我们通过使用Pylons和JQuery来创建应用程序。我们已经使用了翻译的标准方式,但它并不适用于JavaScript。如何翻译主塔中的JavaScript文件
的JS-翻译方法的尴尬是我们应该做重复的流程,选择语言等
是否有塔的JavaScript的翻译正确的支持?
我使用的是主塔和ExtJS的该解决方案,但我认为你可以很容易,改变JS功能,为您的需求..
在塔控制器我有方法,其中出口的所有翻译(你需要为这个polib - http://code.google.com/p/polib/):
import polib
from pylons.i18n import get_lang
...
## method in conttroller class
@jsonify
def get_trans(self):
def get_trans():
items = polib.mofile(os.path.join(config['pylons.paths']['root'], 'i18n/%s/LC_MESSAGES/app.mo' % get_lang()[0]))
return [{'name': item.msgid, 'value': item.msgstr} for item in items]
return {'translations' : get_trans()}
JavaScript部分:
lang_store = new Ext.data.JsonStore({
url: '/lang/get',
root: 'translations',
id: 'name',
autoLoad: true,
fields: ['name', 'value'],
});
gettext = _ = function(_key) {
try {
return lang_store.getById(_key).data.value
} catch(e) {
return _key + "**"
}
}
现在你可以使用 “gettext的(STRING)” 或 “_(STRING)” 功能的JS,你会得到如果没有翻译,你会得到类似UNTRANSLATED_STRING **(最后有星号)。
的另一种方法是使用挂架的getText产生这样自己的JavaScript字符串ID:
HTML模板:
<script type="text/javascript">
var i18n_strings = {
hello_world = '${ugettext('Hello World!')}',
goodbye_world = '${ugettext('Goodbye World!')}',
enter_name = '${ugettext('Enter Name:')}'
};
</script>
现在
在你的JavaScript:
$('#some-elem').html(i18n_strings.hello_world);