Php 使用存储在MySQL中的多语言字段标题的最佳方式是什么?
我将字段或菜单项的正确标题存储在不同语言的MySQL表“menuLang”中 作为示例:Php 使用存储在MySQL中的多语言字段标题的最佳方式是什么?,php,html,mysql,Php,Html,Mysql,我将字段或菜单项的正确标题存储在不同语言的MySQL表“menuLang”中 作为示例: language = 1,text[1] = "Welcome",text[2] = "Good bye" language = 2,text[1] = "Willkommen",text[2] = "Auf Wiedersehen" 我想在输出的程序代码中有一个变量(文本),具体取决于语言 用户应该可以选择通过鼠标单击标志按钮来更改整个网页 我不确定什么是快速的,不需要花费很多资源,而且是高效的 我不知
language = 1,text[1] = "Welcome",text[2] = "Good bye"
language = 2,text[1] = "Willkommen",text[2] = "Auf Wiedersehen"
我想在输出的程序代码中有一个变量(文本),具体取决于语言
用户应该可以选择通过鼠标单击标志按钮来更改整个网页
我不确定什么是快速的,不需要花费很多资源,而且是高效的
我不知道怎么做的一般方法。我查看了互联网,没有找到好的答案。其他人建议您查看/系统进行本地化。这是个好建议 如果你一定要用MySQL来实现这一点,那么看起来你需要这样一个表:
language_id message_id message_text
1 1 Welcome
2 1 Bienvenue
3 1 Wilkommen
1 2 See you later
2 2 Au revoir
3 2 Auf Wiedersehen
1 3 File not found
您可能还需要为每个用户提供“语言选择”属性。例如,在user
表中可能有一个名为language\u id
的列
最后,如果您的本地化工作与现实世界中的大多数一样,那么您将拥有一种完整的语言,而其他语言将缺少一些条目。请参见示例中的最后一行。在我的示例中,默认语言具有language\u id=1
然后,当您需要消息文本时,您将知道消息id
和用户id
。您可以执行此查询以查找文本
SELECT generic.message_id,
COALESCE(local.message_text,generic.message_text) message_text
FROM message generic
LEFT JOIN (
SELECT message_text, message_id, user_id
FROM user
LEFT JOIN message ON message.language_id = user.language_id
) local ON generic.message_id = local.message_id
AND local.user_id = ???user_id???
WHERE generic.language_id = 1
AND generic.message_id = ???message_id??
COALESCE()
函数接受本地化消息(如果存在),并接受通用消息(如果不存在)
编辑:(修复了查询中的缺陷。)也可以使用已编辑的查询,省略该行
AND generic.message_id = ???message_id???
要获取包含所有消息的表,请尽可能本地化。这里有一个提琴你可能想看看
gettext
很棒的技巧。我已经下载了。感谢所有帮助这一最佳编程问题页面的人,祝他们新年快乐!你所做的是杰出的。对不起,对系统操作人员来说,这是离题的,但现在是时候说出来了!奥利,现在真的很有趣。您使用的字段名与我在MySQL表中使用的字段名完全相同。你怎么知道的?我完全按照你说的做的。有超能力的人不会谈论超能力!2016年快乐!奥利,同意你的想法:但是我如何做到不必在每个文件中都包含这段代码呢?我的想法是只从数据库加载一次数据,使其具有全局可读性,但我认为这样做不是最好的。有没有这样的方法:注册,但要这样做:menuText[7]作为占位符?