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"中,或者所需的所有附属程序集都是可加载的并且是完全签名的。"
您应该使用类的全名(带命名空间)作为第一个参数,如:
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
的值。