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 ?
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'; ?> |
|
|
|