developer blog

451 degrees Fahrenheit

Многоязычные формы

June 16th, 2008 by pilot |

В новой версии symfony 1.1 значительно упростили работы с многоязычными формами (интернационализация - i18n). В этом посте вы научитесь как создавать такие формы.

Итак возьмем простую многоязыную пропел схему:

propel:
  article:
    id:         ~
    author:     varchar(255)
    created_at: ~
  article_i18n:
    title:      { varchar(255), required: true }
    content:    longvarchar

После того как база сконфигурирована, выболняем команду propel:build-all для генерация пропел модели и классов для работы с формами:

$ php symfony propel:build-all

Вот такой спиской файлов автоматически создасться в папке проекта:

lib/
  form/
    ArticleForm.class.php
    ArticleI18nForm.class.php
    BaseFormPropel.class.php
  model/
    Article.php
    ArticlePeer.php
    ArticleI18n.php
    ArticleI18nPeer.php

Мы хотим одновременно обновлять обе версии нашей статьи Английскую и Французкую в одной форме:

i18n-form

Если вы пробовали сделать подобное в symfony 1.0, вы уже знаете, что это долгая и местами утомительная задача.

Благодаря улучшенияв в symfony 1.1, это задача выполняется в течении 2х минут.

Первое, добавим языки которые хотим использоваться в ArticleForm class:

class ArticleForm extends BaseArticleForm
{
  public function configure()
  {
    $this->embedI18n(array('en', 'fr'));

    $this->widgetSchema->setLabel('en', 'English');
    $this->widgetSchema->setLabel('fr', 'French');
  }
}

И второе, генерируем CRUD модуль для того чтоб наш web интерфейс мог показывать список статей (list), создавать их (create), обновлять (update), и удалять (delete):

$ php symfony generate:crud frontend article Article

Наслаждаемся полность рабочим модулем /frontend_dev.php/article.

top of hotblogs.org.ua

Раздел Symfony

3 Responses

  1. rosker Says:

    У меня ен получилось, как только добавил $this->embedI18n(array(’en’, ‘fr’));

    пропел начал выдавть ошибку
    “No connection params set for propel”

    не могу разобраться в чем дело. Страно когда убераю embedI18n, все работает…

  2. rosker Says:

    можешь выложить пример кода, который получается в результате?

  3. pilot Says:

    Код выложу чуть позже.

    Теперь по ошибке “No connection params set for propel”

    Это ошибка выдается в нескольких случаях:
    1. У тебя в settings.yml (приложения) не добавлен хелпер I18N
    2. Проверь разметку в файле databases.yml
    3. В databases.yml проверь, что указан полный путь к таблице mysqli://root@localhost/ИМЯ_ТАБЛИЦЫ

    Вопросы можешь задавать в русскоязычном форуме поддержки симфони http://www.symfony.org.ua

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.