UNPKG

1.56 kBPlain TextView Raw
1// Copyright 2018-present 650 Industries. All rights reserved.
2
3#import <EXLocalization/EXLocalization.h>
4
5@implementation EXLocalization
6
7UM_EXPORT_MODULE(ExpoLocalization)
8
9/*
10 * Thanks to RNLocalize
11 * https://github.com/react-native-community/react-native-localize/blame/e9e01ce65e3891241c88adf162679ab8e37759e3/ios/RNLanguages.m#L13
12 */
13
14UM_EXPORT_METHOD_AS(getLocalizationAsync,
15 getLocalizationAsync:(UMPromiseResolveBlock)resolve
16 rejecter:(UMPromiseRejectBlock)reject)
17{
18 resolve([self constantsToExport]);
19}
20
21- (NSDictionary *)constantsToExport
22{
23 NSArray<NSString *> *preferredLocales = [NSLocale preferredLanguages];
24 if (preferredLocales == nil) {
25 NSString *currentLocale = [[NSLocale currentLocale] localeIdentifier];
26 if (currentLocale == nil) {
27 currentLocale = @"en_US";
28 }
29 preferredLocales = @[currentLocale];
30 }
31
32 NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone];
33 NSString *region = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode];
34
35 return @{
36 @"isRTL": @([self isRTL]),
37 @"locale": [preferredLocales objectAtIndex:0],
38 @"locales": preferredLocales,
39 @"timezone": [currentTimeZone name],
40 @"isoCurrencyCodes": [NSLocale ISOCurrencyCodes],
41 @"region": UMNullIfNil(region)
42 };
43}
44
45- (BOOL)isRTL
46{
47 // https://stackoverflow.com/a/14183124/1123156
48 return [NSLocale characterDirectionForLanguage:[NSLocale preferredLanguages][0]] == NSLocaleLanguageDirectionRightToLeft;
49}
50
51@end