У меня есть несколько проектов, и у каждого проекта есть свой resx
файл.И я не уверен, каков наилучший способ загрузить файл resx, необходимый для трансляции, с помощью Resource Manager.
Обсуждение кода:
Проект 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");
Примечания:
- Когда я звонил в Resource Manager, мне пришлось использовать
GetCallingAssembly
INSTEAD OF GetExecutingAssembly()
, чтобы при вызовах из проекта A файл Resx передавался из его папки - Я передаю пространства имен расположения файла resx в
GetTranslatedMessage
WorkAround: я могу повторить код, который у меня есть в Common Project C
как в A, так и в B, и тогда все будетотлично работаетНо тогда я буду повторять тот же код.
Проблема: Я НЕ хочу передавать пространства имен из каждого вызова.Неужели я сделал какую-то ошибку, создав Синглтон? Нужно ли иметь abstract class
?