summaryrefslogtreecommitdiff
path: root/app_expo/i18n
diff options
context:
space:
mode:
Diffstat (limited to 'app_expo/i18n')
-rw-r--r--app_expo/i18n/en.json34
-rw-r--r--app_expo/i18n/i18n.ts22
-rw-r--r--app_expo/i18n/index.ts3
-rw-r--r--app_expo/i18n/ja.json7
-rw-r--r--app_expo/i18n/translate.ts11
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
+}