feat(i18n): 实现应用国际化支持,添加中英文翻译
- 为所有UI组件添加国际化支持,替换硬编码文本 - 新增useI18n钩子函数统一管理翻译 - 完善中英文翻译资源,覆盖统计、用药、通知设置等模块 - 优化Tab布局使用翻译键值替代静态文本 - 更新药品管理、个人资料编辑等页面的多语言支持
This commit is contained in:
@@ -7,6 +7,7 @@ import { Image } from 'expo-image';
|
||||
import { useRouter } from 'expo-router';
|
||||
import LottieView from 'lottie-react-native';
|
||||
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import {
|
||||
Animated,
|
||||
StyleSheet,
|
||||
@@ -26,6 +27,7 @@ const WaterIntakeCard: React.FC<WaterIntakeCardProps> = ({
|
||||
style,
|
||||
selectedDate
|
||||
}) => {
|
||||
const { t } = useTranslation();
|
||||
const router = useRouter();
|
||||
const { waterStats, dailyWaterGoal, waterRecords, addWaterRecord, getWaterRecordsByDate } = useWaterDataByDate(selectedDate);
|
||||
const [quickWaterAmount, setQuickWaterAmount] = useState(150); // 默认值,将从用户偏好中加载
|
||||
@@ -89,7 +91,7 @@ const WaterIntakeCard: React.FC<WaterIntakeCardProps> = ({
|
||||
const targetDate = selectedDate || dayjs().format('YYYY-MM-DD');
|
||||
await getWaterRecordsByDate(targetDate);
|
||||
} catch (error) {
|
||||
console.error('页面聚焦时加载数据失败:', error);
|
||||
console.error('Failed to load data on focus:', error);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -185,11 +187,11 @@ const WaterIntakeCard: React.FC<WaterIntakeCardProps> = ({
|
||||
source={require('@/assets/images/icons/IconGlass.png')}
|
||||
style={styles.titleIcon}
|
||||
/>
|
||||
<Text style={styles.title}>喝水</Text>
|
||||
<Text style={styles.title}>{t('statistics.components.water.title')}</Text>
|
||||
</View>
|
||||
{isToday && (
|
||||
<TouchableOpacity style={styles.addButton} onPress={handleQuickAddWater}>
|
||||
<Text style={styles.addButtonText}>+ {quickWaterAmount}ml</Text>
|
||||
<Text style={styles.addButtonText}>{t('statistics.components.water.addButton', { amount: quickWaterAmount })}</Text>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
</View>
|
||||
@@ -254,14 +256,14 @@ const WaterIntakeCard: React.FC<WaterIntakeCardProps> = ({
|
||||
<AnimatedNumber
|
||||
value={currentIntake}
|
||||
style={styles.currentIntake}
|
||||
format={(value) => `${Math.round(value)}ml`}
|
||||
format={(value) => `${Math.round(value)}${t('statistics.components.water.unit')}`}
|
||||
resetToken={selectedDate}
|
||||
/>
|
||||
) : (
|
||||
<Text style={styles.currentIntake}>——</Text>
|
||||
<Text style={styles.currentIntake}>--</Text>
|
||||
)}
|
||||
<Text style={styles.targetIntake}>
|
||||
/ {targetIntake}ml
|
||||
/ {targetIntake}{t('statistics.components.water.unit')}
|
||||
</Text>
|
||||
</View>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user