Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php gettext在网络解决方案服务器上根本不翻译_Php_Php Gettext - Fatal编程技术网

php gettext在网络解决方案服务器上根本不翻译

php gettext在网络解决方案服务器上根本不翻译,php,php-gettext,Php,Php Gettext,我在一台服务器上遇到了一个奇怪的问题,我不得不用它来重新设计一个网站。客户习惯于将网络解决方案作为提供商,因此目前无法选择更换提供商。无论如何,问题如下: 我想它可能没有安装gettext,所以我检查了phpinfo,并启用了它 gettext 已启用GetText支持 我还使用 如果(!函数_存在(“gettext”)) { echo“未安装gettext\n”; } 其他的 { echo“支持gettext\n”; } 输出显示支持gettext 然后我认为服务器可能与本机gettext

我在一台服务器上遇到了一个奇怪的问题,我不得不用它来重新设计一个网站。客户习惯于将网络解决方案作为提供商,因此目前无法选择更换提供商。无论如何,问题如下:

  • 我想它可能没有安装gettext,所以我检查了phpinfo,并启用了它

    gettext 已启用GetText支持

  • 我还使用

    如果(!函数_存在(“gettext”)) { echo“未安装gettext\n”; } 其他的 { echo“支持gettext\n”; }

输出显示支持
gettext

然后我认为服务器可能与本机gettext有问题,所以我尝试使用这个。我把它上传到服务器上,它也不工作了

我的标题中的配置是

putenv("LC_ALL=".$locale.".utf8");
putenv("LANGUAGE=".$locale."utf8");
setlocale(LC_ALL, $locale.".utf8");
bindtextdomain($domain, "./locale");
bind_textdomain_codeset($domain, "UTF-8");
textdomain($domain);`
在函数之前分配
$locale
$domain
服务器

gettext的相同代码在本地apache服务器上运行良好

可能是什么问题?由于网站并没有那么大,我正在考虑为翻译使用数据库存储,虽然我对这个想法不太了解,但我不知道为什么会发生这种情况

我的语言环境文件正确地位于
/locale/language\u code/LC\u MESSAGES/file.po
file.mo
中。当我回显bindtextdomain的返回时,它会显示语言环境的完整路径


有什么建议吗?

你把地区和翻译文件搞混了。区域设置是非常有用的基于区域和语言的常量,用于为最终用户适当设置文本、日期等的格式。PHP的
gettext
函数将使用区域设置来查找正确的翻译查找文件,但这是它们共享的唯一属性

使用时,不提供文件路径,而是提供区域设置标识符。这些准常量因系统而异(可能不存在),这最终可能是网络解决方案问题的一部分,但PHP的示例很有用

然后可以使用指定转换目录路径,然后调用指定要在当前作用域中使用的域


SitePoint有一篇名为“可能对您有帮助”的文章。

通过聊天联系网络解决方案后,他们告诉我,使用他们的共享主机,您无法使用区域设置。特定的.htaccess语法也存在问题,特别是对于他们的服务器,这是**中的一个难题。我绝对不会推荐他们的共享服务器托管。无论如何,感谢@jacob budin和@mike的帮助。

var_dump(file_存在('./locale/language_code/LC_MESSAGES/file.mo')的输出是什么
变量转储(fileperms('./locale/language_-code/LC_-MESSAGES/file.mo')?注意,gettext不使用.po文件。输出为:
bool(true)
int(33204)
我只知道使用了.mo文件,我只是想弄清楚一切都已就绪:)是否显示了任何错误?你检查过错误日志文件了吗?会发生什么?显示的是默认文本而不是翻译文本,还是什么都没有?也许试着看看这是否能帮到你。没有错误记录,我认为托管公司有点糟糕。显示的是默认文本,而不是翻译。Zend Translate不需要FW吗?Hello@jacob budin我已经检查了SitePoint文章,我的setlocale、bindtextdomain和textdomain函数配置正确。正如我前面提到的,它在我的本地主机上工作,相同的配置在不同的主机提供程序上工作。我在你的评论中发现有趣的是常数部分。关于如何检查它们是否被正确传递或它们是否不在宿主中,有什么建议吗?@mihail_ov我很担心,因为你的问题指出“我的区域设置文件正确定位”,并继续提到一个
.po
文件。您是否检查了
setlocale
返回的内容?如果区域设置不存在,则应返回
false
。我不知道如何获得一个地区列表(在共享网络主机上),但通常任何给定的地区和语言只有5种左右的变体。如果它这样做,它不会返回任何内容。我把它赋给了一个变量,显然它返回了false。我正在处理墨西哥西班牙语的es_MX,我不认为他们不应该定义它。然后可能会出现什么问题?
setlocale
需要返回
true
,否则您所拥有的一切都将无效。检查
es_MX.UTF-8
是否工作。如果没有,请联系网络解决方案,并要求他们提供系统上已安装的区域设置列表。您可能需要将您拥有的内容重新组合到更常见的内容(例如,
es_es.UTF-8
,它是西班牙语[国际])。如果您具有命令行访问权限,则可以执行
locale-a
,以确定安装了哪些语言环境。