jQuery.i18n заменяет ни один существующий ключ именем ключа вместо резервного текста

#javascript #jquery #internationalization #wikimedia

#javascript #jquery #интернационализация #викимедиа

Вопрос:

Я имею в виду https://github.com/wikimedia/jquery.i18n#data-api в документации jQuery.i18n:

 <li data-i18n="message-key">Fallback text</li>
  

Также возможно иметь вышеупомянутый узел li с
уже существующим резервным текстом.

К сожалению, я не понимаю эту работу. Когда у меня нет message-key языкового файла, вместо ключа отображается jQuery.i18n Fallback text : message-key

Мой вопрос:

Что я делаю не так? Как только я добавляю ключ в языковой файл, он заменяется, так что, по-видимому, языковой файл загружается правильно, а также вызовы функций, похоже, работают.

Ответ №1:

Похоже, это ошибка! Я проверял код jQuery.i18n и обнаружил проблему.

Все jquery.i18n.js готово . Он начинается с этого кода в строке # 169:

 if ( message === '' ) {
   message = key;
}
  

Выполняется if , когда для ключа не определен текст, а затем сообщение становится ключом.

Я прокомментировал назначение:

 if ( message === '' ) {
   // message = key;
}
  

Затем мне пришлось изменить в строке # 244 этот код:

 } else {
   $this.text( i18n.parse( messageKey ) );
}
  

Для

 } else {
   const translatedText = i18n.parse( messageKey );
   if ( '' !== translatedText ) {
      $this.text( translatedText  );
   }
}
  

Теперь резервный текст действительно работает. Следующий комментарий в строке № 165, похоже, подтверждает, что это ошибка, и разработчик знает об этом, но каким-то образом он живет с этим:

         // FIXME: This changes the state of the I18N object,
        // should probably not change the 'this.parser' but just
        // pass it to the parser.
  

Если вы примените этот хак, рассмотрите также изменения для html и другие tags несколько строк выше.