如何使用PHP会话和Cookie保留语言状态

如何使用PHP会话和Cookie保留语言状态,php,session,cookies,Php,Session,Cookies,我的index.php中有以下内容: 然后我有一些内容 我在file.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 i

我的index.php中有以下内容:

然后我有
一些内容

我在file.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 = 'en';
}

switch ($lang) {
  case 'en':
  $lang_file = 'lang.en.php';
  break;

  case 'de':
  $lang_file = 'lang.de.php';
  break;

  case 'es':
  $lang_file = 'lang.es.php';
  break;

  default:
  $lang_file = 'lang.en.php';

}

include_once 'languages/'.$lang_file;
?>

我有这3个文件,我是说lang.en.php等等

它不工作,我的页面是空的,没有文本,为什么?怎么了

php包含

<?php


$h1 ="HOME";
$h2 ="ABOUT US";
$h3 ="CONTACT";
$h4 ="FAQ";

$txt1 = "Here goes txt,Here goes txt,Here goes txt,Here goes txt,
         Here goes txt,Here goes txt,Here goes txt,Here goes txt,
         Here goes txt, Here goes txt,Here goes txt,Here goes txt.";
?>

我不知道这是怎么回事。。。我应该换什么?
有人能帮我吗。谢谢。

除了一些HTML之外,您没有打印任何内容。要查看lang.en.php文件中字符串的内容,需要使用
echo
语言构造输出它们

<?php
echo $txt1;
?>

当您使用适当的代码结构时,这些问题实际上永远不会发生:缩进控制结构、避风港控制器(逻辑)和视图(表示)。您在一个文件中混合了很多内容,这显然使您和其他人很难阅读和理解代码。即使您使用的是php,也请尽量在编写代码时考虑可读性/可维护性。

session\u start()
需要放在文档的顶部

会话必须在将某些内容发送到浏览器之前启动。

我测试了您的代码(它来自Bitrepository tutprial right:)

好的,
文件.php
应该在
函数.php
中(如果有的话)

我假设您有
index.php
,它从您的语言文件中回显这些变量,如下所示:

echo $h1;

echo $h2;

echo $h3;

echo $txt1;
要更改语言,请参阅您的
文件.php
,它在cases中指定。如果你想学英语:

index.php?lang=en

index.php?lang=de

index.php?lang=es
等等

轻松右键
\(^\u^)/

查看bitrepository以获得更详细的教程。我还建议对语言文件使用
define()

回应:

echo TITLE;

您必须在lang.en.php、lang.ru.php中定义数组

lang.en.php

$lang = array();
$lang["PAGE_TITLE"] = "Some title";
$lang["MENU_HOME"] = "Home";
$lang["HOME_CONTENT"] = "Some content";
lang.ru.php

$lang = array();
$lang["PAGE_TITLE"] = "Russian title";
$lang["MENU_HOME"] = "Russian home";
$lang["HOME_CONTENT"] = "Russian content"; ...
然后,将其输出到页面中

<?php echo $lang["PAGE_HOME"]; ?>
<?php echo $lang["MENU_HOME"]; ?>
<?php echo $lang["HOME_CONTENT"]; ?>


这些lang.en.php文件包含什么?另外,如果打印,
$lang
$lang\u文件
包含哪些内容?切勿使用会话或cookie保留语言状态。但仅使用地址字符串元素。子域(例如en.wikipedia.org)是最好的选择,然后是路径或查询字符串。我在index.php中有它,为什么我在file.php中需要它?如果你在index.php中有它,你在file.php中不需要它。您发布的代码正常工作,因此它表明index.php可能存在问题。你能发布你的index.php文件吗?
$lang = array();
$lang["PAGE_TITLE"] = "Russian title";
$lang["MENU_HOME"] = "Russian home";
$lang["HOME_CONTENT"] = "Russian content"; ...
<?php echo $lang["PAGE_HOME"]; ?>
<?php echo $lang["MENU_HOME"]; ?>
<?php echo $lang["HOME_CONTENT"]; ?>