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

C#中如何将zh-CN映射为zh-Hans-CN以兼容多客户端本地化请求

实现文化代码映射的本地化解决方案

你可以通过包装内置请求文化提供器的方式,实现文化代码的映射,既不用复制本地化资源文件,也无需重复实现已有解析逻辑,完全符合你的需求。

实现步骤:

  1. 定义文化映射规则
    先创建一个字典来管理需要映射的文化代码,方便后续扩展:

    private static readonly Dictionary<string, string> CultureMapping = new(StringComparer.OrdinalIgnoreCase)
    {
        ["zh-CN"] = "zh-Hans-CN",
        ["zh-TW"] = "zh-Hant-TW"
    };
    
  2. 创建包装类处理文化映射
    编写一个方法,将内置的RequestCultureProvider包装成带有映射逻辑的版本,复用原有解析逻辑的同时添加映射处理:

    private static RequestCultureProvider CreateMappedCultureProvider(RequestCultureProvider innerProvider)
    {
        return new RequestCultureProvider
        {
            ProviderCultureResultSelector = async context =>
            {
                // 先调用内置提供器获取原始文化解析结果
                var originalResult = await innerProvider.DetermineProviderCultureResult(context);
                if (originalResult == null) return null;
    
                // 映射Culture
                var mappedCultures = originalResult.Cultures.Select(culture =>
                    CultureMapping.TryGetValue(culture.Name, out var mappedCode) 
                        ? new CultureInfo(mappedCode) 
                        : culture).ToList();
    
                // 映射UICulture
                var mappedUiCultures = originalResult.UICultures.Select(culture =>
                    CultureMapping.TryGetValue(culture.Name, out var mappedCode) 
                        ? new CultureInfo(mappedCode) 
                        : culture).ToList();
    
                return new ProviderCultureResult(mappedCultures, mappedUiCultures);
            }
        };
    }
    
  3. 替换内置提供器
    在Startup的本地化配置中,将默认的请求文化提供器替换为我们包装后的版本:

    var supportedCultures = new[] { "en-US", "zh-Hans-CN", "zh-Hant-TW" };
    var localizationOptions = new RequestLocalizationOptions()
        .AddSupportedCultures(supportedCultures)
        .AddSupportedUICultures(supportedCultures)
        .SetDefaultCulture("en-US");
    
    // 替换所有内置提供器,添加文化映射逻辑
    localizationOptions.RequestCultureProviders = localizationOptions.RequestCultureProviders
        .Select(CreateMappedCultureProvider)
        .ToList();
    
    app.UseRequestLocalization(localizationOptions);
    

方案优势:

  • 完全复用内置的查询字符串、Cookie、Accept-Language头解析逻辑,无需重复编码
  • 映射规则集中管理,后续新增映射仅需修改CultureMapping字典
  • 不需要复制任何.resx文件,保持本地化资源的唯一性和可维护性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:35:21