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

ale*_*nco 1 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;
?>
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=esURL(之后index.php)

Gor*_*don 7

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

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)