千家信息网

NopCommerce中多语言支持的示例分析

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,小编给大家分享一下NopCommerce中多语言支持的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!系统支持的语言
千家信息网最后更新 2025年02月04日NopCommerce中多语言支持的示例分析

小编给大家分享一下NopCommerce中多语言支持的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

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

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

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

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

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

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

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

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

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

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

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

IHtmlString的定义为:

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

二、通过扩展HtmlHelper

类HtmlExtensions扩展了HtmlHelper类,

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

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

public static HelperResult LocalizedEditor(this HtmlHelper helper, string name,   Func localizedTemplate,   Func standardTemplate)   where T : ILocalizedModel   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().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);     }   }); }

扩展方法NopLabelFor是另外一种多语言实现方式。

此方法主要是根据特性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; }   } }

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

public static MvcHtmlString NopLabelFor(this HtmlHelper helper, Expression> expression, bool displayHint = true) {   var result = new StringBuilder();   var metadata = ModelMetadata.FromLambda_Expression(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().WorkingLanguage.Id;       hintResource =         EngineContext.Current.Resolve()         .GetResource(resourceDisplayName.ResourceKey + ".Hint", langId);       result.Append(helper.Hint(hintResource).ToHtmlString());     }   }   result.Append(helper.LabelFor(expression, new { title = hintResource }));   return MvcHtmlString.Create(result.ToString()); }

以上是"NopCommerce中多语言支持的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

语言 多语 支持 接口 方法 属性 控件 编码 多种 字符 字符串 此方法 特性 用户 篇文章 资源 代理 示例 分析 上下 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南充服务器云存储公司 中药方剂数据库书籍 云计算大数据服务器机柜上市公司 山西工业软件开发服务价格 软件开发过程管理开源 教务系统舆情与网络安全 csgo选完服务器就退了 9月16日网络安全宣传活动 域中服务器三种角色的区别 渠成网络技术服务有限公司 北京网络技术有限 2022年国家网络安全总体形势 修仙模拟器修改数据库 网络安全监测就业前景分析 软件开发是什么难度高吗 江西企业软件开发服务价格 虚拟云桌面一个服务器能连多少人 为什么进入游戏看不到服务器 苏州美好家网络技术有限公司 网络技术及应用实训报告 新时代领导干部的网络安全观 买服务器和域名吗 海外网络安全市场规模 台式机怎么做服务器 违反网络安全管理制度 代金券数据库设计 工业部网络安全大检查 黑魂2服务器怎么登录 崇明区会计网络技术价格咨询 ts3400网络安全密钥怎么找
0