Программирование > PHP
Поддержка сайтом нескольких языков RUS и ENG
Ambrella:
Altaxar
Спасибо! Наполнение буду реализовывать через таблицы!
Это то что нужно лучше раз повозится...
brainkiller
Спасибо!
Altaxar:
hanslinger
да хоть 10 :) языков, не мне же переводить ;)
Ambrella
Да второй вариант, я реализовал.
Причем прикол может быть если в PHP в работе с MySQL отключено добавление колонок, тогда не добавишь через админку язык.
вот пару тонкостей на счет как это реализовать:
1) таблицы 2 lang_text lang_string, в них столбцы id, eng, rus, и т.д. первая для строк , вторая для текстов.
2) в эти таблицы можно добавить 2 колонки : table_name, tabel_id - где будет записываться, которая таблица к ней обращается и естественно индекс записи. Поможет в последствии в переводе.
3) запрос с переводом может выглядеть так:
"SELECT cont.$lang as text FROM object obj LEFT JOIN lang_text cont on cont.id=obj.name_id"
4) Перевод шаблонов, всеравно каким шабланизатором, сделал так:
создаем еще 1 папку для шаблонов например instal_tpl и основная например templates.
Правим все шаблоны в папке instal_tpl, а в админке делаем функцию update, которая преобразует шаблоны следующим методом в папку templates:
а) Создадим дополнительные обозначение, например $S$ и $T$.
и все слова для перевода в шаблоне экранируем следующим методом " bla bla $S$Name$S$ bla bla $T$text$T$ bla bla " где S -означает строка а T- текст, соотвественно будет выбрана таблица для содержания текста. далее скрипт запишет в базу имя(индекс) шаблона и соотвественно начальное значение в одном из языков. А за место экранированных частей запишит
"bla bla bla bla bla bla "
перед запуском шаблона вытягиваем все переводы в нужном языке данного шаблона в массив $content - а 1,2, .... соотвественно индекс перевода.
P.S. Это только основа, что я использую (вообще я использую частично функционал Smarty). Функционала навесить можно много, и в итоге получиться очень удобно и для перевода и для программиста и для дизайнера.
brainkiller:
--- Цитировать ---таблицы 2 lang_text lang_string, в них столбцы id, eng, rus, и т.д. первая для строк , вторая для текстов
--- Конец цитаты ---
ИМХО, лучше сделать одну таблицу с id записи и прочими ее атрибутами, не требующими перевода: дата добавления, к примеру, и т.п.; одну с языками: id, наименование; в третьей хранить тексты на разных языках: id записи, id языка, заголовок записи, ее содержимое.
А вот автоматизированное создание шаблонов для каждого языка - это гуд.
hanslinger:
Altaxar
очень недальновидное высказывание, осмелюсь заметить
brainkiller
--- Цитировать --- id записи, id языка, заголовок записи, ее содержимое.
--- Конец цитаты ---
я, собственно, к этому и вел :-)
Altaxar:
Наверное я запутанно написал.
У меня 2 таблицы для разделения типа содержание (текст или строка до 255 символов, так при переводе легко понять, переводится текст- форма перевода текста, или переводится строка - значит форма перевода строки).
Далее множество таблиц содержат сылки на эти 2 id таблицы, поэтому если сделать
--- Цитировать ---id записи, id языка, заголовок записи, ее содержимое.
--- Конец цитаты ---
то будут пересекаться "id записи", значит надо добавлять еще 1 колонку для обозначения какая таблица к ней обращается. и так как она будет фигурировать в запросах надо также сделать таблицу с содержанием id таблицы, имени таблицы.
У меня эти 2 таблицы содержат: id перевода, заголовок записи, и далие к каждому языку по 1 колонки. Программно не стоит труда добавить еще 1 столбец для нового языка, или удалить.
У меня также есть естественно таблица языков, где и определяется id, name , key. где name- имя языка, key - сокращенное имя для этих 2 таблиц и для передачи в url определение языка. данная таблица загружается в массив и всегда могу узнать id=>key или key=>id.
Мне нет необходимости знание к чему дання запись относится.
Так как при переводе записи и так понятно к чему относится. при переводе страницы (тоесть список всех затронутых переводов на текущей страницы, я опять каки при вычислении этого списка вижу что за таблица к нему обращалась).
Скажите если я в чемто не прав, я считаю у меня нету проблемы:
--- Цитировать ---очень недальновидное высказывание, осмелюсь заметить
--- Конец цитаты ---
так как все необходимые действия я делаю и можно еще многое чего добавить и без замедлении запроса по времени.
Приведите пример где мой вариант ущербный?
Навигация
Перейти к полной версии