fix: pluralize unit word using the maxDecimalPoints-truncated count
When maxDecimalPoints truncates a unit count to exactly 1, the rendered
number showed 1 while the word was pluralized from the raw count (for
example humanizeDuration(1500, { maxDecimalPoints: 0 }) returned
"1 seconds"). Pluralize from the normalized count that is actually
displayed so the number and word agree.
This commit is contained in:
1 parent
ddd1c2df9e
commit
117fd38eeb
2 files changed
+16
-1
No files matched your search
@@ -1382,7 +1382,9 @@
|
||||
var languageWord = language[unitName];
|
||||
var word;
|
||||
if (typeof languageWord === "function") {
|
||||
word = languageWord(unitCount);
|
||||
// Pluralize on the rendered count: `maxDecimalPoints` may truncate 1.5 to
|
||||
// "1", and the word must agree with what is shown.
|
||||
word = languageWord(normalizedUnitCount);
|
||||
} else {
|
||||
word = languageWord;
|
||||
}
|
||||
|
||||
@@ -162,6 +162,19 @@ describe("humanizer", function () {
|
||||
assert.strictEqual(h(7999), "7.999 seconds");
|
||||
});
|
||||
|
||||
it('pluralizes based on the count rendered by "maxDecimalPoints"', function () {
|
||||
// A count truncated to exactly 1 must take the singular word.
|
||||
assert.strictEqual(humanizer({ maxDecimalPoints: 0 })(1500), "1 second");
|
||||
assert.strictEqual(humanizer({ maxDecimalPoints: 2 })(1005), "1 second");
|
||||
// A truncated count that is not 1 stays plural.
|
||||
assert.strictEqual(humanizer({ maxDecimalPoints: 0 })(2500), "2 seconds");
|
||||
// German shares the same singular/plural mechanism.
|
||||
assert.strictEqual(
|
||||
humanizer({ language: "de", maxDecimalPoints: 0 })(1500),
|
||||
"1 Sekunde"
|
||||
);
|
||||
});
|
||||
|
||||
it("can ask for the largest units", function () {
|
||||
const h = humanizer({ largest: 2 });
|
||||
|
||||
|
||||
Reference in new issue
Block a user