我的多语言网站只有基本的php(没有zend_translate、gettext等),我将来会有问题吗?
我尝试了我的多语言网站只有基本的php(没有zend_translate、gettext等),我将来会有问题吗?,php,multilingual,Php,Multilingual,我尝试了gettext,但我的免费主机不允许这样做。我考虑过Zend_translate,但我不想使用框架中的元素,因为我的页面大多是静态的 因此,我结束了本教程: 作者只使用基本的php(不确定),它似乎可以工作,但我不确定它是否是一个好的(或常见的)实践,或者它是否会在将来给我带来问题(添加和删除大量代码) 这是: common.php: <?php session_start(); header('Cache-control: private'); // IE 6 FIX if(
gettext
,但我的免费主机不允许这样做。我考虑过Zend_translate,但我不想使用框架中的元素,因为我的页面大多是静态的
因此,我结束了本教程:
作者只使用基本的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;
?>
语言/lang.en.php:
<?php
/*
-----------------
Language: English
-----------------
*/
define('GREETING, Hello World');
?>
<?php
/*
-----------------
Language: Espanol
-----------------
*/
define('GREETING, Hola Mundo');
?>
include_once 'common.php';
<p><?php echo LANG_TEST; ?></p>
语言/lang.es.php:
<?php
/*
-----------------
Language: English
-----------------
*/
define('GREETING, Hello World');
?>
<?php
/*
-----------------
Language: Espanol
-----------------
*/
define('GREETING, Hola Mundo');
?>
include_once 'common.php';
<p><?php echo LANG_TEST; ?></p>
index.php:
<?php
/*
-----------------
Language: English
-----------------
*/
define('GREETING, Hello World');
?>
<?php
/*
-----------------
Language: Espanol
-----------------
*/
define('GREETING, Hola Mundo');
?>
include_once 'common.php';
<p><?php echo LANG_TEST; ?></p>
include_once'common.php';
因此,如果我想把它改成西班牙语,我只需在
URL
中添加:?lang=es
(在index.php
之后)首先,它不适用于您的代码。你必须使用
define('GREETING', 'Hello World').
查看PHP手册以了解更多信息
第二,使用contants是一个可怕的想法。您在全局名称空间中乱扔了大量常量,并有可能导致常量名称冲突。看
如果您不想使用Zend_Translate
(您不必使用整个框架)并且无法使用gettext
,我建议您使用数组来存储翻译,例如:
$lang = array(
'greeting' => 'Hello World'
'something' => 'else'
);
$lang = array(
'currentTime' => 'The current time is %s'
);
<h1><?php echo t('currentTime', date('H:i:s')) ?></h1>
然后,您可以像这样在模板中使用它:
<h1><?php echo $lang['greeting'] ?></h1>
其中,t
将函数映射输入字符串到输出字符串。翻译数组必须包含完整的句子,然后将这些句子映射到其他语言,例如
$lang = array(
'Hello World' => 'Hola Mundo'
);
当然,您也可以使用$lang['Hello World']
访问它。对于长字符串来说,这会变得很尴尬。不过,许多转换函数允许您传入其他参数,以实现以下功能:
$lang = array(
'greeting' => 'Hello World'
'something' => 'else'
);
$lang = array(
'currentTime' => 'The current time is %s'
);
<h1><?php echo t('currentTime', date('H:i:s')) ?></h1>
$lang=array(
“currentTime”=>“当前时间为%s”
);
首先,它不会与您的代码一起工作。你必须使用
define('GREETING', 'Hello World').
查看PHP手册以了解更多信息
第二,使用contants是一个可怕的想法。您在全局名称空间中乱扔了大量常量,并有可能导致常量名称冲突。看
如果您不想使用Zend_Translate
(您不必使用整个框架)并且无法使用gettext
,我建议您使用数组来存储翻译,例如:
$lang = array(
'greeting' => 'Hello World'
'something' => 'else'
);
$lang = array(
'currentTime' => 'The current time is %s'
);
<h1><?php echo t('currentTime', date('H:i:s')) ?></h1>
然后,您可以像这样在模板中使用它:
<h1><?php echo $lang['greeting'] ?></h1>
其中,t
将函数映射输入字符串到输出字符串。翻译数组必须包含完整的句子,然后将这些句子映射到其他语言,例如
$lang = array(
'Hello World' => 'Hola Mundo'
);
当然,您也可以使用$lang['Hello World']
访问它。对于长字符串来说,这会变得很尴尬。不过,许多转换函数允许您传入其他参数,以实现以下功能:
$lang = array(
'greeting' => 'Hello World'
'something' => 'else'
);
$lang = array(
'currentTime' => 'The current time is %s'
);
<h1><?php echo t('currentTime', date('H:i:s')) ?></h1>
$lang=array(
“currentTime”=>“当前时间为%s”
);
+1回答海报上的问题,但也提出了一个好的替代方案。我个人见过很多网站使用函数映射方法,但从来没有使用过define方法。+1感谢非常有用的信息,我会尝试你的建议。你也可以查看php gettext:Wordpress选择了这个解决方案。+1回答了海报上的问题,但也提出了一个很好的替代方案。我个人见过很多网站使用函数映射方法,但从来没有使用过define方法。+1感谢非常有用的信息,我会尝试你的建议。你也可以查看php gettext:Wordpress选择了这个解决方案。+1使用Gordon,但你应该看看Zend_translate。如果愿意,您只能使用Zend_框架的一部分。+1与Gordon一起使用,但您应该看看Zend_translate。如果愿意,您只能使用Zend_框架的一部分。