【问题标题】:handle language identification处理语言识别
【发布时间】:2011-08-05 15:37:27
【问题描述】:

在多语言网站中,我应该使用数字还是关键字来引用语言?

例如,假设一个英国人从服务列表中选择一项服务,则服务列表将为英语,而如果西班牙人从服务列表中选择,则该列表将为西班牙语。

服务列表是从数据库中的一个表中选择的,每个服务都有一个唯一的编号来标识它,并且有一些东西来标识该服务是用什么语言编写的。 我要问的是,哪个更好。使用数字来识别语言,还是使用语言代码?

例子:

假设的服务表:

id | service_id | service | lang
------------------------------------
0  | cooking    | 1       | en
1  | driving    | 2       | en
2  | singing    | 3       | en
3  | running    | 4       | en
4  | cocinar    | 1       | es
5  | conducir   | 2       | es
6  | cantar     | 3       | es
7  | correr     | 4       | es

VS

id | service_id | service | lang
------------------------------------
0  | cooking    | 1       | 1
1  | driving    | 2       | 1
2  | singing    | 3       | 1
3  | running    | 4       | 1
4  | cocinar    | 1       | 2
5  | conducir   | 2       | 2
6  | cantar     | 3       | 2
7  | correr     | 4       | 2

我给每种语言一个数字ID

我可以看到语言代码方法使数据库更具人类可读性,但是如果服务器无论如何都处理它为什么真的很重要,因为数字对服务器来说更容易,但是我必须给每个人一个数字语言。

那么您认为哪种方法更好,为什么?

【问题讨论】:

    标签: php mysql sqlite database-design


    【解决方案1】:

    我几乎总是将这些事情标准化,但这可能是一个罕见的例外,原因如下:

    1. nchar(2) 列只占用 4 个字节,与 int 列相同。因此,性能不应受到影响,尤其是在您将联合设置为序数时。

    2. 两字符语言代码符合国际标准,不可能永远更改。所以大规模更新应该不是问题。

    所以规范化的论点在这种情况下并不真正适用。

    【讨论】:

    • 感谢coalation 提示,永远不会想到它。所以在语言的情况下,代码毕竟更好。
    • +1 我同意 Jeffrey 的建议 - 使用标准代码。然而,规范化评论没有任何意义。语言是否使用数字或语言代码与规范化无关。
    • @Jeffrey 我是否应该考虑使用 5 字节代码,例如“en_US”?
    • @dportas - 是的,我在写完这篇文章后意识到“标准化”不是正确的术语。相反,我想的是,我通常会使用人工密钥而不是自然密钥,这是一种适合自然密钥的罕见情况。 (我知道很多地方都提倡自然键,但在大多数情况下,这不是我对此事的感受。)
    • 我让措辞保持不变,因为如果要使用人工密钥,那么效果将与标准化相同。也就是说,许多“en”实例将被数字键引用的单个实例替换。
    【解决方案2】:

    有一个ISO standardized set of language codes。我只是使用示例 1 中的那些。您可能应该有一个辅助表,其中列出了长拼写版本的短 2/3 数字代码。

    【讨论】:

    • +1 数据库中的 iso_languages 表是一个非常好的主意。使用第一个示例中的 2 字母代码加入它就可以了。
    猜你喜欢
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    相关资源
    最近更新 更多