У меня есть веб-сайт ASP.Net, который использует базу данных MySQL для внутренней части. Веб-сайт представляет собой систему электронной коммерции на английском языке, и мы рассматриваем возможность перевода его примерно на пять других языков (французский, испанский и т. Д.). Мы будем привлекать переводчиков-людей для выполнения перевода - мы рассмотрели автоматизированные службы, но они недостаточно хороши.
Статический текст на сайте (например, заголовки, кнопки и т. Д.) Можно легко обслуживать на нескольких языках с помощью встроенных в .Net функций локализации (файлы resx и т. Д.).
В том-то и дело, что я не очень уверен в том, как лучше хранить и извлекать многоязычный контент в базе данных. Например, есть таблица продуктов, которая включает эти поля ...
- productId (int)
- categoryId (int)
- title (varchar)
- резюме (varchar)
- описание (текст)
- функции (текст)
Текст заголовка, резюме, описания и функций должен быть доступен на всех языках.
Вот два варианта, которые я придумала ...
Создать дополнительное поле для каждого языка
Например, мы могли бы использовать titleEn, titleFr, titleEs и т. Д. Для всех языков и повторить это для всех текстовых столбцов. Затем мы адаптируем наш код для использования соответствующего поля в зависимости от выбранного языка. Это кажется немного хакерским, а также привело бы к очень большим столам. Кроме того, если мы хотим добавить дополнительные языки в будущем, добавление еще большего числа столбцов займет много времени.
Использование справочной таблицы
Мы могли бы создать новую таблицу в следующем формате ...
textId | languageId | content
-------------------------------
10 | EN | Car
10 | FR | Voiture
10 | ES | Coche
11 | EN | Bike
11 | FR | Vélo
Затем мы адаптировали бы нашу таблицу продуктов для ссылки на соответствующий textId для заголовка, резюме, описания и функций вместо того, чтобы текст сохранялся в таблице продуктов. Это кажется гораздо более элегантным, но я не могу придумать простой способ вывести эти данные из базы данных на страницу без использования сложных операторов SQL. Конечно, добавление новых языков в будущем будет очень простым по сравнению с предыдущим вариантом.
Буду очень признателен за любые предложения о наилучшем способе достижения этой цели! Есть ли какое-нибудь руководство по «лучшей практике»? Кто-нибудь делал это раньше?