Ранее я задавал вопрос , на который был только один ответ. У меня было немного времени, чтобы поиграть с этим и составить план, но я хочу получить отзывы, если это хорошая идея.
Проблема:
Я хочу, чтобы компонент с именем (инвариант, используемый для идентификации компонента) локализовал свое имя в приложении, которое его потребляет, без загрязнения модели компонента атрибутом DisplayName. Компонент может существовать в отдельной dll и динамически загружаться во время выполнения.
я чувствую, что компонент dll должен отвечать за предоставление локализованного имени (это похоже на хорошую инкапсуляцию), но приложение, потребляющее компонент, должно отвечать за получение / использование локализованного имени (тот факт, что компонент имеет другое имя для целей отображения - это не проблема компонента, а «представление», использующее этот компонент)
Решение:
Добавьте ресурс к dll компонентов с тем же именем, что и файл, в котором находится класс компонента. Добавьте строку к ресурсу с ключом, который является именем компонента.
В приложении получите локализованное имя примерно так:
ExternalObject obj = GetExternalObject ();
ResourceManager manager = new ResourceManager (obj.GetType ());
string localisedName= manager.GetString (obj.Name);
Этот код, вероятно, будет инкапсулирован в класс Localiser, но передает смысл. Кажется, это работает, но это хорошая идея или есть лучший / более стандартный способ сделать это?
РЕДАКТИРОВАТЬ: я должен отметить, что одна вещь, в которой я не уверен, с этим решением, что ресурсы должны быть в файле .resx, имя которого совпадает с именем файла, в котором находится класс. это работает, поскольку файл ресурса может быть идентифицирован от имени типа. Это то же самое, что локализация для форм, кажется, работает, и визуальная студия помещает .resx в качестве «подкомпонента» файла .cs, что все выглядит хорошо. Но Visual Studio затем выдает предупреждение (о редактировании ресурса, который является частью другого элемента проекта), если я пытаюсь отредактировать этот файл, что заставляет меня думать, что, возможно, есть какой-то другой способ, которым я должен это делать.