Att vägleda användare till översatta sidor

Fråga

Om min webbplats innehåller alternativa språkversioner av samma sida, hur kan jag hjälpa användaren att få sidan i det språk hen föredrar?

Denna artikel innehåller information som är relevant för konstruktion av sidor för vilka det finns fullständiga översättningar av innehåll. Om dina alternativa sidor har olika innehåll, eller är regionala varianter snarare än översättningar, så kanske du ska göra på annat sätt.

Snabbt svar

Använd språkorienterad innehållsförhandling (language-related content negotiation) på servern för att vägleda användaren till den sida som bäst svarar mot de preferenser som är inställda i webbläsaren, men se även till att lägga till länkar till alla sidor, så att användaren lätt kan byta språk om hen så önskar.

Fundera på hur du kan få användaren att uppfatta var i aktuell sida hen hittar länkar till andra språkversioner, och, om det finns ett otal andra språkversioner av sidan, grunna på om det är lämpligt att använda en ansats med styrning via select-funktionalitet (och, om denna ansats väljs, hur man tydliggör dess funktion).

Om användaren byter till ett annat språk, ge hen en möjlighet att spara detta val, och framöver leverera i detta språk, även om det avviker från inställningarna i webbläsaren.

Detaljer

Innehållsförhandling

Det är ofta praktiskt att med automatik leda användaren till en sida uttryckt i ett språk som hen föredrar, om sådan sida finns tillgänglig . Detta kallas innehållsförhandling (content negotiation), och den utförs av webbservern när en sida efterfrågas. Det finns olika typer av innehållsförhandling. Här tar vi upp språkorienterad innehållsförhandling, vilket vi kallar språkförhandling.

Det blir då lättare för användaren att snabbt komma åt innehållet i det språk hen föredrar. I vissa fall kan detta resultera i att en sida levereras i ett språk som användaren faktiskt inte vill ha, men det finns metoder för att avhjälpa detta, vilket vi beskriver längre ned.

Vad gäller den sida du just nu läser, så inspekterar servern HTTP-huvudet Accept-Language, vilket sänds när din webbläsare (via HTTP) begär en sida.

HTTP-huvudet Accept-language representerar en inställning angiven i webbläsaren eller angiven i det underliggande systemet. När du installerar en webbläsare så ges dessa inställningar (preferenser) med automatik alltid vissa normalvärden, men i de flesta (bords- eller bärbara) datorer kan man även ändra eller lägga till språkpreferenser. Du kan även ange en prioritetsordnad lista av språk, vilken kan användas av servern för att hitta bästa innehåll att leverera, om innehåll inte finns uttryckt i det språk som är du angivit som mest prioriterat (dvs, överst i listan).

Undvik att använda IP-adresser eller andra positionstjänster för att gissa vilket språk användaren vill ha. Sådana ansatser kan vara praktiska för att komma åt regionspecifika tjänster, hitta lokal information, etc., men det kan skapa problem vid språkorienterad förhandling, eftersom användarens plats i geografin inte nödvändigtvis korrelerar mot det språk i vilket hen vill läsa en webbsida.

Oavsett vilken metod som används för språkförhandling, så bör du försäkra dig om att det finns ett normalval för ditt innehåll, vilket kommer att användas när det inte finns innehåll i något av de önskade språken. För den sida du nu läser, så är reservalternativet att använda den engelska versionen, därför att den är ursprungsversionen, den har senaste uppdateringar, och den har genomgått grundlig granskning. Ännu ett skäl till detta val är att W3C anser att engelska är det bästa alternativet när andra språk inte kan erbjudas (lingua franca).

Naturligtvis kan en användare vilja använda något annat språk som de har tillräcklig förståelse för, istället för att använda engelska. Detta har att göra med personliga preferenser. Om de skulle vilja se innehåll i ett annat språk, innan de hänvisas till den engelska versionen, så kan de åstadkomma detta genom att göra lämpliga inställningar av språkpreferenser i webbläsaren eller det underliggande systemet i form av en prioritetslista, som nämndes ovan. Om språkförhandling inte lyckas för deras högst prioriterade språk, så kan webbservern söka efter innehåll i de andra angivna språken, i prioritetsordning.

