Satellite Assembly,ASP.NET语言不变
我正在转换一个项目使用卫星装配.
我创建了一个新的类库(名为“Resources”).所有默认资源都位于根级别* .resx. 然后每个文化都有一个文件夹. “恩/” EN-GB / 我将.resx文件访问修饰符更改为“公共”并更改了这些设置. BuildAction: EmbeddedResource CopyToOutputDirectory: CopyAlways 我确保.resx设计器* .Designer.cs使用“Resources”命名空间. 我将类库添加到ASP.NET MVC应用程序和global.asax.cs中,我根据需要设置了文化. System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB"); System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB"); 我尝试将al.exe和Resgen.exe命令添加到Resources类库中的post-build事件.
查看MVC apps bin /文件夹,每种语言都有3个文件夹:
根级别只有Resources.dll和Resources.resources.dll,但默认语言可以正常工作.第二个* .resources.dll是由于构建后事件. 当我更改CurrentUICulture时,它不会更改UI语言.在将资源从App_GlobalResources /移动到外部程序集之前,它工作正常(Razor示例). @Resources.MyResources.StringIdentifier 使用.NET Reflector查看Resource .dll,这些是不同之处. Satellite Resources: (Project: Resources) Resources.en_GB.MyResources.en-GB.resources App_GlobalResources: (Project MVCApp) Namespace.MVCApp.App_GlobalResources.MyResources.en-GB.resources 编辑: 在global.asax.cs中设置CurrentCulture和UICulture之后,我测试了手动检索实际工作的ResourceManager并检索了预期语言的字符串. System.Resources.ResourceManager gStrings = new System.Resources.ResourceManager("Resources.MyResources",System.Reflection.Assembly.Load("Resources")); // Resources=Project Name string test = gStrings.GetString("TestString"); // WORKS IN GLOBAL.ASAX.CS!!! 我在MVC控制器中尝试了相同的测试,但它不起作用.因此,可以检索ResourceManager的唯一位置是Global.asax.cs. 奇怪的是,在剃刀的UI级别进行相同的测试只会返回默认的文化文本! cultureInfo是正确的,但ResourceManager仅返回ASP.NET MVC Razor UI中的默认语言. (这严格用于测试) @{ System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentUICulture; System.Resources.ResourceManager gStrings = new System.Resources.ResourceManager("Resources.MyResource",System.Reflection.Assembly.Load("Resources")); string s = gStrings.GetString("Test"); // DOESN'T WORK IN UI } TLDR版本: 从Resources(.resx)从App_GlobalResources转换为附属程序集. 手头的问题. 我可以使用global.asax中的CurrentUICulture语言手动调用ResourceManager进行附属程序集,并且它按预期工作,但是同样的测试从UI端失败并在MVC控制器中失败. 默认语言工作正常,为什么UI切换语言不正常? 解决方法
如果最近建立了一个项目,其中内部化正常或多或少地像你描述的那样正常工作.
https://github.com/Jacco/Perpetuality 我在我用作基础的控制器中的OnAuthorize中切换每个HTTP请求的语言: using Perpetuality.Data; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Security.Principal; using System.Threading; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace Perpetuality.Controllers { public partial class BaseController : Controller { private CultureInfo GetCultureInfo(AuthorizationContext filterContext) { switch ((string)filterContext.RouteData.Values["language"]) { case "nl": return CultureInfo.CreateSpecificCulture("nl-NL"); case "en": return CultureInfo.CreateSpecificCulture("en-US"); case "pt": return CultureInfo.CreateSpecificCulture("pt-PT"); case "de": return CultureInfo.CreateSpecificCulture("de-DE"); case "es": return CultureInfo.CreateSpecificCulture("es-ES"); case "fr": return CultureInfo.CreateSpecificCulture("fr-FR"); case "it": return CultureInfo.CreateSpecificCulture("it-IT"); case "jp": return CultureInfo.CreateSpecificCulture("ja-JP"); default: return CultureInfo.CreateSpecificCulture("en-US"); } } protected override void OnAuthorization(AuthorizationContext filterContext) { Thread.CurrentThread.CurrentCulture = GetCultureInfo(filterContext); Thread.CurrentThread.CurrentUICulture = GetCultureInfo(filterContext); base.OnAuthorization(filterContext); } } } 在我的项目中,RESX文件的指定方式与您的不同: BuildAction: EmbeddedResource CopyToOutputDirectory: DoNotCopy 在我的竞争中,我访问这样的字符串: @Resources.Home.Index.FacebookButtonCaption 我没有设置任何帖子或预建. 在我的项目中,语言总是在网址上.如果最初没有选择合适的语言,那么用户可以切换语言. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 面向方面的开发/编程资源
- asp.net-mvc-3 – 在MVC3中使用Page.User.Identity.Name
- asp.net – MVC 4中的运行时动态捆绑和缩小
- asp.net-mvc – 在ASP.NET MVC应用程序下将ASP.NET Web API
- Asp.net mvc 知多少(三)
- asp.net – 与Silverlight 5的串行通信(COM端口)
- asp.net – 实体框架是一种非常耗时的方式来节省一点时间吗
- asp.net-mvc – AddImplicitRequiredAttributeForValueType
- asp.net-mvc – ASP.net MVC – 视图如何访问模型?
- asp.net – 导致StackOverflowException的Sitecore控制器渲
- asp.net-mvc – 在ASP.NET MVC视图中使用代码隐藏
- asp.net-mvc – 在ASP.NET MVC中对ViewModels进行
- asp.net – 从IEnumerable获取不同的项目
- asp.net-mvc – ASP.NET在基本控制器中重定向
- asp.net – 我的应用程序让我重定向到Account /
- asp.net – 什么条件导致Web浏览器显示“Page Ex
- asp.net-mvc-5 – 将属性路由限制为特定的HTTP谓
- asp.net-mvc – ASP.NET MVC 2和使用WIF(Windows
- asp.net-mvc – 从Action写入输出流
- asp.net-mvc – 使URL特定于(通过路由)