diff --git a/common/Tests/Frontend.Translations.Tests/LocalesTest.cs b/common/Tests/Frontend.Translations.Tests/LocalesTest.cs index 6923a49a18..b1b4840d4d 100644 --- a/common/Tests/Frontend.Translations.Tests/LocalesTest.cs +++ b/common/Tests/Frontend.Translations.Tests/LocalesTest.cs @@ -29,14 +29,14 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; -using System.Reflection; +using System.Reflection; using System.Security.Cryptography; using System.Text; -using System.Text.RegularExpressions; - -using Frontend.Tests; -using Frontend.Tests.Models; - +using System.Text.RegularExpressions; + +using Frontend.Tests; +using Frontend.Tests.Models; + using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -47,7 +47,7 @@ using WeCantSpell.Hunspell; namespace Frontend.Tests; public class LocalesTest -{ +{ public static string BasePath { get @@ -56,18 +56,18 @@ public class LocalesTest } } - public static bool Save - { - get - { - bool save; - if (bool.TryParse(Environment.GetEnvironmentVariable("SAVE"), out save)) - { - return save; - } - - return false; - } + public static bool Save + { + get + { + bool save; + if (bool.TryParse(Environment.GetEnvironmentVariable("SAVE"), out save)) + { + return save; + } + + return false; + } } public List Workspaces { get; set; } @@ -77,13 +77,14 @@ public class LocalesTest public List> NotTranslatedToasts { get; set; } public List> NotTranslatedProps { get; set; } public List CommonTranslations { get; set; } - public List ParseJsonErrors { get; set; } - public static string ConvertPathToOS { get; private set; } - - - public List ForbiddenElements { get { return new List() { "ONLYOFFICE", "DOCSPACE" }; } } - //public List WrongEncodingJsonErrors { get; set; } - + public List ParseJsonErrors { get; set; } + public static string ConvertPathToOS { get; private set; } + + + public List ForbiddenElements { get { return new List() { "ONLYOFFICE", "DOCSPACE" }; } } + public List SkipForbiddenKeys = new List { "OrganizationName", "ProductName", "ProductEditorsName" }; + //public List WrongEncodingJsonErrors { get; set; } + private static readonly string _md5ExcludesPath = Path.GetFullPath(Utils.ConvertPathToOS("../../../md5-excludes.json")); private static readonly string _spellCheckCommonExcludesPath = Path.GetFullPath(Utils.ConvertPathToOS("../../../spellcheck-excludes-common.json")); private static readonly string _spellCheckExcludesPath = Path.GetFullPath(Utils.ConvertPathToOS("../../../spellcheck-excludes.json")); @@ -104,7 +105,7 @@ public class LocalesTest [OneTimeSetUp] public void Setup() - { + { ParseJsonErrors = new List(); //WrongEncodingJsonErrors = new List(); @@ -357,14 +358,14 @@ public class LocalesTest TestContext.Progress.WriteLine($"Found CommonTranslations = {CommonTranslations.Count()}. First path is '{CommonTranslations.FirstOrDefault()?.Path}'"); - TestContext.Progress.WriteLine($"Found Md5Excludes = {Md5Excludes.Count} Path to file '{_md5ExcludesPath}'"); - - TestContext.Progress.WriteLine($"Found SpellCheckCommonExcludes = {SpellCheckCommonExcludes.Count} Path to file '{_spellCheckCommonExcludesPath}'"); - - TestContext.Progress.WriteLine($"Save spell check excludes = {Save} Path to file '{_spellCheckExcludesPath}'"); - - } - + TestContext.Progress.WriteLine($"Found Md5Excludes = {Md5Excludes.Count} Path to file '{_md5ExcludesPath}'"); + + TestContext.Progress.WriteLine($"Found SpellCheckCommonExcludes = {SpellCheckCommonExcludes.Count} Path to file '{_spellCheckCommonExcludesPath}'"); + + TestContext.Progress.WriteLine($"Save spell check excludes = {Save} Path to file '{_spellCheckExcludesPath}'"); + + } + [Test, Order(1)] [Category("Locales")] public void LanguageTranslatedPercentTest() @@ -499,7 +500,7 @@ public class LocalesTest .ToList(); Assert.AreEqual(0, duplicates.Count, string.Join(", ", duplicates.Select(d => JObject.FromObject(d).ToString()))); - } + } [Test, Order(6)] [Category("Locales")] @@ -514,10 +515,10 @@ public class LocalesTest .Where(f => !f.Path.Contains("Banner.js")) // skip Banner.js (translations from firebase) .SelectMany(j => j.TranslationKeys) .Select(k => k.Substring(k.IndexOf(":") + 1)) - .Distinct(); - - //var foo = JavaScriptFiles - // .Where(f => !f.Path.Contains("Banner.js")) + .Distinct(); + + //var foo = JavaScriptFiles + // .Where(f => !f.Path.Contains("Banner.js")) // .Where(t => t.TranslationKeys.Any(k => k == "foo")).FirstOrDefault(); var notFoundJsKeys = allJsTranslationKeys.Except(allEnKeys); @@ -525,8 +526,8 @@ public class LocalesTest Assert.AreEqual(0, notFoundJsKeys.Count(), "Some i18n-keys are not exist in translations in 'en' language: Keys:\r\n{0}", string.Join("\r\n", notFoundJsKeys)); - } - + } + [Test, Order(7)] [Category("Locales")] public void DublicatesFilesByMD5HashTest() @@ -541,8 +542,8 @@ public class LocalesTest .ToList(); Assert.AreEqual(0, duplicatesByMD5.Count, "Dublicates by MD5 hash:\r\n" + string.Join("\r\n", duplicatesByMD5.Select(d => $"\r\nMD5='{d.Key}':\r\n{string.Join("\r\n", d.Paths.Select(p => p))}'"))); - } - + } + [Test, Order(8)] [Category("Locales")] public void UselessTranslationKeysTest() @@ -627,8 +628,8 @@ public class LocalesTest { Language = g.Key, TranslationsWithVariables = g.ToList() - .SelectMany(t => t.Translations.Select(k => new TranslationItem($"{t.FileName}:{k.Key}", k.Value))) - //.Where(k => k.Value.IndexOf("{{") != -1) + .SelectMany(t => t.Translations.Select(k => new TranslationItem($"{t.FileName}:{k.Key}", k.Value))) + //.Where(k => k.Value.IndexOf("{{") != -1) .Select(t => new { t.Key, @@ -654,12 +655,12 @@ public class LocalesTest var i = 0; var errorsCount = 0; - foreach (var enKeyWithVariables in enWithVariables) - { - foreach (var lng in otherLanguagesWithVariables) - { - var lngKey = lng.TranslationsWithVariables - .Where(t => t.Key == enKeyWithVariables.Key) + foreach (var enKeyWithVariables in enWithVariables) + { + foreach (var lng in otherLanguagesWithVariables) + { + var lngKey = lng.TranslationsWithVariables + .Where(t => t.Key == enKeyWithVariables.Key) .FirstOrDefault(); if (lngKey == null) @@ -671,8 +672,8 @@ public class LocalesTest } if (enKeyWithVariables.Variables.Count != lngKey.Variables.Count) - { - // wrong + { + // wrong message += $"{++i}. lng='{lng.Language}' key='{lngKey.Key}' has less variables then 'en' language have " + $"(en={enKeyWithVariables.Variables.Count}|{lng.Language}={lngKey.Variables.Count})\r\n" + $"'en': '{enKeyWithVariables.Value}'\r\n'{lng.Language}': '{lngKey.Value}'\r\n\r\n"; @@ -680,10 +681,10 @@ public class LocalesTest } if (!lngKey.Variables.All(v => enKeyWithVariables.Variables.Contains(v))) - { - // wrong - message += $"{++i}. lng='{lng.Language}' key='{lngKey.Key}' has not equals variables of 'en' language have \r\n" + - $"'{enKeyWithVariables.Value}' Variables=[{string.Join(",", enKeyWithVariables.Variables)}]\r\n" + + { + // wrong + message += $"{++i}. lng='{lng.Language}' key='{lngKey.Key}' has not equals variables of 'en' language have \r\n" + + $"'{enKeyWithVariables.Value}' Variables=[{string.Join(",", enKeyWithVariables.Variables)}]\r\n" + $"'{lngKey.Value}' Variables=[{string.Join(",", lngKey.Variables)}]\r\n\r\n"; errorsCount++; } @@ -708,8 +709,8 @@ public class LocalesTest { Language = g.Key, TranslationsWithTags = g.ToList() - .SelectMany(t => t.Translations) - //.Where(k => k.Value.IndexOf("<") != -1) + .SelectMany(t => t.Translations) + //.Where(k => k.Value.IndexOf("<") != -1) .Select(t => new { t.Key, @@ -735,22 +736,22 @@ public class LocalesTest var i = 0; var errorsCount = 0; - foreach (var enKeyWithTags in enWithTags) - { - foreach (var lng in otherLanguagesWithTags) - { - var lngKey = lng.TranslationsWithTags - .Where(t => t.Key == enKeyWithTags.Key) - .FirstOrDefault(); - - if (lngKey == null) - { + foreach (var enKeyWithTags in enWithTags) + { + foreach (var lng in otherLanguagesWithTags) + { + var lngKey = lng.TranslationsWithTags + .Where(t => t.Key == enKeyWithTags.Key) + .FirstOrDefault(); + + if (lngKey == null) + { // wrong //message += $"{++i}. lng='{lng.Language}' key='{enKeyWithTags.Key}' not found\r\n\r\n"; //errorsCount++; - continue; - } - + continue; + } + if (enKeyWithTags.Tags.Count != lngKey.Tags.Count) { // wrong @@ -758,8 +759,8 @@ public class LocalesTest $"(en={enKeyWithTags.Tags.Count}|{lng.Language}={lngKey.Tags.Count})\r\n" + $"'en': '{enKeyWithTags.Value}'\r\n'{lng.Language}': '{lngKey.Value}'\r\n\r\n"; errorsCount++; - } - + } + if (!lngKey.Tags.All(v => enKeyWithTags.Tags.Contains(v))) { // wrong @@ -767,9 +768,9 @@ public class LocalesTest $"'{enKeyWithTags.Value}' Tags=[{string.Join(",", enKeyWithTags.Tags)}]\r\n" + $"'{lngKey.Value}' Tags=[{string.Join(",", lngKey.Tags)}]\r\n\r\n"; errorsCount++; - } - } - + } + } + } /*foreach (var lng in otherLanguagesWithTags) @@ -809,19 +810,18 @@ public class LocalesTest }*/ Assert.AreEqual(0, errorsCount, message); - } - + } + [Test, Order(13)] [Category("Locales")] public void ForbiddenValueElementsTest() { - var message = $"Next keys have forbidden values `{string.Join(",", ForbiddenElements)}`:\r\n\r\n"; - - + var message = $"Next keys have forbidden values `{string.Join(",", ForbiddenElements)}`:\r\n\r\n"; + var exists = false; - var i = 0; - + var i = 0; + foreach (var module in ModuleFolders) { if (module.AvailableLanguages == null) @@ -844,38 +844,41 @@ public class LocalesTest message += string.Join("\r\n", keys) + "\r\n\r\n"; } - } + } + foreach (var lng in CommonTranslations) { - var translationItems = lng.Translations.Where(f => ForbiddenElements.Any(elem => f.Value.ToUpper().Contains(elem))).ToList(); - - if (!translationItems.Any()) - continue; - - exists = true; - - message += $"{++i}. Language '{lng.Language}' (Count: {translationItems.Count}). Path '{lng.Path}' " + - $"Keys:\r\n\r\n"; - - var keys = translationItems.Select(t => t.Key).ToList(); - + var translationItems = lng.Translations + .Where(elem => !SkipForbiddenKeys.Exists(k => k == elem.Key)) + .Where(f => ForbiddenElements.Any(elem => f.Value.ToUpper().Contains(elem))) + .ToList(); + + if (!translationItems.Any()) + continue; + + exists = true; + + message += $"{++i}. Language '{lng.Language}' (Count: {translationItems.Count}). Path '{lng.Path}' " + + $"Keys:\r\n\r\n"; + + var keys = translationItems.Select(t => t.Key).ToList(); + message += string.Join("\r\n", keys) + "\r\n\r\n"; } Assert.AreEqual(false, exists, message); - } - + } + [Test, Order(14)] - [Category("Locales")] + [Category("Locales")] public void ForbiddenKeysElementsTest() { - var message = $"Next keys have forbidden elements in names `{string.Join(",", ForbiddenElements)}`:\r\n\r\n"; - - + var message = $"Next keys have forbidden elements in names `{string.Join(",", ForbiddenElements)}`:\r\n\r\n"; + var exists = false; - var i = 0; - + var i = 0; + foreach (var module in ModuleFolders) { if (module.AvailableLanguages == null) @@ -883,9 +886,8 @@ public class LocalesTest foreach (var lng in module.AvailableLanguages) { - var translationItems = lng.Translations.Where(f => ForbiddenElements.Any(elem => f.Key.ToUpper().Contains(elem))).ToList(); - - + var translationItems = lng.Translations.Where(f => ForbiddenElements.Any(elem => f.Key.ToUpper().Contains(elem))).ToList(); + if (!translationItems.Any()) continue; @@ -899,28 +901,31 @@ public class LocalesTest message += string.Join("\r\n", keys) + "\r\n\r\n"; } - } - + } + foreach (var lng in CommonTranslations) - { - var translationItems = lng.Translations.Where(f => ForbiddenElements.Any(elem => f.Key.ToUpper().Contains(elem))).ToList(); - - if (!translationItems.Any()) - continue; - - exists = true; - - message += $"{++i}. Language '{lng.Language}' (Count: {translationItems.Count}). Path '{lng.Path}' " + - $"Keys:\r\n\r\n"; - - var keys = translationItems.Select(t => t.Key).ToList(); - + { + var translationItems = lng.Translations + .Where(elem => !SkipForbiddenKeys.Exists(k => k == elem.Key)) + .Where(f => ForbiddenElements.Any(elem => f.Key.ToUpper().Contains(elem))) + .ToList(); + + if (!translationItems.Any()) + continue; + + exists = true; + + message += $"{++i}. Language '{lng.Language}' (Count: {translationItems.Count}). Path '{lng.Path}' " + + $"Keys:\r\n\r\n"; + + var keys = translationItems.Select(t => t.Key).ToList(); + message += string.Join("\r\n", keys) + "\r\n\r\n"; } Assert.AreEqual(false, exists, message); - } - + } + [Test, Order(15)] [Category("Locales")] public void EmptyValueKeysTest() @@ -1023,8 +1028,8 @@ public class LocalesTest } Assert.AreEqual(false, exists, message); - } - + } + [Test, Order(16)] [Category("Locales")] public void NotTranslatedKeysTest() @@ -1070,8 +1075,8 @@ public class LocalesTest } Assert.AreEqual(false, exists, message); - } - + } + [Test, Order(17)] [Category("Locales")] public void NotTranslatedCommonKeysTest() @@ -1113,7 +1118,7 @@ public class LocalesTest [Test, Order(18)] [Category("Locales")] public void NotAllLanguageTranslatedTest() - { + { var groupedByLng = TranslationFiles .GroupBy(t => t.Language) .Select(grp => new { Lng = grp.Key, Count = grp.Count(), Files = grp.ToList() }) @@ -1165,8 +1170,8 @@ public class LocalesTest } Assert.AreEqual(0, incompleteList.Count, message); - } - + } + [Test, Order(19)] [Category("SpellCheck")] public void SpellCheckTest() @@ -1207,43 +1212,43 @@ public class LocalesTest if (result.HasProblems) { - var incorrectWords = result.SpellIssues - .Where(t => !SpellCheckCommonExcludes - .Exists(e => e.Equals(t.Word, StringComparison.InvariantCultureIgnoreCase))) - .Select(issue => $"'{issue.Word}' " + + var incorrectWords = result.SpellIssues + .Where(t => !SpellCheckCommonExcludes + .Exists(e => e.Equals(t.Word, StringComparison.InvariantCultureIgnoreCase))) + .Select(issue => $"'{issue.Word}' " + $"Suggestion: '{issue.Suggestions.FirstOrDefault()}'") .ToList(); if (!incorrectWords.Any()) continue; - message += $"{++i}. lng='{group.Language}' file='{g.FilePath}'\r\nkey='{item.Key}' " + - $"value='{item.Value}'\r\nIncorrect words:\r\n" + + message += $"{++i}. lng='{group.Language}' file='{g.FilePath}'\r\nkey='{item.Key}' " + + $"value='{item.Value}'\r\nIncorrect words:\r\n" + $"{string.Join("\r\n", incorrectWords)}\r\n\r\n"; errorsCount++; - if (Save) - { + if (Save) + { foreach (var word in result.SpellIssues .Where(issue => issue.Suggestions.Any()) - .Select(issue => issue.Word)) - { - if (!spellCheckExclude.Excludes.Contains(word)) - { - spellCheckExclude.Excludes.Add(word); - } - } + .Select(issue => issue.Word)) + { + if (!spellCheckExclude.Excludes.Contains(word)) + { + spellCheckExclude.Excludes.Add(word); + } + } } } } } } - if (Save) - { - spellCheckExclude.Excludes.Sort(); - - list.Add(spellCheckExclude); + if (Save) + { + spellCheckExclude.Excludes.Sort(); + + list.Add(spellCheckExclude); } } catch (NotSupportedException) @@ -1253,135 +1258,135 @@ public class LocalesTest } } - if (Save) - { - string json = JsonConvert.SerializeObject(list, Formatting.Indented); - File.WriteAllText(_spellCheckExcludesPath, json, Encoding.UTF8); - TestContext.Progress.WriteLine($"File spellcheck-excludes.json has been saved to '{_spellCheckExcludesPath}'"); + if (Save) + { + string json = JsonConvert.SerializeObject(list, Formatting.Indented); + File.WriteAllText(_spellCheckExcludesPath, json, Encoding.UTF8); + TestContext.Progress.WriteLine($"File spellcheck-excludes.json has been saved to '{_spellCheckExcludesPath}'"); } Assert.AreEqual(0, errorsCount, message); - } - - /* [Test, Order(17)] - [Category("Locales")] - public void UselessModuleTranslationKeysTest() - { - var notFoundi18nKeys = new List>>(); - - var message = $"Some i18n-keys are not found in Module or Common translations: \r\nKeys: \r\n\r\n"; - - var index = 0; - - for (int i = 0; i < ModuleFolders.Count; i++) - { - var module = ModuleFolders[i]; - - if (module.AppliedJsTranslationKeys == null && module.AvailableLanguages != null) - { - message += $"{++index}. 'ANY LANGUAGES' '{module.Path}' NOT USED\r\n"; - - var list = module.AvailableLanguages - .SelectMany(l => l.Translations.Select(t => t.Key).ToList()) - .ToList(); - - notFoundi18nKeys.Add(new KeyValuePair>("ANY LANGUAGES", list)); - - continue; - } - - var exepts = new List { "Error", "Done", "Warning", "Alert", "Info" }; - - var notCommonKeys = module.AppliedJsTranslationKeys - .Except(exepts) - .Where(k => !k.StartsWith("Common:")) - .OrderBy(t => t) - .ToList(); - - var onlyCommonKeys = module.AppliedJsTranslationKeys - .Except(notCommonKeys) - .Select(k => k.Replace("Common:", "")) - .OrderBy(t => t) - .ToList(); - - notCommonKeys = notCommonKeys.Select(k => k.Substring(k.IndexOf(":") + 1)).ToList(); - - if (onlyCommonKeys.Any()) - { - foreach (var lng in CommonTranslations) - { - var list = onlyCommonKeys - .Except(lng.Translations.Select(t => t.Key)) - .ToList(); - - if (!list.Any()) - continue; - - message += $"{++index}. '{lng.Language}' '{module.Path}' \r\n {string.Join("\r\n", list)} \r\n"; - - notFoundi18nKeys.Add(new KeyValuePair>(lng.Language, list)); - } - } - - if (module.AvailableLanguages == null) - { - if (notCommonKeys.Any()) - { - var commonEnKeys = CommonTranslations.First(c => c.Language == "en").Translations.Select(t => t.Key).ToList(); - - var list = notCommonKeys - .Except(commonEnKeys.Select(k => k)) - .ToList(); - - if (list.Any()) - { - message += $"{++index}. 'ANY LANGUAGES' '{module.Path}' \r\n {string.Join("\r\n", list)} \r\n"; - notFoundi18nKeys.Add(new KeyValuePair>("ANY LANGUAGES", list)); - } - } - - continue; - } - - foreach (var lng in module.AvailableLanguages) - { - var list = lng.Translations - .Select(t => t.Key) - .Except(notCommonKeys) - .ToList(); - - if (!list.Any()) - continue; - - message += $"{++index}. '{lng.Language}' '{module.Path}' \r\n {string.Join("\r\n", list)} \r\n"; - - notFoundi18nKeys.Add(new KeyValuePair>(lng.Language, list)); - } - } - - Assert.AreEqual(0, notFoundi18nKeys.Count, message); - }*/ - - //[Test] - //[Category("Locales")] - //public void TranslationsEncodingTest() - //{ - // /*//Convert to UTF-8 - // foreach (var issue in WrongEncodingJsonErrors) - // { - // if (issue.DetectionDetail.Encoding == null) - // continue; - - // ConvertFileEncoding(issue.Path, issue.Path, issue.DetectionDetail.Encoding, Encoding.UTF8); - // }*/ - - // var message = $"Next files have encoding issues:\r\n\r\n"; - - // Assert.AreEqual(0, WrongEncodingJsonErrors.Count, - // message + string.Join("\r\n", WrongEncodingJsonErrors - // .Select(e => $"File path = '{e.Path}' potentially wrong file encoding: {e.DetectionDetail.EncodingName}"))); - //} - + } + + /* [Test, Order(17)] + [Category("Locales")] + public void UselessModuleTranslationKeysTest() + { + var notFoundi18nKeys = new List>>(); + + var message = $"Some i18n-keys are not found in Module or Common translations: \r\nKeys: \r\n\r\n"; + + var index = 0; + + for (int i = 0; i < ModuleFolders.Count; i++) + { + var module = ModuleFolders[i]; + + if (module.AppliedJsTranslationKeys == null && module.AvailableLanguages != null) + { + message += $"{++index}. 'ANY LANGUAGES' '{module.Path}' NOT USED\r\n"; + + var list = module.AvailableLanguages + .SelectMany(l => l.Translations.Select(t => t.Key).ToList()) + .ToList(); + + notFoundi18nKeys.Add(new KeyValuePair>("ANY LANGUAGES", list)); + + continue; + } + + var exepts = new List { "Error", "Done", "Warning", "Alert", "Info" }; + + var notCommonKeys = module.AppliedJsTranslationKeys + .Except(exepts) + .Where(k => !k.StartsWith("Common:")) + .OrderBy(t => t) + .ToList(); + + var onlyCommonKeys = module.AppliedJsTranslationKeys + .Except(notCommonKeys) + .Select(k => k.Replace("Common:", "")) + .OrderBy(t => t) + .ToList(); + + notCommonKeys = notCommonKeys.Select(k => k.Substring(k.IndexOf(":") + 1)).ToList(); + + if (onlyCommonKeys.Any()) + { + foreach (var lng in CommonTranslations) + { + var list = onlyCommonKeys + .Except(lng.Translations.Select(t => t.Key)) + .ToList(); + + if (!list.Any()) + continue; + + message += $"{++index}. '{lng.Language}' '{module.Path}' \r\n {string.Join("\r\n", list)} \r\n"; + + notFoundi18nKeys.Add(new KeyValuePair>(lng.Language, list)); + } + } + + if (module.AvailableLanguages == null) + { + if (notCommonKeys.Any()) + { + var commonEnKeys = CommonTranslations.First(c => c.Language == "en").Translations.Select(t => t.Key).ToList(); + + var list = notCommonKeys + .Except(commonEnKeys.Select(k => k)) + .ToList(); + + if (list.Any()) + { + message += $"{++index}. 'ANY LANGUAGES' '{module.Path}' \r\n {string.Join("\r\n", list)} \r\n"; + notFoundi18nKeys.Add(new KeyValuePair>("ANY LANGUAGES", list)); + } + } + + continue; + } + + foreach (var lng in module.AvailableLanguages) + { + var list = lng.Translations + .Select(t => t.Key) + .Except(notCommonKeys) + .ToList(); + + if (!list.Any()) + continue; + + message += $"{++index}. '{lng.Language}' '{module.Path}' \r\n {string.Join("\r\n", list)} \r\n"; + + notFoundi18nKeys.Add(new KeyValuePair>(lng.Language, list)); + } + } + + Assert.AreEqual(0, notFoundi18nKeys.Count, message); + }*/ + + //[Test] + //[Category("Locales")] + //public void TranslationsEncodingTest() + //{ + // /*//Convert to UTF-8 + // foreach (var issue in WrongEncodingJsonErrors) + // { + // if (issue.DetectionDetail.Encoding == null) + // continue; + + // ConvertFileEncoding(issue.Path, issue.Path, issue.DetectionDetail.Encoding, Encoding.UTF8); + // }*/ + + // var message = $"Next files have encoding issues:\r\n\r\n"; + + // Assert.AreEqual(0, WrongEncodingJsonErrors.Count, + // message + string.Join("\r\n", WrongEncodingJsonErrors + // .Select(e => $"File path = '{e.Path}' potentially wrong file encoding: {e.DetectionDetail.EncodingName}"))); + //} + /*[Test] public void TempTest() { @@ -1468,8 +1473,8 @@ public class LocalesTest UpdateKeys(lng.Path, newKeys); } - }*/ - + }*/ + public static void SaveNotFoundKeys(string pathToJson, List newKeys) { if (!File.Exists(pathToJson)) @@ -1488,8 +1493,8 @@ public class LocalesTest var sortedJsonString = JsonConvert.SerializeObject(result, Formatting.Indented); File.WriteAllText(pathToJson, sortedJsonString, Encoding.UTF8); - } - + } + public static void SaveNotFoundLanguage(string existJsonPath, string notExistJsonPath) { if (!File.Exists(existJsonPath) || File.Exists(notExistJsonPath)) @@ -1513,8 +1518,8 @@ public class LocalesTest Directory.CreateDirectory(fullPathOnly); File.WriteAllText(notExistJsonPath, sortedJsonString, Encoding.UTF8); - } - + } + public static void UpdateKeys(string pathToJson, List newKeys) { if (!File.Exists(pathToJson) || !newKeys.Any()) @@ -1608,8 +1613,8 @@ public class LocalesTest var sortedJsonString = JsonConvert.SerializeObject(result, Formatting.Indented); File.WriteAllText(pathToJson, sortedJsonString, Encoding.UTF8); - } - + } + public static Tuple getPaths(string language) { const string dictionariesPath = @"../../../dictionaries"; @@ -1630,84 +1635,84 @@ public class LocalesTest var affPath = Utils.ConvertPathToOS(Path.Combine(path, language, $"{language}.aff")); return new Tuple(dicPath, affPath); - } + } - public static void ConvertFileEncoding(string sourcePath, string destPath, Encoding sourceEncoding, Encoding destEncoding) - { - // If the destination's parent doesn't exist, create it. - var parent = Path.GetDirectoryName(Path.GetFullPath(destPath)); - if (!Directory.Exists(parent)) - { - Directory.CreateDirectory(parent); - } - // If the source and destination encodings are the same, just copy the file. - if (sourceEncoding == destEncoding) - { - File.Copy(sourcePath, destPath, true); - return; - } - // Convert the file. - string tempName = null; - try - { - tempName = Path.GetTempFileName(); - using (StreamReader sr = new StreamReader(sourcePath, sourceEncoding, false)) - { - using (StreamWriter sw = new StreamWriter(tempName, false, destEncoding)) - { - int charsRead; - char[] buffer = new char[128 * 1024]; - while ((charsRead = sr.ReadBlock(buffer, 0, buffer.Length)) > 0) - { - sw.Write(buffer, 0, charsRead); - } - } - } - File.Delete(destPath); - File.Move(tempName, destPath); - } - finally - { - File.Delete(tempName); - } + public static void ConvertFileEncoding(string sourcePath, string destPath, Encoding sourceEncoding, Encoding destEncoding) + { + // If the destination's parent doesn't exist, create it. + var parent = Path.GetDirectoryName(Path.GetFullPath(destPath)); + if (!Directory.Exists(parent)) + { + Directory.CreateDirectory(parent); + } + // If the source and destination encodings are the same, just copy the file. + if (sourceEncoding == destEncoding) + { + File.Copy(sourcePath, destPath, true); + return; + } + // Convert the file. + string tempName = null; + try + { + tempName = Path.GetTempFileName(); + using (StreamReader sr = new StreamReader(sourcePath, sourceEncoding, false)) + { + using (StreamWriter sw = new StreamWriter(tempName, false, destEncoding)) + { + int charsRead; + char[] buffer = new char[128 * 1024]; + while ((charsRead = sr.ReadBlock(buffer, 0, buffer.Length)) > 0) + { + sw.Write(buffer, 0, charsRead); + } + } + } + File.Delete(destPath); + File.Move(tempName, destPath); + } + finally + { + File.Delete(tempName); + } } /* [Test] - public void MoveKeysToCommon() - { - var findKeys = new List { + public void MoveKeysToCommon() + { + var findKeys = new List { "SharingPanel:CustomFilter", "SharingPanel:ReadOnly", "SharingPanel:DenyAccess", "SharingPanel:Comment", - "SharingPanel:ShareVia" - }; - - //var findKeys = new List { - // "Translations:DownloadApps", - //}; - - foreach (var findKey in findKeys) - { - var splitted = findKey.Split(":"); - var file = splitted[0]; - var key = splitted[1]; - - var tFiles = TranslationFiles.Where(t => t.FileName.Equals($"{file}.json", StringComparison.InvariantCultureIgnoreCase)); - - foreach (var tFile in tFiles) - { - var tKeys = tFile.Translations.Where(t => t.Key == key); - - foreach (var tKey in tKeys) - { - var commonPath = Utils.ConvertPathToOS(Path.Combine(BasePath, "public/locales", tFile.Language, "Common.json")); - - AddKeyValue(commonPath, tKey.Key, tKey.Value); - - RemoveKey(tFile.FilePath, key); - } - } - } + "SharingPanel:ShareVia" + }; + + //var findKeys = new List { + // "Translations:DownloadApps", + //}; + + foreach (var findKey in findKeys) + { + var splitted = findKey.Split(":"); + var file = splitted[0]; + var key = splitted[1]; + + var tFiles = TranslationFiles.Where(t => t.FileName.Equals($"{file}.json", StringComparison.InvariantCultureIgnoreCase)); + + foreach (var tFile in tFiles) + { + var tKeys = tFile.Translations.Where(t => t.Key == key); + + foreach (var tKey in tKeys) + { + var commonPath = Utils.ConvertPathToOS(Path.Combine(BasePath, "public/locales", tFile.Language, "Common.json")); + + AddKeyValue(commonPath, tKey.Key, tKey.Value); + + RemoveKey(tFile.FilePath, key); + } + } + } } */ } \ No newline at end of file diff --git a/i18next/client.babel b/i18next/client.babel index bf85847edd..302e72939d 100644 --- a/i18next/client.babel +++ b/i18next/client.babel @@ -1,5 +1,5 @@ - +