Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Funkcja językowa.
Forum PHP.pl > Forum > Przedszkole
Kużdo
Witam,

Chciałem zrobić sobie funkcję językową, bo plik language.php z warunkami etc, jakoś brzydko mi wyglądał... No i wymyśliłem takie coś:
  1. function change_lang($a) {
  2. if(isset($a) && ($a == 'pl' || $a =='en')) {
  3. require LOCALE."/lang_$a.php";
  4. setcookie("lang", "$a", time() + (60*60*24), "/", "domena.org", 0);
  5. }
  6. elseif (isset($_COOKIE['lang'])) require LOCALE."/lang_$_COOKIE[lang].php";
  7. else require LOCALE."/lang_pl.php";
  8. }

Funkcja znajduje się w pliku functions.php, plik ten jest dołączany za pomocą require do index.php i innych plików. Stała LOCALE to "locale". Pliki index.php i functions.php są w tym samym katalogu, pliki językowe są w locale/lang_pl.php i lang_en.php. Dalej w pliku index.php chcę echo'wać jedną ze zmiennych z lang_pl.php i nic to nie daje :/

Pozdrawiam
tehaha
powinno być tak:
  1. elseif (isset($_COOKIE['lang'])) require LOCALE."/lang_."$_COOKIE[lang]"..php";

poza tym upewnij się, że pliki językowe są w ogóle ładowane daj w nich jakieś echo 'test';

Kużdo
Ekhem...
Jak już poprawiasz mi, to:
  1. elseif (isset($_COOKIE['lang'])) require LOCALE."/lang_".$_COOKIE['lang'].".php";


I pisałem wyżej, że jest sprawdzane, bo echuje pewną zmienną z plików językowych. Pliki są poprawnie wczytywane.

@fifi209, nie rozumiesz mnie... Nie chcę stosować SMARTY dla kilku plików PHP, czy OPT (którego zresztą nie znam, ale to nie ważne)... Chcę napisać prostą funkcję, która będzie mi includowała jeden plik językowy zawierający całość... I naprawdę, żadne SMARTY itp. nie przydadzą mi się tutaj... Nie chcę strzelać z armaty do muchy...

Z tego co zauważyłem, to tak jakby cały plik językowy był includowany tylko i wyłącznie do funkcji, czyli poza nią plik już nie działa...
tehaha
to w czym problem? skoro jest poprawnie wczytywany i są w nim poprawnie przypisane wartości do zmiennych i wczytywanie pliku jest wyżej w kodzie niż odwołanie do zmiennych to wszystko musi działać

edit:
skoro tutaj wszystko działa to pokaż ten kawałek kodu, w którym nie działa
Kużdo
INDEX.PHP
  1. <?php
  2. ...
  3. require "definitions.php";
  4. require "functions.php";
  5. $b = 'pl'; // Na stałe wrzuciłem dla testów
  6. change_lang($b);
  7. ?>
  8. ....
  9. <?php echo $tekst; ?>
  10. ...


FUNCTIONS.PHP
  1. <?php
  2. //FUNKCJA ZMIANY JĘZYKA
  3. function change_lang($a) {
  4. if(isset($a) && ($a == 'pl' || $a =='en')) {
  5. require LOCALE."/lang_$a.php";
  6. setcookie("lang", "$a", time() + (60*60*24), "/", "domena.org", 0);
  7. }
  8. elseif (isset($_COOKIE['lang'])) require LOCALE."/lang_$_COOKIE[lang].php";
  9. else require LOCALE."/lang_pl.php";
  10. }
  11. ?>

Zmienna $tekst jest zawarta w pliku lang_pl.php.
tehaha
a jak w pliku lang dasz echo $tekst; to się wyświetla po otwarciu index?

hmm a może problemem jest to, że wywołujesz require wewnątrz funkcji i wtedy te zmienne są dostępne tylko wewnątrz funkcji, musiałbyś dać global $tekst; wewnątrz funkcji, dla testu daj echo $tekst; zaraz po require wewnątrz funkcji
Kużdo
Jeżeli dam echo w funkcji, to zmienna wyświetli się, to już stwierdziłem wyżej, że zauważyłem, że include działa tylko w funkcji...
Da się w jakiś sposób dołączać funkcją inne pliki, tak żeby ich zmienne były dostępne poza funkcją?
tehaha
tak, możesz np sobie te teksty trzymać w tablicy np. $lang, i zamiast nazw zmiennych będziesz operował na nazwach kluczy np. $lang['tekst']; i na końcu funkcji dajesz return $lang; lub wewnątrz funkcji global $lang
Kużdo
Hmm, musiałbym stosować dwuwymiarowe tablice... Ale dzięki za pomoc winksmiley.jpg

Jeżeli jednak ktoś miałby inny ciekawszy pomysł, to proszę pisać winksmiley.jpg
tehaha
no możesz jeszcze to require umieścić poza funkcją a w funkcji tylko wygenerować nazwę pliku, który ma zostać zainkludowany
Kużdo
Czyli jednak lepiej zaincludować plik language.php z taką zawartością:
  1. //FUNKCJA JEZYKA
  2. if(isset($_GET['lang']) && ($_GET['lang'] == 'pl' || $_GET['lang'] == 'en')) {
  3. require_once "locale/lang_$_GET[lang].php";
  4. setcookie("lang", "$_GET[lang]", time() + (60*60*24), "/", "domena.org", 0);
  5. }
  6. elseif (isset($_COOKIE['lang'])) require_once "locale/lang_$_COOKIE[lang].php";
  7. else require_once "locale/lang_pl.php";
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.