2009-10-12 103 views
1

我使用Windows窗体创建多语言应用程序。我创建了我的多语言内容,将表单标记为可本地化,并将语言切换为其他默认设置并更改表单文本。.NET控制本地化 - 如何翻译自定义字符串

这很好,但有一个小问题。在其中一种形式中,我必须设置一个文本以显示在窗体构造函数中。而现在的问题是,如果我以默认语言输入它,即使文化转换为其他语言,它也会以该语言显示。

我想知道什么是最简单或最有效的本地化这种字符串的方式。

什么样的信息,我需要本地化只是一个例子:

class MyForm : Form 
{ 
    public MyForm() 
    { 
     if (myAdapter.ConnectionStatus == ConnectionStatus.OK) 
     { 
      statusLabel.Text = "Connected"; 
     } 
     else 
     { 
      statusLabel.Text = "Not connected"; 
     } 
    } 
} 

在这个例子,我想有“连接”和基于当前的文化信息“未连接”本地化。

回答

7

当您将窗体标记为可本地化时,您正在为每种语言创建不同的资源文件。您应该为您的资源文件添加一个字符串键以“连接”和“未连接”,并手动从您的资源文件中提取,而不是硬编码字符串。

ResourceManager resmgr = new ResourceManager("MyResource", Assembly.GetExecutingAssembly()); 

private CultureInfo englishCulture = new CultureInfo("en-US"); 
private CultureInfo frenchCulture = new CultureInfo("fr-FR"); 
private CultureInfo spanishCulture = new CultureInfo("es-ES"); 

然后得到一个字符串,调用的GetString()用钥匙和文化

string msg = resmgr.GetString("FormLabel.Connected",frenchCulture); 
string msg = resmgr.GetString("FormLabel.NotConnected", frenchCulture); 

你可能会管理你的文化了,所以你就利用这一点,那么你只需要指定使用什么键来从资源文件中获取正确的值。

+0

我想你的意思是添加一个字符串Form1.resx中,或Form1.nl-NL.rex文件?不是一个好主意!之后编辑表单时(f.i.调整文本框的大小),已添加的字符串资源将被删除! – comecme 2011-01-26 21:42:55