【问题标题】:multilingual web: php + mysql + cookies多语言网页:php + mysql + cookies
【发布时间】:2013-09-27 15:01:34
【问题描述】:

我用 php 和 mysql 编写了一个多语言网站。 现在我遇到了问题(主要是机器人、seo 和搜索引擎) 因为语言选择器基于 cookies

现在如何工作:用户 => index.php:

function cookies() {
 if (!isset($_COOKIE["lang"])){
 setcookie('lang','ukr', time()+(60*60*24*31)); 
 header('Location: index.php');  
}};

并将所选语言输出到该功能所需的每个位置:

function catSet($source, $link, $item){
 $item .= '_'. $_COOKIE['lang'];
 global $connection;
 $link = mysqli_real_escape_string($connection, $link);
 $result = mysqli_query($connection, "SELECT * FROM  $source WHERE link_item = '". $link ."'");
if (!$result) { die("DB Query failed: " . mysql_error()); }
while ($row = mysqli_fetch_array ($result)) {
 echo $row[$item]; }}

我现在想要的是将$item .= '_'. $_COOKIE['lang']; 替换为 constant 基于机器人和搜索引擎可以读取的用户选择,所以它必须不是 饼干

我不想使用会话,因为这样用户每次会话到期后都必须重新选择语言。

AFAIK 无法检测浏览器语言,将其设置为默认值。

我看到了一种使用 [GET] 变量的方法,并且每次都将其传递给其他页面,但是如果用户下次回来,如何存储此 [GET] 数据(与会话相同的问题)。

我将不胜感激任何想法和解决方案 :)

【问题讨论】:

    标签: php mysql session cookies multilingual


    【解决方案1】:

    您仍然可以使用 cookie 来保存用户决策。当用户在 url (GET) 中没有语言访问您的网站但获得了所选语言的 cookie 时,将他重定向到带有选择的 url。

    它允许您使用给定语言的地址,还允许用户复制/粘贴他当前的 URL,这将始终引导他到他的语言版本。

    【讨论】:

    • 这样我每次都必须对(!isset($_COOKIE["lang"]))进行if/else检查。用户第一次来到页面,假设默认 lang='eng',如果用户更改 lang,下次我会读取 cookie 并将他选择的 lang 还给他。但!机器人不使用 cookie,这意味着他们总是只能看到一个=默认语言?!
    • @A1exandr 就像我说的,当设置了 get 中的值时重定向用户并忽略 cookie。同样在网页上的所有链接中使用 get 变量。例如。当传入链接有 lang=en 时,网站上的每个链接都会添加该 lang=en。
    • 我理解你。但是如果 get 中的值设置为默认值怎么办。机器人会通过其他语言爬行吗?!
    • @A1exandr 不,就像在其他所有情况下一样,您必须提供每种语言的网址,例如。在站点顶部,带有允许用户更改语言的标志。此链接还将允许机器人查找其他语言。使用所有版本创建站点地图也是个好主意。
    • 好的!目前我会坚持这个决定: if (!isset($_COOKIE["lang"])){ global $lang; $lang = "ukr"; }else{ setcookie('lang','ukr', time()+(60*60*24*31)); $lang = $_COOKIE["lang"]; };
    【解决方案2】:

    对于本地化,您可以使用 PHP 的 gettext 扩展名,它使用 .po 和 .mo 文件格式进行内容翻译。这也将解决SEO的问题。所有内容以对象的形式加载到服务器的内存中,并根据请求的语言在浏览器上查看。 更多详情read here

    【讨论】:

    • 好的,这是一个选项,但是我可以使用 webAdministration 面板编辑 mysql,我不确定编辑 PO 文件是否会那么容易。
    • @ElonThan - 绝对 SEO 完全是另一个问题,但就我而言,我需要机器人一开始就看到所有语言。
    • @A1exandr 我们可以通过 POEDIT 或文本编辑器轻松编辑 .po 文件,然后将其转换为 .mo 加载到内存中。
    • @PraveenDeshmukh 好的,谢谢,我会学习这个问题。用户选择的语言是如何存储的?
    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2018-03-14
    • 2015-01-05
    • 1970-01-01
    相关资源
    最近更新 更多