-
Notifications
You must be signed in to change notification settings - Fork 31
fix: app crashing due to undefined settings constant accessor #923
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
0daae68
d9f43a5
f8eca98
655ac7a
10b9ccc
3d8605d
0ee1355
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,12 +1,18 @@ | ||
| import { NativeModules, Platform } from 'react-native'; | ||
|
|
||
| /** | ||
| * Ripped from: | ||
| * https://dev.to/medaimane/localization-and-internationalization-in-react-native-reaching-global-audiences-3acj | ||
| * Apps opted into Fabric (the new architecture of React Native) | ||
| * may not have access to the SettingsManager.settings.AppleLocale property. | ||
| * It is now common to use the `getConstants` method to access these constant properties with Fabric enabled apps. | ||
| */ | ||
| const locale = | ||
| Platform.OS === 'ios' | ||
| ? NativeModules.SettingsManager?.settings?.AppleLocale // iOS | ||
| : NativeModules.I18nManager?.localeIdentifier; | ||
| const localeIdentifier = Platform.select({ | ||
| ios: () => { | ||
| const settings = | ||
| NativeModules.SettingsManager?.settings ?? | ||
| NativeModules.SettingsManager?.getConstants()?.settings; | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Missing optional chaining on
|
||
| return settings?.AppleLocale; | ||
| }, | ||
| default: () => NativeModules.I18nManager?.localeIdentifier, | ||
| }); | ||
|
|
||
| export default locale; | ||
| export default localeIdentifier(); | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: Incorrect accessor path for getConstants() in Fabric
The fallback accessor
NativeModules.SettingsManager?.getConstants()?.settingslikely has an incorrect property path. In React Native's new Fabric architecture,getConstants()typically returns constants directly at the top level (e.g.,{AppleLocale: 'en_US'}), not nested under asettingsproperty. This meansgetConstants()?.settingswould returnundefined, causingAppleLocaleto never be found even when available throughgetConstants(). The accessor likely needs to begetConstants()?.AppleLocaleorgetConstants()should replace the entiresettingsvariable.