Трудности перевода: как построить мультиязычный сайт...

25
Трудности перевода: как построить мультиязычный сайт на WordPress

Transcript of Трудности перевода: как построить мультиязычный сайт...

Page 1: Трудности перевода: как построить мультиязычный сайт на WordPress

Трудности перевода: как построить мультиязычный сайт

на WordPress

Page 2: Трудности перевода: как построить мультиязычный сайт на WordPress

Сайт на другом языке (языках)

На сайте только один язык?

ДаНет

НетДа

Локализация → 1

Мультиязычный сайт → 3

Языковые версии сайта → 2

Контент на разных языках должен совпадать

Page 3: Трудности перевода: как построить мультиязычный сайт на WordPress

Утилита Unix gettext()

Источники данных для утилиты gettext() - файлы .mo, скомпилированные “языковые БД” особой структуры

То, из чего компилируютя файлы .mo - файлы .po

Локализация → 1

Page 4: Трудности перевода: как построить мультиязычный сайт на WordPress

1 -> язык2 -> языка11345 -> языковязыки4 варианта

Особая проблема - мультиязычные формыРаботает утилита Unix ngettext()

Запись мультиязычной (plural) формы на псевдоязыке в заголовке файла .poУникальна для каждого языка

Page 5: Трудности перевода: как построить мультиязычный сайт на WordPress

Альтернатива gettext() - база данных

Вызов gettext() в PHP

*nix вызывает свою утилиту gettext()

Обращение к файлу .mo

Работа gettext() в файле .mo по поиску словопары

Найдено?

отдаем то что найдено

Да

отдаем оригинал

Нет

Загрузка страницы

Выгрузка из БД всех словопар в виде массива в память

Массив словопар [ ]

Вызов gettext() в PHP

хук gettext()

Повышение производительности: нет ни обращения к файловой системе, ни механизма поиска в файле .mo

Page 6: Трудности перевода: как построить мультиязычный сайт на WordPress

Запись 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

Языковые версии сайта → 2

EN версия сайта в поддиректорииURLhttp://doklad.wpru/en/

Почему такое возможно:.htaccess WP при создании ЧПУ(почти такой же .htaccess в Yii FW)

Page 8: Трудности перевода: как построить мультиязычный сайт на WordPress

Мультиязычный сайт → 3 Принципы создания - всего два

Контент (ru)

Тот же контент на другом языке (fi)

Параллельный контент в БД

Переключение контента в зависимости от URL, в котором содержится язык

Создание отдельно переводов

Запрос контента

Буфер, следящий за URL

В URL есть язык?

Да

Отдаем перевод

Нет

Отдаем оригинал

ф-я обертка над любым контентом_translate()

Page 9: Трудности перевода: как построить мультиязычный сайт на WordPress

Плагин WPML

Это локализация по принципу из БД

Основной плагин

WPML работает по принципу создания параллельного контента

Page 10: Трудности перевода: как построить мультиязычный сайт на WordPress

Стили URL - нет варианта с языковым ключом

После инсталляции плагина - возможность добавить перевод

Page 11: Трудности перевода: как построить мультиязычный сайт на WordPress

Оригинал Перевод

Локализация в WPML называется перевод строк - отдельный плагин. Делается вручную

Page 12: Трудности перевода: как построить мультиязычный сайт на WordPress

Те самые параллельные посты

Связь поста и перевода в БД в отдельной таблице плагина WPML

Page 13: Трудности перевода: как построить мультиязычный сайт на WordPress

Локализация в WPML - либо загрузка .mo файлов, либо вручнуюЭто отдельный плагин в составе WPML

Page 14: Трудности перевода: как построить мультиязычный сайт на WordPress

Наш плагин для создания мультиязычных сайтов

One Click Localize -> OCL

Трудности перевода :)

Page 15: Трудности перевода: как построить мультиязычный сайт на WordPress

Русская и английская версия сайта плагина OCL

Page 16: Трудности перевода: как построить мультиязычный сайт на WordPress

БиллингОплата

Генерация ключа api_key

Генерация плагина, привязанного к ключу

Создание и размещение zip-архива

Page 17: Трудности перевода: как построить мультиязычный сайт на WordPress

Главная ф-я ядра плагина - ф-я _ocl() (часть 1)

Page 18: Трудности перевода: как построить мультиязычный сайт на WordPress

ф-я _ocl() продолжение и финал

Page 19: Трудности перевода: как построить мультиязычный сайт на WordPress

Трудность 1 - локализацияПервая попытка покорить мир

Заливка файлов .po ВСЕХ официальных локализаций WP

Приведение псевдокода файлов .po в PHP, разбор словопар

Внесение локализаций в БД

БД всех официальных локализаций WP, которые есть в мире

Это создание PHP из псевдокода для plural вариантов

При инсталляции плагина и/или добавлении языковлокализации нужных языков вносятся в БД установленного WP

Page 20: Трудности перевода: как построить мультиязычный сайт на WordPress

Трудность 2Автоматический перевод

_ocl() Запрос к системе автоматического перевода

Сервис Сложность работы

Платный Что можно переводить

Перевод с тегами HTML

Yandex Низкая Условно нет, есть неописанное суточное ограничение на число запросов

Сайт с малым обновлением контента

Да, но требует правки

Google Средняя $20 за 2 миллиона знаков 2 млн. знаков - это примерно 1400 страниц среднего размера

Да, идеально

Bing Высокая $20 за 2 миллиона знаков -//- Да, идеально

Page 21: Трудности перевода: как построить мультиязычный сайт на WordPress

Трудность 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

Трудность 4Удобство редактирования переводов Это ссылка сразу на

редактирование перевода

Page 23: Трудности перевода: как построить мультиязычный сайт на WordPress

Быстрый доступ к редактированию локализаций, их очень много, в админку не налазишься

При нажатии всплывает окно

Page 24: Трудности перевода: как построить мультиязычный сайт на WordPress

Редактор прямо по разметке, самый удобный вариант

Page 25: Трудности перевода: как построить мультиязычный сайт на WordPress

API плагина и теги шаблонаТрудность 5 - многообразие API самого WP вынуждает делать множество сходных ф-й