2014-03-29 1 views
12

Я изучаю, что возможно с помощью библиотеки локализации i18next.Перевести пользовательские атрибуты с помощью i18next (placeholder, value)

Сейчас у меня есть следующий код (full Fiddle is here):

HTML

<div data-i18n="title"></div> 
<input placeholder="Hello" value="name"> 
<div class="holder"></div> 
<button class="lang" data-lang="en">Eng</button> 
<button class="lang" data-lang="ch">Chi</button> 

JS

$(document).ready(function() { 
    i18n.init({ 
     "lng": 'en', 
     "resStore": resources, 
     "fallbackLng" : 'en' 
    }, function (t) { 
     $(document).i18n(); 
    }); 

    $('.lang').click(function() { 
     var lang = $(this).attr('data-lang'); 
     i18n.init({ 
      lng: lang 
     }, function (t) { 
      $(document).i18n(); 
     }); 
    }); 
}); 

Он переводит все text элементы, но проблема заключается в том, что Я не могу перевести custom attributes. Например, текст внутри div переводится, но я не могу понять, как я могу перевести пользовательские атрибуты, такие как placeholder и value.

Другая проблема заключается в моем способе перевода. Всякий раз, когда нажимается кнопка Chi, Eng, я инициализирую перевод (но я не уверен, что это правильный путь). Edit Я думаю, что я нашел, как решить эту проблему (мне нужно использовать setLng): i18n.setLng(lang, function(t) { ... })

ответ

27

Задав i18next creator этот вопрос непосредственно, я получил following reply: все, что нужно поставить свой собственный атрибут в передней части перевод. Вот пример:

<div data-i18n="[title]titleTransl"></div> 
<input data-i18n="[placeholder]placeTransl" value="name"> 

Если требуется несколько атрибутов, разделите их ;.

я узнал 2 вещи от этого:

  • я должен прочитать больше документации.
  • Создатель 118next действительно полезен (это замечание спасибо для него).
+0

Предположим, что у нас есть что-то вроде этого: '

', тогда как мы переводим 'Country'? –

+0

@AjayKulkarni в вашем примере здесь страна не является атрибутом. –

+1

Да, я пробовал этот код: '' и '$ ('# country'). Text ($. T ('app .country ')); '. Это сработало –

7

Для меня следующая работал

<input data-i18n="[placeholder]placeTransl" value="name"> 

Так просто введите имя атрибута между [], а затем перевод.

+0

Извините, я не получил ваш ответ для работы. Мне пришлось использовать атрибут data-i18n, чтобы заставить его работать. – Skullbox

+0

О, извините, я не заметил, что ваш ответ отличается. Очень жаль это. +1 –

+1

Нет проблем! Ваш ответ указал мне в правильном направлении, поэтому спасибо! – Skullbox

Смежные вопросы