为了使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.
您可能认为逻辑校正是为了避免这些不规则的单词,因为它们不用于编程.嗯,这在两个方面没有帮助:
"%n message(s) saved".在MyImaginaryLanguage,正确的方式来形成转换后的字符串可能是" 1Message保存 "," M2essage保存 "," Me3ssage保存 "的%n价值观1, …