我正在使用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/