Segédletek.hu

Segédletek weblap szerkesztéshez!
ingyen letöltés

| Mind | PHP | HTML | CSS | Java |
|Legújabbak |Legtöbbször olvasottak|

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
<?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: magyar zászló english flag 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:

<p><?php echo $lv['title'];?></p>
<p><?php echo $lv['body'];?></p>

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!


Vegye meg álmai otthonát
Csak válassza ki a tökéletes lakást, a többit bízza az Erstére!
www.erstebank.hu

Önnek is jár évi 72 000 forint
állami támogatás lakás-előtakarékosság esetén. Válassza a Fundamentát!
www.fundamenta.hu

Autópálya-matrica SMS-ben
Nem kell sorban állnod, vásárolj gyorsan autópálya-matricát SMS-ben!
www.matricasmsben.hu

Mondjon Bon jourt...
és legyen Öné az 1.000.000 € nyeremény! Partouche Poker Tour a bwin-en.
www.bwin.com

Ford Mondeo ajánlat
Ford Mondeo modellek most 750.000 Ft kedvezménnyel!
Mondeo.Ford.hu

Hirdessen itt