Sziasztok! Egyre több olyan megkeresésem van, amelyben több nyelven működő oldalt kérnek, ezért írtam magamnak egy "motort" (Class-t), amivel megkönnyítem a magam dolgát. Ezt szeretném veletek megosztani.
A lényege annyi, hogy egy megadott .txt fájlból olvassa be az oldal részeit amelyeket több nyelven akarunk megjeleníteni. (A class másolható a végén)
Dokumentáció/HasználatA class-t tartalmazó file meghívásaKód:
require_once 'mDisplay.php';
A class meghívása (Fontos:A paramétere a használni kívánt nyelvek rövidítése kötőjellel elválasztva pl. hu-en-es-fr) - Mindig az első az alapértelmezett ha később nem adjuk meg.
Kód:
$valtozo = new mDisplay("hu-en");
A txt fájlok elérési útjának beállítása, ha külön könyvtárba(mappába) vannakKód:
$valtozo -> _dir = "tutorial/";
A txt fájlok összefoglaló nevének beállításaKód:
$valtozo -> _file = "tutorial";
A class betöltése (Fontos:A paramétere a jelenleg használni kívánt nyelv legyen)Kód:
$valtozo-> init('hu');
Txt fájlok létrehozása:Hozzuk létre a megadott mappán belül a megadott nevű fájlokat az alábbi képpen - Ha a fenti példát nézzük akkor a tutorial mappába kell létrehoznom egy tutorial_hu.txt és egy tutorial_en.txt fájlt.
A txt fájlok felépítése:KEYWORD:SENTENCE
KULCSSZO:MONDAT
Például:
tutorial_hu.txt ->Kód:
HW:Helló világ!
Ugyan ezt hozzuk létre a másikba csak nyilván más nyelven írva:
tutorial_en.txt ->Kód:
HW:Hello world!
Végül ezeket csak meg kell hívni a php fájlban az alábbi képpen:Kód:
<p><?= $valtozo -> R("HW"); ?></p>
Output: Helló világ
*Megjegyzés: A szöveg tartalmazhat HTML Tag-eket, viszont fokozottan ügyeljünk arra, hogy azokat zárjuk le!
Egy komplett példa:
Kód:
<?php session_start(); ?>
<?php
if(!isset($_SESSION["lang"]))
$_SESSION["lang"] = "hu";
?>
<?php require_once 'mDisplay.php' ?>
<?php
$mDisplay = new mDisplay("hu-en");
$mDisplay -> _dir = "mDisplay/";
$mDisplay -> _file = "example";
$mDisplay -> init($_SESSION["lang"]);
?>
<?php
if (isset($_GET["changelang"]))
{
if($_SESSION["lang"] == "hu")
$_SESSION["lang"] = "en";
else
$_SESSION["lang"] = "hu";
header("Location: example.php");
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= $mDisplay -> R("M_TITLE") ?></title>
</head>
<body>
<p>
<?= $mDisplay -> R("M_PARAGRAPH") ?>
</p>
<p>
<?= $mDisplay -> R("M_PARAGRAPH2") ?>
</p>
<button type="submit"><?= $mDisplay -> R("M_BUTTON") ?></button>
<div>
<a href="example.php?changelang"><?= $mDisplay -> R("M_LINK") ?></a>
</div>
</body>
</html>
example_hu.txt =>► Spoiler mutatása
Kód:
M_TITLE:Egy példa oldal
M_PARAGRAPH:Heló világ! Én egy bekezdés vagyok.
M_PARAGRAPH2:Én vagyok a második bekezdés.
M_BUTTON:Űrlap elküldése!
M_LINK:Nyelv átállítása angolra!
example_en.txt =>► Spoiler mutatása
Kód:
M_TITLE:An example page
M_PARAGRAPH:Hello World! I am just a paragraph.
M_PARAGRAPH2:I am the second paragraph.
M_BUTTON:Submit the form!
M_LINK:Change the language to hungarian!
LIVE DEMO: IttHasználjátok egészséggel, ha valamiben segíteni kell szívesen válaszolok privát üzenetben.
CLASS:► Spoiler mutatása
Kód:
<?php
class mDisplay
{
public $_dir;
public $_file;
private $_langs;
private $b_initialized = false;
private $a_msgList = array();
public function __construct ($langs)
{
$languages = explode("-", $langs);
$this -> _langs = $languages;
}
public function init ($selectedLang = null)
{
foreach ($this -> _langs as $lang)
{
$file = $this -> _dir . $this -> _file . "_" . $lang . ".txt";
if (!file_exists($file))
die("[<b>mDisplayERROR</b>] A file nem található (<b>{$file}</b>). {HIBA HELYE : " . basename(__FILE__) . " => " . basename(__LINE__) . ". sor}");
}
$finalLang = (is_null($selectedLang)) ? $this -> _langs[0] : $selectedLang;
if (!in_array($finalLang, $this -> _langs))
die("[<b>mDisplayERROR</b>] Az inicializáláskor kiválasztott nyelv korábban nem lett beállítva. {HIBA HELYE : " . basename(__FILE__) . " => " . basename(__LINE__) . ". sor}");
$mFile = $this -> _dir . $this -> _file . "_" . $finalLang . ".txt";
$mLines = file($mFile);
foreach ($mLines as $mLine)
{
$mTdata = explode(":", $mLine, 2);
$this -> a_msgList[$mTdata[0]] = $mTdata[1];
}
$this -> b_initialized = true;
return true;
}
public function R ($msgKey = null)
{
if (!$this -> b_initialized)
die("[<b>mDisplayERROR</b>] Hiba az inicializálás során! <i></i> {HIBA HELYE : " . basename(__FILE__) . " => " . basename(__LINE__) . ". sor}");
if (!empty($msgKey) AND array_key_exists($msgKey, $this -> a_msgList))
return $this -> a_msgList[$msgKey];
else
return false;
}
}
?>