Nyelvcsere, nyelvválasztás

Az első kérdés, ami felmerül majdnem mindenkiben, hogy lehet egy többnyelvű honlapot megcsinálni, amin váltani lehet a nyelvek között. Vegyünk egy példát, van egy magyar lapunk, rátéved egy külföldi, magyarul nem beszélő látogató, és nem találkozik olyasmivel, hogy nyelvcsere. Mit tegyünk? – rövid gondolkodás után egy kezdőlapot készítünk, ami tartalmazza a választható nyelveket (pl. kis zászlók vagy szöveg formájában). Ehhez nyújt segítséget a leírás.

Mielőtt bármit is kezdenél, készíts egy nyelvek mappát (lehet más a mappa neve, csak akkor a lenti kódokat is ennek megfelelően kell módosítani). Ebben a mappában lesznek a nyelv.php fájlok.

Kezdésként nyiss meg egy webszerkesztő/texteditor programot és hozz létre egy új dokumentumot. A neve pl. legyen: magyar.php, tartalma pedig:

1
2
3
4
5
6
7
8
9
10
<?php
 
$lang = array (
 
'udv' => "Szia, vendég", // Az első példa
'pelda1' => "szék", // A második példa
'pelda2' => "egér", // A harmadik példa
 
);
?>

Hozz létre egy új fájlt, mensd angol.php néven.

1
2
3
4
5
6
7
8
9
10
<?php
 
$lang = array (
 
'udv' => "Welcome, guest", // Az első példa
'pelda1' => "chair", // A második példa
'pelda2' => "mouse", // A harmadik példa
 
);
?>

Azt hiszem eddig egyértelmű volt, meg”alkottuk” a nyelvi fájlokat, és ezeket a fent is említett nyelvek mappába kell elhelyezni.

Most ismét új dokumentum.. valassz.php

1
2
3
4
5
6
7
8
9
10
11
<?php
$alap = 'magyar';
if(file_exists('nyelvmappa/' . $_GET['nyelv'] . '.php'))
    {
    include 'nyelvmappa/' . $_GET['nyelv'] . '.php'; 
    }
else
    {
    include 'nyelvmappa/' . $alap . '.php';
    }
?>

Az $alap változóban tároljuk, hogy melyik legyen a nyelv, amit megjelenítünk, ha nincs nyelv megadva, vagy az adott nyelvi fájl nem található.

Figyelem! a kódban írt „nyelvmappa” az az a mappa, amiben a nyelvi fájlaidat tárolod (nyelv.php fájlok).

Ismételten új dokumentum (mi más :) ) kiir.php

1
2
3
4
<?php
include 'valassz.php'; 
echo $lang['udv'];
?>

Az echo $valami adja meg, mit írjon ki a kód!

Így lehet a nyelvekre hivatkozni: kiir.php?nyelv=magyar

*Magyarázat

a nyelv= (egyenlő) után kell beírni a nyelvet.

Szerző: RoolY

Hugyecz Görgy (Harder)
20+ éve munkám és hobbim is az online világhoz köt. Az utóbbi 10+ évben leginkább keresőopimalizálás (SEO) témában tevékenykedem, mellette pedig Google Ads és Facebook PPC fronton is segítem ügyfeleimet. Korábban 10+ évig webgrafika, sitebuild, weboldal készítés témakörben mozogtam.

2 HOZZÁSZÓLÁS

  1. Abban esetleg valaki tudna segíteni, hogy ha azt szeretném, hogy legyen alapból egy get fügvény pl nekem most a
    # if ( isset($_GET[‘link’]) ){
    # include $_GET[‘link’].’.php’;
    # }

    És most megcsinálom ezt a nyelvel is akkor az müködhet úgy, hogy pl
    http://tutorial.hu/index.php?link=kezdolap&nyelv=magyar
    Ez lehetséges? Kerestem gugiba nem találtam. Bocs, hogy megkérdezem de nincs erőm kiprobálni.

  2. Háj!

    Kicsit régi cikk, de azért hozzászólok, ha nem baj! :) A nyelvi fájlokban miért tömböt használsz??? Nem egyszerűbb a konstansok használata?
    A másik: az if ( file_exists( … ) ) {} rész egy kicsit vicces. Kezdjük azzal, hogy fölöslegesen file műveletet nem végzünk, mert eredendően lassú. Meg azt sem értem, hogy miért az a ‘ha’, hogy létezik-e a file? Van x nyelved, te írod az oldalt, csak tudod, hogy milyen filejaid vannak. :D
    Szerintem a legcélravezetőbb megoldás az, hogy sessionben tárolsz egy language elemet, abba berakod pl, hogy ‘hun’, és ennyi. (ez az if-es megoldás bizonyos biztonsági szempontok miatt is előnyös, de ha nem baj ezt most nem magyarázom el) Megmutatom:

    if ( $_GET['lang'] == 'hun' )
        $_SESSION['lang'] = 'hun';
    if ( $_GET['lang'] == 'eng' )
        $_SESSION['lang'] = 'eng';

    Ezzel ‘elmented’, hogy a user melyik nyelvet használja, a következőkben pedig csak annyi a dolgod, hoooogy:

    if( isset( $_SESSION['lang'] ) )
        require_once( 'languages/' . $_SESSION['lang'] . '.php' );

    Így szépen működni fog. Plusz a cikkben leírt megoldásnál mindig jelen kell lennie a $_GET[‘language’]-nek, míg a sessionbe elég egyszer berakni inicializálásnál, és többet nem kell vele foglalkozni. Nem hogy minden oldalletöltésnél file_exists()…

    Nem kötni akartam, csak ez kicsit szúrta a szemem. :D

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét