如何在Qt的QTranslator中翻译性别代词

时间:2011-03-16 01:34:48

标签: c++ qt internationalization qt4

我在看一个开源的QT4游戏(http://cockatrice.de),它使用QTranslator进行国际化。但是,每个引用玩家的短语都使用男性代名词(“他的手”,“他的套牌”,“他做的就是这样”等)。

我首先考虑解决这个问题,就是用一个设置为正确性别代词的变量替换“他”或“他”的每个实例,但我不知道这会对翻译产生什么影响。但是对于翻译/国际化,这可能会破裂,特别是如果代词的性别影响其他短语。

之前有没有其他人解决过这类问题?是否有可能在至少简单的语言(如英语,在这种情况下)中分离出代词和短语?翻译文件是否必须包含每个性别代词的每个短语的副本? (至少翻倍翻译文件的大小)?

来自当前设置方式的一些示例代码:

呼叫来源:

case CaseNominative: return hisOwn ? tr("his hand", "nominative") : tr("%1's hand", "nominative").arg(ownerName);
case CaseGenitive: return hisOwn ? tr("of his hand", "genitive") : tr("of %1's hand", "genitive").arg(ownerName);
case CaseAccusative: return hisOwn ? tr("his hand", "accusative") : tr("%1's hand", "accusative").arg(ownerName);

英文翻译文件:

  <message>
    <location filename="../src/cardzone.cpp" line="51"/>
    <source>his hand</source>
    <comment>nominative</comment>
    <translation type="unfinished"></translation>
</message>

1 个答案:

答案 0 :(得分:1)

也许分裂:

tr("his hand")

成:

tr("his").append("hand")

然后单独翻译“他的”,“她的”,“它的”...... 但是像意大利语这样的语言会有一些问题,那里有个人后缀......

替代:

tr("his hand");
tr("her hand");
//...

并将它们全部翻译。

编辑:显示的第二个替代方案也用于许多其他游戏(如oolite,...),因为它是确保在其他游戏中没有问题(如后缀而不是前缀...)的唯一方法语言。

顺便说一句Konami或Nintendo在他们意识到你正在创造一个开源的Yu-Gi-Oh!/ Pokemon游戏场时会说些什么?没有人会买他们的卡:-P