Internationalisierung leicht gemacht

Rincl – Ein einheitliches I18n-API für Java

Dominik Mohilo

© Shutterstock.com / cybrain

Während in der Wirtschaft und der Politik die Globalisierung immer wieder Fokus von zum Teil sehr hitzigen Diskussionen ist, stellt sich die Frage in Bezug auf die Softwareentwicklung überhaupt nicht. Software braucht keine Globalisierung um international zu sein, aber die Internationalisierung (I18n) ist zumindest wünschenswert. Um sie zu erleichtern und zu verbessern gibt es nun die Resource I18n Concern Library, aka. Rincl.

In der Softwareentwicklung wird mit Internationalization oder I18n der Prozess beschrieben, Anwendungen mit der Fähigkeit auszustatten, das Umfeld, in dem sie ausgeführt wird, zu erkennen. Wichtig ist dies, um die Erwartungshaltung der Nutzer zu erfüllen, denn die falsche Darstellung mancher Sachverhalte könnte sonst zu Fehlern führen. Ein Beispiel ist die Zifferngruppierung: Im Tausenderbereich wird diese in Deutschland mit einem Punkt, in den USA mit einem Komma und in der Schweiz mit einem Hochstrich dargestellt.

In Java-Anwendungen ist eine der Hauptaufgaben von I18n, verschiedene Resources (etwa nutzerspezifische Nachrichten) in verschiedenen Bundles zu gruppieren, die dann, basierend auf der regionalen Nutzererwartung, lokalisiert werden können. In der Programmiersprache Java werden diese Erwartungen durch die locale-Klasse gruppiert und identifiziert, auch bekannt als language tag. Die Klasse java.util.Locale ist dabei der language tag identifier.

Doch trotz der durchaus nützlichen Klasse java.util.ResourceBundle, die von Java zur Verfügung gestellt wird und einige nützliche und unverzichtbare Funktionen erfüllt, ist sie nicht ausreichend. Zunächst gibt es kein einheitliches API für die Internationalisierung, was ein großer Nachteil ist. Außerdem fehlt ResourceBundle die entsprechende Funktionalität, um mit Klassenhierarchien und Modularisierung in einem großen Abhängigkeitsnetzwerk richtig umzugehen.

Rincl versus Core Java / Quelle: Rincl

Rincl versus Core Java / Quelle: Rincl

Einfache und bessere I18n Dank Rincl

Rincl ist das erste Framework, das via io.rincl.Resources ein reiches, vereinheitlichendes Internationalisierungs-API bietet, um mit den Problemen dieser fertig zu werden. Zudem machen einfach integrierbare Ressourcenspeicher-Implementierungen die Internationalisierung mit Rincl so einfach, wie das Einfügen einer Abhängigkeit.

Im Vergleich zum einfachen Java, das als Resource-Typen nur String und Object erkennt, sind in Rincl neben diesen auch double, int, Path und URI verfügbar. Auch formatierte Nachrichten und optionale Resources werden von Rincl im Gegensatz zu Java an sich unterstützt, genau wie die Inheritance Resolution.

Ein für die Internationalisierung ebenfalls wichtiger Aspekt, der mit Rincl adressiert wird ist die Unterstützung von Charsets wie UTF-8, UTF-16 und UTF-32, Java ist hier auf ISO-8859-1 beschränkt, welches allerdings auch in Rincl implementiert ist.

Der flexible Konfigurationsansatz, der auf Csar basiert, erleichtert die Internationalisierung von Anwendungen zusätzlich. Csar ermöglicht es nämlich eine unterteilte Konfiguration für verschiedene Kontexte auf der gleichen JVM zu erstellen. So können etwa alle Berichte in Deutsch ausgegeben werden, während das UI der Hauptanwendung in Englischer Sprache angegeben wird.

Weitere Informationen zu den Problemen der Internationalisierung in Java gibt es in der Einführung zu Rincl. Wer noch tiefer in die Materie I18n einsteigen möchte, für den gibt es auf der Homepage zur Bibliothek eine umfangreiche Anleitung für Rincl. Herunterladen kann man die Resource I18n Concern Library auf rincl.io

Aufmacherbild: Foreign languages translation concept von Shutterstock / Urheberrecht: cybrain

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: