Skip to content

Normative: Add Intl.Locale.prototype.variants #960

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 29, 2025

Conversation

gibson042
Copy link
Contributor

@gibson042 gibson042 commented Feb 14, 2025

Fixes #900

test262 PR: tc39/test262#4474

spec/locale.html Outdated
1. Perform ? RequireInternalSlot(_loc_, [[InitializedLocale]]).
1. Let _variantsString_ be GetLocaleVariants(_loc_.[[Locale]]).
1. Let _variantsList_ be StringSplitToList(_variantsString_, *"-"*).
1. Return CreateArrayFromList(_variantsList_).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might benefit from a note, but nothing more—alphabetization is already required by use of CanonicalizeUnicodeLocaleId in the Intl.Locale constructor.

@FrankYFTang
Copy link
Contributor

If we do this, then how about setting variants in option bag them?

@gibson042
Copy link
Contributor Author

If we do this, then how about setting variants in option bag them?

Good question, and I think the answer is "yes". This also interacts with the design question about representing variants as an array of strings or as a single dash-separated string, and I'm increasingly inclined towards the latter.

@sffc
Copy link
Contributor

sffc commented Mar 10, 2025

@sffc
Copy link
Contributor

sffc commented Apr 3, 2025

TG2 discussion, focused on the motivation: https://github.com/tc39/ecma402/blob/main/meetings/notes-2025-04-03.md#normative-add-localeprototypegetvariants-960

@gibson042
Copy link
Contributor Author

In accord with #960 (comment) and TG2 discussion, this will be exposed as a string-returning variants getter to align with the other subtag-based properties (language, baseName, script, region, calendar, etc.).

@gibson042 gibson042 force-pushed the gh-900-locale-getvariants branch from c001a65 to a606142 Compare May 8, 2025 20:21
gibson042 added a commit to gibson042/test262 that referenced this pull request May 8, 2025
@gibson042 gibson042 changed the title Normative: Add Locale.prototype.getVariants Normative: Add Intl.Locale.prototype.getVariants May 9, 2025
@gibson042 gibson042 changed the title Normative: Add Intl.Locale.prototype.getVariants Normative: Add Intl.Locale.prototype.variants May 9, 2025
@ryzokuken ryzokuken added has consensus Has consensus from TC39-TG2 has tests and removed needs tests needs review labels May 13, 2025
@gibson042
Copy link
Contributor Author

This reached consensus in TC39 plenary.

@gibson042 gibson042 merged commit e8c995a into tc39:main May 29, 2025
2 checks passed
gibson042 added a commit to gibson042/test262 that referenced this pull request May 29, 2025
1. Let _variants_ be GetLocaleVariants(_baseName_).
1. Let _variants_ be ? GetOption(_options_, *"variants"*, ~string~, ~empty~, GetLocaleVariants(_baseName_)).
1. If _variants_ is not *undefined*, then
1. If _variants_ cannot be matched by the <code>unicode_variant_subtag</code> Unicode locale nonterminal, throw a *RangeError* exception.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unicode_variant_subtag matches a single variant subtag. That means new Intl.Locale("kl-tunumiit-kleinsch") will now always throw a RangeError. Probably needs StringSplitToList(variants, "-") and then check unicode_variant_subtag on all elements of the returned List.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ugh, nice catch. Fix: #1007.

gibson042 added a commit to gibson042/ecma402 that referenced this pull request May 30, 2025
Ms2ger pushed a commit to gibson042/test262 that referenced this pull request Jun 4, 2025
Ms2ger pushed a commit to tc39/test262 that referenced this pull request Jun 4, 2025
@sffc
Copy link
Contributor

sffc commented Jun 14, 2025

sosukesuzuki added a commit to sosukesuzuki/WebKit that referenced this pull request Jun 20, 2025
https://bugs.webkit.org/show_bug.cgi?id=294755

Reviewed by NOBODY (OOPS!).

tc39/ecma402#960 added `Intl.Locale.prototype.variants`
to the ECMAScript specification. The test262 test suite has also been updated [1].

This patch implements `Intl.Locale.prototype.variants` for JSC.

[1]: tc39/test262#4474

* JSTests/stress/intl-locale-prototype-variants.js: Added.
(shouldBe):
(shouldThrow):
* JSTests/test262/expectations.yaml:
* Source/JavaScriptCore/runtime/CommonIdentifiers.h:
* Source/JavaScriptCore/runtime/IntlLocale.cpp:
(JSC::LocaleIDBuilder::overrideLanguageScriptRegionVariants):
(JSC::IntlLocale::initializeLocale):
(JSC::IntlLocale::variants):
(JSC::LocaleIDBuilder::overrideLanguageScriptRegion): Deleted.
* Source/JavaScriptCore/runtime/IntlLocale.h:
* Source/JavaScriptCore/runtime/IntlLocalePrototype.cpp:
(JSC::JSC_DEFINE_CUSTOM_GETTER):
webkit-commit-queue pushed a commit to sosukesuzuki/WebKit that referenced this pull request Jun 21, 2025
https://bugs.webkit.org/show_bug.cgi?id=294755

Reviewed by Yusuke Suzuki.

tc39/ecma402#960 added `Intl.Locale.prototype.variants`
to the ECMAScript specification. The test262 test suite has also been updated [1].

This patch implements `Intl.Locale.prototype.variants` for JSC.

[1]: tc39/test262#4474

* JSTests/stress/intl-locale-prototype-variants.js: Added.
(shouldBe):
(shouldThrow):
* JSTests/test262/expectations.yaml:
* Source/JavaScriptCore/runtime/CommonIdentifiers.h:
* Source/JavaScriptCore/runtime/IntlLocale.cpp:
(JSC::LocaleIDBuilder::overrideLanguageScriptRegionVariants):
(JSC::IntlLocale::initializeLocale):
(JSC::IntlLocale::variants):
(JSC::LocaleIDBuilder::overrideLanguageScriptRegion): Deleted.
* Source/JavaScriptCore/runtime/IntlLocale.h:
* Source/JavaScriptCore/runtime/IntlLocalePrototype.cpp:
(JSC::JSC_DEFINE_CUSTOM_GETTER):

Canonical link: https://commits.webkit.org/296467@main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c: locale Component: locale identifiers enhancement has consensus Has consensus from TC39-TG2 has tests needs consensus normative
Projects
Status: Priority Issues
Development

Successfully merging this pull request may close these issues.

Why is there no Intl.Locale.prototype.variants?
6 participants