Я работаю над локализацией текстов во всех 5 проектах, которые вместе составляют продукт.
Localization:
Итак, если пользователь из США, он увидит товар в en-US
, если он из Китая, то увидит текст в ch-CH
.
И я застрял в нижних вещах.
Каждый проект будет иметь OWN корзину файла Resx (файл, в котором я храню переводы).
Project A - en-US.resx file
cn-CH.resx file
Project B - en-US.resx file
ch-CH.resx file
Project C - en-US.resx file
ch-CH.resx file
.
.
.
Теперь у меня есть проект Common
, на который ссылаются все проекты.
Так что я написал singleton
класс в Common
public sealed class Translation
{
private static readonly Translation translation = new Translation();
public static Translation GetTranslation { get { return translation; } }
private Translation() { }
static Translation() { }
public string GetTranslatedMessage(string key, CultureInfo culture, string message, string namespace)
{
var rm = new ResourceManager("namespace", Assembly.GetExecutingAssembly());
message = rm.GetString(key, culture);
return message;
}
}
Пока все хорошо, как вы можете видеть, я использую namespace как 4th parameter
с resource manager
, так что я могу искать перевод в нужной корзине проекта, я просто делаю что-то вроде ниже :
Translation.Translate(key, culture, message, namespace) // singleton class taking in the namespace to find the right bucket
И работает нормально.
Вопрос / проблема : Но в каждом проекте мне нужно передавать пространство имен, я имею в виду, что когда бы я ни звонил, мне нужно передавать пространство имен. Мне интересно, есть ли какой-то способ, я могу неявно сказать, в какую корзину должен заглянуть каждый проект. Могу ли я использовать Abstract или 2 одноэлементных класса, может быть factory? Я новичок, поэтому я не знаю, как решить эту проблему. Я просто не хочу передавать пространство имен при каждом вызове.
WorkAround: Я могу повторить один и тот же одноэлементный код в каждом проекте и заставить его работать, но затем я буду повторять один и тот же одноэлементный код в каждом проекте /