2013-10-16 44 views
1

我爲用戶提供了一個選擇菜單。 它由PHP變量填充,這些變量都是語言變量。例如:將PHP中的變量與不同的語言文件進行比較

$word = $lang['word']; 
$select = array($word); 

因此,選擇菜單選項將根據用戶選擇的語言而改變。我需要能夠比較用戶的選擇。例如:

if($user1word == $user2word) ... 

但是由於語言文件,這是行不通的。顯然「一個」!=「Uno」即使他們是相同的。 我的第一個修補程序是在將所有內容發佈到數據庫之前將其更改爲數字值。例如:

if($_POST['word'] == $lang['word']) { $userWord = 1 } 

這完美的工作了,除了那些包含特殊字符的所有字(A,æ,é...)並沒有什麼我沒能解決這個(我試過正規化;特定語言的接受,焦平變化事件的形式; utf8_encode。它是絕望的

目前一切都保存到數據庫的文本,依賴於用戶的語言。所以如果「語言」是一個選項,但你是在挪威,它保存爲「Språk」。

我需要一個簡單的解決方案,不會傷害我的腦海 - 我是PHP新手。

+0

您可以發佈一些實現此菜單的PHP和HTML?沒有它,我們建議的任何事情都會成爲猜測。 – 2013-10-16 01:35:39

回答

1

目前一切都保存到數據庫中的文本,取決於用戶的語言。

這在我看來是一個設計缺陷。理想情況下,您的數據將盡可能與語言不可知,並且翻譯將僅使用gettext等工具執行。通常,像選擇值這樣的項目將與密鑰或ID一起存儲。

+0

這在我看來也是一個設計缺陷。如何從選擇菜單中獲取密鑰或ID?/我應該使用Google? – user2250471

+0

您的選擇值和發佈數據將是密鑰或ID。 –

+0

我意識到我沒有給選擇選項賦值。我不得不更新我的陣列,以便我可以這樣做。 – user2250471

0

使用基於共同索引的地圖,此索引可以是英語,西班牙語或數字。我會建議數字。將數字索引存儲在數據庫中。

朝着正確方向邁出的一步:

$lang['en'][0] = 'Hello'; 
$lang['de'][0] = 'Hallo'; 
$lang['es'][0] = 'Hola'; 

$lang['en'][1] = 'Sup?'; 
$lang['de'][1] = 'Wie gehts?'; 
$lang['es'][1] = 'Que pasa?'; 

$userLang = 'en'; 

// show the select 
echo '<select name="word">'; 
foreach ($lang[$userLang] as $index => $word { 
    echo '<option value="'.$index.'">'.$word.'</option>'; 
} 
echo '</select>'; 

// show the selected word: 
echo 'You chose to say "'.$lang[$userLang][$_POST['word']].'".'; 

// compare the word to what is in the db 
if ($_POST['word'] === $dbRow['word']) { 
    // expression matches! 
    // assume a column in the db "language" describes the language the user chose, e.g. 'en', 'de', or 'es' 
    echo 'You previously chose "'.$lang[$dbRow['language']][$dbRow['word']].'" in the language "'.$dbRow['language'].'".; 
} 

根據您要如何組織它,你可能有利於通過短語,而不是分組分組通過語言,即:

$lang[0]['en'] = 'Hello'; 
$lang[0]['de'] = 'Hallo'; 
$lang[0]['es'] = 'Hola'; 
相關問題