Django JavaScript翻译空目录(i18n/jsi18n)

8
我在jsi18n JavaScript中一直遇到空目录的问题。我尝试了StackOverflow上的所有解决方案,包括国际化JavaScript代码时目录为空,但目录仍然为空。
我的设置如下:
project_dir
- locale
  - nl (contains LC_MESSAGES with django.po and djangojs.po)
- app1
- app2
- main_app
  - settings.py
  - urls.py
  - wsgi.py

在settings.py文件中,我有以下代码:
# Where to find locale
LOCALE_PATHS = (
    os.path.join(SITE_ROOT, 'locale'),
)

SITE_ROOT是我的项目目录的绝对路径,因此可以这样翻译:
在urls.py中我有:
# i18n
js_info_dict = {
    'domain': 'djangojs',
    'packages': ('wrnpro', ),
}

并且

    (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),

作为我的URL的一部分。
如果我运行应用程序并调用http://localhost:8000/jsi18n/,我会得到:
/* gettext library */
var catalog = new Array();
function pluralidx(count) { return (count == 1) ? 0 : 1; }
… 

到目前为止,我尝试了所有可能的设置等方式,但目录仍然为空。

运行 make messagescompile messages 后,我的 JavaScript 文本字符串被找到并翻译了。django.po 和 .mo 文件位于 locale 目录中。

有人知道怎么解决吗?


没有任何建议似乎起作用。我放下了它一周左右的时间,安装了几乎所有的更新,当我在星期五的早上坐下来终于解决这个问题时,它就自己解决了。完全惊讶的是,我发现JavaScript翻译现在可以工作了,并且自从那时以来一直都在工作。我不知道是什么触发了这个问题。我的locale目录仍然在项目级别上。 - dyve
3个回答

5

以下是最终适用于我的解决方案:

js_info_dict = {
   'domain': 'django',
   'packages': None,
}

urlpatterns = [
    url(r'^jsi18n/$', javascript_catalog, js_info_dict, name='javascript-catalog'),
    # ...
]

仍然不工作?故障排除提示:

我不确定为什么这样可以解决问题,但我可以告诉你我是如何找到解决方法的。如果你使用同样的故障排除技巧,也许你会找到解决方法。我使用了Python调试器,像这样:

def javascript_catalog_pdb(*args, **kwargs):
    import pdb
    pdb.set_trace()
    return javascript_catalog(*args, **kwargs)

url_patterns = [
    url(r'^jsi18n/$', javascript_catalog_pdb, js_info_dict, name='javascript-catalog'),
    ...
]

然后使用PDB,我进入了javascript_catalog,直到我找到这一行:
catalog, plural = get_javascript_catalog(locale, domain, packages)

然后我在调试器中尝试了不同的domainpackages值,直到我发现所需的值。


3

我曾经遇到过同样的问题,当我将我的locale目录从项目文件夹移动到应用程序文件夹时,它就可以工作了,因此似乎需要在应用程序级别运行makemessages。 我认为你不需要在设置文件中使用LOCALE_PATHS


2

对于您当前用户的语言,您是否有任何已完成的翻译,还是只有存根?目录仅包含实际翻译过的字符串值。

例如,如果您在英文po文件中有这个:

#: static/js/events.js:159
msgid "Open side panel"
msgstr ""

如果您使用英语访问目录,则不会显示任何内容。但是,如果您拥有以下内容:
#: static/js/events.js:159
msgid "Open side panel"
msgstr "Open side panel"

那么就会有。

我在Django和Djanojs目录中都有100%的翻译,我从英语(en)翻译成荷兰语(nl)。 - dyve

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