php 来自不同文件夹的 gettext 不起作用?

php gettext included from different folders doesnt work?

我正在尝试本地化我的代码,我想使用 gettext 和 poedit 来完成这似乎是最直接的方法。

我从一个包含此内容的简单脚本初始化所有 类 和视图。

我很难理解 gettext() 函数是如何工作的,这里是我的意思的一个例子:

从根目录翻译的文件结构:i18n/Locale/da_DK/LC_MESSAGESmessages.po 和 .mo 在 LC_MESSAGES 文件夹中,如果我的脚本在 i18n 文件夹中并且我在浏览器中调用 c.php 它可以工作

如果我将 c.php 放在相隔较远的文件夹中,它不起作用,所以路径是:someFolder/i18n/Locale/da_DK/LC_MESSAGES c.php 位于 someFolder 中,包括来自 i18n 的 a.phpb.php

脚本:

a.php

<?php
// use sessions
session_start();

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

// save language preference for future page requests
$_SESSION["Language"]  = $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);

b.php

<?php
echo _('Change language');
?>

c.php

<?php
include('a.php');
include('b.php');
?>

c.php(在某个文件夹中)

<?php
include('i18n/a.php');
include('i18n/b.php');
?>

很可能都是因为你的Folder定义:

$folder = "Locale";

当您将文件移动到某个上层文件夹时,您应该将路径修改为:

$folder = "someFolder/Locale";

如果有帮助请告诉我。

编辑:

或者更好的是,如果您知道路径,请对其进行硬编码:

$folder = "/home/me/myproject/someFolder/i18n/Locale";