首页 文章

C#本地化和资源文件

提问于
浏览
1

我正在尝试在我的应用程序中使用本地化 . 我有我的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

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

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

    要知道应该使用什么名称,请在 ui.resx 节点下打开 ui.cs 并查看类的名称空间和类名,并使用它们,如上所示 .

    注意你不应该传递 "MyApp.ui.resx" ,而是传递 "MyApp.ui"

    然后,您可以简单地使用管理器获取特定文化的资源,如下所示:

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

    Note:

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

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

    设置文化后,无论您在何处使用 MyApp.Ui.Key ,都将使用特定于该文化的 Key 的值 .

相关问题