Commit 55dba8dc4b9466d1cd3098f35f1d7617398ac51b

Authored by 常守达
1 parent df1e3d3b

feat(login): 更新国际化及切图

40.4 KB | W: | H:

45.4 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
@@ -18,6 +18,7 @@ import 'package:doublefeel_flutter/data/models/user/user_models.dart'; @@ -18,6 +18,7 @@ import 'package:doublefeel_flutter/data/models/user/user_models.dart';
18 import 'package:doublefeel_flutter/l10n/l10n_extensions.dart'; 18 import 'package:doublefeel_flutter/l10n/l10n_extensions.dart';
19 import 'package:flutter/material.dart'; 19 import 'package:flutter/material.dart';
20 import 'package:get/get.dart'; 20 import 'package:get/get.dart';
  21 +import 'package:intl/intl.dart';
21 22
22 import '../../../../../core/theme/app_colors.dart'; 23 import '../../../../../core/theme/app_colors.dart';
23 24
@@ -536,7 +537,7 @@ class _ProCard extends StatelessWidget { @@ -536,7 +537,7 @@ class _ProCard extends StatelessWidget {
536 ), 537 ),
537 const SizedBox(height: 2), 538 const SizedBox(height: 2),
538 Text( 539 Text(
539 - _vipSubtitle(vipInfo), 540 + _vipSubtitle(vipInfo, context),
540 maxLines: 1, 541 maxLines: 1,
541 overflow: TextOverflow.ellipsis, 542 overflow: TextOverflow.ellipsis,
542 style: const TextStyle( 543 style: const TextStyle(
@@ -565,21 +566,25 @@ class _ProCard extends StatelessWidget { @@ -565,21 +566,25 @@ class _ProCard extends StatelessWidget {
565 ); 566 );
566 } 567 }
567 568
568 - String _vipSubtitle(UserPreferencesVipInfo? vipInfo) { 569 + String _vipSubtitle(UserPreferencesVipInfo? vipInfo, BuildContext context) {
569 final endDate = vipInfo?.vipEndDate ?? 0; 570 final endDate = vipInfo?.vipEndDate ?? 0;
570 if (vipInfo?.isVip != true || endDate <= 0) { 571 if (vipInfo?.isVip != true || endDate <= 0) {
571 - return '立即解锁'; 572 + return l10n.unlockNow;
572 } 573 }
573 574
574 if (vipInfo?.isForeverVip ?? false) { 575 if (vipInfo?.isForeverVip ?? false) {
575 - return '终身会员'; 576 + return l10n.purchaseLifetimePlan;
576 } 577 }
577 578
578 final milliseconds = endDate > 1000000000000 ? endDate : endDate * 1000; 579 final milliseconds = endDate > 1000000000000 ? endDate : endDate * 1000;
579 final date = DateTime.fromMillisecondsSinceEpoch(milliseconds); 580 final date = DateTime.fromMillisecondsSinceEpoch(milliseconds);
580 - final month = date.month.toString().padLeft(2, '0');  
581 - final day = date.day.toString().padLeft(2, '0');  
582 - return '有效期至 ${date.year}-$month-$day'; 581 + // final month = date.month.toString().padLeft(2, '0');
  582 + // final day = date.day.toString().padLeft(2, '0');
  583 + final locale = Localizations.localeOf(context).languageCode;
  584 +
  585 + final dateStr = DateFormat.yMMMd(locale).format(date);
  586 +
  587 + return l10n.membershipValidUntilDate(dateStr);
583 } 588 }
584 } 589 }
585 590
@@ -7,8 +7,10 @@ import 'package:doublefeel_flutter/core/theme/app_theme.dart'; @@ -7,8 +7,10 @@ import 'package:doublefeel_flutter/core/theme/app_theme.dart';
7 import 'package:doublefeel_flutter/data/local/user_preferences_storage.dart'; 7 import 'package:doublefeel_flutter/data/local/user_preferences_storage.dart';
8 import 'package:doublefeel_flutter/data/models/local/user_preferences.dart'; 8 import 'package:doublefeel_flutter/data/models/local/user_preferences.dart';
9 import 'package:doublefeel_flutter/l10n/l10n_extensions.dart'; 9 import 'package:doublefeel_flutter/l10n/l10n_extensions.dart';
  10 +import 'package:doublefeel_flutter/l10n/l10n_extensions.dart' as context;
