当前位置:  开发笔记 > 后端 > 正文

具有单数和复数的ASP.NET本地化

如何解决《具有单数和复数的ASP.NET本地化》经验,为你挑选了2个好方法。

我是否可以使用ASP.NET资源/本地化以简单的方式将字符串转换为依赖于一个或其他(英语语法),就像我在翻译中传递数字1,它返回"你有一辆车"或0,2和更高,"你有%n辆汽车"?

或者我不得不在我看来有逻辑来看它是单数还是复数?



1> Marek Jedliń..:

JasonTrue写道:

据我所知,没有一种语言需要比单数/复数更复杂的语言

这样的语言确实存在.例如,在我的母语波兰语中,有三种形式: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 was deleted动词的片段也是不可翻译的,因为动词的形式将取决于名词的性别,这在此不可用.我能为波兰语做的最好的事情就是相当于Deleted: %s,但只有%s占位符包含在可翻译资源中我才能做到.如果我所有的都被"删除"而没有任何关于引用名词的线索,我只能通过大声咒骂来吓唬我的狗,最后我还是要产生垃圾语法.


很好的答案!幽默的加分!
在阿拉伯语中,有3种形式:单数,双数和复数

2> Scott Rippey..:

我一直在研究图书馆,以协助应用程序的国际化.它被称为SmartFormat,在GitHub上是开源的.

它包含许多语言的"语法数字"规则,这些规则根据语言环境确定正确的单数/复数形式.翻译具有依赖于数量的单词的短语时,指定多个表单,格式化程序根据这些规则选择正确的表单.

例如:

var message = "There {0:is:are} {0} {0:item:items} remaining.";
var output = Smart.Format(culture, message, items.Count);

它具有非常相似的语法String.Format(...),但具有许多强大的功能,可以轻松创建自然和语法正确的消息.

它还涉及可能的性别特定格式,列表等等.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有