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

时间:2010-01-16 16:37:15

标签: php session cookies

我在index.php中有这个:

<?php include_once 'file.php' ?> 然后我有<html> some content </html>

我在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等等......

它不起作用,我的页面是空的,没有文字,为什么?怎么了?

lang.en.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.";
?>

我不知道这有什么问题......我应该改变什么? 有人能帮我吗。感谢。

5 个答案:

答案 0 :(得分:1)

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

<?php
echo $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.

答案 1 :(得分:0)

当您使用正确的代码结构时,这些问题实际上永远不会发生:缩进控制结构,避难所控制器(逻辑)和视图(演示)。你在一个文件中混合了很多东西,这使你和其他人很难阅读和理解代码。请尝试编写可读性/可维护性的代码,即使您使用的是php。

答案 2 :(得分:0)

我测试了你的代码(它来自Bitrepository tutprial吧:)

好的,file.php应该在你的function.php中,如果有的话。{/ p>

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

echo $h1;

echo $h2;

echo $h3;

echo $txt1;

要更改语言,请参阅案例中指定的file.php。如果你想要英语:

index.php?lang=en

index.php?lang=de

index.php?lang=es

等等。

轻松右\(^_^)/

检查bitrepository以获取更详细的教程。我还建议您使用define()作为语言文件。

离。

define('TITLE', 'This is the title')

回应:

echo TITLE;

答案 3 :(得分:0)

您必须在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"]; ?>

答案 4 :(得分:-1)

session_start()需要位于文档的顶部。

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