MySQL структура для переводов - PullRequest
5 голосов
/ 10 мая 2011

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

ТАБЛИЦА ПРОДУКТОВ (InnoDB):

 Obj_id(PK)             name                    desc
 ---------      -------------------     ------------------
     1          Million Dollar Baby    Short description is...
     2          Music Album            Another explanation...

ТАБЛИЦА ПЕРЕВОДОВ (InnoDB)

 trans_id (PK)    Obj_id (FK)   lang      field              trans
--------------   -----------   ------    --------    ---------------------
      22              1          TR        name       Milyonluk Bebek
      23              1          BA        name       Djevojka od milijun...
      24              1          TR        desc       Kisa açiklama burada
      25              1          BA        desc       Kratki opis je ovdje
      26              2          BA        name       Glazba albuma

Но проблема возникает, когда администратор хочет изменить язык по умолчанию. У меня есть два варианта решения этой проблемы:

  1. Администратор должен определить default_lang в начале проекта, и если он все еще хочет изменить default_lang в будущем, программа скажет: Go to hell.

  2. Как и первое решение, администратор должен сначала решить default_lang, но система сможет перенести новые данные default_lang из таблицы перевода в основную таблицу (на самом деле я этого не делаю).

Я думаю, что мои решения недостаточно хороши.

У вас есть лучшее представление о проблеме DEFAULT_LANG с или без изменения структуры (если это возможно, не меняйте структуру - мне это нравится)?

Ответы [ 4 ]

4 голосов
/ 10 мая 2011

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

TRANSLATIONS_TR
TRANSLATIONS_EN
TRANSLATIONS_FR
TRANSLATIONS_BR

Затем в пользовательских процедурах отображения вы решаете, какую таблицу запрашивать при отображении текста перевода.

1 голос
/ 11 июля 2012

Мой подход, я думаю, будет (я сам в процессе его создания):

Возможно (1) У продукта есть (N) имен (в зависимости от языка, при условии, что у вас только один столбец)описывая язык, например, «es», «en»)

[ Product ]—(1)—————(N)-[ProductName]
|    id   |             | name      |
                        | language  |

Может быть, это лучше, чем Product-Language в отношениях N: M:

[ Product ]-(N)—————————(M)-[Language]
|   id    |        |        |iso_code|
             (translation)  | name   |


[   Product   ]<————[ProdTranslation]———>[language]
|    id       |     | name          |    |iso_code|
|default name?|                          | name   |--- (name of language: "English")

Другой вариант - рассмотретькаждый перевод продукта означает «тип» продукта (подкласс).Логическая модель выглядит следующим образом:

[   Product   ]
|    id       |-(1)————(1)-[ EnglishProduct ]
|default name?|            | name (in eng.) |
|             |
|             |-(1)——(1)-[FrenchProduct]
|             |          | name(in fr.)|

При реализации этого в реляционной базе данных вы можете либо a) иметь 3 таблицы (в этом примере больше с большим количеством языков), либо b) поместить все это в одну таблицу.Это зависит от того, сколько языков у вас будет, размер имени / описания, производительность и т. Д.

[ Product ]
| id      |
| name_en |
| name_fr |
| name_de |

Код, запрашивающий базу данных, будет знать используемый язык, а затем запросить имя изправая колонка.

0 голосов
/ 11 мая 2011

gettext решает проблему другого типа, чем многоязычная база данных: gettext предназначен для пользовательского интерфейса, а база данных - для содержимого.

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

Многоязычная база данных предназначена для больших объемов контента, которые могут часто меняться или не меняться, как, например, названия сотен тысячкниг и фильмов, или описания тендеров.

0 голосов
/ 10 мая 2011

Вы смотрели в gettext?

http://www.gnu.org/software/gettext/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...