Перевод в PHP

Статус
В этой теме нельзя размещать новые ответы.

Greed95

Создатель
Регистрация
26 Фев 2013
Сообщения
18
Реакции
1
использую на сайте автоматическое определение местонахождение с плагином ГеоПлагин Для просмотра ссылки Войди или Зарегистрируйся и имею такой код

Код:
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"
получится ли здесь автоматически так, что бы выдавало значение на Русском языке?
 
получится ли здесь автоматически так, что бы выдавало значение на Русском языке?
Я думаю, что база геоплагин хранится только в английском варианте; для перевода ответов нужно иметь массив ассоциаций перевода мест на нужный язык.
 
Не получится на русском! Они юзают базу от maxmind.com
Для просмотра ссылки Войди или Зарегистрируйся

Подобных контор полно и все они на английском
Для просмотра ссылки Войди или Зарегистрируйся

Рекомендую изначально заменить на русские значения, пример:
Для просмотра ссылки Войди или Зарегистрируйся

либо

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>";
?>
 
На английском, даже лучше. Единый стандарт, если пользователи сайта из разных стран. Я бы на твоем месте, даже не парилась.
 
На английском, даже лучше. Единый стандарт, если пользователи сайта из разных стран. Я бы на твоем месте, даже не парилась.
Верно. На англицком - локация точнее будет.
 
Как вариант можно переводить "на лету"
Моя библиотка Для просмотра ссылки Войди или Зарегистрируйся для бесплатного перевода через google без использования API
 
Просто нужно создать массив с городами и подставлять русские значения из него, например:

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

echo $cities[$xml->ip->city];
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху