2015-10-01 35 views
1

我有一個問題,我不知道什麼是打印許多不同的字符串取決於語言的最好方式,我的意思是,我今天STHG簡單:簡化大量相同的PHP條件

function getStringA($lang,$data1,$data2){ 
    if($lang=='en'){return 'my string is '.$data1.' and '.$data2;} 
    elseif($lang=='fr'){return 'ma chaine est '.$data1.' et '.$data2;} 
    elseif($lang=='it'){return $data1.'blabla '.$data2.' blabla';} 
    .. 
    [50 conditions] 
} 

function getStringB($lang,$data){ 
    [same 50 conditions, one per language] 
} 

function getStringC($lang,$data){ 
    .. 
} 
... 

然後:

echo getStringA('en','test','test1'); 
echo getStringB('en','AAAA'); 
echo getStringB('en','BBBB'); 
.. 
  1. 總是存在於每個功能
  2. 地點數據參數都可以在字符串中改變那些相同50種語言的條件下(在端部,中間..)

我以爲使用printf,但我不知道它會不會更好,我需要sthg快,最重要,易於維護。

有什麼想法?

回答

0

爲什麼不是數組?

$conditions = ['en' => 'foo', 'fr' => 'bar', etc...] 

if (isset($conditions[$lang])) { 
    return $conditions[$lang]; 
} else { 
    return $default_value; 
} 
+0

以及如何傳遞參數? – Julien

+0

可能是另一個構建字符串的函數。但這是你如何擺脫50個項目if/else/else/else/else /......../ else鏈 –

2

把你的字符串到數組和改變串聯成printf()-alike函數格式:

$stringsA = array(
    'en' => 'my string is %s and %s', 
    'fr' => 'ma chaine est %s et %s', 
    // ... 
); 

然後在你的功能得到由數組鍵文本:

function getStringA($lang,$data1,$data2){ 
    return isset($stringsA[$lang])? vprintf($stringsA[$lang], array($data1, $data2)) : ''; 
} 

您也可以使用自己的字符串中的佔位符和str_replace()功能:

// e.g. 'my string is {propery} and {secondProperty}' 


function getStringA($lang,$data1,$data2){ 
    return isset($stringsA[$lang])? str_replace(array('{propery}', '{secondProperty}'), array($data1, $data2), $stringsA[$lang]) : ''; 
} 
-1

使用數組,並通過PARAMS可以使用vsprintf()功能

$translate = [ 
    'en' => [ 
    'my_string_is' => 'my string is %s and %s'; 
    ], 
    'fr' => [ 
    'my_string_is' => 'ma chaine est %s et %s'; 
    ] 
]; 

function translate ($translations, $word, $lang, array $params = []) { 
    return isset($translations[$lang][$word]) ? vsprintf($translations[$lang][$word], $params) : $word; 
} 

// usage 

echo translate($translations, 'my_string_is' ,'en', ['wordA', 'wordB']); 
echo translate($translations, 'my_string_is' ,'fr', ['wordA', 'wordB']); 

這是很基本的想法。它可以寫得更好。翻譯可以在像ini,xml,yaml等配置文件中保存,也可以用OOP編寫,所以最好使用。

+0

它不僅僅是返回翻譯的字符串,它是如何建立一個字符串帶參數使用語言模板(參數的位置可以在字符串中更改,具體取決於語言) – Julien

+0

我編輯了問題以傳遞參數 – Robert

+0

謝謝,但很重,我終於找到了一個竅門,請閱讀我的答案 – Julien