【发布时间】: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.
【问题讨论】: