3

背景信息: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 esdjango-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'));

有什么建议么?对大量的报道感到抱歉,但我正在努力提供尽可能多的信息。

4

0 回答 0