javascript - 使用 willdurand/BazingaJsTranslationBundle 的问题

标签 javascript symfony internationalization translation

为了在我的 JavaScript 文件中使用翻译,我实现了 willdurand/BazingaJsTranslationBundle .我完全遵循了 repository documentation :

  1. 我安装了包

    composer require "willdurand/js-translation-bundle:@stable"
    
  2. 我注册了新的包

    // ...
    new Bazinga\Bundle\JsTranslationBundle\BazingaJsTranslationBundle(),
    
  3. 我设置了路线

    # app/config/routing.yml
    _bazinga_jstranslation:
        resource: "@BazingaJsTranslationBundle/Resources/config/routing/routing.yml"
    
  4. 我将语言环境添加到我的 <html>标签

    <html lang="{{ app.request.locale }}">
    
  5. 我添加了三个 JavaScript 文件

    <script type="text/javascript" src="{{ asset('bundles/bazingajstranslation/js/translator.min.js') }}"></script>
    <script type="text/javascript" src="{{ url('bazinga_jstranslation_js', { 'domain': 'MyBundle' }) }}"></script>
    <script type="text/javascript" src="{{ url('bazinga_jstranslation_js', { 'domain': 'validators' }) }}"></script>
    

    ...第一行调用包中的翻译器文件,第二行包含我的包中的翻译元素,第三行调用验证器元素。

  6. 我转储了翻译文件

    php app/console bazinga:js-translation:dump
    
  7. 我在我的代码中包含了一些经过翻译的元素

    Translator.trans('key', { "foo" : "bar" }, 'MyBundle');
    

奇怪的是:一切正常。但是当我注销并登录时,我没有将我路由到我的常规起始页面,而是路由到验证器路由 ( http://my.domain.tld/translations/validators ) 并显示该文件的内容:

(function (Translator) {
    Translator.fallback      = 'de';
    Translator.defaultDomain = 'MyBundle';
    // de
    Translator.add("This value should be false.", "Dieser Wert sollte false sein.", "validators", "de");
    // ...
})(Translator);

现在这里出了什么问题?我不认为我错误地配置了 bundle 。那么这是 bundle 的实际错误,还是我可能错误配置了 bundle ?

更新

我去掉这一行之后

    <script type="text/javascript" src="{{ url('bazinga_jstranslation_js', { 'domain': 'validators' }) }}"></script>

我得到了同样的错误,但没有被路由到 http://my.domain.tld/translations/validators我被路由到 http://my.domain.tld/translations/MyBundle正在向我展示其内容。

最佳答案

这是一个安全问题:转储的 JS(和 JSON)翻译文件位于 /web/js/translations 文件夹中,因此应该被防火墙排除。但它们实际上是通过 /translations/ 路由的。所以我必须在相应的 security.firewalls.dev.pattern 设置中添加 translations 路径:

# security.yml
security:
    ...
    firewalls:
        dev:
            pattern:  ^/(_profiler|_wdt|css|js|translations)
            security: false

请注意,这不仅适用于 dev 环境,还适用于 testprod 环境,因为

the name dev for the firewall is because it was meant to cover the profiler and the web debug toolbar initially. It was then extended to cover assets as well without being renamed in the standard edition.

关于javascript - 使用 willdurand/BazingaJsTranslationBundle 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818005/

相关文章:

javascript - 将 SVG 路径转换为相关命令

javascript - 使用 javascript 将整数值发送到 php 并返回值

php - Symfony 2——匿名页面有空的 "security.context" token ?

Symfony 2 : How to generate image paths in javascript file?

javascript - Material UI DatePicker 显示错误的日期

javascript - Prototype - 形成原型(prototype)监听器和 dom 监听器的集合

facebook - 链接 facebook 用户时缺少解析 REST Api 的用户密码

angular - 您如何实现Angular国际化的数据库方法?

html - 您如何处理带有标记的文本翻译?

ios - 我真的需要为每个 UIStoryboard 语言文件添加两次相同的元素吗?