2012-04-08 6 views
4

Betrachten Sie den folgenden CodeLiferay - Erste lokalisierte Name in 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); 
      } 
     } 
    ); 
} 

Wie Sie aus dem oben Liferay JSON-Service-API sehen können alle Layouts zu erhalten. Ich benötige insbesondere den Layout-Namen, um in einem Auswahlfeld aufzufüllen. Ich weiß, dass der Name als XML-Zeichenfolge gespeichert wird, um verschiedene Gebietsschemas zu unterstützen. Ich habe mich gefragt, ob es Javascript api gibt, um nur den Namen des Layouts mit dieser XML-Zeichenfolge und Sprach-ID zu erhalten. Es gibt eine Java API für das gleiche wie unten. Ich benötige äquivalente JavaScript-API, falls vorhanden.

layout.getName(locale) 

oder

LocalizationUtil.getLocalization(String xml, String languageId) 
+0

Haben Sie die Antwort gefunden? –

Antwort

0

Ich glaube, es keine solche Dienstprogramm auf Liferay JavaScript Libs ist.

Meistens müssen die Leute es in Liferay tun, sie analysieren nur den Inhalt auf der Serverseite und senden den analysierten Inhalt an den Client. Häufig benötigt der Client nur den Wert im Standardgebietsschema. Wenn es mehr benötigt, findet der Entwickler eine Möglichkeit, es in HTML selbst zu schreiben. Siehe z.B. the input-localized tag wo der Entwickler den Code schreibt, um ein JS-Objekt direkt in der Ausgabe zu erstellen.

Das ist sinnvoll: Das Parsen von XML ist ressourcenintensiv, daher würde man es lieber auf clientseitigem JavaScript vermeiden. Es kann sogar sein, dass es ein Dienstprogramm in Liferay gibt, aber ich würde einen alternativen Ansatz vorschlagen: Fragen Sie einfach, was Sie in Ihrem JavaScript verwenden möchten, und schreiben Sie es in den HTML-Code. Zum Beispiel, statt dem Schreiben den folgenden JavaScript Code

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

in serverseitige entscheiden, den folgenden JSP Code zur Anzeigen-Layout und schreibt:

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

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

Nicht viel ist klar, Ich stimme zu, aber eher effizient.