Чтобы ответить на ваш вопрос напрямую.Вы можете запросить текущую настройку следующим образом:
-- For Dutch (pseudocode)
$query = 'SELECT var, dutch FROM translate';
$translations = array();
while loop ($row = $query) {
$translations['var'] = $row['dutch'];
}
// Then, to access translations you would:
echo $translations['titleOne'];
НО вы не хотите этого делать.Эта структура таблицы приведет вас на путь сожаления.Обратите внимание на наши предупреждения.Есть много способов сделать это, и вы выбрали путь SQL, поэтому вот несколько советов.
Измените структуру таблицы, чтобы вам не приходилось добавлять новый столбец при каждом добавленииновый язык.
Таблица: языки (Добавить новую строку для поддержки нового языка)
id, locale, language
1, en_CA, English
2, en_US, English
3, en_UK, English
4, es_ES, Spanish
5, es_MX, Spanish
...
Таблица: переводы (добавить новую строку для добавления перевода)
id, locale, translation_key, translation
1, en_CA, 'hello', 'Hi from Canada'
2, en_US, 'hello', 'Hi from the US'
3, en_UK, 'hello', 'Hi from the UK'
4, es_ES, 'hello', 'Hi from Spain'
5, es_MX, 'hello', 'Hi from Mexico'
...
translations.locale
должен быть внешним ключом, указывающим на языки, но я не уверен, какой у вас уровень SQL, поэтому оставлю его понятным, насколько я знаю, как.
Полагаю, вы можете выяснить, как запрашивать вашу базу данных из PHP.То, что вы хотите сделать, это:
- выяснить, какую локаль использовать.Это будет одна из самых сложных частей.Ex.Вы должны использовать тот, который указан в URL, сеансе, настройке браузера?Что произойдет, если ни один из них не указан?Какой резервный язык?Посмотрите мою
getLanguage()
функцию в https://stackoverflow.com/a/49758067/296555 для некоторых идей. Извлеките все переводы для этой локали и сохраните их в памяти.Вот основной запрос, чтобы получить все переводы для данной локали.
<?pseudocode
$locale = 'en_CA';
// Find all translations for a given locale
$dbQuery = 'SELECT translation_key, translation
FROM translations
WHERE locale = :locale';
;
Поместите те записи, которые вы только что вытащили в память.
<?pseudocode
$translations = array();
while loop ($row = $dbQuery) {
$translations[$row['translation_key']] = $row['translation'];
}
Теперь в вашем приложении вы можете получить доступ к переводам через этот массив.
echo $translations['hello'];
Вы захотите сделать это высоко в своем приложении в части, которая вызывается при каждом запросе.Как только вы это сделаете, вы захотите начать оптимизацию.Вы можете сохранить результаты базы данных в сеансе, чтобы вам не приходилось запрашивать базу данных при каждой загрузке страницы или внедрять более надежную форму кэширования.
Честно говоря, я думаю, что у вас есть правильная идея, но дьявол кроется в деталях или, как они говорят.Прочитайте ссылку, на которую я указал.Это не идеально, но это должно помочь вам относительно быстро найти работоспособное решение.