Помогни ни да направим Uroci.net по - богат! Добави урок

Смяна на езика в страницата чрез сесия

PHP » PHP
mafia605   трудност:    видян: 9804

В този урок ще покажа как да направите страницата си на повече от 1 език чрез сесия.
Първо ще създадем файла settings.php, който съдържа всички функции.
Ето и кода на файла settings.php:
------------------------------------------
<?php

// тази функция проверява дали съществува сесията 'lang' и ако съществува според това дали е bg, empty или en да
// инклудва файла за съответния език
function language() {
if(empty($_SESSION['lang']))
{
include('en.php');
}
elseif($_SESSION['lang'] == "en")
{
include('en.php');
}
elseif($_SESSION['lang'] == "bg")
{
include('bg.php');
}
}

// тази функция проверява съдържанието на сесията 'lang' и показва езика в момента и бутон за смяната му
function disp_language() {
if(empty($_SESSION['lang']))
{
echo '<a xhref=index.php?lang=bg>bg</a> en';
}
elseif($_SESSION['lang'] == "en")
{
echo '<a xhref=index.php?lang=bg>bg</a> en';
}
elseif($_SESSION['lang'] == "bg")
{
echo 'bg <a xhref=index.php?lang=en>en</a>';
}
}

// Това е функцията за хедъра на index.php

function disp_header(){
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<? echo CHARSET; ?>">
<title>fgdgfghf</title>
</head>
<body>
<?
}

// Това е функцията за футъра на index.php
function footer() {
echo '
</body>
</html>';
}
?>

---------------------------------------------

След като сме създали файла с функцийте settings.php сега ще създадем файловете с езика, които са en.php и bg.php
Сега ще покажа каква е структурата на файловете. Ще покажа и за двата файла en.php и bg.php.
Ето и файла en.php, където в конструкцията define("HEADER", 'Lesson made for uroci.net'); HEADER e името чрез което ще показвате текста, който сте задали в единичните кавички:

---------------------------------

<?php
define("CHARSET", 'iso-8859-1');
// Tekstovoto suobshtenie
define("HEADER", 'Lesson made for uroci.net');
?>

--------------------------

Ето и кода на файла bg.php:

----------------------------

<?php
define("CHARSET", 'windows-1251');
// Tekstovoto suobshtenie
define("HEADER", 'Урока е направен за uroci.net');
?>

-------------------------------

Остана да създадем файла index.php, на който ще изкараме съобщението
HEADER и бутони за смяна на езика. Ето как ще стане това, кода на файла index.php:

--------------------------------------

<?php
session_start();

// Инклудваме файла settings.php, който сме направили с всички функции
include('settings.php');

// Проверяваме дали е натиснато бутончето за смяна на езика или е влузнато за първи път
if(empty($_GET['lang']))
{
}
elseif($_GET['lang'] == "bg")
{
if($_SESSION['lang'] = "en")
{
unset($_SESSION['lang']);
$_SESSION['lang'] = "bg";
}
}
elseif($_GET['lang'] == "en")
{
if($_SESSION['lang'] = "bg")
{
unset($_SESSION['lang']);
$_SESSION['lang'] = "en";
}
}

// Показваме функцията language() от файла settings.php, която провурава сесията 'lang' и инклудва съответния файл
// с езика


language();

// Показваме функцията disp_header() от файла settings.php, която съдържа шапката на index.php

disp_header();

// Показваме функцията disp_language() от файла settings.php, която съдържа бутоните за смяна на езика


disp_language();

// Тук показваме текста от HEADER, който сме задали в файловете за езика

echo '<br><div align="center">';
echo HEADER;
echo '</div>';

// Функцията footer() съдържа футера на файла index.php

footer();
?>

------------------------------

Това е всичко. По този шаблон можете да добавите още езици освен показаните 2 в този урок. Надявам се да съм бил от полза!

автор: mafia605




Коментари (15)

jooorooo на 18.12 2006 в 20:29ч.
не съм проучил ф-ията language() и реших да го пробвам. мо ми дажа грешка на settings.php на 55-ти ред, демек ?>
jooorooo на 18.12 2006 в 20:33ч.
Parse error: syntax error, unexpected $end in D:10.12.2006news systemstestovasettings.php on line 55
mafia605 на 18.12 2006 в 22:33ч.
Сега видях че съм сложил без да искам по едно х пред href в функцията disp_language(). А колкото до функцията language(), няма проблем, кажи кво ти дава.
jooorooo на 18.12 2006 в 22:55ч.
прочетох на бързо за функцията и се оправих. в settings.php това трябва да е защото не вади резултат
jooorooo на 18.12 2006 в 23:45ч.
не го изкара системата? в сетингс.пхп не трябва да е а трябва да е
jooorooo на 18.12 2006 в 23:45ч.
? echo чарсет трябва да стане
charmed на 16.01 2007 в 09:46ч.
Това не сменя нищо освен кодировката на сайта, а езика си остава същият.
valant на 01.06 2007 в 19:20ч.
Как да направя така, че страницата ми да се зарежда на en, a не на bg?
dobritu на 11.08 2007 в 20:04ч.
При мен всичко си върви , само че смених това :
echo 'bg en';
}
elseif($_SESSION['lang'] == "en")
{
echo 'bg en';
}
elseif($_SESSION['lang'] == "bg")
{
echo 'bg en';

с това :

echo 'bg en';
}
elseif($_SESSION['lang'] == "en")
{
echo 'bg en';
}
elseif($_SESSION['lang'] == "bg")
{
echo 'bg en';

Просто бяха объркани и не излизаше като линк, иначе всичко си работи сменя си езика и не само charset сменя целия език :-)
azerot на 17.07 2008 в 17:39ч.
яко е, че може да си направиш темплейт доста лесно :)
ivanbratanov на 12.08 2008 в 12:53ч.
КАКВО ТРЯБВА ДА ПРОМЕНЯ В ТОВА ЗА ДА ДОБАВЯ ОЩЕ ЕДИН ЕЗИК?

