我们计划为我们的ASP.NET网站添加多语言支持。我了解根据当前文化从资源文件中提取字符串的一般过程,但是如何处理以下情况最好呢?
假设我们想向用户显示他们今天发布了多少篇Stack Overflow文章。假设i是文章计数。如果您只使用英语,则会有以下代码。
所以,文本是基于我们处理单数或复数的帖子而创建的。
如果我们想要在其他语言中创建帖子计数文本,怎么办?显然,我们不能有很多像上面那样的条件语句,因此资源文件中的字符串需要自动工作以创建所需的输出文本。在另一种语言中,可能不仅仅是“post(s)”这个词会改变,当你在单数和复数之间移动时,也可能会改变“today”这个词。
到目前为止,我唯一想到的主意是在外部资源文件中存储两个字符串,一个用于单数,一个用于复数,然后对这些字符串应用String.Format来插入正确位置的帖子计数。
例如,英语的资源文件将包含以下两个字符串:
然后我会有以下代码来创建输出文本:
这将使得文本能够正确地针对任何语言进行更改。但是,如果某种语言需要在没有帖子时提供不同的文本呢?等等。
假设我们想向用户显示他们今天发布了多少篇Stack Overflow文章。假设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);
}
这将使得文本能够正确地针对任何语言进行更改。但是,如果某种语言需要在没有帖子时提供不同的文本呢?等等。