Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Пишу свой двиг


Рекомендуемые сообщения

Всем привет!

Хочу написать новый движок для сайта своего. Нужна многоязыковая поддержка, но использование БД не желательно, лучше на файлах. Но вот как реализовать не знаю. Подскажите, пожалуйста, идею.

Ссылка на комментарий
Поделиться на другие сайты

Итак, у нас есть папка с языками languages в ней лежат папки, эти папки и есть контейнеры для наших языков, к примеру возьмем такую структуру: languages/russian,languages/english.

На сайте должна быть форма для выбора языка, сделай в виде вып. списка используя SELECT, POST параметр с выбранным языком завется $_POST['language'], после того, как юзер выбрал язык для себя, создаем куку на винте у юзера с именем $_COOKIE['language'], таким образом - setcookie ("language",$_POST['language']);, если юзер отметил галочку запомнить, обрабатываем условие (галочка у нас с именем $_POST['save']), проверяем условие:

if ($_POST['save']) стаим куку и прибавляем время

else просто ставим куку без времени (делаем сессионную куку)

Итак, с выбором разобрались, после этого, надо перегрузить страничу, лучше header'ом если возможности нет можно meta или location.href.

Для определения языка к опред. юзеру нужно в начале твоего скрипта проверять условие:

if (!empty ($_COOKIE['language'])) $lng = $_COOKIE['language'];

// И тут инклюдим все тексты, в соответствии с выбранным юзером языком

require_once "languages/$lng/main.lng"; // Например так

Вот и все, далее юзай переменные/массивы из main.lng или назови по своему.

Тебе остается доделать выбор языка для юзера, проверяем условием, например так:

echo <<< SKIN<select name=language><optgroup label="Выберите язык">SKIN;$d = opendir ('languages');while ($f = readdir ($d)) {if ( $f != "." && $f != ".." && is_dir ("languages/$f") && is_file ("languages/$f/main.lng") && filesize ("languages/$f/main.lng") != "0" && $f != $deflang && $f != $_COOKIE['language']) {echo "<option>$f\r\n";}echo <<< SKIN</select>SKIN;

Как ты заметил, есть переменная $deflang, это язык, выбранный по-умолчанию, еще перед скриптом помещаем следующую конструкцию:

(в директории language создаем фаил lang - это язык загр. по-умол, если нет кукиса language)

$f = file ("languages/lang");

$deflang = $f[0];

в lang всего одна строчка - язык, который должен быть по-умолчанию

Изменено пользователем Dimon#ic
Ссылка на комментарий
Поделиться на другие сайты

Я немного не так думал... Я планировал передавать скрипту через командную строку язык и страничку которую надо открыть... Вот подумал, что может проще сделать действительно два файла, для русского и английского языка?

Ссылка на комментарий
Поделиться на другие сайты

Я немного не так думал... Я планировал передавать скрипту через командную строку язык и страничку которую надо открыть... Вот подумал, что может проще сделать действительно два файла, для русского и английского языка?

gvozd: Если нужно чтобы язык передовался в командной строке, то используй что-то типа $_GET['lang'] вместо $_POST['language']

И если у тебя весь язык в одном файле, то можно использовать структуру languages/russian.lng , languages/english.lng думаю переделать код данный Dimon#ic у тебя не составит проблем.

$f = file ("languages/lang");

$deflang = $f[0];

в lang всего одна строчка - язык, который должен быть по-умолчанию

Dimon#ic: если в файле всего одна строка, то лучше использовать $deflang = file_get_contents("languages/lang");

Функция file_get_contents() вотличии от file() не разбивает фаил в массив, а возвращает весь фаил одной строкой, да и работает чуток шустрее

Ссылка на комментарий
Поделиться на другие сайты

Я немного не так думал... Я планировал передавать скрипту через командную строку язык и страничку которую надо открыть... Вот подумал, что может проще сделать действительно два файла, для русского и английского языка?

Да, то что я описал - наиболее оптимальный вариант + некоторая доработка с твоей стороны.

Передавать гет параметром - это как то не рентабельно ;)

Можно сделать с использованием БД, но как ты отметил - не желательно, да и в принципе необходимости в лишних операциях с БД нет.

Если что-то не понятно можешь смело спрашивать тут или в личку! =)

Ссылка на комментарий
Поделиться на другие сайты

Да вот собственно вся проблема в том, как загрузить один из вариантов текста, если они, например, находятся в одном файле... И еще как узнать, что скрипту ничего не передается?

Dimon#ic

А у тебя аська есть?

Ссылка на комментарий
Поделиться на другие сайты

Да вот собственно вся проблема в том, как загрузить один из вариантов текста, если они, например, находятся в одном файле... И еще как узнать, что скрипту ничего не передается?

gvozd: Тебе обязательно чтоб все языки были в одном файле? Хотя это и не очень удобно, но я реализую всё:

Будет один фаил с языками, назовём lang.php:

<?php$lang = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : (isset($_GET['lang']) ? $_GET['lang'] : "ru");switch($lang) {case "en": //тут переменные для английского языкаbreak;case "ru":default: $lang = "ru"; //тут теже переменные для русского языкаbreak;}setcookie('lang', $lang, time() + 3600 * 24 * 30, "/");?>

Далее файл в который у нас осуществляется вывод (обычно это index.php):

<?phpinclude "./lang.php"; // это должно быть гдето вверху, и до любого вывода в браузер// далее твой код?>

Где нибудь на странице, нужно предложить выбор языка:

<?php if($lang == "ru") {?><a href="?lang=en">english version</a><?php } else {?><a href="?lang=ru">русская версия</a><?php }?>
Ссылка на комментарий
Поделиться на другие сайты

Я делал примерно так же на include, но на PHP5 не работает. :bye1: Наверное лучше сделать так: eng_article, rus_article. Как Вы считаете?

Ссылка на комментарий
Поделиться на другие сайты

Я делал примерно так же на include, но на PHP5 не работает. :blink: Наверное лучше сделать так: eng_article, rus_article. Как Вы считаете?

Разницы нет, PHP 5 полностью совместим и с 4 и с 3 частично так, что дело не в коде :g:

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

И чево бросили? :blush2: Если бедит желание продолжать, то я могу присоединится. Могу помещать тут какойнить код один или два раза в неделю, только надо распределить участки работы. Больше пасусь на сайте интернеттехнологий http://www.internet-technologies.ru/.

Ссылка на комментарий
Поделиться на другие сайты

Не, разработка продолжается, последнюю версию можно лицезреть тут: http://www.gvozdsoft.com/gsn/

Сайт-то не работает. :)

Что-то непонятно как нам координироваться. :)

Ссылка на комментарий
Поделиться на другие сайты

gvozd давай через аську разговаривать. У тебя она отключена была, но я тебе отправил запрос.

Короче, счас пока время есть хочу поучаствовать. У тебя что проект комерческий?

Ссылка на комментарий
Поделиться на другие сайты

Двиг я вообще пишу для себя (не на продажу). Уже все, что было нужно написал. Так что не знаю какое участие ты хочешь принять. :mad:

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...