Autor Zpráva
Adam Dvořák
Profil *
Na svém webu plánuji několik jazykových verzí. Udělal jsem velké přesměrování, nejdřív z Indexu do složky WEB, kde je index, ve kterým je tento kód:
<script>
window.location.href =" '/../web/' + navigator.language + '/index.html' "
</script>
Ono to přesměruje, jenže na nesmyslnou stránku ....WEB/WEB/' + navigator.language + '/index.html a ta pochopitelně neexistuje. Jak se to dá udělat?


[#1] Adam Dvořák
Je to na stránkách ententyky.eu
Borius
Profil
Adam Dvořák:
Mne to přesměrovalo na http://ententyky.eu/web/cs/index.html, tedy tuším správně (Firefox 12). Respektive, kam přesně to má přesměrovat?
Jinými slovy, použitý kód <script>window.location.href = navigator.language + "/index.html"</script> nejspíš funguje správně.
Adam Dvořák
Profil *
Asi to už fonguje :) nevím co se stalo, ale je do to! Tak děkuji moc :)
Adam Dvořák
Profil
Tak toto funguje, alespoň doufejme. Ale řekněme, že se teď někdo přihlásí s jazykem chorvatštinou a já nebudu mít takovou jazykovou verzi. Co se s ním stane? Nešla by nějak obejít stránka 404???
juriad
Profil
presměrovalo mě to na stránku: http://ententyky.eu/web/en-US/index.html
404 Not Found
Objekt nenalezen

