[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Многоязычность
igor717
Всем привет.

Хотелось поднять тему многоязычности сайтов, контент которых находится в БД. Я лично реализовывал это следующим образом:

Есть переменная, со значениями ru en и тд, в зависимости от ее значения объявляется константа define('LANGUAGE', '_ru'). При выборке из БД FROM `pages". LANGUAGE ."`.

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



Спустя 10 минут, 18 секунд (19.07.2010 - 10:55) qpayct написал(а):
есть масса способов. через БД я когда-то тоже пробовал..... это не оправдывается.

ИМХО. самое лучшее - делать шаблоны или массивы.
так же можно переводить при помощи сторонних API таких как google translate. минус этого подхода в том, что перевод получается корявый

Спустя 4 минуты, 18 секунд (19.07.2010 - 11:00) igor717 написал(а):
А по чему это не оправдывается?

Спустя 5 минут, 9 секунд (19.07.2010 - 11:05) qpayct написал(а):
вот опиши структуру своей таблицы языков и как они у тебя выводятся на страницу, я покажу

Спустя 10 минут, 5 секунд (19.07.2010 - 11:15) igor717 написал(а):
две идентичные таблицы вывод осуществляется по url (в таблицах он как id не повторяется)

Спустя 1 минута, 8 секунд (19.07.2010 - 11:16) qpayct написал(а):
таблица для каждого языка отдельно?

Спустя 1 минута, 8 секунд (19.07.2010 - 11:17) igor717 написал(а):
да

Спустя 53 секунды (19.07.2010 - 11:18) igor717 написал(а):
впринце можно конечно и общую, тогда нужно еже одно поле с версией языка

Спустя 3 минуты, 3 секунды (19.07.2010 - 11:21) Basili4 написал(а):
igor717
если в одной таблице.
Я тут вижу проблему что в запросах запутаться можно.

Спустя 24 минуты, 38 секунд (19.07.2010 - 11:46) igor717 написал(а):
Basili4, почему запрос делаешь как буд-то и для одного языка, просто добавляешь условие или префикс к таблицы (если таблицы разные).

Цитата
ИМХО. самое лучшее - делать шаблоны или массивы.

Всмысле, для каждой страничке свой шаблон? А как же динамика?

Спустя 8 минут, 38 секунд (19.07.2010 - 11:54) sergeiss написал(а):
Я лично (пока) не сталкивался с многоязычностью. Но мне кажется очень перспективной идея использовать таблицу, где в одной колонке есть айди, и есть колонки для каждого из языков.
При добавке языка надо будет добавить колонку... Но делаться это будет настолько редко, что не должно быть проблемой smile.gif
И в отдельной таблице храним краткие имена для языков.

Структура основной таблицы будет выглядеть примерно так:
id_content | content_ru | content_ua | content_en

При формировании запроса указать правильные "суффиксы" для колонок - это не проблема smile.gif Делается элементарно. Берём букоффки из специальной таблицы, соответствующие выбранному языку, и прибавляем к именам колонок.

Спустя 16 минут, 51 секунда (19.07.2010 - 12:11) waldicom написал(а):
Цитата (sergeiss @ 19.07.2010 - 10:54)
Структура основной таблицы будет выглядеть примерно так:
id_content | content_ru | content_ua | content_en


Что будем делать, если надо добавить еще один язык?

Спустя 6 минут, 34 секунды (19.07.2010 - 12:18) igor717 написал(а):
sergeiss, да это вариант тоже неплохой, я о нем думал, вот только придется кучу колонок добавлять имя, контент, ceo (аж 3 колонки), описание и могут быть и другие, а если еще языков много... Не знаю насколько это практично...

Мне кажется, что оптимальней с колонкой lang к примеру, она и будет указывать на принадлежность к языку, а запрос составить тоже не проблема. Но в этом варианте могут быть проблемы при добавлении вложенного контента (придется контент добавлять для каждого языка отдельно).

А если рассмотреть вариант с разными таблицами... Может вот она - лучшая решение? smile.gif

Даже не знаю...

Спустя 7 минут, 13 секунд (19.07.2010 - 12:25) sergeiss написал(а):
Цитата (waldicom @ 19.07.2010 - 13:11)
Что будем делать, если надо добавить еще один язык?

Цитата (sergeiss @ 19.07.2010 - 12:54)
При добавке языка надо будет добавить колонку... Но делаться это будет настолько редко, что не должно быть проблемой

Вряд ли планируется каждый день добавлять/удалять языки.

Спустя 3 минуты, 53 секунды (19.07.2010 - 12:29) inpost написал(а):
sergeiss я так и делал многоязычность =)
waldicom Тогда уже появляется куда интереснее вопросы, а можно ли добавлять колонки с полями для уже созданной таблицы, к примеру сontent_ge, и т.д.??

Спустя 48 секунд (19.07.2010 - 12:30) igor717 написал(а):
А вообще если подумать над вариантом sergeiss то можно даже такую штуку реализовать на случай отсутствия контента нужного языка: Проверку, если поле (к примеру content_en) пустое, то выводи дефолтное...

