languageSwitcher.tsx 2.2 KB

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