1

给定一个基于参数动态构建的短语,其中存在或删除部分,有哪些可能的支持本地化的解决方案?例如,考虑以下两个带有粗体部分的短语,表示动态插入的部分:

  • 狗被发现了,有一个狗窝,正在追球
  • 那条狗是白色的,正在绕圈子跑

对于英语,这可以通过简单地连接短语部分来解决,或者可能在资源文件中包含一些可以根据参数选择的标记填充字符串。但是,一旦您需要针对其他语言进行本地化或拥有更多参数,这些解决方案将无法工作或很快变得丑陋。在上面的示例中,假设狗的外观是唯一始终存在的部分,则本地化资源实现可能包含以下资源字符串:

 AppearanceOnly:    The dog is %appearance%.
 ActivityOnly:      The dog is %appearance% and is %activity%.
 AssessoryOnly:     The dog is %appearance% and has %accessory%.
 AccessoryActivity: The dog is %appearance%, has %accessory% and is %activity%.

虽然这可行,但所需的字符串数量会根据参数的数量呈指数增长。

一直在广泛寻找可能有助于我应对这一挑战的最佳实践。找到的唯一解决方案是简单地改写短语——但你会失去自然的句子结构,我真的不想这样做:

  • 狗:斑点狗窝追球

建议、链接、想法、示例或“你疯了,改写它!” 欢迎反馈:) 谢谢!

4

1 回答 1

1

最好的方法可能是将句子分成单独的句子,例如“The dog is spot”。这只狗有一个狗窝。狗在追球。” 这可能看起来很无聊,但如果你要替换除第一个之外的所有出现的“狗”,你就有一个严重的代词问题。在许多语言中,要使用的代词取决于它所指的名词。(即使在英语中,也不清楚狗是他、她还是它。)

分开的原因是不同的语言有不同的动词系统。例如,在俄语中,您不能真正将三个句子组合成一个句子,其中三个动词共享一个主语。(在俄语中,你不使用现在时的动词“to be”——相反,你只会说“Dog – spot”的等价物,并且没有对应于“to have”的动词——相反,你使用相当于“at dog doghouse”。芬兰语与“to have”类似。在“强制”本地化中,有时会使用对应于“拥有”或“拥有”的词来处理此类问题,但委婉地说,结果看起来很奇怪。)

此外,语言对主语、动词和宾语有不同的自然顺序。您最初的方法隐含地假设了 SVO 订单。您不应该假设正常的、未标记的词序总是以主题开头。而不是使用像“%subject% %copula% %appearance%”这样的句子模式(其中 %copula% 是英语中的“is”、“are”或“am”),您需要调用一个带有两个参数的函数,subject和外观,返回一个句子,它有一个依赖于语言的系词,或者没有系词,并且有一个由语言规则决定的词序。是的,它变得复杂;一旦你处理,生成语句的本地化变得相当复杂除了结构上非常相似的语言之外的任何东西。

于 2012-08-14T09:03:16.877 回答