2

我正在尝试通过从 MySQL 表中提取信息来建立一个英语和法语网站,但我被卡住了。我认为这种查询对我来说太超前了。我的想法是有一个翻译两种语言的表格,并为它们分配一个 ID。

这是表格语言

+--------+-------------------+----------------------+
| id     | English           | French               |
+--------+-------------------+----------------------+
| 1      | Verbal Warning    | Avis verbal          |
| 2      | Written Warning   | Avis écrit           |
| 3      | Evaluation        | Évaluation           |
| 4      | Other (specify)   | Autres (spécifiez)   |
+--------+-------------------+----------------------+

然后我有另一个表,人们将“主题”输入到数据库中。因此,当我将页面切换为法语时,表格的内容将以法语显示。

+-----------+---------+
| 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         |
+-----------+---------------------+

有没有办法让它工作或者有更简单的方法来显示

4

5 回答 5

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();
    });
}

这样,您的网站将运行得更快(更少的数据库调用),并且更容易添加/更新一些字符串。希望它会有所帮助:)

于 2013-08-30T09:23:35.180 回答
1

没有理由将 lang 模式保留在 DB 中,而是尝试将文件包含在您的 lang 中。

于 2013-08-30T09:03:09.540 回答
0

使您的网站可扩展并易于支持未来的其他语言;我建议以预期的方式使用 MySQL 并创建一个关系模式。

如果您有主题,并且主题标题是可翻译的,那么您将需要三个表:一个topics表、一个languages表和一个连接两者的表。

您的主题表很简单:您只需要一个主键和任何其他与语言无关的列(例如createdmodified)。对于languages表,再次存储一个主键、语言名称,也许还有一个 ISO 短代码,以实现一致的命名/标识。

最后,您的连接表(可以称为languages_topics)是关联发生的地方。您将有两个外键 ( topic_idand language_id) 和另一个实际保存本地化值的列。

例如,如果英语是语言 ID 1,法语是语言 ID 2,那么您的表格可能如下所示:

+----------+-------------+----------------+
| topic_id | language_id | value          |
+----------+-------------+----------------+
| 1        | 1           | Verbal Warning |
| 1        | 2           | Avis verbal    |
+----------+-------------+----------------+

如您所见,一个主题在此表中可以有多行,每种语言都有一条记录以提供翻译。

我知道这可能并不能完全回答您的问题,但应该让您在如何最好地存储数据方面走上正确的道路。将来可以轻松添加语言,而无需修改数据库架构。

于 2013-08-30T09:14:47.633 回答
0

好吧,您不应该在每次有人加载页面时更改表格内容,这将是性能灾难;-) 但是您可以进行 SQL 连接查询。

如果您在法语页面上,您会这样做

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;
于 2013-08-30T09:10:26.210 回答
0

我认为最简单的方法是为每种语言创建一个视图:

对于法语:

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

更完善的方法是使用两种语言创建视图并使用语言参数查询您的视图

于 2013-08-30T09:12:57.340 回答