Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
30 lines
954 B
Plaintext
30 lines
954 B
Plaintext
import { CanonicalizeUnicodeLocaleId } from "./CanonicalizeUnicodeLocaleId.js";
|
|
import { invariant } from "./utils.js";
|
|
export function InsertUnicodeExtensionAndCanonicalize(locale, attributes, keywords) {
|
|
invariant(locale.indexOf("-u-") === -1, "Expected locale to not have a Unicode locale extension");
|
|
let extension = "-u";
|
|
for (const attr of attributes) {
|
|
extension += `-${attr}`;
|
|
}
|
|
for (const kw of keywords) {
|
|
const { key, value } = kw;
|
|
extension += `-${key}`;
|
|
if (value !== "") {
|
|
extension += `-${value}`;
|
|
}
|
|
}
|
|
if (extension === "-u") {
|
|
return CanonicalizeUnicodeLocaleId(locale);
|
|
}
|
|
let privateIndex = locale.indexOf("-x-");
|
|
let newLocale;
|
|
if (privateIndex === -1) {
|
|
newLocale = locale + extension;
|
|
} else {
|
|
let preExtension = locale.slice(0, privateIndex);
|
|
let postExtension = locale.slice(privateIndex);
|
|
newLocale = preExtension + extension + postExtension;
|
|
}
|
|
return CanonicalizeUnicodeLocaleId(newLocale);
|
|
}
|