Merge pull request #2842 from QuantumNous/feat/backend-i18n

feat: backend i18n
This commit is contained in:
Calcium-Ion
2026-02-05 01:57:44 +08:00
committed by GitHub
31 changed files with 1608 additions and 361 deletions

View File

@@ -491,7 +491,7 @@ export const useChannelsData = () => {
}
const { success, message } = res.data;
if (success) {
showSuccess('操作成功完成!');
showSuccess(t('操作成功完成!'));
let newChannels = [...channels];
for (let i = 0; i < newChannels.length; i++) {
if (newChannels[i].tag === tag) {

View File

@@ -146,10 +146,41 @@ export const useHeaderBar = ({ onMobileMenuToggle, drawerOpen }) => {
}, [navigate, t, userDispatch]);
const handleLanguageChange = useCallback(
(lang) => {
async (lang) => {
// Change language immediately for responsive UX
i18n.changeLanguage(lang);
// If user is logged in, save preference to backend
if (userState?.user?.id) {
try {
const res = await API.put('/api/user/self', {
language: lang,
});
if (res.data.success) {
// Update user context with new setting
if (userState?.user?.setting) {
try {
const settings = JSON.parse(userState.user.setting);
settings.language = lang;
userDispatch({
type: 'login',
payload: {
...userState.user,
setting: JSON.stringify(settings),
},
});
} catch (e) {
// Ignore parse errors
}
}
}
} catch (error) {
// Silently ignore errors - language was already changed locally
console.error('Failed to save language preference:', error);
}
}
},
[i18n],
[i18n, userState, userDispatch],
);
const handleThemeToggle = useCallback(

View File

@@ -145,7 +145,7 @@ export const useRedemptionsData = () => {
const { success, message } = res.data;
if (success) {
showSuccess('操作成功完成!');
showSuccess(t('操作成功完成!'));
let redemption = res.data.data;
let newRedemptions = [...redemptions];
if (action !== REDEMPTION_ACTIONS.DELETE) {

View File

@@ -174,7 +174,7 @@ export const useTokensData = (openFluentNotification) => {
}
const { success, message } = res.data;
if (success) {
showSuccess('操作成功完成!');
showSuccess(t('操作成功完成!'));
let token = res.data.data;
let newTokens = [...tokens];
if (action !== 'delete') {

View File

@@ -132,7 +132,7 @@ export const useUsersData = () => {
const { success, message } = res.data;
if (success) {
showSuccess('操作成功完成!');
showSuccess(t('操作成功完成!'));
const user = res.data.data;
// Create a new array and new object to ensure React detects changes