diff options
Diffstat (limited to 'app_expo/i18n')
-rw-r--r-- | app_expo/i18n/en.json | 34 | ||||
-rw-r--r-- | app_expo/i18n/i18n.ts | 22 | ||||
-rw-r--r-- | app_expo/i18n/index.ts | 3 | ||||
-rw-r--r-- | app_expo/i18n/ja.json | 7 | ||||
-rw-r--r-- | app_expo/i18n/translate.ts | 11 |
5 files changed, 77 insertions, 0 deletions
diff --git a/app_expo/i18n/en.json b/app_expo/i18n/en.json new file mode 100644 index 0000000..be5c35c --- /dev/null +++ b/app_expo/i18n/en.json @@ -0,0 +1,34 @@ +{ + "common": { + "ok": "OK!", + "cancel": "Cancel", + "back": "Back" + }, + "errors": { + "invalidEmail": "Invalid email address." + }, + "welcomeScreen": { + "poweredBy": "POWERED BY IGNITE", + "readyForLaunch": "Ready for launch.", + "continue": "CONTINUE" + }, + "demoScreen": { + "howTo": "HOW TO", + "title": "What’s In This Stack?", + "tagLine": "Congratulations, you’ve got a very advanced React Native app template here. Take advantage of this boilerplate!", + "reactotron": "Demo Reactotron", + "demoList": "Demo List", + "androidReactotronHint": "If this doesn't work, ensure the Reactotron desktop app is running, run adb reverse tcp:9090 tcp:9090 from your terminal, and reload the app.", + "iosReactotronHint": "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + "macosReactotronHint": "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + "webReactotronHint": "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + "windowsReactotronHint": "If this doesn't work, ensure the Reactotron desktop app is running and reload app." + }, + "demoListScreen": { + "title": "Demo List" + }, + "storybook": { + "placeholder": "Placeholder", + "field": "Field" + } +} diff --git a/app_expo/i18n/i18n.ts b/app_expo/i18n/i18n.ts new file mode 100644 index 0000000..b29e80b --- /dev/null +++ b/app_expo/i18n/i18n.ts @@ -0,0 +1,22 @@ +import * as Localization from 'expo-localization' +import i18n from 'i18n-js' +import en from './en.json' +import ja from './ja.json' + +i18n.fallbacks = true +i18n.translations = { en, ja } + +i18n.locale = Localization.locale || 'en' + +/** + * Builds up valid keypaths for translations. + * Update to your default locale of choice if not English. + */ +type DefaultLocale = typeof en +export type TxKeyPath = RecursiveKeyOf<DefaultLocale> + +type RecursiveKeyOf<TObj extends Record<string, any>> = { + [TKey in keyof TObj & string]: TObj[TKey] extends Record<string, any> + ? `${TKey}` | `${TKey}.${RecursiveKeyOf<TObj[TKey]>}` + : `${TKey}` +}[keyof TObj & string] diff --git a/app_expo/i18n/index.ts b/app_expo/i18n/index.ts new file mode 100644 index 0000000..b0ff148 --- /dev/null +++ b/app_expo/i18n/index.ts @@ -0,0 +1,3 @@ +import './i18n' +export * from './i18n' +export * from './translate' diff --git a/app_expo/i18n/ja.json b/app_expo/i18n/ja.json new file mode 100644 index 0000000..7f53c8c --- /dev/null +++ b/app_expo/i18n/ja.json @@ -0,0 +1,7 @@ +{ + "common": { + "ok": "OK 🇯🇵", + "cancel": "Cancel 🇯🇵", + "back": "Back 🇯🇵" + } +} diff --git a/app_expo/i18n/translate.ts b/app_expo/i18n/translate.ts new file mode 100644 index 0000000..6481874 --- /dev/null +++ b/app_expo/i18n/translate.ts @@ -0,0 +1,11 @@ +import i18n from 'i18n-js' +import { TxKeyPath } from './i18n' + +/** + * Translates text. + * + * @param key The i18n key. + */ +export function translate(key: TxKeyPath, options?: i18n.TranslateOptions) { + return key ? i18n.t(key, options) : null +} |