我想用法语显示一个国家的全名,但我得到了这个错误:在FOSUserBundle:Profile:show_content.html中呈现模板时抛出异常("只支持区域设置"en" .")。
这个代码:
service.yml
boutique.twig.country_extension:
class: BoutiqueUserBundleTwigCountryExtension
tags:
- { name: twig.extension }
CountryExtension.php
<?php
// src/Boutique/UserBundle/Twig/CountryExtension.php
namespace BoutiqueUserBundleTwig;
class CountryExtension extends Twig_Extension {
public function getFilters()
{
return array(
new Twig_SimpleFilter('country', array($this, 'countryFilter')),
);
}
public function countryFilter($countryCode,$locale = "en"){
$c = SymfonyComponentLocaleLocale::getDisplayCountries($locale);
return array_key_exists($countryCode, $c)
? $c[$countryCode]
: $countryCode;
}
public function getName()
{
return 'country_extension';
}
}
树枝> {{ user.country|country(app.request.locale) }}
parameters.yml
# This file is auto-generated during the composer install
parameters:
database_driver: pdo_mysql
database_host: 127.0.0.1
//.............
locale: fr
您需要安装PHP的国际化扩展php5-intl
。
引用自文档:
http://symfony.com/doc/current/components/intl.html替换层仅限于区域设置"en"。如果你想如果使用其他语言环境,则应该安装intl扩展。
你的函数
public function countryFilter($countryCode,$locale = "en"){
需要两个参数,countryCode和local,如果没有提供,默认为"en"
在你的过滤器调用中你只传递了一个参数
user.country|country(app.request.locale)
所以没有提供$locale,它将是默认值"en"
还是我错过了什么?
在你的app/config/config中。Yml,这些行没有注释吗?
translator: {fallback: "%locale%"}default_locale:"%地区%"
@john史密斯:
使用此过滤器,您将获得所有参数
"用户。传入$countryCode和"app.request. country"。$ Locale