mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-03-30 04:03:18 +00:00
- Add go-i18n library for internationalization - Create i18n package with translation keys and YAML locale files (zh/en) - Implement i18n middleware for language detection from user settings and Accept-Language header - Add Language field to UserSetting DTO - Update API response helpers with i18n support (ApiErrorI18n, ApiSuccessI18n) - Migrate hardcoded messages in token, redemption, and user controllers - Add frontend language preference settings component - Sync language preference across header selector and user settings - Auto-restore user language preference on login
53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
/*
|
|
Copyright (C) 2025 QuantumNous
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as
|
|
published by the Free Software Foundation, either version 3 of the
|
|
License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
For commercial licensing, please contact support@quantumnous.com
|
|
*/
|
|
|
|
import React, { useEffect } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { reducer, initialState } from './reducer';
|
|
|
|
export const UserContext = React.createContext({
|
|
state: initialState,
|
|
dispatch: () => null,
|
|
});
|
|
|
|
export const UserProvider = ({ children }) => {
|
|
const [state, dispatch] = React.useReducer(reducer, initialState);
|
|
const { i18n } = useTranslation();
|
|
|
|
// Sync language preference when user data is loaded
|
|
useEffect(() => {
|
|
if (state.user?.setting) {
|
|
try {
|
|
const settings = JSON.parse(state.user.setting);
|
|
if (settings.language && settings.language !== i18n.language) {
|
|
i18n.changeLanguage(settings.language);
|
|
}
|
|
} catch (e) {
|
|
// Ignore parse errors
|
|
}
|
|
}
|
|
}, [state.user?.setting, i18n]);
|
|
|
|
return (
|
|
<UserContext.Provider value={[state, dispatch]}>
|
|
{children}
|
|
</UserContext.Provider>
|
|
);
|
|
};
|