Debian web site in different languages

Obviously, not everyone in the world uses the same language. As the web grows it is becoming more common to find pages that are available in multiple languages. A standard was therefore introduced, called content negotiation, that allows a person to set the language(s) they prefer to receive documents in. The actual version delivered is negotiated between your browser and the server; your browser sends its preferences and the server decides which version to send based on your preferences, and what versions of the document are available.

Note that selecting a different language (from the available translations listed at the bottom of a page) will only show the current page in that language. It does not change the default language. If you click a link to a different page, it will be shown in the original language again. To change your default language, you need to change your language preferences in the configuration of your browser, as explained below.


What to do if a Debian web page is in the wrong language

The first and most common reason why a document is received in the wrong language from the Debian web server is an improperly configured browser. Please see the section on how to set the preferred language on how to fix this.

The second reason is a broken or a misconfigured cache. This is a growing problem as more ISPs see caching as a way of decreasing net traffic. Read the note on caching web servers even if you don't think you are using one.

The third reason is that there is a problem with www.debian.org. Only a handful of problems with receiving the wrong language reported in the last several years were due to a bug at our end. We thus suggest that you investigate the first two sources of problems thoroughly before contacting us. If you find that http://www.debian.org/ is working, but one of the mirrors is not, report that to us and we will contact the mirror maintainers.

After fixing any of these problems, we suggest that you clean out the local cache (both disk and memory) in your browser before trying to view pages again. We also suggest you use lynx when testing. It is the only browser we have found to comply 100% with the HTTP specifications for content negotiation.

Potential problems with proxy servers

Proxy servers are essentially web servers that have no content of their own. They sit in the middle between users and real web servers. They grab your requests for web pages and fetch the page. After that, they forward the page to you but also make a local, cached copy, for later requests. This can really cut down on network traffic when many users request the same page.

This is a great idea most of the time, but it fails when the cache is buggy. In particular, some older proxy servers do not understand content negotiation. This results in them caching a page in one language and serving that, even if a different language is requested later. The only solution is to upgrade or replace the caching software.

Historically, people only used a proxy when they configured their browser to use one. This is no longer the case. Your ISP may be redirecting all HTTP requests through a transparent proxy. If the proxy doesn't handle content negotiation properly, then users can receive cached pages in the wrong language. The only way you can fix this is to complain to your ISP in order for them to upgrade or replace their software.


How to set up the language settings

You should set the preferred language to all the languages you speak, ordered by your preference. It is a good idea to add English ('en') as a backup (last in the list) because the original language of the Debian web pages is English and not all documents may be translated into your preferred language(s).

For example, if you are a native French speaker, you would want to set your language variable to include first the French language (with the language code 'fr'), followed by English (with the language code 'en').

See below for exact instructions on how to do this in specific browsers.

As you can see there, most browsers will present you with some kind of user interface that will hide some of the details about defining your preferred language. If this isn't the case, please note one important simplification in the previous paragraph: if you're just specifying a list of languages like 'fr, en' this doesn't yet define a preference, but equally ranked options and the server may decide to ignore their ordering. If you want to specify real preference you have to use "quality values" which are floating point values between 0 and 1 where higher values indicate higher preference. So in the case above you would probably use something like 'fr; q=1.0, en; q=0.5'.

One thing you need to be careful of is using sub-categories of languages. Using 'en-GB, fr', for example, does not do what most people expect (if they have not read the HTTP specification).

We strongly recommend that you do not add country extensions to a language unless you have good reason. If you do add one, make sure you also include the language without the extension.

Explanation: A server that receives a request for a document with a preferred language of 'en-GB, fr' will not serve the English ('en') version before the French version. It will only serve the English document before the French one if there is a version of the file with 'en-gb' for the language extension.

Thus, you should configure your browser to send 'en-GB, en, fr' or simply 'en, fr'. It does work the other way though, e.g. a server can return 'en-us' when 'en' is requested.

For more information about setting the preferred language variable see the Apache documentation on content negotiation.

Setting the preferred language in a browser

To set the default language in your browser you have to set a variable that gets passed to the web server. How this is done depends on the browser you are using.

Mozilla / Netscape 4.x and later versions
     Edit -> Preferences -> Navigator -> Languages
  
Note: with Netscape 4.x you need to make sure you select the language from the available choices. A number of people reported problems because they typed in the language by hand.
Mozilla Firefox
Version 0.9 and newer:
Linux:
     Edit -> Preferences -> General -> Languages
  
Windows:
     Tools -> Options -> General -> Languages
  

Version 1.5 and newer:
Linux:
     Edit -> Preferences -> Advanced -> General -> Edit Languages
  
Windows:
     Tools -> Options -> Advanced -> General -> Edit Languages
  
In older versions you have to go to about:config and change the value of intl.accept_languages.
Internet Explorer
Windows:
     Tools or View or Extras -> Internet Options -> (General) Languages
  
MacOS:
     Edit -> Preferences -> Web Browser -> Language/Fonts
  
Pocket Internet Explorer
     Create the string registry key AcceptLanguage in
     HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\
     with value fr; q=1.0, en; q=0.5 (without quotes).
  
Opera
Most versions:
     File -> Preferences -> Languages
  
Linux/*BSD versions 5.x and 6.x:
     File -> Preferences -> Document -> Languages
  
Nokia 770 Web Browser: Edit the file /home/user/.opera/opera.ini and add the following line in the section [Adv User Prefs]:
     HTTP Accept Language=fr;q=1.0,en;q=0.5
  
Galeon
     Settings -> Preferences -> Rendering -> Languages
  
Epiphany
     Edit -> Preferences -> Language -> Languages
  
Konqueror
If you want to set only one language, it should be quite easy as soon as bug #358459 is fixed, just select it in the KDE Control Center and restart your KDE session in order to apply the changes.
If you want to have multiple languages set or need a workaround for the mentioned bug, you currently have to edit your ~/.kde/share/config/kio_httprc file to include a line like the following:
     Languages=fr;q=1.0, en;q=0.5
  
lynx
You can either edit the preferred_language variable in your .lynxrc or set it using the 'O' command while in lynx.

For example, use the following line in your .lynxrc

  preferred_language=fr; q=1.0, en; q=0.5
  
W3 (emacs based web browser)
(setq url-mime-language-string  "preferred_language=fr; q=1.0, en; q=0.5")
or using the custom package (assuming URL version p4.0pre.14):
Hypermedia -> URL -> Mime -> Mime Language String...
iCab
     Edit -> Preferences -> Browser -> Fonts,Languages
  
W3M
     Options (o) -> Other Behavior -> Accept-Language
  
Safari
Safari uses the MacOS X system preferences to determine your preferred language:
    System preferences -> International -> Language
  
ELinks
You can set up the default interface language at:
    Setup -> Language
  
This will also change the requested language from web sites. You can change this behaviour and fine-tune the accepted languages HTTP variable at:
    Setup -> Options manager -> Protocols -> HTTP
  
Netscape 3.x
Add
     *httpAcceptLanguage: [preferred_language string]
  
to the Netscape app-defaults file or ~/.Xresources
IBrowse
Go into Preferences, then Settings, then Network. Under "Accept language" it will probably show a "*" by default. If you click on the "Locale" button it should add your preferred language. If not, you can enter it manually. After that, click "OK".
Voyager
Go to Settings then Languages. You can either enter it manually or click on "Get from locale". Click "OK" when done.

If you have information on configuring a browser that isn't listed above, please send it to debian-www@lists.debian.org.