Django法语翻译 - 如何处理翻译字符串中的单引号?

时间:2017-05-04 07:01:59

标签: python django translation language-translation

我使用的是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"

3 个答案:

答案 0 :(得分:1)

我不确定这个问题的原因是什么(也许译者以某种方式破坏了文件?)。

但是,解决方法是使用标准单引号',而不是使用标准单引号(取自MS Word中的符号):

我还没有和法语翻译一起查看,但它看起来很好用。

我希望这有助于某人。

答案 1 :(得分:1)

正确的方法是“转义”单引号,但是,您需要知道使用文本的端点。就像您发现反斜杠一样,如下所示: 升天

相信我,法国人谁也不想看到反引号。从视觉上看,回到90年代的DOS时代,几乎没有什么不同。现在有了字体,它变得难看。

由于是为网络制作的,因此请使用HTML替换,例如“

查看这篇文章: Why shouldn't `&apos;` 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>')