tobiassMedlem sedan maj 200254 inlägg jag ska bygga en sajt på spanska, engelska och svenska. materialet kommer i huvudsak att vara detsamma på de olika språken.
Jag vill att besökaren automatiskt skickas till "rätt" språk genom att kolla vilket språk som är instället i webbläsaren/OS.
hur gör jag?
jarvkloMedlem sedan juli 20013 378 inlägg Hmm...
Det beror lite på...
Rent tekniskt så lägger Webbläsaren med språkönskemål när den begär sidan (Jag har skrivit lite om hur detta går till på http://xhtml.nu/artiklar/xhtml_10/000045.html ).
Sedan beror hur du gör mest på vad du har möjlighet att köra på servern och hur detta rent tekniskt hanteras där... i vilket fall som helst behöver du förmodligen tolka innehållet i "HTTP-Deadern" "Accept-Language" på ett eller annat sätt... (exempel på hur din webbläsare skickar info får du t.ex. ut på http://xhtml.nu/exempel/headerinfo.php )
Vill du hantera tolkningen i ASP eller PHP - så tänk på att även hantera "q-faktorn" som kan vara med som rangordningsinformation (men som inte alltid är där ;) ) :
sv, sv-fi;q=0.75, en-us;q=0.50, en;q=0.25
Kör du Apache kan du enkelt få den att göra detta åt dig automatiskt genom att dels slå "mod_negotiation" och seadn döpa dina filer till "sida.html.sv", "sida.html.fr", "sida.html.en" osv och sedan överallt peka ut dem med bara "sida.html" (du kan också ställa in "default-språk" i .htaccess ;) )
Så - konkret för att kunna hjälpa dig vidare med just ditt fall skulle svar på två frågor underlätta tipsandet: - vilken server ligger sidan på (Apache, IIS eller annan?) - och har du tillgång till ASP eller PHP ?
Huruvida det går att göra med JavaScript i webbläsaren, har jag inte koll på - men det finns säkert någon i Javascript-forumet här bredvid som vet det ;)
tobiassMedlem sedan maj 200254 inlägg jag har inte bestämt var sajten ska ligga än, men php & apache är tanken.
apache-trixet låter intressant. php är jag inte så haj på, men med lite hjälp på traven skulle nog en sådan lösning fungera också.
jarvkloMedlem sedan juli 20013 378 inlägg Korta versionen av "Apache-trixet":
Du ställer in förljande i .htaccess i någon lämplig katalog :
/red: Koden var fel och har tagits bort - se nedan!
Lägg sedan upp t.ex. filerna
test.html.sv och test.html.en i katalogen och prova.
Testa att leka lite med språkinställningarna (flytta runt svenska och engelska i listan ;) ) i din webbläsare och se hur det fungerar på
http://xhtml.nu/exempel/mod_negotiation/
Notera bara: Om detta fungerar beror på hur AllowOverride är inställd i webbserverns/webhotellets konfigurering samt om mod_negotiation är medkonfigurerad i din/hotellets Apache.
Läs mer i http://httpd.apache.org/docs/content-negotiation.html
PS.
xhtml.nu ligger på http://aleborg.se/ - och de hade inget emot att ge mig rättigheterna att köra "MultiViews" när jag frågade efter dem ;)
tobiassMedlem sedan maj 200254 inlägg verkar mycket smidigt. ska definitivt testas!
en fråga bara; hur gör jag med en engelskspråkig person som sitter vid en svensk dator - i klartext: jag behöver kunna lägga in en länk till den engelska sidan också!
jarvkloMedlem sedan juli 20013 378 inlägg <a href="sida.html.en">Engelsk sida</a>
;)
tobiassMedlem sedan maj 200254 inlägg
jarvklo skrev:
<a href="sida.html.en">Engelsk sida</a>
;)
verkar fungera bra även hos FSdata som omgående fixade så att det fungerade.
Dock har jag en fundering. Om t.ex en spanjor sitter på en svensk dator vill han säkerligen se den spanska versionen. Han kommer då kunna klicka sig till den spanska sidan, men för att han ska fortsätta få läsa spanska sidor måste jag väl göra alla länkar språkspecifika: ex "text.php.es" o inte bara "text"
Jag tappar ju en av fördelarna (flexibiliteten) med denna teknik, men har jag något alternativ?
jarvkloMedlem sedan juli 20013 378 inlägg Jupp - du måste göra alla länkar språkspecifika inom respektive språk som du säger för att täcka in även detta specialfall. (jfr en databaslösning som också skulle behöva köra med länkar i stil med
showtext.php?text=4711&lang=sv
för att kunna hantera användare som inte förstår det språk som webbläsaren är inställd för)
Jag tror inte att du har något alternativ - tyvärr - i alla fall inte om du vill köra med "ren" mod_negotiation och bara ha statiska filer.
Om du inte kan trixa till ett Javascript på varje sida som läser av en cookie som alltid sätts till det senaste *aktiva* språkvalet användaren gjort och därefter gör en client side redirect till filen med den språkvariant som cookien anger förståss - typ ;)
Alternativ 2 är kanske att lägga upp en länk per språk till "sidan själv" med den språklåsta URL:en (bakom en flaggbild kanske?) på varje sida ...
De som då inte har ställt in sina webbläsare för sitt eget språk kommer då att få klicka på två länkar per sida för att se sitt språk... Och då blir det en fråga om flexibilitet kontra hur det fåtal (?) som det drabbar upplever "dubbelklickandet" ;)
tobiassMedlem sedan maj 200254 inlägg tack så mycket för tipsen! det verkar fungera bra!
men jag har upptäckt problemet med fel 406... användare som inte valt något språk alls får ett felmeddelande (406) istället för en webbsida. finns det någon väg runt det?
jarvkloMedlem sedan juli 20013 378 inlägg Jupp.
Börja med att ta bort DefaultLanguage i din .htaccess om du har den - jag hade missuppfattatat den lite när jag tipsade ovan (och när jag först skrev det här inlägget :r)
Ta bort LanguagePriority också...
Kör sedan alla dina svenska filer som sida.html (om du har svenska som defaultspråk) och lägg på språkextensioner på alla "utrikiska" ;) språk (typ sida.html.en).
Gör du så så funkar det som förväntat och du slipper 406:an för "språklösa" och "felspråkiga" besökare ;)
Exempel:
/red: Exemplet var felaktigt och har tagits bort - se nedan!
Är det jag (numera ;) ) kör i http://xhtml.nu/exempel/mod_negotiation/
tobiassMedlem sedan maj 200254 inlägg har inte testat din lösning ännu, men tittade på din länk - och tror inte den fungerar riktigt som den ska...
när jag har enbart svenska inställt får jag upp svenska, men när jag har svenska som förstaspråk och engelska som andraspråk får jag upp den engelska varianten av ditt test. Inte helt ultimat enligt min mening!
jarvkloMedlem sedan juli 20013 378 inlägg Du har naturligtvis rätt...
Grmmmbbll - Jag skall titta över vad problemet är...
Återkommer!
jarvkloMedlem sedan juli 20013 378 inlägg Hmm...
Ibland går man över ån efter vatten....
Jag tänkte inte på att man kan sätta en "ErrorDocument" för felkod 406 för att slippa ifrån problemet för dem som inget språk har... Och testade tydligen inte tillräckligt heller x(
Nu verkar det funka igen iallafall (Så länge man har rättigheter att sätta ErrorDocument på kod 406 så.... ;)
)...
Katalogen heter /exempel/mod_negotiation i mitt exempel - sökvägen till ett ErrorDocument måste vara absolut!
I .htaccess:
Options +MultiViews
DirectoryIndex test
ErrorDocument 406 /exempel/mod_negotiation/test.html.sv
Med filerna
test.html.sv
test.html.en
Ursäkta en gammal förvirrad tok för att det blev så struligt! :r
/red Jag har nu också tagot bort den felaktiga koden ur inläggen ovan också för att minimera risken för framtida missförstånd... ;)