feat: 切换邮箱认证并重构前后端启动与门禁
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"@@locale": "en",
|
||||
"appTitle": "MeiYao Divination",
|
||||
"welcomeLogin": "Welcome Back",
|
||||
"loginSubtitle": "Sign in with your email",
|
||||
"loginSubtitleEmail": "Sign in with your email",
|
||||
"emailHint": "Enter email address",
|
||||
"codeHint": "Enter verification code",
|
||||
"sendCode": "Get Code",
|
||||
"sending": "Sending...",
|
||||
"retryAfter": "Retry in {seconds}s",
|
||||
"@retryAfter": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"login": "Login",
|
||||
"agreementPrefix": "I have read and agree to ",
|
||||
"privacyPolicy": "Privacy Policy",
|
||||
"termsOfService": "Terms of Service",
|
||||
"disclaimer": "Disclaimer",
|
||||
"icp": "Yue ICP 2025428416-1A",
|
||||
"invalidPhone": "Please enter a valid phone number",
|
||||
"invalidEmail": "Please enter a valid email address",
|
||||
"invalidCode": "Please enter a 6-digit code",
|
||||
"agreementRequired": "Please accept the agreements first",
|
||||
"codeSent": "Code sent successfully",
|
||||
"loginSuccess": "Login success",
|
||||
"helloUser": "Hi, {name}",
|
||||
"@helloUser": {
|
||||
"placeholders": {
|
||||
"name": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"startJourney": "Start Your Divination Journey",
|
||||
"journeySubtitle": "Explore possibilities with AI",
|
||||
"startNow": "Start Now",
|
||||
"historyTitle": "History",
|
||||
"more": "More",
|
||||
"noRecords": "No records yet",
|
||||
"noRecordsSubtitle": "You have not saved any records",
|
||||
"homeTab": "Home",
|
||||
"profileTab": "Me",
|
||||
"notify": "Notifications",
|
||||
"featurePending": "This feature is not connected yet",
|
||||
"logout": "Logout",
|
||||
"defaultUserName": "User",
|
||||
"historyQuestion1": "Is this year a good time to change jobs?",
|
||||
"historyQuestion2": "Can my relationship progress soon?",
|
||||
"historyQuestion3": "What pace should I keep for investments this quarter?",
|
||||
"guaName1": "Wuwang",
|
||||
"guaName2": "Ge",
|
||||
"guaName3": "Guan",
|
||||
"welcomeDialogTitle": "Welcome to MeiYao Divination",
|
||||
"welcomeParagraph1": "Welcome to MeiYao Divination, an AI-assisted platform for interpreting traditional Six-Line divination and exploring Chinese classic wisdom.",
|
||||
"welcomeParagraph2": "Six-Line divination comes from the profound philosophy of the I Ching. It reflects how intention and timing are mapped into symbolic patterns.",
|
||||
"welcomeParagraph3": "MeiYao Divination helps you look beyond narrow thinking, see opportunities and risks from a broader trend perspective, and make clearer decisions.",
|
||||
"warningTitle": "Important Notice",
|
||||
"warningBody": "All interpretations are AI-generated for entertainment only. Do not use them as professional advice for business, medical, or legal decisions.",
|
||||
"scrollHint": "Scroll down to read all",
|
||||
"understood": "I Understand",
|
||||
"readAllFirst": "Please read all first",
|
||||
"categoryCareer": "Career/Study",
|
||||
"categoryLove": "Love/Marriage",
|
||||
"categoryMoney": "Wealth/Investment",
|
||||
"signBest": "Excellent",
|
||||
"signGood": "Good",
|
||||
"signNormal": "Moderate",
|
||||
"language": "Language",
|
||||
"english": "English",
|
||||
"chinese": "Chinese",
|
||||
"dialogConfirm": "OK",
|
||||
"agreementSeparator": ", ",
|
||||
"agreementAnd": " and ",
|
||||
"privacyContent": "Placeholder content for privacy policy.",
|
||||
"termsContent": "Placeholder content for terms of service.",
|
||||
"disclaimerContent": "Placeholder content for disclaimer.",
|
||||
"toastLabelInfo": "Info",
|
||||
"toastLabelSuccess": "Success",
|
||||
"toastLabelWarning": "Warning",
|
||||
"toastLabelError": "Error",
|
||||
"errorTooManyRequests": "Too many requests, please try again later",
|
||||
"errorInvalidVerificationCode": "Invalid verification code",
|
||||
"errorSessionExpired": "Session expired, please login again",
|
||||
"errorServiceUnavailable": "Service unavailable, please try again later",
|
||||
"errorServerGeneric": "Server error, please try again later",
|
||||
"errorRequestGeneric": "Request failed, please try again"
|
||||
}
|
||||
@@ -0,0 +1,584 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
|
||||
import 'app_localizations_en.dart';
|
||||
import 'app_localizations_zh.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// Callers can lookup localized strings with an instance of AppLocalizations
|
||||
/// returned by `AppLocalizations.of(context)`.
|
||||
///
|
||||
/// Applications need to include `AppLocalizations.delegate()` in their app's
|
||||
/// `localizationDelegates` list, and the locales they support in the app's
|
||||
/// `supportedLocales` list. For example:
|
||||
///
|
||||
/// ```dart
|
||||
/// import 'l10n/app_localizations.dart';
|
||||
///
|
||||
/// return MaterialApp(
|
||||
/// localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
/// supportedLocales: AppLocalizations.supportedLocales,
|
||||
/// home: MyApplicationHome(),
|
||||
/// );
|
||||
/// ```
|
||||
///
|
||||
/// ## Update pubspec.yaml
|
||||
///
|
||||
/// Please make sure to update your pubspec.yaml to include the following
|
||||
/// packages:
|
||||
///
|
||||
/// ```yaml
|
||||
/// dependencies:
|
||||
/// # Internationalization support.
|
||||
/// flutter_localizations:
|
||||
/// sdk: flutter
|
||||
/// intl: any # Use the pinned version from flutter_localizations
|
||||
///
|
||||
/// # Rest of dependencies
|
||||
/// ```
|
||||
///
|
||||
/// ## iOS Applications
|
||||
///
|
||||
/// iOS applications define key application metadata, including supported
|
||||
/// locales, in an Info.plist file that is built into the application bundle.
|
||||
/// To configure the locales supported by your app, you’ll need to edit this
|
||||
/// file.
|
||||
///
|
||||
/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
|
||||
/// Then, in the Project Navigator, open the Info.plist file under the Runner
|
||||
/// project’s Runner folder.
|
||||
///
|
||||
/// Next, select the Information Property List item, select Add Item from the
|
||||
/// Editor menu, then select Localizations from the pop-up menu.
|
||||
///
|
||||
/// Select and expand the newly-created Localizations item then, for each
|
||||
/// locale your application supports, add a new item and select the locale
|
||||
/// you wish to add from the pop-up menu in the Value field. This list should
|
||||
/// be consistent with the languages listed in the AppLocalizations.supportedLocales
|
||||
/// property.
|
||||
abstract class AppLocalizations {
|
||||
AppLocalizations(String locale)
|
||||
: localeName = intl.Intl.canonicalizedLocale(locale.toString());
|
||||
|
||||
final String localeName;
|
||||
|
||||
static AppLocalizations? of(BuildContext context) {
|
||||
return Localizations.of<AppLocalizations>(context, AppLocalizations);
|
||||
}
|
||||
|
||||
static const LocalizationsDelegate<AppLocalizations> delegate =
|
||||
_AppLocalizationsDelegate();
|
||||
|
||||
/// A list of this localizations delegate along with the default localizations
|
||||
/// delegates.
|
||||
///
|
||||
/// Returns a list of localizations delegates containing this delegate along with
|
||||
/// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
|
||||
/// and GlobalWidgetsLocalizations.delegate.
|
||||
///
|
||||
/// Additional delegates can be added by appending to this list in
|
||||
/// MaterialApp. This list does not have to be used at all if a custom list
|
||||
/// of delegates is preferred or required.
|
||||
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
|
||||
<LocalizationsDelegate<dynamic>>[
|
||||
delegate,
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
];
|
||||
|
||||
/// A list of this localizations delegate's supported locales.
|
||||
static const List<Locale> supportedLocales = <Locale>[
|
||||
Locale('en'),
|
||||
Locale('zh'),
|
||||
];
|
||||
|
||||
/// No description provided for @appTitle.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'觅爻签问'**
|
||||
String get appTitle;
|
||||
|
||||
/// No description provided for @welcomeLogin.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'欢迎登录'**
|
||||
String get welcomeLogin;
|
||||
|
||||
/// No description provided for @loginSubtitle.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请使用邮箱登录'**
|
||||
String get loginSubtitle;
|
||||
|
||||
/// No description provided for @loginSubtitleEmail.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请使用邮箱登录'**
|
||||
String get loginSubtitleEmail;
|
||||
|
||||
/// No description provided for @emailHint.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请输入邮箱地址'**
|
||||
String get emailHint;
|
||||
|
||||
/// No description provided for @codeHint.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请输入验证码'**
|
||||
String get codeHint;
|
||||
|
||||
/// No description provided for @sendCode.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'获取验证码'**
|
||||
String get sendCode;
|
||||
|
||||
/// No description provided for @sending.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'发送中...'**
|
||||
String get sending;
|
||||
|
||||
/// No description provided for @retryAfter.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'{seconds}秒后重试'**
|
||||
String retryAfter(int seconds);
|
||||
|
||||
/// No description provided for @login.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'登录'**
|
||||
String get login;
|
||||
|
||||
/// No description provided for @agreementPrefix.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'我已阅读并同意'**
|
||||
String get agreementPrefix;
|
||||
|
||||
/// No description provided for @privacyPolicy.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'隐私政策'**
|
||||
String get privacyPolicy;
|
||||
|
||||
/// No description provided for @termsOfService.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'服务条款'**
|
||||
String get termsOfService;
|
||||
|
||||
/// No description provided for @disclaimer.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'免责声明'**
|
||||
String get disclaimer;
|
||||
|
||||
/// No description provided for @icp.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'粤ICP备2025428416号-1A'**
|
||||
String get icp;
|
||||
|
||||
/// No description provided for @invalidPhone.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请输入正确的手机号码'**
|
||||
String get invalidPhone;
|
||||
|
||||
/// No description provided for @invalidEmail.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请输入正确的邮箱地址'**
|
||||
String get invalidEmail;
|
||||
|
||||
/// No description provided for @invalidCode.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请输入6位验证码'**
|
||||
String get invalidCode;
|
||||
|
||||
/// No description provided for @agreementRequired.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请先勾选协议'**
|
||||
String get agreementRequired;
|
||||
|
||||
/// No description provided for @codeSent.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'验证码已发送,请注意查收'**
|
||||
String get codeSent;
|
||||
|
||||
/// No description provided for @loginSuccess.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'登录成功'**
|
||||
String get loginSuccess;
|
||||
|
||||
/// No description provided for @helloUser.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'您好,{name}'**
|
||||
String helloUser(String name);
|
||||
|
||||
/// No description provided for @startJourney.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'开始您的卦象之旅'**
|
||||
String get startJourney;
|
||||
|
||||
/// No description provided for @journeySubtitle.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'借助AI智能,探索未来的可能'**
|
||||
String get journeySubtitle;
|
||||
|
||||
/// No description provided for @startNow.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'立即起卦'**
|
||||
String get startNow;
|
||||
|
||||
/// No description provided for @historyTitle.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'历史解卦'**
|
||||
String get historyTitle;
|
||||
|
||||
/// No description provided for @more.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'更多'**
|
||||
String get more;
|
||||
|
||||
/// No description provided for @noRecords.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'暂无记录'**
|
||||
String get noRecords;
|
||||
|
||||
/// No description provided for @noRecordsSubtitle.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'您并没有保存任何卦象'**
|
||||
String get noRecordsSubtitle;
|
||||
|
||||
/// No description provided for @homeTab.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'首页'**
|
||||
String get homeTab;
|
||||
|
||||
/// No description provided for @profileTab.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'我的'**
|
||||
String get profileTab;
|
||||
|
||||
/// No description provided for @notify.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'消息通知'**
|
||||
String get notify;
|
||||
|
||||
/// No description provided for @featurePending.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'该功能暂未接入数据'**
|
||||
String get featurePending;
|
||||
|
||||
/// No description provided for @logout.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'退出登录'**
|
||||
String get logout;
|
||||
|
||||
/// No description provided for @defaultUserName.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'用户'**
|
||||
String get defaultUserName;
|
||||
|
||||
/// No description provided for @historyQuestion1.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'今年转岗是否合适?'**
|
||||
String get historyQuestion1;
|
||||
|
||||
/// No description provided for @historyQuestion2.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'最近感情是否能推进?'**
|
||||
String get historyQuestion2;
|
||||
|
||||
/// No description provided for @historyQuestion3.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'本季度投资节奏如何?'**
|
||||
String get historyQuestion3;
|
||||
|
||||
/// No description provided for @guaName1.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'天雷无妄'**
|
||||
String get guaName1;
|
||||
|
||||
/// No description provided for @guaName2.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'泽火革'**
|
||||
String get guaName2;
|
||||
|
||||
/// No description provided for @guaName3.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'风地观'**
|
||||
String get guaName3;
|
||||
|
||||
/// No description provided for @welcomeDialogTitle.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'欢迎使用觅爻签问'**
|
||||
String get welcomeDialogTitle;
|
||||
|
||||
/// No description provided for @welcomeParagraph1.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'你好,欢迎来到觅爻签问,这是一个借助于AI解读传统六爻卦象的平台,为用户了解中国传统易学文化提供一个窗口。'**
|
||||
String get welcomeParagraph1;
|
||||
|
||||
/// No description provided for @welcomeParagraph2.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'六爻卦象源于《周易》深邃的哲学体系,是古人探索世界运行规律的一种独特方法。古人认为宇宙万物相互关联,在你起卦时,你的心念与时空信息会凝结成卦象的方式呈现出来。'**
|
||||
String get welcomeParagraph2;
|
||||
|
||||
/// No description provided for @welcomeParagraph3.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'觅爻签问基于这样的思路,帮助你跳出局限思维,从全局和演变趋势看清矛盾、机会与风险,为判断和行动提供参考。'**
|
||||
String get welcomeParagraph3;
|
||||
|
||||
/// No description provided for @warningTitle.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'特别提醒'**
|
||||
String get warningTitle;
|
||||
|
||||
/// No description provided for @warningBody.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'卦象解读结果均由AI生成,仅供娱乐参考,切不可作为商业、医疗等专业领域的决策依据。理性看待卦象,自由掌握人生。'**
|
||||
String get warningBody;
|
||||
|
||||
/// No description provided for @scrollHint.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请向下滚动阅读全部内容'**
|
||||
String get scrollHint;
|
||||
|
||||
/// No description provided for @understood.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'我已了解'**
|
||||
String get understood;
|
||||
|
||||
/// No description provided for @readAllFirst.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请先阅读完整内容'**
|
||||
String get readAllFirst;
|
||||
|
||||
/// No description provided for @categoryCareer.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'事业学业'**
|
||||
String get categoryCareer;
|
||||
|
||||
/// No description provided for @categoryLove.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'情感婚姻'**
|
||||
String get categoryLove;
|
||||
|
||||
/// No description provided for @categoryMoney.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'财富投资'**
|
||||
String get categoryMoney;
|
||||
|
||||
/// No description provided for @signBest.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'上上签'**
|
||||
String get signBest;
|
||||
|
||||
/// No description provided for @signGood.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'中上签'**
|
||||
String get signGood;
|
||||
|
||||
/// No description provided for @signNormal.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'中下签'**
|
||||
String get signNormal;
|
||||
|
||||
/// No description provided for @language.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'语言'**
|
||||
String get language;
|
||||
|
||||
/// No description provided for @english.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'英文'**
|
||||
String get english;
|
||||
|
||||
/// No description provided for @chinese.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'中文'**
|
||||
String get chinese;
|
||||
|
||||
/// No description provided for @dialogConfirm.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'确定'**
|
||||
String get dialogConfirm;
|
||||
|
||||
/// No description provided for @agreementSeparator.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'、'**
|
||||
String get agreementSeparator;
|
||||
|
||||
/// No description provided for @agreementAnd.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'和'**
|
||||
String get agreementAnd;
|
||||
|
||||
/// No description provided for @privacyContent.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'隐私政策内容展示占位。'**
|
||||
String get privacyContent;
|
||||
|
||||
/// No description provided for @termsContent.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'服务条款内容展示占位。'**
|
||||
String get termsContent;
|
||||
|
||||
/// No description provided for @disclaimerContent.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'免责声明内容展示占位。'**
|
||||
String get disclaimerContent;
|
||||
|
||||
/// No description provided for @toastLabelInfo.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'提示'**
|
||||
String get toastLabelInfo;
|
||||
|
||||
/// No description provided for @toastLabelSuccess.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'成功'**
|
||||
String get toastLabelSuccess;
|
||||
|
||||
/// No description provided for @toastLabelWarning.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'警告'**
|
||||
String get toastLabelWarning;
|
||||
|
||||
/// No description provided for @toastLabelError.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'错误'**
|
||||
String get toastLabelError;
|
||||
|
||||
/// No description provided for @errorTooManyRequests.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请求过于频繁,请稍后重试'**
|
||||
String get errorTooManyRequests;
|
||||
|
||||
/// No description provided for @errorInvalidVerificationCode.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'验证码错误'**
|
||||
String get errorInvalidVerificationCode;
|
||||
|
||||
/// No description provided for @errorSessionExpired.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'登录已过期,请重新登录'**
|
||||
String get errorSessionExpired;
|
||||
|
||||
/// No description provided for @errorServiceUnavailable.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'服务暂时不可用,请稍后重试'**
|
||||
String get errorServiceUnavailable;
|
||||
|
||||
/// No description provided for @errorServerGeneric.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'服务异常,请稍后重试'**
|
||||
String get errorServerGeneric;
|
||||
|
||||
/// No description provided for @errorRequestGeneric.
|
||||
///
|
||||
/// In zh, this message translates to:
|
||||
/// **'请求失败,请稍后重试'**
|
||||
String get errorRequestGeneric;
|
||||
}
|
||||
|
||||
class _AppLocalizationsDelegate
|
||||
extends LocalizationsDelegate<AppLocalizations> {
|
||||
const _AppLocalizationsDelegate();
|
||||
|
||||
@override
|
||||
Future<AppLocalizations> load(Locale locale) {
|
||||
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
|
||||
}
|
||||
|
||||
@override
|
||||
bool isSupported(Locale locale) =>
|
||||
<String>['en', 'zh'].contains(locale.languageCode);
|
||||
|
||||
@override
|
||||
bool shouldReload(_AppLocalizationsDelegate old) => false;
|
||||
}
|
||||
|
||||
AppLocalizations lookupAppLocalizations(Locale locale) {
|
||||
// Lookup logic when only language code is specified.
|
||||
switch (locale.languageCode) {
|
||||
case 'en':
|
||||
return AppLocalizationsEn();
|
||||
case 'zh':
|
||||
return AppLocalizationsZh();
|
||||
}
|
||||
|
||||
throw FlutterError(
|
||||
'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
|
||||
'an issue with the localizations generation tool. Please file an issue '
|
||||
'on GitHub with a reproducible sample app and the gen-l10n configuration '
|
||||
'that was used.',
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,246 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for English (`en`).
|
||||
class AppLocalizationsEn extends AppLocalizations {
|
||||
AppLocalizationsEn([String locale = 'en']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'MeiYao Divination';
|
||||
|
||||
@override
|
||||
String get welcomeLogin => 'Welcome Back';
|
||||
|
||||
@override
|
||||
String get loginSubtitle => 'Sign in with your email';
|
||||
|
||||
@override
|
||||
String get loginSubtitleEmail => 'Sign in with your email';
|
||||
|
||||
@override
|
||||
String get emailHint => 'Enter email address';
|
||||
|
||||
@override
|
||||
String get codeHint => 'Enter verification code';
|
||||
|
||||
@override
|
||||
String get sendCode => 'Get Code';
|
||||
|
||||
@override
|
||||
String get sending => 'Sending...';
|
||||
|
||||
@override
|
||||
String retryAfter(int seconds) {
|
||||
return 'Retry in ${seconds}s';
|
||||
}
|
||||
|
||||
@override
|
||||
String get login => 'Login';
|
||||
|
||||
@override
|
||||
String get agreementPrefix => 'I have read and agree to ';
|
||||
|
||||
@override
|
||||
String get privacyPolicy => 'Privacy Policy';
|
||||
|
||||
@override
|
||||
String get termsOfService => 'Terms of Service';
|
||||
|
||||
@override
|
||||
String get disclaimer => 'Disclaimer';
|
||||
|
||||
@override
|
||||
String get icp => 'Yue ICP 2025428416-1A';
|
||||
|
||||
@override
|
||||
String get invalidPhone => 'Please enter a valid phone number';
|
||||
|
||||
@override
|
||||
String get invalidEmail => 'Please enter a valid email address';
|
||||
|
||||
@override
|
||||
String get invalidCode => 'Please enter a 6-digit code';
|
||||
|
||||
@override
|
||||
String get agreementRequired => 'Please accept the agreements first';
|
||||
|
||||
@override
|
||||
String get codeSent => 'Code sent successfully';
|
||||
|
||||
@override
|
||||
String get loginSuccess => 'Login success';
|
||||
|
||||
@override
|
||||
String helloUser(String name) {
|
||||
return 'Hi, $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get startJourney => 'Start Your Divination Journey';
|
||||
|
||||
@override
|
||||
String get journeySubtitle => 'Explore possibilities with AI';
|
||||
|
||||
@override
|
||||
String get startNow => 'Start Now';
|
||||
|
||||
@override
|
||||
String get historyTitle => 'History';
|
||||
|
||||
@override
|
||||
String get more => 'More';
|
||||
|
||||
@override
|
||||
String get noRecords => 'No records yet';
|
||||
|
||||
@override
|
||||
String get noRecordsSubtitle => 'You have not saved any records';
|
||||
|
||||
@override
|
||||
String get homeTab => 'Home';
|
||||
|
||||
@override
|
||||
String get profileTab => 'Me';
|
||||
|
||||
@override
|
||||
String get notify => 'Notifications';
|
||||
|
||||
@override
|
||||
String get featurePending => 'This feature is not connected yet';
|
||||
|
||||
@override
|
||||
String get logout => 'Logout';
|
||||
|
||||
@override
|
||||
String get defaultUserName => 'User';
|
||||
|
||||
@override
|
||||
String get historyQuestion1 => 'Is this year a good time to change jobs?';
|
||||
|
||||
@override
|
||||
String get historyQuestion2 => 'Can my relationship progress soon?';
|
||||
|
||||
@override
|
||||
String get historyQuestion3 =>
|
||||
'What pace should I keep for investments this quarter?';
|
||||
|
||||
@override
|
||||
String get guaName1 => 'Wuwang';
|
||||
|
||||
@override
|
||||
String get guaName2 => 'Ge';
|
||||
|
||||
@override
|
||||
String get guaName3 => 'Guan';
|
||||
|
||||
@override
|
||||
String get welcomeDialogTitle => 'Welcome to MeiYao Divination';
|
||||
|
||||
@override
|
||||
String get welcomeParagraph1 =>
|
||||
'Welcome to MeiYao Divination, an AI-assisted platform for interpreting traditional Six-Line divination and exploring Chinese classic wisdom.';
|
||||
|
||||
@override
|
||||
String get welcomeParagraph2 =>
|
||||
'Six-Line divination comes from the profound philosophy of the I Ching. It reflects how intention and timing are mapped into symbolic patterns.';
|
||||
|
||||
@override
|
||||
String get welcomeParagraph3 =>
|
||||
'MeiYao Divination helps you look beyond narrow thinking, see opportunities and risks from a broader trend perspective, and make clearer decisions.';
|
||||
|
||||
@override
|
||||
String get warningTitle => 'Important Notice';
|
||||
|
||||
@override
|
||||
String get warningBody =>
|
||||
'All interpretations are AI-generated for entertainment only. Do not use them as professional advice for business, medical, or legal decisions.';
|
||||
|
||||
@override
|
||||
String get scrollHint => 'Scroll down to read all';
|
||||
|
||||
@override
|
||||
String get understood => 'I Understand';
|
||||
|
||||
@override
|
||||
String get readAllFirst => 'Please read all first';
|
||||
|
||||
@override
|
||||
String get categoryCareer => 'Career/Study';
|
||||
|
||||
@override
|
||||
String get categoryLove => 'Love/Marriage';
|
||||
|
||||
@override
|
||||
String get categoryMoney => 'Wealth/Investment';
|
||||
|
||||
@override
|
||||
String get signBest => 'Excellent';
|
||||
|
||||
@override
|
||||
String get signGood => 'Good';
|
||||
|
||||
@override
|
||||
String get signNormal => 'Moderate';
|
||||
|
||||
@override
|
||||
String get language => 'Language';
|
||||
|
||||
@override
|
||||
String get english => 'English';
|
||||
|
||||
@override
|
||||
String get chinese => 'Chinese';
|
||||
|
||||
@override
|
||||
String get dialogConfirm => 'OK';
|
||||
|
||||
@override
|
||||
String get agreementSeparator => ', ';
|
||||
|
||||
@override
|
||||
String get agreementAnd => ' and ';
|
||||
|
||||
@override
|
||||
String get privacyContent => 'Placeholder content for privacy policy.';
|
||||
|
||||
@override
|
||||
String get termsContent => 'Placeholder content for terms of service.';
|
||||
|
||||
@override
|
||||
String get disclaimerContent => 'Placeholder content for disclaimer.';
|
||||
|
||||
@override
|
||||
String get toastLabelInfo => 'Info';
|
||||
|
||||
@override
|
||||
String get toastLabelSuccess => 'Success';
|
||||
|
||||
@override
|
||||
String get toastLabelWarning => 'Warning';
|
||||
|
||||
@override
|
||||
String get toastLabelError => 'Error';
|
||||
|
||||
@override
|
||||
String get errorTooManyRequests =>
|
||||
'Too many requests, please try again later';
|
||||
|
||||
@override
|
||||
String get errorInvalidVerificationCode => 'Invalid verification code';
|
||||
|
||||
@override
|
||||
String get errorSessionExpired => 'Session expired, please login again';
|
||||
|
||||
@override
|
||||
String get errorServiceUnavailable =>
|
||||
'Service unavailable, please try again later';
|
||||
|
||||
@override
|
||||
String get errorServerGeneric => 'Server error, please try again later';
|
||||
|
||||
@override
|
||||
String get errorRequestGeneric => 'Request failed, please try again';
|
||||
}
|
||||
@@ -0,0 +1,243 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Chinese (`zh`).
|
||||
class AppLocalizationsZh extends AppLocalizations {
|
||||
AppLocalizationsZh([String locale = 'zh']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => '觅爻签问';
|
||||
|
||||
@override
|
||||
String get welcomeLogin => '欢迎登录';
|
||||
|
||||
@override
|
||||
String get loginSubtitle => '请使用邮箱登录';
|
||||
|
||||
@override
|
||||
String get loginSubtitleEmail => '请使用邮箱登录';
|
||||
|
||||
@override
|
||||
String get emailHint => '请输入邮箱地址';
|
||||
|
||||
@override
|
||||
String get codeHint => '请输入验证码';
|
||||
|
||||
@override
|
||||
String get sendCode => '获取验证码';
|
||||
|
||||
@override
|
||||
String get sending => '发送中...';
|
||||
|
||||
@override
|
||||
String retryAfter(int seconds) {
|
||||
return '$seconds秒后重试';
|
||||
}
|
||||
|
||||
@override
|
||||
String get login => '登录';
|
||||
|
||||
@override
|
||||
String get agreementPrefix => '我已阅读并同意';
|
||||
|
||||
@override
|
||||
String get privacyPolicy => '隐私政策';
|
||||
|
||||
@override
|
||||
String get termsOfService => '服务条款';
|
||||
|
||||
@override
|
||||
String get disclaimer => '免责声明';
|
||||
|
||||
@override
|
||||
String get icp => '粤ICP备2025428416号-1A';
|
||||
|
||||
@override
|
||||
String get invalidPhone => '请输入正确的手机号码';
|
||||
|
||||
@override
|
||||
String get invalidEmail => '请输入正确的邮箱地址';
|
||||
|
||||
@override
|
||||
String get invalidCode => '请输入6位验证码';
|
||||
|
||||
@override
|
||||
String get agreementRequired => '请先勾选协议';
|
||||
|
||||
@override
|
||||
String get codeSent => '验证码已发送,请注意查收';
|
||||
|
||||
@override
|
||||
String get loginSuccess => '登录成功';
|
||||
|
||||
@override
|
||||
String helloUser(String name) {
|
||||
return '您好,$name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get startJourney => '开始您的卦象之旅';
|
||||
|
||||
@override
|
||||
String get journeySubtitle => '借助AI智能,探索未来的可能';
|
||||
|
||||
@override
|
||||
String get startNow => '立即起卦';
|
||||
|
||||
@override
|
||||
String get historyTitle => '历史解卦';
|
||||
|
||||
@override
|
||||
String get more => '更多';
|
||||
|
||||
@override
|
||||
String get noRecords => '暂无记录';
|
||||
|
||||
@override
|
||||
String get noRecordsSubtitle => '您并没有保存任何卦象';
|
||||
|
||||
@override
|
||||
String get homeTab => '首页';
|
||||
|
||||
@override
|
||||
String get profileTab => '我的';
|
||||
|
||||
@override
|
||||
String get notify => '消息通知';
|
||||
|
||||
@override
|
||||
String get featurePending => '该功能暂未接入数据';
|
||||
|
||||
@override
|
||||
String get logout => '退出登录';
|
||||
|
||||
@override
|
||||
String get defaultUserName => '用户';
|
||||
|
||||
@override
|
||||
String get historyQuestion1 => '今年转岗是否合适?';
|
||||
|
||||
@override
|
||||
String get historyQuestion2 => '最近感情是否能推进?';
|
||||
|
||||
@override
|
||||
String get historyQuestion3 => '本季度投资节奏如何?';
|
||||
|
||||
@override
|
||||
String get guaName1 => '天雷无妄';
|
||||
|
||||
@override
|
||||
String get guaName2 => '泽火革';
|
||||
|
||||
@override
|
||||
String get guaName3 => '风地观';
|
||||
|
||||
@override
|
||||
String get welcomeDialogTitle => '欢迎使用觅爻签问';
|
||||
|
||||
@override
|
||||
String get welcomeParagraph1 =>
|
||||
'你好,欢迎来到觅爻签问,这是一个借助于AI解读传统六爻卦象的平台,为用户了解中国传统易学文化提供一个窗口。';
|
||||
|
||||
@override
|
||||
String get welcomeParagraph2 =>
|
||||
'六爻卦象源于《周易》深邃的哲学体系,是古人探索世界运行规律的一种独特方法。古人认为宇宙万物相互关联,在你起卦时,你的心念与时空信息会凝结成卦象的方式呈现出来。';
|
||||
|
||||
@override
|
||||
String get welcomeParagraph3 =>
|
||||
'觅爻签问基于这样的思路,帮助你跳出局限思维,从全局和演变趋势看清矛盾、机会与风险,为判断和行动提供参考。';
|
||||
|
||||
@override
|
||||
String get warningTitle => '特别提醒';
|
||||
|
||||
@override
|
||||
String get warningBody =>
|
||||
'卦象解读结果均由AI生成,仅供娱乐参考,切不可作为商业、医疗等专业领域的决策依据。理性看待卦象,自由掌握人生。';
|
||||
|
||||
@override
|
||||
String get scrollHint => '请向下滚动阅读全部内容';
|
||||
|
||||
@override
|
||||
String get understood => '我已了解';
|
||||
|
||||
@override
|
||||
String get readAllFirst => '请先阅读完整内容';
|
||||
|
||||
@override
|
||||
String get categoryCareer => '事业学业';
|
||||
|
||||
@override
|
||||
String get categoryLove => '情感婚姻';
|
||||
|
||||
@override
|
||||
String get categoryMoney => '财富投资';
|
||||
|
||||
@override
|
||||
String get signBest => '上上签';
|
||||
|
||||
@override
|
||||
String get signGood => '中上签';
|
||||
|
||||
@override
|
||||
String get signNormal => '中下签';
|
||||
|
||||
@override
|
||||
String get language => '语言';
|
||||
|
||||
@override
|
||||
String get english => '英文';
|
||||
|
||||
@override
|
||||
String get chinese => '中文';
|
||||
|
||||
@override
|
||||
String get dialogConfirm => '确定';
|
||||
|
||||
@override
|
||||
String get agreementSeparator => '、';
|
||||
|
||||
@override
|
||||
String get agreementAnd => '和';
|
||||
|
||||
@override
|
||||
String get privacyContent => '隐私政策内容展示占位。';
|
||||
|
||||
@override
|
||||
String get termsContent => '服务条款内容展示占位。';
|
||||
|
||||
@override
|
||||
String get disclaimerContent => '免责声明内容展示占位。';
|
||||
|
||||
@override
|
||||
String get toastLabelInfo => '提示';
|
||||
|
||||
@override
|
||||
String get toastLabelSuccess => '成功';
|
||||
|
||||
@override
|
||||
String get toastLabelWarning => '警告';
|
||||
|
||||
@override
|
||||
String get toastLabelError => '错误';
|
||||
|
||||
@override
|
||||
String get errorTooManyRequests => '请求过于频繁,请稍后重试';
|
||||
|
||||
@override
|
||||
String get errorInvalidVerificationCode => '验证码错误';
|
||||
|
||||
@override
|
||||
String get errorSessionExpired => '登录已过期,请重新登录';
|
||||
|
||||
@override
|
||||
String get errorServiceUnavailable => '服务暂时不可用,请稍后重试';
|
||||
|
||||
@override
|
||||
String get errorServerGeneric => '服务异常,请稍后重试';
|
||||
|
||||
@override
|
||||
String get errorRequestGeneric => '请求失败,请稍后重试';
|
||||
}
|
||||
@@ -2,8 +2,9 @@
|
||||
"@@locale": "zh",
|
||||
"appTitle": "觅爻签问",
|
||||
"welcomeLogin": "欢迎登录",
|
||||
"loginSubtitle": "请使用手机号登录",
|
||||
"phoneHint": "请输入手机号码",
|
||||
"loginSubtitle": "请使用邮箱登录",
|
||||
"loginSubtitleEmail": "请使用邮箱登录",
|
||||
"emailHint": "请输入邮箱地址",
|
||||
"codeHint": "请输入验证码",
|
||||
"sendCode": "获取验证码",
|
||||
"sending": "发送中...",
|
||||
@@ -22,10 +23,11 @@
|
||||
"disclaimer": "免责声明",
|
||||
"icp": "粤ICP备2025428416号-1A",
|
||||
"invalidPhone": "请输入正确的手机号码",
|
||||
"invalidEmail": "请输入正确的邮箱地址",
|
||||
"invalidCode": "请输入6位验证码",
|
||||
"agreementRequired": "请先勾选协议",
|
||||
"codeSent": "验证码已发送,请注意查收",
|
||||
"mockLoginSuccess": "模拟登录成功",
|
||||
"loginSuccess": "登录成功",
|
||||
"helloUser": "您好,{name}",
|
||||
"@helloUser": {
|
||||
"placeholders": {
|
||||
@@ -45,6 +47,14 @@
|
||||
"profileTab": "我的",
|
||||
"notify": "消息通知",
|
||||
"featurePending": "该功能暂未接入数据",
|
||||
"logout": "退出登录",
|
||||
"defaultUserName": "用户",
|
||||
"historyQuestion1": "今年转岗是否合适?",
|
||||
"historyQuestion2": "最近感情是否能推进?",
|
||||
"historyQuestion3": "本季度投资节奏如何?",
|
||||
"guaName1": "天雷无妄",
|
||||
"guaName2": "泽火革",
|
||||
"guaName3": "风地观",
|
||||
"welcomeDialogTitle": "欢迎使用觅爻签问",
|
||||
"welcomeParagraph1": "你好,欢迎来到觅爻签问,这是一个借助于AI解读传统六爻卦象的平台,为用户了解中国传统易学文化提供一个窗口。",
|
||||
"welcomeParagraph2": "六爻卦象源于《周易》深邃的哲学体系,是古人探索世界运行规律的一种独特方法。古人认为宇宙万物相互关联,在你起卦时,你的心念与时空信息会凝结成卦象的方式呈现出来。",
|
||||
@@ -63,7 +73,20 @@
|
||||
"language": "语言",
|
||||
"english": "英文",
|
||||
"chinese": "中文",
|
||||
"dialogConfirm": "确定",
|
||||
"agreementSeparator": "、",
|
||||
"agreementAnd": "和",
|
||||
"privacyContent": "隐私政策内容展示占位。",
|
||||
"termsContent": "服务条款内容展示占位。",
|
||||
"disclaimerContent": "免责声明内容展示占位。"
|
||||
"disclaimerContent": "免责声明内容展示占位。",
|
||||
"toastLabelInfo": "提示",
|
||||
"toastLabelSuccess": "成功",
|
||||
"toastLabelWarning": "警告",
|
||||
"toastLabelError": "错误",
|
||||
"errorTooManyRequests": "请求过于频繁,请稍后重试",
|
||||
"errorInvalidVerificationCode": "验证码错误",
|
||||
"errorSessionExpired": "登录已过期,请重新登录",
|
||||
"errorServiceUnavailable": "服务暂时不可用,请稍后重试",
|
||||
"errorServerGeneric": "服务异常,请稍后重试",
|
||||
"errorRequestGeneric": "请求失败,请稍后重试"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user