我一直在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文件位于语言环境目录中.
任何人?
这最终为我工作:
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在调试器中,在那里,直到我发现我所需要的值.
对于当前用户的语言,您是否有完整的翻译,或者只有存根?该目录将仅包含实际已翻译的字符串的值。
即,如果您的英语 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)
那么就会有。