我想在我的网站实现一个语言翻译。为此,在我的数据库中创建了一个表“translations”:
id | de | en | other languages
1 | Hallo | Hello | ...
基于此,我在标题中添加了以下查询:
if ($user['language'] == 'de') {
// Select prepared PDO
$statement = $pdo->prepare("SELECT id, de FROM translations");
$result = $statement->execute(array());
$text = $statement->fetch();
}
if .... other languages
我想展示基于用户语言的文本翻译。我想知道现在是否有一个简单的php echo方法可以使用。如上所述,我有在表中可用的翻译,但whta是最简单的方法来回应它?
例如。当前状态:
<h4 class="...">Hallo</h4>
翻译的新状态(当然不起作用):
<h4 class="..."><?php echo $text['en'] ?></h4>
因此,我缺少的是一个简单的方法,将id(行)寻址到这个文本输出,在这个示例“1”中。
作为一种可能的方法,我发现了这个例子:
<?php
$age=array("Peter"=>"35");
echo "Peter is " . $age['Peter'] . " years old.";
?>
我想我可以用它,它看起来从文本大小的效率。但是我不知道如何修改上面表的查询。最好是我能做一些像这样的事情:
echo $text['1']
它显示了文本输出:“哈罗”。万一:
echo $text['2']
它会显示“你好”。
你觉得这个方法怎么样?你能帮我修改我的查询让这个方法工作吗?
谢谢!
3条答案
按热度按时间4jb9z9bj1#
基于你在我第一个答案下的问题,我决定添加另一个解决方案-没有函数等更容易。
使用fetchall在单个查询中获取所有翻译:
你的
$textsRaw
将如下所示:现在我们改变了
$textsRaw
进入$texts
结构更简单:现在
$texts
像这样:如果你有这个,那么翻译就像做:
如果您访问的翻译id不存在,您将得到正常的php通知:
PHP Notice: Undefined offset: 3 in ....php on line ...
ygya80vv2#
我曾经这样解决它,我不想选择所有的数据,因为我认为这将是浪费资源。我提出的解决方案(imo)相当优雅:
在语言中有一个变量,如
$language = 'NL'
. 然后,在选择中使用:如果你拿到了,你可以用
$result['description']
使用您想要的语言:)对于您的查询,这需要最少的工作。你可以用
['title', 'description']
作为以查询中的格式返回的输入,这样可以使查询更小:请注意,这是解决我的情况,但以最小的努力,它应该适合您的需要也
7lrncoxx3#
使用fetchall在单个查询中获取所有翻译:
你的
$texts
将如下所示:现在您不能用简单的echo构造来实现这一点,但您可以这样定义函数:
现在无论你想在哪里翻译你只要做:
echo t(1);
或者echo t(2);
并根据用户语言输出翻译,例如:和输出:
如果你使用一些不存在的翻译id,比如
t(3);
您将获得例外:PHP Fatal error: Uncaught Exception: Unknown text key: 3
最好有翻译服务/类,但我认为这个简单的版本更适合初学者。您还可以考虑使用其中一种语言作为翻译键(甚至引入新列作为翻译键),这样更具描述性:
echo t('hello')
-这比在源代码中跟踪更容易echo t(1)
.