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
相关产品推荐
相关产品推荐

