Django makemessages无法处理JS文件

5

My setup

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吗?


你想要翻译的.js文件位于哪里? - Burhan Khalid
它们都在默认的Django设置提供的static/js文件夹中,并且在通过collectstatic声明的STATIC_ROOT变量所在的文件夹中。 - Eduard Luca
4个回答

1

Django的makemessages仅会从在TEMPLATE_DIRS中的文件中提取信息。因此,您想要翻译的任何文件都需要位于这些目录之一。

您可以通过以下几种方式实现:

  • 将*.js文件原封不动地放置在TEMPLATE_DIRS
  • 将JS代码嵌入到HTML文件中
  • 将所有需要翻译的字符串放置在DOM元素的数据属性中,并通过JS从DOM中获取它们

是的,模板正在工作,但您的解决方案不可行,因为它会在应用程序的这一点上创建巨大的开销。 - Eduard Luca
另一个(更混乱)的选项是在HTML文件中嵌入JS。 - Rebecca Meritz
我认为只有在你的设置文件中设置的TEMPLATE_DIRS中查找才能进行翻译。因此,如果你想要将你的js文件翻译,它们需要在TEMPLATE_DIRS中的一个文件中。 - Rebecca Meritz
你说得完全正确。我尝试将其中一个JS文件移动到模板目录中,它起作用了。你是否知道如何设置它来查找我的静态文件夹? - Eduard Luca
1
另外,如果您能在答案中编辑评论中提到的信息(关于TEMPLATE_DIRS),我将非常乐意接受并授予悬赏。 - Eduard Luca

0

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

  1. 不行。就我所知,Django 只会在当前目录中查找(无论你从哪里运行 django-admin.pymanage.py),这并不理想。我不能在更高的一级目录中运行该命令,因为那里有我的虚拟环境和许多其他东西。
  2. 是的。
  3. 我正在使用 gettext,因为文档中的示例就是这样做的。如果我从我的 JS 目录运行 manage.py,它可以正常工作。
- Eduard Luca

0
当我使用Django i18n时,遇到了同样的问题,经过多次尝试,我终于得到了正确的答案:我们需要将.js文件放入项目目录中,这在我们分配'js_info_dict'时指定。
但通常我们将JavaScript文件放在与项目相同级别的目录中,所以就会出现问题。(我们不需要将JavaScript文件放入模板目录中)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接