C# 从同一解决方案C的另一个项目访问资源文件
我有一个全球化项目在解决方案中,还有另一个主要项目。在全球化下有两个资源文件,Resources.resx和Resources.ar.resx。两个文件都有相同的密钥。我想根据在modelAPI中获得的语言输入输出结果 宣布此为全球: 资源经理室 然后我有了这个函数,它将检查来自模型的语言输入,并相应地选择资源文件C# 从同一解决方案C的另一个项目访问资源文件,c#,asp.net-mvc,globalization,C#,Asp.net Mvc,Globalization,我有一个全球化项目在解决方案中,还有另一个主要项目。在全球化下有两个资源文件,Resources.resx和Resources.ar.resx。两个文件都有相同的密钥。我想根据在modelAPI中获得的语言输入输出结果 宣布此为全球: 资源经理室 然后我有了这个函数,它将检查来自模型的语言输入,并相应地选择资源文件 private void CheckResourceManager(string lang) { if (lang =="EN")
private void CheckResourceManager(string lang)
{
if (lang =="EN")
{
rm = new ResourceManager(
"Globalization.Resources",
Assembly.GetExecutingAssembly());
}
else
{
rm = new ResourceManager(
"Globalization.Resources.ar",
Assembly.GetExecutingAssembly());
}
}
在Api函数中,我首先检查CheckResourceManagermodel.Language;
当需要信息时,则:
抛出新的Exceptionrm.GetStringErrorUserName
现在的问题是Globalization.Resources.ar在函数中并没有像它一样读取资源;如果找不到文件,我应该在这里使用什么。若我在同一个项目中添加资源文件,那个么它就会工作。请告知。谢谢
正确的方法是从下面的答案,但对我来说这个方法很好
声明:
ResourceManager rm;
CultureInfo originalCulture = CultureInfo.CurrentCulture;
Assembly localizeAssembly = Assembly.Load("Globalization");
将功能更改为:
private void CheckResourceManager(string lang)
{
if (lang =="EN")
{
System.Threading.Thread.CurrentThread.CurrentCulture = originalCulture;
rm = new ResourceManager("Globalization.Resources", localizeAssembly);
}
else
{
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("ar");
rm = new ResourceManager("Globalization.Resources", localizeAssembly);
}
}
最后,当我需要获得一些价值时:
throw new Exception(rm.GetString("WrongUserName",CultureInfo.CurrentCulture));
谢谢。ResourceManager的全部要点是根据当前线程的UI区域性切换到不同的区域性。你不需要做一个单独的函数来完成它。它不会明确地阅读本地化的文化-它是基于约定的。要控制当前线程的UI区域性,您需要在一个:
此外,传递ExecutingAssembly意味着您正在传递顶级程序集,它很可能不是您的资源所在的程序集。应在程序集中使用类型来获取程序集实例:
new ResourceManager(
"Globalization.Resources",
typeof(ClassWithinResourcesAssembly).Assembly)
有关如何使用ResourceManager的更多信息,请参阅以下文档:
现在,当我添加解决方案名称如PartnerWebApplication.Globalization.Resources.ar时,我得到了以下错误。找不到任何适合指定区域性或非特定区域性的资源。确保PartnerWebApplication.Globalization.Resources.ar.Resources在编译时已正确嵌入或链接到程序集PartnerWebApplication,或者所有所需的附属程序集都可加载并完全签名。请尝试:右键单击.resx文件,选择属性并将生成操作设置为embedded Resources是,这是正确的方法。虽然对我来说,我只需要很少的值,所以我没有进入UI文化等。更改了System.Threading.Thread.CurrentThread.CurrentCulture=new CultureInfo的函数;rm=新的ResourceManagerGlobalization.Resources,localizeAssembly;现在英语和阿拉伯语都好了。
new ResourceManager(
"Globalization.Resources",
typeof(ClassWithinResourcesAssembly).Assembly)