C# ASP.NET多值消息的本地化

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;

如果我的ASP.NET(2.0)页面上有一个单个标签,并且我想在其中存储一条错误消息;如果我在代码中通过多个if语句来实现这一点,比如:

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文章:


有关如何在ASP.NET中正确执行全球化的详细教程,请参阅以下MSDN文章:


我可以创建一个带有消息标题的资源文件,并使用资源管理器将它们连接到正确的位置吗?是的,请查看我的消息,这比创建更简单。^ u^(注意资源类自动生成的命名空间。根据默认项目命名空间和资源文件目录,它与其他自动生成的类文件一样是计算机。我可以创建一个带有消息标题的资源文件,并使用资源管理器将它们连接到正确的位置吗?是的,请查看我的消息,这比创建消息更容易^_^(但是,请注意资源类自动生成的命名空间。根据默认的项目命名空间和资源文件目录,它与其他自动生成的类文件一样是计算机。