首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >单数和复数ASP.NET本地化

单数和复数ASP.NET本地化
EN

Stack Overflow用户
提问于 2008-12-17 22:57:47
回答 4查看 5.2K关注 0票数 19

我可以使用ASP.NET资源/本地化以一种简单的方式将字符串转换为依赖于一个或另一个(英语语法)吗,就像我在翻译中传递数字1一样,它返回"You have one car“,或者使用0、2或更高的值,"You have %n cars"?

或者我不得不在我的观点中有逻辑,看看它是单数还是复数?

EN

回答 4

Stack Overflow用户

发布于 2009-08-23 19:30:14

moodforaday写道:

这适用于所有人,而不仅仅是数字。例如,诸如"%s was deleted“之类的片段也是不可翻译的,因为动词的形式将取决于名词的性别,而这在这里是不可用的。对于波兰语,我能做的最好的事情就是"Deleted:%s",但我只能这样做,只要%s占位符包含在可翻译的资源中。如果我所拥有的只有“已被删除”而没有关于所指名词的线索,我只能通过大声咒骂来惊吓我的狗,最后我仍然不得不产生垃圾语法。

我想在这里指出的一点是,永远不要将名词作为参数。许多欧洲语言根据其性别来修饰名词,在德语中,无论它是主语、宾语还是间接宾语。只需使用单独的消息。请为每种类型使用单独的转换字符串,而不是"%s已删除“。“用户已被删除。”等。

这样,每个字符串都可以被正确地翻译。

在这里可以找到处理不同语言复数形式的解决方案:http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html

虽然您不能在商业应用程序中使用上述软件(它包含在GPL中),但您可以使用相同的概念。它们的复数形式表达式与.NET中的lambda表达式非常适合。复数形式表达式的数量有限,涵盖了大量语言。您可以将特定的语言映射到lambda表达式,该表达式根据语言计算要使用的复数形式。然后,在.NET resx文件中查找适当的复数形式。

票数 3
EN

Stack Overflow用户

发布于 2008-12-17 23:32:41

AFAIK,框架中没有内置的东西可以做到这一点。

以下是该问题的一个通用解决方案的示例:

http://dotnetperls.com/plural

票数 1
EN

Stack Overflow用户

发布于 2021-11-18 11:43:33

这在.NET中仍然是不可能的。但这是一个众所周知的问题,gettext已经解决了这个问题。它具有对许多技术本机支持,甚至包括C#支持。但是看起来现在在.NET中有了现代的重新实现:https://github.com/VitaliiTsilnyk/NGettext

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/376369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档