Windows窗体本地化问题

本文关键字:问题 本地化 窗体 Windows | 更新日期: 2023-09-27 18:01:07

这是我第一次尝试本地化,请耐心等待。我已经读过了,但在这个主题上的经验仍然有限。

我看过一个演示,它运行得很好,我觉得我了解幕后发生的事情。我在实际应用程序中引入了相同的概念,但它不会起作用。我已经将Localizable属性设置为true,并创建了一个英语和法语资源文件。

我已经确认,我的应用程序仍在从常规.resx文件中提取,而不是从en-US.resx或法语文件中提取。

在InitializeComponent调用之前,我已经尝试过设置这些:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

我甚至尝试过明确地调用一些特定的:

resources.ApplyResources(this, "$this", new CultureInfo("en-US"));

资源被声明为:

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(myForm));

它仍然是从.resx文件中提取的。与我的测试项目相比,这一点的一个不同之处在于,这个表单继承了另一个表单,但我已经确保设置了该表单的Localizable属性和资源文件。任何想法都将不胜感激。

编辑:我一直在做这个。我有一个可以工作的测试项目,而我的主要应用程序却不能。如果我把测试中有效的表单复制到main,它就不起作用。如果我在测试中添加对主应用程序的引用,主应用程序中的表单也不起作用,即使它是直接从有效的测试中复制的。有什么想法吗?

编辑:主要的区别/问题似乎是,正在运行的基本项目本身就是一个可执行文件,而我的主要应用程序正在调用一个包含此本地化形式的程序集。仍然不知道出了什么问题。我看到的很多教程都使用System。资源。ResourceManager,但当我将表单更改为可本地化时,它会自动使用System。组件模型。ComponentResourceManager。

编辑:我可以说

resources.ApplyResources(this, "$this", new CultureInfo("fr-CA"));     

它将忽略$this。在.fr-CA.resx文件中输入文本,并使用默认的.resx。我不明白。这只是我试图强迫它发挥作用。我仍然需要把文化设定得像正常人一样。有人有什么想法吗?

Windows窗体本地化问题

对线程CurrentCulture使用CreateSpecificCulture而不是新的CultureInfo((。

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(languageCode);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageCode);

顺便说一句,如果你的默认区域性是英语,那么你不需要创建一个labels.en-US.rex。你可以把它放在labels.resx中,它将提前加载并作为后备。为您减少一个需要保持同步的文件。

如果将下面的相关行添加到Program.cs中的主方法(为上下文添加的其他行(

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// THIS LINE - Only need to set UI culture the other one is for currency etc
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");
// Or whatever your form is called.
Application.Run(new Form1());

这样可以确保在调用任何InitializeComponent方法之前设置区域性。我一直在关注这项工作。

本地化表单时,它会在构建的输出路径中按语言创建一个文件夹,其中包含一个资源文件projectname.resources.dll。

我有一个构建后命令,它将我们的.dll放在其他地方。我需要更改命令,同时推出资源文件,使它们位于同一目录中。一旦我做到了这一点,我就能让它发挥作用。