言語セレクターについての場合は、sfWidgetFormI18nChoiceLanguage
. したがって、最も簡単な方法は、独自の wdiget (現在のものの ac/p になります) を作成して、すべての選択肢内で必要な値を置き換えることです。新しいウィジェットを作成しますlib/widget/myWidgetFormI18nChoiceLanguage.class.php
:
class myWidgetFormI18nChoiceLanguage extends sfWidgetFormChoice
{
protected function configure($options = array(), $attributes = array())
{
parent::configure($options, $attributes);
$this->addOption('culture');
$this->addOption('languages');
$this->addOption('add_empty', false);
// populate choices with all languages
$culture = isset($options['culture']) ? $options['culture'] : 'en';
$languages = sfCultureInfo::getInstance($culture)->getLanguages(isset($options['languages']) ? $options['languages'] : null);
$addEmpty = isset($options['add_empty']) ? $options['add_empty'] : false;
if (false !== $addEmpty)
{
$languages = array_merge(array('' => true === $addEmpty ? '' : $addEmpty), $languages);
}
// change the language here based on the iso code
$languages['pt_BR'] = 'portugués (Brasil)';
$this->setOption('choices', $languages);
}
}
iso_code の表示方法を変更したい場合 ( i18n ヘルパーを使用する場合format_language
) は、同じことができます。独自のヘルパー ( など/lib/helper/myi18NHelper.php
) を次のように作成します。
function format_language($language_iso, $culture = null)
{
$c = sfCultureInfo::getInstance($culture === null ? sfContext::getInstance()->getUser()->getCulture() : $culture);
$languages = $c->getLanguages();
// change the language here based on the iso code
$languages['pt_BR'] = 'portugués (Brasil)';
return isset($languages[$language_iso]) ? $languages[$language_iso] : '';
}
次に、次のように呼び出すことができます。
<?php use_helper('myi18N') ?>
<?php echo format_language('pt_BR') ?>
編集:
sfWidgetFormI18nChoiceLanguage
この新しいウィジェットを使用する場合は、フォーム クラスを更新し、単純に に置き換えmyWidgetFormI18nChoiceLanguage
ます。