@umituz/react-native-localization 1.5.5 ā 1.5.7
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/package.json +2 -1
- package/scripts/prepublish.js +80 -0
- package/src/infrastructure/config/i18n.ts +3 -0
- package/src/infrastructure/locales/en-US/auth.json +2 -2
- package/src/infrastructure/locales/en-US/branding.json +1 -1
- package/src/infrastructure/locales/en-US/general.json +2 -5
- package/src/infrastructure/locales/en-US/goals.json +271 -274
- package/src/infrastructure/locales/en-US/index.ts +3 -1
- package/src/infrastructure/locales/en-US/navigation.json +4 -1
- package/src/infrastructure/locales/en-US/flashcards.json +0 -310
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umituz/react-native-localization",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.7",
|
|
4
4
|
"description": "Universal localization system for React Native apps with i18n support",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"lint": "tsc --noEmit",
|
|
10
10
|
"locales:generate": "node scripts/createLocaleLoaders.js",
|
|
11
11
|
"locales:generate:lang": "node scripts/createLocaleLoaders.js",
|
|
12
|
+
"prepublishOnly": "node scripts/prepublish.js",
|
|
12
13
|
"version:patch": "npm version patch -m 'chore: release v%s'",
|
|
13
14
|
"version:minor": "npm version minor -m 'chore: release v%s'",
|
|
14
15
|
"version:major": "npm version major -m 'chore: release v%s'",
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/* eslint-disable no-console */
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Pre-Publish Script
|
|
6
|
+
*
|
|
7
|
+
* This script runs automatically before npm publish to ensure:
|
|
8
|
+
* 1. en-US translation files are ready
|
|
9
|
+
* 2. en-US index.ts loader is generated
|
|
10
|
+
* 3. All required files are in place
|
|
11
|
+
*
|
|
12
|
+
* Runs automatically via "prepublishOnly" npm script
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const fs = require('fs');
|
|
16
|
+
const path = require('path');
|
|
17
|
+
const { execSync } = require('child_process');
|
|
18
|
+
|
|
19
|
+
const PACKAGE_ROOT = path.resolve(__dirname, '..');
|
|
20
|
+
const EN_US_DIR = path.join(PACKAGE_ROOT, 'src/infrastructure/locales/en-US');
|
|
21
|
+
const EN_US_INDEX = path.join(EN_US_DIR, 'index.ts');
|
|
22
|
+
|
|
23
|
+
console.log('š Pre-publish checks...\n');
|
|
24
|
+
|
|
25
|
+
// Check if en-US directory exists
|
|
26
|
+
if (!fs.existsSync(EN_US_DIR)) {
|
|
27
|
+
console.error('ā en-US directory not found!');
|
|
28
|
+
console.error(` Expected: ${EN_US_DIR}`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Check if en-US has JSON files
|
|
33
|
+
const jsonFiles = fs.readdirSync(EN_US_DIR)
|
|
34
|
+
.filter(file => file.endsWith('.json'))
|
|
35
|
+
.sort();
|
|
36
|
+
|
|
37
|
+
if (jsonFiles.length === 0) {
|
|
38
|
+
console.error('ā No JSON translation files found in en-US directory!');
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
console.log(`ā
Found ${jsonFiles.length} translation files in en-US:`);
|
|
43
|
+
jsonFiles.forEach(file => console.log(` - ${file}`));
|
|
44
|
+
|
|
45
|
+
// Generate index.ts if it doesn't exist or is outdated
|
|
46
|
+
const needsIndexUpdate = !fs.existsSync(EN_US_INDEX) ||
|
|
47
|
+
jsonFiles.some(file => {
|
|
48
|
+
const filePath = path.join(EN_US_DIR, file);
|
|
49
|
+
const indexStat = fs.statSync(EN_US_INDEX);
|
|
50
|
+
const fileStat = fs.statSync(filePath);
|
|
51
|
+
return fileStat.mtime > indexStat.mtime;
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
if (needsIndexUpdate) {
|
|
55
|
+
console.log('\nš Generating en-US index.ts loader...');
|
|
56
|
+
try {
|
|
57
|
+
// Run createLocaleLoaders script for en-US
|
|
58
|
+
const createLoaderScript = path.join(PACKAGE_ROOT, 'scripts/createLocaleLoaders.js');
|
|
59
|
+
execSync(`node "${createLoaderScript}" en-US`, {
|
|
60
|
+
stdio: 'inherit',
|
|
61
|
+
cwd: PACKAGE_ROOT,
|
|
62
|
+
});
|
|
63
|
+
console.log('ā
en-US index.ts generated successfully');
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.error('ā Failed to generate en-US index.ts:', error.message);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
console.log('\nā
en-US index.ts is up to date');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Verify index.ts exists
|
|
73
|
+
if (!fs.existsSync(EN_US_INDEX)) {
|
|
74
|
+
console.error('ā en-US/index.ts not found after generation!');
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
console.log('\nā
Pre-publish checks passed!');
|
|
79
|
+
console.log(' Package is ready to publish.\n');
|
|
80
|
+
|
|
@@ -204,6 +204,9 @@ if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
|
204
204
|
languages: Object.keys(resources),
|
|
205
205
|
enUSKeys: resources['en-US']?.translation ? Object.keys(resources['en-US'].translation) : [],
|
|
206
206
|
hasGoals: !!resources['en-US']?.translation?.goals,
|
|
207
|
+
navigationKeys: resources['en-US']?.translation?.navigation ? Object.keys(resources['en-US'].translation.navigation) : [],
|
|
208
|
+
hasMilestones: !!resources['en-US']?.translation?.navigation?.milestones,
|
|
209
|
+
hasStatistics: !!resources['en-US']?.translation?.navigation?.statistics,
|
|
207
210
|
});
|
|
208
211
|
}
|
|
209
212
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"title": "Welcome",
|
|
3
3
|
"subtitle": "Sign in to your account or continue as guest",
|
|
4
4
|
"welcomeBack": "Welcome Back",
|
|
5
|
-
"loginSubtitle": "Sign in to sync your
|
|
5
|
+
"loginSubtitle": "Sign in to sync your data across devices",
|
|
6
6
|
"email": "Email",
|
|
7
7
|
"emailPlaceholder": "Enter your email",
|
|
8
8
|
"password": "Password",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"guestMode": "Guest Mode",
|
|
33
33
|
"guestModeDescription": "Your data is stored locally on this device",
|
|
34
34
|
"syncData": "Sync Local Data",
|
|
35
|
-
"syncDataDescription": "Upload your local
|
|
35
|
+
"syncDataDescription": "Upload your local data to the cloud",
|
|
36
36
|
"syncSuccess": "Data synced successfully",
|
|
37
37
|
"syncFailed": "Failed to sync data"
|
|
38
38
|
}
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"apply": "Apply",
|
|
39
39
|
"yes": "Yes",
|
|
40
40
|
"no": "No",
|
|
41
|
+
"or": "or",
|
|
41
42
|
"all": "All",
|
|
42
43
|
"none": "None",
|
|
43
44
|
"of": "of",
|
|
@@ -53,9 +54,5 @@
|
|
|
53
54
|
"viewAll": "View all",
|
|
54
55
|
"showMore": "Show more",
|
|
55
56
|
"showLess": "Show less",
|
|
56
|
-
"start": "Start"
|
|
57
|
-
"study": "Study",
|
|
58
|
-
"cards": "Cards",
|
|
59
|
-
"correct": "Correct",
|
|
60
|
-
"incorrect": "Incorrect"
|
|
57
|
+
"start": "Start"
|
|
61
58
|
}
|
|
@@ -1,298 +1,295 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"onTrack": "On Track"
|
|
13
|
-
},
|
|
14
|
-
"sections": {
|
|
15
|
-
"activeGoals": "Active Goals",
|
|
16
|
-
"recentlyCompleted": "Recently Completed",
|
|
17
|
-
"quickActions": "Quick Actions"
|
|
18
|
-
},
|
|
19
|
-
"actions": {
|
|
20
|
-
"viewAll": "View All",
|
|
21
|
-
"allGoals": "All Goals",
|
|
22
|
-
"statistics": "Statistics",
|
|
23
|
-
"progress": "Progress"
|
|
24
|
-
},
|
|
25
|
-
"time": {
|
|
26
|
-
"remaining": "remaining",
|
|
27
|
-
"today": "Today",
|
|
28
|
-
"tomorrow": "Tomorrow",
|
|
29
|
-
"days": "days",
|
|
30
|
-
"weeks": "weeks",
|
|
31
|
-
"months": "months"
|
|
32
|
-
},
|
|
33
|
-
"completed": "Completed!",
|
|
34
|
-
"quote": {
|
|
35
|
-
"text": "A goal without a plan is just a wish.",
|
|
36
|
-
"author": "Antoine de Saint-ExupƩry"
|
|
37
|
-
}
|
|
2
|
+
"home": {
|
|
3
|
+
"title": "My Goals",
|
|
4
|
+
"addGoal": "Add New Goal",
|
|
5
|
+
"overallProgress": "Overall Progress",
|
|
6
|
+
"activeGoals": "active goals",
|
|
7
|
+
"completedGoals": "completed",
|
|
8
|
+
"quickStats": {
|
|
9
|
+
"active": "Active",
|
|
10
|
+
"completed": "Completed",
|
|
11
|
+
"onTrack": "On Track"
|
|
38
12
|
},
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
"
|
|
13
|
+
"sections": {
|
|
14
|
+
"activeGoals": "Active Goals",
|
|
15
|
+
"recentlyCompleted": "Recently Completed",
|
|
16
|
+
"quickActions": "Quick Actions"
|
|
17
|
+
},
|
|
18
|
+
"actions": {
|
|
19
|
+
"viewAll": "View All",
|
|
20
|
+
"allGoals": "All Goals",
|
|
21
|
+
"statistics": "Statistics",
|
|
22
|
+
"progress": "Progress"
|
|
23
|
+
},
|
|
24
|
+
"time": {
|
|
25
|
+
"remaining": "remaining",
|
|
26
|
+
"today": "Today",
|
|
27
|
+
"tomorrow": "Tomorrow",
|
|
28
|
+
"days": "days",
|
|
29
|
+
"weeks": "weeks",
|
|
30
|
+
"months": "months"
|
|
31
|
+
},
|
|
32
|
+
"completed": "Completed!",
|
|
33
|
+
"quote": {
|
|
34
|
+
"text": "A goal without a plan is just a wish.",
|
|
35
|
+
"author": "Antoine de Saint-ExupƩry"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"list": {
|
|
39
|
+
"title": "All Goals",
|
|
40
|
+
"filters": {
|
|
41
|
+
"title": "Filter Goals",
|
|
42
|
+
"all": "All",
|
|
43
|
+
"active": "Active",
|
|
44
|
+
"completed": "Completed",
|
|
45
|
+
"archived": "Archived"
|
|
46
|
+
},
|
|
47
|
+
"empty": "No goals found",
|
|
48
|
+
"emptyActive": "No active goals found",
|
|
49
|
+
"emptyCompleted": "No completed goals found",
|
|
50
|
+
"emptyArchived": "No archived goals found",
|
|
51
|
+
"milestones": "milestones",
|
|
52
|
+
"target": "Target",
|
|
53
|
+
"daysRemaining": "days remaining",
|
|
54
|
+
"overdue": "Overdue"
|
|
55
|
+
},
|
|
56
|
+
"add": {
|
|
57
|
+
"title": "Create New Goal",
|
|
58
|
+
"sections": {
|
|
59
|
+
"basicInfo": "Basic Information",
|
|
60
|
+
"priority": "Priority",
|
|
53
61
|
"target": "Target",
|
|
54
|
-
"
|
|
55
|
-
"overdue": "Overdue"
|
|
62
|
+
"milestones": "Milestones"
|
|
56
63
|
},
|
|
57
|
-
"
|
|
58
|
-
"title":
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"target": "Target",
|
|
63
|
-
"milestones": "Milestones"
|
|
64
|
-
},
|
|
65
|
-
"fields": {
|
|
66
|
-
"title": {
|
|
67
|
-
"label": "Goal Title",
|
|
68
|
-
"placeholder": "e.g., Learn Spanish, Run a Marathon",
|
|
69
|
-
"required": true
|
|
70
|
-
},
|
|
71
|
-
"description": {
|
|
72
|
-
"label": "Description",
|
|
73
|
-
"placeholder": "What do you want to achieve?",
|
|
74
|
-
"required": false
|
|
75
|
-
},
|
|
76
|
-
"category": {
|
|
77
|
-
"label": "Category",
|
|
78
|
-
"required": true
|
|
79
|
-
},
|
|
80
|
-
"targetDate": {
|
|
81
|
-
"label": "Target Date",
|
|
82
|
-
"placeholder": "YYYY-MM-DD",
|
|
83
|
-
"required": true
|
|
84
|
-
},
|
|
85
|
-
"targetValue": {
|
|
86
|
-
"label": "Target Value",
|
|
87
|
-
"placeholder": "e.g., 100",
|
|
88
|
-
"required": false
|
|
89
|
-
},
|
|
90
|
-
"unit": {
|
|
91
|
-
"label": "Unit",
|
|
92
|
-
"placeholder": "e.g., kg, km, $",
|
|
93
|
-
"required": false
|
|
94
|
-
}
|
|
64
|
+
"fields": {
|
|
65
|
+
"title": {
|
|
66
|
+
"label": "Goal Title",
|
|
67
|
+
"placeholder": "e.g., Learn Spanish, Run a Marathon",
|
|
68
|
+
"required": true
|
|
95
69
|
},
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"finance": "Finance",
|
|
101
|
-
"education": "Education",
|
|
102
|
-
"health": "Health",
|
|
103
|
-
"hobby": "Hobby",
|
|
104
|
-
"other": "Other"
|
|
70
|
+
"description": {
|
|
71
|
+
"label": "Description",
|
|
72
|
+
"placeholder": "What do you want to achieve?",
|
|
73
|
+
"required": false
|
|
105
74
|
},
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"high": "High"
|
|
75
|
+
"category": {
|
|
76
|
+
"label": "Category",
|
|
77
|
+
"required": true
|
|
110
78
|
},
|
|
111
|
-
"
|
|
112
|
-
"
|
|
79
|
+
"targetDate": {
|
|
80
|
+
"label": "Target Date",
|
|
81
|
+
"placeholder": "YYYY-MM-DD",
|
|
82
|
+
"required": true
|
|
113
83
|
},
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
"
|
|
84
|
+
"targetValue": {
|
|
85
|
+
"label": "Target Value",
|
|
86
|
+
"placeholder": "e.g., 100",
|
|
87
|
+
"required": false
|
|
118
88
|
},
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
"invalidDateMessage": "Please enter date in YYYY-MM-DD format"
|
|
124
|
-
},
|
|
125
|
-
"success": {
|
|
126
|
-
"created": "Goal created successfully!",
|
|
127
|
-
"updated": "Goal updated successfully!"
|
|
89
|
+
"unit": {
|
|
90
|
+
"label": "Unit",
|
|
91
|
+
"placeholder": "e.g., kg, km, $",
|
|
92
|
+
"required": false
|
|
128
93
|
}
|
|
129
94
|
},
|
|
130
|
-
"
|
|
131
|
-
"
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
"progress": {
|
|
140
|
-
"overall": "Overall Progress",
|
|
141
|
-
"milestones": "Milestones",
|
|
142
|
-
"current": "Current",
|
|
143
|
-
"target": "Target",
|
|
144
|
-
"updateProgress": "Update Progress"
|
|
145
|
-
},
|
|
146
|
-
"timeline": {
|
|
147
|
-
"created": "Created",
|
|
148
|
-
"targetDate": "Target Date",
|
|
149
|
-
"daysRemaining": "Days Remaining",
|
|
150
|
-
"completed": "Completed",
|
|
151
|
-
"archived": "Archived"
|
|
152
|
-
},
|
|
153
|
-
"actions": {
|
|
154
|
-
"viewAll": "View All",
|
|
155
|
-
"markCompleted": "Mark as Completed",
|
|
156
|
-
"archive": "Archive Goal",
|
|
157
|
-
"delete": "Delete Goal",
|
|
158
|
-
"edit": "Edit Goal"
|
|
159
|
-
},
|
|
160
|
-
"alerts": {
|
|
161
|
-
"complete": {
|
|
162
|
-
"title": "Complete Goal",
|
|
163
|
-
"message": "Mark \"{title}\" as completed?"
|
|
164
|
-
},
|
|
165
|
-
"archive": {
|
|
166
|
-
"title": "Archive Goal",
|
|
167
|
-
"message": "Archive \"{title}\"?"
|
|
168
|
-
},
|
|
169
|
-
"delete": {
|
|
170
|
-
"title": "Delete Goal",
|
|
171
|
-
"message": "Are you sure you want to delete \"{title}\"? This action cannot be undone."
|
|
172
|
-
}
|
|
173
|
-
}
|
|
95
|
+
"categories": {
|
|
96
|
+
"personal": "Personal",
|
|
97
|
+
"career": "Career",
|
|
98
|
+
"fitness": "Fitness",
|
|
99
|
+
"finance": "Finance",
|
|
100
|
+
"education": "Education",
|
|
101
|
+
"health": "Health",
|
|
102
|
+
"hobby": "Hobby",
|
|
103
|
+
"other": "Other"
|
|
174
104
|
},
|
|
175
|
-
"
|
|
176
|
-
"
|
|
177
|
-
"
|
|
178
|
-
"
|
|
179
|
-
"empty": "No milestones yet. Add your first milestone!",
|
|
180
|
-
"completed": "Completed",
|
|
181
|
-
"pending": "Pending",
|
|
182
|
-
"remaining": "Remaining",
|
|
183
|
-
"complete": "Complete",
|
|
184
|
-
"selectGoal": "Select a goal to view milestones",
|
|
185
|
-
"goalNotFound": "Goal not found",
|
|
186
|
-
"noActiveGoals": "No active goals. Create a goal first to add milestones.",
|
|
187
|
-
"changeGoal": "Change Goal",
|
|
188
|
-
"newMilestone": "New Milestone",
|
|
189
|
-
"milestonesCompleted": "{completed} of {total} milestones completed",
|
|
190
|
-
"markComplete": "Mark Complete",
|
|
191
|
-
"markIncomplete": "Mark Incomplete",
|
|
192
|
-
"completedDate": "Completed: {date}",
|
|
193
|
-
"fields": {
|
|
194
|
-
"title": {
|
|
195
|
-
"label": "Milestone Title",
|
|
196
|
-
"placeholder": "Enter milestone title"
|
|
197
|
-
},
|
|
198
|
-
"description": {
|
|
199
|
-
"label": "Description (Optional)",
|
|
200
|
-
"placeholder": "Add details about this milestone"
|
|
201
|
-
}
|
|
202
|
-
},
|
|
203
|
-
"actions": {
|
|
204
|
-
"add": "Add Milestone",
|
|
205
|
-
"cancel": "Cancel",
|
|
206
|
-
"delete": "Delete",
|
|
207
|
-
"edit": "Edit"
|
|
208
|
-
},
|
|
209
|
-
"alerts": {
|
|
210
|
-
"error": "Error",
|
|
211
|
-
"noGoalSelected": "No goal selected",
|
|
212
|
-
"validationError": "Validation Error",
|
|
213
|
-
"titleRequired": "Please enter a milestone title",
|
|
214
|
-
"delete": {
|
|
215
|
-
"title": "Delete Milestone",
|
|
216
|
-
"message": "Are you sure you want to delete this milestone?"
|
|
217
|
-
}
|
|
218
|
-
}
|
|
105
|
+
"priorities": {
|
|
106
|
+
"low": "Low",
|
|
107
|
+
"medium": "Medium",
|
|
108
|
+
"high": "High"
|
|
219
109
|
},
|
|
220
|
-
"
|
|
221
|
-
"
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
"currentProgress": "Current Progress",
|
|
225
|
-
"updateProgress": "Update Progress",
|
|
226
|
-
"currentValue": "Current Value",
|
|
227
|
-
"currentValuePlaceholder": "Enter current {{unit}}",
|
|
228
|
-
"targetValue": "Target Value",
|
|
229
|
-
"target": "Target: {value} {unit}",
|
|
230
|
-
"newProgress": "New Progress",
|
|
231
|
-
"note": "Note (Optional)",
|
|
232
|
-
"notePlaceholder": "Add a note about this progress update",
|
|
233
|
-
"saveProgress": "Save Progress",
|
|
234
|
-
"progressHistory": "Progress History",
|
|
235
|
-
"statistics": "Statistics",
|
|
236
|
-
"progressThisMonth": "Progress This Month",
|
|
237
|
-
"updatesThisMonth": "Updates This Month",
|
|
238
|
-
"averagePerWeek": "Average per Week",
|
|
239
|
-
"daysSinceStart": "Days Since Start",
|
|
240
|
-
"percentage": "Progress Percentage",
|
|
241
|
-
"save": "Update Progress",
|
|
110
|
+
"info": {
|
|
111
|
+
"milestones": "You can add milestones after creating the goal"
|
|
112
|
+
},
|
|
113
|
+
"actions": {
|
|
242
114
|
"cancel": "Cancel",
|
|
243
|
-
"
|
|
244
|
-
"
|
|
245
|
-
"noTargetValue": "This goal doesn't have a target value. Add milestones to track progress.",
|
|
246
|
-
"alerts": {
|
|
247
|
-
"error": "Error",
|
|
248
|
-
"noGoalSelected": "No goal selected",
|
|
249
|
-
"validationError": "Validation Error",
|
|
250
|
-
"invalidNumber": "Please enter a valid number"
|
|
251
|
-
}
|
|
115
|
+
"create": "Create Goal",
|
|
116
|
+
"save": "Save Changes"
|
|
252
117
|
},
|
|
253
|
-
"
|
|
254
|
-
"title": "
|
|
255
|
-
"
|
|
256
|
-
"
|
|
257
|
-
"
|
|
118
|
+
"validation": {
|
|
119
|
+
"title": "Validation Error",
|
|
120
|
+
"message": "Please fill all required fields",
|
|
121
|
+
"invalidDateTitle": "Invalid Date",
|
|
122
|
+
"invalidDateMessage": "Please enter date in YYYY-MM-DD format"
|
|
123
|
+
},
|
|
124
|
+
"success": {
|
|
125
|
+
"created": "Goal created successfully!",
|
|
126
|
+
"updated": "Goal updated successfully!"
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
"details": {
|
|
130
|
+
"title": "Goal Details",
|
|
131
|
+
"goalNotFound": "Goal not found",
|
|
132
|
+
"sections": {
|
|
133
|
+
"progress": "Progress",
|
|
134
|
+
"timeline": "Timeline",
|
|
135
|
+
"milestones": "Recent Milestones",
|
|
136
|
+
"allMilestones": "All Milestones"
|
|
137
|
+
},
|
|
138
|
+
"progress": {
|
|
139
|
+
"overall": "Overall Progress",
|
|
140
|
+
"milestones": "Milestones",
|
|
141
|
+
"current": "Current",
|
|
142
|
+
"target": "Target",
|
|
143
|
+
"updateProgress": "Update Progress"
|
|
144
|
+
},
|
|
145
|
+
"timeline": {
|
|
146
|
+
"created": "Created",
|
|
147
|
+
"targetDate": "Target Date",
|
|
148
|
+
"daysRemaining": "Days Remaining",
|
|
258
149
|
"completed": "Completed",
|
|
259
|
-
"archived": "Archived"
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
"
|
|
263
|
-
"
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
"
|
|
150
|
+
"archived": "Archived"
|
|
151
|
+
},
|
|
152
|
+
"actions": {
|
|
153
|
+
"viewAll": "View All",
|
|
154
|
+
"markCompleted": "Mark as Completed",
|
|
155
|
+
"archive": "Archive Goal",
|
|
156
|
+
"delete": "Delete Goal",
|
|
157
|
+
"edit": "Edit Goal"
|
|
158
|
+
},
|
|
159
|
+
"alerts": {
|
|
160
|
+
"complete": {
|
|
161
|
+
"title": "Complete Goal",
|
|
162
|
+
"message": "Mark \"{title}\" as completed?"
|
|
271
163
|
},
|
|
272
|
-
"
|
|
273
|
-
"title": "
|
|
274
|
-
"
|
|
275
|
-
"thisMonth": "This Month",
|
|
276
|
-
"thisYear": "This Year"
|
|
164
|
+
"archive": {
|
|
165
|
+
"title": "Archive Goal",
|
|
166
|
+
"message": "Archive \"{title}\"?"
|
|
277
167
|
},
|
|
278
|
-
"
|
|
279
|
-
|
|
280
|
-
"
|
|
281
|
-
|
|
282
|
-
|
|
168
|
+
"delete": {
|
|
169
|
+
"title": "Delete Goal",
|
|
170
|
+
"message": "Are you sure you want to delete \"{title}\"? This action cannot be undone."
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"milestones": {
|
|
175
|
+
"title": "Milestones",
|
|
176
|
+
"add": "Add Milestone",
|
|
177
|
+
"addNew": "Add New Milestone",
|
|
178
|
+
"empty": "No milestones yet. Add your first milestone!",
|
|
179
|
+
"completed": "Completed",
|
|
180
|
+
"pending": "Pending",
|
|
181
|
+
"remaining": "Remaining",
|
|
182
|
+
"complete": "Complete",
|
|
183
|
+
"selectGoal": "Select a goal to view milestones",
|
|
184
|
+
"goalNotFound": "Goal not found",
|
|
185
|
+
"noActiveGoals": "No active goals. Create a goal first to add milestones.",
|
|
186
|
+
"changeGoal": "Change Goal",
|
|
187
|
+
"newMilestone": "New Milestone",
|
|
188
|
+
"milestonesCompleted": "{completed} of {total} milestones completed",
|
|
189
|
+
"markComplete": "Mark Complete",
|
|
190
|
+
"markIncomplete": "Mark Incomplete",
|
|
191
|
+
"completedDate": "Completed: {date}",
|
|
192
|
+
"fields": {
|
|
193
|
+
"title": {
|
|
194
|
+
"label": "Milestone Title",
|
|
195
|
+
"placeholder": "Enter milestone title"
|
|
283
196
|
},
|
|
284
|
-
"
|
|
197
|
+
"description": {
|
|
198
|
+
"label": "Description (Optional)",
|
|
199
|
+
"placeholder": "Add details about this milestone"
|
|
200
|
+
}
|
|
285
201
|
},
|
|
286
|
-
"
|
|
287
|
-
"
|
|
288
|
-
"
|
|
289
|
-
"
|
|
202
|
+
"actions": {
|
|
203
|
+
"add": "Add Milestone",
|
|
204
|
+
"cancel": "Cancel",
|
|
205
|
+
"delete": "Delete",
|
|
206
|
+
"edit": "Edit"
|
|
290
207
|
},
|
|
291
|
-
"
|
|
292
|
-
"
|
|
293
|
-
"
|
|
294
|
-
"
|
|
208
|
+
"alerts": {
|
|
209
|
+
"error": "Error",
|
|
210
|
+
"noGoalSelected": "No goal selected",
|
|
211
|
+
"validationError": "Validation Error",
|
|
212
|
+
"titleRequired": "Please enter a milestone title",
|
|
213
|
+
"delete": {
|
|
214
|
+
"title": "Delete Milestone",
|
|
215
|
+
"message": "Are you sure you want to delete this milestone?"
|
|
216
|
+
}
|
|
295
217
|
}
|
|
218
|
+
},
|
|
219
|
+
"progress": {
|
|
220
|
+
"title": "Update Progress",
|
|
221
|
+
"goalNotFound": "Goal not found",
|
|
222
|
+
"selectGoal": "Please select a goal to update progress",
|
|
223
|
+
"currentProgress": "Current Progress",
|
|
224
|
+
"updateProgress": "Update Progress",
|
|
225
|
+
"currentValue": "Current Value",
|
|
226
|
+
"currentValuePlaceholder": "Enter current {{unit}}",
|
|
227
|
+
"targetValue": "Target Value",
|
|
228
|
+
"target": "Target: {value} {unit}",
|
|
229
|
+
"newProgress": "New Progress",
|
|
230
|
+
"note": "Note (Optional)",
|
|
231
|
+
"notePlaceholder": "Add a note about this progress update",
|
|
232
|
+
"saveProgress": "Save Progress",
|
|
233
|
+
"progressHistory": "Progress History",
|
|
234
|
+
"statistics": "Statistics",
|
|
235
|
+
"progressThisMonth": "Progress This Month",
|
|
236
|
+
"updatesThisMonth": "Updates This Month",
|
|
237
|
+
"averagePerWeek": "Average per Week",
|
|
238
|
+
"daysSinceStart": "Days Since Start",
|
|
239
|
+
"percentage": "Progress Percentage",
|
|
240
|
+
"save": "Update Progress",
|
|
241
|
+
"cancel": "Cancel",
|
|
242
|
+
"milestoneNote": "This goal uses milestones for progress tracking. Update milestones to change progress.",
|
|
243
|
+
"useMilestones": "This goal uses milestones for progress tracking. Go to Milestones tab to update progress.",
|
|
244
|
+
"noTargetValue": "This goal doesn't have a target value. Add milestones to track progress.",
|
|
245
|
+
"alerts": {
|
|
246
|
+
"error": "Error",
|
|
247
|
+
"noGoalSelected": "No goal selected",
|
|
248
|
+
"validationError": "Validation Error",
|
|
249
|
+
"invalidNumber": "Please enter a valid number"
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"statistics": {
|
|
253
|
+
"title": "Statistics",
|
|
254
|
+
"overview": "Overview",
|
|
255
|
+
"total": "Total Goals",
|
|
256
|
+
"active": "Active",
|
|
257
|
+
"completed": "Completed",
|
|
258
|
+
"archived": "Archived",
|
|
259
|
+
"averageProgress": "Average Progress",
|
|
260
|
+
"onTrack": "On Track",
|
|
261
|
+
"overdue": "Overdue",
|
|
262
|
+
"milestones": {
|
|
263
|
+
"title": "Milestones",
|
|
264
|
+
"total": "Total",
|
|
265
|
+
"completed": "Completed"
|
|
266
|
+
},
|
|
267
|
+
"categories": {
|
|
268
|
+
"title": "Goals by Category",
|
|
269
|
+
"empty": "No goals yet"
|
|
270
|
+
},
|
|
271
|
+
"timeline": {
|
|
272
|
+
"title": "Progress Timeline",
|
|
273
|
+
"thisWeek": "This Week",
|
|
274
|
+
"thisMonth": "This Month",
|
|
275
|
+
"thisYear": "This Year"
|
|
276
|
+
},
|
|
277
|
+
"started": "Started",
|
|
278
|
+
"insights": {
|
|
279
|
+
"insight1": "You've completed {{count}} goals so far. Keep up the great work!",
|
|
280
|
+
"insight2": "Your completion rate is {{rate}}%. Set smaller milestones for better progress tracking.",
|
|
281
|
+
"insight3": "Average progress across all goals is {{progress}}%. Update your progress regularly!"
|
|
282
|
+
},
|
|
283
|
+
"categoryStats": "{{completed}} completed, {{active}} active"
|
|
284
|
+
},
|
|
285
|
+
"status": {
|
|
286
|
+
"active": "Active",
|
|
287
|
+
"completed": "Completed",
|
|
288
|
+
"archived": "Archived"
|
|
289
|
+
},
|
|
290
|
+
"empty": {
|
|
291
|
+
"title": "No Goals Yet",
|
|
292
|
+
"description": "Start your journey by creating your first goal!",
|
|
293
|
+
"action": "Create Your First Goal"
|
|
296
294
|
}
|
|
297
295
|
}
|
|
298
|
-
|
|
@@ -17,8 +17,10 @@
|
|
|
17
17
|
* 2. File is auto-discovered and loaded
|
|
18
18
|
* 3. Access via t('my_domain.key')
|
|
19
19
|
*
|
|
20
|
-
* This file is automatically generated by setup-languages.js
|
|
20
|
+
* This file is automatically generated by setup-languages.js or createLocaleLoaders.js
|
|
21
21
|
* but can be manually edited if needed.
|
|
22
|
+
*
|
|
23
|
+
* Generated: 2025-11-13T00:33:06.438Z
|
|
22
24
|
*/
|
|
23
25
|
|
|
24
26
|
// Metro bundler require.context - auto-discover all .json files
|
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"home": {
|
|
3
|
-
"welcome": "Welcome to Flashcard Maker",
|
|
4
|
-
"subtitle": "Master any subject with interactive flashcards",
|
|
5
|
-
"quickStudy": "Quick Study",
|
|
6
|
-
"quickStudyDesc": "Start studying your recent decks",
|
|
7
|
-
"createDeck": "Create Deck",
|
|
8
|
-
"createDeckDesc": "Build a new flashcard deck",
|
|
9
|
-
"recentActivity": "Recent Activity",
|
|
10
|
-
"noDecksYet": "You haven't created any decks yet",
|
|
11
|
-
"browseDecks": "Browse Decks",
|
|
12
|
-
"statistics": "Statistics",
|
|
13
|
-
"totalDecks": "Total Decks",
|
|
14
|
-
"totalCards": "Total Cards",
|
|
15
|
-
"studySessions": "Study Sessions"
|
|
16
|
-
},
|
|
17
|
-
"decks": {
|
|
18
|
-
"noDecks": "No Decks Found",
|
|
19
|
-
"noDecksDesc": "Create your first flashcard deck to get started",
|
|
20
|
-
"createFirstDeck": "Create First Deck",
|
|
21
|
-
"createDeck": "Create Deck",
|
|
22
|
-
"editDeck": "Edit Deck",
|
|
23
|
-
"recentlyStudied": "Recently Studied",
|
|
24
|
-
"allDecks": "All Decks",
|
|
25
|
-
"easy": "Easy",
|
|
26
|
-
"medium": "Medium",
|
|
27
|
-
"hard": "Hard"
|
|
28
|
-
},
|
|
29
|
-
"study": {
|
|
30
|
-
"noCards": "No Cards Available",
|
|
31
|
-
"noCardsDesc": "Add some cards to a deck to start studying",
|
|
32
|
-
"browseDecks": "Browse Decks",
|
|
33
|
-
"question": "Question",
|
|
34
|
-
"answer": "Answer",
|
|
35
|
-
"showQuestion": "Show Question",
|
|
36
|
-
"showAnswer": "Show Answer",
|
|
37
|
-
"correct": "Correct",
|
|
38
|
-
"incorrect": "Incorrect",
|
|
39
|
-
"skip": "Skip",
|
|
40
|
-
"skipped": "Skipped",
|
|
41
|
-
"studyComplete": "Study Complete",
|
|
42
|
-
"wellDone": "Well done!",
|
|
43
|
-
"sessionComplete": "Session Complete"
|
|
44
|
-
},
|
|
45
|
-
"create": {
|
|
46
|
-
"createDeck": "Create Deck",
|
|
47
|
-
"addCards": "Add Cards",
|
|
48
|
-
"deckInfo": "Deck Information",
|
|
49
|
-
"cardInfo": "Card Information",
|
|
50
|
-
"deckTitle": "Deck Title",
|
|
51
|
-
"deckTitlePlaceholder": "Enter deck title",
|
|
52
|
-
"deckDescription": "Description",
|
|
53
|
-
"deckDescriptionPlaceholder": "Enter deck description",
|
|
54
|
-
"category": "Category",
|
|
55
|
-
"selectCategory": "Select category",
|
|
56
|
-
"cardFront": "Front Side",
|
|
57
|
-
"cardFrontPlaceholder": "Enter question or term",
|
|
58
|
-
"cardBack": "Back Side",
|
|
59
|
-
"cardBackPlaceholder": "Enter answer or definition",
|
|
60
|
-
"difficulty": "Difficulty",
|
|
61
|
-
"addCard": "Add Card",
|
|
62
|
-
"addedCards": "Added Cards",
|
|
63
|
-
"saveDeck": "Save Deck"
|
|
64
|
-
},
|
|
65
|
-
"cards": {
|
|
66
|
-
"noCards": "No Cards Found",
|
|
67
|
-
"noCardsDesc": "Create your first flashcard to get started",
|
|
68
|
-
"createFirstCard": "Create First Card",
|
|
69
|
-
"createCard": "Create Card",
|
|
70
|
-
"editCard": "Edit Card",
|
|
71
|
-
"selectDeck": "Select Deck",
|
|
72
|
-
"selectDeckPlaceholder": "Choose a deck for this card"
|
|
73
|
-
},
|
|
74
|
-
"common": {
|
|
75
|
-
"clearFilter": "Clear Filter"
|
|
76
|
-
},
|
|
77
|
-
"studyModes": {
|
|
78
|
-
"classic": "Classic",
|
|
79
|
-
"matching": "Matching Game",
|
|
80
|
-
"quiz": "Multiple Choice",
|
|
81
|
-
"writing": "Writing Mode",
|
|
82
|
-
"timed": "Timed Challenge",
|
|
83
|
-
"selectMode": "Select Study Mode"
|
|
84
|
-
},
|
|
85
|
-
"session": {
|
|
86
|
-
"complete": "Session Complete",
|
|
87
|
-
"accuracy": "Accuracy",
|
|
88
|
-
"speed": "Speed",
|
|
89
|
-
"score": "Score",
|
|
90
|
-
"cardsPerMinute": "cards/min",
|
|
91
|
-
"grade": "Grade",
|
|
92
|
-
"feedback": {
|
|
93
|
-
"excellent": "Excellent work! You have mastered this deck!",
|
|
94
|
-
"great": "Great job! Keep up the good work!",
|
|
95
|
-
"good": "Good progress! Practice more to improve.",
|
|
96
|
-
"keep_practicing": "Keep practicing! You're getting there.",
|
|
97
|
-
"keep_studying": "Keep studying! Review these cards again."
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
"rating": {
|
|
101
|
-
"fail": "Again",
|
|
102
|
-
"hard": "Hard",
|
|
103
|
-
"good": "Good",
|
|
104
|
-
"easy": "Easy",
|
|
105
|
-
"perfect": "Perfect"
|
|
106
|
-
},
|
|
107
|
-
"srs": {
|
|
108
|
-
"dueToday": "Due Today",
|
|
109
|
-
"dueCards": "Due Cards",
|
|
110
|
-
"nextReview": "Next Review",
|
|
111
|
-
"interval": "Interval",
|
|
112
|
-
"repetitions": "Repetitions",
|
|
113
|
-
"easeFactor": "Ease Factor",
|
|
114
|
-
"reviewHistory": "Review History",
|
|
115
|
-
"retention": "Retention Rate",
|
|
116
|
-
"again": "Again",
|
|
117
|
-
"hard": "Hard",
|
|
118
|
-
"good": "Good",
|
|
119
|
-
"easy": "Easy"
|
|
120
|
-
},
|
|
121
|
-
"media": {
|
|
122
|
-
"addImage": "Add Image",
|
|
123
|
-
"addAudio": "Add Audio",
|
|
124
|
-
"takePhoto": "Take Photo",
|
|
125
|
-
"chooseFromLibrary": "Choose from Library",
|
|
126
|
-
"record": "Record",
|
|
127
|
-
"play": "Play",
|
|
128
|
-
"stop": "Stop",
|
|
129
|
-
"delete": "Delete Media",
|
|
130
|
-
"tts": {
|
|
131
|
-
"speak": "Speak Text",
|
|
132
|
-
"stopSpeaking": "Stop Speaking",
|
|
133
|
-
"language": "Language",
|
|
134
|
-
"rate": "Speed",
|
|
135
|
-
"pitch": "Pitch"
|
|
136
|
-
},
|
|
137
|
-
"errors": {
|
|
138
|
-
"permissionDenied": "Permission denied",
|
|
139
|
-
"cameraNotAvailable": "Camera not available",
|
|
140
|
-
"audioNotAvailable": "Audio recording not available",
|
|
141
|
-
"ttsNotAvailable": "Text-to-speech not available"
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
"import": {
|
|
145
|
-
"title": "Import Deck",
|
|
146
|
-
"chooseFormat": "Choose Format",
|
|
147
|
-
"csv": "CSV (Excel)",
|
|
148
|
-
"json": "JSON",
|
|
149
|
-
"quizlet": "Quizlet",
|
|
150
|
-
"selectFile": "Select File",
|
|
151
|
-
"importing": "Importing...",
|
|
152
|
-
"success": "Successfully imported {{count}} cards",
|
|
153
|
-
"errors": "{{count}} errors occurred",
|
|
154
|
-
"viewErrors": "View Errors"
|
|
155
|
-
},
|
|
156
|
-
"export": {
|
|
157
|
-
"title": "Export Deck",
|
|
158
|
-
"chooseFormat": "Choose Format",
|
|
159
|
-
"csv": "CSV (Excel)",
|
|
160
|
-
"json": "JSON (Complete)",
|
|
161
|
-
"quizlet": "Quizlet",
|
|
162
|
-
"includeStats": "Include Statistics",
|
|
163
|
-
"includeMedia": "Include Media",
|
|
164
|
-
"exporting": "Exporting...",
|
|
165
|
-
"success": "Deck exported successfully"
|
|
166
|
-
},
|
|
167
|
-
"statistics": {
|
|
168
|
-
"title": "Statistics",
|
|
169
|
-
"overview": "Overview",
|
|
170
|
-
"totalCards": "Total Cards",
|
|
171
|
-
"cardsStudied": "Cards Studied",
|
|
172
|
-
"totalReviews": "Total Reviews",
|
|
173
|
-
"correctReviews": "Correct Reviews",
|
|
174
|
-
"accuracy": "Accuracy",
|
|
175
|
-
"averageTimePerCard": "Avg Time per Card",
|
|
176
|
-
"totalStudyTime": "Total Study Time",
|
|
177
|
-
"studySessions": "Study Sessions",
|
|
178
|
-
"streak": {
|
|
179
|
-
"current": "Current Streak",
|
|
180
|
-
"longest": "Longest Streak",
|
|
181
|
-
"days": "days"
|
|
182
|
-
},
|
|
183
|
-
"charts": {
|
|
184
|
-
"daily": "Daily",
|
|
185
|
-
"weekly": "Weekly",
|
|
186
|
-
"monthly": "Monthly",
|
|
187
|
-
"performance": "Performance",
|
|
188
|
-
"activity": "Activity"
|
|
189
|
-
}
|
|
190
|
-
},
|
|
191
|
-
"sharing": {
|
|
192
|
-
"title": "Share Deck",
|
|
193
|
-
"generateCode": "Generate Share Code",
|
|
194
|
-
"shareCode": "Share Code",
|
|
195
|
-
"qrCode": "QR Code",
|
|
196
|
-
"copyCode": "Copy Code",
|
|
197
|
-
"codeCopied": "Code copied to clipboard",
|
|
198
|
-
"shareAsFile": "Share as File",
|
|
199
|
-
"shareAsLink": "Share as Link",
|
|
200
|
-
"importCode": "Import Code",
|
|
201
|
-
"enterCode": "Enter 6-digit code",
|
|
202
|
-
"invalidCode": "Invalid share code",
|
|
203
|
-
"importing": "Importing deck...",
|
|
204
|
-
"importSuccess": "Deck imported successfully",
|
|
205
|
-
"downloadCount": "Downloads",
|
|
206
|
-
"makePublic": "Make Public",
|
|
207
|
-
"makePrivate": "Make Private"
|
|
208
|
-
},
|
|
209
|
-
"gamification": {
|
|
210
|
-
"profile": {
|
|
211
|
-
"level": "Level",
|
|
212
|
-
"xp": "XP",
|
|
213
|
-
"rank": "Rank",
|
|
214
|
-
"progress": "Progress to next level",
|
|
215
|
-
"totalXP": "Total XP Earned"
|
|
216
|
-
},
|
|
217
|
-
"ranks": {
|
|
218
|
-
"novice": "Novice",
|
|
219
|
-
"apprentice": "Apprentice",
|
|
220
|
-
"scholar": "Scholar",
|
|
221
|
-
"expert": "Expert",
|
|
222
|
-
"master": "Master",
|
|
223
|
-
"grandmaster": "Grandmaster",
|
|
224
|
-
"legend": "Legend"
|
|
225
|
-
},
|
|
226
|
-
"achievements": {
|
|
227
|
-
"title": "Achievements",
|
|
228
|
-
"unlocked": "Unlocked",
|
|
229
|
-
"locked": "Locked",
|
|
230
|
-
"progress": "Progress",
|
|
231
|
-
"reward": "Reward",
|
|
232
|
-
"unlockedAt": "Unlocked on",
|
|
233
|
-
"categories": {
|
|
234
|
-
"study": "Study",
|
|
235
|
-
"cards": "Cards",
|
|
236
|
-
"decks": "Decks",
|
|
237
|
-
"streak": "Streak",
|
|
238
|
-
"special": "Special"
|
|
239
|
-
}
|
|
240
|
-
},
|
|
241
|
-
"challenges": {
|
|
242
|
-
"title": "Daily Challenges",
|
|
243
|
-
"today": "Today's Challenges",
|
|
244
|
-
"completed": "Completed",
|
|
245
|
-
"inProgress": "In Progress",
|
|
246
|
-
"reward": "Reward",
|
|
247
|
-
"goal": "Goal",
|
|
248
|
-
"progress": "Progress"
|
|
249
|
-
},
|
|
250
|
-
"xpRewards": {
|
|
251
|
-
"cardReviewed": "+{{amount}} XP - Card Reviewed",
|
|
252
|
-
"cardCorrect": "+{{amount}} XP - Correct Answer",
|
|
253
|
-
"cardPerfect": "+{{amount}} XP - Perfect!",
|
|
254
|
-
"deckCreated": "+{{amount}} XP - Deck Created",
|
|
255
|
-
"studySession": "+{{amount}} XP - Study Session",
|
|
256
|
-
"dailyGoal": "+{{amount}} XP - Daily Goal Met",
|
|
257
|
-
"streakDay": "+{{amount}} XP - Streak Day",
|
|
258
|
-
"achievementUnlocked": "+{{amount}} XP - Achievement Unlocked"
|
|
259
|
-
}
|
|
260
|
-
},
|
|
261
|
-
"matching": {
|
|
262
|
-
"title": "Matching Game",
|
|
263
|
-
"instructions": "Match the cards by tapping pairs",
|
|
264
|
-
"matches": "Matches",
|
|
265
|
-
"attempts": "Attempts",
|
|
266
|
-
"timeElapsed": "Time",
|
|
267
|
-
"perfect": "Perfect Match!",
|
|
268
|
-
"tryAgain": "Try Again"
|
|
269
|
-
},
|
|
270
|
-
"quiz": {
|
|
271
|
-
"title": "Multiple Choice Quiz",
|
|
272
|
-
"question": "Question",
|
|
273
|
-
"chooseAnswer": "Choose the correct answer",
|
|
274
|
-
"correct": "Correct!",
|
|
275
|
-
"incorrect": "Incorrect",
|
|
276
|
-
"showAnswer": "Show Answer",
|
|
277
|
-
"nextQuestion": "Next Question"
|
|
278
|
-
},
|
|
279
|
-
"writing": {
|
|
280
|
-
"title": "Writing Mode",
|
|
281
|
-
"instructions": "Type the answer",
|
|
282
|
-
"yourAnswer": "Your Answer",
|
|
283
|
-
"correctAnswer": "Correct Answer",
|
|
284
|
-
"similarity": "Similarity",
|
|
285
|
-
"strictMode": "Strict Mode",
|
|
286
|
-
"fuzzyMatching": "Fuzzy Matching",
|
|
287
|
-
"check": "Check Answer"
|
|
288
|
-
},
|
|
289
|
-
"media": {
|
|
290
|
-
"image": "Image",
|
|
291
|
-
"chooseImage": "Choose Image",
|
|
292
|
-
"takePhoto": "Take Photo",
|
|
293
|
-
"permissionDenied": "Permission denied to access photos",
|
|
294
|
-
"cameraPermissionDenied": "Permission denied to access camera",
|
|
295
|
-
"imageFailed": "Failed to load image",
|
|
296
|
-
"cameraFailed": "Failed to open camera",
|
|
297
|
-
"audio": "Audio",
|
|
298
|
-
"record": "Record Audio",
|
|
299
|
-
"recording": "Recording...",
|
|
300
|
-
"stopRecording": "Stop Recording",
|
|
301
|
-
"play": "Play",
|
|
302
|
-
"stop": "Stop",
|
|
303
|
-
"speak": "Speak",
|
|
304
|
-
"audioPermissionDenied": "Permission denied to record audio",
|
|
305
|
-
"recordingFailed": "Failed to record audio",
|
|
306
|
-
"playbackFailed": "Failed to play audio",
|
|
307
|
-
"ttsFailed": "Text-to-speech failed",
|
|
308
|
-
"noText": "No text to speak"
|
|
309
|
-
}
|
|
310
|
-
}
|