SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
Трудности перевода:
как построить мультиязычный сайт
на 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 версия сайта в поддиректории
URL
http://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 вынуждает делать множество сходных ф-й

Más contenido relacionado

La actualidad más candente

Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IP
Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IPСтажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IP
Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IP
SmartTools
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Yandex
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Yandex
 
ПЛАНОВА РАБОТА
ПЛАНОВА РАБОТАПЛАНОВА РАБОТА
ПЛАНОВА РАБОТА
Vasil Penchev
 
Роман Янковский (Devexperts)
Роман Янковский (Devexperts)Роман Янковский (Devexperts)
Роман Янковский (Devexperts)
Ontico
 
Go для python-программистов
Go для python-программистовGo для python-программистов
Go для python-программистов
Konstantin Cherkasov
 

La actualidad más candente (18)

Как компилируется программа на С++?
Как компилируется программа на С++?Как компилируется программа на С++?
Как компилируется программа на С++?
 
БЭМ: новости проектов и последние релизы — Владимир Гриненко
БЭМ: новости проектов и последние релизы — Владимир ГриненкоБЭМ: новости проектов и последние релизы — Владимир Гриненко
БЭМ: новости проектов и последние релизы — Владимир Гриненко
 
Go и fuse
Go и fuseGo и fuse
Go и fuse
 
Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IP
Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IPСтажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IP
Стажировка 2016-07-12 02 Денис Нелюбин. Web, HTTP, TCP/IP
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Форум на полном БЭМ-стеке — Николай Ильченко, Яндекс
Форум на полном БЭМ-стеке — Николай Ильченко, ЯндексФорум на полном БЭМ-стеке — Николай Ильченко, Яндекс
Форум на полном БЭМ-стеке — Николай Ильченко, Яндекс
 
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
 
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
Александр Панин, Как мы делали кроссплатформенную библиотеку SpeechKit на C++
 
ПЛАНОВА РАБОТА
ПЛАНОВА РАБОТАПЛАНОВА РАБОТА
ПЛАНОВА РАБОТА
 
Владимир Гриненко — Библиотеки блоков bem-core и bem-components
Владимир Гриненко — Библиотеки блоков bem-core и bem-componentsВладимир Гриненко — Библиотеки блоков bem-core и bem-components
Владимир Гриненко — Библиотеки блоков bem-core и bem-components
 
Введение в язык программирования Go
Введение в язык программирования GoВведение в язык программирования Go
Введение в язык программирования Go
 
Структура кода на С++
Структура кода на С++Структура кода на С++
Структура кода на С++
 
Package maintaining in Debian
Package maintaining in DebianPackage maintaining in Debian
Package maintaining in Debian
 
Роман Янковский (Devexperts)
Роман Янковский (Devexperts)Роман Янковский (Devexperts)
Роман Янковский (Devexperts)
 
Go для python-программистов
Go для python-программистовGo для python-программистов
Go для python-программистов
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
История PermLUG
История PermLUGИстория PermLUG
История PermLUG
 

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

Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Anthony Marchenko
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
Stepan Tanasiychuk
 
Использование Symfony
Использование SymfonyИспользование Symfony
Использование Symfony
Media Gorod
 
инструменты веб разработчика
инструменты веб разработчикаинструменты веб разработчика
инструменты веб разработчика
Softline
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
Lev Panov
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
Alexey Kachayev
 

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

игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решения
 
Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥
 
DLR Hosting
DLR HostingDLR Hosting
DLR Hosting
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Progopedia - OSDN
Progopedia - OSDNProgopedia - OSDN
Progopedia - OSDN
 
Использование Symfony
Использование SymfonyИспользование Symfony
Использование Symfony
 
JPHP
JPHPJPHP
JPHP
 
Anton Bolshakov - Joint anti-crime. Open source security
Anton Bolshakov - Joint anti-crime. Open source securityAnton Bolshakov - Joint anti-crime. Open source security
Anton Bolshakov - Joint anti-crime. Open source security
 
Internationalization and localization of the python applications with gettext...
Internationalization and localization of the python applications with gettext...Internationalization and localization of the python applications with gettext...
Internationalization and localization of the python applications with gettext...
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
 
инструменты веб разработчика
инструменты веб разработчикаинструменты веб разработчика
инструменты веб разработчика
 
лекция 3
лекция 3лекция 3
лекция 3
 
Язык программирования GO
Язык программирования GOЯзык программирования GO
Язык программирования GO
 
Как автоматизировать рутинные задачи или учимся разговаривать на змеином языке
Как автоматизировать рутинные задачи или учимся разговаривать на змеином языкеКак автоматизировать рутинные задачи или учимся разговаривать на змеином языке
Как автоматизировать рутинные задачи или учимся разговаривать на змеином языке
 
лекция 4
лекция 4лекция 4
лекция 4
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox ExtensionОранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
 
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Fo...
 

