hasari-api / apps /mobile /components /LanguageSwitcher.tsx
erdoganpeker's picture
v0.3.0 — multimodal vehicle damage MVP
e327f0d
import React from 'react';
import { Pressable, StyleSheet, Text, View } from 'react-native';
import { useTranslation } from 'react-i18next';
import { colors, radius, spacing, typography } from '../theme';
import { changeLanguage, SupportedLocale } from '../i18n';
interface Props {
compact?: boolean;
}
export default function LanguageSwitcher({ compact }: Props) {
const { i18n, t } = useTranslation('common');
const set = async (locale: SupportedLocale) => {
await changeLanguage(locale);
};
const current = (i18n.language || 'tr').toLowerCase().startsWith('en') ? 'en' : 'tr';
return (
<View style={[styles.wrap, compact && styles.wrapCompact]}>
<Pressable
accessibilityRole="button"
onPress={() => set('tr')}
style={[styles.btn, current === 'tr' && styles.btnActive]}
>
<Text style={[styles.text, current === 'tr' && styles.textActive]}>
{compact ? 'TR' : t('languageTr')}
</Text>
</Pressable>
<Pressable
accessibilityRole="button"
onPress={() => set('en')}
style={[styles.btn, current === 'en' && styles.btnActive]}
>
<Text style={[styles.text, current === 'en' && styles.textActive]}>
{compact ? 'EN' : t('languageEn')}
</Text>
</Pressable>
</View>
);
}
const styles = StyleSheet.create({
wrap: {
flexDirection: 'row',
backgroundColor: colors.bgElevated,
borderRadius: radius.pill,
padding: 4,
alignSelf: 'flex-start',
},
wrapCompact: {
padding: 2,
},
btn: {
paddingVertical: spacing.xs,
paddingHorizontal: spacing.md,
borderRadius: radius.pill,
},
btnActive: {
backgroundColor: colors.primary,
},
text: {
...typography.caption,
color: colors.textMuted,
fontWeight: '600',
},
textActive: {
color: '#fff',
},
});