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

Umbraco 7中如何通过代码更新Dictionary字典项的值

Umbraco .NET 代码更新字典项实现方案

以下实现适配Umbraco 9+ (.NET Core/.NET 5+版本),低版本Umbraco v8及以前逻辑类似,服务获取方式略有差异

核心依赖

Umbraco 原生提供ILocalizationService处理字典项的增删改查操作,无需额外引入第三方包。


实现步骤

1. 注入服务

在你要操作字典的类中通过构造函数注入ILocalizationService:

using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Models;

public class CustomDictionaryService
{
    private readonly ILocalizationService _localizationService;

    public CustomDictionaryService(ILocalizationService localizationService)
    {
        _localizationService = localizationService;
    }
}

2. 单语言字典项更新方法

适用于仅更新指定字典项某一个语言版本的值:

/// <summary>
/// 更新指定字典项的单语言值
/// </summary>
/// <param name="dictionaryKey">字典项唯一Key,例如"Home.Banner.Title"</param>
/// <param name="languageIsoCode">目标语言ISO编码,例如zh-CN、en-US</param>
/// <param name="newValue">要设置的新值</param>
/// <returns>更新成功返回true,字典项/语言不存在返回false</returns>
public bool UpdateSingleLanguageDictionary(string dictionaryKey, string languageIsoCode, string newValue)
{
    // 获取指定Key的字典项
    IDictionaryItem dictItem = _localizationService.GetDictionaryItemByKey(dictionaryKey);
    if (dictItem == null) return false;

    // 获取目标语言实例
    ILanguage targetLang = _localizationService.GetLanguageByIsoCode(languageIsoCode);
    if (targetLang == null) return false;

    // 赋值新值
    dictItem.SetValue(targetLang.Id, newValue);

    // 保存变更到数据库,会自动刷新字典缓存
    _localizationService.Save(dictItem);

    return true;
}

3. 多语言批量更新方法

适用于同时更新一个字典项的多个语言版本值:

/// <summary>
/// 批量更新指定字典项的多语言值
/// </summary>
/// <param name="dictionaryKey">字典项唯一Key</param>
/// <param name="langValuePairs">语言ISO编码和对应新值的键值对</param>
/// <returns>更新成功返回true,字典项不存在返回false</returns>
public bool UpdateMultiLanguageDictionary(string dictionaryKey, Dictionary<string, string> langValuePairs)
{
    IDictionaryItem dictItem = _localizationService.GetDictionaryItemByKey(dictionaryKey);
    if (dictItem == null) return false;

    foreach (var (isoCode, value) in langValuePairs)
    {
        ILanguage lang = _localizationService.GetLanguageByIsoCode(isoCode);
        if (lang != null)
        {
            dictItem.SetValue(lang.Id, value);
        }
    }

    _localizationService.Save(dictItem);
    return true;
}

注意事项

  • ILocalizationService执行Save操作后会自动刷新Umbraco的字典缓存,无需手动清理缓存
  • 如果需要先创建不存在的字典项,可调用_localizationService.CreateDictionaryItemWithIdentity方法先初始化字典项,再执行赋值操作
  • 生产环境调用建议添加异常捕获逻辑,避免空引用、权限不足等问题导致程序报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:42:03