ФорумПрограммированиеPHP для идиотов → локализация в шаблонах

локализация в шаблонах

  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 3 апреля 2010 г. 19:44

    Вот решил спросить, такую штуку.
    Допустим есть шаблон (пока что абстрактно HTML код с PHP вызовами ), в котором приветствуется пользователь.
    Конечный результат шаблона выглядит так:

    Для русскоязычных пользователей:
    <div class="panel">
    Ха, привет Ванёк. Давно не видались!
    </div>

    Для не русскоязычных:
    <div class="panel">
    Jack, this is you? Hi Jack!
    </div>


    Суть заключается в подстановке имени в нужный шаблон локализации приветствия:
    'Ха, привет %s. Давно не видались!'
    '%s, this is you? Hi %s!'
    //тобишь основано на vsprintf


    Фактически мы имеем два шаблона - один (верхний пример) является шаблоном языковой конструкции, и второй (дальше напишу) конструкцией страницы HTML:
    <div class="panel">
    <?php echo Locale::getFormatText('HIUSER', $LOGIN)?>
    </div>


    А вопрос в следующем: вызов Locale::getFormatText('HIUSER', $LOGIN) лучше помещать как указано в шаблон, или надо его выносить, оставляя в шаблоне HTML лишь:
    <div class="panel">
    <?php echo $HIUSER?>
    </div>


    Вроде бы шаблон заканчивается там, где что то может измениться. То есть меняется то, что включено в теги php. Но с другой стороны всё же можно представить, что в данных примерах шаблоном является всё кроме переменной, в которой содержится логин пользователя и шаблон локализации выступает как бы помощником вида.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 апреля 2010 г. 19:57, спустя 13 минут 1 секунду

    kostyl, php.net/gettext
    Сапожник без сапог
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 3 апреля 2010 г. 20:04, спустя 7 минут 15 секунд

    phpdude,
    да какая разница, вопрос в том где вызвать?
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 3 апреля 2010 г. 20:16, спустя 11 минут 13 секунд

    Мне кажется в шаблоне надо хранить сами тексты.
    Т.е. что-то типа:
    <?php echo Locale::getFormatText(array('ru' => 'Привет %s', 'eng' => 'Hello %s'), array($username)); ?>

    У меня такой принцип - все что является частью результирующего HTML и не извлекается из БД - строго идет в шаблон.



  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 3 апреля 2010 г. 20:19, спустя 2 минуты 59 секунд


    Мне кажется в шаблоне надо хранить сами тексты.
    Т.е. что-то типа:
    <?php echo Locale::getFormatText(array('ru' => 'Привет %s', 'eng' => 'Hello %s'), array($username)); ?>

    У меня такой принцип - все что является частью результирующего HTML и не извлекается из БД - строго идет в шаблон.

    так ты это будешь писать в шаблоне или нет?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 апреля 2010 г. 20:24, спустя 5 минут 18 секунд


    phpdude,
    да какая разница, вопрос в том где вызвать?
    в "красоте"
    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 3 апреля 2010 г. 20:26, спустя 1 минуту 56 секунд

    kostyl, конечно в шаблоне. Я ж грю, раз это часть HTML - то все идет в шаблон.
    Если взять шаблонизатор, а не чистый PHP, то конструкция получится более компактная.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 апреля 2010 г. 20:25, спустя 23 часа 59 минут 6 секунд


    Конечно в шаблоне. Я ж грю, раз это часть HTML - то все идет в шаблон.
    Если взять шаблонизатор а не чистый PHP, то конструкция получится более компактная.

    а я бы вынес в языковые файлы … по или мо например
    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 3 апреля 2010 г. 20:32, спустя 7 минут 28 секунд

    phpdude, разумеется языковые файлы тоже имеют право на жизнь. Их недостаток - бессмысленная подрузка лишних текстов, там где это не надо.

    Но тут все зависит от конечной задачи. Если планируется перевод на 20 языков - файлы удобнее, для тех кто будет локализовать. А если количество языков определено и скорее всего не изменится, то удобнее все иметь в шаблонне, чтоб поправить по месту, а не лазить по длинному файлу и ломать голову, то это сообщение или не то.
    Так как второе бывает чаще - я предпочитаю все иметь под рукой, то есть в шаблоне.
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 3 апреля 2010 г. 20:33, спустя 19 секунд


    а я бы вынес в языковые файлы … по или мо например

    я лично так и выношу… Просто сам вопрос в том, где делать вызов )))
    Если бы шаблон выглядел как:

    <div class="panel">
       Ха, привет <?php echo $LOGIN?>. Давно не видались!
    </div>

    то тут всё понятно. А вот сам выбор "Ха привет" или еще что то это можно отнести к шаблону, а можно и не отнести.
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 3 апреля 2010 г. 20:38, спустя 5 минут 13 секунд

    блин а как правильно на инглише про джека?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 апреля 2010 г. 20:40, спустя 2 минуты 23 секунды


    phpdude, разумеется языковые файлы тоже имеют право на жизнь. Их недостаток - бессмысленная подрузка лишних текстов, там где это не надо.

    Но тут все зависит от конечной задачи. Если планируется перевод на 20 языков - файлы удобнее, для тех кто будет локализовать. А если количество языков определено и скорее всего не изменится, то удобнее все иметь в шаблонне, чтоб поправить по месту, а не лазить по длинному файлу и ломать голову, то это сообщение или не то.
    Так как второе бывает чаще - я предпочитаю все иметь под рукой, то есть в шаблоне.

    у меня в админке они списочком))) парсятся из кода и шаблонов, и переводить удобно и жить круто с ними))

    ну это если ты хз скоько языков будет)
    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 3 апреля 2010 г. 20:44, спустя 3 минуты 19 секунд

    Не спорю, тоже вполне разумное решение.
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 4 апреля 2010 г. 13:08, спустя 16 часов 24 минуты 37 секунд

    короче так:
    1) нужно иметь несколько драйеров (масивы, БД, gettext) // Дуд, ну нельзя просто так брать твой любимый gettext. Как Givi уже упоминал, gettext требует установки локали, что нахуй не нужно. Не спроста ж в симфони даже свой reader/writer для gettext-файлов. + абстракция, должна быть, абстракция.

    2) редактировать переводы удобнее ессно в базе (если редактировать из админки CMS'ки). Но работать будут быстрее всего ессно массивы, поэтому можно сделать конвертер/компилятор из БД в массивы (не думаю, что открываю тебе какую-то истину, сам наверно это все знаешь)

    3) вызывать из шаблона этот свой Translate или подставлять из контроллера - да как хочешь так и делай. Там, где я сейчас работаю шаблонизатор весьма ограничен, и plural-переводы из шаблона не вызвать + vsprintf недоступен. Поэтому простейшие переводы подставляем через шаблон, а те, что сложнее - из контроллера. В моих BL будет крутой Twig-тег {% trans %}, plural-переводы тоже можно будет вызывать.

    Вообще я постараюсь сделать компонент Translate наиболее независимым [от остальных компонентов BL], так что ты сможешь нормально его использовать в своих проектах, во всяком случае мне будет приятно.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 4 апреля 2010 г. 13:47, спустя 38 минут 59 секунд

    Абырвалг, круто.

    1) возможно, а возможно - нахуй?
    2) можно сразу в файдах, бд тут какбы 5ая нога собаке
    3) естественно что теги какие то в шаблонах
    Спустя 50 сек.
    3. если твоя инструкция, тов чем проблема плюралы заюзать?
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!