Fordítható felület készítése

Hojtsy Gábor képe

Saját modul fejlesztésekor hamar felmerülhet a kérdés, hogy egy gyorsan saját célra összerakott kiterjesztést készítünk, avagy szeretnénk azt szélesebb körben is publikálni, visszaadva a nyílt forrású közösségnek valamit abból, amit ajándékba kaptunk. Ha más nyelvi környezetben is használhatóvá szeretnénk tenni a modulunkat, akkor nem árt, ha felkészítjük arra, hogy több nyelven is beszéljen. Ugyanez a probléma merül fel akkor is, ha saját oldalunkon szeretnénk több nyelvet támogatni.

Fordítható felület kialakítására a Drupal két egyszerű függvényt biztosít, és ezeket elegendő ismernünk ahhoz, hogy több nyelvet támogató felületet készítsünk. A t() függvény karaktersorozatok lefordítására szolgál, míg a format_plural() egyes- és többesszámban álló alakok kiírására. Lássunk néhány rövid példát:

// Felület fordítást nem támogatjuk
$message = 'Nem sikerült betölteni a fájlt.';
// Felület fordítást támogatjuk
$message = t('Unable to load file.');
// Fájl nevét ki szeretnénk írni (de itt hibásan) [1]
$message = t("Unable to load file: $filename");
// Fájl nevét ki szeretnénk írni (de itt is hibásan) [2]
$message = t('Unable to load file:') . ' ' . $filename;
// Fájl nevének kiírása helyesen [3]
$message = t('Unable to load file: %filename', array('%filename' => $filename));
?>

A t() tehát egy adott karaktersorozat lefordítására szolgál. Arról a Drupal gondoskodik, hogy a megfelelő nyelvre történjen lefordításra az adott karaktersorozat, ha az adatbázisban rendelkezésre áll hozzá tartozó fordítás. Néhány általános szabály t() fordítások írásához:

  • HTML használatát célszerű kerülni a karaktersorozatokban – kivéve a hosszabb súgó szövegeket, ahol ez elkerülhetetlen.
  • Dinamikusan betöltendő tartalmakat nem karaktersorozat befűzéssel [2] kell megoldani, hiszen ez nem teszi lehetővé a befűzendő tartalom áthelyezését a fordításban, ami szórendi okok miatt szükséges lehet. Változóhelyettesítést használni szintén teljesen céltalan [1], hiszen akkor annyi fordítandó karaktersorozat lesz, amennyi behelyettesített érték előáll, a fenti esetben a lehetőségek száma gyakorlatilag végtelen. Ilyen esetekben tehát a megoldás egy helykitöltő használata [3], mely általában a százalékjellel kezdődik, és aztán néhány karakterben leírja, hogy mi kerül arra a helyre. A t() második paraméterében megadott tömbben kell az egyes helykitöltőkhöz tartozó értékeket megadni. Így lehet a fordítás például: "%filename betöltése nem sikerült"

A format_plural() akkor használatos, ha valamilyen mennyiséget szeretnénk kiírni, melynél a kísérő szavakat másképp kell írni a mennyiségtől függően. Magyar nyelvben csak egy változat van az '1 meggymag', '243 meggymag', stb. megfogalmazására, mennyiségtől függetlenül. Angol nyelvben az egyes szám és többesszám különválik, és vannak olyan nyelvek, ahol sokkal többféle formát használnak. A megfelelő fordítások előállítása persze az adott fordítói csapat dolga lesz, nekünk csak a format_plural() használatával kell tisztában lennünk.

// Megfelelő fordítás előállítása
$seeds = format_plural($number, '1 cherry seed', '%count cherry seeds');
?>

Az első paraméter egy egész szám, a következő kettő pedig az egyes és többesszámú alak. A többesszámú alakban a %count helykitöltőt használhatjuk, ami a szükséges időben a $number értékével helyettesítődik majd – miután a megfelelő fordítást sikerült megtalálni.

Természetesen vannak további függvények, melyek hátterében felület fordítás is áll. Ilyenek például a format_interval() és a format_size(), ezekkel viszont nem kell feltétlenül törődnünk, hiszen a nyelvi szükségleteiket saját hatáskörben megoldják.