fix(i18n): 繁中開屏 consent 文案不生效 - 寫死繁中文案、清理腳本、文件
- splash: 繁中 consent 使用元件內 ZH_TW_CONSENT,避免 bundle 快取 - splash: 使用 isTraditionalChineseLocaleTag 判斷繁中 - i18n: 註解與 __DEV__ debug log - package: clean:cache, start:clean, ios:clean, clean:ios-build - ALL_COPY: 故障排除與 consent 只改 zh-TW.json 說明 - spec_kit: Splash Consent overflow 記錄排查結論 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -8,6 +8,7 @@ import { setConsentAccepted, getConsentAccepted } from '../../src/storage/appSto
|
||||
import { fetchLegalLinks } from '@/src/services/legalApi';
|
||||
import { getOnboardingCompleted } from '@/src/storage/appStorage';
|
||||
import { API_BASE_URL } from '@/src/constants/env';
|
||||
import { isTraditionalChineseLocaleTag } from '@/src/i18n/locale';
|
||||
|
||||
// 导入 SVG 组件
|
||||
import FlowersBg from '../../assets/images/index/flowers_endbg.svg';
|
||||
@@ -15,10 +16,30 @@ import WelcomeBtn from '../../assets/images/index/welcome_btn.svg';
|
||||
|
||||
const { width, height } = Dimensions.get('window');
|
||||
|
||||
// 繁中開屏 consent 文案:寫死在元件內,避免 Metro/iOS bundle 快取導致永遠顯示舊文案。
|
||||
// 若需修改,請改這裡並同步 client/src/i18n/locales/zh-TW.json 的 consent 區塊。
|
||||
const ZH_TW_CONSENT = {
|
||||
title: '我們知道,',
|
||||
subtitle: '當媽媽很不容易。',
|
||||
subtitleSecondary: '這裡給你一些溫柔的肯定與提醒',
|
||||
};
|
||||
|
||||
export default function SplashScreen() {
|
||||
const router = useRouter();
|
||||
const { t } = useTranslation();
|
||||
const { t, i18n } = useTranslation();
|
||||
const [showConsent, setShowConsent] = useState(false);
|
||||
|
||||
// 繁中時強制使用上方常數(含 zh-TW / zh-Hant / zh-Hant-TW),其餘用 i18n
|
||||
const isZhTW = isTraditionalChineseLocaleTag(i18n.language || '');
|
||||
const title = isZhTW ? ZH_TW_CONSENT.title : t('consent.title');
|
||||
const subtitle = isZhTW ? ZH_TW_CONSENT.subtitle : t('consent.subtitle');
|
||||
const subtitleSecondary = isZhTW ? ZH_TW_CONSENT.subtitleSecondary : t('consent.subtitleSecondary');
|
||||
|
||||
useEffect(() => {
|
||||
if (typeof __DEV__ !== 'undefined' && __DEV__ && showConsent) {
|
||||
console.log('[i18n consent] language=', i18n.language, 'title=', title, 'subtitle=', subtitle);
|
||||
}
|
||||
}, [showConsent, i18n.language, title, subtitle]);
|
||||
const [links, setLinks] = useState<{ privacy?: string; terms?: string }>({});
|
||||
const [linksLoading, setLinksLoading] = useState(false);
|
||||
const mountedRef = useRef(true);
|
||||
@@ -126,13 +147,16 @@ export default function SplashScreen() {
|
||||
/>
|
||||
</View>
|
||||
|
||||
{/* 文案内容 */}
|
||||
{/* 文案内容:主標題兩行 + 可選二級標題(字號更小、顏色更淺);繁中為元件內常數,其餘用 i18n */}
|
||||
<View style={[styles.contentContainer, { position: 'absolute', top: contentTop }]}>
|
||||
<Text style={styles.titleText}>
|
||||
{t('consent.title')}
|
||||
{title}
|
||||
{'\n'}
|
||||
{t('consent.subtitle')}
|
||||
{subtitle}
|
||||
</Text>
|
||||
{subtitleSecondary ? (
|
||||
<Text style={styles.consentSubtitleSecondary}>{subtitleSecondary}</Text>
|
||||
) : null}
|
||||
</View>
|
||||
|
||||
<SafeAreaView style={styles.bottomContainer} edges={['bottom']}>
|
||||
@@ -213,6 +237,14 @@ const styles = StyleSheet.create({
|
||||
fontWeight: '600',
|
||||
fontFamily: Platform.OS === 'ios' ? 'STIX Two Text' : 'serif',
|
||||
},
|
||||
consentSubtitleSecondary: {
|
||||
marginTop: 12,
|
||||
fontSize: 16,
|
||||
lineHeight: 22,
|
||||
color: 'rgba(119, 47, 0, 0.6)',
|
||||
textAlign: 'center',
|
||||
fontFamily: Platform.OS === 'ios' ? 'STIX Two Text' : 'serif',
|
||||
},
|
||||
bottomContainer: {
|
||||
position: 'absolute',
|
||||
bottom: 60,
|
||||
|
||||
Reference in New Issue
Block a user