0

我正在使用 python 2.7 和 django 1.7。

当我使用Google Translator Toolkit将我的 .po 文件机器翻译成另一种语言(英语到德语)时,由于在我的翻译标签中使用了不同的 django 模板变量,会出现很多错误。

我知道机器翻译不是很好,但我只想在我的测试页面上测试我的翻译字符串。

以下是从英语 (en) 翻译成德语 (de) 的机器翻译 .po 文件的典型错误示例。

#. Translators: {{ site_name_lowercase }} is a variable that does not require translation.
#: .\templates\users\reset_password_email_html.txt:47
#: .\templates\users\reset_password_email_txt.txt:18
#, python-format
msgid ""
"Once you've returned to %(site_name_lowercase)s.com, we will give you "
"instructions to reset your password."
msgstr "Sobald du mit% (site_name_lowercase) s.com zurückgegeben haben, geben wir Ihnen Anweisungen, um Ihr Passwort zurückzusetzen."

如上所示,它被机器翻译成并经常连接到前面的单词%(site_name_lowercase)s% (site_name_lowercase) s

我有数百个此类错误,我估计查找和替换至少需要 7 个小时。另外,如果我制作消息然后再次翻译 .po 文件,我将不得不再次进行查找和替换。

我希望谷歌翻译工具包中有某种类型的未记录规则允许机器翻译忽略变量。我已经阅读了Google Translator Toolkit文档并搜索了 SO & Google,但没有找到任何可以帮助我的东西。

有没有人有什么建议?

4

1 回答 1

3

%(site_name_lowercase)s 被机器翻译为 % (site_name_lowercase) s,并且通常连接到前面的单词,如上所示。

这是由于翻译前的标记化,然后是翻译后的去标记化,即谷歌翻译尝试在翻译前拆分输入以在翻译后重新合并。您使用的变量通常由标记器用来检测标记边界的字符组成。为避免此类问题,您可以预处理文件并用不存在此问题的占位符替换有问题的变量 - 我建议您尝试一些事情,例如_VAR_PLACE_HOLDER_。重要的是不要使用任何可能导致分词器分裂的标点符号。预处理后,翻译新生成的文件并通过将占位符替换为其原始值进行后处理。通常,您的占位符将作为词汇外 (OOV) 项目被拾取,并将在翻译过程中保留。尝试包含一个序列号(以便在后处理期间跟踪您的占位符),因为可能会发生单词重新排序。曾经有一个用于谷歌翻译的科学 API,可以为您提供标记对齐。您也可以将它们用于后处理。

请注意,此过程不会为您提供可能的最佳翻译输出,因为语言模型无法识别占位符。您可以在此处看到说明(使用占位符,标记“gelezen”在错误的位置):

https://translate.google.com/#en/nl/I%20have%20read%20SOME_VARIABLE_1%20some%20time%20ago%0AI%20have%20read%20a%20book%20some%20time%20ago

如果您只想测试系统的变量,而不关心翻译质量,这是最快的方法。

如果您决定寻求更好的解决方案,您可以通过开发自己的机器翻译系统来解决这个问题(顺便说一下,这很有趣,请参阅http://www.statmt.org/moses/)并应用说明的程序上面,但随后使用例如 Part-Of-Speech-Tags 来改进语言模型。请注意,您也可以使用对齐信息。

于 2015-10-29T15:05:00.480 回答