您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 

81 行
2.3 KiB

  1. import { useState, useEffect, createContext } from 'react';
  2. import { IntlProvider } from 'react-intl';
  3. import enMessages from '../translations/en.json';
  4. import cnMessages from '../translations/zh-CN.json';
  5. import hkMessages from '../translations/zh-HK.json';
  6. import { GET_COMBO, GET_CONTENT } from "utils/ApiPathConst";
  7. import { get } from "utils/HttpUtils";
  8. const LocaleContext = createContext();
  9. export const I18nProvider = ({ children }) => {
  10. const systemMessages = {
  11. "en": enMessages,
  12. "zh": hkMessages,
  13. "zh-HK": hkMessages,
  14. "zh-CN": cnMessages
  15. };
  16. const [locale, setLocale] = useState('en'); // Default locale, you can change this as per your requirement
  17. const [messages, setMessages] = useState(systemMessages[locale]);
  18. const loadTermsAndConditions = () => {
  19. get({
  20. url: GET_CONTENT,
  21. onSuccess: (responseData) => {
  22. for (const key in responseData) {
  23. const value = responseData[key];
  24. enMessages[key] = value.en??"";
  25. cnMessages[key] = value.cn??"";
  26. hkMessages[key] = value.zh??"";
  27. }
  28. }
  29. });
  30. get({
  31. url: GET_COMBO,
  32. onSuccess: (responseData) => {
  33. for (let i = 0; i < responseData.length; i++) {
  34. let item = responseData[i];
  35. enMessages[item.key] = item.en;
  36. cnMessages[item.key] = item.cn;
  37. hkMessages[item.key] = item.zh;
  38. }
  39. }
  40. });
  41. }
  42. useEffect(() => {
  43. loadTermsAndConditions();
  44. if (localStorage.getItem('locale') === null) {
  45. //no locale case
  46. localStorage.setItem('locale', 'en');
  47. }
  48. else {
  49. setLocale(localStorage.getItem('locale'));
  50. }
  51. }, []);
  52. useEffect(() => {
  53. // Load the messages for the selected locale
  54. const fetchMessages = async () => {
  55. setMessages(systemMessages[locale]);
  56. };
  57. fetchMessages();
  58. }, [locale]);
  59. return (
  60. <LocaleContext.Provider value={{ locale, setLocale }} >
  61. <IntlProvider locale={locale} messages={messages}>
  62. {children}
  63. </IntlProvider>
  64. </LocaleContext.Provider>
  65. );
  66. }
  67. export default LocaleContext;