Django French Translation - 如何处理翻译字符串中的单引号?
Django French Translation - how to handle single quotes in translation strings?
我正在使用 Python 3.5.2 和 Django 1.10。
我收到了法语 t运行slation .po 文件,可以 运行 compilemessages 命令而不会收到任何错误。
但是,当我运行这个网站时,很多页面都拒绝加载。
我怀疑这是因为法语 t运行slation .po 文件在 t运行slation 字符串中包含许多单引号 (')。
例如,
#: .\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 文件的 header:
# 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"
我不确定这个问题的原因是什么(也许是翻译器以某种方式损坏了文件?)。
但是,解决方法是不使用标准单引号 '
,我使用了这个单引号(取自 MS Word 中的符号):
′
我还没有与法语翻译人员核对过,但它看起来和工作正常。
我希望这对某人有所帮助。
正确的方法是"Escape"单引号,但是,您需要知道使用文本的端点。就像您发现反斜杠一样,例如:
L\'阿森松岛
相信我,法国人不会喜欢看到反引号。回到 90 年代的 DOS 时代,视觉上几乎没有区别。现在有了字体,它变得丑陋了。
由于您是为网络制作的,因此请使用 HTML 替换,例如 '
查看这篇文章:
Why shouldn't `'` be used to escape single quotes?
我讲法语,我的大多数用户也是。
非常烦人的错误。
正常的 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>')
解决方法是
#: .\core\constants\address_country_style_types.py:274
msgid "Ascension Island"
msgstr "Ile de l‘Ascension"
它有效,即使它会在某些 JavaScript 中使用。不要使用数字代码 '
,它在表单字段中不起作用,它不会被渲染,你会看到丑陋的数字。我已经测试了所有这些。
正如我在评论中所说,不建议以大写重音字母开头单词。如果您输入 Île 然后对国家/地区列表进行排序,则 Ç 字符将出现在 Z 之后,并且不会像您期望的那样按照自然顺序进行排序。
这是 Python 排序功能的另一个问题。它只会根据每个字母的编码数字跟随扩展的ASCII码。而 Ç 的 ANSI 代码为 206,它位于 Z 之后,即 90。
也许Python对此提供了解决方案,但我还没有找到。如果有人找到它,我会很高兴知道。
我正在使用 Python 3.5.2 和 Django 1.10。
我收到了法语 t运行slation .po 文件,可以 运行 compilemessages 命令而不会收到任何错误。
但是,当我运行这个网站时,很多页面都拒绝加载。
我怀疑这是因为法语 t运行slation .po 文件在 t运行slation 字符串中包含许多单引号 (')。
例如,
#: .\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 文件的 header:
# 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"
我不确定这个问题的原因是什么(也许是翻译器以某种方式损坏了文件?)。
但是,解决方法是不使用标准单引号 '
,我使用了这个单引号(取自 MS Word 中的符号):
′
我还没有与法语翻译人员核对过,但它看起来和工作正常。
我希望这对某人有所帮助。
正确的方法是"Escape"单引号,但是,您需要知道使用文本的端点。就像您发现反斜杠一样,例如: L\'阿森松岛
相信我,法国人不会喜欢看到反引号。回到 90 年代的 DOS 时代,视觉上几乎没有区别。现在有了字体,它变得丑陋了。
由于您是为网络制作的,因此请使用 HTML 替换,例如 '
查看这篇文章: Why shouldn't `'` be used to escape single quotes?
我讲法语,我的大多数用户也是。
非常烦人的错误。
正常的 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>')
解决方法是
#: .\core\constants\address_country_style_types.py:274
msgid "Ascension Island"
msgstr "Ile de l‘Ascension"
它有效,即使它会在某些 JavaScript 中使用。不要使用数字代码 '
,它在表单字段中不起作用,它不会被渲染,你会看到丑陋的数字。我已经测试了所有这些。
正如我在评论中所说,不建议以大写重音字母开头单词。如果您输入 Île 然后对国家/地区列表进行排序,则 Ç 字符将出现在 Z 之后,并且不会像您期望的那样按照自然顺序进行排序。
这是 Python 排序功能的另一个问题。它只会根据每个字母的编码数字跟随扩展的ASCII码。而 Ç 的 ANSI 代码为 206,它位于 Z 之后,即 90。
也许Python对此提供了解决方案,但我还没有找到。如果有人找到它,我会很高兴知道。