Руководство по локализации приложений n-Tiered .NET - PullRequest
3 голосов
/ 28 апреля 2009

Я хотел бы получить некоторые ваши идеи о

  • имя ресурса / классификация
  • место ресурсов

Позвольте мне дать вам сферу применения:

  • 3 или более поддерживаемых языков
  • 3 веб-сайта MVC [с большим количеством общих ресурсов, а также с некоторыми уникальными ресурсами]
  • 1 общая библиотека расширений MVC
  • 1 базовая бизнес-библиотека с общими функциями и бизнес-объекты [также содержит ресурсы]
  • 3 бизнес-библиотеки с определенной бизнес-логикой для трех веб-сайтов [также с ресурсами]
  • 1 База данных SQL 2008, используемая всеми веб-сайтами, иногда отправляет локализованные электронные письма.

Я бы хотел, чтобы он был легко обслуживаемым (а также легко экспортируемым / импортируемым для перевода), не дублировался (поскольку у нас есть общие ресурсы) и понятен всем, кто сталкивается с кодом

Место ресурсов:

  • мне создать одну сборку, содержащую все переводы? И создать ссылку на эту сборку в моих проектах (даже если возможно, добавив ее на SQL-сервер)?
  • или я должен использовать контроль исходного кода для синхронизации всех файлов ресурсов?
  • другие идеи?

имя ресурса / классификация:

Итак, у нас есть локализованные электронные письма, текст на кнопках (команды, подобные текстам), метки, сообщения об ошибках, информационные сообщения и т. Д. И т. Д.

Как вы классифицируете эти элементы в файлы ресурсов, вы просто сваливаете их все в один файл? Или вы классифицируете их на строки и электронные письма файлы ресурсов, какую классификацию вы используете?

Ответы [ 3 ]

1 голос
/ 29 апреля 2009

Как упомянул Гроо, одна мега-сборка была бы плохой идеей, так как это могло бы вызвать проблему соединения. Например, если вы хотите изменить текст кнопки на веб-сайте 1, вам необходимо обновить эту сборку, что затем приведет к обновлению веб-сайтов 2 и 3, даже если для 2 и 3 не потребовалось никаких изменений вообще. , Как и во всем остальном, вы хотите изолировать свои изменения, где это возможно, чтобы, если что-то ломалось, оно ломалось как можно меньше.

Я бы определил ваши сборки так, чтобы вы могли поделиться некоторыми по мере необходимости, но иметь другие, которые содержат ресурсы, необходимые только для отдельных проектов. Из описания, которое вы дали, вот как я бы структурировал ваши ресурсы:

  • 1 файл ресурсов, относящийся к пользовательскому интерфейсу, общий доступ к веб-сайтам
  • 3 файлов ресурсов, связанных с пользовательским интерфейсом сайта
  • 1 файл ресурсов, связанных с бизнес-логикой, в базовой библиотеке
  • 3 файлов ресурсов, связанных с бизнес-логикой для конкретного сайта, которые хранятся в соответствующих проектах бизнес-логики

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

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

Что касается SQL Server, когда вы говорите, что он отправляет локализованные электронные письма, вы имеете в виду, что он делает это с помощью хранимой процедуры или что какой-то другой код использует данные из базы данных для отправки электронных писем? В любом случае, у меня нет особого ответа. Я не знаю, как SQL Server сам управляет локализацией, и если это приложение отправляет электронные письма, это во многом зависит от того, откуда должен поступить локализованный текст.

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

1 голос
/ 01 мая 2009

У нас аналогичная настройка системы; Мы используем базу данных только для текста. Затем у нас есть общая сборка, которая предоставляет методы для получения локализованных строк вместе с провайдером пользовательских выражений, поэтому мы можем использовать стандартный синтаксис <% $ Resources: zzzz%> внутри файлов aspx / ascx.

Наша база данных настроена таким образом, что мы можем предоставить текст по умолчанию для токена, а также локализованную версию и приложение (например, в упрощенной таблице «Перевод» есть следующие столбцы: (токен, локаль, приложение, NativeText) ). Таким образом, мы можем предоставить переопределения для определенных приложений, если нам нужно.

Это имеет то преимущество, что мы можем также предоставить Редактор переводов (в настоящее время мы этого не делаем, но это возможный вариант в будущем), а также экспорт / импорт переводов не так уж плох (не утверждая, что это без ошибок). - Я думаю, что перевод будет трудной темой, несмотря ни на что).

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

0 голосов
/ 28 апреля 2009

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

Что мы обычно делаем, так это чтобы каждая сборка имела свои собственные ресурсы, а затем генерировал и переводил один файл .pot из всех ссылочных проектов (для этого существует скрипт nant).

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