2. Сайт на другом языке (языках)
На сайте только один язык?
Да
Нет
Нет
Да
Локализация → 1
Мультиязычный сайт → 3
Языковые версии сайта → 2
Контент на разных языках должен совпадать
3. Утилита Unix gettext()
Источники данных для утилиты gettext() - файлы .mo,
скомпилированные “языковые БД” особой структуры
То, из чего компилируютя файлы .mo - файлы .po
Локализация → 1
4. 1 -> язык
2 -> языка
11345 -> языков
языки
4 варианта
Особая проблема - мультиязычные формы
Работает утилита Unix ngettext()
Запись мультиязычной (plural) формы на
псевдоязыке в заголовке файла .po
Уникальна для каждого языка
5. Альтернатива gettext() - база данных
Вызов gettext()
в PHP
*nix вызывает
свою утилиту
gettext()
Обращение к
файлу .mo
Работа gettext() в файле .mo по
поиску словопары
Найдено?
отдаем то что
найдено
Да
отдаем оригинал
Нет
Загрузка страницы
Выгрузка из БД
всех словопар в
виде массива в
память
Массив словопар [ ]
Вызов gettext()
в PHP
хук gettext()
Повышение производительности: нет ни
обращения к файловой системе, ни
механизма поиска в файле .mo
6. Запись 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 позволяет не
создавать никаких реальных
языковых субдоменов
7. Языковые версии сайта → 2
EN версия сайта в поддиректории
URL
http://doklad.wpru/en/
Почему такое возможно:
.htaccess WP при создании ЧПУ
(почти такой же .htaccess в Yii FW)
8. Мультиязычный сайт → 3 Принципы создания - всего два
Контент (ru)
Тот же контент
на другом языке
(fi)
Параллельный контент в БД
Переключение контента в зависимости от
URL, в котором содержится язык
Создание отдельно переводов
Запрос контента
Буфер, следящий за URL
В URL есть язык?
Да
Отдаем перевод
Нет
Отдаем оригинал
ф-я обертка над
любым контентом
_translate()
9. Плагин WPML
Это локализация по
принципу из БД
Основной плагин
WPML работает по принципу
создания параллельного
контента
10. Стили URL - нет
варианта с языковым
ключом
После инсталляции
плагина - возможность
добавить перевод
19. Трудность 1 - локализация
Первая попытка покорить мир
Заливка файлов .po ВСЕХ
официальных локализаций
WP
Приведение
псевдокода
файлов .po в PHP,
разбор словопар
Внесение
локализаций в БД
БД всех
официальных
локализаций WP,
которые есть в мире
Это создание PHP из псевдокода
для plural вариантов
При инсталляции плагина и/или
добавлении языков
локализации нужных языков вносятся в
БД установленного WP
20. Трудность 2
Автоматический перевод
_ocl() Запрос к системе
автоматического перевода
Сервис Сложность
работы
Платный Что можно
переводить
Перевод с тегами
HTML
Yandex Низкая Условно нет, есть неописанное
суточное ограничение на число
запросов
Сайт с малым
обновлением
контента
Да, но требует
правки
Google Средняя $20 за 2 миллиона знаков 2 млн. знаков - это
примерно 1400
страниц среднего
размера
Да, идеально
Bing Высокая $20 за 2 миллиона знаков -//- Да, идеально
21. Трудность 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
машина :)