Języki#

Wstęp#

W dokumentach HTML możemy wprowadzić specjalne polecenia, które definiują rodzaj używanego języka, np. polski, niemiecki czy litewski. Mamy do dyspozycji dwie metody:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<head>
	<meta http-equiv="content-language" content="język">
</head>

lub

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<element lang="język>...</element>

gdzie zamiast "język" należy wpisać odpowiedni kod językowy dla stosowanego języka.

W przypadku XHTML-a język dla elementu ustawiamy za pomocą polecenia xml:lang="język". W celu zachowania kompatybilności wstecznej, polecenie bardzo często stosowane jest jednocześnie z atrybutem lang.

Działanie dla znacznika meta opisałem już wcześniej. W tym miejscu dokładniej omówię przeznaczenie atrybutu lang.

Atrybut lang nie może być użyty z elementami: APPLET, BASE, BASEFONT, BR, FRAME, FRAMESET, IFRAME, PARAM, SCRIPT.

Atrybut lang#

Atrybut pozwala zdefiniować bazowy język stosowany w atrybutach wszystkich elementów oraz zawartości tekstowej. Domyślna wartość atrybutu jest nieustalona. Poniżej zamieszczam deklaracje dla całej strony oraz dla jednego elementu:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<html lang="pl">
...
</html>

<!-- lub -->

<p lang="de">...</p>

Informacja o języku określona przez atrybut lang może zostać wykorzystana przez przeglądarkę do kontrolowania wyświetlania treści w różny sposób. Oto kilka innych ciekawych zastosowań:

Intencją wprowadzenia atrybutu było wyświetlanie przez przeglądarki zawartości, która będzie bardziej dostosowana do zasad przyjętych w danym języku. To nie oznacza wcale, że przeglądarki powinny w mniejszym stopniu obsługiwać pozostałe, mniej typowe znaki. Przeglądarki muszą poświęcić tyle samo uwagi dla wyświetlenia każdego znaku, niezależnie od atrybutu lang.

W praktyce niewiele przeglądarek potrafi wykorzystać potencjał atrybutu. Najprostszym przykładem testującym będzie użycie elementu <q>, który automatycznie obejmuje swoją zawartość znakami cudzysłowu. Określając dodatkowo atrybut lang="pl" powinniśmy zobaczyć poprawne cudzysłowy dla naszego rodzimego języka. Prosty kod:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<p>
	<cite>Włodzimierz Szaranowicz</cite> powiedział: <q lang="pl">Doleciał do 120 metra ale wylądował na 116.</q>
</p>

Efekt:

Włodzimierz Szaranowicz powiedział: Doleciał do 120 metra ale wylądował na 116.

Jedynie w przeglądarce Internet Explorer 9 (i Chrome) zaobserwujemy poprawną interpretację atrybutu. Trochę mnie to zaskoczyło, nie taki diabeł straszny jak go malują. Dziwne że pozostałe "nowoczesne" przeglądarki mają z tym problem.

Również sytuacja z wyszukiwarkami jest niejasna. Ustawienie języka dla strony (lub jej części) powinno ułatwić wyszukiwanie oznaczonej treści użytkownikom, którzy stosują np. filtrację językową. Jednak sposób, w jaki wyszukiwarki rzeczywiście przetwarzają zawartość oznaczaną w ten sposób jest tajemnicą. Skuteczność stosowania atrybutu będzie wątpliwa, a rezultat pozycjonowania treści za jego pomocą powinniśmy traktować raczej jako łut szczęścia.

Kody językowe#

Wartością atrybutu lang jest kod języka, który identyfikuje naturalny język mówiony, pisany, lub w inny sposób wykorzystywany do przekazywania informacji między ludźmi. Języki komputerowe są wyraźnie odseparowane od kodów językowych.

Kody języków mogą być jednoczłonowe lub dwuczłonowe. Pierwszy człon wskazuje zawsze język mówiony. Drugi człon może wskazywać kraj. Na przykład en oznacza ogólny język angielski, a en-us język angielski, jakim mówi się w Stanach Zjednoczonych. Oto schemat tworzenia kodu określany przez dokument RFC1766 (wartość w nawiasie jest opcjonalna):

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
kod_języka = język_mówiony ( "-" kraj )*

Skróty języków mówionych zawarto w normie ISO 639. Natomiast skróty krajów opisano w standardzie ISO 3166-1. W obu przypadkach należy brać po uwagę tylko dwuliterowe skróty.

Dziedziczenie atrybutu#

Każdy element dziedziczy informację o kodzie języka zgodnie z następującymi regułami (od najwyższego do najniższego priorytetu):

Oto krótki przykład prezentujący dziedziczenie:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	"http://www.w3.org/TR/html4/strict.dtd">

<html lang="fr">

	<head>
		<title>Wielojęzykowy dokument</title>
	</head>

	<body>
		...Interpretowane jako francuski...
		<p lang="es">...Interpretowane jako hiszpański...</p>
		<p>...Interpretowane jako francuski (ponownie)...</p>
		<p>...Tekst interpretowany jako francuski <em lang="ja">trochę
		   japońskiego</em> Francuski zaczyna się ponownie...</p>
	</body>

</html>

W powyższym przykładzie głównym językiem dokumentu jest francuski ("fr"). Pierwszy akapit został zadeklarowany w języku hiszpańskim ("es"), po nim powraca główny język francuski. Trzeci akapit zawiera część oznaczoną językiem japońskim ("ja"), po której ponownie powraca podstawowy język francuski.

Jak widać, zmiana języka na niższym poziomie w drzewie dokumentu zastępuje kod języka, który jest ustawiony wyżej, ale tylko dla zagnieżdżonego elementu, do którego inny kod języka jest stosowany.

Dziedziczenie wartości atrybutu lang przebiega inaczej w przypadku tabeli.

Stylizacja#

Ze względu na nieprawidłową interpretację atrybutu lang przez przeglądarki, najczęściej jest on stosowany w połączeniu z arkuszami stylów. Poszczególne części strony możemy oznaczyć odpowiednimi kodami języków, a następnie zadeklarować dla nich właściwe style. Można wykorzystać w tym celu dwa podstawowe rozwiązania CSS:

Różnica między tymi mechanizmami polega na tym, że w pierwszym przypadku element musi mieć bezpośrednio przypisany atrybut lang="...", podczas gdy użycie pseudoklasy pozwala na bardziej inteligentny wybór (uwzględniający dziedziczenie języka określonego przez inne źródła).

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Języki (H1) Wstęp (H2) Atrybut lang (H3) Kody językowe (H4) Dziedziczenie atrybutu (H4) Stylizacja (H4)