如果是关于语言选择器,我猜你正在使用sfWidgetFormI18nChoiceLanguage
. 因此,最简单的方法是创建自己的 wdiget(将是当前 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
.