Entity Framework многоязычный веб-сайт с несколькими базами данных - PullRequest
1 голос
/ 15 января 2010

Поскольку вопрос немного самоочевиден, я хочу достичь цели многоязычного веб-сайта. Я использую Entity Data Model с MS SQL 2005. У меня возникла идея создать отдельную базу данных для каждого языка с точно такой же моделью и отношениями. Поэтому я могу использовать конструктор Entities, который принимает connectionString и переключать сайт на выбранный язык.

Я использую ascx в качестве языкового элемента управления, который запускает событие, и родительский aspx получает выбранный язык как целое число (из аргументов события) и вызывает метод, содержащий те же запросы linq, но контекст Entity будет создан с Строка подключения этой базы данных (языка)

Я мог только придумать это решение, потому что я думаю, что добавление нового языка потребует репликации английского языка, импортированного в Access и отправленного переводчику. Затем будет экспортирован обратно, и модель будет соответствовать (НАДЕЖДА).

Мой вопрос: действительно ли это хороший подход, или я что-то упускаю, что доставит мне больше хлопот. Заранее спасибо

Ответы [ 3 ]

1 голос
/ 15 января 2010

мульти-база данных не является хорошим решением, как только объекты в разных базах данных имеют отношения друг к другу. Обычно хорошим подходом является работа с метками на одном языке по умолчанию. Эти метки могут быть в четко определенном формате (например, «LABEL.TEXT_HELLO») или просто на базовом языке (например, «Hello World»).

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

Например, в Zend Framework вы должны написать <h1><?= $this->translate('Hello World'); ?></h1> вместо <h1>Hello World</h1> Хорошо то, что если перевод отсутствует, вы все равно можете использовать запасной вариант (в данном случае английский), чтобы показать пользователю хоть что-то.

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

ура

0 голосов
/ 16 января 2010

ОК, если вы хотите иметь возможность легко внедрить новый язык, то переизобретать функции интернационализации , уже встроенные в ASP.NET , не так, потому что это не просто ».

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

Подробнее о Интернационализация / глобализация ASP.NET ; нет необходимости изобретать свое.

0 голосов
/ 15 января 2010

Мой подход: создать таблицу Язык , в которой перечислены все доступные языки. Отнесите каждую таблицу, которая должна быть локализована, на Language . Теперь вы можете легко получить доступ к локализованному контенту, например,

Content[content_ID].HeadLine.Where(hl => hl.Language.id == "en-US")

Я с нетерпением жду возможности увидеть, что другие люди, так же как и я, все еще изучают дизайн БД и EDM.

...