[Asp.net 5] Localization-简单易用的本地化-全球化信息

本篇比较简单介绍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 > 0 ? args[0] : 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 >= 393273)
            {
                return "4.6 RC or later";
            }
            if ((releaseKey >= 379893))
            {
                return "4.5.2 or later";
            }
            if ((releaseKey >= 378675))
            {
                return "4.5.1 or later";
            }
            if ((releaseKey >= 378389))
            {
                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";
        }
时间: 2024-11-06 03:28:10

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

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

本地化也叫国际化,就是做多语言程序时,可以一键式将当前语言切换到另外一种语言.对于跨国企业或者和国外有业务往来的公司特别重要:就算一个普通公司的门户如果支持中.英.繁体,也会让人觉得高大上.有没有呀,有没有!不过微软对国际化/本地化一直支持的就很好,现在本地化代码还开源,这是相当nice的.本次要介绍的是微软asp.net5的“Localization-dev”解决方案,可以到github上asp.net5官网上下载: https://github.com/aspnet/Localization

头像截图上传三种方式之一(一个简单易用的flash插件)(asp.net版本)

flash中有版权声明,不适合商业开发.这是官网地址:http://www.hdfu.net/ 本文参考了http://blog.csdn.net/yafei450225664/article/details/12855915     并且加入了自己的解析,以供之后的参考. 官网提供的demo包,包含了php,jsp,asp,aspx的demo. 1.Demo中,avatar.swf是执行上传的flash文件:default.jpg是默认显示的图片:demo.html是demo,可以直接复制里面

JQuery表单验证插件EasyValidator,超级简单易用!

本插件的宗旨是:用户无需写一行JS验证代码,只需在要验证的表单中加入相应的验证属性即可,让验证功能易维护,可扩展,更容易上手. DEMO中已经包含了常用的正则表达式,可以直接复用,为了考虑扩展性,所以针对不同用户特殊需求,自行写正则吧. 顺便AD下刚出炉的小站,欢迎捧场:www.paipaiyou.com EasyValidator实现的功能: 1.提示功能(在表单或者其他标签中加入tip="想提示的文字") 如: <input name="name" tip

asp.net mvc signalr 简单聊天室

signalr的神奇.实用很早就知道,但一直都没有亲自去试用,仅停留在文章,看了几篇简单的介绍文字,感觉还是很简单易用的. 由于最后有个项目需要使用到它,所以就决定写个小程序测试一下,实践出真知:别人写的文章,由于环境(版本等)不同,还是或多或少存在一些出入的. 环境:vs2013 / asp.net mvc 5 / signalr 2.2.1 / jquery 1.10.2 先上两个效果图: 系统会自动给加入聊天室的人员分配一个ID,是该人员的唯一标识(绿色为当前用户说的话,橙色为当前用户之外

SDAutoLayout:比masonry更简单易用的自动布局库

SDAutoLayout:一行代码搞定自动布局!支持Cell和Tableview高度自适应,Label和ScrollView内容自适应,致力于做最简单易用的AutoLayout库. [SDAutoLayout 视频教程:http://www.letv.com/ptv/vplay/24038772.html] ☆新增:cell高度自适应 + label文字自适应☆ >>>>> tableview cell 自动高度设置只需要3步 1. >> 设置cell高度自适应:

iOS简单易用的标签列表界面

iOS简单易用的标签列表界面 Demo效果: Demo演示: 1.使用cocoapods引入YZTagListView,或者直接拖入YZTagListView文件夹到项目中 2.导入YZTagListView.h头文件 1 #import "YZTagList.h" 3.创建YZTagListView控件 1 2 3   YZTagList *tagList = [[YZTagList alloc] init];   tagList.backgroundColor = [UIColor

ubuntu12.04已安装SQLite3 而简单易用

今天想写一点app,使用数据库,所以在这里简要地记住它是安装和使用. 1.安装SQLite3 命令行下输入:sudo apt-get install sqlite3 2.安装SQLite3编译须要的工具包 命令行下输入: sudo apt-get install libsqlite3-dev 3.安装图形界面 (假设你喜欢) 命令行输入: sudo apt-get install sqlitebrowser 数据库的简单使用:(看下面链接) 点击打开链接 最后,退出数据库:跑.quit 我们可以

简单易用的Model加密本地存储方案

说明 1. 加密方案采用了策略设计模式(一种加密方案是一种策略) 2. 对一个Model进行存储而不进行NSCoding编码非常便利 3. 非常简单易用 4. 支持AES.DES.CAST加密 源码 https://github.com/YouXianMing/StoreValueEncryptStrategy // // ViewController.m // StoreValueEncryptStrategy // // Created by YouXianMing on 15/9/25.

SQL Server查看表结构及视图,适合开发者使用,简单易用

SELECT * FROM INFORMATION_SCHEMA.TABLES SELECT * FROM INFORMATION_SCHEMA.COLUMNS 查看执行结果 SQL Server查看表结构及视图,适合开发者使用,简单易用,布布扣,bubuko.com