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

时间:2012-11-07 10:23:12

标签: javascript django

我一直在jsi18n JavaScript中使用空目录。我已经尝试了StackOverflow上的所有解决方案,包括Empty catalog when internationalizing JavaScript code,但目录仍然是空的。

我的设置是:

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),

作为我的网址的一部分。

如果我运行该应用并致电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文件位于语言环境目录中。

任何?

3 个答案:

答案 0 :(得分: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的不同值,直到我发现了我需要的值。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

即如果你的英文版文件中有这个:

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

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

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

然后会有。