【问题标题】:Translate site using session in php使用 php 中的会话翻译网站
【发布时间】:2015-01-07 07:40:06
【问题描述】:

我尝试使用 PHP 翻译我的网站并让它提醒语言,即使用户在页面之间导航并且我无法以我想要的方式进行操作。我想要的方式是使用“语言环境”文件夹。

主文件名为 index.php,其中可以包含以下内容:

<?php
include "locale/en.php";
echo $locale['test'];
?>

..en.php 位于“it.php”、“ro.php”、“fr.php”等附近的“locale”文件夹中。 en.php 文件包含:

<?php
$locale['test'] = "anything";
?> 

现在问题来了。我知道 php 中的“会话”一词,但我不知道如何使这种语法在 PHP 中工作。

session_start();
if user clicks the Italy flag{
translate the site in italian;
}else{ 
if the user click the France flag{
translate the site in french
}else{...

我希望当用户在页面之间导航时以他选择的语言查看内容。可选择将他选择的语言存储在 cookie 中,以便以他想要的语言查看站点,即使第二次、第三次……返回站点也是如此。谢谢,对不起我的语言不好:)

【问题讨论】:

    标签: php locale session-cookies translate


    【解决方案1】:

    一种方法是:

    session_start(); //include this at the top of your page(s)
    
    if(!isset($_SESSION['language'])){
        $_SESSION['language'] = 'en'; // set the default language
        }
    
    if(isset($_GET['setLanguage'])){
        $_SESSION['language'] = $_GET['setLanguage']; //if the user change language
        }
    
    $allowedLanguages = array('en','es');  
    
    if(in_array($_SESSION['language'],$allowedLanguages)){
       include('languages/'.$_SESSION['language'].'.php');
       }
    

    那么语言文件将如下所示:

    en.php:

    $header = '<h1>My header</h1>';
    

    其他语言,例如es.php:

    $header = '<h1>Mi encabezado</h1>';
    

    然后,您在页面上引用变量$header,而不是对文本进行硬编码。 作为语言文件,其中变量的值会根据会话变量所持有的所选语言而变化,因此您的页面内容也会相应地发生变化。

    【讨论】:

    • include 声明严重混乱 =) 将会话变量直接放在包含路径中可能不是最安全的。
    • 操作,你是对的。我纠正了这一点。假设服务器是安全的并且文件夹语言中存在的文件,它应该是安全的。我将添加一组应该被接受的文件,只是为了让它更安全。
    • 基本概念是正确的,但是直接将 $_GET 值填充到 $_SESSION 中,然后在文件系统操作中使用该会话值存在一定的安全风险。没有什么说恶意用户不能填充某些路径信息,你最终会加载languages/../seekrit config dir/passwords.php
    • 好吧,数组 ($allowedLanguages) 在包含文件之前验证会话变量的值应该可以解决问题吗?我想说,如果有人实际上可以将任何文件上传到服务器上的任何文件夹,那么所有者比会话变量更关心;)
    • 非常感谢!但是如何使图像在会话中以正确的语言连接?没有facepalm请..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    相关资源
    最近更新 更多