为了使一个PHP 内容管理系统 可扩展,语言翻译至关重要。我正在研究用于翻译系统的编程方法,并且认为Qt Linguist是一个很好的例子。
以下是Qt文档中的使用示例:
Qt使用已知的语言规则来确定“
当我向我的开发团队提出这个例子时,他们发现了一个问题,这会危及基于Qt的
这是一个类似的例子,只是现在出现了严重的问题。
"
我对Qt Linguist没有太多经验,但我还没有看到它如何处理不规则的变位和形式。
更复杂的短语可能是
你可能认为逻辑上的纠正是避免使用这些不规则的单词,因为它们在编程中不常用。 好吧,这种方法在两个方面都没有帮助:
int n = messages.count();
showMessage(tr("%n message(s) saved", "", n));
Qt使用已知的语言规则来确定“
message
”是否在英语中附加了“s
”。当我向我的开发团队提出这个例子时,他们发现了一个问题,这会危及基于Qt的
tr()
函数建模的可扩展性效果。这是一个类似的例子,只是现在出现了严重的问题。
int n = deadBacteria.count();
showMessage(tr("%n bacterium(s) killed", "", n));
"
bacterium
"的复数形式是"bacteria
",不应添加"s
"。我对Qt Linguist没有太多经验,但我还没有看到它如何处理不规则的变位和形式。
更复杂的短语可能是
"%n cactus(s) have grown."
。复数应为"cactii
",如果只有一个仙人掌,则"have
"需要变成"has
"。你可能认为逻辑上的纠正是避免使用这些不规则的单词,因为它们在编程中不常用。 好吧,这种方法在两个方面都没有帮助:
- 也许有一种语言会以不规则的方式修改名词,即使源字符串在英语中有效,例如
"%n message(s) saved"
。在MyImaginaryLanguage中,形成翻译字符串的正确方法可能是对于值为1
、2
和3
的%n
值,分别使用"1Message saved", "M2essage saved"和"Me3ssage saved",而Qt Linguist似乎没有处理这个问题的规则。 - 为了使我的CMS可扩展,所有类型的Web应用程序都需要被纳入考虑。有人可能会构建一个角色扮演游戏,需要构造像"5 cacti have grown."这样的句子。或者安全软件想要说"ClamAV found 2 viruses.",而不是"ClamAV found 2 virus(es)."
在搜索了解是否有其他Qt开发人员解决了这个问题并没有找到任何答案后,我来到了Stack Overflow。
我想知道:
- 应该使用可扩展和有效的编程技术来翻译可能存在不规则规则的字符串。
- 如果Qt程序员和翻译遇到这种不规则性问题,他们会怎么做?
bacteri(a/um)
,(1Message/M2essage/Me3ssage)
是一个需要更多工作并且不太灵活的示例。 - Cyclone