Как я могу предоставить недостающие файлы перевода для библиотек 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

Другие вопросы по тегам