Я работаю над аналогичной глобализацией, где в базе данных хранится много динамического контента. Подход, который я использую для многоязычных динамических данных, выглядит следующим образом:
create table Item
(
ItemID
,Sku
,Price
,Title -- invariant, fallback culture
)
create table Item_Culture
(
ItemID
,CultureCode -- ex: en-US, en-CA, fr-CA, en-UK, fr-FR, en, fr
,Title
)
select i.ItemID, i.Sku, i.Price, coalesce(ic.Title, i.Title) as Title
from Item i
left outer join Item_Culture ic
on ic.ItemID = i.ItemID
and ic.CultureCode = @CultureCode
Где @CultureCode - это параметр, переданный из вашего приложения, а таблица "Культура" содержит список ваших различных языков / культур для справки или для указания запасных языковых зависимостей.
Вы можете расширить это для нескольких резервных языков, если это будет необходимо. Это небольшой удар по базе данных по сравнению с реализацией на одном языке, но он учитывает динамический характер ваших данных, и это просто стоимость многоязычного динамического сайта. Кэширование станет вашим другом, если у вас есть данные, которые не изменяются слишком быстро, чтобы помочь уменьшить добавленную нагрузку на базу данных.