问题
我正在尝试在我的程序中实现一个系统来切换语言。我发现我可以使用 CultureInfo 和 ResourceManager 来实现这一点。在遇到资源未找到问题几个小时后,我构建了此代码,最后我在 stackoverflow 上找到并回答,我安排了以下代码:
CultureInfo culture;
culture = CultureInfo.CreateSpecificCulture("it-IT");
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
Assembly resourceAssembly = Assembly.Load("MY ASSEMBLY NAME");
ResourceManager manager = Properties.Resources.ResourceManager;
string[] manifests = resourceAssembly.GetManifestResourceNames();
string manifest = manifests[0].Replace(".resources", string.Empty);
manager = new ResourceManager(manifest, resourceAssembly);
string greeting = String.Format("The current culture is {0}.\n{1}",
Thread.CurrentThread.CurrentUICulture.Name,
manager.GetString("HelloString"));
MessageBox.Show(greeting);
由于这是一个非常大的程序,有很多页面、窗口和用户控件,我需要从很多不同的文件中访问语言。我在上面发布的代码应该查看我的解决方案的根目录并查找名为 it-IT.resx 的文件。它说当前的文化是它-IT,但它没有写入 HelloString 的值,但它没有给出任何错误,所以这绝对是资源管理器的问题,但我不知道为什么它不会崩溃说它没有找到资源。我确信在 resx 文件中有一个名为 HelloString 的值。