ExBB Community » » PHP/Perl » Портал на файлах

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

16. Светлана - 14 ноября 2010 — 10:29 - перейти к сообщению
Светлана пишет:
Сделала довольно примитивную, но работающую систему мультиязычности.
Как оказалось, системка работает как часы и у отличного от моего хостера. Всё чётко, без сбоев. Не устраивает только, что блок нужно располагать в каждой странице сайта. Как разместить блок единожды?
17. yura3d - 15 ноября 2010 — 00:59 - перейти к сообщению
Светлана пишет:
Не устраивает только, что блок нужно располагать в каждой странице сайта. Как разместить блок единожды?

Ваш алгоритм мультиязычности - по сути это первая функция будущего ядра Вашего проекта. Чтобы не усложнять всё умными концепциями и фразами, предложу вариант попроще, на котором проще учиться.

Создайте в Вашем проекте папку include, а в ней файл lib.php. Этот файл и будет представлять собой основное ядро Вашего проекта (заумно сказано, на самом деле этот файл будет просто содержать набор функций, которые мы условно назовём ядерными и сам файл - ядром). Почему называется именно "ядро"? Потому что именно оно будет содержать все основные функции, необходимые для работы проекта.

В файле include/lib.php создайте функцию (я назвал её applyLang, Вы можете переименовать):
CODE:
<?php
function applyLang() { // Объявление функции applyLang
global $lng; // Будем работать с массивом $lng в глобальной области видимости
$lang='en';
if (isset($_COOKIE['lang'])) $lang=$_COOKIE['lang'];
if (isset($_POST['lang']))
{
$lang=$_POST['lang'];
setcookie('lang',$lang,mktime(3,0,0,1,1,2015));
}
switch($lang)
{
case 'ru':
require 'lang/russian/all.php';
break;
default:
require 'lang/english/all.php';
break;
}
}
?>

Функция содержит Ваш алгоритм выбора языка (т.е. фактически я добавил всего 2 строки для объявления Ваших строк функцией)
Далее во всех Ваших исполняемых файлах (index.php, partner.php) вместо Вашего алгоритма:
CODE:
$lang='en';
if (isset($_COOKIE['lang'])) $lang=$_COOKIE['lang'];
if (isset($_POST['lang']))
{
$lang=$_POST['lang'];
setcookie('lang',$lang,mktime(3,0,0,1,1,2015));
}
switch($lang)
{
case 'ru':
require 'lang/russian/all.php';
break;
default:
require 'lang/english/all.php';
break;
}

Вам достаточно будет разместить всего 2 строки:
CODE:
include('include/lib.php'); // Подключаем ядро
applyLang(); // Применяем выбранный пользователем язык (all.php)

Для того, чтобы это работало, Вам нужно все языковые строки представить в языковых файлах в виде массива, а не заводить для каждой новой строки новую переменную. Вот пример файла all.php:
CODE:
$lng['boardname'] = 'Чемпионат АВС по трейдингу';
$lng['Chmp_A'] = 'Главная';
$lng['Chmp_B'] = 'Проект';
$lng['Chmp_C'] = 'Партнёры';

Соответственно, обращаться к этим языковым строкам в скриптах и шаблонах Вам нужно будет тоже как к элементам массива. Т.е. вместо $boardname нужно будет писать $lng['boardname']

Постарался ответить максимально доступно. Не знаю, получилось ли Однако
18. Светлана - 15 ноября 2010 — 16:24 - перейти к сообщению
Хм... Однако Радость Мой вариант:

CODE:
function multilang()
{
global $lng;
$lang='en';
if (isset($_COOKIE['lang'])) $lang=$_COOKIE['lang'];
if (isset($_POST['lang']))
{
$lang=$_POST['lang'];
setcookie('lang',$lang,mktime(3,0,0,1,1,2015));
}
switch($lang)
{
case 'ru':
require 'lang/russian/all.php';
break;
default:
require 'lang/english/all.php';
break;
}
...

Но мой вопрос, который я уточнила в личке, касался размещения блока в файле логос. Это возможно?
yura3d пишет:
Постарался ответить максимально доступно. Не знаю, получилось ли
Вполне Улыбка
(Добавление)
Как быть с дополнительными языковыми файлами? Ведь для большого сайта одного файла явно недостаточно. Для каждого из них создавать функцию? Или?

Яндекс.Метрика   

Powered by ExBB
[Script Execution time: 0.0361]     [ ]