Как сделать локализацию сайта php
Live-code.ru :: Блог программиста
Рубрики
Самое читаемое
Полезные ресурсы
Последние комментарии
Напишу скрипт бесплатно
Сортировка массивов по возрастанию и убыванию в PHP
Звезды блога ТОП 3
Многоязычный сайт на PHP
На многих сайтах вы наверное видите где-то в углу флаги других стран, при нажатии на них сразу меняется язык сайта. Это и есть «многоязычный сайт», это очень удобно если ваш сайт посещают например русские, украинцы, румыны. В данном случае нужно написать сайт который по требованию пользователя менял язык сайт в требуемый. Каждый язык должен иметь свой собственный файл где будет хранится массив языка. Выбранный язык будет запоминаться в сессии и при каждом обращении к сайту язык останется без изменений.
Для начало, мы создадим языковые файлы для каждого языка и сохраним их в папку lang
— Русский языковый файл (lang / lang.ru.php)
— Украинский языковый файл (lang / lang.ua.php)
— Румынский языковый файл (lang / lang.ro.php)
Теперь создаем главный файл index.php который будет вызывать языковый файл в зависимости от выбора пользователя.
Вот скрин сайта который у нас получился в конечном итоге:
Теперь когда мы будем переходить по ссылкам
site.com/index.php? lang=ru (Будет русский язык, скрипт загрузит файл lang.ru.php)
и так далее для каждого языка (ru, ua, ro).
Спонсор статьи: английский по скайпу
Вопросы и может быть советы по улучшению скрипта можете оставить в комментариях ниже.
Еще записи по теме
Комментариев: 31
Хотел что то подомное сделать недавно но не знал как именно это реализовать.
Теперь более менее понял картину как должен работать многоязычный сайт.
Автор респект тебе и уважуха, ты представляешь мне даже на php su не помогли с этой проблемой по разноязычности, уважуха вам парни я хоть пример ее работы увидел за что большое вам спасибо!
Дмитрий, рад был Вам помочь
Возникла проблема, не могу решить.
При первом входе на сайт выдает
Warning: include_once(lang/lang..php) [function.include-once]: failed to open stream: No such file or directory in /home/virtwww/w_remontpc-lviv-ua_02813c27/http/demo2/about.php on line 33
Warning: include_once() [function.include]: Failed opening ‘lang/lang..php’ for inclusion (include_path=’.:’) in /home/virtwww/w_remontpc-lviv-ua_02813c27/http/demo2/about.php on line 33
вот сайт http://remontpc.lviv.ua/demo2/about.php
Warning: include_once(lang/lang..php) [function.include-once]: No such file or directory
Проблема в сессиях, они у Вас не создаются. Проверьте в файле about.php если есть инициализация сессии: session_start();
Если нет то вставьте после
irina, данная ошибка не является критической, дело в уровне обработки ошибок он у Вас самый первый, это значит, что любые ошибки или недочеты будут засвечены компилятором. Программистам следуем работать в таком режиме т.к. помогает обнаружить маленькие ошибки.
Теперь решение Вашей проблемы.
В файле index.php после
Добрый день! Подскажите, пожалуйста! Все сделал по Вашей инструкции, но сверху над страницей показывает ошибку:
Warning: main(lang/lang..php): failed to open stream: No such file or directory in z:\home\localhost\www\minisite\index.php on line 21
Warning: main(): Failed opening ‘lang/lang..php’ for inclusion (include_path=’.;/usr/local/php/PEAR’) in z:\home\localhost\www\minisite\index.php on line 21
Swat, попробуйте убрать от session_start(); символ @
Это даст возможность выявить сообщение о ошибке если она заключается в session_start
Убрал, но не помогло. Может ещё есть какой-нибудь метод?
А где у Вас в примере скрипт вот этого:»Многоязычный сайт
Потому что в себя на сайте я вставляю : вместо какого-нибудь слова. Может поэтому у меня ошибка?
А где у Вас в примере скрипт вот этого:»Многоязычный сайт
Потому что в себя на сайте я вставляю :/**/ вместо какого-нибудь слова. Может поэтому у меня ошибка?
вывожу в «php» ($Lang[‘название слова’]);
Swat, обновил архив попробуйте скачать и поставить заново. Попробуйте кликать по флагам стран и по внутренним ссылкам, если язык остается тем который Вы выбрали значит все хорошо, если же язык меняется на русский даже когда был выбран другой, то это уже проблемы с Cookie у браузера.
Большое, Вам, спасибо! Все работает!! Ошибок НЕТ!
А ещё подскажите, как перевести материал который лежит в БД (статьи, которые я добавляю на сайт)?
Весьма благодарен автору за статью! Буду признателен если ответите на вопрос который как я понимаю похож на Swat. Т.е. если в базе прописана категория товаров магазина, то как быть с ее переводом. Слышал что надо как-то прописывать в базе дополнительное поле на нужном языке. Но как это все делается подскажите пожалуйста.
Swat, Sergey, Чтобы создать динамические многоязычные статьи, очевиднее всего это создать в базе сайта таблицу статей с полями `text_ru`, `text_ua`.
Эти поля будут содержать текст в разных языках. Минус такого метода в том, что при добавлении нового языка, придется делать изменения в базе во всех статьях(переписать).
С точки зрения SEO, такой метод неправильный, не понятно к какому типу стран нужно вывести ваш сайт. Не весь материал будет адекватно воспринят.
Можно для каждого языка в отдельности делать свой под домен, ru.site.com
Каждый сайт со своей базой с конкретным языком. Тогда домен с префиксом «ru» будет пользоваться успехом в Яндекс и в русском Google, домен с префиксом «en, eu, de» будет востребован в англоязычных и в европейских регионов поисковиков Google, Yahoo.
Многоязычный сайт, подходит для статического проекта, которые предоставляют какие либо услуги для широкого круга людей, для информационных порталов нужно четко выбрать язык в котором развивается проект иначе будет весьма проблематично поддерживать данный портал(проект).
Большое человеческое Спасибо! В общем направление понял! У меня речь идет лишь о категориях товара которые находятся в базе, а остальная информация реализуется в описанном вами варианте на разных языковых файлах. И все же было бы очень даже не плохо, если бы вы в качестве примера показали допустим как строятся запросы к базе с разными языковыми полями. Т.е. вот в том примере который у вас описан выше допустим там помимо файлов какая-то часть информации находится в базе. (в полях `text_ru`, `text_ua`) чтобы не изобретать подскажите пожалуйста как измениться код.
Реализация мультиязычности на сайте без рисков для SEO
Статья из блога АРТИЗАН-ТИМ
Запуск мультиязычной версии сайта — важный шаг для проектов, нацеленных на глобальный рынок. Использование многоязычности также актуально для локальных проектов, в странах, где жители разговаривают на нескольких языках. С технической точки зрения — это не самая сложная задача, но на поверку она влечет немало скрытых рисков для SEO. О принципах безопасного внедрения мультиязычности и тонкостях ее настройки — рассказываем в нашем материале.
Три способа реализации мультиязычности
Существует три основных способа запустить многоязычную версию сайта. На преимуществах и недостатках каждого из них остановимся более подробно.
Отдельные версии на разных доменах
Речь идет о том, чтобы под конкретную языковую локализацию сделать отдельный сайт. С точки зрения лояльности поисковиков и удобства для пользователей — это самое эффективное решение. Но, как несложно догадаться, такой способ более сложный в плане технической реализации и на порядок затратнее.
Под каждую локализацию компания реализовала отдельную версию сайта. Доменные зоны наглядно отображают, на какую языковую аудиторию ориентирован каждый проект.
С точки зрения SEO преимущества такой стратегии в том, что версии ресурсов полностью автономны и не зависят друг от друга в вопросах продвижения. При этом поисковики лучше ранжируют сайты на национальных доменах в локальной выдаче. В то же время такая реализация многоязычности ― палка о двух концах. Из плюсов вытекают минусы, которые при отсутствии серьезных корпоративных бюджетов делают эту стратегию неподъемной.
В этом случае необходимо с нуля разработать несколько версий сайтов. Для каждого ресурса нужно приобрести отдельное доменное имя, которое к тому же может оказаться занятым в какой-то из зон. В дальнейшем каждая версия сайта будет нуждаться в отдельном администрировании и автономном SEO. Таким образом, бюджет на веб-поддержку и поисковое продвижение, по сути, придется умножить на количество имеющихся сайтов. Из-за своей организационной сложности и дороговизны к такому варианту прибегают редко. Обычно, это делают только крупные международные компании, с серьезными бюджетами на веб-разработку и продвижение своего бренда.
Языковые версии на поддомене
Поддомены (домены третьего уровня или субдомены) используют для создания отдельных версий сайта внутри основного проекта. Это еще один популярный способ внедрения мультиязычной архитектуры. В этом случае языковая версия сайта отображается в адресной строке через точку слева от основного названия. К слову, на поддомены могут быть вынесены не только версии сайта на другом языке, но и региональные филиалы, например, того же магазина или функционировать разделы сайта.
Такой способ создания мультиязычности — нечто среднее между отдельным сайтом и использованием разделов и папок (об этом ниже). Ему свойственны свои особенности, которые необходимо принимать во внимание. В плане технической реализации здесь не все так сложно (и дорого) как с сайтами на разных доменах, но и не так просто как может казаться изначально.
Версия на поддомене — это полностью самостоятельный сайт с отдельной базой данных. Такая архитектура требует больше ресурсов на оптимизацию, чем, если бы речь шла о создании разделов. Помимо основных работ (проработка структуры, наполнение контентом, заполнение метатегов и пр.) для всех поддоменов необходимо создать отдельный robot.txt и sitemap.xml. Что касается ссылочного веса, то хотя он и перераспределяется между основным доменом и поддоменами, происходит это не так эффективно. Передача веса от домена становится возможной главным образом за счет грамотной перелинковки, поэтому ей уделяют основное внимание в рамках внутренней SEO-оптимизации.
Чтобы улучшить пользовательский опыт, можно настроить специальный скрипт, который будет распознавать IP-адрес посетителей и автоматически перенаправлять их на нужную версию сайта.
Несмотря на все вышеописанные сложности, мультиязычная архитектура, созданная по принципу домен+поддомен, обладает важными преимуществами. При такой схеме имеется возможность переноса данных на отдельный сервер. Когда речь идет о крупных ресурсах, это становится стратегическим преимуществом, позволяющим снизить нагрузку на сайт и оптимизировать скорость его загрузки.
Размещение поддомена на отдельном сервере может сыграть на руку проектам, которые имеют стабильную аудиторию по всему миру. Например, разместив англоязычную версию сайта на иностранном сервере, а русскоязычную — у местного хостера, можно добиться оптимальной скорости загрузки сайта для всех пользователей, вне зависимости от их географической удаленности.
Отдельно стоит отметить вопрос аналитики. В случае с поддоменами она существенно упрощается, поскольку нет необходимости сегментировать данные для поддерикторий — настройка счетчика реализуется для всего поддомена.
Создание разделов на основном сайте
Создание категорий и папок на основном домене — самый популярный способ реализации мультиязычности. Такая архитектура дает больше всего преимуществ с точки зрения поискового продвижения и внедряется значительно проще, чем описанные выше варианты.
Поскольку действие происходит в рамках общего домена — ссылочный вес эффективно перераспределяется между всеми страницами. Версии документов на другом языке наследуют трастовость основного домена, что положительным образом сказывается на их позициях в выдаче. Ускоренная индексация страниц — еще один существенный плюс мультиязычной архитектуры, реализованной через папки и категории. Также, поскольку при таком подходе языковая версия является лишь одним из разделов домена — отпадает необходимость в создании отдельного Sitemap.
Реализация мультиязычности через разделы удобна тем, что изменения на сайте можно внедрить сразу на всех страницах. Это значит, что добавив какой-то функционал, например, на русскоязычной версии сайта, он будет реализован во всех остальных языковых адаптациях. С теми же поддоменами такого не получится — изменения на каждой версии придется вносить отдельно, что добавляет немало головной боли при проведении работ по внутренней оптимизации сайта.
Мультиязычность через разделы — это оптимальный вариант, если вы планируете использовать не два-три языка, а значительно больше версий. С поддоменами вы будете ограничены в этом вопросе, т.к. количество субдоменов зависит от настроек сервера. Разделов же может быть сколько угодно в рамках одного сайта. При этом не стоит забывать, что чем больше языковых версий используется на сайте, тем выше нагрузка на сервер, и потребуется больше дискового пространства.
Что касается практической реализации такого способа, то в большинстве случаев это делают автоматизированным методом, используя специальные модули, которые сами создают категории и папки под контент на другом языке. Во многих расширениях имеется возможность автоматического перевода страниц. Если такая опция отсутствует, это можно реализовать при помощи отдельных плагинов машинного перевода.
Таким образом, создание мультиязычности через папки — самый простой и доступный способ в плане реализации и наиболее эффективный с точки зрения SEO. Именно поэтому он используется на абсолютном большинстве многоязычных проектов. Но есть один существенный нюанс — в этом случае следует особенно ответственно подойти к разметке локализованных страниц.
Атрибут hreflang
Использование атрибута hreflang помогает поисковым системам идентифицировать версии страниц на разных языках. Пренебрежение этой разметкой может привести к тому, что Google и «Яндекс» посчитают страницы с переведенным контентом за дубли, что повлечет серьезные проблемы с SEO. Грамотно заданные атрибуты hreflang не только предотвратят эту ситуацию и исключат риск склейки, но и обеспечат определенные преимущества при региональном ранжировании. В этом случае поисковые системы будут формировать выдачу, учитывая языковые настройки пользователей и их местоположение.
Использование атрибута hreflang является базовой рекомендацией, вне зависимости от того каким именно способом внедрена мультиязычность на сайте. Мы не будем останавливаться на практических аспектах реализации разметки для локализованных версий страниц — подробно об использовании атрибута hreflang можно почитать в официальной справке Google и «Яндекса».
Элемент в Sitemap.xml
Оптимизация тегов
Корректная локализация тегов — еще один важный пласт работ, от которого во многом зависит качество SEO мультиязычного сайта. В идеале перевод Title, H1 и Description следует поручить профессиональному переводчику. Нечитабельные теги не только ухудшают CTR и наносят существенный урон поведенческим, но и могут расцениваться поисковыми системами как спам, что повлечет проблемы с SEO для всего сайта.
Владельцам проектов, которые не имеют возможности выделить ресурсы на перевод и вычитку метатегов, необходимо делать максимально короткие Title и H1 — так вероятность грубых ошибок при машинном переводе будет существенно ниже. Заполнением Description в таких случаях целесообразно пренебречь вовсе. Перевод тегов для страниц, которые генерируют больше всего трафика, целесообразно поручить специалисту.
Контент и другие нюансы языковой локализации
Использовать мультиязычность на сайте не имеет особого смысла, если его страницы останутся пустыми. Как и в случае с тегами, поручать перевод контента целесообразно специалистам. Когда такой возможности нет — единственной альтернативой остается машинный перевод.
Чтобы улучшить качество перевода и избежать нечитабельных текстов, которые сразу подрывают доверие к сайту, рекомендуем придерживаться следующих правил. В первую очередь необходимо сократить объем текста на переводимой странице до максимального минимума. В рекомендациях Google и «Яндекса» ничего не говорится на этот счет, но практика показывает, что уже 150 слов обеспечат гарантированное попадание страницы в индекс. Также этого объема будет достаточно, чтобы использовать в тексте несколько вхождений ключевых слов.
Используя переводчик, старайтесь максимально упрощать синтаксис исходного текста — простые короткие предложения уменьшают вероятность некорректно переведенных конструкций. Сам текст лучше переводить предложениями или небольшими абзацами, это помогает улучшить результат на выходе. Также важно обращать внимание на грамматические ошибки в исходном тексте, поскольку алгоритм не распознает такие слова и оставляет их в непереведенном виде. Адаптацию контента для главной, основных категорий и трафикогенерирующих страниц уместно поручать специалисту.
Важно не забывать, что языковая локализация сайта также предполагает перевод всех интерфейсов. В противном случае пользователи не смогут полноценно взаимодействовать с ресурсом и обеспечивать хорошие поведенческие, которые напрямую влияют на позиции сайта в выдаче. В рамках языковой адаптации дополнительно проводят аудит структуры ресурса: определяют какие страницы имеют сугубо локальную специфику и не нуждаются в переводе, например, разделы с акциями, региональными предложениями и т.д.
Как создавать сайты, готовые к локализации
Локализовать можно любой сайт – по крайней мере, мы в Alconost еще не отказали в этом ни одному клиенту. Тем не менее, результат локализации может сильно зависеть не только от наших переводчиков, а и от ваших веб-дизайнеров. Почему? Ответ на этот вопрос и еще много полезных идей – в переводе статьи опытного проджект-менеджера по локализации Роберта Ханта.
Подготовка к локализации сайтов требует адаптивного дизайна
При разработке сайтов, которым предстоит локализация, используйте адаптивный дизайн и адаптивные методы вёрстки. Кроме этого, убедитесь, что и все элементы, содержащие текст, способны менять свои размеры. Почему?
Да потому, что обычно в разных языках один и тот же текст имеет разную длину. Английский – компактный язык, на других языках текст обычно длиннее.
Сравните английское предложение и немецкий аналог:
При переводе на немецкий текст удлиняется.
Простое правило – планируйте возможность увеличения текста как минимум на 30%. Разные источники советуют ориентиры от 20% до 50%, но мой опыт подсказывает, что 30% обычно достаточно.
В своей работе я сталкиваюсь с клиентами из известных компаний по всему миру, которые до сих пор используют статичный, фиксированный по ширине дизайн, что приводит к проблемам при локализации.
В наше время нужно избегать абсолютных единиц CSS (px, in), чтобы можно было оптимизировать интерфейс под разные размеры экрана и сделать дизайн адаптивным. Адаптивность дает вам дополнительное преимущество, позволяя легче проводить локализацию.
Вместо фиксированных используйте относительные единицы, em и проценты (%) – это позволит контейнеру адаптироваться под содержимое.
Для примера взгляните, что происходит при переводе надписи с английского на филиппинский язык для кнопки фиксированной ширины:
В данном случае ширина кнопки зафиксирована в 120 пикселей, что подходит для надписи на английском языке, но при переводе текст вырос на 50% (с 105px до 175px), что и привело к переносу строки.
Для решения проблемы нужно создать адаптивную вёрстку, которая позволит кнопкам автоматически расширяться до нужных размеров.
В данном случае для предотвращения переноса строки стоит либо вообще убрать свойство ширины кнопки, либо же привязать его к ширине родительского элемента.
Уберём свойство width вовсе, и позволим кнопке адаптироваться к родительскому элементу:
Кнопка без указания ширины
Чтобы лучше контролировать ширину, мы можем задать минимальную и максимальную ширину кнопки в процентах.
Задав значение min-width в 30% и max-width в 60%, в результате мы получим:
Ширина кнопки при использовании параметров CSS min-width и max-width
При разработке вариантов дизайна для разных экранов (media-queries) учитывайте, что текст на разных языках может иметь разную длину и размер шрифта (примечание переводчика: например, для китайских или японских иероглифов, изобилующих мелкими деталями, шрифт должен быть на 15-30% крупнее). Предусмотрите возможность уменьшать размер шрифта или изменять относительный размер элементов, чтобы дизайн не ломался.
Полезные советы по локализации сайтов
Кроме общих принципов адаптивного подхода, учитывайте следующие рекомендации при создании сайтов, подготовленных к локализации:
Используйте шрифты Unicode
Шрифты Unicode содержат большое количество букв, знаков, цифр и других элементов для отображения текстов на разных языках. В качестве примеров популярных шрифтов, поддерживающих юникод, можно привести Arial и Times New Roman.
Избегайте шрифтов, не поддерживающих юникод, чтобы ваш сайт было легче переводить на другие языки.
Не используйте картинки с текстом
Если ваш сайт содержит картинки с надписями, замените их на HTML, а потом стилизуйте при помощи атрибутов CSS и @font-face. Тогда текст можно будет перевести при помощи автоматических переводчиков (примечание переводчика: хотя куда лучше пользоваться услугами агентств по локализации, чтобы получить действительно качественный перевод).
Планируйте структуру URL, которая будет пригодна для локализации
Когда разрабатываете архитектуру сайта, учитывайте, что рано или поздно вам придется локализовать его на другие языки. Время, потраченное на оценку того, как будут выглядеть URL сайта в разных языковых версиях, окупится потом, когда придётся переводить сайт на другой язык.
Nike.com (U.S.)
Nike.com (France)
Изучите особенности работы со строками в вашей среде разработки или фреймворке
Многие фреймворки разработаны с учётом возможности локализации сайтов, и в них уже встроены опции для облегчения этого процесса.
Не забудьте изучить эти возможности и используйте их с самого начала разработки сайта, чтобы его можно было без проблем перевести на другой язык при необходимости.
Перевод статьи выполнен в Alconost.
Alconost занимается локализацией приложений, игр и сайтов на 60 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов.
Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.