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

Preview:

Citation preview

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

на WordPress

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

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

ДаНет

НетДа

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

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

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

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

Утилита Unix gettext()

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

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

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

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

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

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

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

Вызов gettext() в PHP

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

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

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

Найдено?

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

Да

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

Нет

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

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

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

Вызов gettext() в PHP

хук gettext()

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

Запись 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 позволяет не создавать никаких реальных языковых субдоменов

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

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

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

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

Контент (ru)

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

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

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

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

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

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

В URL есть язык?

Да

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

Нет

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

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

Плагин WPML

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

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

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

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

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

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

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

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

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

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

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

One Click Localize -> OCL

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Да, идеально

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

Трудность 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машина :)

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

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

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

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

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

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

Recommended