Django makemessages不适用于JS文件

时间:2014-09-29 08:52:36

标签: django internationalization

我的设置

settings.py

INSTALLED_APPS = (
    ...
    'myprojectname',
    ...
)

STATIC_ROOT = '/var/www/a_valid_path/'

LOCALE_PATHS = (
    os.path.join(BASE_DIR, "locale"),
)

urls.py

js_info_dict = {
    'domain': 'djangojs',
    'packages': ('myprojectname',),
}

urlpatterns = patterns('',
    ...
    url(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),
    ...
)

我的项目结构如下:

|- projectname
|--- app1
|--- app2
|--- manage.py
|- virtualenv
|- static
|--- js
|--- css

我的项目的根文件夹中也有locale文件夹,manage.py位于该文件夹中。

我正在做什么

简单地运行:

./manage.py -l ro -d djangojs

我的问题

它不起作用。没有生成.po个文件。但是,服务器端转换工作(视图+模板)。我遵循了所有的建议,但仍然没有。甚至试图自己创建djangojs.po文件,看看Django是删除它还是用它做了什么 - 不行。

没有错误产生,只显示processing locale ro(如果你问我的话,时间太短 - 太短了),就是这样。有什么帮助吗?

编辑:忘记提及我的包含JS文件的文件夹不在每个Django应用程序中,而是在一个单独的位置。不过,Django不应该看看STATICFILES_DIRS吗?

4 个答案:

答案 0 :(得分:1)

Django的makemessages只会根据TEMPLATE_DIRS中的某个文件发送消息。因此,您要翻译的任何文件都必须位于其中一个目录中。

您可以通过以下几种方式实现这一目标:

  • 将* .js文件按原样放置在TEMPLATE_DIRS之一
  • 将您的JS嵌入html文件
  • 将需要翻译的所有字符串放在dom上的数据属性中,并通过JS从dom中获取它们

答案 1 :(得分:0)

  1. 您是否正在从包含JavaScript文件的目录中运行makemessages
  2. 您的JavaScript文件名是否以.js
  3. 结尾
  4. 您是使用django.gettext('string')还是_('string')标记需要翻译的字符串?

答案 2 :(得分:0)

我经历过同样的问题。我发现这个问题是在Django门票#23717中报告的:https://code.djangoproject.com/ticket/23717

修正版即将推出稳定的1.7.2版本:https://docs.djangoproject.com/en/1.7/releases/1.7.2/

我已安装1.7.2并确认问题已修复。

答案 3 :(得分:0)

使用Django i18n时,我遇到了同样的问题,经过多次尝试,我终于得到了正确的答案:我们需要将.js文件放入项目目录中,该目录是在分配'js_info_dict'时指定的。 br /> 但是通常我们将JavaScript文件与项目放在同一级别的目录中,因此存在问题。 (我们不需要将JavaScript文件放入模板目录中。)