Překlad stránky
Snadná lokalisace webu do různých jazyků.
Při vytváření aplikace, kde má být možné přepínat různé jazyky, je potřeba řešit pohodlnou lokalisaci. Jak na to jednoduše v PHP?
Použití
Cílem je mít funkci s nějakým krátkým názvem – třeba l
, která se bude používat pro výpis všech textů na stránce.
<?=l("Text, který půjde později přeložit.")?>
Poznámka: Sekvence <?=
slouží k výpisu PHP skriptem do HTML. Košatější ekvivalent je <?php echo
.
Skládání řetězců
Někdy je nutné v textech reagovat na různé stavy aplikace / používat proměnné.
<?=l("Uživatelské jméno „") . $jmeno . l("“ je již obsazeno.")?>
Takto vypadající spojování jistě není úplně elegantní. Lepíš se zdá použít funkci vsprintf
:
<?=l("Uživatelské jméno „%s“ je již obsazeno.", $jmeno)?>
V případě více proměnných v textu se funkci l
předá místo jedné proměnné pole s hodnotami, které se mají dosazovat.
Uložení překladu
Hlavní jazyk může být použit přímo v kódu. A další překlady potom budou PHP soubory, kde bude PHP pole s jednotlivými překlady.
$l["Text v kódu"] = "Překlad textu z kódu";
Požadovaný jazyk se potom zapne prostým vložením PHP skriptu (include
).
Problém může nastat v případě, že budeme chtít změnit nějaký text primárního jazyku, který má své texty přímo v kódu. Řešením je buď úpravy hlavního jazyka vytvářet jako překlad, nebo měnit přímo kód. Potom je ale nutné synchronisovat ostatní překlady, aby překládaly i upravené řetězce.
Funkce l
Funkce l
jen zkontroluje, jestli příslušný překlad existuje a vrátí ho s použitím funkce vsprintf
(v případě, že jsou předány nějaké argumenty).
$l = array();
function l($text, $argumenty = array()) {
global $l;
if (isset($l[$text])) {
$text = $l[$text];
}
if (!empty($argumenty)) {
$text = vsprintf($text, $argumenty);
}
return $text;
}
Funkční ukázka je na GitHubu.
Odkazy jinam
- Localize Your Web Application for Any Country With the Google Translate API – automatický překlad aplikace pomocí Google Translate API
Komentáře