簡體   English   中英

用其他列+值替換列值+結果

[英]replace column value + results with other column + value

為了使用多國語言,我們有以下設置:

  1. 所有語言字段都存儲在MySQL表的同一記錄中
  2. 在cookie-language-id上,我們需要將英語(id 1)替換為法國(id 2)
  3. Cookie表示:langID = 2時,我們需要將英語更改為法國:
 values like: title (as in: SELECT title FROM ...) and, change: $title (as in: $title=$rows["title"]; ) 

至:

  • title_fr
  • 和:$ title_fr

有沒有為此的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM