我正在翻译一个Django应用程序。我在特定扩展名(.vue文件)的文件中有可翻译字符串,但现在这不是很重要。在
我必须运行makemessages
命令来解析这些字符串并生成.po文件。在
文件上说:
makemessages: Runs over the entire source tree of the current directory and pulls out all strings marked for translation.
另外,docs声明默认文件扩展名为:html, txt, py
,并给出了一个显式定义扩展名的示例:
django-admin makemessages --locale=de --extension=html,txt --extension xml
我的问题是:makemessages
应该如何处理非编译文件,比如txt
和{
我知道如何在模板或.py文件中执行此操作:
gettext("Text to be translated")
# or
_("Text to be translated")
但是其他的扩展呢?.txt,.xml。。。最终.vue?在
如果您希望这些文件的任何内容都是动态的,那么您需要对它们进行某种解析。在
绝对没有理由不能将它们视为Django模板,并通过正常的Django模板呈现过程呈现它们;显然,如果不知道如何处理这些文件,就不可能给出具体的建议,但您可能需要使用
render_to_string
。就其本身而言,这与翻译或生成消息没有任何关系。在makemessages
命令搜索要翻译的文件,并调用^{django
还是djangojs
domain
,它的行为会有所不同。在当使用
django
域时,它通过django.utils.translation.templatize
运行非.py
文件来“将Django模板转换成xgettext
可以理解的东西”)。它基本上将整个文件转换为XXXXX
,lexer确定与gettext
相关的部分除外,这样可以保持行号不变,等等因此,对于大多数非Python、非Django模板文件,这将删除您的可翻译内容。在
使用
djangojs
域时,Django不会对文件执行任何此类预处理。(对于gettext
比0.18.3
旧的版本,makemessages
将调用django.utils.jslex.prepare_js_for_gettext
,这有点不那么激进,如果需要,只会调整任何转义/regex语法)。在如果运行} 和一定数量的额外}文件,以支持}对于
makemessages -a -d djangojs -e "js,vue"
,Django将告诉xgettext
使用^{keyword
配置来解析你的.js
和{gettext_noop
,gettext_lazy
等(gettext
默认为_, gettext, dgettext:2, dcgettext:2, ngettext:1,2, dngettext:2,3, pgettext:1c,2, dpgettext:2c,3
的{JavaScript
)。makemessages
还将传递from-code=UTF-8
和add-comments=Translators
参数。在然后由
gettext
根据这些规范进行解析,并根据指定的language
来理解文件。在因此,用}得到什么,这样就可以像JavaScript一样标记字符串了。在
makemessages
翻译.txt
、.xml
等文件的最佳方法是使用djangojs
域,并查看gettext
基于{或者对于Jinja2模板等,您可以使用另一种解决方案,例如Babel's Message Extraction
或者您甚至可以customize ^{} 根据您的需求将不同的参数传递给
gettext
。在对于你的Vue例子。。。在
如果您的
.vue
文件包含在javascript代码部分中对gettext
的调用(默认解析似乎不适用于模板属性中的gettext
调用),您应该发现makemessages
将提取这些字符串进行翻译(并且compilemessages
将在编辑.po
文件后生成所需的二进制文件)。在然后为了在代码运行时查看翻译,您需要使用Django JavaScript Catalog,因此请确保在代码中包含类似
<script type="text/javascript" src="{% url 'javascript-catalog' %}"></script>
的内容,以便gettext
etc函数实际存在。(听起来您已经有了这个,但为了完整起见,还包括在内。)在您的
^{pr2}$.vue
文件中,您可以使用如下内容:字符串应该根据Django翻译机制当前激活的语言规范进行翻译。在
相关问题 更多 >
编程相关推荐