From 59d73ad1dfbc7800aeef46761703cc05d46516cb Mon Sep 17 00:00:00 2001 From: Henry Tao Date: Tue, 23 Jun 2020 09:09:40 -0400 Subject: [PATCH] Fix default locale Fix systemLocale Fix systemLocale (2) --- android/settings.gradle | 2 ++ ios/Podfile | 2 ++ package.json | 1 + src/App.tsx | 4 ++-- src/locale/index.ts | 1 + src/locale/locale.ts | 6 ++++++ src/services/StorageService/StorageService.ts | 3 ++- src/services/StorageService/StorageServiceProvider.tsx | 3 ++- yarn.lock | 5 +++++ 9 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 src/locale/locale.ts diff --git a/android/settings.gradle b/android/settings.gradle index d918fa64..1ab0a964 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,4 +1,6 @@ rootProject.name = 'CovidShield' +include ':react-native-localize' +project(':react-native-localize').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-localize/android') include ':react-native-system-setting' project(':react-native-system-setting').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-system-setting/android') include ':react-native-sensitive-info' diff --git a/ios/Podfile b/ios/Podfile index 1be380cf..37d6d5ff 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -93,6 +93,8 @@ target 'CovidShield' do pod 'RCTSystemSetting', :path => '../node_modules/react-native-system-setting' + pod 'RNLocalize', :path => '../node_modules/react-native-localize' + target 'CovidShieldTests' do inherit! :complete # Pods for testing diff --git a/package.json b/package.json index b875686c..261b08cb 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "react-native-background-fetch": "^3.0.4", "react-native-config": "^1.1.0", "react-native-gesture-handler": "^1.6.1", + "react-native-localize": "^1.4.0", "react-native-markdown-display": "^6.1.0", "react-native-permissions": "^2.1.4", "react-native-reanimated": "^1.8.0", diff --git a/src/App.tsx b/src/App.tsx index e70307ad..1b298b40 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -21,7 +21,7 @@ import {TestMode} from 'testMode'; import {TEST_MODE, SUBMIT_URL, RETRIEVE_URL, HMAC_KEY, REGION} from 'env'; import {ExposureNotificationServiceProvider} from 'services/ExposureNotificationService'; import {BackendService} from 'services/BackendService'; -import {SharedTranslations} from 'locale'; +import {SharedTranslations, getSystemLocale} from 'locale'; import {ThemeProvider} from 'shared/theme'; // grabs the ip address @@ -33,7 +33,7 @@ if (__DEV__) { } const i18nManager = new I18nManager({ - locale: 'en', + locale: getSystemLocale(), onError(error) { console.log('>>> i18N', error); }, diff --git a/src/locale/index.ts b/src/locale/index.ts index 4dc8fc6a..fdc5b4f9 100644 --- a/src/locale/index.ts +++ b/src/locale/index.ts @@ -1,2 +1,3 @@ export * from './i18n'; +export * from './locale'; export * from './SharedTranslations'; diff --git a/src/locale/locale.ts b/src/locale/locale.ts new file mode 100644 index 00000000..e6d124d9 --- /dev/null +++ b/src/locale/locale.ts @@ -0,0 +1,6 @@ +import * as RNLocalize from 'react-native-localize'; + +export const getSystemLocale = () => { + const locales = RNLocalize.getLocales(); + return locales.length > 0 ? locales[0].languageCode : 'en'; +}; diff --git a/src/services/StorageService/StorageService.ts b/src/services/StorageService/StorageService.ts index 2916d835..2ef50e1e 100644 --- a/src/services/StorageService/StorageService.ts +++ b/src/services/StorageService/StorageService.ts @@ -1,6 +1,7 @@ import AsyncStorage from '@react-native-community/async-storage'; import {Observable} from 'shared/Observable'; import {Region} from 'shared/Region'; +import {getSystemLocale} from 'locale'; export enum Key { IsOnboarded = 'IsOnboarded', @@ -17,7 +18,7 @@ export class StorageService { constructor() { this.isOnboarding = new Observable(true); - this.locale = new Observable('en'); + this.locale = new Observable(getSystemLocale()); this.ready = new Observable(false); this.region = new Observable(undefined); this.init(); diff --git a/src/services/StorageService/StorageServiceProvider.tsx b/src/services/StorageService/StorageServiceProvider.tsx index 1d221eb0..4b2feb1e 100644 --- a/src/services/StorageService/StorageServiceProvider.tsx +++ b/src/services/StorageService/StorageServiceProvider.tsx @@ -1,6 +1,7 @@ import React, {createContext, useCallback, useContext, useEffect, useMemo, useState} from 'react'; import AsyncStorage from '@react-native-community/async-storage'; import {I18nContext} from '@shopify/react-i18n'; +import {getSystemLocale} from 'locale'; import {DevSettings} from 'react-native'; import {StorageService} from './StorageService'; @@ -45,7 +46,7 @@ export const useStorage = () => { const reset = useCallback(async () => { setOnboarded(false); - setLocale('en'); + setLocale(getSystemLocale()); setRegion(undefined); await AsyncStorage.clear(); if (__DEV__) { diff --git a/yarn.lock b/yarn.lock index e0f87c85..1a40f02d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7155,6 +7155,11 @@ react-native-iphone-x-helper@^1.2.1: resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz#645e2ffbbb49e80844bb4cbbe34a126fda1e6772" integrity sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ== +react-native-localize@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/react-native-localize/-/react-native-localize-1.4.0.tgz#4653596d066d0941c48f5404dc1c0d08b6950443" + integrity sha512-W2MQxm6hzD549ZbZcbWzWtYJseY7S7WR2WgsNhm9ULmbwP7tXFfOTbkJjQoqgPXYSXogKN3srXhntVsNZL0Ksw== + react-native-markdown-display@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/react-native-markdown-display/-/react-native-markdown-display-6.1.0.tgz#13b09b093b38fbc8beb5fd0fa71d5abec702e8ef"