Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Funkcja językowa.
Kużdo
post
Post #1





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował kuzdo 8.07.2010, 09:23:28
Go to the top of the page
+Quote Post
tehaha
post
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


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



Ten post edytował tehaha 7.07.2010, 22:56:39
Go to the top of the page
+Quote Post
Fifi209
post
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Było...

http://forum.php.pl/index.php?showtopic=44...%EAzykowo%B6%E6


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Kużdo
post
Post #4





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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...

Ten post edytował kuzdo 7.07.2010, 23:10:55
Go to the top of the page
+Quote Post
tehaha
post
Post #5





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


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

Ten post edytował tehaha 7.07.2010, 23:09:03
Go to the top of the page
+Quote Post
Kużdo
post
Post #6





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował kuzdo 8.07.2010, 09:23:12
Go to the top of the page
+Quote Post
tehaha
post
Post #7





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Kużdo
post
Post #8





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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ą?
Go to the top of the page
+Quote Post
tehaha
post
Post #9





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Kużdo
post
Post #10





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
tehaha
post
Post #11





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


no możesz jeszcze to require umieścić poza funkcją a w funkcji tylko wygenerować nazwę pliku, który ma zostać zainkludowany
Go to the top of the page
+Quote Post
Kużdo
post
Post #12





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


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";
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 17:30