From 87d20f30b99ed8242e48b33e6875995c1ac26103 Mon Sep 17 00:00:00 2001
From: Carsten Jendro <15619117+Machibuse@users.noreply.github.com>
Date: Thu, 30 Oct 2025 21:45:19 +0100
Subject: [PATCH] Ensure unit formatting uses requested fallback length
---
Source/Porticle.CLDR.Units.Tests/UnitTests.cs | 26 +++++++++++++++++++
Source/Porticle.CLDR.Units/CldrUnits.cs | 8 +++---
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/Source/Porticle.CLDR.Units.Tests/UnitTests.cs b/Source/Porticle.CLDR.Units.Tests/UnitTests.cs
index 7a82439..fd3307f 100644
--- a/Source/Porticle.CLDR.Units.Tests/UnitTests.cs
+++ b/Source/Porticle.CLDR.Units.Tests/UnitTests.cs
@@ -1,3 +1,4 @@
+using System.Globalization;
using Porticle.CLDR.Units.Serialization;
namespace Porticle.CLDR.Units.Tests;
@@ -63,4 +64,29 @@ public void TestAll()
}
}
}
+
+ [TestMethod]
+ public void GetFormatString_UsesLengthSpecificFallback()
+ {
+ var cldrUnits = new CldrUnits(Unit.LengthMeter);
+
+ var shortFormat = cldrUnits.GetFormatString("xx", 1, PluralFormLength.Short, GrammaticalCase.Oblique);
+ var narrowFormat = cldrUnits.GetFormatString("xx", 1, PluralFormLength.Narrow, GrammaticalCase.Oblique);
+
+ Assert.AreEqual("{0} m", shortFormat);
+ Assert.AreEqual("{0}m", narrowFormat);
+ }
+
+ [TestMethod]
+ public void FormatUnit_UsesLengthSpecificFallback()
+ {
+ var cldrUnits = new CldrUnits(Unit.LengthMeter);
+ var culture = CultureInfo.InvariantCulture;
+
+ var shortFormat = cldrUnits.FormatUnit(culture, 1, PluralFormLength.Short, GrammaticalCase.Oblique);
+ var narrowFormat = cldrUnits.FormatUnit(culture, 1, PluralFormLength.Narrow, GrammaticalCase.Oblique);
+
+ Assert.AreEqual("1 m", shortFormat);
+ Assert.AreEqual("1m", narrowFormat);
+ }
}
\ No newline at end of file
diff --git a/Source/Porticle.CLDR.Units/CldrUnits.cs b/Source/Porticle.CLDR.Units/CldrUnits.cs
index 155d7ab..ab54b2a 100644
--- a/Source/Porticle.CLDR.Units/CldrUnits.cs
+++ b/Source/Porticle.CLDR.Units/CldrUnits.cs
@@ -48,7 +48,7 @@ public CldrUnits(Unit unit)
/// The format String like "{0} weeks"
public string GetFormatString(string language, int count, PluralFormLength length, GrammaticalCase grammaticalCase)
{
- return _patterns.GetFormat(language, count, length, grammaticalCase) ?? GetFallbackPattern(PluralFormLength.Long);
+ return _patterns.GetFormat(language, count, length, grammaticalCase) ?? GetFallbackPattern(length);
}
///
@@ -61,7 +61,7 @@ public string GetFormatString(string language, int count, PluralFormLength lengt
/// A format string that matches the specified culture, count, plural form length, and grammatical case. If no specific format string is found, a fallback pattern is returned.
public string GetFormatString(CultureInfo culture, int count, PluralFormLength length, GrammaticalCase grammaticalCase)
{
- return _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(PluralFormLength.Long);
+ return _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(length);
}
///
@@ -81,10 +81,10 @@ public string FormatUnit(CultureInfo culture, int count, PluralFormLength length
{
if (numberFormat == null)
{
- return string.Format(culture, _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(PluralFormLength.Long), count);
+ return string.Format(culture, _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(length), count);
}
- return string.Format(culture, _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(PluralFormLength.Long),
+ return string.Format(culture, _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(length),
count.ToString(numberFormat, culture));
}