public virtual bool ReadTranslation(Encoding translationEncoding) { // Read translation file var translationFilepath = BuildTranslationFilepath(); mTranslationFile = new PipeTrailedFile(translationEncoding, false, false); mTranslationFile.Read(translationFilepath); Entries.BeginInit(); // Apply translations by the first column (always ID?) for (var r = 0; r < mTranslationFile.Entries.Rows.Count; r++) { var translatedRow = mTranslationFile.Entries.Rows[r]; var pkey = int.Parse(translatedRow[0].ToString()); if (RowSearchIndex.ContainsKey(pkey) == false) { continue; } var sourceIndex = RowSearchIndex[pkey]; var sourceRow = Entries.Rows[sourceIndex]; for (var c = 1; c < mTranslationFile.Entries.Columns.Count; c++) { var columnSourceValue = mTranslationFile.ColumnMappings[c]; var columnSourceIndex = int.Parse(columnSourceValue); // Columns start with 0, numbers with 1 columnSourceIndex--; sourceRow[columnSourceIndex] = translatedRow[c]; } } Entries.EndInit(); return(true); }