Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Многоязычный сайт на PHP (http://forum.oszone.net/showthread.php?t=167201)

binders 13-02-2010 00:14 1345891

Многоязычный сайт на PHP
 
попросили сделать мульти язычный сайт
хотелось бы сделать чтото типо этого


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

Sham 13-02-2010 00:32 1345902

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

binders 13-02-2010 00:45 1345909

это то понятно но как сделать на цокетах переключение с языка на язык и чтоб один был основным

Sham 13-02-2010 00:55 1345912

Цитата:

Цитата binders
как сделать на цокетах переключение с языка на язык »

это как?

Язык в заголовках смотрим ($_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 1345918

Цитата:

Цитата Sham
это как? »

извиняюсь не так выразился переключение через GET index.php?language=english
а цокеты имелись в виду для запоминания выбора юзера

идея от первого поста пришла в голову после переделки ( внедрения в сайт )
этой гостевой на демо сайте предложено переключение между 3 языков
хотлось бы сделать без субдоменов

mar 13-02-2010 12:44 1346105

Цитата:

Цитата binders
для запоминания выбора юзера »

ставите cookie и проверяете ее в начале работы

binders 13-02-2010 19:55 1346401

столкнулся с 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  
);  
?>


Sham 13-02-2010 23:25 1346552

А какие затруднения? Переменные можно вставить через конкатенацию '.$var.' , или сделать все строки в heredoc.

binders 15-02-2010 01:51 1347292

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

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

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

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

dmitryst 15-02-2010 12:16 1347489

Надо писать в редакторе, который поддерживает UTF8 (Notepad++, например)

binders 15-02-2010 22:24 1348025

Цитата:

Цитата dmitryst
Надо писать в редакторе, который поддерживает UTF8 (Notepad++, например) »

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

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

binders 17-02-2010 03:28 1349075

всё во всём разобрался надо было кодировать в 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>


dmitryst 17-02-2010 11:31 1349251

Цитата:

Цитата binders
надо было кодировать в utf-8 без bom »

вот-вот. Это я как раз забыл упомянуть

binders 27-04-2010 03:28 1401489

сделал такое переключение языков
всё работает но только со второго разу

хотелось бы чтоб с первого
HTML код:

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

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; 


Sham 27-04-2010 04:11 1401495

Цитата:

Цитата 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'))){...} 


binders 15-05-2010 07:08 1413686

почему так ???
надо файл с переводом второй раз подгружать внутри function

PHP код:

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

function 
print_form($user,$pass12) {


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



}
?>

Зыы ... Люди добрые мож кто знает где достать такие флаги ?

Sham 17-05-2010 16:52 1415222

Цитата:

Цитата binders
надо файл с переводом второй раз подгружать внутри function »

rtm

binders 18-05-2010 04:27 1415709

Было так
PHP код:

<?
function print_form1($user,$pass12) {
$deflangulv;
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>    
                            <? 
}

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

Sham 18-05-2010 04:37 1415710

Цитата:

Цитата binders
$deflangu= lv; »

lv - константа?
Цитата:

Цитата binders
<?=$hader5;?> »

не уверен, что с ";" будет работать. имхо либо с echo либо без ';', нужно уточнить...

binders 18-05-2010 04:58 1415713

LV это ( язык если нету некаких цоокетов )
вроде всё работает и без echo переменые подгружаются

Sham 18-05-2010 05:11 1415714

без кавычек это константа
где вызов print_form1?

binders 18-05-2010 05:30 1415721

я конечно извиняюсь но я совсем запутался в етих терминах не силён ( прям как маленький)
что это за константа и с чем её едят
вот выкладываю всю 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;
?>


Sham 18-05-2010 19:15 1416207

Цитата:

Цитата binders
что это за константа и с чем её едят »

rtm
Цитата:

Цитата binders
where username='$user'"); »

$user не обработан? см. mysql_real_escape_string (для всех переменных внутри запросов)


Время: 07:33.

Время: 07:33.
© OSzone.net 2001-