我想用法语显示国家/地区的全名但我收到此错误: 在FOSUserBundle:Profile:show_content.html.twig第48行呈现模板期间抛出异常(“仅支持区域设置”en“。”。
这个代码:
service.yml
boutique.twig.country_extension:
class: Boutique\UserBundle\Twig\CountryExtension
tags:
- { name: twig.extension }
CountryExtension.php
<?php
// src/Boutique/UserBundle/Twig/CountryExtension.php
namespace Boutique\UserBundle\Twig;
class CountryExtension extends \Twig_Extension {
public function getFilters()
{
return array(
new \Twig_SimpleFilter('country', array($this, 'countryFilter')),
);
}
public function countryFilter($countryCode,$locale = "en"){
$c = \Symfony\Component\Locale\Locale::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
答案 0 :(得分:4)
您需要安装PHP的国际化扩展php5-intl
。
来自文档:
替换图层仅限于区域设置“en”。如果你想 使用其他语言环境,您应该安装intl扩展名。
答案 1 :(得分:0)
你的功能
public function countryFilter($countryCode,$locale = "en"){
需要两个参数,countryCode和local,如果没有提供,默认为“en”
过滤器调用中的只是传递一个参数
user.country|country(app.request.locale)
所以没有提供$ locale,它将是默认值“en”
或者我错过了某事。 ?
答案 2 :(得分:0)
在app / config / config.yml中,这些行没有注释?
译员:{fallback:“%locale%”} default_locale:“%locale%”
@john Smith:
使用此过滤器,您将获得所有参数
“user.country”传入$ countryCode和$ locale中的“app.request.locale”