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



我想用法语显示一个国家的全名,但我得到了这个错误:在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

引用自文档:

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

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

你的函数

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

最新更新