feat(i18n): add internationalization with i18next and expo-localization

This commit is contained in:
2026-08-08 10:09:30 +02:00
parent 408a2fa10c
commit 9946e78858
81 changed files with 1820 additions and 125 deletions
+23 -2
View File
@@ -1,16 +1,27 @@
import { createContext, useContext, useEffect, useState, type ReactNode } from "react";
import { createContext, useContext, useState, type ReactNode } from "react";
import { createMMKV } from "react-native-mmkv";
import i18n, {
type LanguageCode,
type StoredLanguage,
getStoredLanguage,
setStoredLanguage,
resolveLanguage,
} from "../i18n";
const storage = createMMKV();
type SettingsContextType = {
poolLength: number;
setPoolLength: (length: number) => void;
language: StoredLanguage;
setLanguage: (code: StoredLanguage) => void;
};
const SettingsContext = createContext<SettingsContextType>({
poolLength: 25,
setPoolLength: () => {},
language: "system",
setLanguage: () => {},
});
export function useSettings() {
@@ -23,13 +34,23 @@ export function SettingsProvider({ children }: { children: ReactNode }) {
return stored ?? 25;
});
const [language, setLanguageState] = useState<StoredLanguage>(() => {
return getStoredLanguage() ?? "system";
});
const setPoolLength = (length: number) => {
setPoolLengthState(length);
storage.set("poolLength", length);
};
const setLanguage = (code: StoredLanguage) => {
setLanguageState(code);
setStoredLanguage(code);
i18n.changeLanguage(resolveLanguage(code));
};
return (
<SettingsContext.Provider value={{ poolLength, setPoolLength }}>
<SettingsContext.Provider value={{ poolLength, setPoolLength, language, setLanguage }}>
{children}
</SettingsContext.Provider>
);