用不规则规则翻译成语言

Del*_*tik 6 php qt translation internationalization

为了使PHP 内容管理系统具有 可扩展性,语言翻译至关重要.我正在研究翻译系统的编程方法,我认为Qt Linguist就是一个很好的例子.

这是Qt文档中的示例用法:

int n = messages.count();
showMessage(tr("%n message(s) saved", "", n));
Run Code Online (Sandbox Code Playgroud)

Qt使用已知的语言规则来确定" message" 是否s在英语中附加了" ".

当我将这个例子提交给我的开发团队时,他们发现了一个危及 Qt tr()功能建模的可扩展性的问题.

这是一个类似的例子,除了现在出现严重错误.

int n = deadBacteria.count();
showMessage(tr("%n bacterium(s) killed", "", n));
Run Code Online (Sandbox Code Playgroud)

复数" bacterium"是" bacteria".附加" s" 是不恰当的.

我对Qt Linguist没有多少经验,但我还没有看到它如何处理不规则的变形和形式.

一个更复杂的短语可能是"%n cactus(s) have grown.".复数应该是" cactii",如果有一个仙人掌," have"需要与" "结合has.

您可能认为逻辑校正是为了避免这些不规则的单词,因为它们不用于编程.嗯,这在两个方面没有帮助:

  1. 也许有一种语言以不规则的方式修改名词,即使源字符串以英语运行,如"%n message(s) saved".在MyImaginaryLanguage,正确的方式来形成转换后的字符串可能是" 1Message保存 "," M2essage保存 "," Me3ssage保存 "的%n价值观1,23分别,它看起来并不像Qt语言有规则来处理这个问题.
  2. 为了使CMS可扩展,就像我需要的那样,需要考虑所有类型的Web应用程序.有人可能会构建一个角色扮演游戏,需要构建像" 5仙人掌已经成长 "的句子.或者可能是一个安全软件我想说," ClamAV发现了2种病毒. "而不是" ClamAV发现2种病毒 ".

在线搜索以查看其他Qt开发人员是否有解决此问题但未找到任何问题的解决方案之后,我来到Stack Overflow.

我想知道:

  1. 应该使用什么可扩展和有效的编程技术来翻译可能不规则的字符串?
  2. 如果Qt程序员和翻译人员遇到这种不规则问题会怎么做?

Sam*_*mer 6

你误解了Qt的多元化是如何工作的:它不是一个自动翻译.

基本上你有一个默认字符串,例如"%n cactus(s)已经增长".在你的代码中,这是一个文字.你可以放任何你喜欢的东西,例如"dingbat wibble foo%n bar".

然后,您可以定义翻译语言(包括与您编写源字符串的语言相同的语言).

语言学家编写了语言如何处理某些东西的各种规则.在英语中它只是单数或复数; 但是如果一种语言具有零或其他的特定形式,那么它就会出现在语言学家中.然后,它允许您在目标翻译语言中输入正确的句子,并且它处理将%n您应该以翻译形式放入的位置.

因此,无论谁在语言学家中进行翻译都将提供来源,例如,必须填写单数和复数.

来源文字: %n cactus(s) have grown.

英文翻译(Singular): %n cactus has grown.

英语翻译(Plural): %n cacti have grown.

如果应用程序找不到已安装的翻译,则它会回退到源文字.此外,源文字是翻译人员所看到的内容,因此必须从中推断出您的意思.因此,在描述有多少仙人掌成长时,"dingbat wibble foo%n bar"可能不是一个好主意.

进一步阅读: