c# - 使用资源文件的多语言支持

标签 c# winforms visual-studio-2010 multilingual

我试图让我的程序以不同的语言使用。 我有一个名为 language_en 的资源文件。

在运行时,我想更改 language_en 中每个字符串的值。

我创建了 .ini 文件,其中包含 language_en 中的所有字符串,以及表单上的控件。在加载期间使用该文件,我可以轻松更改控件的文本。如:Button1 的文本从“Yes”到“Ja”。

我无法对资源文件执行相同的操作,因为它是只读的。我知道我可以做的一种方法是为每种语言创建多个资源文件。但是,我希望能够在 .ini 文件中完成所有操作。

我正在尝试这样的事情:

ResourceSet RSet = English.ResourceManager.GetResourceSet(
                        CultureInfo.CurrentCulture, true, true);

foreach (DictionaryEntry Entry in RSet)
{
    Entry.Value = ? 
}

但显然它不会工作,不仅因为我试图在迭代期间修改集合,而且因为该值是只读的。

有人知道我可以采取什么方法吗?

附言我应该在哪里定义我的 Application.CultureInfo?在 InitializeComponent() 之前?

最佳答案

在 .NET 中执行此操作的正确方法是创建多个资源文件,如下所示:

假设您有资源文件 Resource.resx,它将作为您 UI 的默认英文单词,现在如果您希望添加对西类牙语的支持,则只需添加一个名为 Resource.es.resx 的资源文件(此文件将包含与原始文件完全相同的键,但值将是西类牙语翻译)在同一目录中。每当用户将系统语言更改为西类牙语时,.NET 将自动使用正确的资源文件。同样,您可以通过添加具有正确扩展名的资源文件来添加对任意多种语言的支持。

关于c# - 使用资源文件的多语言支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18694860/

相关文章:

c# - 泛型类型的泛型类型约束

c# - 当页面视频全屏时将 Webview2 切换到全屏

.net - 从 Winforms 迁移到 WPF

visual-studio-2010 - 在每行的开头和结尾添加引号 - Visual Studio

c++ - Visual C++ Express 2010 高亮显示

c# - 获得一个无参数的方法来像 Func<Return>

c# - 无法使用 Mock Lambda 测试工具启动 lambda

visual-studio-2010 - 如何在解决方案资源管理器 VS2010 中对部分类文件进行分组

c# - Mono Evaluator类

c# - 无论我的表单是否具有焦点,我都可以确保我的控件捕获第一个事件吗?