包含不同文件夹的php gettext不起作用?

时间:2015-03-12 20:35:47

标签: php localization gettext poedit

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

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

我正在努力理解gettext()函数如何在这里工作是我的意思的一个例子:

来自root的翻译文件结构: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(在someFolder中)

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

1 个答案:

答案 0 :(得分:1)

最有可能的原因是你的Folder定义:

$folder = "Locale";

将文件移动到someupper文件夹时,应修改路径为:

$folder = "someFolder/Locale";

如果有帮助,请告诉我。

修改

如果你知道的话,甚至更好,硬编码你的路径:

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