鉴于动态构建的短语是根据参数显示或删除的部分,支持本地化的一些可能的解决方案是什么?例如,请考虑以下两个带有粗体部分的短语,这些部分表示动态插入的部分:
对于英语,这可以通过简单地连接短语部分或者可以在资源文件中具有一些可以基于参数选择的令牌填充字符串来解决。但是,一旦您需要本地化其他语言或拥有更多参数,这些解决方案将无法正常工作或变得难看。在上面的示例中,假设狗外观是唯一始终存在的部分,本地化资源实现可能包含以下资源字符串:
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%.
虽然这有效,但所需的字符串数量会根据参数的数量呈指数级增长。
一直在寻找可以帮助我应对这一挑战的最佳实践。我找到找到的唯一解决方案就是简单地改写短语 - 但是你失去了自然句子结构,我真的不想这样做:
建议,链接,想法,例子,或者“你疯了,只是改写它!”欢迎提供反馈:)谢谢!
答案 0 :(得分:1)
最好的方法可能是将句子分成单独的句子,例如“狗被发现。这只狗有一个狗窝。狗正在追逐一个球。“这可能看起来很无聊,但是如果你要替换除了第一个之外的所有”狗“,你就会有一个严重的代名词问题。在许多语言中,要使用的代词将取决于它所指的名词。 (即使是英语,也不清楚狗是他,她还是它。)
分离的原因是不同的语言有不同的动词系统。例如,在俄语中,你不能真正将三个句子组合成一个有三个动词共享主语的句子。 (在俄语中,你不要在现在时使用动词“to be” - 相反,你只会说相当于“Dog-spotted”,并且没有动词对应于“to have” - 相反,你使用相当于“at dog doghouse”。芬兰语与“to have”相似。这些问题有时在“强制”本地化中通过使用对应于“拥有”或“拥有”的词来处理,但是结果是奇怪的,温和地说。)
此外,语言对主语,动词和宾语有不同的自然顺序。您的初始方法隐含地假定SVO订单。您不应该假设正常的,未标记的单词顺序始终以主题开头。而不是使用句子模式,如“%subject %% copula %% appearance%(其中%copula%是”是“,”是“或”am“英文),你需要调用一个带有两个参数的函数,subject和外观,返回一个具有语言相关的copula或没有copula的句子,并且具有由语言规则确定的单词顺序。是的,它变得复杂;生成的语句的本地化在你处理时变得相当复杂除了结构非常相似的语言之外的任何东西。