Internationalization sfFormLanguage以各自的语言显示语言
有没有一种方法可以使用sfFormLanguage显示语言,但使用各自的语言 我的意思是,不是这个:英语,法语,西班牙语Internationalization sfFormLanguage以各自的语言显示语言,internationalization,symfony1,Internationalization,Symfony1,有没有一种方法可以使用sfFormLanguage显示语言,但使用各自的语言 我的意思是,不是这个:英语,法语,西班牙语 我想要的是:英语、法语、西班牙语不,SFFORM语言是完全成型的,而且是真空包装的,所以你必须接受它。这是我自己使用过的一段方便的代码,但我想如果有一些配置选项就好了 但是,通过深入研究sfFormLanguage类并更改执行区域性查找的部分,而不是使用自己创建的静态列表,编写自己的代码应该很容易 还有一个更简单的选项:只需创建您自己的下拉列表,以预期的方式连接到sfForm
我想要的是:英语、法语、西班牙语不,SFFORM语言是完全成型的,而且是真空包装的,所以你必须接受它。这是我自己使用过的一段方便的代码,但我想如果有一些配置选项就好了 但是,通过深入研究sfFormLanguage类并更改执行区域性查找的部分,而不是使用自己创建的静态列表,编写自己的代码应该很容易 还有一个更简单的选项:只需创建您自己的下拉列表,以预期的方式连接到sfFormLanguage表单:
<form action="/change-language">
<label for="language">Language</label>
<select name="language" id="language">
<option value="es">Español</option>
<option value="en" selected="selected">English</option>
<option value="fr">Français</option>
</select>
<input type="submit" value="ok">
</form>
语言
西班牙人
英语
法国
我所拥有的是:
<?php $languages = array('en' => 'English', 'es' => 'Español', 'ca' => 'Català'); ?>
<?php foreach (array_keys($languages) as $lang):?>
<?php echo link_to($languages[$lang], 'language/changeLanguage?lang='.$lang)?>
<?php endforeach ?>
与链接。我发现这对于那些只是浏览网页寻找自己语言的人来说比较容易。我知道这个问题被标记为已回答,但我只是偶然发现了同样的问题,并想用一种更通用的方式来解决它,以下是我的答案 使用您自己的实现对sfFormLanguage进行子类化,只需覆盖configure(): 正如您所看到的,另一个小部件用于实际选择,其实现如下所示
class myWidgetFormI18nChoiceLanguage extends sfWidgetFormChoice
protected function configure($options = array(), $attributes = array())
{
parent::configure($options, $attributes);
$this->addOption('languages');
$this->addOption('add_empty', false);
// get the desired language codes
$languageCodes = isset($options['languages']) ? $options['languages'] : null;
if ($languageCodes == null) {
$languageCodes = array_keys(sfCultureInfo::getInstance()->getLanguages());
}
$languages = array();
// for each language code add the language to the choices by querying a corresponding culture info instance
foreach ($languageCodes as $lc) {
$languages = array_merge($languages, sfCultureInfo::getInstance($lc)->getLanguages(array($lc)));
}
$addEmpty = isset($options['add_empty']) ? $options['add_empty'] : false;
if (false !== $addEmpty)
{
$languages = array_merge(array('' => true === $addEmpty ? '' : $addEmpty), $languages);
}
$this->setOption('choices', $languages);
}
}
这两个代码片段都深受symfony原始类的启发,但我认为它们更好地解决了这个问题。请注意,不需要(或允许)任何文化选项,因为每种语言都应该以本机方式呈现。我不理解更简单的选项。请您详细说明一下好吗?只需创建您自己的表单,该表单指向您的语言更改操作-我已经为问题添加了一个示例,表单的生成取决于您(sfForm、静态HTML、PHP等)
class myWidgetFormI18nChoiceLanguage extends sfWidgetFormChoice
protected function configure($options = array(), $attributes = array())
{
parent::configure($options, $attributes);
$this->addOption('languages');
$this->addOption('add_empty', false);
// get the desired language codes
$languageCodes = isset($options['languages']) ? $options['languages'] : null;
if ($languageCodes == null) {
$languageCodes = array_keys(sfCultureInfo::getInstance()->getLanguages());
}
$languages = array();
// for each language code add the language to the choices by querying a corresponding culture info instance
foreach ($languageCodes as $lc) {
$languages = array_merge($languages, sfCultureInfo::getInstance($lc)->getLanguages(array($lc)));
}
$addEmpty = isset($options['add_empty']) ? $options['add_empty'] : false;
if (false !== $addEmpty)
{
$languages = array_merge(array('' => true === $addEmpty ? '' : $addEmpty), $languages);
}
$this->setOption('choices', $languages);
}
}