Как интернационализировать метас, такие как title в view.yml? - PullRequest
1 голос
/ 17 января 2011

Я хотел бы интернационализировать строки моего view.yml, я не могу найти, как это сделать.

У меня есть плохое решение, на мой взгляд:

metas:
  title: <?php echo sfContext::getInstance()->getI18n()->__('TITLE'); ?>

Я бы хотел найти способ сделать это без вызова "sfConfig :: getInstance ()".Возможно ли это?

Ответы [ 3 ]

2 голосов
/ 17 января 2011

Никогда не используйте sfContext для I18n в файлах конфигурации!В таком случае используйте функцию setTitle в представлении (не в контроллере)

<?php $sf_response->setTitle(__('TITLE'));?>
2 голосов
/ 18 января 2011

Поскольку include_title () не переводит то, что он находит в view.yml, я сделал эту очень простую функцию в своем пользовательском помощнике:

function include_translated_title($context)
{
  $title = $context->getI18N()->__($context->getResponse()->getTitle());

  echo content_tag('title', $title)."\n";
}

Затем я использую его в моих файлах layout.php:

<head>
<?php include_http_metas() ?>
<?php include_metas() ?>
<?php include_translated_title($sf_context) ?>

Таким образом, я могу использовать ключи перевода в моем view.yml

0 голосов
/ 17 января 2011

Вместо этого вы можете сделать это в своем действии:

$this->getResponse()->setTitle(sfContext::getInstance()->getI18n()->__('TITLE'));

Я не думаю, что есть способ обойти sfContext.Вы можете сделать что-то подобное, избавившись от значения по умолчанию <?php include_title() ?> в макете / представлении и используя формат шаблона i18n для его интернационализации:

<title><?php echo __('TITLE') ?></title>
...