PHP многоязычные параметры GET - PullRequest
0 голосов
/ 29 марта 2011

Я строю многоязычную поддержку PHP-страницы.Допустим, у меня есть URL страницы:

http://mypage.php?user=eric&city=newyork

, который является общим решением для переключения между параметрами получения lang = en и lang = es при сохранении getпараметры уже в URL?

спасибо, Лука

Ответы [ 5 ]

3 голосов
/ 29 марта 2011

Полезный скрипт, который возвращает относительный URL-адрес текущей страницы с текущими «GET data».

<?php 
function getCurrentURL() { 
    $currentURL = basename($_SERVER["PHP_SELF"]); 
    $i = 0; 
    foreach($_GET as $key => $value) { 
        $i++; 
        if($i == 1) { $currentURL .= "?"; } 
        else { $currentURL .= "&amp;"; } 
        $currentURL .= $key."=".$value; 
    } 
    return $currentURL; 
} 
?> 

измените его и объедините параметры языка соответственно

2 голосов
/ 29 марта 2011

Вы не будете постоянно хранить GET Params в URL, только когда вы устанавливаете язык, вы будете использовать сеансы, чтобы запомнить, какой язык использует текущий клиент.

создайте следующую функцию в вашем php

function getCurrentLanguage()
{
    if(isset($_REQUEST['lang']))
    {
         //Validate that $_REQUEST['lang'] is valid
         return $_SESSION['lang'] = $_REQUEST['lang'];
    }

    if(isset($_SESSION['lang']))
    {
        return $_SESSION['lang'];
    }

    return 'en'; //Default
}

теперь, когда пользователь заходит на сайт, языком по умолчанию будет английский, но если он перейдет на index.php?lang=es, тогда будет установлен язык es, поэтому, когда он перемещается по сайту без ?lang=es, тогда показать версию на испанском языке.

0 голосов
/ 16 августа 2012

Вы можете использовать мой любимый язык PHP Многоязычный класс - LangQuery

Это самый легкий, который я когда-либо видел.

Вы можете сохранить свои языковые данные в файлах .ini, а не просто вызывать их по

include("LangQuery.php");

$L=new LangQuery();

// Write Hello World
echo($L('hello_world'));

// Write Hello World Easier - In-line Echo Feature
// You don't have to write echo. Just add '>'
$L('>hello_world');

// Use in Strings
echo("Hello Universe. {$L('hello_world')} Hello Europe");

// Write my age with parameter
$L(">my_age",25);

// Write my name and age with parameters
$L(">my_name_age","Recep",25);
0 голосов
/ 29 марта 2011

Если я правильно понимаю вопрос, вам нужен способ добавить параметр в URL-адрес или заменить его значение новым значением, если оно уже существует.

Вот функция, которая делает это безопасно во всех видах URL:

function url_with_parameter($url, $name, $value) {
    if(strpos($url, '?') === false) {
        if (strpos($url, '#') === false) {
            // No query and no fragment -- append a new query to the url
            $newurl = $url.'?'.$name.'='.$value;
        }
        else {
            // No query with fragment -- insert query before existing fragment
            $newurl = str_replace('#', '?'.$name.'='.$value.'#', $url);
        }
    }
    else {
        if (strpos($url, $name.'=') === false) {
            // With query, param does not exist -- insert at beginning of query
            $newurl = str_replace('?', '?'.$name.'='.$value.'&', $url);
        }
        else {
            // With query, param exists -- replace it
            $parsed = parse_url($url, PHP_URL_QUERY);
            parse_str($parsed, $vars);
            $newurl = str_replace($name.'='.$vars[$name], $name.'='.$value, $url);
        }
    }

    return $newurl;
}

Не забудьте вызвать urlencode перед использованием вывода этой функции для создания ссылки.

0 голосов
/ 29 марта 2011

Для хранения такого рода информации лучше использовать данные cookie или сессии / idУ меня будет меньше вещей для переноски.

...