From 6a0ad8513b158258ac0cd697c9e7b1ae93ea75e7 Mon Sep 17 00:00:00 2001 From: Jiri Slachta Date: Thu, 21 Oct 2021 23:24:00 +0200 Subject: [PATCH] MAINTENANCE: LocaleTranslations to LocaleNames, increase code coverage, extend readme This is a breaking change commit. Changes: * Extend README.md * Rename LocaleTranslations to LocaleNames * Increase code coverage * Enhance extension methods Signed-off-by: Jiri Slachta --- README.md | 20 ++++++++--- src/LocaleNames.Test/ExtensionsTests.cs | 16 +++++---- src/LocaleNames.Test/FactoryTests.cs | 8 ++--- src/LocaleNames.Test/FindCountryCodeTests.cs | 4 +-- src/LocaleNames.Test/FindCountryNameTests.cs | 4 +-- src/LocaleNames.Test/FindLanguageCodeTests.cs | 6 ++-- src/LocaleNames.Test/FindLanguageNameTests.cs | 10 +++--- src/LocaleNames.Test/LocaleNamesTests.cs | 6 ++-- src/LocaleNames/Enumerations/AltVariant.cs | 29 ---------------- .../Extensions/AltVariantExtensions.cs | 34 +++++++++++++++++++ .../Extensions/StringExtensions.cs | 4 +-- .../{LocaleTranslations.cs => LocaleNames.cs} | 30 ++++++++-------- src/LocaleNames/Model/ResourceLocale.cs | 2 +- src/PrepareLocaleData/Program.cs | 3 +- 14 files changed, 97 insertions(+), 79 deletions(-) create mode 100644 src/LocaleNames/Extensions/AltVariantExtensions.cs rename src/LocaleNames/{LocaleTranslations.cs => LocaleNames.cs} (91%) diff --git a/README.md b/README.md index 29d910d..1ae774f 100644 --- a/README.md +++ b/README.md @@ -10,28 +10,40 @@ The translation data are generated from [CLDR locale data for internationalizati # Usage +### Find all language codes + +``` +var allCountryCodes = LocaleNames.ForLanguageCode("en-US").AllLanguageCodes; +``` + ### Find language name ``` -var translatedLanguageName = LocaleTranslations.ForCultureInfo(new CultureInfo("en-US")).FindLanguageName("cs-CZ"); +var translatedLanguageName = LocaleNames.ForCultureInfo(new CultureInfo("en-US")).FindLanguageName("cs-CZ"); ``` ### Find language code ``` -var languageCode = LocaleTranslations.ForCultureInfo(new CultureInfo("en-US")).FindLanguageCode("Czech"); +var languageCode = LocaleNames.ForCultureInfo(new CultureInfo("en-US")).FindLanguageCode("Czech"); ``` ### Find country name ``` -var translatedCountryName = LocaleTranslations.ForCultureInfo(new CultureInfo("en-US")).FindCountryName("DE"); +var translatedCountryName = LocaleNames.ForCultureInfo(new CultureInfo("en-US")).FindCountryName("DE"); +``` + +### Find all country codes + +``` +var allCountryCodes = LocaleNames.ForLanguageCode("en-US").AllCountryCodes; ``` ### Find country code ``` -var countryCode = LocaleTranslations.ForCultureInfo(new CultureInfo("en-US")).FindCountryCode("Germany"); +var countryCode = LocaleNames.ForCultureInfo(new CultureInfo("en-US")).FindCountryCode("Germany"); ``` # Contributing diff --git a/src/LocaleNames.Test/ExtensionsTests.cs b/src/LocaleNames.Test/ExtensionsTests.cs index 6b62435..e24c5fb 100644 --- a/src/LocaleNames.Test/ExtensionsTests.cs +++ b/src/LocaleNames.Test/ExtensionsTests.cs @@ -1,11 +1,9 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; +using LocaleNames.Extensions; +using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Globalization; -using LocaleNames; -using System.Linq; -using LocaleNames.Extensions; -namespace LocaleNames.Test +namespace LocaleTranslations.Test { [TestClass] public class ExtensionsTests @@ -19,8 +17,6 @@ public void LocaleNames_IsCountryCodeContinent() * It looks like that continents has a numerical code. */ - var codes = LocaleNames.LocaleTranslations.ForCurrentCulture().AllCountryCodes; - // 001 - World Assert.IsTrue(StringExtensions.IsCountryCodeContinent("001")); @@ -32,6 +28,12 @@ public void LocaleNames_IsCountryCodeContinent() // Return false on country Assert.IsFalse(StringExtensions.IsCountryCodeContinent("CZ")); + + // Return false on empty + Assert.IsFalse(StringExtensions.IsCountryCodeContinent(String.Empty)); + + // Return false on null + Assert.IsFalse(StringExtensions.IsCountryCodeContinent(null)); } } } diff --git a/src/LocaleNames.Test/FactoryTests.cs b/src/LocaleNames.Test/FactoryTests.cs index ba4c4d6..096b93f 100644 --- a/src/LocaleNames.Test/FactoryTests.cs +++ b/src/LocaleNames.Test/FactoryTests.cs @@ -15,7 +15,7 @@ public class FactoryTests [TestMethod] public void LocaleNames_Factory_ForLanguageCode_On_Windows_Should_Have_Invariant_Culture() { - var localeNames = LocaleTranslations.ForLanguageCode("unknown code"); + var localeNames = LocaleNames.ForLanguageCode("unknown code"); if (OperatingSystem.IsWindows()) { @@ -29,7 +29,7 @@ public void LocaleNames_Factory_ForLanguageCode_On_Windows_Should_Have_Invariant [TestMethod] public void LocaleNames_Factory_ForCultureInfo_Existing_Culture_Test() { - var translations = LocaleTranslations.ForCultureInfo(new System.Globalization.CultureInfo("en-US")); + var translations = LocaleNames.ForCultureInfo(new System.Globalization.CultureInfo("en-US")); Assert.AreEqual(new System.Globalization.CultureInfo("en-US"), translations.CultureInfo); Assert.IsFalse(translations.AreCountryNameTranslationsEmpty); @@ -45,7 +45,7 @@ public void LocaleNames_Factory_ForLanguageCode_Test() /* * if a valid language code is given, the cultureinfo name should match. */ - var translations = LocaleTranslations.ForLanguageCode("cs-CZ"); + var translations = LocaleNames.ForLanguageCode("cs-CZ"); Assert.AreEqual(new System.Globalization.CultureInfo("cs-CZ"), translations.CultureInfo); Assert.IsFalse(translations.AreCountryNameTranslationsEmpty); @@ -61,7 +61,7 @@ public void LocaleNames_Factory_ForLanguageCode_InvalidLanguageCode_Test() /* * if a not valid language code is given, the LocaleTranslations will not have any translations. */ - var translations = LocaleTranslations.ForLanguageCode("non-existing-code"); + var translations = LocaleNames.ForLanguageCode("non-existing-code"); Assert.IsTrue(translations.AreCountryNameTranslationsEmpty); Assert.IsTrue(translations.AreLanguageTranslationsEmpty); diff --git a/src/LocaleNames.Test/FindCountryCodeTests.cs b/src/LocaleNames.Test/FindCountryCodeTests.cs index 969e54d..37dfb24 100644 --- a/src/LocaleNames.Test/FindCountryCodeTests.cs +++ b/src/LocaleNames.Test/FindCountryCodeTests.cs @@ -13,7 +13,7 @@ public class FindCountryCodeTests [TestMethod] public void LocaleNames_All_Country_Codes_Should_Not_Provide_Variants_And_Continents() { - var localeNames = LocaleTranslations.ForLanguageCode("en-US"); + var localeNames = LocaleNames.ForLanguageCode("en-US"); var countryCodes = localeNames.AllCountryCodes; @@ -34,7 +34,7 @@ public void LocaleNames_All_Country_Codes_Should_Not_Provide_Variants_And_Contin [TestMethod] public void LocaleNames_Find_country_code_by_name() { - var localeNames = LocaleTranslations.ForLanguageCode("en-US"); + var localeNames = LocaleNames.ForLanguageCode("en-US"); Assert.AreEqual("DE", localeNames.FindCountryCode("Germany")); diff --git a/src/LocaleNames.Test/FindCountryNameTests.cs b/src/LocaleNames.Test/FindCountryNameTests.cs index 2becffb..510870d 100644 --- a/src/LocaleNames.Test/FindCountryNameTests.cs +++ b/src/LocaleNames.Test/FindCountryNameTests.cs @@ -11,7 +11,7 @@ public class FindCountryNameTests [TestMethod] public void Find_country_name_by_code() { - var localeNames = LocaleTranslations.ForLanguageCode("en-US"); + var localeNames = LocaleNames.ForLanguageCode("en-US"); Assert.AreEqual("Germany", localeNames.FindCountryName("DE")); Assert.AreEqual("Czechia", localeNames.FindCountryName("CZ")); @@ -22,7 +22,7 @@ public void Find_country_name_by_code() [TestMethod] public void Find_all_variants_of_country_name_by_code() { - var localeNames = LocaleTranslations.ForLanguageCode("en-US"); + var localeNames = LocaleNames.ForLanguageCode("en-US"); var result = localeNames.FindCountryNames("CZ"); Assert.IsTrue(result.Count == 2, "CZ country name has only two variants"); diff --git a/src/LocaleNames.Test/FindLanguageCodeTests.cs b/src/LocaleNames.Test/FindLanguageCodeTests.cs index b963497..cbbe1fc 100644 --- a/src/LocaleNames.Test/FindLanguageCodeTests.cs +++ b/src/LocaleNames.Test/FindLanguageCodeTests.cs @@ -1,8 +1,8 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Globalization; -using LocaleNames; using System.Linq; +using LocaleNames; namespace LocaleNames.Test { @@ -12,7 +12,7 @@ public class FindLanguageCodeTests [TestMethod] public void LocaleNames_All_Language_Codes_Should_Not_Provide_Variants() { - var localeNames = LocaleTranslations.ForLanguageCode("en-US"); + var localeNames = LocaleNames.ForLanguageCode("en-US"); var languageCodes = localeNames.AllLanguageCodes; @@ -31,7 +31,7 @@ public void LocaleNames_All_Language_Codes_Should_Not_Provide_Variants() [TestMethod] public void LocaleNames_Find_language_code_by_name() { - var localeNames = LocaleTranslations.ForLanguageCode("en-US"); + var localeNames = LocaleNames.ForLanguageCode("en-US"); Assert.AreEqual("de", localeNames.FindLanguageCode("German")); diff --git a/src/LocaleNames.Test/FindLanguageNameTests.cs b/src/LocaleNames.Test/FindLanguageNameTests.cs index 790c8b5..06c219d 100644 --- a/src/LocaleNames.Test/FindLanguageNameTests.cs +++ b/src/LocaleNames.Test/FindLanguageNameTests.cs @@ -11,7 +11,7 @@ public class FindLanguageNameTests [TestMethod] public void LocaleNames_Find_language_name_for_given_culture() { - var localeNames = LocaleTranslations.ForCultureInfo(new CultureInfo("cs-CZ")); + var localeNames = LocaleNames.ForCultureInfo(new CultureInfo("cs-CZ")); Assert.AreEqual("čeština", localeNames.FindLanguageName("cs")); @@ -25,7 +25,7 @@ public void LocaleNames_Find_language_name_for_given_culture() Assert.AreEqual(null, localeNames.FindLanguageName("unknown code")); - localeNames = LocaleTranslations.ForCultureInfo(new CultureInfo("yue")); + localeNames = LocaleNames.ForCultureInfo(new CultureInfo("yue")); Assert.AreEqual("德文", localeNames.FindLanguageName("de")); @@ -37,7 +37,7 @@ public void LocaleNames_Find_language_name_for_given_culture() [TestMethod] public void LocaleNames_Find_language_name_for_current_culture() { - var localeNames = LocaleTranslations.ForCurrentCulture(); + var localeNames = LocaleNames.ForCurrentCulture(); Assert.AreEqual("angličtina (USA)", localeNames.FindLanguageName("en-US")); @@ -49,7 +49,7 @@ public void LocaleNames_Find_language_name_for_current_culture() [TestMethod] public void LocaleNames_Find_language_name_for_language_code() { - var localeNames = LocaleTranslations.ForLanguageCode("en-US"); + var localeNames = LocaleNames.ForLanguageCode("en-US"); Assert.AreEqual("German", localeNames.FindLanguageName("de")); @@ -65,7 +65,7 @@ public void LocaleNames_Find_language_name_for_language_code() [TestMethod] public void LocaleNames_Find_language_name_for_unknown_language_code() { - var localeNames = LocaleTranslations.ForLanguageCode("unknown-CODE"); + var localeNames = LocaleNames.ForLanguageCode("unknown-CODE"); Assert.AreEqual(null, localeNames.FindLanguageName("de")); } diff --git a/src/LocaleNames.Test/LocaleNamesTests.cs b/src/LocaleNames.Test/LocaleNamesTests.cs index 60008da..a394e0c 100644 --- a/src/LocaleNames.Test/LocaleNamesTests.cs +++ b/src/LocaleNames.Test/LocaleNamesTests.cs @@ -11,12 +11,12 @@ public class LocaleNamesTests [TestMethod] public void LocaleNames_Is_loading_from_cache() { - LocaleTranslations.ClearCache(); - var localeName = LocaleTranslations.ForCultureInfo(new CultureInfo("cs-CZ")); + LocaleNames.ClearCache(); + var localeName = LocaleNames.ForCultureInfo(new CultureInfo("cs-CZ")); Assert.IsFalse(localeName.IsFromCache); - localeName = LocaleTranslations.ForCultureInfo(new CultureInfo("cs-CZ")); + localeName = LocaleNames.ForCultureInfo(new CultureInfo("cs-CZ")); Assert.IsTrue(localeName.IsFromCache); } diff --git a/src/LocaleNames/Enumerations/AltVariant.cs b/src/LocaleNames/Enumerations/AltVariant.cs index 76cb10f..9adc6a9 100644 --- a/src/LocaleNames/Enumerations/AltVariant.cs +++ b/src/LocaleNames/Enumerations/AltVariant.cs @@ -35,33 +35,4 @@ public enum AltVariant /// Menu = 8 } - - /// - /// Extension methods for the enum . - /// - internal static class AltVariantExtensions - { - /// - /// Gets the locale postfix. - /// - /// The variant. - /// - public static string GetLocalePostfix(this AltVariant variant) - { - switch (variant) - { - case AltVariant.Alternative: - return "-alt-variant"; - case AltVariant.Short: - return "-alt-short"; - case AltVariant.Long: - return "-alt-long"; - case AltVariant.Menu: - return "-alt-menu"; - default: - case AltVariant.Common: - return string.Empty; - } - } - } } diff --git a/src/LocaleNames/Extensions/AltVariantExtensions.cs b/src/LocaleNames/Extensions/AltVariantExtensions.cs new file mode 100644 index 0000000..d6c08d5 --- /dev/null +++ b/src/LocaleNames/Extensions/AltVariantExtensions.cs @@ -0,0 +1,34 @@ +using LocaleNames.Enumerations; +using System; + +namespace LocaleNames.Extensions +{ + /// + /// Extension methods for the enum . + /// + internal static class AltVariantExtensions + { + /// + /// Gets the locale postfix. + /// + /// The variant. + /// + public static string GetLocalePostfix(this AltVariant variant) + { + switch (variant) + { + case AltVariant.Alternative: + return "-alt-variant"; + case AltVariant.Short: + return "-alt-short"; + case AltVariant.Long: + return "-alt-long"; + case AltVariant.Menu: + return "-alt-menu"; + default: + case AltVariant.Common: + return string.Empty; + } + } + } +} diff --git a/src/LocaleNames/Extensions/StringExtensions.cs b/src/LocaleNames/Extensions/StringExtensions.cs index b59d920..e1087ec 100644 --- a/src/LocaleNames/Extensions/StringExtensions.cs +++ b/src/LocaleNames/Extensions/StringExtensions.cs @@ -18,9 +18,7 @@ public static class StringExtensions public static bool IsCountryCodeContinent(this string countryCode) { if (string.IsNullOrWhiteSpace(countryCode)) return false; - - int result = 0; - return int.TryParse(countryCode, out result); + return int.TryParse(countryCode, out _); } /// diff --git a/src/LocaleNames/LocaleTranslations.cs b/src/LocaleNames/LocaleNames.cs similarity index 91% rename from src/LocaleNames/LocaleTranslations.cs rename to src/LocaleNames/LocaleNames.cs index 685ea5b..a6dbc13 100644 --- a/src/LocaleNames/LocaleTranslations.cs +++ b/src/LocaleNames/LocaleNames.cs @@ -1,7 +1,7 @@ using LocaleNames.Enumerations; using LocaleNames.Extensions; +using LocaleNames.Model; using LocaleNames.Utils; -using PrepareLocaleData.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -15,12 +15,12 @@ namespace LocaleNames /// /// Locale Names. /// - public class LocaleTranslations + public class LocaleNames { #region CACHE - private static Dictionary CachedLocaleNames { get; } - = new Dictionary(); + private static Dictionary CachedLocaleNames { get; } + = new Dictionary(); /// /// Clears the cache. @@ -38,11 +38,11 @@ public static void ClearCache() #region FACTORY /// - /// Creates instance of for given language code. + /// Creates instance of for given language code. /// /// The language code. /// - public static LocaleTranslations ForLanguageCode(string languageCode) + public static LocaleNames ForLanguageCode(string languageCode) { CultureInfo cultureInfo = null; @@ -59,10 +59,10 @@ public static LocaleTranslations ForLanguageCode(string languageCode) } /// - /// Creates instance of for current culture. + /// Creates instance of for current culture. /// /// - public static LocaleTranslations ForCurrentCulture() + public static LocaleNames ForCurrentCulture() { var currentCulture = CultureInfo.CurrentCulture; @@ -70,11 +70,11 @@ public static LocaleTranslations ForCurrentCulture() } /// - /// Creates instance of for given culture. + /// Creates instance of for given culture. /// /// The culture information. /// - public static LocaleTranslations ForCultureInfo(CultureInfo cultureInfo) + public static LocaleNames ForCultureInfo(CultureInfo cultureInfo) { lock (CachedLocaleNames) { @@ -87,7 +87,7 @@ public static LocaleTranslations ForCultureInfo(CultureInfo cultureInfo) } else { - var localeNames = new LocaleTranslations(cultureInfo); + var localeNames = new LocaleNames(cultureInfo); CachedLocaleNames.Add(cultureInfo, localeNames); return localeNames; @@ -170,10 +170,10 @@ private IDictionary CountryNames #region CONSTRUCTOR /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The culture. - LocaleTranslations(CultureInfo culture) + LocaleNames(CultureInfo culture) { CultureInfo = culture; } @@ -324,7 +324,7 @@ public IReadOnlyDictionary FindLanguageNames(string language /// public string FindLanguageCode(string countryName) { - var value = LanguageNames.FirstOrDefault(i => i.Value == countryName); + var value = LanguageNames.FirstOrDefault(i => string.Compare(i.Value, countryName) == 0); return value.Key; } @@ -380,7 +380,7 @@ public IReadOnlyDictionary FindCountryNames(string countryCo /// public string FindCountryCode(string countryName) { - var value = CountryNames.FirstOrDefault(i => i.Value == countryName); + var value = CountryNames.FirstOrDefault(i => string.Compare(i.Value, countryName) == 0); var result = value.Key; return result.StripLocaleVariants(); diff --git a/src/LocaleNames/Model/ResourceLocale.cs b/src/LocaleNames/Model/ResourceLocale.cs index 73d5614..9d98f6a 100644 --- a/src/LocaleNames/Model/ResourceLocale.cs +++ b/src/LocaleNames/Model/ResourceLocale.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace PrepareLocaleData.Model +namespace LocaleNames.Model { /// /// DTO for loading the data from embedded resource. diff --git a/src/PrepareLocaleData/Program.cs b/src/PrepareLocaleData/Program.cs index 1dd295e..651d2a4 100644 --- a/src/PrepareLocaleData/Program.cs +++ b/src/PrepareLocaleData/Program.cs @@ -1,4 +1,5 @@ -using LocaleNames.Utils; +using LocaleNames.Model; +using LocaleNames.Utils; using Newtonsoft.Json; using PrepareLocaleData.Model; using System;