Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用资源文件的多语言支持_C#_Winforms_Visual Studio 2010_Multilingual - Fatal编程技术网

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

C# 使用资源文件的多语言支持,c#,winforms,visual-studio-2010,multilingual,C#,Winforms,Visual Studio 2010,Multilingual,我正在尝试允许我的程序使用不同的语言。 我有一个名为language_en的资源文件 在运行时,我想更改语言_en中每个字符串的值 我已经创建了一个.ini文件,其中包含语言_en中的所有字符串以及表单上的控件。在加载期间使用该文件,我可以轻松地更改控件的文本。例如:按钮1的文本从“是”到“Ja” 我无法对资源文件执行相同的操作,因为它是只读的。我知道我可以做的一个方法是为每种语言创建多个资源文件。但是,我希望能够在.ini文件中完成这一切 我试着这样做: ResourceSet RSet =

我正在尝试允许我的程序使用不同的语言。 我有一个名为language_en的资源文件

在运行时,我想更改语言_en中每个字符串的值

我已经创建了一个.ini文件,其中包含语言_en中的所有字符串以及表单上的控件。在加载期间使用该文件,我可以轻松地更改控件的文本。例如:按钮1的文本从“是”到“Ja”

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

我试着这样做:

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

foreach (DictionaryEntry Entry in RSet)
{
    Entry.Value = ? 
}
但很明显,这是行不通的,不仅因为我试图在迭代过程中修改集合,而且因为该值是只读的

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


另外,我应该在哪里定义我的应用程序。文化信息?初始化组件()之前?

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


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

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


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

为每种语言提供不同的资源文件有什么不对?我创建了一个程序,用户可以将英语翻译成自己的母语。该程序以.ini格式生成所有内容。我只想使用该文件,而不是我必须创建不同的资源文件。我有70多个字符串在里面。每种语言都有不同的资源文件有什么不对?我创建了一个程序,让用户将英语翻译成他们自己的母语。该程序以.ini格式生成所有内容。我只想使用该文件,而不是我必须创建不同的资源文件。我有超过70根弦。是的,我知道这种可能性。我想那将是我最后的选择。我只是想尝试从.ini文件中完成这一切。我只是建议了最推荐的方法,相信我,它使维护变得非常简单。最初我们支持2种语言,最近我们又增加了3种语言,非常简单。最后的决定取决于您的需求。我们的.ini文件是这样生成的:Item |(Text),Value |(Text)。。。我不想手动将这些行添加到资源文件中,因此使用了.ini。我现在才意识到,我可以创建一个简单的程序来获取.ini文件并从中构建一个.resx。我想这可能是我接下来要做的事情。这就引出了另一个问题,如何将资源文件从language_en.resx更改为language_fr.resx?假设用户的文化是英语,但是,他想用法语看。我们如何更改正在使用的默认resx?您不能这样做。这在逻辑上是不正确的。它适用于您的系统范围的设置,如果您的系统语言是法语,那么您的应用程序应该显示法语而不是英语或其他任何语言。如果你仍然需要这样做,那么这将不是一个适合你的方法。是的,我知道这种可能性。我想那将是我最后的选择。我只是想尝试从.ini文件中完成这一切。我只是建议了最推荐的方法,相信我,它使维护变得非常简单。最初我们支持2种语言,最近我们又增加了3种语言,非常简单。最后的决定取决于您的需求。我们的.ini文件是这样生成的:Item |(Text),Value |(Text)。。。我不想手动将这些行添加到资源文件中,因此使用了.ini。我现在才意识到,我可以创建一个简单的程序来获取.ini文件并从中构建一个.resx。我想这可能是我接下来要做的事情。这就引出了另一个问题,如何将资源文件从language_en.resx更改为language_fr.resx?假设用户的文化是英语,但是,他想用法语看。我们如何更改正在使用的默认resx?您不能这样做。这在逻辑上是不正确的。它适用于您的系统范围的设置,如果您的系统语言是法语,那么您的应用程序应该显示法语而不是英语或其他任何语言。如果您仍然需要这样做,那么这将不是一个适合您的方法。