的index.php
<?php include_once 'lang.php'; ?>
lang.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.php
和lang.pl.php
中,我有包含内容的数组。
首次打开网站时,我收到两条警告:
警告:include_once(languages /)[function.include-once]:无法打开流:第37行的blah / blah / blah / lang.php中没有这样的文件或目录
警告:include_once()[function.include]:无法打开包含的'languages /'(include_path ='。:/ usr / local / lib / php-5.2.17 / lib / php')in blah / blah第37行/blah/lang.php
然后,当我在网页上选择一种语言,并在网址中传递变量“lang”(例如index.php?lang=en
)时,一切正常。如何解决?
答案 0 :(得分:1)
如果您没有定义语言,它会尝试加载“languages /”(目录)。您的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
未定义,当然无法加载。
答案 1 :(得分: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_file
设置为lang.en.php
。但是,如果您希望默认设置pl
,则可以更改它。