c#本地化和资源文件

本文关键字:源文件 资源 本地化 | 更新日期: 2023-09-27 18:14:10

我试图在我的应用程序中获得本地化工作。我有我的ui资源文件,名为"ui"。和"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"。资源"在编译时被正确嵌入或链接到程序集"myProgram"中,或者所需的所有附属程序集都是可加载的并且是完全签名的。"

c#本地化和资源文件

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

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

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

注意不要通过"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的值。