为了在JavaScript文件中使用翻译,我实现了willdurand/BazingaJsTranslationBundle.我完全遵循repository documentation:
>我安装了捆绑包
composer require "willdurand/js-translation-bundle:@stable"
>我注册了新的捆绑包
// ...
new Bazinga\Bundle\JsTranslationBundle\BazingaJsTranslationBundle(),
>我设置路线
# app/config/routing.yml
_bazinga_jstranslation:
resource: "@BazingaJsTranslationBundle/Resources/config/routing/routing.yml"
>我将语言环境添加到了< html>标签
<html lang="{{ app.request.locale }}">
>我添加了三个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>
…第一行从包中调用翻译器文件,第二行包括我包中的翻译元素,第三行调用验证器元素.
>我转储了翻译文件
php app/console bazinga:js-translation:dump
>并且在代码中包含一些翻译后的元素
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);
现在这是怎么了?我认为我没有错误配置捆绑软件.那么,这是捆绑软件的实际错误,还是我可能对捆绑软件进行了错误配置?
更新资料
我删除这行之后
<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设置中添加翻译路径:
# security.yml
security:
...
firewalls:
dev:
pattern: ^/(_profiler|_wdt|css|js|translations)
security: false
注意,这不仅适用于开发环境,还适用于测试和生产环境,因为
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.