Автор Тема: Поддержка сайтом нескольких языков RUS и ENG  (Прочитано 7635 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ambrella

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Нужно реализовать сайт на двух языках - подскажите как это сделать с помощью PHP?
Заранее большое спасибо!

Оффлайн galats

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #1 : 12 Ноября 2007, 16:00:52 »
А в чем трудность?

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #2 : 13 Ноября 2007, 19:35:21 »
Ambrella
Сначало надо продумать какой функционал с переводом хочеш получить.
Есть много способов, вот пару методов из них:
1)Хранить в файле, и выбирать относительно выбранного языка.
удобно в переводе контента сайта, но с информацией на сайте надо повозится.

2) создать 2 таблицы : lang_text lang_string, в них столбцы id, eng, rus, и т.д. а везде где используется перевод использовать сылки id на данные таблицы. Удобно для перевода информации так как можно в самом запросе вставить определение языка. но с контентом сайта прийдется повозится. Перевод можно сделать прямо в админ части сайта.

P.S. информация на сайте - тексты, новости которые меняются.
контент сайта - неизменяемая часть сайта.
как правильно это называется- не знаю, знатоки подскажите.
Не все является тем чем кажется.

Оффлайн brainkiller

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 527
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #3 : 13 Ноября 2007, 20:59:33 »
Проще всего будет передавать параметр, определяющий язык, через URL, и, в зависимости от его значения, подключать те или иные языковые файлы или разные шаблоны отображения для разных языков, а информацию хранить в базе (а уж как ее там организовать - решайте сами в зависимости от потребностей)

Очень условный пример чисто для иллюстрации идеи:

$lang 
$_GET[\'lang\'] == \'ru\' ? \'ru\' : \'en\';
require_once($lang.\'.php\');
$query = \'SELECT * FROM content WHERE id=\'.$id.\' AND lang=\'.$lang;

или, допустим,
$query = \'SELECT * FROM \'.$lang.\'_content WHERE id=\'.$id;

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #4 : 14 Ноября 2007, 11:54:29 »
Ребята!
У нас — бац! — три языка!
И ходят слухи, что будет четыре.

Оффлайн Ambrella

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #5 : 14 Ноября 2007, 12:27:17 »
Altaxar
Спасибо! Наполнение буду реализовывать через таблицы!
Это то что нужно лучше раз повозится...

brainkiller
Спасибо!

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #6 : 14 Ноября 2007, 19:42:01 »
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). Функционала навесить можно много, и в итоге получиться очень удобно и для перевода и для программиста и для дизайнера.
« Последнее редактирование: 14 Ноября 2007, 19:52:19 от Altaxar »
Не все является тем чем кажется.

Оффлайн brainkiller

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 527
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #7 : 14 Ноября 2007, 21:16:02 »
Цитировать
таблицы 2 lang_text lang_string, в них столбцы id, eng, rus, и т.д. первая для строк , вторая для текстов

ИМХО, лучше сделать одну таблицу с id записи и прочими ее атрибутами, не требующими перевода: дата добавления, к примеру, и т.п.; одну с языками: id, наименование; в третьей хранить тексты на разных языках: id записи, id языка, заголовок записи, ее содержимое.

А вот автоматизированное создание шаблонов для каждого языка - это гуд.

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #8 : 14 Ноября 2007, 22:26:12 »
Altaxar
очень недальновидное высказывание, осмелюсь заметить

brainkiller
Цитировать
id записи, id языка, заголовок записи, ее содержимое.

я, собственно, к этому и вел :-)

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #9 : 15 Ноября 2007, 17:31:34 »
Наверное я запутанно написал.
У меня 2 таблицы для разделения типа содержание (текст или строка до 255 символов, так при переводе легко понять, переводится текст- форма перевода текста, или переводится строка - значит форма перевода строки).
Далее множество таблиц содержат сылки на эти 2 id таблицы, поэтому если сделать
Цитировать
id записи, id языка, заголовок записи, ее содержимое.

то будут пересекаться "id записи", значит надо добавлять еще 1 колонку для обозначения какая таблица к ней обращается. и так как она будет фигурировать в запросах надо также сделать таблицу с содержанием id таблицы, имени таблицы.

У меня эти 2 таблицы содержат: id перевода, заголовок записи, и далие к каждому языку по 1 колонки. Программно не стоит труда добавить еще 1 столбец для нового языка, или удалить.
У меня также есть естественно таблица языков, где и определяется id, name , key. где name- имя языка, key - сокращенное имя для этих 2 таблиц и для передачи в url определение языка. данная таблица загружается в массив и всегда могу узнать id=>key или key=>id.
Мне нет необходимости знание к чему дання запись относится.
Так как при переводе записи и так понятно к чему относится. при переводе страницы (тоесть список всех затронутых переводов на текущей страницы, я опять каки при вычислении  этого списка вижу что за таблица к нему обращалась).
Скажите если я в чемто не прав, я считаю у меня нету проблемы:
Цитировать
очень недальновидное высказывание, осмелюсь заметить

так как все необходимые действия я делаю и можно еще многое чего добавить и без замедлении запроса по времени.
Приведите пример где мой вариант ущербный?
Не все является тем чем кажется.

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #10 : 15 Ноября 2007, 17:54:15 »
Цитировать
Приведите пример где мой вариант ущербный?

На каждый новый язык делать ALTER. Мне не нравится.

Цитировать
id записи, id языка, заголовок записи, ее содержимое.

Цитировать
будут пересекаться "id записи"

А они и должны пересекаться. Потому что первичный ключ у этой таблицы самостоятельный.

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #11 : 15 Ноября 2007, 18:37:23 »
Да вообще на вкус и цвет товарища нет, и во много нету как "правильно вот так" :)
Цитировать
На каждый новый язык делать ALTER. Мне не нравится.

не вручную же это прописывать :), а в админке при добавлении языка.
Цитировать
А они и должны пересекаться. Потому что первичный ключ у этой таблицы самостоятельный.

Не могу понять.
id записи - это сылка на таблицу где используется перевод ? если да, то например у меня 2 таблицы используют перевод, значит должно быть наоборот object1, object2, .... таблиц хранится ключ на перевод.
если "id записи" - это индекс перевода, то его не сделаешь autoincrement и тогда через доп запрос (MAX) определять следующий "id записи" , тогда мне этот вариант не нравится :)
« Последнее редактирование: 15 Ноября 2007, 18:54:50 от Altaxar »
Не все является тем чем кажется.

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #12 : 15 Ноября 2007, 18:41:26 »
Да нет.
Там вместо
Цитировать
id записи, id языка, заголовок записи, ее содержимое
будет
Цитировать
id, id записи, id языка, заголовок записи, ее содержимое

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #13 : 15 Ноября 2007, 18:54:22 »
ааа
"id записи" - это индекс на индекс перевода, тогда все ок.
но всеравно что-то мне не нравится, для перевода у нас 3 индекса (id, id на негоже, id lang, строка описания, перевод)
немало... но у меня сейчас уже моя таблица на 5000 записей и у меня уже 5 языков, 25\'000 записей и это у нас еще половины на сайне не заполненно...
Не все является тем чем кажется.

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Поддержка сайтом нескольких языков RUS и ENG
« Ответ #14 : 16 Ноября 2007, 08:48:11 »
25 000 — это такие мелочи, о которых и говорить не стоит.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28