You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-de@httpd.apache.org by Herr Christian Wolfgang Hujer <Ch...@itcqis.com> on 2003/02/28 23:00:07 UTC

Konfiguration für Mehrsprachigkeit und HTML/XHTML

Hallo liebe Apache User,


kurz-Version:
Bei Options +MultiViews und mehreren Sprachen + Typen + Encodings zur Auswahl 
erhält ein Browser bei nicht-passender Sprache nicht eine Alternative nach 
der LanguagePriority, sondern ein 406-Response. Wie kann ich der 
LanguagePriority einen höheren Stellenwert einräumen, um die 406-Response zu 
vermeiden? Oder gibt es eine andere Möglichkeit, statt einer 406-Response 
eine nicht zum Accept-Language-Header passende Response (anderer 
Content-Language-Header) zu senden?


lang-Version:
ich habe lange Zeit experimentiert, um eine optimale Konfiguration für 
Mehrsprachigkeit sowie HTML/XHTML zu erhalten. Im WWW waren natürlich auch 
Klasse Tipps zu finden.

Ich verwende nun folgende .htaccess (Auszug) im Root-Directory meines 
VirtualHosts:

Options +MultiViews +Includes
AddType text/html;charset=US-ASCII .html
AddType application/xhtml+xml;charset=UTF-8;qs=0.999 .xhtml
AddLanguage de .de
AddLanguage en .en
LanguagePriority de en


Die text/html-Dateien sind gültige HTML 4.01-Dateien in US-ASCII, die 
application/xhtml+xml-Dateien sind gültige XHTML 1.1-Dateien in UTF-8.


Die Dateien für die Sprachen sind dann in eigenen Verzeichnissen, de/ für die 
deutschsprachigen, en/ für die englischsprachigen usw..
Lediglich die Sprachauswahl der Startseite wird über MultiViews geliefert:
index.de.html
index.de.html.gz
index.de.xhtml
index.de.xhtml.gz
index.en.html
index.en.html.gz
index.en.xhtml
index.en.xhtml.gz
de/seite1.html
de/seite1.html.gz
de/seite1.xhtml
de/seite1.xhtml.gz
...
en/page1.html
en/page1.html.gz
en/page1.xhtml
en/page1.xhtml.gz
...

Die Links zeigen immer auf die Basis des MultiViews, z.B. .../de/seite1.

Das Problem, dass man dann nicht einfach in der URL en durch de bzw. umgekehrt 
ersetzen kann, wollte ich dadurch umgehen, dass ich mit RewriteRules arbeite, 
musste dann aber feststellen, dass der Webhoster das nicht unterstützt - 
Pech, das tut aber nichts zur Sache.


Damit der Content-Language-Header bei den Seiten dennoch mitgeliefert wird, 
wollte ich nun in jedem Sprachverzeichnis eine .htaccess-Datei folgendem 
Eintrag vornehmen (Beispiel für de/):
AddLanguage de .html
AddLanguage de .xhtml
Das führt jedoch dazu, dass ein Browser, der nicht de im Header 
Accept-Language sendet, statt einer Seite ein 406 Not Acceptable mit einer 
Auswahl bekommt, z.B.:
Available variants:

    * start.html , type text/html, language de, charset us-ascii
    * start.html.gz , type text/html, language de, charset us-ascii, encoding 
gzip
    * start.xhtml , type application/xhtml+xml, language de, charset utf-8
    * start.xhtml.gz , type application/xhtml+xml, language de, charset utf-8, 
encoding gzip

Ich habe schon versucht, mit DefaultLanguage statt AddLanguage zu arbeiten. 
Das Ergebnis ist aber das gleiche, der Client erhält einen 406-Response, wenn 
er die Sprache nicht in Accept-Language sendet.

