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';
|
|
|
|
|
|
|
|
|
|
|
|
@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 20:02:12 +08:00
|
|
|
|
@override
|
|
|
|
|
|
String get toolPlaceScratchLink => '放置便签链接';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get scratchLinkDeleteTitle => '删除便签链接?';
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
String get scratchLinkDeleteBody => '这会移除锚点及其专属草稿纸。';
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
@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-23 09:35:26 +08:00
|
|
|
|
}
|