如何在运行时更改当前资源管理器以切换语言?

6

我有一个C#应用程序,我想通过使用资源管理器引用不同的resx文件来使其支持多种语言。

在我的Designer.cs文件中,我有以下代码:

        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
    public static global::System.Resources.ResourceManager ResourceManager {
        get {
            if (object.ReferenceEquals(resourceMan, null)) {
                global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("project.resources.en-US", typeof(resources.en-US).Assembly);
                resourceMan = temp;
            }
            return resourceMan;
        }
    }

如何在运行时将 System.Resources.ResourceManager("project.resources.en-US", typeof(resources.en-US).Assembly) 切换到 System.Resources.ResourceManager("project.resources.it-IT", typeof(resources.it-IT).Assembly),而无需修改我的 Designer.cs 代码?这可能吗? 这个问题相关 编辑:为了澄清,我意识到不应该更改我的设计师代码,但我正在尝试访问不同的 resx 文件。如果我的问题措辞不当,我很抱歉,但我想我并不完全理解我正在谈论什么。我目前正在研究卫星程序集。

1
不要编辑Designer.cs文件中的代码,那里的默认代码是与文化无关的。你无论如何都会失去这些更改。资源切换是根据系统语言自动进行的。在MSDN库中查找“卫星程序集”。 - Hans Passant
1个回答

3

只需更改当前的区域信息即可完成任务。 System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");


它似乎可以工作,尽管我不知道它是如何运作的。谢谢您。 - Jeffrey Greenham
2
非常简单。CurrentUiCulture保存当前线程的区域设置。如果将其设置为ru-RU,则会为当前线程从俄语资源文件加载数据,而不是整个应用程序。还有一个名为CurrentCulture的属性,负责全球化任务,例如小数分隔符字符、货币等等。请查看http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx <--此处。 - Davita

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接