From 53a1692d313a1203ddbed3103b13375a8362bca3 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Wed, 03 Jun 2026 22:39:30 +0800
Subject: [PATCH] Update about page review info for 2.1.27
---
privatevoice.src/frontend/package.json | 2
privatevoice.src/app.go | 4
privatevoice.src/build/config.yml | 2
privatevoice.src/frontend/package-lock.json | 4
CHANGELOG.md | 15 +++++
privatevoice.src/frontend/src/components/settings/AboutPage.svelte | 93 ++++++++++++++++++++++---------
privatevoice.src/build/darwin/Info.plist | 4
privatevoice.src/build/windows/wails.exe.manifest | 2
privatevoice.src/frontend/src/lib/i18n/zh.json | 14 ++++
privatevoice.src/frontend/src/lib/i18n/en.json | 18 ++++-
10 files changed, 116 insertions(+), 42 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b6a8111..8e79bb6 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,20 @@
# Changelog
+## v2.1.27 (2026-06-03)
+
+### QA 候选包
+
+- **关于页审核信息补全**:关于页显示 `私语输入法 (PrivateVoice Dictation)`、离线识别说明、数据不出设备声明、开源项目归属、版权许可、隐私政策和支持反馈链接。
+- **苹果审核链接更新**:版权许可、隐私政策、支持反馈统一指向 `privatevoice-dictation-support` 支持站点;保留 VoiceSnap 原项目地址入口。
+- **英文界面同步**:English 关于页同步展示等价隐私与许可说明,避免系统语言为英文时仍显示旧审核信息。
+
+### 构建
+
+- build: `20260603.2238`
+- 说明: 本版本为关于页审核信息补全后的用户验收候选包。
+
+---
+
## v2.1.26 (2026-06-03)
### 修复
diff --git a/privatevoice.src/app.go b/privatevoice.src/app.go
index daa6fba..fb75c77 100755
--- a/privatevoice.src/app.go
+++ b/privatevoice.src/app.go
@@ -27,8 +27,8 @@
)
const (
- appVersion = "2.1.26"
- appBuild = "20260603.2151"
+ appVersion = "2.1.27"
+ appBuild = "20260603.2238"
appDisplayVersion = appVersion + " (build " + appBuild + ")"
appName = "PrivateVoice Dictation"
diff --git a/privatevoice.src/build/config.yml b/privatevoice.src/build/config.yml
index a791b0c..1cd73e0 100755
--- a/privatevoice.src/build/config.yml
+++ b/privatevoice.src/build/config.yml
@@ -7,7 +7,7 @@
description: "Private offline voice input tool"
copyright: "(c) 2026, PrivateVoice"
comments: "Private. Offline."
- version: "2.1.26"
+ version: "2.1.27"
dev_mode:
root_path: .
diff --git a/privatevoice.src/build/darwin/Info.plist b/privatevoice.src/build/darwin/Info.plist
index 4910b5d..4d72636 100755
--- a/privatevoice.src/build/darwin/Info.plist
+++ b/privatevoice.src/build/darwin/Info.plist
@@ -17,9 +17,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>2.1.26</string>
+ <string>2.1.27</string>
<key>CFBundleVersion</key>
- <string>20260603.2151</string>
+ <string>20260603.2238</string>
<key>LSMinimumSystemVersion</key>
<string>11.0</string>
<key>NSMicrophoneUsageDescription</key>
diff --git a/privatevoice.src/build/windows/wails.exe.manifest b/privatevoice.src/build/windows/wails.exe.manifest
index 22eacb8..13f0118 100755
--- a/privatevoice.src/build/windows/wails.exe.manifest
+++ b/privatevoice.src/build/windows/wails.exe.manifest
@@ -3,7 +3,7 @@
<assemblyIdentity
type="win32"
name="PrivateVoice.Dictation"
- version="2.1.26.0"
+ version="2.1.27.0"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
diff --git a/privatevoice.src/frontend/package-lock.json b/privatevoice.src/frontend/package-lock.json
index 8fd1934..fd063e5 100755
--- a/privatevoice.src/frontend/package-lock.json
+++ b/privatevoice.src/frontend/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "privatevoice-dictation-frontend",
- "version": "2.1.26",
+ "version": "2.1.27",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "privatevoice-dictation-frontend",
- "version": "2.1.26",
+ "version": "2.1.27",
"dependencies": {
"@wailsio/runtime": "latest"
},
diff --git a/privatevoice.src/frontend/package.json b/privatevoice.src/frontend/package.json
index d2c93d0..839a64b 100755
--- a/privatevoice.src/frontend/package.json
+++ b/privatevoice.src/frontend/package.json
@@ -1,7 +1,7 @@
{
"name": "privatevoice-dictation-frontend",
"private": true,
- "version": "2.1.26",
+ "version": "2.1.27",
"type": "module",
"scripts": {
"dev": "vite dev",
diff --git a/privatevoice.src/frontend/src/components/settings/AboutPage.svelte b/privatevoice.src/frontend/src/components/settings/AboutPage.svelte
index 78ddffd..8c814f4 100644
--- a/privatevoice.src/frontend/src/components/settings/AboutPage.svelte
+++ b/privatevoice.src/frontend/src/components/settings/AboutPage.svelte
@@ -3,8 +3,14 @@
import { t } from '../../lib/i18n'
import AppIcon from '../shared/AppIcon.svelte'
- let version = $state('2.1.12')
+ let version = $state('2.1.27 (build 20260603.2238)')
const currentYear = new Date().getFullYear().toString()
+ const aboutLinks = [
+ { labelKey: 'about.sourceProjectLabel', urlKey: 'about.sourceUrl' },
+ { labelKey: 'about.licenseLabel', urlKey: 'about.licenseUrl' },
+ { labelKey: 'about.privacyLabel', urlKey: 'about.privacyUrl' },
+ { labelKey: 'about.feedbackLabel', urlKey: 'about.feedbackUrl' },
+ ]
async function loadVersion() {
try {
@@ -14,29 +20,38 @@
}
loadVersion()
- function openSupport() {
- Call.ByName('voicesnap/services.AppService.OpenURL', t('about.supportUrl'))
+ function openUrl(url: string) {
+ Call.ByName('voicesnap/services.AppService.OpenURL', url)
}
</script>
<div class="about">
<div class="center-content">
- <AppIcon size={80} elevated />
- <h2 class="app-name">{t('app.name')}</h2>
- <p class="app-secondary-name">{t('app.secondaryName')}</p>
+ <AppIcon size={72} elevated />
+ <h2 class="app-name">{t('about.displayName')}</h2>
<p class="app-version">v{version}</p>
<p class="app-tagline">{t('about.tagline')}</p>
<p class="app-slogan">{t('about.slogan')}</p>
<div class="legal">
+ <p>{t('about.offlineText')}</p>
+ <p>{t('about.noDataText')}</p>
<p>{t('about.legalText')}</p>
<p>{t('about.legalDetails')}</p>
- <button type="button" class="support-link" onclick={openSupport}>
- {t('about.supportUrl')}
- </button>
+
+ <div class="link-list">
+ {#each aboutLinks as item}
+ <div class="link-row">
+ <span class="link-label">{t(item.labelKey)}</span>
+ <button type="button" class="support-link" onclick={() => openUrl(t(item.urlKey))}>
+ {t(item.urlKey)}
+ </button>
+ </div>
+ {/each}
+ </div>
</div>
- <button type="button" class="support-btn" onclick={openSupport}>
+ <button type="button" class="support-btn" onclick={() => openUrl(t('about.feedbackUrl'))}>
{t('about.openSupport')}
</button>
</div>
@@ -52,31 +67,25 @@
display: flex;
flex-direction: column;
align-items: center;
- justify-content: center;
+ justify-content: flex-start;
min-height: calc(100vh - 40px);
+ padding: 28px 24px 18px;
background: var(--color-bg-grouped-secondary);
border-radius: var(--radius-md);
- position: relative;
}
.center-content {
display: flex;
flex-direction: column;
align-items: center;
- width: min(420px, 100%);
- margin-top: -20px;
+ width: min(560px, 100%);
}
.app-name {
font-size: 22px;
font-weight: 700;
margin-top: 16px;
- }
-
- .app-secondary-name {
- font-size: var(--font-size-sm);
- color: var(--color-secondary-label);
- margin-top: 3px;
+ text-align: center;
}
.app-version {
@@ -100,15 +109,38 @@
.legal {
width: 100%;
- margin-top: 28px;
+ margin-top: 22px;
color: var(--color-secondary-label);
font-size: var(--font-size-sm);
line-height: 1.65;
- text-align: center;
+ text-align: left;
+ }
+
+ .legal p + p {
+ margin-top: 10px;
+ }
+
+ .link-list {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ margin-top: 12px;
+ }
+
+ .link-row {
+ display: grid;
+ grid-template-columns: 96px minmax(0, 1fr);
+ gap: 10px;
+ align-items: baseline;
+ }
+
+ .link-label {
+ color: var(--color-tertiary-label);
+ white-space: nowrap;
}
.support-link {
- display: inline;
+ display: inline-block;
padding: 0;
border: none;
background: transparent;
@@ -116,6 +148,7 @@
font: inherit;
cursor: pointer;
word-break: break-all;
+ text-align: left;
}
.support-btn {
@@ -137,10 +170,9 @@
}
.bottom {
- position: absolute;
- bottom: 20px;
- left: 30px;
- right: 30px;
+ width: min(560px, 100%);
+ margin-top: auto;
+ padding-top: 22px;
text-align: center;
}
@@ -154,4 +186,11 @@
font-size: var(--font-size-xs);
color: var(--color-tertiary-label);
}
+
+ @media (max-width: 520px) {
+ .link-row {
+ grid-template-columns: 1fr;
+ gap: 2px;
+ }
+ }
</style>
diff --git a/privatevoice.src/frontend/src/lib/i18n/en.json b/privatevoice.src/frontend/src/lib/i18n/en.json
index 8211f00..8c83064 100755
--- a/privatevoice.src/frontend/src/lib/i18n/en.json
+++ b/privatevoice.src/frontend/src/lib/i18n/en.json
@@ -134,12 +134,22 @@
"checkingUpdate": "Checking...",
"isLatestVersion": "Up to date",
"checkFailed": "Check failed",
- "tagline": "Private. Offline.",
- "slogan": "Private. Offline.",
+ "displayName": "PrivateVoice Dictation",
+ "tagline": "Private offline · Custom dictionary · Privacy protected",
+ "slogan": "Voice dictation that truly belongs to you",
+ "offlineText": "This app runs fully offline. All speech recognition is completed on the local device using local models including SenseVoice, Qwen3-ASR, Moonshine English, and Parakeet.",
+ "noDataText": "Data never leaves the device. The app does not collect, upload, or store any voice, text, dictionary, or usage data.",
"legalText": "This app is a secondary development based on the open-source VoiceSnap project and follows the MIT License.",
"legalDetails": "For complete copyright notices, license text, and improvement details, visit:",
- "supportUrl": "https://shanghai3168.github.io/privatevoice-support/",
- "openSupport": "Open copyright and license details",
+ "sourceProjectLabel": "Source project",
+ "licenseLabel": "License details",
+ "privacyLabel": "Privacy policy",
+ "feedbackLabel": "Support",
+ "sourceUrl": "https://github.com/vorojar/VoiceSnap",
+ "licenseUrl": "https://shanghai3168.github.io/privatevoice-dictation-support/",
+ "privacyUrl": "https://shanghai3168.github.io/privatevoice-dictation-support/privacy.html",
+ "feedbackUrl": "https://shanghai3168.github.io/privatevoice-dictation-support/support.html",
+ "openSupport": "Open support and feedback",
"copyright": "© {year} PrivateVoice Dictation · MIT License"
},
"history": {
diff --git a/privatevoice.src/frontend/src/lib/i18n/zh.json b/privatevoice.src/frontend/src/lib/i18n/zh.json
index 99a8181..3b24839 100755
--- a/privatevoice.src/frontend/src/lib/i18n/zh.json
+++ b/privatevoice.src/frontend/src/lib/i18n/zh.json
@@ -134,12 +134,22 @@
"checkingUpdate": "正在检查...",
"isLatestVersion": "已是最新版本",
"checkFailed": "检查失败",
+ "displayName": "私语输入法 (PrivateVoice Dictation)",
"tagline": "私密离线 · 自定义词库 · 保护隐私",
"slogan": "真正属于你的语音输入法",
+ "offlineText": "本应用完全离线运行,所有语音识别均在本地设备上完成,使用 SenseVoice、Qwen3-ASR、Moonshine English、Parakeet 等本地模型。",
+ "noDataText": "数据永不出设备,不会收集、上传或存储任何语音、文本、词库或使用数据。",
"legalText": "本应用基于开源项目 VoiceSnap 进行二次开发,遵循 MIT License。",
"legalDetails": "完整版权声明、许可文本及改进详情,请访问:",
- "supportUrl": "https://shanghai3168.github.io/privatevoice-support/",
- "openSupport": "打开版权与许可说明",
+ "sourceProjectLabel": "原项目地址",
+ "licenseLabel": "版权许可",
+ "privacyLabel": "隐私政策",
+ "feedbackLabel": "支持与反馈",
+ "sourceUrl": "https://github.com/vorojar/VoiceSnap",
+ "licenseUrl": "https://shanghai3168.github.io/privatevoice-dictation-support/",
+ "privacyUrl": "https://shanghai3168.github.io/privatevoice-dictation-support/privacy.html",
+ "feedbackUrl": "https://shanghai3168.github.io/privatevoice-dictation-support/support.html",
+ "openSupport": "打开支持与反馈",
"copyright": "© {year} 私语输入法 · MIT License"
},
"history": {
--
Gitblit v1.9.3