2012-04-08 43 views
4

考慮下面的代碼的Liferay - 使用本地化名稱在JavaScript

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) 
+0

您是否找到答案? – 2012-10-30 12:25:15

回答

0

我相信這是對的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> 

沒有太多明確的,我同意,但相當有效。