我正在为多语言网站做一个简单的例子,我在一个独特的php文件中将所有不同的文本值保存在一个数组中。
<?php include_once 'common.php';?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title><?php echo $lang['PAGE_TITLE']; ?></title>
</head>
<body>
<div>
<h1><?php echo $lang['HEADER_TITLE']; ?></h1>
<h3><?php echo $lang['SLOGAN']; ?></h3>
</div>
<form name="lang" id="languages" method="post" action="">
Language:
<select name="lang" onchange="document.lang.submit()">
<option value="pt" <?php if($lng=="pt"){echo'selected';}?>>Português</option>
<option value="en" <?php if($lng=="en"){echo'selected';}?>>English</option>
<option value="es" <?php if($lng=="es"){echo'selected';}?>>Español</option>
</select>
</form>
</body>
</html>
这是common.php
<?php
session_start();
header('Cache-control: private'); // IE 6 FIX
if(isSet($_POST['lang']))
{
$lng = $_POST['lang'];
// register the session and set the cookie
$_SESSION['lang'] = $lng;
setcookie("lang", $lng, time() + (3600 * 24 * 30));
}
else if(isset($_SESSION['lang']))
{
$lng = $_SESSION['lang'];
}
else if(isset($_COOKIE['lang']))
{
$lng = $_COOKIE['lang'];
}
else
{
$lng = 'pt';
}
switch ($lng) {
case 'pt':
$lang_file = 'lang.pt.php';
break;
case 'en':
$lang_file = 'lang.en.php';
break;
case 'es':
$lang_file = 'lang.es.php';
break;
default:
$lang_file = 'lang.pt.php';
}
include_once 'languages/'.$lang_file;
?>
这是一个laguage文件(带有特殊字符)。
<?php
$lang = array();
$lang['PAGE_TITLE'] = 'Primeiro Website Multílingua';
$lang['HEADER_TITLE'] = 'Primeiro Website Multílingua';
$lang['SITE_NAME'] = 'Primeiro Website Multílingua';
$lang['SLOGAN'] = 'Escolhe a tua língua';
?>
基本上字符集/编码不能用作UTF-8 我已经尝试过使用http header()请求,我认为这可能是因为文件在元标记之前被调用,但是仍然没有。