【问题标题】:Problem setting up gettext()设置 gettext() 的问题
【发布时间】:2011-05-16 18:40:18
【问题描述】:

我正在开发一个 php 应用程序。现在我正在尝试将其翻译成不同的语言。
为此,我使用 gettext()。但是我的配置有问题。我已经正确安装了库。我在代码周围有gettext(textToTranslate),并且我创建了没有问题的 .mo 和 .po 文件。

index.php上的配置是(在xampp,Ubuntu上工作):

// Language
$lang = 'es_ES';

// Domain
$text_domain = 'project';

putenv('LC_ALL='.$lang);
setlocale(LC_ALL, $lang);

bindtextdomain($text_domain, './locale' );

bind_textdomain_codeset($text_domain, 'UTF-8');

textdomain($text_domain);

我的文件结构是:

/opt/lampp/htdocs/blanca/gettext/locale/es_ES/LC_MESSAGES/project.po 
/opt/lampp/htdocs/blanca/gettext/locale/es_ES/LC_MESSAGES/project.mo

但我仍然看到英文代码,qhich 是默认语言。有人可以帮我吗?提前致谢

编辑

@ubuntu:~$ locale -a
C
es_AR.utf8
es_BO.utf8
es_CL.utf8
es_CO.utf8
es_CR.utf8
es_DO.utf8
es_EC.utf8
es_ES.utf8
es_GT.utf8
es_HN.utf8
es_MX.utf8
es_NI.utf8
es_PA.utf8
es_PE.utf8
es_PR.utf8
es_PY.utf8
es_SV.utf8
es_US.utf8
es_UY.utf8
es_VE.utf8
POSIX

编辑

strace 命令下运行一个小php脚本

<?php
// Idioma

$lang = 'es_ES.utf8';

// Dominio

$text_domain = 'blanca';

// Dependiendo de tu OS putenv/setlocale configurarán tu idioma.

putenv('LC_ALL='.$lang);

setlocale(LC_ALL, $lang);



// La ruta a los archivos de traducción

bindtextdomain($text_domain, './gettext/locale' );
// El codeset del textdomain

bind_textdomain_codeset($text_domain, 'UTF-8');

// El Textdomain
textdomain($text_domain);

// Print a test message
echo gettext("User");


// Or use the alias _() for gettext()
echo _("User");
?> 

命令:strace -e trace=file -o test.txt php prog.php

getcwd("/opt/lampp/htdocs/blanca", 4096) = 25 lstat("/opt/lampp/htdocs/blanca/prog.php", {st_mode=S_IFREG|0644, st_size=521, ...}) = 0 lstat("/opt/lampp/htdocs/blanca", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0 lstat("/opt/lampp/htdocs", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/opt/lampp", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/opt", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 getcwd("/opt/lampp/htdocs/blanca", 4096) = 25 lstat("/opt/lampp/htdocs/blanca/./locale", 0x7fffb2c1a670) = -1 ENOENT (没有这样的 文件或目录) open("/usr/share/locale/locale.alias", O_RDONLY) = 3 open("/usr/share/locale/es_ES.utf8/LC_MESSAGES/blanca/gettext.mo", O_RDONLY) = -1 ENOENT(没有这样的文件或 目录) open("/usr/share/locale/es_ES/LC_MESSAGES/blanca/gettext.mo", O_RDONLY) = -1 ENOENT(没有这样的文件或 目录) open("/usr/share/locale/es.utf8/LC_MESSAGES/blanca/gettext.mo", O_RDONLY) = -1 ENOENT(没有这样的文件或 目录) open("/usr/share/locale/es/LC_MESSAGES/blanca/gettext.mo", O_RDONLY) = -1 ENOENT(没有这样的文件或 目录) open("/usr/share/locale-langpack/es_ES.utf8/LC_MESSAGES/blanca/gettext.mo", O_RDONLY) = -1 ENOENT(没有这样的文件或 目录) open("/usr/share/locale-langpack/es_ES/LC_MESSAGES/blanca/gettext.mo", O_RDONLY) = -1 ENOENT(没有这样的文件或 目录) open("/usr/share/locale-langpack/es.utf8/LC_MESSAGES/blanca/gettext.mo", O_RDONLY) = -1 ENOENT(没有这样的文件或 目录) open("/usr/share/locale-langpack/es/LC_MESSAGES/blanca/gettext.mo", O_RDONLY) = -1 ENOENT(没有这样的文件或 目录)

prog.php is located in my application directory.

【问题讨论】:

    标签: php gettext


    【解决方案1】:

    我怀疑您尝试通过setlocale 设置的语言环境在您的系统上不可用。命令locale -a(从shell 运行)返回什么?确保已安装语言环境的值匹配您尝试设置的语言环境。如果您的西班牙语语言环境丢失,您可能仍然需要使用dpkg-reconfigure locales

    我不知道原因,但事实是(或者可能曾经,在我 2009 年工作的 2008 年左右的 Debian 或 Ubunto 上)如果语言环境,setlocale 将失败未安装在您的系统上。这不是很明显,因为您正在为您的应用程序提供消息文件,并且似乎不依赖于任何系统语言环境文件或设置 - 但您知道,这可能是有原因的。

    【讨论】:

    • 我已根据您的建议编辑了我的问题。我改变了 $lang = 'es_ES.utf8';但文本仍然是英文的。你有什么别的想法吗??谢谢
    • 是的:使用strace 运行一个最小的示例脚本,并仔细检查文件系统open 调用以查看Gettext 在哪里寻找您的消息文件。
    • 抱歉耽搁了,但我没有时间处理这个问题。我用在 strace 下运行的程序编辑我的问题。感谢您的建议!!我玩过结果,但没有成功
    【解决方案2】:

    试试 setlocale(LC_MESSAGES, "es_ES");

    【讨论】:

      【解决方案3】:

      我不确定如何在 php 中做到这一点,但在 bash 中

      export LC_MESSAGES="LL_CC"
      

      其中 LL - 语言环境,CC - 国家/地区。像 en_US 或 en_US.UTF8 之类的东西。我花了半天时间来解决这个问题,只有导出 LC_MESSAGES 有效。所以,我建议,在 php 中它会是

      putenv('LC_MESSAGES='.$lang);
      

      【讨论】:

        【解决方案4】:

        我已尝试帮助那些仍在此处寻找此功能的人:PHP gettext doesn't works

        希望对您有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-02-10
          • 1970-01-01
          • 2018-06-04
          • 1970-01-01
          • 1970-01-01
          • 2014-04-22
          • 1970-01-01
          相关资源
          最近更新 更多