Liferay - 在javascript中获取本地化名称

时间:2012-04-08 04:01:42

标签: liferay liferay-6

考虑以下代码

function populateLayout(scopeGroupId){
    Liferay.Service.Portal.Layout.getLayouts(
        {
            groupId: scopeGroupId,
            privateLayout: false
        },
        function(layouts){
            for(var i=0;i<layouts.length;i++){
                var layout = layouts[i];
                alert(layout.name);
            }
        }
    );
}

正如您从上面的Liferay的JSON服务API中可以看到的那样,可以获得所有布局。我特别需要在选择框中填充布局名称。我知道该名称存储为xml字符串以支持不同的语言环境。我想知道是否有javascript api只使用此xml字符串和语言ID获取布局的名称。有一个java api用于执行相同的操作如下。我需要等效的JavaScript API。

layout.getName(locale)

LocalizationUtil.getLocalization(String xml, String languageId)

1 个答案:

答案 0 :(得分:1)

我相信Liferay的JavaScript库没有这样的实用程序。

大多数时候人们需要在Liferay中执行此操作,他们只需解析服务器端的内容并将解析后的内容发送给客户端。通常,客户端只需要默认语言环境中的值;如果需要更多,开发人员会找到一种在HTML本身中编写它的方法。参见例如the input-localized tag开发人员编写代码以直接在输出中创建JS对象。

这是有道理的:解析XML的资源成本很高,所以我宁愿在客户端JavaScript上避免使用它。甚至可能在Liferay中有一个实用工具,但我提出了另一种方法:只需在JavaScript中询问您想要使用的内容并将其写入HTML中。例如,而不是编写以下 JavaScript 代码

var names = Liferay.Util.Localization.nonExistentMethodToGetLocaleMap(layout.name);
for (var locale : names) {
     alert(names[locale]);
}

决定服务器端的 显示哪些布局并编写以下 JSP 代码:

Map<Locale, String> names = layout.getNameMap();

<script>
    <% for (String name : names.values()) { %>
    alert('<%= name %>');
    <% } %>
</script>

不太清楚,我同意,但相当有效。