Многоязычные сайты на Symfony. Проблемы и их решения Igor Brovchenko Igor.Brovchenko@gmail.com.

Презентация:



Advertisements
Похожие презентации
Игорь Бровченко Киев, 16 мая 2009 Интернационализация и локализация в Symfony.
Advertisements

Java Server Pages(JSP). JavaServer Pages (JSP) позволяют вам отделить динамическую часть ваших страниц от статического HTML. Вы, как обычно, пишете обычный.
© 2005 Cisco Systems, Inc. All rights reserved. IPTX v Configuring Additional Cisco CallManager Express Features Describing Network Management for.
Microsoft TechDays Никоноров Евгений Ведущий разработчик EPAM Systems.
© 2005 Cisco Systems, Inc. All rights reserved. IPTX v Configuring Additional Cisco CallManager Express Features Configuring Cisco CallManager Express.
Разработка на Yii QuartSoft Corp. Системный архитектор Климов П.В.
Class Date { private int year = 0; private int month = 0; private int day = 0; public void SetDate (int y, int m, int d) { year = y; month = m; day = d;
Work with server by XMLRPC – library in Java For students Author: Dudnik Oxana.
Drupal.= Яндекс.Сервер; DrupalConf. Москва
© 2009 Avaya Inc. All rights reserved.1 Chapter Nine, Voic Pro in SCN Module Four – Distributed Voic Pro.
© 2009 Avaya Inc. All rights reserved.1 Chapter Two, Voic Pro Components Module Two – Actions, Variables & Conditions.
Построение HTML5&JavaScript приложений для Windows 8.
Пример использования Hadoop Ошнуров Н.А. ВМИ-115.
Overview of the Paysonnel CE. Overview Paysonnel CE Go to URL- 1 Click [Login to Paysonnel CE] 2 How to Log-in to Paysonnel CE 1 2.
Drupal 7 Deploy (делаем Deploy нового функционала проще) Anton Ivanov.
Microsoft TechDays Марат Бакиров Эксперт по разработке ПО Microsoft
Реализовать web интерфейс системы, обеспечивающей: добавление проектов; добавление тестов в проект; запуск теста и визуализация результата; просмотр ранее.
© 2006 Cisco Systems, Inc. All rights reserved. BSCI v Manipulating Routing Updates Implementing Advanced Cisco IOS Features: Configuring DHCP.
PHP&Flex - новая альтернатива для создания RIAs Иванников Андрей Улич Дмитрий.
Work with databases in Java. JDBC Tutorial for students of universities Author: Dudnik Oxana.
Транксрипт:

Многоязычные сайты на Symfony. Проблемы и их решения Igor Brovchenko

Интернационализация (i18n) - это процесс проектирования программного обеспечения для потенциального использования с любым языком. Локализация (l10n) - процесс адаптации программного обеспечения к культуре определенного региона.

i18n и l10n в Symfony

i18n - Routing (url) - Model (content) - Form - Interface Translation l10n - Date/Time - Number - Currency Что надо для создания мультиязычного сайта в Symfony?

User Culture = Language + Locale Примеры локали пользователя en: английский en_AU: английский для Австралии en_GB: английский для Великобритании en_CA: английский для Канады en_US: английский для США en_US 12, /15/09 May 15, :20:02 PM EEST $1, en_GB 12, /05/ May :20:02 EEST US$1,350.00

Указываем Culture по умолчанию # frontend/config/settings.yml all:.settings: default_culture: ru

Использование Culture в Controller // Установить Culture $this->getUser()->setCulture('ru'); // Получить Culture $culture = $this->getUser()->getCulture();

Helpers (templates) DateHelper format_date() format_datetime() time_ago_in_words() distance_of_time_in_words() format_daterange() NumberHelper format_number() format_currency() I18nHelper format_number_choice() format_country() format_language() Forms (i18n) sfWidgetFormI18nDate sfWidgetFormI18nDateTime sfWidgetFormI18nTime sfWidgetFormI18nChoiceCountry sfWidgetFormI18nChoiceCurrency sfWidgetFormI18nChoiceLanguage sfWidgetFormI18nChoiceTimezone Хелперы и Формы

Локализация контента # config/doctrine/schema.yml JobeetCategory: actAs: Timestampable: ~ I18n: fields: [name] actAs: Sluggable: { fields: [name], uniqueBy: [lang, name] } columns: name: { type: string(255), notnull: true } # config/schema.yml jobeet_category: _attributes: { isI18N: true, i18nTable: jobeet_category_i18n } id: ~ jobeet_category_i18n: id: { type: integer, required: true, primaryKey: true, foreignTable: jobeet_category, foreignReference: id } culture: { isCulture: true, type: varchar, size: 7, required: true, primaryKey: true } name: { type: varchar(255), required: true } slug: { type: varchar(255), required: true }

Routing page: url: /:page param:... article: url: /:year/:month/:day/:slug param: … page: url: /:sf_culture/:page param:... requirements: { sf_culture: (?:fr|en|de) } article: url: /:sf_culture/:year/:month/:day/:slug param:... requirements: { sf_culture: (?:fr|en|de) }

Схемы реализации многоязычности 1.Язык сайта не указан в URL Отдельный домен/субдомен на каждую языковую версию Многоязычность через директории

1. Язык сайта не указан в URL # Пример, как можно сделать автовыбор языка для пользователя # apps/frontend/lib/myUser.class.php class myUser extends sfBasicSecurityUser { public function initialize(sfEventDispatcher $dispatcher, sfStorage $storage, $options = array()) { … $currentCulture = $storage->read(self::CULTURE_NAMESPACE); … } Смена языка сайта – ссылка-переключатель Плохо для SEO Плохо для usability

2. Отдельный домен/cубдомен на каждую языковую версию # Пример: изменяем значение культуры по умолчанию # apps/frontend/config/frontendConfiguration.class.php class frontendConfiguration extends sfApplicationConfiguration { public function configure() { $this->dispatcher->connect('user.change_culture', array($this, 'changeUserCulture')); } function changeUserCulture(sfEvent $event) { $user = $event->getSubject(); $culture = $event['culture'];... $user->setCulture($newCulture); + Хорошо для SEO + Сайты можно разместить на разных серверах Разные БД: задача синхронизация данных

3. Многоязычность через директории Вариант 1: (ru) Вариант 2: routing.yml page: url: /:sf_culture/:page param:... requirements: { sf_culture: (?:ru|en) } article: url: /:sf_culture/:year/:month/:day/:slug param:... requirements: { sf_culture: (?:ru|en) } + Хорошо для SEO Первый вариант требует кастимизации

Работа с данными в админке

Перевод интерфейса сайта $count )) ?>

Работа со словарями локализации sfMessageSource_gettext.class.php sfMessageSource_MySQL.class.php sfMessageSource_SQLite.class.php sfMessageSource_XLIFF.class.php # frontend/i18n/messages.fr.xml Welcome to our website. Bienvenue sur notre site web. Today's date is La date d'aujourd'hui est

Работа со словарями в консоли > php symfony i18n:extract frontend en > php symfony i18n:extract --auto-save frontend en > php symfony i18n:extract --auto-save --auto-delete frontend en Ограничения: команды работают только с стандартным словарем messages

Плагины для локализации mgI18nPlugin zxI18nRoutingPlugin zsI18nExtractTranslatePlugin tgI18nPlugin

mgI18nPlugin

tgI18nPlugin Roadmap sf Propel/Doctrine работа с БД через PDO использование текущего соединения к БД новая структура БД для использования форм минимизировано количество запросов к БД импорт XLIFF файлов в БД (каталоги учитываются) экспорт в fixtures собственный extract (каталоги учитываются) удобный интерфейс для работы в админке (формы) документация

Вопросы ? Igor Brovchenko