@umituz/react-native-settings 5.3.28 → 5.3.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umituz/react-native-settings",
3
- "version": "5.3.28",
3
+ "version": "5.3.30",
4
4
  "description": "Complete settings hub for React Native apps - consolidated package with settings, localization, about, legal, appearance, feedback, FAQs, rating, and gamification",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -80,6 +80,7 @@ export const FAQScreen: React.FC<FAQScreenProps> = ({
80
80
  return (
81
81
  <ScreenLayout
82
82
  edges={['bottom']}
83
+ scrollable={true}
83
84
  header={header}
84
85
  contentContainerStyle={customStyles?.content}
85
86
  >
@@ -49,7 +49,7 @@ export const LOCALE_MAPPING: Record<string, string> = {
49
49
  'zh-TW': 'zh-TW',
50
50
  'zh-HK': 'zh-TW',
51
51
 
52
- // Others
52
+ // Others — language code (short) → full locale
53
53
  'ar': 'ar-SA',
54
54
  'bg': 'bg-BG',
55
55
  'cs': 'cs-CZ',
@@ -70,9 +70,48 @@ export const LOCALE_MAPPING: Record<string, string> = {
70
70
  'ro': 'ro-RO',
71
71
  'ru': 'ru-RU',
72
72
  'sk': 'sk-SK',
73
+ 'sl': 'sl-SI',
73
74
  'sv': 'sv-SE',
74
75
  'th': 'th-TH',
76
+ 'tl': 'tl-PH',
77
+ 'fil': 'tl-PH',
75
78
  'tr': 'tr-TR',
76
79
  'uk': 'uk-UA',
77
80
  'vi': 'vi-VN',
81
+
82
+ // Full locale codes (direct mapping for robustness)
83
+ 'ar-SA': 'ar-SA',
84
+ 'bg-BG': 'bg-BG',
85
+ 'cs-CZ': 'cs-CZ',
86
+ 'da-DK': 'da-DK',
87
+ 'de-DE': 'de-DE',
88
+ 'de-AT': 'de-DE',
89
+ 'de-CH': 'de-DE',
90
+ 'el-GR': 'el-GR',
91
+ 'fi-FI': 'fi-FI',
92
+ 'hi-IN': 'hi-IN',
93
+ 'hr-HR': 'hr-HR',
94
+ 'hu-HU': 'hu-HU',
95
+ 'id-ID': 'id-ID',
96
+ 'it-IT': 'it-IT',
97
+ 'it-CH': 'it-IT',
98
+ 'ja-JP': 'ja-JP',
99
+ 'ko-KR': 'ko-KR',
100
+ 'ms-MY': 'ms-MY',
101
+ 'ms-SG': 'ms-MY',
102
+ 'nl-NL': 'nl-NL',
103
+ 'nl-BE': 'nl-NL',
104
+ 'pl-PL': 'pl-PL',
105
+ 'ro-RO': 'ro-RO',
106
+ 'ru-RU': 'ru-RU',
107
+ 'ru-BY': 'ru-RU',
108
+ 'ru-KZ': 'ru-RU',
109
+ 'sk-SK': 'sk-SK',
110
+ 'sl-SI': 'sl-SI',
111
+ 'sv-SE': 'sv-SE',
112
+ 'th-TH': 'th-TH',
113
+ 'tl-PH': 'tl-PH',
114
+ 'tr-TR': 'tr-TR',
115
+ 'uk-UA': 'uk-UA',
116
+ 'vi-VN': 'vi-VN',
78
117
  };
@@ -32,6 +32,7 @@ export const DEFAULT_LANGUAGES: Language[] = [
32
32
  { code: 'ro-RO', name: 'Romanian', nativeName: 'Română', flag: '🇷🇴', isRTL: false },
33
33
  { code: 'ru-RU', name: 'Russian', nativeName: 'Русский', flag: '🇷🇺', isRTL: false },
34
34
  { code: 'sk-SK', name: 'Slovak', nativeName: 'Slovenčina', flag: '🇸🇰', isRTL: false },
35
+ { code: 'sl-SI', name: 'Slovenian', nativeName: 'Slovenščina', flag: '🇸🇮', isRTL: false },
35
36
  { code: 'sv-SE', name: 'Swedish', nativeName: 'Svenska', flag: '🇸🇪', isRTL: false },
36
37
  { code: 'th-TH', name: 'Thai', nativeName: 'ไทย', flag: '🇹🇭', isRTL: false },
37
38
  { code: 'tl-PH', name: 'Filipino', nativeName: 'Filipino', flag: '🇵🇭', isRTL: false },
@@ -13,6 +13,7 @@ import { languageRepository } from '../repository/LanguageRepository';
13
13
  import { getDeviceLocale } from '../config/languages';
14
14
 
15
15
  const LANGUAGE_STORAGE_KEY = '@localization:language';
16
+ const USER_SET_KEY = '@localization:user-set';
16
17
  const DEFAULT_LANGUAGE = 'en-US';
17
18
 
18
19
  export class LanguageInitializer {
@@ -36,10 +37,15 @@ export class LanguageInitializer {
36
37
  }
37
38
 
38
39
  private static async determineLanguageCode(savedLanguage: string): Promise<string> {
39
- if (savedLanguage && savedLanguage !== DEFAULT_LANGUAGE) {
40
+ // If user explicitly selected a language (even en-US), respect their choice
41
+ const userSetResult = await storageRepository.getString(USER_SET_KEY, '');
42
+ const userHasSetLanguage = userSetResult.success && userSetResult.data === 'true';
43
+
44
+ if (userHasSetLanguage && savedLanguage) {
40
45
  return savedLanguage;
41
46
  }
42
47
 
48
+ // First launch or no explicit user selection — detect from device
43
49
  const deviceLocale = getDeviceLocale();
44
50
  await storageRepository.setString(LANGUAGE_STORAGE_KEY, deviceLocale);
45
51
  return deviceLocale;
@@ -12,6 +12,7 @@ import { languageRepository } from '../repository/LanguageRepository';
12
12
  import { isDev } from '../../../../utils/devUtils';
13
13
 
14
14
  const LANGUAGE_STORAGE_KEY = '@localization:language';
15
+ const USER_SET_KEY = '@localization:user-set';
15
16
 
16
17
  export class LanguageSwitcher {
17
18
  /**
@@ -36,6 +37,7 @@ export class LanguageSwitcher {
36
37
  }
37
38
 
38
39
  await storageRepository.setString(LANGUAGE_STORAGE_KEY, languageCode);
40
+ await storageRepository.setString(USER_SET_KEY, 'true');
39
41
 
40
42
  if (isDev()) {
41
43
  }