Skip to content

Commit 82684bc

Browse files
fix(a11y): add lang attribute to language selector for better SR accessibility (#8689)
* fix(ui-components): implement hrefLang in language selector for better a11y * test(ui-components): update language selector stories with localized examples * fix(ui-components): refine language dropdown a11y for cross-browser consistency
1 parent 7dfdae1 commit 82684bc

File tree

3 files changed

+30
-6
lines changed

3 files changed

+30
-6
lines changed

packages/ui-components/src/Common/LanguageDropDown/index.stories.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,32 @@ type Meta = MetaObj<typeof LanguageDropDown>;
88
export const Default: Story = {
99
args: {
1010
availableLanguages: [
11-
{ name: 'English', code: 'en', localName: 'English' },
12-
{ name: 'French', code: 'fr', localName: 'Français' },
13-
{ name: 'Spanish', code: 'es', localName: 'Español' },
11+
{ name: 'English', code: 'en', localName: 'English', hrefLang: 'en-GB' },
12+
{ name: 'French', code: 'fr', localName: 'Français', hrefLang: 'fr' },
13+
{ name: 'Spanish', code: 'es', localName: 'Español', hrefLang: 'es-ES' },
14+
{ name: 'Japanese', code: 'ja', localName: '日本語', hrefLang: 'ja' },
15+
{
16+
name: 'Simplified Chinese',
17+
code: 'zh-cn',
18+
localName: '简体中文',
19+
hrefLang: 'zh-Hans',
20+
},
21+
{
22+
name: 'Traditional Chinese',
23+
code: 'zh-tw',
24+
localName: '繁體中文',
25+
hrefLang: 'zh-Hant',
26+
},
1427
],
1528
currentLanguage: 'en',
1629
},
1730
};
1831

32+
export const Japanese: Story = {
33+
args: {
34+
...Default.args,
35+
currentLanguage: 'ja',
36+
},
37+
};
38+
1939
export default { component: LanguageDropDown } as Meta;

packages/ui-components/src/Common/LanguageDropDown/index.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,18 @@ const LanguageDropdown: FC<LanguageDropDownProps> = ({
3535
sideOffset={5}
3636
>
3737
<div>
38-
{availableLanguages.map(({ name, code, localName }) => (
38+
{availableLanguages.map(({ name, code, localName, hrefLang }) => (
3939
<DropdownMenu.Item
4040
key={code}
41-
onClick={() => onChange({ name, code, localName })}
41+
aria-label={name}
42+
onClick={() => onChange({ name, code, localName, hrefLang })}
4243
className={classNames(styles.dropDownItem, {
4344
[styles.currentDropDown]: code === currentLanguage,
4445
})}
4546
>
46-
{localName}
47+
<span lang={hrefLang} aria-hidden="true">
48+
{localName}
49+
</span>
4750
</DropdownMenu.Item>
4851
))}
4952
</div>

packages/ui-components/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ export type SimpleLocaleConfig = {
2222
code: string;
2323
localName: string;
2424
name: string;
25+
hrefLang: string;
2526
};

0 commit comments

Comments
 (0)