我的多语言网站只有基本的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_框架的一部分。