我正在用 PHP 和 Smarty 开发一个 webapp。我使用 gettext 进行国际化,但我遇到了一个问题:它只是有时完全随机地起作用。我使用 putenv+setlocale+bindtextdomain+textdomain 加载语言环境(例如“de_DE”),重新加载页面,然后查看“搜索”;再次重新加载,我看到“这样”;再重新加载两次并获得“Suche”,但第三次再次给我“搜索”,然后我多次看到“搜索”,突然间我可以再次看到“Suche”......随机。
我已经停用了 Smarty 的缓存,但同样的问题。我已经将 Smarty 配置为对不同的语言使用不同的目录,templates_c/en_GB、templates_c/de_DE 等等。以这种方式编译工作得很好。
我正在使用 smarty-gettext 进行模板翻译。
使用 gettext 和 Smarty 是否存在任何已知问题?
编辑以添加一些信息:我在 Linux 机器上运行我的测试:
apache2 2.2.14
获取文本 0.17
php 5.3.2
smarty 3-SVN$Rev: 3286
我正在gettext用于我的 php 文件的国际化。我有两台服务器;一个沙箱服务器和一个发布服务器。在沙箱服务器中,像locale/LC_MESSAGES/en这样的目录不起作用,我应该locale/LC_MESSAGES/en_GB改用。但是“en_GB”在我的生产服务器上不起作用,“en”工作正常。对于像葡萄牙语这样的一些语言,我有 pt_PT 和 pt_BR(巴西葡萄牙语)。所以我更喜欢使用“A_B”结构。
我不知道如何gettext检测这些文件夹。是否有使用相同文件夹结构的标准方法?
我在serverfault上问过这个问题,但我没有得到任何回复.我在这里试试......
我在家里的网络服务器上开发了一个网站.
当我修改翻译文件时,我必须重新启动Web服务器Apache.
/etc/init.d/httpd graceful
Run Code Online (Sandbox Code Playgroud)
简单...
假设我的网站托管在共享主机上.
假设我现在需要修改翻译文件.
我无法重启服务器......
你如何gettext在这种情况下使用?
您是否允许仅使用graceful选项重新启动服务器?
共享主机是否每天重启服务器一次以解决此类问题?
你如何处理这些限制?
在使用GetText翻译Yii中的字符串时,我们是否必须使用Yii::t($category,'message')或gettext的_('message')语法?
然后我们如何将字符串拉入PO文件?
我在 PHP 中使用 gettext 时遇到问题;我有两台服务器,一台是本地服务器(我在其中开发),在 Windows 中(使用 vs.php)并工作查找,另一台在 Amazon EC2 中(更新了 Ubuntu 12.04),这是生产服务器,在这台服务器中,相同的代码不发现了。
这是我的代码:
我用这个来初始化 gettext 。
function initialize_i18n($locale) {
$locales_root = "./librerias/noAuto/locale";
putenv('LANG='.$locale);
putenv("LC_ALL=" . $locale);
setlocale(LC_ALL,$locale);
$domains = glob($locales_root.'/'.$locale.'/LC_MESSAGES/messages*.mo');
if (count ($domains) > 0)
{
$current = basename($domains[0],'.mo');
$timestamp = preg_replace('{messages-}i','',$current);
bindtextdomain($current,$locales_root);
bind_textdomain_codeset( $current, "UTF-8" );
textdomain($current);
if ($locale == "en_US")
{
if( _("Modificar") === "Modify" ) {
$system->setDebug( "Translated correctly");
} else {
$system->setDebug( "Gettext don't working");
}
}
}
}
initialize_i18n("en_US");
Run Code Online (Sandbox Code Playgroud)
我的项目中的所有文件均以 UTF-8(西班牙语)编码,并且 .mo 和 .po …