This post shows a simple code-first dictionary manager for Umbraco 7. Click here to download the source. First define the attribute class and a helper to get the details of an attribute by key name
// define the dictionary key attributes public class DictionaryKeyAttribute : Attribute { // define fields public string Name { get; set; } public string DefaultText { get; set; } // constructor public DictionaryKeyAttribute(string name, string defaultText) { Name = name; DefaultText = defaultText; } } // helper that gets the details private static DictionaryKeyAttribute GetDetails(Keys key) { return key.GetType() .GetField(key.ToString()) .GetCustomAttributes(typeof(DictionaryKeyAttribute), false) .SingleOrDefault() as DictionaryKeyAttribute; }Here is the function that initializes the keys by creating new Umbraco dictionary entries if the key does not already exist
// function that inits the dictionary and add new items if needed public static void Init() { // get the service var locationService = ApplicationContext.Current.Services.LocalizationService; // get all languages var langs = locationService.GetAllLanguages(); // go through each key foreach(var key in Enum.GetValues(typeof(Keys))) { // get details, check if any var keyDetails = GetDetails((Keys)key); if (keyDetails != null) { string keyName = String.Concat(Prefix, keyDetails.Name); if (!locationService.DictionaryItemExists(keyName)) { // init the new item var newItem = new DictionaryItem(keyName); newItem.Translations = langs .Select(lang => new DictionaryTranslation(lang, keyDetails.DefaultText)); // save locationService.Save(newItem); } } } }The following functions can be used to extract the dictionary text by key
// function that returns a dictionary string public static string GetText(string key) { // get the service var locationService = ApplicationContext.Current.Services.LocalizationService; // find the dictionary item var item = locationService.GetDictionaryItemByKey(String.Concat(Prefix, key)); if (item != null && item.Translations != null) { // get the current language int languageId = GetCurrentLanguage(); // get the translation var t = item.Translations.FirstOrDefault(x => x.Language.Id == languageId); if (t == null) { t = item.Translations.FirstOrDefault(); } // check if a translation if (t != null) { // return return t.Value; } } // fallback to empty return “”; } // function that gets the dictionary string public static string GetText(Keys key) { // get the dictionary key details var keyDetails = GetDetails((Keys)key); if( keyDetails != null) { return GetText(keyDetails.Name); } // fallback to empty return “”; }Last, define your key prefix and keys
// define prefix public const string Prefix = “roma”; // define dictionary items public enum Keys { [DictionaryKey(“PageTitle”, “{0} | Michael Roma Development”)] PageTitle, [DictionaryKey(“CategoriesTitle”, “Categories”)] CategoriesTitle }Here is a helper to get the current page’s language
// function that gets the current language public static int GetCurrentLanguage() { // get the current page var currentPage = new UmbracoHelper(UmbracoContext.Current) .TypedContent(UmbracoContext.Current.PageId.Value); // check if a page if (currentPage != null) { // get the home page var home = currentPage.AncestorOrSelf(1); if (home != null) { // get the domains for home var domains = umbraco.cms.businesslogic.web.Domain.GetDomainsById(home.Id); if (domains.Count() > 0) { return domains[0].Language.id; } } } // if here, no language return 0; }