Какое-либо тело может сказать мне, как сделать динамический многоязычный веб-сайт в PHP и MySQL? Я понятия не имею об этом. Я искал на Google и не нашел хороших решений.
Кто-либо может предоставить мне пошаговое руководство? Если возможно сделайте демонстрацию для многоязычного веб-сайта. Или отошлите меня к любой ссылке, где она объясняет детали об этом.
Краткий ответ: короткого ответа нет, так как нужно учитывать множество переменных и много работы. Итак ...
Длинный ответ: Я собираюсь разбить его на части, насколько смогу, но на столь широкий вопрос, как ваш, не существует «хорошего для всех» ответа.
Во-первых, переменные решаемой задачи:
Список языков: будет ли ваш сайт на заранее определенном наборе языков или он будет разнообразным / неоднородным? Например, сайт может быть полностью двуязычным на двух четко определенных языках (или, говоря другим примером, я веду сайт на английском / каталонском / испанском); или разные разделы могут быть доступны на разных наборах языков (например, посмотрите сайты MS: они в основном однородны, но такие вещи, как блоги, статьи базы знаний и некоторые документы, доступны только на подмножестве предположительно поддерживаемых языков).
Источник переводов: предоставляется ли контент на каждом соответствующем языке вами или каким-либо соавтором? Или некоторые версии запускаются с помощью программного обеспечения для перевода с одного «базового» языка? Первый подход требует много дополнительной работы для создания содержимого, но дает более качественные результаты, чем второй.
Сами языки: как только вы ответите на вопросы 1) и 2), вам нужно будет точно знать, с какими языками вы работаете. Обратите внимание, что если вы включаете диалекты (например, американский английский + британский английский или аргентинский испанский + испанский испанский), вы можете столкнуться с некоторыми проблемами «дублированного контента» с поисковыми системами, но подробности об этом здесь слишком не по теме (просто упоминание, чтобы вы знали о потенциальных проблемах).
Вы ориентируетесь на языки абстрактно (например, мой сайт предлагает три языка, совершенно не заботясь о том, где находится посетитель: это то, что у меня есть, поэтому выберите то, что вам больше нравится); или, скорее, нацелены на разные регионы / страны? В последнем случае все может стать более сложным, так как вам может потребоваться заботиться о других вещах, помимо языков (например, о часовых поясах, валютах или соглашениях о формате даты и времени, чтобы назвать некоторые), но вы получаете преимущество от возможности использовать домены верхнего уровня для конкретных стран.
После того, как вы четко определили вышесказанное, приступим к работе. Вот наиболее важные задачи, которые вам необходимо решить:
Определение языка: наиболее разумным подходом является использование параметра GET (что-то вроде? Lang = en-us в URL-адресе). Кроме того, вы можете использовать некоторые файлы cookie и / или геолокацию IP, чтобы вернуться, когда запрашивается URL-адрес без аргумента языка. Кроме того, если у вас есть средства, рассмотрите тему улучшения URL (что выглядит лучше: example.com/index.php?lang=en-us
или example.com/en-us/ дом
?). Лично мне нравится мощь, которую ModRewrite предоставляет моему файлу .htaccess, но это будет работать только на серверах на базе Apache.
Управление контентом: независимо от того, извлекаете ли вы контент из БД (например, контент статьи), включаете файлы (типично для хлебных крошек, меню, заголовки всего сайта и т. Д.) Или любыми другими способами, вам понадобится способ отделить каждую версию (язык) содержания. Вот несколько примеров того, как это можно сделать:
_en
, _es
или _ca
ко всем языковым полям моей БД. Таким образом, я могу получить доступ к нужному контенту с помощью таких выражений, как $ row ["title_ $ lang"]
. .en.php
, .ca.htm
и т. Д. Мои вызовы включения выглядят как include ("some-filename. $ lang.php)
. Выбор языка: очень важно, вы должны предоставить своим пользователям возможность выбирать свой собственный язык, кроме настройки аргументов GET в самом URL. Для некоторых языков «флаги» часто работают отлично, поскольку их можно понять, даже если страница изначально вернулась к языку, который пользователь вообще не знает. Для большего количества языков раскрывающееся меню кажется более эффективным (с точки зрения пространства окна просмотра), но вы должны обязательно добавить некоторые визуальные (например, нетекстовые) подсказки. Некоторые сайты заставляют вас выбирать язык при входе и имеют только ссылки на домашнюю страницу на каждом языке. Лично у меня есть три моих флага, стоящих в верхней части меню моего сайта, каждый из которых указывает на текущий адрес с измененным только аргументом языка. Такой код может работать довольно хорошо:
function translatedURI($new_lang) {
return str_replace("lang=$lang", "lang=$new_lang", "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
}
Ну, это все, что я могу сказать на данный момент.Думаю, у тебя должно быть достаточно, чтобы засучить рукава и приступить к работе. Затем, если вы наткнетесь на какую-то стену на своем пути, возвращайтесь с конкретными вопросами, и я уверен, что вы получите более конкретные ответы.
Надеюсь, это поможет.
Решение, которое я всегда использую, заключается в создании таблицы базы данных со всеми возможными сообщениями. Для каждого сообщения я использую код (аббревиатуру), чтобы найти его. Например:
lang id message
en login Login
en lostpass Lost your password?
de login Anmelden
de lostpass Paswort vergessen?
nl login Aanmelden
nl lostpass Wachtwoord vergeten?
и т.д. Поиск переводов обычно выполняется достаточно быстро с помощью запроса MySQL, но вы также можете поместить все сообщения в массив и загрузить его в память при загрузке скрипта. Пользователи всегда должны иметь возможность установить язык, который они предпочитают, не полагайтесь вслепую на языковой заголовок, установленный веб-браузером.