class AppStrings { AppStrings._(); // Tab static const tabHome = '主页'; static const tabTickets = '票据'; static const tabTransfer = '传分'; static const tabSettings = '设置'; static const tabAbout = '关于'; // Login static const appTitle = 'Project Ichino'; static const loginSubtitle = '扫描或输入二维码进行登录'; static const qrCodeToken = 'QR Code 令牌'; static const qrHint = '粘贴二维码解析内容...'; static const qrParsedResult = '解析结果(截取后 64 位)'; static const uploadQR = '上传二维码'; static const login = '登录'; static const loggingIn = '登录中...'; static const qrScanSuccess = '二维码解析成功'; static const qrScanFailed = '未能识别二维码,请手动粘贴内容'; static const qrScanError = '解析失败'; static const forcePreviewApi = '强制使用 Preview API'; static const loginFailed = '登录失败'; static const requestFailed = '请求失败'; static const settingsTooltip = '设置'; // Home static const logoutTooltip = '退出登录'; static const titleServerNotConfigured = '未配置 Title Server'; static const titleServerNotConfiguredDesc = '请配置 Title Server 以获取用户数据。'; static const openSettings = '打开设置'; static const loadFailed = '数据加载失败'; static const retry = '重试'; static const unknownUser = '未知用户'; static const online = '在线'; static const offline = '离线'; static const gameInfo = '游戏信息'; static const lastGame = '最后游戏'; static const lastPlay = '最后游玩'; static const lastLogin = '最后登录'; static const lastRegion = '最后地区'; static const romVersion = 'Rom 版本'; static const dataVersion = '数据版本'; static const status = '状态'; static const netMember = '联网会员'; static const inherit = '继承'; static const banState = '封禁状态'; static const clean = '正常'; static const dailyBonus = '每日奖励'; static const notClaimed = '未领取'; static const moreDetails = '更多详情'; static const userId = '用户 ID'; static const totalAwake = '总计 Awake'; static const displayRate = '展示 Rate'; static const iconId = '图标 ID'; static const nameplateId = '名牌 ID'; static const plateId = '姓名框 ID'; static const frameId = '背景框 ID'; static const titleId = '称号 ID'; static const trophyId = '奖杯 ID'; static const partnerId = '伙伴 ID'; static const gradeRank = '段位'; static const courseRank = '阶级'; static const classRank = '段级'; static const point = '当前 P'; static const totalPoint = '累计 P'; static const headphoneVol = '耳机音量'; static const errorId = '错误 ID'; static const rawApiResponse = '原始 API 响应 (调试)'; // Ratings / breakdown static const ratingBreakdown = 'Rating 详情'; static const musicRating = '乐曲 Rating'; static const newChartRating = '新谱面 Rating'; static const oldChartRating = '旧谱面 Rating'; static const highestRating = '历史最高'; // First play static const firstPlay = '入坑信息'; static const joinDate = '入坑日期'; static const firstGame = '首次游戏'; static const firstRomVersion = '初始 Rom'; static const firstDataVersion = '初始数据'; // Play stats static const playStats = '游玩统计'; static const playCount = '总游玩次数'; static const currentPlayCount = '当期游玩'; static const totalAchievement = '总达成率'; static const totalDxScore = '总 DX 分'; static const totalSync = '总同步数'; // Notices static const inheritedAccountNotice = '此账号当前正在游玩, 仅显示 Preview 概要, 不执行登录。'; static String rating(int r) => 'Rating: $r'; // Tickets static const runTicket = '使用功能票'; static const runningTicket = '执行中...'; static const ticketNotConfigured = '请先配置 Title Server 设置。'; static const ticketNotLoggedIn = '尚未登录游戏服务器,无法使用功能票。'; static const ticketAutoLogout = '完成后自动退出登录'; static const stepChargeTicket = '使用功能票'; static const stepLogout = '退出游戏'; static const myTickets = '功能票'; static const refreshTickets = '刷新数据'; static const loading = '加载中...'; static const ticketNotSelected = '请先在功能票列表中选中一张票。'; static const selectedTicket = '已选票'; static const ticketUsed = '功能票使用完成'; static const ticketCooldownSeconds = 60; static String ticketCooldownCountdown(int remaining) => '冷却中,剩余 $remaining 秒'; static String ticketCooldownNotice(int remaining) => '登录后需冷却 $ticketCooldownSeconds 秒,剩余 $remaining 秒后可使用功能票。'; static String packetCooldownNotice(int remaining) => '登录后需冷却 $ticketCooldownSeconds 秒,剩余 $remaining 秒后可上传成绩。'; // Settings static const titleServerSettings = 'Title Server 设置'; static const titleServerSection = 'Title Server'; static const authServerSettings = 'Auth Server'; static const machineSettings = '机器信息'; static const save = '保存'; static const labelTitleServerUrl = 'Title Server URL'; static const hintTitleServerUrl = ''; static const labelAesKey = 'AES Key'; static const hintAesKey = 'your aes key string'; static const labelAesIv = 'AES IV'; static const hintAesIv = 'your aes iv string'; static const labelClientId = 'Client ID'; static const hintClientId = 'A63E01C2805'; static const labelRegionId = 'Region ID'; static const hintRegionId = '1'; static const labelPlaceId = 'Place ID'; static const hintPlaceId = '1403'; static const labelObfuscateParam = 'Obfuscate Param'; static const hintObfuscateParam = 'LatuAa81'; static const labelApiVersion = 'API Version (Mai-Encoding)'; static const hintApiVersion = '1.53'; static const labelRegionName = 'Region 名称'; static const hintRegionName = '北京'; static const labelPlaceName = 'Place 名称'; static const hintPlaceName = 'Place name'; static const labelKeychipId = 'Keychip ID'; static const hintKeychipId = 'ID'; static const labelAimeUrl = 'Aime URL'; static const hintAimeUrl = ''; static const labelAimeSalt = 'Aime Salt'; static const hintAimeSalt = 'API Key 派生用 Salt'; static String fieldRequired(String label) => '$label 不能为空'; // Config Export/Import static const configExportImport = '配置导入/导出'; static const exportConfig = '导出当前配置'; static const importConfig = '从剪贴板导入配置'; static const exportSuccess = '配置已导出到剪贴板 (Base64)'; static const importSuccess = '配置已导入并保存'; static const importFailed = '导入失败:剪贴板内容无效'; static const noConfigToExport = '没有可导出的配置'; // Transfer Score (传分 / UpsertUserAll 上传成绩) static const transferTitle = '传送分数'; static const transferDesc = '新版本机台容易崩溃导致成绩传不上去。在此填入一首歌的成绩,程序会作为一次有效游玩记录上传回服务器。'; static const transferFetchData = '拉取数据'; static const transferFetching = '拉取中...'; static const transferRefetch = '重新拉取'; static const transferNotLoggedIn = '尚未登录游戏服务器,无法上传成绩。'; static const transferDataReady = '数据已就绪,填写下方成绩后点击上传。'; // Score form static const scoreFormTitle = '成绩信息'; static const scoreMusicId = '歌曲 ID (musicId)'; static const scoreLevel = '难度'; static const scoreAchievement = '达成率 (achievement)'; static const scoreAchievementHint = '例如 1010000 = 101.0000%'; static const scoreComboStatus = 'Combo 状态'; static const scoreSyncStatus = 'Sync 状态'; static const scoreDeluxscore = 'DX 分 (deluxscoreMax)'; static const scorePlayCount = '游玩次数 (playCount)'; static const scoreRankLabel = '评级 (自动)'; static const scoreInvalidInput = '请填写有效的歌曲 ID 与达成率。'; static const List levelLabels = [ 'Basic (绿)', 'Advanced (黄)', 'Expert (红)', 'Master (紫)', 'Re:Master (白)', ]; static const List comboStatusLabels = [ '无', 'FC (Full Combo)', 'FC+ (Full Combo+)', 'AP (All Perfect)', 'AP+ (All Perfect+)', ]; static const List syncStatusLabels = [ '无', 'FS (Full Sync)', 'FS+ (Full Sync+)', 'FDX (Full Sync DX)', 'FDX+ (Full Sync DX+)', ]; static const transferSend = '上传成绩'; static const transferSending = '上传中...'; static const transferSuccess = '成绩上传完成'; static const transferFailed = '成绩上传失败'; static const transferSlotLabel = '槽位'; static const transferNoData = '⚠️ 未拉取到用户数据,请先点「拉取数据」按钮获取。'; // About static const aboutTitle = 'Project Ichino'; static const aboutDesc = '基于 QR Code 的 maimai DX 街机网络登录客户端。'; static const credits = '致谢'; static const creditBuiltWith = '构建框架'; static const creditQRDecode = 'QR 解码'; static const creditIconAssets = '图标资源'; static const creditLicense = '许可证'; }