diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100118.html | |
| download | Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100118.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100118.html | 1368 |
1 files changed, 1368 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100118.html b/Master/Reference Architectures and Patterns/hjp5/html/k100118.html new file mode 100644 index 0000000..3d4c992 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100118.html @@ -0,0 +1,1368 @@ +<html>
+<head>
+<title>
+Handbuch der Java-Programmierung, 5. Auflage
+</title>
+</head>
+<body>
+<a name="startofbody"></a>
+<script language="JavaScript" src="hjp4lib.js">
+</script>
+<script language="JavaScript">
+installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100114.html;106,k100117.html;107,k100119.html;108,k100120.html");
+</script>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100114.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100117.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100119.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100120.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">Kapitel 17 - Utility-Klassen II
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="internationalisierung"></a>
+<h2>17.4 <a name="ixa101190">Internationalisierung</a> und <a name="ixa101191">Lokalisierung</a>
+</h2>
+<hr>
+<ul>
+<li><a href="k100118.html#internationalisierung">17.4 Internationalisierung und Lokalisierung</a>
+<ul>
+<li><a href="k100118.html#sectlevel3id017004001">17.4.1 Die Klasse Locale</a>
+<li><a href="k100118.html#sectlevel3id017004002">17.4.2 Zahlen formatieren</a>
+<li><a href="k100118.html#sectlevel3id017004003">17.4.3 Datum und Uhrzeit formatieren </a>
+<li><a href="k100118.html#sectlevel3id017004004">17.4.4 Laden von Ressourcen</a>
+<ul>
+<li><a href="k100118.html#sectlevel4id017004004001">Die Methode getBundle</a>
+<li><a href="k100118.html#sectlevel4id017004004002">Eigene Ressourcenklassen erstellen</a>
+<li><a href="k100118.html#sectlevel4id017004004003">Die Verkettung von ResourceBundles</a>
+<li><a href="k100118.html#sectlevel4id017004004004">Die Klasse PropertyResourceBundle</a>
+</ul>
+</ul>
+</ul>
+<hr>
+
+<p>
+Seit dem JDK 1.1 bietet Java Unterstützung für das <i>Internationalisieren</i>
+von Anwendungen. Auf diese Weise können Programme geschrieben
+werden, die nicht nur im eigenen, sondern auch in anderen Ländern
+der Erde verwendbar sind. Verschiedene Länder und Regionen unterscheiden
+sich nicht nur durch die verwendete Sprache und die zugrunde liegenden
+Schrift- und Zahlzeichen, sondern auch durch unterschiedliche Kalender
+und Zeitzonen, abweichende Zahlen-, Zeit- und Datumsformatierungen,
+eigene Währungen, unterschiedliche Telefonnummern- und Anschriftenkonventionen
+und so weiter.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Die Begriffe <i>Internationalisierung</i> und <i>Lokalisierung</i>
+werden häufig synonym gebraucht oder miteinander verwechselt.
+Unter <i>Internationalisierung</i> wollen wir das Bündel technischer
+Maßnahmen verstehen, mit denen ein Programm für die Verwendung
+in verschiedenen Ländern und Sprachräumen vorbereitet wird.
+Unter <i>Lokalisierung</i> verstehen wir dagegen die konkrete Anpassung
+eines internationalisierten Programms an eine ganz bestimmte Sprache.
+Ein Teil der Internationalisierung eines Programms ist es also beispielsweise,
+wenn Textkonstanten nicht mehr fest im Programm enthalten sind, sondern
+zur Laufzeit aus Ressourcendateien geladen werden. Die Lokalisierung
+hingegen besteht darin, eben diese Textressourcen in die jeweilige
+Sprache zu übersetzen.
+
+<p>
+Im angelsächsischen Sprachraum werden die beiden unhandlichen
+Begriffe meist abgekürzt. Statt »Internationalisierung«
+wird <a name="ixa101192"><i>I18N</i></a> gesagt, statt »Lokalisierung«
+<a name="ixa101193"><i>L10N</i></a>. Die Spielregel ist ganz einfach:
+Zwischen den ersten und letzten Buchstaben des jeweiligen Wortes steht
+die Gesamtzahl der Zeichen.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Internationalisierung ist ein nicht-triviales Thema, das viele Facetten
+hat. Einige Beispiele dafür, in welcher Weise es von Java unterstützt
+wird, sind:
+<ul>
+<li>Mit Hilfe der Klasse <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+wird ein Land oder eine Region der Erde bezeichnet.
+<li>Lokalisierte Ressourcen sorgen dafür, dass die statischen
+Textkonserven eines Programms dem jeweiligen Zielland ohne Änderung
+des eigentlichen Programmcodes angepasst werden können.
+<li>Die Klassen <a href="index_c.html#ixb100557"><font color=#000080><tt>Calendar</tt></font></a>
+und <a name="ixa101194"><a href="index_t.html#ixb100915"><font color=#000080><tt>TimeZone</tt></font></a></a>
+abstrahieren Kalender und Zeitzonen.
+<li>Im Paket <a href="index_j.html#ixb100556"><font color=#000080><tt>java.text</tt></font></a>
+befindet sich eine Vielzahl von Klassen zur Formatierung von Zahlen,
+Datums- und Uhrzeitwerten und Währungen.
+<li>Ein- und Ausgabe-Streams unterstützen Konvertierungen von
+und zu länderspezifischen Zeichensätzen.
+<li>Es gibt Unterstützung zur Eingabe von komplizierten Schriftzeichen,
+wie sie beispielsweise in der japanischen, chinesischen oder koreanischen
+Sprache verwendet werden.
+</ul>
+
+
+<!-- Section -->
+<a name="sectlevel3id017004001"></a>
+<h3>17.4.1 Die Klasse Locale </h3>
+
+<p>
+Ausgangspunkt der Lokalisierung eines Java-Programms ist die Klasse
+<a name="ixa101195"><a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a></a>
+aus dem Paket <a href="index_j.html#ixb100127"><font color=#000080><tt>java.util</tt></font></a>.
+Jede Instanz dieser Klasse identifiziert eine bestimmte geografische,
+kulturelle oder politische Region auf der Erde inklusive der Sprache,
+die dort üblicherweise verwendet wird. Ein <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>-Objekt
+kann wie folgt erzeugt werden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public Locale(String language, String country)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/util/Locale.html" onClick="this.href=getApiDoc('java.util.Locale')"><font color="#660066" size=-1>java.util.Locale</font></a></td>
+</tr>
+</table>
+
+<p>
+Das erste Argument ist ein <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
+mit dem Code für die Sprache, wie er im Standard <a name="ixa101196"><i>ISO-639</i></a>
+definiert ist. Der Sprachcode wird kleingeschrieben und lautet z.B.
+»en« für englisch, »fr« für französich
+oder »de« für deutsch. Das zweite Argument gibt das
+Land gemäß dem Standard <a name="ixa101197"><i>ISO-3166</i></a>
+an, hier werden stets große Buchstaben verwendet. So stehen
+beispielsweise »US« für die USA, »GB« für
+England, »FR« für Frankreich und »DE« für
+Deutschland.
+
+<p>
+Der Länderteil ist optional. Wird an seiner Stelle ein Leerstring
+übergeben, repräsentiert die <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+lediglich eine Sprache ohne spezifisches Land. »en« alleine
+steht dann beispielsweise für die englische Sprache, wie sie
+nicht nur in England, sondern auch in den USA oder Kanada verständlich
+wäre. Soll dagegen auf kanadische Besonderheiten abgestellt werden,
+ist als Land »CA« zu ergänzen. Für den französischsprachigen
+Teil von Kanada würde dagegen eine <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+aus »fr« und »CA« gebildet werden.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Neben Sprach- und Länderkennung kann eine <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+einen dritten Parameter haben. Dieser wird als <i>Variante</i> bezeichnet
+und kann dazu verwendet werden, Betriebssysteme oder Konfigurationen
+voneinander zu unterscheiden. So werden lokalisierte Hilfetexte unter
+UNIX möglicherweise mit anderen Zeichensätzen oder Hilfsprogrammen
+arbeiten als unter Windows oder auf dem Macintosh. Wir wollen darauf
+allerdings nicht weiter eingehen.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Die Klasse <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+bietet mit der statischen Methode <a name="ixa101198"><a href="index_g.html#ixb100813"><font color=#000080><tt>getDefault</tt></font></a></a>
+die Möglichkeit, eine <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+zu beschaffen, die dem Land entspricht, in dem das laufende Programm
+ausgeführt wird. Mit <a name="ixa101199"><a href="index_g.html#ixb100918"><font color=#000080><tt>getCountry</tt></font></a></a>
+kann der Länder-, mit <a name="ixa101200"><a href="index_g.html#ixb100919"><font color=#000080><tt>getLanguage</tt></font></a></a>
+der Sprachcode und mit <a name="ixa101201"><a href="index_g.html#ixb100920"><font color=#000080><tt>getVariant</tt></font></a></a>
+die Variante ermittelt werden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public static Locale getDefault()
+
+public String getLanguage()
+public String getCountry()
+public String getVariant()
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/util/Locale.html" onClick="this.href=getApiDoc('java.util.Locale')"><font color="#660066" size=-1>java.util.Locale</font></a></td>
+</tr>
+</table>
+
+<p>
+Mit <a name="ixa101198"><a href="index_g.html#ixb100813"><font color=#000080><tt>getDefault</tt></font></a></a>
+kann ein Programm zur Laufzeit ermitteln, in welchem Land es läuft
+und welche Sprache dort gesprochen wird. Weiterhin stellt die Klasse
+noch einige Konstanten mit vordefinierten <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>-Objekten
+für wichtige Länder und Sprachen zur Verfügung.
+
+<p>
+Das folgende Beispielprogramm ermittelt die Standard-<a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+des aktuellen Rechners und die vordefinierten Locales für Deutschland,
+England und die USA und gibt sie auf der Console aus:
+<a name="listingid017007"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* Listing1707.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">import</font> java.util.*;
+<font color="#555555">004 </font>
+<font color="#555555">005 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1707
+<font color="#555555">006 </font>{
+<font color="#555555">007 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">008 </font> {
+<font color="#555555">009 </font> System.out.println(<font color="#0000FF">"Default: "</font> + Locale.getDefault());
+<font color="#555555">010 </font> System.out.println(<font color="#0000FF">"GERMANY: "</font> + Locale.GERMANY);
+<font color="#555555">011 </font> System.out.println(<font color="#0000FF">"UK : "</font> + Locale.UK);
+<font color="#555555">012 </font> System.out.println(<font color="#0000FF">"US : "</font> + Locale.US);
+<font color="#555555">013 </font> }
+<font color="#555555">014 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing1707.java"><font color="#000055" size=-1>Listing1707.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 17.7: Darstellung einiger Locales</i></p>
+
+<p>
+Die Ausgabe des Programm sieht hierzulande etwa so aus:
+<font color="#333300">
+<pre>
+Default: de_DE
+GERMANY: de_DE
+UK : en_GB
+US : en_US
+</pre>
+</font>
+
+
+<!-- Section -->
+<a name="sectlevel3id017004002"></a>
+<h3>17.4.2 Zahlen formatieren<a name="ixa101202"></a> </h3>
+
+<p>
+In früheren Abschnitten wurde schon gezeigt, wie Fließkommazahlen
+erzeugt und verarbeitet werden können. Nach Umwandlung in einen
+<a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
+lassen sie sich mit den Methoden <a href="index_p.html#ixb100922"><font color=#000080><tt>print</tt></font></a>
+und <a href="index_p.html#ixb100555"><font color=#000080><tt>println</tt></font></a>
+auf der Console, in Dateien oder auf einer grafischen Oberfläche
+ausgeben - allerdings ohne die Möglichkeit, auf die Formatierung
+der Ausgabe Einfluss zu nehmen. Wir wollen uns in diesem Abschnitt
+die Klasse <a name="ixa101203"><a href="index_d.html#ixb100923"><font color=#000080><tt>DecimalFormat</tt></font></a></a>
+aus dem Paket <a name="ixa101204"><a href="index_j.html#ixb100556"><font color=#000080><tt>java.text</tt></font></a></a>
+ansehen und zeigen, wie Ganz- und Fließkommazahlen mit ihrer
+Hilfe formatiert werden können.
+
+<p>
+<a href="index_d.html#ixb100923"><font color=#000080><tt>DecimalFormat</tt></font></a>
+ist eine Spezialisierung der Klasse <a name="ixa101205"><a href="index_n.html#ixb100924"><font color=#000080><tt>NumberFormat</tt></font></a></a>
+und dient zur Formatierung von Ganz- oder Fließkommazahlen in
+Dezimaldarstellung unter Berücksichtigung länderspezifischer
+Besonderheiten. Der Aufrufer legt dabei die Anzahl der Vor- oder Nachkommastellen
+fest, und <a href="index_d.html#ixb100923"><font color=#000080><tt>DecimalFormat</tt></font></a>
+entscheidet, ob ein Punkt oder Komma als Dezimaltrennzeichen verwendet
+werden soll.
+
+<p>
+Eine Instanz der Klasse <a href="index_d.html#ixb100923"><font color=#000080><tt>DecimalFormat</tt></font></a>
+kann entweder mit <a href="index_n.html#ixb100089"><font color=#000080><tt>new</tt></font></a>
+oder durch Aufruf einer der Factory-Methoden der Klasse <a name="ixa101205"><a href="index_n.html#ixb100924"><font color=#000080><tt>NumberFormat</tt></font></a></a>
+erzeut werden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public DecimalFormat(String pattern)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/text/DecimalFormat.html" onClick="this.href=getApiDoc('java.text.DecimalFormat')"><font color="#660066" size=-1>java.text.DecimalFormat</font></a></td>
+</tr>
+</table>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public static NumberFormat getNumberInstance()
+public static NumberFormat getNumberInstance(Locale locale)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/text/NumberFormat.html" onClick="this.href=getApiDoc('java.text.NumberFormat')"><font color="#660066" size=-1>java.text.NumberFormat</font></a></td>
+</tr>
+</table>
+
+<p>
+Soll ein <a href="index_d.html#ixb100923"><font color=#000080><tt>DecimalFormat</tt></font></a>-Objekt
+für die aktuelle <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+erzeugt werden, kann es durch Übergabe eines Formatstrings direkt
+instanziert werden. Wird es dagegen für eine andere <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+benötigt, muss es mit der statischen Methode <a name="ixa101206"><a href="index_g.html#ixb100925"><font color=#000080><tt>getNumberInstance</tt></font></a></a>
+der Klasse <a href="index_n.html#ixb100924"><font color=#000080><tt>NumberFormat</tt></font></a>
+erzeugt werden. In diesem Fall muss noch die Methode <a name="ixa101207"><a href="index_a.html#ixb100926"><font color=#000080><tt>applyPattern</tt></font></a></a>
+aufgerufen werden, um den Formatstring zuzuweisen:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public void applyPattern(String pattern)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/text/NumberFormat.html" onClick="this.href=getApiDoc('java.text.NumberFormat')"><font color="#660066" size=-1>java.text.NumberFormat</font></a></td>
+</tr>
+</table>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+<a href="index_g.html#ixb100925"><font color=#000080><tt>getNumberInstance</tt></font></a>
+gibt einen Wert vom Typ <a href="index_n.html#ixb100924"><font color=#000080><tt>NumberFormat</tt></font></a>
+zurück (der Basisklasse von <a href="index_d.html#ixb100923"><font color=#000080><tt>DecimalFormat</tt></font></a>).
+Das ist zwar in westlichen Ländern in der Regel eine Instanz
+von <a href="index_d.html#ixb100923"><font color=#000080><tt>DecimalFormat</tt></font></a>.
+Ganz sicher kann sich ein Programm aber nur sein, wenn es den Typ
+des Rückgabewerts vor der Konvertierung nach <a href="index_d.html#ixb100923"><font color=#000080><tt>DecimalFormat</tt></font></a>
+mit <a href="index_i.html#ixb100330"><font color=#000080><tt>instanceof</tt></font></a>
+überprüft.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF"> Warnung </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+<p>
+Der Formatstring definiert eine Maske zur Formatierung der Ausgabe.
+Er besteht aus zwei Teilen, die durch ein Semikolon voneinander getrennt
+sind. Der erste gibt die Formatierungsregeln für positive, der
+zweite für negative Zahlen an. Der zweite Teil kann auch ausgelassen
+werden. Dann werden negative Zahlen wie positive Zahlen mit vorangestelltem
+Minuszeichen formatiert. Jedes Zeichen im Formatstring regelt die
+Darstellung der korrespondierenden Ziffer. Der Formatstring kann folgende
+Zeichen enthalten: <a name="tableid017002"></a>
+
+<p>
+<table cols=2 border width=66%>
+
+<tr>
+<td valign=top align=left width=20%><b>Symbol</b></td>
+<td valign=top align=left width=80%><b>Bedeutung</b></td></tr>
+<tr>
+<td valign=top align=left>0</td>
+<td valign=top align=left>Eine einzelne Ziffer</td></tr>
+<tr>
+<td valign=top align=left>#</td>
+<td valign=top align=left>Eine einzelne Ziffer. Wird ausgelassen,
+falls führende Null.</td></tr>
+<tr>
+<td valign=top align=left>.</td>
+<td valign=top align=left>Dezimaltrennzeichen</td></tr>
+<tr>
+<td valign=top align=left>,</td>
+<td valign=top align=left>Tausendertrennzeichen</td></tr>
+<tr>
+<td valign=top align=left>E</td>
+<td valign=top align=left>Aktiviert Exponentialdarstellung</td></tr>
+<tr>
+<td valign=top align=left>%</td>
+<td valign=top align=left>Ausgabe als Prozentwert</td></tr>
+</table>
+<p><i>
+Tabelle 17.2: Formatzeichen für DecimalFormat</i></p>
+
+<p>
+Zusätzlich können beliebige Zeichen vorangestellt oder hinten
+angefügt werden; sie werden dann unverändert ausgegeben.
+Ungültige Formatstrings werden mit einer <a href="index_i.html#ixb100366"><font color=#000080><tt>IllegalArgumentException</tt></font></a>
+quittiert. Falls nach einem Semikolon ein eigener Formatstring für
+negative Zahlen angegeben wird, muss er mit Ausnahme eines veränderten
+Prefixes und Suffixes genau dem Formatstring für positive Zahlen
+entsprechen.
+
+<p>
+Die Formatierung einer Zahl wird durch Aufruf von <a name="ixa101208"><a href="index_f.html#ixb100560"><font color=#000080><tt>format</tt></font></a></a>
+ausgeführt:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public final String format(long number)
+public final String format(double number)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/text/DecimalFormat.html" onClick="this.href=getApiDoc('java.text.DecimalFormat')"><font color="#660066" size=-1>java.text.DecimalFormat</font></a></td>
+</tr>
+</table>
+
+<p>
+Die Methode gibt es sowohl mit einem <a href="index_l.html#ixb100245"><font color=#000080><tt>long</tt></font></a>-Parameter
+zur Ausgabe von Ganzzahlen als auch mit einem <a href="index_d.html#ixb100247"><font color=#000080><tt>double</tt></font></a>
+zur Ausgabe von Fließkommazahlen. Da der Formatstring bereits
+bei der Konstruktion des Objekts übergeben wurde, kann <a href="index_f.html#ixb100560"><font color=#000080><tt>format</tt></font></a>
+mehrfach aufgerufen werden, um nacheinander weitere Zahlen zu formatieren.
+
+<p>
+Das folgende Programm zeigt die beispielhafte Anwendung von <a href="index_d.html#ixb100923"><font color=#000080><tt>DecimalFormat</tt></font></a>.
+Es gibt die Zahl 1768.3518 für die aktuelle <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+in unterschiedlichen Längen und Formatierungen auf der Console
+aus:
+<a name="listingid017008"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* Listing1708.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">import</font> java.text.*;
+<font color="#555555">004 </font>
+<font color="#555555">005 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1708
+<font color="#555555">006 </font>{
+<font color="#555555">007 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> print(<font color="#006699">double</font> value, String format)
+<font color="#555555">008 </font> {
+<font color="#555555">009 </font> DecimalFormat df = <font color="#0000AA">new</font> DecimalFormat(format);
+<font color="#555555">010 </font> System.out.println(df.format(value));
+<font color="#555555">011 </font> }
+<font color="#555555">012 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">013 </font> {
+<font color="#555555">014 </font> <font color="#006699">double</font> value = 1768.3518;
+<font color="#555555">015 </font> print(value, <font color="#0000FF">"#0.0"</font>);
+<font color="#555555">016 </font> print(value, <font color="#0000FF">"#0.000"</font>);
+<font color="#555555">017 </font> print(value, <font color="#0000FF">"000000.000"</font>);
+<font color="#555555">018 </font> print(value, <font color="#0000FF">"#.000000"</font>);
+<font color="#555555">019 </font> print(value, <font color="#0000FF">"#,###,##0.000"</font>);
+<font color="#555555">020 </font> print(value, <font color="#0000FF">"0.000E00"</font>);
+<font color="#555555">021 </font> }
+<font color="#555555">022 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing1708.java"><font color="#000055" size=-1>Listing1708.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 17.8: Anwendung von DecimalFormat</i></p>
+
+<p>
+Die Ausgabe des Programms lautet:
+<font color="#333300">
+<pre>
+1768,4
+1768,352
+001768,352
+1768,351800
+1.768,352
+1,768E03
+</pre>
+</font>
+
+<p>
+Sie kommt wie folgt zustande:
+<ul>
+<li>»#0.0«: Mindestens eine Vorkommastelle, genau eine Nachkommastelle
+<li>»#0.000«: Wie vorher, aber genau drei Nachkommastellen
+<li>»000000.000«: Wie vorher, aber mindestens sechs sichtbare
+Vorkommastellen
+<li>»#.000000«: Möglichst keine Vorkommastellen (was
+nur möglich ist, wenn die Zahl kleiner als 1 ist), aber genau
+sechs Nachkommastellen
+<li>»#,###,##0.000«: Mindestens eine Vorkommastelle, genau
+drei Nachkommastellen, größere Zahlen mit Tausenderseparatoren
+<li>»0.000E00«: Eine Vor- und drei Nachkommastellen, Exponentialdarstellung
+mit mindestens zwei Ziffern im Exponent
+</ul>
+
+<p>
+Wenn das Programm mit englischer <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+aufgerufen worden wäre, wären in der Ausgabe Punkte und
+Kommata vertauscht (denn im englischen Sprachraum werden Kommata als
+Tausenderseparatoren und Punkte als Dezimaltrennzeichen verwendet).
+Die Ausgabe wäre dann wie folgt gewesen:
+<font color="#333300">
+<pre>
+1768.4
+1768.352
+001768.352
+1768.351800
+1,768.352
+1.768E03
+12345678.909
+</pre>
+</font>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Neben der Ausgabesteuerung mit Hilfe des Formatstrings stellt <a href="index_d.html#ixb100923"><font color=#000080><tt>DecimalFormat</tt></font></a>
+noch weitere Methoden zur Konfiguration der Ausgabe zur Verfügung.
+Beispiele sind etwa <a name="ixa101209"><a href="index_s.html#ixb100927"><font color=#000080><tt>setGroupingSize</tt></font></a></a>
+zur Einstellung der Größe der Tausendergruppen oder <a name="ixa101210"><a href="index_s.html#ixb100928"><font color=#000080><tt>setDecimalSeparatorAlwaysShown</tt></font></a></a>
+zur Festlegung, ob auch Ganzzahlen mit Dezimalzeichen ausgegeben werden
+sollen. Zudem bietet <a href="index_d.html#ixb100923"><font color=#000080><tt>DecimalFormat</tt></font></a>
+eine Methode <a name="ixa101211"><a href="index_p.html#ixb100929"><font color=#000080><tt>parse</tt></font></a></a>,
+mit der lokalisierte Zahleneingaben eingelesen werden können.
+Weitere Details zu diesen Methoden können in der API-Dokumentation
+nachgelesen werden.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
+<tr>
+<td><font color="#FFFFFF"> Hinweis </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel3id017004003"></a>
+<h3>17.4.3 Datum und Uhrzeit formatieren <a name="ixa101212"></a>
+</h3>
+
+<p>
+Neben Zahlen lassen sich mit dem Paket <a href="index_j.html#ixb100556"><font color=#000080><tt>java.text</tt></font></a>
+auch Datums- und Uhrzeitwerte unter Beachtung nationaler Besonderheiten
+formatieren und in einen <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
+konvertieren. Die dafür vorgesehene Klasse <a name="ixa101213"><a href="index_d.html#ixb100930"><font color=#000080><tt>DateFormat</tt></font></a></a>
+wird zunächst (analog zu <a href="index_n.html#ixb100924"><font color=#000080><tt>NumberFormat</tt></font></a>)
+mit einer Factory-Methode instanziert und konfiguriert. Anschließend
+wird <a name="ixa101214"><a href="index_f.html#ixb100560"><font color=#000080><tt>format</tt></font></a></a>
+aufgerufen, um den Ausgabestring zu erzeugen.
+
+<p>
+Bei der Instanzierung gibt es einige Varianten zu unterscheiden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public static final DateFormat getDateInstance(
+ int style,
+ Locale locale
+)
+
+public static final DateFormat getTimeInstance(
+ int style,
+ Locale locale
+)
+
+public static final DateFormat getDateTimeInstance(
+ int datestyle,
+ int timestyle,
+ Locale locale
+)
+
+public final String format(Date date)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/text/DateFormat.html" onClick="this.href=getApiDoc('java.text.DateFormat')"><font color="#660066" size=-1>java.text.DateFormat</font></a></td>
+</tr>
+</table>
+
+<p>
+Mit <a name="ixa101215"><a href="index_g.html#ixb100931"><font color=#000080><tt>getDateInstance</tt></font></a></a>
+wird eine Instanz zur Ausgabe eines Datums erzeugt, <a name="ixa101216"><a href="index_g.html#ixb100932"><font color=#000080><tt>getTimeInstance</tt></font></a></a>
+dient zur Ausgabe der Uhrzeit und <a name="ixa101217"><a href="index_g.html#ixb100933"><font color=#000080><tt>getDateTimeInstance</tt></font></a></a>
+zur kombinierten Ausgabe von Datum und Uhrzeit. Alle Methoden erwarten
+ein Argument <font color="#000077"><tt>style</tt></font>, das mit
+einer der Konstanten <a name="ixa101218"><a href="index_s.html#ixb100934"><font color=#000080><tt>SHORT</tt></font></a></a>,
+<a name="ixa101219"><a href="index_m.html#ixb100935"><font color=#000080><tt>MEDIUM</tt></font></a></a>,
+<a name="ixa101220"><a href="index_l.html#ixb100936"><font color=#000080><tt>LONG</tt></font></a></a>,
+<a name="ixa101221"><a href="index_f.html#ixb100937"><font color=#000080><tt>FULL</tt></font></a></a>
+oder <a name="ixa101222"><a href="index_d.html#ixb100938"><font color=#000080><tt>DEFAULT</tt></font></a></a>
+belegt werden muss. Es gibt an, wie lang die jeweilige Ausgabe später
+sein soll und welche Daten sie enthalten soll. So werden beispielsweise
+bei der kurzen Uhrzeit lediglich Stunden und Minuten ausgegeben, während
+in den übrigen Stufen auch die Sekunden und andere Informationen
+enthalten sind. Als zweites Argument wird die gewünschte <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+angegeben; für die Standard-<a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+kann es auch ausgelassen werden.
+
+<p>
+Das folgende Programm formatiert das aktuelle Datum und die aktuelle
+Uhrzeit mit allen möglichen <font color="#000077"><tt>style</tt></font>-Parametern
+und gibt die Ergebnisse auf der Console aus:
+<a name="listingid017009"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* Listing1709.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">import</font> java.util.*;
+<font color="#555555">004 </font><font color="#0000AA">import</font> java.text.*;
+<font color="#555555">005 </font>
+<font color="#555555">006 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1709
+<font color="#555555">007 </font>{
+<font color="#555555">008 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> print(Calendar cal, <font color="#006699">int</font> style)
+<font color="#555555">009 </font> {
+<font color="#555555">010 </font> DateFormat df;
+<font color="#555555">011 </font> df = DateFormat.getDateInstance(style);
+<font color="#555555">012 </font> System.out.print(df.format(cal.getTime()) + <font color="#0000FF">" / "</font>);
+<font color="#555555">013 </font> df = DateFormat.getTimeInstance(style);
+<font color="#555555">014 </font> System.out.println(df.format(cal.getTime()));
+<font color="#555555">015 </font> }
+<font color="#555555">016 </font>
+<font color="#555555">017 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">018 </font> {
+<font color="#555555">019 </font> GregorianCalendar cal = <font color="#0000AA">new</font> GregorianCalendar();
+<font color="#555555">020 </font> print(cal, DateFormat.SHORT);
+<font color="#555555">021 </font> print(cal, DateFormat.MEDIUM);
+<font color="#555555">022 </font> print(cal, DateFormat.LONG);
+<font color="#555555">023 </font> print(cal, DateFormat.FULL);
+<font color="#555555">024 </font> print(cal, DateFormat.DEFAULT);
+<font color="#555555">025 </font> }
+<font color="#555555">026 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing1709.java"><font color="#000055" size=-1>Listing1709.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 17.9: Anwendung von DateFormat</i></p>
+
+<p>
+Die Ausgabe des Programms lautet:
+<font color="#333300">
+<pre>
+24.05.00 / 21:58
+24.05.2000 / 21:58:55
+24. Mai 2000 / 21:58:55 GMT+02:00
+Mittwoch, 24. Mai 2000 / 21.58 Uhr GMT+02:00
+24.05.2000 / 21:58:55
+</pre>
+</font>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Leider ist nicht sehr genau dokumentiert, welche Felder des Datums
+bzw. der Uhrzeit in Abhängigkeit von dem <font color="#000077"><tt>style</tt></font>-Parameter
+tatsächlich ausgegeben werden, zudem ist die Formatierung länderspezifisch.
+Wenn es also auf eine präzise definierte Formatierung ankommt,
+muss ausprobiert werden, welche Ergebnisse jeweils zustande kommen,
+und die am besten passende Variante gewählt werden. Alternativ
+kann mit Hilfe der Klasse <a name="ixa101223"><a href="index_f.html#ixb100939"><font color=#000080><tt>FieldPosition</tt></font></a></a>
+auf jedes einzelne Feld zugegriffen und so eine genauere Steuerung
+der Ausgabe erreicht werden.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF"> Warnung </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel3id017004004"></a>
+<h3>17.4.4 Laden von <a name="ixa101224">Ressourcen</a> </h3>
+
+<p>
+Ein ausgeliefertes Java-Programm besteht in aller Regel nicht nur
+aus Bytecode in Form von <font color="#660099">.class</font>-Dateien,
+sondern enthält weitere Dateien mit zusätzlichen Informationen.
+Dazu zählen beispielsweise Textkonserven und Grafikdateien für
+grafische Oberflächen, Sounddateien zur akustischen Untermalung
+von Programmereignissen oder Hilfsdateien mit Klartextmeldungen zu
+möglichen Programmfehlern. Diese zusätzlichen Informationen
+werden als <i>Ressourcen</i> bezeichnet und müssen zusammen mit
+dem Programm ausgeliefert werden. Die meisten von ihnen müssen
+lokalisiert werden.
+
+<p>
+Java stellt seit der Version 1.1 mit der Klasse <a name="ixa101225"><a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a></a>
+aus dem Paket <a href="index_j.html#ixb100127"><font color=#000080><tt>java.util</tt></font></a>
+ein universelles Hilfsmittel zur Verwendung derartiger Ressourcen
+zur Verfügung. Die Grundidee ist dabei einfach: Ein <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+ist ein Java-Objekt, das eine Sammlung von Ressourcen zusammenfasst
+und auf Anfrage einzeln zur Verfügung stellt. Jede Ressource
+hat einen eindeutigen und für alle unterstützten Sprachvarianten
+identischen Namen, mit dem auf sie zugegriffen werden kann. Ein konkretes
+<a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+ist stets sprachabhängig und enthält nur die Ressourcen
+für eine bestimmte <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>.
+
+<p>
+Damit ist ein <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+zunächst nicht viel mehr als eine Schlüssel-Wert-Collection
+wie beispielsweise <a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
+oder <a href="index_h.html#ixb100121"><font color=#000080><tt>HashMap</tt></font></a>.
+Der Clou liegt in der Tatsache, dass der <i>Name</i> des <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+die <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+angibt, deren Daten er enthält. Während der vordere Teil
+fest und für alle lokalisierten Varianten gleich ist, ist der
+hintere Teil <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>-spezifisch
+und gibt Sprache, Land und gegebenenfalls Variante an. Lautet der
+feste Teil beispielsweise »ImageResources«, wären »ImageResources_fr«
+und »ImageResources_en_US« die Namen für die französiche
+und US-englische Variante.
+
+<!-- Section -->
+
+<a name="sectlevel4id017004004001"></a>
+<h4>Die Methode getBundle </h4>
+
+<p>
+<a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+stellt eine statische Methode <a name="ixa101226"><a href="index_g.html#ixb100942"><font color=#000080><tt>getBundle</tt></font></a></a>
+zur Verfügung, mit der zu einem Basisnamen und einer vorgegebenen
+<a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+ein <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+beschafft werden kann. Diese gibt es in unterschiedlichen Ausprägungen:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public static final ResourceBundle getBundle(String baseName)
+ throws MissingResourceException
+
+public static final ResourceBundle getBundle(
+ String baseName,
+ Locale locale
+)
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/util/ResourceBundle.html" onClick="this.href=getApiDoc('java.util.ResourceBundle')"><font color="#660066" size=-1>java.util.ResourceBundle</font></a></td>
+</tr>
+</table>
+
+<p>
+Die erste Variante besorgt ein <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+für die aktuelle Default-<a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>,
+die zweite für die als Argument angegebene. In beiden Fällen
+wird wie folgt vorgegangen:
+<ul>
+<li>Zunächst wird versucht, eine <i>genau</i> zur gewünschten
+<a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+passende Ressourceklasse zu finden.
+<li>Ist eine solche nicht vorhanden, wird der Ressourcenname schrittweise
+verallgemeinert. Soweit vorhanden, wird zunächst die Variante,
+dann der Länder- und schließlich der Sprachteil entfernt
+bis nur noch der Basisname übrigbleibt.
+<li>Falls immer noch keine passende Ressourcenklasse gefunden wurde,
+wird derselbe Ablauf für die Default-<a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+wiederholt.
+</ul>
+
+<p>
+Ist beispielsweise Deutschland die Default-<a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+und soll die Resource »MyTextResource« für Frankreich
+beschafft werden, sucht <a href="index_g.html#ixb100942"><font color=#000080><tt>getBundle</tt></font></a>
+nacheinander nach folgenden Klassen:
+<ol type=1>
+<li><font color="#000077"><tt>MyTextResource_fr_FR</tt></font>
+<li><font color="#000077"><tt>MyTextResource_fr</tt></font>
+<li><font color="#000077"><tt>MyTextResource_de_DE</tt></font>
+<li><font color="#000077"><tt>MyTextResource_de</tt></font>
+<li><font color="#000077"><tt>MyTextResource</tt></font>
+</ol>
+
+<p>
+Die Suche bricht ab, wenn die erste passende Klasse gefunden wurde.
+Ist überhaupt keine passende Ressource vorhanden, löst <a href="index_g.html#ixb100942"><font color=#000080><tt>getBundle</tt></font></a>
+eine <a name="ixa101227"><a href="index_m.html#ixb100943"><font color=#000080><tt>MissingResourceException</tt></font></a></a>
+aus. Dies ist auch der Fall, wenn die gefundene Klasse nicht aus <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+abgeleitet ist.
+
+<!-- Section -->
+
+<a name="sectlevel4id017004004002"></a>
+<h4>Eigene Ressourcenklassen erstellen </h4>
+
+<p>
+Eigene Resourcenklassen müssen aus <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+abgeleitet werden und die beiden (in der Basisklasse abstrakten) Methoden
+<a name="ixa101228"><a href="index_g.html#ixb100944"><font color=#000080><tt>getKeys</tt></font></a></a>
+und <a name="ixa101229"><a href="index_h.html#ixb100945"><font color=#000080><tt>handleGetObject</tt></font></a></a>
+überlagern:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public Enumeration getKeys()
+
+protected Object handleGetObject(String key)
+ throws MissingResourceException
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/util/ResourceBundle.html" onClick="this.href=getApiDoc('java.util.ResourceBundle')"><font color="#660066" size=-1>java.util.ResourceBundle</font></a></td>
+</tr>
+</table>
+
+<p>
+<a href="index_h.html#ixb100945"><font color=#000080><tt>handleGetObject</tt></font></a>
+liefert eine Ressource zu einem vorgegebenen Schlüssel, <a href="index_g.html#ixb100944"><font color=#000080><tt>getKeys</tt></font></a>
+eine Aufzählung aller vorhandenen Schlüssel. Gibt es zu
+einem vorgegebenen Schlüssel keine Ressource, muss <a href="index_h.html#ixb100945"><font color=#000080><tt>handleGetObject</tt></font></a>
+<a href="index_n.html#ixb100235"><font color=#000080><tt>null</tt></font></a>
+zurückgeben.
+
+<p>
+Das folgende Listing zeigt eine Klasse <font color="#000077"><tt>SimpleTextResource</tt></font>,
+die zur Internationalisierung von einfachen Texten verwendet werden
+kann. Die lokalisierten Varianten können dabei sehr einfach realisiert
+werden, indem sie aus <font color="#000077"><tt>SimpleTextResource</tt></font>
+abgeleitet werden. Sie müssen dann lediglich im Konstruktor die
+<a href="index_h.html#ixb100419"><font color=#000080><tt>Hashtable</tt></font></a>
+mit den gewünschten Schlüssel-/Textpaaren füllen.
+<a name="listingid017010"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* SimpleTextResource.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">import</font> java.util.*;
+<font color="#555555">004 </font>
+<font color="#555555">005 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> SimpleTextResource
+<font color="#555555">006 </font><font color="#0000AA">extends</font> ResourceBundle
+<font color="#555555">007 </font>{
+<font color="#555555">008 </font> <font color="#0000AA">protected</font> Hashtable data = <font color="#0000AA">new</font> Hashtable();
+<font color="#555555">009 </font>
+<font color="#555555">010 </font> <font color="#0000AA">public</font> Enumeration getKeys()
+<font color="#555555">011 </font> {
+<font color="#555555">012 </font> <font color="#0000AA">return</font> data.keys();
+<font color="#555555">013 </font> }
+<font color="#555555">014 </font>
+<font color="#555555">015 </font> <font color="#0000AA">public</font> Object handleGetObject(String key)
+<font color="#555555">016 </font> {
+<font color="#555555">017 </font> <font color="#0000AA">return</font> data.get(key);
+<font color="#555555">018 </font> }
+<font color="#555555">019 </font>
+<font color="#555555">020 </font> <font color="#0000AA">public</font> ResourceBundle getParent()
+<font color="#555555">021 </font> {
+<font color="#555555">022 </font> <font color="#0000AA">return</font> parent;
+<font color="#555555">023 </font> }
+<font color="#555555">024 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/SimpleTextResource.java"><font color="#000055" size=-1>SimpleTextResource.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 17.10: Die Klasse SimpleTextResource</i></p>
+
+<p>
+Nun soll ein <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+mit dem Namen »MyTextResource« erstellt werden, das Übersetzungen
+zu den beiden Schlüsseln »Hi« und »To« liefert.
+Dazu definieren wir zunächst eine Klasse <font color="#000077"><tt>MyTextResource</tt></font>,
+die immer dann verwendet wird, wenn keine passende lokale Variante
+gefunden wird. In unserem Fall soll sie die Texte in englischer Sprache
+zur Verfügung stellen:
+<a name="listingid017011"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* MyTextResource.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> MyTextResource
+<font color="#555555">004 </font><font color="#0000AA">extends</font> SimpleTextResource
+<font color="#555555">005 </font>{
+<font color="#555555">006 </font> <font color="#0000AA">public</font> MyTextResource()
+<font color="#555555">007 </font> {
+<font color="#555555">008 </font> data.put(<font color="#0000FF">"Hi"</font>, <font color="#0000FF">"Hello"</font>);
+<font color="#555555">009 </font> data.put(<font color="#0000FF">"To"</font>, <font color="#0000FF">"World"</font>);
+<font color="#555555">010 </font> }
+<font color="#555555">011 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/MyTextResource.java"><font color="#000055" size=-1>MyTextResource.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 17.11: Die Basisvariante MyTextResource</i></p>
+
+<p>
+Des weiteren wollen wir eine allgemeine deutschsprachige und eine
+spezielle schweizerische Variante zur Verfügung stellen:
+<a name="listingid017012"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* MyTextResource_de.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> MyTextResource_de
+<font color="#555555">004 </font><font color="#0000AA">extends</font> SimpleTextResource
+<font color="#555555">005 </font>{
+<font color="#555555">006 </font> <font color="#0000AA">public</font> MyTextResource_de()
+<font color="#555555">007 </font> {
+<font color="#555555">008 </font> data.put(<font color="#0000FF">"Hi"</font>, <font color="#0000FF">"Hallo"</font>);
+<font color="#555555">009 </font> data.put(<font color="#0000FF">"To"</font>, <font color="#0000FF">"Welt"</font>);
+<font color="#555555">010 </font> }
+<font color="#555555">011 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/MyTextResource_de.java"><font color="#000055" size=-1>MyTextResource_de.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 17.12: Die deutschsprachige Variante MyTextResource_de</i></p>
+<a name="listingid017013"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* MyTextResource_de_CH.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> MyTextResource_de_CH
+<font color="#555555">004 </font><font color="#0000AA">extends</font> SimpleTextResource
+<font color="#555555">005 </font>{
+<font color="#555555">006 </font> <font color="#0000AA">public</font> MyTextResource_de_CH()
+<font color="#555555">007 </font> {
+<font color="#555555">008 </font> data.put(<font color="#0000FF">"Hi"</font>, <font color="#0000FF">"Grüezi"</font>);
+<font color="#555555">009 </font> data.put(<font color="#0000FF">"To"</font>, <font color="#0000FF">"Schweiz"</font>);
+<font color="#555555">010 </font> }
+<font color="#555555">011 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/MyTextResource_de_CH.java"><font color="#000055" size=-1>MyTextResource_de_CH.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 17.13: Die schweizerische Variante MyTextResource_de_CH</i></p>
+
+<p>
+Will ein Client auf eine Ressource in einem <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+zugreifen, tut er das nicht durch direkten Aufruf von <a href="index_h.html#ixb100945"><font color=#000080><tt>handleGetObject</tt></font></a>,
+sondern verwendet dazu eine der folgenden Methoden:
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
+<tr>
+<td valign=top width=100%>
+<font color="#660066">
+<pre>
+public Object getObject(String key)
+ throws MissingResourceException
+
+public String getString(String key)
+ throws MissingResourceException
+
+public final String[] getStringArray(String key)
+ throws MissingResourceException
+</pre>
+</font>
+</td>
+<td valign=top>
+<a href="../jdkdocs/api/java/util/ResourceBundle.html" onClick="this.href=getApiDoc('java.util.ResourceBundle')"><font color="#660066" size=-1>java.util.ResourceBundle</font></a></td>
+</tr>
+</table>
+
+<p>
+<a name="ixa101230"><a href="index_g.html#ixb100946"><font color=#000080><tt>getObject</tt></font></a></a>
+liefert die Ressource als <a href="index_o.html#ixb100224"><font color=#000080><tt>Object</tt></font></a>,
+<a name="ixa101231"><a href="index_g.html#ixb100947"><font color=#000080><tt>getString</tt></font></a></a>
+als <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
+und <a name="ixa101232"><a href="index_g.html#ixb100948"><font color=#000080><tt>getStringArray</tt></font></a></a>
+als <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>-Array.
+Die letzten beiden Methoden dienen vornehmlich der Bequemlichkeit:
+sie rufen selber <a href="index_g.html#ixb100946"><font color=#000080><tt>getObject</tt></font></a>
+auf und nehmen dem Aufrufer die anschließend erforderliche Typkonvertierung
+ab.
+
+<p>
+Das folgende Listing zeigt ein einfaches Testprogramm, das die Textressourcen
+für verschiedene Lokalisierungen ermittelt und auf der Console
+ausgibt. Das <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+wird beschafft, indem <a href="index_g.html#ixb100942"><font color=#000080><tt>getBundle</tt></font></a>
+mit »MyTextResource« und der jeweils gewünschten <a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+als Argument aufgerufen wird. Anschließend wird auf die übersetzten
+Texte mit Aufrufen von <a href="index_g.html#ixb100947"><font color=#000080><tt>getString</tt></font></a>
+zugegriffen:
+<a name="testmytextresource"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* Listing1714.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">import</font> java.util.*;
+<font color="#555555">004 </font>
+<font color="#555555">005 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1714
+<font color="#555555">006 </font>{
+<font color="#555555">007 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> sayHello(Locale locale)
+<font color="#555555">008 </font> {
+<font color="#555555">009 </font> System.out.print(locale + <font color="#0000FF">": "</font>);
+<font color="#555555">010 </font> ResourceBundle textbundle = ResourceBundle.getBundle(
+<font color="#555555">011 </font> <font color="#0000FF">"MyTextResource"</font>,
+<font color="#555555">012 </font> locale
+<font color="#555555">013 </font> );
+<font color="#555555">014 </font> <font color="#0000AA">if</font> (textbundle != <font color="#006699">null</font>) {
+<font color="#555555">015 </font> System.out.print(textbundle.getString(<font color="#0000FF">"Hi"</font>) + <font color="#0000FF">", "</font>);
+<font color="#555555">016 </font> System.out.println(textbundle.getString(<font color="#0000FF">"To"</font>));
+<font color="#555555">017 </font> }
+<font color="#555555">018 </font> }
+<font color="#555555">019 </font>
+<font color="#555555">020 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">021 </font> {
+<font color="#555555">022 </font> sayHello(Locale.getDefault());
+<font color="#555555">023 </font> sayHello(<font color="#0000AA">new</font> Locale(<font color="#0000FF">"de"</font>, <font color="#0000FF">"CH"</font>));
+<font color="#555555">024 </font> sayHello(Locale.US);
+<font color="#555555">025 </font> sayHello(Locale.FRANCE);
+<font color="#555555">026 </font> }
+<font color="#555555">027 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/Listing1714.java"><font color="#000055" size=-1>Listing1714.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 17.14: Test von MyTextResource</i></p>
+
+<p>
+Die Ausgabe des Programms ist:
+<font color="#333300">
+<pre>
+de_DE: Hallo, Welt
+de_CH: Grüezi, Schweiz
+en_US: Hallo, Welt
+fr_FR: Hallo, Welt
+</pre>
+</font>
+
+<p>
+Die Default-<a href="index_l.html#ixb100561"><font color=#000080><tt>Locale</tt></font></a>
+war beim Testen »de_DE«. Zwar wurde keine passende Klasse
+<font color="#000077"><tt>MyTextResource_de_DE</tt></font> definiert,
+aber durch den oben beschriebenen Fallback-Mechanismus liefert <a href="index_g.html#ixb100942"><font color=#000080><tt>getBundle</tt></font></a>
+eine Instanz von <font color="#000077"><tt>MyTextResource_de</tt></font>.
+Bei der nächsten Lokalisierung wird die erforderliche Klasse
+<font color="#000077"><tt>MyTextResource_de_CH</tt></font> direkt
+gefunden, und die Ausgabe erfolgt entsprechend. Zu den letzten beiden
+Lokalisierungswünschen werden keine passenden Ressourcen gefunden.
+<a href="index_g.html#ixb100942"><font color=#000080><tt>getBundle</tt></font></a>
+verwendet in beiden Fällen die Datei <font color="#000077"><tt>MyTextResource_de</tt></font>
+zur Default-<font color="#000077"><tt>Locale</tt></font>, und die
+Ausgaben erfolgen in deutscher Sprache.
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Damit die Suche nach Ressourcen und die (im nächsten Abschnitt
+zu besprechende) Vaterverkettung richtig funktionieren, müssen
+zu einer Ressource auch stets alle allgemeineren Ressourcen vorhanden
+sein. Gibt es etwa - wie in unserem Beispiel - eine Ressource mit
+der Endung »_de_CH«, so <i>müssen</i> auch die Ressourcen
+mit der Endung »_de« und die Basisressource ohne lokale
+Endung vorhanden sein.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
+<tr>
+<td><font color="#FFFFFF"> Warnung </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Um die Übersichtlichkeit zu verbessern, sollten Ressourcendateien
+in eigenen Verzeichnissen gehalten werden. Da sie mit Hilfe des Classloaders
+geladen werden, müssen sie in einem Verzeichnis abgelegt werden,
+in dem auch eine Klasse gefunden werden würde. Man könnte
+beispielsweise im Hauptpaket der Anwendung ein Unterverzeichnis <font color="#660099">resources</font>
+anlegen und alle Ressourcendateien dort platzieren. Der im Programm
+zu verwendende Ressourcenname wird dann einfach vorne um »resources.«
+ergänzt. Derartige Ressourcen, die über den Klassenpfad
+erreichbar sind, werden auch dann gefunden, wenn das Programm in Form
+einer <font color="#660099">.jar</font>-Datei ausgeliefert wird.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#0099CC">
+<tr>
+<td><font color="#FFFFFF"> Tipp </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel4id017004004003"></a>
+<h4>Die Verkettung von ResourceBundles </h4>
+
+<p>
+Ein Aufruf von <a href="index_g.html#ixb100946"><font color=#000080><tt>getObject</tt></font></a>
+wird zunächst an die Methode <a href="index_h.html#ixb100945"><font color=#000080><tt>handleGetObject</tt></font></a>
+weitergeleitet. Ist deren Rückgabewert nicht <a href="index_n.html#ixb100235"><font color=#000080><tt>null</tt></font></a>,
+wird er an den Aufrufer übergeben. Andernfalls wird die Anfrage
+an den <i>Vater</i> des ResourceBundles weitergereicht. Die Vaterverkettung
+erfolgt bei der Instanzierung von <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>-Objekten
+automatisch, indem das jeweils nächstmögliche allgemeinere
+<a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+als Vater verwendet wird. So ist beispielsweise der Vater von »MyTextResource_de_DE«
+die Ressource »MyTextResource_de«, und deren Vater ist »MyTextResource«.
+
+<p>
+Durch diese Vaterverkettung muss ein spezielleres <a href="index_r.html#ixb100941"><font color=#000080><tt>ResourceBundle</tt></font></a>
+nur die Ressourcen zur Verfügung stellen, die sich gegenüber
+dem Vater unterscheiden oder neu hinzugekommen sind. Alle unveränderten
+Ressourcen brauchen dagegen nicht erneut definiert zu werden. Soll
+beispielsweise eine »MyTextResource« für englischsprachige
+Lokalisierungen definiert werden, die sich nur durch die Übersetzung
+des Schlüssels »To« von der Basisressource unterscheidet,
+muss »Hi« nicht definiert werden:
+<a name="listingid017015"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+<font color="#555555">001 </font><font color="#00AA00">/* MyTextResource_en.java */</font>
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> MyTextResource_en
+<font color="#555555">004 </font><font color="#0000AA">extends</font> SimpleTextResource
+<font color="#555555">005 </font>{
+<font color="#555555">006 </font> <font color="#0000AA">public</font> MyTextResource_en()
+<font color="#555555">007 </font> {
+<font color="#555555">008 </font> data.put(<font color="#0000FF">"To"</font>, <font color="#0000FF">"World of English"</font>);
+<font color="#555555">009 </font> }
+<font color="#555555">010 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/MyTextResource_en.java"><font color="#000055" size=-1>MyTextResource_en.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 17.15: Die englische Variante MyTextResource_en</i></p>
+
+<p>
+Nach dem Anlegen und Übersetzen dieser Klasse würde ein
+Aufruf von <a href="k100118.html#testmytextresource">Listing 17.14</a>
+zu folgender Ausgabe führen:
+<font color="#333300">
+<pre>
+de_DE: Hallo, Welt
+de_CH: Grüezi, Schweiz
+en_US: Hello, World of English
+fr_FR: Hallo, Welt
+</pre>
+</font>
+
+<p>
+Die Übersetzung von »Hi« kommt nun aus der Vater-Ressource
+<font color="#000077"><tt>MyTextResource</tt></font>.
+
+<!-- Section -->
+
+<a name="sectlevel4id017004004004"></a>
+<h4>Die Klasse PropertyResourceBundle </h4>
+
+<p>
+Die vorangegangenen Beispiele haben an Textkonserven exemplarisch
+gezeigt, wie man Ressourcen lokalisieren kann. Sollen einfache Texte
+übersetzt werden, gibt es aber noch einen einfacheren Weg. Das
+oben beschriebene Suchschema von <a href="index_g.html#ixb100942"><font color=#000080><tt>getBundle</tt></font></a>
+war nämlich insofern unvollständig, als nach jedem einzelnen
+Schritt zusätzlich eine Datei desselben Names wie die aktuelle
+Klasse, aber mit der Erweiterung <font color="#660099">.properties</font>,
+gesucht wird. Wird also beispielsweise in einem beliebigen Suchschritt
+die Klasse <font color="#000077"><tt>MyResource_de_DE</tt></font>
+nicht gefunden, so sucht <a href="index_g.html#ixb100942"><font color=#000080><tt>getBundle</tt></font></a>
+vor dem Übergang zum nächsten Schritt nach einer Datei mit
+dem Namen <font color="#660099">MyResource_de_DE.properties</font>.
+
+<p>
+Ist eine solche vorhanden, wird eine Instanz der Klasse <a name="ixa101233"><a href="index_p.html#ixb100949"><font color=#000080><tt>PropertyResourceBundle</tt></font></a></a>
+erzeugt und an den Aufrufer zurückgegeben. <a href="index_p.html#ixb100949"><font color=#000080><tt>PropertyResourceBundle</tt></font></a>
+liest die Eingabedatei (sie muss dasselbe Format wie die in <a href="k100094.html#properties">Abschnitt 14.4.4</a>
+beschriebenen Property-Dateien haben) und speichert alle darin gefundenen
+Schlüssel-Wert-Paare ab. Anschließend können diese
+als gewöhnliche Text-Ressourcen vom Programm verwendet werden.
+
+<p>
+Um beispielsweise die vorigen Beispiele um eine französische
+Übersetzung zu erweitern, könnten wir einfach eine Datei
+<font color="#660099">MyTextResource_fr.properties</font> anlegen
+und ihr folgenden Inhalt geben:
+<font color="#000077">
+<pre>
+Hi=Salut
+To=monde francais
+</pre>
+</font>
+
+<p>
+<a href="k100118.html#testmytextresource">Listing 17.14</a> würde
+nun folgende Ausgabe erzeugen:
+<font color="#333300">
+<pre>
+de_DE: Hallo, Welt
+de_CH: Grüezi, Schweiz
+en_US: Hello, World of English
+fr_FR: Salut, monde francais
+</pre>
+</font>
+<hr>
+<table border=0 cellpadding=0 cellspacing=1 width="100%">
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
+<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
+Wesley, Version 5.0.1
+<tr bgcolor="#EEFFCC">
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100114.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100117.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100119.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100120.html"> >> </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
+<td align="right">© 1998, 2007 Guido Krüger & Thomas
+Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
+</table>
+<a name="endofbody"></a>
+</body>
+</html>
|
