2015-09-22 106 views
1

我试图让本地化在我的应用程序中工作。我的解决方案中有我的ui资源文件,名为“ui.resx”和“ui.de.resx”。但是,我的实现中的某些内容不正确,我很难过。C#本地化和资源文件

ResourceManager res_man; 
CultureInfo culture; 
string exception; 

private void myForm_Load(object sender, EventArgs e) 
{ 
    culture = CultureInfo.CreateSpecificCulture("de"); 
    res_man = new ResourceManager("MyApp.ui.resx", typeof(myForm).Assembly); 
    doTheThing(); 
} 

private void doTheThing() 
{ 
    try 
    { 
     BTN_save.text = ui.SAVE; 
     //Do code here 
    } 
    catch(Exception e) 
    { 
     exception = e.toString(); 
    } 
} 

当我运行程序时,它出现了错误和异常写着:

“异常:System.Resources.MissingManifestResourceException:找不到适合指定区域性或中性文化的资源确保“ui.resx.resources”在编译时正确嵌入或链接到程序集“myProgram”中,或者所有需要的附属程序集均可加载并完全签名。“

回答

0

您应该在类的使用全名(与命名空间)作为第一个参数LIK:

var resman= new ResourceManager("Sample.Resources", typeof(Resources).Assembly); 

要知道什么名字,你应该使用,开放ui.csui.resx节点下,看的命名空间类和类的名称并使用它们,如上所示。

讲究,你不应该通过"MyApp.ui.resx",而不是通过"MyApp.ui"

然后,你可以简单地使用管理器来得到这样的特定的文化资源:

var str = resman.GetString("YourResourceKey", culture); 

注:

你应该注意的另一件事是,有更简单的方法来阅读文化特定的资源。你可以简单地设置:

var culture= ...  

System.Threading.Thread.CurrentThread.CurrentUICulture = culture; 
System.Threading.Thread.CurrentThread.CurrentCulture = culture; 

制定和文化,无论你使用例如MyApp.Ui.Key特定于文化Key的值后会被使用。

+0

我改变了行,所以它包括 新的ResourceManager(“myApp.ui.resx”,typeof(myForm).Assembly); 它仍然是错误的。 – Dan

+0

@dan从第一个参数中删除.resx并传递“MyApp.ui” –

+0

@Dan让我知道它是否解决了问题。 –