MVC多语言应用

MVC多语言应用

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

这里以MVC4模版项目的登录页为例, 简单说一下过程:

1.资源文件的处理

首先准备资源文件, 即语言包. 为WebSite项目添加两个resx文件, 如图:

接着分别为这两个文件添加内容(名称/值),如图:

资源文件第三步, 用命令行工具ResGen.exe将这两个resx文件生成同名的resources文件, 如zh-CN.resources、en-US.resources, 生成后将这两个resources文件放到Resource目录下.

关于ResGen.exe工具的详细用法, 这里只给出命令行脚本, 不做介绍, 有兴趣的可以去找相关资料.


1

2

resgen D:\Code\XNFans\XNWeb\App_LocalResources\zh-CN.resx D:\Code\XNFans\Resources\zh-CN.resources

resgen D:\Code\XNFans\XNWeb\App_LocalResources\en-US.resx D:\Code\XNFans\Resources\en-US.resources

至此,资源文件(语言包)就做好啦,下面就是在项目中的使用了。

2.后端代码

为实现动态切换语言, 要在Global.asax文件中添加Application_AcquireRequestState事件, 如下:

protected void Application_AcquireRequestState(object sender,EventArgs e)
        {
            if (HttpContext.Current.Session != null)
            {
                CultureInfo ci = (CultureInfo)this.Session["CurrentLanguage"];
                if (ci == null)
                {
                    ci = new CultureInfo("zh-CN");
                    this.Session["CurrentLanguage"] = ci;
                }
                Thread.CurrentThread.CurrentUICulture = ci;
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
            }
        }

在要应用的控制器中添加ChangeLanguage方法, 如下:

/// <summary>
        /// 切换语言
        /// </summary>
        /// <param name="lang"></param>
        /// <returns></returns>
        public JsonpResult ChangeLanguage(string lang)
        {
            int data = 1;
            try
            {
                Session["CurrentLanguage"] = new CultureInfo(lang);
            }
            catch (Exception ex)
            {
                data = 0;
            }

            JsonpResult result = new JsonpResult()
            {
                Data = data,
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };

            return result;

        }

切换语言时调用ChangeLanguage方法, 传入对应的语言版本标识就可以了.

3.前端应用

<div id="head-text">
    <h1 class="general-font">@Html.Lang("首页标题文本1")<span class="japan blue f80 settings-text">@Html.Lang("首页标题文本1特殊部分")</span></h1>
    <h3>@Html.Lang("首页标题文本2")</h3>
</div>

4.彩蛋

public static class LocalizationHelper
    {
        public static string Lang(this HtmlHelper html, string key)
        {
            return GetLang(key);
        }

        public static string GetLang(string key)
        {
            var filePath = HttpContext.Current.Server.MapPath("~/Resource");
            string language = HttpContext.Current.Session["CurrentLanguage"] == null ? "zh-CN" : HttpContext.Current.Session["CurrentLanguage"].ToString();
            string resxPath = string.Format(@"{0}\{1}.resources", filePath, language);
            ResourceReader reader = new ResourceReader(resxPath);
            var entry = reader.Cast<DictionaryEntry>().FirstOrDefault<DictionaryEntry>(x => x.Key.ToString() == key);
            reader.Close();

            return entry.Value == null ? "" : entry.Value.ToString();
        }
    }

5.总结

资源文件用下来, 总体感觉还可以, 如果做多语言网站的话, 代码逻辑上几乎不用考虑语言的事情. 唯一比较繁琐的就是要分辨名称对应的位置, 配置起来内容太多也比较烦人. 不过或许这些工作不用程序员的我们来做^_^

分类: .netmvc

时间: 2024-10-16 07:11:20

MVC多语言应用的相关文章

ASP.Net MVC多语言

.NET MVC 多语言网站 通过浏览器语言首选项改变MVC的语言,通过浏览器语言选项,修改脚本语言. 一.添加资源文件 1.添加App_GlobalResources文件夹. 2.添加默认的资源文件和对应的语言码资源文件.如zh-cn代表中国大陆,en-us代表美制英语.详情:http://www.lingoes.cn/zh/translator/langcode.htm 3.将资源文件设置成public.新建时默认是internal,这样不能被访问. 右键点击资源文件,在其的属性中将自定义工

ASP.NET MVC 多语言实现——URL路由

