[英]replace column value + results with other column + value
為了使用多國語言,我們有以下設置:
values like: title (as in: SELECT title FROM ...) and, change: $title (as in: $title=$rows["title"]; )
至:
有沒有為此的PHP /快速解決方案?
您可以這樣創建語言映射:
// lets assume that we need not only title but also description
$lang2Fields = array(
1 => ['title' => 'title', 'description' => 'description'], // en
2 => ['title' => 'title_fr', 'description' => 'description_fr'], // fr
3 => ['title' => 'title_ru', 'description' => 'description_ru'], // ru
// ... other languages
);
// try to get language id from cookie
$defaultLanguage = 1; // en
$language = !empty($_COOKIE["langID"]) ? $_COOKIE["langID"] : $defaultLanguage;
$fields = !empty($lang2Fields[$language]) ?
$lang2Fields[$language] : $lang2Fields[$defaultLanguage];
$titleField = $fields['title'];
$descriptionField = $fields['description'];
// later we can use these field names into your queries
// $sql = "SELECT ".$titleField.", ".$descriptionField." FROM ...";
// $$titleField = $rows[$titleField];
也許是這樣的嗎?
<?
$arrMapCookieToLang = [
1 => "",
2 => "fr",
3 => "es",
];
function langify($item, $cookieLangId = null) {
global $arrMapCookieToLang;
if (empty($cookieLangId)) {
$cookieLangId = 1;
if (array_key_exists("cookie-language-id", $_COOKIE)) {
$cookieLangId = $_COOKIE["cookie-language-id"];
}
}
$langCode = $arrMapCookieToLang[$cookieLangId];
if (empty($langCode)) return $item;
return "{$item}_{$langCode}";
}
$sql = "SELECT ".langify("title")." FROM ...";
$title = $rows[langify("title")];
// OR:
$sql = "SELECT ".langify("title")." AS title FROM ...";
$title = $rows["title"];
但是請注意,每種語言都有一個列可能不是一個很好的做法。 您可能應該朝alexander.polomodov建議的方向走。
另外,即使您選擇繼續使用當前結構,也可以考慮將$ arrMapCookieToLang和langify()函數放在一個類中(全局變量和函數是邪惡的)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.