2011-06-08 165 views
1

我有一个网站,我想创建其他语言版本。 我不想为每种语言创建文件夹。我想知道它 它可以添加一个组合框在每个页面或主要的一个 ,以便用户可以设置语言,然后使用PHP我会 检查选项并显示正确的版本。任何建议 到达?PHP更改语言版本

回答

0

你的意思是沿着

if ($_GET['language']) { 
    include $_GET['language'] . ".php"; 
} 

,然后线的东西保存在一个PHP文件的语言与存在的名称,或功能取决于你想用它

+2

酷,我得到的,包括我自己喜欢的任何文件: – 2011-06-08 08:52:50

+1

我不会用这个例子作为'由于is'任何文件可以包含 – 2011-06-08 08:55:01

+0

也可以使用后反而使它升技更安全的是更多的psevdo代码然后复制粘贴 – Touchpad 2011-06-08 08:58:47

0

做什么哎为语言版本。 在组合框中有语言。 在会话中维护您当前的语言。 当你改变语言调用ajax调用更改更改语言进入会话并重新加载页面。

显示关于会话存储语言的页面视图。

完蛋了........

3

如果你有一个组合框,当用户提交后,存储在会话(session_start();必须调用)与$_SESSION['lang'] = $_POST['lang'];的语言。我建议你将白名单这样的语言列为白名单:

session_start(); 

// define language whitelist 
$allowedLangs = array('en', 'de'); 

// only store the new user language if it's an allowed one 
if (isset($_POST['lang']) && in_array($_POST['lang'], $allowedLangs)) { 
    $_SESSION['lang'] = $_POST['lang']; 
} 

// define the user language based on session data or use 'en' as default if not available 
$userLang = isset($_SESSION['lang']) ? $_SESSION['lang'] : 'en'; 

// parse some language file according to the language 
$translations = // TODO load some file with $userLang here 

当然,你应该调整它以适应你自己的项目和环境。对于翻译文件,您可以使用返回类似这样的阵列纯PHP文件:如果包括文件

<?php 
// en.php 
return array(
    'some.key' => 'Translation', 
); 

然后的返回值包括是数组,所以在上面的代码中你可以更多信息:

$translations = include 'translations/'.$userLang.'.php'; 

你就必须输出通过这个$translations变量的所有文字,像echo $translations['some.key']

1

如果您想要使用cookies ......在lang文件中,您将包括一系列要使用的单词或内容。

<?php 

    if($_GET['language']){ 
     $lang = (string)$_GET['language']; 
     setcookie("lang", $lang, time()+3600); 
     header('Location: '.$_SERVER['PHP_SELF']); 
     die(); 
    }elseif(!isset($_COOKIE['lang'])){ 
     $lang='en'; 
    }else{$lang=$_COOKIE['lang'];} 

    switch($lang){ 
     case "en": 
      include('./lang/en.php'); 
      break; 
     case "fr": 
      include('./lang/fr.php'); 
      break; 
     case "pol": 
      include('./lang/pol.php'); 
      break; 
     default: 
      include('./lang/en.php'); 
      break; 
    } 
    ?>