private Group AddQuestionGroup(Group sectionToUse, UIDataString key) { var categoryGroup = sectionToUse.SubGroups?.SingleOrDefault(g => g.Id == "Details") ?? sectionToUse.AddSubGroup("Details"); var questionGroup = categoryGroup.AddSubGroup($"{FileBody.kQuestionIdPrefix}{key.ScriptureReference}+{key.Question}"); questionGroup.SubGroups = new List <Group>(); return(questionGroup); }
public virtual bool TryGetLocalizedString(UIDataString key, out string localized) { if (m_fastLookup.TryGetValue(key, out Tuple <string, bool> value)) { localized = value.Item1; return(value.Item2); } var info = Localizations.GetStringLocalization(key); if (info != null && info.Target.IsLocalized) { localized = info.Target.Text; m_fastLookup.Add(key, new Tuple <string, bool>(localized, true)); return(true); } localized = key.SourceUIString; m_fastLookup.Add(key, new Tuple <string, bool>(localized, false)); return(false); }
string LookupTranslation(List <XmlTranslation> translations, UIDataString key) { XmlTranslation firstMatchOnPhrase = null; foreach (var translation in translations) { if (translation.PhraseKey == key.SourceUIString) { if (translation.Reference == key.ScriptureReference) { return(translation.Translation); } if (firstMatchOnPhrase == null) { firstMatchOnPhrase = translation; } } } return(firstMatchOnPhrase?.Translation); }
internal TranslationUnit GetTranslationUnit(UIDataString key) { switch (key.Type) { case LocalizableStringType.Category: return(Localizations.Categories.TranslationUnits.FirstOrDefault(tu => tu.English == key.SourceUIString)); case LocalizableStringType.SectionHeading: return(Localizations.Groups.FirstOrDefault(g => g.Id == FileBody.GetSectionId(key))?.TranslationUnits.Single()); case LocalizableStringType.Question: return(Localizations.FindQuestionGroup(key)?.TranslationUnits.Single()); case LocalizableStringType.Alternate: case LocalizableStringType.Answer: case LocalizableStringType.Note: return(Localizations.FindQuestionGroup(key)?.GetQuestionSubGroup(key.Type)?.TranslationUnits.SingleOrDefault(tu => tu.English == key.SourceUIString)); default: throw new ArgumentOutOfRangeException(); } }
internal TranslationUnit GetLocalizableStringInfo(UIDataString key) { if (String.IsNullOrWhiteSpace(key?.SourceUIString)) { return(null); } if (key.Type == LocalizableStringType.Category) { return(Localizations.Categories.TranslationUnits.SingleOrDefault(tu => tu.English == key.SourceUIString)); } if (key.Type == LocalizableStringType.SectionHeading) { return(Localizations.Groups.SingleOrDefault(g => g.Id == FileBody.GetSectionId(key))?.TranslationUnits?.Single()); } var question = Localizations.FindQuestionGroup(key); if (question == null) { return(null); } switch (key.Type) { case LocalizableStringType.Question: return(question.TranslationUnits?.SingleOrDefault()); case LocalizableStringType.Answer: case LocalizableStringType.Note: case LocalizableStringType.Alternate: return(question.GetQuestionSubGroup(key.Type)?. TranslationUnits.SingleOrDefault(tu => tu.English == key.SourceUIString)); default: throw new Exception("Unhandled type!"); } }
public TranslationUnit AddLocalizationEntry(UIDataString data, string localizedString = null, bool isLocalized = true, int specificSection = 0) { if (String.IsNullOrWhiteSpace(data?.SourceUIString)) { throw new ArgumentException("Invalid key!", nameof(data)); } InitializeLookupTable(); TranslationUnit existing; Group group = null; var type = data.Type; if (type == LocalizableStringType.Category) { existing = Localizations.Categories.TranslationUnits.SingleOrDefault(c => c.Id == data.SourceUIString); if (existing == null) { return(Localizations.Categories.AddTranslationUnit(data, localizedString, isLocalized)); } } else if (type == LocalizableStringType.SectionHeading) { var id = FileBody.GetSectionId(data); existing = Localizations.Groups.FirstOrDefault(g => g.Id == id)?.TranslationUnits.Single(); if (existing == null) { var sectionGroup = new Group { Id = id }; Localizations.Groups.Add(sectionGroup); sectionGroup.SubGroups = new List <Group>(); return(sectionGroup.AddTranslationUnit(data, localizedString, isLocalized)); } } else { var sectionGroup = Localizations.FindSectionsForQuestion(data).Skip(specificSection).FirstOrDefault(); Debug.Assert(sectionGroup != null); group = sectionGroup.FindQuestionGroup(data.Question) ?? AddQuestionGroup(sectionGroup, data); switch (type) { case LocalizableStringType.Question: existing = group.TranslationUnits?.FirstOrDefault(); break; case LocalizableStringType.Alternate: group = group.SubGroups?.SingleOrDefault(g => g.Id == FileBody.kAlternatesGroupId) ?? group.AddSubGroup(FileBody.kAlternatesGroupId); existing = group.TranslationUnits?.FirstOrDefault(a => a.English == data.SourceUIString); break; case LocalizableStringType.Answer: group = group.SubGroups?.SingleOrDefault(g => g.Id == FileBody.kAnswersGroupId) ?? group.AddSubGroup(FileBody.kAnswersGroupId); existing = group.TranslationUnits?.FirstOrDefault(a => a.English == data.SourceUIString); break; case LocalizableStringType.Note: group = group.SubGroups?.SingleOrDefault(g => g.Id == FileBody.kNotesGroupId) ?? group.AddSubGroup(FileBody.kNotesGroupId); existing = group.TranslationUnits?.FirstOrDefault(a => a.English == data.SourceUIString); break; default: throw new ArgumentOutOfRangeException(); } } if (existing == null) { Debug.Assert(group != null); return(group.AddTranslationUnit(data, localizedString, isLocalized)); } existing.Target.Text = localizedString; existing.Target.IsLocalized = isLocalized; return(existing); }
public string GetLocalizedDataString(UIDataString key, out string localeID) { localeID = TryGetLocalizedString(key, out string localized) ? Locale : "en"; return(localized); }
public string GetLocalizedString(UIDataString key, bool failoverToEnglish = true) { return(TryGetLocalizedString(key, out string localized) ? localized : (failoverToEnglish ? key.SourceUIString : null)); }