• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Co źle robie?

Object Storage Arubacloud
0 głosów
526 wizyt
pytanie zadane 5 października 2017 w PHP przez Raster22 Obywatel (1,640 p.)
function translate($text)
{
	$jezyk_uzytkownika = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);   // naucz sie tych 0,2
	if($jezyk_uzytkownika == "pl")
	{
		$jezyk_uzytkownika_nazwa = "Polski";
	}elseif($jezyk_uzytkownika == "de")
	{
		$jezyk_uzytkownika_nazwa = "Deutsch";
	}else
	{
		$jezyk_uzytkownika_nazwa = "English";
	}

	$strefa = date("e");
	$pl = [
        'witaj' => 'Witaj',
        'wybierz_plik' => 'Wybierz plik do wczytania.',
		 'historia_plikow' => 'Historia wczytanych plików ',
		   'nazwa' => 'Nazwa Pliku',
		     'czas_wczytania' => 'Czas wczytania pliku [s]',
			   'wybierz_jezyk' => '<b>Wybierz język</b>',
			     'wyslij' => 'Wyślij plik',
				   'strefa' => '<b>Twoja strefa czasowa: </b>'.$strefa,
				     'jezyk_uzy' => '<b>Twoj język: </b>'.$jezyk_uzytkownika_nazwa
    ];
    $en = [
       'witaj' => 'Hello',
        'wybierz_plik' => 'Select the file to load',
		  'historia_plikow' => 'History of loaded files',
		    'nazwa' => 'File name',
		     'czas_wczytania' => 'Time to load the file [s]',
			   'wybierz_jezyk' => '<b>Choose language</b>',
			     'wyslij' => 'Send a file',
				   'strefa' => '<b>Your time zone: </b>'.$strefa,
				     'jezyk_uzy' => '<b>Your language: </b>'.$jezyk_uzytkownika_nazwa
    ];
	if($_GET['lang'] == "pl")
	{
        return $pl[$text];
    }
	elseif($_GET['lang'] == "en")
	{
		return $en[$text];
	}
	elseif(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == "pl")
	{
		return $pl[$text];
	}
	elseif(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == "en")
	{
		return $en[$text];
	}
	else
	{
		return $en[$text];
	}
   
    return $text;
}

Ta jak w temacie. Program ma tłumaczyć strone ale chciałem też tak ustawić że jak ktoś nie kliknie przycisku z językiem to automatycznie mu pobiera jego jezyk i ustawia na jego. Ale coś mi nie działa.. a błąd to

"

Notice: Undefined index: lang in D:\xampp\htdocs\Czytnik\index.php on line 63

"

4 odpowiedzi

+3 głosów
odpowiedź 5 października 2017 przez xandros Nałogowiec (29,450 p.)
wybrane 7 października 2017 przez Raster22
 
Najlepsza

Troche przekombinowałeś.

<?php

function getTranslations(): array
{

    return [
        'pl-PL' => [
            'witaj' => 'Witaj',
            'wybierz_plik' => 'Wybierz plik do wczytania.',
            'historia_plikow' => 'Historia wczytanych plików ',
            'nazwa' => 'Nazwa Pliku',
            'czas_wczytania' => 'Czas wczytania pliku [s]',
            'wybierz_jezyk' => '<b>Wybierz język</b>',
            'wyslij' => 'Wyślij plik',
            'strefa' => '<b>Twoja strefa czasowa: </b>', //nie możemy tego ustalić z poziomu php
            'jezyk_uzy' => '<b>Twoj język: </b>Polski',
        ],
        'en-US' => [
            'witaj' => 'Hello',
            'wybierz_plik' => 'Select the file to load',
            'historia_plikow' => 'History of loaded files',
            'nazwa' => 'File name',
            'czas_wczytania' => 'Time to load the file [s]',
            'wybierz_jezyk' => '<b>Choose language</b>',
            'wyslij' => 'Send a file',
            'strefa' => '<b>Your time zone: </b>',//nie możemy tego ustalić z poziomu php
            'jezyk_uzy' => '<b>Your language: </b>English',
        ],
    ];
}

function translate($text): string
{
    $lang = $_GET['lang'] ?? $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? '';
    $translations = getTranslations();
    switch ($lang) {
        case 'pl-PL':
            return $translations['pl-PL'][$text] ?? '';
        case 'en-US':
        case 'en-GB':
        default:
            return $translations['en-US'][$text] ?? '';
    }
}

 

