我有一个用户选择菜单。 它由PHP变量填充,这些变量都是语言变量。例如:
$word = $lang['word'];
$select = array($word);
因此,选择菜单选项将根据用户选择的语言而改变。我需要能够将用户的选择相互比较。例如:
if($user1word == $user2word) ...
但由于语言文件,这不起作用。显然是“一个”!=“Uno”即使它们是相同的。 我的第一个修复是将所有内容更改为数值,然后将其发布到数据库。例如:
if($_POST['word'] == $lang['word']) { $userWord = 1 }
除了那些包含特殊字符(å,æ,é...)之外的所有单词都能很好地工作,而我所做的一切都无法解决这个问题(我尝试了规范化程序;特定于语言的accept-char onchange事件表格; utf8_encode这没用了。
目前,所有内容都以文本形式保存到数据库中,具体取决于用户使用的语言。因此,如果“语言”是一个选项,但您使用的是挪威语,则会将其保存为“Språk”。
我需要一个简单的解决方案,不会让我头疼 - 我是PHP的新手。
答案 0 :(得分:1)
目前,所有内容都以文本形式保存到数据库,具体取决于用户所使用的语言。
在我看来,这是一个设计缺陷。理想情况下,您的数据尽可能与语言无关,并且仅使用gettext等工具为UI执行翻译。通常,选择值等项目将与键或ID一起存储。
答案 1 :(得分: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';