// Проверяваме дали е натиснато бутончето за смяна на езика или е влузнато за първи път
if(empty($_GET['lang']))
{
}
elseif($_GET['lang'] == "bg")
{
if($_SESSION['lang'] = "en")
{
unset($_SESSION['lang']);
$_SESSION['lang'] = "bg";
}
}
elseif($_GET['lang'] == "en")
{
if($_SESSION['lang'] = "bg")
{
unset($_SESSION['lang']);
$_SESSION['lang'] = "en";
}
}
Avalanche на 11.03 2010 в 17:05ч.
Интересен урок, но бих желал да знам как мога да използвам това за повече от една страница, тъй като тук е описано само за индекса. Аз опитвах да слагам променливи, но нещо не се получи...
AgMuH на 29.09 2010 в 13:44ч.
Само докато чета функцията и мога да ти кажа че няма да работи коректно на 2 страни :D
Защо изобщо позволяват на невръстни да пишат уроци. Остави правописните грешки. Я ми кажи как проверяваш променлива която НЕ съществува дали е empty (... if(empty($_GET['lang'])) ...) :D По правилно е да я провериш първо дали е инициализирана с if($_GET['lang']) и ако върне false значи има някакъв проблем и да препрати потребителя да избере някакъв език или просто да покаже че самата функция не работи. На никого и не си казал че за да работи нормално функцията трябва във всяко URL да пренасяш $lang (&lang=en примерно) за да не се занулява езика при отваряне на друга страница. Също кода който си написал е цял роман защо при всички промени в съдържанието на $_SESSION['lang'] първо я unset-ваш и след това я създаваш отново? Няма да се получи array ако директно и присвоиш новото съдържание.
В момента всичкия този код работи само на една страница, а кой луд прави само една страница, за която на дапише толкова допълнителен код при положение че може да си я направи на два файла български и англлийски. Ако някой, пък, реши да ти използва функцията за много страници (повече от една) така както си я написал трябва да си едитне всички линкове един по един (в моя сайт има над 7 000) или да си търси функция която автоматично да му добавя в линковете &lang= .. Съветвам те да си преправиш урока и освен това да дадеш достатъчно начални обяснения на потребителите как да си го интегрират. Да напишеш и кои са плюсовете, и минусите на скрипта за да може ако ти не си им измислил решение те да си потърсят някъде из нета ... А не изцопват го някъде из останалия код и после милион въпроси, на които сам неможеш да отговориш. Приеми критиката ми градивно а не като заядлива. Поздрави!
AgMuH на 29.09 2010 в 19:02ч.
Променете settings.php така:



И от примера за на mafia605 за index.php премахнете това:

// Проверяваме дали е натиснато бутончето за смяна на езика или е влузнато за първи път
if(empty($_GET['lang']))
{
}
elseif($_GET['lang'] == "bg")
{
if($_SESSION['lang'] = "en")
{
unset($_SESSION['lang']);
$_SESSION['lang'] = "bg";
}
}
elseif($_GET['lang'] == "en")
{
if($_SESSION['lang'] = "bg")
{
unset($_SESSION['lang']);
$_SESSION['lang'] = "en";
}
}


За ваше удобство съм добавил и трети език - Немски (de)
AgMuH на 30.09 2010 в 00:33ч.
// Проверяваме дали е натиснато бутончето за смяна на езика или е влузнато за първи път
if(isset($_GET['lang']) && !empty($_GET['lang'])){

if($_GET['lang'] == "bg"){

$_SESSION['lang'] = "bg";

} elseif($_GET['lang'] == "de"){

$_SESSION['lang'] = "de";

} elseif($_GET['lang'] == "en"){

$_SESSION['lang'] = "en";

}

} else {

// Do nothing

}

// тази функция проверява дали съществува сесията 'lang' и ако съществува според това дали е bg, empty или en да
// инклудва файла за съответния език
function language() {

if(isset($_SESSION['lang']) && !empty($_SESSION['lang'])){

if($_SESSION['lang'] == "en"){
include('en.php');
} elseif($_SESSION['lang'] == "bg"){
include('bg.php');
} elseif($_SESSION['lang'] == "de"){
include('de.php');
}
} else {
include ('bg.php');
}

}

// тази функция проверява съдържанието на сесията 'lang' и показва езика в момента и бутон за смяната му
function disp_language() {
if(!isset($_SESSION['lang']) || empty($_SESSION['lang']))
{
echo 'bg en de';
}
elseif($_SESSION['lang'] == "en")
{
echo 'bg en de';
}
elseif($_SESSION['lang'] == "bg")
{
echo 'bg en de';
}
elseif($_SESSION['lang'] == "de")
{
echo 'bg en de';
}
}

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com