Üzenetsablonok használata

Korábban bemutattuk, hogy az OpenSocial üzenet sablonok hogyan használhatóak csoportosított hírfolyam elemek küldéséhez, de nem ejtettünk szót arról, hogy milyen egyéb felhasználási lehetőségeik vannak: lehetőség van az alkalmazások többnyelvűvé tételére, illetve ezt a lehetőséget használhatjuk az alkalmazáson belül megjelenített szövegekhez akkor is, ha nem célünk a többnyelvűség.

Alkalmazáson belüli felhasználás

Ha az alkalmazáson belül egy üzenetet, szöveget szeretnénk valahol megjeleníteni, és szeretnénk betartani az MVC mintát, akkor jól jöhetnek az üzenet sablonok. A sablonok tartalma (definiálásukat lásd a korábbi bejegyzésünknél) egyszerűen lekérdezhető a következő JavaScript kódrészlettel:

var prefs = new gadgets.Prefs();
var text = prefs.getMsg("hello_world");

A “text” változóban a “hello_world” name paraméterű üzenet szövegét fogjuk megkapni. Az OpenSocial nem kínál olyan függvényt, mely segítségével sablon változók feloldhatóak lennének, de egy ilyet könnyen írhatunk saját magunk is:

if (!iWiW) iWiW = {};
iWiW.getMsg = function(name, parameters) {
  var prefs = new gadgets.Prefs();
  var template = prefs.getMsg(name);
  if (parameters) for (var p in parameters) {
    template = template.replace('${' + p + '}', parameters[p];
  }
  return template;
}

Ha a “szorzas” nevű sablonunk szövege “Az ${a}*${b} szorzás eredménye ${c}”, akkor a függvény az iWiW.getMsg(”szorzas”, { ‘a’: 2, ‘b’: 2, ‘c’: 5 }); formában hívható meg.

Az sablonok szövege azonban nem csak JavaScriptből kérdezhető le, az alkalmazás XML-jében bárhol tudunk hivatkozni rá, és az OpenSocial előfeldolgozó lecseréli a hivatkozást a megfelelő szövegre. Avagy a fent elsőként bemutatott “bonyolult” kódrészlet helyett írhatjuk ezt is:

var text = '__MSG_hello_world__';

A “__MSG_azonosító__” (az egyértelműség kedvéért: az idézőjelet nem kell köréírni) szerepelhet bárhol az alkalmazás XML-jében, tehát a HTML vagy a CSS részekben is. Amire figyelni kell, hogy a fenti példa nem működik jól, ha az üzenet szövegében aposztróf is szerepel, hiszen ekkor nincsen megfelelően escape-elve az aposztróf karakter, s JavaScript hibát fogunk kapni (JavaScript kódrészbe az előbb ismertetett módon célszerű használni a sablonokat).

Többnyelvű alkalmazások

Bár az iWiW kapcsán jellemzően csak magyar nyelvű alkalmazások készülnek, de a sablonok jól használhatóak többnyelvű alkalmazások készítéséhez is (ráadásul eredetileg ebből a célból lett implementálva a funkció). Ha más OpenSocialt támogató oldallal is szeretnénk kompatibilissé tenni alkalmazásunkat, akkor mindenképpen célszerű a sablonok használatát választanunk.

A sablonok definiálásakor kell megadnunk a nyelvet:

<ModulePrefs>
  <Locale messages="http://example.hu/messages_HU.xml"/>
  <Locale messages="http://example.hu/messages_EN.xml" lang="EN"/>
</ModulePrefs>

Ebben a példában a magyar nyelvű üzenet definíciókhoz nem adtunk meg nyelvet - ezt választottuk alapértelmezettnek -, az angol nyelvű üzeneteknél a “lang” paramétert használtuk az nyelv megadásához. Ha az alkalmazást angol nyelvű környezetben töltik be, akkor a “messages_EN.xml” lép érvénybe, minden más esetben pedig a magyar nyelvű szövegek.

A témakörről itt bővebben is lehet olvasni.

1 megjegyzés - “Üzenetsablonok használata”


  1. 1 Szepesházi András

    A sablon változók feloldására szolgáló példakódban van 2 elírás:

    if (!iWiW) iWiW = {};

    helyett

    if (typeof iWiW=”undefined”) iWiW = {};

    és

    template = template.replace(’${’ + p + ‘}’, parameters[p];

    helyett

    template = template.replace(’${’ + p + ‘}’, parameters[p]);

    (lemaradt a zárójel a végéről)

Hagyj egy megjegyzést