65.9K
CodeProject 正在变化。 阅读更多。
Home

多语言开发用的全球化资源

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.70/5 (8投票s)

2008年6月8日

CPOL

7分钟阅读

viewsIcon

53689

downloadIcon

670

为多语言项目提供所需的表和数据。

引言

本文档包含正确进行多语言开发所必需的表格和数据。我强烈建议使用国际标准化组织(ISO)作为信息的主要来源,因为这是实现高质量产品和兼容性的唯一途径。请记住,ISO通常只管理标准。每个ISO标准背后都有一些公司为商业用户提供数据库和更新。互联网也是一个很好的信息来源,因此我从各种资源收集了全球化数据,并将其放入6个表格中。如果您有任何建议,请通过电子邮件与我联系:Evaldas Jocys <evaldas@jocys.com>。

为了实现完整的多语言支持,需要这些表格的数据

  1. 语言 - 关于所有语言的信息
  2. 文化 - 关于所有文化(语言+国家)的信息
  3. 编码 - 关于所有编码的信息
  4. 范围 - 可用于通过IP地址获取客户所在文化
  5. 货币 - 每个国家的商业信息
  6. 国家货币 - 该国使用的货币

要求

  1. Microsoft SQL Server 2005
  2. Microsoft .NET Framework 3.5

安装

  1. 下载上面指定的 ZIP 文件。
  2. 将 ZIP 内容解压到临时文件夹。
  3. 导航到WebApp\Projects\Globalization\SQL\文件夹。
  4. 打开Globalization-SqlDataImport.bat文件。
  5. 转到第5行,将srv值更新为您的SQL Server名称。
  6. 转到第6行,将cat值更新为您的数据库名称。
  7. 保存并关闭Globalization-SqlDataImport.bat文件。
  8. 执行Globalization-SqlDataImport.bat以重新创建[Globalization_*] **表格**和**数据**。
    **注意**:导入脚本会询问数据库登录名和密码。如果您想使用受信任的连接,请按[Enter]键。

Using the Code

存档包含.zip**\Engine**文件夹,其中包含LINQ to SQL类和一些方法。您可以将此文件夹的内容提取到您的C#项目中。例如,Engine\Globalization\Ranges.cs文件包含两个函数...

/// <summary>
/// Convert IP Address string to long number.
/// </summary> 
/// <param name="ipString">IP Address string: 64.233.167.99</param> 
/// <returns>Numeric representation of IP Address</returns>
public long IpToInt(string ipString)
{
    System.Net.IPAddress address = System.Net.IPAddress.Parse(ipString);
    return (long)BitConverter.ToUInt32(address.GetAddressBytes().Reverse().ToArray(), 0);
}

/// <summary>
/// Get Alpha 3 Code of country by IP Address.
/// </summary>
/// <param name="ipString">IP Address string: 64.233.167.99</param>
/// <returns>ISO 3166-1 Alpha-3 Code. For example: LTU</returns>
public string GetCountryByIp(string ipString)
{
    Data.GlobalizationDataContext db = new Data.GlobalizationDataContext();
    long ip = IpToInt(ipString);
    Data.Range range = db.Ranges.SingleOrDefault
            (item => item.RangeStart <= ip && ip <= item.RangeEnd);
    return (range == null) ? string.Empty : range.CountryA3;
}    

这样您就可以获取访问者的国家代码,并将他/她重定向到特定的网页

// Get visitor's IP Address.
string ipString = Request.ServerVariables["REMOTE_ADDR"];
// Get ISO 3166-1 Alpha-3 Code of Country by IP Address.
string countryA3 = 
    Engine.AppContext.Current.Globalization.Ranges.GetCountryByIp(ipString);
// Define default language of user: 
// Lithuanian if user came from Lithuania or English for all other countries.
string language = (countryA3 == "LTU") ? "ltu" : "enu";
// Redirect user to specific page.
System.Web.HttpContext.Current.Response.Redirect("Default_" + language + ".htm", true);

1. 国家

