Multi Language
1. Add content
// ----------------------------------------------------
// File: src/utils/languages/ar.json
// ----------------------------------------------------
{
"Modern": "عصري",
"Contacts":"جهات الاتصال",
"Chats":"الدردشات"
}
// ----------------------------------------------------
// File: src/utils/languages/en.json
// ----------------------------------------------------
{
"Modern": "Modern",
"Contacts":"Contacts",
"Chats":"Chats"
}
// ----------------------------------------------------
// File: src/utils/languages/ch.json
// ----------------------------------------------------
{
"Modern": "現代的",
"Contacts":"聯繫人",
"Chats":"聊天記錄"
}
// ----------------------------------------------------
// File: src/utils/languages/fr.json
// ----------------------------------------------------
{
"Modern": "Moderne",
"Contacts":"Les contacts",
"Chats":"Chattes"
}
2. Usage
// ----------------------------------------------------
// File: src/layouts/full/vertical/header/language.tsx
// ----------------------------------------------------
import React from 'react';
import { Avatar, IconButton, Menu, MenuItem, Typography } from '@mui/material';
import { useSelector, useDispatch } from 'src/store/Store';
import { setLanguage } from 'src/store/customizer/CustomizerSlice';
import FlagEn from 'src/assets/images/flag/icon-flag-en.svg';
import FlagFr from 'src/assets/images/flag/icon-flag-fr.svg';
import FlagCn from 'src/assets/images/flag/icon-flag-cn.svg';
import FlagSa from 'src/assets/images/flag/icon-flag-sa.svg';
import { Stack } from '@mui/system';
import { useTranslation } from 'react-i18next';
import { useEffect } from 'react';
import { AppState } from 'src/store/Store';
const Languages = [
{
flagname: 'English (UK)',
icon: FlagEn,
value: 'en',
},
{
flagname: '中国人 (Chinese)',
icon: FlagCn,
value: 'ch',
},
{
flagname: 'français (French)',
icon: FlagFr,
value: 'fr',
},
{
flagname: 'عربي (Arabic)',
icon: FlagSa,
value: 'ar',
},
];
const Language = () => {
const [anchorEl, setAnchorEl] = React.useState(null);
const dispatch = useDispatch();
const open = Boolean(anchorEl);
const customizer = useSelector((state: AppState) => state.customizer);
const currentLang =
Languages.find((_lang) => _lang.value === customizer.isLanguage) || Languages[1];
const { i18n } = useTranslation();
const handleClick = (event: any) => {
setAnchorEl(event.currentTarget);
};
const handleClose = () => {
setAnchorEl(null);
};
useEffect(() => {
i18n.changeLanguage(customizer.isLanguage);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<>
<IconButton
aria-label="more"
id="long-button"
aria-controls={open ? 'long-menu' : undefined}
aria-expanded={open ? 'true' : undefined}
aria-haspopup="true"
onClick={handleClick}
>
<Avatar src={currentLang.icon} alt={currentLang.value} sx={{ width: 20, height: 20 }} />
</IconButton>
<Menu
id="long-menu"
anchorEl={anchorEl}
open={open}
onClose={handleClose}
sx={{
'& .MuiMenu-paper': {
width: '200px',
},
}}
>
{Languages.map((option, index) => (
<MenuItem
key={index}
sx={{ py: 2, px: 3 }}
onClick={() => dispatch(setLanguage(option.value))}
>
<Stack direction="row" spacing={1} alignItems="center">
<Avatar src={option.icon} alt={option.icon} sx={{ width: 20, height: 20 }} /<
<Typography> {option.flagname}</Typography>
</Stack>
))}
</Menu>
</>
);
};
export default Language;
1. Add content
// ----------------------------------------------------
// File: src/utils/languages/ar.json
// ----------------------------------------------------
{
"Modern": "عصري",
"Contacts":"جهات الاتصال",
"Chats":"الدردشات"
}
// ----------------------------------------------------
// File: src/utils/languages/en.json
// ----------------------------------------------------
{
"Modern": "Modern",
"Contacts":"Contacts",
"Chats":"Chats"
}
// ----------------------------------------------------
// File: src/utils/languages/ch.json
// ----------------------------------------------------
{
"Modern": "現代的",
"Contacts":"聯繫人",
"Chats":"聊天記錄"
}
// ----------------------------------------------------
// File: src/utils/languages/fr.json
// ----------------------------------------------------
{
"Modern": "Moderne",
"Contacts":"Les contacts",
"Chats":"Chattes"
}
2. Usage
// ----------------------------------------------------
// File: src/layouts/full/vertical/header/language.tsx
// ----------------------------------------------------
import React from 'react';
import { Avatar, IconButton, Menu, MenuItem, Typography } from '@mui/material';
import { useSelector, useDispatch } from 'src/store/Store';
import { setLanguage } from 'src/store/customizer/CustomizerSlice';
import FlagEn from 'src/assets/images/flag/icon-flag-en.svg';
import FlagFr from 'src/assets/images/flag/icon-flag-fr.svg';
import FlagCn from 'src/assets/images/flag/icon-flag-cn.svg';
import FlagSa from 'src/assets/images/flag/icon-flag-sa.svg';
import { Stack } from '@mui/system';
import { useTranslation } from 'react-i18next';
import { useEffect } from 'react';
import { AppState } from 'src/store/Store';
const Languages = [
{
flagname: 'English (UK)',
icon: FlagEn,
value: 'en',
},
{
flagname: '中国人 (Chinese)',
icon: FlagCn,
value: 'ch',
},
{
flagname: 'français (French)',
icon: FlagFr,
value: 'fr',
},
{
flagname: 'عربي (Arabic)',
icon: FlagSa,
value: 'ar',
},
];
const Language = () => {
const [anchorEl, setAnchorEl] = React.useState(null);
const dispatch = useDispatch();
const open = Boolean(anchorEl);
const customizer = useSelector((state: AppState) => state.customizer);
const currentLang =
Languages.find((_lang) => _lang.value === customizer.isLanguage) || Languages[1];
const { i18n } = useTranslation();
const handleClick = (event: any) => {
setAnchorEl(event.currentTarget);
};
const handleClose = () => {
setAnchorEl(null);
};
useEffect(() => {
i18n.changeLanguage(customizer.isLanguage);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<>
<IconButton
aria-label="more"
id="long-button"
aria-controls={open ? 'long-menu' : undefined}
aria-expanded={open ? 'true' : undefined}
aria-haspopup="true"
onClick={handleClick}
>
<Avatar src={currentLang.icon} alt={currentLang.value} sx={{ width: 20, height: 20 }} />
</IconButton>
<Menu
id="long-menu"
anchorEl={anchorEl}
open={open}
onClose={handleClose}
sx={{
'& .MuiMenu-paper': {
width: '200px',
},
}}
>
{Languages.map((option, index) => (
<MenuItem
key={index}
sx={{ py: 2, px: 3 }}
onClick={() => dispatch(setLanguage(option.value))}
>
<Stack direction="row" spacing={1} alignItems="center">
<Avatar src={option.icon} alt={option.icon} sx={{ width: 20, height: 20 }} /<
<Typography> {option.flagname}</Typography>
</Stack>
))}
</Menu>
</>
);
};
export default Language;