Войти

Показать полную графическую версию : Переменные в PHP и HTML (локализация)


Алексей Zn
17-12-2013, 07:21
Здравствуйте.
Раньше сайт был на одном языке и было все в файлах PHP, теперь приходится добавлять несколько языков (на выбор пользователя), это значит заменять фразы в PHP на переменные, но ума не приложу как это все оформить...
Например имеем такую часть кода:
$now_hours = date('G');
if($now_hours<8)
{
$xxxx = 'Доброй ночи!';
}
elseif($now_hours<12 && $now_hours>=8 )
{
$xxxx = 'Доброе утро!';
}
elseif($now_hours>=12 && $now_hours<17)
{
$xxxx = 'Добрый день!';
}
elseif($now_hours>=17 && $now_hours<=23)
{
$xxxx = 'Добрый вечер!';
}
$content = str_replace('{xxxx}', $xxxx);
print $content;
Где, далее переменная {xxxx} вставляется в шаблон и выводит приветствие. Так вот как в этом коде заменить фразы Доброй ночи!, Доброе утро!, Добрый день!, Добрый вечер!, на переменные, что бы они подхватывались с языкового файла, скажем ru.php?
Покажите, пожалуйста пример.
Спасибо.

Pavluha
21-12-2013, 23:45
Для начала нужно определиться, как вы будете узнавать, какой язык предпочитает пользователь. Можно сделать разными путями, но самый удобный -- это через куки.

Далее, если нужно поменять только эти 4 фразы, можно обойтись так (показано для первого примера):


$userlang = $_COOKIE['userlang'];

$now_hours = date('G');
if($now_hours<8)
{
if($userlang='ru')
{
$xxxx = 'Доброй ночи!';
}
else if ($userlang='en')
{
$xxxx = 'Good night!'
}
}
..........................

$content = str_replace('{xxxx}', $xxxx);
print $content;


Но если надо перевести на другой язык весь сайт, то нужно делать так:
1. Создаём папку language или localizations и в неё кидаем файлы с именами типа ru.php, en.php и тому подобное.
2. В этих файлах будут храниться фразы для вашего сайта (желательно делать так, в виде массива):

<?
/*Английская локализация (en.php)*/
$message['good_night'] = 'Good night!';
$message['good_morning'] = 'Good morning!';
......................
?>


<?
/*Русская локализация (ru.php)*/
$message['good_night'] = 'Доброй ночи!';
$message['good_morning'] = 'Доброе утро!';
......................
?>

3. В самом коде программы делать так:


$userlang = $_COOKIE['userlang'];
include('localization/'.$userlang);
$now_hours = date('G');
if($now_hours<8)
{
$xxxx = $message['good_night'];
}
elseif($now_hours<12 && $now_hours>=8 )
{
$xxxx = $message['good_morning'];
}
elseif($now_hours>=12 && $now_hours<17)
{
$xxxx = $message['good_aftenoon'];
}
elseif($now_hours>=17 && $now_hours<=23)
{
$xxxx = $message['good_evening'];
}
$content = str_replace('{xxxx}', $xxxx);
print $content;


Конечно, данный код нужно еще доработать (например, если такого языка не существует, выводить на русском или английском). И, к примеру, использовать require вместо инклуда, но необходимо тогда просчитать все возможные ошибки.

P. S. Если думаете, что сами не справитесь, а код сайта всему миру показывать не хотите, могу помочь за символическую плату (пишите в лс).




© OSzone.net 2001-2012