2

我有一个 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~运行应用程序的当前实例。如您所见,无法加载的文件丢失了!

4

1 回答 1

3

UI5 中没有针对资源包的特定重定向或回调机制。

我能想象的唯一解决方法是使用 UI5 模块加载器的路径映射功能将库的所有语言文件的请求重定向到您自己的丰富副本 (A) 或预加载它们并在预期下注册它们加载程序 (B) 中的名称。

在 UI5 尝试访问您想要丰富的库中的任何文本之前,必须尽早应用这两种变体。

注意:我没有完全测试这些变通方法(它们可能包含拼写错误或映射/资源可能必须进行调整),而且,这是不好的部分,它们仅适用于 UI5 版本 < 1.78。从 1.78 开始,UI5 知道每个库存在哪些 *.properties 文件,并且不请求任何其他文件。

变体 A(映射)

sap.ui.loader.config({
  paths: {
    "sap/m/messagebundle.properties": "my/enriched/copy/messagebundle.properties"
  }
});
  • Pro:使用公共 API。
  • 缺点:很麻烦,因为所有语言都必须复制(和更新)并且只有在不需要太多库时才可管理。

变体 B(预加载)

// 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。
于 2020-07-21T11:26:20.003 回答