2012-05-18 3 views
0

Я использую многоязычный скрипт, чтобы перейти от lanquage. Теперь у меня возникают проблемы, чтобы перейти от языка, когда я на языке по умолчанию (английский)Многоязычный сайт: языки переключения

Сайт выглядит как:

example.com (Main directory) 
example.com/fr/ 
example.com/es/ 

Когда я в example.com/fr/ blabla/index, и я хочу перейти к example.com/es/blabla/index, он отлично работает.

Но когда я нахожусь в example.com/blabla/index, и я хочу перейти к example.com/fr/blabla/index. Я перенаправлять example.com/fr/index

Я использую:

<?php 
function switchLanguage($lang) { 
    $u = explode('/', $_SERVER['REQUEST_URI']); 
    $u[1] = $lang; 
    return implode('/', $u); 
} 

?> 

Так что логично, что я не перенаправлять на правильный путь, потому что нет никакого каталога/анг.

Я думал, можно ли переписать URL-адрес с помощью массива? Что-то вроде этого:

<?php 
function switchLanguage($lang) 
$array1 = array(' ', $_SERVER['REQUEST_URI']); 
$array2 = array('$lang', ' '); 
$newArray = array_combine($array1, $array2); 

foreach ($newArray as $key) { 
     echo "$key $value"; 
} 

?> 

Но как я могу получить значение в URL или где я буду неправильно.

Чтобы использовать базу данных или .ini и Geoip кэширование не вариант

+0

Не могли бы вы объяснить мне одно: когда вы переходите на example.com/fr/blabla/index, вы перенаправляетесь на example.com/fr/index. Тогда вы говорите, что «нет директории/eng». Откуда этот «анг»? –

+0

Является ли язык по умолчанию тем, что ваш скрипт все еще впадает в путь, к которому вы хотите перенаправить? –

+0

Почти там, это выглядит многообещающе! Я объясню это, надеюсь, теперь лучше: Посетитель находится на странице: Example.com/sub1/index.php И он хочет изменить язык на испанский язык. Я хочу, чтобы редирект на: Example.com/es/sub1/index.php Но теперь он (еще) будет: Example.com/es/ index.php So в SUB1 каталог должен прибыть после/es/ –

ответ

1
function switchLanguage($lang, $defaultLang = "eng") { 
    if($lang == $defaultLang) { 
     $lang = ""; 
    } 
    $u = explode('/', $_SERVER['REQUEST_URI']); 
    $u[1] = $lang; 
    return implode('/', $u); 
} 

Это может сработать, если я правильно понял вашу проблему.

+0

Почти там, это выглядит многообещающе! Я объясню это, надеюсь, теперь лучше: Посетитель на странице: Example.com/sub1/index.php И хочет изменить язык на испанский язык. Я хочу, чтобы он перенаправлялся на: Example.com/es/sub1/index.PHP Но теперь он (еще) будет: Example.com/es/ index.php Так каталог sub1 должен прийти после того, как/эс/ –

1

Вы переписываете первый каталог, делая $u[1] = $lang. Вам необходимо восстановить массив, выдвигая язык в нужном месте, не переписывая что-то, что может быть уже есть (например, каталог)

Edit: Использование array_splice добавить в языковой части:

<?php 
function switchLanguage($lang) { 
    $u = explode('/', $_SERVER['REQUEST_URI']); 
    $u = array_splice($u,1,0,$lang); 
    return implode('/', $u); 
} 

?> 
+0

Почти там, Это выглядит многообещающим! Я объясню это, надеюсь, теперь лучше: Посетитель находится на странице: Example.com/sub1/index.php И он хочет изменить язык на испанский язык. Я хочу, чтобы редирект на: Example.com/es/sub1/index.php Но теперь он (еще) будет: Example.com/es/ index.php So в SUB1 каталог должен прийти после/es/ –

+0

То, что делает мой код выше - как я объяснил – psynnott

+0

Я протестировал его здесь www.addressq.com/test.php, но он не будет работать –

Смежные вопросы