【问题标题】:Different host and routes in Symfony witho JMS i18n使用 JMS i18n 的 Symfony 中的不同主机和路由
【发布时间】:2016-04-19 21:41:19
【问题描述】:

我希望使用 Symfony 3 在我的多国网络中使用不同的主机和不同的路由。为此,我使用了 JMS i18n 路由。 我的配置 YML 文件:

jms_i18n_routing:
    default_locale: es_ES
    locales: [es_ES, fr_FR, en_GB]
    strategy: custom
    hosts:
        es_ES: www.aaa.local
        fr_FR: www.aaa-fr.local
        en_GB: www.aaa-uk.local
    redirect_to_host: true

有了这个,我可以正确使用不同的主机,但我不知道如何“翻译”路由,例如:/contacto/contact 和 /contact。

我想加载不同的routing.yml 取决于语言环境。

【问题讨论】:

    标签: php symfony localization internationalization


    【解决方案1】:

    使用 JMSI18nRoutingBundle 时,您的路由将根据您的 route_name 使用 routes 域(Symfony 翻译组件)自动翻译。 因此,假设您的route_name 是联系人,只需创建一个这样的翻译:

    id/source: contact
    domain: routes
    locale: en
    translation/target: /contact
    
    id/source: contact
    domain: routes
    locale: es
    translation/target: /contacto
    

    现在,您使用 Symfony router 的路由(由捆绑包中的一个包裹)将自动从当前语言环境返回已翻译的路由。 如果你想把它翻译成特定的语言环境,只需像这样添加路由参数_locale:

    {{ path("contact", {"_locale": "es"}) }}
    

    或

    $this->get('router')->generate('contact', array('_locale' => 'es'));
    

    【讨论】:

    • 我必须在我的messages.es_Es.yml 中添加此代码?我实际上使用 .po/.mo 翻译文件
    • 它不是“代码”,不是特定格式(不是 yml)。但是你可以只使用你的 .po/.mo 翻译文件。
    • 好的,我生成了一个新的翻译文件:routes.es_ES.po(和.mo):msgid "contact"msgstr "contacto" 但是如果我去 /contacto 路线不匹配。你能告诉我如何以及在哪里可以翻译这条路线的“部分”吗?谢谢!
    • msgstr 应该是“/contacto”..这将是实际路径..(您甚至可以使用“/contacto/{user}/anything”之类的参数)
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2017-10-25
    相关资源
    最近更新 更多