考虑实现一个完整的基于asp.net mvc的多语言解决方案,从路由到model再到view最后到数据库设计(先挖好坑,后面看能填多少). 我所见过的多语言做得最好的网站莫过于微软的msdn了,就先从模仿它的路由开始 仅实现相同的url格式很简单,只要将默认的路由加上一个表示语言的变量就可以了 public static void RegisterRoutes(RouteCollection routes) { //other routes routes.MapRoute( name: "Def

ASP.NET MVC 多语言实现技巧 最简、最易维护和最快速开发

说说传统做法的缺点 1.做过多语言的都知道这玩意儿太花时间 2.多语言架构一般使用资源文件.XML或者存储数据库来实现.这样就在一定程序上降低了性能 3.页面的可读性变差,需要和资源文件进行来回切换 4.修改麻烦 5.样式兼容难调 6.JS如何处理 另类做法 传统做法看上去高大上实质上唯护起来确实很费力,所以有一部分人就采用了另类做法直接做二套页面.总体来说上面一种和下面一种可以说半斤八两. 上面一种显的有点档次,但维护成本并不低,页面可读性差,样式兼容难调,唯一优点是页面代码逻辑只有一套,只在

MVC多语言设置 实战简洁版

此方式可以通过更改进行更改进程语言设定,支持从系统获取默认的区域设定,支持自定义,自定义的方式可以为cookie,可为资料库获取,session等方式. 具体怎么设定就看个人需要了. 第一步: 添加资源文件,添加的时候要将资源文件类型设定为public 第二步: 新定义类: namespace System.Web.Mvc { public static class LangHelper { //界面普通文字的多语言 public static string GetLangbyKey(this

[自制小工具分享] ResEditor 及 简单的 MVC 多语言示例

ResEditor 的用处前提 1, MVC2, 需要设置字段的显示名称 Display3, 用资源文件 背景:我们的项目是 MVC5 + ORACLE + EF Db First需求分析师兼任数据库设计, 目前有141张表, 70% 的表,字段数在100个以上. 加 Display 特性一般由两个途径:1,直接在实体类上添加2,用伴随类.但是实体类是由 EF 的TT模板自动生成的,虽然可以修改 TT 文件加上 Display 特性到属性上,但是字段的描述不适合直接拿来当Display如果用伴随

MVC之国际化

MVC之国际化 前言 在项目中遇到国际化语言的问题是常有的事情,之前在做关于MVC国际化语言时,刚开始打算全部利用AngularJS来实现,但是渐渐发现对于页面Title难以去控制其语言转换,于是对于页面Tiltle利用后台的资源文件来实现而前台利用AngularJS来实现,这样更好简洁和方便,本节我们来讲讲MVC中的国际化问题. 话题引入 为了效率的问题全部利用前端脚本实现是个不错的选择,但是有时候也稍显麻烦一点,本文只讨论利用MVC来实现,下面我们首先来看一个例子. 我们在项目新建一个il8

React了解

根据博主  http://www.ruanyifeng.com/blog/2015/03/react.html  的几个Demo(https://github.com/ruanyf/react-demos),持续学习一下React,一款Javascript MVC框架语言. 首先get了几个sublime的快捷键,非常好用!command+D:选中更多的相同元素:command+control+G:选中所有相同项:command+control+上或下:将整行上移或者下移:control+shi

Extjs form 表单的 submit

说明:extjs form表单的提交方式是多种多样的,本文只是介绍其中的一种方法,本文介绍的方法可能不是完美的,但是对于一般的应用应该是没有问题的.     本文包括的主要内容有:form面板设计.form字段值的获取.后台处理代码以及返回数据的获取 1.form表单设计 var panelItem = Ext.create('Ext.form.Panel', { border: false, id:'formMain', layout: 'form', items: [ { xtype: 'f

多语言实现(MVC框架)

关于MVC框架实现多语言的陈述: 1.IIS:处理基本的图片,JS库(jquery库,css样式等)的请求. 2.IhttpModel:处理客户端请求,设置Thread.currentThread.ThreadCultureInfo,使得以后用户都能用它为标准返回相应语言的html,css,js文件.(注意:针对controller重写父类也可以实现这种方法,下面的实现就是这样的) 3.Action:处理JS,JSON文件替代工作(在多语言的地方,用某种标记替代),而它对于VIEW的话,交给视图