fboerner 2010-02-06 17:38:31 UTC
FreeBSD German Documentation Repository
Modified files:
books/developers-handbook/l10n chapter.sgml
Log:
MFen 1.12
Abschnitt ueber POSIX NLS hinzugefuegt; mit Korrekturen von Daiel Seufert (<ds at praxis123 dot de>
Approved by: bcr (mentor)
Revision Changes Path
1.11 +242 -1 de-docproj/books/developers-handbook/l10n/chapter.sgml
Index: chapter.sgml
===================================================================
RCS file: /home/cvs/de-docproj/books/developers-handbook/l10n/chapter.sgml,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -I$FreeBSDde.*$ -r1.10 -r1.11
--- chapter.sgml 24 Jan 2010 19:28:23 -0000 1.10
+++ chapter.sgml 6 Feb 2010 17:38:31 -0000 1.11
@@ -3,8 +3,8 @@
The FreeBSD German Documentation Project
$FreeBSD$
- $FreeBSDde: de-docproj/books/developers-handbook/l10n/chapter.sgml,v 1.10 2010/01/24 19:28:23 fboerner Exp $
- basiert auf: 1.11
+ $FreeBSDde: de-docproj/books/developers-handbook/l10n/chapter.sgml,v 1.11 2010/02/06 17:38:31 fboerner Exp $
+ basiert auf: 1.12
-->
<chapter id="l10n">
@@ -87,4 +87,245 @@
</sect2>
</sect1>
+
+ <sect1 id="posix-nls">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Gábor</firstname>
+ <surname>Kövesdán</surname>
+ <contrib>Beigetragen von </contrib>
+ </author>
+ </authorgroup>
+ </sect1info>
+
+ <title>Lokalisierte Nachrichten mit POSIX.1 Native Language
+ Support (NLS)</title>
+
+ <para>Über die Basisfunktionen von I18N hinaus, wie das Bereitstellen
+ von verschiedenen Eingabecodierungen oder die diversen nationalen
+ Konventionen, zum Beispiel die verschiedenen Dezimalpunkte, ist es
+ auf einem höheren Level von I18N möglich, die Ausgabe
+ von Programmen zu lokalisieren. Ein Weg dies zu tun besteht in der
+ Nutzung der POSIX.1 NLS-Funktionen von &os;.</para>
+
+ <sect2 id="nls-catalogs">
+ <title>Organisation von lokalisierten Mitteilungen in Katalog
+ Dateien</title>
+
+ <para>POSIX.1 NLS basiert auf Katalogdateien, welche die lokalisierten
+ Mitteilungen in der entsprechenden Codierung enthalten. Die
+ Mitteilungen sind in Sets organisiert und jede Mitteilung ist
+ durch eine eindeutige Zahl in dem jeweilgen Set identifiziert.
+ Die Katalogdateien werden nach der Lokale, von den jeweiligen
+ lokalisierten Mitteilungen, die sie enthalten, gefolgt von der
+ <literal>.msg</literal> Endung benannt. Zum Beispiel werden die
+ ungarischen Mitteilungen für das ISO8859-2 Encoding in
+ einer Datei mit dem Dateinamen <filename>hu_HU.ISO8859-2</filename>
+ gespeichert.</para>
+
+ <para>Diese Katalogdateien sind normale Textdateien, welche die
+ nummerierten Mitteilungen enthalten. Es ist möglich
+ Kommentare in die Dateien zu schreiben, indem Sie ein
+ <literal>$</literal>-Zeichen an den Anfang der Zeile setzen.
+ Das Setzen von Grenzen wird ebenfalls durch spezielle Kommentare
+ möglich wobei das Schlüsselwort <literal>set</literal>
+ direkt nach dem <literal>$</literal>-Zeichen folgen muss. Dem
+ Schlüsselwort <literal>set</literal> folgt dann die Set-Nummer.
+ Ein Beispiel:</para>
+
+ <programlisting>$set 1</programlisting>
+
+ <para>Der aktuelle Mitteilungseintrag startet mit der
+ Mitteilungsnummer gefolgt von der lokalisierten Nachricht. Die
+ bekannten Modifikatoren von &man.printf.3; werden akzeptiert:</para>
+
+ <programlisting>15 "File not found: %s\n"</programlisting>
+
+ <para>Die Katalogdateien müssen in binärer Form vorliegen,
+ bevor sie von einem Programm benutzt werden können. Dies wird
+ mit dem &man.gencat.1; Tool durchgeführt. Das erste Argument
+ ist der Dateiname des kompilierten Katalogs und die weiteren
+ Argumente sind die Eingabekataloge. Die lokalisierten
+ Mitteilungen können auf mehrere Katalogdateien aufgeteilt
+ sein. Danach werden dann alle auf einmal mit dem &man.gencat.1;
+ Tool kompiliert.</para>
+
+ </sect2>
+
+ <sect2 id="nls-using">
+ <title>Nutzung der Katalogdateien im Quellcode</title>
+
+ <para> Das Benutzen der Katalogdateien ist einfach. Um die
+ relevante Funktion zu nutzen, muss <filename
+ class="headerfile">nl_types.h</filename> in die Quelldatei
+ eingefügt werden. Bevor ein Katalog benutzt werden
+ kann, muss er mit &man.catopen.3; geöffnet werden.
+ Die Funktion hat 2 Argumente. Der erste Parameter ist der
+ Name des installierten und kompilierten Katalogs. Normalerweise
+ wird der Name des Programmes, zum Beispiel
+ <application>grep</application>, genutzt. Dieser Name wird
+ zum Suchen der kompilierten Katalogdatei benutzt. Der Aufruf
+ von &man.catopen.3; sucht nach dieser Datei in <filename
+ class="directory">/usr/share/nls/<replaceable>locale</replaceable>/<replaceable>catname</replaceable></filename>
+ und in <filename
+ class="directory">/usr/local/share/nls/<replaceable>locale</replaceable>/<replaceable>catname</replaceable></filename>,
+ wobei <literal>locale</literal> die gesetzte Lokale und
+ <literal>catname</literal> der Katalogname ist. Der zweite
+ Parameter ist eine Konstante, die zwei Werte haben kann:</para>
+
+ <itemizedlist>
+ <listitem>
+
+ <para><literal>NL_CAT_LOCALE</literal>, hat die Bedeutung,
+ dass die benutzte Katalogdatei auf
+ <envar>LC_MESSAGES</envar> basiert.</para>
+
+ </listitem>
+
+ <listitem>
+
+ <para><literal>0</literal>, hat die Bedeutung, dass
+ <envar>LANG</envar> benutzt wird, um die Katalogdatei
+ zu öffnen.
+ </para>
+
+ </listitem>
+ </itemizedlist>
+
+ <para>Der &man.catopen.3; Aufruf gibt einen Katalogidentifizierer
+ vom Type <literal>nl_catd</literal> zurück. Sehen Sie in der
+ Manualpage nach, um eine Liste mit möglichen Fehlercodes
+ zu erhalten.</para>
+
+ <para>Nach dem Öffnen eines Katalogs, kann &man.catgets.3;
+ benutzt werden, um Mitteilungen zu erhalten. Der erste
+ Parameter ist der Katalogidentifizierer, der von
+ &man.catopen.3; zurück gegeben wurde, das zweite ist die
+ Nummer des Sets, das dritte die Nummer der Mitteilung und das
+ vierte ist eine Fallbackmitteilung, die angezeigt wird,
+ falls die gewünschte Mitteilung in der Katalogdatei
+ nicht verfügbar ist.</para>
+
+ <para>Nach der Nutzung der Katalogdatei, muss sie mit dem
+ Kommando &man.catclose.3;, geschlossen werden. Es besitzt
+ ein Argument, die Katalog ID.</para>
+
+ </sect2>
+
+ <sect2 id="nls-example">
+ <title>Ein Beispiel aus der Praxis</title>
+
+ <para>Das folgende Beispiel zeigt einen einfachen Weg wie man
+ NLS Kataloge flexibel nutzen kann.</para>
+
+ <para>Die nachfolgenden Zeilen müssen in eine allgemeine
+ Headerdatei, die in allen Quelldateien vorhanden ist, die
+ lokalisierte Mitteilungen benutzen, eingefügt werden:</para>
+
+ <programlisting>
+#ifdef WITHOUT_NLS
+#define getstr(n) nlsstr[n]
+#else
+#include <nl_types.h>
+
+extern nl_catd catalog;
+#define getstr(n) catgets(catalog, 1, n, nlsstr[n])
+#endif
+
+extern char *nlsstr[];
+ </programlisting>
+
+ <para>Als nächstes fügen Sie die folgenden Zeilen
+ in den globalen Deklarationsteil der Hauptquelldatei ein:</para>
+
+ <programlisting>
+#ifndef WITHOUT_NLS
+#include <nl_types.h>
+nl_catd catalog;
+#endif
+
+/*
+* Default messages to use when NLS is disabled or no catalog
+* is found.
+*/
+char *nlsstr[] = {
+ "",
+/* 1*/ "some random message",
+/* 2*/ "some other message"
+};
+ </programlisting>
+
+ <para>Als nächstes kommt der Code der den Katalog
+ öffnet, liest und schliest:</para>
+
+ <programlisting>
+#ifndef WITHOUT_NLS
+ catalog = catopen("myapp", NL_CAT_LOCALE);
+#endif
+
----------------------------------------------
Diff block truncated. (Max lines = 200)
----------------------------------------------
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-cvs-doc" in the body of the message
Received on Sat 06 Feb 2010 - 18:38:47 CET