Трудности перевода: как построить мультиязычный сайт...
TRANSCRIPT
![Page 1: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/1.jpg)
Трудности перевода: как построить мультиязычный сайт
на WordPress
![Page 2: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/2.jpg)
Сайт на другом языке (языках)
На сайте только один язык?
ДаНет
НетДа
Локализация → 1
Мультиязычный сайт → 3
Языковые версии сайта → 2
Контент на разных языках должен совпадать
![Page 3: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/3.jpg)
Утилита Unix gettext()
Источники данных для утилиты gettext() - файлы .mo, скомпилированные “языковые БД” особой структуры
То, из чего компилируютя файлы .mo - файлы .po
Локализация → 1
![Page 4: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/4.jpg)
1 -> язык2 -> языка11345 -> языковязыки4 варианта
Особая проблема - мультиязычные формыРаботает утилита Unix ngettext()
Запись мультиязычной (plural) формы на псевдоязыке в заголовке файла .poУникальна для каждого языка
![Page 5: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/5.jpg)
Альтернатива gettext() - база данных
Вызов gettext() в PHP
*nix вызывает свою утилиту gettext()
Обращение к файлу .mo
Работа gettext() в файле .mo по поиску словопары
Найдено?
отдаем то что найдено
Да
отдаем оригинал
Нет
Загрузка страницы
Выгрузка из БД всех словопар в виде массива в память
Массив словопар [ ]
Вызов gettext() в PHP
хук gettext()
Повышение производительности: нет ни обращения к файловой системе, ни механизма поиска в файле .mo
![Page 6: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/6.jpg)
Запись URL мультиязычных сайтов и языковых версий сайта
http://site.com/meetup-page/?lang=fi
http://site.com/lang/fi/meetup-page/
http://fi.site.com/meetup-page/
RewriteEngine on
RewriteCond %{HTTP_HOST} ^fi.site.com
RewriteRule ^(.*)$ http://site.com/lang/fi/$1 [L,NC,QSA]
Добавление правил в .htaccess позволяет не создавать никаких реальных языковых субдоменов
![Page 7: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/7.jpg)
Языковые версии сайта → 2
EN версия сайта в поддиректорииURLhttp://doklad.wpru/en/
Почему такое возможно:.htaccess WP при создании ЧПУ(почти такой же .htaccess в Yii FW)
![Page 8: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/8.jpg)
Мультиязычный сайт → 3 Принципы создания - всего два
Контент (ru)
Тот же контент на другом языке (fi)
Параллельный контент в БД
Переключение контента в зависимости от URL, в котором содержится язык
Создание отдельно переводов
Запрос контента
Буфер, следящий за URL
В URL есть язык?
Да
Отдаем перевод
Нет
Отдаем оригинал
ф-я обертка над любым контентом_translate()
![Page 9: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/9.jpg)
Плагин WPML
Это локализация по принципу из БД
Основной плагин
WPML работает по принципу создания параллельного контента
![Page 10: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/10.jpg)
Стили URL - нет варианта с языковым ключом
После инсталляции плагина - возможность добавить перевод
![Page 11: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/11.jpg)
Оригинал Перевод
Локализация в WPML называется перевод строк - отдельный плагин. Делается вручную
![Page 12: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/12.jpg)
Те самые параллельные посты
Связь поста и перевода в БД в отдельной таблице плагина WPML
![Page 13: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/13.jpg)
Локализация в WPML - либо загрузка .mo файлов, либо вручнуюЭто отдельный плагин в составе WPML
![Page 14: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/14.jpg)
Наш плагин для создания мультиязычных сайтов
One Click Localize -> OCL
Трудности перевода :)
![Page 15: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/15.jpg)
Русская и английская версия сайта плагина OCL
![Page 16: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/16.jpg)
БиллингОплата
Генерация ключа api_key
Генерация плагина, привязанного к ключу
Создание и размещение zip-архива
![Page 17: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/17.jpg)
Главная ф-я ядра плагина - ф-я _ocl() (часть 1)
![Page 18: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/18.jpg)
ф-я _ocl() продолжение и финал
![Page 19: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/19.jpg)
Трудность 1 - локализацияПервая попытка покорить мир
Заливка файлов .po ВСЕХ официальных локализаций WP
Приведение псевдокода файлов .po в PHP, разбор словопар
Внесение локализаций в БД
БД всех официальных локализаций WP, которые есть в мире
Это создание PHP из псевдокода для plural вариантов
При инсталляции плагина и/или добавлении языковлокализации нужных языков вносятся в БД установленного WP
![Page 20: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/20.jpg)
Трудность 2Автоматический перевод
_ocl() Запрос к системе автоматического перевода
Сервис Сложность работы
Платный Что можно переводить
Перевод с тегами HTML
Yandex Низкая Условно нет, есть неописанное суточное ограничение на число запросов
Сайт с малым обновлением контента
Да, но требует правки
Google Средняя $20 за 2 миллиона знаков 2 млн. знаков - это примерно 1400 страниц среднего размера
Да, идеально
Bing Высокая $20 за 2 миллиона знаков -//- Да, идеально
![Page 21: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/21.jpg)
Трудность 3Тестирование плагина для разных версий WP
Общая БД, разные версии WP имеют разные префиксы
2.8.1
Файлы проинсталлированных версий WP
Папка с плагином - символическая ссылка
3.0.1 Папка с плагином - символическая ссылка
...
4.1.2 Папка с плагином - символическая ссылка
...
Реальная папка, в которую размещается плагин
URL: .../2.8.1/
URL: .../3.0.1/
URL: .../4.1.2/
WordPressмашина :)
![Page 22: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/22.jpg)
Трудность 4Удобство редактирования переводов Это ссылка сразу на
редактирование перевода
![Page 23: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/23.jpg)
Быстрый доступ к редактированию локализаций, их очень много, в админку не налазишься
При нажатии всплывает окно
![Page 24: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/24.jpg)
Редактор прямо по разметке, самый удобный вариант
![Page 25: Трудности перевода: как построить мультиязычный сайт на WordPress](https://reader034.vdocument.in/reader034/viewer/2022042717/55d2ed5fbb61ebc5398b466e/html5/thumbnails/25.jpg)
API плагина и теги шаблонаТрудность 5 - многообразие API самого WP вынуждает делать множество сходных ф-й