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个表格。只有您事先知道哪种语言,这种方法才有意义