ID 名称 数据类型 Nulls 默认值 描述
1 CountryA3 char(3) NOT NULL ISO 3166-1 Alpha-3代码。例如:LTU
2 CountryA2 char(2) NOT NULL ISO 3166-1 Alpha-2代码。例如:GB
3 ShortName nvarchar(256) NOT NULL 国家简称(Pascal Case)。例如:United Kingdom
4 FullName nvarchar(512) NOT NULL 国家全称。例如:Republic of South Africa
5 NativeShortName nvarchar(256) 国家简称的本地名称。例如:Lietuva
6 NativeFullName nvarchar(512) 国家全称的本地名称。例如:Lietuvos Respublika
7 IsoCode int(4) NOT NULL 国家的ISO代码
8 IsoName nvarchar(256) NOT NULL '' ISO 3166-1简称。例如:SOUTH AFRICA
9 DialingCode int(4) 国际拨号代码。例如:44
10 备注 nvarchar(2000) NOT NULL '' ISO 3166-1备注。例如:包括马里恩岛、爱德华王子岛
11 IsEnabled bit(1) NOT NULL (1) 记录活动状态
12 DateCreated datetime(8) NOT NULL getdate() 记录创建日期
13 DateUpdated datetime(8) NOT NULL getdate() 记录更新日期

2. 语言

ID 名称 数据类型 Nulls 默认值 描述
1 LanguageA3 char(3) NOT NULL '' ISO 639-3 Alpha-3代码。例如:RUS
2 LanguageA2 char(2) NOT NULL '' SO 639-1 Alpha-2代码。例如:RU
3 LanguageName nvarchar(256) NOT NULL '' 语言名称(Pascal Case)。例如:Russian
4 NativeName nvarchar(256) NOT NULL '' 语言的本地名称。例如:Русский
5 描述 nvarchar(2000) NOT NULL '' 描述和注释
6 IsPrimary bit(1) NOT NULL 主要语言
7 IsWellKnown bit(1) NOT NULL 您只能使用广为人知的语言:例如:1
8 IsEnabled bit(1) NOT NULL (1) 记录活动状态
9 DateCreated datetime(8) NOT NULL getdate() 记录创建日期
10 DateUpdated datetime(8) NOT NULL getdate() 记录修改日期

3. 文化

ID 名称 数据类型 Nulls 默认值 描述
1 CultureCode varchar(20) NOT NULL 缩写的文化名称。例如:mk-MK
2 ParentCultureCode varchar(20) 父级缩写的文化名称。例如:mk-MK
3 CultureName nvarchar(256) 文化名称
4 NativeName nvarchar(256) 文化的本地名称。
5 AbbreviatedIsoName char(3) ISO/CD 639-5 Alpha-3代码:例如:mkd
6 AbbreviatedWindowsName char(3) 缩写的Windows名称。例如:MKI
7 CodePageAnsi int(4) ANSI代码页。例如:1251
8 CodePageEbcdic int(4) EBCDI代码页。例如:500
9 CodePageOem int(4) OEM代码页。例如:866
10 CodePageMac int(4) MAC代码页。例如:10007
11 IsNeutral bit(1) 中性文化指示符
12 DatePattern nvarchar(40) 日期格式。例如:dd.MM.yyyy
13 TimePattern nvarchar(40) 时间格式。例如:HH:mm
14 CurrencyPatterns nvarchar(100) 货币格式。例如:n $;-n $
15 CurrencySymbol nvarchar(20) 货币符号。例如:ден。
16 FirstDayOfWeek nvarchar(40) 每周的第一天。例如:Monday
17 DayNames nvarchar(512) 星期名称。例如:недела;понеделник;вторник;...
18 MonthNames nvarchar(512) 月份名称。例如:јануари;февруари;март;април;...
19 AbbreviatedDayNames nvarchar(256) 缩写的星期名称。例如:нед;пон;втр;срд;чет;пет;саб
20 AbbreviatedMonthNames nvarchar(512) 缩写的月份名称。例如:јан;фев;мар;апр;мај;јун;јул;...
21 IsEnabled bit(1) NOT NULL (1) 记录活动状态
22 DateCreated datetime(8) NOT NULL getdate() 记录创建日期
23 DateUpdated datetime(8) NOT NULL getdate() 记录更新日期

