You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET项目中如何基于当前文化从ViewBag获取分类本地化属性

问题根因
  • 资源文件的取值逻辑是固定键对应固定本地化值,你直接存入CateName、cat.CateName这类变量标识符,资源文件只会把它当成普通字符串处理,不会自动映射到代码中cat对象的属性值
  • 你已经有CateNameLocalized属性的前提下,代码里写死取CateName,没有调用对应文化的取值逻辑,自然不会触发本地化效果
解决方案

方案1:直接使用现有Localized属性(推荐,适配你现有结构)

如果你的CateNameLocalized已经是后端根据当前请求文化赋值好的字段,直接替换取值即可,可增加兜底逻辑避免空值:

@{ 
    foreach (var cat in ViewBag.Categories)
    {
        var showName = !string.IsNullOrWhiteSpace(cat.CateNameLocalized) ? cat.CateNameLocalized : cat.CateName;
        <div class="swiper-slide">@showName</div>
    }
}

如果需要根据当前文化动态匹配对应分类名,可给Category实体加扩展方法:

using System.Globalization;

public static class CategoryExtension
{
    public static string GetLocalName(this Category cat)
    {
        var currentCulture = CultureInfo.CurrentCulture.Name;
        // 按你的项目文化配置调整匹配逻辑
        return currentCulture switch
        {
            "zh-CN" => cat.CateNameCn,
            "en-US" => cat.CateNameEn,
            // 其他文化规则自行补充
            _ => cat.CateName
        };
    }
}

Razor页面直接调用即可:

<div class="swiper-slide">@cat.GetLocalName()</div>

方案2:资源文件本地化(适合分类固定无需后台修改的场景)

如果分类值是固定的,不需要后台动态增改,可走资源文件实现:

  • 以cat.CateName的默认值作为资源键,在对应语言的资源文件(如SharedResource.zh-CN.resx、SharedResource.en-US.resx)中添加对应本地化值,注意键要和CateName的实际值完全一致
  • Razor页面注入本地化服务后取值即可,示例如下:
@inject IStringLocalizer<SharedResource> Localizer
@{ 
    foreach (var cat in ViewBag.Categories)
    {
        <div class="swiper-slide">@Localizer[cat.CateName]</div>
    }
}

内容的提问来源于stack exchange,提问作者Ayden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:24:06