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:
<head> <meta http-equiv="content-language" content="język"> </head>
lub
<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:
<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ń:
- Przydatność dla wyszukiwarek sieciowych.
- Przydatność dla syntezatorów mowy.
- Pomoc dla przeglądarek przy wyborze rodzajów glifów dla wysokiej jakości typografi.
- Pomoc dla przeglądarek przy wyborze odpowiedniego zestawu znaków cudzysłowu.
- Pomoc dla przeglądarek przy podejmowaniu decyzji odnośnie dzielenia wyrazów, ligatur, oraz odstępów.
- Przydatność dla narzędzi sprawdzających poprawność pisowni oraz gramatykę.
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:
<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):
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):
- Atrybut
lang
ustawiony bezpośrednio w elemencie. - Najbliższy element będący rodzicem ma ustawiony atrybut
lang
. - Bezpośrednio z nagłówka HTTP serwera (
"Content-Language
, ewentualnie z meta). - Domyślne ustawienia przeglądarki lub użytkownika.
Oto krótki przykład prezentujący dziedziczenie:
<!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:
- selektor atrybutu, np.
[lang|="..."]
lub[lang="..."]
- pseudoklasę
:lang(...)
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).