10 import 'package:flutter/material.dart'; 11 import 'package:flutter/material.dart';
11 import 'package:get/get.dart'; 12 import 'package:get/get.dart';
  13 +import 'package:intl/intl.dart';
12 14
13 class MembershipDetailView extends GetView<MembershipDetailController> { 15 class MembershipDetailView extends GetView<MembershipDetailController> {
14 const MembershipDetailView({super.key}); 16 const MembershipDetailView({super.key});
@@ -115,7 +117,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> { @@ -115,7 +117,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> {
115 final preferences = userPrefs.preferences.value; 117 final preferences = userPrefs.preferences.value;
116 final vipInfo = preferences.vipInfo; 118 final vipInfo = preferences.vipInfo;
117 return Text( 119 return Text(
118 - _vipSubtitle(vipInfo), 120 + _vipSubtitle(vipInfo, context),
119 style: TextStyle( 121 style: TextStyle(
120 color: context.colors.textPrimary, 122 color: context.colors.textPrimary,
121 fontSize: 14, 123 fontSize: 14,
@@ -140,7 +142,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> { @@ -140,7 +142,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> {
140 padding: const EdgeInsets.only( 142 padding: const EdgeInsets.only(
141 top: 28, left: 16, right: 16, bottom: 16), 143 top: 28, left: 16, right: 16, bottom: 16),
142 child: Text( 144 child: Text(
143 - '畅享全部高级权益', 145 + context.l10n.enjoyAllPremiumBenefits,
144 style: TextStyle( 146 style: TextStyle(
145 color: Colors.black, 147 color: Colors.black,
146 fontSize: 18, 148 fontSize: 18,
@@ -164,7 +166,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> { @@ -164,7 +166,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> {
164 padding: const EdgeInsets.only( 166 padding: const EdgeInsets.only(
165 top: 28, left: 16, right: 16), 167 top: 28, left: 16, right: 16),
166 child: Text( 168 child: Text(
167 - '会员管理', 169 + context.l10n.membershipManagement,
168 style: TextStyle( 170 style: TextStyle(
169 color: Colors.black, 171 color: Colors.black,
170 fontSize: 18, 172 fontSize: 18,
@@ -189,7 +191,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> { @@ -189,7 +191,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> {
189 child: Row( 191 child: Row(
190 children: [ 192 children: [
191 Text( 193 Text(
192 - '会员类型', 194 + context.l10n.membershipTypes,
193 textAlign: TextAlign.center, 195 textAlign: TextAlign.center,
194 style: TextStyle( 196 style: TextStyle(
195 color: context.colors.textPrimary, 197 color: context.colors.textPrimary,
@@ -220,7 +222,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> { @@ -220,7 +222,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> {
220 child: Row( 222 child: Row(
221 children: [ 223 children: [
222 Text( 224 Text(
223 - '有效期至', 225 + context.l10n.validUntil,
224 textAlign: TextAlign.center, 226 textAlign: TextAlign.center,
225 style: TextStyle( 227 style: TextStyle(
226 color: context.colors.textPrimary, 228 color: context.colors.textPrimary,
@@ -234,7 +236,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> { @@ -234,7 +236,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> {
234 userPrefs.preferences.value; 236 userPrefs.preferences.value;
235 final vipInfo = preferences.vipInfo; 237 final vipInfo = preferences.vipInfo;
236 return Text( 238 return Text(
237 - _vipExprieDate(vipInfo), 239 + _vipExprieDate(vipInfo, context),
238 textAlign: TextAlign.center, 240 textAlign: TextAlign.center,
239 style: TextStyle( 241 style: TextStyle(
240 color: context.colors.textPrimary, 242 color: context.colors.textPrimary,
@@ -260,7 +262,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> { @@ -260,7 +262,7 @@ class MembershipDetailView extends GetView<MembershipDetailController> {
260 child: Row( 262 child: Row(
261 children: [ 263 children: [
262 Text( 264 Text(
263 - '管理订阅', 265 + context.l10n.manageSubscriptions,
264 textAlign: TextAlign.center, 266 textAlign: TextAlign.center,
265 style: TextStyle( 267 style: TextStyle(
266 color: context.colors.textPrimary, 268 color: context.colors.textPrimary,
@@ -294,57 +296,61 @@ class MembershipDetailView extends GetView<MembershipDetailController> { @@ -294,57 +296,61 @@ class MembershipDetailView extends GetView<MembershipDetailController> {
294 ); 296 );
295 } 297 }
296 298
297 - String _vipSubtitle(UserPreferencesVipInfo? vipInfo) { 299 + String _vipSubtitle(UserPreferencesVipInfo? vipInfo, BuildContext context) {
298 final endDate = vipInfo?.vipEndDate ?? 0; 300 final endDate = vipInfo?.vipEndDate ?? 0;
299 if (vipInfo?.isVip != true || endDate <= 0) { 301 if (vipInfo?.isVip != true || endDate <= 0) {
300 - return '立即解锁'; 302 + return l10n.unlockNow;
301 } 303 }
302 304
303 if (vipInfo?.isForeverVip ?? false) { 305 if (vipInfo?.isForeverVip ?? false) {
304 - return '终身使用,免费更新'; 306 + return l10n.purchaseLifetimePlan;
305 } 307 }
306 308
307 final milliseconds = endDate > 1000000000000 ? endDate : endDate * 1000; 309 final milliseconds = endDate > 1000000000000 ? endDate : endDate * 1000;
308 final date = DateTime.fromMillisecondsSinceEpoch(milliseconds); 310 final date = DateTime.fromMillisecondsSinceEpoch(milliseconds);
309 - final month = date.month.toString().padLeft(2, '0');  
310 - final day = date.day.toString().padLeft(2, '0');  
311 - return '有效期至 ${date.year}-$month-$day'; 311 + final locale = Localizations.localeOf(context).languageCode;
  312 +
  313 + final dateStr = DateFormat.yMMMd(locale).format(date);
  314 +
  315 + return l10n.membershipValidUntilDate(dateStr);
312 } 316 }
313 317
314 - String _vipExprieDate(UserPreferencesVipInfo? vipInfo) { 318 + String _vipExprieDate(UserPreferencesVipInfo? vipInfo, BuildContext context) {
315 final endDate = vipInfo?.vipEndDate ?? 0; 319 final endDate = vipInfo?.vipEndDate ?? 0;
316 if (vipInfo?.isVip != true || endDate <= 0) { 320 if (vipInfo?.isVip != true || endDate <= 0) {
317 - return '立即解锁'; 321 + return l10n.unlockNow;
318 } 322 }
319 323
320 if (vipInfo?.isForeverVip ?? false) { 324 if (vipInfo?.isForeverVip ?? false) {
321 - return '永不过期'; 325 + return l10n.purchaseLifetimePlan;
322 } 326 }
323 327
324 final milliseconds = endDate > 1000000000000 ? endDate : endDate * 1000; 328 final milliseconds = endDate > 1000000000000 ? endDate : endDate * 1000;
325 final date = DateTime.fromMillisecondsSinceEpoch(milliseconds); 329 final date = DateTime.fromMillisecondsSinceEpoch(milliseconds);
326 - final month = date.month.toString().padLeft(2, '0');  
327 - final day = date.day.toString().padLeft(2, '0');  
328 - return '${date.year}-$month-$day'; 330 + final locale = Localizations.localeOf(context).languageCode;
  331 +
  332 + final dateStr = DateFormat.yMMMd(locale).format(date);
  333 +
  334 + return l10n.membershipValidUntilDate(dateStr);
329 } 335 }
330 336
331 String _vipType(UserPreferencesVipInfo? vipInfo) { 337 String _vipType(UserPreferencesVipInfo? vipInfo) {
332 if (vipInfo == null || vipInfo.isVip != true || vipInfo.vipEndDate <= 0) { 338 if (vipInfo == null || vipInfo.isVip != true || vipInfo.vipEndDate <= 0) {
333 - return '立即解锁'; 339 + return l10n.unlockNow;
334 } 340 }
335 341
336 if (vipInfo.isForeverVip) { 342 if (vipInfo.isForeverVip) {
337 - return '终身会员'; 343 + return l10n.purchaseLifetimePlan;
338 } 344 }
339 switch (vipInfo.vipType) { 345 switch (vipInfo.vipType) {
340 case 1: 346 case 1:
341 - return '月度会员'; 347 + return context.l10n.monthlyMembership;
342 case 2: 348 case 2:
343 - return '季度会员'; 349 + return context.l10n.quarterlyMembership;
344 case 3: 350 case 3:
345 - return '年度会员'; 351 + return context.l10n.annualMembership;
346 case 10: 352 case 10:
347 - return '终身会员'; 353 + return context.l10n.lifetimeMembership;
348 default: 354 default:
349 return ''; 355 return '';
350 } 356 }
@@ -245,7 +245,7 @@ @@ -245,7 +245,7 @@
245 "realTimePressure": "Live Stress", 245 "realTimePressure": "Live Stress",
246 "accountInformation": "Account Information", 246 "accountInformation": "Account Information",
247 "help": "Help", 247 "help": "Help",
248 - "changeNickname": "Change Nickname", 248 + "changeNickname": "Edit Name",
249 "pleaseEnterANickname": "Please enter a nickname", 249 "pleaseEnterANickname": "Please enter a nickname",
250 "feedbackLog": "Feedback Log", 250 "feedbackLog": "Feedback Log",
251 "noFeedbackRecordsYet": "No feedback records yet", 251 "noFeedbackRecordsYet": "No feedback records yet",
@@ -522,7 +522,7 @@ @@ -522,7 +522,7 @@
522 "purchaseBenefitCustomWatchFace": "Exclusive Custom Watch Faces", 522 "purchaseBenefitCustomWatchFace": "Exclusive Custom Watch Faces",
523 "purchaseBenefitSleepAnalysis": "Sleep analysis", 523 "purchaseBenefitSleepAnalysis": "Sleep analysis",
524 "purchaseBenefitFutureFeatures": "More Pro Benefits Coming Soon", 524 "purchaseBenefitFutureFeatures": "More Pro Benefits Coming Soon",
525 - "purchaseNotesTitle": "Notes", 525 + "purchaseNotesTitle": "Instructions",
526 "purchaseNoteSubscription": "After you confirm and pay, the subscription will renew automatically through your iTunes account. Your Apple account will be charged within 24 hours before the current period ends, and the subscription will renew for another period. To cancel, turn off auto-renewal in your iTunes/Apple ID subscription settings at least 24 hours before the current period ends.\n\nDoubleFeel Pro is a virtual product. Purchases are non-refundable except through the App Store refund process. Tap ", 526 "purchaseNoteSubscription": "After you confirm and pay, the subscription will renew automatically through your iTunes account. Your Apple account will be charged within 24 hours before the current period ends, and the subscription will renew for another period. To cancel, turn off auto-renewal in your iTunes/Apple ID subscription settings at least 24 hours before the current period ends.\n\nDoubleFeel Pro is a virtual product. Purchases are non-refundable except through the App Store refund process. Tap ",
527 "purchaseLinkLearnMore": "Learn More", 527 "purchaseLinkLearnMore": "Learn More",
528 "purchaseNoteRestore": "If your purchase does not take effect, tap Restore Purchases.", 528 "purchaseNoteRestore": "If your purchase does not take effect, tap Restore Purchases.",
@@ -584,8 +584,8 @@ @@ -584,8 +584,8 @@
584 "pressure": "Pressure", 584 "pressure": "Pressure",
585 "mostRecent": "Latest Reading", 585 "mostRecent": "Latest Reading",
586 "theDayBeforeYesterday": "The day before yesterday", 586 "theDayBeforeYesterday": "The day before yesterday",
587 - "uploadPhotos": "Upload Photos",  
588 - "filming": "Filming", 587 + "uploadPhotos": "Choose from Library",
  588 + "filming": "Take Photo",
589 "unlockTheProVersion": "Unlock Pro", 589 "unlockTheProVersion": "Unlock Pro",
590 "embarkOnAJourneyOfStressAwarenessAndWellnessSupport": "Begin Your Stress Alerts & Health Journey", 590 "embarkOnAJourneyOfStressAwarenessAndWellnessSupport": "Begin Your Stress Alerts & Health Journey",
591 "sharePartnerCodeTemplate": "My friend ID: {inviteCode}. Hey❤! Come and use DoubleFeel with me! It helps us care for each other—track stress and sleep, view HRV and body status, and stay updated on each other's health in real-time. Come join me 👉 https://apps.apple.com/cn/app/doublefeel-%E5%8F%8C%E4%BA%BA%E6%83%85%E7%BB%AA%E5%85%B1%E4%BA%ABhrv%E5%8E%8B%E5%8A%9B%E6%B0%B4%E5%B9%B3%E8%87%AA%E6%B5%8B%E7%9D%A1%E7%9C%A0%E8%AE%B0%E5%BD%95/id6747254434", 591 "sharePartnerCodeTemplate": "My friend ID: {inviteCode}. Hey❤! Come and use DoubleFeel with me! It helps us care for each other—track stress and sleep, view HRV and body status, and stay updated on each other's health in real-time. Come join me 👉 https://apps.apple.com/cn/app/doublefeel-%E5%8F%8C%E4%BA%BA%E6%83%85%E7%BB%AA%E5%85%B1%E4%BA%ABhrv%E5%8E%8B%E5%8A%9B%E6%B0%B4%E5%B9%B3%E8%87%AA%E6%B5%8B%E7%9D%A1%E7%9C%A0%E8%AE%B0%E5%BD%95/id6747254434",
@@ -850,5 +850,22 @@ @@ -850,5 +850,22 @@
850 "sendResetEmail": "Send reset email", 850 "sendResetEmail": "Send reset email",
851 "invalidCode": "Invalid code", 851 "invalidCode": "Invalid code",
852 "paswordHasBeenChanged": "Pasword has been changed", 852 "paswordHasBeenChanged": "Pasword has been changed",
853 - "copiedSuccessfully": "Copied successfully" 853 + "copiedSuccessfully": "Copied successfully",
  854 + "enjoyAllPremiumBenefits": "Enjoy All Premium Benefits",
  855 + "membershipManagement": "Membership",
  856 + "membershipTypes": "Plan",
  857 + "validUntil": "Valid until",
  858 + "manageSubscriptions": "Manage Subscription",
  859 + "membershipValidUntilDate": "Membership Valid Until {date}",
  860 + "@membershipValidUntilDate": {
  861 + "placeholders": {
  862 + "date": {
  863 + "type": "String"
  864 + }
  865 + }
  866 + },
  867 + "monthlyMembership": "Monthly",
  868 + "quarterlyMembership": "Quarterly",
  869 + "annualMembership": "Annual",
  870 + "lifetimeMembership": "Lifetime"
854 } 871 }
@@ -1243,5 +1243,22 @@ @@ -1243,5 +1243,22 @@
1243 "sendResetEmail": "发送重置邮件", 1243 "sendResetEmail": "发送重置邮件",
1244 "invalidCode": "无效代码", 1244 "invalidCode": "无效代码",
1245 "paswordHasBeenChanged": "密码已更改", 1245 "paswordHasBeenChanged": "密码已更改",
1246 - "copiedSuccessfully": "复制成功" 1246 + "copiedSuccessfully": "复制成功",
  1247 + "enjoyAllPremiumBenefits": "畅享全部高级权益",
  1248 + "membershipManagement": "会员管理",
  1249 + "membershipTypes": "会员类型",
  1250 + "validUntil": "有效期至",
  1251 + "manageSubscriptions": "管理订阅",
  1252 + "membershipValidUntilDate": "有效期至 {date}",
  1253 + "@membershipValidUntilDate": {
  1254 + "placeholders": {
  1255 + "date": {
  1256 + "type": "String"
  1257 + }
  1258 + }
  1259 + },
  1260 + "monthlyMembership": "月度会员",
  1261 + "quarterlyMembership": "季度会员",
  1262 + "annualMembership": "年度会员",
  1263 + "lifetimeMembership": "终身会员"
1247 } 1264 }
@@ -4507,6 +4507,66 @@ abstract class AppLocalizations { @@ -4507,6 +4507,66 @@ abstract class AppLocalizations {
4507 /// In zh, this message translates to: 4507 /// In zh, this message translates to:
4508 /// **'复制成功'** 4508 /// **'复制成功'**
4509 String get copiedSuccessfully; 4509 String get copiedSuccessfully;
  4510 +
  4511 + /// No description provided for @enjoyAllPremiumBenefits.
  4512 + ///
  4513 + /// In zh, this message translates to:
  4514 + /// **'畅享全部高级权益'**
  4515 + String get enjoyAllPremiumBenefits;
  4516 +
  4517 + /// No description provided for @membershipManagement.
  4518 + ///
  4519 + /// In zh, this message translates to:
  4520 + /// **'会员管理'**
  4521 + String get membershipManagement;
  4522 +
  4523 + /// No description provided for @membershipTypes.
  4524 + ///
  4525 + /// In zh, this message translates to:
  4526 + /// **'会员类型'**
  4527 + String get membershipTypes;
  4528 +
  4529 + /// No description provided for @validUntil.
  4530 + ///
  4531 + /// In zh, this message translates to:
  4532 + /// **'有效期至'**
  4533 + String get validUntil;
  4534 +
  4535 + /// No description provided for @manageSubscriptions.
  4536 + ///
  4537 + /// In zh, this message translates to:
  4538 + /// **'管理订阅'**
  4539 + String get manageSubscriptions;
  4540 +
  4541 + /// No description provided for @membershipValidUntilDate.
  4542 + ///
  4543 + /// In zh, this message translates to:
  4544 + /// **'有效期至 {date}'**
  4545 + String membershipValidUntilDate(String date);
  4546 +
  4547 + /// No description provided for @monthlyMembership.
  4548 + ///
  4549 + /// In zh, this message translates to:
  4550 + /// **'月度会员'**
  4551 + String get monthlyMembership;
  4552 +
  4553 + /// No description provided for @quarterlyMembership.
  4554 + ///
  4555 + /// In zh, this message translates to:
  4556 + /// **'季度会员'**
  4557 + String get quarterlyMembership;
  4558 +
  4559 + /// No description provided for @annualMembership.
  4560 + ///
  4561 + /// In zh, this message translates to:
  4562 + /// **'年度会员'**
  4563 + String get annualMembership;
  4564 +
  4565 + /// No description provided for @lifetimeMembership.
  4566 + ///
  4567 + /// In zh, this message translates to:
  4568 + /// **'终身会员'**
  4569 + String get lifetimeMembership;
4510 } 4570 }
4511 4571
4512 class _AppLocalizationsDelegate 4572 class _AppLocalizationsDelegate
@@ -854,7 +854,7 @@ class AppLocalizationsEn extends AppLocalizations { @@ -854,7 +854,7 @@ class AppLocalizationsEn extends AppLocalizations {
854 String get help => 'Help'; 854 String get help => 'Help';
855 855
856 @override 856 @override
857 - String get changeNickname => 'Change Nickname'; 857 + String get changeNickname => 'Edit Name';
858 858
859 @override 859 @override
860 String get pleaseEnterANickname => 'Please enter a nickname'; 860 String get pleaseEnterANickname => 'Please enter a nickname';
@@ -1758,7 +1758,7 @@ class AppLocalizationsEn extends AppLocalizations { @@ -1758,7 +1758,7 @@ class AppLocalizationsEn extends AppLocalizations {
1758 String get purchaseBenefitFutureFeatures => 'More Pro Benefits Coming Soon'; 1758 String get purchaseBenefitFutureFeatures => 'More Pro Benefits Coming Soon';
1759 1759
1760 @override 1760 @override
1761 - String get purchaseNotesTitle => 'Notes'; 1761 + String get purchaseNotesTitle => 'Instructions';
1762 1762
1763 @override 1763 @override
1764 String get purchaseNoteSubscription => 1764 String get purchaseNoteSubscription =>
@@ -1973,10 +1973,10 @@ class AppLocalizationsEn extends AppLocalizations { @@ -1973,10 +1973,10 @@ class AppLocalizationsEn extends AppLocalizations {
1973 String get theDayBeforeYesterday => 'The day before yesterday'; 1973 String get theDayBeforeYesterday => 'The day before yesterday';
1974 1974
1975 @override 1975 @override
1976 - String get uploadPhotos => 'Upload Photos'; 1976 + String get uploadPhotos => 'Choose from Library';
1977 1977
1978 @override 1978 @override
1979 - String get filming => 'Filming'; 1979 + String get filming => 'Take Photo';
1980 1980
1981 @override 1981 @override
1982 String get unlockTheProVersion => 'Unlock Pro'; 1982 String get unlockTheProVersion => 'Unlock Pro';
@@ -2527,4 +2527,36 @@ class AppLocalizationsEn extends AppLocalizations { @@ -2527,4 +2527,36 @@ class AppLocalizationsEn extends AppLocalizations {
2527 2527
2528 @override 2528 @override
2529 String get copiedSuccessfully => 'Copied successfully'; 2529 String get copiedSuccessfully => 'Copied successfully';
  2530 +
  2531 + @override
  2532 + String get enjoyAllPremiumBenefits => 'Enjoy All Premium Benefits';
  2533 +
  2534 + @override
  2535 + String get membershipManagement => 'Membership';
  2536 +
  2537 + @override
  2538 + String get membershipTypes => 'Plan';
  2539 +
  2540 + @override
  2541 + String get validUntil => 'Valid until';
  2542 +
  2543 + @override
  2544 + String get manageSubscriptions => 'Manage Subscription';
  2545 +
  2546 + @override
  2547 + String membershipValidUntilDate(String date) {
  2548 + return 'Membership Valid Until $date';
  2549 + }
  2550 +
  2551 + @override
  2552 + String get monthlyMembership => 'Monthly';
  2553 +
  2554 + @override
  2555 + String get quarterlyMembership => 'Quarterly';
  2556 +
  2557 + @override
  2558 + String get annualMembership => 'Annual';
  2559 +
  2560 + @override
  2561 + String get lifetimeMembership => 'Lifetime';
2530 } 2562 }
@@ -2428,4 +2428,36 @@ class AppLocalizationsZh extends AppLocalizations { @@ -2428,4 +2428,36 @@ class AppLocalizationsZh extends AppLocalizations {
2428 2428
2429 @override 2429 @override
2430 String get copiedSuccessfully => '复制成功'; 2430 String get copiedSuccessfully => '复制成功';
  2431 +
  2432 + @override
  2433 + String get enjoyAllPremiumBenefits => '畅享全部高级权益';
  2434 +
  2435 + @override
  2436 + String get membershipManagement => '会员管理';
  2437 +
  2438 + @override
  2439 + String get membershipTypes => '会员类型';
  2440 +
  2441 + @override
  2442 + String get validUntil => '有效期至';
  2443 +
  2444 + @override
  2445 + String get manageSubscriptions => '管理订阅';
  2446 +
  2447 + @override
  2448 + String membershipValidUntilDate(String date) {
  2449 + return '有效期至 $date';
  2450 + }
  2451 +
  2452 + @override
  2453 + String get monthlyMembership => '月度会员';
  2454 +
  2455 + @override
  2456 + String get quarterlyMembership => '季度会员';
  2457 +
  2458 + @override
  2459 + String get annualMembership => '年度会员';
  2460 +
  2461 + @override
  2462 + String get lifetimeMembership => '终身会员';
2431 } 2463 }