天天看點

.Net國際化多語言簡單實作

實作思路

    利用xml文檔存儲項目語言,特定語言使用特定xml。

運作結果

.Net國際化多語言簡單實作
.Net國際化多語言簡單實作
.Net國際化多語言簡單實作
.Net國際化多語言簡單實作

代碼

    VS建立簡單mvc項目

    修改Home控制器,使用Cookie存儲用戶端語言資訊。

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace WebApplication1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            DataTable dt = new DataTable();
            string languagetype = "";
            string xmlpath = "~/Xml/Language-";
            //讀取Cookies
            if (Request.Cookies["lan"] != null)
            {
                languagetype = Request.Cookies["lan"].Value;
            }else
            {
                languagetype = "zh";
            }
            //拼接xml路經
            xmlpath = xmlpath + languagetype + ".xml";
            //擷取xml資料并轉換為datatable
            dt=XmlHelper.CXmlFileToDataSet(xmlpath).Tables[0];
            ViewBag.dt = dt;
            return View();
        }
        /// <summary>
        /// 更換語言
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public JsonResult SetLanguage(string cookies)
        {
            if (cookies != "")
            {
                if(cookies == "zh")
                {
                    Response.Cookies["lan"].Value = "en";
                }else
                {
                    Response.Cookies["lan"].Value = "zh";
                }
            }
            else
            {
                Response.Cookies["lan"].Value = "en";
            }


            return Json(true);
        }


        
    }
}
           

    XML轉換類 XmlHelper

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;
using System.Xml;

namespace WebApplication1
{
    public class XmlHelper
    {
        /// <summary>
        /// 讀取Xml檔案資訊,并轉換成DataSet對象
        /// </summary>
        /// <remarks>
        /// DataSet ds = new DataSet();
        /// ds = CXmlFileToDataSet("/XML/upload.xml");
        /// </remarks>
        /// <param name="xmlFilePath">Xml檔案位址</param>
        /// <returns>DataSet對象</returns>
        public static DataSet CXmlFileToDataSet(string xmlFilePath)
        {
            if (!string.IsNullOrEmpty(xmlFilePath))
            {
                string path = HttpContext.Current.Server.MapPath(xmlFilePath);
                StringReader StrStream = null;
                XmlTextReader Xmlrdr = null;
                try
                {
                    XmlDocument xmldoc = new XmlDocument();
                    //根據位址加載Xml檔案
                    xmldoc.Load(path);

                    DataSet ds = new DataSet();
                    //讀取檔案中的字元流
                    StrStream = new StringReader(xmldoc.InnerXml);
                    //擷取StrStream中的資料
                    Xmlrdr = new XmlTextReader(StrStream);
                    //ds擷取Xmlrdr中的資料
                    ds.ReadXml(Xmlrdr);
                    return ds;
                }
                catch (Exception e)
                {
                    throw e;
                }
                finally
                {
                    //釋放資源
                    if (Xmlrdr != null)
                    {
                        Xmlrdr.Close();
                        StrStream.Close();
                        StrStream.Dispose();
                    }
                }
            }
            else
            {
                return null;
            }
        }

    }
}
           

    頁面 Home/Index

@{
    ViewBag.Title = "Home Page";
}

<div class="jumbotron">
    <h1>ASP.NET</h1>
    <p class="lead">@ViewBag.dt.Rows[0]["text"].ToString()</p>
    <p><a οnclick="Change()" class="btn btn-primary btn-lg">@ViewBag.dt.Rows[0]["but"].ToString() »</a></p>
</div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
     function Change()
    {
        var L = Getjslanguage();
        $.ajax({
            type: "post",
            url: "/Home/SetLanguage",
            data: { cookies: getCookie("lan") },
            success: function (data) {
                if (data) {
                    alert(L.tishi);
                    location.reload();
                }
            }
        });
    }


    function getCookie(name) {
        var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
        if (arr = document.cookie.match(reg))
            return unescape(arr[2]);
        else
            return null;
    }
</script>
           

    母版頁 ——Layout.cshtml

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - 我的 ASP.NET 應用程式</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")

</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                @Html.ActionLink("應用程式名稱", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li>@Html.ActionLink("首頁", "Index", "Home")</li>
                    <li>@Html.ActionLink("關于", "About", "Home")</li>
                    <li>@Html.ActionLink("聯系方式", "Contact", "Home")</li>
                </ul>
                @Html.Partial("_LoginPartial")
            </div>
        </div>
    </div>
    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; @DateTime.Now.Year - 我的 ASP.NET 應用程式</p>
        </footer>
    </div>

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
    @{
        string languagetype = "";
        if (Request.Cookies["lan"] != null)
        {
            
            <script src="~/Xml/[email protected](Request.Cookies["lan"].Value).js"></script>
        }
        else
        {

            <script src="~/Xml/Jslanguage-zh.js"></script>
        }
    }
   
</body>
</html>
           

    對應的語言xml&語言Js

Language-zh.xml 中文語言包

<?xml version="1.0" encoding="utf-8" ?>
<language>
  <zh>
    <text>ASP.NET 是一個使用HTML、CSS和JavaScript建構大型網站和Web應用程式的免費Web架構。</text>
    <but>更換</but>
  </zh>
</language>
           

Language-en.xml 英文語言包

<?xml version="1.0" encoding="utf-8" ?>
<language>
  <zh>
    <text>ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</text>
    <but>Replace</but>
  </zh>
</language>
           

Jslanguage-zh.js 中文語言js

function Getjslanguage() {
    var L = {
        tishi:"成功!"
    };
    return L;
}
           

Jslanguage-en.js 英文語言js

function Getjslanguage() {
    var L = {
        tishi: "Success!"
    };
    return L;
}
           

繼續閱讀