Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][JavaScript]Zmiana języka w URLu, php-owe "$_GET"
ZaXaZ
post
Post #1





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


Ostatni temat jaki przeczytałem to ten:
http://forum.php.pl/index.php?showtopic=143153
A kilka już przeszukałem (wraz z sub-tematami) jednak nie znalazłem nic co spełni mój problem (bądź za słabo JS umiem bo nadal jestem w nauce podstaw).

Chce zmieniać język strony zależnie od wybranego:
  1. <select onchange="changeLang();">
  2. <option value="en" selected="selected">English</option>
  3. <option value="pl">Polish (Polski)</option>


Jednak nie wiem jak zrobić funkcję JS która by pobierała obecny adres,
i jeśli niema lang to doda domyślny czyli ?lang=en.
A jeśli jest to zamieni na wybrany, proszę o wskazówki (zastosuję switch).

Ten post edytował ZaXaZ 6.09.2014, 17:12:20
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Chcesz aby podczas nawigacji po stronie cały czas trzymać w URL język?
Może lepiej przechować w ciastku lub sesji.
Go to the top of the page
+Quote Post
ZaXaZ
post
Post #3





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


Cytat(trueblue @ 6.09.2014, 18:14:06 ) *
Chcesz aby podczas nawigacji po stronie cały czas trzymać w URL język?
Może lepiej przechować w ciastku lub sesji.


Z jednej strony oczywiscie ciastka lepsze ale z drugiej jak ktoś komuś poda link to będzie musiał(a) sam(a) zmienić..

Ewentualnie ciastka dodam kiedyś jak już bym bardziej umiał js itp, ale bardzo ważne żeby był parametr lang w linku tak jak wyżej opisałem.

Ten post edytował ZaXaZ 6.09.2014, 17:20:58
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Rozumiem.

Ale w przypadku bez wersji językowej w URL możesz po prostu ustawiać język domyślny strony.
Ewentualnie rozwiązaniem jest badanie $_SERVER['HTTP_ACCEPT_LANGUAGE'] i wedle tego ustawianie języka, kiedy nie jest jawnie podany.
Go to the top of the page
+Quote Post
pedro84
post
Post #5





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Cytat(trueblue @ 6.09.2014, 18:14:06 ) *
Chcesz aby podczas nawigacji po stronie cały czas trzymać w URL język?

Ma to niebanalne znaczenie z punktu widzenia SEO i użyteczności.


Cytat(trueblue @ 6.09.2014, 18:30:15 ) *
Ale w przypadku bez wersji językowej w URL możesz po prostu ustawiać język domyślny strony.
Ewentualnie rozwiązaniem jest badanie $_SERVER['HTTP_ACCEPT_LANGUAGE'] i wedle tego ustawianie języka, kiedy nie jest jawnie podany.

Lepiej język domyślny niech będzie w URLu. Co w przypadku robotów indeksujących? Ma zaindeksować tylko jeden język?

@OP Ale dlaczego Ty sobie tego nie sprawdzisz po stronie backendu? To jest jakiś CMS czy coś własnego?
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Cytat(pedro84 @ 6.09.2014, 18:43:13 ) *
Ma to niebanalne znaczenie z punktu widzenia SEO i użyteczności.

Tak, ale nie w takiej postaci, tzn. parametru w URL.
Zalecane przez Google sposoby to: trzymanie podstron pod osobnymi domenami narodowymi, subdomeny językowe, albo trzymanie w ścieżce URL, np.: domena.pl/en/

No i rzecz ważna, meta language.

Cytat(pedro84 @ 6.09.2014, 18:43:13 ) *
Lepiej język domyślny niech będzie w URLu. Co w przypadku robotów indeksujących? Ma zaindeksować tylko jeden język?

I tak gdzieś na stronie, jak domniemam, będzie przełącznik języków.
Go to the top of the page
+Quote Post
pedro84
post
Post #7





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Cytat(trueblue @ 6.09.2014, 19:04:28 ) *
Tak, ale nie w takiej postaci, tzn. parametru w URL.
Zalecane przez Google sposoby to: trzymanie podstron pod osobnymi domenami narodowymi, subdomeny językowe, albo trzymanie w ścieżce URL, np.: domena.pl/en/

