0

索引.php

<?php include_once 'lang.php'; ?>

语言.php

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX
if (isSet($_GET['lang'])) {
    $lang = $_GET['lang'];
    // register the session and set the cookie
    $_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 'pl':
        $lang_file = 'lang.pl.php';
        break;
}
include_once 'languages/' . $lang_file;
?>

在里面lang.en.phplang.pl.php我有包含内容的数组。

第一次打开网站时,我收到两个警告:

警告:include_once(languages/) [function.include-once]:无法打开流:第 37 行的 blah/blah/blah/lang.php 中没有此类文件或目录

警告:include_once() [function.include]: 未能在 blah/blah/blah/ 中打开 'languages/' 以包含 (include_path='.:/usr/local/lib/php-5.2.17/lib/php')第 37 行的 lang.php

然后,当我在网页上选择一种语言时,变量“lang”在 url 中传递(例如index.php?lang=en)一切正常。如何解决?

4

2 回答 2

1

如果您没有定义语言,它会尝试加载“语言/”(一个目录)。您的 switch 语句中应该有一个默认值。如果您希望默认语言为“en”,例如:

switch ($lang) {
  case 'pl':
  $lang_file = 'lang.pl.php';
  break;
  default: // en will fall here, too
  $lang_file = 'lang.en.php';
  break;
}

否则$lang_file是未定义的,当然会无法加载。

于 2012-04-24T14:56:21.020 回答
0

也许只是添加一个default部分switch

switch($lang){
  case 'en':
    $lang_file='lang.en.php';
    break;
  case 'pl':
    $lang_file='lang.pl.php';
    break;
  default:
    // This will set a default language file.
    $lang_file='lang.en.php';
}
include_once 'languages/'.$lang_file;

这一次,当$lang未设置为'en''pl'时,开关将返回设置$lang_filelang.en.php。但是,如果您想pl默认设置,您可以更改它。

于 2012-04-24T14:57:50.440 回答