commit 0e2a331f4e8a69f5090f3fcd9c9c94d45c4c8354 Author: Karsten Loesing karsten.loesing@gmx.net Date: Wed Sep 28 09:26:12 2016 +0200
Display German text correctly.
Turns out that resource bundles must be ISO 8859-1 encoded, so we'll have to convert the German file using:
native2ascii -encoding UTF-8 old new
Also make some minor changes to make UTF-8 encoding of the resulting web page more explicit, and correct the included language code.
Fixes #19954. --- res/ExoneraTor_de.properties | 40 +++++++++++----------- .../torproject/exonerator/ExoneraTorServlet.java | 19 +++++----- 2 files changed, 31 insertions(+), 28 deletions(-)
diff --git a/res/ExoneraTor_de.properties b/res/ExoneraTor_de.properties index 19c3167..9a594d8 100644 --- a/res/ExoneraTor_de.properties +++ b/res/ExoneraTor_de.properties @@ -4,35 +4,35 @@ form.timestamp.label=Datum form.search.label=Suchen summary.heading=Zusammenfassung summary.serverproblem.dbnoconnect.title=Server-Problem -summary.serverproblem.dbnoconnect.body.text=Es kann keine Verbindung zur Datenbank hergestellt werden. Bitte versuchen Sie es später noch einmal. Sollte dieses Problem weiterhin bestehen %s. +summary.serverproblem.dbnoconnect.body.text=Es kann keine Verbindung zur Datenbank hergestellt werden. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s. summary.serverproblem.dbnoconnect.body.link=lassen Sie es uns bitte wissen summary.serverproblem.dbempty.title=Server-Problem -summary.serverproblem.dbempty.body.text=Die Datenbank scheint leer zu sein. Bitte versuchen Sie es später noch einmal. Sollte dieses Problem weiterhin bestehen %s. +summary.serverproblem.dbempty.body.text=Die Datenbank scheint leer zu sein. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s. summary.serverproblem.dbempty.body.link=lassen Sie es uns bitte wissen summary.invalidparams.notimestamp.title=Kein Datum angegeben -summary.invalidparams.notimestamp.body=Sie müssen ein Datum angeben. +summary.invalidparams.notimestamp.body=Sie m\u00fcssen ein Datum angeben. summary.invalidparams.noip.title=Keine IP-Adresse angegeben. -summary.invalidparams.noip.body=Sie müssen eine IP-Adresse angeben. -summary.invalidparams.timestamprange.title=Datum außerhalb des zulässigen Bereichs -summary.invalidparams.timestamprange.body=Die Datenbank enthält keine Daten vom %s. Bitte wählen Sie ein Datum zwischen %s und %s aus. -summary.invalidparams.invalidip.title=Ungültige IP-Adresse -summary.invalidparams.invalidip.body=%s ist keine gültige IP-Adresse. Zulässige IP-Adress-Formate sind %s oder %s. -summary.invalidparams.invalidtimestamp.title=Ungültiges Datum -summary.invalidparams.invalidtimestamp.body=%s ist kein gültiges Datum. Das zulässige Datumsformat ist %s. +summary.invalidparams.noip.body=Sie m\u00fcssen eine IP-Adresse angeben. +summary.invalidparams.timestamprange.title=Datum au\u00dferhalb des zul\u00e4ssigen Bereichs +summary.invalidparams.timestamprange.body=Die Datenbank enth\u00e4lt keine Daten vom %s. Bitte w\u00e4hlen Sie ein Datum zwischen %s und %s aus. +summary.invalidparams.invalidip.title=Ung\u00fcltige IP-Adresse +summary.invalidparams.invalidip.body=%s ist keine g\u00fcltige IP-Adresse. Zul\u00e4ssige IP-Adress-Formate sind %s oder %s. +summary.invalidparams.invalidtimestamp.title=Ung\u00fcltiges Datum +summary.invalidparams.invalidtimestamp.body=%s ist kein g\u00fcltiges Datum. Das zul\u00e4ssige Datumsformat ist %s. summary.serverproblem.nodata.title=Server-Problem -summary.serverproblem.nodata.body.text=Die Datenbank enthält keine Daten für das angegebene Datum. Bitte versuchen Sie es später noch einmal. Sollte dieses Problem weiterhin bestehen %s. +summary.serverproblem.nodata.body.text=Die Datenbank enth\u00e4lt keine Daten f\u00fcr das angegebene Datum. Bitte versuchen Sie es sp\u00e4ter noch einmal. Sollte dieses Problem weiterhin bestehen %s. summary.serverproblem.nodata.body.link=lassen Sie es uns bitte wissen -summary.negativesamenetwork.title=Keine Übereinstimmungen gefunden +summary.negativesamenetwork.title=Keine \u00dcbereinstimmungen gefunden summary.negativesamenetwork.body=Es wurde kein Tor-Server mit der IP-Adresse %s am %s bzw. am Tag vorher oder nachher gefunden. Es wurden jedoch benachbarte IP-Adressen im selben /%d-Netzwerk an diesen Tagen gefunden: -summary.positive.title=Übereinstimmungen gefunden +summary.positive.title=\u00dcbereinstimmungen gefunden summary.positive.body=Es wurde ein oder mehrere Tor-Server mit IP-Adresse %s am %s bzw. am Tag vorher oder nachher gefunden, die den Tor-Clients bekannt waren. -summary.negative.title=Keine Übereinstimmungen gefunden +summary.negative.title=Keine \u00dcbereinstimmungen gefunden summary.negative.body=Es wurde kein Tor-Server mit der IP-Adresse %s am %s bzw. am Tag vorher oder nachher gefunden. technicaldetails.heading=Technische Details technicaldetails.pre=Es wird nach Tor-Servern mit IP-Adresse %s am %s bzw. am Tag vorher oder nachher gesucht. Tor-Clients konnten diese Tor-Server verwenden, um Verbindungen aufzubauen. technicaldetails.colheader.timestamp=Datum/Uhrzeit (UTC) technicaldetails.colheader.ip=IP-Adresse(n) -technicaldetails.colheader.fingerprint=Identitätsschlüssel +technicaldetails.colheader.fingerprint=Identit\u00e4tsschl\u00fcssel technicaldetails.colheader.nickname=Spitzname technicaldetails.colheader.exit=Exit-Server technicaldetails.nickname.unknown=Unbekannt @@ -40,13 +40,13 @@ technicaldetails.exit.unknown=Unbekannt technicaldetails.exit.yes=Ja technicaldetails.exit.no=Nein permanentlink.heading=Dauerhafter Link -footer.abouttor.heading=Über Tor -footer.abouttor.body.text=Tor ist ein internationales Softwareprojekt um Internetverbindungen zu anonymisieren indem %s. Wenn Sie eine Internetverbindung sehen, die von einem Tor-Server kommt, stammt diese in der Regel von jemandem, der Tor benutzt, und nicht vom Betreiber des Tor-Servers selbst. Weder The Tor Project, Inc. noch die Tor-Server-Betreiber besitzen Aufzeichnungen über die Internetverbindungen im Tor-Netzwerk und können daher keine Auskunft über den Ursprung der Internetverbindung geben. Mehr Informationen über Tor erhalten Sie unter %s. The Tor Project, Inc. steht Ihnen jederzeit für %s zur Verfügung. -footer.abouttor.body.link1=Datenpakete verschlüsselt und über eine Reihe von Stationen geleitet werden bevor diese ihr Ziel erreichen +footer.abouttor.heading=\u00dcber Tor +footer.abouttor.body.text=Tor ist ein internationales Softwareprojekt um Internetverbindungen zu anonymisieren indem %s. Wenn Sie eine Internetverbindung sehen, die von einem Tor-Server kommt, stammt diese in der Regel von jemandem, der Tor benutzt, und nicht vom Betreiber des Tor-Servers selbst. Weder The Tor Project, Inc. noch die Tor-Server-Betreiber besitzen Aufzeichnungen \u00fcber die Internetverbindungen im Tor-Netzwerk und k\u00f6nnen daher keine Auskunft \u00fcber den Ursprung der Internetverbindung geben. Mehr Informationen \u00fcber Tor erhalten Sie unter %s. The Tor Project, Inc. steht Ihnen jederzeit f\u00fcr %s zur Verf\u00fcgung. +footer.abouttor.body.link1=Datenpakete verschl\u00fcsselt und \u00fcber eine Reihe von Stationen geleitet werden bevor diese ihr Ziel erreichen footer.abouttor.body.link2=hier footer.abouttor.body.link3=Fragen -footer.aboutexonerator.heading=Über ExoneraTor -footer.aboutexonerator.body=Der ExoneraTor-Dienst basiert auf einer Datenbank von IP-Adressen, die Teil des Tor-Netzwerks sind oder waren. Dieser Dienst beantwortet die Frage, ob es an einem bestimmten Tag einen Tor-Server mit einer bestimmten IP-Adresse gegeben hat. ExoneraTor kann in einigen Fällen mehr als nur eine IP-Adresse pro Tor-Server speichern, falls ein Tor-Server eine andere IP-Adresse für ausgehende Verbindungen verwendet hat als die IP-Adresse um sich im Tor-Netzwerk zu registrieren. ExoneraTor speichert außerdem ob ein Tor-Server Verbindungen ins offene Internet zugelassen hat oder nicht. +footer.aboutexonerator.heading=\u00dcber ExoneraTor +footer.aboutexonerator.body=Der ExoneraTor-Dienst basiert auf einer Datenbank von IP-Adressen, die Teil des Tor-Netzwerks sind oder waren. Dieser Dienst beantwortet die Frage, ob es an einem bestimmten Tag einen Tor-Server mit einer bestimmten IP-Adresse gegeben hat. ExoneraTor kann in einigen F\u00e4llen mehr als nur eine IP-Adresse pro Tor-Server speichern, falls ein Tor-Server eine andere IP-Adresse f\u00fcr ausgehende Verbindungen verwendet hat als die IP-Adresse um sich im Tor-Netzwerk zu registrieren. ExoneraTor speichert au\u00dferdem ob ein Tor-Server Verbindungen ins offene Internet zugelassen hat oder nicht. footer.trademark.text="Tor" und das "Onion Logo" sind %s von The Tor Project, Inc. footer.trademark.link=eingetragene Warenzeichen
diff --git a/src/main/java/org/torproject/exonerator/ExoneraTorServlet.java b/src/main/java/org/torproject/exonerator/ExoneraTorServlet.java index df31a0c..0f6f3b5 100644 --- a/src/main/java/org/torproject/exonerator/ExoneraTorServlet.java +++ b/src/main/java/org/torproject/exonerator/ExoneraTorServlet.java @@ -67,15 +67,16 @@ public class ExoneraTorServlet extends HttpServlet {
/* Set content type, or the page doesn't render in Chrome. */ response.setContentType("text/html"); - - /* Start writing response. */ - PrintWriter out = response.getWriter(); - this.writeHeader(out); + response.setCharacterEncoding("utf-8");
/* Find the right resource bundle for the user's locale. */ Locale locale = request.getLocale(); ResourceBundle rb = ResourceBundle.getBundle("ExoneraTor", locale);
+ /* Start writing response. */ + PrintWriter out = response.getWriter(); + this.writeHeader(out, rb); + /* Open a database connection that we'll use to handle the whole * request. */ long requestedConnection = System.currentTimeMillis(); @@ -554,9 +555,10 @@ public class ExoneraTorServlet extends HttpServlet {
/* Helper methods for writing the response. */
- private void writeHeader(PrintWriter out) throws IOException { - out.println("<!DOCTYPE html>\n" - + "<html lang="en">\n" + private void writeHeader(PrintWriter out, ResourceBundle rb) + throws IOException { + out.printf("<!DOCTYPE html>\n" + + "<html lang="%s">\n" + " <head>\n" + " <meta charset="utf-8">\n" + " <meta http-equiv="X-UA-Compatible" " @@ -585,7 +587,8 @@ public class ExoneraTorServlet extends HttpServlet { + " </h1>\n" + " </div><!-- page-header -->\n" + " </div><!-- col -->\n" - + " </div><!-- row -->\n"); + + " </div><!-- row -->\n", + rb.getLocale().getLanguage()); }
private void writeForm(PrintWriter out, ResourceBundle rb,