Tuesday, February 11, 2020

Eine Oracle APEX Anwendung mehrsprachig erstellen Part 1




Heutzutage ist es immer wichtiger Webbasierte Anwendungen mehrsprachig zu gestallten. APEX bietet hier einen standardisierten Prozess, der die Umsetzung dem Entwickler deutlich erleichtert.

Wird der Prozess über APEX ausgeführt, so erstellt APEX automatisch für jede Sprache eine Kopie der Hauptanwendung („Shadow-Anwendung“). Shadow-Anwendungen werden nicht im Application-Builder aufgeführt und können somit nicht bearbeitet werden. Alle Codeänderungen werden weiterhin in der Haupt-Anwendung vorgenommen. Diese müssen dann anschließend wieder neu in die übersetzten Shadow-Anwendungen übertragen werden.

Nun aber zur eigentlichen Umsetzung :-)

Als erstes müssen wir der Anwendung beibringen, dass diese Mehrsprachigkeit unterstützt. Hierzu muss unter „Shared Components“ > „Globalization Attributes“ der Wert „Item Preference (use item containing preference)“ für “Application Language Derived From” gesetzt werden.


Als nächstes müssen wir ein Application-Item unter den „Shared Components“ anlegen. Dieses nennen wir „FSP_LANGUAGE_PREFERENCE“ und wählen den Security Level „Checksum Required – Session Level“. „FSP_LANGUAGE_PREFERENCE“ ist ein von APEX reserviertes Item welches nach dem rendern einer Seite feststellt in welcher Sprache die Seite angezeigt werden soll.

Jetzt benötigen wir noch einen Prozess, der die Seite neu lädt, nachdem die Sprache geändert wird. Hierzu legen wir unter „Shared Components“ einen neuen Apllication-Process an. Diesen nennen wir z.B. „set_language“ und wählen den Process-Point „On load: Before Header (page template header)“. In dem Source-Block geben wir folgenden PL/SQL Code ein:

begin
    apex_util.redirect_url(apex_page.get_url(p_page => :APP_PAGE_ID));
end;

Jetzt noch den Condition Type „Request = Expression1“ auswählen und als Expression „LANG“ eingeben.

Als nächstes müssen wir die Möglichkeit der Sprachauswahl implementieren. Dazu erstellen wir eine Auswahlliste mit den Sprachen in der Navigationsleiste. Gehe hierzu zu den „Shared Components“ > „Navigation“ > „Navigation Bar List“ > „Desktop Navigation Bar“. Zunächst benötigen wir den übergeordneten Eintrag „Sprachen“. Hierzu über „Create Entry“ einen neuen Eintrag anlegen und bei „List Entry Label“ „Sprachen“ eingeben. Alles weitere kann außer Acht gelassen werden. Nun legen wir für jede Sprache (in unserem Beispiel „Deutsch“) weitere Untergeordnete Einträge an. Also wieder „Create Entry“ und nun folgendes eingeben.

  • List Entry Label: Deutsch
  • Parent List Entry: Sprachen
  • Target type: page in this application
  • Page: &APP_PAGE_ID.
  • Request: LANG
  • Set these items: FSP_LANGUAGE_PREFERENCE
  • With these values: de


Falls weitere Sprachen hinzugefügt werden sollen, müssen diese Schritte wiederholt werden.

Nun sind alle Vorbereitungen getroffen, so dass wir mit den eigentlichen Übersetzungen beginnen können ;-)

APEX bietet für diesen Prozess einen Übersetzungsworkflow der aus einigen Schritten besteht, die bei jedem Rollout einer neuen Version wiederholt werden müssen.

Den Prozess findet man unter den „Shared Components“ > „Globalization“ > „Translate Application.



1) Define Application Languages

Unter diesem Punkt erstellen wir die „Shadow-Anwendungen“ und teilen der Haupt-Anwendung mit in welchen Sprachen übersetzt werden soll. Klickt „Create“ und vergebt der „Shadow-Anwendung“ eine eindeutige ID (es empfiehlt sich die ID der Hauptanwendung zu verwenden und diese um 01,02,03…zu ergänzen). Dann noch unter „Language“ die Sprache auswählen und mit „Create“ bestätigen.

2) Seed Translatable Text

Hierüber werden die Texte zur Übersetzung in einer Datei exportiert. Die „Translated Application“ muss hierzu ausgewählt werden und dann per klick auf „Seed“ exportiert werden. Jetzt erstellt APEX eine XLIFF Datei die im nächsten Schritt heruntergeladen werden kann.

