Как-то странно, что этой теме посвящено так мало статей. Я, признаться, думал, что есть много красивых решений, но, немного погуглив, обнаружил только наборы плагинов. И никакой теории. Восполним этот пробел.
Реализация мультиязычности (сайта на нескольких языках) полностью зависит от постановки задачи. Фактически есть есть два возможных варианта: синхронный и асинхронный. В синхронном варианте (встречающемся не так уж и часто, как принято думать) все статьи и элементы сайта совпадают на разных языках. Или бытовым языком: на какой бы язык вы не перешли на сайте, все будет одинаково, только на другом языке.
В асинхронном варианте сайты неравнозначны. Это может быть и всего одна страничка на другом языке (http://tochkaopory.ru/ - http://tochkaopory.ru/indexen.php), и полноценный сайт (http://centrodent.ru/ - http://centrodent.ru/index.php?lang=en).
Типичный способ реализации синхронного варианта - удвоение полей. Т.е. на каждый язык добавляются поля на другом языке. Обычно к названию таких полей в таблице MySQL добавляется префикс. В шаблоне и виджетах добавляется обработка переменной, отвечающей за текущий язык - вместо поля NAME выводится, например, NAME{LANG}, где {LANG} может быть равной _RUS или _ENG в зависимости от выбранного языка. Работа это муторная и длительная, так что обычно у любой студии уже есть наработки на этот случай для нужных модулей в системе управления сайтом (CMS).
После полной реализации у пользователя есть единый вход, но на каждую новость/статью/единицу контента он должен заполнять и поля на другом языке.
Другой способ реализации синхронного варианта не является синхронным. Но тем не менее часто именно так используется. Ставятся два независимых сайта с одинаковыми настройками и заполняются на разном языке. Обычно такие сайты разведены по разным папкам или поддоменам. Управление ими чаще всего вырожадется в асинхронность двух версий спустя какое-то время. Да и требования к хостингу в таком случае вырастает. Вот пример такого сайта на трех базах MySQL: http://villa-severin.ru/
Асинхронные сайты чаще всего реализуются, как пример выше. Но есть еще два варианта реализации. Одностраничный и привязка контентной единицы к языку.
В одностраничном случае делается вывод одной (реже - нескольких) единицы контента вне основного шаблона сайта - убираются или заменяются на иноязычные аналоги все навигационные ссылки и графические элементы. Как ни странно, почти в любой CMS это реально. Уникальная ссылка на эту страницу вешается на флажок. Переход на полную версию вешается на другой флажок.
Привязка контентной единицы (статьи, новости, картинки и т.п.) к языку сложнее и требует существенного допиливания движка. К слову, мы делали это один единственный раз в своей практике. Суть: на нужный язык выводится только тот контент, который привязан к данному языку, а так все хранится в одной админке. В каком-то смысле это появление у контента еще одного измерения - языка. Обычно-то CMS обходится всего одним - привязкой к разделу или модулю. Если кратко вдаваться в технические детали, то у любой единицы контента при добавлении ее устанавливается критерий Язык. И в дальнейшем он определяет, на какой версии (по языку) статью или новость вывести. В итоге сайты на разных языках растут независимо, но каша в каталоге статей/новостей на разных языках все-таки смущает неопытных контентщиков.
Пару слов о смене дизайна (и/или навигации) под язык. Опытным путем мы давно остановились на контентных файлах под каждый язык. Тогда переход на любой другой язык не требует, к примеру, расширения языковой таблицы в базе - надо просто перевести текстовый файл с переменными и сделать подключение его по клику на флажке. В этом же файле прописываются и пути к графической части сайта (если есть элементы, которые заменяются). Такой способ используется не только для мультиязычных сайтов, но и для паркованных на один домен сайтов, когда множеству доменов надо присвоить разные шаблоны.
В целом же, для создания мультиязычного сайта в идеальном виде вам без допиливания не обойтись. Разве что у вас случай самого простого сайта на разных языках.
Реализация мультиязычности (сайта на нескольких языках) полностью зависит от постановки задачи. Фактически есть есть два возможных варианта: синхронный и асинхронный. В синхронном варианте (встречающемся не так уж и часто, как принято думать) все статьи и элементы сайта совпадают на разных языках. Или бытовым языком: на какой бы язык вы не перешли на сайте, все будет одинаково, только на другом языке.
В асинхронном варианте сайты неравнозначны. Это может быть и всего одна страничка на другом языке (http://tochkaopory.ru/ - http://tochkaopory.ru/indexen.php), и полноценный сайт (http://centrodent.ru/ - http://centrodent.ru/index.php?lang=en).
Типичный способ реализации синхронного варианта - удвоение полей. Т.е. на каждый язык добавляются поля на другом языке. Обычно к названию таких полей в таблице MySQL добавляется префикс. В шаблоне и виджетах добавляется обработка переменной, отвечающей за текущий язык - вместо поля NAME выводится, например, NAME{LANG}, где {LANG} может быть равной _RUS или _ENG в зависимости от выбранного языка. Работа это муторная и длительная, так что обычно у любой студии уже есть наработки на этот случай для нужных модулей в системе управления сайтом (CMS).
После полной реализации у пользователя есть единый вход, но на каждую новость/статью/единицу контента он должен заполнять и поля на другом языке.
Другой способ реализации синхронного варианта не является синхронным. Но тем не менее часто именно так используется. Ставятся два независимых сайта с одинаковыми настройками и заполняются на разном языке. Обычно такие сайты разведены по разным папкам или поддоменам. Управление ими чаще всего вырожадется в асинхронность двух версий спустя какое-то время. Да и требования к хостингу в таком случае вырастает. Вот пример такого сайта на трех базах MySQL: http://villa-severin.ru/
Асинхронные сайты чаще всего реализуются, как пример выше. Но есть еще два варианта реализации. Одностраничный и привязка контентной единицы к языку.
В одностраничном случае делается вывод одной (реже - нескольких) единицы контента вне основного шаблона сайта - убираются или заменяются на иноязычные аналоги все навигационные ссылки и графические элементы. Как ни странно, почти в любой CMS это реально. Уникальная ссылка на эту страницу вешается на флажок. Переход на полную версию вешается на другой флажок.
Привязка контентной единицы (статьи, новости, картинки и т.п.) к языку сложнее и требует существенного допиливания движка. К слову, мы делали это один единственный раз в своей практике. Суть: на нужный язык выводится только тот контент, который привязан к данному языку, а так все хранится в одной админке. В каком-то смысле это появление у контента еще одного измерения - языка. Обычно-то CMS обходится всего одним - привязкой к разделу или модулю. Если кратко вдаваться в технические детали, то у любой единицы контента при добавлении ее устанавливается критерий Язык. И в дальнейшем он определяет, на какой версии (по языку) статью или новость вывести. В итоге сайты на разных языках растут независимо, но каша в каталоге статей/новостей на разных языках все-таки смущает неопытных контентщиков.
Пару слов о смене дизайна (и/или навигации) под язык. Опытным путем мы давно остановились на контентных файлах под каждый язык. Тогда переход на любой другой язык не требует, к примеру, расширения языковой таблицы в базе - надо просто перевести текстовый файл с переменными и сделать подключение его по клику на флажке. В этом же файле прописываются и пути к графической части сайта (если есть элементы, которые заменяются). Такой способ используется не только для мультиязычных сайтов, но и для паркованных на один домен сайтов, когда множеству доменов надо присвоить разные шаблоны.
В целом же, для создания мультиязычного сайта в идеальном виде вам без допиливания не обойтись. Разве что у вас случай самого простого сайта на разных языках.