qq_17031883 2024-04-03 18:40 采纳率: 40.8%
浏览 3
已结题

IViewLocalizer,获取的为什么是key

IViewLocalizer获取值错误,IViewLocalizer,获取的为什么是key,而不是value

img

img

img

img

  • 写回答

20条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-03 19:07
    关注
    获得0.60元问题酬金

    引自免费微信小程序:皆我百晓生

    针对您提到的问题,即在.NET Core项目中使用IViewLocalizer时获取到的是键(key)而非预期的值(value),以下是可能的原因及相应的解决步骤:

    原因分析:

    1. 资源文件未正确配置或缺少所需键值对: 确保您的视图对应的资源文件(通常为.resx格式,如Views/Home/Index.en-US.resx等)已正确创建并包含所查找的键(key)及其对应的翻译值(value)。

    2. 资源文件命名或位置不符合约定: IViewLocalizer会根据视图文件的位置自动寻找与之同名且位于同一目录下的资源文件。例如,对于Views/Home/Index.cshtml视图,对应的资源文件应为Views/Home/Index.xx-YY.resx(其中xx-YY代表语言文化代码)。确保资源文件的命名、路径以及文化代码设置正确。

    3. 视图中的IViewLocalizer实例化或使用不当: 检查视图中是否正确初始化了IViewLocalizer实例,并在调用其方法获取字符串时传入正确的键(key)。

    4. 应用程序的文化设置与请求不符: 确认应用程序的本地化设置(如Startup.cs中的ConfigureServicesConfigure方法)是否支持所需的语种,并且客户端请求携带的文化信息与资源文件匹配。

    解决步骤:

    步骤一:检查资源文件

    1. 打开解决方案资源管理器,定位到包含视图的Resources目录。
    2. 查看对应视图的资源文件(如Index.en-US.resx),确认其中是否存在您试图通过IViewLocalizer获取的键(key),并且具有相应的值(value)。

    步骤二:验证资源文件命名与位置

    1. 确保资源文件遵循以下命名和位置规则:
      • 与视图文件在同一目录下。
      • 文件名与视图文件相同,后缀为.resx
      • 包含文化代码,如en-USzh-CN等。

    步骤三:审查视图中的IViewLocalizer使用

    1. 在视图顶部,确保IViewLocalizer实例已被正确注入:
      @using Microsoft.AspNetCore.Mvc.Localization
      @inject IViewLocalizer Localizer
      
    2. 检查使用IViewLocalizer获取字符串的代码片段,确保键(key)正确无误:
      <label>@Localizer["PatientID"]</label>
      

    步骤四:检查应用程序本地化设置

    1. Startup.csConfigureServices方法中,添加本地化服务和选项:

      services.AddLocalization(options => options.ResourcesPath = "Resources");
      services.AddMvc()
          .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
          .AddDataAnnotationsLocalization();
      
    2. Configure方法中,设置请求文化提供者和默认请求文化:

      var supportedCultures = new[]
      {
          new CultureInfo("en-US"),
          new CultureInfo("zh-CN"),
          new CultureInfo("zh-Hans"),
          new CultureInfo("zh-Hant")
      };
      
      app.UseRequestLocalization(new RequestLocalizationOptions
      {
          DefaultRequestCulture = new RequestCulture("en-US"),
          SupportedCultures = supportedCultures,
          SupportedUICultures = supportedCultures
      });
      

    完成以上步骤后,重新编译并运行应用,应该能正确通过IViewLocalizer获取到资源文件中的值(value)。如果问题依然存在,请进一步检查其他可能导致问题的因素,如中间件顺序、控制器或路由设置等。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月11日
  • 修改了问题 4月3日
  • 赞助了问题酬金15元 4月3日
  • 创建了问题 4月3日

悬赏问题

  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。
  • ¥15 SQL Server analysis services 服务安装失败
  • ¥15 基于面向对象的图书馆借阅管理系统
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥20 centos linux 7.9安装php8.2.18不支持mysqli模块的问题
  • ¥15 stata空间计量LM检验
  • ¥15 关于k8s node节点被释放后如何驱逐节点并添加新节点