目前我在尝试翻译Django的javascript文件时遇到此问题。我在urls.py中有url(r'^jsi18n/$', javascript_catalog, js_info_dict, name='javascript-catalog'),
并在模板中获取该值。这似乎不是翻译的问题,当我运行django-admin.py makemessages
命令时,它会抛出一些错误,我不知道为什么。
$ django-admin.py makemessages -d djangojs -l nl_NL --keep-pot
CommandError: errors happened while running msguniq
/Users/../../src/locale/djangojs.pot:120: context separator <EOT> within string
/Users/../../src/locale/djangojs.pot:121: context separator <EOT> within string
msguniq: found 2 fatal errors
这是我在djangojs.pot
文件
#: static/jsi18n/djangojs.js:38 static/jsi18n/djangojs.js:46
#: static/jsi18n/nl/djangojs.js:84 static/jsi18n/nl/djangojs.js:92
msgid " "
msgid_plural ""
msgstr[0] ""
msgstr[1] ""
当我用空字符串删除这些行并再次运行命令时,它会在命令运行后再次添加它们。以前有人遇到过这个问题吗?
答案 0 :(得分:0)
我通过从\x04
文件中删除djangojs.js
字符串来修复此问题,并在那里留下一个空字符串。这不是一个很好的解决方案,但它似乎对我有用。我在这张票https://code.djangoproject.com/ticket/17008中读到了一些关于这个问题的内容。好像它无法在javascript文件中逃避这一点。
./static/jsi18n/djangojs.js:90: warning: Empty msgid. It is reserved by GNU gettext:
gettext("") returns the header entry with
meta information, not the empty string.
这是我得到的警告,但是现在这似乎解决了翻译问题。
答案 1 :(得分:0)
错误说明
在此情况下,它为所有受支持的语言和每种语言创建了 djangojs.js 文件,例如 static / js / i18n / nl_NL / djangojs.js 文件,这些文件中包含'\ x04'字符串
因此,当您运行此命令时
django-admin.py makemessages -d djangojs -l nl_NL
它将这些djangojs.js文件视为有效的源代码,用于为i18n提取其中的字符串,因此它将这些'\ x04'字符串并创建一个msgid在 .po 文件中创建该条目,然后在 .pot 文件中创建该条目
msgid "^D"
msgstr ""
^ D 是一个<EOT>
字符,这就是django在出现以下错误时所说的话
djangojs.pot:120: context separator <EOT> within string
因此,无论哪里出现此错误,您的命令都将在此处退出而不完成。修复后,您需要重新运行此命令以完全执行它。
解决方案
您需要执行以下操作
因此,要解决此问题,您需要忽略这些文件,并且不考虑在i18n(国际化)中使用这些文件,只需在下面的makemessages命令中添加--ignore
关键字
django-admin makemessages --locale=$bn --domain=djangojs --ignore=static/js/i18n/*
它将解决您的错误。 :)