Как я могу реализовать файл меток для регионов, который хорошо интегрируется со структурой приложения MVC? - PullRequest
1 голос
/ 03 августа 2010

Справочная информация:

Я работаю над сайтом, который будет доступен в нескольких регионах.Каждый регион может иметь свой язык или разные варианты написания для одного и того же языка.Мы планируем использовать файл меток XML, который будет содержать весь текст, который будет отображаться для любого региона.

Таким образом, regionA загрузит RegionALabels.xml, и весь его текст будет взят из этого.RegionB загрузит RegionBLabels.xml и т. Д.

Я подумываю реализовать это путем структурирования XML-файла таким образом, чтобы он следовал той же структуре, что и мое приложение.Например,

<Base> <!--BaseController-->
  <Home> <!--HomeController-->
    <HomePartial1>
      <lblFirstName>text for label with ID lblFirstName</lblFirstName>
      <lblLastName>text for label with ID lblLastName</lblLastName>
    </HomePartial1>
    <HomePartial2>
      <!--a bunch of labels-->
    </HomePartial2>
  </Home>
  <Accounts>
    <AccountsPartial1>
      <!--a bunch of labels-->
    </AccountsPartial1>
    <AccountsPartial2>
      <!--a bunch of labels-->
    </AccountsPartial2>
  </Accounts>
</Base>

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

Используя эту структуру, я могу использовать Linq-to-XML, чтобы выделить текст, относящийся к частичному представлению, которое я собираюсь визуализировать.Например, если я рендерим частичное представление HomePartial1, я могу получить метки, связанные с этим частичным представлением, например:

        var nodes = from f in
                        (from res in this.XmlConfiguration.Descendants("Base")
                         select res).Descendants("Home")
                    select f;

        var HomePartial1Labels = nodes.Elements("HomePartial1").ToList();

Вопрос:

В таком случае, в сущности, я хочу спросить, может ли кто-нибудь указать на очевидные дыры в этом подходе, прежде чем я попытаюсь реализовать это?Может ли кто-нибудь, кто имел дело с этим, предложить что-то лучше?

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

Fund
Company
Group

Если кто-то выполняет поиск, на вкладках должно отображаться количество результатов, которые поисковый запрос возвращает для вкладки, поэтому, если я ищу «JP Morgan», онистать:

Fund (10) // 10 funds contain the name 'JP Morgan'
Company (12) // 12 companies contain the name 'JP Morgan'
Group (15) // 15 groups contain the name 'JP Morgan'

Для того, чтобы в тексте метки содержался текст «Фонд», «Компания» и «Группа», я также должен указать «(» и «)»Это означает, что я думаю, что мне придется использовать заполнитель и заменить его фактическим значением при рендеринге частичного.Так что XML начнет выглядеть так:

<Base> <!--BaseController-->
  <Home> <!--HomeController-->
    <Tabs>
      <lblFundTab>Funds (#value#)</lblFundTab>
      <lblCompanyTab>Company (#value#)</lblCompanyTab>
      <lblGroupTab>Group (#value#)</lblGroupTab>
    </Tabs>
  </Home>
</Base>

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

1 Ответ

1 голос
/ 14 декабря 2010

У меня недавно было то же самое в проекте.

Я реализовал LabelService, который по существу обернул массив Singleton «LabelFiles», который был загружен в память на application_start.Таким образом, мой код выглядит аналогично, но работает в объектах памяти, а не в файлах XML, что позволяет избежать многих потенциальных проблем ввода-вывода (блокировки и т. Д.).

Ваш файл метки XML в порядке, при условии, что он должен редактироваться приложениемили, возможно, разработчик, но если он собирается редактироваться клиентом / не специалистом, как они узнают, что такое «база»?Или контроллер?И т. Д. - я фанат CoC, но иногда для доменных приложений лучше придерживаться терминологии домена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...