Segédletek.hu
Segédletek weblap szerkesztéshez!
Fórum:
Postaláda:
Szavazás:
Hány éves vagy?
Segédletek:
Linkek:
Többnyelvű oldal készítése php segítségével:
A következő segédletben bemutatom, hogy hogy lehet "több nyelven beszélő" oldalt létrehozni php segítségével.
Van egy oldalunk, és a megrendelő szeretné, ha több nyelven is elérhető lenne? Semmi gond, a megoldás egyszerű.
Egy oldal többnyelvűvé tételének több módja is van. Én most kettőről írok. Az egyik, hogy az egyes fájloknak nyelvi fájlokat hozunk létre, a másik, hogy adatbázisban tároljuk az adatokat.
Működő demó
Forrás fájlok egyben
Először nézzük a fájlos módszert!
Ezt úgy kell csinálni, hogy minden egyes nyelvnek egy külön fájlt hozunk létre, benne változókat definiálunk, és mindig az éppen szükséges fájlt includoljuk php - be. Legyen most két fájlunk: hu.php és en.php
hu.php
en.php
Ugyan azokat a változókat definiáltuk.
Akkor nézzük, hogy ez hogyan valósul meg:
index.php
A kód elején megvizsgájuk, hogy van-e nyelvi változó. Ha nincs, akkor a magyar lesz az. Ha van GET, és létezik ilyen fájl, akkor az. Ezutn beincludoljuk a megfelelő fájt. A dokumentumban ezek után szövegek helyett mindig az adott változót rakjuk be. Két zászló van:
segítségükkel GET - ben tuduk továbbítani a kívánt nyelvet.
Ezt a változatot kisebb, statikus oldalaknál érdemes használni. Ahol nagyon sok szöveg van, érdemesebb adatbázist hasznlni.(gyorsabb).
Hozzunk is létre egy táblát:
install.sql
Ebben a táblában az azon mezőhöz tartozik egy angol, és egy magyar mező is. Az index.php elejét egészítsük ki így:
És ha ezek után a törzsrészbe kiíratjuk:
Akkor a várt eredmény nem marad el.
A fenti technikák inkább statikus oldalakra vonatkoznak. Ha csak kevés adattal dolgozunk, jobb a nyelvi fájl, ha sokkal, akkor jobb az adatbázis. Ha azonban dinamikus tartalmunk van, aimit adatbázisból olvasunk ki, akkor ki kell egészíteni a táblánkat.
pl.:
cikkek(
id,
cim_hu,
cim_en,
torzs_hu,
torzs_en
);
És akkor ha összeállítjuk a lekérdezést, akkor:
"SELECT id, cim_".$_SESSION['lang'].", torzs_".$_SESSION['lang']."FROM cikkek";
És így a kívánt nyelvet kapjuk. Egy másik megoldás, hogy tükör táblát hozunk létre. ekkor lesz egy cikkek_hu és egy cikkek_en táblánk, mindegyikben a megfelelő adatokkal, és akkor a lekérdezés FROM záradéka módosul.
Szerintem az egy táblás megoldás egyszerűbb, de döntse el mindenki maga, hogy neki melyik a szimpatikusabb.
Remélem, minden érthető volt.
Ugye, hogy nem is olyan bonyolult ez!?
Egy oldal többnyelvűvé tételének több módja is van. Én most kettőről írok. Az egyik, hogy az egyes fájloknak nyelvi fájlokat hozunk létre, a másik, hogy adatbázisban tároljuk az adatokat.
Működő demó
Forrás fájlok egyben
Először nézzük a fájlos módszert!
Ezt úgy kell csinálni, hogy minden egyes nyelvnek egy külön fájlt hozunk létre, benne változókat definiálunk, és mindig az éppen szükséges fájlt includoljuk php - be. Legyen most két fájlunk: hu.php és en.php
hu.php
<?php
$title = "Többnyelvű oldal";
$charset = "iso-8859-2";
$header1 = "Ez egy több nyelvű oldal! - magyar változat";
?>
en.php
<?php
$title = "Bilingual page";
$charset = "iso-8859-1";
$header1 = "This is a bilingual page! - english version";
?>
Ugyan azokat a változókat definiáltuk.
Akkor nézzük, hogy ez hogyan valósul meg:
index.php
<?php
session_start();
if(!isset($_SESSION['lang'])){$_SESSION['lang'] = 'hu';}
if( isset($_GET['lang']) && is_file($_GET['lang'].".php")){
$_SESSION['lang'] = $_GET['lang'];
}
include($_SESSION['lang'].".php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $title;?></title>
<meta http-equiv="Content-Language" content="<?php echo $_SESSION['lang'];?>" />
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $charset;?>"/>
</head>
<body>
<a href="<?php echo $_SERVER['PHP_SELF'];?>?lang=hu"><img src="hu.gif" /><a>
<a href="<?php echo $_SERVER['PHP_SELF'];?>?lang=en"><img src="en.gif" /><a>
<h1><?php echo $header1;?></h1>
</body>
</html>
A kód elején megvizsgájuk, hogy van-e nyelvi változó. Ha nincs, akkor a magyar lesz az. Ha van GET, és létezik ilyen fájl, akkor az. Ezutn beincludoljuk a megfelelő fájt. A dokumentumban ezek után szövegek helyett mindig az adott változót rakjuk be. Két zászló van:
segítségükkel GET - ben tuduk továbbítani a kívánt nyelvet.Ezt a változatot kisebb, statikus oldalaknál érdemes használni. Ahol nagyon sok szöveg van, érdemesebb adatbázist hasznlni.(gyorsabb).
Hozzunk is létre egy táblát:
install.sql
CREATE TABLE `content` (
`azon` varchar(255) NOT NULL,
`hu` text NOT NULL,
`en` text NOT NULL
);
INSERT INTO `content` (`azon`, `hu`, `en`) VALUES
('title', 'Ez a cikk magyar címe!', 'This is the article''s english title!'),
('body', 'Ez a cikk magyar törzse!', 'This is the article''s english body!');
Ebben a táblában az azon mezőhöz tartozik egy angol, és egy magyar mező is. Az index.php elejét egészítsük ki így:
$dbhost = "localhost";
$dbuser = "root";
$dbname = "";
$dbpass = "";
$tblname = "content";
//mysql adatok
@mysql_connect($dbhost,$dbuser,$dbpass);
@mysql_select_db($dbname);
$sql = "SELECT azon, ".$_SESSION['lang']." FROM ".$tblname;
$query = mysql_query($sql);
while ($row = mysql_fetch_array($query)){
$lv[$row['azon']] = $row[$_SESSION['lang']];
}
És ha ezek után a törzsrészbe kiíratjuk:
Akkor a várt eredmény nem marad el.
A fenti technikák inkább statikus oldalakra vonatkoznak. Ha csak kevés adattal dolgozunk, jobb a nyelvi fájl, ha sokkal, akkor jobb az adatbázis. Ha azonban dinamikus tartalmunk van, aimit adatbázisból olvasunk ki, akkor ki kell egészíteni a táblánkat.
pl.:
cikkek(
id,
cim_hu,
cim_en,
torzs_hu,
torzs_en
);
És akkor ha összeállítjuk a lekérdezést, akkor:
"SELECT id, cim_".$_SESSION['lang'].", torzs_".$_SESSION['lang']."FROM cikkek";
És így a kívánt nyelvet kapjuk. Egy másik megoldás, hogy tükör táblát hozunk létre. ekkor lesz egy cikkek_hu és egy cikkek_en táblánk, mindegyikben a megfelelő adatokkal, és akkor a lekérdezés FROM záradéka módosul.
Szerintem az egy táblás megoldás egyszerűbb, de döntse el mindenki maga, hogy neki melyik a szimpatikusabb.
Remélem, minden érthető volt.
Ugye, hogy nem is olyan bonyolult ez!?
Írta: requiem - 2007-04-07 20:42:05
* Nem vagy bejelentkezve!* Nem töltheted le a segédlet forrását egyben!
* Nem szavazhatsz a segédletre!
* Nem írhatsz a segédlethez tartozó fórum témába!

