internal StringRow StringForId(int sid) { DataTable stringIdDataRows = __DB.SelectAll("SELECT * from string_ids inner join original_strings on string_ids.id = original_strings.string_id where string_ids.id=@sid and original_strings.revision = string_ids.max_revision", new Dictionary <string, object>() { { "@sid", sid } }); if (stringIdDataRows == null) { return(null); } if (stringIdDataRows.Rows.Count == 0) { return(null); } DataRow stringIdDataRow = stringIdDataRows.Rows[0]; StringRow row = StringRowFromTableRow(stringIdDataRow); row.Content = (string)stringIdDataRow["string"]; return(row); }
public async Task ImportTranslationStrings(IProgress <int> progress, CancellationToken cancelToken, string assemblyFile, string neutralCulture, string cultureCode, List <BamlString> lines) { __DB.BeginTransaction(); try { int line_no = 0, max = lines.Count; var enumerator = lines.GetEnumerator(); bool finished = !enumerator.MoveNext(); while (!finished) { await Task.Run(() => { for (int t = 0; t < 100; t++) { BamlString line = enumerator.Current; string bamlFile = line.BamlFile.ToLower(); bamlFile = bamlFile.Replace(cultureCode.ToLower(), neutralCulture.ToLower()); int?sid = __DB.StringId(assemblyFile, bamlFile, line.ResourceKey); if (sid != null) { if (!string.IsNullOrEmpty(line.Content)) { StringRow strRow = __DB.StringForId((int)sid); if (strRow != null) { __DB.SetTranslation((int)sid, strRow.Revision, cultureCode, null, line.Content); } } } line_no += 1; finished = !enumerator.MoveNext(); if (finished) { break; } } }); progress.Report(line_no * 100 / max); } } catch { __DB.Rollback(); throw; } __DB.Commit(); }
private StringRow StringRowFromTableRow(DataRow tableRow) { StringRow stringRow = new StringRow(); stringRow.Sid = Int32.Parse(tableRow["id"].ToString()); stringRow.DllFile = (string)tableRow["filename"]; stringRow.BamlFile = (string)tableRow["baml"]; stringRow.ResourceKey = (string)tableRow["uid"]; stringRow.Category = (string)tableRow["category"]; stringRow.Readability = (string)tableRow["readability"]; stringRow.Localizability = (string)tableRow["localizability"]; stringRow.Comments = (string)tableRow["description"]; stringRow.Revision = (int)UnboxNumeric(tableRow["max_revision"]); return(stringRow); }
internal List <StringTranslation> GetTranslationsForCulture(string cultureCode, bool includeTranslated, string assemblyFileName = "") { DataTable originalString; if (assemblyFileName == "") { originalString = GetTranslationsDataTableForCulture(cultureCode); } else { originalString = __DB.SelectAll(@"SELECT string_ids.id, string_ids.filename, string_ids.baml, string_ids.max_revision, string_ids.uid, string_ids.category, string_ids.readability, string_ids.localizability, string_ids.description, original_strings.string, (SELECT translation FROM translated_strings WHERE string_id=string_ids.id AND revision=string_ids.max_revision AND culture_code=@cultureCode) as translation FROM string_ids, original_strings WHERE string_ids.id = original_strings.string_id AND string_ids.filename = @assemblyFileName AND original_strings.is_deleted = 0 AND original_strings.revision = string_ids.max_revision AND string <> ''", new Dictionary <string, object>() { { "@cultureCode", cultureCode }, { "@assemblyFileName", assemblyFileName.ToLower() } }); } List <StringTranslation> result = new List <StringTranslation>(); foreach (DataRow row in originalString.Rows) { StringRow stringRow = new StringRow(); stringRow.Sid = (int)UnboxNumeric(row["id"]); stringRow.DllFile = (string)row["filename"]; stringRow.BamlFile = (string)row["baml"]; stringRow.ResourceKey = (string)row["uid"]; stringRow.Localizability = (string)row["localizability"]; stringRow.Readability = (string)row["readability"]; stringRow.Category = (string)row["category"]; stringRow.Comments = (string)row["description"]; stringRow.Content = (string)row["string"]; stringRow.MaxRevision = (int)UnboxNumeric(row["max_revision"]); string translation = null; if (!(row["translation"] is DBNull)) { translation = (string)row["translation"]; } StringTranslation translationRow = new StringTranslation(stringRow, translation); if (!String.IsNullOrEmpty(translation) && includeTranslated) { result.Add(translationRow); } if (String.IsNullOrEmpty(translation)) { result.Add(translationRow); } } return(result); }
public StringTranslation(StringRow stringRow, string translation) { __Row = stringRow; __Translation = translation; }
public async Task <ImportResult> ImportStrings(IProgress <int> progress, CancellationToken cancellationToken, string dllFile, List <BamlString> lines) { List <int> newStrings = new List <int>(); List <int> sidsList = new List <int>(); List <int> stringsUpadted = new List <int>(); List <int> sidsToDelete = new List <int>(); __DB.BeginTransaction(); try { int line_no = 0, max = lines.Count; var enumerator = lines.GetEnumerator(); bool finished = !enumerator.MoveNext(); while (!finished) { await Task.Run(() => { for (int i = 0; i < 100; i++) { BamlString line = enumerator.Current; int?sid = __DB.StringId(dllFile, line.BamlFile, line.ResourceKey); if (!string.IsNullOrEmpty(line.Content)) { if (sid == null) { sid = __DB.NewStringId(dllFile, line); newStrings.Add((int)sid); } StringRow strRow = __DB.StringForId((int)sid); if (strRow == null) { __DB.StringAddRevision((int)sid, 1, line.Content); } else if (strRow.Content != line.Content) { __DB.StringAddRevision((int)sid, strRow.Revision + 1, line.Content); stringsUpadted.Add((int)sid); } sidsList.Add((int)sid); } else { if (sid != null) { StringRow strRow = __DB.StringForId((int)sid); // Если строка стала пустой - пометить ее как удаленную. if (strRow != null) { __DB.Delete((int)sid); } } } line_no += 1; if (!enumerator.MoveNext()) { finished = true; break; } } }); progress.Report(line_no * 100 / max); } await Task.Run(() => { sidsToDelete = FindDeletedStrings(dllFile, sidsList); foreach (var sid in sidsToDelete) { __DB.Delete(sid); } __DB.Commit(); }); } catch { __DB.Rollback(); throw; } ImportResult result = new ImportResult(dllFile); result.SidsList = sidsList; result.NewStrings = newStrings; result.StringsUpdated = stringsUpadted; result.DeletedStrings = sidsToDelete; return(result); }