我试图让我的应用程序中的本地化工作。我有我的ui资源文件,名为" ui.resx"和" ui.de.resx"在我的解决方案但是,我的实施中的某些内容不正确,而且我很难过。
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 :(得分:0)
您应该使用班级的全名(带名称空间)作为第一个参数:
var resman= new ResourceManager("Sample.Resources", typeof(Resources).Assembly);
要知道应该使用什么名称,请在ui.cs
节点下打开ui.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
值。