/// <summary> /// This remove a resource from memory, more for developper when update or change the module /// or the default value to re create the resource (files mode) /// </summary> /// <param name="ietfCode"></param> /// <param name="modul"></param> /// <param name="resource"></param> public override void DeleteResource(string ietfCode, string modul, object resource) { LocalizationItem item = resource as LocalizationItem; LocalizationDictionary dico = GetLocalizationDictionary(ietfCode, modul); dico.LocalizationItems.Remove(item); }
/// <summary> /// Return the extension value, implemented by all providers /// </summary> /// <param name="ext"></param> /// <param name="culture"></param> /// <returns></returns> public override object GetObject(LocalizationExtension ext, CultureInfo culture) { List <LocalizationItem> listLoc = GetLocalizationItem(culture.IetfLanguageTag, ext.ResModul); if (listLoc != null) { LocalizationItem item = listLoc.Single(p => p.Key == ext.Key); item.IsUsed = true; return(item.Translated); } else { listLoc = GetLocalizationItem(culture.IetfLanguageTag, "UNDEFINED"); if (listLoc != null) { LocalizationItem item = listLoc.Single(p => p.Key == ext.Key); item.IsUsed = true; return(item.Translated); } else { return(null); } } }
/// <summary> /// Clone allow to duplicate a existing resource when create a new culture /// </summary> /// <returns></returns> public LocalizationItem Clone() { LocalizationItem loc = new LocalizationItem() { Key = new string(this.Key.ToArray()), Default = new string(this.Default.ToArray()), }; if (!loc.Default.StartsWith("#")) { loc.Translated = "#" + loc.Default; } else { loc.Translated = loc.Default; } return(loc); }
/// <summary> /// Extra method to get translation from code /// </summary> /// <param name="ietfCode"></param> /// <param name="modul"></param> /// <param name="key"></param> /// <param name="defaultValue"></param> /// <returns></returns> public override string GetLocalizationResource(string ietfCode, string modul, string key, string defaultValue) { List <LocalizationExtension> ext = MarkupExtensionManager.Instance.Extensions. Cast <LocalizationExtension>().Where(p => p.ResModul == modul && p.Key == key).ToList(); LocalizationExtension locExt; if (ext.Count == 1) { locExt = ext[0]; } else { locExt = new LocalizationExtension(modul, key, defaultValue); } LocalizationItem item = GetCorrespondingItem(locExt, CultureInfo.GetCultureInfo(ietfCode)); return(item.Translated); }
protected void CreateForOtherlanguage(LocalizationItem item, string ietfCodeOther, string modul) { try { foreach (LocalizationFile fileOther in _localizationFileList.Where(p => p.IetfLanguageTag != ietfCodeOther)) { List <LocalizationExtension> ext = MarkupExtensionManager.Instance.Extensions. Cast <LocalizationExtension>().Where(p => p.ResModul == modul && p.Key == item.Key).ToList(); LocalizationExtension locExt; if (ext.Count == 1) { locExt = ext[0]; } else { locExt = new LocalizationExtension(modul, item.Key, item.Default); } GetCorrespondingItem(locExt, CultureInfo.GetCultureInfo(fileOther.IetfLanguageTag)); } } catch { } }
internal LocalizationItem GetCorrespondingItem(LocalizationExtension ext, CultureInfo culture) { if (string.IsNullOrEmpty(ext.DefaultValue)) { ext.DefaultValue = (string)base.GetDefaultValue(ext, culture); } //add default value to the resource LocalizationItem itemResult = new LocalizationItem() { Key = ext.Key, Default = ext.DefaultValue, Translated = ext.DefaultValue }; List <LocalizationItem> listLoc = null; if (string.IsNullOrEmpty(ext.ResModul)) //case modul is missing, invent a undefined.2letter.xml dictionnary { listLoc = GetLocalizationItem(culture.IetfLanguageTag, "UNDEFINED"); //no resource dictionnary for code and modul if (listLoc == null) { //create it LocalizationDictionary dict = GetUndefined(culture.IetfLanguageTag); dict.LocalizationItems.Add(itemResult); } else //list exist, what about the resource { if (listLoc.Exists(p => p.Key == ext.Key)) { return(listLoc.Single(p => p.Key == ext.Key)); } else { listLoc.Add(itemResult); } } itemResult.IsUsed = true; return(itemResult); } LocalizationFile loc_file = GetLocalizationFileFromCode(culture.IetfLanguageTag); //file is missing if (loc_file == null) { //create the file loc_file = new LocalizationFile(culture.IetfLanguageTag); _localizationFileList.Add(loc_file); //create the dico LocalizationDictionary dict = new LocalizationDictionary() { Module = ext.ResModul, IetfLanguageTag = culture.IetfLanguageTag, FileName = string.Format("{0}.{1}.{2}", ext.ResModul, culture.IetfLanguageTag, FileExtension), LocalizationItems = new List <LocalizationItem>() }; loc_file.Dictionnaries.Add(dict); dict.LocalizationItems.Add(itemResult); itemResult.IsUsed = true; return(itemResult); } LocalizationDictionary dico = GetLocalizationDictionary(culture.IetfLanguageTag, ext.ResModul); // no dictionnary if (dico == null) { //create the dico dico = new LocalizationDictionary() { Module = ext.ResModul, IetfLanguageTag = culture.IetfLanguageTag, FileName = string.Format("{0}.{1}.{2}", ext.ResModul, culture.IetfLanguageTag, FileExtension), LocalizationItems = new List <LocalizationItem>() }; loc_file.Dictionnaries.Add(dico); dico.LocalizationItems.Add(itemResult); itemResult.IsUsed = true; return(itemResult); } else { List <LocalizationItem> temp = dico.LocalizationItems.Where(p => p.Key == itemResult.Key).ToList(); if (temp.Count == 1) { itemResult = temp[0]; } else { dico.LocalizationItems.Add(itemResult); CreateForOtherlanguage(itemResult, culture.IetfLanguageTag, ext.ResModul); } } itemResult.IsUsed = true; return(itemResult); }