diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 49a74f8..38b79f9 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -36,8 +36,9 @@ jobs: - name: Verify Git tags for MinVer run: | git fetch --tags --force - git describe --tags - git tag --points-at HEAD + echo "Checking for tags..." + git describe --tags 2>/dev/null || echo "No tags found yet - this is expected for first release" + git tag --points-at HEAD || echo "No tag at current commit" - name: Restore dependencies run: dotnet restore diff --git a/Directory.Packages.props b/Directory.Packages.props index ee63568..ae5452c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -10,17 +10,23 @@ + + + + + + - - - - + + + + diff --git a/src/CountryData.Globalization.Hosting/CountryData.Globalization.Hosting.csproj b/src/CountryData.Globalization.Hosting/CountryData.Globalization.Hosting.csproj index b469250..61f0dd5 100644 --- a/src/CountryData.Globalization.Hosting/CountryData.Globalization.Hosting.csproj +++ b/src/CountryData.Globalization.Hosting/CountryData.Globalization.Hosting.csproj @@ -1,8 +1,8 @@  - - netstandard2.1;net8.0;net9.0;net10.0 + + netstandard2.0;net6.0;net8.0;net10.0 latest enable enable @@ -46,7 +46,8 @@ Initial release v1.0.0: - AddCountryData() extension method - Singleton lifetime management for ICountryDataProvider - Full ASP.NET Core integration support -- Multi-framework support (.NET Standard 2.1, .NET 8-10) +- Multi-framework support (.NET Standard 2.0+, .NET 6, 8, 10) +- Works with .NET Framework 4.6.1+, .NET Core 2.0+, Unity, Xamarin diff --git a/src/CountryData.Globalization/CountryData.Globalization.csproj b/src/CountryData.Globalization/CountryData.Globalization.csproj index ab91a69..a9592a0 100644 --- a/src/CountryData.Globalization/CountryData.Globalization.csproj +++ b/src/CountryData.Globalization/CountryData.Globalization.csproj @@ -1,8 +1,8 @@  - - netstandard2.1;net8.0;net9.0;net10.0 + + netstandard2.0;net6.0;net8.0;net10.0 latest enable enable @@ -49,8 +49,9 @@ Initial release v1.0.0: - Full CultureInfo and RegionInfo integration - O(1) dictionary lookups with lazy-loaded caches - Thread-safe operations with immutable data collections -- Zero external dependencies -- Multi-framework support (.NET Standard 2.1, .NET 8-10) +- Minimal external dependencies (only System.Text.Json) +- Multi-framework support (.NET Standard 2.0+, .NET 6, 8, 10) +- Works with .NET Framework 4.6.1+, .NET Core 2.0+, Unity, Xamarin - Built-in dependency injection support via CountryData.Globalization.Hosting package @@ -97,6 +98,7 @@ Initial release v1.0.0: + diff --git a/src/CountryData.Globalization/Models/Country.cs b/src/CountryData.Globalization/Models/Country.cs index 0881bee..9beb794 100644 --- a/src/CountryData.Globalization/Models/Country.cs +++ b/src/CountryData.Globalization/Models/Country.cs @@ -2,24 +2,24 @@ { /// /// Represents a country with its associated data including ISO codes, names, phone codes, regions, and Unicode emoji flag. - /// + /// /// public class Country { /// /// Gets or sets the full country name (e.g., "United States", "Canada", "Japan"). /// - public required string CountryName { get; set; } + public string CountryName { get; set; } = string.Empty; /// /// Gets or sets the international phone code for the country (e.g., "+1", "+44", "+81"). /// - public required string PhoneCode { get; set; } + public string PhoneCode { get; set; } = string.Empty; /// /// Gets or sets the ISO 3166-1 alpha-2 country code (e.g., "US", "CA", "JP"). /// - public required string CountryShortCode { get; set; } + public string CountryShortCode { get; set; } = string.Empty; /// /// Gets or sets the Unicode emoji flag representing the country (e.g., "🇺🇸", "🇨🇦", "🇯🇵"). diff --git a/src/CountryData.Globalization/Models/Region.cs b/src/CountryData.Globalization/Models/Region.cs index 7e70939..d79e2f8 100644 --- a/src/CountryData.Globalization/Models/Region.cs +++ b/src/CountryData.Globalization/Models/Region.cs @@ -8,7 +8,7 @@ public class Region /// /// Gets or sets the full region name (e.g., "California", "Ontario", "Tokyo"). /// - public required string Name { get; set; } + public string Name { get; set; } = string.Empty; /// /// Gets or sets the region short code (e.g., "CA", "ON", "13"). diff --git a/src/CountryData.Globalization/Services/CountryDataProvider.cs b/src/CountryData.Globalization/Services/CountryDataProvider.cs index 0d40487..8e14f1f 100644 --- a/src/CountryData.Globalization/Services/CountryDataProvider.cs +++ b/src/CountryData.Globalization/Services/CountryDataProvider.cs @@ -373,7 +373,17 @@ public IEnumerable GetAllCulturesForCountry(string shortCode) try { var cultureName = $"{languageCode}-{shortCode}"; - return CultureInfo.GetCultureInfo(cultureName); + var culture = CultureInfo.GetCultureInfo(cultureName); + + // Validate that the culture actually exists in the system + // This ensures consistent behavior across Windows/Linux + var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures); + if (!allCultures.Any(c => c.Name.Equals(cultureName, StringComparison.OrdinalIgnoreCase))) + { + return null; + } + + return culture; } catch { diff --git a/tests/CountryData.Globalization.Tests/CountryData.Globalization.Tests.csproj b/tests/CountryData.Globalization.Tests/CountryData.Globalization.Tests.csproj index e4d0bf7..906a0ed 100644 --- a/tests/CountryData.Globalization.Tests/CountryData.Globalization.Tests.csproj +++ b/tests/CountryData.Globalization.Tests/CountryData.Globalization.Tests.csproj @@ -8,11 +8,11 @@ - - - - - + + + + +