Implement multilingual support by integrating i18n for dynamic text rendering across the app. Added language selection modal in HomeScreen and updated various components to utilize localized strings. Updated package dependencies for async storage and localization.

This commit is contained in:
2025-08-16 22:24:47 +05:00
parent 0f8c9b5e55
commit e431c42df1
13 changed files with 460 additions and 38 deletions

View File

@@ -3,10 +3,11 @@ import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native
import { useFonts } from 'expo-font';
import { Stack } from 'expo-router';
import * as SplashScreen from 'expo-splash-screen';
import { useEffect } from 'react';
import React, { useEffect } from 'react';
import 'react-native-reanimated';
import { useColorScheme } from '@/components/useColorScheme';
import { initializeLanguage } from '@/i18n';
export {
// Catch any errors thrown by the Layout component.
@@ -26,6 +27,8 @@ export default function RootLayout() {
SpaceMono: require('../assets/fonts/SpaceMono-Regular.ttf'),
...FontAwesome.font,
});
const [langLoaded, setLangLoaded] = React.useState(false);
// Expo Router uses Error Boundaries to catch errors in the navigation tree.
useEffect(() => {
@@ -33,12 +36,18 @@ export default function RootLayout() {
}, [error]);
useEffect(() => {
if (loaded) {
initializeLanguage().then(() => {
setLangLoaded(true);
});
}, []);
useEffect(() => {
if (loaded && langLoaded) {
SplashScreen.hideAsync();
}
}, [loaded]);
}, [loaded, langLoaded]);
if (!loaded) {
if (!loaded || !langLoaded) {
return null;
}