我的php代码需要帮助。我不知道如何改进它。在我的网站上,查看者可以选择波兰语(pl)和英语(en)之间的语言,我想放西班牙语,但我不知道该怎么做。
请帮忙。
<?php
$lang = $_COOKIE['lang'];
if (!is_null($_GET['lang']) && !empty($_GET['lang'])) {
$lang = $_GET['lang'];
}
switch ($lang) {
case 'pl':
setcookie('lang', 'pl');
include('pl.php');
break;
case 'en':
setcookie('lang', 'en');
include('en.php');
break;
case 'es':
setcookie('lang', 'es');
include('es.php');
break;
}
?>
答案 0 :(得分:0)
改进:
<?php
session_start();
$lang = isset($_SESSION['lang']) ? $_SESSION['lang'] : 'en';
if (isset($_GET['lang']) && in_array($_GET['lang'], array('en', 'esp', 'br')))
$_SESSION['lang'] = $lang = $_GET['lang'];
include_once $lang.'.php';
var_dump($_lng['welcome']);
<强> en.php 强>
<?php
$_lng = array(
'welcome' => 'Welcome',
'save' => 'Save',
'cancel' => 'Cancel',
);
<强> br.php 强>
<?php
$_lng = array(
'welcome' => 'Bem-vindo(a)',
'save' => 'Salvar',
'cancel' => 'Cancelar',
);
答案 1 :(得分:0)
这种繁琐和重复的任务是使用框架的原因,但保持简单:
Trans.php
<?php
class Trans
{
public static function translate($key, $language = 'es')
{
$catalog = include __DIR__ . DIRECTORY_SEPARATOR . 'i18n' . DIRECTORY_SEPARATOR . $language . '.php';
return (isset($catalog[$key]))?$catalog[$key]:$key;
}
}
translatable.php
<?php
require 'Trans.php';
$lang = isset($_GET['lang'])?$_GET['lang']:'es';
echo Trans::translate('hello_world_from_cuba', $lang);
i18n / en.php文件如下所示:
<?php
return array(
'hello_world_from_cuba' => "Hello World From Cuba.",
);
I18N / es.php
<?php
return array(
'hello_world_from_cuba' => "Hola Mundo desde Cuba.",
);
使用网络浏览器(http://localhost/translator/translatable.php
)访问translatable.php。
CodeIgniter和Kohana有更复杂的翻译,但上面基本相同......
在你的情况下,你从cookie / session获得语言我从$ _GET获得它但仍在工作......