多语言应用,未定义项,C#
本文关键字:未定义 应用 语言 | 更新日期: 2023-09-27 18:32:39
我一直在开发一个c#应用程序(它运行正常,没有问题(。但是现在,我的老板需要它处理英语,西班牙语和其他语言。
我看到了一些关于如何在不同网页上更改应用程序中的语言的教程(例如这个和这个(
我的问题是: 我没有定义任何项目,我的意思是,我没有文本框、标签或按钮。我只有一个表格:当我的应用运行时,它会读取一个.txt文件:如果.txt中有"按钮"行,我的应用将向我的窗体添加一个按钮,如果有"标签"行,它将添加一个新标签。
因此,我不能像教程所说的那样使用.resx文件。它不起作用。
我不知道我是否做错了,或者它根本不起作用
知道吗?我不知道该怎么办
我读取了.txt文件(逐行(,并像这样分配属性
public static Label[] LAB = new Label[2560];
public static int indice_LABEL = 0;
if (TipoElemento == "LABEL")
{
LAB[indice_LABEL] = new Label();
LAB[indice_LABEL].Name = asigna.nombreElemento;
LAB[indice_LABEL].Left = Convert.ToInt32(asigna.left);//LEFT
LAB[indice_LABEL].Top = Convert.ToInt32(asigna.top);//TOP
LAB[indice_LABEL].Width = Convert.ToInt32(asigna.width);
LAB[indice_LABEL].Height = Convert.ToInt32(asigna.height);
//and all I need
...
...
Formulario.PanelGE.Controls.Add(Herramientas.LAB[Herramientas.indice_LABEL]);
Herramientas.indice_LABEL++;
}
如果您需要坚持这种格式,最好的解决方案是让 1 个文件包含所有控件定义(名称、尺寸、位置等(,另一个文件包含要向用户显示的文本
然后,当您创建每个控件时,而不是为其分配标题,而是使用ResourceManager
,链接到您的"标题"文件(每种语言 1 个(以检索要显示的正确字符串
例如:
语言文本文件
这将是一个简单的文本文件,resource.en-US.txt
在里面,你需要添加简单的键>值对:
label1=Hello world!
要创建另一种语言,只需创建另一个文件 resource.fr-FR.txt,然后添加:
label1=Bonjour le monde!
应用程序代码
// Resource path
private string strResourcesPath= Application.StartupPath + "/Resources";
// String to store current culture which is common in all the forms
// This is the default startup value
private string strCulture= "en-US";
// ResourceManager which retrieves the strings
// from the resource files
private static ResourceManager rm;
// This allows you to access the ResourceManager from any form
public static ResourceManager RM
{
get
{
return rm ;
}
}
private void GlobalizeApp()
{
SetCulture();
SetResource();
SetUIChanges();
}
private void SetCulture()
{
// This will change the current culture
// This way you can update it without restarting your app (eg via combobox)
CultureInfo objCI = new CultureInfo(strCulture);
Thread.CurrentThread.CurrentCulture = objCI;
Thread.CurrentThread.CurrentUICulture = objCI;
}
private void SetResource()
{
// This sets the correct language file to use
rm = ResourceManager.CreateFileBasedResourceManager
("resource", strResourcesPath, null);
}
private void SetUIChanges()
{
// This is where you update all of the captions
// eg:
label1.Text=rm.GetString("label1");
}
然后你需要做的就是将私有字符串strCulture= "en-US"
更改为"fr-FR"(例如在组合框中(,并调用 GlobalizeApp()
方法,label1
中的文本将从 Hello world 更改为 Bonjour le monde!
简单(我希望:)(
查看此链接以获取精彩演练