All checks were successful
CI / Windows build (push) Successful in 14m14s
Phase 3. Import becomes a single top-level action beside "Create notebook" and the library is vault-backed. - VaultService.createNotebook copies a picked file into a fresh (de-duplicated) notebook folder under the vault; its sidecar lives beside it, so annotations travel with the file. - Home screen: one "Import file" action with a multi-extension picker (pdf / docx / pptx); routes to the editor by extension. - The document list is now a vault scan (folders with a source file), not the SQLite documents table — no cache, always correct. - PPTX soffice detection fix; DOCX convert-on-import is best-effort and fails gracefully when LibreOffice is unavailable. analyze clean, tests green.
331 lines
7.1 KiB
Dart
331 lines
7.1 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 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 scratchLinkDeleteTitle => '删除便签链接?';
|
||
|
||
@override
|
||
String get scratchLinkDeleteBody => '这会移除锚点及其专属草稿纸。';
|
||
|
||
@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 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 => '笔记库文件夹已更新';
|
||
}
|