Интернационализация и локализация в Symfony / Symfony I18n And L10n
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Интернационализация и локализация в Symfony / Symfony I18n And L10n

  • 9,148 views
Uploaded on

Презентация доклада "Интернационализация и локализация в Symfony" с Symfony UaCamp

Презентация доклада "Интернационализация и локализация в Symfony" с Symfony UaCamp

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
9,148
On Slideshare
8,100
From Embeds
1,048
Number of Embeds
15

Actions

Shares
Downloads
18
Comments
3
Likes
2

Embeds 1,048

http://tigor.com.ua 785
http://xss.yandex.net 118
http://dodreams.blogspot.com 61
http://www.slideshare.net 34
http://dodreams.blogspot.ru 17
http://dod.blog.ru 16
http://www.sfexception.com 7
http://www.linkedin.com 2
http://webcache.googleusercontent.com 2
http://www.lmodules.com 1
http://translate.googleusercontent.com 1
http://dodreams.blogspot.de 1
http://209.85.129.132 1
http://feeds2.feedburner.com 1
http://dodreams.blogspot.ro 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Игорь Бровченко Киев, 16 мая 2009 Интернационализация и локализация в Symfony
  • 2. Что такое I18n и L10n? Интернационализа́ция (англ. internationalization) — процесс адаптации продукта, такого как программное или аппаратное обеспечение, к языковым и культурным особенностям региона (регионов), отличного от того, в котором разрабатывался продукт. В английском языке для слова «internationalization» принято сокращение «i18n». При этом число 18 означает количество пропущенных между «i» и «n» букв. Локализа́ция (англ. localization) — перевод и адаптация элементов интерфейса, вспомогательных файлов и документации. В английском языке для слова «localization» иногда применяется сокращение «l10n». При этом число 10 означает количество пропущенных между «l» и «n» букв. Источник: ВикипедиЯ
  • 3.
    • Предоставление региональных данных для всех языков
    • Перевод текстов (интерфейс, данные БД)
    • Стандарты форматирования дат и чисел в зависимости от региональных настроек
    Поддержка I18n и L10n в Symfony?
  • 4. Все данные для интернационализации (I18n) получены из Common Locale Data Repository (CLDR).
  • 5. Указываем Culture по умолчанию # frontend/config/settings.yml all: .settings: default_culture: ru
  • 6. Использование Culture в Action // Установить Culture $this->getUser()->setCulture('ru'); // Получить Culture $culture = $this->getUser()->getCulture(); // => ru
  • 7. Использование Culture в Template <span> <?php echo $sf_user-> getCulture () ?> </span>
  • 8. Создание многоязычного сайта # frontend/config/routing.yml news_list: url: / :sf_culture /news param: { module: news, action: index } requirements: { sf_culture : (?: uk | ru | en ) }
  • 9. Демонстрация возможностей I18n (код) <?php $sf_user-> setCulture ( 'en_US' ); echo $sf_user-> getCulture (); echo format_number( 12000.10 ); echo format_date( time ()); echo format_datetime( time ()); echo format_currency( 1350 , 'USD' ); ?>
  • 10.
    • en_US 12,000.1 5/15/09 May 15, 2009 9:20:02 PM EEST $1,350.00
    • en_GB 12,000.1 15/05/2009 15 May 2009 21:20:02 EEST US$1,350.00
    • ru 12,000.1 15.05.09 15 мая 2009 г. 21:20:02 EEST US$ 1,350.00
    • uk 12 000,1 15.05.09 15 травня 2009 21:20:02 EEST $ 1 350,00
    Результат для различных Culture
  • 11. sfWidgetFormI18nDate sfWidgetFormI18nTime sfWidgetFormI18nDateTime sfWidgetFormI18nSelectCountry sfWidgetFormI18nSelectLanguage sfWidgetFormI18nSelectCurrency Widgets с поддержкой I18n
  • 12. Локализация данных в БД 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 }
  • 13. Включение локализации интерфейса # frontend/config/settings.yml all: .settings: i18n: on standard_helpers: [Partial, Form, I18N ]
  • 14. Пример использования локализации <?php echo __( 'Welcome to our website.' ) ?> <?php echo __( &quot;Today's date is &quot; ) ?>
  • 15. Словарь в формате XLIFF # frontend/i18n/messages.fr.xml <?xml version = &quot;1.0&quot; ?> <xliff version = &quot;1.0&quot; > <file original = &quot;global&quot; source-language = &quot;en_US&quot; datatype = &quot;plaintext&quot; > <body> <trans-unit id = &quot;1&quot; > <source> Welcome to our website. </source> <target> Bienvenue sur notre site web. </target> </trans-unit> <trans-unit id = &quot;2&quot; > <source> Today's date is </source> <target> La date d'aujourd'hui est </target> </trans-unit> </body> </file> </xliff>
  • 16. Локализация с указанием словаря <?php echo __( 'Welcome to our website.', null , 'navigation' ) ?> <?php echo __( &quot;Today's date is &quot; ) ?>
    • navigation.fr.xml
    • terms_of_service.fr.xml
    • search.fr.xml
  • 17. Настройка локализации # frontend/config/factories.yml i18n: class: sfI18N param: source: XLIFF debug: off untranslated_prefix: &quot;[T]&quot; untranslated_suffix: &quot;[/T]&quot; cache: class: sfFileCache param: automatic_cleaning_factor: 0 cache_dir: %SF_I18N_CACHE_DIR% lifetime: 31556926 prefix: %SF_APP_DIR%/i18n
  • 18. Задачи (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
  • 19. Настройка локализации для работы с БД # frontend/config/factories.yml i18n: class: sfI18N param: source: MySQL # XLIFF debug: off untranslated_prefix: &quot;[T]&quot; untranslated_suffix: &quot;[/T]&quot; cache: class: sfFileCache param: automatic_cleaning_factor: 0 cache_dir: %SF_I18N_CACHE_DIR% lifetime: 31556926 prefix: %SF_APP_DIR%/i18n
  • 20. Создание таблиц для локализации в БД
    • 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
  • 21. Проблемы при использовании БД для локализации
      • Для работы с локализацией через источник (source) MySQL открывается ещё один коннект к БД
      • При загрузке страницы выполняется несколько дополнительных запросов
      • Структура таблиц крайне неудобная для работы в Админке
  • 22. Образец модуля «Локализация» для Админки
  • 23. Решение проблемы с БД для локализации
      • Был написан свой класс источника (source) для sfI18N - sfMessageSource_PDO.class.php
      • Это позволило использовать текущее соединение с БД через PDO
      • Была переписана структура таблиц, чтобы редактировать данные в Админке стало проще — использовали generate-admin и embedI18n
      • Были устранены проблемы с лишними запросами к БД
  • 24. Вопросы?
      • Игорь Бровченко
      • [email_address]
      • http://tigor.com.ua
      • http://www.linkedin.com/in/IgorBrovchenko