diff --git a/Libraries/ReactNative/I18nManager.js b/Libraries/ReactNative/I18nManager.js index 00529a043..e682e8a77 100644 --- a/Libraries/ReactNative/I18nManager.js +++ b/Libraries/ReactNative/I18nManager.js @@ -14,14 +14,18 @@ type I18nManagerStatus = { isRTL: boolean, + doesRTLFlipLeftAndRightStyles: boolean, allowRTL: (allowRTL: boolean) => {}, forceRTL: (forceRTL: boolean) => {}, + makeRTLFlipLeftAndRightStyles: (flipStyles: boolean) => {}, }; const I18nManager: I18nManagerStatus = require('NativeModules').I18nManager || { isRTL: false, + doesRTLFlipLeftAndRightStyles: true, allowRTL: () => {}, forceRTL: () => {}, + makeRTLFlipLeftAndRightStyles: () => {}, }; module.exports = I18nManager; diff --git a/React/Modules/RCTI18nManager.m b/React/Modules/RCTI18nManager.m index eee2c1af3..f5ba41f6d 100644 --- a/React/Modules/RCTI18nManager.m +++ b/React/Modules/RCTI18nManager.m @@ -29,10 +29,16 @@ RCT_EXPORT_METHOD(forceRTL:(BOOL)value) [[RCTI18nUtil sharedInstance] forceRTL:value]; } +RCT_EXPORT_METHOD(makeRTLFlipLeftAndRightStyles:(BOOL)value) +{ + [[RCTI18nUtil sharedInstance] makeRTLFlipLeftAndRightStyles:value]; +} + - (NSDictionary *)constantsToExport { return @{ - @"isRTL": @([[RCTI18nUtil sharedInstance] isRTL]) + @"isRTL": @([[RCTI18nUtil sharedInstance] isRTL]), + @"doesRTLFlipLeftAndRightStyles": @([[RCTI18nUtil sharedInstance] doesRTLFlipLeftAndRightStyles]) }; } diff --git a/React/Modules/RCTI18nUtil.h b/React/Modules/RCTI18nUtil.h index 0f2287218..cdabbbed3 100644 --- a/React/Modules/RCTI18nUtil.h +++ b/React/Modules/RCTI18nUtil.h @@ -24,5 +24,7 @@ - (void)allowRTL:(BOOL)value; - (BOOL)isRTLForced; - (void)forceRTL:(BOOL)value; +- (BOOL)doesRTLFlipLeftAndRightStyles; +- (void)makeRTLFlipLeftAndRightStyles:(BOOL)value; @end diff --git a/React/Modules/RCTI18nUtil.m b/React/Modules/RCTI18nUtil.m index a3a206b23..4c35d1c3f 100644 --- a/React/Modules/RCTI18nUtil.m +++ b/React/Modules/RCTI18nUtil.m @@ -19,6 +19,7 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [self new]; + [sharedInstance makeRTLFlipLeftAndRightStyles: true]; }); return sharedInstance; @@ -78,6 +79,17 @@ [[NSUserDefaults standardUserDefaults] synchronize]; } +- (BOOL)doesRTLFlipLeftAndRightStyles +{ + return [[NSUserDefaults standardUserDefaults] boolForKey:@"RCTI18nUtil_makeRTLFlipLeftAndRightStyles"]; +} + +- (void)makeRTLFlipLeftAndRightStyles:(BOOL)value +{ + [[NSUserDefaults standardUserDefaults] setBool:value forKey:@"RCTI18nUtil_makeRTLFlipLeftAndRightStyles"]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + // Check if the current device language is RTL - (BOOL)isDevicePreferredLanguageRTL { diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.java index b3e2deacc..5b8eb1ded 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.java @@ -45,6 +45,7 @@ public class I18nManagerModule extends ContextBaseJavaModule { final Map constants = MapBuilder.newHashMap(); constants.put("isRTL", sharedI18nUtilInstance.isRTL(context)); + constants.put("doesRTLFlipLeftAndRightStyles", sharedI18nUtilInstance.doesRTLFlipLeftAndRightStyles(context)); constants.put("localeIdentifier", locale.toString()); return constants; } @@ -58,4 +59,9 @@ public class I18nManagerModule extends ContextBaseJavaModule { public void forceRTL(boolean value) { sharedI18nUtilInstance.forceRTL(getContext(), value); } + + @ReactMethod + public void makeRTLFlipLeftAndRightStyles(boolean value) { + sharedI18nUtilInstance.makeRTLFlipLeftAndRightStyles(getContext(), value); + } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nUtil.java b/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nUtil.java index 181e37f83..496ac0f88 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nUtil.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nUtil.java @@ -26,6 +26,8 @@ public class I18nUtil { "RCTI18nUtil_allowRTL"; private static final String KEY_FOR_PREFS_FORCERTL = "RCTI18nUtil_forceRTL"; + private static final String KEY_FOR_PERFS_MAKE_RTL_FLIP_LEFT_AND_RIGHT_STYLES = + "RCTI18nUtil_makeRTLFlipLeftAndRightStyles"; private I18nUtil() { // Exists only to defeat instantiation. @@ -65,6 +67,14 @@ public class I18nUtil { setPref(context, KEY_FOR_PREFS_ALLOWRTL, allowRTL); } + public boolean doesRTLFlipLeftAndRightStyles(Context context) { + return isPrefSet(context, KEY_FOR_PERFS_MAKE_RTL_FLIP_LEFT_AND_RIGHT_STYLES, true); + } + + public void makeRTLFlipLeftAndRightStyles(Context context, boolean flip) { + setPref(context, KEY_FOR_PERFS_MAKE_RTL_FLIP_LEFT_AND_RIGHT_STYLES, flip); + } + /** * Could be used to test RTL layout with English * Used for development and testing purpose