Skip to content

Commit 08e7e01

Browse files
committed
Fix abbreviations for cooking units.
* Add tests for cooking unit abbreviations. * Change how default unit is determined. English and Norwegian now override the default abbreviation defined by invariant culture. * Change defaults for tablespoon and teaspoon in invariant and english languages.
1 parent c5397d5 commit 08e7e01

File tree

2 files changed

+37
-14
lines changed

2 files changed

+37
-14
lines changed

Src/UnitsNet/UnitSystem.cs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -122,20 +122,19 @@ private void CreateUsEnglish()
122122
CreateCultureInvariants();
123123

124124
// Cooking units
125-
MapUnitToAbbreviation(Unit.Tablespoon, "T", "T.", "tbsp", "tbsp.", "tbs", "tbs.");
126-
// For units with multiple abbreviations, the first one denotes the most common one
127-
MapUnitToAbbreviation(Unit.Teaspoon, "tsp", "tsp.", "t", "t.");
128-
MapUnitToAbbreviation(Unit.Piece, "pcs", "pcs.", "pc", "pc.", "pce", "pce.");
125+
MapUnitToAbbreviation(Unit.Tablespoon, "Tbsp", "Tbs", "T", "tb", "tbs", "tbsp", "tblsp", "tblspn", "Tbsp.", "Tbs.", "T.", "tb.", "tbs.", "tbsp.", "tblsp.", "tblspn.", "tablespoon", "Tablespoon");
126+
MapUnitToAbbreviation(Unit.Teaspoon, "tsp","t", "ts", "tspn", "t.", "ts.", "tsp.", "tspn.", "teaspoon");
127+
MapUnitToAbbreviation(Unit.Piece, "piece", "pieces", "pcs", "pcs.", "pc", "pc.", "pce", "pce.");
129128
}
130129

131130
private void CreateNorwegianBokmaal()
132131
{
133132
CreateCultureInvariants();
134133

135134
// Cooking units
136-
MapUnitToAbbreviation(Unit.Tablespoon, "ss", "ss.");
135+
MapUnitToAbbreviation(Unit.Tablespoon, "ss", "ss.", "SS", "SS.");
137136
MapUnitToAbbreviation(Unit.Teaspoon, "ts", "ts.");
138-
MapUnitToAbbreviation(Unit.Piece, "stk", "stk.");
137+
MapUnitToAbbreviation(Unit.Piece, "stk", "stk.", "x");
139138
}
140139

141140
private void CreateRussian()
@@ -417,8 +416,8 @@ private void CreateCultureInvariants()
417416
MapUnitToAbbreviation(Unit.Year365Days, "year");
418417

419418
// Cooking units
420-
MapUnitToAbbreviation(Unit.Tablespoon, "tbsp.");
421-
MapUnitToAbbreviation(Unit.Teaspoon, "tsp.");
419+
MapUnitToAbbreviation(Unit.Tablespoon, "Tbsp", "Tbs", "T", "tb", "tbs", "tbsp", "tblsp", "tblspn", "Tbsp.", "Tbs.", "T.", "tb.", "tbs.", "tbsp.", "tblsp.", "tblspn.");
420+
MapUnitToAbbreviation(Unit.Teaspoon, "tsp","t", "ts", "tspn", "t.", "ts.", "tsp.", "tspn.");
422421

423422
// Flow
424423
MapUnitToAbbreviation(Unit.CubicMeterPerSecond, "m³/s");
@@ -428,7 +427,7 @@ private void CreateCultureInvariants()
428427
MapUnitToAbbreviation(Unit.RevolutionPerSecond, "r/s");
429428
MapUnitToAbbreviation(Unit.RevolutionPerMinute, "r/min");
430429

431-
// Temperature
430+
// Temperature
432431
MapUnitToAbbreviation(Unit.Kelvin, "K");
433432
MapUnitToAbbreviation(Unit.DegreeCelsius, "°C");
434433
MapUnitToAbbreviation(Unit.DegreeDelisle, "°De");
@@ -450,13 +449,13 @@ private void MapUnitToAbbreviation(Unit unit, params string[] abbreviations)
450449
existingAbbreviations = _unitToAbbrevs[unit] = new List<string>();
451450
}
452451

452+
// Update any existing abbreviations so that the latest abbreviations
453+
// take precedence in GetDefaultAbbreviation().
454+
_unitToAbbrevs[unit] = abbreviations.Concat(existingAbbreviations).Distinct().ToList();
453455
foreach (string abbreviation in abbreviations)
454456
{
455-
if (existingAbbreviations.Contains(abbreviation))
456-
continue;
457-
458-
existingAbbreviations.Add(abbreviation);
459-
_abbrevsToUnit[abbreviation] = unit;
457+
if (!_abbrevsToUnit.ContainsKey(abbreviation))
458+
_abbrevsToUnit[abbreviation] = unit;
460459
}
461460
}
462461

Tests/UnitSystemTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,5 +160,29 @@ public void AllUnitsImplementToStringForRussian()
160160
Thread.CurrentThread.CurrentUICulture = originalCulture;
161161
}
162162
}
163+
164+
[Test]
165+
public void DefaultFoodUnitAbbreviationsForNorwegian()
166+
{
167+
UnitSystem unitSystem = UnitSystem.Create(new CultureInfo("nb-NO"));
168+
Assert.AreEqual("ss", unitSystem.GetDefaultAbbreviation(Unit.Tablespoon));
169+
Assert.AreEqual("ts", unitSystem.GetDefaultAbbreviation(Unit.Teaspoon));
170+
}
171+
172+
[Test]
173+
public void DefaultFoodUnitAbbreviationsForInvariant()
174+
{
175+
UnitSystem unitSystem = UnitSystem.Create(CultureInfo.InvariantCulture);
176+
Assert.AreEqual("Tbsp", unitSystem.GetDefaultAbbreviation(Unit.Tablespoon));
177+
Assert.AreEqual("tsp", unitSystem.GetDefaultAbbreviation(Unit.Teaspoon));
178+
}
179+
180+
[Test]
181+
public void DefaultFoodUnitAbbreviationsForUsEnglish()
182+
{
183+
UnitSystem unitSystem = UnitSystem.Create(new CultureInfo("en-US"));
184+
Assert.AreEqual("Tbsp", unitSystem.GetDefaultAbbreviation(Unit.Tablespoon));
185+
Assert.AreEqual("tsp", unitSystem.GetDefaultAbbreviation(Unit.Teaspoon));
186+
}
163187
}
164188
}

0 commit comments

Comments
 (0)