如何本地化数据库表

时间:2011-09-01 12:25:14

标签: sql localization

本地化数据库表的最佳方法是什么,例如持有国家?

1平台

CountryID|Code|NameEN|NameIT
----------------------------
1        |IT  |Italy |Italia

SELECT CountryID, Code, NameEN AS Name
FROM Countries

2加入表

CountryID|Code
--------------
1        |IT

CountryID|LocalizationCode|Name
---------------------------------
1        |EN              |Italy
---------------------------------
2        |IT              |Italia

SELECT CountryID, Code, Name
FROM Countries INNER JOIN CountriesLoc ON Countries.CountryID = CountriesLocs.CountryID
WHERE LocalizationCode = 'EN'

谢谢!

2 个答案:

答案 0 :(得分:2)

我建议使用第二个选项,尽管您似乎有一些数据错误。

国家:

Id  Code
===============
1   IT

Localized_Country:

CountryId  LanguageCode  LocalizedName
=========================================
1          IT            Italia
1          EN            Italy

然后你会这样查询:

SELECT a.Id, b.LocalizedName
FROM Country as a
JOIN Localized_Country as b
ON b.CountryId = a.Id
AND b.LanguageCode = :InputLanguageCode
WHERE a.Code = :InputInternationalCountryCode

在视图中包裹(或类似的东西),你是金色的。

一些建议:
您可能希望将Language(或其他类型的Locale概念)推送到自己的表中。密钥可以是自动增量值,也可以是国际字符,并不重要 请务必在(CountryId, LanguageCode)上添加一个唯一约束,以防万一。永远不要忘记你的外键。

答案 1 :(得分:1)

我将使用第二个,它更灵活,只记得在第二个表中的CountryId列上创建索引。

我刚刚注意到你的问题:

SELECT CountryID, Code, Name
FROM Countries INNER JOIN CountriesLoc ON Countries.CountryID = CountriesLocs.CountryID
WHERE LocalizationCode = 'EN'

为什么要添加

  

其中LocalizationCode ='EN'

你认为对于意大利国家而言,可以使用多种语言吗?

EDITED

    SELECT CountryID, Code, Name
FROM Countries INNER JOIN CountriesLoc ON Countries.CountryID = CountriesLocs.CountryID
WHERE Code = 'EN'