Ako zistiť krajinu toho, kto si stránku prezerá?

Takeshi
Člen | 596
+
0
-

Ahojte všetci,

ako sa dá zistiť krajina toho, kto si práve prezerá stránku ⇒ a teda mu podľa toho prispôsobiť text na stránke do jeho jazyka? Ďakujem za odpoveď. Ideálne asi formou ‚US‘, ‚SK‘ atď. aby som to vedel dať do if{}else{}

jiri.pudil
Nette Blogger | 1028
+
+1
-

Jazyk se dá odvodit z hlavičky Accept-Language, viz https://api.nette.org/…Request.html#…. Ale měj připravený i fallback, pokud ti tu hlavičku někdo nepošle.

srigi
Nette Blogger | 558
+
+2
-

Existuje celkom pekna free geoip databaza, treba ju vsak pravidelne obnovovat. Viem, ze pre macOS je na to balicek geoipupdate, asi bude nieco aj pre linux.

Stiahnutu geoip databazu spracujes cca takto:

composer.json

{
    "require": {
        "maxmind-db/reader": "^1.1"
    }
}

code.php

require_once __DIR__ . '/vendor/autoload.php';

$reader = new MaxMind\Db\Reader(__DIR__ . '/GeoLite2-City.mmdb');

$res = $reader->get('95.82.177.238');
$reader->close();

echo 'Time zone : ';
echo "{$res['location']['time_zone']}\n";

echo 'Country   : ';
echo "{$res['country']['names']['en']} ({$res['country']['iso_code']})\n";

echo 'State     : ';
echo "{$res['subdivisions']['0']['names']['en']} ";
echo "({$res['subdivisions']['0']['iso_code']})\n";

echo 'City      : ';
echo "{$res['city']['names']['en']}\n";
echo "\n";

print_r($res);

Vystup potom vypada cca takto:

Time zone : Europe/Prague
Country   : Czechia (CZ)
State     : South Moravian (64)
City      : Brno

Array
(
    [city] => Array
        (
            [geoname_id] => 3078610
            [names] => Array
                (
                    [de] => Brünn
                    [en] => Brno
                    [es] => Brno
                    [fr] => Brno
                    [ja] => ブルノ
                    [pt-BR] => Brno
                    [ru] => Брно
                )

        )

    [continent] => Array
        (
            [code] => EU
            [geoname_id] => 6255148
            [names] => Array
                (
                    [de] => Europa
                    [en] => Europe
                    [es] => Europa
                    [fr] => Europe
                    [ja] => ヨーロッパ
                    [pt-BR] => Europa
                    [ru] => Европа
                    [zh-CN] => 欧洲
                )

        )

    [country] => Array
        (
            [geoname_id] => 3077311
            [iso_code] => CZ
            [names] => Array
                (
                    [de] => Tschechien
                    [en] => Czechia
                    [es] => República Checa
                    [fr] => République tchèque
                    [ja] => チェコ共和国
                    [pt-BR] => Tchéquia
                    [ru] => Чешская Республика
                    [zh-CN] => 捷克共和国
                )

        )

    [location] => Array
        (
            [accuracy_radius] => 20
            [latitude] => 49.2
            [longitude] => 16.6333
            [time_zone] => Europe/Prague
        )

    [postal] => Array
        (
            [code] => 625 00
        )

    [registered_country] => Array
        (
            [geoname_id] => 3077311
            [iso_code] => CZ
            [names] => Array
                (
                    [de] => Tschechien
                    [en] => Czechia
                    [es] => República Checa
                    [fr] => République tchèque
                    [ja] => チェコ共和国
                    [pt-BR] => Tchéquia
                    [ru] => Чешская Республика
                    [zh-CN] => 捷克共和国
                )

        )

    [subdivisions] => Array
        (
            [0] => Array
                (
                    [geoname_id] => 3339536
                    [iso_code] => 64
                    [names] => Array
                        (
                            [de] => Südmährische Region
                            [en] => South Moravian
                            [es] => Región de Moravia Meridional
                            [fr] => Moravie-du-Sud
                            [ja] => 南モラヴィア州
                            [pt-BR] => Morávia do Sul
                            [ru] => Южноморавский край
                        )

                )

            [1] => Array
                (
                    [geoname_id] => 3078609
                    [iso_code] => 642
                    [names] => Array
                        (
                            [en] => Mesto Brno
                        )

                )

        )

)

Databazovy subor je cca 50MB velky a na mojom notebooku trvalo spracovanie cca 27ms.

Editoval srigi (19. 9. 2017 9:16)

Takeshi
Člen | 596
+
0
-

A čo hovoríte na toto? :

<?php
$user_ip = getenv('REMOTE_ADDR');
$geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip"));
$country = $geo["geoplugin_countryName"];
$city = $geo["geoplugin_city"];
echo "country : ".$country."<br/>";
?>
GEpic
Člen | 562
+
0
-

Tohle nějakou chvíli mělo Trello a automaticky mi to vyhodnocovalo Němčinu a nebyla možnost to ručně změnit. To dokáže nasrat.

PS:

A čo hovoríte na toto? :

<?php
$user_ip = getenv('REMOTE_ADDR');
$geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip"));
$country = $geo["geoplugin_countryName"];
$city = $geo["geoplugin_city"];
echo "country : ".$country."<br/>";
?>

Tohle tě bude při každém requestu stát čas a navíc si tvoříš závislost na jiném serveru.

Není jednodušší nechat člověka si vybrat když ho to stojí JEDEN klik?

Editoval GEpic (24. 9. 2017 10:39)