Popoff
popoff.donetsk.ua
мультиязыковой проект: перевод нескольких сообщений на наиболее похожие языки
делаю многоязыковой проект. сообщения храню в базе данных (одни модераторы могут добавлять свои сообщения, которые будут переводиться на другие языки другими модераторами). поэтому возможны ситуации, когда перевод существует не для всех рабочих языков сайта. есть отдельная таблица, в которой для каждой пары языков хранится степень похожести этих языков.
если я хочу выбрать сообщение в переводе на наиболее похожий язык (после проверки того, что нет перевода на нужный язык), то я делаю примерно такой запрос:
[sql]select TMsg.sMsg from TMsg,TSim where TMsg.kMsg=$kMsg and TMsg.kLang=TSim.kLang2 and TSim.kLang1=$kLang order by kSim limit 1[/sql]где TMsg - таблица сообщений, kLang - код языка, TSim - таблица похожести языков. при переводе с kLang1 в первую очередь берем те kLang2, для которых kSim минимальна.
необходимо в базе данных хранить, например, названия стран и городов на всех языках. возникла ситуация, когда пользователю нужно показать список всех городов заданой страны. известно, что для каждого города есть название как минимум на одном каком-то языке.
как рабочий вариант рассматривается смесь sql+php, когда я выбираю сначала коды всех городов заданной страны (1-й запрос), потом для каждого города ищу перевод (грубо - n запрорсов), собираю все переводы в массив и потом сортирую.
другой вариант - одним запросом вытягиваю все переводы всех городов, тогда при выводе списка городов я просто должен буду проигнорировать ненужные переводы. вариант, когда сообщения сортируются сначала по похожести языков, а потом по алфавиту пойдет.
вариант, в котором я просто не вывожу те города, для которых нет перевода не подходит, потому что он будет вводить пользователя в заблуждение.
недостатки обоих вариантов очевидны. есть ли у кого какие соображения по поводу оптимизации?
делаю многоязыковой проект. сообщения храню в базе данных (одни модераторы могут добавлять свои сообщения, которые будут переводиться на другие языки другими модераторами). поэтому возможны ситуации, когда перевод существует не для всех рабочих языков сайта. есть отдельная таблица, в которой для каждой пары языков хранится степень похожести этих языков.
если я хочу выбрать сообщение в переводе на наиболее похожий язык (после проверки того, что нет перевода на нужный язык), то я делаю примерно такой запрос:
[sql]select TMsg.sMsg from TMsg,TSim where TMsg.kMsg=$kMsg and TMsg.kLang=TSim.kLang2 and TSim.kLang1=$kLang order by kSim limit 1[/sql]где TMsg - таблица сообщений, kLang - код языка, TSim - таблица похожести языков. при переводе с kLang1 в первую очередь берем те kLang2, для которых kSim минимальна.
необходимо в базе данных хранить, например, названия стран и городов на всех языках. возникла ситуация, когда пользователю нужно показать список всех городов заданой страны. известно, что для каждого города есть название как минимум на одном каком-то языке.
как рабочий вариант рассматривается смесь sql+php, когда я выбираю сначала коды всех городов заданной страны (1-й запрос), потом для каждого города ищу перевод (грубо - n запрорсов), собираю все переводы в массив и потом сортирую.
другой вариант - одним запросом вытягиваю все переводы всех городов, тогда при выводе списка городов я просто должен буду проигнорировать ненужные переводы. вариант, когда сообщения сортируются сначала по похожести языков, а потом по алфавиту пойдет.
вариант, в котором я просто не вывожу те города, для которых нет перевода не подходит, потому что он будет вводить пользователя в заблуждение.
недостатки обоих вариантов очевидны. есть ли у кого какие соображения по поводу оптимизации?