create-expo-stack 2.4.3 → 2.5.0-next.738ca1b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/build/commands/create-expo-stack.js +12 -4
- package/build/templates/base/App.tsx.ejs +32 -6
- package/build/templates/base/app.json.ejs +6 -0
- package/build/templates/base/package.json.ejs +16 -6
- package/build/templates/base/prettier.config.js.ejs +11 -0
- package/build/templates/packages/expo-router/drawer/app/(drawer)/index.tsx.ejs +18 -0
- package/build/templates/packages/expo-router/drawer/app/_layout.tsx.ejs +4 -0
- package/build/templates/packages/expo-router/stack/app/_layout.tsx.ejs +3 -0
- package/build/templates/packages/expo-router/stack/app/index.tsx.ejs +18 -0
- package/build/templates/packages/expo-router/tabs/app/(tabs)/index.tsx.ejs +18 -0
- package/build/templates/packages/expo-router/tabs/app/_layout.tsx.ejs +3 -0
- package/build/templates/packages/i18next/components/InternalizationExample.tsx.ejs +23 -0
- package/build/templates/packages/i18next/core/i18n/fallbackChecker.ts.ejs +13 -0
- package/build/templates/packages/i18next/core/i18n/init.ts.ejs +24 -0
- package/build/templates/packages/i18next/core/i18n/languageDetector.ts.ejs +13 -0
- package/build/templates/packages/i18next/translation/en.json.ejs +8 -0
- package/build/templates/packages/i18next/translation/fr.json.ejs +8 -0
- package/build/templates/packages/i18next/translation/index.ts.ejs +20 -0
- package/build/templates/packages/react-navigation/App.tsx.ejs +3 -0
- package/build/templates/packages/react-navigation/screens/home.tsx.ejs +19 -1
- package/build/templates/packages/react-navigation/screens/one.tsx.ejs +18 -0
- package/build/templates/packages/react-navigation/screens/overview.tsx.ejs +18 -1
- package/build/types/types.d.ts +3 -2
- package/build/types/utilities/configureProjectFiles.d.ts +1 -1
- package/build/types/utilities/generateProjectFiles.d.ts +1 -1
- package/build/types.js +3 -2
- package/build/utilities/configureProjectFiles.js +20 -11
- package/build/utilities/generateProjectFiles.js +7 -3
- package/build/utilities/runCLI.js +24 -8
- package/build/utilities/showHelp.js +4 -1
- package/package.json +66 -66
- package/build/templates/base/.prettierrc +0 -7
- package/build/templates/packages/expo-router/index.js +0 -4
- package/build/templates/packages/expo-router/index.ts +0 -1
- package/build/types/templates/packages/expo-router/index.d.ts +0 -1
- /package/build/templates/packages/expo-router/drawer/app/{[...unmatched].tsx.ejs → +not-found.tsx.ejs} +0 -0
- /package/build/templates/packages/expo-router/stack/app/{[...unmatched].tsx.ejs → +not-found.tsx.ejs} +0 -0
- /package/build/templates/packages/expo-router/tabs/app/{[...unmatched].tsx.ejs → +not-found.tsx.ejs} +0 -0
package/README.md
CHANGED
|
@@ -43,14 +43,14 @@ Each project is generated based on the results of the CLI, on a per-file basis.
|
|
|
43
43
|
|
|
44
44
|
| Library | Category | Version | Description |
|
|
45
45
|
| ------------------ | ------------------- | ------- | ---------------------------------------------- |
|
|
46
|
-
| React Native | Mobile Framework | v0.
|
|
46
|
+
| React Native | Mobile Framework | v0.73 | The best cross-platform mobile framework |
|
|
47
47
|
| React | UI Framework | v18 | The most popular UI framework in the world |
|
|
48
|
-
| TypeScript | Language |
|
|
48
|
+
| TypeScript | Language | v5 | Static typechecking |
|
|
49
49
|
| React Navigation | Navigation | v6 | Performant and consistent navigation framework |
|
|
50
|
-
| Expo | SDK |
|
|
50
|
+
| Expo | SDK | v50 | Allows (optional) Expo modules |
|
|
51
51
|
| Expo Font | Custom Fonts | v11 | Import custom fonts |
|
|
52
52
|
| Expo Linking | URL Handling | v5 | Open your app via a URL |
|
|
53
|
-
| Expo Router | Navigation |
|
|
53
|
+
| Expo Router | Navigation | v3 | File-based routing in React-Native |
|
|
54
54
|
| Expo Splash Screen | Splash Screen | v0.18 | Custom splash screen |
|
|
55
55
|
| Expo Status Bar | Status Bar Library | v1 | Status bar support |
|
|
56
56
|
| Expo System UI | System UI Library | v2 | System UI support |
|
|
@@ -50,7 +50,7 @@ var command = {
|
|
|
50
50
|
name: 'create-expo-stack',
|
|
51
51
|
description: 'Create a new Expo project',
|
|
52
52
|
run: function (toolbox) { return __awaiter(void 0, void 0, void 0, function () {
|
|
53
|
-
var _a, exists, removeAsync, _b, first, options, _c, error, info, highlight, success, warning, prompt, printSomethingWentWrong, useDefault, skipCLI, useBlankTypescript, optionsPassedIn, cliResults, askName, name, pathSegments, err_1, generateRerunScript, packageManager, packages, authenticationPackage, navigationPackage, stylingPackage, files, formattedFiles, err_2;
|
|
53
|
+
var _a, exists, removeAsync, _b, first, options, _c, error, info, highlight, success, warning, prompt, printSomethingWentWrong, useDefault, skipCLI, useBlankTypescript, optionsPassedIn, cliResults, askName, name, pathSegments, err_1, generateRerunScript, packageManager, packages, authenticationPackage, navigationPackage, stylingPackage, internalizationPackage, files, formattedFiles, err_2;
|
|
54
54
|
return __generator(this, function (_d) {
|
|
55
55
|
switch (_d.label) {
|
|
56
56
|
case 0:
|
|
@@ -263,6 +263,13 @@ var command = {
|
|
|
263
263
|
type: 'authentication'
|
|
264
264
|
});
|
|
265
265
|
}
|
|
266
|
+
// Internalization packages
|
|
267
|
+
if (options.i18next) {
|
|
268
|
+
cliResults.packages.push({
|
|
269
|
+
name: 'i18next',
|
|
270
|
+
type: 'internationalization'
|
|
271
|
+
});
|
|
272
|
+
}
|
|
266
273
|
// By this point, all cliResults should be set
|
|
267
274
|
info('');
|
|
268
275
|
highlight('Your project configuration:');
|
|
@@ -309,10 +316,11 @@ var command = {
|
|
|
309
316
|
authenticationPackage = packages.find(function (p) { return p.type === 'authentication'; }) || undefined;
|
|
310
317
|
navigationPackage = packages.find(function (p) { return p.type === 'navigation'; }) || undefined;
|
|
311
318
|
stylingPackage = packages.find(function (p) { return p.type === 'styling'; });
|
|
319
|
+
internalizationPackage = packages.find(function (p) { return p.type === 'internationalization'; });
|
|
312
320
|
files = [];
|
|
313
|
-
files = (0, utilities_1.configureProjectFiles)(authenticationPackage, files, navigationPackage, stylingPackage, toolbox, cliResults);
|
|
321
|
+
files = (0, utilities_1.configureProjectFiles)(authenticationPackage, files, navigationPackage, stylingPackage, toolbox, cliResults, internalizationPackage);
|
|
314
322
|
formattedFiles = [];
|
|
315
|
-
formattedFiles = (0, utilities_1.generateProjectFiles)(authenticationPackage, cliResults, files, formattedFiles, navigationPackage, packageManager, stylingPackage, toolbox);
|
|
323
|
+
formattedFiles = (0, utilities_1.generateProjectFiles)(authenticationPackage, cliResults, files, formattedFiles, navigationPackage, packageManager, stylingPackage, toolbox, internalizationPackage);
|
|
316
324
|
return [4 /*yield*/, (0, utilities_1.printOutput)(cliResults, formattedFiles, toolbox, stylingPackage)];
|
|
317
325
|
case 16:
|
|
318
326
|
_d.sent();
|
|
@@ -334,4 +342,4 @@ var command = {
|
|
|
334
342
|
}); }
|
|
335
343
|
};
|
|
336
344
|
exports.default = command;
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWV4cG8tc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY3JlYXRlLWV4cG8tc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFN0IsMENBU3NCO0FBQ3RCLDBDQUFnRTtBQUNoRSxrQ0FBeUQ7QUFDekQsMkZBQXFFO0FBQ3JFLHdFQUF1RTtBQUV2RSxJQUFNLHlCQUF5QixHQUFHLG9IQUFvSCxDQUFDO0FBRXZKLElBQU0sT0FBTyxHQUFtQjtJQUM5QixJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLFdBQVcsRUFBRSwyQkFBMkI7SUFDeEMsR0FBRyxFQUFFLFVBQU8sT0FBTzs7Ozs7b0JBRWYsS0FJRSxPQUFPLFdBSjBCLEVBQXJCLE1BQU0sWUFBQSxFQUFFLFdBQVcsaUJBQUEsRUFDakMsS0FHRSxPQUFPLFdBSHFCLEVBQWhCLEtBQUssV0FBQSxFQUFFLE9BQU8sYUFBQSxFQUM1QixLQUVFLE9BQU8sTUFGMEMsRUFBMUMsS0FBSyxXQUFBLEVBQUUsSUFBSSxVQUFBLEVBQUUsU0FBUyxlQUFBLEVBQUUsT0FBTyxhQUFBLEVBQUUsT0FBTyxhQUFBLEVBQ2pELE1BQU0sR0FDSixPQUFPLE9BREgsQ0FDSTtvQkFFTix1QkFBdUIsR0FBRzt3QkFDOUIsSUFBSSxDQUFDLHVFQUE2RCxDQUFDLENBQUM7d0JBQ3BFLElBQUksQ0FDRiwySEFBMkgsQ0FDNUgsQ0FBQzt3QkFDRixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1gsQ0FBQyxDQUFDO29CQUNGLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzlCLElBQUEsb0JBQVEsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxD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
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWV4cG8tc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY3JlYXRlLWV4cG8tc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFN0IsMENBU3NCO0FBQ3RCLDBDQUFnRTtBQUNoRSxrQ0FBeUQ7QUFDekQsMkZBQXFFO0FBQ3JFLHdFQUF1RTtBQUV2RSxJQUFNLHlCQUF5QixHQUFHLG9IQUFvSCxDQUFDO0FBRXZKLElBQU0sT0FBTyxHQUFtQjtJQUM5QixJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLFdBQVcsRUFBRSwyQkFBMkI7SUFDeEMsR0FBRyxFQUFFLFVBQU8sT0FBTzs7Ozs7b0JBRWYsS0FJRSxPQUFPLFdBSjBCLEVBQXJCLE1BQU0sWUFBQSxFQUFFLFdBQVcsaUJBQUEsRUFDakMsS0FHRSxPQUFPLFdBSHFCLEVBQWhCLEtBQUssV0FBQSxFQUFFLE9BQU8sYUFBQSxFQUM1QixLQUVFLE9BQU8sTUFGMEMsRUFBMUMsS0FBSyxXQUFBLEVBQUUsSUFBSSxVQUFBLEVBQUUsU0FBUyxlQUFBLEVBQUUsT0FBTyxhQUFBLEVBQUUsT0FBTyxhQUFBLEVBQ2pELE1BQU0sR0FDSixPQUFPLE9BREgsQ0FDSTtvQkFFTix1QkFBdUIsR0FBRzt3QkFDOUIsSUFBSSxDQUFDLHVFQUE2RCxDQUFDLENBQUM7d0JBQ3BFLElBQUksQ0FDRiwySEFBMkgsQ0FDNUgsQ0FBQzt3QkFDRixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1gsQ0FBQyxDQUFDO29CQUNGLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzlCLElBQUEsb0JBQVEsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxD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
|
|
@@ -19,13 +19,24 @@ import React from 'react';
|
|
|
19
19
|
import { StyleSheet, Text, View } from 'react-native';
|
|
20
20
|
<% } %>
|
|
21
21
|
|
|
22
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
23
|
+
import { InternalizationExample } from 'components/InternalizationExample';
|
|
24
|
+
|
|
25
|
+
import './translation';
|
|
26
|
+
<% } %>
|
|
27
|
+
|
|
28
|
+
|
|
22
29
|
import { StatusBar } from 'expo-status-bar';
|
|
23
30
|
|
|
24
31
|
<% if (props.stylingPackage?.name === "nativewind") {%>
|
|
25
32
|
export default function App() {
|
|
26
33
|
return (
|
|
27
34
|
<View className={styles.container}>
|
|
35
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
36
|
+
<InternalizationExample />
|
|
37
|
+
<% } else { %>
|
|
28
38
|
<Text>Open up App.tsx to start working on your app!</Text>
|
|
39
|
+
<% } %>
|
|
29
40
|
<StatusBar style="auto" />
|
|
30
41
|
</View >
|
|
31
42
|
);
|
|
@@ -46,27 +57,38 @@ import { StatusBar } from 'expo-status-bar';
|
|
|
46
57
|
return (
|
|
47
58
|
<TamaguiProvider config={config}>
|
|
48
59
|
<MyView>
|
|
49
|
-
|
|
60
|
+
<Text>Open up App.tsx to start working on your app!</Text>
|
|
61
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
62
|
+
<InternalizationExample />
|
|
63
|
+
<% } %>
|
|
50
64
|
<StatusBar style="auto" />
|
|
51
65
|
</MyView>
|
|
52
66
|
</TamaguiProvider >
|
|
53
67
|
);
|
|
54
68
|
}
|
|
55
69
|
<% } else if (props.stylingPackage?.name === "restyle") {%>
|
|
56
|
-
export default function App() {
|
|
70
|
+
export default function App() {
|
|
57
71
|
return (
|
|
58
72
|
<ThemeProvider theme={theme}>
|
|
59
|
-
|
|
73
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
74
|
+
<InternalizationExample />
|
|
75
|
+
<% } else { %>
|
|
76
|
+
<Text>Open up App.tsx to start working on your app!</Text>
|
|
77
|
+
<% } %>
|
|
60
78
|
<StatusBar style="auto" />
|
|
61
79
|
</ThemeProvider>
|
|
62
80
|
);
|
|
63
81
|
}
|
|
64
82
|
<% } else if (props.stylingPackage?.name === "unistyles") {%>
|
|
65
|
-
export default function App() {
|
|
83
|
+
export default function App() {
|
|
66
84
|
const {styles} = useStyles(stylesheet)
|
|
67
85
|
return (
|
|
68
86
|
<View style={styles.container}>
|
|
69
|
-
|
|
87
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
88
|
+
<InternalizationExample />
|
|
89
|
+
<% } else { %>
|
|
90
|
+
<Text>Open up App.tsx to start working on your app!</Text>
|
|
91
|
+
<% } %>
|
|
70
92
|
<StatusBar style="auto" />
|
|
71
93
|
</View >
|
|
72
94
|
);
|
|
@@ -84,7 +106,11 @@ import { StatusBar } from 'expo-status-bar';
|
|
|
84
106
|
export default function App() {
|
|
85
107
|
return (
|
|
86
108
|
<View style={styles.container}>
|
|
87
|
-
|
|
109
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
110
|
+
<InternalizationExample />
|
|
111
|
+
<% } else { %>
|
|
112
|
+
<Text>Open up App.tsx to start working on your app!</Text>
|
|
113
|
+
<% } %>
|
|
88
114
|
<StatusBar style="auto" />
|
|
89
115
|
</View >
|
|
90
116
|
);
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "<%= props.projectName %>",
|
|
3
3
|
"version": "1.0.0",
|
|
4
|
+
<% if (props.navigationPackage?.name === "expo-router") { %>
|
|
5
|
+
"main": "expo-router/entry",
|
|
6
|
+
<% } %>
|
|
4
7
|
"scripts": {
|
|
5
8
|
"android": "expo start --android",
|
|
6
9
|
<% if (props.packageManager === "bun") { %>
|
|
7
|
-
"format": "
|
|
10
|
+
"format": "eslint \"**/*.{js,jsx,ts,tsx}\" --fix && prettier \"**/*.{js,jsx,ts,tsx,json}\" --write",
|
|
8
11
|
<% } else { %>
|
|
9
12
|
"format": "eslint \"**/*.{js,jsx,ts,tsx}\" --fix && prettier \"**/*.{js,jsx,ts,tsx,json}\" --write",
|
|
10
13
|
<% } %>
|
|
@@ -66,13 +69,13 @@
|
|
|
66
69
|
<% if (props.navigationPackage?.name === "expo-router") { %>
|
|
67
70
|
"@expo/vector-icons": "^14.0.0",
|
|
68
71
|
"expo-linking": "~6.2.2",
|
|
69
|
-
"expo-router": "^3.4.
|
|
72
|
+
"expo-router": "^3.4.7",
|
|
70
73
|
"expo-constants": "~15.4.5",
|
|
71
74
|
"expo-system-ui": "~2.9.3",
|
|
72
75
|
"expo-web-browser": "~12.8.2",
|
|
73
76
|
"react-dom": "18.2.0",
|
|
74
77
|
"react-native-reanimated": "~3.6.2",
|
|
75
|
-
"react-native-web": "~0.19.
|
|
78
|
+
"react-native-web": "~0.19.10",
|
|
76
79
|
<% } %>
|
|
77
80
|
|
|
78
81
|
<% if (props.authenticationPackage?.name === "supabase") { %>
|
|
@@ -85,8 +88,14 @@
|
|
|
85
88
|
"firebase": "^10.5.2",
|
|
86
89
|
"react-native-url-polyfill": "^2.0.0",
|
|
87
90
|
<% } %>
|
|
91
|
+
|
|
92
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
93
|
+
"i18next": "^23.7.20",
|
|
94
|
+
"react-i18next": "^14.0.1",
|
|
95
|
+
"expo-localization": "~14.8.3",
|
|
96
|
+
<% } %>
|
|
88
97
|
|
|
89
|
-
"expo": "~50.0.
|
|
98
|
+
"expo": "~50.0.7",
|
|
90
99
|
"expo-status-bar": "~1.11.1",
|
|
91
100
|
"react": "18.2.0",
|
|
92
101
|
"react-native": "0.73.4"
|
|
@@ -102,14 +111,15 @@
|
|
|
102
111
|
"@typescript-eslint/parser": "^6.7.2",
|
|
103
112
|
"eslint": "^8.50.0",
|
|
104
113
|
"eslint-config-universe": "^12.0.0",
|
|
105
|
-
"prettier": "^3.
|
|
114
|
+
"prettier": "^3.2.5",
|
|
106
115
|
<% if (props.stylingPackage?.name === "nativewind") { %>
|
|
107
116
|
"tailwindcss": "^3.4.0",
|
|
117
|
+
"prettier-plugin-tailwindcss": "^0.5.11",
|
|
108
118
|
<% } %>
|
|
109
119
|
<% if (props.stylingPackage?.name === "tamagui") { %>
|
|
110
120
|
"@tamagui/babel-plugin": "1.74.8",
|
|
111
121
|
<% } %>
|
|
112
|
-
"typescript": "^5.
|
|
122
|
+
"typescript": "^5.3.3"
|
|
113
123
|
},
|
|
114
124
|
"eslintConfig": {
|
|
115
125
|
"extends": "universe/native"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
printWidth: 100,
|
|
3
|
+
tabWidth: 2,
|
|
4
|
+
singleQuote: true,
|
|
5
|
+
bracketSameLine: true,
|
|
6
|
+
trailingComma: 'es5',
|
|
7
|
+
<% if (props.stylingPackage?.name === "nativewind") { %>
|
|
8
|
+
plugins: [require.resolve("prettier-plugin-tailwindcss")],
|
|
9
|
+
tailwindAttributes: ["className"],
|
|
10
|
+
<% } %>
|
|
11
|
+
};
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
<% } else if (props.stylingPackage?.name === "stylesheet") { %>
|
|
11
11
|
import { StyleSheet, Text, View } from "react-native";
|
|
12
12
|
<% } %>
|
|
13
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
14
|
+
import { InternalizationExample } from '../../components/InternalizationExample';
|
|
15
|
+
<% } %>
|
|
13
16
|
|
|
14
17
|
import EditScreenInfo from "../../components/edit-screen-info";
|
|
15
18
|
|
|
@@ -20,6 +23,9 @@ const Page = () => {
|
|
|
20
23
|
return (
|
|
21
24
|
<View style={theme.components.container}>
|
|
22
25
|
<Text style={theme.components.title}>Home</Text>
|
|
26
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
27
|
+
<InternalizationExample />
|
|
28
|
+
<% } %>
|
|
23
29
|
<View style={theme.components.separator} />
|
|
24
30
|
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
25
31
|
</View>
|
|
@@ -28,6 +34,9 @@ const Page = () => {
|
|
|
28
34
|
return (
|
|
29
35
|
<View className={styles.container}>
|
|
30
36
|
<Text className={styles.title}>Home</Text>
|
|
37
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
38
|
+
<InternalizationExample />
|
|
39
|
+
<% } %>
|
|
31
40
|
<View className={styles.separator} />
|
|
32
41
|
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
33
42
|
</View>
|
|
@@ -37,6 +46,9 @@ const Page = () => {
|
|
|
37
46
|
<Theme name="light">
|
|
38
47
|
<YStack flex={1} alignItems="center" justifyContent="center">
|
|
39
48
|
<H2>Home</H2>
|
|
49
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
50
|
+
<InternalizationExample />
|
|
51
|
+
<% } %>
|
|
40
52
|
<Separator />
|
|
41
53
|
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
42
54
|
</YStack>
|
|
@@ -46,6 +58,9 @@ const Page = () => {
|
|
|
46
58
|
return (
|
|
47
59
|
<Box flex={1} alignItems="center" justifyContent="center">
|
|
48
60
|
<Text variant="title">Home</Text>
|
|
61
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
62
|
+
<InternalizationExample />
|
|
63
|
+
<% } %>
|
|
49
64
|
<Box height={1} marginVertical="l_32" width="80%" />
|
|
50
65
|
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
51
66
|
</Box>
|
|
@@ -54,6 +69,9 @@ const Page = () => {
|
|
|
54
69
|
return (
|
|
55
70
|
<View style={styles.container}>
|
|
56
71
|
<Text style={styles.title}>Home</Text>
|
|
72
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
73
|
+
<InternalizationExample />
|
|
74
|
+
<% } %>
|
|
57
75
|
<View style={styles.separator} />
|
|
58
76
|
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
59
77
|
</View>
|
|
@@ -5,6 +5,10 @@ import '../global.css';
|
|
|
5
5
|
import '../unistyles';
|
|
6
6
|
<% } %>
|
|
7
7
|
|
|
8
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
9
|
+
import '../translation';
|
|
10
|
+
<% } %>
|
|
11
|
+
|
|
8
12
|
import 'react-native-gesture-handler';
|
|
9
13
|
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
10
14
|
import { Stack } from 'expo-router';
|
|
@@ -4,6 +4,9 @@ import '../global.css';
|
|
|
4
4
|
<% if (props.stylingPackage?.name === "unistyles") { %>
|
|
5
5
|
import '../unistyles';
|
|
6
6
|
<% } %>
|
|
7
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
8
|
+
import '../translation';
|
|
9
|
+
<% } %>
|
|
7
10
|
|
|
8
11
|
<% if (props.stylingPackage?.name === "tamagui") { %>
|
|
9
12
|
import { useFonts } from 'expo-font';
|
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
<% } else { %>
|
|
13
13
|
import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
|
|
14
14
|
<% } %>
|
|
15
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
16
|
+
import { InternalizationExample } from '../components/InternalizationExample';
|
|
17
|
+
<% } %>
|
|
15
18
|
import { Stack } from "expo-router";
|
|
16
19
|
|
|
17
20
|
import { Link } from "expo-router";
|
|
@@ -33,6 +36,9 @@ export default function Page() {
|
|
|
33
36
|
<View>
|
|
34
37
|
<Text className={styles.title}>Hello World</Text>
|
|
35
38
|
<Text className={styles.subtitle}>This is the first page of your app.</Text>
|
|
39
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
40
|
+
<InternalizationExample />
|
|
41
|
+
<% } %>
|
|
36
42
|
</View>
|
|
37
43
|
<Link href={{ pathname: "/details", params: { name: "Dan" } }} asChild>
|
|
38
44
|
<TouchableOpacity className={styles.button} >
|
|
@@ -48,6 +54,9 @@ export default function Page() {
|
|
|
48
54
|
<YStack>
|
|
49
55
|
<Title>Hello World</Title>
|
|
50
56
|
<Subtitle>This is the first page of your app.</Subtitle>
|
|
57
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
58
|
+
<InternalizationExample />
|
|
59
|
+
<% } %>
|
|
51
60
|
</YStack>
|
|
52
61
|
<Link href={{ pathname: "/details", params: { name: "Dan" } }} asChild>
|
|
53
62
|
<Button><ButtonText>Show Details</ButtonText></Button>
|
|
@@ -64,6 +73,9 @@ export default function Page() {
|
|
|
64
73
|
<Text variant="large" color="darkGray">
|
|
65
74
|
This is the first page of your app.
|
|
66
75
|
</Text>
|
|
76
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
77
|
+
<InternalizationExample />
|
|
78
|
+
<% } %>
|
|
67
79
|
</Box>
|
|
68
80
|
<Link href={{ pathname: '/details', params: { name: 'Dan' } }} asChild>
|
|
69
81
|
<TouchableOpacity
|
|
@@ -84,6 +96,9 @@ export default function Page() {
|
|
|
84
96
|
<View>
|
|
85
97
|
<Text style={theme.components.title}>Hello World</Text>
|
|
86
98
|
<Text style={theme.components.subtitle}>This is the first page of your app.</Text>
|
|
99
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
100
|
+
<InternalizationExample />
|
|
101
|
+
<% } %>
|
|
87
102
|
</View>
|
|
88
103
|
<Link href={{ pathname: '/details', params: { name: 'Dan' } }} asChild>
|
|
89
104
|
<TouchableOpacity style={theme.components.button} >
|
|
@@ -99,6 +114,9 @@ export default function Page() {
|
|
|
99
114
|
<View>
|
|
100
115
|
<Text style={styles.title}>Hello World</Text>
|
|
101
116
|
<Text style={styles.subtitle}>This is the first page of your app.</Text>
|
|
117
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
118
|
+
<InternalizationExample />
|
|
119
|
+
<% } %>
|
|
102
120
|
</View>
|
|
103
121
|
<Link href={{ pathname: "/details", params: { name: "Dan" } }} asChild>
|
|
104
122
|
<TouchableOpacity style={styles.button} >
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
<% } else { %>
|
|
11
11
|
import { StyleSheet, Text, View } from "react-native";
|
|
12
12
|
<% } %>
|
|
13
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
14
|
+
import { InternalizationExample } from '../../components/InternalizationExample';
|
|
15
|
+
<% } %>
|
|
13
16
|
|
|
14
17
|
import EditScreenInfo from "../../components/edit-screen-info";
|
|
15
18
|
|
|
@@ -20,6 +23,9 @@ export default function TabOneScreen() {
|
|
|
20
23
|
return (
|
|
21
24
|
<View style={theme.components.container}>
|
|
22
25
|
<Text style={theme.components.title}>Tab One</Text>
|
|
26
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
27
|
+
<InternalizationExample />
|
|
28
|
+
<% } %>
|
|
23
29
|
<View style={theme.components.separator} />
|
|
24
30
|
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
25
31
|
</View>
|
|
@@ -28,6 +34,9 @@ export default function TabOneScreen() {
|
|
|
28
34
|
return (
|
|
29
35
|
<View className={styles.container}>
|
|
30
36
|
<Text className={styles.title}>Tab One</Text>
|
|
37
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
38
|
+
<InternalizationExample />
|
|
39
|
+
<% } %>
|
|
31
40
|
<View className={styles.separator} />
|
|
32
41
|
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
33
42
|
</View>
|
|
@@ -37,6 +46,9 @@ export default function TabOneScreen() {
|
|
|
37
46
|
<Theme name="light">
|
|
38
47
|
<YStack flex={1} alignItems="center" justifyContent="center">
|
|
39
48
|
<H2>Tab One</H2>
|
|
49
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
50
|
+
<InternalizationExample />
|
|
51
|
+
<% } %>
|
|
40
52
|
<Separator />
|
|
41
53
|
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
42
54
|
</YStack>
|
|
@@ -46,6 +58,9 @@ export default function TabOneScreen() {
|
|
|
46
58
|
return (
|
|
47
59
|
<Box flex={1} alignItems="center" justifyContent="center">
|
|
48
60
|
<Text variant="title">Tab One</Text>
|
|
61
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
62
|
+
<InternalizationExample />
|
|
63
|
+
<% } %>
|
|
49
64
|
<Box height={1} marginVertical="l_32" width="80%" />
|
|
50
65
|
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
51
66
|
</Box>
|
|
@@ -54,6 +69,9 @@ export default function TabOneScreen() {
|
|
|
54
69
|
return (
|
|
55
70
|
<View style={styles.container}>
|
|
56
71
|
<Text style={styles.title}>Tab One</Text>
|
|
72
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
73
|
+
<InternalizationExample />
|
|
74
|
+
<% } %>
|
|
57
75
|
<View style={styles.separator} />
|
|
58
76
|
<EditScreenInfo path="app/(tabs)/index.tsx" />
|
|
59
77
|
</View>
|
|
@@ -4,6 +4,9 @@ import '../global.css';
|
|
|
4
4
|
<% if (props.stylingPackage?.name === "unistyles") { %>
|
|
5
5
|
import '../unistyles';
|
|
6
6
|
<% } %>
|
|
7
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
8
|
+
import '../translation';
|
|
9
|
+
<% } %>
|
|
7
10
|
|
|
8
11
|
<% if (props.stylingPackage?.name === "tamagui") { %>
|
|
9
12
|
import React, { useEffect } from "react";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import { Button, StyleSheet, View } from 'react-native';
|
|
4
|
+
|
|
5
|
+
export const InternalizationExample = () => {
|
|
6
|
+
const { t, i18n } = useTranslation();
|
|
7
|
+
|
|
8
|
+
const toggleLanguage = (locale: 'en' | 'fr') => {
|
|
9
|
+
i18n.changeLanguage(locale);
|
|
10
|
+
};
|
|
11
|
+
return (
|
|
12
|
+
<>
|
|
13
|
+
<View style={styles.content}>
|
|
14
|
+
<Button title={t('button.french')} onPress={() => toggleLanguage('fr')} />
|
|
15
|
+
<Button title={t('button.english')} onPress={() => toggleLanguage('en')} />
|
|
16
|
+
</View>
|
|
17
|
+
</>
|
|
18
|
+
);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const styles = StyleSheet.create({
|
|
22
|
+
content: { gap: 20, padding: 20 },
|
|
23
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Resource } from 'i18next';
|
|
2
|
+
|
|
3
|
+
export const fallbackChecker = (resources: Resource, fallbackLng: string) => {
|
|
4
|
+
const languages = Object.keys(resources);
|
|
5
|
+
const hasFallback = languages.find((key) => fallbackLng === key);
|
|
6
|
+
|
|
7
|
+
if (!hasFallback) {
|
|
8
|
+
throw new Error(
|
|
9
|
+
`fallbackLng "${fallbackLng}", is not present in your resources, please check your config, languages available: ${languages.join(', ')}`
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
return fallbackLng;
|
|
13
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import i18n, { Resource } from 'i18next';
|
|
2
|
+
import { initReactI18next } from 'react-i18next';
|
|
3
|
+
|
|
4
|
+
import { fallbackChecker } from './fallbackChecker';
|
|
5
|
+
import { languageDetector } from './languageDetector';
|
|
6
|
+
|
|
7
|
+
type Init18n = {
|
|
8
|
+
resources: Resource;
|
|
9
|
+
fallbackLng: string;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const init18n = ({ resources, fallbackLng }: Init18n) => {
|
|
13
|
+
return i18n
|
|
14
|
+
.use(languageDetector)
|
|
15
|
+
.use(initReactI18next)
|
|
16
|
+
.init({
|
|
17
|
+
resources,
|
|
18
|
+
fallbackLng: fallbackChecker(resources, fallbackLng),
|
|
19
|
+
compatibilityJSON: 'v3', // By default React Native projects does not support Intl
|
|
20
|
+
interpolation: {
|
|
21
|
+
escapeValue: false,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as Localization from 'expo-localization';
|
|
2
|
+
import { LanguageDetectorModule } from 'i18next';
|
|
3
|
+
|
|
4
|
+
export const languageDetector: LanguageDetectorModule = {
|
|
5
|
+
type: 'languageDetector',
|
|
6
|
+
detect: () => {
|
|
7
|
+
const locales = Localization.getLocales();
|
|
8
|
+
const firstLanguageCode = locales[0].languageCode ?? 'en';
|
|
9
|
+
return firstLanguageCode;
|
|
10
|
+
},
|
|
11
|
+
init: () => {},
|
|
12
|
+
cacheUserLanguage: () => {},
|
|
13
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { init18n } from 'core/i18n/init';
|
|
2
|
+
import en from 'translation/en.json';
|
|
3
|
+
import fr from 'translation/fr.json';
|
|
4
|
+
|
|
5
|
+
export const resources = {
|
|
6
|
+
en: {
|
|
7
|
+
translation: en,
|
|
8
|
+
},
|
|
9
|
+
fr: {
|
|
10
|
+
translation: fr,
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const fallbackLng = 'en';
|
|
15
|
+
|
|
16
|
+
export type LanguageCode = keyof typeof resources;
|
|
17
|
+
|
|
18
|
+
const i18n = init18n({ resources, fallbackLng });
|
|
19
|
+
|
|
20
|
+
export default i18n;
|
|
@@ -4,6 +4,9 @@ import './global.css';
|
|
|
4
4
|
<% if (props.stylingPackage?.name === "unistyles") { %>
|
|
5
5
|
import './unistyles';
|
|
6
6
|
<% } %>
|
|
7
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
8
|
+
import './translation';
|
|
9
|
+
<% } %>
|
|
7
10
|
import "react-native-gesture-handler";
|
|
8
11
|
<% if (props.stylingPackage?.name === "tamagui") { %>
|
|
9
12
|
import React, { useEffect } from "react";
|