chahinebrini 922d5dc876 fix(stores): lazy-init theme/language — kein native API-Call beim Module-Load
Hermes wirft "property is not writable" + "Cannot read 'default' of undefined"
wenn beim Module-Load eines Stores native APIs aufgerufen werden bevor
die Bridge bereit ist. Die initialen Werte:

- theme: colorScheme war resolveColorScheme('system') → ruft Appearance.getColorScheme()
  zur Module-Load-Zeit. Jetzt: 'light' als default; korrekter Wert kommt
  asynchron via init().
- language: language war (i18n.language === 'de' ? 'de' : 'en') → liest
  i18n.language zur Module-Load-Zeit (Risiko falls i18n noch nicht init).
  Jetzt: 'en' default; korrekter Wert kommt via init() das i18n.changeLanguage
  callt.

Init-Calls passieren in _layout.tsx useEffect — nach Bridge-bereit, nach
Hermes-Eval-Phase. Sicher.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 22:03:21 +02:00

31 lines
834 B
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);
const lang: AppLanguage = stored === 'de' || stored === 'en' ? stored : 'en';
await i18n.changeLanguage(lang);
set({ language: lang });
},
setLanguage: async (lang) => {
await AsyncStorage.setItem(STORAGE_KEY, lang);
await i18n.changeLanguage(lang);
set({ language: lang });
},
}));