php使用即时变量从数据库中获取多语言数据

okxuctiv  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(673)

我想要的是存储每个单词/句子/。。。在这样的数据库选项卡中:
表名:

translate

柱:

id, var, dutch, english, french

例子:

'1', 'titleOne', 'Hallo Wereld!', 'Hello World!', 'Bonjour le monde!'

我想打印变量,例如在标题部分:

<?php
echo $titleOne;
?>

因为会有数百行我不想设置 $titleOne = $row['titleOne'] 每一行。
有人能帮我一个很好的查询,拉,获取,数组,循环。。。你怎么称呼这个(或者一个好的替代方法也是好的!)
这是纯php,没有使用框架。
ps:我不是一个phpMaven,所以请尽量保持简单:-)!
谢谢!

puruo6ea

puruo6ea1#

直接回答你的问题。您可以按以下方式查询当前设置:

-- 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查询数据库。您要做的是:
找出要使用的区域设置。这将是最棘手的部分之一。例如,您是否应该使用url、会话、浏览器设置中指定的内容?如果这些都没有指定会发生什么?回退区域设置是什么?看我的 `getLanguage()` 中的函数https://stackoverflow.com/a/49758067/296555 一些想法。
提取该区域设置的所有翻译并将其存储在内存中。下面是一个基本查询,用于获取给定区域设置的所有翻译。
xqnpmsa8

xqnpmsa82#

我支持其他人关于表结构的建议,但要回答您的问题,可以使用extract

$row = array(
    col_1 => 'a', 
    col_2 => 'b', 
    col_3 => 'c' 
)

extract($row);

// results in:

//   $col_1  assigned value 'a'
//   $col_2  assigned value 'b'
//   $col_3  assigned value 'c'

相关问题