2015-11-06 87 views
1

如何使用pdo對象與數據庫進行翻譯來構建多語言表單?MySQL/PHP多語言表格

例如,有我的代碼來創建PDO對象:

try { 
    $pdo = new PDO("mysql:host=$servername;dbname=$dbname",$username, $password); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) { 
    echo $e->getMEssage(); 
    die(); 
} 

$sql = "SELECT FROM `lang_content` `id`, `:lang`"; 
$query = $pdo->prepare($sql); 

if($query->execute(array(
     ':lang' => $_GET['lang'].'_content' 
    ))){ 
    // Show content 
} 

MySQL表結構:

CREATE TABLE `lang_content` (
    `id` INT(11) NOT NULL AUTO_INCREMENT, 
    `en_content` VARCHAR(1000) NULL DEFAULT NULL, 
    `lv_content` VARCHAR(1000) NULL DEFAULT NULL, 
    `ru_content` VARCHAR(1000) NULL DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) 
COMMENT='All translations' 
ENGINE=MyISAM 
; 

MySQL表數據例如:

id en_content lv_content ru_content 
1 MOD   KASKO  КАСКО 
2 MTPL  OCTA  ОСАГО 

而且我想使用它如: 如果lang en

<?= $result->1 ?> // Echo MOD 

將返回MOD,

<?= $result->2 ?> // Echo MTPL 

將返回MTPL

回答

0

老實說,這不是很好的作法是通過數據庫做你的翻譯。許多大平臺都是通過某種文本格式來完成的。例如,magento通過csv文件來完成。

您可以使用以下代碼開始您的開發。

你的西班牙語翻譯文件es.csv

'Home', 'Inicio' 
'Page 1', 'Pagina 1' 
'Page 2', 'Pagina 2' 
'Page 3', 'Pagina 3' 

字的第一列應是能在函數中定義的默認語言。

<a href="#"><?php __("Home"); ?> 

那麼你可以使用像你這樣在上面捕獲用戶選擇的語言的一個switch語句。 __()函數看起來像這樣。如果輸入將是「家」

$csv = array_map('str_getcsv', file($file)); 
// Logic (where it would do the translation) 
// It could look for the input in the $cvs variable if it exist then use the next value of the current array. Else keep the text the same. 

您的cvs文件需要做出準確的單詞來翻譯。

+0

是否可以在1個csv文件中添加3種語言?並選擇列取決於選擇哪種語言?因爲我已經有了帶有翻譯的Excel文件 – AlexIL

+0

它是可能的,但是您需要創建某種邏輯。我建議你在單獨的文件中做,因爲如果你在一個文件中有大量的翻譯,這可能會很痛苦。如果你所有的翻譯文件都是基於他們的語言在一個叫做locale的dir中分開的,或者你希望調用它的話,會更好。 –