我的多语言网站只有基本的php(没有zend_translate,gettext等...)将来我会遇到什么问题?

时间:2010-02-19 17:35:03

标签: php multilingual

我试过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;
?>

语言/ lang.en.php:

<?php
/* 
-----------------
Language: English
-----------------
*/

define('GREETING, Hello World');
?>

语言/ lang.es.php:

<?php
/* 
-----------------
Language: Espanol
-----------------
*/

define('GREETING, Hola Mundo');
?>

的index.php:

include_once 'common.php';
<p><?php echo LANG_TEST; ?></p>

所以,如果我想将其更改为西班牙语,我只需在?lang=esURL之后)

中添加:index.php

1 个答案:

答案 0 :(得分:7)

首先,它不适用于您的代码。你必须使用

define('GREETING', 'Hello World').

查看define的PHP手册。

其次,使用含量是一个可怕的想法。你正在乱扔全局命名空间,有大量的常量和风险不变的名字缩写。请参阅Userland Naming Guide

如果您不想使用Zend_Translate(您不必使用整个框架)并且不能使用gettext,我建议您使用数组来存储翻译,例如像这样的东西:

$lang = array(
    'greeting'  => 'Hello World'
    'something' => 'else'
);

然后您可以在模板中使用它:

<h1><?php echo $lang['greeting'] ?></h1>

这样,您只需要确保$lang尚未在全局范围内定义。

有些人更喜欢使用默认语言而不是翻译ID,例如他们更喜欢写

<h1><?php echo t('Hello World') ?></h1>

其中t将输入字符串映射到输出字符串。翻译数组必须包含完整的句子,然后将这些句子映射到其他语言,例如

$lang = array(
    'Hello World' => 'Hola Mundo'
);

但当然,你也可以通过$lang['Hello World']访问它。对于长串而言,它只会变得尴尬。许多翻译功能允许你传递额外的参数,以允许这样的事情:

$lang = array(
    'currentTime' => 'The current time is %s'
);

<h1><?php echo t('currentTime', date('H:i:s')) ?></h1>