【问题标题】:Mult-Language support using Resource File使用资源文件的多语言支持
【发布时间】:2013-09-09 09:05:29
【问题描述】:

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

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

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

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

我正在尝试这样的事情:

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

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

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

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

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

【问题讨论】:

  • 只为每种语言提供不同的资源文件有什么问题?
  • 我创建了一个程序,可以让用户将英语翻译成他们自己的母语。该程序以 .ini 格式生成所有内容。我只想使用该文件,而不必创建不同的资源文件。我有 70 多个字符串。

标签: c# winforms visual-studio-2010 multilingual


【解决方案1】:

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

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

【讨论】:

  • 是的,我知道这种可能性。我想这将是我最后的手段。我只是想尝试从 .ini 文件中完成所有工作。
  • 我只是建议了最推荐的方式,相信我它使维护变得非常容易。最初我们支持 2 种语言,最近我们又添加了 3 种语言,这很容易。最终决定取决于您的要求。
  • 我们的 .ini 文件生成如下:Item|(Text), Value|(Text)... 我不想手动将这些行添加到资源文件中,因此 .ini .我现在才意识到我可以创建一个简单的程序来获取 .ini 文件并从中构建一个 .resx。我想这可能是我接下来要走的路。
  • 这给我带来了另一个问题,如何将资源文件从 language_en.resx 更改为 language_fr.resx?假设用户文化是英语,但是,他想用法语查看它。我们如何更改正在使用的默认 resx?
  • 你不要那样做。其逻辑不正确。它适用于您的系统范围设置,如果您的系统语言是法语,那么您的应用程序应该显示法语而不是英语或其他任何内容。如果您仍然需要这样做,那么这将不适合您。
猜你喜欢
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 2015-07-23
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多