我正在使用WPF应用程序,并且在.resx文件中有本地化的资源(en,fr,zh)。以下测试代码用于显示本地化的字符串。它适用于英语,法语,但中文不起作用。中文仅显示英文文本。我尝试使用所有中国文化变体,例如zh-CN,zh-Hans,zh-Hant和“旧” zh-CHS,zh-CHT,但没有运气。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
       // CultureInfo culture = CultureInfo.CreateSpecificCulture("zh-CHT");
        CultureInfo culture = new CultureInfo("zh-CN");
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
        MessageBox.Show(Properties.Resources.address);
    }
}


资源文件被命名为Resources.resx,Resources.fr.resx,Resources.zh.resx
任何帮助,将不胜感激,
拉杰什

最佳答案

这是因为zh-CHS是中性文化。
在ASP.NET 2.0中,无法将CurrentCulture设置为zh-CHS等中性文化。
但是您可以将其设置为zh-CN之类的特定文化。
如果需要使用zh-CHS等中性文化,则可以设置CurrentUICulture属性。 CurrentUICulture是负责从资源文件获取文本的工具。
CurrentCulture负责数字,日期时间和货币格式。

顺便说一句,在ASP.NET 4.0中,您可以将CurrentCulture设置为Neutral Culture,但在v2.0中则不能。
在我的代码中,该站点可以在.NET 2或.NET 4上运行,我这样做是这样的:

    public static void SetCurrentCulture(string cultureName)
    {
        try
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName);
        }
        catch (Exception)
        {
            // Ignore if exception happens: In ASP.NET 2.0 setting CurrentCulture = Neutral culture (like zh-CHS) throws an exception:
            // Culture 'zh-CHS' is a neutral culture. It cannot be used in formatting and parsing and therefore cannot be set as the thread's current culture.
        }
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName);
        HttpCookie cultureCookie = new HttpCookie("CultureCookie", cultureName);
        HttpContext.Current.Response.Cookies.Set(cultureCookie);
    }

关于c# - 中文本地化无效,始终显示英语,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16494578/

10-10 12:32