-
Вебмастеру
(
http://forum.oszone.net/forumdisplay.php?f=22)
Многоязычный сайт на PHP
попросили сделать мульти язычный сайт
хотелось бы сделать чтото типо этого
Зы.. заранее извиняюсь за столь не понятный пост просто не знаю как оформить мысль в слова
|
Делайте верстку, весь шаблонный текст заменяете переменными. Эти переменные определяете в языковых файлах. Либо на каждый язык отдельный шаблон с текстом... Для контента разные таблицы/поля по языкам, ну и в таком же духе...
|
это то понятно но как сделать на цокетах переключение с языка на язык и чтоб один был основным
|
Цитата:
Цитата binders
как сделать на цокетах переключение с языка на язык »
|
это как?
Язык в заголовках смотрим ($_SERVER['HTTP_ACCEPT_LANGUAGE'])
Код:
Accept-Language: ru,en-us;q=0.7,en;q=0.3
в остальном, язык передается или через get-параметры/псевдо-директории, или на другие субдомены (en.example.com).
|
извиняюсь не так выразился переключение через GET index.php?language=english
а цокеты имелись в виду для запоминания выбора юзера
идея от первого поста пришла в голову после переделки ( внедрения в сайт )
этой гостевой на демо сайте предложено переключение между 3 языков
хотлось бы сделать без субдоменов
|
Цитата:
Цитата binders
для запоминания выбора юзера »
|
ставите cookie и проверяете ее в начале работы
|
столкнулся с 2 проблемами
было так
PHP код:
Что такое <?=$row['sitename']; ?>
сделал так
PHP код:
$lang['faq'] = "Часто задаваемые вопросы.";
$lang['faq1'] = "Вопрос";
$lang['faq2'] = "Ответ";
$lang['faq3'] = "Что такое {$row['sitename']}";
такой вариант не подходит
PHP код:
<?=$lang['faq3'];?><?=$row['sitename']; ?> ?
так как дальше php будет в середине текста
и вторая как здесь вставить вместо русских слов php
PHP код:
<?
$menu =
'
<div id="iefix">
<div id="horiz-menu" class="splitmenu">
<ul class="menu">
<li class="item"><span class="top"><a href="index.php">Главная</a><span class="selector"><br /></span></span></li>
<li class="item"><span class="top"><a href="rules.php">Правила</a><span class="selector"><br /></span></span></li>
<li class="item"><span class="top"><a href="reg.php">Регистрация</a><span class="selector"><br /></span></span></li>
<li class="item"><span class="top"><a href="account.php">Аккаунт</a><span class="selector"><br /></span></span></li>
<li><span class="top"><a href="faq.php">FAQ</a><span class="selector"><br /></span></span></li>
';
$sqlgbactive=mysql_query("select*from sysvals where gb_active='YES'");
$rowgbactive=mysql_fetch_array($sqlgbactive);
if($rowgbactive>0):
$menu .= '<li class="item"><span class="top"><a href="gb.php?page=0">Гостевая</a><span class="selector"><br /></span></span></li>';
endif;
$menu .= '</ul></div></div>';
$PHP_SELF = basename($_SERVER['PHP_SELF']);
echo str_replace
(
'<li class="item"><span class="top"><a href="'.$PHP_SELF,
'<li id="current" class="active"><span class="top"><a href="'.$PHP_SELF,
$menu
);
?>
|
А какие затруднения? Переменные можно вставить через конкатенацию '.$var.' , или сделать все строки в heredoc.
|
одни проблемы с этим переводом теперь после перехода на utf-8 денвер начал глючить и ещё так и не понял как переменные вставить в меню постом выше через конкатенацию '.$var.'
первым делом денвер подлечил в .htaccess пишем AddDefaultCharset utf-8 в httpd.conf AddDefaultCharset 1251 убрал
но вроде чёто с ним нетак так как весь сайт стал кривой
session_start() выдаёт ошибку
цокеты тоже не работают
но если всё вернуть на windows-1251 начинает работать нормально
так вот если открыть кривой сайт в ИЕ или Мозиле затем исходный код (он кстати с виду нормальный )
и потом его скопировать в блокнот то появляться знаки вопроса которые и ломают всё
штуки 4
чтобы это значило ?
или у меня руки кривые или денвер дурит ?
|
Надо писать в редакторе, который поддерживает UTF8 (Notepad++, например)
|
Цитата:
Цитата dmitryst
Надо писать в редакторе, который поддерживает UTF8 (Notepad++, например) »
|
а каким способом по вашему я конвертировал в утф-8 медиа конвектором ???
так я и пишу в нотепад++ иногда когда надо что то мало изменить то в акелпад
|
всё во всём разобрался надо было кодировать в utf-8 без bom
а вот как выводить переменные в файлах которые выводятся так
PHP код:
<?
}
}else {
$bold = "<b>";
$boldc = "</b>";
$rowr4["bold"]=$bold;
$rowr4["boldc"]=$boldc;
$highlighted = "highlightedv";
$rowr4["highlighted"]=$highlighted;
$rowr4["description"]="";
$rowr4["members"]="";
$rowr4["outside"]="";
$rowr4["total"]="";
$rowr4["id"]="";
$rowr4["hrefr"] = "";
$rowr4["hrefl"] = "";
$html->AsignaBloque('ads',$rowr4);
} $html->Fichero("guest.php");
} echo $html->Muestra();
?>
<?php include ('footer.php');
?
>
в файле guest.php
почти простой html код
HTML код:
<div class="moduletablehilite3" align="center">
<div id="full" class="moduletablehilite3" align="center">
<[block: ads_guest]>
<a <[hrefl]> <[hrefr]> class="spreadlinks<[highlighted]>" target="_blank">
<center>
<[bold]>
<[description]>
<[boldc]>
<br>Просмотрено пользователями: <[members]> | Просмотрено гостями: <[outside]> | Всего просмотров: <[total]>
</center>
</a>
<[/block: ads_guest]>
</div>
</div>
|
Цитата:
Цитата binders
надо было кодировать в utf-8 без bom »
|
вот-вот. Это я как раз забыл упомянуть
|
сделал такое переключение языков
всё работает но только со второго разу
хотелось бы чтоб с первого
HTML код:
<a href="<?=$_SERVER['PHP_SELF'];?>?language=ru"><img src="images/ru.png" alt="" align="middle"/> </a>
<a href="<?=$_SERVER['PHP_SELF'];?>?language=lv"><img src="images/lv.png" alt="" align="middle"/> </a>
PHP код:
if(isset($language)):
setcookie("langu","$language", time() + (86400*30));
endif;
if(($langu == lv) || ($langu == ru)):
{
include('language/'.$langu.'.php');
}
else:
include('language/lv.php');
endif;
|
Цитата:
Цитата binders
if(isset($language)):
setcookie("langu","$language", time() + (86400*30));
endif; »
|
PHP код:
if(isset($_GET['language']) && in_array($_GET['language'], array('ru','lv'))): setcookie("langu", $_GET['language'], time() + (86400*30)); $_COOKIE['langu'] = $_GET['language']; endif;
и дальше вместо $langu лучше $_COOKIE['langu']
PHP код:
if(in_array(@$_COOKIE['langu'], array('ru','lv'))){...}
|
почему так ???
надо файл с переводом второй раз подгружать внутри function
PHP код:
<?
$deflangu= lv;
//эта переменная работает только до function и после неё
include('language/'.$deflangu.'.php');
function print_form($user,$pass12) {
$deflangu= lv;
//и чтоб в внутри function появился перевод надо опять выводить
include('language/'.$deflangu.'.php');
}?>
Зыы ... Люди добрые мож кто знает где достать такие флаги ? 
|
Цитата:
Цитата binders
надо файл с переводом второй раз подгружать внутри function »
|
rtm
|
Было так
PHP код:
<?
function print_form1($user,$pass12) {
$deflangu= lv;
if(in_array(@$_COOKIE['langu'], array('ru','lv','en'))):
{
include('language/'.$_COOKIE["langu"].'.php');
}
else:
include('language/'.$deflangu.'.php');
endif;
?>
<div id="mod-top">
<form action="myaccount.php" method="post" name="loginForm" >
<div class="spacer">
<div class="loginelement">
<label for="mod_login_username"><?=$lang['hader5'];?></label>
<input name="user" id="mod_login_username" type="text" class="inputbox" alt="username" size="10" />
</div>
<div class="loginelement">
<label for="mod_login_password"><?=$lang['hader6'];?></label>
<input type="password" id="mod_login_password" name="pass12" class="inputbox" size="10" alt="password" />
</div>
</div>
<div class="loginelement">
<a href="javascript:document.loginForm.submit();" class="nounde1r"><?=$lang['hader7'];?></a>
<a href="pass.php" class="noun1der"><?=$lang['hader8'];?></a>
</div>
<div class="clr"></div>
</form>
</div>
<?
}
сделал так
PHP код:
<?
$hader5=$lang['hader5'];
$hader6=$lang['hader6'];
$hader7=$lang['hader7'];
$hader8=$lang['hader8'];
function print_form1($user,$pass12) {
global $hader5 ,$hader6 ,$hader7 ,$hader8;
?>
<div id="mod-top">
<form action="myaccount.php" method="post" name="loginForm" >
<div class="spacer">
<div class="loginelement">
<label for="mod_login_username"><?=$hader5;?></label>
<input name="user" id="mod_login_username" type="text" class="inputbox" alt="username" size="10" />
</div>
<div class="loginelement">
<label for="mod_login_password"><?=$hader6;?></label>
<input type="password" id="mod_login_password" name="pass12" class="inputbox" size="10" alt="password" />
</div>
</div>
<div class="loginelement">
<a href="javascript:document.loginForm.submit();" class="nounder"><?=$hader7;?></a>
<a href="pass.php" class="noun1der"><?=$hader8;?></a>
</div>
<div class="clr"></div>
</form>
</div>
<?
}
правильно ???
|
lv - константа? не уверен, что с ";" будет работать. имхо либо с echo либо без ';', нужно уточнить...
|
LV это ( язык если нету некаких цоокетов )
вроде всё работает и без echo переменые подгружаются
|
без кавычек это константа
где вызов print_form1?
|
я конечно извиняюсь но я совсем запутался в етих терминах не силён ( прям как маленький)
что это за константа и с чем её едят
вот выкладываю всю function
PHP код:
<?
$hader5=$lang['hader5'];
$hader6=$lang['hader6'];
$hader7=$lang['hader7'];
$hader8=$lang['hader8'];
function print_form1($user,$pass12) {
global $hader5 ,$hader6 ,$hader7 ,$hader8;
?>
<div id="mod-top">
<form action="myaccount.php" method="post" name="loginForm" >
<div class="spacer">
<div class="loginelement">
<label for="mod_login_username"><?=$hader5;?></label>
<input name="user" id="mod_login_username" type="text" class="inputbox" alt="username" size="10" />
</div>
<div class="loginelement">
<label for="mod_login_password"><?=$hader6;?></label>
<input type="password" id="mod_login_password" name="pass12" class="inputbox" size="10" alt="password" />
</div>
</div>
<div class="loginelement">
<a href="javascript:document.loginForm.submit();" class="nounder"><?=$hader7;?></a>
<a href="pass.php" class="noun1der"><?=$hader8;?></a>
</div>
<div class="clr"></div>
</form>
</div>
<?
}
if(isset($log)):
print_form1($user,$pass12);
else:
$sql=mysql_query("select*from yob_users where username='$user'");
$num=mysql_num_rows($sql);
if($num==0):
print_form1($user,$pass12);
else:
$row=mysql_fetch_array($sql);
$pass1=$row['password'];
$stat=$row['account'];
$email12=$row['email'];
if($pass1!=$pass12):
print_form1($user,$pass12);
else:
$lastlogdate = date("F j, Y - g:i a");
$lastip = getRealIP();
$querybt = "UPDATE yob_users SET lastlogdate='$lastlogdate', lastiplog='$lastip' WHERE username='$user'";
mysql_query($querybt) or die(mysql_error());
?>
<div id="mod-top">
<div class="spacer extra">
<?=$lang['hader1'];?>, <span class="red"><?=$user;?></span><br /><?=$lang['hader2'];?> - <span class="red"><?=$stat;?></span><br /><?=$lang['hader3'];?> - <span class="red"><?=$email12;?></span><br /></div>
<div class="loginelement">
<a href="logout.php"><?=$lang['hader4'];?></a>
</div>
</div>
<?
endif;
endif;endif;
?>
|
Цитата:
Цитата binders
что это за константа и с чем её едят »
|
rtm
Цитата:
Цитата binders
where username='$user'"); »
|
$user не обработан? см. mysql_real_escape_string (для всех переменных внутри запросов)
|
Время: 07:33.
© OSzone.net 2001-