使用 Django i18n 和 gettext 进行单词变形

2024-01-01

目前,我的 Django 项目的模板文件中有以下代码:

{% blocktrans with type=content.get_type %}Edit this {{ type }}{% endblocktrans %}

The {{ type }}是一个字符串,可以具有以下值"lecture" and "exercise"。这是在中的输出.po file:

msgid "Edit this %(type)s"
msgstr ""

这对于英语等不结合对象的语言来说效果很好。对于这样做的语言,例如芬兰语,这会导致问题。

在芬兰语中,名词“lecture”翻译为“luento”,在这种特定情况下所需的分词形式是共轭的“luento”a”。名词“exercise”翻译为“tehtävä”或“harjoitus”,其分词形式为“tehtävää”和“哈吉特斯ta".

例如,有没有办法在这种情况下为单词添加特定的翻译?或者也许有某种基于条件的方式来填充msgstr?

显然以下内容不起作用,因为单词的共轭形式以不同的字符结尾:

msgstr "Muokkaa tätä %(type)sa"

(这会正确地产生“luentoa”,但错误地产生“tehtäväa”。)


GNU's 获取文本手册 https://www.gnu.org/software/gettext/manual/html_node/Preparing-Strings.html建议人们尽可能翻译整个句子:

整个句子也很重要,因为在许多语言中,句子中某些单词的词尾变化取决于句子另一部分的性别或数量(单数/复数)。单词之间的相互依赖性通常比英语中更多。结果是,要求译者翻译两个半句,然后通过愚蠢的字符串连接将这两个半句组合起来,对于许多语言来说是行不通的,尽管它适用于英语。这就是为什么翻译人员需要处理整个句子。

假设你得到了结构"Edit this %(type)s"为芬兰人工作。例如,一旦你想支持法语,它就行不通。对于您提到的类型,您必须使用以下法语句子:

Éditer cette leçon
Éditer cet exercice

(第一句话可能需要翻译为Éditer ce cours。 “leçon”或“cours”中哪个最好取决于英语中的“lecture”在您使用它的上下文中精确指代的内容。)您看到问题了,根据您使用的单词,您可能需要“cet” ”、“cette”或“ce”在您的前面type.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Django i18n 和 gettext 进行单词变形 的相关文章

随机推荐