您的位置:首页 > 运维架构 > 网站架构

转载-支持中英文多语言浏览的MVC网站实例

2013-02-20 21:20 288 查看
思路大概是这样的,将翻译成不同语言的词句以xml键值对的格式分别存在不同文件夹下,扩展MVC HtmlHelper, 在扩展方法里根据用户当前访问Action所在的路径以及当前所选的语言类型读取语言文件夹下的xml文件,再通过HtmlHelper传过来的key获取对应的value。若找不到,则将key自动添加到相应的文件里面。切换语言时将所选的语言类型保存在Session,再Redirect。

写一个静态类LangHelper,用以操作语言文件。本例中,将中文、英文语言文件分别保存在网站根目录下Resources下的zh-cn和en文件夹里面,文件类型为res。为防止每次访问都去读取操作那些语言文件,我声明一个Dictionary静态变量,用来保存访问过的语言文件里的key\value,在下次(别的用户)访问时先从已保存在服务器内存的静态字典中读取。这样就加快了访问速度。

View Code

View Code

View Code



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using System.Web;
using System.Web.Mvc;
using System.Xml.Linq;
namespace Utility
{
public static class Extensions
{
/// <summary>
/// 在Mvc View中调用
/// </summary>
/// <param name="htmlHelper"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string String(this HtmlHelper htmlHelper, string key)
{
return htmlHelper.Encode(GetLangString(key));
}

/// <summary>
/// 在C#代码中使用
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string LangString(string key)
{
return GetLangString(key);
}

private static string GetLangString(string key)
{
string langType = GlobalizeUtil.GetCurrentLanguage();
return LangHelper.GetLangString(key, langType);
}

}

}




在View中的使用如: Html.String("Username"),在common.res语言文件里面就会添加一条 <add key="Username" value="Username" />记录,将zh-cn文件夹下的common.res里这条记录的value改为"用户名",则当用户在中英文之间切换时就会按不同语言显示。

效果图一:



效果图二:



不知有没有更好的方法,欢迎指教!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