不同环境下的php gettext目录结构
我正在使用不同环境下的php gettext目录结构,php,internationalization,gettext,php-gettext,Php,Internationalization,Gettext,Php Gettext,我正在使用gettext实现php文件的国际化。我有两台服务器;沙盒服务器和发布服务器。在沙盒服务器中,类似于locale/LC\u MESSAGES/en的目录不起作用,我应该使用locale/LC\u MESSAGES/en\u GB。但使用“en_GB”在我的生产服务器上不起作用,“en”也可以正常工作。对于一些语言,如葡萄牙语,我有pt_pt和pt_BR(巴西葡萄牙语)。所以我更喜欢使用“A_B”结构 我不知道gettext如何检测这些文件夹。是否有使用相同文件夹结构的标准方法?如果您在
gettext
实现php文件的国际化。我有两台服务器;沙盒服务器和发布服务器。在沙盒服务器中,类似于locale/LC\u MESSAGES/en
的目录不起作用,我应该使用locale/LC\u MESSAGES/en\u GB
。但使用“en_GB”在我的生产服务器上不起作用,“en”也可以正常工作。对于一些语言,如葡萄牙语,我有pt_pt和pt_BR(巴西葡萄牙语)。所以我更喜欢使用“A_B”结构
我不知道
gettext
如何检测这些文件夹。是否有使用相同文件夹结构的标准方法?如果您在Linux上运行代码,gettext
仅适用于操作系统上已安装的区域设置。这意味着,如果将语言环境设置为en_GB
,那么如果唯一安装的语言环境是en_GB.utf8
或en_US
,则无法获得翻译
在两个环境中都尝试此操作,并比较结果:
locale -a
它为您提供了所有已安装区域设置的列表:
en_US
en_US.ISO8859-1
en_US.ISO8859-15
en_US.US-ASCII
en_GB
en_GB.utf8
de_DE
de_DE.utf8
C
POSIX
现在,您需要确保两个环境都安装了相同的区域设置;如果需要en_US.utf8
、en_AU
和en_AU.utf8
,可以基于现有的区域设置创建缺少的区域设置(阅读localedef
手册页了解详细信息):
另外,下面是在PHP上使用gettext
的步骤:
<?php
// Set language to German
putenv('LC_ALL=de_DE.utf8');
setlocale(LC_ALL, 'de_DE.utf8');
// Specify location of translation tables
bindtextdomain("myPHPApp", "./locale");
// Choose domain
textdomain("myPHPApp");
// Translation is looking for in ./locale/de_DE.utf8/LC_MESSAGES/myPHPApp.mo now
// Print a test message
echo gettext("Welcome to My PHP Application");
// Or use the alias _() for gettext()
echo _("Have a nice day");
?>
谢谢你的完整回复,谢尔文!虽然我没有安全的shell访问我的服务器来运行这些命令,但我将尝试使用echo setlocale(LC_ALL,0);而是在我的php脚本中。我还担心其他进程会改变语言环境。我读了一些关于它的资料,我们有一些python和rails应用程序。locale是一个系统范围的参数,还是仅仅与php/apache进程相关?非常欢迎。实际上,
putnav()
仅限于当前请求,setlocale()
仅限于当前脚本。这些不会影响操作系统或其他进程。脚本运行完成后,值将返回到默认值。这就是为什么语言应该以其他方式在整个会话中保持不变的原因。回答得好!注意:“setlocale()
仅限于当前脚本”--我猜这也(实际上)意味着当前请求(实际上是PHP执行上下文),而不仅仅是脚本,因此如果您包含另一个脚本,或者从另一个脚本包含此脚本,则不需要在每个PHP文件(脚本)中设置区域设置。
<?php
// Set language to German
putenv('LC_ALL=de_DE.utf8');
setlocale(LC_ALL, 'de_DE.utf8');
// Specify location of translation tables
bindtextdomain("myPHPApp", "./locale");
// Choose domain
textdomain("myPHPApp");
// Translation is looking for in ./locale/de_DE.utf8/LC_MESSAGES/myPHPApp.mo now
// Print a test message
echo gettext("Welcome to My PHP Application");
// Or use the alias _() for gettext()
echo _("Have a nice day");
?>
<?php
// Set language to German written in Latin-1
putenv('LC_ALL=de_DE.ISO8859-1');
setlocale(LC_ALL, 'de_DE.ISO8859-1');
?>