Как я могу предоставить недостающие файлы перевода для библиотек SAPUI5?
У меня есть приложение SAPUI5, которое пытается загрузить некоторые файлы перевода на основе языка пользователя, но эти языки отсутствуют в исходной библиотеке SAP.
Например, он пытается загрузить перевод с помощью fa
локаль следующим образом:
https://webidetestingXXXXXXX.dispatcher.hana.ondemand.com/webapp/resources/sap/m/messagebundle_fa.properties
Как видно пытается прочитать перевод с sap.m
пространство имен!
Теперь возникает вопрос, поскольку у меня есть доступ к файлу перевода этого ресурса на английский, как я могу активировать механизм обратного вызова, который, когда файл перевода отсутствует, он просматривает мою папку i18n, а затем, если он не может найти файл там, затем загрузите перевод по умолчанию!?
Например, я могу скачать файл на английском языке и предоставить перевод на персидский язык в разделе webapp\i18n\sap\m\messagebundle_fa.properties
и когда не удалось найти файл в исходном месте, прочтите его из моей локальной папки!
Обратите внимание на фактический адрес моего webapp\i18n
папка внутри WebIDE похожа на https://webidetestingXXXX.dispatcher.hana.ondemand.com/~1595255696000~/webapp/i18n/
. Который~1595255696000~
относится к текущему экземпляру запускаемого приложения. Как видите, он отсутствует для файлов, которые не удалось загрузить!
1 ответ
В UI5 нет специального механизма перенаправления или обратного вызова для пакетов ресурсов.
Единственные обходные пути, которые я могу себе представить, - это либо использовать функцию сопоставления путей загрузчика модуля UI5 для перенаправления запросов для всех языковых файлов библиотеки в вашу собственную расширенную копию (A), либо предварительно загрузить их и зарегистрировать в ожидаемых имена в загрузчике (B).
Оба варианта необходимо применить заранее, прежде чем UI5 попытается получить доступ к любому тексту из библиотек, который вы хотите расширить.
Примечание: я не тестировал полностью эти обходные пути (они могут содержать опечатки или сопоставления / ресурсы, возможно, придется адаптировать), и, что плохо, они работают только для версий UI5 < 1.78. Начиная с версии 1.78 UI5 знает, какие файлы *.properties существуют для каждой библиотеки, и не запрашивает другие файлы.
Вариант А (отображение):
sap.ui.loader.config({
paths: {
"sap/m/messagebundle.properties": "my/enriched/copy/messagebundle.properties"
}
});
Плюсы: использует общедоступный API. Минусы: громоздко, поскольку все языки нужно копировать (и обновлять), и управляемо только тогда, когда требуется не слишком много библиотек.
Вариант Б (предварительная нагрузка):
// somehow load the 'fa' texts for sap.m (ideally async)
var sapmtext = ...;
// then register it in the preload cache of the loader before
sap.ui.require.preload({
"sap/m/messagebundle_fa.properties": sapmtext
});
Минусы: sap.ui.require.preload не является публичным API