diff --git a/.changeset/happy-forks-jam.md b/.changeset/happy-forks-jam.md
new file mode 100644
index 0000000000..3f48853311
--- /dev/null
+++ b/.changeset/happy-forks-jam.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-user-settings': minor
+---
+
+Updated the user settings selector to use a select component that displays native language names instead of language codes if possible.
diff --git a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.test.tsx b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.test.tsx
index 6e3a01c3c5..88b257c833 100644
--- a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.test.tsx
+++ b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.test.tsx
@@ -74,7 +74,10 @@ describe('UserSettingsLanguageToggle', () => {
await renderInTestApp();
- fireEvent.click(screen.getByText('de'));
+ // open the select control
+ fireEvent.mouseDown(screen.getByText('English'));
+ // select the new language
+ fireEvent.click(screen.getByText('Deutsch'));
expect(mockLanguageApi.setLanguage).toHaveBeenCalledWith('de');
});
diff --git a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx
index 67519d24ae..15c6e9ea9c 100644
--- a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx
+++ b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx
@@ -19,24 +19,16 @@ import {
useTranslationRef,
appLanguageApiRef,
} from '@backstage/core-plugin-api/alpha';
-import ToggleButton from '@material-ui/lab/ToggleButton';
-import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup';
import {
ListItem,
ListItemText,
ListItemSecondaryAction,
- Tooltip,
makeStyles,
} from '@material-ui/core';
import { userSettingsTranslationRef } from '../../translation';
import { useApi } from '@backstage/core-plugin-api';
import useObservable from 'react-use/lib/useObservable';
-
-type TooltipToggleButtonProps = {
- children: JSX.Element;
- title: string;
- value: string;
-};
+import { Select } from '@backstage/core-components';
const useStyles = makeStyles(theme => ({
container: {
@@ -71,21 +63,6 @@ const useStyles = makeStyles(theme => ({
},
}));
-// ToggleButtonGroup uses React.children.map instead of context
-// so wrapping with Tooltip breaks ToggleButton functionality.
-const TooltipToggleButton = ({
- children,
- title,
- value,
- ...props
-}: TooltipToggleButtonProps) => (
-
-
- {children}
-
-
-);
-
/** @public */
export const UserSettingsLanguageToggle = () => {
const classes = useStyles();
@@ -104,13 +81,21 @@ export const UserSettingsLanguageToggle = () => {
return null;
}
- const handleSetLanguage = (
- _event: React.MouseEvent,
- newLanguage: string | undefined,
- ) => {
+ const handleSetLanguage = (newLanguage: string | undefined) => {
languageApi.setLanguage(newLanguage);
};
+ const getLanguageDisplayName = (language: string) => {
+ try {
+ const names = new Intl.DisplayNames([language], {
+ type: 'language',
+ });
+ return names.of(language) || language;
+ } catch (err) {
+ return language;
+ }
+ };
+
return (
{
secondary={t('languageToggle.description')}
/>
-
- {languages.map(language => {
- return (
-
- <>{language}>
-
- );
- })}
-
+
);