Att vägleda användare till översatta sidor

Avsedd läsekrets: HTML-utvecklare (arbetar med textredigerare eller skript), projektledare för webbprojekt, och alla som är intresserade av förhandling och språkbyte för innehåll.

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.

Om man stöder innehållsförhandling så blir det mycket enklare att hantera översättningar, och att vidaredistribuera innehållslänkar till andra.

Utan innehållsförhandling är en sidas källkod full av explicita länkar till specifika språkversioner av sidoinnehåll, såsom qa-site-conneg.en.html eller qa-site-conneg.html.en Med innehållsförhandling kan en sådan länk enkelt representeras som qa-site-conneg.

Med en sådan ansats blir översättningsarbete enklare, mängden fel minskar, och det blir lättare att hantera ändringar då nya språkversioner läggs till och gamla tas bort. Det minimerar även potentiella problem som kan uppstå om en användare vill skicka en länk till någon annan, eftersom mottagaren av denna länk automatiskt kan få se webbsidan i det språk hen föredrar.

Du kan ändå fortsätta använda något i stil med qa-site-conneg.en, men bara när du faktiskt vill referera till den engelskspråkiga versionen.

Länkar på sidan

Som nämnts ovan, så kan det finnas fall där det språk som användarens webbläsare efterfrågar inte är det språk som användaren i själva verket skulle vilja ha den sidan i. Skäl till detta kan vara att användaren föredrar att läsa teknisk information på engelska, eller föredrar att läsa en originaltext istället för en översättning, eller använder en kollegas dator eller befinner sig på ett Internetkafé i ett främmande land och då inte kan/bör styra om webbläsarens språkinställningar.

Av dessa skäl är det bäst att lägga till länkar till de olika alternativa språkversionerna, och göra detta på alla sidor.

På den sida du nu läser finner du sådana länkar i sidans övre högra hörn. Vi har placerat länkarna där med avsikten att det skall vara lätt att upptäcka dem när du just kommit till denna sida. Denna typ av information bör inte döljas, eftersom en användare kanske tittar på vad hen ser som en mängd text som inte går att förstå. Ju enklare det är att upptäcka länkarna, desto bättre.

Visserligen är det sant att om du råkar använda en länk som placerar dig mitt i ett dokument, så kanske du inte ser vilka andra språkversioner som finns åtkomliga, men det blir i alla fall enklare att hitta dem när du söker efter dem.

Om du tittar på länkarna högst upp på sidan, så ser du att de är formulerade i samma språk som sidorna vilka länkarna pekar på. Det är gjort på detta sätt för att hjälpa användare att hitta vilket alternativ de skulle vilja läsa. Om du är engelskspråkig och konfronteras av en sida uttryckt i persiska, och om texten för länken till den engelska versionen skriven med arabiska tecken, så kanske du inte skulle förstå att det är den du skall använda!

Eftersom denna sida inte har utrymmesbrist, så kan alla länkarna presenteras samtidigt. Om du har en lång lista med alternativa versioner, så kan det vara bättre att använda nedrullningslista eller popup-lista. Det kan dock finnas kritiska nackdelar med en sådan ansats. En viktig svårighet är att det kan vara svårt att ange vad denna valmöjlighet handlar om, på ett språkneutralt men ändå tydligt sätt. Artikeln Using select to link to localized content ger mer information om vad du bör tänka på när du använder en nedrullningslista.

En annan viktig rekommendation är att motstå frestelsen att använda landsflaggor för att identifiera språk. I vissa länder förekommer fler än ett språk, och vissa språk talas i fler än ett land. Fastän flaggor kan vara användbara för länkar till geografiskt anpassade versioner av en sida - såsom länkar till en brittisk webbhandel, till en kanadensisk, till en australiensisk, etc. - så är de inte lämpade för att länka till sidor som bara är språkliga varianter av samma innehåll.

Du kan även antyda betydelsen av språkspecifika länkar genom att använda det språk som den aktuella sidan är uttryckt i. Till exempel kan man på en engelskspråkig sida ange det engelska namnet på språket i anslutning till var och en av de alternativa versionerna, såsom français (French). För den sida du nu läser gör vi inte så, delvis av utrymmesskäl, och delvis eftersom det inte verkar ge något konkret mervärde. Men vi anger det engelska namnet på språket i en knappbeskrivning (tooltip), som du kan se om du flyttar musen till länken. Detta medför en mindre komplikation, eftersom det inte är möjligt att använda lang-attributet på ett enstaka element för att ange att title-texten är i ett språk och elementinnehållet i ett annat. Därför använder vi två nästlade element, som beskrivet i artikeln Declaring language in HTML.

Det kan vara värt att påpeka att vi automatiserar skapandet av dessa länkar till alternativa språkversioner, och lagrar data om detta i en extern fil. Då blir det lättare att hantera tillägg och borttag av språkversioner, eftersom man då inte behöver manuellt modifiera länkarna i de olika alternativa sidorna.

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).