C# ASP.NET多值消息的本地化
如果我的ASP.NET(2.0)页面上有一个单个标签,并且我想在其中存储一条错误消息;如果我在代码中通过多个if语句来实现这一点,比如:C# ASP.NET多值消息的本地化,c#,resources,localization,asp.net-2.0,C#,Resources,Localization,Asp.net 2.0,如果我的ASP.NET(2.0)页面上有一个单个标签,并且我想在其中存储一条错误消息;如果我在代码中通过多个if语句来实现这一点,比如: if (...) value = "..." else value = "......" etc 我该如何本地化,这样我就不必写: if (...) { switch(langCase) { case "en-US": value = "englishValue"; break;
if (...)
value = "..."
else
value = "......"
etc
我该如何本地化,这样我就不必写:
if (...)
{
switch(langCase)
{
case "en-US":
value = "englishValue";
break;
case "de-CH":
value = "german Swiss value";
break;
...
}
}
else
{
switch(langCase)
{
case "en-US":
value = "englishValueForElse";
break;
case "de-CH":
value = "german Swiss value for ELSE";
break;
...
}
}
如果我为每个If-else情况创建多个标签控件,我将不得不隐藏当前语言的所有标签控件(丑陋?)。我想要的是一种资源文件,但是对于可能发生的每种情况都有行,对于每种语言都有列。您应该使用资源文件(.resx)来存储消息。ASP.NET使用资源构建了本地化机制 要向应用程序添加资源,只需使用“添加新项”对话框添加新的“资源元素” 如果您的resx文件名为ApplicationStrings.resx,则可以通过属性在您的网站中访问其中包含的ErrorLabel字符串
ApplicationStrings.ErrorLabel
(VS生成一个类来封装resx文件)
您可以通过创建具有适当命名的新资源来支持字符串本地化:
ApplicationStrings.fr.resx将包含ApplicationStrings.resx的法语本地化
ApplicationStrings.fr-fr.resx将包含法语/法语本地化等
ASP.NET句柄回退,然后如果ApplicationString.fr-fr.resx中缺少ErrorLabel(或ApplicationString.fr-fr.resx不存在),它将在ApplicationString.fr.resx中查找它,然后在ApplicationString.resx中查找
还值得注意的是,ASP.NET使用当前线程区域性在资源中执行本地化。
因此,您必须确保System.Threading.Thread.CurrentThread.Culture包含您的客户端区域性,而不是服务器区域性。您应该使用资源文件(.resx)来存储邮件。ASP.NET使用资源构建了本地化机制 要向应用程序添加资源,只需使用“添加新项”对话框添加新的“资源元素” 如果您的resx文件名为ApplicationStrings.resx,则可以通过属性在您的网站中访问其中包含的ErrorLabel字符串
ApplicationStrings.ErrorLabel
(VS生成一个类来封装resx文件)
您可以通过创建具有适当命名的新资源来支持字符串本地化:
ApplicationStrings.fr.resx将包含ApplicationStrings.resx的法语本地化
ApplicationStrings.fr-fr.resx将包含法语/法语本地化等
ASP.NET句柄回退,然后如果ApplicationString.fr-fr.resx中缺少ErrorLabel(或ApplicationString.fr-fr.resx不存在),它将在ApplicationString.fr.resx中查找它,然后在ApplicationString.resx中查找
还值得注意的是,ASP.NET使用当前线程区域性在资源中执行本地化。
因此,您必须确保System.Threading.Thread.CurrentThread.Culture包含您的客户端区域性,而不是服务器区域性。有关如何在ASP.NET中正确执行全球化的详细教程,请参阅以下MSDN文章: