Wir verwenden gettext für Übersetzungen in unserem Produkt, haben aber viele Probleme damit gehabt:
- Eine Sprache kann nur verwendet werden, wenn das System sie unterstützt.
Wenn wir unter Solaris 9 Sparc die Umgebung auf verschiedene englische Sprachumgebungen zurücksetzen, wird die Meldung trotzdem nicht übersetzt, wenn der Rechner nicht über die entsprechende Sprachumgebung verfügt. Die Übersetzungsdatei ist vorhanden, aber wir können nicht auf sie zugreifen.
- Nutzt die Umgebung, um die Sprache zu erarbeiten
Dies führt zu Problemen bei Servern, die Nachrichten in verschiedene Sprachen übersetzen wollen. Theoretisch könnte dies ein völlig thread-sicherer, parallelisierbarer Vorgang sein - aber gettext bedeutet, dass wir eine globale Sperre für die Übersetzung haben müssen.
- Standardsprache kann nicht eingestellt werden
Damit meine ich nicht den Text im Code. Wir verwenden MsgIDs im Code. Ich möchte also eine Ausweichübersetzung angeben können, die verwendet wird, wenn die aktuelle Umgebungssprache nicht verfügbar ist. Aber gettext lässt das nicht zu - ich muss es erst versuchen und dann die Umgebung zurücksetzen, bevor es eine andere Übersetzung anzeigt. (Die Verwendung von MsgIDs war nicht meine Wahl - ich wollte den gettext-Standards folgen und Englisch als IDs verwenden, aber ich wurde überstimmt, und es wäre eine Menge Arbeit, das jetzt zu ändern)
- Die Kodierung, die zurückgegeben wird, variiert zwischen UTF-8 und der aktuellen lokalen Kodierung.
Ich meine nicht die .po-Dateien - die sind alle in UTF-8 (ärgerlich, dass msgfmt nicht mit BOM umgehen kann, aber egal). Ich meine die Ausgabe von gettext, ngettext usw., die unter AIX und HPUX in UTF-8 sind (unabhängig von der lokalen/Terminal-Kodierung), aber unter Solaris/Linux/FreeBSD in lokaler Kodierung, obwohl das vielleicht an iconv-Problemen liegt?
Auf jeden Fall wäre es schön, keinen speziellen Code für verschiedene Plattformen haben zu müssen - ich werde nachforschen müssen, ob ich eine bind_textdomain_codeset(domain,codepage);
um gegen dieses Problem anzugehen.
Kennt jemand eine Open-Source-Übersetzungsbibliothek, die eine nützlichere Schnittstelle bietet?