Files
QRGen/gui/src-frontend/public/locales/en/translation.json
T
Serendipity 86d788e57c feat: vCard 扩展 + 格式扩展 + 解码透视矫正 — v0.3.0
Phase 1: 格式扩展
- png.rs → image.rs,OutputFormat 枚举 (PNG/BMP/JPEG/WebP)
- CLI -f/--format,Web fmt 参数扩展,image crate +bmp feature

Phase 2: 解码增强
- 新增 decoder/perspective.rs — 旋转矫正(MVP)
- auto_correct: finder 检测→计算旋转角→仿射变换→再解码
- decode_image 自动重试矫正流水线

Phase 3: vCard 扩展
- 新增 5 字段:TITLE/URL/BDAY/NOTE/PHOTO
- Rust text_builder + TS qrText + VCardMode UI 同步
- CLI 新增 --title --vcard-url --birthday --note --photo
- 中/英 i18n 翻译

测试: 81 Rust + 19 前端全部通过
2026-06-19 21:38:58 +08:00

86 lines
1.8 KiB
JSON

{
"app": {
"title": "QRGen",
"encodingModes": "Encoding Modes",
"exportOptions": "Export Options",
"decode": "Decode"
},
"mode": {
"text": "Text",
"url": "URL",
"wifi": "WiFi",
"vcard": "vCard",
"email": "Email",
"phone": "Phone",
"sms": "SMS"
},
"export": {
"eccLevel": "ECC Level",
"moduleSize": "Module Size",
"margin": "Margin",
"copySvg": "Copy SVG",
"exportPng": "Export PNG",
"exportSvg": "Export SVG",
"exporting": "Exporting...",
"selectImage": "Select Image to Decode",
"decoding": "Decoding..."
},
"preview": {
"loading": "Generating...",
"empty": "Enter content to generate QR code",
"version": "Version",
"mask": "Mask"
},
"history": {
"title": "History",
"clear": "Clear",
"empty": "No records"
},
"wifi": {
"ssid": "SSID",
"password": "Password",
"none": "None",
"hidden": "Hidden"
},
"vcard": {
"name": "Name",
"phone": "Phone",
"email": "Email",
"company": "Company",
"title": "Title",
"address": "Address",
"url": "URL",
"birthday": "Birthday",
"note": "Note",
"photo": "Photo URL"
},
"email": {
"to": "To",
"subject": "Subject",
"body": "Body"
},
"phone": {
"placeholder": "Enter phone number"
},
"sms": {
"number": "Phone Number",
"message": "Message"
},
"text": {
"placeholder": "Enter text..."
},
"error": {
"appError": "Application Error",
"reload": "Reload",
"decodeFailed": "Decode Failed",
"exportPngFailed": "PNG Export Failed",
"exportSvgFailed": "SVG Export Failed",
"copyFailed": "Copy Failed"
},
"dialog": {
"imageFiles": "Image Files",
"pngImage": "PNG Image",
"svgImage": "SVG Image"
}
}