文化也称为“语言标识符”(RFC 3066)。文化代表在一个地区说一种语言的人的信息。文化代码代表语言和国家/地区的组合。

4. 编码

ID 名称 数据类型 Nulls 默认值 描述
1 CodePage int(4) NOT NULL 代码页。例如:21866
2 EncodingName nvarchar(256) NOT NULL 编码名称。例如:Cyrillic (KOI8-U)
3 WindowsCodePage int(4) Windows代码页。例如:1251
4 IsBrowserDisplay bit(1) Web浏览器可以显示
5 IsMessageDisplay bit(1) 邮件和新闻应用程序可以显示
6 HeaderName nvarchar(100) Header名称。例如:koi8-u
7 BodyName nvarchar(100) 用于消息的正文名称。例如:koi8-u
8 WebName nvarchar(100) 用于Web浏览器的Web名称:koi8-u
9 IsEnabled bit(1) NOT NULL (1) 记录活动状态
10 DateCreated datetime(8) NOT NULL getdate() 记录创建日期
11 DateUpdated datetime(8) NOT NULL getdate() 记录更新日期
  • 替代/免费数据源:Microsoft Windows 2003 Server 内部资源

5. 范围

ID 名称 数据类型 Nulls 默认值 描述
1 RangeStart bigint(8) NOT NULL (0) IP地址的数字表示:3560944688 (212.63.180.48)
2 RangeEnd bigint(8) NOT NULL (0) IP地址的数字表示:3560944691 (212.63.180.51)
3 CountryA3 char(3) '' ISO 3166-1 Alpha-3代码。例如:FRA (France)
4 IsEnabled bit(1) NOT NULL (1) 记录活动状态
5 DateCreated datetime(8) NOT NULL getdate() 记录创建日期
6 DateUpdated datetime(8) NOT NULL getdate() 记录修改日期

此数据库将帮助通过IP或电子邮件域名自动检测用户所在国家,然后是语言。可以通过电子邮件编码检测文化。

IP to Country Database

6. 货币

ID 名称 数据类型 Nulls 默认值 描述
1 CurrencyA3 char(3) NOT NULL '' 货币 Alpha-3 代码。例如:GBP (Pound)
2 CurrencyName nvarchar(256) NOT NULL '' 货币名称。例如:Pound
3 NativeName nvarchar(256) NOT NULL '' 货币的本地名称
4 CurrencySymbol nvarchar(6) NOT NULL '' 货币符号。例如:£
5 CurrencyCode int(4) NOT NULL (0) ISO 4217 货币代码。
6 CountryA3 char(3) '' ISO 3166-1 Alpha-3 国家代码。例如:UK (United Kingdom)
7 IsEnabled bit(1) NOT NULL (1) 记录活动状态
8 DateCreated datetime(8) NOT NULL getdate() 记录创建日期
9 DateUpdated datetime(8) NOT NULL getdate() 记录更新日期

提供:每个国家货币的最新信息以及所有最新的汇率。

7. 国家货币

ID 名称 数据类型 Nulls 默认值 描述
1 RecordId uniqueidentifier(16) NOT NULL newid() UTF-8的HMAC-MD5校验和:Key="Currency", Value=[CurrencyA3],[CountryA3]
2 CountryA3 char(3) NOT NULL ISO 3166-1 Alpha-3 国家代码。例如:UK (United Kingdom)
3 CurrencyA3 char(3) NOT NULL 货币 Alpha-3 代码。例如:GBP (Pound)
4 IsPrimary bit(1) NOT NULL 国家内部主要货币的指示符。
5 IntroductionDate datetime(8) 货币引入日期
6 AbolitionDate datetime(8) 货币废止日期
7 IsEnabled bit(1) NOT NULL (1) 记录活动状态
8 DateCreated datetime(8) NOT NULL getdate() 记录创建日期
9 DateUpdated datetime(8) NOT NULL getdate() 记录修改日期

提供:每个国家货币的最新信息。

© . All rights reserved.