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

Содержание

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

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


Слайд 2Интернационализация (i18n) - это процесс проектирования программного обеспечения для потенциального использования

с любым языком.

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


Слайд 3i18n и l10n в Symfony


Слайд 4i18n
Routing (url)
Model (content)
Form
Interface Translation
l10n
Date/Time
Number
Currency
Что

надо для создания мультиязычного сайта в Symfony?

Слайд 5User Culture = Language + Locale
Примеры локали пользователя
en: английский
en_AU: английский для

Австралии
en_GB: английский для Великобритании
en_CA: английский для Канады
en_US: английский для США

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


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

ru

Слайд 7Использование Culture в Controller
// Установить Culture
$this->getUser()->setCulture('ru');

// Получить Culture
$culture =

$this->getUser()->getCulture();

Слайд 8Helpers (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
Хелперы и Формы


Слайд 9Локализация контента
# 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 }


Слайд 10Routing
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) }

Слайд 11Схемы реализации многоязычности
Язык сайта не указан в URL http://site.com/?lg=ru http://site.com/?lg=uk
Отдельный домен/субдомен на каждую

языковую версию http://site.com http://site.ua

Многоязычность через директории http://site.com/ru/ http://site.com/en/

Слайд 121. Язык сайта не указан в URL

http://site.com/?lg=ru http://site.com/?lg=uk

# Пример, как можно сделать

автовыбор языка для пользователя
# 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


Слайд 132. Отдельный домен/cубдомен на каждую языковую версию
http://site.com http://site.ua
# Пример: изменяем значение культуры

по умолчанию
# 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
+ Сайты можно разместить на разных серверах
− Разные БД: задача синхронизация данных

http://site.com http://en.site.com


Слайд 143. Многоязычность через директории
Вариант 1: http://site.com (ru) http://site.com/en/
Вариант 2:

http://site.com/ru/ http://site.com/en/

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
− Первый вариант требует кастимизации


Слайд 15Работа с данными в админке


Слайд 16Перевод интерфейса сайта

to our website.', null, 'navigation') ?>

$count )) ?>


Слайд 17Работа со словарями локализации
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





Слайд 18Работа со словарями в консоли
> 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Плагины для локализации
mgI18nPlugin

zxI18nRoutingPlugin

zsI18nExtractTranslatePlugin

tgI18nPlugin


Слайд 20mgI18nPlugin


Слайд 21tgI18nPlugin
Roadmap

sf 1.2 - 1.4
Propel/Doctrine
работа с БД через PDO

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


Слайд 22Вопросы ?
Igor Brovchenko

Igor.Brovchenko@gmail.com

http://tigor.com.ua

http://www.linkedin.com/in/IgorBrovchenko


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика