|
|
|
Добавление локализации в БД
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Встала задача локализовать сайт (до этого был только на русском). В базе есть множество таблиц, из которых читаются данные (например, новости, вопросы, предложения и т.д.). Пример пары таблиц: news_id news_titile news_announce news_text faq_id faq_question faq_answer и т.д. Собственно вопрос: как добавить в БД гибкую поддержку для локализации? В примере БД AdventureWorks видел в нескольких таблицах поля для переводов, типа EnglishCountryRegionName, SpanishCountryRegionName и т.д., но делать так же, чтобы получилось нечто подобное news_id russian_news_titile russian_news_announce russian_news_text english_news_titile english_news_announce english_news_text считаю неправильным. Универсальная структура в голову как-то не приходит, поскольку таблицы разные, и количество полей в них тоже разное. Например, сделаю таблицу языков language_id language_name а как потом ее связывать с другими таблицами? Все равно получится что-то нечто вышеприведенного примера с кучей полей. Может кто-то занимался подобным и предложит гибкую структуру? Спасибо заранее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 16:37 |
|
||
|
Добавление локализации в БД
|
|||
|---|---|---|---|
|
#18+
Наиболее простое "универсальное" решение - добавить во все таблицы поле language_id с заменой первичного ключа (id) на пару (id, language_id), внешние ключи, аналогично, где нужно сделать по двум полям. Кроме того и таблицы языков сделать таблицу предпочтений пользователей (в каком порядке они предпочитают языки). Тогда у одной новости (id) будет некоторое количество версий (по языкам), а запрос сможет отобрать текст на более удобном пользователю языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 17:32 |
|
||
|
Добавление локализации в БД
|
|||
|---|---|---|---|
|
#18+
> news_id, news_titile, news_announce, news_text > language_id, language_name new_news_id, news_rel, language_rel, ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 17:55 |
|
||
|
Добавление локализации в БД
|
|||
|---|---|---|---|
|
#18+
Спасибо, буду пробовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 18:05 |
|
||
|
Добавление локализации в БД
|
|||
|---|---|---|---|
|
#18+
Yaroslav82, локализация - это как бы больше, чем просто языковые эквиваленты. Если вы реально хотите локализованную версию, то рефакторинг базы данных скорее всего будет полным. Локализация - это и технические различия, и культурные особенности, и законодательные ограничения. Т. е. достаточно большое количество геморроя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 18:13 |
|
||
|
Добавление локализации в БД
|
|||
|---|---|---|---|
|
#18+
guest_20040621, это понятно. но в данном случае под локализацией понимается просто перевод контента на другие языки (новости, вопросы, предложения и т.д.), а также страниц (но это уже стандартный ASP.NET-овский механизм), чтобы с сайтом могли работать заказчики из других стран ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 18:18 |
|
||
|
Добавление локализации в БД
|
|||
|---|---|---|---|
|
#18+
Надо получить записи такого вида news_lang_id news_idlang_idnews_headernews_previewtextnews_fulltextnews_posteddate111049тексттексттекст14.02.2011211033texttexttext14.02.2011 Тогда я, наверное, неправильно поставил в ER-диаграмме PK для news_id? В этом случае я не смогу присвоить полю news_id для двух разных записей одно и то же значение. Если так, как тогда формировать одинаковые id для двух записей, отличающихся только значением локали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2011, 20:16 |
|
||
|
Добавление локализации в БД
|
|||
|---|---|---|---|
|
#18+
Вероятно, на примере новостей и FAQ можно реализовать вот такую схему: LANGUAGE (LANG_ID, NAME) NEWS (NEWS_ID, PUBLISH_DATE) NEWS_CONTENT (NEWS_ID, LANG_ID, HEADER, PREVIEW_TEXT, FULL_TEXT) FAQ (FAQ_ID, PUBLISH_DATE) FAQ_CONTENT (FAQ_ID, LANG_ID, QUESTION, ANSWER) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2011, 00:23 |
|
||
|
Добавление локализации в БД
|
|||
|---|---|---|---|
|
#18+
JohnSparrow, Спасибо, идея понятна. А что делать в случае, если в первую таблицу не удастся выделить какое-то поле (как, например, news_id, publich_date). Вводить какое-то искусственное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2011, 11:09 |
|
||
|
Добавление локализации в БД
|
|||
|---|---|---|---|
|
#18+
Yaroslav82, да хоть одно единственное оставляй :). вопрос в другом - тебе же нужно связать одну и ту же новость на разных языках - это и есть её id (внутренний) + атрибуты прикладные.... ну как-то же ты понимаешь, что новость одна и та же? Код, автор, дата - атрибуты по-любэ найдутся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2011, 14:53 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36997798&tid=1542315]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
416ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 246ms |
| total: | 790ms |

| 0 / 0 |
