【问题标题】:Translate a angularJS Value with Symfony使用 Symfony 转换 angularJS 值
【发布时间】:2016-11-23 13:36:17
【问题描述】:

我在后端使用 Symfony 并通过 twig 渲染模板。 对于翻译,我使用以下指南,效果很好。 https://symfony.com/doc/current/translation.html

作品:

{{ "Active Option" | trans({}, 'frontend', app.request.locale) }}

但问题是,我有一些必须翻译的单词在 angularJS 变量中。 我有多个用于翻译的 .xlf 文件,并且我知道 angular.translate。 但我不想实现它。

{{ '{{' }} item.optionTitle {{ '}}' | trans({}, 'option', app.request.locale) }}

谁能解释我如何用 twig translate 转换 angularJS 变量的值?

【问题讨论】:

    标签: php angularjs symfony translation


    【解决方案1】:

    https://github.com/willdurand/BazingaJsTranslationBundle

    twig 的翻译呈现在服务器端,你的 js 是客户端。使用此捆绑包,您可以将翻译公开给 js。但我对那个捆绑和角度没有经验。

    【讨论】:

    • 感谢您的提示。但如果可能的话,我不想使用另一个包或插件。
    【解决方案2】:

    使用verbatim 标签。它将部分标记为不应解析的原始文本。

    例如:

    创建树枝变量并在角度变量的值处影响它

    {% set optionTitle %}
        {% verbatim %} {{ item.optionTitle }}{% endverbatim %} 
    {% endset %}
    

    翻译

    {{ optionTitle | trans({}, 'option', app.request.locale) }}
    

    现在{{ item.optionTitle }} 不会被 twig 解析,而是被 angularjs 解析。

    【讨论】:

    • 感谢您的提示。但我正在使用 twig / symfony 进行翻译。所以我需要树枝中 angularJS 变量的值。你的 sn-ps 对我不起作用
    • 哈希键必须是带引号的字符串、数字、名称或括在括号中的表达式(值“%”的意外标记“运算符” - 出现错误
    • optionTitle 的值是 {{ item.optionTitle }} 并且他搜索 {{ item.optionTitle }} 的翻译而不是它的值:/
    • 你想准确翻译什么?
    • 别忘了包含 angulr lib 和你的 Angular 应用程序
    【解决方案3】:

    您可以创建一个接受字符串进行翻译的 API 端点

    /api/translate?string=Active+Option
    

    并在 API 控制器中翻译

    $translator->trans($string);
    

    然后在AngularJS中构建一个简单的翻译过滤器

    angular.filter('apiTranslate', function($http) {
      return function(string) {
        $http.get('/api/translate?string=' + string).then(function (response) {
          return response;
        });
      };
    })
    

    请记住,还有其他解决方案可以很好地解决这个问题(正如 BazingaJsTranslationBundle 所建议的那样),但您提到您不想使用库,而是想使用 TWIG 进行翻译。

    【讨论】:

      【解决方案4】:

      没有那么多选择。 你需要在你的html中创建类似的东西

      <script>
         var Global = Global || {};
         Global.translation = {{ catalogue|raw|json_encode }}
      </script>
      

      通过这种方式,您可以将翻译全局公开给您的其他文件。

      catalogue 是什么?

      2.6 版开始,symfony 为您提供了一种获取整个翻译目录的方法,以防您需要将其公开给您的前端

      如果您想在应用程序之外使用相同的翻译目录(例如,在客户端使用翻译),则可以获取原始翻译消息。只需指定所需的语言环境

      Documentation

      $catalogue = $translator->getCatalogue('fr_FR');
      $messages = $catalogue->all();
      while ($catalogue = $catalogue->getFallbackCatalogue()) {
         $messages = array_replace_recursive($catalogue->all(), $messages);
      }
      // $messages contains the whole catalogue that you have to pass to frontend
      

      所以基本上你的catalogue 将与前端共享。

      回到前端

      然后我创建了一个函数,它可以简单地按键返回我的翻译。

      function _translate(key) {
          return Global["translation"][key];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多