Спустя 15 минут, 17 секунд (19.07.2010 - 12:45) igor717 написал(а):
sergeiss, извините не внимательно прочел, я подумал что будет одна общая таблица (где будет все), а Ваш вариант отличается только реализацией от моего второго
Цитата
Мне кажется, что оптимальней с колонкой lang к примеру, она и будет указывать на принадлежность к языку, а запрос составить тоже не проблема. Но в этом варианте могут быть проблемы при добавлении вложенного контента (придется контент добавлять для каждого языка отдельно).


этот даже проще в реализации...

Спустя 1 час, 1 минута, 17 секунд (19.07.2010 - 13:46) qpayct написал(а):
Цитата (igor717 @ 19.07.2010 - 10:46)
Цитата
ИМХО. самое лучшее - делать шаблоны или массивы.

Всмысле, для каждой страничке свой шаблон? А как же динамика?

можно по разному. шаблоны для того и придуманы, чтоб без выгрузки из БД и распределения что куда, всё красиво, а главное быстро и динамично комплектовать. работать с таким сайтом будет просто удовольствие: вместо того, чтобы заходить каждый раз и рыскать по бд берёшь и заходишь в language/ru/menu.tpl и т.п.

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

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

Спустя 45 минут, 8 секунд (19.07.2010 - 14:32) igor717 написал(а):
Цитата
делаешь одну страницу шаблон меню допустим, в неё вставляешь переменные пхп содержащие перевод - динамично, а можно и для каждого языка сделать отдельную страницу. в любом случае намного удобней и быстрей работать чем с таблицами, которых может быть и больше 50 штук в итоге


Понятно что 100% контента сайта держать в базе не стоит, но некоторые части страниц все же должны находится в БД без этого никуда... Что-то можно и даже нужно определить и переменными пхп в шаблонах.

Цитата
всё зависит в первую очередь от того, что вообще надо и зачем. так как ты не даёшь какой либо информации остаётся только тыкать пальцем в небо


Конкретно, так конкретно мне ничего и не надо, просто хотел узнать как кто реализует многоязычность, поучится у других, улучшить то что есть. Цель: обучение, повышение квалификации или что-то в этом роде smile.gif

Спустя 5 минут, 55 секунд (19.07.2010 - 14:37) Adil написал(а):
Зачем отдельная таблица, для каждого языка?
Можно сделать таблицу langs. В котором id,name

И langvars. В котором id,lang_id,var

И все. Делаем некий класс или функцию, который по id и lang_id выбирает слово.

$lang->word(133, "ru");

Легко из админки добавлять языки и слова.

Спустя 6 минут, 40 секунд (19.07.2010 - 14:44) igor717 написал(а):
Adil, вот кстате про это и предыдущий пост. За отдельными словами лазить в БД по мне так не стоит, лучше их задавать в языковых файлах переменными или константами. Ну а конент все же по мне лучше брать так (на отдельные таблицы разбивать не надо - запросы объединять не надо):

Цитата
Мне кажется, что оптимальней с колонкой lang к примеру, она и будет указывать на принадлежность к языку, а запрос составить тоже не проблема.


Это одна таблица

Спустя 4 минуты, 12 секунд (19.07.2010 - 14:48) Wird_34 написал(а):
Что-то я не видел скриптов с многоязычностью реализованной при помощи базы данных, да и мне кажется это не целесообразным, плюс этот способ мне кажется неэффективным. Чтобы добавить новый язык нужно будет или отдельно скрипт для этого писать или лезть в базу данных, т. е. человек в этом не разбирающийся сделать не сможет, или какой-то модуль к сайту делать для перевода, что опять таки не целесообразно. В общем одни минусы не вижу смысла в этом.

Спустя 33 минуты, 23 секунды (19.07.2010 - 15:22) sergeiss написал(а):
Цитата (Wird_34 @ 19.07.2010 - 15:48)
Чтобы добавить новый язык нужно будет или отдельно скрипт для этого писать или лезть в базу данных

Интересная мысль... А если делать такую фишку БЕЗ БД, то что, не надо никаких специальных финтифлюшек делать в коде, что было лёгкое переключение между языками, добавление/удаление языков?

Спустя 8 минут, 27 секунд (19.07.2010 - 15:30) Wird_34 написал(а):
В случае со сценариями, а не базой данных, код нужен будет только для их обнаружения и добавления, если не найдено значит нет. А код для переключения языка конечно писать придется, я об этом ничего не говорил.

Спустя 4 минуты, 20 секунд (19.07.2010 - 15:34) Семён написал(а):
Цитата (sergeiss @ 19.07.2010 - 12:54)
Я лично (пока) не сталкивался с многоязычностью. Но мне кажется очень перспективной идея использовать таблицу, где в одной колонке есть айди, и есть колонки для каждого из языков.
При добавке языка надо будет добавить колонку... Но делаться это будет настолько редко, что не должно быть проблемой smile.gif
И в отдельной таблице храним краткие имена для языков.

Структура основной таблицы будет выглядеть примерно так:
id_content | content_ru | content_ua | content_en

При формировании запроса указать правильные "суффиксы" для колонок - это не проблема smile.gif Делается элементарно. Берём букоффки из специальной таблицы, соответствующие выбранному языку, и прибавляем к именам колонок.

Солидарен с данной реализацией.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.