Перевод в PHP

Тема в разделе "PHP", создана пользователем Greed95, 29 мар 2018.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Greed95

    Greed95 Создатель

    Регистр.:
    26 фев 2013
    Сообщения:
    20
    Симпатии:
    1
    использую на сайте автоматическое определение местонахождение с плагином ГеоПлагин http://www.geoplugin.com/ и имею такой код

    Код:
    class geoPlugin {
       
        //the geoPlugin server
        var $host = 'http://www.geoplugin.net/php.gp?ip={IP}&base_currency={CURRENCY}';
           
        //the default base currency
        var $currency = 'USD';
       
        //initiate the geoPlugin vars
        var $ip = null;
        var $city = null;
        var $region = null;
        var $areaCode = null;
        var $dmaCode = null;
        var $countryCode = null;
        var $countryName = null;
        var $continentCode = null;
        var $latitude = null;
        var $longitude = null;
        var $currencyCode = null;
        var $currencySymbol = null;
        var $currencyConverter = null;
       
        function geoPlugin() {
    
        }
       
        function locate($ip = null) {
           
            global $_SERVER;
           
            if ( is_null( $ip ) ) {
                $ip = $_SERVER['REMOTE_ADDR'];
            }
           
            $host = str_replace( '{IP}', $ip, $this->host );
            $host = str_replace( '{CURRENCY}', $this->currency, $host );
           
            $data = array();
           
            $response = $this->fetch($host);
           
            $data = unserialize($response);
           
            //set the geoPlugin vars
            $this->ip = $ip;
            $this->city = $data['geoplugin_city'];
            $this->region = $data['geoplugin_region'];
            $this->areaCode = $data['geoplugin_areaCode'];
            $this->dmaCode = $data['geoplugin_dmaCode'];
            $this->countryCode = $data['geoplugin_countryCode'];
            $this->countryName = $data['geoplugin_countryName'];
            $this->continentCode = $data['geoplugin_continentCode'];
            $this->latitude = $data['geoplugin_latitude'];
            $this->longitude = $data['geoplugin_longitude'];
            $this->currencyCode = $data['geoplugin_currencyCode'];
            $this->currencySymbol = $data['geoplugin_currencySymbol'];
            $this->currencyConverter = $data['geoplugin_currencyConverter'];
           
        }
       
        function fetch($host) {
    
            if ( function_exists('curl_init') ) {
                           
                //use cURL to fetch data
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $host);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_USERAGENT, 'geoPlugin PHP Class v1.0');
                $response = curl_exec($ch);
                curl_close ($ch);
               
            } else if ( ini_get('allow_url_fopen') ) {
               
                //fall back to fopen()
                $response = file_get_contents($host, 'r');
               
            } else {
    
                trigger_error ('geoPlugin class Error: Cannot retrieve data. Either compile PHP with cURL support or enable allow_url_fopen in php.ini ', E_USER_ERROR);
                return;
           
            }
           
            return $response;
        }
       
        function convert($amount, $float=2, $symbol=true) {
           
            //easily convert amounts to geolocated currency.
            if ( !is_numeric($this->currencyConverter) || $this->currencyConverter == 0 ) {
                trigger_error('geoPlugin class Notice: currencyConverter has no value.', E_USER_NOTICE);
                return $amount;
            }
            if ( !is_numeric($amount) ) {
                trigger_error ('geoPlugin class Warning: The amount passed to geoPlugin::convert is not numeric.', E_USER_WARNING);
                return $amount;
            }
            if ( $symbol === true ) {
                return $this->currencySymbol . round( ($amount * $this->currencyConverter), $float );
            } else {
                return round( ($amount * $this->currencyConverter), $float );
            }
        }
       
        function nearby($radius=10, $limit=null) {
    
            if ( !is_numeric($this->latitude) || !is_numeric($this->longitude) ) {
                trigger_error ('geoPlugin class Warning: Incorrect latitude or longitude values.', E_USER_NOTICE);
                return array( array() );
            }
           
            $host = "http://www.geoplugin.net/extras/nearby.gp?lat=" . $this->latitude . "&long=" . $this->longitude . "&radius={$radius}";
           
            if ( is_numeric($limit) )
                $host .= "&limit={$limit}";
               
            return unserialize( $this->fetch($host) );
    
        }
    
       
    }
    
    ?>
    но мои сайт на русском языке, а на выходе получаю город на английском
    тоесть вместо "Москва" получаю "Moscow"
    получится ли здесь автоматически так, что бы выдавало значение на Русском языке?
     
  2. Den1xxx

    Den1xxx

    Moderator
    Регистр.:
    15 янв 2014
    Сообщения:
    280
    Симпатии:
    155
    Я думаю, что база геоплагин хранится только в английском варианте; для перевода ответов нужно иметь массив ассоциаций перевода мест на нужный язык.
     
  3. Албибеков

    Албибеков Создатель

    Регистр.:
    24 июн 2016
    Сообщения:
    16
    Симпатии:
    6
    Не получится на русском! Они юзают базу от maxmind.com
    http://www.geoplugin.net/php.gp?ip=15.25.21.54

    Подобных контор полно и все они на английском
    http://ip-api.com/php/

    Рекомендую изначально заменить на русские значения, пример:
    http://api.sypexgeo.net/json/15.25.21.54

    либо

    PHP:
    <?php
    $ip 
    '87.224.214.72';

    /*получаем информацию о ip в виде xml-файла от сервиса ipgeobase.ru*/
    $result file_get_contents("http://ipgeobase.ru:7020/geo?ip=".$ip);

    /*Формируем DOM-структуру из полученного xml*/
    $xml = new SimpleXMLElement($result);
    /*Выводим полученную информацию*/
    echo "Информация об IP ".$xml->ip->attributes[0]."<br>";
    echo 
    "Сеть: ".$xml->ip->inetnum."<br>";
    echo 
    "Страна: ".$xml->ip->country."<br>";
    echo 
    "Город: ".$xml->ip->city."<br>";
    echo 
    "Область: ".$xml->ip->region."<br>";
    echo 
    "Округ: ".$xml->ip->district."<br>";
    echo 
    "Широта: ".$xml->ip->lat."<br>";
    echo 
    "Долгота: ".$xml->ip->lng."<br>";
    ?>
     
  4. kseniya93

    kseniya93

    Регистр.:
    24 окт 2016
    Сообщения:
    225
    Симпатии:
    181
    На английском, даже лучше. Единый стандарт, если пользователи сайта из разных стран. Я бы на твоем месте, даже не парилась.
     
    denis2000 нравится это.
  5. Албибеков

    Албибеков Создатель

    Регистр.:
    24 июн 2016
    Сообщения:
    16
    Симпатии:
    6
    Верно. На англицком - локация точнее будет.
     
  6. dejurin

    dejurin Создатель

    Регистр.:
    16 июл 2012
    Сообщения:
    16
    Симпатии:
    12
  7. krast90

    krast90 Создатель

    Регистр.:
    4 апр 2008
    Сообщения:
    11
    Симпатии:
    3
    Просто нужно создать массив с городами и подставлять русские значения из него, например:

    $cities['Moscow'] = 'Москва';
    $cities['Samara'] = 'Самара';
    и т.д.

    echo $cities[$xml->ip->city];
     
Статус темы:
Закрыта.