我可以在json数据中使用i18n资源包吗?

时间:2016-02-18 10:17:10

标签: json internationalization sapui5 resourcebundle

我有一个SAPUI5(V1.24)主从细节应用程序,其中我必须显示大约25个静态项目的列表,每个项目在单击时显示静态图像。

我将列表标题存储在i18n文件中,该文件在ResourceBundle文件中实例化为Component.js

现在我想知道是否可以将所有标题存储在StandardListItem文件夹下的JSON文件中并绑定{{1},而不是在我的Master.xml.view文件中添加25行mockdata个对象。我的JSONModel。但由于我的JSON sap.m.List中的值只是列表标题,我正在寻找一种方法将i18n文本与JSON绑定。像这样:

"key":"value"

但它在运行时没有用。相反,它按原样显示值,如下所示: Master-Detail demo

在视图中添加任意数量的列表项感觉不对。如果明天名单从25增加到50怎么办?请帮忙。

感谢。

2 个答案:

答案 0 :(得分:1)

在我们的聊天讨论后,我提出了以下解决方案

var aAllKeys = [],
    aMasterKeys = [],
    oProperties = {},
    oJSON = {
        items: []
    };
// Get the current locale (for example "de-DE")
var sCurrentLocale = sap.ui.getCore().getConfiguration().getLanguage();
// This creates an array of locale fallback solutions.
// For example ["de-DE", "de", "en", ""]
var aFallbacks = jQuery.sap.resources._getFallbackLocales(sCurrentLocale);
// iterate all locales
for (var i = 0; i < aFallbacks.length; ++i) {
    var sLocale = aFallbacks[i];
    // try to load i18n file for each locale
    oProperties = jQuery.sap.properties({
        url: "i18n/i18n" + (sLocale ? "_" + sLocale : "") + ".properties"
    });
    // if the i18n file exists (i. e. contains keys)
    if (oProperties.getKeys().length > 0) {
        aAllKeys = oProperties.getKeys();
        break;
    }
}

// find all keys of items to display in master (the prefixed ones)
for (i = 0; i < aAllKeys.length; ++i) {
    if (aAllKeys[i].indexOf("MyPrefix.") > -1) {
        aMasterKeys.push(aAllKeys[i]);
    }
}

// find all values of items to display in master
for (i = 0; i < aMasterKeys.length; ++i) {
    oJSON.items.push({
        key: aMasterKeys[i],
        value: oProperties.getProperty(aMasterKeys[i])
    });
}

然后,您可以使用oJSON创建一个新的JSON模型,该模型可以绑定到您的主列表

编辑:我修改了代码段的开头。如果当前语言环境没有i18n文件,则会添加回退解决方案。这是针对SAPUI5 v1.30进行测试的。

答案 1 :(得分:0)

请参阅我在类似主题中提供的解决方案:How is localized data binding set up with JSON files and XML views?

最好的部分,它只需要一个单行辅助方法: - )