多语言应用,未定义项,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++;
    }

多语言应用,未定义项,C#

如果您需要坚持这种格式,最好的解决方案是让 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!

简单(我希望:)(

查看此链接以获取精彩演练