我正在使用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正常工作的目录结构以及使用部分来保留语言选择的说明以外,我没有发现足够精确的东西,但是我不确定实现方法,因此对找到有关的材料,将不胜感激。