本篇比较简单介绍Localization解决方案中:

  • Microsoft.Framework.Globalization.CultureInfoCache 工程
  • CultureInfoGenerator 工程

Microsoft.Framework.Globalization.CultureInfoCache

CultureInfoCache工程的作用是和它的名字一样,缓冲各个地区的CultureInfo。该工程中只有一个类(分成俩个部分类),而且都超级简单,下面我们就简单介绍下把:

CultureInfoCache:核心的缓冲类。对外暴漏静态方法:CultureInfo GetCultureInfo(string name),能够根据各地的语言代码(比如 cn、en等)获取到各地的CultureInfo。

public static partial class CultureInfoCache
{
private static readonly ConcurrentDictionary<string, CacheEntry> _cache = new ConcurrentDictionary<string, CacheEntry>(); public static CultureInfo GetCultureInfo(string name)
{
if (name == null || !KnownCultureNames.Contains(name))
{
return null;
} var entry = _cache.GetOrAdd(name, n =>
{
try
{
return new CacheEntry(CultureInfo.ReadOnly(new CultureInfo(n)));
}
catch (CultureNotFoundException)
{
return new CacheEntry(cultureInfo: null);
}
}); return entry.CultureInfo;
} private class CacheEntry
{
public CacheEntry(CultureInfo cultureInfo)
{
CultureInfo = cultureInfo;
} public CultureInfo CultureInfo { get; }
}
}
CultureInfoCache

CultureInfoCache Part1

 public static partial class CultureInfoCache
{
public static readonly HashSet<string> KnownCultureNames = new HashSet<string>
{
#region culture
"ar",
.........
"zh-CHT"
#endregion
};
}

CultureInfoCache Part2

  • 系统内部使用ConcurrentDictionary<string, CacheEntry>进行数据缓存
  • ConcurrentDictionary是线程安全性的字典表和Dictionary<,>功能类似
  • CacheEntry实际是对CultureInfo的封装,还仅仅在内部使用
  • GetOrAdd方法:如果字典里包含,直接返回;如果不包含,创建之后返回。第一个参数是查找的参数,第二个是func参数,用于创建。
  • KnownCultureNames:用于存放当前环境支持的语言CultureInfo。(和操作系统,.net环境有关系)
  • 因为KnownCultureNames需要动态生成,所以两部分分离了。

CultureInfoGenerator

这个工程的作用就是生成Microsoft.Framework.Globalization.CultureInfoCache的Part2,说实话我觉得这个工程这么架构是有问题的。难道每次都重新生成代码吗?不过现有源码是这样的,我只是按照现有逻辑分享给大家。

说有问题,这个解决方案还真有问题,下面俩个问题需要手工修改下:

  • 修改构造函数,当appEnvironment为null的时候,给默认值。
 public Program(IApplicationEnvironment appEnvironment)
{
_appName = appEnvironment == null ? "CultureInfoGenerator" : appEnvironment.ApplicationName;
_appPath = appEnvironment == null ? "" : appEnvironment.ApplicationBasePath;
}

Program

  • 修改outputFilePath路径: ../Microsoft.Framework.Globalization.CultureInfoCache/CultureInfoList.cs至../Microsoft.Framework.Globalization.CultureInfoCache/CultureInfoList.cs.
 var outputFilePath = args.Length >  ? args[] : Path.Combine(_appPath, "../Microsoft.Framework.Globalization.CultureInfoCache/CultureInfoList.cs");

outputFilePath

修改后,直接运行该工程,会发现Microsoft.Framework.Globalization.CultureInfoCache解决方案中CultureInfoList.cs文件被更改。

这个文件内还有值得我们注意的,就是版本和.net环境的对应关系

 private static string CheckFor45DotVersion(int releaseKey)
{
if (releaseKey >= )
{
return "4.6 RC or later";
}
if ((releaseKey >= ))
{
return "4.5.2 or later";
}
if ((releaseKey >= ))
{
return "4.5.1 or later";
}
if ((releaseKey >= ))
{
return "4.5 or later";
}
// This line should never execute. A non-null release key should mean
// that 4.5 or later is installed.
return "No 4.5 or later version detected";
}

