Php d文本立即显示
我感觉很好 现在我想展示两种以上的语言 我把塞尔维亚语改名为西里尔语。pig示例代码的mo和.po文件转换为message1.po和message1.mo,并将它们移动到Php d文本立即显示,php,xampp,internationalization,gettext,Php,Xampp,Internationalization,Gettext,我感觉很好 现在我想展示两种以上的语言 我把塞尔维亚语改名为西里尔语。pig示例代码的mo和.po文件转换为message1.po和message1.mo,并将它们移动到 /de_DE/LC_MESSAGES 我现在有4个文件在那里 message.mo //german translation compiled message.po //german translation original message1.po // serbian cyrillic origi
/de_DE/LC_MESSAGES
我现在有4个文件在那里
message.mo //german translation compiled
message.po //german translation original
message1.po // serbian cyrillic original
message1.po // serbian cyrillic original
并将第二行设置为“message1”
并显示西里尔语代码强>
我的窗口中既没有塞里尔语也没有塞尔维亚本地语,什么都没有。
只有英语和德语
这意味着,至少在安装了德语的Windows 10中,没有必要安装语言或区域设置才能使gettext正常工作!(我不知道这对中国人来说是否也是真的……但那是另一回事)
因此,如果您有一个远程Linux服务器,并且想要测试您的国际化,那么您所要做的就是
1.)复制所有messages.po和-mo文件将它们全部重命名为所需的名称 e、 g.消息\u de.po/.mo或德语.po。。随便你 将所有这些文件放入具有已安装windows语言名称的文件夹中 e、 g./德乌德/或/恩乌斯/ 并将消息变量更改为所需的值 您可能会说“我不想更改我的代码OM部署” 然后,您只需在Apache中设置一个环境变量,并且只有在本地主机windows计算机上使用环境上下文“dev”运行脚本时,才能运行windows变通方法。在远程生产系统上运行标准的gettext初始化
if (getenv("SERVER_CONTEXT") == "dev")
{
switch (GET('lang')) {
case "de":
$domain="messages_de";
break;
case "fr":
$domain = "messages_fr";
break;
default: //untranslated english texts
$domain = "";
}
$path= "C:/xampp/htdocs/locale";
bindtextdomain($domain, $path);
textdomain($domain);
}
elseif (getenv("SERVER_CONTEXT") == "prod"))
{ the standard gettext initialization for the remote host }
print _("The string you want to translate" );
在windows计算机上,默认语言目录中还应包含以下4个文件:
messages_fr.mo
messages_fr.po
messages_de.po
messages_de.po
注意:对于自动检测系统的步骤,您需要两个小的配置更改:
在Apache配置中,在Windows计算机的virtualhost中设置以下变量:
SetEnv SERVER_CONTEXT "dev"
在远程生产系统virthost的Apache配置中:
SetEnv SERVER_CONTEXT "prod"
在服务器上尝试使用命令
locale-a
,查看是否安装了localenl\u BE
。如果没有,请使用已安装的区域设置进行安装或测试。是的,这是XAMPP的区域设置问题。我最终卸载了XAMPP,改用WSL+Ubuntu和“真正的”Apache服务器。
/de_DE/LC_MESSAGES
message.mo //german translation compiled
message.po //german translation original
message1.po // serbian cyrillic original
message1.po // serbian cyrillic original
$domain = 'messages1';
if (getenv("SERVER_CONTEXT") == "dev")
{
switch (GET('lang')) {
case "de":
$domain="messages_de";
break;
case "fr":
$domain = "messages_fr";
break;
default: //untranslated english texts
$domain = "";
}
$path= "C:/xampp/htdocs/locale";
bindtextdomain($domain, $path);
textdomain($domain);
}
elseif (getenv("SERVER_CONTEXT") == "prod"))
{ the standard gettext initialization for the remote host }
print _("The string you want to translate" );
messages_fr.mo
messages_fr.po
messages_de.po
messages_de.po
SetEnv SERVER_CONTEXT "dev"
SetEnv SERVER_CONTEXT "prod"