我在不同语言的MySQL表“menuLang”中存储字段或菜单项的正确标题。
作为样本:
language = 1,text[1] = "Welcome",text[2] = "Good bye"
language = 2,text[1] = "Willkommen",text[2] = "Auf Wiedersehen"
我希望在程序代码中输出变量(文本),具体取决于语言。
用户可以选择通过鼠标单击标志按钮来更改整个网页。
我不确定什么是快速的,不会花费很多资源并且效率很高。
我不知道如何做到的一般方法。我检查了互联网,但没有找到好的答案。
答案 0 :(得分:0)
其他人建议您查看gettext
/ poedit
系统进行本地化。这是一个很好的建议。
如果您肯定会使用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
您可能还需要为每个用户提供“语言选择”属性。例如,您的language_id
表中可能有一个名为user
的列。
最后,如果您的本地化工作与现实世界中的大多数工作相似,那么您将拥有一种完整的语言,而其他语言将缺少一些条目。请参阅我的示例中的最后一行。我的示例中默认语言为language_id = 1
。
然后,当您需要消息文本时,您会知道message_id
和user_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???
获取包含所有消息的表,如果可能则进行本地化。这是一个小提琴http://sqlfiddle.com/#!9/37e2e/2/0