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

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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