3 回答

TA貢獻1818條經驗 獲得超3個贊
根據您在我的第一個答案下提出的問題,我決定添加另一個解決方案 - 沒有功能等更容易。
使用 fetchAll 在單個查詢中獲取所有翻譯:
$statement = $pdo->prepare("SELECT id, de, en FROM translations");
$result = $statement->execute();
$textsRaw = $statement->fetchAll();
您的$textsRaw意愿將如下所示:
$textsRaw = [
['id' => 1, 'de' => 'Hallo', 'en' => 'Hello'],
['id' => 2, 'de' => 'auf Wiederschauen', 'en' => 'Good bye'],
];
現在我們改造$textsRaw成$texts更簡單的結構:
$texts = [];
foreach ($textsRaw as $text) {
$texts[$text['id']] = $text[$user['language']];
}
現在$texts看起來像這樣:
$texts = [1 => 'Hello', '2' => 'Good bye'];
如果你有這個,那么翻譯就像這樣做一樣簡單:
echo $texts[1];
echo $texts[2];
如果您訪問不存在的翻譯 ID,您將收到正常的 php 通知:PHP Notice: Undefined offset: 3 in ....php on line ...

TA貢獻1789條經驗 獲得超8個贊
我曾經這樣解決過,我不想選擇所有數據,因為我認為這會浪費資源。我想出的解決方案(IMO)非常優雅:
有一個變量表示其中的語言,例如$language = 'NL'
。然后,在選擇中使用:
SELECT description_{$language} as description FROM example
如果你獲取了它,你可以簡單地使用$result['description']
你想要的語言:)
這對您的查詢來說只需要付出最少的努力。您可以創建一個帶有輸入的函數['title', 'description']
,該函數以查詢中的格式返回它,這樣您的查詢就會更?。?/p>
function langCols($columns){
$lang = 'NL'; // implement your language logic here
$transColumns = array_map(function(string $column){
return $column .'_'.$lang.' AS '.$column;
}, $columns);
return implode(', ', $transColumns);
}
請注意,這是我的案例的解決方案,但只需付出最少的努力,它也應該適合您的需求

TA貢獻1863條經驗 獲得超2個贊
使用 fetchAll 在單個查詢中獲取所有翻譯:
$statement = $pdo->prepare("SELECT id, de, en FROM translations");
$result = $statement->execute();
$texts = $statement->fetchAll();
您的$texts意愿將如下所示:
$texts = [
['id' => 1, 'de' => 'Hallo', 'en' => 'Hello'],
['id' => 2, 'de' => 'auf Wiederschauen', 'en' => 'Good bye'],
];
現在你不能用簡單的 echo 構造來做到這一點,但你可以像這樣定義函數:
function t(int $key): string {
global $texts;
global $user;
$translationTexts = array_filter($texts, function(array $text) use ($key, $user) { return $text['id'] === $key; });
if (count($translationTexts) !== 1) {
throw new Exception('Unknown text key: '.$key);
}
return reset($translationTexts)[$user['language']];
}
現在,無論您想翻譯什么地方,您只需執行以下操作:echo t(1);或echo t(2);根據用戶語言,它將輸出翻譯,例如:
$user = ['language' => 'en'];
echo t(1);
echo t(2);
$user = ['language' => 'de'];
echo t(1);
echo t(2);
并輸出:
Hello
Good bye
Hallo
auf Wiederschauen
如果你使用一些不存在的翻譯ID,t(3);你會得到例外:PHP Fatal error: Uncaught Exception: Unknown text key: 3
最好有翻譯服務/課程,但我認為這個簡單的版本更適合初學者。
您還可以考慮使用其中一種語言作為翻譯鍵(甚至引入新列作為翻譯鍵),因此它更具描述性: -echo t('hello')這比在源代碼中更容易跟蹤echo t(1)。
- 3 回答
- 0 關注
- 180 瀏覽
添加回答
舉報