feat: 添加 5 种主流语言国际化支持 (es/ar/fr/ja/ko)

根据 App Store Connect 下载数据,为应用添加多语言支持:
-  高优先级: 西班牙语 (es)、阿拉伯语 (ar)
-  中优先级: 法语 (fr)、日语 (ja)、韩语 (ko)

变更:
- Localizable.xcstrings: 为 185 个字符串添加 5 种语言翻译
  * 30 个核心 UI 字符串使用高质量手动翻译
  * 其余字符串使用英文占位(待后续优化)
- PrivacyPolicyView.swift: 将硬编码文本替换为本地化字符串
- project.pbxproj: 在 knownRegions 中添加新语言支持

覆盖地区:
- 阿根廷、墨西哥、西班牙 (西班牙语)
- 阿尔及利亚、突尼斯、中东 (阿拉伯语)
- 法国、加拿大 (法语)
- 日本 (日语)
- 韩国 (韩语)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
empty
2026-01-10 14:29:05 +08:00
parent 683cebd5fa
commit b3b3c588c3
3 changed files with 9410 additions and 1502 deletions

View File

@@ -198,6 +198,14 @@
knownRegions = (
en,
Base,
es,
ar,
fr,
ja,
ko,
zh-Hans,
zh-Hant,
);
mainGroup = F1A6CF462EED942500822C1B;
minimizedProjectReferenceProxies = 1;

File diff suppressed because it is too large Load Diff

View File

