Сложно ответить, так как это зависит от ваших конкретных потребностей. Что мы имеем в одном месте, так это (на основе модели БД, описанной в другом вопросе):
- бизнес-объекты моделируются после базы данных, что означает, что у нас есть класс Product, который имеет коллекцию объектов ProductTranslation
- в классе Product у нас есть свойства для многоязычных данных, например, Описание
- Получатель этих свойств ищет правильный объект перевода (на основе текущего языка) и возвращает соответствующее значение
очень простой пример (показаны только соответствующие части):
class ProductTranslation
{
public string Description;
}
public class Product
{
private List<ProductTranslation> _translations;
private ProductTranslation GetTranslation(string language)
{
// return translation for specified language
// or return translation for default language
}
public string Description
{
get
{
return GetTranslation(GetCurrentLanguage()).Description;
}
}
}
Мы выбрали этот подход для веб-приложения ASP.NET. CurrentLanguage может отличаться для каждого пользователя (пользователи могут выбирать предпочитаемый язык для пользовательского интерфейса и данных). Этот подход позволяет нам кэшировать данные глобально для всех пользователей.
В зависимости от ваших потребностей этот подход может быть не лучшим. Например. может быть, лучше смоделировать таблицы Product и ProductTranslation как один бизнес-объект (Product), который затем загружается для определенного языка (например, если данные предназначены только для чтения и не требуется кэшировать их для всего приложения).