2013-04-16 4 views
21

Я использую i18next для питания i18n для своего веб-журнала. Он отлично работает с текстовым контентом, но когда я пытаюсь перевести контент, который включает разметку HTML, он отображает сырую разметку при переводе текста.HTML-теги в i18next translation

В качестве примера приведем фрагмент разметки с поста, который не работает, как ожидалось:

код
<div class="i18n" data-i18n="content.body"> 
    In Medellín they have many different types of <i>jugos naturales</i>&nbsp;(fruit juice) ... <br /> 
    <br /> 
    ... 
</div> 

перевод выглядит следующим образом:

var resources = { 
    "en": ..., 
    "es": { 
    "translation": { 
     "content": { 
     "body": "En Medellín hay varios tipos diferentes de <i>jugos naturales</i> ... <br /><br /> ... " 
     } 
    } 
    } 
} 

i18n.init({"resStore": resources}, function(t) { 
    $('.i18n').i18n(); 
}); 

Когда перевод оказанные HTML-теги экранируются и выводятся в виде текста:

En Medellín hay varios tipos diferentes de &lt;i&gt;jugos naturales&lt;/i&gt;...&lt;br /&gt;&lt;br /&gt; 

Как получить i18next изменить тыс e HTML переведенных элементов?

ответ

30

Для того, чтобы сделать эту работу, вы должны предварить атрибут data-i18n элементов, которые вы хотите перевести с [html]:

<div class="i18n" data-i18n="[html]content.body"> 

Источник: i18next.jquery.js

5

От documentation:

Подсказка 3: Выход из строя:

// given resources 
{   
    'en-US': { 
    translation: { 
     key1: Not escaped __nameHTML__, 
     key2: Escaped __name__ 
    } 
    } 
}; 

i18n.t("key2", { name: '', escapeInterpolation: true }); // -> Escaped &lt;tag&gt; 
i18n.t("key1", { name: '', escapeInterpolation: false }); // -> Not escaped <tag> 

Добавление суффикса 'HTML__' к вашему значению предотвратит экранирование, даже если установлена ​​опция .

Вы можете включить экранирование по init i18n.init({escapeInterpolation: true}); или передав опцию t, как в примере.

+0

Это не работа –

+0

это не работает, html экранирован –

7

Вам нужно отключить спасаясь:

i18n.t("key", { 'interpolation': {'escapeValue': false} })

3
i18n.t('key',{dateStr: date, interpolation: {escapeValue: false}}) 

работа для меня, если дата = '15/10/2020' , слэши хранится и

+0

, но html все еще экранирован, мне интересно, вы сделали другие настройки для html, чтобы не сбежать? –