C#本地化和资源文件

时间:2015-09-22 14:42:38

标签: c# localization resources

我试图让我的应用程序中的本地化工作。我有我的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"在编译时,或者所有所需的附属程序集都是可加载和完全签名的。"

1 个答案:

答案 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值。