Php d文本立即显示

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

我感觉很好

现在我想展示两种以上的语言

我把塞尔维亚语改名为西里尔语。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 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
,查看是否安装了locale
nl\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"