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!
► 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!
Haszná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;
        }
    }    
?>