languageSwitcher.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import React, {useEffect, useState} from 'react';
  2. import { View, Text, TouchableOpacity, StyleSheet, Alert, Switch } from 'react-native';
  3. import { useTranslation } from '../../../../util/hooks/useTranslation';
  4. import { Language } from '../../../../i18n/types';
  5. const LanguageSwitcher: React.FC = () => {
  6. const {
  7. switchLanguage,
  8. getSupportedLanguages,
  9. getCurrentLanguageConfig,
  10. format
  11. } = useTranslation();
  12. const currentLanguage = getCurrentLanguageConfig();
  13. const [isEnabled, setIsEnabled] = useState<boolean>(false);
  14. useEffect(() => {
  15. console.log('currentLanguage....', currentLanguage);
  16. const init = async () => {
  17. const aa = await currentLanguage?.value || false;
  18. setIsEnabled(aa);
  19. };
  20. init();
  21. }, [currentLanguage]);
  22. const handleLanguageChange = async (newValue: boolean) => {
  23. if (newValue) {
  24. await switchLanguage('zh-TW');
  25. } else {
  26. await switchLanguage('en');
  27. }
  28. await setIsEnabled(newValue);
  29. };
  30. return (
  31. <View style={styles.container}>
  32. <Text style={styles.title}>En</Text>
  33. <Switch
  34. trackColor={{ false: "#cccccc", true: "#02677D" }}
  35. thumbColor={isEnabled ? "#ffffff" : "#f4f3f4"}
  36. onValueChange={handleLanguageChange}
  37. value={isEnabled}
  38. />
  39. <Text style={styles.title}>繁</Text>
  40. </View>
  41. );
  42. };
  43. const styles = StyleSheet.create({
  44. container: {
  45. flexDirection: 'row',
  46. alignItems: 'center',
  47. },
  48. title: {
  49. color: '#333333',
  50. marginRight: 5,
  51. marginLeft: 5,
  52. fontSize: 18,
  53. },
  54. languageList: {
  55. backgroundColor: '#f5f5f5',
  56. borderRadius: 8,
  57. },
  58. languageItem: {
  59. flexDirection: 'row',
  60. justifyContent: 'space-between',
  61. alignItems: 'center',
  62. padding: 16,
  63. borderBottomWidth: 1,
  64. borderBottomColor: '#e0e0e0',
  65. },
  66. selectedLanguage: {
  67. backgroundColor: '#007AFF',
  68. },
  69. languageText: {
  70. fontSize: 16,
  71. },
  72. selectedLanguageText: {
  73. color: '#FFFFFF',
  74. fontWeight: 'bold',
  75. },
  76. selectedIndicator: {
  77. color: '#FFFFFF',
  78. fontSize: 16,
  79. fontWeight: 'bold',
  80. },
  81. });
  82. export default LanguageSwitcher;