All checks were successful
CI / Windows build (push) Successful in 7m47s
Redesign the optional FastAPI companion around vault files (manifest / PUT/GET/DELETE + OCR jobs) instead of legacy strokes_json notes. Wire a client Server settings panel for health/login. Polish shell UX: l10n for settings/home/board, sticky-board empty state, and a narrow-screen diagnostics FAB. Co-authored-by: Cursor <cursoragent@cursor.com>
584 lines
12 KiB
Dart
584 lines
12 KiB
Dart
// 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 => 'BadNote';
|
||
|
||
@override
|
||
String get settings => '设置';
|
||
|
||
@override
|
||
String get search => '搜索';
|
||
|
||
@override
|
||
String get importPdf => '导入 PDF';
|
||
|
||
@override
|
||
String get importPpt => '导入 PPT';
|
||
|
||
@override
|
||
String get importFile => '导入文件';
|
||
|
||
@override
|
||
String get createNotebook => '新建笔记本';
|
||
|
||
@override
|
||
String get newNotebookTitle => '新建笔记本';
|
||
|
||
@override
|
||
String get notebookTitleHint => '笔记本标题';
|
||
|
||
@override
|
||
String get create => '创建';
|
||
|
||
@override
|
||
String get untitledNote => '未命名';
|
||
|
||
@override
|
||
String get noNotesYetHint => '还没有手写笔记——点按 + 新建';
|
||
|
||
@override
|
||
String get noDocumentsYet => '暂无文档——点按“导入文件”';
|
||
|
||
@override
|
||
String get processingImport => '正在导入…';
|
||
|
||
@override
|
||
String importFailed(String error) {
|
||
return '无法导入该文件:$error';
|
||
}
|
||
|
||
@override
|
||
String get convertNeedsLibreOffice =>
|
||
'导入 Word 文档需要安装 LibreOffice。请先转换为 PDF,或安装 LibreOffice。';
|
||
|
||
@override
|
||
String unsupportedFileType(String ext) {
|
||
return '不支持的文件类型:$ext';
|
||
}
|
||
|
||
@override
|
||
String get penCanvasBeta => '手写画布(测试版)';
|
||
|
||
@override
|
||
String get newNote => '新建笔记';
|
||
|
||
@override
|
||
String get open => '打开';
|
||
|
||
@override
|
||
String get cancel => '取消';
|
||
|
||
@override
|
||
String get delete => '删除';
|
||
|
||
@override
|
||
String get deleteNoteTitle => '删除笔记?';
|
||
|
||
@override
|
||
String get deleteNote => '删除笔记';
|
||
|
||
@override
|
||
String get openInSplitView => '分屏打开';
|
||
|
||
@override
|
||
String get splitViewSubtitle => 'PDF 参考 + 草稿纸';
|
||
|
||
@override
|
||
String get removeDocument => '移除文档';
|
||
|
||
@override
|
||
String get ok => '确定';
|
||
|
||
@override
|
||
String get pickColor => '选择颜色';
|
||
|
||
@override
|
||
String get clearSettingsTitle => '清除所有本地设置?';
|
||
|
||
@override
|
||
String get clear => '清除';
|
||
|
||
@override
|
||
String get settingsReset => '设置已恢复默认';
|
||
|
||
@override
|
||
String get themeSystem => '跟随系统';
|
||
|
||
@override
|
||
String get themeLight => '浅色';
|
||
|
||
@override
|
||
String get themeDark => '深色';
|
||
|
||
@override
|
||
String get seedColorDesc => 'Material 3 主题种子色';
|
||
|
||
@override
|
||
String get searchHint => '搜索笔记和文档…';
|
||
|
||
@override
|
||
String searchError(String error) {
|
||
return '搜索出错:$error';
|
||
}
|
||
|
||
@override
|
||
String noResultsFor(String query) {
|
||
return '没有“$query”的结果';
|
||
}
|
||
|
||
@override
|
||
String get typeToSearch => '输入以搜索你的笔记和文档';
|
||
|
||
@override
|
||
String get sectionNotes => '笔记';
|
||
|
||
@override
|
||
String get sectionDocuments => '文档';
|
||
|
||
@override
|
||
String pageLabel(int page) {
|
||
return '第 $page 页';
|
||
}
|
||
|
||
@override
|
||
String get processingPptx => '正在处理 PPTX…';
|
||
|
||
@override
|
||
String get processingPresentation => '正在处理演示文稿…';
|
||
|
||
@override
|
||
String get couldNotOpenPresentation => '无法打开演示文稿。';
|
||
|
||
@override
|
||
String get toolPen => '钢笔';
|
||
|
||
@override
|
||
String get toolHighlighter => '荧光笔';
|
||
|
||
@override
|
||
String get toolEraser => '橡皮擦';
|
||
|
||
@override
|
||
String get brushPicker => '笔刷';
|
||
|
||
@override
|
||
String get brushFountainPen => '钢笔';
|
||
|
||
@override
|
||
String get brushBallpoint => '圆珠笔';
|
||
|
||
@override
|
||
String get brushPencil => '铅笔';
|
||
|
||
@override
|
||
String get brushHighlighter => '荧光笔';
|
||
|
||
@override
|
||
String get toolSelect => '选择';
|
||
|
||
@override
|
||
String get toolShape => '形状';
|
||
|
||
@override
|
||
String get shapePicker => '形状';
|
||
|
||
@override
|
||
String get shapeLine => '直线';
|
||
|
||
@override
|
||
String get shapeRectangle => '矩形';
|
||
|
||
@override
|
||
String get shapeEllipse => '椭圆';
|
||
|
||
@override
|
||
String get shapeArrow => '箭头';
|
||
|
||
@override
|
||
String get actionDeleteSelection => '删除所选';
|
||
|
||
@override
|
||
String get actionUndo => '撤销';
|
||
|
||
@override
|
||
String get actionRedo => '重做';
|
||
|
||
@override
|
||
String get fingerDrawingOn => '手指书写:开';
|
||
|
||
@override
|
||
String get fingerDrawingOff => '手指书写:关(仅手写笔)';
|
||
|
||
@override
|
||
String get pages => '页面';
|
||
|
||
@override
|
||
String get penSettings => '手写笔设置';
|
||
|
||
@override
|
||
String get inputDiagnostic => '输入诊断(写入日志文件)';
|
||
|
||
@override
|
||
String get back => '返回';
|
||
|
||
@override
|
||
String get previousPage => '上一页';
|
||
|
||
@override
|
||
String get nextPage => '下一页';
|
||
|
||
@override
|
||
String get toolSelectText => '选择文字';
|
||
|
||
@override
|
||
String get actionHighlightSelection => '高亮所选';
|
||
|
||
@override
|
||
String get toolRemoveHighlight => '移除高亮(点按高亮处)';
|
||
|
||
@override
|
||
String get toolPlaceScratchLink => '放置便签链接';
|
||
|
||
@override
|
||
String get toolText => '文字(点按或双击添加)';
|
||
|
||
@override
|
||
String get textPlaceholder => '输入文字…';
|
||
|
||
@override
|
||
String get scratchLinkDeleteTitle => '删除便签链接?';
|
||
|
||
@override
|
||
String get scratchLinkDeleteBody => '这会移除锚点及其专属草稿纸。';
|
||
|
||
@override
|
||
String get toolAddBookmark => '添加书签(当前位置或所选段落)';
|
||
|
||
@override
|
||
String get toolBookmarks => '书签';
|
||
|
||
@override
|
||
String get bookmarksTitle => '书签';
|
||
|
||
@override
|
||
String get bookmarksEmpty => '还没有书签。';
|
||
|
||
@override
|
||
String bookmarkDefaultLabel(int page) {
|
||
return '第 $page 页';
|
||
}
|
||
|
||
@override
|
||
String bookmarkPageLabel(int page) {
|
||
return '第 $page 页';
|
||
}
|
||
|
||
@override
|
||
String get bookmarkDeleteTitle => '删除书签?';
|
||
|
||
@override
|
||
String get bookmarkDeleteBody => '这会移除保存的位置。';
|
||
|
||
@override
|
||
String failedToOpenPdf(String error) {
|
||
return '打开 PDF 失败:\n$error';
|
||
}
|
||
|
||
@override
|
||
String get pdfNoPages => 'PDF 没有任何页面。';
|
||
|
||
@override
|
||
String pageOfPages(int current, int total) {
|
||
return '$current / $total';
|
||
}
|
||
|
||
@override
|
||
String get libraryTab => '库';
|
||
|
||
@override
|
||
String get boardTab => '便利贴';
|
||
|
||
@override
|
||
String get shellTagline => '手写 · 批注 · 知识';
|
||
|
||
@override
|
||
String get notesSection => '笔记';
|
||
|
||
@override
|
||
String get documentsSection => '文档';
|
||
|
||
@override
|
||
String get emptyLibraryTitle => '还没有内容';
|
||
|
||
@override
|
||
String get emptyLibraryBody => '新建笔记,或导入 PDF / PPT / Word';
|
||
|
||
@override
|
||
String get diagnosticsSection => '诊断';
|
||
|
||
@override
|
||
String get diagnosticsExport => '导出诊断包';
|
||
|
||
@override
|
||
String get diagnosticsExportHint => '在 Surface 上复现问题后导出,发回给开发者分析';
|
||
|
||
@override
|
||
String get diagnosticsToggle => '输入诊断叠加层';
|
||
|
||
@override
|
||
String get penSettingsUnified => '笔与墨迹';
|
||
|
||
@override
|
||
String get board => '便利贴板';
|
||
|
||
@override
|
||
String get boardTitle => '便利贴板';
|
||
|
||
@override
|
||
String get boardOpen => '便利贴板';
|
||
|
||
@override
|
||
String get boardAddCard => '添加便利贴';
|
||
|
||
@override
|
||
String get boardNewCardText => '新便利贴';
|
||
|
||
@override
|
||
String get boardDeleteCard => '删除便利贴';
|
||
|
||
@override
|
||
String get boardDeleteCardTitle => '删除这张便利贴?';
|
||
|
||
@override
|
||
String get boardBacklinks => '哪些链接到这里';
|
||
|
||
@override
|
||
String get boardNoBacklinks => '暂无其他便利贴链接到这里';
|
||
|
||
@override
|
||
String boardDanglingLink(String target) {
|
||
return '没有名为“$target”的便利贴';
|
||
}
|
||
|
||
@override
|
||
String get close => '关闭';
|
||
|
||
@override
|
||
String get vaultSetupTitle => '选择笔记库';
|
||
|
||
@override
|
||
String get vaultSetupHeadline => '为你的笔记本选择一个文件夹';
|
||
|
||
@override
|
||
String get vaultSetupBody =>
|
||
'BadNote 会把你的笔记本都存放在你选择的一个文件夹里——就像 Obsidian 的库(vault)。请选择一个你能掌控的文件夹(例如同步盘),这样你的笔记会跟着文件一起走。';
|
||
|
||
@override
|
||
String get vaultChooseFolder => '选择文件夹';
|
||
|
||
@override
|
||
String get vaultMissingTitle => '笔记库文件夹不见了';
|
||
|
||
@override
|
||
String get vaultMissingBody => '找不到你选择的文件夹(可能被移动、删除,或所在磁盘已拔出)。请重新定位或另选一个。';
|
||
|
||
@override
|
||
String vaultPickFailed(String error) {
|
||
return '无法打开文件夹选择器:$error';
|
||
}
|
||
|
||
@override
|
||
String get vaultNotWritable => '该文件夹不可写,请另选一个。';
|
||
|
||
@override
|
||
String get vaultSection => '笔记库';
|
||
|
||
@override
|
||
String get vaultFolderLabel => '笔记库文件夹';
|
||
|
||
@override
|
||
String get vaultNoneSelected => '尚未选择文件夹';
|
||
|
||
@override
|
||
String get vaultChangeFolder => '更改笔记库文件夹';
|
||
|
||
@override
|
||
String get vaultUpdated => '笔记库文件夹已更新';
|
||
|
||
@override
|
||
String get syncSection => '同步(WebDAV)';
|
||
|
||
@override
|
||
String get syncServerUrl => '服务器地址';
|
||
|
||
@override
|
||
String get syncServerUrlHint =>
|
||
'https://dav.example.com/remote.php/dav/files/me';
|
||
|
||
@override
|
||
String get syncUsername => '用户名';
|
||
|
||
@override
|
||
String get syncPassword => '密码';
|
||
|
||
@override
|
||
String get syncRemoteFolder => '远程文件夹';
|
||
|
||
@override
|
||
String get syncRemoteFolderHint => 'BadNote';
|
||
|
||
@override
|
||
String get syncSave => '保存';
|
||
|
||
@override
|
||
String get syncSaved => '同步设置已保存';
|
||
|
||
@override
|
||
String get syncTestConnection => '测试连接';
|
||
|
||
@override
|
||
String get syncTestOk => '连接成功';
|
||
|
||
@override
|
||
String syncTestFailed(String error) {
|
||
return '连接失败:$error';
|
||
}
|
||
|
||
@override
|
||
String get syncNow => '立即同步';
|
||
|
||
@override
|
||
String get syncRunning => '同步中…';
|
||
|
||
@override
|
||
String get syncNeverRun => '尚未同步';
|
||
|
||
@override
|
||
String syncLastRun(String when) {
|
||
return '上次同步:$when';
|
||
}
|
||
|
||
@override
|
||
String syncResultSummary(int uploaded, int downloaded, int conflicts) {
|
||
return '上传 $uploaded · 下载 $downloaded · 冲突 $conflicts';
|
||
}
|
||
|
||
@override
|
||
String syncFailed(String error) {
|
||
return '同步失败:$error';
|
||
}
|
||
|
||
@override
|
||
String get syncAuto => '启动时自动同步';
|
||
|
||
@override
|
||
String get syncCredentialsNote => '凭据以明文保存在本地,建议使用专用的应用密码。';
|
||
|
||
@override
|
||
String get syncNotConfigured => '请输入服务器地址以启用同步。';
|
||
|
||
@override
|
||
String get settingsDefaults => '默认笔迹';
|
||
|
||
@override
|
||
String get settingsAppearance => '外观';
|
||
|
||
@override
|
||
String get settingsAbout => '关于';
|
||
|
||
@override
|
||
String get settingsDefaultTool => '默认工具';
|
||
|
||
@override
|
||
String get settingsDefaultColor => '默认颜色';
|
||
|
||
@override
|
||
String get settingsDefaultWidth => '默认线宽';
|
||
|
||
@override
|
||
String get settingsPressureCurve => '压感曲线';
|
||
|
||
@override
|
||
String get settingsClearConfirmBody => '将重置笔默认值与外观设置。笔记和文档不会受影响。';
|
||
|
||
@override
|
||
String get serverSection => 'BadNote 服务器';
|
||
|
||
@override
|
||
String get serverUrl => '服务器地址';
|
||
|
||
@override
|
||
String get serverUrlHint => 'http://192.168.1.10:8080';
|
||
|
||
@override
|
||
String get serverUsername => '用户名';
|
||
|
||
@override
|
||
String get serverPassword => '密码';
|
||
|
||
@override
|
||
String get serverSave => '保存并登录';
|
||
|
||
@override
|
||
String get serverTest => '测试连接';
|
||
|
||
@override
|
||
String serverTestOk(String version) {
|
||
return '连接成功 · API $version';
|
||
}
|
||
|
||
@override
|
||
String serverTestFail(String error) {
|
||
return '连接失败:$error';
|
||
}
|
||
|
||
@override
|
||
String get serverLoggedIn => '已登录';
|
||
|
||
@override
|
||
String get serverHint => '可选。用于自托管 vault 协助同步与延迟 OCR;日常笔记仍完全离线。';
|
||
|
||
@override
|
||
String get boardEmptyTitle => '还没有便利贴';
|
||
|
||
@override
|
||
String get boardEmptyBody => '点按右下角添加卡片。在正文写 [[另一张卡片id]] 可建立双链。';
|
||
|
||
@override
|
||
String get relativeJustNow => '刚刚';
|
||
|
||
@override
|
||
String relativeMinutesAgo(int n) {
|
||
return '$n 分钟前';
|
||
}
|
||
|
||
@override
|
||
String relativeHoursAgo(int n) {
|
||
return '$n 小时前';
|
||
}
|
||
|
||
@override
|
||
String get relativeYesterday => '昨天';
|
||
|
||
@override
|
||
String diagExported(int bytes) {
|
||
return '诊断包已导出($bytes 字节)\n路径已复制';
|
||
}
|
||
|
||
@override
|
||
String diagExportFail(String error) {
|
||
return '导出失败:$error';
|
||
}
|
||
|
||
@override
|
||
String get processingOcr => '正在识别文字…';
|
||
}
|