如何在 symfony 6 中为所有英语语言添加两个字母 gb 标志?

问题描述 投票:0回答:1

我使用 symfony 6 和 intl 包(也是 intl-extra)设置翻译,一切都很完美,现在我想添加切换语言的功能,所以我将其添加到我的 twig 模板中:

<ul class="dropdown-menu">
    {% for locale in locales() %}
        {% set is_active = app.request.locale == locale.code %}
        {% set english_flag = locale.code == 'en' ? 'gb' : locale.code %}
        <li class="{{ is_active ? 'active' }}" translate="no">
            <a class="dropdown-item" lang="{{ locale.code }}" hreflang="{{ locale.code }}" href="#">
                <img src="https://flagcdn.com/{{ english_flag }}.svg" alt="English flag" width="20"/>
                {{ locale.name|capitalize }}
            </a>
        </li>
    {% endfor %}
</ul>

我想添加标志(使用CDN),但是英语不是一个国家,没有官方标志,所以我必须定义一个变量和三元运算符来将en字母代码更改为gb才能显示正确的标志。但是,我不喜欢这种方法。还有别的办法吗?你是怎么做到的?

理想情况下,我想我们必须创建一个类来对所有语言环境代码英语国家进行分组?

symfony twig intl twig-extension
1个回答
0
投票

我找到了一个更有趣的解决方案,但我知道不建议使用基于标志的语言系统,许多国家都说英语,所以要显示哪些标志..

这是我目前的解决方案,我添加了一个树枝过滤器,它允许我根据区域设置定义某些规则:

public function getFlag(?string $flag): string
{
    switch ($flag) {
        case 'en':
        case 'us':
            $countryCode = 'gb';
            break;
        default:
            $countryCode = $flag;
    }
    return $countryCode;
}

还有树枝模板:

<ul class="dropdown-menu">
    {% for locale in locales() %}
        {% set is_active = app.request.locale == locale.code %}
        <li class="{{ is_active ? 'active' }}" translate="no">
            <a class="dropdown-item" lang="{{ locale.code }}" hreflang="{{ locale.code }}" href="#">
                <img src="https://flagcdn.com/{{ locale.code|flag }}.svg" alt="" width="20"/>
                {{ locale.name|capitalize }}
            </a>
        </li>
    {% endfor %}
</ul>

如果有人有更好的解决方案,请不要犹豫。

© www.soinside.com 2019 - 2024. All rights reserved.