我正在尝试通过从MySQL表中提取信息来构建英语和法语网站但我被困住了。我觉得那种查询对我来说太先进了。我的想法是拥有一个翻译了两种语言的表格并为其分配ID。
这是表格lang
+--------+-------------------+----------------------+ | id | English | French | +--------+-------------------+----------------------+ | 1 | Verbal Warning | Avis verbal | | 2 | Written Warning | Avis écrit | | 3 | Evaluation | Évaluation | | 4 | Other (specify) | Autres (spécifiez) | +--------+-------------------+----------------------+
然后我有另一张表,人们将'Topic'输入到数据库中。因此,当我将页面切换为法语时,表格的内容将以法语显示。
+-----------+---------+ | EMP_ID | Topic | +-----------+---------+ | 845689 | 4 | | 185648 | 3 | | 485497 | 1 | | 416798 | 2 | +-----------+---------+
当我们在英文页面
时,我希望将输出放在表格中+-----------+------------------+ | EMP_ID | Topic | +-----------+------------------+ | 845689 | Other (specify) | | 185648 | Evaluation | | 485497 | Verbal Warning | | 416798 | Written Warning | +-----------+------------------+
然后选择法语页面。
+-----------+---------------------+ | EMP_ID | Topic | +-----------+---------------------+ | 845689 | Autres (spécifiez) | | 185648 | Évaluation | | 485497 | Avis verbal | | 416798 | Avis écrit | +-----------+---------------------+
有没有办法让它发挥作用或有更简单的方法来展示
答案 0 :(得分:3)
正如另一个答案中所建议的那样,最好将语言字符串存储在文件中,并使用Javascript加载它们。我建议使用i18next,这是一个非常有用且易于使用的JS库。这真的很简单:
/* en.json */
{
"home":{
"title":"Hello, world !",
"welcomeMessage":"Welcome to my great website !"
}
}
/* fr.json */
{
"home":{
"title":"Bonjour !",
"welcomeMessage":"Bienvenue sur mon superbe site web"
}
}
在你的HTML代码中:
<!-- head and other stuffs... -->
<script type="text/javascript" src="i18next.js"></script>
<body onload="translate()">
<h1 i18n-data="home.title"></h1>
<p i18n-data="home.welcomeMessage"></p>
</body>
在你的函数JS文件中:
function translate() {
i18n.init({
resGetPath:'en.json',
getAsync:false
}).done(function(){
$('[data-i18n]').i18n();
});
}
这样,您的网站运行速度更快(数据库调用次数减少),并且添加/更新某些字符串会更容易。希望它会有所帮助:)
答案 1 :(得分:1)
没有理由在数据库中保留lang架构,而是尝试用lang包含文件。
答案 2 :(得分:0)
每次有人加载可能是性能灾难的页面时,你不应该更改表内容;-)但是你可以创建一个SQL Join Query。
如果您在法语页面上,那么
SELECT l.French FROM topic AS t
JOIN lang AS l ON t.Topic = l.id
WHERE t.EMP_ID = $emp_id;
和你做的英语
SELECT l.English FROM topic AS t
JOIN lang AS l ON t.Topic = l.id
WHERE t.EMP_ID = $emp_id;
答案 3 :(得分:0)
我认为每种语言最简单的方法是create a view:
法语:
CREATE VIEW empl_fr
AS
SELECT
emp.EMP_ID as EMP_ID
, lang.French as Topic
FROM employee emp, language lang
WHERE emp.Topic = lang.id
对于英语:
CREATE VIEW empl_en
AS
SELECT
emp.EMP_ID as EMP_ID
, lang.English as Topic
FROM employee emp, language lang
WHERE emp.Topic = lang.id
然后您可以查询以下主题:
SELECT * FROM empl_fr
或
SELECT * FROM empl_en
使用两种语言创建视图并使用语言参数查询视图的方法更为标准
答案 4 :(得分:0)
使您的网站可扩展且易于支持未来的其他语言;我建议以预期的方式使用MySQL并创建一个关系模式。
如果您有主题,并且主题标题可以翻译,那么您将需要三个表:topics
表,languages
表和连接这两个表的表。
您的主题表很简单:您只需要一个主键和任何其他与语言无关的列(例如created
,modified
等)。对于languages
表,再次存储主键,语言名称,以及用于一致命名/标识的ISO短代码。
最后,您的连接表(可以称为languages_topics
)是关联发生的位置。您将拥有两个外键(topic_id
和language_id
)以及另一个实际保存本地化值的列。
例如,如果英语是语言ID 1而法语是语言ID 2,那么您的表格可能如下所示:
+----------+-------------+----------------+
| topic_id | language_id | value |
+----------+-------------+----------------+
| 1 | 1 | Verbal Warning |
| 1 | 2 | Avis verbal |
+----------+-------------+----------------+
如您所见,一个主题在此表中可以有多行,每种语言都有一个记录来提供翻译。
我知道这可能不会完全回答您的问题,但应该为您提供最佳存储数据的正确途径。可以在将来轻松添加语言,而无需修改数据库架构。