php - 带有数据库和 PHP 的多语言网站

标签 php html mysql session-variables multilingual

我正在尝试想出一种有效的方法来在我的网站中实现语言选择。

我在右上角有一些标志,单击这些标志时我希望所有文本都更改为所选语言,其中翻译存储在我的数据库中。

我应该在网址中使用如下参数来执行此操作:

www.myside.com?lang=3

我对此遇到的唯一问题是,就我路由网址的方式而言,事情可能会很复杂,而且也不会使网址看起来干净。

更好的方法是将其存储在 session 中,并且仅在语言更改时才从数据库中获取翻译。翻译将保存在 session 数组中,因此如果您明白我的意思,用户就不会在每次页面加载时都访问数据库。

我想知道像下面这样的东西是否是实现我想要的东西的好方法:

    Session::set('langarray', array(
        'id' => $languageId,
        'cake' => $this->model->getLanguagesNavigation('cake', $languageId),
        'login' => $this->model->getLanguagesNavigation('login', $languageId),
        'register' => $this->model->getLanguagesNavigation('register', $languageId),
        'share' => $this->model->getLanguagesNavigation('share', $languageId),
        'galleries' => $this->model->getLanguagesNavigation('galleries', $languageId),
        'decorator' => $this->model->getLanguagesNavigation('decorator', $languageId),
        'find' => $this->model->getLanguagesContent('find', $languageId),
        'headertext' => $this->model->getLanguagesContent('headerText', $languageId),
    ));

    header('Location: ' . $_SERVER['HTTP_REFERER']);

在我看来:

...
public function render($viewFile, $data = NULL) {
    if(!Session::get('langarray'))
    {
        $this->Language = new Language;
        $this->Language->setLanguage(1);
    }
    if (is_array($data)) {
        extract($data);
    }
    include Vs . $viewFile . '.php';
}
...

如果尚未设置 session 变量,即尚未选择语言,则只需将语言设置为 1(英语)即可。

在我的 HTML 中,我只需回显数组中的相应元素即可获取单词:

...
<p><?PHP echo $_SESSION['langarray']['headertext'];?></p>
...

这是一个好方法吗?或者是否有一种在网站中实现语言的标准方法?

<小时/>

我的旧网站目前使用像我提到的那样的 url 方法 (?lang=3),并且外国变体在 SE 中表现得很好。我喜欢使用子域的想法,但是如何让它根据第一个 .在网址中?例如。神父。德。等等

最佳答案

也许我很守旧,但我总是有一个 lang 文件夹,其中包含每种语言的文件(lang.en.php、lang.fr.php、lang.es.php 等)。

在每个文件中我都有一个数组,如下所示:

$langarray = array("login" => "...", "connect" => "...", "logout" => "...");

最终,里面有真正的东西......效果更好:}

然后,根据 $_SESSION 变量,我包含正确的文件。您甚至可以存储“en”并包含 lang.'.$_SESSION['lang'].'.php。

不必为此类事情查询 SQL 似乎稍微好一些,但不太容易维护。我认为这种问题没有人是错的。

关于php - 带有数据库和 PHP 的多语言网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21321462/

相关文章:

php - Yii 将数据库连接限制为只读

javascript - dojo.require() 阻止 Firefox 呈现页面

php - PHP MariaDB sql错误

MySQL - 在多次插入时使用最后插入的 ID

python - 当表中有行时,选择语句返回空列表

php - Twig 中的 preg_match

php - 如何在PHP中显示两个日期和时间之间的差异?

php - 为什么在基本功能上使用 PHP OOP?何时使用?

html - div的格式(响应式)

html - 容器宽度问题