dost pravděpodobně si takto odřízneš mnoho návštěvníků
_es
Profil
Adam Dvořák:
bude to fungovat úplně všude?
Nebude, napríklad návštevníkom s nefunkčným či vypnutým JS a takéto „veľké presmerovanie“ ti budú ignorovať aj vyhľadávače.
Borius
Profil
Chtělo by to ošetřit ty jazyky, pro které nemáš připravenou stránku, jako např. [#5] juriad.
Rovněž vyřeš i – [#6] _es, nejlépe přímým odkazem na jazykové verze.


[#4] Adam Dvořák
V takovém případě bych přesměrování prováděl na nějakou defaultní stránku, např. s češtinou. Potom bys ani nemusel řešit 404 (myslím pro takovou situaci).
Adam Dvořák
Profil
A nejde to, aby ten JS měl seznam dostupných jazyků a kdyby se ten uživatelův neshodoval, rovnou by ho to hodilo do češtiny?
Borius
Profil
Adam Dvořák:
Přesně tak jsem to měl na mysli.
Adam Dvořák
Profil
No ale já nevím jak to udělat :(
weroro
Profil
Napr. vytvoriť si pole v ktorom budú jazyky, ktoré sú dostupné a potom si vytvoriť funkciu, v ktorej sa bude porovnávať navigator.language s prvkami v poly. Ak sa bude zhodovať tak vráti jazyk z poľa alebo navigator.language a ak sa nebude zhodovať ani s jedným prvkom tak vráti cs.
Adam Dvořák
Profil
Thank.... :-/ Ale s tím se už nějak poperu, tutoriál mám prostudovaný celý, kdyžtak napíšu :)

Edit: Alespoň kousíček kódu by nebyl?
weroro
Profil
Niečo na tento spôsob, písané z hlavy.
function lang()
{
  var jazyky = ['cs', 'en', 'sk', 'de'];
  var langDefault = 'cs';
  var actualLang = navigator.language;
    for (var i = 0; i < jazyky.length; i++)
    {
      if (actualLang == jazyky[i])
      {
        return jazyky[i];
      }
    }
  return langDefault;
}

Edit// Mne navigator.language vracia undefined
Adam Dvořák
Profil
weroro:
Děkuji :)
PS: Jen tak mimochodem, proč je hodnota "i" tak oblíbená?
weroro
Profil
Adam Dvořák:
PS: Jen tak mimochodem, proč je hodnota "i" tak oblíbená?
i ako interator
Borius
Profil
Anebo bez vytváření funkce:
var lang;
switch(navigator.language){
   case 'sk' : lang='sk'; break;
   case 'en' : lang='en'; break;
   case 'fr' : lang='fr'; break;
   case 'cs' : ;
   default : lang='cs';
}
Adam Dvořák
Profil
A jak k tomu zakomponuji to přesměrování?
Borius
Profil
Adam Dvořák:
A jak k tomu zakomponuji to přesměrování?
Stejným způsobem jako jsi měl původně. Tzn.:
window.location.href ="./web/" + lang;
Případně
window.location.href =lang;


Poznámka:
‘/index.html’ nemusíš přidávat, to již máš již nakonfigurováno na serveru, aby se načítalo.
Adam Dvořák
Profil
Děkuji moc :) Už jsem to tam nahrál a funguje to.
Jen je divné, že někomu to hází "en", někomu "en-US" a někomu "udentifed"... Nedá se to nějak sjednotit?
Chamurappi
Profil
Reaguji na Adama Dvořáka:
Hodnotu undefined vrací Explorer, protože v něm není navigator.language, místo toho podporuje dvě vlastnosti: navigator.userLanguage a navigator.systemLanguage.

někomu to hází "en", někomu "en-US"
Mno, to si nějak sjednoť. Asi se lze spolehnout, že první dva znaky jsou vždy jazyk.


Reaguji na werora:
i ako interator
Bez „n“, jen iterátor, podle iterace.
Borius
Profil
Adam Dvořák:
Nedá se to nějak sjednotit?
Jde to. Podstatná jsou první dvě písmena před spojovníkem, ta značí jazyk. Poté mohou (ale nemusí) následovat další dvě písmena, označující stát. (Angličtina britská, americká, kanadská, irská, australská, novozélandská, jihoafrická, jamajská atd.) Takže řešením je použít pouze dvě první písmena před spojovníkem.
Pokud jde o výraz ‘undefined’, nejedná se o jazyk používaný u N-defínů, ale – [#20] Chamurappi.
weroro
Profil
Chamurappi:
Bez ‚n‘, jen iterátor
Kiež by som sa mohol vyhovoriť na preklep, ale bohužiaľ takto mi to kedysi dávno bolo interpretované a do teraz som teda žil v omyle. Ďakujem za opravu a zároveň sa ospravedlňujem Adamovi Dvořákovi, že som ho takto nechtiac zaviedol.
Adam Dvořák
Profil
<script>
if (navigator.language == "undefined"){
   var lang;
switch(navigator.userLanguage){
   case 'sk' : lang='sk'; break;
   case 'en' : lang='en'; break;
   case 'en-GB' : lang='en'; break;
   case 'cs' : ;
   default : lang='cs';
}
}
else {
    var lang;
switch(navigator.language){
   case 'sk' : lang='sk'; break;
   case 'en' : lang='en'; break;
   case 'en-GB' : lang='en'; break;
   case 'cs' : ;
   default : lang='cs';
}
}
window.location.href =lang;
</script>

Tak jsem se pokusil sepsat toto, bude to fungovat ve všech prohlížečích?
Borius
Profil
Adam Dvořák:
Docela dobré, ale protože ten switch je tam vlastně dvakrát stejný, chtělo by to malinkou úpravu, aby stačil pouze jednou.


var userlang=(navigator.language=="undefined")? navigator.userLanguage : navigator.language;

switch(userlang){
…

(Netestoval jsem.)


Ještě bych zpracoval a zahrnul všechna ‘en’, protože takto zobrazíš například Amiričanovi s jeho ‘en-US’ češtinu namísto angličtiny.
Adam Dvořák
Profil
No, co třeba takhle?
<script>
if (navigator.language == "undefined")
{
   userlang = navigator.userLanguage
}
else {
    userlang =navigator.language
}

 var lang;
switch(userlang){
   case 'sk' : lang='sk'; break;
   case 'en' : lang='en'; break;
   case 'en-GB' : lang='en'; break;
   case 'cs' : ;
   default : lang='cs';
}

window.location.href =lang;
</script>
Borius
Profil
Adam Dvořák:
Také možné. Jenom dvě úpravy:
~ chybějící středníky (userlang =… ;)
~ deklaproměnné (var userlang…)
Adam Dvořák
Profil
<script>
var userlang;

if (navigator.language == "undefined")
{
   userlang = navigator.userLanguage;
}
else {
    userlang =navigator.language;
}
 
 var lang;
switch(userlang){
   case 'sk' : lang='sk'; break;
   case 'en' : lang='en'; break;
   case 'en-GB' : lang='en'; break;
   case 'cs' : ;
   default : lang='cs';
}
 
window.location.href =lang;
</script>

Takhle?

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: