[PHP] System języków na stronie internetowej
[align=center]Poziom trudności: 3/5 (nie tłumaczę podstaw)
W tym tutorialu przedstawię prosty system do obsługi wielu języków na witrynie WWW. Będzie on wykorzystywał ciasteczka (do zapamiętania wyboru użytkownika) oraz pliki:
- lang/polish.php - zawiera lokalizację w języku polskim
- lang/english.php - zawiera lokalizację w języku angielskim.
- lang.php - biblioteka do obsługi języka.
Wygląda to mniej więcej tak: użytkownik wybiera odpowiedni język z listy, po czym ustawiane jest ciasteczko o wartości "polish" lub "english", na podstawie którego ładowane są odpowiednie frazy z tablicy $lang. Zakładam też, że stronę korzystającą z takiego systemu czytelnik potrafi sobie napisać sam.
Tworzymy więc pliki polish.php i english.php w katalogu lang:
<?php
$lang['welcome'] = "Witaj na naszej stronie!";
$lang['index'] = "Strona główna";
$lang['links'] = "Sznurki";
$lang['about'] = "O nas";
$lang['goodbye'] = "I żegnaj zarazem! Nie mamy tu więcej do pokazania.";
?>
<?php
$lang['welcome'] = "Welcome to our site!";
$lang['index'] = "Home";
$lang['links'] = "Links";
$lang['about'] = "About";
$lang['goodbye'] = "And good bye! We do not have more to show on this page.";
?>
Następnie musimy utworzyć bibliotekę lang.php. Jej budowanie rozpoczniemy od określenia domyślnego języka strony. W naszym przypadku będzie to język polski. Użyjemy tu stałej, dzięki czemu inne skrypty nie będą mogły zmieniać tej wartości.
<?php
define("DEFAULT_LANG", "polish");
?>
Teraz stworzymy sobie krótką funkcję do ładowania określonego języka.
function lang_load($l) {
if(file_exists("lang/{$l}.php")) {
include_once "lang/{$l}.php";
return true;
} else {
return false;
}
}
Nie jest to absolutnie konieczne, ale dobrym pomysłem będzie stworzenie tablicy będącej listą języków, które może wybrać użytkownik:
$languages = array(
"polish" => "Polski",
"english" => "Angielski"
);
Później tej tablicy użyjemy w funkcji generującej pole select (pole listy rozwijanej):
function lang_list() {
global $languages; // globalizacja zmiennej
$out = 'Język: <select name="language">\n';
foreach($languages as $id => $title) {
$out .= "\t<option value=\"{$id}\">{$title}</option>";
}
$out .= "</select>";
return $out;
}
I wreszcie, na koniec, funkcja inicjalizująca - czyli taka, która dobiera język:
function lang_init() {
if(isset($_POST['language'])) {
setcookie("mojastrona_language", $_POST['language']);
lang_load($_POST['language']);
} else {
if(isset($_COOKIE['mojastrona_language'])) {
lang_load($_COOKIE['mojastrona_language']);
} else {
lang_load(DEFAULT_LANG);
}
}
}
Skompletujmy więc to wszystko w jeden plik:
<?php
define("DEFAULT_LANG", "polish");
$languages = array(
"polish" => "Polski",
"english" => "Angielski"
);
function lang_load($l) {
global $lang;
if(file_exists("lang/{$l}.php")) {
include_once "lang/{$l}.php";
return true;
} else {
return false;
}
}
function lang_list() {
global $languages; // globalizacja zmiennej
$out = 'Język: <select name="language">\n';
foreach($languages as $id => $title) {
$out .= "\t<option name=\"{$id}\">{$title}</option>";
}
$out .= "</select>";
return $out;
}
function lang_init() {
global $lang;
if(isset($_POST['language'])) {
setcookie("mojastrona_language", $_POST['language']);
lang_load($_POST['language']);
} else {
if(isset($_COOKIE['mojastrona_language'])) {
lang_load($_COOKIE['mojastrona_language']);
} else {
lang_load(DEFAULT_LANG);
}
}
}
?>
Zadaniem użytkownika jest tutaj wyświetlenie w odpowiednim miejscu pola wyboru języka oraz implementacją tego systemu w praktyce. Oczywiście możemy także rozbudować skrypt o inne języki.