• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > NopCommerce架构分析之(八)多语言支持

NopCommerce架构分析之(八)多语言支持

作者:WalsonTung 字体:[增加 减小] 来源:互联网 时间:2017-05-11

WalsonTung通过本文主要向大家介绍了nopcommerce 架构图,nopcommerce,nopcommerce中文,nopcommerce教程,nopcommerce codep等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

系统支持的语言是有类:Language表示;

多语言资源对应的类为:LocalizedProperty;

当先选择某种语言存储在类中:GenericAttribute;

多语言可以导出为XML文件,当然也支持导出。

IWorkContext及其实体类WebWorkContext为当前运行上下文;用户的登录信息以及一些上下文环境设置都保存在此类中。

具体包括:当前用户信息:CurrentCustomer;当前用户Cookie;货币;语言;税的类型;供应商等;

展现多语言资源的方式有几种:

一、在自定义类WebViewPage<TModel>中放置了方法:T(),通过此方法,网页在展现时获取对应语言的文字。

其实T只是一个代理,代理的定义为:

namespace Nop.Web.Framework.Localization 
{ 
  public delegate LocalizedString Localizer(string text, params object[] args); 
}
</div>

此代理返回值类型为LocalizedString,此类继承接口IHtmlString,以保证能正确显示本地化的文字资源。

IHtmlString的定义为:

// 摘要: 
//   表示不应再次进行编码的 HTML 编码的字符串。 
public interface IHtmlString 
{ 
  // 摘要: 
  //   返回 HTML 编码的字符串。 
  // 
  // 返回结果: 
  //   HTML 编码的字符串。 
  string ToHtmlString(); 
} 
</div>

二、通过扩展HtmlHelper

类HtmlExtensions扩展了HtmlHelper类,

主要是对一些控件的封装,并支持多语言。

方法 LocalizedEditor<T, TLocalizedModelLocal>是对Telerik的TabStrip控件的封装(也就是多页签控件---Tab控件),的。系统同时支持有多种语言时,多为每种语言显示一个页签,当然仅当需要时才这么做。这里面用到了接口ILocalizedModel和接口ILocalizedModelLocal。接口ILocalizedModel用来标示某Model类支持这种多语言显示,其中里面包括多种语言数据列表Locales,实现接口ILocalizedModelLocal的类就是特定一种语言的数据。LocalizedEditor方法就是根据这些接口的配合实现了支持多种语言页签了。Admin项目使用此方法,Web项目没有使用。

public static HelperResult LocalizedEditor<T, TLocalizedModelLocal>(this HtmlHelper<T> helper, string name, 
  Func<int, HelperResult> localizedTemplate, 
  Func<T, HelperResult> standardTemplate) 
  where T : ILocalizedModel<TLocalizedModelLocal> 
  where TLocalizedModelLocal : ILocalizedModelLocal 
{ 
  return new HelperResult(writer => 
  { 
    if (helper.ViewData.Model.Locales.Count > 1) 
    { 
      var tabStrip = helper.Telerik().TabStrip().Name(name).Items(x => 
      { 
        x.Add().Text("Standard").Content(standardTemplate(helper.ViewData.Model).ToHtmlString()).Selected(true); 
        for (int i = 0; i < helper.ViewData.Model.Locales.Count; i++) 
        { 
          var locale = helper.ViewData.Model.Locales[i]; 
          var language = EngineContext.Current.Resolve<ILanguageService>().GetLanguageById(locale.LanguageId); 
          x.Add().Text(language.Name) 
            .Content(localizedTemplate 
              (i). 
              ToHtmlString 
              ()) 
            .ImageUrl("~/Content/images/flags/" + language.FlagImageFileName); 
        } 
      }).ToHtmlString(); 
      writer.Write(tabStrip); 
    } 
    else 
    { 
      standardTemplate(helper.ViewData.Model).WriteTo(writer); 
    } 
  }); 
}
</div>

扩展方法NopLabelFor<TModel, TValue>是另外一种多语言实现方式。

此方法主要是根据特性DisplayNameAttribute的子类NopResourceDisplayName实现对属性名称的描述。此特性是对Model属性的修饰,以指定属性的名称。

例如类AddNewsCommentModel的属性用NopResourceDisplayName特性指定:

namespace Nop.Web.Models.News 
{ 
  public partial class AddNewsCommentModel : BaseNopModel 
  { 
    [NopResourceDisplayName("News.Comments.CommentTitle")] 
    [AllowHtml] 
    public string CommentTitle { get; set; } 
 
    [NopResourceDisplayName("News.Comments.CommentText")] 
    [AllowHtml] 
    public string CommentText { get; set; } 
 
    public bool DisplayCaptcha { get; set; } 
  } 
}
</div>

HtmlHelper的扩展方法NopLabelFor的实现如下:

public static MvcHtmlString NopLabelFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, bool displayHint = true) 
{ 
  var result = new StringBuilder(); 
  var metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData); 
  var hintResource = string.Empty; 
  object value = null; 
  if (metadata.AdditionalValues.TryGetValue("NopResourceDisplayName", out value)) 
  { 
    var resourceDisplayName = value as NopResourceDisplayName; 
    if (resourceDisplayName != null && displayHint) 
    { 
      var langId = EngineContext.Current.Resolve<IWorkContext>().WorkingLanguage.Id; 
      hintResource = 
        EngineContext.Current.Resolve<ILocalizationService>() 
        .GetResource(resourceDisplayName.ResourceKey + ".Hint", langId); 

      result.Append(helper.Hint(hintResource).ToHtmlString()); 
    } 
  } 
  result.Append(helper.LabelFor(expression, new { title = hintResource })); 
  return MvcHtmlString.Create(result.ToString()); 
}
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • NopCommerce架构分析之(八)多语言支持
  • NopCommerce架构分析之(七)主题Theme皮肤管理器
  • NopCommerce架构分析之(六)自定义RazorViewEngine和WebViewPage
  • NopCommerce架构分析之(五)Model绑定Action参数
  • NopCommerce架构分析之(四)基于路由实现灵活的插件机制
  • NopCommerce架构分析之(三)EntityFramework数据库初试化及数据操作
  • NopCommerce架构分析(一)Autofac依赖注入类生成容器

相关文章

  • 2017-05-11asp.net实现多个文件同时下载功能
  • 2017-05-11asp.net基于Web Service实现远程上传图片的方法
  • 2017-05-11.NET WinFrom中给文本框添加拖放事件的代码
  • 2017-05-11asp.net 中国身份证号码验证代码 非正则
  • 2017-05-11asp.net 组件开发中的内嵌资源引用
  • 2017-05-11aspx中页面按钮写返回上一页代码
  • 2017-05-11实现onmouseover和onmouseout应用于RadioButtonList或CheckBoxList控件上
  • 2017-05-11asp.net下UTF-7转GB2312编码的代码(中文)
  • 2017-05-11剖析Asp.Net路由系统实现原理
  • 2017-05-11asp.net窗体操作总结

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • asp.net 弹出警告窗口实现代码
    • .NET发送邮件的实现方法示例
    • ASP.NET2.0新特性概述
    • 在ASP.NET使用JavaScript显示信息提示窗口实现原理及代码
    • iis的http 500内部服务器错误的解决
    • ASP.net Substitution 页面缓存而部分不缓存的实现方法
    • ASP.NET 2.0下的条件编译
    • asp.net中调用Office来制作3D统计图的实例代码
    • 给.net初学者的一些建议(共勉之)
    • asp.net 中文字符串提交乱码的解决方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有