MVC4多语言支持

第一步 建立资源文件

为WEB项目添加Resource文件夹,然后在Resource文件夹下添加两个resx文件en-US.resx和zh-CN.resx文件。

使用Resgen.exe将resx转为resource文件(Resgen.exe可以放到windows/system32或windows/syswow64下),cmd运行下列语句:

resgen D:\WORKSPACE\Locale\Locale\Resource\en-US.resx D:\WORKSPACE\Locale\Locale\Resource\en-US.resources
resgen D:\WORKSPACE\Locale\Locale\Resource\zh-CN.resx D:\WORKSPACE\Locale\Locale\Resource\zh-CN.resources

将resource文件拷贝至Resource文件夹,删除resx文件。如:

第二步 GetLang

写一个静态的GetLang方法,以便服务器端代码使用,然后写一个HtmlHelper扩展方法,以便在前端代码view或js中使用,如:

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

namespace Locale.Models
{
    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 ? "" : (string)entry.Value;
        }
    }
}

第三步 动态切换语言支持

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

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
    if(HttpContext.Current.Session != null)
    {
        System.Globalization.CultureInfo ci = (System.Globalization.CultureInfo)this.Session["CurrentLanguage"];

        if(ci == null)
        {
            ci = new System.Globalization.CultureInfo("zh-CN");
            this.Session["CurrentLanguage"] = ci;
        }

        System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
        System.Threading.Thread.CurrentThread.CurrentCulture =
            System.Globalization.CultureInfo.CreateSpecificCulture(ci.Name);
    }

}

第四步 在HomeController中添加ChangeLanguage方法,很简单、就一句代码,如:

public void ChangeLanguage()
{
    Session["CurrentLanguage"] = new System.Globalization.CultureInfo(Request["language"]);
}

最后就是View了

@using Locale.Models
@{
    ViewBag.Title = Html.Lang("test");
}
<h2>@ViewBag.Title</h2>

本文参考链接:http://blog.163.com/y_p_xu/blog/static/1708571022012769548643/

时间: 2024-10-19 22:22:39

MVC4多语言支持的相关文章

我在写多语言支持时用到的东西

我在写多语言支持时用到的东西 絮叨絮叨:好久不来写了,竟然支持markdown 了. 我也是在项目里的wiki 里干刚接触了一些, 来这里也试试.然后悲催的发现,mac 电脑在markdown下直接上传图片有bug @2015-08-19 20:28:13.一会试一下链接版的吧. 我们的37度手环一不小心要卖到国外去了,自然要支持多国家多语言啦. 等卖到阿拉伯世界的时候,我会再补充RTL(Right To Left)相关的内容. 本文仅涉及安卓(Android)客户端的实现, 服务器后台的部分没

在VC工程中添加多语言支持[转]

随着贸易国际化,在软件开发过程中,常会碰到需在现有中文版软件加入多语言支持的情况.由于不同语言版本间的差别通常仅是软件操作界面的不同,为实现多语言支持,使用纯资源DLL是一个不错的解决之道.所谓纯资源DLL是指只包含资源的DLL,譬如:快捷键.对话框.字符串.菜单.工具条.位图.图标.版本信息等等. 具体做法是:利用VC可视化编辑环境为每种语言制作一套资源ID一一对应的资源集并编译生成DLL文件.应用程序初始化时按预设的语言设置选择合适的资源DLL调入,使用资源时依据资源ID进行访问,这样即可实

一个轻客户端,多语言支持,去中心化,自动负载,可扩展的实时数据写服务的实现方案讨论

背景 背景是设计一个实时数据接入的模块,负责接收客户端的实时数据写入(如日志流,点击流),数据支持直接下沉到HBase上(后续提供HBase上的查询),或先持久化到Kafka里,方便后续进行一些计算和处理,再下沉到文件系统或做别的输出. 在设计中,对于客户端和服务端有这么些目标. 客户端需要支持多语言(Java,C++),做得尽量轻量级,只要连上服务端的ip:port,以RPC的形式调用简单的write就可以把数据写出去.客户端不承担任何逻辑的处理,服务端的负载均衡对客户端是透明的. 服务端想要

iOS-生成国际化包-配置App多语言支持

如果你的App需要支持多国语言.那么,就应该为你的App应用添加“国际化”支持. “国际化”乍看很高深.其实,苹果xCode都为我们设置好了,我们只需要简单的配置,就能够完成. “国际化”顾名思义,就是要让各国的人使用你的App应用时,显示用户本国的母语. 网上也有很多这样的帖子,但是,xCode在进化,很多东西,已经移动了位置或者变的更加简便了.这样,我们不能再看老帖子了. 不多废话! xCode 5.0下生成“国际化”语言包. 1.创建国际化语言文件:文件名必须为:Localizable.s

Android多语言支持以及各国语言Values文件夹命名规则

创建好的项目工程由于需求 需要做多国语言的支持  下面介绍怎么快捷的创建文件夹 建好一个android 的项目后,默认的res下面 有layout.values.drawable等目录 这些都是程序默认的资源文件目录,如果要实现多语言版本的话,我们就要添加要实现语言的对应的资源文件. 首先我们点击添加Android Xml File按钮,在Resource Type中选择Values 在File中输入string.xml ,会出现下面的界面: 下面 以添加一个 英语(美国):values-en-

PHP Laravel 本地化语言支持

That`s it. 我发现在网上Laravel的学习资料实在是太少了.好多东西需要自己去弄.去理解. 我的方法还有一个,就是去github上面下载老外写的Laravel网站,然后拿下来自己运行,分析代码,然后找出其中的出彩的地方.恩,很不错的方法.今天让我找到了一个好东西,就是Laravel 本地化语言的功能. 所谓本地化语言,就是说在不同的的国家可能使用不同的语言.那么如果没有适应各个语言的程序,也就意味着程序需要重写.现在Laravel提供了一个方便的功能,本地化语言支持. 好了,下面让我

【转】解析JDK 7的动态类型语言支持

http://www.infoq.com/cn/articles/jdk-dynamically-typed-language Java虚拟机的字节码指令集的数量自从Sun公司的第一款Java虚拟机问世至JDK 7来临之前的十余年时间里,一直没有发生任何变化[1].随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令.这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8

MVC4多语言IHttpModule实现

最近项目需要多语言环境了. 由于项目页面较多,逐个Action去读取资源文件不大现实.就想到了使用 IHttpModule配合MVC的路由规则来实现. 首先创建以个mvc4的应用程序,添加资源文件夹(自定义)Lang ,然后在此文件夹下添加Home.Index.resx文件, 资源的访问修饰符用public再添加Home.Index.en-us.resx文件添加个字符串TEST 再添加Home.Index.zh-cn.resx文件 添加个字符串TEST   在home/index的视图中添加如下

tp 多语言支持

tp支持多语言 通过get来改变语言的 http://localhost/tp/index.php/Admin/User/add/hl/zh-cn http://localhost/tp/index.php/Admin/User/add/hl/zh-tw 多语言支持属于行为扩展 位于library\behavior\checkLangBehaviro.class.php 配置文件中 'LANG_SWITCH_ON' => true, // 开启语言包功能 'LANG_AUTO_DETECT' =