.. highlightlang:: us .. index:: _s .. _s: _s == .. us.tag _s NOTREADYENGLISH STR Programming.i18 New300 Changed5500 :ref:`s` returns a translated string for an English string. If a translation is not available the function returns the English string. So far the only available language is German. A Japanese translation will soon be available. .. function:: ssMessage = _s(ssID) .. us.return **Return Value** *ssMessage* is the translated string in the selected language. If the translation is not available the *ssID* string (English) is returned. .. us.params **Parameters** .. uparam:: ssID *ssID* the English string being translated. .. us.comment **Comment** UniPlot uses the GNU gettext toolset (http://www.gnu.org/software/gettext/gettext.html). Example:: // test.ic def test_error_msg(file, line_no) { printf(_s("Error occurred in file %s, line %d\n"), file, line_no); } The ``xgettext`` GNU program extracts translatable strings from given input files:: xgettext.exe --add-comments=// --no-wrap -s -k_s --language=c test.ic The program creates a PO file :file:`messages.po`, Example:: #: test.ic:4 #, c-format msgid "Error occurred in file %s, line %d\n" msgstr "" Comment lines starting with #. The untranslated string starts with **msgid**. This field **msgstr** will be empty and must be translated into the target language, for example German:: #: test.ic:4 #, c-format msgid "Error occurred in file %s, line %d\n" msgstr "Fehler in Datei %s aufgetreten, Zeile %d\n" UniPlot will not use the PO files directly. The files are converted to binary files using the :ref:`MapSave` function. All strings of one language are saved in one file ``uniplot.umo`` in the sub-folder :file:`program\\locale\\`. ```` is the language id, for example ``en``, ``de`` or ``ja``. The function ``i18n_umo_to_po(ssUMO, ssPO)`` can be used to convert UMO files to PO files. For example, to convert the German UMO file to a PO file type in the following command into the command window:: i18n_umo_to_po(GetRootDirectory() + "program\\locale\\de\\uniplot.umo", "d:\\uniplot-de.po") You can open the PO file with UniPlot or with ``Poedit`` (http://www.poedit.net/screenshots.php). The UniPlot PO file contains approx. 3000 messages. You can use the UniPlot Editor to add a new entry at the end of the file: .. highlight:: none :: #: test.ic:4 #, c-format msgid "Error occurred in file %s, line %d\n" msgstr "Fehler in Datei %s aufgetreten, Zeile %d\n" To convert a PO file into a UMO file type in the following command:: i18n_po_to_umo("d:\\uniplot-de.po", GetRootDirectory() + "program\\locale\\de\\uniplot.umo") You need write access for you UniPlot directory. Because the update UMO file will be loaded at startup, restart UniPlot after you updated the PO file and type in the following command:: _s("Error occurred in file %s, line %d\n") The return value is:: "Fehler in Datei %s aufgetreten, Zeile %d\n" Some Hints: * The characters behind the comment character # have the following meaning:: white-space # translator-comments #. extracted-comments #: reference... #, flag... #~ msgid previous-untranslated-string msgid untranslated-string msgstr translated-string * The first, empty msgid key ``""`` contains information about the PO file:: 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" An important entry is ``"Content-Type: text/plain; charset=UTF-8\n"``. This entry specifies that the ``charset=UTF-8`` has to be used. * Long strings in msgid and msgstr can be split in multiple lines Example:: 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" * Quotes, backslashes, tab or new line characters in PO files must be specified as in the programming language C: ``" \" \\ \t \n "``. * Some of the msgids contain strings enclosed in $-charactes, e. g. "$d/conf$Help System". This is only a context information and should not be translated. :: msgid "$d/conf$Help System" msgstr "Hilfe System" * If a string contains C format strings like ``%s`` or ``%d``, for example ``"Error occurred in file %s, line %d\n"``. The order of the format strings should not be alterd in the translation. The translation `"Fehler in Datei %s aufgetreten, Zeile %d\n"`` is correct, ``"Fehler in Zeile %d der Datei %s aufgetreten\n"`` is incorrect. * Beside the file ``uniplot.umo``, the locale directory :file:`C:\\Program Files (x86)\\UniPlot Software\\R2013\\Program\\locale\\de\\` contains a second text file with the name ``id``. The German file looks like this:: de,0x07,Deutsch (de) A Japanese ``id`` file would look like this:: ja, 0x11, Japanese (ja) or:: ja, 0x11, 日本人 (ja) The file contains three elements separated by a comma "``,``". Language code, Primary Language ID, Display-String. * The display language can be changed in :ref:`tools-options`. * To open two UniPlot instances simultaneously with different languages create a copy of the UniPlot desktop icon and open the Properties dialog box (right click): .. image:: S:/uniplot-obj/images/i18n-icon.* Modify the **Target** and add the switch ``/user`` e. g. ``C:\Program Files (x86)\UniPlot Software\R2013\Program\x64\uniplot.exe /user english``. Start the UniPlot using the new Icon and open :ref:`tools-options` to select the new language. * Beside the UMO file, UniPlot uses RC files (Resource files) for translation dialogs, menus and message strings. You will find these files in :file:`Samples\\SDK\\i18n`. .. highlight:: us .. us.history **History** .. list-table:: :header-rows: 1 * - Version - Description * - R2013 (5.50) - Documentation updated. * - 3.0 - New .. seealso:: :ref:`overview-strings`, :ref:`get_language` :sub:`id-710243`