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

dyv*_*yve 7 javascript django

我一直在jsi18n JavaScript中使用空目录.在国际化JavaScript代码时,我已经尝试了StackOverflow上的所有解决方案,包括空目录,但目录仍为空.

我的设置是这样的:

project_dir
- locale
  - nl (contains LC_MESSAGES with django.po and djangojs.po)
- app1
- app2
- main_app
  - settings.py
  - urls.py
  - wsgi.py
Run Code Online (Sandbox Code Playgroud)

在settings.py我有

# Where to find locale
LOCALE_PATHS = (
    os.path.join(SITE_ROOT, 'locale'),
)
Run Code Online (Sandbox Code Playgroud)

SITE_ROOT是我的项目目录的绝对路径,因此转换为

在urls.py我有

# i18n
js_info_dict = {
    'domain': 'djangojs',
    'packages': ('wrnpro', ),
}
Run Code Online (Sandbox Code Playgroud)

    (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),
Run Code Online (Sandbox Code Playgroud)

作为我的网址的一部分.

如果我运行应用程序并打电话给http://localhost:8000/jsi18n/

/* gettext library */
var catalog = new Array();
function pluralidx(count) { return (count == 1) ? 0 : 1; }
… 
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了各种设置等变化,我可以找到,但目录仍然是空的.

运行时make messages,compile messages我的JavaScript获取文本字符串被找到并翻译.django.po和.mo文件位于语言环境目录中.

任何人?

Fli*_*imm 5

这最终为我工作:

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

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

还是行不通?故障排除提示

我不知道为什么这有效,但我可以告诉你我是如何找到它的方法.如果您使用相同的故障排除技术,也许您也会找到一种方法.我使用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'),
    ...
]
Run Code Online (Sandbox Code Playgroud)

然后使用PDB,我进入javascript_catalog,直到我到达线:

catalog, plural = get_javascript_catalog(locale, domain, packages)
Run Code Online (Sandbox Code Playgroud)

然后,我用不同的值尝试了domain,并packages在调试器中,在那里,直到我发现我所需要的值.


And*_*ram 2

对于当前用户的语言,您是否有完整的翻译,或者只有存根?该目录将仅包含实际已翻译的字符串的值。

即,如果您的英语 po 文件中有此内容:

#: static/js/events.js:159
msgid "Open side panel"
msgstr ""
Run Code Online (Sandbox Code Playgroud)

目录中不会出现任何内容(如果您以英语访问它)。但如果你有这个:

#: static/js/events.js:159
msgid "Open side panel"
msgstr "Open side panel"
Run Code Online (Sandbox Code Playgroud)

那么就会有。