refactor(i18n): simplify internationalization to support only English

- Removed language switching functionality and related hooks.
- Updated i18n configuration to default to English and support only English.
- Adjusted components to hide language switcher and related features.
- Ensured all language-related functions and formatting are fixed to English.
This commit is contained in:
iHeyTang 2025-09-28 11:49:08 +08:00
parent 9b4458399d
commit c855cfca82
5 changed files with 34 additions and 113 deletions

View File

@ -2,13 +2,9 @@
* i18n React Hook * i18n React Hook
*/ */
import { useState, useEffect, useCallback } from 'react'; import { useState, useCallback } from 'react';
import { Language, languageNames } from '../i18n'; import { Language, languageNames } from '../i18n';
import { import {
getCurrentLanguage,
setCurrentLanguage,
initLanguageFromStorage,
detectAndSetSystemLanguage,
t, t,
formatNumber, formatNumber,
formatDate formatDate
@ -34,48 +30,23 @@ export interface UseI18nReturn {
} }
/** /**
* i18n Hook * i18n Hook -
*/ */
export const useI18n = (): UseI18nReturn => { export const useI18n = (): UseI18nReturn => {
const [currentLanguage, setCurrentLanguageState] = useState<Language>(getCurrentLanguage()); const [currentLanguage] = useState<Language>('en-US');
const [loading, setLoading] = useState(true); const [loading] = useState(false); // 不需要加载直接设为false
// 初始化语言设置 // 切换语言 - 空实现,因为只支持英语
useEffect(() => { const changeLanguage = useCallback(async () => {
const initLanguage = async () => { // 不执行任何操作,因为只支持英语
try { console.log('Language switching is disabled, only English is supported');
// 首先尝试从本地存储加载
await initLanguageFromStorage();
// 如果没有保存的语言,检测系统语言
const language = await detectAndSetSystemLanguage();
setCurrentLanguageState(language);
} catch (error) {
console.error('Failed to initialize language:', error);
} finally {
setLoading(false);
}
};
initLanguage();
}, []);
// 切换语言
const changeLanguage = useCallback(async (language: Language) => {
try {
await setCurrentLanguage(language);
setCurrentLanguageState(language);
} catch (error) {
console.error('Failed to change language:', error);
throw error;
}
}, []); }, []);
return { return {
currentLanguage, currentLanguage,
t, t,
changeLanguage, changeLanguage,
supportedLanguages: ['zh-CN', 'en-US', 'ja-JP', 'ko-KR'], supportedLanguages: ['en-US'], // 只支持英语
languageNames, languageNames,
formatNumber, formatNumber,
formatDate, formatDate,

View File

@ -13,9 +13,9 @@ export interface I18nConfig {
} }
export const i18nConfig: I18nConfig = { export const i18nConfig: I18nConfig = {
defaultLanguage: 'zh-CN', defaultLanguage: 'en-US',
fallbackLanguage: 'zh-CN', fallbackLanguage: 'en-US',
supportedLanguages: ['zh-CN', 'en-US', 'ja-JP', 'ko-KR'], supportedLanguages: ['en-US'],
storageKey: 'app_language', storageKey: 'app_language',
}; };

View File

@ -6,8 +6,8 @@ import Taro from '@tarojs/taro';
import { Language, i18nConfig } from './index'; import { Language, i18nConfig } from './index';
import { locales } from './locales'; import { locales } from './locales';
// 当前语言状态 // 当前语言状态 - 固定为英语
let currentLanguage: Language = i18nConfig.defaultLanguage; let currentLanguage: Language = 'en-US';
/** /**
* *
@ -17,37 +17,26 @@ export const getCurrentLanguage = (): Language => {
}; };
/** /**
* * -
*/ */
export const setCurrentLanguage = async (language: Language): Promise<void> => { export const setCurrentLanguage = async (): Promise<void> => {
if (!i18nConfig.supportedLanguages.includes(language)) { // 始终使用英语
console.warn(`Unsupported language: ${language}, fallback to ${i18nConfig.fallbackLanguage}`); currentLanguage = 'en-US';
language = i18nConfig.fallbackLanguage;
}
currentLanguage = language;
// 保存到本地存储 // 保存到本地存储
try { try {
await Taro.setStorageSync(i18nConfig.storageKey, language); await Taro.setStorageSync(i18nConfig.storageKey, 'en-US');
} catch (error) { } catch (error) {
console.error('Failed to save language to storage:', error); console.error('Failed to save language to storage:', error);
} }
}; };
/** /**
* * -
*/ */
export const initLanguageFromStorage = async (): Promise<Language> => { export const initLanguageFromStorage = async (): Promise<Language> => {
try { // 始终返回英语,忽略本地存储
const savedLanguage = await Taro.getStorageSync(i18nConfig.storageKey); currentLanguage = 'en-US';
if (savedLanguage && i18nConfig.supportedLanguages.includes(savedLanguage)) {
currentLanguage = savedLanguage;
}
} catch (error) {
console.error('Failed to load language from storage:', error);
}
return currentLanguage; return currentLanguage;
}; };
@ -95,73 +84,37 @@ export const t = (key: string, params?: Record<string, string | number>): string
}; };
/** /**
* * -
*/ */
export const detectAndSetSystemLanguage = async (): Promise<Language> => { export const detectAndSetSystemLanguage = async (): Promise<Language> => {
try { // 始终返回英语,忽略系统语言检测
const systemInfo = await Taro.getSystemInfo(); currentLanguage = 'en-US';
const systemLanguage = systemInfo.language; return 'en-US';
// 映射系统语言到支持的语言
const languageMap: Record<string, Language> = {
'zh-CN': 'zh-CN',
'zh-Hans': 'zh-CN',
'zh': 'zh-CN',
'en-US': 'en-US',
'en': 'en-US',
'ja-JP': 'ja-JP',
'ja': 'ja-JP',
'ko-KR': 'ko-KR',
'ko': 'ko-KR',
};
const detectedLanguage = languageMap[systemLanguage] || i18nConfig.defaultLanguage;
// 如果本地存储中没有语言设置,使用检测到的语言
const savedLanguage = await Taro.getStorageSync(i18nConfig.storageKey);
if (!savedLanguage) {
await setCurrentLanguage(detectedLanguage);
return detectedLanguage;
}
return getCurrentLanguage();
} catch (error) {
console.error('Failed to detect system language:', error);
return i18nConfig.defaultLanguage;
}
}; };
/** /**
* * -
*/ */
export const formatNumber = (num: number): string => { export const formatNumber = (num: number): string => {
try { try {
const locale = currentLanguage === 'zh-CN' ? 'zh-CN' : return new Intl.NumberFormat('en-US').format(num);
currentLanguage === 'ja-JP' ? 'ja-JP' :
currentLanguage === 'ko-KR' ? 'ko-KR' : 'en-US';
return new Intl.NumberFormat(locale).format(num);
} catch (error) { } catch (error) {
return num.toString(); return num.toString();
} }
}; };
/** /**
* * -
*/ */
export const formatDate = (date: Date, options?: Intl.DateTimeFormatOptions): string => { export const formatDate = (date: Date, options?: Intl.DateTimeFormatOptions): string => {
try { try {
const locale = currentLanguage === 'zh-CN' ? 'zh-CN' :
currentLanguage === 'ja-JP' ? 'ja-JP' :
currentLanguage === 'ko-KR' ? 'ko-KR' : 'en-US';
const defaultOptions: Intl.DateTimeFormatOptions = { const defaultOptions: Intl.DateTimeFormatOptions = {
year: 'numeric', year: 'numeric',
month: 'short', month: 'short',
day: 'numeric', day: 'numeric',
}; };
return new Intl.DateTimeFormat(locale, options || defaultOptions).format(date); return new Intl.DateTimeFormat('en-US', options || defaultOptions).format(date);
} catch (error) { } catch (error) {
return date.toLocaleDateString(); return date.toLocaleDateString();
} }

View File

@ -4,7 +4,7 @@ import { useEffect, useState } from 'react';
import { useServerSdk } from '../../hooks/index'; import { useServerSdk } from '../../hooks/index';
import { useI18n } from '../../hooks/useI18n'; import { useI18n } from '../../hooks/useI18n';
import { i18nManager } from '../../i18n/manager'; import { i18nManager } from '../../i18n/manager';
import LanguageSwitcher from '../../components/LanguageSwitcher'; // import LanguageSwitcher from '../../components/LanguageSwitcher'; // 已隐藏 - 只支持英语
import './index.css'; import './index.css';
export default function History() { export default function History() {
const { t } = useI18n(); const { t } = useI18n();
@ -127,7 +127,7 @@ export default function History() {
<View className="history-header"> <View className="history-header">
<View className="header-content"> <View className="header-content">
<Text className="history-title">{t('navigation.mine')}</Text> <Text className="history-title">{t('navigation.mine')}</Text>
<LanguageSwitcher className="language-switcher-compact" /> {/* 语言切换器已隐藏 - 只支持英语 */}
</View> </View>
</View> </View>

View File

@ -10,7 +10,7 @@ import { useSdk, useServerSdk } from '../../hooks/index';
import { useImageDetectionTaskManager, ImageAuditResult, AuditConclusion } from '../../hooks/useImageDetectionTaskManager'; import { useImageDetectionTaskManager, ImageAuditResult, AuditConclusion } from '../../hooks/useImageDetectionTaskManager';
import { useI18n } from '../../hooks/useI18n'; import { useI18n } from '../../hooks/useI18n';
import { i18nManager } from '../../i18n/manager'; import { i18nManager } from '../../i18n/manager';
import LanguageSwitcher from '../../components/LanguageSwitcher'; // import LanguageSwitcher from '../../components/LanguageSwitcher'; // 已隐藏 - 只支持英语
import './index.css'; import './index.css';
@ -103,10 +103,7 @@ export default function Home() {
return ( return (
<View className="home"> <View className="home">
{/* 语言切换按钮 - 右上角浮动 */} {/* 语言切换按钮已隐藏 - 只支持英语 */}
<View className="language-switcher-float">
<LanguageSwitcher className="compact" />
</View>
<ScrollView <ScrollView
className="home-scroll" className="home-scroll"