Ich habe auch Teile des RFC 2616 (HTTP/1.1) gelesen, um eine Antwort zu 
finden, ob es einem Server überhaupt erlaubt ist, einen Response außerhalb 
des durch die Accept-Header eingeschränkten Bereichs zu liefern, und 
folgenden Hinweis gefunden:
"Note: HTTP/1.1 servers are allowed to return responses which are
not acceptable according to the accept headers sent in the
request. In some cases, this may even be preferable to sending a
406 response. User agents are encouraged to inspect the headers of
an incoming response to determine if it is acceptable." 
[ftp://ftp.rfc-editor.org/in-notes/rfc2616.txt 10.4.7 406 Not Acceptable]

Ich denke, mein Problem fällt ganz definitiv unter "this may even be 
preferable". Wenn ein Benutzer schon im de/-Bereich ist, sein User-Agent aber 
kein de im Accept-Language hat, hat der Benutzer sich wahrscheinlich 
selbständig für Deutsch als Sprache entschieden.
Außerdem kann es ja sein, dass ein User-Agent weder de noch en in den 
Accept-Language-Header einträgt. Insbesondere dann wäre die (offensichtlich 
nicht meiner Erwartung gemäß stattfindende) Auswertung der 
LanguagePriority-Direktive gegenüber einer 406-Response zu bevorzugen.

Ich kann dabei auch nicht verstehen, warum in der Dokumentation zum 
Apache-Modul mod_negotiation über die LanguagePriority-Direktive zu lesen 
ist: "[...] Correctly implemented HTTP/1.1 requests will mean this directive 
has no effect."


Natürlich könnte ich auch darauf verzichten, das Problem zu lösen, praktisch 
kann ich prima mit der aktuellen Situation (kein Content-Language-Header für 
die Dateien in den Sprach-Verzeichnissen) leben, zumal die Sprachinformation 
ja zusätzlich als xml:lang-Attribut (XHTML) bzw. lang-Attribut (HTML) in den 
Dateien vorhanden ist. Theoretisch bin ich aber Perfektionist und würde gerne 
einen 100% korrekten und darüber hinaus vollständigen Header senden, sprich, 
ich will also einen nicht zum Accept-Language passenden 
Content-Language-Header senden statt einer 406-Response.


Nun also zu meiner Frage:

Gibt es eine Möglichkeit, Apache so zu konfigurieren, dass bei den MultiViews 
für den Fall, dass die Sprache für den Client nicht passt, die 
LanguagePriority-Direktive in der Konfiguration so hohen Stellenwert bekommt, 
dass bei nicht-vorhandener Sprache statt einer 406-Response die Alternative 
anhand der LanguagePriority-Direktive ausgewählt wird? Oder gibt es 
stattdessen eine andere Alternative?

Weiß jemand Rat?


Schöne Grüße
--
ITCQIS GmbH
Christian Wolfgang Hujer
Geschäftsführender Gesellschafter
Telefon: +49  (0)89  27 37 04 37
Telefax: +49  (0)89  27 37 04 39
E-Mail: Christian.Hujer@itcqis.com
WWW: http://www.itcqis.com/

--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------


Re: Konfiguration für Mehrsprachigkeit und HTML/XHTML

Posted by Herr Christian Wolfgang Hujer <Ch...@itcqis.com>.
Hallo,


> Hallo liebe Apache User,
>
>
> kurz-Version:
> Bei Options +MultiViews und mehreren Sprachen + Typen + Encodings zur
> Auswahl erhält ein Browser bei nicht-passender Sprache nicht eine
> Alternative nach der LanguagePriority, sondern ein 406-Response. Wie kann
> ich der
> LanguagePriority einen höheren Stellenwert einräumen, um die 406-Response
> zu vermeiden? Oder gibt es eine andere Möglichkeit, statt einer
> 406-Response eine nicht zum Accept-Language-Header passende Response
> (anderer
> Content-Language-Header) zu senden?

ich glaube, ich habe die Antwort schon selbst gefunden.
Der eingesetzte Apache-Server ist ein Apache 1.3.26.
Ab Apache 2.0.30 gibt es die Direktive ForceLanguagePriority, welche dem 
Problem Abhilfe schaffen soll.

Tja, somit habe ich wohl Pech gehabt.


Schöne Grüße

Christian

--------------------------------------------------------------------------
                Apache HTTP Server Mailing List "users-de" 
      unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
           sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------