public bool Insert() { if ((TranslatedText != null || TranslatedText.Length != 0) && LanguageID != 0) { if (ModuleConfig.StorageType == StorageType.MySql) { CreateMySqlTableIfNotExists(); if (TranslationList.Instance.Exists(this)) { return(Update()); } else { var query = @"INSERT INTO `tmodule_translations` (`form_control_id`, `language_id`, `translated_text`) VALUES ('" + FormControlID + "', '" + LanguageID + "', '" + TranslatedText + "');"; Query.ExecuteMySql(query); GetID(); TranslationData.AddTranslation(this); return(true); } } } else { Console.WriteLine("TranslatedText is empty or language id is 0."); } return(false); }
/// <summary> /// Loads the information from the dto into the data object. Except... /// Does NOT load dto.Id. /// </summary> /// <param name="data"></param> /// <param name="dto"></param> public static void LoadDataFromDto(ref TranslationData data, TranslationDto dto, LearnLanguagesContext context) { //COPY USER INFO data.UserDataId = dto.UserId; data.UserData = EfHelper.GetUserData(dto.UserId, context); var currentPhraseIds = (from phrase in data.PhraseDatas select phrase.Id); //COPY PHRASEID INFO //ADD NEW PHRASEDATAS IN THE DTO foreach (var id in dto.PhraseIds) { if (!currentPhraseIds.Contains(id)) { PhraseData phraseData = EfHelper.GetPhraseData(id, context); data.PhraseDatas.Add(phraseData); } } //REMOVE PHRASEDATAS THAT ARE NOT IN DTO ANYMORE foreach (var phraseId in currentPhraseIds) { if (!dto.PhraseIds.Contains(phraseId)) { var dataToRemove = (from phraseData in data.PhraseDatas where phraseData.Id == phraseId select phraseData).First(); data.PhraseDatas.Remove(dataToRemove); } } }
public static void AddTooltip(this Panel self, TranslationData translationData, string className = null, Action <Tooltip> onCreate = null, Action <Tooltip> onDelete = null, Action <Tooltip> onTick = null) { self.AddEventListener("onmouseover", (panelEvent) => { if (Mouse.Delta == Vector2.Zero) { return; } CreateTooltip(self, translationData, className, onCreate, onDelete, onTick); }); self.AddEventListener("onmouseout", (panelEvent) => { if (Mouse.Delta == Vector2.Zero) { return; } DeleteTooltip(); }); self.AddEventListener("onclick", (panelEvent) => { CreateTooltip(self, translationData, className, onCreate, onDelete, onTick); }); }
public static string GetTranslation(ulong guildId, string id, params string[] args) { string language = "en"; if (guildId != 0) { language = Program.p.db.Languages[guildId]; } if (Program.p.translations.ContainsKey(id)) { TranslationData value = Program.p.translations[id].Find(x => x.language == language); string elem; if (value.language != null) { elem = value.content; } else if (Program.p.translations[id].Any(x => x.language == "en")) { elem = Program.p.translations[id].Find(x => x.language == "en").content; } else { return("An error occured in the translation submodule: The id " + id + " doesn't exist."); } for (int i = 0; i < args.Length; i++) { elem = elem.Replace("{" + i + "}", args[i]); } elem = elem.Replace("\\n", Environment.NewLine); return(elem); } return("An error occured in the translation submodule: The id " + id + " doesn't exist."); }
public override bool Load() { Translation targetData = target as Translation; var client = new DatabaseClient("", ""); string error = string.Empty; var db = client.GetDatabase(targetData.SheetName, ref error); var table = db.GetTable <TranslationData>(targetData.WorksheetName) ?? db.CreateTable <TranslationData>(targetData.WorksheetName); List <TranslationData> myDataList = new List <TranslationData>(); var all = table.FindAll(); foreach (var elem in all) { TranslationData data = new TranslationData(); data = Cloner.DeepCopy <TranslationData>(elem.Element); myDataList.Add(data); } targetData.dataArray = myDataList.ToArray(); EditorUtility.SetDirty(targetData); AssetDatabase.SaveAssets(); return(true); }
public static Dictionary <int, string> getTranslationDictionary(int LangId, int SurahId) { Dictionary <int, string> Data = new Dictionary <int, string>(); try { var lng = getLanguage(LangId); if (lng != null) { FungsiDB.KoneksiStr = Conn; string Qry = string.Format("select surah_id, ayah_id, {0} from quran where surah_id = {1}", lng.lang, SurahId); System.Data.DataTable dt = FungsiDB.RetrieveData(Qry); //dt.TableName = "data"; if (dt != null) { foreach (System.Data.DataRow dr in dt.Rows) { TranslationData item = new TranslationData() { ayah_id = Convert.ToInt32(dr["ayah_id"]), surah_id = Convert.ToInt32(dr["surah_id"]), content = dr[lng.lang].ToString() }; Data.Add(item.ayah_id, item.content); } } } } catch { throw; } return(Data); }
public TranslationTab(TranslationTabContainer tabControl, TranslationData tabTitle, Panel panel, string icon) : base(tabControl, TTTLanguage.ActiveLanguage.GetFormattedTranslation(tabTitle), icon, panel) { translationData = tabTitle; Button.AddClass("translationtab"); }
internal ChoreHandler(ChoreData chore, int price) { Chore = chore; Price = price; var choreTokens = HelpForHireMod.CustomChoresApi.GetChoreTokens(chore.ChoreName); choreTokens.Add("Mod", () => "HelpForHire"); // get display name _displayName = ( from translation in chore.Translations where translation.Key.Equals("DisplayName", StringComparison.CurrentCultureIgnoreCase) && translation.Filter(choreTokens) select translation)?.First(); // get description _description = ( from translation in chore.Translations where translation.Key.Equals("Description", StringComparison.CurrentCultureIgnoreCase) && translation.Filter(choreTokens) select translation)?.First(); // get work needed token _workNeeded = (choreTokens.TryGetValue("WorkNeeded", out var workNeededFn)) ? workNeededFn : () => "1"; // get work done token _workDone = (choreTokens.TryGetValue("WorkDone", out var workDoneFn)) ? workDoneFn : () => "1"; }
public static TranslationButton TranslationButton(this PanelCreator self, TranslationData translationData, string icon = null, string classname = null, Action onClick = null) { TranslationButton translationButton = new(translationData, icon, classname, onClick); self.panel.AddChild(translationButton); return(translationButton); }
public static void LoadTranslationFile(string target) { if (File.Exists(target)) { translation = File.ReadAllLines(target).ToList <string>(); translationData = JsonConvert.DeserializeObject <TranslationData>(File.ReadAllText(target)); } }
private void LoadTranslations(string selectedLanguageFile) { listBox_translations.Items.Clear(); Debugger.WriteLine( LogLevel.Info, $"Loading translation files. Selected language file: {selectedLanguageFile}"); string translationsPath = Path.Combine(MaidFiddler.DATA_PATH, Translation.TRANSLATIONS_PATH); if (!Directory.Exists(translationsPath)) { Debugger.WriteLine(LogLevel.Warning, "No translation folder found. Creating one..."); Directory.CreateDirectory(translationsPath); return; } string[] files = Directory.GetFiles(translationsPath, "*.txt"); int selected = -1; foreach (string filePath in files) { using (StreamReader sr = File.OpenText(filePath)) { TranslationData translationData = new TranslationData(); string line = sr.ReadLine(); if (line == null || line.Trim() == string.Empty) { continue; } Match match = Translation.TagPattern.Match(line); if (!match.Success) { continue; } translationData.FileName = Path.GetFileNameWithoutExtension(filePath); translationData.Language = match.Groups["lang"].Value; translationData.Version = match.Groups["ver"].Value; translationData.Author = match.Groups["auth"].Value; Debugger.WriteLine( LogLevel.Info, $"Found language: File={translationData.FileName}, Lang={translationData.Language}"); int i = listBox_translations.Items.Add(translationData); if (translationData.FileName == selectedLanguageFile) { selected = i; } } } if (selected != -1) { listBox_translations.SelectedIndex = selected; } }
public static TranslationDto ToDto(TranslationData data) { var dto = new TranslationDto() { Id = data.Id, PhraseIds = (from phrase in data.PhraseDatas select phrase.Id).ToList(), UserId = data.UserDataId, Username = data.UserData.Username }; return(dto); }
bool Update() { if (ModuleConfig.StorageType == StorageType.MySql) { GetID(); CreateMySqlTableIfNotExists(); var query = @"UPDATE `tmodule_translations` SET `translated_text` = '" + TranslatedText + "' WHERE `tmodule_translations`.`id` = " + Id; Query.ExecuteMySql(query); TranslationData.UpdateTranslation(this); return(true); } return(false); }
public Hint(TranslationData translationData) { AddClass("centered-vertical-75"); AddClass("background-color-primary"); AddClass("rounded"); AddClass("text-color-info"); AddClass("text-shadow"); _label = Add.TranslationLabel(translationData); _label.Style.Padding = 10; Style.ZIndex = 1; this.Enabled(false); }
private void OnLanguageSelected(object sender, EventArgs e) { if (listBox_translations.SelectedIndex == -1) { return; } TranslationData translationData = (TranslationData)listBox_translations.SelectedItem; label_lang_val.Text = translationData.Language != string.Empty ? translationData.Language : Translation.GetTranslation("UNKNOWN"); label_version_val.Text = translationData.Version != string.Empty ? translationData.Version : Translation.GetTranslation("UNKNOWN"); label_author_val.Text = translationData.Author != string.Empty ? translationData.Author : Translation.GetTranslation("UNKNOWN"); }
private void LoadTranslations(string selectedLanguageFile) { listBox_translations.Items.Clear(); Debugger.WriteLine( LogLevel.Info, $"Loading translation files. Selected language file: {selectedLanguageFile}"); string translationsPath = Path.Combine(MaidFiddler.DATA_PATH, Translation.TRANSLATIONS_PATH); if (!Directory.Exists(translationsPath)) { Debugger.WriteLine(LogLevel.Warning, "No translation folder found. Creating one..."); Directory.CreateDirectory(translationsPath); return; } string[] files = Directory.GetFiles(translationsPath, "*.txt"); int selected = -1; foreach (string filePath in files) { using (StreamReader sr = File.OpenText(filePath)) { TranslationData translationData = new TranslationData(); string line = sr.ReadLine(); if (line == null || line.Trim() == string.Empty) continue; Match match = Translation.TagPattern.Match(line); if (!match.Success) continue; translationData.FileName = Path.GetFileNameWithoutExtension(filePath); translationData.Language = match.Groups["lang"].Value; translationData.Version = match.Groups["ver"].Value; translationData.Author = match.Groups["auth"].Value; Debugger.WriteLine( LogLevel.Info, $"Found language: File={translationData.FileName}, Lang={translationData.Language}"); int i = listBox_translations.Items.Add(translationData); if (translationData.FileName == selectedLanguageFile) selected = i; } } if (selected != -1) listBox_translations.SelectedIndex = selected; }
public void Initialize() { _repository = new Mock <INStackRepository>(MockBehavior.Strict); _repository.Setup(r => r.DoRequestAsync <DataAppOpenWrapper>(It.Is <RestRequest>(s => s.Resource.EndsWith("api/v2/open")), It.IsAny <Action <HttpStatusCode> >())) .Returns(GetAppOpenMock); var danish = new TranslationData(); var defaultSection = new DefaultSection(); defaultSection.TryAdd("text", "Jeg er på dansk"); danish.TryAdd("default", defaultSection); _danish = new DataMetaWrapper <TranslationData> { Data = danish, Meta = new MetaData { Language = new Language { Direction = LanguageDirection.LRM, Id = LanguageId, IsBestFit = true, IsDefault = true, Locale = LanguageLocale, Name = "Danish" }, Platform = new ResourcePlatform { Id = LanguageId, Slug = NStackPlatform.Web } } }; _localizeService = new Mock <INStackLocalizeService>(MockBehavior.Strict); _localizeService.Setup(r => r.GetResourceAsync <TranslationData>(It.Is <int>(id => id == LanguageId))) .Returns(Task.FromResult(_danish)); var services = new ServiceCollection(); services.AddMemoryCache(); var serviceProvider = services.BuildServiceProvider(); _memoryCache = serviceProvider?.GetService <IMemoryCache>() ?? throw new ArgumentNullException(); _service = new NStackAppService(_repository.Object, _localizeService.Object, _memoryCache); }
private static Tooltip CreateTooltip(Panel panel, TranslationData translationData, string className = null, Action <Tooltip> onCreate = null, Action <Tooltip> onDelete = null, Action <Tooltip> onTick = null) { DeleteTooltip(); Tooltip tooltip = new(panel, onCreate, onDelete, onTick); tooltip.UpdateTranslation(translationData); if (!string.IsNullOrEmpty(className)) { tooltip.AddClass(className); } onCreate?.Invoke(tooltip); return(tooltip); }
public void TranslationDataFactory_CreateTranslationDataFromProject_Test() { // Arrange var data = new ProjectData() { ProjectName = mockProjectName, ProjectLines = mockProjectLines }; var expected = new TranslationData(data, mockSubTranslationDataFactory.Object); // Act var actual = translationDataFactory.CreateTranslationDataFromProject(data); // Assert Assert.IsType <TranslationData>(actual); Assert.IsAssignableFrom <ITranslationData>(actual); Assert.NotStrictEqual(expected, actual); }
public void TranslationDataFactory_CreateTranslationDataFromArray_Test() { // Arrange var expected = new TranslationData(mockProjectData.Object, mockSubTranslationDataFactory.Object) { DataChanged = true }; // Act var actual = translationDataFactory.CreateTranslationDataFromArray(mockProjectName, mockProjectLines.Select(x => x.Raw).ToArray()); // Assert mockProjectDataFactory.Verify(x => x.CreateProjectDataFromArray(It.IsAny <string>(), It.IsAny <string[]>()), Times.Once); Assert.IsType <TranslationData>(actual); Assert.IsAssignableFrom <ITranslationData>(actual); Assert.NotStrictEqual(expected, actual); }
public void SetUp() { _repository = new Mock <INStackRepository> { DefaultValue = DefaultValue.Empty }; _repository.Setup(r => r.DoRequestAsync <DataWrapper <List <ResourceData> > >(It.Is <RestRequest>(s => s.Resource.EndsWith("platforms/backend")), It.IsAny <Action <HttpStatusCode> >())) .Returns(GetLanguageMock); _english = new TranslationData(); var defaultSection = new DefaultSection(); defaultSection.TryAdd("text", "I'm in English"); _english.TryAdd("default", defaultSection); _repository.Setup(r => r.DoRequestAsync <DataMetaWrapper <TranslationData> >(It.Is <RestRequest>(s => s.Resource.EndsWith($"resources/{_englishLanguage.Id}")), It.IsAny <Action <HttpStatusCode> >())) .Returns(Task.FromResult(new DataMetaWrapper <TranslationData> { Data = _english })); _repository.Setup(r => r.DoRequestAsync <DataMetaWrapper <ResourceItem> >(It.Is <RestRequest>(s => s.Resource.EndsWith($"resources/{_englishLanguage.Id}")), It.IsAny <Action <HttpStatusCode> >())) .Returns(Task.FromResult(new DataMetaWrapper <ResourceItem> { Data = _english })); _danish = new TranslationData(); var defaultDanishSection = new DefaultSection(); defaultDanishSection.TryAdd("text", "Jeg er på dansk"); _danish.TryAdd("default", defaultDanishSection); _repository.Setup(r => r.DoRequestAsync <DataMetaWrapper <TranslationData> >(It.Is <RestRequest>(s => s.Resource.EndsWith($"resources/{_danishLanguage.Id}")), It.IsAny <Action <HttpStatusCode> >())) .Returns(Task.FromResult(new DataMetaWrapper <TranslationData> { Data = _danish })); _repository.Setup(r => r.DoRequestAsync <DataMetaWrapper <ResourceItem> >(It.Is <RestRequest>(s => s.Resource.EndsWith($"resources/{_danishLanguage.Id}")), It.IsAny <Action <HttpStatusCode> >())) .Returns(Task.FromResult(new DataMetaWrapper <ResourceItem> { Data = _danish })); _service = new NStackLocalizeService(_repository.Object); }
public void Write(TranslationData src, string dstPath) { // 全項目を、ロケールを含んだアイテムに射影 var edited = src.SelectMany(o => o.Select(item => new { o.Locale, item.Namespace, item.Key, item.Value })); // プロパティ名完全一致の項目同市でグルーピング var groupedByNS = edited.GroupBy(o => Tuple.Create(o.Namespace, o.Key), o => new { o.Locale, o.Value }); // TODO: ★出力先ディレクトリに、すでに同名フォルダがあったりしないかチェック。 foreach (var lang in src) { var langPath = Path.Combine(dstPath, lang.Locale); Directory.CreateDirectory(langPath); langPath = Path.Combine(langPath, JsonFilename); this.WriteSingleFile(lang, langPath); } }
public void TranslationDataFactory_CreateTranslationDataFromDocument_Test() { // Arrange var expected = new TranslationData(mockProjectData.Object, mockSubTranslationDataFactory.Object) { DataChanged = false }; var expectedDataChanged = expected.DataChanged; // Act var actual = translationDataFactory.CreateTranslationDataFromDocument("", new Document()); var actualDataChanged = actual.DataChanged; // Assert mockProjectDataFactory.Verify(x => x.CreateProjectDataFromDocument(It.IsAny <string>(), It.IsAny <Document>()), Times.Once); Assert.IsType <TranslationData>(actual); Assert.IsAssignableFrom <ITranslationData>(actual); Assert.NotStrictEqual(expected, actual); Assert.Equal(expectedDataChanged, actualDataChanged); }
public Tab AddTab(Panel panel, TranslationData tabTitle, string icon = null) { int index = Tabs.Count; TranslationTab tab = new(this, tabTitle, panel, icon); Tabs.Add(tab); int cookieIndex = string.IsNullOrWhiteSpace(TabCookie) ? -1 : Cookie.Get($"dropdown.{TabCookie}", -1); panel.Parent = SheetContainer; if (index == 0 || cookieIndex == index) { SwitchTab(tab, false); } else { tab.Active = false; } return(tab); }
/// <summary> /// 引数のパスで指定されたファイルを読み込み、ローカライズ用文字列の配列を返します。 /// </summary> /// <param name="srcPath"></param> /// <returns></returns> public TranslationData Read(string srcPath) { // 各種入力チェック // フォルダ指定かどうか?localeというフォルダ名か?__lang__/translation.jsonという構造になっているか? // JSONのパース時の例外チェック var translation = new TranslationData(); // TODO: 指定フォルダ内のツリー構造をチェック // フォルダ指定かどうか?localeというフォルダ名か?__lang__/translation.jsonという構造になっているか? var fileList = Directory.GetFiles(srcPath, JsonFilename, SearchOption.AllDirectories) .Select(o => new FileInfo(o)); foreach (var file in fileList) { var lang = this.ReadSingleFile(file); translation.Add(lang); } return translation; }
public List <TranslationData> GetFieldIdNDescriptionInEnglish(string moduleId) { var lstTranslationData = new List <TranslationData>(); var jsonString = _translationService.GetFieldIdNDescriptionInEnglish(moduleId); if (!string.IsNullOrEmpty(jsonString)) { dynamic dictFieldIdNDescription = JsonConvert.DeserializeObject <Dictionary <string, object> >(jsonString); var data = dictFieldIdNDescription["result"]; foreach (var item in data) { var key = item["fieldId"].ToString(); var value = item["fieldDescri"]; var translationDataItem = new TranslationData { FieldId = key, FieldDescription = value }; lstTranslationData.Add(translationDataItem); } } return(lstTranslationData); }
public Label AddTranslation(TranslationData translationData) => Content.Add.TranslationLabel(translationData, "text");
private void TranslateTempMember(TranslationData data) { throw new System.NotImplementedException(); }
public void SetTranslationTitle(TranslationData translationData) { Header.NavigationHeader.SetTranslationTitle(translationData); }
public GlyphHintData(TranslationData translationData, params InputButton[] inputButtons) { TranslationData = translationData; InputButtons = new(inputButtons); }
public static void LoadTranslationFile(string target) { if (File.Exists(target)) { translation = File.ReadAllLines(target).ToList<string>(); translationData = JsonConvert.DeserializeObject<TranslationData>(File.ReadAllText(target)); } }
public void SetTranslationTitle(TranslationData translationdata) { _title.UpdateTranslation(translationdata); }
// POST api/Translation public async Task <IHttpActionResult> PostTranslation(TranslationData data) { try { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } LanguageType wordLanguage; LanguageType translationLanguage; if (!Enum.TryParse <LanguageType>(data.wordLanguage, out wordLanguage)) { return(BadRequest("Invalid word language")); } if (!Enum.TryParse <LanguageType>(data.translationLanguage, out translationLanguage)) { return(BadRequest("Invalid translation language")); } var user = this.GetUser(); // . add word SpeachPartType sp = GetSpeachPart(data.translationWords, data.translationWord); LanguageFormatter languageFormatter = new LanguageFormatter(wordLanguage); Word word = await db.AddWord(languageFormatter.FormatWord(data.word, sp), wordLanguage, data.wordPronunciation, data.wordSoundUrls, data.wordPictureUrls); // . add word translations to mongo await mongoDb.AddTranslations( data.word.ToLower(), data.wordLanguage, data.translationLanguage, data.translationWords, data.translationCards); // . if book id is not specified - add translation to 'Cool Translator' book UserBook userBook; if (data.bookId == 0) { userBook = await db.GetCTUserBook(User.Identity.GetUserId(), wordLanguage); data.bookId = userBook.BookId; } else { userBook = await db.FindUserBookAsync(user.Id, data.bookId); if (userBook == null) { return(BadRequest("Invalid bookId")); } if (!userBook.Book.CanBeUpdatedBy(user.Id)) { return(BadRequest(string.Format("User {0} is not author of the book", user.DisplayName))); } } // . add translation Tuple <BookWord, Translation> bwt = await db.AddTranslation(data.bookId, word.Id, data.translationWord, translationLanguage, sp); Redis.PushWord(wordLanguage, sp, word.Value); Redis.PushWord(translationLanguage, sp, bwt.Item2.Value); var userBookDto = new UserBookDto(userBook); return(CreatedAtRoute("DefaultApi", new { id = bwt.Item2.Id }, new { userBook = userBookDto, book = userBookDto.BookDto, word = new WordDto(word), bookWord = new BookWordDto(bwt.Item1), translation = new TranslationDto(bwt.Item2) })); } catch (Exception e) { _logger.Error(e, "Unable to add translation"); throw; } }
public void Write(TranslationData src, string dstPath) { // TODO: 出力先の拡張子チェック var ext = System.IO.Path.GetExtension(dstPath); if (ext != ".xlsx") { throw new ArgumentException("Invalid extension."); } try { // ワークブックの作成 using (var workbook = new XLWorkbook()) { // ワークブックにシートを追加 var worksheet = workbook.Worksheets.Add(ExcelConverter.SheetName); // 「dev」ロケールを先頭に持ってくる var sorted = src.OrderBy(o => o.Locale != "dev"); // 全キーのリストを作る var allKeys = sorted.SelectMany(o => o.Select(item => Tuple.Create(item.Namespace, item.Key))) .Distinct() .OrderBy(o => o); // 全体のヘッダー領域を作成 this.CreateHeader(worksheet, sorted.Count()); // プロパティ名などの列を作成 this.CreateKeyColumns(worksheet, allKeys); var columnPos = DataRow; // 各言語用のデータを書き込み foreach (var lang in sorted) { // 言語名を書く worksheet.Cell(LanguageTitleRow, columnPos).Value = lang.Locale; // 各言語の全項目を書く var temp = allKeys.GroupJoin(lang, o => o, i => Tuple.Create(i.Namespace, i.Key), (o, i) => new { Key = o, Value = i.Select(e => e.Value).FirstOrDefault() ?? "" }); // ↓コイツを書き込めばOK var result = temp.Select(o => o.Value).AsEnumerable(); var startCell = worksheet.Cell(DataRow, columnPos); startCell.Value = result; columnPos++; } var langCount = sorted.Count(); // 罫線を描画 this.DrawBorder(worksheet, allKeys, langCount); worksheet.Range(OffsetRow, OffsetColumn, DataRow + allKeys.Count() - 1, DataColumn + langCount - 1) .Style.Border.SetOutsideBorder(MidBorder); // カラム幅を自動調整 worksheet.Columns().AdjustToContents(); // ワークブックの保存 workbook.SaveAs(dstPath); } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex); throw; } }
void ToggleTranslationItem_Click(object sender, EventArgs e) { TranslationData.ToggleTranslation(!ModuleConfig.TranslationEnabled); }
public void ReadFile(string file) { XmlDocument doc = new XmlDocument(); doc.Load(file); XmlNode node = doc.DocumentElement.FirstChild; while (true) { if (node.Attributes != null) { var langAttribute = node.Attributes["lang"]; if (langAttribute != null) { if (!LocaliseManager.AvailableLanguages.Contains(langAttribute.Value)) { LocaliseManager.AvailableLanguages.Add(langAttribute.Value); } if (LocaliseManager.CurrentLanguage == langAttribute.Value) { XmlNode childNode = node.FirstChild; while (true) { XmlNode IDAttribute = null; XmlNode TextAttribute = null; if (childNode.Attributes != null) { IDAttribute = childNode.Attributes["id"]; TextAttribute = childNode.Attributes["text"]; } if (IDAttribute == null) { throw new InvalidOperationException("Attribute 'id' not found."); } else if (TextAttribute == null) { throw new InvalidOperationException("Attribute 'text' not found."); } else { TranslationData data = new TranslationData(IDAttribute.Value, TextAttribute.Value); LocaliseManager.Instance.Localisations.Add(IDAttribute.Value, data); } if ((childNode = childNode.NextSibling) == null) { break; } } } } else { throw new InvalidOperationException("Attribute 'lang' not found."); } } if ((node = node.NextSibling) == null) { break; } } }