gpt4 book ai didi

c# - 没有获得基于 CurrentUICulture 的 .Resx

转载 作者:行者123 更新时间:2023-11-30 14:54:45 25 4
gpt4 key购买 nike

我的 MVC 项目中有以下两个文件:

enter image description here

我像这样在我的 global.asax 中设置文化:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");

我可以在 Visual Studio 的即时窗口中看到,Thread.CurrentThread.CurrentUICulture 的值在呈现 View 时是“de-DE”。

这让我想到了:

@Html.Raw(CurrentUICultureContent.ce_landingPage_welcomeText)

问题是,即使 CurrentUICulture 设置为“de-德。”

注意:我也曾尝试将文件名更改为CurrentUiCultureContent.de-DE.resx,但这似乎也不起作用。

编辑: 我在我的 View 页面中放置了一个断点,并在立即窗口中检查了 CurrentUICulture 的值;但它仍然没有从“de-DE.resx”文件中获取文本:

System.Threading.Thread.CurrentThread.CurrentUICulture {de-DE}
Calendar: {System.Globalization.GregorianCalendar}
CompareInfo: {CompareInfo - de-DE}
CultureTypes: SpecificCultures | InstalledWin32Cultures | FrameworkCultures
DateTimeFormat: {System.Globalization.DateTimeFormatInfo}
DisplayName: "German (Germany)"
EnglishName: "German (Germany)"
IetfLanguageTag: "de-DE"
IsNeutralCulture: false
IsReadOnly: false
KeyboardLayoutId: 1031
LCID: 1031
Name: "de-DE"
NativeName: "Deutsch (Deutschland)"
NumberFormat: {System.Globalization.NumberFormatInfo}
OptionalCalendars: {System.Globalization.Calendar[1]}
Parent: {de}
TextInfo: {TextInfo - de-DE}
ThreeLetterISOLanguageName: "deu"
ThreeLetterWindowsLanguageName: "DEU"
TwoLetterISOLanguageName: "de"
UseUserOverride: true

为什么它返回英语而不是预期的德语资源文件?

我还需要做些什么才能让它发挥作用吗?

最佳答案

在 MVC 中应用多语言资源文件支持的一种方法是将资源文件标记为嵌入式资源。这样您就可以将资源文件用作简单类。

要将您的资源文件标记为嵌入式资源,您可以执行以下操作,如下图所示:

  1. 将资源文件的访问修饰符改为Public

Public Modifier

  1. 接下来更改资源文件的以下属性,如下所示。您可以根据自己的意愿自由选择自定义工具命名空间:

Change Properties

  1. 现在在 View 上使用自定义工具命名空间来获取当前文化特定文本。

Using on the view

请注意,这是一个旧代码,对我来说仍然有效,但没有做任何根本不同的事情。希望这能在一定程度上回答您的问题。

编辑:正如我在下面的评论中提到的,这里是全局操作过滤器。让我知道这是否符合您的目的。

public class PersonalizeAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string language = (string)(filterContext.RouteData.Values["language"] ?? "en");
string culture = (string)(filterContext.RouteData.Values["culture"] ?? "US");

CultureInfo ci = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture));

Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
}
}

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new PersonalizeAttribute());
}

是的,我从 URL 中读取了文化信息(您也可以使用服务器变量来掌握用户的首选文化)。

routes.MapRoute(
name: "",
url: "{language}-{culture}/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, language = "en", culture = "US" }
);

关于c# - 没有获得基于 CurrentUICulture 的 .Resx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26936210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com