我有多个项目,每个项目都有自己的resx
文件。而且我不确定使用资源管理器加载进行翻译所需的resx文件的最佳方法是什么。
代码对话:
项目A:
LocalizedText.resx
Key Value
Hello Hello
LocalizedText.fr_FR.resx
Key Value
Hello Salut!
项目B
LocalizedText.resx
Key Value
Hello Hello
LocalizedText.fr_FR.resx
Key Value
Hello Salut!
项目C:
A and B
都引用了
// Singleton Class
public sealed class C
{
// code removed for brevity
private static readonly C class1Helper = new C();
public static CGetClass1Helper { get { return class1Helper; } }
public string GetTranslatedMessage(string key, CultureInfo culture, string namespace)
{
var message = "";
var rm = new ResourceManager(namespace, Assembly.GetCallingAssembly());
message = rm.GetString(key, culture);
return message;
}
}
从项目A拨打电话:
C instance = C.GetClass1Helper;
var t = instance.GetTranslatedMessage("Name", new CultureInfo("en-US"),
"A.App_GlobalResources.LocalizedText");
来自项目B的电话:
C instance = C.GetClass1Helper;
var t = instance.GetTranslatedMessage("Name", new CultureInfo("en-US"),
"B.App_GlobalResources.LocalizedText");
注释:
GetCallingAssembly
INSTEAD OF GetExecutingAssembly()
,以便当调用来自Project A时,Resx文件从其文件夹中被引用GetTranslatedMessage
中的resx文件位置的名称空间 WorkAround:我可以重复在Common Project C
中在A和B中使用的代码,然后一切正常。但是然后我将重复相同的代码。
问题:我不想每次调用都传递名称空间。创建Singleton是否犯了一些错误,我是否需要拥有abstract class
?