Oracle Fusion Middleware Blog

Deutsche Informationen rund um Oracle Fusion Middleware

Mehrsprachigkeit in ADFBC auf Datenebene

leave a comment »

In Anwendungen kann man ja bekanntlich über Resource Bundles  die Weboberfläche mehrsprachig gestalten bzw etwaiges Labeling auf ADF BC Ebene. Aber was macht man, wenn nicht nur Metadaten in der Anwendung, sondern auch einige Stammdaten selbst mehrsprachig gestaltet werden müssen? Ein Beispiel: In Ihrem Datenmodell git es eine Tabelle “TAB_COUNTRIES” mit Ländernamen als Inhalt. Die Spalte “Country” dieser Tabelle soll als Auflistung , z.B. in einer Werteliste oder in einer R/O Table, dargestellt werden. Da bekanntlich die Ländernamen in jeder Sprache anders lauten, also “Deutschland” auf deutsch, “Germany” auf englisch und “Allemagne” auf franzosisch, muss man diese Bezeichnung auch für den aktuellen Sprachenkontext in der Werteliste anzeigen.

Nun kann man ja das Datenmodell mehrsprachig gestalten, also entweder für jede gültige Sprache eine extra Spalte mit dem jeweiligen Bezeichnern oder eine reine Sprachtabelle mit Verpointerung zu den jeweilgen Tabellen. So funktioniert zum Beispiel APEX. Das Problem hierbei ist aber, dass dies Auswirkungen auf die Query hat, das heißt, es muss in ADF der jeweilige Sprachkontext herangezogen und in der Query auf BC verarbeitet werden, bsp “select name_de from tab_countries” für deutsch, “Select name_en from tab_countries” für englisch usw. oder Verarbeitung der Sprache in der Where Clause oder änliches. Der Mechanismus für das Schalten der Mehrsprachigkeit ist hingegen sowieso in ADF für das Labeling on der UI vorhanden. Daher kann man ja versuchen, diese Resource Bundles auch für die jeweiligen Dateninhalte zu verwenden. Demnach würde man in der Table “TAB_COUNTRIES” nun nicht den Ländernamen eintragen, z.B. “Deutschland”, “Frankreich” usw, sondern stattdessen ein Key im Resource Bundle, z.B. “tab.countries.germany”, “tab.countries.france” usw. Natürlich macht das nur Sinn für Stammdaten, d.h. Daten die eine gewisse Statik aufweisen. Jetzt muss man nur noch auf ADF BC das Resource Bundle mit den Werten aus dem Rowset des ViewObject verbinden, Das macht man wie folgt.

    1. ResourceBundle im Project definieren
    2. Prüfe, ob im View Object das ResourceBundle referenizert wird. In der Source Ansicht des ViewObjects müsste es einen Tag <ResourceBundle> geben, der auf das aktuelle ResourceBundle verweist.

image

    1. Erstelle für das ViewObject eine View Row Impl Class

      image

      image

    2. Editiere die Klasse und füge am Ende eine Methode zum Auslesen des ResourceBundles ein

      public String getLocalizedValue(String key) {

          ResourceBundleDef resourceDef = this.getResourceBundleDef();
      Locale locale = this.getApplicationModule().getSession().getLocale();
      String retVal =
      StringManager.getLocalizedStringFromResourceDef(resourceDef, key,
      null, locale, null,
      false);
      return retVal;
      }

 

  • In der Tabelle TAB_COUNTRIES müssen nun in der Spalte Country die entsprechenden RB Key verwendet werden. Editiere das ResourceBundle trage die Keys mit den dazugehörigen Values ein, die als Stammdaten aus der Tabelle geliefert werden, z.B.

    tab.countries.germany=Deutschland
    tab.countries.france=Frankreich

  • Ändere nun in der TabCountriesViewRowImpl die Getter-Methode getCountry, in der der Landesname aus dem Rowset gelesen wird, und schalte hier die getLocalalizedValue Methode dazwischen.

    Original:
    image

    Neu:
    image

  • Beachte: sollte es für den jeweiligen Wert für COUNTRY im Rowset kein RB Key geben, dann wird stattdessen NULL ausgegeben.

 

<DM>

Written by fmtechteam

19/12/2013 um 11:43

Veröffentlicht in ADF, Detlef Müller

Tagged with ,

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: