我正在尝试想出一种有效的方法来在我的网站中实现语言选择。
我在右上角有一些标志,单击这些标志时我希望所有文本都更改为所选语言,其中翻译存储在我的数据库中。
我应该在网址中使用如下参数来执行此操作:
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/