我可以使用ASP.NET资源/本地化翻译字符串以一个简单的方式依赖于一个或另一个(英语语法),就像我在翻译中通过了第1个号码,它返回“你有一辆车”或0,2和更高,“你有%n车”?
或者我被迫在我看来有逻辑看看是单数还是复数?
解决方法
JasonTrue写道:
To the best of my knowledge,there isn't a language that requires something more complicated than singular/plural
这样的语言确实存在。例如,在我的母语波兰语中,有三种形式:1,2-4,零和数字大于4.然后在达到20后,21,22-24和25的形式再次不同(相同数学形式如数字0-9)。是的,“你有0件事情”听起来很尴尬,因为你不太可能看到现实生活中使用的东西。
作为本地化专家,这里是我建议的:
如果可能的话,使用最后的数字表格:
a: Number of cars: %d
这意味着名词“car”的形式不取决于数字,0与其他数字一样自然。
如果上述是不可接受的,至少总是使一个完整的句子是一个可翻译的资源。也就是说,使用
b: You have 1 car. c: You have %d cars.
但是从来没有将这样的单元分割成较小的片段,例如
d: You have e: car(s)
(然后在别的地方你有一个不可本地化的资源作为“%s%d%s”)
不同的是,虽然我不能直接翻译(c),因为名词的形式会改变,我可以看到问题,我可以在句子中改变形式(a)。
另一方面,当我面对(d)和(e)碎片时,没有办法确保所得到的句子将是语法的。再次:使用片段保证在某些语言中,翻译将是从语法尴尬到完全破坏的任何东西。
这完全适用于数字,而不仅仅是数字。例如,诸如“%s被删除”的片段也是不可译的,因为动词的形式将取决于名词的性别,这在这里是不可用的。对波兰语来说,最好的是相当于“删除:%s”,但只要%s占位符包含在可翻译资源中,我只能做到这一点。如果我所有的都被删除了,没有线索的指称名词,我只能通过大声诅咒我的狗,最后我还要生产垃圾语法。