我一直在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 messages
和compile messages
我的JavaScript后,会找到并翻译文本字符串。 django.po和.mo文件位于语言环境目录中。
任何?
答案 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)
然后我在调试器中尝试了domain
和packages
的不同值,直到我发现了我需要的值。
答案 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"
然后会有。