3) Download XLIFF translation files

Zurück zu Translate geht es nun mit dem nächsten Schritt „Download XLIFF translation files“ weiter. Auf dieser Seite haben wir nun 2 Möglichkeiten. Entweder man exportiert expliziet eine Seite der Anwendung oder die komplette Anwendung. Jetzt muss nur noch die gewünschte Sprache gewählt werden und auf „Export XLIFF file for Application/Page“ geklickt werden. Jetzt kann die Datei lokal gespeichert und bearbeitet werden. Die Datei ähnelt von der Struktur her einer XML Datei. Unter Source findet man die Originalsprache und unter Target die Zielsprache. Nachdem alle Übersetzungen vorgenommen wurden kann die Datei gespeichert und geschlossen werden.

4) Apply XLIFF Translation Files

Hier wird die Datei anschließend wieder hochgeladen und alle Übersetzungen werden importiert. Das geht über den „Upload Files“ Button. Nach erfolgreichem Upload dann die Datei auswählen und der Zielanwendung zuordnen (Apply to Translation). Anschließend „Apply Checked“ klicken.

5) Publish Translated Applications

Und nun kommen wir zum letzten finalen Schritt ;-) Wieder zurück zu „Translate“ klicken wir nun auf den letzten Schritt „Publish Translated Applications“. Hier die Sprachen über die Checkbox auswählen und dann zu erst auf „Seed“ klicken und anschließend „Publish“.


Fertig! Die Anwendung steht nun in mehreren Sprachen zur Verfügung und kann per Klick in der Navigation geändert werden.


Noch ein kleiner Tipp:

Im „Translation Repository“ (Shared Components -> Globalization -> Translate Application -> Translation Repository) können die Übersetzungen noch überprüft werden, oder auch geändert werden falls man nicht den Weg über die XLIFF Datei gehen möchte. Sollten hier Änderungen vorgenommen werden muss anschließend immer noch wie unter Punkt 5 beschrieben die Anwendung per „Seed“ und „Publish vordefiniert und veröffentlicht werden.


Mein persönliches Fazit zum Übersetzungsprozess:

Oracle APEX bietet dem Entwickler mit dieser Methode einen wirklich einfachen und intuitiven Weg eine Anwendung schnell und unkompliziert mehrsprachig zu erstellen. Als kleinen Nachteil würde ich erachten, dass man diesen Prozess immer für jede Anwendung separat betrachten und durchführen muss. Eine gesammelte Übersetzungsdatenbank steht hierbei nicht zur Verfügung und auch in der XLIFF Datei müssen gegebenenfalls Texte mehrfach übersetzt werden. Dennoch ist es im Großen und Ganzen sehr einfach und schnell durchzuführen :-)


In meinem nächsten Blogeintrag werde ich über eine weitere Methode schreiben, in der beschrieben wird wie man einen Übersetzungsprozess ohne dem APEX Standard realisieren kann.

Labels: ,

5 Comments:

At February 27, 2020 at 1:46 PM , Blogger Kinjan Bhavsar said...

Hi,

I tried to follow the blog post and I was trying Arabic language but when I select the language from Navigation bar list, I get the following error

- ERR- 7620 Could not determine workspace of application().

The language I was trying was Arabic (Saudi Arabia) - (ar-sa)

Can you please suggest what I may have missed or doing wrong?


 
At March 2, 2020 at 8:01 AM , Blogger Timo said...

Hi Kinjan,

I have added the language Arabic (Saudi Arabia) in my demo app and I do not got an error. Can you send me please your email address. Then I will send you my demo app. Or can I have a look in your app development ;-)

 
At March 2, 2020 at 8:08 AM , Blogger Kinjan Bhavsar said...

Hi Timo,

Can you please try the following demo URL

https://apex.oracle.com/pls/apex/f?p=125407:LOGIN_DESKTOP:711470204716500:::::

Username:demo
Password :demo$1234

Let me know what mistake I have made and I will correct it and try again.

Thanks

 
At March 2, 2020 at 10:39 AM , Blogger Timo said...

Maybe the error is in the application process?
Is the syntax correct?

owa_util.redirect_url('f?p='||:APP_ID||':'||:APP_PAGE_ID||':'||:APP_SESSION);

 
At March 2, 2020 at 10:41 AM , Blogger Kinjan Bhavsar said...

Thanks Timo.

There was one space which was causing the issue. Once I removed it, the application works fine without any error.

 

Post a Comment

Note: Only a member of this blog may post a comment.

Subscribe to Post Comments [Atom]

<< Home