我们正计划为我们的ASP.NET网站添加多语言支持。我了解从基于当前文化的资源文件中抽取字符串的一般过程,但处理以下情况的最佳方法是什么?多语言ASP.NET网站的动态生成语句
比方说,我们想向用户展示他们今天制作了多少堆栈溢出帖子。可以说,i
是职位数。如果你只是用英文工作,你会得到下面的代码。
if(i == 1)
{
postCountText = "You have made " + i + " post today";
} else {
postCountText = "You have made " + i + " posts today";
}
因此,正在创建的文本是基于我们是在处理单数还是复数的帖子。
如果我们想用其他语言创建帖子数文本呢?显然,我们不能像上面那样有很多条件语句,所以资源文件中的字符串需要自动工作来创建所需的输出文本。在另一种语言中,当您在单数和复数之间移动时,它可能不仅仅是post(s)
单词发生变化,也可能是单词today
。
我到目前为止唯一的想法是在外部资源文件中存储两个字符串,一个用于单数,另一个用于复数,然后将String.Format
应用于这些以将帖子数插入正确的位置。
即英语的资源文件将包含以下两个字符串:
singlePostCount : "You have made {0} post today"
pluralPostCount : "You have made {0} posts today"
然后我会在下面的代码来创建输出文本:
if(i == 1)
{
postCountText = String.Format(GetResourceString("singlePostCount"), i);
} else {
postCountText = String.Format(GetResourceString("pluralPostCount"), i);
}
这则允许文本正确地更改任何语言。但是,如果某个语言的帖子数为零,那么需要不同的文本呢?等等。
这基本上是像“你让{0}今天的帖子”从这个问题,我认为这是不一样的,他是什么想知道。实际的问题是:如果句子根据$ amount $?的值而变化,该怎么办? – 2009-02-09 14:48:00