Ich möchte, dass i18n in meinem OCaml-Code funktioniert (Textnachrichten werden in die bevorzugte Sprache des Benutzers übersetzt). Die meisten übersetzbaren Strings sind das erste nicht markierte Argument für eine kleine Gruppe von Funktionen. z.B.
print "Feed '%s':" new_feed
raise_safe "Local feed file '%s' does not exist" path
log_warning ~ex "Error checking signature for %s" feed
Im GUI-Code sollten auch Strings in ~label
arguments extrahiert werden.
Gibt es eine Möglichkeit, diese Strings automatisch zu extrahieren? Um die Dinge interessanter zu machen, verwende ich auch einige Syntax-Erweiterungen (z. B. Lwt).
Ich sehe, es gibt ein ocaml-gettext-Paket, aber:
f_
, s_
, usw.). $NAME
zuerst deaktiviert werden), dann konnte auch die Deinstallation nicht durchgeführt werden, was auch darauf hindeutet, dass es nicht stark genutzt wird. Was benutzen die Leute eigentlich / empfehlen sie?
Dies ist ein Problem, das ich in meinem Benzin Projekt, einem Anwendungs-Toolkit, angehen möchte.
In den Beispielen gibt es ein überentwickeltes Wordcount -Programm. das dient als Anwendungsfall für die Bibliothek. Die Funktion Component.Message.cannot_open
verwendet ihre Format-Zeichenfolge als Schlüssel in einer internationalisierten Nachrichten-Datenbank:
Der sink
ist ein globaler Status der Softwarekomponente, zu der er gehört. Er ist an eine Datenbank mit internationalisierten Nachrichten gebunden, in der eine Übersetzung nachgeschlagen und zur Vorbereitung der eigentlichen Nachricht verwendet wird.
Wie im Beispiel vorgeschlagen, unterstützt diese Funktion Formatierungsangaben, ähnlich wie printf
, wir können beispielsweise ${FILENAME:+20s}
schreiben.
Derzeit ist keine tatsächliche Datenbanksuche implementiert. Die Funktion send
ist im Funktor Generic_message.Sink.Make
definiert, parametrisiert durch ein Modul Database
. Die aktuelle Implementierung von wordcount
verwendet die folgende Implementierung der Datenbank:
Es ist jedoch möglich, diese Definition durch eine tatsächliche Datenbanksuche zu ersetzen, die sich im Rückstand befindet.
Meiner Meinung nach sollte die Internationalisierung von Nachrichten durch Softwarekomponenten - die größte organisatorische Einheit unterhalb der gesamten Anwendung - erreicht werden, und Bibliotheken oder ähnliche Einrichtungen sollten standardmäßige konstante Sum-Typen verwenden, um Fehler zu melden.
Tags und Links internationalization ocaml gettext