Autor Zpráva
Axamith
Profil
Kdysi jsem si nechal napsat kód, který podle IP návštěvníka přesměrovával na dvě jazykové verze webu. Návštěvníci s CZ a SK IP byli filtrem ignorování a přesměroval jsem je pomocí meta tagu na cz verzi
url=czech/index.php

a zbytek světa byl přesměrován filtrem na anglickou verzi.
url=english//index.php

Potřeboval bych to rozšířit o Polštinu, aby návštěvníci s polskou IP byli přesměrováni na polskou verzi.
url=polish//index.php


Tady je kompletní kód filtru pro cz/en verzi.
<?
session_start();

if($_GET['action']=="to_czech") {
if(!session_is_registered("to_czech")) {
sesion_register("to_czech");
}
$_SESSION['to_czech']="true";
}

$file=fopen("http://www.webyield.net/ip/index.php?ip=".$_SERVER['REMOTE_ADDR'],"r");
$data=fread($file,5000);
fclose($file);

if((!ereg("Czech Republic",$data) && !$_SESSION['to_czech'])and(!ereg("Slovakia",$data) && !$_SESSION['to_czech'])) {
         //false
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.designfoods.cz/english/");
header("Connection: close");
}

?> 
<!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body> 
<meta http-equiv="refresh" content="0;url=czech/index.php">
</body></html>


Našel by se někdo, kdo by poradil s úpravou na Polštinu? Děkuji
WertriK
Profil
Já bych to tedy upravil trošku víc, nějak se mi to nelíbí.

session_start();

// podporovane jazyky, link, odkaz
$langs["Poland"][] = "http://www.designfoods.cz/poland/";
$langs["Poland"][] = "to_polish";
$langs["Czech Republic"][] = "http://www.designfoods.cz/czech/";
$langs["Czech Republic"][] = "to_czech";
$langs["Slovakia"][] = "http://www.designfoods.cz/czech/";
$langs["Slovakia"][] = "to_slovakia";

if (!session_is_registered("lang")) {

$file=fopen("http://www.webyield.net/ip/index.php?ip=".$_SERVER['REMOTE_ADDR'],"r");
$data=fread($file,5000);
fclose($file);

foreach($langs AS $lang=>$link) {

if (ereg($lang,$data)) {

$_SESSION["lang"] = true;

header("HTTP/1.1 301 Moved Permanently");
header("Location: ".$link[0]);
exit();

}

}

} else {

if (isSet($_GET["action"])) {

foreach($langs AS $lang=>$value) {

if ($_GET["action"] == $value[1]) {
header("Location: ".$value[0]);
exit();
}

}

}

}


Šlo by to ještě lépe (REQUEST_URI).
Axamith
Profil
No to je paráda. jestli jsem to dobře pochopil, tak script vyfiltruje polštinu, češtinu a slovenštinu a případně přesměruje na příslušnou URL. Pokud IP nebude odpovídat žádnému ze tří jazyků, tak pomocí meta tagu musím přesměrovat na angličtinu. Více bych to neprožíval, pokud dojde k nějakému zádrhelu, tak uživatel není hloupý, aby si ručně nepřepnul do jiné jazykové verze, odkazy tam jsou.
Alphard
Profil
session_is_registered() je zavržená historie. Když už to upravujete, smažte i tohle.
AM_
Profil
to samé funkce ereg().

Jinak ještě efektivněji se to dá udělat pomocí $_SERVER["HTTP_ACCEPT_LANGUAGE"], který přímo říká, o jaké jazykové verze a s jakou prioritou daný návštěvník stojí, takže to bude fungovat česky, ikdyž si vezmeš svůj notebook s českým prostředím třeba do jižní afriky.
Axamith
Profil
Alphard, AM : Bohužel do PHP jsem nakoukl jen okrajově, tak jsem rád, když na mě někdo vysype hotový zdroják, který je ihned použitelný.
AM_
Profil
Axamith:
který je ihned použitelný
ale zítra už být nemusí. Používání zastaralých funkcí znamená problémy s kompatibilitou v (blízké) budoucnosti.
Samozřejmě, nikdo tě nemůže nutit se učit PHP, ale je potřeba počítat s tím, že když chceš hotová řešení zdarma, jejich kvalita nebude valná.
ninja
Profil
Axamith: Pokud Vám mohu doporučit, co nejdříve skript přestaňte používat.

1. Pravděpodobně porušujete autorský zákon vzužíváním služby webyield.net.
2. Technické provedení získaní lokace návštevníka je velmi nespolehlivé a značně prodlužuje dobu načítání stránky.
3. Obecně filtrovat uživatele dle lokace a ne jejich preferovaného jazyka je většinou chyba.
5. Označení pomocí session je špatně.
Axamith
Profil
Tak teď jsem v pasti. Na web jsem si nechal napsat script na filtrování jazykové verze. A zaplatil za něj. Teď se dovídám, že tím porušuji autorský zákon, že je to pomalé, nespolehlivé a celkově špatně.
Určitě by bylo vhodnější určovat jazykovou verzi podle preferovaného jazyka v OS, ale nejsem si jistý, jestli bude konečný zákazník ochoten platit znovu za něco, co už jednou platil.
AM_
Profil
Axamith:
A zaplatil za něj. Teď se dovídám, že tím porušuji autorský zákon
pokud to řekneš autorovi scriptu, věřím, že jeho autor ti peníze rád vrátí. mnohem efektivnější skript pro filtrování podle accept_language ti klidně napíšu za pár korun (řekněme 500), je to mnohem efektivnější než podle IP, je to na pár řádek a nic to neporušuje. Pokud máš zájem ozvi se na r.ejem@seznam.cz, nebo můžeš zkusit dát nabídku zde na fóru do sekce "práce a zakázky".
ninja
Profil
Axamith: Využijte nabídky AM_ a po autorovi původního skriptu požadujte zpět peníze. Ješte bych ho při tom nakopal za takovou prasárnu, co stvořil...
Alphard
Profil
AM:
filtrování podle accept_language ti klidně napíšu za pár korun (řekněme 500)
Omlouvám se za OT, ale běžně prodáváš řádek kódu za stovku?

Axamith:
Vypište si tu hodnotu v různých prohlížečích, podívejte se, jak je formátovaná a určitě vás něco napadne.
AM_
Profil
Alphard:
Omlouvám se za OT, ale běžně prodáváš řádek kódu za stovku?
Hraje tu roli trochu to, že pod 500 nejdu, ať jde o sebemenší problém který zase není dost malý na to, abych ho vyřešil zdarma; levněji se mi to nevyplatí dělat, kdybych se živil řešením drobných problémů a bral za objem kódu stejně, měl bych se podstatně hůř.
jestli to je někdo schopný udělat levněji nebo zdarma, poslužte si, nouzi o práci nemám, také proto nedávám nižší nabídky. 500 není málo, ale není to zas tak přemrštěné, musí se do toho počítat i pomoc s nasazením a odladěním do existujícího programu atd..
Vzhledem k tomu, že Axamith i tento skript objednával, předpokládám, že upřednostní hotové řešení před "popostrčeními".

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0