угловой перевод 2.7.2, AngularJS 1.4.2
У меня есть требование (не спрашивайте...), чтобы для каждого переводимого фрагмента текста на моем сайте на самом деле существовало два перевода-кандидата, один из которых получается путем добавления префикса к translationId.
Примеры переводов:
greeting => "hi"
abc.greeting => "yo"
abc.
здесь мой префикс. Если abc.greeting
можно перевести, то должен быть показан его перевод, в противном случае можно вернуться к translationId greeting
, если он доступен, и если ни один translationId не существует: сдаться, обработать отсутствующий перевод.
Я хочу заключить это поведение в директиву, чтобы мне было удобно использовать его следующим образом:
<p my-translate="greeting"></p>
который производит либо <p>yo</p>
, либо <p>hi</p>
в зависимости от существования translationIds. Я придумал этот код в своей директиве, которая по сути обертывает $translate
:
function translateWithFallback(translationId, translationValues, element, prefix) {
function successHandler(translation) {
element.html(translation);
}
function failureHandler(translationId) {
element.html("???" + translationId + "???");
}
var prefixedTranslationId = prefix + translationId;
$translate(prefixedTranslationId, translationValues).then(successHandler, function() {
$translate(translationId, translationValues).then(successHandler, failureHandler);
});
}
Вскоре я понял, что этого решения не хватает по сравнению с директивой angular-translate: она не замечает выбор языка (думаю, мне нужно слушать на $translateChangeSuccess
) и не настраивает наблюдателей за изменениями в идентификатор перевода и значения перевода. Выполнение всего этого эффективным образом — это то, что уже делает директива angular-translate: https://stackoverflow.com/a/23866441
Итак, мой вопрос: как я могу расширить или повторно использовать директиву перевода, но с запасным вариантом в отношении идентификаторов перевода? Любые идеи?