@shopplus/membership-i18n 0.2.0 → 0.3.0
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 +102 -0
- package/dist/chunks/en-US-B3P-SPZm.js +337 -0
- package/dist/chunks/en-US-B3P-SPZm.js.map +1 -0
- package/dist/chunks/zh-CN-Chj8fDcr.js +337 -0
- package/dist/chunks/zh-CN-Chj8fDcr.js.map +1 -0
- package/dist/index.es.js +2 -2
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# @shopplus/membership-i18n
|
|
2
|
+
|
|
3
|
+
Shared internationalization package for ShopPlus Membership SDK. 12 locales, Intl-based formatting, RTL support.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 12 built-in locales: en-US, zh-CN, zh-TW, ja-JP, ko-KR, fr-FR, de-DE, es-ES, pt-BR, th-TH, ar-SA, he-IL
|
|
8
|
+
- 106 error code translations per locale
|
|
9
|
+
- UI component text translations
|
|
10
|
+
- Currency, number, and date formatting via `Intl` APIs
|
|
11
|
+
- RTL detection (Arabic, Hebrew)
|
|
12
|
+
- Lazy-loaded locale chunks (only loaded locale is bundled)
|
|
13
|
+
- Zero runtime dependencies
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install @shopplus/membership-i18n
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { createI18n } from '@shopplus/membership-i18n';
|
|
25
|
+
|
|
26
|
+
const i18n = await createI18n('zh-CN');
|
|
27
|
+
|
|
28
|
+
// Translate a key
|
|
29
|
+
i18n.t('common.points'); // "积分"
|
|
30
|
+
i18n.t('points.earn', { amount: 100 }); // "获得 100 积分"
|
|
31
|
+
|
|
32
|
+
// Error code translation
|
|
33
|
+
i18n.t('sdk.error.210922'); // "验证码发送过于频繁,请稍后再试"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Formatting
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { formatCurrency, formatNumber, formatDate } from '@shopplus/membership-i18n';
|
|
40
|
+
|
|
41
|
+
// Currency (uses Intl.NumberFormat)
|
|
42
|
+
formatCurrency(99.5, 'USD', 'en-US'); // "$99.50"
|
|
43
|
+
formatCurrency(1280, 'JPY', 'ja-JP'); // "¥1,280"
|
|
44
|
+
|
|
45
|
+
// Number
|
|
46
|
+
formatNumber(12345.6, 'de-DE'); // "12.345,6"
|
|
47
|
+
|
|
48
|
+
// Date (uses Intl.DateTimeFormat)
|
|
49
|
+
formatDate(new Date(), 'zh-CN'); // "2026年7月1日"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## RTL Support
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import { isRTL } from '@shopplus/membership-i18n';
|
|
56
|
+
|
|
57
|
+
isRTL('ar-SA'); // true
|
|
58
|
+
isRTL('he-IL'); // true
|
|
59
|
+
isRTL('en-US'); // false
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Available Locales
|
|
63
|
+
|
|
64
|
+
| Locale | Language | Direction |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| `en-US` | English | LTR |
|
|
67
|
+
| `zh-CN` | Simplified Chinese | LTR |
|
|
68
|
+
| `zh-TW` | Traditional Chinese | LTR |
|
|
69
|
+
| `ja-JP` | Japanese | LTR |
|
|
70
|
+
| `ko-KR` | Korean | LTR |
|
|
71
|
+
| `fr-FR` | French | LTR |
|
|
72
|
+
| `de-DE` | German | LTR |
|
|
73
|
+
| `es-ES` | Spanish | LTR |
|
|
74
|
+
| `pt-BR` | Brazilian Portuguese | LTR |
|
|
75
|
+
| `th-TH` | Thai | LTR |
|
|
76
|
+
| `ar-SA` | Arabic | RTL |
|
|
77
|
+
| `he-IL` | Hebrew | RTL |
|
|
78
|
+
|
|
79
|
+
## Translation Keys
|
|
80
|
+
|
|
81
|
+
| Namespace | Description |
|
|
82
|
+
|---|---|
|
|
83
|
+
| `common.*` | Shared UI text (confirm, cancel, loading...) |
|
|
84
|
+
| `points.*` | Points-related messages |
|
|
85
|
+
| `level.*` | Level/tier messages |
|
|
86
|
+
| `coupon.*` | Coupon status text |
|
|
87
|
+
| `checkin.*` | Check-in messages |
|
|
88
|
+
| `errors.*` | Generic error messages |
|
|
89
|
+
| `ui.*` | UI component text (member center, forms, etc.) |
|
|
90
|
+
| `sdk.error.*` | Error code translations (106 codes) |
|
|
91
|
+
|
|
92
|
+
## Module Formats
|
|
93
|
+
|
|
94
|
+
| Format | File | Usage |
|
|
95
|
+
|---|---|---|
|
|
96
|
+
| ESM | `dist/index.es.js` | Bundlers (locale chunks lazy-loaded) |
|
|
97
|
+
| UMD | `dist/index.umd.js` | Script tag (all locales bundled) |
|
|
98
|
+
| Types | `dist/index.d.ts` | TypeScript support |
|
|
99
|
+
|
|
100
|
+
## License
|
|
101
|
+
|
|
102
|
+
MIT
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
var e = {
|
|
2
|
+
memberCenter: "Member Center",
|
|
3
|
+
points: "Points",
|
|
4
|
+
level: "Level",
|
|
5
|
+
coupons: "Coupons",
|
|
6
|
+
checkin: "Check In",
|
|
7
|
+
history: "History",
|
|
8
|
+
balance: "Balance",
|
|
9
|
+
expire: "Expire",
|
|
10
|
+
confirm: "Confirm",
|
|
11
|
+
cancel: "Cancel",
|
|
12
|
+
loading: "Loading...",
|
|
13
|
+
noData: "No data",
|
|
14
|
+
retry: "Retry",
|
|
15
|
+
success: "Success",
|
|
16
|
+
failed: "Failed"
|
|
17
|
+
}, n = {
|
|
18
|
+
earn: "Earn {amount} points",
|
|
19
|
+
spend: "Spend {amount} points",
|
|
20
|
+
balance: "Current balance: {amount} points",
|
|
21
|
+
expired: "{amount} points expired",
|
|
22
|
+
estimated: "Estimated (pending confirmation)"
|
|
23
|
+
}, t = {
|
|
24
|
+
current: "Current level: {name}",
|
|
25
|
+
nextLevel: "Next level: {name}",
|
|
26
|
+
progress: "{current}/{target} to next level",
|
|
27
|
+
upgraded: "Congratulations! Upgraded to {name}"
|
|
28
|
+
}, o = {
|
|
29
|
+
claim: "Claim",
|
|
30
|
+
claimed: "Claimed",
|
|
31
|
+
expired: "Expired",
|
|
32
|
+
used: "Used",
|
|
33
|
+
validUntil: "Valid until {date}"
|
|
34
|
+
}, i = {
|
|
35
|
+
today: "Check in today",
|
|
36
|
+
done: "Checked in",
|
|
37
|
+
streak: "{days} day streak",
|
|
38
|
+
reward: "+{amount} points"
|
|
39
|
+
}, a = {
|
|
40
|
+
network: "Network error, please try again",
|
|
41
|
+
unauthorized: "Please login first",
|
|
42
|
+
serverError: "Server error, please try later",
|
|
43
|
+
timeout: "Request timeout"
|
|
44
|
+
}, r = {
|
|
45
|
+
memberCenter: {
|
|
46
|
+
loading: "Loading...",
|
|
47
|
+
avatarAlt: "Member avatar",
|
|
48
|
+
pointsBalance: "My Points",
|
|
49
|
+
menuLabel: "Member navigation",
|
|
50
|
+
menu: {
|
|
51
|
+
pointsDetail: "Points History",
|
|
52
|
+
levelDetail: "Level Benefits",
|
|
53
|
+
coupons: "My Coupons",
|
|
54
|
+
referral: "Invite Friends",
|
|
55
|
+
checkin: "Daily Check-in"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
pointsDetail: {
|
|
59
|
+
title: "Points History",
|
|
60
|
+
empty: "No points transactions yet",
|
|
61
|
+
loading: "Loading...",
|
|
62
|
+
noMore: "No more records",
|
|
63
|
+
listLabel: "Points transactions",
|
|
64
|
+
status: {
|
|
65
|
+
pending: "Pending",
|
|
66
|
+
active: "Active",
|
|
67
|
+
used: "Used",
|
|
68
|
+
expired: "Expired"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
levelProgress: {
|
|
72
|
+
loading: "Loading...",
|
|
73
|
+
maxLevel: "Max level reached",
|
|
74
|
+
progressLabel: "Level progress",
|
|
75
|
+
noBenefits: "No benefits yet",
|
|
76
|
+
nextLevel: "Next level: {name}",
|
|
77
|
+
benefitsTitle: "My Benefits"
|
|
78
|
+
},
|
|
79
|
+
couponList: {
|
|
80
|
+
title: "My Coupons",
|
|
81
|
+
tabsLabel: "Coupon categories",
|
|
82
|
+
listLabel: "Coupon list",
|
|
83
|
+
empty: "No coupons available",
|
|
84
|
+
freeShipping: "Free Shipping",
|
|
85
|
+
giftValue: "Gift",
|
|
86
|
+
discountValue: "{value}% OFF",
|
|
87
|
+
type: {
|
|
88
|
+
discount: "Discount",
|
|
89
|
+
cash: "Cash",
|
|
90
|
+
shipping: "Shipping",
|
|
91
|
+
gift: "Gift"
|
|
92
|
+
},
|
|
93
|
+
tab: {
|
|
94
|
+
claimable: "Claim",
|
|
95
|
+
available: "Available",
|
|
96
|
+
used: "Used",
|
|
97
|
+
expired: "Expired"
|
|
98
|
+
},
|
|
99
|
+
loadingClaimable: "Loading...",
|
|
100
|
+
noClaimable: "No coupons to claim",
|
|
101
|
+
claiming: "Claiming...",
|
|
102
|
+
claim: "Claim",
|
|
103
|
+
stockInfo: "{remaining} left",
|
|
104
|
+
stockUnlimited: "Unlimited",
|
|
105
|
+
minOrder: "Min. order {amount}"
|
|
106
|
+
},
|
|
107
|
+
referralShare: {
|
|
108
|
+
loading: "Loading...",
|
|
109
|
+
title: "Invite Friends",
|
|
110
|
+
shareTitle: "Invite friends to earn points",
|
|
111
|
+
shareText: "Join now and get a reward on signup!",
|
|
112
|
+
invitedCount: "Invited",
|
|
113
|
+
rewardPoints: "Points Earned",
|
|
114
|
+
codeLabel: "My Referral Code",
|
|
115
|
+
linkLabel: "Referral Link",
|
|
116
|
+
copy: "Copy",
|
|
117
|
+
copyCode: "Copy referral code",
|
|
118
|
+
share: "Share",
|
|
119
|
+
rewardHint: "Earn {points} points per friend invited",
|
|
120
|
+
tabShare: "Invite",
|
|
121
|
+
tabRecords: "Records",
|
|
122
|
+
loadingRecords: "Loading records...",
|
|
123
|
+
noRecords: "No invitations yet",
|
|
124
|
+
anonymousUser: "Anonymous",
|
|
125
|
+
prevPage: "Previous",
|
|
126
|
+
nextPage: "Next",
|
|
127
|
+
recordsLabel: "Invitation records",
|
|
128
|
+
status: {
|
|
129
|
+
registered: "Registered",
|
|
130
|
+
first_order: "First Order",
|
|
131
|
+
rewarded: "Rewarded"
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
checkinCalendar: {
|
|
135
|
+
loading: "Loading...",
|
|
136
|
+
checking: "Checking in...",
|
|
137
|
+
checkin: "Check In",
|
|
138
|
+
alreadyChecked: "Checked in",
|
|
139
|
+
day: "{count} days",
|
|
140
|
+
title: "Daily Check-in",
|
|
141
|
+
streak: "{days} day streak",
|
|
142
|
+
calendarLabel: "Check-in calendar",
|
|
143
|
+
rewardsTitle: "Streak Rewards",
|
|
144
|
+
rewardsLabel: "Streak rewards list",
|
|
145
|
+
prevMonth: "Previous month",
|
|
146
|
+
nextMonth: "Next month",
|
|
147
|
+
monthDays: "{count} days checked",
|
|
148
|
+
monthPoints: "Points earned",
|
|
149
|
+
weekday: {
|
|
150
|
+
sun: "Sun",
|
|
151
|
+
mon: "Mon",
|
|
152
|
+
tue: "Tue",
|
|
153
|
+
wed: "Wed",
|
|
154
|
+
thu: "Thu",
|
|
155
|
+
fri: "Fri",
|
|
156
|
+
sat: "Sat"
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
orderList: {
|
|
160
|
+
loading: "Loading orders...",
|
|
161
|
+
title: "Order History",
|
|
162
|
+
noOrders: "No order records yet",
|
|
163
|
+
listLabel: "Order records list",
|
|
164
|
+
prevPage: "Previous",
|
|
165
|
+
nextPage: "Next",
|
|
166
|
+
typePoints: "Points",
|
|
167
|
+
typeGrowth: "Growth",
|
|
168
|
+
bizType: {
|
|
169
|
+
Order_Pay: "Order Payment",
|
|
170
|
+
Order_Refund: "Order Refund"
|
|
171
|
+
},
|
|
172
|
+
status: {
|
|
173
|
+
pending: "Pending",
|
|
174
|
+
active: "Active",
|
|
175
|
+
invalid: "Invalid",
|
|
176
|
+
used: "Used",
|
|
177
|
+
expired: "Expired"
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
auth: {
|
|
181
|
+
login: {
|
|
182
|
+
emailLabel: "Email",
|
|
183
|
+
passwordLabel: "Password",
|
|
184
|
+
submit: "Log In",
|
|
185
|
+
createAccount: "Create Account",
|
|
186
|
+
forgotPassword: "Forgot Password?",
|
|
187
|
+
orDivider: "or"
|
|
188
|
+
},
|
|
189
|
+
register: {
|
|
190
|
+
emailLabel: "Email",
|
|
191
|
+
passwordLabel: "Password",
|
|
192
|
+
confirmPasswordLabel: "Confirm Password",
|
|
193
|
+
passwordHint: "At least 8 characters, with letters and numbers",
|
|
194
|
+
submit: "Create Account",
|
|
195
|
+
submitting: "Creating...",
|
|
196
|
+
hasAccount: "Already have an account? Log In",
|
|
197
|
+
passwordMismatch: "Passwords do not match"
|
|
198
|
+
},
|
|
199
|
+
oauth: { continueWith: "Continue with {provider}" },
|
|
200
|
+
verify: {
|
|
201
|
+
title: "Verify Your Email",
|
|
202
|
+
description: "We've sent a verification code to your email",
|
|
203
|
+
digitLabel: "Digit {index}",
|
|
204
|
+
resend: "Resend Code",
|
|
205
|
+
resendCountdown: "Resend ({countdown}s)",
|
|
206
|
+
backToRegister: "Back to Register"
|
|
207
|
+
},
|
|
208
|
+
forgot: {
|
|
209
|
+
title: "Reset Password",
|
|
210
|
+
description: "Enter your email and we'll send you a verification code.",
|
|
211
|
+
emailLabel: "Email",
|
|
212
|
+
submit: "Send Code",
|
|
213
|
+
backToLogin: "Back to Login"
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}, s = { error: {
|
|
217
|
+
210900: "Invalid parameters",
|
|
218
|
+
210901: "Tenant ID is required",
|
|
219
|
+
210902: "Too many requests, please try later",
|
|
220
|
+
210903: "Unauthorized",
|
|
221
|
+
210904: "Token expired",
|
|
222
|
+
210905: "Invalid token",
|
|
223
|
+
210906: "Token refresh failed",
|
|
224
|
+
210907: "Platform token exchange failed",
|
|
225
|
+
210908: "Invalid refresh token",
|
|
226
|
+
210909: "Refresh token expired",
|
|
227
|
+
210911: "Member not found",
|
|
228
|
+
210912: "Level info not found",
|
|
229
|
+
210920: "This email is already registered",
|
|
230
|
+
210921: "Password too weak: at least 8 characters with letters and numbers",
|
|
231
|
+
210922: "Verification code sent too frequently, please try later",
|
|
232
|
+
210923: "Invalid or expired verification code",
|
|
233
|
+
210924: "Registration info expired, please register again",
|
|
234
|
+
210925: "Incorrect email or password",
|
|
235
|
+
210926: "Email not verified, please verify first",
|
|
236
|
+
210927: "OAuth authentication failed",
|
|
237
|
+
210928: "OAuth state invalid or expired",
|
|
238
|
+
210929: "Unsupported login method",
|
|
239
|
+
210930: "User creation failed",
|
|
240
|
+
210931: "Discount calculation failed",
|
|
241
|
+
210951: "Points balance query failed",
|
|
242
|
+
210952: "Points transactions query failed",
|
|
243
|
+
210953: "Points earning failed",
|
|
244
|
+
210954: "Points activation failed",
|
|
245
|
+
210955: "Points spending failed",
|
|
246
|
+
210956: "Insufficient points balance",
|
|
247
|
+
210957: "Points ledger not found",
|
|
248
|
+
210958: "Points status does not allow this operation",
|
|
249
|
+
210971: "Coupon out of stock",
|
|
250
|
+
210972: "Coupon already claimed",
|
|
251
|
+
210981: "Message queue write failed",
|
|
252
|
+
210982: "Internal service sync failed",
|
|
253
|
+
210983: "Exchange product not found",
|
|
254
|
+
210984: "Redemption failed",
|
|
255
|
+
210985: "Referral code not found",
|
|
256
|
+
210986: "Referral binding failed",
|
|
257
|
+
210987: "Referrer not found",
|
|
258
|
+
210988: "Cannot invite yourself",
|
|
259
|
+
210989: "Coupon claim failed",
|
|
260
|
+
210990: "Already checked in today",
|
|
261
|
+
210991: "Check-in failed",
|
|
262
|
+
211900: "Operation failed, please try again",
|
|
263
|
+
211901: "Authentication failed",
|
|
264
|
+
211902: "Account not bound",
|
|
265
|
+
211903: "Access denied",
|
|
266
|
+
211904: "Configuration not found",
|
|
267
|
+
211905: "Invalid configuration scope",
|
|
268
|
+
211906: "Role not found",
|
|
269
|
+
211907: "System role cannot be deleted",
|
|
270
|
+
211908: "No access to this tenant",
|
|
271
|
+
211909: "Validation failed",
|
|
272
|
+
211910: "Resource not found",
|
|
273
|
+
211911: "Member not found",
|
|
274
|
+
211912: "Identity conflict, please contact support",
|
|
275
|
+
211913: "Shadow account activation failed",
|
|
276
|
+
211914: "Review record not found",
|
|
277
|
+
211915: "Review record status is not pending",
|
|
278
|
+
211916: "OneID not found",
|
|
279
|
+
211917: "OneID unlink failed",
|
|
280
|
+
211931: "Level configuration not found",
|
|
281
|
+
211932: "Level has associated members, cannot delete",
|
|
282
|
+
211933: "Level upgrade condition validation failed",
|
|
283
|
+
211934: "Level sequence must be continuous",
|
|
284
|
+
211951: "Ledger status transition invalid",
|
|
285
|
+
211952: "Insufficient points balance",
|
|
286
|
+
211953: "Ledger record not found",
|
|
287
|
+
211954: "Duplicate points transaction",
|
|
288
|
+
211955: "Invalid points amount",
|
|
289
|
+
211956: "Points deduction exceeds max ratio",
|
|
290
|
+
211957: "Points below minimum threshold",
|
|
291
|
+
211958: "Points earning rule not configured",
|
|
292
|
+
211959: "Points activation failed: status is not pending",
|
|
293
|
+
211960: "Points transaction access denied",
|
|
294
|
+
211961: "Points already expired",
|
|
295
|
+
211962: "Growth rule not configured",
|
|
296
|
+
211971: "Coupon template not found",
|
|
297
|
+
211972: "Coupon template status invalid",
|
|
298
|
+
211973: "Coupon per-user limit exceeded",
|
|
299
|
+
211974: "Coupon total quota exceeded",
|
|
300
|
+
211975: "Coupon redemption status invalid",
|
|
301
|
+
211976: "Coupon expired",
|
|
302
|
+
211977: "Coupon template has issued coupons, cannot delete",
|
|
303
|
+
211981: "Push task not found",
|
|
304
|
+
211982: "Push task status does not allow editing",
|
|
305
|
+
211983: "Push task status does not allow cancellation",
|
|
306
|
+
211984: "Push template not found",
|
|
307
|
+
211985: "Push target audience is empty",
|
|
308
|
+
211991: "Service busy, please try again later",
|
|
309
|
+
211992: "Message publish failed",
|
|
310
|
+
211993: "Message entered dead letter queue",
|
|
311
|
+
211001: "Webhook signature verification failed",
|
|
312
|
+
211002: "Unsupported webhook platform",
|
|
313
|
+
211003: "Duplicate webhook request",
|
|
314
|
+
211004: "Webhook secret not configured",
|
|
315
|
+
211005: "Webhook timestamp expired",
|
|
316
|
+
network: "Network error, please check your connection",
|
|
317
|
+
timeout: "Request timeout, please try again",
|
|
318
|
+
aborted: "Request was cancelled",
|
|
319
|
+
parse: "Response parse error",
|
|
320
|
+
unauthorized: "Please login first",
|
|
321
|
+
config: "SDK initialization error",
|
|
322
|
+
unknown: "An unknown error occurred"
|
|
323
|
+
} }, d = {
|
|
324
|
+
common: e,
|
|
325
|
+
points: n,
|
|
326
|
+
level: t,
|
|
327
|
+
coupon: o,
|
|
328
|
+
checkin: i,
|
|
329
|
+
errors: a,
|
|
330
|
+
ui: r,
|
|
331
|
+
sdk: s
|
|
332
|
+
};
|
|
333
|
+
export {
|
|
334
|
+
d as default
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
//# sourceMappingURL=en-US-B3P-SPZm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en-US-B3P-SPZm.js","names":[],"sources":["../../src/locales/en-US.json"],"sourcesContent":["{\n \"common\": {\n \"memberCenter\": \"Member Center\",\n \"points\": \"Points\",\n \"level\": \"Level\",\n \"coupons\": \"Coupons\",\n \"checkin\": \"Check In\",\n \"history\": \"History\",\n \"balance\": \"Balance\",\n \"expire\": \"Expire\",\n \"confirm\": \"Confirm\",\n \"cancel\": \"Cancel\",\n \"loading\": \"Loading...\",\n \"noData\": \"No data\",\n \"retry\": \"Retry\",\n \"success\": \"Success\",\n \"failed\": \"Failed\"\n },\n \"points\": {\n \"earn\": \"Earn {amount} points\",\n \"spend\": \"Spend {amount} points\",\n \"balance\": \"Current balance: {amount} points\",\n \"expired\": \"{amount} points expired\",\n \"estimated\": \"Estimated (pending confirmation)\"\n },\n \"level\": {\n \"current\": \"Current level: {name}\",\n \"nextLevel\": \"Next level: {name}\",\n \"progress\": \"{current}/{target} to next level\",\n \"upgraded\": \"Congratulations! Upgraded to {name}\"\n },\n \"coupon\": {\n \"claim\": \"Claim\",\n \"claimed\": \"Claimed\",\n \"expired\": \"Expired\",\n \"used\": \"Used\",\n \"validUntil\": \"Valid until {date}\"\n },\n \"checkin\": {\n \"today\": \"Check in today\",\n \"done\": \"Checked in\",\n \"streak\": \"{days} day streak\",\n \"reward\": \"+{amount} points\"\n },\n \"errors\": {\n \"network\": \"Network error, please try again\",\n \"unauthorized\": \"Please login first\",\n \"serverError\": \"Server error, please try later\",\n \"timeout\": \"Request timeout\"\n },\n \"ui\": {\n \"memberCenter\": {\n \"loading\": \"Loading...\",\n \"avatarAlt\": \"Member avatar\",\n \"pointsBalance\": \"My Points\",\n \"menuLabel\": \"Member navigation\",\n \"menu\": {\n \"pointsDetail\": \"Points History\",\n \"levelDetail\": \"Level Benefits\",\n \"coupons\": \"My Coupons\",\n \"referral\": \"Invite Friends\",\n \"checkin\": \"Daily Check-in\"\n }\n },\n \"pointsDetail\": {\n \"title\": \"Points History\",\n \"empty\": \"No points transactions yet\",\n \"loading\": \"Loading...\",\n \"noMore\": \"No more records\",\n \"listLabel\": \"Points transactions\",\n \"status\": {\n \"pending\": \"Pending\",\n \"active\": \"Active\",\n \"used\": \"Used\",\n \"expired\": \"Expired\"\n }\n },\n \"levelProgress\": {\n \"loading\": \"Loading...\",\n \"maxLevel\": \"Max level reached\",\n \"progressLabel\": \"Level progress\",\n \"noBenefits\": \"No benefits yet\",\n \"nextLevel\": \"Next level: {name}\",\n \"benefitsTitle\": \"My Benefits\"\n },\n \"couponList\": {\n \"title\": \"My Coupons\",\n \"tabsLabel\": \"Coupon categories\",\n \"listLabel\": \"Coupon list\",\n \"empty\": \"No coupons available\",\n \"freeShipping\": \"Free Shipping\",\n \"giftValue\": \"Gift\",\n \"discountValue\": \"{value}% OFF\",\n \"type\": {\n \"discount\": \"Discount\",\n \"cash\": \"Cash\",\n \"shipping\": \"Shipping\",\n \"gift\": \"Gift\"\n },\n \"tab\": {\n \"claimable\": \"Claim\",\n \"available\": \"Available\",\n \"used\": \"Used\",\n \"expired\": \"Expired\"\n },\n \"loadingClaimable\": \"Loading...\",\n \"noClaimable\": \"No coupons to claim\",\n \"claiming\": \"Claiming...\",\n \"claim\": \"Claim\",\n \"stockInfo\": \"{remaining} left\",\n \"stockUnlimited\": \"Unlimited\",\n \"minOrder\": \"Min. order {amount}\"\n },\n \"referralShare\": {\n \"loading\": \"Loading...\",\n \"title\": \"Invite Friends\",\n \"shareTitle\": \"Invite friends to earn points\",\n \"shareText\": \"Join now and get a reward on signup!\",\n \"invitedCount\": \"Invited\",\n \"rewardPoints\": \"Points Earned\",\n \"codeLabel\": \"My Referral Code\",\n \"linkLabel\": \"Referral Link\",\n \"copy\": \"Copy\",\n \"copyCode\": \"Copy referral code\",\n \"share\": \"Share\",\n \"rewardHint\": \"Earn {points} points per friend invited\",\n \"tabShare\": \"Invite\",\n \"tabRecords\": \"Records\",\n \"loadingRecords\": \"Loading records...\",\n \"noRecords\": \"No invitations yet\",\n \"anonymousUser\": \"Anonymous\",\n \"prevPage\": \"Previous\",\n \"nextPage\": \"Next\",\n \"recordsLabel\": \"Invitation records\",\n \"status\": {\n \"registered\": \"Registered\",\n \"first_order\": \"First Order\",\n \"rewarded\": \"Rewarded\"\n }\n },\n \"checkinCalendar\": {\n \"loading\": \"Loading...\",\n \"checking\": \"Checking in...\",\n \"checkin\": \"Check In\",\n \"alreadyChecked\": \"Checked in\",\n \"day\": \"{count} days\",\n \"title\": \"Daily Check-in\",\n \"streak\": \"{days} day streak\",\n \"calendarLabel\": \"Check-in calendar\",\n \"rewardsTitle\": \"Streak Rewards\",\n \"rewardsLabel\": \"Streak rewards list\",\n \"prevMonth\": \"Previous month\",\n \"nextMonth\": \"Next month\",\n \"monthDays\": \"{count} days checked\",\n \"monthPoints\": \"Points earned\",\n \"weekday\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n }\n },\n \"orderList\": {\n \"loading\": \"Loading orders...\",\n \"title\": \"Order History\",\n \"noOrders\": \"No order records yet\",\n \"listLabel\": \"Order records list\",\n \"prevPage\": \"Previous\",\n \"nextPage\": \"Next\",\n \"typePoints\": \"Points\",\n \"typeGrowth\": \"Growth\",\n \"bizType\": {\n \"Order_Pay\": \"Order Payment\",\n \"Order_Refund\": \"Order Refund\"\n },\n \"status\": {\n \"pending\": \"Pending\",\n \"active\": \"Active\",\n \"invalid\": \"Invalid\",\n \"used\": \"Used\",\n \"expired\": \"Expired\"\n }\n },\n \"auth\": {\n \"login\": {\n \"emailLabel\": \"Email\",\n \"passwordLabel\": \"Password\",\n \"submit\": \"Log In\",\n \"createAccount\": \"Create Account\",\n \"forgotPassword\": \"Forgot Password?\",\n \"orDivider\": \"or\"\n },\n \"register\": {\n \"emailLabel\": \"Email\",\n \"passwordLabel\": \"Password\",\n \"confirmPasswordLabel\": \"Confirm Password\",\n \"passwordHint\": \"At least 8 characters, with letters and numbers\",\n \"submit\": \"Create Account\",\n \"submitting\": \"Creating...\",\n \"hasAccount\": \"Already have an account? Log In\",\n \"passwordMismatch\": \"Passwords do not match\"\n },\n \"oauth\": {\n \"continueWith\": \"Continue with {provider}\"\n },\n \"verify\": {\n \"title\": \"Verify Your Email\",\n \"description\": \"We've sent a verification code to your email\",\n \"digitLabel\": \"Digit {index}\",\n \"resend\": \"Resend Code\",\n \"resendCountdown\": \"Resend ({countdown}s)\",\n \"backToRegister\": \"Back to Register\"\n },\n \"forgot\": {\n \"title\": \"Reset Password\",\n \"description\": \"Enter your email and we'll send you a verification code.\",\n \"emailLabel\": \"Email\",\n \"submit\": \"Send Code\",\n \"backToLogin\": \"Back to Login\"\n }\n }\n },\n \"sdk\": {\n \"error\": {\n \"210900\": \"Invalid parameters\",\n \"210901\": \"Tenant ID is required\",\n \"210902\": \"Too many requests, please try later\",\n \"210903\": \"Unauthorized\",\n \"210904\": \"Token expired\",\n \"210905\": \"Invalid token\",\n \"210906\": \"Token refresh failed\",\n \"210907\": \"Platform token exchange failed\",\n \"210908\": \"Invalid refresh token\",\n \"210909\": \"Refresh token expired\",\n \"210911\": \"Member not found\",\n \"210912\": \"Level info not found\",\n \"210920\": \"This email is already registered\",\n \"210921\": \"Password too weak: at least 8 characters with letters and numbers\",\n \"210922\": \"Verification code sent too frequently, please try later\",\n \"210923\": \"Invalid or expired verification code\",\n \"210924\": \"Registration info expired, please register again\",\n \"210925\": \"Incorrect email or password\",\n \"210926\": \"Email not verified, please verify first\",\n \"210927\": \"OAuth authentication failed\",\n \"210928\": \"OAuth state invalid or expired\",\n \"210929\": \"Unsupported login method\",\n \"210930\": \"User creation failed\",\n \"210931\": \"Discount calculation failed\",\n \"210951\": \"Points balance query failed\",\n \"210952\": \"Points transactions query failed\",\n \"210953\": \"Points earning failed\",\n \"210954\": \"Points activation failed\",\n \"210955\": \"Points spending failed\",\n \"210956\": \"Insufficient points balance\",\n \"210957\": \"Points ledger not found\",\n \"210958\": \"Points status does not allow this operation\",\n \"210971\": \"Coupon out of stock\",\n \"210972\": \"Coupon already claimed\",\n \"210981\": \"Message queue write failed\",\n \"210982\": \"Internal service sync failed\",\n \"210983\": \"Exchange product not found\",\n \"210984\": \"Redemption failed\",\n \"210985\": \"Referral code not found\",\n \"210986\": \"Referral binding failed\",\n \"210987\": \"Referrer not found\",\n \"210988\": \"Cannot invite yourself\",\n \"210989\": \"Coupon claim failed\",\n \"210990\": \"Already checked in today\",\n \"210991\": \"Check-in failed\",\n \"211900\": \"Operation failed, please try again\",\n \"211901\": \"Authentication failed\",\n \"211902\": \"Account not bound\",\n \"211903\": \"Access denied\",\n \"211904\": \"Configuration not found\",\n \"211905\": \"Invalid configuration scope\",\n \"211906\": \"Role not found\",\n \"211907\": \"System role cannot be deleted\",\n \"211908\": \"No access to this tenant\",\n \"211909\": \"Validation failed\",\n \"211910\": \"Resource not found\",\n \"211911\": \"Member not found\",\n \"211912\": \"Identity conflict, please contact support\",\n \"211913\": \"Shadow account activation failed\",\n \"211914\": \"Review record not found\",\n \"211915\": \"Review record status is not pending\",\n \"211916\": \"OneID not found\",\n \"211917\": \"OneID unlink failed\",\n \"211931\": \"Level configuration not found\",\n \"211932\": \"Level has associated members, cannot delete\",\n \"211933\": \"Level upgrade condition validation failed\",\n \"211934\": \"Level sequence must be continuous\",\n \"211951\": \"Ledger status transition invalid\",\n \"211952\": \"Insufficient points balance\",\n \"211953\": \"Ledger record not found\",\n \"211954\": \"Duplicate points transaction\",\n \"211955\": \"Invalid points amount\",\n \"211956\": \"Points deduction exceeds max ratio\",\n \"211957\": \"Points below minimum threshold\",\n \"211958\": \"Points earning rule not configured\",\n \"211959\": \"Points activation failed: status is not pending\",\n \"211960\": \"Points transaction access denied\",\n \"211961\": \"Points already expired\",\n \"211962\": \"Growth rule not configured\",\n \"211971\": \"Coupon template not found\",\n \"211972\": \"Coupon template status invalid\",\n \"211973\": \"Coupon per-user limit exceeded\",\n \"211974\": \"Coupon total quota exceeded\",\n \"211975\": \"Coupon redemption status invalid\",\n \"211976\": \"Coupon expired\",\n \"211977\": \"Coupon template has issued coupons, cannot delete\",\n \"211981\": \"Push task not found\",\n \"211982\": \"Push task status does not allow editing\",\n \"211983\": \"Push task status does not allow cancellation\",\n \"211984\": \"Push template not found\",\n \"211985\": \"Push target audience is empty\",\n \"211991\": \"Service busy, please try again later\",\n \"211992\": \"Message publish failed\",\n \"211993\": \"Message entered dead letter queue\",\n \"211001\": \"Webhook signature verification failed\",\n \"211002\": \"Unsupported webhook platform\",\n \"211003\": \"Duplicate webhook request\",\n \"211004\": \"Webhook secret not configured\",\n \"211005\": \"Webhook timestamp expired\",\n \"network\": \"Network error, please check your connection\",\n \"timeout\": \"Request timeout, please try again\",\n \"aborted\": \"Request was cancelled\",\n \"parse\": \"Response parse error\",\n \"unauthorized\": \"Please login first\",\n \"config\": \"SDK initialization error\",\n \"unknown\": \"An unknown error occurred\"\n }\n }\n}\n"],"mappings":""}
|