Php 制作翻译表的正确方法?
我们目前使用的翻译表如下所示:Php 制作翻译表的正确方法?,php,mysql,sql,translation,Php,Mysql,Sql,Translation,我们目前使用的翻译表如下所示: | id | type | name | lang | value | |-----+-------+----------+-------+----------| | 853 | text | question | en | question | | 854 | text | question | nl | vraag | | id | type | name | lang | nl | en
| id | type | name | lang | value |
|-----+-------+----------+-------+----------|
| 853 | text | question | en | question |
| 854 | text | question | nl | vraag |
| id | type | name | lang | nl | en |
|-----+-------+----------+-------+---------+------------+
| 853 | text | question | en | vraag | question |
因此,对于另一种语言的每个额外翻译,我们必须添加另一行
我们正在考虑将其更改为一个表,其中每个国家/地区的值都有一列(因此只需添加一行)
所以看起来是这样的:
| id | type | name | lang | value |
|-----+-------+----------+-------+----------|
| 853 | text | question | en | question |
| 854 | text | question | nl | vraag |
| id | type | name | lang | nl | en |
|-----+-------+----------+-------+---------+------------+
| 853 | text | question | en | vraag | question |
- 与传统方法相比,第二种方法有什么缺点吗 第一个李>
- 您建议如何创建一个类似的翻译表 这个
- 在数据库中保留较少的位置
- 加载速度更快
- 易于编辑
- 在数据库中保留较少的位置
- 加载速度更快
- 易于编辑
- 第二种方法的缺点是,对于要添加的每种新语言,都必须更改数据库结构(遵循代码更改以反映结构更改),而第一种方法只需要新行(保持相同的结构)
第一个想法的另一个好处是,您实际上只需要为添加到数据库中的翻译提供空间/内存。在第二种方法中,可能会有很多空字段,以防无法翻译所有文本
这样做的一种方法可能是(对@mudasobwa的上述答案的补充):
因此,如果您有另一种语言,请将其添加到语言表中,并为该语言的主文本添加翻译
向ID添加索引将有助于加快对文本的查询。第二种方法的缺点是,对于要添加的每种新语言,都必须更改数据库结构(遵循代码更改以反映结构更改),而第一种方法只需要新行(保持相同的结构) 第一个想法的另一个好处是,您实际上只需要为添加到数据库中的翻译提供空间/内存。在第二种方法中,可能会有很多空字段,以防无法翻译所有文本 这样做的一种方法可能是(对@mudasobwa的上述答案的补充): 因此,如果您有另一种语言,请将其添加到语言表中,并为该语言的主文本添加翻译
向id添加索引将有助于加快文本查询速度。为什么不连接两个表,主表包含
id、type、name
字段,并嵌套id、master\u id、lang、value
。对于给定的示例,如下所示:
ID TYPE NAME
1 text question
ID MASTER_ID LANG TRANSLATION
1 1 en question
2 1 nl vraag
一种语言的翻译集由SQL查询提供:
SELECT * FROM `nested` WHERE `lang` = 'nl'
-- vraag
-- .....
给定术语的翻译(例如,问题
,具有id=1
):
为什么不连接两个表,一个是带有
id、type、name
字段的主表,另一个是嵌套的id、master\u id、lang、value
。对于给定的示例,如下所示:
ID TYPE NAME
1 text question
ID MASTER_ID LANG TRANSLATION
1 1 en question
2 1 nl vraag
一种语言的翻译集由SQL查询提供:
SELECT * FROM `nested` WHERE `lang` = 'nl'
-- vraag
-- .....
给定术语的翻译(例如,问题
,具有id=1
):
为什么不连接两个表,一个是带有
id、type、name
字段的主表,另一个嵌套有id、master\u id、lang、value
?因此对于1个翻译,我必须添加一个“主翻译”,而不是一行一行地添加所有翻译?不。我需要粘贴一些代码,让我们看看我的答案。我将添加一个新选项:.json文件。我甚至不是在开玩笑$lang['master_key']='chave mestra'
然后您只需使用json_encode
和file_put_contents()
将其编码为pt.json
,然后您只需在需要使用它时将其转换回来;不需要sql表,并且总是在一个简单的位置获取:)为什么不连接两个表,主表带有id、type、name
字段,嵌套有id、master\u id、lang、value
?因此对于1个翻译,我必须添加一个“主翻译”,而不是逐行添加所有翻译?不,我需要粘贴一些代码,让我们看看我的答案。我将加入一个新选项:。json文件。我甚至不是在开玩笑$lang['master_key']='chave mestra'
然后您只需使用json_encode
和file_put_contents()
将其编码为pt.json
,然后您只需在需要使用它时将其转换回来;不需要sql表,而且总是在一个简单的地方获取:)我唯一想知道的是,我有10种语言的一百万个翻译。在这种类型的格式中,我需要10倍的行+额外的百万主行,而不是第二个示例中的百万行。速度会慢很多吗?无论你有一百万个翻译(你是Jimmy Wales,不是吗?),我想你最好为10种语言维护10个后续表。这是关于可维护性和性能的鸡蛋问题。如果您使用适当的索引,您在获取id数据时应该不会有任何问题。您还可以为您的语言添加另一个查找表,这样您就有了“master_id”,一个语言id和你的翻译文本。@TheChaos这就是我建议谈论10种语言的10个表格的内容。我唯一想知道的是,我有100万个10种语言的翻译。在这种类型的格式中,我需要10倍的行+额外的百万主行,而不是第二个示例中的百万行。速度会慢很多吗?无论你有一百万个翻译(你是Jimmy Wales,不是吗?),我想你最好为10种语言维护10个后续表。这是关于可维护性和性能的鸡蛋问题。如果您使用适当的索引,您在获取id数据时应该不会有任何问题。您还可以为您的语言添加另一个查找表,这样您就有了“master_id”,语言id和您的翻译文本。@Chaos这是我建议谈论的10种语言的10个表格。只有您事先知道哪种语言,这种方法才有意义