You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A test for de-CH locale formatting in MoneyInput.parseMoneyValue started failing in CI but not locally.
The two failure values looked identical in the diff, which made it difficult to diagnose.
Root cause: The Swiss de-CH locale uses an apostrophe as a thousands separator, but the exact character depends on the Unicode locale data (CLDR) bundled with Node.js.
Two different characters were in play:
a right single quote (’, U+2019) and
a plain apostrophe (', U+0027)
But why now?
May 2025 - Test written against Node 22 / ICU 77.1, which produced U+2019 for de-CH. Hardcoded that character in the assertion, because... it's the whole point of that assertion.
Sep 2025 - CLDR 48 changed the de-CH thousands separator from U+2019 to U+0027.
Jan 2026 - ICU 78.2 shipped with the CLDR 48 change.
Feb 10, 2026 — Node 24.13.1 released, bundling ICU 78.2.
Last week - CI picked up Node 24.13.1+ (the workflow uses an unpinned node-version: '24'), causing toLocaleString('de-CH') to produce U+0027 instead of U+2019. (Local machines on Node 24.13.0 were
unaffected).
The test description already acknowledged both characters as valid for de-CH. Updated the assertion to use a regex character class [\u2019'] which explicitly accepts either the right single quote or the plain apostrophe so the test is accurate across Node versions.
Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.
This PR includes no changesets
When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types
The reason will be displayed to describe this comment to others. Learn more.
Mixed feelings between this solution, or normalizing the output in formatAmount by replacing U+0027 → U+2019 after toLocaleString runs (thereby enforcing U+2019 as the canonical de-CH thousands separator
regardless of ICU version)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fix for the CI error seen here
A test for de-CH locale formatting in MoneyInput.parseMoneyValue started failing in CI but not locally.
The two failure values looked identical in the diff, which made it difficult to diagnose.
Root cause: The Swiss de-CH locale uses an apostrophe as a thousands separator, but the exact character depends on the Unicode locale data (CLDR) bundled with Node.js.
Two different characters were in play:
But why now?
unaffected).
The test description already acknowledged both characters as valid for de-CH. Updated the assertion to use a regex character class [\u2019'] which explicitly accepts either the right single quote or the plain apostrophe so the test is accurate across Node versions.