我使用的是Python 3.5.2和Django 1.10。
我收到了法语翻译.po文件,可以运行compilemessages命令而不会收到任何错误。
但是,当我运行网站时,许多网页拒绝加载。
我怀疑这是因为法语翻译.po文件在翻译字符串中包含许多单引号(')。
例如,
#: .\core\constants\address_country_style_types.py:274
msgid "Ascension Island"
msgstr "Île de l'Ascension"
我记得在某个地方(但无法在任何地方找到该引用)阅读单引号必须在它们之前有正斜杠或反斜杠。所以我尝试了,但是当我运行compilemessage命令时,我收到一条错误消息:
C:\Users\me\desktop\myapp\myapp\locale\fr\LC_MESSAGES\django.po:423:18: invalid control sequence
那么如何在字符串问题中逃避法国单引号?
这是我的法语.po文件的标题:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-04 12:55+1000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
答案 0 :(得分:1)
我不确定这个问题的原因是什么(也许译者以某种方式破坏了文件?)。
但是,解决方法是使用标准单引号'
,而不是使用标准单引号(取自MS Word中的符号):
′
我还没有和法语翻译一起查看,但它看起来很好用。
我希望这有助于某人。
答案 1 :(得分:1)
正确的方法是“转义”单引号,但是,您需要知道使用文本的端点。就像您发现反斜杠一样,如下所示: 升天
相信我,法国人谁也不想看到反引号。从视觉上看,回到90年代的DOS时代,几乎没有什么不同。现在有了字体,它变得难看。
由于是为网络制作的,因此请使用HTML替换,例如“
查看这篇文章: Why shouldn't `'` be used to escape single quotes?
答案 2 :(得分:0)
我说法语,我的大多数用户也是如此。
很烦人的bug。
普通的 Django 转义技术(通过 \'
或 format_html(my_translated_string)
)对我也不起作用。
我使用了 ′
而不是 '
并且它工作正常 - compilemessage 命令工作并且 html 节点工作正常。
然而它不是很优雅或健壮,因为任何未来的消息都需要考虑到这一点,并且使用字符 ´
我发现了另一个更好更强大的解决方案: 通过模板过滤器转义。
在 html 模板中:
<h5 class="modal-title">{{help_message_body|escape}}</h5>
在 JavaScript 中:
modal.find('.modal-message').html('<h5 class="modal-title">{{help_message_body|escapejs}}</h5>')