Как сделать Многоязычный веб-сайт [закрытым]

Какое-либо тело может сказать мне, как сделать динамический многоязычный веб-сайт в PHP и MySQL? Я понятия не имею об этом. Я искал на Google и не нашел хороших решений.

Кто-либо может предоставить мне пошаговое руководство? Если возможно сделайте демонстрацию для многоязычного веб-сайта. Или отошлите меня к любой ссылке, где она объясняет детали об этом.

29
задан Lix 12 May 2014 в 07:19
поделиться

2 ответа

Краткий ответ: короткого ответа нет, так как нужно учитывать множество переменных и много работы. Итак ...

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

Во-первых, переменные решаемой задачи:

  1. Список языков: будет ли ваш сайт на заранее определенном наборе языков или он будет разнообразным / неоднородным? Например, сайт может быть полностью двуязычным на двух четко определенных языках (или, говоря другим примером, я веду сайт на английском / каталонском / испанском); или разные разделы могут быть доступны на разных наборах языков (например, посмотрите сайты MS: они в основном однородны, но такие вещи, как блоги, статьи базы знаний и некоторые документы, доступны только на подмножестве предположительно поддерживаемых языков).

  2. Источник переводов: предоставляется ли контент на каждом соответствующем языке вами или каким-либо соавтором? Или некоторые версии запускаются с помощью программного обеспечения для перевода с одного «базового» языка? Первый подход требует много дополнительной работы для создания содержимого, но дает более качественные результаты, чем второй.

  3. Сами языки: как только вы ответите на вопросы 1) и 2), вам нужно будет точно знать, с какими языками вы работаете. Обратите внимание, что если вы включаете диалекты (например, американский английский + британский английский или аргентинский испанский + испанский испанский), вы можете столкнуться с некоторыми проблемами «дублированного контента» с поисковыми системами, но подробности об этом здесь слишком не по теме (просто упоминание, чтобы вы знали о потенциальных проблемах).

  4. Вы ориентируетесь на языки абстрактно (например, мой сайт предлагает три языка, совершенно не заботясь о том, где находится посетитель: это то, что у меня есть, поэтому выберите то, что вам больше нравится); или, скорее, нацелены на разные регионы / страны? В последнем случае все может стать более сложным, так как вам может потребоваться заботиться о других вещах, помимо языков (например, о часовых поясах, валютах или соглашениях о формате даты и времени, чтобы назвать некоторые), но вы получаете преимущество от возможности использовать домены верхнего уровня для конкретных стран.

После того, как вы четко определили вышесказанное, приступим к работе. Вот наиболее важные задачи, которые вам необходимо решить:

  1. Определение языка: наиболее разумным подходом является использование параметра GET (что-то вроде? Lang = en-us в URL-адресе). Кроме того, вы можете использовать некоторые файлы cookie и / или геолокацию IP, чтобы вернуться, когда запрашивается URL-адрес без аргумента языка. Кроме того, если у вас есть средства, рассмотрите тему улучшения URL (что выглядит лучше: example.com/index.php?lang=en-us или example.com/en-us/ дом ?). Лично мне нравится мощь, которую ModRewrite предоставляет моему файлу .htaccess, но это будет работать только на серверах на базе Apache.

  2. Управление контентом: независимо от того, извлекаете ли вы контент из БД (например, контент статьи), включаете файлы (типично для хлебных крошек, меню, заголовки всего сайта и т. Д.) Или любыми другими способами, вам понадобится способ отделить каждую версию (язык) содержания. Вот несколько примеров того, как это можно сделать:

    • Для содержимого БД я лучший совет - придумать какой-нибудь твердый шаблон именования полей и придерживаться его.Например, я добавляю _en , _es или _ca ко всем языковым полям моей БД. Таким образом, я могу получить доступ к нужному контенту с помощью таких выражений, как $ row ["title_ $ lang"] .
    • Для включаемых файлов, опять же, наиболее разумным подходом является соглашение об именах файлов. В моем случае имена файлов заканчиваются на .en.php , .ca.htm и т. Д. Мои вызовы включения выглядят как include ("some-filename. $ lang.php) .
    • Время от времени вы будете выплевывать небольшие фрагменты текста прямо из вашего PHP-кода (например, при пометке заголовков таблицы). Вы можете использовать включаемый файл для каждого языка, определяющего массив "блоков" с теми же ключами, или таблицу БД, как предложил Гирт. Первый подход требует меньше усилий для разработки,на обслуживание последнего потребуется меньше усилий (особенно, если вы работаете не один).
  3. Выбор языка: очень важно, вы должны предоставить своим пользователям возможность выбирать свой собственный язык, кроме настройки аргументов GET в самом URL. Для некоторых языков «флаги» часто работают отлично, поскольку их можно понять, даже если страница изначально вернулась к языку, который пользователь вообще не знает. Для большего количества языков раскрывающееся меню кажется более эффективным (с точки зрения пространства окна просмотра), но вы должны обязательно добавить некоторые визуальные (например, нетекстовые) подсказки. Некоторые сайты заставляют вас выбирать язык при входе и имеют только ссылки на домашнюю страницу на каждом языке. Лично у меня есть три моих флага, стоящих в верхней части меню моего сайта, каждый из которых указывает на текущий адрес с измененным только аргументом языка. Такой код может работать довольно хорошо:


function translatedURI($new_lang) {
    return str_replace("lang=$lang", "lang=$new_lang", "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
}

  1. Настройка CMS: если ваш сайт (или его часть) использует какую-то CMS, доску обсуждений и т. Д., Все может стать довольно запутанным. Исходя из моего собственного опыта, у меня есть форум phpBB на моем сайте, разделенный на три основные категории (по одной для каждого языка) таким образом, что они выглядят как три независимых форума (но пользователям просто нужно войти / зарегистрироваться на одном из них, чтобы получить доступ ко всем языкам, поскольку они действительно являются категориями одной и той же доски). Настройки, которые мне пришлось внести, чтобы это работало гладко, поставили под угрозу последние остатки рассудка, которые я все еще сохраняю: S. В этих случаях я советую поискать документацию и функции поддержки для конкретного программного обеспечения, которое вы используете.

Ну, это все, что я могу сказать на данный момент.Думаю, у тебя должно быть достаточно, чтобы засучить рукава и приступить к работе. Затем, если вы наткнетесь на какую-то стену на своем пути, возвращайтесь с конкретными вопросами, и я уверен, что вы получите более конкретные ответы.

Надеюсь, это поможет.

72
ответ дан 28 November 2019 в 00:56
поделиться

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

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, но вы также можете поместить все сообщения в массив и загрузить его в память при загрузке скрипта. Пользователи всегда должны иметь возможность установить язык, который они предпочитают, не полагайтесь вслепую на языковой заголовок, установленный веб-браузером.

7
ответ дан 28 November 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: