To jest tylko wersja do druku, aby zobaczyć pełną wersję tematu, kliknij TUTAJ
phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

HTML/PHP/AJAX/JS - PHP i replace dla języków

WoGuziczek - 21-04-2008, 11:48
Temat postu: PHP i replace dla języków
Witam!

Piszę krótko, zwięźle i na temat ;)
Mam jakąś tam sobie stronę opartą na php, html i css - jest w całości po polsku.

Chciałbym zrobić coś takiego, że wszystkie teksty będą w langach tzn na stronie będą zmienne np. $lang[welcome] lub coś w tym stylu.

Będę miał dwa/trzy pliki językowe: polski, angielski i niemiecki (lang_polish.php itp itd.)

w pliku lang_polish przy $lang[welcome] będzie odpowiednik "Witamy".

I teraz chciałbym to wszystko skręcić, ale nie wiem za bardzo jak.
Chciałbym, aby jak normalnie włączymy stronę wszystko było po polsku, jeśli klikniemy na jakąś flagę np. amerykańską to adres zmieni się na index.php?lang=en i wtedy strona zacznie pobierać pharsy z lang_english.php

W plikach językowych na pewno będziemy korzystać z replace i wystarczyłby mi tylko krótki zarys pliku.
W indexie i pozostałych podstronach chciałbym wiedzieć co mam wstawić i naturalnie muszę zamienić wszystkie teksty na zmienne językowe (jak one mają wyglądać?) + jak zrobić opcję z GET lang :)

Dla specjalistów - bułeczka z masełkiem ;) Pozdrawiam i dziękuję :)

adam.exe - 21-04-2008, 12:03

Robisz trzy pliki: english.php, polish.php, german.php
I ustawiasz, z którego pliku skrypt ma korzystać w GET.

Czyli tak

Kod:

if(isSet($_GET[lang])
{
if($_GET[lang] == e)
{include(lang/english.php)}

elseif($_GET[lang] == p)
{include(lang/polish.php)}

elseif($_GET[lang] == g)
{include(lang/german.php)}
} else {include(lang/polish.php}


W tych trzech plikach masz te same zmienne, np. $page_name, $button1, $button2 itp., tylko o innych wartościach, w zależności od języka. Na początku każdego z plików piszesz tylko:

$lang= p; // dla polskiego,
$lang= e; // dla angielskiego,
$lang= g; // dla niemieckiego.

A w pliku-szablonie umieszczasz po prostu w odpowiednich miejscach te zmienne. Skrypt już sam znajdzie język. Pamiętaj jednak, żeby wszystkie linki konstruować z GET, tzn: page.html?lang=<?php echo$lang;?>

Oczywiście, nie wiem dokładnie co chcesz zrobić. Jeśli chciałbyś pisać zawartość strony (jakieś artykuły, recenzje itp) w trzech językach radził bym Ci zrobić też trzy bazy danych z tymi artykułami (po bazie na język). I wtedy też skrypt, który brałby zawartość z odpowiedniej bazy w zależności od języka.

Widmo - 21-04-2008, 12:16

a ja langa to bym w $_SESSION wrzucil :)

znaczy jaki jezyk, bo nie wygodnie jest ciagle w gecie pamietac co to za jezyk ;)

WoGuziczek - 21-04-2008, 12:24

Widmo, w sesion czyli jak to zastosować w skrypcie? ;>
adam.exe, dziękuję - skorzystam :) nie - nie chcę zamieszczać żadnych artykułów, zawartość strony będzie stała i nie potrzeba operować na bazie danych :)

adam.exe - 21-04-2008, 12:25

Widmo:
Ej, zależy czy witryna jest statyczna czy aktywna.
I jeszcze, jak ktoś ma do niej panel WYSIWG to mu takie rzeczy nie przeszkadzają. Po prostu ustawia sie przy dodawaniu linków, aby dołączył ?lang=. To nie trudne.

A masz u siebie na stronie sesje, czy nie?

WoGuziczek - 21-04-2008, 12:27

Nie ma sesji

Widmo, możesz mi podać jakiś prosty przykład otwarcia sesji?
Nauczyłbym się ;)

[ Dodano: 21-04-2008, 13:39 ]
adam.exe, niestety po ustawieniu Twojego skryptu w indexie wywala błąd

Kod:
Parse error: parse error, unexpected '{' in C:\Program Files\EasyPHP 2.0b1\www\ip\index.php on line 4

adam.exe - 21-04-2008, 12:40

Bo pisałem na szybko.

Kod:

if(isSet($_GET[lang]))
{
if($_GET[lang] == e)
{include(lang/english.php);}

elseif($_GET[lang] == p)
{include(lang/polish.php);}

elseif($_GET[lang] == g)
{include(lang/german.php);}
} else {include(lang/polish.php);}


Teraz będzie lepiej

WoGuziczek - 21-04-2008, 12:50

Zawartość pliku [testowa] index.php:

Kod:

<?php

if(isSet($_GET[lang])
{
if ($_GET[lang] == en)
{ include(lang/english.php); }

elseif ($_GET[lang] == pl)
{ include(lang/polish.php); }

elseif ($_GET[lang] == de)
{ include(lang/german.php); }
} else { include(lang/polish.php); }

echo "$page_name";

?>


Zawartość pliku lang/polish.php [testowa]:

Kod:
$lang= pl;

$page_name = 'zobaczIP.info';


Wynik: http://zobaczip.info/2/index.php
Kod:
Parse error: syntax error, unexpected '{' in /home/wog/domains/zobaczip.info/public_html/2/index.php on line 4

adam.exe - 21-04-2008, 13:02

W pierwszym kodzie powinno być dokładnie tak:

Kod:

<?php

if(isSet($_GET[lang]))
{
if($_GET[lang] == e)
{ include(lang/english.php); }

elseif ($_GET[lang] == p)
{ include(lang/polish.php); }

elseif ($_GET[lang] == d)
{ include(lang/german.php); }
} else { include(lang/polish.php); }

echo "$page_name";

?>


Zapomniałem o nawiasie, a ty wziąłeś kod, zanim zedytowałem.

WoGuziczek - 21-04-2008, 13:14

Kod:
Warning: Division by zero in /home/wog/domains/zobaczip.info/public_html/2/index.php on line 9

Warning: include(php) [function.include]: failed to open stream: No such file or directory in /home/wog/domains/zobaczip.info/public_html/2/index.php on line 9

Warning: include(php) [function.include]: failed to open stream: No such file or directory in /home/wog/domains/zobaczip.info/public_html/2/index.php on line 9

Warning: include() [function.include]: Failed opening 'php' for inclusion (include_path='.:/usr/local/lib/php') in /home/wog/domains/zobaczip.info/public_html/2/index.php on line 9

They2 - 21-04-2008, 13:25

WoGuziczek napisał/a:
Widmo, możesz mi podać jakiś prosty przykład otwarcia sesji?
Nauczyłbym się ;)
chetnie bym sie wysluchal jak to zrobic.
Widmo, moge prosic o przyklady lub skrypt ? :roll:

WoGuziczek, ten wyzej o bledach, to masz poprawna sciezke pliku z include ? sprawdz.
i masz wylaczony allow_open_url ?

Widmo - 21-04-2008, 18:28

Kod:
<?php

session_start();

if( isset( $_GET['lang'] ) )
{
        switch( $_GET['lang'] )
        {
            case: 'pl'
                $_SESSION['lang'] = 'pl';
            break;
           
            case: 'eng'
                $_SESSION['lang'] = 'eng';
            break;
           
            case: 'ger'
                $_SESSION['lang'] = 'ger';
            break;
        }
}

if( $_SESSION['lang'] == '' )
{
    $_SESSION['lang'] = 'pl';
}

echo 'Twój jezyk to: ' . $_SESSION['lang'];

?>


raz podane: index.php?lang=pl

zapisze w sesji usera domyslny lang.

WoGuziczek - 21-04-2008, 19:43

Widmo, gitarra ;)

Jak teraz ustawić to do includów?

Kod:

if( $_SESSION['lang'] == 'pl' )
{
    include(lang/polish.php);
}
elseif( $_SESSION['lang'] == 'eng' )
{
    include(lang/english.php);
}
elseif( $_SESSION['lang'] == 'ger' )
{
    include(lang/german.php);
}


??

adam.exe - 21-04-2008, 21:01

Dokładnie tak jak napisałes.
Widmo - 21-04-2008, 21:55

WoGuziczek, poniewaz $_SESSION przechowywane jest przez serwer, a wczesniej wyfiltrowaliśmy już zmienne i nie ma mozliwości ataku, możesz zrobić tak:

Kod:
<?php include 'language/lang_' . $_SESSION['lang'] . '.php'; ?>



Powered by phpBB modified by Przemo © 2003 phpBB Group