2015-12-06 162 views
0

我想补充的多语言支持,我的网站,像这样:PHP - 多语言支持

Language.php

class lang { 

    private $lang = null; 

    function __construct($lang) { 
     global $module; 
     $module['lang'] = true; 
     $this->lang = parse_ini_file("includes/languages/{$lang}.ini"); 
    } 


    public function xlate($str) { 

     $arg_count = func_num_args(); 

     if ($arg_count > 1) { 
      $params = func_get_args(); 

      // strip first arg 
      array_shift($params); 
     } else { 
      $params = array(); 
     } 

     $out_str = isset($this->lang[$str]) ? $this->lang[$str] : null; 

     if (!$out_str) { 
      throw new exception("Lang String Not Found: $str"); 
      $this->lang = parse_ini_file("includes/languages/en_gb.ini"); 
     } 

     return vsprintf($out_str, $params); 
    } 
} 

我则已经存储在ini文件我的语言变量:

en_gb.ini

Support = Support 
Quick Menu = Quick Menu 
HOME_MAIN_TITLE = You will Get Paid 

然后我用它喜欢:

echo $lang->xlate("Support"); 
echo $lang->xlate("Quick Menu"); 
echo $lang->xlate("HOME_MAIN_TITLE"); 

哪个有效。但是,每当我在语言传递'的性格,这是行不通的:

HOME_MAIN_TITLE = You'll Get Paid 

呼应的文字,直到'字符:

You 

然后停止。

我该如何解决这个问题?

+0

尝试在'''之前添加一个反斜杠,所以它变成'\''。这被称为转义字符https://en.wikipedia.org/wiki/Escape_character –

+0

看看突出显示的文字。你的throw语句后面的行也不会被执行。 – Rangad

+0

@KevinPei添加反斜杠不起作用。它只会打印:你\ – oliverbj

回答

0

通常,.ini文件中的所有字符串都应该包含在"double quotes"中。这将解决问题。

我可以建议你看看通用和社区认可的东西。像https://github.com/symfony/translation(它有.ini加载程序里面)