我最近花了一些时间翻译一个PHP应用程序,在Linux上运行Apache2。为了让gettext工作,我需要触及我想支持的每种语言的系统目录,所以我想知道是否有更简单的方法来支持从所有语言的gettext中获取文本。
我的语言环境文件位于我项目的子目录中:
./locale/sv_SE/LC_MESSAGES/default.po
./locale/es_BO/LC_MESSAGES/default.po
和代码:在./gettext.php中,如下所示:
<?php
setlocale(LC_ALL, "es_BO.utf8");
bindtextdomain("default", "locale/"); # usually works
textdomain("default");
echo echo _("test");
?>
C代码完全相同,但带有一些标题。
如果我没有使用这个丑陋的黑客“启用”玻利维亚西班牙语系统,将现有的sv_SE语言环境链接到es_BO,那么此代码将不会输出我的西班牙语翻译:
sudo ln -s /usr/lib/locale/sv_SE.utf8 /usr/lib/locale/es_BO.utf8
更新
我认为我的问题是错误的“那么如何避免制作 ln -s 命令,或者只是告诉我我是否会以错误的方式解决这个问题?”基本上我想知道为什么gettext需要/ usr / lib / locale中的那些文件“或者我如何以简单的方式使用gettext来翻译消息。
UPDATE2
我尝试使用setlocal(LC_MESSAGES, "es_BO.utf8")
,但它仍然需要/ usr / lib / locale中的消息。
答案 0 :(得分:1)
要检查某个翻译是否正常工作,您应该正确调用语言环境
#!/bin/bash
export LANG=es_BO
./yourprog
我认为您当前的语言破解是有效的,因为当前系统中的LANG = sv_SE。否则,我建议您详细了解gettext。
答案 1 :(得分:1)
使用locale -a
获取系统生成的区域设置列表。要添加到此列表,请修改/etc/locale.gen
并重新运行locale-gen
。
(另外,gettext根本没有任何结果,它尝试使用当前的语言环境,如果失败,它只能回退到C
)