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

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



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

Java Server Pages(JSP). JavaServer Pages (JSP) позволяют вам отделить динамическую часть ваших страниц от статического HTML. Вы, как обычно, пишете обычный.
© 2005 Cisco Systems, Inc. All rights reserved. IPTX v Configuring Additional Cisco CallManager Express Features Configuring Cisco CallManager Express.
Microsoft TechDays Никоноров Евгений Ведущий разработчик EPAM Systems.
Microsoft TechDays Марат Бакиров Эксперт по разработке ПО Microsoft
© 2005 Cisco Systems, Inc. All rights reserved. BGP v Route Selection Using Policy Controls Applying Route-Maps as BGP Filters.
Создание Web страниц Урок 12: PHP & MySQL Павел Бочаров.
Реализовать web интерфейс системы, обеспечивающей: добавление проектов; добавление тестов в проект; запуск теста и визуализация результата; просмотр ранее.
Work with server by XMLRPC – library in Java For students Author: Dudnik Oxana.
Microsoft TechDays Евгений Марченков Эксперт по технологиям разработки ПО.
Microsoft TechDays Олег Аксенов {oleg.gdn at gmail.com}
Hibernate&EJB3 Studybook For students of university Author Sr.Java developer Dudnik Oxana.
Microsoft TechDays Павел Дугаев Специалист по технологиям Microsoft.
Christmas lights. Example of a Bullet Point Slide Bullet Point –Sub Bullet.
Сергей Байдачный Специалист по разработке ПО Майкрософт Украина
Drupal 7 Deploy (делаем Deploy нового функционала проще) Anton Ivanov.
Using Actional with OpenEdge The Zen of Business Transaction Assurance David Cleary Principal Software Engineer – Progress Software Session 116.
Пример использования Hadoop Ошнуров Н.А. ВМИ-115.
Microsoft TechDays Сергей Поляков Developer Evangelist Microsoft.
Microsoft TechDays Дмитрий Филимонов Системный инженер Вебзавод.
Транксрипт:

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

Что такое I18n и L10n? Интернационализа́ция (англ. internationalization) процесс адаптации продукта, такого как программное или аппаратное обеспечение, к языковым и культурным особенностям региона (регионов), отличного от того, в котором разрабатывался продукт. В английском языке для слова «internationalization» принято сокращение «i18n». При этом число 18 означает количество пропущенных между «i» и «n» букв. Локализа́ция (англ. localization) перевод и адаптация элементов интерфейса, вспомогательных файлов и документации. В английском языке для слова «localization» иногда применяется сокращение «l10n». При этом число 10 означает количество пропущенных между «l» и «n» букв. Источник: ВикипедиЯ

Предоставление региональных данных для всех языков Перевод текстов (интерфейс, данные БД) Стандарты форматирования дат и чисел в зависимости от региональных настроек Поддержка I18n и L10n в Symfony?

Все данные для интернационализации (I18n) получены из Common Locale Data Repository (CLDR).

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

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

Использование Culture в Template getCulture() ?>

Создание многоязычного сайта # frontend/config/routing.yml news_list: url: /:sf_culture/news param: { module: news, action: index } requirements: { sf_culture: (?:uk|ru|en) }

Демонстрация возможностей I18n (код)

en_US 12, /15/09 May 15, :20:02 PM EEST $1, en_GB 12, /05/ May :20:02 EEST US$1, ru 12, мая 2009 г. 21:20:02 EEST US$ 1, uk , травня :20:02 EEST $ 1 350,00 Результат для различных Culture

sfWidgetFormI18nDate sfWidgetFormI18nTime sfWidgetFormI18nDateTime sfWidgetFormI18nSelectCountry sfWidgetFormI18nSelectLanguage sfWidgetFormI18nSelectCurrency Widgets с поддержкой I18n

Локализация данных в БД propel: my_product: _attributes: { isI18N: true, i18nTable: my_product_i18n } id: ~ slug: { type: varchar, size: 255 } price: { type: float } my_product_i18n: name: { type: varchar, size: 255 }

Включение локализации интерфейса # frontend/config/settings.yml all:.settings: i18n: on standard_helpers: [Partial, Form, I18N ]

Пример использования локализации

Словарь в формате XLIFF # frontend/i18n/messages.fr.xml Welcome to our website. Bienvenue sur notre site web. Today's date is La date d'aujourd'hui est

Локализация с указанием словаря navigation.fr.xml terms_of_service.fr.xml search.fr.xml

Настройка локализации # frontend/config/factories.yml i18n: class: sfI18N param: source: XLIFF debug: off untranslated_prefix: "[T]" untranslated_suffix: "[/T]" cache: class: sfFileCache param: automatic_cleaning_factor: 0 cache_dir: %SF_I18N_CACHE_DIR% lifetime: prefix: %SF_APP_DIR%/i18n

Задачи (tasks) для локализации > 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

Настройка локализации для работы с БД # frontend/config/factories.yml i18n: class: sfI18N param: source: MySQL # XLIFF debug: off untranslated_prefix: "[T]" untranslated_suffix: "[/T]" cache: class: sfFileCache param: automatic_cleaning_factor: 0 cache_dir: %SF_I18N_CACHE_DIR% lifetime: prefix: %SF_APP_DIR%/i18n

Создание таблиц для локализации в БД CREATE TABLE `catalogue` ( `cat_id` int(11) NOT NULL auto_increment, `name` varchar(100) NOT NULL default '', `source_lang` varchar(100) NOT NULL default '', `target_lang` varchar(100) NOT NULL default '', `date_created` int(11) NOT NULL default '0', `date_modified` int(11) NOT NULL default '0', `author` varchar(255) NOT NULL default '', PRIMARY KEY (`cat_id`) ) TYPE=InnoDB; CREATE TABLE `trans_unit` ( `msg_id` int(11) NOT NULL auto_increment, `cat_id` int(11) NOT NULL default '1', `id` varchar(255) NOT NULL default '', `source` text NOT NULL, `target` text NOT NULL, `comments` text NOT NULL, `date_added` int(11) NOT NULL default '0', `date_modified` int(11) NOT NULL default '0', `author` varchar(255) NOT NULL default '', `translated` tinyint(1) NOT NULL default '0', PRIMARY KEY (`msg_id`) ) TYPE=InnoDB; # symfony-1.2/lib/i18n/sfMessageSource_MySQL.class.php

Проблемы при использовании БД для локализации Для работы с локализацией через источник (source) MySQL открывается ещё один коннект к БД При загрузке страницы выполняется несколько дополнительных запросов Структура таблиц крайне неудобная для работы в Админке

Образец модуля «Локализация» для Админки

Решение проблемы с БД для локализации Был написан свой класс источника (source) для sfI18N - sfMessageSource_PDO.class.php Это позволило использовать текущее соединение с БД через PDO Была переписана структура таблиц, чтобы редактировать данные в Админке стало проще использовали generate-admin и embedI18n Были устранены проблемы с лишними запросами к БД

Вопросы? Игорь Бровченко