Локализация с помощью NHibernate - PullRequest
2 голосов
/ 18 января 2011

Привет, ребята. Я новичок в NHibernate.Я только начал разработку своего следующего проекта с использованием NHibernate.Одним из требований является то, что классы сущностей должны быть локализованы.Я делаю локализацию следующим образом: - Каждый объект, который должен быть локализован, разделен на 2 таблицы и 2 объекта.Например, у меня есть объект Service, который содержит некоторую информацию, и другой объект ServiceLocale, который содержит локализованные свойства, такие как Имя, описание и т. Д. То же самое относится и к таблицам.поле, которое содержит список ServiceLocales.ServiceLocale имеет свойство Culture, которое указывает, к какому языку относится объект.

Список ServiceLocale загружается из файла сопоставления xml.Поэтому, когда служба загружается из базы данных, все ServiceLocales также загружаются для этого объекта службы.

Служба имеет общедоступные свойства Name и Description.Из этих свойств я проверяю текущую культуру, загружаю соответствующий объект ServiceLocale и возвращаю имя и описание ServiceLocale.

Служба сохраняется с использованием репозитория.Репозиторий проверяет, сохраняет или обновляет службу, а также все ее объекты ServiceLocale.

Итак, мой вопрос: есть ли лучший способ добиться такого рода прозрачной локализации через NHibernate?Спасибо

1 Ответ

1 голос
/ 22 января 2011

Хорошо, ребята, для кого интересует ответ, у меня есть один. Джейсон Мекли написал мне о решении в новостной группе nhibernate. Похоже, лучше использовать фильтры nhibernate. Вот его ответ:

, если вы хотите загружать все локальные компьютеры каждый раз, когда запрашиваете первичную сущность, это проблема с предварительным исполнением, ожидающая своего появления. теперь это может работать, если вы введете фильтр, который можно установить сразу после открытия сеанса. таким образом, только один результат возвращается на локализованный ресурс. это также привело бы к модели вашего домена.

//class
private ISet<string> localizedvalues;
public string Value{get{return localizedvalues.FirstOrDefault();}}

//mapping
<class name="myentity">
   <set name="localizedvalues" access="field" lazy="false" join="fetch">
         <filter name="CultureFilter" />
         ...
   </set>
</class>
<filter-def name="CultureFilter" condition="cultureId = :culture">
   <param name="culture" type="string" />
</filter-def>

//session configuration
var session = factory.Open();
session.EnableFilter("CultureFilter").SetParameter("culture", Thread.CurrentThread.CurrentCulture.LCID);

это похоже на то, как работают примеры ayende, за исключением того, что мы используем набор вместо формулы для получения локали.

...