Пожалуйста, извините за мои знания английского языка.
У меня есть домашняя страница с языковым обменом в следующем включенном common.php
<?php
session_start();
header('Cache-control: private');
if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];
$_SESSION['lang'] = $lang;
setcookie('lang', $lang, time() + (3600 * 24 * 30));
} else if(isSet($_SESSION['lang'])) {
$lang = $_SESSION['lang'];
} else if(isSet($_COOKIE['lang'])) {
$lang = $_COOKIE['lang'];
} else {
$lang = 'de';
}
switch ($lang) {
case 'en': $lang_file = 'lang.en.php'; break;
case 'de': $lang_file = 'lang.de.php'; break;
case 'ru': $lang_file = 'lang.ru.php'; break;
case 'fr': $lang_file = 'lang.fr.php'; break;
default: $lang_file = 'lang.de.php';
}
include_once 'lang/'.$lang_file;
?>
Теперь я хотел бы внедрить на своем веб-сайте мини-блог с плоскими файлами и использовать следующий код
<?php
define("DEFAULT_LANGUAGE", "lang=de");
session_start();
$languages = ["de", "en", "fr", "ru"];
if( isset($_GET["lang"]) ){ $lang = filter_input(INPUT_GET, "lang", FILTER_SANITIZE_STRING);
if( !in_array($lang, $languages) ){ $lang = DEFAULT_LANGUAGE; }
$_SESSION["language"] = $lang;
}
function get_lang() { return isset($_SESSION["language"]) ? $_SESSION["language"] : DEFAULT_LANGUAGE; }
function get_post_names() {
static $_cache = [];
if(empty($_cache)){ $_cache = array_reverse(glob(__DIR__ . '/posts/' . get_lang() . '/*.php')); }
return $_cache;
}
function print_posts() { $paths = get_post_names();
foreach( $paths as $path ){ $content = file_get_contents($path);
echo "<div class='post'>\n";
echo "<p>{$content}</p>\n";
echo "</div>\n\n";
}
}
?>
<?php print_posts(); ?>
Для постов блога есть папка [posts], в которой находятся подпапки (de, en, fr, ru). В этих подпапках есть, в зависимости от языка, например: «examplepost.php», в чьи записи блога были написаны.
Выбор языка работает без проблем. Но я хочу, чтобы, когда пользователь выбирал другой язык, блог автоматически считывал голосовую соответствующую папку блога и содержащую выходные файлы.
Проблема в том, что есть две сессии. Это приводит к ошибкам! Мой вопрос будет таким: как я могу объединить все вместе в сеансе или как я могу соединить две сессии без конфликтов, чтобы он работал как (язык сайта и вывод файлов в папках посетителей, выбранный язык для Сообщения блога).
Большое спасибо всем заранее за вашу помощь и предложения! Приветствие
Вам не нужно два сеанса для хранения одной и той же переменной ($ lang).
Что вы можете сделать, это что-то вроде этого:
session_start();
// check/set default language session
if (!isset($_SESSION["language"])) {
$_SESSION["language"] = DEFAULT_LANGUAGE;
}
if ($isset($_GET['lang']) && in_array($_GET['lang'], $languages) ){
$_SESSION["language"] = $_GET['lang'];
}
// execute more code
$lang_file = 'lang.'.$_SESSION["language"].'.php';
include_once 'lang/'.$lang_file;
Эндрю
Я думаю, что я выразил себя неправильно.
Common.php для языкового обмена отвечает и должен быть сохранен. Мне просто нужна функция в common.php, которые являются теми же функциями, что и в другом упомянутом скрипте. Должно быть возможно, что …
Структура
[root]
|_ acp ........ admin-center
|_ css ........ css styles
|_ img ........ graphics
|_ inc ........ includes files
|_ func ....... function files (i.e. common.php)
|_ js ......... js files
|_ lang ....... language files
|_ posts ...... for the Blog Postings
|_ [de] [en] [fr] [ru]
В последних папках находятся файлы .php, которые в зависимости от выбора языка были выбраны через common.php одновременно с common.php, а также файлы из папки [posts] блога и отображены для чтения.
Вкратце … 1) в зависимости от языка перенаправления языкового файла — И — 2) в дополнение к подпапке папки [posts] и содержащимся файлам для чтения и содержимому выходных файлов.