Войти

Показать полную графическую версию : Многоязычный сайт на PHP


Страниц : [1] 2

binders
13-02-2010, 00:14
попросили сделать мульти язычный сайт
хотелось бы сделать чтото типо этого
http://i067.radikal.ru/1002/d5/f591de89ef11t.jpg (http://radikal.ru/F/i067.radikal.ru/1002/d5/f591de89ef11.jpg.html)

Зы.. заранее извиняюсь за столь не понятный пост просто не знаю как оформить мысль в слова

Sham
13-02-2010, 00:32
Делайте верстку, весь шаблонный текст заменяете переменными. Эти переменные определяете в языковых файлах. Либо на каждый язык отдельный шаблон с текстом... Для контента разные таблицы/поля по языкам, ну и в таком же духе...

binders
13-02-2010, 00:45
это то понятно но как сделать на цокетах переключение с языка на язык и чтоб один был основным

Sham
13-02-2010, 00:55
как сделать на цокетах переключение с языка на язык »
это как?

Язык в заголовках смотрим ($_SERVER['HTTP_ACCEPT_LANGUAGE'])
Accept-Language: ru,en-us;q=0.7,en;q=0.3
в остальном, язык передается или через get-параметры/псевдо-директории, или на другие субдомены (en.example.com).

binders
13-02-2010, 01:06
это как? »
извиняюсь не так выразился переключение через GET index.php?language=english
а цокеты имелись в виду для запоминания выбора юзера

идея от первого поста пришла в голову после переделки ( внедрения в сайт )
этой гостевой (http://www.scripts.oldguy.us/talkback/demo/) на демо сайте предложено переключение между 3 языков
хотлось бы сделать без субдоменов

mar
13-02-2010, 12:44
для запоминания выбора юзера »
ставите cookie и проверяете ее в начале работы

binders
13-02-2010, 19:55
столкнулся с 2 проблемами
было так
Что такое <?=$row['sitename']; ?>
сделал так
$lang['faq'] = "Часто задаваемые вопросы.";
$lang['faq1'] = "Вопрос";
$lang['faq2'] = "Ответ";
$lang['faq3'] = "Что такое {$row['sitename']}";


такой вариант не подходит
<?=$lang['faq3'];?><?=$row['sitename']; ?> ?
так как дальше 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
);
?>

Sham
13-02-2010, 23:25
А какие затруднения? Переменные можно вставить через конкатенацию '.$var.' , или сделать все строки в heredoc (http://docs.php.net/manual/ru/language.types.string.php#language.types.string.syntax.heredoc).

binders
15-02-2010, 01:51
одни проблемы с этим переводом теперь после перехода на utf-8 денвер начал глючить и ещё так и не понял как переменные вставить в меню постом выше через конкатенацию '.$var.'

первым делом денвер подлечил в .htaccess пишем AddDefaultCharset utf-8 в httpd.conf AddDefaultCharset 1251 убрал

но вроде чёто с ним нетак так как весь сайт стал кривой
session_start() выдаёт ошибку
цокеты тоже не работают
но если всё вернуть на windows-1251 начинает работать нормально

так вот если открыть кривой сайт в ИЕ или Мозиле затем исходный код (он кстати с виду нормальный )
и потом его скопировать в блокнот то появляться знаки вопроса которые и ломают всё
штуки 4
чтобы это значило ?
или у меня руки кривые или денвер дурит ?

dmitryst
15-02-2010, 12:16
Надо писать в редакторе, который поддерживает UTF8 (Notepad++, например)

binders
15-02-2010, 22:24
Надо писать в редакторе, который поддерживает UTF8 (Notepad++, например) »

а каким способом по вашему я конвертировал в утф-8 медиа конвектором ???

так я и пишу в нотепад++ иногда когда надо что то мало изменить то в акелпад

binders
17-02-2010, 03:28
всё во всём разобрался надо было кодировать в utf-8 без bom

а вот как выводить переменные в файлах которые выводятся так


<?
}
}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 код


<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>

dmitryst
17-02-2010, 11:31
надо было кодировать в utf-8 без bom »
вот-вот. Это я как раз забыл упомянуть

binders
27-04-2010, 03:28
сделал такое переключение языков
всё работает но только со второго разу

хотелось бы чтоб с первого

<a href="<?=$_SERVER['PHP_SELF'];?>?language=ru"><img src="images/ru.png" alt="" align="middle"/>&nbsp;</a>
<a href="<?=$_SERVER['PHP_SELF'];?>?language=lv"><img src="images/lv.png" alt="" align="middle"/>&nbsp;</a>

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;

Sham
27-04-2010, 04:11
if(isset($language)):
setcookie("langu","$language", time() + (86400*30));
endif; »

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']

if(in_array(@$_COOKIE['langu'], array('ru','lv'))){...}

binders
15-05-2010, 07:08
почему так ???
надо файл с переводом второй раз подгружать внутри function

<?
$deflangu= lv;
//эта переменная работает только до function и после неё
include('language/'.$deflangu.'.php');

function print_form($user,$pass12) {


$deflangu= lv;
//и чтоб в внутри function появился перевод надо опять выводить
include('language/'.$deflangu.'.php');



}?>

Зыы ... Люди добрые мож кто знает где достать такие флаги ? http://bimbux.com/images/ru.png http://bimbux.com/images/lv.png http://bimbux.com/images/uk.png

Sham
17-05-2010, 16:52
надо файл с переводом второй раз подгружать внутри function »
rtm (http://docs.php.net/manual/ru/language.variables.scope.php)

binders
18-05-2010, 04:27
Было так
<?
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>
<?
}

сделал так
<?
$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>
<?
}

правильно ???

Sham
18-05-2010, 04:37
$deflangu= lv; »
lv - константа?<?=$hader5;?> »не уверен, что с ";" будет работать. имхо либо с echo либо без ';', нужно уточнить...

binders
18-05-2010, 04:58
LV это ( язык если нету некаких цоокетов )
вроде всё работает и без echo переменые подгружаются




© OSzone.net 2001-2012