diff --git a/assets/i18n/en-US.json b/assets/i18n/en-US.json index 35d644f1f..f45e95de9 100644 --- a/assets/i18n/en-US.json +++ b/assets/i18n/en-US.json @@ -708,6 +708,28 @@ "chatJoin": "Join the Chat", "realmJoin": "Join the Realm", "realmJoinSuccess": "Successfully joined the realm.", + "RealmBoost": "Realm Boost", + "Boost": "Boost", + "boostLevel": "Boost Level", + "labelCap": "Label Cap", + "BoostMax": "Boost maxed out", + "BoostAllUnlocked": "All realm boost tiers unlocked.", + "BoostLevel1Hint": "Level 1 unlocks custom labels.", + "BoostLevel2Hint": "Level 2 unlocks elevated promotions.", + "BoostLevel3Hint": "Level 3 unlocks the highest label capacity.", + "BoostProgressAvailable": "Boost progress available.", + "boostInfo": "Boosts are active for", + "days": "days", + "currencies": "One share is 1 gold or 1000 points.", + "RealmIdentity": "Realm Identity", + "NoRealmSpecSet": "No realm-specific profile set yet.", + "RealmBoostFunction": "Boost this realm to unlock custom nick and bio.", + "RealmLabel": "Realm Label", + "RealmLabels": "Realm Labels", + "Add": "Add", + "boostRequiredToUnlockLabels": "Boost this realm to level 1 to unlock labels.", + "labelsUsage": "Using {used} / {total} labels", + "NoLabelsCreated": "No labels created yet.", "search": "Search", "publisherMembers": "Collaborators", "developerHub": "Developer Hub", @@ -2772,4 +2794,4 @@ "goToDirectory": "Go to Directory", "uploadFile": "Upload File", "errorPickingFile": "Error picking file: {}" -} +} \ No newline at end of file diff --git a/assets/i18n/zh-CN.json b/assets/i18n/zh-CN.json index 155513d15..5a6b7f0b0 100644 --- a/assets/i18n/zh-CN.json +++ b/assets/i18n/zh-CN.json @@ -707,8 +707,30 @@ "chatJoin": "加入聊天", "realmJoin": "加入领域", "realmJoinSuccess": "成功加入领域。", + "RealmBoost": "领域助推", + "Boost": "助推", + "boostLevel": "助推等级", + "labelCap": "标签上限", + "BoostMax": "助推已达上限", + "BoostAllUnlocked": "已解锁所有领域助推等级。", + "BoostLevel1Hint": "等级1解锁自定义标签。", + "BoostLevel2Hint": "等级2解锁高级推广。", + "BoostLevel3Hint": "等级3解锁最高标签容量。", + "BoostProgressAvailable": "助推进度可用。", + "boostInfo": "助推有效期为", + "days": "天", + "currencies": "1份额 = 1金点 或 1000数据位元。", + "RealmIdentity": "领域身份", + "NoRealmSpecSet": "尚未设置领域专属资料。", + "RealmBoostFunction": "助推此领域以解锁自定义昵称和简介。", + "RealmLabel": "领域标签", + "PealmLabels": "领域标签", + "Add": "添加", + "boostRequiredToUnlockLabels": "将此领域助推至1级以解锁标签。", + "labelsUsage": "使用 {used} / {total} 个标签", + "NoLabelsCreated": "尚未创建任何标签。", "search": "搜索", - "publisherMembers": "合作者", + "publisherMembers": "协作者", "developerHub": "开发者中心", "developerHubUnselectedHint": "请选择一位开发者以查看统计数据,或新增一位开发者。", "enrollDeveloper": "成为一名开发者", @@ -1010,6 +1032,7 @@ "fileHash": "哈希", "exifData": "EXIF 数据", "postShuffle": "随机帖子", + "swipeToExplore": "滑动探索", "leveling": "等级", "levelingHistory": "经验记录", "stellarProgram": "恒星计划", @@ -1122,7 +1145,12 @@ "authDeviceChallenges": "设备活动", "authDeviceHint": "向左轻扫以编辑标签,向右轻扫以注销登录设备。", "settingsMessageDisplayStyle": "消息样式", + "settingsMessageDisplayStyleBubble": "气泡", + "settingsMessageDisplayStyleColumn": "列表", + "settingsMessageDisplayStyleCompact": "紧凑", "settingsAttachmentsListStyle": "附件列表样式", + "settingsAttachmentsListStyleRow": "行式", + "settingsAttachmentsListStyleColumn": "列式", "settingsLinkCollapseMode": "链接预览默认状态", "settingsLinkCollapseModeExpand": "展开", "settingsLinkCollapseModeCollapse": "收起", @@ -2675,25 +2703,75 @@ "settingsMediaProxy": "媒体代理", "settingsMediaProxyHelper": "媒体代理将在您的设备上运行一个本地 HTTP 服务器,以支持流式缓存,提供更好的媒体播放体验。", "openFullPost": "展开全文", -"fitnessSyncHint": "点击同步您的最新锻炼和健康数据", -"fitnessNewHealthDataHint": "有新健康数据可用", -"fitnessSync": "同步", -"fitnessQuickActions": "快捷操作", -"NoWorkoutsHint": "暂无锻炼记录", -"SeeAll": "查看全部", -"fitnessViewGoals": "查看目标", -"TrackFitnessGoals": "追踪您的健身目标", -"ViewMetrics": "查看指标", -"fitnessTrackHint": "追踪体重、步数等更多数据", -"ViewLeaderboard": "查看排行榜", -"ViewLeaderboardHint": "查看您在他人中的排名", -"ActiveGoals": "进行中的目标", -"Completed": "已完成", -"Goals": "目标", -"Metrics": "指标", -"Import": "导入", -"RecentWorkouts": "最近锻炼", -"LeaderBoard": "排行榜", + "fitnessSyncHint": "点击同步您的最新锻炼和健康数据", + "fitnessNewHealthDataHint": "有新健康数据可用", + "fitnessSync": "同步", + "fitnessQuickActions": "快捷操作", + "NoWorkoutsHint": "暂无锻炼记录", + "SeeAll": "查看全部", + "fitnessViewGoals": "查看目标", + "TrackFitnessGoals": "追踪您的健身目标", + "ViewMetrics": "查看指标", + "fitnessTrackHint": "追踪体重、步数等更多数据", + "ViewLeaderboard": "查看排行榜", + "ViewLeaderboardHint": "查看您在他人中的排名", + "ActiveGoals": "进行中的目标", + "Completed": "已完成", + "Goals": "目标", + "Metrics": "指标", + "Import": "导入", + "RecentWorkouts": "最近锻炼", + "LeaderBoard": "排行榜", + "project": "项目", + "pickImage": "选择图片", + "selectedImages": "已选图片", + "noImagesSelected": "未选择图片", + "selectImageHint": "点击下方选择图片", + "selectImagesHint": "点击下方选择图片", + "pickFromGallery": "从相册选择", + "pickMultipleHint": "可同时选择多张图片", + "takePhoto": "拍照", + "compressionSettings": "压缩设置", + "compressionQuality": "压缩质量", + "compressionHint": "质量越高,文件体积越大", + "maxImagesError": "最多只能选择 {} 张图片", + "imageEditorCrop": "裁剪", + "imageEditorRotate": "旋转", + "imageEditorFlip": "翻转", + "imageEditorPaint": "画笔", + "imageEditorText": "文字", + "imageEditorEmoji": "表情", + "imageEditorFilters": "滤镜", + "imageEditorBlur": "模糊", + "imageEditorAdjust": "调整", + "imageEditorBrightness": "亮度", + "imageEditorContrast": "对比度", + "imageEditorSaturation": "饱和度", + "imageEditorExposure": "曝光度", + "imageEditorHue": "色相", + "imageEditorTemperature": "色温", + "imageEditorSharpness": "锐度", + "imageEditorLuminance": "明度", + "imageEditorFade": "褪色", + "imageEditorFree": "自由", + "imageEditorOriginal": "原始", + "imageEditorSquare": "方形", + "imageEditorApply": "应用", + "imageEditorCancel": "取消", + "imageEditorDone": "完成", + "imageEditorUndo": "撤销", + "imageEditorRedo": "重做", + "imageEditorBrush": "画笔", + "imageEditorLine": "线条", + "imageEditorLineWidth": "线条粗细", + "imageEditorColor": "颜色", + "imageEditorAddText": "添加文字", + "imageEditorEditText": "编辑文字", + "imageEditorFontSize": "字体大小", + "imageEditorBackground": "背景", + "imageEditorSelectEmoji": "选择表情", + "imageEditorLoading": "处理中...", + "cropRequiredHint": "上传前请先裁剪图片", "storageOverview": "存储概览", "storage": "存储", "used": "已用", diff --git a/assets/i18n/zh-TW.json b/assets/i18n/zh-TW.json index 0e74009e7..1f32f5845 100644 --- a/assets/i18n/zh-TW.json +++ b/assets/i18n/zh-TW.json @@ -707,8 +707,30 @@ "chatJoin": "加入聊天", "realmJoin": "加入領域", "realmJoinSuccess": "成功加入領域。", + "RealmBoost": "領域助推", + "Boost": "助推", + "boostLevel": "助推等級", + "labelCap": "標籤上限", + "BoostMax": "助推已達上限", + "BoostAllUnlocked": "已解鎖所有領域助推等級。", + "BoostLevel1Hint": "等級1解鎖自訂標籤。", + "BoostLevel2Hint": "等級2解鎖高階推廣。", + "BoostLevel3Hint": "等級3解鎖最高標籤容量。", + "BoostProgressAvailable": "助推進度可用。", + "boostInfo": "助推有效期為", + "days": "天", + "currencies": "1份額 = 1金點 或 1000資料位元。", + "RealmIdentity": "領域身份", + "NoRealmSpecSet": "尚未設定領域專屬資料。", + "RealmBoostFunction": "助推此領域以解鎖自訂暱稱和簡介。", + "RealmLabel": "領域標籤", + "PealmLabels": "領域標籤", + "Add": "新增", + "boostRequiredToUnlockLabels": "將此領域助推至1級以解鎖標籤。", + "labelsUsage": "使用 {used} / {total} 個標籤", + "NoLabelsCreated": "尚未建立任何標籤。", "search": "搜尋", - "publisherMembers": "合作者", + "publisherMembers": "協作者", "developerHub": "開發者中心", "developerHubUnselectedHint": "請選擇一位開發者以檢視統計資料,或新增一位開發者。", "enrollDeveloper": "成為一名開發者", @@ -1010,6 +1032,7 @@ "fileHash": "雜湊", "exifData": "EXIF 資料", "postShuffle": "隨機貼文", + "swipeToExplore": "滑動探索", "leveling": "等級", "levelingHistory": "經驗記錄", "stellarProgram": "恆星計劃", @@ -1122,7 +1145,12 @@ "authDeviceChallenges": "裝置活動", "authDeviceHint": "向左輕掃以編輯標籤,向右輕掃以登出登入裝置。", "settingsMessageDisplayStyle": "訊息樣式", + "settingsMessageDisplayStyleBubble": "氣泡", + "settingsMessageDisplayStyleColumn": "列表", + "settingsMessageDisplayStyleCompact": "緊湊", "settingsAttachmentsListStyle": "附件列表樣式", + "settingsAttachmentsListStyleRow": "行式", + "settingsAttachmentsListStyleColumn": "列式", "settingsLinkCollapseMode": "連結預覽預設狀態", "settingsLinkCollapseModeExpand": "展開", "settingsLinkCollapseModeCollapse": "收起", @@ -1149,7 +1177,7 @@ "attachmentPreview": "附件預覽", "selectPool": "選擇儲存池", "choosePool": "選擇一個儲存池", - "errorLoadingPools": "載入池時出錯", + "errorLoadingPools": "載入儲存池出錯", "quotaCostInfo": "此上傳將消耗 {} 配額點", "uploadConstraints": "上傳限制", "fileSizeExceeded": "檔案大小超過了 {} 的最大限制", @@ -2691,5 +2719,79 @@ "Metrics": "指標", "Import": "匯入", "RecentWorkouts": "最近鍛鍊", - "LeaderBoard": "排行榜" + "LeaderBoard": "排行榜", + "project": "專案", + "pickImage": "選擇圖片", + "selectedImages": "已選圖片", + "noImagesSelected": "未選擇圖片", + "selectImageHint": "點選下方選擇圖片", + "selectImagesHint": "點選下方選擇圖片", + "pickFromGallery": "從相簿選擇", + "pickMultipleHint": "可同時選擇多張圖片", + "takePhoto": "拍照", + "compressionSettings": "壓縮設定", + "compressionQuality": "壓縮質量", + "compressionHint": "質量越高,檔案體積越大", + "maxImagesError": "最多隻能選擇 {} 張圖片", + "imageEditorCrop": "裁剪", + "imageEditorRotate": "旋轉", + "imageEditorFlip": "翻轉", + "imageEditorPaint": "畫筆", + "imageEditorText": "文字", + "imageEditorEmoji": "表情", + "imageEditorFilters": "濾鏡", + "imageEditorBlur": "模糊", + "imageEditorAdjust": "調整", + "imageEditorBrightness": "亮度", + "imageEditorContrast": "對比度", + "imageEditorSaturation": "飽和度", + "imageEditorExposure": "曝光度", + "imageEditorHue": "色相", + "imageEditorTemperature": "色溫", + "imageEditorSharpness": "銳度", + "imageEditorLuminance": "明度", + "imageEditorFade": "褪色", + "imageEditorFree": "自由", + "imageEditorOriginal": "原始", + "imageEditorSquare": "方形", + "imageEditorApply": "應用", + "imageEditorCancel": "取消", + "imageEditorDone": "完成", + "imageEditorUndo": "撤銷", + "imageEditorRedo": "重做", + "imageEditorBrush": "畫筆", + "imageEditorLine": "線條", + "imageEditorLineWidth": "線條粗細", + "imageEditorColor": "顏色", + "imageEditorAddText": "新增文字", + "imageEditorEditText": "編輯文字", + "imageEditorFontSize": "字型大小", + "imageEditorBackground": "背景", + "imageEditorSelectEmoji": "選擇表情", + "imageEditorLoading": "處理中…", + "cropRequiredHint": "上傳前請先裁剪圖片", + "storageOverview": "儲存概覽", + "storage": "儲存", + "used": "已用", + "total": "總計", + "totalSize": "總大小", + "poolUsage": "儲存池使用", + "filterByPool": "按儲存池篩選", + "viewDetails": "檢視詳情", + "healthy": "健康", + "moderate": "適中", + "critical": "緊急", + "errorLoadingUsage": "載入使用資料出錯", + "errorLoadingQuota": "載入配額資料出錯", + "exitSelectionMode": "退出選擇模式", + "enterSelectionMode": "進入選擇模式", + "showActiveFiles": "顯示活動檔案", + "showRecycleBin": "顯示回收站", + "addFilesOrCreateDirectory": "新增檔案或建立目錄", + "navigateToDirectory": "導航到目錄", + "directoryPath": "目錄路徑", + "directoryPathHint": "例如:documents, projects/my-app", + "directoryPathHelper": "輸入目錄路徑。當您上傳檔案到該路徑時,目錄將被建立。", + "goToDirectory": "前往目錄", + "errorPickingFile": "選擇檔案出錯:{}" } diff --git a/lib/realms/screens/realm_detail.dart b/lib/realms/screens/realm_detail.dart index 34d84de77..18636d0d1 100644 --- a/lib/realms/screens/realm_detail.dart +++ b/lib/realms/screens/realm_detail.dart @@ -392,7 +392,7 @@ class RealmDetailScreen extends HookConsumerWidget { children: [ Expanded( child: Text( - 'Realm Boost', + 'RealmBoost'.tr(), style: Theme.of(context).textTheme.titleMedium, ), ), @@ -427,7 +427,7 @@ class RealmDetailScreen extends HookConsumerWidget { visualDensity: VisualDensity(vertical: -3), ), icon: const Icon(Symbols.volunteer_activism), - label: const Text('Boost'), + label: Text('Boost'.tr()), ), ], ), @@ -439,7 +439,7 @@ class RealmDetailScreen extends HookConsumerWidget { spacing: 6, children: [ Icon(Symbols.rocket_launch, size: 17, fill: 1), - Text('Boost Level ${boost.boostLevel}').fontSize(12), + Text('boostLevel'.tr(namedArgs: {'level': boost.boostLevel.toString()})).fontSize(12), ], ), const Gap(4), @@ -448,7 +448,7 @@ class RealmDetailScreen extends HookConsumerWidget { spacing: 6, children: [ Icon(Symbols.label, size: 17, fill: 1), - Text('Label cap ${boost.labelCap}').fontSize(12), + Text('labelCap'.tr(namedArgs: {'cap': boost.labelCap.toString()})).fontSize(12), ], ), ], @@ -460,7 +460,7 @@ class RealmDetailScreen extends HookConsumerWidget { Icon(Symbols.local_fire_department, size: 17, fill: 1), Text( nextThreshold == null - ? 'Boost maxed out' + ? 'BoostMax'.tr() : '${boost.boostPoints}/$nextThreshold boosts', ).fontSize(12), ], @@ -479,18 +479,21 @@ class RealmDetailScreen extends HookConsumerWidget { const Gap(8), Text( boost.boostLevel >= 3 - ? 'All realm boost tiers unlocked.' + ? 'BoostAllUnlocked'.tr() : switch (boost.boostLevel) { - 0 => 'Level 1 unlocks custom labels.', - 1 => 'Level 2 unlocks elevated promotions.', - 2 => 'Level 3 unlocks the highest label capacity.', - _ => 'Boost progress available.', + 0 => 'BoostLevel1Hint'.tr(), + 1 => 'BoostLevel2Hint'.tr(), + 2 => 'BoostLevel3Hint'.tr(), + _ => 'BoostProgressAvailable'.tr(), }, style: Theme.of(context).textTheme.bodySmall, ), const Gap(6), - Text( - 'Boosts are active for ${boost.expiresAfterDays} days. Supported currencies: ${boost.supportedCurrencies.join(', ')}. One share is 1 gold or 1000 points.', + Text( + 'boostInfo'.tr(namedArgs: { + 'days': boost.expiresAfterDays.toString(), + 'currencies': boost.supportedCurrencies.join(', '), + }), style: Theme.of(context).textTheme.bodySmall, ), ], @@ -510,7 +513,7 @@ class RealmDetailScreen extends HookConsumerWidget { children: [ Expanded( child: Text( - 'Realm Identity', + 'RealmIdentity'.tr(), style: Theme.of(context).textTheme.titleMedium, ), ), @@ -571,8 +574,8 @@ class RealmDetailScreen extends HookConsumerWidget { (identity.nick?.isEmpty ?? true)) Text( realm.boostLevel >= 1 - ? 'No realm-specific profile set yet.' - : 'Boost this realm to unlock custom nick and bio.', + ? 'NoRealmSpecSet'.tr() + : 'RealmBoostFunction'.tr(), style: Theme.of(context).textTheme.bodySmall, ), if (identity.labelId != null) ...[ @@ -604,7 +607,7 @@ class RealmDetailScreen extends HookConsumerWidget { context, ).colorScheme.onSecondaryContainer, ), - Text('Realm Label') + Text('RealmLabel'.tr()) .fontSize(12) .textColor( Theme.of( @@ -656,7 +659,7 @@ class RealmDetailScreen extends HookConsumerWidget { children: [ Expanded( child: Text( - 'Realm Labels', + 'RealmLabels'.tr(), style: Theme.of(context).textTheme.titleMedium, ), ), @@ -679,15 +682,18 @@ class RealmDetailScreen extends HookConsumerWidget { ); }, icon: const Icon(Symbols.add), - label: const Text('Add'), + label: Text('Add'.tr()), ), ], ), const Gap(8), Text( boost.boostLevel < 1 - ? 'Boost this realm to level 1 to unlock labels.' - : 'Using ${realmLabels.asData?.value.length ?? 0} / ${boost.labelCap} labels', + ? 'boostRequiredToUnlockLabels'.tr() + : 'labelsUsage'.tr(namedArgs: { + 'used': (realmLabels.asData?.value.length ?? 0).toString(), + 'total': boost.labelCap.toString(), + }), style: Theme.of(context).textTheme.bodySmall, ), const Gap(12), @@ -700,7 +706,7 @@ class RealmDetailScreen extends HookConsumerWidget { data: (labels) { if (labels.isEmpty) { return Text( - 'No labels created yet.', + 'NoLabelsCreated'.tr(), style: Theme.of(context).textTheme.bodySmall, ); }