2017-01-04 55 views
0

我創建了數組$ _en來存儲英文單詞/句子和$ _no數組來存儲挪威語文本以將其用作我的核心PHP項目的翻譯。Core PHP站點翻譯爲其他語言

<?php 
$_en = array(
    'mail' => 'email', 
    'msg1' => 'how are you?' 

); 
$_no = array(
    'mail' => 'epost', 
    'msg1' => 'hvordan har du det ?' 
); 

echo "EMAIL IN ENGLISH:".$_en['mail']."\n"; //email in english 
echo "EMAIL IN NORWEGIAN:".$_no['mail']; //email in NORWEGIAN 
echo "Message IN NORWEGIAN:".$_no['msg1']; //Message in NORWEGIAN 

根據數組和鍵值,文本將根據站點翻譯功能進行調用。

如果有任何更好的解決方案和增強是最受歡迎的。提前糾正我的感謝。

+1

最好有一個帶有字符串標記的語言類文件及其在單獨文件中的轉換。根據所選語言調用文件 – Thamilan

+1

在問號前留有空格是不正確的,我想知道爲什麼有些人已經開始使用它了。你也可以看看http://php.net/manual/en/function.gettext.php這是在國際化域名支持中建立php – rypskar

+0

@rypskar謝謝!你可以更詳細地解釋我 – ben

回答

1

一個更好的解決方案,如我在評論中提到的Thamilan將使用一個類來處理轉換。

想一想吧,

你的模板文件

$trans = new Translate('en'); 
<h1><?php echo $trans->__('This is a title'); ?></h1> 

Translate.php

class Translate { 
    public function __construct($lang) { 
     $this->lang = $lang; 
    } 

    public function __($string) { 
     // $translatedString = $this->getTranslatedString($string); 
     return $translatedString; 
    } 
} 

在這個類中,你需要獲取從它的存儲位置的轉換。你可以在這個類中存儲數組,或者更好的解決方案是從CSV文件加載它們。

0

試試這個: -

parse_ini_file()是一個非常強大的小工具,這不正是你所期望的。使用一個簡單的文件,這樣我們稱之爲en.ini:

PAGE_TITLE = My website page title 
HEADER_TITLE = My website header title 
SITE_NAME = My Website 
SLOGAN = My slogan here 
HEADING = Heading 
MENU_LOGIN = Login 
MENU_SIGNUP = Sign up 
MENU_FIND_RIDE = Find Ride 
MENU_ADD_RIDE = Add Ride 
MENU_LOGOUT = Logout 

您可以簡單地使用:parse_ini_file(「en.ini」)返回一個數組完全按照你的switch語句,這將是多大更容易讓其他(非程序員)爲你讀寫。如果你是再繼續命名這種風格的文件,你可以減少使用者語言()喜歡的東西:

public function userLanguage() 
{ 
    $file = '/path/to/language/config/' . $this->UserLng . '.ini'; 
    if(!file_exists($file)) 
    { 
     //Handle Error 
    } 
    return parse_ini_file($file); 
} 
0

另一種解決方案嘗試: -

創建抽象類

interface Language 
{ 
    public function getPageTitle(); 
    public function getHeaderTitle(); 
    public function getSiteName(); 
    public function getSlogan(); 
    public function getHeading(); 
    public function getMenuLogin(); 
    public function getMenuSignup(); 
    public function getMenuFindRide(); 
    public function getMenuAddRide(); 
    public function getMenuLogout(); 
} 

雖然界面很小,但實現它可能會產生一個大文件,雖然它可以說比陣列風格更清晰:

class English implements Language 
{ 
    public function getHeaderTitle() 
    { 
     return 'My website header title'; 
    } 

    public function getHeading() 
    { 
     return 'Heading'; 
    } 

    // etc... 
} 

備選: -

或者,你可以結合這些樣式並與getter方法訪問該陣列中的單語,即:

class Language 
{ 
    private $languageArray; 
    private $userLanguage; 

    public function __construct($language) 
    { 
     $this->userLanguage = $language; 
     $this->languageArray = self::userLanguage(); 
    } 

    private static function userLanguage() 
    { 
     $file = '/path/to/language/config/' . $this->userLanguage . '.ini'; 
     if(!file_exists($file)) 
     { 
      //Handle Error 
     } 
     return parse_ini_file($file); 
    } 

    public function getPageTitle() 
    { 
     return $this->languageArray['PAGE_TITLE']; 
    } 

    public function getHeaderTitle() 
    { 
     return $this->languageArray['HEADER_TITLE']; 
    } 

    //etc... 
} 

這將爲雙方的利益。就個人而言,除非您計劃在不久的將來添加更多語言,否則我相信#2解決方案最適合您。