【问题标题】:Gettext translating in English but not in FrenchGettext 翻译成英文但不翻译成法文
【发布时间】:2014-03-27 19:43:07
【问题描述】:

所以问题如下。我正在将网站从每种语言的内容数组转换为 gettext 网站,除了原始语言之外还有 2 种。

所以我的基础语言是 es_MX,我有 en_US 和 fr_FR 翻译。

我在 .htaccess 中使用以下参数来传递语言环境的信息:

RewriteRule     ^/?$            index.php?es=./&en=./en/&fr=./fr/&locale=es_MX [L]
RewriteRule     ^en/?$          index.php?es=./&en=./en/&fr=./fr/&locale=en_US [L]
RewriteRule     ^fr/?$          index.php?es=./&en=./en/&fr=./fr/&locale=fr_FR [L]

所以,当我检查 $_GET 参数时,一切都正确接收。

案例 1:默认 es_MX

Array
(
    [es] => ./
    [en] => ./en/
    [fr] => ./fr/
    [locale] => es_MX
)

案例 2:en_US

Array
(
    [es] => ./
    [en] => ./en/
    [fr] => ./fr/
    [locale] => en_US
)

案例 3:fr_FR

Array
(
    [es] => ./
    [en] => ./en/
    [fr] => ./fr/
    [locale] => fr_FR
)

所以,在那之后,为了让多个语言变量用于社交网络插件或属性,我有以下条件:

if(!$_GET["locale"] || $_GET["locale"] == "es_MX") {
    $locale = "es_MX";
    $locale_general = "es_LA";
    $lang = "es";
    $isolang = "es-419";
    $htlang = "es-MX";
} else if($_GET["locale"] == "en_US") {
    $locale = "en_US";
    $locale_general = "en_US";
    $lang = "en";
    $isolang = "en";
    $htlang = "en-US";
} else if($_GET["locale"] == "fr_FR") {
    $locale = "fr";
    $locale_general = "fr_FR";
    $lang = "fr";
    $isolang = "fr";
    $htlang = "fr-FR";
}

之后,我使用以下方法初始化语言环境:

putenv("LC_ALL=".$locale.".utf8");
setlocale(LC_ALL, $locale.".utf8");
bindtextdomain("hacienda", "./locale");
bind_textdomain_codeset("hacienda", "UTF-8");
textdomain("hacienda");

我的语言环境位于: - 英语 (./locale/en_US/LC_MESSAGES/hacienda.mo) - 法语 (./locale/fr_FR/LC_MESSAGES/hacienda.mo)

我运行了exec("locale -a",$output),网站显示了一堆语言环境,其中有几个 fr_FR 条目,包括 fr_FR.utf8。

生成的html是:

<html class="no-js" lang="fr" xml:lang="fr" itemscope itemtype="http://schema.org/Hotel"> <!--<![endif]-->
<head>
    <meta charset="utf-8">
...

我尝试重命名区域设置文件也创建了一个新文件,但它似乎没有获得法语翻译。知道是什么原因造成的吗?

【问题讨论】:

  • 您向我们展示的一切似乎在 en_US 和 fr_FR 语言环境之间是对称的。您是否检查了 locale/*/LC_MESSAGES/hacienda.mo 文件和目录的权限?
  • 我实际上将 en_US 文件夹复制/粘贴到 fr_FR 并且只是更改了一些字符串,所以即使我没有更改它们,它也应该看起来像是英文。

标签: php localization php-gettext


【解决方案1】:

这很尴尬,但我错过了将 _FR 添加到 $locale = "fr"; 现在我将其修复为 $locale = "fr_FR"; 它正在工作。很抱歉浪费了时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 2020-09-29
    • 2019-01-09
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多