zoukankan      html  css  js  c++  java
  • ASP.NET MVC 多语言方案

    最近发现资源文件是个好东西, 用的好了可以给开发人员节约不少的时间. 例如做一个多语言的网站, 资源文件就有不小的用处.

     public class Culture
        {
            public static CultureItem ENU = new CultureItem("en-US", "English", "EN");
            public static CultureItem CHS = new CultureItem("zh-CN", "簡体中文", "CN");
            public static CultureItem CHT = new CultureItem("zh-TW", "繁體中文", "TW");
            public static CultureItem JPN = new CultureItem("ja-JP", "日本語", "JP");
            public static CultureItem DE = new CultureItem("de-DE", "Deutsch", "DE");
            public static CultureItem FR = new CultureItem("fr-FR", "French", "FR");
            public static CultureItem ES = new CultureItem("es-ES", "Spanish", "ES");
            public static CultureItem IT = new CultureItem("it-IT", "Italian", "IT");
    
            /// <summary>
            /// 取得實作語系
            /// </summary>
            public static List<CultureItem> All
            {
                get { return _cultures; }
            }
    
            // 實作語系
            private static readonly List<CultureItem> _cultures = new List<CultureItem>
            {
                ENU,
                CHS,
                CHT,
                //"en-GB",
                //"en-CA",
                //"de-DE",
                //"es-ES",
                //"it-IT",
                //"ja-JP",
                //"fr-FR",
            };
    
            /// <summary>
            /// 驗證culture資料是否超出範圍
            /// </summary>
            /// <param name="cultureName"></param>
            /// <returns></returns>
            public static string GetValidBigTrackerCulture(string cultureName)
            {
                //不確定預設是否為en - US, or cultureName的值超出預期的範圍
                if (_cultures.Where(w => w.LanguageCultureName == cultureName).Count() == 0)
                {
                    cultureName = ENU.LanguageCultureName;
                }
    
                return cultureName;
            }
    
            /// <summary>
            /// 依照「name」參數回傳有效並已實作之語系名稱。
            /// 若無合適語系名稱,則回傳預設語系名稱。
            /// 本專案的預設語系名稱為「en-US」
            /// </summary>
            /// <param name="name">語系名稱</param>
            public static string GetImplementedCulture(string name)
            {
                // 確認是否為空字串
                if (string.IsNullOrEmpty(name))
                    return GetDefaultCulture();  // 若是空字串則回傳預設語系
    
                // 如果該語系名稱已被實作,則接受使用該語系名稱
                var selectedCulture = _cultures.FirstOrDefault(c => c.LanguageCultureName.Equals(name, StringComparison.InvariantCultureIgnoreCase));
                if (selectedCulture != null)
                {
                    return selectedCulture.LanguageCultureName; // 接受這個語系
                }
    
                // 取得最接近之語系名稱。例如,如果已經實作了「en-US」而使用者的請求是「en-GB」, 
                // 則回傳最接近的「en-US」因為這樣至少是相同的語言(例如:英文)  
                var n = GetNeutralCulture(name);
                foreach (var c in _cultures)
                    if (c.LanguageCultureName.StartsWith(n))
                        return c.LanguageCultureName;
    
                // 如果沒有合適的,就回傳預設語系名稱
                return GetDefaultCulture();
            }
    
    
            /// <summary>
            /// 回傳預設的語系名稱        
            /// </summary>    
            public static string GetDefaultCulture()
            {
                return ENU.LanguageCultureName;
            }
    
            /// <summary>
            /// 取得目前語系名稱
            /// </summary>    
            public static string GetCurrentCulture()
            {
                return Thread.CurrentThread.CurrentCulture.Name;
            }
    
            public static bool IsTW
            {
                get
                {
                    return GetCurrentCulture().Equals(CHT.LanguageCultureName, StringComparison.OrdinalIgnoreCase);
                }
            }
    
            public static CultureInfo GetCurrentCultureInfo()
            {
                return Thread.CurrentThread.CurrentCulture;
            }
    
            /// <summary>
            /// 取得目前的中性語系名稱
            /// </summary>    
            public static string GetCurrentNeutralCulture()
            {
                return GetNeutralCulture(Thread.CurrentThread.CurrentCulture.Name);
            }
    
            public static void SetCurrentCulture(string userCulture)
            {
                //驗證culture是否超出系統支援範圍
                userCulture = GetValidBigTrackerCulture(userCulture);
    
                if (Thread.CurrentThread.CurrentCulture.Name != userCulture)
                {
                    Thread.CurrentThread.CurrentCulture = new CultureInfo(userCulture);
                    Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
                }
            }
    
            /// <summary>
            /// 取得中性語系名稱
            /// </summary>        
            public static string GetNeutralCulture(string name)
            {
                if (name.Length < 2)
                    return name;
    
                return name.Substring(0, 2); // 回傳前兩個字元,例如:"en", "es"
            }
    
    
            public static string CookieName
            {
                get
                {
                    return Models.Enum.CookieName.BulidCookieKey(Models.Enum.CookieName.Culture);
                }
            }
    
        }
    

      

     1 using BigZata.Common;
     2 using BigZata.Resources.Mapping.TitleMapping;
     3 using System;
     4 using System.Collections.Generic;
     5 using System.Linq;
     6 using System.Text;
     7 using System.Threading;
     8 using System.Threading.Tasks;
     9 
    10 namespace Resources
    11 {
    12     class Program
    13     {
    14         static void Main(string[] args)
    15         {
    16             Console.Write(Thread.CurrentThread.CurrentCulture);
    17 
    18            // System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-us", true);
    19            // Thread.CurrentThread.CurrentCulture = culture;
    20             Culture.SetCurrentCulture("en-us");
    21 
    22             Console.Write(Thread.CurrentThread.CurrentCulture);
    23             //  System.Globalization.CultureInfo Culture=new System.Globalization.CultureInfo
    24             Console.Write(TitleMapping.LandingPage);
    25             Console.ReadKey();
    26         }
    27     }
    28 }
  • 相关阅读:
    Scala控制抽象
    【转】ZooKeeper详细介绍和使用第一节
    zookeeper入门系列讲解
    最全面的 Spring 学习笔记
    MySQL 字符串拼接详解
    细说Python2.x与3​​.x版本区别
    【转】微信公众开发URL和token填写详解
    【转】Java代码操作Redis的sentinel和Redis的集群Cluster操作
    Java正则表达式的使用和详解(下)
    Java正则表达式的使用和详解(上)
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/11201443.html
Copyright © 2011-2022 走看看