Te /en/ z URL to jest właśnie jego parametr i mnie właśnie o to chodziło. Ja nie mówiłem o $_GET (bo z tym Ci się to zapewne pomyliło).

Cytat(trueblue @ 6.09.2014, 19:04:28 ) *
I tak gdzieś na stronie, jak domniemam, będzie przełącznik języków.

A jak nie? I w dodatku zapomni ustawić link:
  1. <link rel="alternate" hreflang="en-US" href="http://domain.com/" />
?
Jeśli różne wersje językowa mają korzystać z tej samej domeny, to zdecydowanie lepiej jest trzymać język w URLu niż jakieś dziwne wynalazki jakie zaproponowałeś (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Cytat(pedro84 @ 6.09.2014, 19:17:56 ) *
Te /en/ z URL to jest właśnie jego parametr i mnie właśnie o to chodziło. Ja nie mówiłem o $_GET (bo z tym Ci się to zapewne pomyliło).

Nie pomyliło mi się. Przykład kolegi ZaXaZ'a dotyczy parametru w query string. (Gwoli ścisłości /en/ również może się znaleźć w $_GET)

Cytat(pedro84 @ 6.09.2014, 19:17:56 ) *
A jak nie?

Nie za bardzo wyobrażam sobie taką sytuację.
Jakby wtedy wyglądała budowa wewnętrznych linków, zawsze z domyślnym językiem w URL? Jak się wtedy dostać na stronę z innym językiem, tylko z linków propagowanych poza stroną?

Cytat(pedro84 @ 6.09.2014, 19:17:56 ) *
Jeśli różne wersje językowa mają korzystać z tej samej domeny, to zdecydowanie lepiej jest trzymać język w URLu niż jakieś dziwne wynalazki jakie zaproponowałeś (IMG:style_emoticons/default/wink.gif)

Proponuję Ci się zapoznać z wytycznymi Google:
https://support.google.com/webmasters/answer/182192?hl=en#1

Ten post edytował trueblue 6.09.2014, 18:31:00
Go to the top of the page
+Quote Post
pedro84
post
Post #9





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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




Cytat(trueblue @ 6.09.2014, 19:29:40 ) *
Nie pomyliło mi się. Przykład kolegi ZaXaZ'a dotyczy parametru w query string. (Gwoli ścisłości /en/ również może się znaleźć w $_GET)

Tylko, że ja nie o tym mówiłem (a przy okazji źle się wyraziłem). Nie parametr, tylko katalog w URLu, segment, part, whatever (IMG:style_emoticons/default/smile.gif)

Cytat(trueblue @ 6.09.2014, 19:29:40 ) *
Nie za bardzo wyobrażam sobie taką sytuację.
Jakby wtedy wyglądała budowa wewnętrznych linków, zawsze z domyślnym językiem w URL? Jak się wtedy dostać na stronę z innym językiem, tylko z linków propagowanych poza stroną?

Nie wiem, to w ogóle jest abstrakcja.

Cytat(trueblue @ 6.09.2014, 19:29:40 ) *
Proponuję Ci się zapoznać z wytycznymi Google:
https://support.google.com/webmasters/answer/182192?hl=en#1

Ja to doskonale znam, a wszystko zaczęło się od Twojej głupotki:
Cytat(trueblue @ 6.09.2014, 18:14:06 ) *
Chcesz aby podczas nawigacji po stronie cały czas trzymać w URL język?
Może lepiej przechować w ciastku lub sesji.

A zastosowanie /en/ jest o wiele lepsze niż te Twoje sesne niż ciastko w przypadku tej samej domeny (jeśli nie chce z jakichś powodów subdomen osobnych - ja np. osobiście wolę trzymać język jako katalog w url: /en/, /it/, /de/).
Go to the top of the page
+Quote Post
Janusz1200
post
Post #10





Grupa: Zarejestrowani
Postów: 110
Pomógł: 6
Dołączył: 19.12.2010
Skąd: Krzyżanowice

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


Może nie na temat, a może się przyda: ja obsługuję 2 języki tak, że mam zarejestrowane 2 domeny, aplikacja przygotowuje treść w zależności od SERVER_NAME korzystając z translatora Zend.

Czasem nazwa domeny nie jest uniwersalna i może Niemcy nie chcą mieć /cars/de?

Ten post edytował Janusz1200 6.09.2014, 19:07:13
Go to the top of the page
+Quote Post
pedro84
post
Post #11





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Cytat(Janusz1200 @ 6.09.2014, 20:05:58 ) *
Czasem nazwa domeny nie jest uniwersalna i może Niemcy nie chcą mieć /cars/de?

Dwie domeny są ok, ale czasem problematyczne. Ja w ogóle jestem za tłumaczeniem slugów, czyli nie:
Kod
/en/cars
/pl/cars

tylko
Kod
/en/cars
/pl/samochody
Go to the top of the page
+Quote Post
trueblue
post
Post #12





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Cytat(pedro84 @ 6.09.2014, 20:03:43 ) *
a wszystko zaczęło się od Twojej głupotki

Przyznam, że chodziło mi o sytuację, kiedy wchodzimy na stronę "bez języka", choć w tym przypadku i tak nie ma sensu ustawienie domyślnego w ciastku.
Ale jakby nie było, ta moja wypowiedź nie jest zbyt mądra.
Go to the top of the page
+Quote Post
pedro84
post
Post #13





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Cytat(trueblue @ 6.09.2014, 20:21:06 ) *
Ale jakby nie było, ta moja wypowiedź nie jest zbyt mądra.

Tak jak moje użycie parametr zamiast katalog, part (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Janusz1200
post
Post #14





Grupa: Zarejestrowani
Postów: 110
Pomógł: 6
Dołączył: 19.12.2010
Skąd: Krzyżanowice

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


@Pedro, co to jest slug?

Ja mam tak (aplikację piszę po, powiedzmy (IMG:style_emoticons/default/smile.gif) , angielsku, a klient widzi ją po hiszpańsku albo portugalsku, zależnie od domeny:

<h2><?php echo $this->translate('Our recommendation for your project');?></h2>

Z tym /cars/de, to chodziło mi o adres strony, żeby Niemiec nie pisał:

http://best_cars/de

tylko

http://wunder_autos/

a Anglik:

http://best_cars/

Nie widzę żadnych problemów z 2 domenami [google chyba też nie, ale mogę się mylić], daj nam tylko wielu klientów...
Go to the top of the page
+Quote Post
pedro84
post
Post #15





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


Cytat(Janusz1200 @ 6.09.2014, 20:30:26 ) *
@Pedro, co to jest slug?

http://en.wikipedia.org/wiki/Semantic_URL

Cytat(Janusz1200 @ 6.09.2014, 20:30:26 ) *
Ja mam tak (aplikację piszę po, powiedzmy (IMG:style_emoticons/default/smile.gif) , angielsku, a klient widzi ją po hiszpańsku albo portugalsku, zależnie od domeny:

<h2><?php echo $this->translate('Our recommendation for your project');?></h2>

Z tym /cars/de, to chodziło mi o adres strony, żeby Niemiec nie pisał:

http://best_cars/de

tylko

http://wunder_autos/

a Anglik:

http://best_cars/

Nie widzę żadnych problemów z 2 domenami [google chyba też nie, ale mogę się mylić], daj nam tylko wielu klientów...

Dwie domeny mogą być problematyczne w kwestii orgainzacji (domeny, certifikaty - wszystko jest zdublowane) - tylko tyle.
Go to the top of the page
+Quote Post
Janusz1200
post
Post #16





Grupa: Zarejestrowani
Postów: 110
Pomógł: 6
Dołączył: 19.12.2010
Skąd: Krzyżanowice

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


@Pedro, thx
Go to the top of the page
+Quote Post
ZaXaZ
post
Post #17





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


Cytat(pedro84)
Ale dlaczego Ty sobie tego nie sprawdzisz po stronie backendu? To jest jakiś CMS czy coś własnego?

Będzie ale chce zredukować obciążenie servera jak tylko się da.
Czyli co sie da w JS reszta jak sie nieda lub niema ktos js to w <noscript>
Strona da się krótko opisać:
(60% strony... Według mnie) to bedzie strona główna zawierająca newsy z gry dla której chce napisać stronę fanowską, reszta to będzie opis itemów, EQ i potworów i jakieś urozmaicenie typu shotbox. Bardzo bym chciał rankingi graczy ale chyba ciężko o API a jak ktoś taki jak ja ma konkurować z kilkoma stronami fanowskimi i to z różnych krajów to (...)
nic więcej mi się nie chce. Ani nie mam pomysłu, i nie wiem jak daleko podołam, to co wymieniłem dam radę.
Ps. Fajnie jakby ktoś miał pomysł do tej strony bazując na wymienionych informacjach czego być może brak (IMG:style_emoticons/default/wink.gif) .

Ważne: strona będzie na darmowym serverze, nawet jakby było mnie stać (a mnie nie stać) to nie ma co chyba inwestować w projekty na których tylko się wypromuje a nic nie zarobie poza cennym doświadczeniem przy tworzeniu strony.

Cytat(trueblue)
Zalecane przez Google sposoby to: trzymanie podstron pod osobnymi domenami narodowymi, subdomeny językowe, albo trzymanie w ścieżce URL, np.: domena.pl/en/

No i rzecz ważna, meta language.
(...)
I tak gdzieś na stronie, jak domniemam, będzie przełącznik języków.

Strona będzie domyślnie odpalana w języku angielskim tak samo z meta-tagiem,
choć ja piszę w html 5 i robię poprostu '<html lang="en">' mam nadzieję że to znaczy to samo co tagi meta.

Na stronie będzie możliwość zmiany sposobem tym co pokazałem na samej górze, przez co otworzyłem ten temat.
Nie mam kompletnie "takiego większego" doswiadczenia w stronach internetowych więc nie wiem co zrobić ale to co opisałem chyba dobre będzie.

A folderów nie będzie raczej tak jak "google zaleca" będzie poprostu index.php i katalog /lang/ zawierający odpowiednie tłumaczenia do najczęściej używanych rzeczy typu "menu", "kontakt" itd większe teksty będą w bazie.

-----
Konutnuując pytanie, kod JS do zmiany języka z strony którą się inspiruje wygląda tak:
[JAVASCRIPT] pobierz, plaintext
  1. function ChangeLanguage()
  2. {
  3. var m_Lan = document.getElementById('Language').value;
  4. var params = {};
  5. try {
  6. params = GetParameter();
  7. }catch(Exception){
  8. params = {};
  9. }
  10. var paramstring = "";
  11. for(var key in params)
  12. {
  13. if(key != "section" && key != "lan" && key != "markup") paramstring += "&"+key+"="+params[key];
  14. }
  15. window.location = g_WebRoot + '?section=' + g_Section + '&lan=' + m_Lan + '&markup=' + g_Markup + paramstring;
  16. }
[JAVASCRIPT] pobierz, plaintext

I html
  1. <select id="Language" onchange="ChangeLanguage();" >
  2. <option class="SelectItem" value="en" selected="selected" >English</option>
  3. <option class="SelectItem" value="de" >Deutsch</option>
  4. <option class="SelectItem" value="ms" >Melayu</option>
  5. <option class="SelectItem" value="pt" >Portugu?s</option>

Tylko jeszcze nie doszedlem w nauce do window.location ani petli z jakims "in" wiec pytam sie forum bo moze da sie jakos banalniej po stronie przegladarki.
Pomijam już te wyjątki try-catch, w tym kodzie wogole ich nie rozumiem ale to pewnie kwestia kilku rodzialow kursu do przodu.

Ten post edytował ZaXaZ 7.09.2014, 02:23:58
Go to the top of the page
+Quote Post
trueblue
post
Post #18





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


W kodzie brakuje jeszcze funkcji GetParameter.

Jeśli potrzebujesz wyłuskać i zmienić jeden parametr, to chyba tak będzie prościej:
  1. <select id="Language" onchange="ChangeLanguage(this.value);" >
  2. <option class="SelectItem" value="en" selected="selected" >English</option>
  3. <option class="SelectItem" value="de" >Deutsch</option>
  4. <option class="SelectItem" value="ms" >Melayu</option>
  5. <option class="SelectItem" value="pt" >Portugu?s</option>
  6. function ChangeLanguage(lang){
  7. var url=window.location.href;
  8. var regex=new RegExp("[\\?&]lang=([^&#]*)");
  9. var results=regex.exec(url);
  10. if(results!=null){
  11. var url=url.split('lang='+results[1])
  12. window.location = url[0]+'lang='+lang+url[1];
  13. }
  14. else
  15. window.location = url+(url.indexOf('?')>-1?'&':'?')+'lang='+lang;
  16. }

Nie jest to doskonałe rozwiązanie, bo np. przy braku lang w URL nie uwzględnia możliwości istnienia hashu (#), ale wydaje mi się, że w Twoim przypadku sprawdzi się bez problemów.

Ten post edytował trueblue 7.09.2014, 07:51:47
Go to the top of the page
+Quote Post
ZaXaZ
post
Post #19





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


Cytat(trueblue @ 7.09.2014, 08:51:19 ) *
W kodzie brakuje jeszcze funkcji GetParameter.

Jeśli potrzebujesz wyłuskać i zmienić jeden parametr, to chyba tak będzie prościej:
  1. <select id="Language" onchange="ChangeLanguage(this.value);" >
  2. <option class="SelectItem" value="en" selected="selected" >English</option>
  3. <option class="SelectItem" value="de" >Deutsch</option>
  4. <option class="SelectItem" value="ms" >Melayu</option>
  5. <option class="SelectItem" value="pt" >Portugu?s</option>
  6. function ChangeLanguage(lang){
  7. var url=window.location.href;
  8. var regex=new RegExp("[\\?&]lang=([^&#]*)");
  9. var results=regex.exec(url);
  10. if(results!=null){
  11. var url=url.split('lang='+results[1])
  12. window.location = url[0]+'lang='+lang+url[1];
  13. }
  14. else
  15. window.location = url+(url.indexOf('?')>-1?'&':'?')+'lang='+lang;
  16. }

Nie jest to doskonałe rozwiązanie, bo np. przy braku lang w URL nie uwzględnia możliwości istnienia hashu (#), ale wydaje mi się, że w Twoim przypadku sprawdzi się bez problemów.

Dzięki, działa.
A jak zrobić żeby zmieniło jeszcze docelowy <option> na wybrany sam pokominuje jako praktyki.
Poducze się jeszcze do końca JS i spróbuje na podstawie twojego + tamtego kodu napisać jedna funkcje,
Co bym przyokazji obalił problem z #.

a tamta funkcja wyglada tak:
[JAVASCRIPT] pobierz, plaintext
  1. function GetParameter()
  2. {
  3. var address = window.location+"";
  4. address = address.split("?");
  5. var parameter = address[1].split("&");
  6.  
  7. var l_param = {};
  8. for(i=0; i<parameter.length; i++)
  9. {
  10. parasplit = parameter[i].split("=");
  11. l_param[parasplit[0]] = parasplit[1];
  12. }
  13.  
  14. return l_param;
  15. }
[JAVASCRIPT] pobierz, plaintext


A jak można przechować ?lang=xx lub &lang=xx przechodząc pod inny odnośnik na naszej stronie?

Ten post edytował ZaXaZ 7.09.2014, 09:58:13
Go to the top of the page
+Quote Post
trueblue
post
Post #20





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Powinieneś to robić po stronie PHP, tzn. generować odpowiednie linki uwzględniając zawartość $_GET['lang'] lub jej brak.
Zresztą podobnie można postąpić z wybranym językiem w liście (wdrukować "selected" na podstawie powyższej zmiennej).
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 15.09.2025 - 03:08