#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
несколько строк выше.