.. highlightlang:: us .. index:: _s .. _s: _s == .. us.tag _s NOTREADYGERMAN STR Programming.i18 New300 Changed5500 :ref:`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. .. function:: ssMessage = _s(ssID) .. us.return **Returnwert** *ssMessage* ist der zu *ssID* gehörende String in der eingestellten Landessprache. Falls der String nicht gefunden wurde, ist *ssMessage* gleich *ssID*. .. us.params **Parameter** .. uparam:: ssID *ssID* ist ein englischer String. .. us.comment **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: .. highlight:: none :: xgettext.exe --add-comments=// --no-wrap -s -k_s --language=c test.ic Es wird eine sogenannte PO-Datei :file:`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 :ref:`MapSave` erzeugte Binärdateien auf die schnell zugegriffen werden kann. Alle Message-Strings einer Sprache befinden sich in Unterverzeichnissen unter :file:`program\\locale\\`. ```` 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 \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. :file:`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 :ref:`tools-options` 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) .. image:: S:/uniplot-obj/images/i18n-icon.* 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 :ref:`tools-options`. * 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 :file:`Samples\\SDK\\i18n`. .. highlight:: us .. us.history **History** .. list-table:: :header-rows: 1 * - Version - Beschreibung * - R2013 (5.50) - Dokumentation ergänzt. * - 3.0 - Neu. .. seealso:: :ref:`uberblick-strings`, :ref:`get_language` :sub:`id-710243`