stores/language.ts: - init() override AsyncStorage-Wert nicht — wenn nichts gespeichert, i18n bleibt bei deviceLocale (von lib/i18n.ts via Localization.getLocales). Vorher: forced 'en' default obwohl App auf DE. ComposeCard share-button: - borderRadius:12 + height:50 → rounded-full px-5 h-11 (44pt) - text-base → text-sm. Pill-Pattern wie Pre-Session. app/profile/index.tsx: - AppHeader title "Profil" → "Profil DEBUG-2300" — TEMPORARY marker zur Verifikation ob File geladen wird (user-suspect: routing zu altem File). Wird nach Test wieder entfernt. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
36 lines
1.0 KiB
TypeScript
36 lines
1.0 KiB
TypeScript
import { create } from 'zustand';
|
|
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
import i18n from '../lib/i18n';
|
|
|
|
export type AppLanguage = 'de' | 'en';
|
|
|
|
const STORAGE_KEY = '@rebreak/language';
|
|
|
|
type LanguageState = {
|
|
language: AppLanguage;
|
|
setLanguage: (lang: AppLanguage) => Promise<void>;
|
|
init: () => Promise<void>;
|
|
};
|
|
|
|
export const useLanguageStore = create<LanguageState>((set) => ({
|
|
language: 'en',
|
|
|
|
init: async () => {
|
|
const stored = await AsyncStorage.getItem(STORAGE_KEY);
|
|
if (stored === 'de' || stored === 'en') {
|
|
await i18n.changeLanguage(stored);
|
|
set({ language: stored });
|
|
} else {
|
|
// Kein expliziter Wert gespeichert — i18n.ts hat bereits via deviceLocale
|
|
// initialisiert (Localization.getLocales()). NICHT auf 'en' overriden.
|
|
set({ language: (i18n.language === 'de' ? 'de' : 'en') as AppLanguage });
|
|
}
|
|
},
|
|
|
|
setLanguage: async (lang) => {
|
|
await AsyncStorage.setItem(STORAGE_KEY, lang);
|
|
await i18n.changeLanguage(lang);
|
|
set({ language: lang });
|
|
},
|
|
}));
|