Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在本地化站点的不同页面上保持该语言?_Php_Internationalization_Gettext - Fatal编程技术网

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

Php 如何在本地化站点的不同页面上保持该语言?,php,internationalization,gettext,Php,Internationalization,Gettext,我正在使用PHP内置的gettex支持开发一个基本网站。出于不同的原因,我不想使用外部库的任何组件;首先是因为我想练习与gettex相关的技术,第二是因为这个站点很小,除了普通的php之外不需要任何东西,第三是为了性能。我现在面临的问题是如何用我已经本地化的语言导航网站 我首先设置了所需的目录结构: locales/ - pt_BR/ - LC_MESSAGES messages.mo messages.po - e

我正在使用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);
对于服务器根目录下的主页,它按预期工作。如果我键入一个类似mysite.test的url,它会以英语呈现所有内容,如果我切换到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的目录结构以及如何使用节来保持语言选择的说明之外,我还没有找到任何足够精确的方法,但我不确定具体的实现方法,因此,如果有任何关于这方面的帮助,我将不胜感激。

$language=$\u SESSION[“lang”]/
$\u会话[“语言”]=$Language+1即使这只是因为打字错误而被关闭,你已经赢得了很多的声誉,以便投入精力形成一个正确的问题!干得好@卡西莫多的问题之一,你上面提到的打字错误的奇怪之处在于,一旦我在代码中修复了它,我在输入诸如mysite.test/pt-br之类的url时描述的预期输出就停止工作了。我只得到英文版的页面。请相应地更新问题。
$language
的值是多少?
$folder=“locale”但显示的是一个结构
locales/…
mysite.test/pt-br/about
mysite.test/es/about
mysite.test/ru/about