使用PHP更改语言

时间:2013-11-07 20:08:47

标签: php internationalization

我的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;
}
?>

2 个答案:

答案 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)

这种繁琐和重复的任务是使用框架的原因,但保持简单:

Directory structure

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获得它但仍在工作......