_s

_s liefert für einen englischen String die Übersetzung in eine andere, verfügbare Sprache. Falls die Übersetzung nicht vorhanden ist, liefert die Funktion den englischen String zurück.

ssMessage = _s(ssID)

Returnwert

ssMessage ist der zu ssID gehörende String in der eingestellten Landessprache. Falls der String nicht gefunden wurde, ist ssMessage gleich ssID.

Parameter

ssID

ssID ist ein englischer String.

Kommentar

Die Funktion dient dazu Meldungstexte, Menütexte, Dialogfelder usw. in verschiedene Sprachen auszugeben. UniPlot verwendet dazu Techniken ähnlich GNU gettext (http://www.gnu.org/software/gettext/gettext.html).

Beispiel:

// test.ic
def test_error_msg(file, line_no)
{
    printf(_s("Error occurred in file %s, line %d\n"), file, line_no);
}

Mit dem GNU gettext Tool xgettext.exe können die zu lokalisierenden Strings extrahiert werden:

xgettext.exe --add-comments=// --no-wrap -s -k_s --language=c test.ic

Es wird eine sogenannte PO-Datei messages.po erzeugt, mit folgendem Inhalt:

#: test.ic:4
#, c-format
msgid "Error occurred in file %s, line %d\n"
msgstr ""

Die ersten beiden Zeilen beginnend mit dem #-Zeichen sind Kommentarzeilen. Dem extrahierten String msgid folgt der noch leere msgstr. Diese Datei kann nun in verschiedene Sprachen übersetzt werden, z. B. Deutsch:

#: test.ic:4
#, c-format
msgid "Error occurred in file %s, line %d\n"
msgstr "Fehler in Datei %s aufgetreten, Zeile %d\n"

UniPlot verwendet PO-Dateien nicht direkt, sondern verwendet mit MapSave erzeugte Binärdateien auf die schnell zugegriffen werden kann. Alle Message-Strings einer Sprache befinden sich in Unterverzeichnissen unter program\locale\<loc>. <loc> ist eine Länderkennung, z. B. en, de oder ja. Die Dateien haben den Namen uniplot.umo.

Aus den UMO-Dateien können mit der Funktion i18n_umo_to_po(ssUMO, ssPO) PO-Dateien erzeugt werden. Um aus der deutschen UMO-Datei die deutsche PO-Datei zu erhalten, können Sie im Kommandofenster den folgenden Befehl eingeben:

i18n_umo_to_po(GetRootDirectory() + "program\\locale\\de\\uniplot.umo", "d:\\uniplot-de.po")

Sie können die PO-Datei in UniPlot öffnen oder ein Programm wie Poedit (http://www.poedit.net/screenshots.php) verwenden. Die UniPlot-PO-Datei enthält ca. 3000 Messages.

In einem UniPlot-Editor können Sie einfach die Zeilen:

#: test.ic:4
#, c-format
msgid "Error occurred in file %s, line %d\n"
msgstr "Fehler in Datei %s aufgetreten, Zeile %d\n"

an das Ende der uniplot-de.po kopieren.

Um aus der editierten PO-Datei wieder eine UMO-Datei zu erzeugen verwenden Sie den Befehl:

i18n_po_to_umo("d:\\uniplot-de.po", GetRootDirectory() + "program\\locale\\de\\uniplot.umo")

Dazu müssen Sie Schreibzugriff auf das UniPlot-Verzeichnis haben.

Nach dem Neustart von UniPlot liefert nun:

_s("Error occurred in file %s, line %d\n")

den String:

"Fehler in Datei %s aufgetreten, Zeile %d\n"

Einige Hinweise:

  • Die Zeilen in den PO-Dateien, die mit # beginnen, sind Kommentarzeilen. Die Zeichen hinter dem Kommentarzeichen haben folgende Bedeutung:

    white-space
    #  translator-comments
    #. extracted-comments
    #: reference...
    #, flag...
    #~ msgid previous-untranslated-string
    msgid untranslated-string
    msgstr translated-string
    
  • Die erste msgid mit leerem Key "" enthält Informationen zur PO-Datei:

    msgid ""
    msgstr "Project-Id-Version: UniPlot\n"
    "POT-Creation-Date: 2009-12-11 10:27+0100\n"
    "PO-Revision-Date: 2012-12-30 13:21+0100\n"
    "Last-Translator: Roman Brüggenkoch <rb@uniplot.de>\n"
    "Language-Team: \n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Language: de_DE\n"
    

    Wichtig ist der Eintrag "Content-Type: text/plain; charset=UTF-8\n". Es soll immer charset=UTF-8 verwendet werden.

  • Lange Strings in msgid und msgstr können in mehrere Strings aufgeteilt werden. Die folgenden Strings sind äquivalent:

    msgstr "Dies ist ein langer String"
    msgstr "Dies ist ein "
    "langer String"
    msgstr "Dies ist ein "
           "langer Stri"
           "ng"
    msgstr "Dies ist ein"
           " langer Stri"
           "ng"
    
  • Wenn Sie in den PO-Dateien Anführungszeichen, Backslashe, Tabulatorzeichen und Newlines eingeben möchten, müssen Sie sie eingeben wie in der Programmiersprache C: " \" \\ \t \n ".

  • Einige msgids enthalten Dollarzeichen am Anfang, z. B. „$d/conf$Help System“. Dies ist nur eine Kontext-Information, die nicht übersetzt werden darf. $d/conf$ steht für Dialog/Konfiguration. Wenn die msgids sortiert werden, stehen dadurch alle Texte die mit $d/conf$ beginnen, direkt hintereinander.

    msgid "$d/conf$Help System"
    msgstr "Hilfe System"
    
  • Wenn ein Text C-Formatstrings enthält, wie %s oder %d in "Error occurred in file %s, line %d\n", darf die Reihenfolge nicht geändert werden. Die Übersetzung "Fehler in Datei %s aufgetreten, Zeile %d\n" ist korrekt, "Fehler in Zeile %d der Datei %s aufgetreten\n" ist falsch.

  • In den locale-Verzeichnissen, z. B. C:\Program Files (x86)\UniPlot Software\R2013\Program\locale\de\ befinden sich neben der Datei uniplot.umo noch eine Textdatei mit dem Namen id. Die deutsche Datei enthält:

    de,0x07,Deutsch (de)
    

    Eine japanische id-Datei könnte:

    ja, 0x11, Japanese (ja)
    

    oder auch:

    ja, 0x11, 日本人 (ja)
    

    enthalten. Die Datei enthält drei Felder durch Komma „,“ getrennt. Language code, Primary Language ID, Display-String.

  • Unter Extras=>Einstellungen ändern können Sie die Sprache ändern.

  • Um zwei UniPlot-Instanzen gleichzeitig in zwei unterschiedlichen Sprachen zu starten, können Sie ein UniPlot-Icon auf dem Desktop kopieren. Im Eigenschafts-Dialog (rechte Maustaste)

    ../../_images/i18n-icon.png

    verwenden Sie unter Ziel (Target) den Schalter /user z. B. C:\Program Files (x86)\UniPlot Software\R2013\Program\x64\uniplot.exe /user english. Doppelklicken Sie das Icon und ändern Sie die Sprache unter Extras=>Einstellungen ändern.

  • Neben den UMO-Dateien gibt es zur Zeit noch RC-Dateien (Resource-Dateien) mit einigen Dialogen, Menütexten und Meldungstexten. Sie finden die englische und die deutsche RC-Datei unter Samples\SDK\i18n.

History

Version Beschreibung
R2013 (5.50) Dokumentation ergänzt.
3.0 Neu.

id-710243