@@ -11,59 +11,59 @@ struct PrivacyPolicyView: View {
var body: some View {
ScrollView {
VStack(alignment: .leading, spacing: 20) {
Text("最后更新2025年12月")
Text("privacy.lastUpdated")
.font(.caption)
.foregroundStyle(.secondary)
Group {
sectionHeader("概述")
Text("Live Photo Maker以下简称\"本应用\")尊重并保护您的隐私。本隐私政策说明我们如何收集、使用和保护您的信息。")
Text("本应用提供两种处理模式:本地处理(免费)和云端增强(付费订阅)。不同模式的数据处理方式有所不同。")
sectionHeader(String(localized: "privacy.overview.title"))
Text("privacy.overview.intro1")
Text("privacy.overview.intro2")
sectionHeader("本地处理模式(免费)")
bulletPoint("设备端处理", "视频转换、本地 AI 增强均在您的设备上完成,数据不会离开您的手机。")
bulletPoint("无数据上传", "使用本地处理模式时,您的图片和视频不会上传到任何服务器。")
sectionHeader(String(localized: "privacy.localMode.title"))
bulletPoint(String(localized: "privacy.localMode.item1.title"), String(localized: "privacy.localMode.item1.desc"))
bulletPoint(String(localized: "privacy.localMode.item2.title"), String(localized: "privacy.localMode.item2.desc"))
sectionHeader("云端增强模式Pro")
bulletPoint("数据传输", "使用云端增强时,您选择的图片或视频帧会通过加密连接上传至服务器处理。")
bulletPoint("即时删除", "处理完成后,您的原始数据和处理结果将在 24 小时内从服务器自动删除。")
bulletPoint("数据安全", "所有传输数据均经过端到端加密,服务器位于符合 GDPR 标准的数据中心。")
Text("⚠️ 云端增强功能需要网络连接,每次使用前会明确提示并征得您的同意。")
sectionHeader(String(localized: "privacy.cloudMode.title"))
bulletPoint(String(localized: "privacy.cloudMode.item1.title"), String(localized: "privacy.cloudMode.item1.desc"))
bulletPoint(String(localized: "privacy.cloudMode.item2.title"), String(localized: "privacy.cloudMode.item2.desc"))
bulletPoint(String(localized: "privacy.cloudMode.item3.title"), String(localized: "privacy.cloudMode.item3.desc"))
Text("privacy.cloudMode.warning")
.font(.caption)
.foregroundStyle(.orange)
.padding(.vertical, 4)
sectionHeader("权限说明")
bulletPoint("相册读取权限", "用于从相册选择视频素材。")
bulletPoint("相册写入权限", "用于将生成的 Live Photo 保存到相册。")
bulletPoint("网络访问(可选)", "仅在使用云端增强功能时需要。")
sectionHeader(String(localized: "privacy.permissions.title"))
bulletPoint(String(localized: "privacy.permissions.item1.title"), String(localized: "privacy.permissions.item1.desc"))
bulletPoint(String(localized: "privacy.permissions.item2.title"), String(localized: "privacy.permissions.item2.desc"))
bulletPoint(String(localized: "privacy.permissions.item3.title"), String(localized: "privacy.permissions.item3.desc"))
sectionHeader("数据收集")
bulletPoint("匿名使用统计", "我们可能收集匿名的功能使用统计,用于改进应用体验。这些数据不包含任何可识别个人身份的信息。")
bulletPoint("订阅信息", "订阅购买通过 Apple 处理,我们仅接收订阅状态,不会获取您的支付详情。")
sectionHeader(String(localized: "privacy.collection.title"))
bulletPoint(String(localized: "privacy.collection.item1.title"), String(localized: "privacy.collection.item1.desc"))
bulletPoint(String(localized: "privacy.collection.item2.title"), String(localized: "privacy.collection.item2.desc"))
sectionHeader("数据存储")
bulletPoint("临时缓存", "处理过程中产生的临时文件存储在应用沙盒内,您可以在设置中清理。")
bulletPoint("最近作品", "仅存储作品的缩略图和参数信息,不重复存储媒体内容。")
sectionHeader(String(localized: "privacy.storage.title"))
bulletPoint(String(localized: "privacy.storage.item1.title"), String(localized: "privacy.storage.item1.desc"))
bulletPoint(String(localized: "privacy.storage.item2.title"), String(localized: "privacy.storage.item2.desc"))
sectionHeader("第三方服务")
bulletPoint("Apple 服务", "App Store 内购、iCloud如适用受 Apple 隐私政策约束。")
bulletPoint("崩溃分析", "用于收集匿名崩溃报告以改进应用稳定性。")
sectionHeader(String(localized: "privacy.thirdParty.title"))
bulletPoint(String(localized: "privacy.thirdParty.item1.title"), String(localized: "privacy.thirdParty.item1.desc"))
bulletPoint(String(localized: "privacy.thirdParty.item2.title"), String(localized: "privacy.thirdParty.item2.desc"))
sectionHeader("您的权利")
bulletPoint("删除数据", "您可以随时在应用设置中清理所有本地缓存和作品记录。")
bulletPoint("退出云端服务", "您可以随时停止使用云端增强功能,继续使用完全离线的本地处理。")
sectionHeader(String(localized: "privacy.rights.title"))
bulletPoint(String(localized: "privacy.rights.item1.title"), String(localized: "privacy.rights.item1.desc"))
bulletPoint(String(localized: "privacy.rights.item2.title"), String(localized: "privacy.rights.item2.desc"))
sectionHeader("联系我们")
Text("如果您对本隐私政策有任何疑问,请通过以下方式联系我们:")
Text("邮箱support@let5see.xyz")
sectionHeader(String(localized: "privacy.contact.title"))
Text("privacy.contact.intro")
Text("privacy.contact.email")
.foregroundStyle(.blue)
}
.padding(.horizontal)
}
.padding(.vertical)
}
.navigationTitle("隐私政策")
.navigationTitle("settings.privacyPolicy")
.navigationBarTitleDisplayMode(.inline)
}
@@ -91,53 +91,53 @@ struct TermsOfServiceView: View {
var body: some View {
ScrollView {
VStack(alignment: .leading, spacing: 20) {
Text("最后更新2025年12月")
Text("terms.lastUpdated")
.font(.caption)
.foregroundStyle(.secondary)
Group {
sectionHeader("接受条款")
Text("使用 Live Photo Maker 即表示您同意本使用条款。如果您不同意这些条款,请勿使用本应用。")
sectionHeader(String(localized: "terms.acceptance.title"))
Text("terms.acceptance.desc")
sectionHeader("服务说明")
Text("Live Photo Maker 是一款将视频转换为 Live Photo 的工具应用,帮助您创建可用于动态壁纸的内容。")
Text("本应用提供免费基础功能和付费高级功能Pro。部分高级功能可能需要网络连接和云端处理。")
sectionHeader(String(localized: "terms.service.title"))
Text("terms.service.desc1")
Text("terms.service.desc2")
sectionHeader("订阅与内购")
bulletPoint("付款方式", "所有购买通过 Apple App Store 处理。订阅费用将从您的 Apple ID 账户中扣除。")
bulletPoint("自动续订", "订阅将在到期前 24 小时内自动续订,除非您在到期前至少 24 小时关闭自动续订。")
bulletPoint("取消订阅", "您可以随时在 App Store 账户设置中管理或取消订阅。")
bulletPoint("退款政策", "订阅退款需通过 Apple 申请处理。")
sectionHeader(String(localized: "terms.subscription.title"))
bulletPoint(String(localized: "terms.subscription.item1.title"), String(localized: "terms.subscription.item1.desc"))
bulletPoint(String(localized: "terms.subscription.item2.title"), String(localized: "terms.subscription.item2.desc"))
bulletPoint(String(localized: "terms.subscription.item3.title"), String(localized: "terms.subscription.item3.desc"))
bulletPoint(String(localized: "terms.subscription.item4.title"), String(localized: "terms.subscription.item4.desc"))
sectionHeader("使用限制")
bulletPoint("合法使用", "您只能将本应用用于合法目的,不得用于处理侵犯他人版权或违法的内容。")
bulletPoint("个人使用", "本应用仅供个人非商业用途,商业用途需另行授权。")
bulletPoint("禁止滥用", "禁止恶意使用云端服务、尝试破解付费功能等行为。")
sectionHeader(String(localized: "terms.limits.title"))
bulletPoint(String(localized: "terms.limits.item1.title"), String(localized: "terms.limits.item1.desc"))
bulletPoint(String(localized: "terms.limits.item2.title"), String(localized: "terms.limits.item2.desc"))
bulletPoint(String(localized: "terms.limits.item3.title"), String(localized: "terms.limits.item3.desc"))
sectionHeader("云端服务")
bulletPoint("网络依赖", "云端功能需要稳定的网络连接,网络问题可能导致处理失败。")
bulletPoint("服务可用性", "我们将尽力保证服务稳定,但不保证 100% 可用性。")
sectionHeader(String(localized: "terms.cloud.title"))
bulletPoint(String(localized: "terms.cloud.item1.title"), String(localized: "terms.cloud.item1.desc"))
bulletPoint(String(localized: "terms.cloud.item2.title"), String(localized: "terms.cloud.item2.desc"))
sectionHeader("免责声明")
bulletPoint("壁纸设置", "本应用提供 Live Photo 生成功能,壁纸设置需通过系统照片应用完成。动态效果取决于您的设备和系统版本。")
bulletPoint("内容责任", "您对使用本应用处理的所有内容负全部责任。")
bulletPoint("AI 处理结果", "AI 增强效果可能因原始素材质量而异,我们不保证特定的处理效果。")
sectionHeader(String(localized: "terms.disclaimer.title"))
bulletPoint(String(localized: "terms.disclaimer.item1.title"), String(localized: "terms.disclaimer.item1.desc"))
bulletPoint(String(localized: "terms.disclaimer.item2.title"), String(localized: "terms.disclaimer.item2.desc"))
bulletPoint(String(localized: "terms.disclaimer.item3.title"), String(localized: "terms.disclaimer.item3.desc"))
sectionHeader("知识产权")
Text("本应用及其所有相关内容包括但不限于代码、设计、图标、AI 模型)的知识产权归开发者所有。")
sectionHeader(String(localized: "terms.ip.title"))
Text("terms.ip.desc")
sectionHeader("条款变更")
Text("我们可能会不时更新本使用条款。继续使用本应用即表示您接受更新后的条款。")
sectionHeader(String(localized: "terms.changes.title"))
Text("terms.changes.desc")
sectionHeader("联系方式")
Text("如有问题请联系support@let5see.xyz")
sectionHeader(String(localized: "terms.contact.title"))
Text("terms.contact.email")
.foregroundStyle(.blue)
}
.padding(.horizontal)
}
.padding(.vertical)
}
.navigationTitle("使用条款")
.navigationTitle("settings.termsOfService")
.navigationBarTitleDisplayMode(.inline)
}