我正在尝试在我的程序中实现一个系统来切换语言。我发现我可以使用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-IT但它没有写出HelloString的值,但它没有给出任何错误,所以它肯定是资源管理器的一个问题,但我不知道为什么它不会崩溃说它找不到资源。我确信在resx文件中有一个名为HelloString的值。