如何在本地化站点的不同页面上保持语言?

时间:2019-02-07 06:59:42

标签: php internationalization gettext

我正在使用PHP的内置gettex支持开发一个基本网站。由于各种原因,我不想使用外部库的任何组件。首先是因为我想练习与gettex有关的技术,其次是因为该站点足够小,除了香草php之外,它不需要任何其他东西,其三是性能。我现在面临的问题与以我已经本地化的语言浏览网站有关。

我首先通过设置所需的目录结构:

locales/
    - pt_BR/
        - LC_MESSAGES
            messages.mo
            messages.po
    - es_ES/
    - ru/

然后在每个页面的顶部包含一个包含以下代码的文件:

<?php
// use sessions
session_start();

// get language preference
if (isset($_GET["lang"])) {
    $language = $_GET["lang"];
}
elseif (isset($_SESSION["lang"])) {
    $language  = $_SESSION["lang"];
}
else {
    $language = "en_US";
}

// save language preference for future page requests
$language = $_SESSION["Language"];

$folder = "locale";
$domain = "messages";
$encoding = "UTF-8";

putenv("LANG=" . $language);
setlocale(LC_ALL, $language);

bindtextdomain($domain, $folder);
bind_textdomain_codeset($domain, $encoding);

textdomain($domain);

设置代码后,我向.htaccess添加了一条简单规则,而不是使用查询字符串,而是使用简单的区域设置代码:

RewriteEngine on
RewriteRule (.+/)?pt-br/? ?lang=pt_BR

对于服务器根目录下的主页,它按预期工作。如果输入 mysite.test 之类的网址,它将以英语显示所有内容;如果切换到 mysite.test / pt-br ,则将以巴西葡萄牙语显示所有内容。我的麻烦是:如何在网站上让其他页面保持这种模式?例如,如果输入 mysite.test / pt-br / about ,我会得到相同的巴西葡萄牙语主页,而不是 About (同样是先前本地化)的页面。

据我所知,发生这种情况是因为服务器在目录 pt-br 中查找了文件 about.php ,而该文件实际上并不存在,因此求助于重写规则,但是...我真的不认为是这种情况,并且想知道整个过程是如何完成的,也就是说,构建一个URL这样的结构:

mysite.test/pt-br/about
mysite.test/es/about
mysite.test/ru/about

与其他页面相同。

除了关于如何设置gettex正常工作的目录结构以及使用部分来保留语言选择的说明以外,我没有发现足够精确的东西,但是我不确定实现方法,因此对找到有关的材料,将不胜感激。

0 个答案:

没有答案