2026-06-23 09:35:26 +08:00
|
|
|
|
// 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';
|
|
|
|
|
|
|
2026-06-24 21:12:38 +08:00
|
|
|
|
@override
|
|
|
|
|
|
String get importFile => '导入文件';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get createNotebook => '新建笔记本';
|
|
|
|
|
|
|
2026-06-24 22:48:18 +08:00
|
|
|
|
@override
|
|
|
|
|
|
String get newNotebookTitle => '新建笔记本';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get notebookTitleHint => '笔记本标题';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get create => '创建';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get untitledNote => '未命名';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get noNotesYetHint => '还没有手写笔记——点按 + 新建';
|
|
|
|
|
|
|
2026-06-24 21:12:38 +08:00
|
|
|
|
@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';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-06-23 09:35:26 +08:00
|
|
|
|
@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 => '移除文档';
|
|
|
|
|
|
|
2026-06-23 10:03:02 +08:00
|
|
|
|
@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 页';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-06-23 09:35:26 +08:00
|
|
|
|
@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 => '橡皮擦';
|
|
|
|
|
|
|
2026-06-24 11:13:43 +08:00
|
|
|
|
@override
|
|
|
|
|
|
String get brushPicker => '笔刷';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get brushFountainPen => '钢笔';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get brushBallpoint => '圆珠笔';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get brushPencil => '铅笔';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get brushHighlighter => '荧光笔';
|
|
|
|
|
|
|
feat(tools): rnote-style toolbar core writing batch
Replace the ad-hoc tool palette with a shared tool system
(EditorToolKind) across the PDF, note and slide editors, and add
the core writing tools.
- Multiple brushes, each remembering its OWN color (rnote-style):
selecting a brush restores its color, changing color updates only
that brush, and each brush button shows its current color.
- Select tool: tap-select a committed stroke, drag to move it,
delete it — persisted and undoable.
- Shape tool: line / rectangle / ellipse / arrow, drawn with a live
preview and committed as generated PenStrokes (shape_geometry.dart)
so they reuse stroke rendering, erase, persistence and undo.
- Highlighter + eraser fold into the same tool system.
Text/bookmark/search+OCR/backgrounds/Windows-Ink are later batches
(TODO). Brush opacity still deferred. analyze clean, 302 tests.
2026-06-24 20:38:18 +08:00
|
|
|
|
@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 => '删除所选';
|
|
|
|
|
|
|
2026-06-23 09:35:26 +08:00
|
|
|
|
@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 => '下一页';
|
|
|
|
|
|
|
2026-06-24 02:32:41 +08:00
|
|
|
|
@override
|
|
|
|
|
|
String get toolSelectText => '选择文字';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get actionHighlightSelection => '高亮所选';
|
|
|
|
|
|
|
2026-06-24 21:03:28 +08:00
|
|
|
|
@override
|
|
|
|
|
|
String get toolRemoveHighlight => '移除高亮(点按高亮处)';
|
|
|
|
|
|
|
2026-06-24 20:02:12 +08:00
|
|
|
|
@override
|
|
|
|
|
|
String get toolPlaceScratchLink => '放置便签链接';
|
|
|
|
|
|
|
2026-06-25 00:11:45 +08:00
|
|
|
|
@override
|
|
|
|
|
|
String get toolText => '文字(点按或双击添加)';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get textPlaceholder => '输入文字…';
|
|
|
|
|
|
|
2026-06-24 20:02:12 +08:00
|
|
|
|
@override
|
|
|
|
|
|
String get scratchLinkDeleteTitle => '删除便签链接?';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get scratchLinkDeleteBody => '这会移除锚点及其专属草稿纸。';
|
|
|
|
|
|
|
2026-06-25 00:00:16 +08:00
|
|
|
|
@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 => '这会移除保存的位置。';
|
|
|
|
|
|
|
2026-06-23 09:35:26 +08:00
|
|
|
|
@override
|
|
|
|
|
|
String failedToOpenPdf(String error) {
|
|
|
|
|
|
return '打开 PDF 失败:\n$error';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get pdfNoPages => 'PDF 没有任何页面。';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String pageOfPages(int current, int total) {
|
|
|
|
|
|
return '$current / $total';
|
|
|
|
|
|
}
|
2026-06-24 17:15:39 +08:00
|
|
|
|
|
2026-08-05 17:55:27 +08:00
|
|
|
|
@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 => '笔与墨迹';
|
|
|
|
|
|
|
2026-06-24 17:15:39 +08:00
|
|
|
|
@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 => '关闭';
|
2026-06-24 20:45:16 +08:00
|
|
|
|
|
|
|
|
|
|
@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 => '笔记库文件夹已更新';
|
2026-06-25 01:35:13 +08:00
|
|
|
|
|
|
|
|
|
|
@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 => '请输入服务器地址以启用同步。';
|
2026-08-05 19:04:48 +08:00
|
|
|
|
|
|
|
|
|
|
@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 => '正在识别文字…';
|
2026-08-05 20:27:35 +08:00
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get notebooksSection => '笔记本';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get addBlankPage => '空白页';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get importIntoNotebook => '导入到笔记本';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get notebookMembersEmpty => '还没有页面';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String memberCount(int count) {
|
|
|
|
|
|
return '$count 项';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get textFontSmall => '小';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get textFontMedium => '中';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get textFontLarge => '大';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get textBold => '粗体';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get textDragHint => '拖动移动';
|
2026-06-23 09:35:26 +08:00
|
|
|
|
}
|