2021-04-16 12:43:46 +00:00
|
|
|
import { I18nManager } from 'react-native'
|
|
|
|
import i18n from 'i18n-js'
|
|
|
|
import moment from 'moment'
|
2021-04-18 18:26:25 +00:00
|
|
|
import 'moment/locale/ar'
|
|
|
|
import 'moment/locale/de'
|
|
|
|
import 'moment/locale/pl'
|
|
|
|
import 'moment/locale/sv'
|
2021-04-16 12:43:46 +00:00
|
|
|
|
|
|
|
const changeListeners: Record<string, any> = {}
|
|
|
|
|
|
|
|
let allString: Record<string, any> = {}
|
|
|
|
|
|
|
|
let Strings: Record<string, any> = {}
|
|
|
|
let languageCode: string
|
|
|
|
|
2021-04-16 20:07:42 +00:00
|
|
|
const rtlList: { [key: string]: boolean } = {
|
2021-04-16 13:12:30 +00:00
|
|
|
en: false,
|
2021-04-18 18:26:25 +00:00
|
|
|
de: false,
|
2021-04-18 13:06:42 +00:00
|
|
|
pl: false,
|
2021-04-16 13:12:30 +00:00
|
|
|
sv: false,
|
2021-04-16 20:07:42 +00:00
|
|
|
so: false,
|
|
|
|
ar: true,
|
|
|
|
}
|
|
|
|
|
2021-04-19 09:13:34 +00:00
|
|
|
export const isRTL = (langCode: string) => {
|
|
|
|
if (!rtlList.hasOwnProperty(langCode)) {
|
2021-04-16 20:07:42 +00:00
|
|
|
return false
|
|
|
|
}
|
|
|
|
return rtlList[langCode]
|
|
|
|
}
|
2021-04-16 13:12:30 +00:00
|
|
|
|
2021-04-16 12:43:46 +00:00
|
|
|
export const LanguageService = {
|
|
|
|
get: () => Strings,
|
|
|
|
getLanguageCode: () => languageCode,
|
|
|
|
setAllData: ({ data }: { data: Record<string, any> }) => {
|
|
|
|
allString = data
|
|
|
|
},
|
2021-04-16 19:46:18 +00:00
|
|
|
seti18nConfig: ({ langCode }: { langCode?: string }) => {
|
|
|
|
if (langCode) {
|
|
|
|
i18n.translations = { [langCode]: Strings }
|
|
|
|
i18n.locale = langCode
|
2021-04-16 20:07:42 +00:00
|
|
|
I18nManager.forceRTL(isRTL(langCode))
|
2021-04-16 19:46:18 +00:00
|
|
|
}
|
2021-04-28 13:20:44 +00:00
|
|
|
i18n.fallbacks = true
|
|
|
|
i18n.defaultLocale = 'sv'
|
|
|
|
i18n.missingBehaviour = 'guess'
|
2021-04-16 15:43:31 +00:00
|
|
|
|
2021-04-16 12:43:46 +00:00
|
|
|
moment.locale(langCode)
|
|
|
|
},
|
|
|
|
setLanguageCode: ({ langCode }: { langCode?: string }) => {
|
|
|
|
if (langCode && allString[langCode]) {
|
|
|
|
languageCode = langCode
|
|
|
|
Strings = allString[langCode]
|
|
|
|
} else {
|
|
|
|
const dataKeys = Object.keys(allString)
|
|
|
|
languageCode = dataKeys[0]
|
|
|
|
Strings = allString[languageCode]
|
|
|
|
}
|
|
|
|
Object.keys(changeListeners).forEach((k) => {
|
|
|
|
changeListeners[k](langCode)
|
|
|
|
})
|
|
|
|
return Strings
|
|
|
|
},
|
|
|
|
|
2021-04-16 19:46:18 +00:00
|
|
|
// @ts-expect-error Fix later, Typecast callback
|
2021-04-16 12:43:46 +00:00
|
|
|
onChange: ({ key }: { key: string }, cb) => {
|
2021-04-16 19:46:18 +00:00
|
|
|
// @ts-expect-error Fix later, Typecast callback
|
2021-04-16 12:43:46 +00:00
|
|
|
changeListeners[`${key}`] = (langCode) => cb(langCode)
|
|
|
|
},
|
|
|
|
}
|
2021-04-28 13:20:44 +00:00
|
|
|
|
|
|
|
export const i18nService = i18n
|