feat: 切换邮箱认证并重构前后端启动与门禁

This commit is contained in:
qzl
2026-04-02 18:39:35 +08:00
parent 92cdfd9fca
commit 31594558eb
116 changed files with 5608 additions and 628 deletions
+92
View File
@@ -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"
}
+584
View File
@@ -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, youll need to edit this
/// file.
///
/// First, open your projects ios/Runner.xcworkspace Xcode workspace file.
/// Then, in the Project Navigator, open the Info.plist file under the Runner
/// projects 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.',
);
}
+246
View File
@@ -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';
}
+243
View File
@@ -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 => '请求失败,请稍后重试';
}
+27 -4
View File
@@ -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": "请求失败,请稍后重试"
}