我试过gettext,但我的免费托管不允许它.我想过Zend_translate,但我不想使用框架中的元素,因为我的页面大多是静态的.
所以,我最终得到了这个教程:
http://www.bitrepository.com/php-how-to-add-multi-language-support-to-a-website.html
作者只使用基本的PHP(不确定),它似乎工作,但我不太确定它是否是一个好的(或常见的)练习,或者它是否会在将来引起我的问题(添加和删除一堆码).
这里是:
common.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 'de':
$lang_file = 'lang.es.php';
break;
default:
$lang_file = 'lang.en.php';
}
include_once 'languages/'.$lang_file;
?>
Run Code Online (Sandbox Code Playgroud)
语言/ lang.en.php:
<?php
/*
-----------------
Language: English
-----------------
*/
define('GREETING, Hello World');
?>
Run Code Online (Sandbox Code Playgroud)
语言/ lang.es.php:
<?php
/*
-----------------
Language: Espanol
-----------------
*/
define('GREETING, Hola Mundo');
?>
Run Code Online (Sandbox Code Playgroud)
index.php文件:
include_once 'common.php';
<p><?php echo LANG_TEST; ?></p>
Run Code Online (Sandbox Code Playgroud)
所以,如果我想把它改成西班牙语,我只需添加:?lang=es在URL(之后index.php)
首先,它不适用于您的代码.你必须使用
define('GREETING', 'Hello World').
Run Code Online (Sandbox Code Playgroud)
查看PHP手册以获取定义.
其次,使用含量是一个可怕的想法.你正在乱扔全局命名空间,有大量的常量和风险不变的名字缩写.请参阅Userland命名指南.
如果您不想使用Zend_Translate(您不必使用整个框架)并且无法使用gettext,我建议您使用数组来存储翻译,例如:
$lang = array(
'greeting' => 'Hello World'
'something' => 'else'
);
Run Code Online (Sandbox Code Playgroud)
然后你可以在你的模板中使用它:
<h1><?php echo $lang['greeting'] ?></h1>
Run Code Online (Sandbox Code Playgroud)
这样,您只需要确保$lang在全局范围内尚未定义.
有些人喜欢使用默认语言而不是翻译ID,例如他们更喜欢写作
<h1><?php echo t('Hello World') ?></h1>
Run Code Online (Sandbox Code Playgroud)
其中t将函数映射的输入字符串,以输出字符串.翻译数组必须包含完整的句子然后将这些句子映射到其他语言,例如
$lang = array(
'Hello World' => 'Hola Mundo'
);
Run Code Online (Sandbox Code Playgroud)
但是,当然,您也可以访问它$lang['Hello World'].对于长串而言,它只会变得尴尬.许多翻译函数允许您传递额外的参数,以允许这样的事情:
$lang = array(
'currentTime' => 'The current time is %s'
);
<h1><?php echo t('currentTime', date('H:i:s')) ?></h1>
Run Code Online (Sandbox Code Playgroud)