komentarz 6 października 2017 przez xandros Nałogowiec (29,450 p.)
echo translate($text):

 

komentarz 6 października 2017 przez Raster22 Obywatel (1,640 p.)
Jest taki problem. Gdyż miało być tak, że jak ktoś wchodzi pierwszy raz to ustawia mu język taki jaki mu pobierze z $_SERVER['HTTP_ACCEPT_LANGUAGE'] a później jeśli sam klinie w button to mu się zmieni. I przy "Twój język" wlasnie tam miało być jego jakby wczytany a nie aktualny. z $_SERVER['HTTP_ACCEPT_LANGUAGE']. Da się jakoś to ustawić?
1
komentarz 6 października 2017 przez xandros Nałogowiec (29,450 p.)
komentarz 7 października 2017 przez Raster22 Obywatel (1,640 p.)
Nie rozumiem go trochę. Na czym polega te 3 echo?
komentarz 7 października 2017 przez xandros Nałogowiec (29,450 p.)
1. to przypadek, gdy nie masz ustawionego GET, ani nie ma headera ACCEPT_LANGUAGE

2. to przypadek z ustawionym tylko headerem

3. to przypadek z ustawionym GETem i headerem

Simple as far?
+1 głos
odpowiedź 5 października 2017 przez Boshi VIP (100,240 p.)
nie sprawdzasz czy  w ogóle istnieje lang
0 głosów
odpowiedź 5 października 2017 przez marcin99b Szeryf (82,180 p.)

przed ciągiem if i else if daj if(isset($_GET['lang']))

problem polega na tym, że zawsze próbujesz wyciągnąć wartość z GET, a nie zawsze ona tam jest

+dlaczego nie połączysz tego z bazą i tekst trzymasz w zmiennych?
+mógłbyś tutaj użyć instrukcji switch() zamiast else if w kilku miejscach

+polecam zajrzenie do zasad SOLID, np zasady pojedynczej odpowiedzialności
Spokojnie można to rozdzielić na metodę sprawdzającą jaki język jest wybrany i metodę wybierającą odpowiedni tekst
Wtedy mógłbyś z wielu miejsc w kodzie sprawdzić jaki język jest na stronie oraz z wielu miejsc mógłbyś wyświetlić tekst w określonym języku, nie wiadomo jakie będą potrzebne aktywności w aplikacji za kilka tygodni
+dużo prościej to przetestować jednostkowo

komentarz 5 października 2017 przez xandros Nałogowiec (29,450 p.)
heh, to samo mu napisałem :|

Baza jest niepotrzebna. Może tworzy aplikacje bez połączenia z bazą? Taki WP opiera się o l18n, ale niektóre frameworki tworzą arraye z tłumaczeniami.
komentarz 5 października 2017 przez Ehlert Ekspert (212,670 p.)
Isset to zły pomysł. Lepiej użyć array_key_exists albo filter_Input.
komentarz 5 października 2017 przez xandros Nałogowiec (29,450 p.)
Ehlert, dlaczego tak sądzisz?
komentarz 5 października 2017 przez Ehlert Ekspert (212,670 p.)
Get to tablica i isset dla nulla zwraca przekłamania. Zawsze jej unikałem i z powodzeniem można ją zastąpić.
komentarz 5 października 2017 przez xandros Nałogowiec (29,450 p.)
dlatego powinien użyć !empty :)
komentarz 6 października 2017 przez Ehlert Ekspert (212,670 p.)

Zmieniam zdanie. Powinien być filter_input. winkjest to funkcja przeznaczona do pracy ze zmiennymi od strony klienta i obsługuje przypadku braku ustawienia itp. 

0 głosów
odpowiedź 5 października 2017 przez Raster22 Obywatel (1,640 p.)
Dziękuje wam wszystkim za pomoc!

Podobne pytania

0 głosów
3 odpowiedzi 157 wizyt
0 głosów
1 odpowiedź 142 wizyt
pytanie zadane 27 lutego 2020 w JavaScript przez cez-kot Nowicjusz (120 p.)
0 głosów
1 odpowiedź 260 wizyt
pytanie zadane 25 listopada 2018 w C i C++ przez Padoski Użytkownik (990 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...