乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      ASP.NET MVC:多語言的三種技術(shù)處理策略

       gogo8848 2014-07-27

      背景

      本文介紹了多語言的三種技術(shù)處理策略,每種策略對應(yīng)一種場景,這三種場景是:

      1. 多語言資源信息只被.NET使用。
      2. 多語言資源信息只被Javascript使用。
      3. 多語言資源信息同時被.NET和Javascript使用。

      下文我們就一個一個場景的分析。

      第一種場景:多語言資源信息只被.NET使用

      這種場景的技術(shù)處理最簡單,可以充分利用VisualStudio提供的資源編輯器及資源文件。

      實現(xiàn)步驟

      1、定義資源文件。

      2、使用資源文件。

      1 <h1>Classic:@Strings.Title </h1>

      第二種場景:多語言資源信息只被Javascript使用

      這種場景的技術(shù)實現(xiàn)需要參考使用的Javascript類庫,自己做也不難(無非是原型覆蓋或變量覆蓋)。

      實現(xiàn)步驟

      1、定義Javascript本地化文件。

      2、引入需要的本地化文件(可以靜態(tài)引入或動態(tài)根據(jù)配置引入)。

      1 <script src="../../../Javascript/Ext/locale/ext-lang-zh_CN.js"></script>

      第三種場景:多語言資源信息同時被.NET和Javascript使用

      這種場景多少有些復(fù)雜,因為資源信息需要在兩個地方使用,我們可以重復(fù)定義兩次,或者用代碼生成器,不過這里介紹另外一種方式:服務(wù)器生成Javascript。

      實現(xiàn)步驟

      1、定義生成Javascript代碼的控制器(會把服務(wù)器的資源文件生成為Javascript代碼,這樣就保證資源只需要定義一次)。

      復(fù)制代碼
       1 using System;
       2 using System.Collections.Generic;
       3 using System.Linq;
       4 using System.Web;
       5 using System.Web.Mvc;
       6 
       7 using Happy.Web.Mvc;
       8 
       9 namespace Happy.MvcExample.Controllers
      10 {
      11     public class JavascriptResourceController : Controller
      12     {
      13         //
      14         // GET: /JavascriptResource/Strings
      15 
      16         public ActionResult Strings()
      17         {
      18             return new JavascriptResourceResult("MvcExample.Strings", typeof(Resource.Strings));
      19         }
      20     }
      21 }
      復(fù)制代碼

      2、使用服務(wù)器生成的Javascript代碼。

      1 <script src="~/Scripts/jquery-2.0.3.js"></script>
      2 <script type="text/javascript" src="JavascriptResource/Strings"></script>
      3 <script type="text/javascript">
      4     $("#ClientTitle").text(MvcExample.Strings.Title);
      5 </script>

      3、JavascriptResourceResult實現(xiàn)。

      復(fù)制代碼
       1 using System;
       2 using System.Collections.Generic;
       3 using System.Linq;
       4 using System.Text;
       5 using System.Threading.Tasks;
       6 using System.Web.Mvc;
       7 
       8 using Happy.Infrastructure.ExtentionMethods;
       9 
      10 namespace Happy.Web.Mvc
      11 {
      12     /// <summary>
      13     /// 將服務(wù)器端的資源文件轉(zhuǎn)換為Javascript代碼,主要為了在服務(wù)端和客戶端之間共享資源文件。
      14     /// </summary>
      15     public sealed class JavascriptResourceResult : JavaScriptResult
      16     {
      17         public JavascriptResourceResult(string javascriptObjectName, Type resourceType)
      18         {
      19             javascriptObjectName.MustNotNullAndNotWhiteSpace("javascriptObjectName");
      20             resourceType.MustNotNull("resourceType");
      21 
      22             var namespaceDefinitionString = GetNamespaceDefinitionString(javascriptObjectName);
      23             var keyValueStrings = GetKeyValueString(resourceType);
      24 
      25             this.Script = string.Format("{0};{1} = {{{2}}}", namespaceDefinitionString, javascriptObjectName, keyValueStrings);
      26         }
      27 
      28         private static string GetNamespaceDefinitionString(string javascriptObjectName)
      29         {
      30             var names = javascriptObjectName.Split('.');
      31 
      32             var namespaces = names.Take(names.Length - 1).Select((x, index) =>
      33             {
      34                 return String.Join(".", names.Take(index + 1).ToArray());
      35             });
      36 
      37             var sb = new StringBuilder();
      38             sb.AppendFormat("var {0} = {0} || {{}}", namespaces.First());
      39             foreach (var item in namespaces.Skip(1))
      40             {
      41                 sb.AppendFormat("{0} = {0} || {{}}", item);
      42             }
      43 
      44             return sb.ToString();
      45         }
      46 
      47         private static string GetKeyValueString(Type resourceType)
      48         {
      49             var keyvalues = resourceType
      50                 .GetProperties()
      51                 .Select(x =>
      52                 {
      53                     return string.Format("{0}: '{1}'", x.Name, x.GetValue(null));
      54                 }).ToArray();
      55 
      56             return String.Join(",", keyvalues);
      57         }
      58     }
      59 }
      復(fù)制代碼

      最終的運(yùn)行效果

      切換語言需要修改Web.Config,配置如下:

      1 <globalization uiCulture="en-US"/>

      中文

      英文

      注:不同的顏色是不同的模板導(dǎo)致的。

      代碼下載

      地址:http://happy./SourceControl/latest。

      備注

      簡單的多語言容易實現(xiàn),如果是跨國的企業(yè)應(yīng)用,難度就非常大了,因為同一個系統(tǒng)運(yùn)行在不同的時區(qū)和區(qū)域文化中,我還沒有深入想這塊咋處理(沒有需求)。

      在博客系統(tǒng)中

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多