[Asp.net 5] Localization-简单易用的本地化-全球化信息的更多相关文章

  1. [Asp.net 5] Localization-简单易用的本地化

    本地化也叫国际化,就是做多语言程序时,可以一键式将当前语言切换到另外一种语言.对于跨国企业或者和国外有业务往来的公司特别重要:就算一个普通公司的门户如果支持中.英.繁体,也会让人觉得高大上.有没有呀, ...

  2. 简单易用的Rest

    今天碰巧,用到了淘宝的在线IP地址查询的Rest API,它提供接口给用户查询IP地址的归宿地.数据库比较庞大,准确性也比较高.地址为:http://ip.taobao.com/instruction ...

  3. ASP.NET MVC SignalR 简单聊天推送笔记

    介绍:(抄袭于网络) ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当所连接 ...

  4. FineBI:一个简单易用的自助BI工具

    过去,有关企业数据分析的重担都压在IT部门,传统BI分析更多面向的是具有IT背景的人员.但随着业务分析需求的增加,很多公司都希望为业务用户提供自助分析服务,将分析工作落实到业务人员手中.但同时,分析工 ...

  5. DataAccess通用数据库访问类,简单易用,功能强悍

    以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...

  6. 快速上手seajs——简单易用Seajs

    快速上手seajs——简单易用Seajs   原文  http://www.cnblogs.com/xjchenhao/p/4021775.html 主题 SeaJS 简易手册 http://yslo ...

  7. [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS

    [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS 本篇要点:在进阶篇快要结束的时候说说源代码管理器,我们的开发,不是一个人可以完成的事,团队协作很重要,而且 ...

  8. 设计与开发一款简单易用的Web报表工具(支持常用关系数据及hadoop、hbase等)

    EasyReport是一个简单易用的Web报表工具(支持Hadoop,HBase及各种关系型数据库),它的主要功能是把SQL语句查询出的行列结构转换成HTML表格(Table),并支持表格的跨行(Ro ...

  9. 分享一个简单易用的RPC开源项目—Tatala

    http://zijan.iteye.com/blog/2041894 这个项目最早(2008年)是用于一个网络游戏的Cache Server,以及一个电子商务的Web Session服务.后来不断增 ...

随机推荐

  1. 获取机器安装.NET版本的几种方式

    当调查应用程序问题时,通常需要先确认目标机器所安装的 .NET Framework 的版本.可以通过如下方式来确认版本号: 通过控制面板安装程序查询 通过查询注册表获取版本信息 通过查看安装目录获取版 ...

  2. Java提高篇(三二)-----List总结

    前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...

  3. FusionCharts简单教程(三)-----FusionCharts的基本属性

          通过前面两章的讲解我们可以制作出简单的图像,但是有时候我们需要对图像进行一个精确的规划,比如设置背景颜色.设置提示信息.设置间隔颜色等等,这时就需要我们对FusionCharts的细节有比 ...

  4. sourcesafe.light 开源项目启动

    sourcesafe.light 源于一个2D独立砖块沙盒游戏. 在这个游戏的设计中碰到了一个瓶颈:这个游戏想把玩家变成一个个neo,在矩阵世界中没有什么不可以修改. 这个游戏要跨平台,玩家的修改操作 ...

  5. 微软 Build 2016年开发者大会发布多项功能升级

    微软Build 2016开发者大会在美国旧金山的莫斯康展览中心开幕.本次大会对一些重点功能进行了完善.如手写笔支持技术Windows Ink.语音识别Cortana应用集(Cortana Collec ...

  6. easy-ui JOB 及 小记录

    $:获取  $.ajax({             type: "POST" ,             url: "" ,             cont ...

  7. Atiti  attilax主要成果与解决方案与案例rsm版 v4

    Atiti  attilax主要成果与解决方案与案例rsm版 v4 版本历史记录1 1. ##----------主要成果与解决方案与 参与项目1 ###开发流程与培训系列1 #-----组织运营与文 ...

  8. SqlServer 错误1053:服务并未及时响应启动或控制请求

    sqlserver 的登录用户修改成域账户后,启动不了 解决方法: 计算器管理选择管理员组 将域账户加入到管理员组即可

  9. 学习ASP.NET MVC(四)——我的第一个ASP.NET MVC 实体对象

    今天我将根据数据库中的表结构添加一些类.这些类将成为这个ASP.NET MVC应用程序中“模型”的一部分.       我们使用Entity Framework(实体框架)来定义和使用这些模型类,并且 ...

  10. KnockoutJS 3.X API 第四章 数据绑定(5) 控制流component绑定

    本节目录: 一个例子 API 备注1:仅模板式的component 备注2:component虚拟绑定 备注3:传递标记到component绑定 内存管理 一个例子 First instance, w ...