Skip to content

Commit 43aac6b

Browse files
kevinortiz43claude
andcommitted
Complete localeCompare locale fix: ProfileTagInput, language picker
ProfileTagInput sorted tag labels with default-locale collation (and left i18n unused, failing lint). Pass i18n.language there, and thread the locale through getAvailableLanguages so the language picker honors it too. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 79ea2af commit 43aac6b

3 files changed

Lines changed: 9 additions & 4 deletions

File tree

app/web/features/profile/ProfileTagInput.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ export default function ProfileTagInput({
272272
disablePortal
273273
options={Object.entries(effectiveOptions)
274274
.map(([key, label]) => ({ key, label }))
275-
.sort((a, b) => a.label.localeCompare(b.label))}
275+
.sort((a, b) => a.label.localeCompare(b.label, i18n.language))}
276276
renderOption={(props, option, { selected }) => {
277277
const { key, ...rest } = props;
278278

app/web/features/translate/LanguagePickerSelect.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export default function LanguagePickerSelect({
7373
const isAuthenticated = authState.authenticated;
7474

7575
const isMobile = useMediaQuery(theme.breakpoints.down("md"));
76-
const { t } = useTranslation([GLOBAL]);
76+
const { t, i18n } = useTranslation([GLOBAL]);
7777

7878
const { data: languages, isLoading, error } = useWeblateStats();
7979
const { showAllLanguages } = useShowAllLanguages();
@@ -124,7 +124,11 @@ export default function LanguagePickerSelect({
124124

125125
// Languages with < 50% translated are hidden from language selector (unless showAllLanguages is enabled)
126126
// Languages with < 80% translated are greyed out
127-
const availableLanguages = getAvailableLanguages(languages, showAllLanguages);
127+
const availableLanguages = getAvailableLanguages(
128+
languages,
129+
showAllLanguages,
130+
i18n.language,
131+
);
128132

129133
const menuItems: React.ReactNode[] | undefined = isLoading
130134
? []

app/web/features/translate/utils.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export function isLanguageProductionReady(
4040
export function getAvailableLanguages(
4141
languages: WeblateLanguage[] | undefined,
4242
showAll = false,
43+
locale?: string,
4344
): WeblateLanguage[] {
4445
if (!languages) {
4546
return [];
@@ -63,6 +64,6 @@ export function getAvailableLanguages(
6364
b.translated_percent >= ALMOST_DONE_CUTOFF
6465
)
6566
return 1;
66-
return a.code.localeCompare(b.code);
67+
return a.code.localeCompare(b.code, locale);
6768
});
6869
}

0 commit comments

Comments
 (0)