Delphi for PHP的Gettext亂碼解決方法

 1,267 total views,  3 views today

GNU 的 gettext 套件就是提出了一套標準的方法,讓程式不須重新編譯就能顯示多國的訊息,讓國際化 (i18n) 的工作可以更簡單的達成。

而強大的CodeGear產品,Delphi for PHP也把它作成了VCL元件,不過小弟在實做時,卻發現繁體中文怎麼搞還是會變成亂碼,後來找到了,必需要修改「C:Program FilesCodeGearDelphi for PHP2.0vclforms.inc.php」這個檔案中的source才能解決,這不知道是不是正確的作法,不過倒是解決了我的問題。

加入 第24行的code到 forms.inc.php裡面去

bind_textdomain_codeset($domain, ‘UTF-8’);if($value != $this->_language)

{
   $this->_language = $value;
   if((($this->ControlState & csDesigning) != csDesigning) && (($this->ControlState & csLoading) != csLoading))
   {
      $resourcename = $this->lastresourceread;
      if($value == '(default)') $l = "";
      else $l = "." . $value;

      $resourcename = str_replace('.php', $l . '.xml.php', $resourcename);

      //This is to allow gettext usage
      if($value == '(default)') $l = '';
      else $l = $value;

      putenv("LANG=$l");
      putenv("LANGUAGE=$l");
      putenv("LC_ALL=$l");
      setlocale(6, $l);
      putenv("LC_MESSAGES=$l");
      $domain = "messages";
      bindtextdomain($domain, "./locale");
      textdomain($domain);
      bind_textdomain_codeset($domain, 'UTF-8');

      if(file_exists($resourcename))
      {
         $this->readFromResource($resourcename, false, false);
      }
   }
}

發表迴響

%d 位部落客按了讚: