123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /*
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- #import "RCTI18nUtil.h"
- #import <UIKit/UIKit.h>
- @implementation RCTI18nUtil
- + (instancetype)sharedInstance
- {
- static RCTI18nUtil *sharedInstance;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- sharedInstance = [self new];
- [sharedInstance swapLeftAndRightInRTL:true];
- });
- return sharedInstance;
- }
- /**
- * Check if the app is currently running on an RTL locale.
- * This only happens when the app:
- * - is forcing RTL layout, regardless of the active language (for development purpose)
- * - allows RTL layout when using RTL locale
- */
- - (BOOL)isRTL
- {
- if ([self isRTLForced]) {
- return YES;
- }
- if ([self isRTLAllowed] && [self isApplicationPreferredLanguageRTL]) {
- return YES;
- }
- return NO;
- }
- /**
- * Should be used very early during app start up
- * Before the bridge is initialized
- * @return whether the app allows RTL layout, default is true
- */
- - (BOOL)isRTLAllowed
- {
- NSNumber *value = [[NSUserDefaults standardUserDefaults] objectForKey:@"RCTI18nUtil_allowRTL"];
- if (value == nil) {
- return YES;
- }
- return [value boolValue];
- }
- - (void)allowRTL:(BOOL)rtlStatus
- {
- [[NSUserDefaults standardUserDefaults] setBool:rtlStatus forKey:@"RCTI18nUtil_allowRTL"];
- [[NSUserDefaults standardUserDefaults] synchronize];
- }
- /**
- * Could be used to test RTL layout with English
- * Used for development and testing purpose
- */
- - (BOOL)isRTLForced
- {
- BOOL rtlStatus = [[NSUserDefaults standardUserDefaults] boolForKey:@"RCTI18nUtil_forceRTL"];
- return rtlStatus;
- }
- - (void)forceRTL:(BOOL)rtlStatus
- {
- [[NSUserDefaults standardUserDefaults] setBool:rtlStatus forKey:@"RCTI18nUtil_forceRTL"];
- [[NSUserDefaults standardUserDefaults] synchronize];
- }
- - (BOOL)doLeftAndRightSwapInRTL
- {
- return [[NSUserDefaults standardUserDefaults] boolForKey:@"RCTI18nUtil_makeRTLFlipLeftAndRightStyles"];
- }
- - (void)swapLeftAndRightInRTL:(BOOL)value
- {
- [[NSUserDefaults standardUserDefaults] setBool:value forKey:@"RCTI18nUtil_makeRTLFlipLeftAndRightStyles"];
- [[NSUserDefaults standardUserDefaults] synchronize];
- }
- // Check if the current device language is RTL
- - (BOOL)isDevicePreferredLanguageRTL
- {
- NSLocaleLanguageDirection direction =
- [NSLocale characterDirectionForLanguage:[[NSLocale preferredLanguages] objectAtIndex:0]];
- return direction == NSLocaleLanguageDirectionRightToLeft;
- }
- // Check if the current application language is RTL
- - (BOOL)isApplicationPreferredLanguageRTL
- {
- NSWritingDirection direction = [NSParagraphStyle defaultWritingDirectionForLanguage:nil];
- return direction == NSWritingDirectionRightToLeft;
- }
- @end
|