gpt4 book ai didi

不同环境下的php gettext目录结构

转载 作者:可可西里 更新时间:2023-10-31 23:06:26 25 4
gpt4 key购买 nike

我正在使用 gettext 对我的 php 文件进行国际化。我有两台服务器;一个沙箱服务器和一个发布服务器。在沙箱服务器中,locale/LC_MESSAGES/en 之类的目录不起作用,我应该改用 locale/LC_MESSAGES/en_GB。但是对于“en_GB”,它在我的生产服务器上不起作用,而“en”工作正常。对于葡萄牙语等某些语言,我有 pt_PT 和 pt_BR(巴西葡萄牙语)。所以我更喜欢使用“A_B”结构。

我不知道 gettext 是如何检测到这些文件夹的。是否有使用相同文件夹结构的标准方法?

最佳答案

如果您在 Linux 上运行您的代码,gettext 仅适用于操作系统上已安装的语言环境。这意味着如果您将语言环境设置为 en_GB,那么如果唯一安装的语言环境是 en_GB.utf8en_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.utf8en_AUen_AU.utf8,您可以根据现有语言环境创建缺少的语言环境(阅读 localedef 联机帮助页以了解详细信息):

sudo localedef -c -i en_US -f UTF-8 en_US.utf8
sudo localedef -c -i en_GB -f UTF-8 en_AU
sudo localedef -c -i en_GB -f UTF-8 en_AU.utf8

另外,接下来是common best practice在 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");

?>

虽然您可以简单地删除编码而只删除 de_DE,但是在区域设置中设置字符是一个很好的做法,因为在某些特定情况下您可能需要支持非 Unicode 字符的内容套。见下文

<?php

// Set language to German written in Latin-1
putenv('LC_ALL=de_DE.ISO8859-1');
setlocale(LC_ALL, 'de_DE.ISO8859-1');

?>

关于不同环境下的php gettext目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18304566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com