Игорь Бровченко Киев, 16 мая 2009 Интернационализация и  локализация в  Symfony
Что такое I18n и L10n? Интернационализа́ция  (англ. internationalization) — процесс адаптации продукта, такого как програм...
<ul><li>Предоставление региональных данных для всех языков </li></ul><ul><li>Перевод текстов (интерфейс, данные БД) </li><...
Все данные для  интернационализации  (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 = $t...
Использование Culture в Template <span> <?php  echo   $sf_user-> getCulture ()  ?> </span>
Создание многоязычного сайта # frontend/config/routing.yml news_list: url: / :sf_culture /news param: { module: news, acti...
Демонстрация возможностей I18n (код) <?php  $sf_user-> setCulture ( 'en_US' ); echo  $sf_user-> getCulture (); echo  forma...
<ul><li>en_US   12,000.1   5/15/09   May 15, 2009 9:20:02 PM EEST   $1,350.00 </li></ul><ul><li>en_GB   12,000.1   15/05/2...
sfWidgetFormI18nDate sfWidgetFormI18nTime sfWidgetFormI18nDateTime sfWidgetFormI18nSelectCountry sfWidgetFormI18nSelectLan...
Локализация данных в БД propel: my_product : _attributes:  {  isI18N : true,  i18nTable : my_product_i18n } id:  ~ slug:  ...
Включение локализации интерфейса # frontend/config/settings.yml all: .settings: i18n:  on standard_helpers: [Partial, Form...
Пример использования локализации <?php   echo  __( 'Welcome to our website.' )  ?> <?php   echo  __( &quot;Today's date is...
Словарь в формате XLIFF # frontend/i18n/messages.fr.xml <?xml  version = &quot;1.0&quot;  ?> <xliff  version = &quot;1.0&q...
Локализация с указанием словаря <?php   echo  __( 'Welcome to our website.',  null , 'navigation' )  ?> <?php   echo  __( ...
Настройка локализации # frontend/config/factories.yml i18n: class: sfI18N param: source:  XLIFF debug:  off untranslated_p...
Задачи (tasks) для локализации <ul><li>> php symfony i18n:extract frontend en </li></ul><ul><li>> php symfony i18n:extract...
Настройка локализации для работы с БД # frontend/config/factories.yml i18n: class: sfI18N param: source:  MySQL   # XLIFF ...
Создание таблиц для локализации в БД <ul><li>CREATE TABLE  `catalogue`  (   `cat_id` int(11) NOT NULL auto_increment,   `n...
Проблемы при использовании БД для локализации <ul><ul><li>Для работы с локализацией через источник (source) MySQL открывае...
Образец модуля  «Локализация»  для Админки
Решение проблемы с БД для локализации <ul><ul><li>Был написан свой класс источника (source) для sfI18N -  sfMessageSource_...
Вопросы? <ul><ul><li>Игорь Бровченко </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul><ul><ul><li>http://tigor.co...
Upcoming SlideShare
Loading in …5
×

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

6,355 views

Published on

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

Published in: Technology
3 Comments
2 Likes
Statistics
Notes
No Downloads
Views
Total views
6,355
On SlideShare
0
From Embeds
0
Number of Embeds
1,079
Actions
Shares
0
Downloads
21
Comments
3
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. Игорь Бровченко Киев, 16 мая 2009 Интернационализация и локализация в Symfony
  2. 2. Что такое I18n и L10n? Интернационализа́ция (англ. internationalization) — процесс адаптации продукта, такого как программное или аппаратное обеспечение, к языковым и культурным особенностям региона (регионов), отличного от того, в котором разрабатывался продукт. В английском языке для слова «internationalization» принято сокращение «i18n». При этом число 18 означает количество пропущенных между «i» и «n» букв. Локализа́ция (англ. localization) — перевод и адаптация элементов интерфейса, вспомогательных файлов и документации. В английском языке для слова «localization» иногда применяется сокращение «l10n». При этом число 10 означает количество пропущенных между «l» и «n» букв. Источник: ВикипедиЯ
  3. 3. <ul><li>Предоставление региональных данных для всех языков </li></ul><ul><li>Перевод текстов (интерфейс, данные БД) </li></ul><ul><li>Стандарты форматирования дат и чисел в зависимости от региональных настроек </li></ul>Поддержка I18n и L10n в Symfony?
  4. 4. Все данные для интернационализации (I18n) получены из Common Locale Data Repository (CLDR).
  5. 5. Указываем Culture по умолчанию # frontend/config/settings.yml all: .settings: default_culture: ru
  6. 6. Использование Culture в Action // Установить Culture $this->getUser()->setCulture('ru'); // Получить Culture $culture = $this->getUser()->getCulture(); // => ru
  7. 7. Использование Culture в Template <span> <?php echo $sf_user-> getCulture () ?> </span>
  8. 8. Создание многоязычного сайта # frontend/config/routing.yml news_list: url: / :sf_culture /news param: { module: news, action: index } requirements: { sf_culture : (?: uk | ru | en ) }
  9. 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. 10. <ul><li>en_US 12,000.1 5/15/09 May 15, 2009 9:20:02 PM EEST $1,350.00 </li></ul><ul><li>en_GB 12,000.1 15/05/2009 15 May 2009 21:20:02 EEST US$1,350.00 </li></ul><ul><li>ru 12,000.1 15.05.09 15 мая 2009 г. 21:20:02 EEST US$ 1,350.00 </li></ul><ul><li>uk 12 000,1 15.05.09 15 травня 2009 21:20:02 EEST $ 1 350,00 </li></ul>Результат для различных Culture
  11. 11. sfWidgetFormI18nDate sfWidgetFormI18nTime sfWidgetFormI18nDateTime sfWidgetFormI18nSelectCountry sfWidgetFormI18nSelectLanguage sfWidgetFormI18nSelectCurrency Widgets с поддержкой I18n
  12. 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. 13. Включение локализации интерфейса # frontend/config/settings.yml all: .settings: i18n: on standard_helpers: [Partial, Form, I18N ]
  14. 14. Пример использования локализации <?php echo __( 'Welcome to our website.' ) ?> <?php echo __( &quot;Today's date is &quot; ) ?>
  15. 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. 16. Локализация с указанием словаря <?php echo __( 'Welcome to our website.', null , 'navigation' ) ?> <?php echo __( &quot;Today's date is &quot; ) ?> <ul><li>navigation.fr.xml </li></ul><ul><li>terms_of_service.fr.xml </li></ul><ul><li>search.fr.xml </li></ul>
  17. 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. 18. Задачи (tasks) для локализации <ul><li>> php symfony i18n:extract frontend en </li></ul><ul><li>> php symfony i18n:extract --auto-save frontend en </li></ul><ul><li>> php symfony i18n:extract --auto-save --auto-delete frontend en </li></ul><ul><li>Ограничения: </li></ul><ul><ul><li>команды работают только с стандартным словарем messages </li></ul></ul>
  19. 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. 20. Создание таблиц для локализации в БД <ul><li>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; </li></ul><ul><li>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; </li></ul># symfony-1.2/lib/i18n/sfMessageSource_MySQL.class.php
  21. 21. Проблемы при использовании БД для локализации <ul><ul><li>Для работы с локализацией через источник (source) MySQL открывается ещё один коннект к БД </li></ul></ul><ul><ul><li>При загрузке страницы выполняется несколько дополнительных запросов </li></ul></ul><ul><ul><li>Структура таблиц крайне неудобная для работы в Админке </li></ul></ul>
  22. 22. Образец модуля «Локализация» для Админки
  23. 23. Решение проблемы с БД для локализации <ul><ul><li>Был написан свой класс источника (source) для sfI18N - sfMessageSource_PDO.class.php </li></ul></ul><ul><ul><li>Это позволило использовать текущее соединение с БД через PDO </li></ul></ul><ul><ul><li>Была переписана структура таблиц, чтобы редактировать данные в Админке стало проще — использовали generate-admin и embedI18n </li></ul></ul><ul><ul><li>Были устранены проблемы с лишними запросами к БД </li></ul></ul>
  24. 24. Вопросы? <ul><ul><li>Игорь Бровченко </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul><ul><ul><li>http://tigor.com.ua </li></ul></ul><ul><ul><li>http://www.linkedin.com/in/IgorBrovchenko </li></ul></ul>

×