diff --git a/PowerKit.Tests/CultureInfoExtensionsTests.cs b/PowerKit.Tests/CultureInfoExtensionsTests.cs
new file mode 100644
index 0000000..f377c68
--- /dev/null
+++ b/PowerKit.Tests/CultureInfoExtensionsTests.cs
@@ -0,0 +1,46 @@
+using System.Globalization;
+using FluentAssertions;
+using PowerKit.Extensions;
+using Xunit;
+
+namespace PowerKit.Tests;
+
+public class CultureInfoExtensionsTests
+{
+ [Fact]
+ public void GetParents_Test()
+ {
+ // Act & assert
+ new CultureInfo("en-US")
+ .GetParents()
+ .Should()
+ .Equal(new CultureInfo("en"), CultureInfo.InvariantCulture);
+
+ new CultureInfo("en")
+ .GetParents()
+ .Should()
+ .Equal(CultureInfo.InvariantCulture);
+
+ CultureInfo.InvariantCulture.GetParents().Should().BeEmpty();
+ }
+
+ [Fact]
+ public void GetSelfAndParents_Test()
+ {
+ // Act & assert
+ new CultureInfo("en-US")
+ .GetSelfAndParents()
+ .Should()
+ .Equal(new CultureInfo("en-US"), new CultureInfo("en"), CultureInfo.InvariantCulture);
+
+ new CultureInfo("en")
+ .GetSelfAndParents()
+ .Should()
+ .Equal(new CultureInfo("en"), CultureInfo.InvariantCulture);
+
+ CultureInfo.InvariantCulture
+ .GetSelfAndParents()
+ .Should()
+ .Equal(CultureInfo.InvariantCulture);
+ }
+}
diff --git a/PowerKit/Extensions/CultureInfoExtensions.cs b/PowerKit/Extensions/CultureInfoExtensions.cs
new file mode 100644
index 0000000..ad2b32b
--- /dev/null
+++ b/PowerKit/Extensions/CultureInfoExtensions.cs
@@ -0,0 +1,37 @@
+using System.Collections.Generic;
+using System.Globalization;
+
+namespace PowerKit.Extensions;
+
+internal static class CultureInfoExtensions
+{
+ extension(CultureInfo culture)
+ {
+ ///
+ /// Enumerates the parent cultures of the current culture, from the immediate parent up to
+ /// .
+ ///
+ public IEnumerable GetParents()
+ {
+ var current = culture;
+ while (!current.Equals(current.Parent))
+ {
+ current = current.Parent;
+ yield return current;
+ }
+ }
+
+ ///
+ /// Enumerates the current culture and its parent cultures, from the current culture up to
+ /// .
+ ///
+ public IEnumerable GetSelfAndParents()
+ {
+ yield return culture;
+ foreach (var parent in culture.GetParents())
+ {
+ yield return parent;
+ }
+ }
+ }
+}