Таким образом, локализацию приложения можно разделить на две части:
- Локализация объектов бизнес-логики.
- Локализация всего остального.
ВНа вопрос вижу слова, которые связаны с локализацией хозяйствующего субъекта.Для этого я согласен с концепцией разделения между сущностями и их локализацией.
Часть 1. Локализация сущностей :
Лично я делаю это в базе данных:
table Entity {EntityID, Name} -this is the entity-related table.
table EntityByLang {EntityID, LanguageID, Name} -this is the localized version of the table for each supported language.
Этот способ позволяет мне иметь значения по умолчанию для каждого локализуемого свойства, например Name
, и его локализации, если таковые имеются в локализованной таблице.Здесь остается только одно - вам нужно реализовать слой доступа к данным, который принимает Name
, локализованный для текущего языка пользователя, или значение по умолчанию (если язык или перевод недоступны для данного языка).
Часть 2. Локализация всего остального :
Здесь, без каких-либо альтернатив с точки зрения производительности, я бы рекомендовал использовать какие-то статические ресурсы.Лично я живу со статическими ресурсами, доступными для стандартных приложений asp.net.
С архитектурной точки зрения, не обращайтесь напрямую к коду локализации из вашего кода пользовательского интерфейса, как это (что мне не нравится):
var translation = HttpContext.Current.GetGlobalResourceObject("hello");
//excuse me, if I don't exactly remember the GetGlobalResourceObject() method name...
Вместо этого я бы рекомендовал использовать такой подход:
var translation = AppContext.GetLocalizationService().Translate("hello");
Где: AppContext
- какой-то фасад / фабрика (фактически реализация абстрактного фасада)/ завод).GetLocalizationService
- изначально возвращает какой-то ILocalizationService
, при реализации возвращает StaticResLocalizationService
(который реализует ILocalizationService
).Это позволяет переключаться с одного вида локализации на другой.И особенно StaticResLocalizationService
работает со статическими ресурсами asp.net
Извините за грязные примеры кода, но я надеюсь, что вы понимаете мой подход.
Надеюсь, это поможет!