背景信息:django 1.6.2,python 2.7.5
我最近开始将国际化应用到我的 django 项目中。我已经设法让它在应用程序的模型、视图和模板(称为指标)中工作。但是,当我尝试对静态 js 文件应用国际化时,gettext()
它似乎不起作用,因为它总是返回我传递给它的字符串,而忽略了浏览器语言。另一方面,{% trans ... %}
html 模板(使用那些 js 静态文件)中的标签被正确翻译。这表明问题在于我的 js 静态文件的国际化。有人可以提供任何指导或建议吗?
这是我的项目配置的总结:
在项目设置中,我包括:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
...
)
LANGUAGES = (
('es', _('Spanish')),
('en', _('English')),
)
LOCALE_PATHS = (
os.path.join(BASE_DIR,'locale'),
os.path.join(BASE_DIR,'metrics/'),
)
USE_I18N = True
USE_L10N = True
与 js 静态文件有关的djangojs.po和.mo文件位于我的根目录中的 locale 文件夹中,而django.po和.molocale/es/LC_MESSAGES
文件位于我的应用程序中的文件夹中。我从适当的目录和两者都运行django-admin.py makemessages -l es
和运行(即使这可能是多余的......)。请注意,.po 文件没有 FUZZY 标记。django-admin.py makemessages -d djangojs -l es
django-admin.py compilemessages
在项目的 url.py 文件中,我包括:
js_info_dict = {
'packages': ('metrics',),
}
urlpatterns = patterns('',
url(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),
...
)
也许这部分是错误的,因为我的djangojs.po和.mo文件位于根目录中,但我尝试将它们定位在我的 app 目录中,但它也不起作用。
最后,gettext
在我的静态js文件中使用一个例子(使用d3js):
svg.append("g").append("text")
.attr({"x":0,"y":17})
.style({"text-anchor":"middle","fill":"black"})
.text(gettext('Schedule'));
有什么建议么?对大量的报道感到抱歉,但我正在努力提供尽可能多的信息。