Du kan hitta mer nyttig information i artikeln When to use language negotiation. Där diskuteras i mer detalj när det är lämpligt, respektive olämpligt, att använda språkorienterad förhandling om innehåll.

Att frångå språkförhandling

Antag att ditt naturliga språk är spanska, och att din webbläsare är inställd på att ta emot spanskspråkigt innehåll, men antag även att du kan förstå engelska, och att du föredrar att läsa tekniska artiklar (t.ex. W3C:s sidor) i engelskt original.

Om du omdirigeras till en spanskspråkig sida varje gång du följer en länk, och du då måste explicit hämta den engelska versionen av sidan, så kan dessa repetitiva handgrepp upplevas som irriterande. Du behöver i så fall något sätt att ange att du vill fortsätta läsa engelska sidor på denna webbplats, och det behövs en mekanism som stöder detta beteende.

Den sida du nu läser möjliggör detta, genom att låta dig sätta en kaka (cookie) varje gång du klickar på en länk i sidans övre högra hörn. Varje gång du laddar en av dessa sidor, så kontrollerar servern om denna kaka är satt och är aktiverad, och om detta är fallet så levereras den språkversion som du senast hämtat.

Du kan även åstadkomma detta beteende genom att använda localStorage, om du föredrar detta framför användning av kakor.

Ytterligare information

Vilken typ av innehållsförhandling kan man använda på Apache?

Den sida du nu läser levereras av en Apache-server. Det finns två vanliga sätt för Apache att utföra innehållsförhandling genom omdirigering: MultiViews och type maps (typavbildningar). Vi använder typavbildningar, eftersom vi anser att det ger oss mer flexibilitet i omdirigering av en hämtningsbegäran, men det kan finnas andra avvägningar för dig. Nackdelen är att denna ansats kräver några extra filer på servern, och dessa filer behöver redigeras när en översatt sida läggs till eller tas bort. I nästa avsnitt ges en kort översikt över typavbildningar. Vi har även en artikel som beskriver hur man kan användaMultiViews, vilken du kan använda om den ansatsen passar dig bättre.

Att använda typavbildningar för språkförhandling

Nedan ges några kortare tips om användning av typavbildningar för språkförhandling på en Apache-server. Titta i Apache-dokumentationen, där detaljerad information ges om denna ansats.

För att använda typavbildningar så måste du skapa en fil i samma mapp som huvudfilen, med samma namn, men med namnsuffix .var. Den filen används av servern då en fil med det namnet begärs, och då denna begäran inte anger ett sidonamn med ett suffix vilket indikerar ett språk (t.ex. .en eller .de). Denna extra fil ger information till servern om var filer för specifika språkversioner finns.

Du behöver även konfigurera din server så att den använder innehållsförhandling medelst typavbildningar, genom att lägga till ett AddHandler direktiv. Vi använder detta på följande sätt:

AddHandler type-map .var

Här följer ett exempel på en file med namn my-article.var-fil:

URI: my-article

Content-language: de
Content-type: text/html
URI: my-article.de.php

Content-language: en
Content-type: text/html
URI: my-article.en.php

Content-language: es
Content-type: text/html
URI: another-file-with-long-name-so-you-notice.php

Content-language: uk
Content-type: text/html
URI: my-article.uk.php

Content-type: text/html
URI: my-article.en.php

När servern får en hämtningsbegäran av resursen http://www.example.org/my-article, så inspekterar servern det HTTP-huvud Accept-Language som sänts av webbläsaren. Om detta anger de (tyska), så kommer servern att söka i listan ovan och returnera filen my-article.de.php.

Lägg märke till att om ett Accept-Language-huvud anger koden es (spanska), så kommer servern att omdirigera filhämtning till en fil med ett helt annat namn. En sådan fil kan även finnas i en helt annan mapp.

Slutligen kan du se att de sista två raderna definierar ett standardval: om en angiven kod för Accept-Language inte matchar något av alternativen högre upp i listan, så kommer servern att returnera den utpekade filen (i detta fall den engelska versionen med namn my-article.en.php).