Angular 翻译 HTML 个标签

Angular Translate HTML tags

我知道之前有人在这里问过这个问题,但是 none 的答案似乎对我的情况有效

我购买了这个主题 Angle,它与 Angular 1.4.2 和 Angular 翻译 2.6.0 一起使用(甚至更新到最新的 2.7.2)

模板默认带有翻译模块

这是配置文件

  $translateProvider.useStaticFilesLoader({
      prefix : 'app/i18n/',
      suffix : '.json'
  });
  $translateProvider.preferredLanguage('es');
  $translateProvider.useLocalStorage();
  $translateProvider.usePostCompiling(true);
   // Enable escaping of HTML
  $translateProvider.useSanitizeValueStrategy('sanitize'); // I added this line based on Docs wasn't before

以及 JSON 格式的翻译文件

  {
   "page": {
    "PAGES_WELCOME" : "Welcome to <br> MY APPLICATION, HEY THERE IS A BR TAG BEFORE ME"
  },

  "login": {
    .
    .
    .
    .
  },

但是我无法在 JSON 文件的文本中添加 HTML 标签,而不是获取

欢迎光临 我的应用程序

我正在

欢迎使用我的APP

我该如何解决这个问题?

编辑

我不想删除标签,我的 JSON 文件被后端修改,它可以并且将包含 HTML 标签,我希望这些标签在输出上起作用。

内容绑定的 JADE 示例

div(class="col-lg-4 col-md-4 col-sm-4 col-xs-12 footer-left")
  p(class="text-center") 
    {{ 'page.PAGES_WELCOME' | translate }} 

But i cannot add HTML tags inside the text, on the JSON file, instead of getting

Welcome to MY APP

I'm getting

Welcome to

MY APP

你有一个 <br> 打破了这条线,就像你说的你不想要的,所以像这样删除它:

{
   "page": {
    "PAGES_WELCOME" : "Welcome to {{appName}}"
  },

  "login": {
    .
    .
    .
    .
  },

Angular 在其插值期间清理任何 html 字符串。 为了解决这个问题,您需要在注入之前在 $sce 中将 HTML 标记为安全。然后还使用 ngBindHtml 输出 html.

我以前没有用过 angular-translate,但这可能有用:

//app is the main module
app.filter("htmlSafe", ['$sce', function($sce) {
    return function(htmlCode){
        return $sce.trustAsHtml(htmlCode);
    };
}]);

//then to output it
<span data-ng-bind-html="'page.PAGES_WELCOME' | translate | htmlSafe"></span>

用 AngularJS 1.4.7 测试过,我只用这个:

<span data-ng-bind-html="'my.i18n.code.to.translate.html.tags' | translate"></span>

因为我不想注入任何过滤器,但以上只是对我自己信任的 i18n 字符串起作用。当然,接受的答案会更安全,但这个答案马上就可以了。

安装 ngSanitize 模块。

它使您能够绑定 html 内容,然后像这样更改您的代码:

ng-bind-html="'a_key_with_html' | translate"

我真的不想在我的 html 模板中使用标签。标签没有意​​义。

我终于让它工作了。环境:Angular 1.5.8,angular-翻译:2.11.0

我的解决办法是: 1. 加载 ngSanitize 并初始化模块

  1. $translateProvider.useSanitizeValueStrategy('sanitize');

  2. <p ng-bind-html="'Please <strong>refresh</strong> the browser' | translate"></p>

您可以保持 JSON 文件原样,然后只需使用 HTML 中的 innerHTML 属性来呈现您的文本,如下所示:

 <div [innerHTML]="'page.PAGES_WELCOME' | translate"></div>