symfony2:尝试显示本地化国家/地区名称时出现异常 - 只有区域设置" en"得到支持。"

时间:2014-07-03 17:52:16

标签: symfony internationalization

我想用法语显示国家/地区的全名但我收到此错误: 在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

3 个答案:

答案 0 :(得分:4)

您需要安装PHP的国际化扩展php5-intl

来自文档:

  

替换图层仅限于区域设置“en”。如果你想   使用其他语言环境,您应该安装intl扩展名。

http://symfony.com/doc/current/components/intl.html

答案 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”