Más de Ruslan Begaliev

Más de Ruslan Begaliev (13)

Никита Селиванов: 8 правил эффективного взаимодействия с подрядчиком при созд...
Никита Селиванов: 8 правил эффективного взаимодействия с подрядчиком при созд...Никита Селиванов: 8 правил эффективного взаимодействия с подрядчиком при созд...
Никита Селиванов: 8 правил эффективного взаимодействия с подрядчиком при созд...
 
Анатолий Юмашев: Сайт для бизнеса на WordPress в 2017 году
Анатолий Юмашев: Сайт для бизнеса на WordPress в 2017 годуАнатолий Юмашев: Сайт для бизнеса на WordPress в 2017 году
Анатолий Юмашев: Сайт для бизнеса на WordPress в 2017 году
 
Константин Хомченко: Как раскрыть маркетинговый потенциал Wordpress?
Константин Хомченко: Как раскрыть маркетинговый потенциал Wordpress?Константин Хомченко: Как раскрыть маркетинговый потенциал Wordpress?
Константин Хомченко: Как раскрыть маркетинговый потенциал Wordpress?
 
Анна Ладошкина: Проект Guthenberg: революция в консоли
Анна Ладошкина: Проект Guthenberg: революция в консолиАнна Ладошкина: Проект Guthenberg: революция в консоли
Анна Ладошкина: Проект Guthenberg: революция в консоли
 
Миша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPressМиша Рудрастых: Введение в HTTP API WordPress
Миша Рудрастых: Введение в HTTP API WordPress
 
Каким будет SEO в начале 2017 года и как нам в этом поможет Wordpress?
Каким будет SEO в начале 2017 года и как нам в этом поможет Wordpress? Каким будет SEO в начале 2017 года и как нам в этом поможет Wordpress?
Каким будет SEO в начале 2017 года и как нам в этом поможет Wordpress?
 
Безопасность и масштабируемость данных
Безопасность и масштабируемость данныхБезопасность и масштабируемость данных
Безопасность и масштабируемость данных
 
Что вам нужно знать, когда вы покидаете виртуальный хостинг?
Что вам нужно знать, когда вы покидаете виртуальный хостинг? Что вам нужно знать, когда вы покидаете виртуальный хостинг?
Что вам нужно знать, когда вы покидаете виртуальный хостинг?
 
Личный бренд и его коммуникация через сайт.
Личный бренд и его коммуникация через сайт. Личный бренд и его коммуникация через сайт.
Личный бренд и его коммуникация через сайт.
 
Бот для Telegram и сайт на WordPress — смогут ли ужиться вместе?
Бот для Telegram и сайт  на WordPress — смогут  ли ужиться вместе?Бот для Telegram и сайт  на WordPress — смогут  ли ужиться вместе?
Бот для Telegram и сайт на WordPress — смогут ли ужиться вместе?
 
A/B тестирование на WordPress. Конверсия не только для лендингов
A/B тестирование на WordPress. Конверсия не только для лендинговA/B тестирование на WordPress. Конверсия не только для лендингов
A/B тестирование на WordPress. Конверсия не только для лендингов
 
Google Tag Manager: Что это и с чем его едят.
Google Tag Manager: Что это и с чем его едят.Google Tag Manager: Что это и с чем его едят.
Google Tag Manager: Что это и с чем его едят.
 
Как я работал на MODx и как перешел на WordPress
Как я работал на MODx и как перешел на WordPressКак я работал на MODx и как перешел на WordPress
Как я работал на MODx и как перешел на WordPress
 

Último

CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 

Último (9)

CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 

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

  • 1. Трудности перевода: как построить мультиязычный сайт на WordPress
  • 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 - нет варианта с языковым ключом После инсталляции плагина - возможность добавить перевод
  • 11. Оригинал Перевод Локализация в WPML называется перевод строк - отдельный плагин. Делается вручную
  • 12. Те самые параллельные посты Связь поста и перевода в БД в отдельной таблице плагина WPML
  • 13. Локализация в WPML - либо загрузка .mo файлов, либо вручную Это отдельный плагин в составе WPML
  • 14. Наш плагин для создания мультиязычных сайтов One Click Localize -> OCL Трудности перевода :)
  • 15. Русская и английская версия сайта плагина OCL
  • 17. Главная ф-я ядра плагина - ф-я _ocl() (часть 1)
  • 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 машина :)
  • 22. Трудность 4 Удобство редактирования переводов Это ссылка сразу на редактирование перевода
  • 23. Быстрый доступ к редактированию локализаций, их очень много, в админку не налазишься При нажатии всплывает окно
  • 24. Редактор прямо по разметке, самый удобный вариант
  • 25. API плагина и теги шаблона Трудность 5 - многообразие API самого WP вынуждает делать множество сходных ф-й