DEV323 .NET架构:全球化思想! 定制各种文化及国际数据 2018年11月10日1时57分 DEV323 .NET架构:全球化思想! 定制各种文化及国际数据 张帜 软件开发工程师 中国技术中心 微软(中国)有限公司 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
全球软件市场 全球2010年PC市场? 1400 1200 1000 发展中市场 PC数量 800 美国,欧洲, 亚洲- (百万) 太平洋 2018年11月10日1时57分 全球软件市场 全球2010年PC市场? 1400 1200 1000 发展中市场 PC数量 800 美国,欧洲, 亚洲- (百万) 太平洋 600 现有量 400 200 2004 2010 Source: http://news.com.com/Global+PC+market+to+double+by+2010/2100-1042_3-5490500.html © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
全球软件市场 佛罗里达的语言 有时 在家中 或 说英语 经常 占 说其它语言 77% 23% 2018年11月10日1时57分 Source: U.S. Census 2000 (http://quickfacts.census.gov/qfd/states/12000.html) © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
实现全球化的理由 不断发展的市场 跨国企业 灵活性 基于网页的应用或发布 全球化信息交流 2018年11月10日1时57分 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
国际化 全球用户的期待 市场特定 本地化 World Ready 针对特定文化增加的功能点 用户界面的翻译 正文和数据以文化中性的格式存放 2018年11月10日1时57分 国际化 全球用户的期待 针对特定文化增加的功能点 市场特定 用户界面的翻译 本地化 正文和数据以文化中性的格式存放 World Ready © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
2018年11月10日1时57分 一套代码 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
.NET架构 国际化 为很多不同文化内置的数据和功能 最佳实践 如何交换数据 如何定制和扩展.Net架构的文化 2018年11月10日1时57分 .NET架构 国际化 为很多不同文化内置的数据和功能 最佳实践 如何交换数据 如何定制和扩展.Net架构的文化 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
03/01/2005 快速测验 下面这一天属于哪月? 三月? 一月? 以上都不是. 信息不足. 2018年11月10日1时57分 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
2018年11月10日1时57分 格式化日期和文化 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
依赖文化的数据 API支持 无API支持 数字的格式 货币 度量系统 日期/时间格式 时区(有限) 日历 字符编码 大写 比较(排序) 2018年11月10日1时57分 依赖文化的数据 API支持 数字的格式 货币 度量系统 日期/时间格式 时区(有限) 日历 字符编码 大写 比较(排序) 拆字(有限) 字符输出/字体 字符输入/键盘布局 双向布局 多语言UI 无API支持 纸张尺寸 地址格式 电话号码格式 度量转换 货币交换率 稅 适应本地法律 商业习惯 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
CultureInfo 和 RegionInfo 2018年11月10日1时57分 CultureInfo 和 RegionInfo 在.Net架构中, 依赖文化的数据由CultureInfo 和 RegionInfo这两个类管理 CultureInfo 用于 格式化数据 载入资源 设置比较字符串的规则 线程设置 CurrentCulture CurrentUICulture © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
.NET架构的文化 .Net架构2.0将支持超过200种文化 两种文化类型 特定的 中性的 由语言和区域标识 语言独有 仅用于资源载入 2018年11月10日1时57分 .NET架构的文化 .Net架构2.0将支持超过200种文化 两种文化类型 特定的 由语言和区域标识 中性的 语言独有 仅用于资源载入 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
2018年11月10日1时57分 用一套代码处理不同的数据格式 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
格式化原则 用户界面层 业务逻辑/数据层 1. 采用用户期待的格式解析和显示数据 2. 尽可能尊重用户的喜好 2018年11月10日1时57分 格式化原则 用户界面层 1. 采用用户期待的格式解析和显示数据 2. 尽可能尊重用户的喜好 业务逻辑/数据层 1. 采用文化中性的格式存储和传送数据 尽可能存储为二进制数据 3. 需要时存储附加的meta信息 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
格式化和解析 格式化 解析 标准的格式化字符 定制的格式化字符 可按风格配置 TryParse – 无转换例外 2018年11月10日1时57分 格式化和解析 格式化 类型对象 适应文化的字符串 解析 格式化 标准的格式化字符 定制的格式化字符 解析 可按风格配置 TryParse – 无转换例外 ParseExact用于日期/时间值 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
数字 数字的格式 尽可能存储为二进制数据 正文的中性存储 文化 格式 结果 zh-CN N 123,456.78 fr-FR 2018年11月10日1时57分 数字 数字的格式 文化 格式 结果 zh-CN N 123,456.78 fr-FR 123 456,78 en-US “” (中性的) R 123456.78 尽可能存储为二进制数据 整数, 十进数, 浮点数 正文的中性存储 用CultureInfo.InvariantCulture格式化 浮点数采用标准格式字符 “R” (可逆的) © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
数字 非阿拉伯数字 阿拉伯-印度 ٤٣٢١ 1234 表意 〧〥 75 数字符号 ¼ 0.25 … 常规的格式化和解析尚不支持 2018年11月10日1时57分 数字 非阿拉伯数字 阿拉伯-印度 ٤٣٢١ 1234 表意 〧〥 75 数字符号 ¼ 0.25 … 常规的格式化和解析尚不支持 采用 CharUnicodeInfo 中的新函数 GetDecimalDigitValue GetNumericValue GetDigitValue © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
数字 货币 更适宜存储为带meta数据的十进制数 采用第三方服务进行转换 当存储为正文时采用中性文化 文化 DateTime 2018年11月10日1时57分 数字 货币 decimal dec = decimal.Parse("$1000000.23", NumberStyles.Currency,CultureInfo.CurrentCulture); System.Console.WriteLine("{0:C}", dec); Output: $1,000,000.23 更适宜存储为带meta数据的十进制数 文化 DateTime 采用第三方服务进行转换 当存储为正文时采用中性文化 可逆的正文浮点格式 货币正文格式: ¤1,000,000.23 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
2018年11月10日1时57分 数字 度量系统 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
日期和时间 日期 – 短日期格式 时间 – 短时间格式 2005-3-1 中国格式 03/01/2005 美国格式 2018年11月10日1时57分 日期和时间 日期 – 短日期格式 2005-3-1 中国格式 03/01/2005 美国格式 01/03/2005 爱尔兰格式 01.03.2005 俄罗斯格式 2005-03-01 朝鲜格式 时间 – 短时间格式 14:30 中国格式 2:30 PM 美国格式 14:30 日本格式 오전 2:30 朝鲜格式 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
日期和时间 什么是DateTime对象? 从公元0001年1月1日起的 ticks 数 (以100 毫微秒为单位) 2018年11月10日1时57分 日期和时间 什么是DateTime对象? 从公元0001年1月1日起的 ticks 数 (以100 毫微秒为单位) 时区 – 本地 vs. UTC (通用协调时间) v1.x: 没有关于DateTime是本地还是UTC的信息 v2.0: 信息固有/可定义 仍不可能从一个时区转换到另一时区 UTC用于 算术 存储 传输 夏令时 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
日期和时间 DateTime格式化/解析 受控于 中性的正文格式 DateTimeFormatInfo Calendar 2018年11月10日1时57分 日期和时间 DateTime格式化/解析 受控于 DateTimeFormatInfo Calendar DateTime的默认值是公历 中性的正文格式 R or r (RFC1123)(Request for Comments) Thu, 09 Jun 2005 20:30:00 GMT s (ISO 8601) 2005-06-09T13:30:00 yyyy-MM-ddTHH:mm:sszzzzz (XML) 2005-06-09T13:30:00-07:00 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
2018年11月10日1时57分 正文排序和比较 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
正文 表现 Unicode (UTF-16) 是用于正文的数据类型 “解析” 正文 需要时处理字符串 字符处理 – 正文元素 2018年11月10日1时57分 正文 表现 Unicode (UTF-16) 是用于正文的数据类型 “解析” 正文 需要时处理字符串 字符处理 – 正文元素 组合字符 é = e + ́ Unicode 替代对 将两个16位值组合起来代表一个字符 在v2.0中对正文处理支持的改进 在v2.0中Unicode标准化 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
正文 排序和比较 比较仅为排序的一个特例 文化相关的比较使用 文化无关的比较使用 2018年11月10日1时57分 正文 排序和比较 比较仅为排序的一个特例 文化相关的比较使用 StringComparison.CurrentCulture 文化无关的比较使用 StringComparison.Ordinal StringComparison.OrdinalIgnoreCase ToUpperInvariant 大写转换 性能 很少随时间改变 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
2018年11月10日1时57分 使用FxCop检验全球化 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
使用FxCop检验 FxCop – 静态代码分析工具 包括规则检查 可从GotDotNet网站下载 2018年11月10日1时57分 使用FxCop检验 FxCop – 静态代码分析工具 可从GotDotNet网站下载 Visual Studio Team Developer: 完整版本 包括规则检查 全球化 可本地化能力 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
2018年11月10日1时57分 扩展架构 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
扩展架构 地球上60多亿人口,即使200种文化也不够 可用以下方法扩展文化 用户重载 定制文化 从Windows数据衍生文化 2018年11月10日1时57分 扩展架构 地球上60多亿人口,即使200种文化也不够 可用以下方法扩展文化 用户重载 定制文化 从Windows数据衍生文化 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
用户重载 用户的设置影响当前缺省文化 在Windows中设置区域性选项 有限的可定制化字段集合 2018年11月10日1时57分 用户重载 用户的设置影响当前缺省文化 在Windows中设置区域性选项 有限的可定制化字段集合 仅在CurrentCulture w/ UseUserOverride = True时有效 .Net架构所有版本均支持 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
定制文化 已经为机器上的所有用户进行了安装 允许比user overrides设置更多的字段 可以替换或添加.Net架构的文化 2018年11月10日1时57分 定制文化 已经为机器上的所有用户进行了安装 允许比user overrides设置更多的字段 可以替换或添加.Net架构的文化 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
创建一种定制文化 老方法 – 重载CultureInfo 麻烦 仅适用于某个特定的应用 维护困难 在使用前克隆一些APIs 2018年11月10日1时57分 创建一种定制文化 老方法 – 重载CultureInfo 麻烦 仅适用于某个特定的应用 维护困难 在使用前克隆一些APIs © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
创建一种定制文化 新方法 – 使用 CultureAndRegionInfoBuilder (CARIB) 轻便 适用于所有用户和所有应用 2018年11月10日1时57分 创建一种定制文化 新方法 – 使用 CultureAndRegionInfoBuilder (CARIB) 轻便 适用于所有用户和所有应用 创建的CultureInfo对象与.Net架构发布的文化对象无异 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
追加的文化 使用追加的文化来扩展.Net架构现有的文化集合 限制 单一的定制LCID 没有定制collations或日历 显示名和本地名一样 2018年11月10日1时57分 追加的文化 使用追加的文化来扩展.Net架构现有的文化集合 限制 单一的定制LCID 没有定制collations或日历 显示名和本地名一样 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
创建一种新的文化 美国的西班牙语 2018年11月10日1时57分 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
2018年11月10日1时57分 创建一种新的文化 美国的西班牙语 // Set the native name and DateTimeFormat information to Spanish carib.CultureNativeName = “Español (Estados-Unidos)”; carib.GregorianDateTimeFormat = ciES.DateTimeFormat; // Keep the United States’ time pattern carib.GregorianDateTimeFormat.LongTimePattern = ciUS.DateTimeFormat.LongTimePattern; [...] © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
创建一种新的文化 美国的西班牙语 // Deploy the Culture on this machine 2018年11月10日1时57分 创建一种新的文化 美国的西班牙语 // Deploy the Culture on this machine carib.Register(); // Instantiate a new CultureInfo from our new data CultureInfo ci = new CultureInfo("es-US"); © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
2018年11月10日1时57分 创建追加的文化es-US © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
2018年11月10日1时57分 替换文化 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
重要注释! 如果某个管理员替换了某个文化,则应用不能访问到Microsoft原始的定义 2018年11月10日1时57分 重要注释! 如果某个管理员替换了某个文化,则应用不能访问到Microsoft原始的定义 使用CultureInfo.CultureTypes属性来判断CultureInfo是不是替换文化 If ((ci.CultureTypes & CultureTypes. ReplacementCultures) != 0) {…} © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
从Windows数据衍生文化 当某种文化在.Net架构中不存在,却是Windows的一个Locale时,采用这种方法 2018年11月10日1时57分 从Windows数据衍生文化 当某种文化在.Net架构中不存在,却是Windows的一个Locale时,采用这种方法 例如: zu-ZA, cy-GB, mt-MT .Net架构用Windows Locale的数据创建 CultureInfo © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
互用性和移植 非微软平台 使用CultureAndRegionInfoBuilder.Save 生成LDML文件 2018年11月10日1时57分 互用性和移植 非微软平台 使用CultureAndRegionInfoBuilder.Save 生成LDML文件 使用CultureAndRegionInfoBuilder.Load 读LDML文件 注意:在调用Register()之前,大多数非微软的LDML文件需要进行一些调整 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
结论 为了发布一个global-ready的应用,必须使用数据格式化来为目标市场进行定制 2018年11月10日1时57分 结论 为了发布一个global-ready的应用,必须使用数据格式化来为目标市场进行定制 你可以制定一些计划,从一开始起就做成一个global-ready的应用,以节约时间和金钱的投入 .Net架构2.0允许用户扩展现有格式集合 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
资源 资源 1: Microsoft GlobalDev Website 2018年11月10日1时57分 资源 资源 1: Microsoft GlobalDev Website 资源 2: Developing International Software 2 Dr. International (可从TechEd书店得到) 资源 3: Globalization & Localization in Visual Studio 资源 4: 发email到Dr. International 资源 5: Internationalization newsgroup 资源 6: Globalization Handbook for the Microsoft .Net Platform Bill Hall 资源 7: Blogs Sorting it All Out Tales from the Crossroads © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.
资源(URL格式) 资源 1: http://www.microsoft.com/globaldev 2018年11月10日1时57分 资源(URL格式) 资源 1: http://www.microsoft.com/globaldev 资源 2: Developing International Software 2 Dr. International 资源 3: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vxoriGlobalizationLocalizationNamespaces.asp 资源 4: mailto:drintl@microsoft.com 资源 5: news:microsoft.public.dotnet.internationalization 资源 6: Globalization Handbook for the Microsoft .Net Platform Bill Hall 资源 7: http://blogs.msdn.com/michkap http://blogs.msdn.com/achimr © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.