From: liangzhenying <867174124@qq.com> Date: Fri, 21 Nov 2025 08:26:56 +0000 (+0800) Subject: 新增支持德语、阿拉伯语 X-Git-Tag: 1.0.2~57 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=6a3ac8d4e602a4f1ed9b42aa9c812d5322b930a6;p=mirrors%2FShenYin.git 新增支持德语、阿拉伯语 --- diff --git a/ShenYin/Pods/MBProgressHUD/PrivacyInfo.xcprivacy b/ShenYin/Pods/MBProgressHUD/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..148b97e --- /dev/null +++ b/ShenYin/Pods/MBProgressHUD/PrivacyInfo.xcprivacy @@ -0,0 +1,23 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + + + + NSPrivacyCollectedDataTypes + + + diff --git a/ShenYin/ShenYin/Api/LogManager.swift b/ShenYin/ShenYin/Api/LogManager.swift index 173baf7..2d8f9a8 100644 --- a/ShenYin/ShenYin/Api/LogManager.swift +++ b/ShenYin/ShenYin/Api/LogManager.swift @@ -9,14 +9,14 @@ import Foundation /// 日记管理 class Logger { - static var isDebug: Bool = true + static var isDebug: Bool = false fileprivate static let shared = Logger() private var fileHandle:FileHandle? private init() { let path = getPath() fileHandle = FileHandle(forWritingAtPath: path)! - // fileHandle?.seekToEndOfFile() + //fileHandle?.seekToEndOfFile() } fileprivate var dateString: String { Date().format(.full) } diff --git a/ShenYin/ShenYin/Cache/DeviceCache.swift b/ShenYin/ShenYin/Cache/DeviceCache.swift index 453db22..79d3ca0 100644 --- a/ShenYin/ShenYin/Cache/DeviceCache.swift +++ b/ShenYin/ShenYin/Cache/DeviceCache.swift @@ -35,6 +35,10 @@ extension DeviceCache{ UserDefaults.standard.set(mac, forKey: "LastConnect") UserDefaults.standard.synchronize() } + static func remove(){ + UserDefaults.standard.removeObject(forKey: "LastConnect") + UserDefaults.standard.synchronize() + } static func getLastConnected()->String?{ if let value = UserDefaults.standard.value(forKey: "LastConnect"),let obj = value as? String { return obj diff --git a/ShenYin/ShenYin/Cache/TipsCache.swift b/ShenYin/ShenYin/Cache/TipsCache.swift index 01f4a93..950b38c 100644 --- a/ShenYin/ShenYin/Cache/TipsCache.swift +++ b/ShenYin/ShenYin/Cache/TipsCache.swift @@ -45,13 +45,17 @@ class RoleCache{ } } class BackgroundCache{ - static func save(url:String){ - UserDefaults.standard.set(url, forKey: "BackgroundCache") + static func save(model:BackgroundModel){ + UserDefaults.standard.set(model.bgPath, forKey: "BackgroundCache_url") + UserDefaults.standard.set(model.themeColor, forKey: "BackgroundCache_color") UserDefaults.standard.synchronize() } - static func get()->String?{ - if let value = UserDefaults.standard.value(forKey: "BackgroundCache"),let obj = value as? String { - return obj + static func get()->(BackgroundModel)?{ + if let url = UserDefaults.standard.value(forKey: "BackgroundCache_url") as? String , let color = UserDefaults.standard.value(forKey: "BackgroundCache_color") as? String{ + let model = BackgroundModel() + model.themeColor = color + model.bgPath = url + return model } return nil } diff --git a/ShenYin/ShenYin/Launch/BleManager.swift b/ShenYin/ShenYin/Launch/BleManager.swift index 681961d..b3daa5f 100644 --- a/ShenYin/ShenYin/Launch/BleManager.swift +++ b/ShenYin/ShenYin/Launch/BleManager.swift @@ -57,6 +57,8 @@ extension BleManager:CBCentralManagerDelegate{ case.unauthorized: break case.poweredOff: + self.isConnetd = false + NotificationManager.post(type: .deviceValidChange, objtect: nil) break case.poweredOn: // startScanDevice() @@ -223,6 +225,8 @@ extension BleManager{ func cancel() { guard let peripheral = connectPeripheral else { return } + self.isConnetd = false + NotificationManager.post(type: .deviceValidChange, objtect: nil) centralManager.cancelPeripheralConnection(peripheral.device) } func unbind(_ peripheral: DCPeripheral){ @@ -389,7 +393,7 @@ extension BleManager{ connect(mac: mac) {result in } - DispatchQueue.main.asyncAfter(deadline:.now() + 30) { + DispatchQueue.main.asyncAfter(deadline:.now() + 10) { self.checkConectState() } } diff --git a/ShenYin/ShenYin/Tools/YLTools.swift b/ShenYin/ShenYin/Tools/YLTools.swift index d80de07..30e833f 100644 --- a/ShenYin/ShenYin/Tools/YLTools.swift +++ b/ShenYin/ShenYin/Tools/YLTools.swift @@ -123,3 +123,32 @@ extension String { return String(repeating: pad, count: paddingCount) + self } } +import UIKit +import Photos + +extension UIImage { + func tinted(with color: UIColor) -> UIImage? { + print("开始处理图像颜色修改(Core Graphics方式)") + UIGraphicsBeginImageContextWithOptions(size, false, scale) + defer { + UIGraphicsEndImageContext() + } + guard let context = UIGraphicsGetCurrentContext() else { + print("无法获取当前图形上下文") + return nil + } + context.translateBy(x: 0, y: size.height) + context.scaleBy(x: 1.0, y: -1.0) + + let rect = CGRect(origin:.zero, size: size) + // 1. 先绘制原始图像 + draw(in: rect) + // 2. 设置混合模式:仅在原始图像的不透明区域叠加颜色 + context.setBlendMode(.sourceIn) + // 3. 填充目标颜色 + color.setFill() + context.fill(rect) + let newImage = UIGraphicsGetImageFromCurrentImageContext() + return newImage + } +} diff --git a/ShenYin/ShenYin/UI/Home/Chat/ChatCell.swift b/ShenYin/ShenYin/UI/Home/Chat/ChatCell.swift index 245c57b..879a43a 100644 --- a/ShenYin/ShenYin/UI/Home/Chat/ChatCell.swift +++ b/ShenYin/ShenYin/UI/Home/Chat/ChatCell.swift @@ -49,7 +49,7 @@ class ChatCell:BaseTableViewCell{ make.top.bottom.equalToSuperview().inset(14) make.left.right.equalToSuperview().inset(12) make.width.lessThanOrEqualTo(kScreenWid - 60) - make.width.greaterThanOrEqualTo(60) + make.width.greaterThanOrEqualTo(50) make.height.greaterThanOrEqualTo(19) } } diff --git a/ShenYin/ShenYin/UI/Home/Chat/RecordButton.swift b/ShenYin/ShenYin/UI/Home/Chat/RecordButton.swift index 9137ca0..4019640 100644 --- a/ShenYin/ShenYin/UI/Home/Chat/RecordButton.swift +++ b/ShenYin/ShenYin/UI/Home/Chat/RecordButton.swift @@ -35,6 +35,8 @@ class RecordButton: UIView { private var isRecording = false private var isCanceling = false + private var startTime: Date? + private let minimumDuration: TimeInterval = 0.5 // 取消阈值(可根据需求调整) private let cancelThreshold: CGFloat = 30 @@ -114,9 +116,13 @@ class RecordButton: UIView { // 触摸开始(按住) override func touchesBegan(_ touches: Set, with event: UIEvent?) { super.touchesBegan(touches, with: event) + if isRecording { + return + } isRecording = true isCanceling = false state = .start + startTime = Date() updateUI() onStatusChanged?(.start) } @@ -140,8 +146,20 @@ class RecordButton: UIView { } guard isRecording else { return } - state = isCanceling ? .cancel : .finish - onStatusChanged?(isCanceling ? .cancel : .finish) + let elapsedTime = Date().timeIntervalSince(startTime ?? Date()) + if elapsedTime < minimumDuration { + // 延迟调用以保持开始状态至少3秒 + DispatchQueue.main.asyncAfter(deadline:.now() + (minimumDuration - elapsedTime)) { [weak self] in + guard let self = self else { + return + } + self.state = isCanceling ? .cancel : .finish + self.onStatusChanged?(isCanceling ? .cancel : .finish) + } + } else { + state = isCanceling ? .cancel : .finish + onStatusChanged?(isCanceling ? .cancel : .finish) + } } override func touchesCancelled(_ touches: Set, with event: UIEvent?) { diff --git a/ShenYin/ShenYin/UI/Home/Device/BackgroundModel.swift b/ShenYin/ShenYin/UI/Home/Device/BackgroundModel.swift index 4c9af58..5bf4d4e 100644 --- a/ShenYin/ShenYin/UI/Home/Device/BackgroundModel.swift +++ b/ShenYin/ShenYin/UI/Home/Device/BackgroundModel.swift @@ -15,5 +15,6 @@ class BackgroundModel:HandyJSON { var id = "" var name = "" var bgPath = "" + var themeColor = "" required public init() { } } diff --git a/ShenYin/ShenYin/UI/Home/Device/BackgroundVC.swift b/ShenYin/ShenYin/UI/Home/Device/BackgroundVC.swift index 909329d..7a518c4 100644 --- a/ShenYin/ShenYin/UI/Home/Device/BackgroundVC.swift +++ b/ShenYin/ShenYin/UI/Home/Device/BackgroundVC.swift @@ -12,10 +12,12 @@ import MJRefresh class BackgroundVC: BaseVC{ private var collectionView:UICollectionView! var dataList = [BackgroundModel]() - var didSelected:((String)->Void)? + var didSelected:((BackgroundModel)->Void)? var currentUrl:String = "" override func setupViews() { + navBar.title = "设置壁纸".l10n + let layout = UICollectionViewFlowLayout() // layout.minimumInteritemSpacing = 10.fitR layout.minimumLineSpacing = 18 @@ -40,7 +42,11 @@ class BackgroundVC: BaseVC{ } } override func setupData() { - currentUrl = BackgroundCache.get() ?? "" + + if let model = BackgroundCache.get() { + currentUrl = model.bgPath + } + HttpClient.request(.backgroundList) {[weak self] (model:BackgroundModelRoot,res) in guard let self = self else {return} if model.isSuccess{ @@ -65,8 +71,8 @@ extension BackgroundVC:UICollectionViewDataSource,UICollectionViewDelegate,UICol } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let model = dataList[indexPath.row] - didSelected?(model.bgPath) - BackgroundCache.save(url: model.bgPath) + didSelected?(model) + BackgroundCache.save(model: model) App.shared.popPage() } } diff --git a/ShenYin/ShenYin/UI/Home/Device/HomeDeviceVC.swift b/ShenYin/ShenYin/UI/Home/Device/HomeDeviceVC.swift index 5b3c899..8e63b18 100644 --- a/ShenYin/ShenYin/UI/Home/Device/HomeDeviceVC.swift +++ b/ShenYin/ShenYin/UI/Home/Device/HomeDeviceVC.swift @@ -11,6 +11,7 @@ class HomeDeviceVC:BaseVC{ private var collectionView:UICollectionView! let imgView = UIImageView() let edtLabel = UILabel() + var currentBg:BackgroundModel? override func viewDidLoad() { super.viewDidLoad() @@ -22,17 +23,20 @@ class HomeDeviceVC:BaseVC{ } override func setupViews() { - navBar.leftView.isHidden = true - navBar.rightView.isHidden = false - navBar.rightView.setImage(UIImage(named: "add_icon"), for: .normal) + navBar.do { v in + v.leftView.isHidden = true + v.rightView.isHidden = false + v.rightView.setImage(UIImage(named: "add_icon"), for: .normal) + v.backgroundColor = .clear + } - let layout = UICollectionViewFlowLayout() //layout.minimumInteritemSpacing = 10.fitR layout.minimumLineSpacing = 18 layout.itemSize = CGSize(width: (kScreenWid-54)/2, height: 128) collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: layout) view.addSubviews([imgView,collectionView,edtLabel]) + self.view.bringSubviewToFront(navBar) collectionView.do { (v) in v.dataSource = self @@ -45,15 +49,9 @@ class HomeDeviceVC:BaseVC{ } imgView.do { v in // v.backgroundColor = .red - if let url = BackgroundCache.get(){ - v.kf.setImage(with: url.yc.asUrl) - } - else{ - v.image = UIImage(named: "home_bg") - } } edtLabel.do { v in - v.text = "设置壁纸" + v.text = "设置壁纸".l10n v.font = .regular(12) v.backgroundColor = .hexString("#FAFAFA") v.textColor = .hexString("#4E4E4E") @@ -61,6 +59,15 @@ class HomeDeviceVC:BaseVC{ v.yc.setCornerRadius(13) v.yc.addTap(target: self, action: #selector(editAction)) } + + currentBg = BackgroundCache.get() + if (currentBg != nil) { + imgView.kf.setImage(with: currentBg?.bgPath.yc.asUrl) + navBar.rightView.setImage(UIImage(named: "add_icon")?.tinted(with: UIColor.hexString(currentBg!.themeColor)), for: .normal) + } + else{ + imgView.image = UIImage(named: "home_bg") + } } override func setupLayout() { collectionView.snp.makeConstraints { (m) in @@ -80,14 +87,21 @@ class HomeDeviceVC:BaseVC{ func reloadData() { DeviceVM.shared.refresh {[weak self] result in self?.collectionView.reloadData() - if !BleManager.shared.isConnetd,let lastMac = DeviceCache.getLastConnected(){ + if BleManager.shared.isConnetd{ + return + } + var autoConnetced = false + if let lastMac = DeviceCache.getLastConnected(){ for item in DeviceVM.shared.dataList { if item.mac == lastMac{ self?.startConectBle(item) - return + autoConnetced = true } } } + if autoConnetced == false,let model = DeviceVM.shared.dataList.first { + self?.startConectBle(model) + } } CacheManager.shared.user.tokenIsValid(){[weak self] in self?.collectionView.reloadData() @@ -100,8 +114,14 @@ class HomeDeviceVC:BaseVC{ } @objc func editAction(){ let vc = BackgroundVC() - vc.didSelected = {[weak self] url in - self?.imgView.kf.setImage(with: url.yc.asUrl) + vc.didSelected = {[weak self] model in + guard let self = self else { + return + } + currentBg = model + self.imgView.kf.setImage(with: model.bgPath.yc.asUrl) + self.collectionView.reloadData() + navBar.rightView.setImage(UIImage(named: "add_icon")?.tinted(with: UIColor.hexString(currentBg!.themeColor)), for: .normal) } App.shared.goToPage(vc) } @@ -113,27 +133,21 @@ class HomeDeviceVC:BaseVC{ guard let self = self else {return} if model.isSuccess{ YLprogressHUD.hidden() + if let mac0 = BleManager.shared.connectPeripheral?.mac,let mac1 = DeviceCache.getLastConnected(),mac0 == mac1{ + DeviceCache.remove() + } DeviceVM.shared.dataList.removeAll(where: {$0.deviceId == deviceModel.deviceId}) collectionView.reloadData() BleManager.shared.cancel() + reloadData() } else{ YLprogressHUD.showAutoHiden("请求失败".l10n) } } } - func startConectBle(_ model:HomeDeviceModel,autoJump:Bool = false){ + func startConectBle(_ model:HomeDeviceModel){ BleManager.shared.connect(mac: model.mac) { result in - if result{ - ConnectPopView.shared.stateDidChange(.connected) { - if autoJump{ - App.shared.goToPage(HomeVC(device: model)) - } - } - } - else{ - ConnectPopView.shared.stateDidChange(.failure) - } } } @objc func deviceChange(_ noti:Notification){ @@ -158,15 +172,13 @@ extension HomeDeviceVC:UICollectionViewDataSource,UICollectionViewDelegate,UICol } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let model = DeviceVM.shared.dataList[indexPath.row] - if !BleManager.shared.isConected(mac: model.mac) { - startConectBle(model,autoJump: false) - } App.shared.goToPage(HomeVC(device: model)) } func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView{ let header = HomeHeadInfoView.header(with: collectionView, indexPath: indexPath) - header.updateUI() + header.updateUI() + header.updateColor(currentBg) return header } diff --git a/ShenYin/ShenYin/UI/Home/Device/HomeHeadInfoView.swift b/ShenYin/ShenYin/UI/Home/Device/HomeHeadInfoView.swift index 9cf65c0..0665d17 100644 --- a/ShenYin/ShenYin/UI/Home/Device/HomeHeadInfoView.swift +++ b/ShenYin/ShenYin/UI/Home/Device/HomeHeadInfoView.swift @@ -58,4 +58,10 @@ class HomeHeadInfoView: BaseColletionSetionHeader { titleLabel.text = CacheManager.shared.user.info.userName deviceLabel.text = "\(DeviceVM.shared.dataList.count)" + "个智能设备".l10n } + func updateColor(_ model:BackgroundModel?){ + guard let model = model else { return } + titleLabel.textColor = .hexString(model.themeColor) + nameLabel.textColor = .hexString(model.themeColor) + deviceLabel.textColor = .hexString(model.themeColor) + } } diff --git a/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordBar.swift b/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordBar.swift index 3aac513..ea41f6b 100644 --- a/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordBar.swift +++ b/ShenYin/ShenYin/UI/Home/FieldRecording/FieldRecordBar.swift @@ -75,14 +75,14 @@ class FieldRecordBar: BaseView { if recordBtn.isSelected || recordBtn.activeView.animating { return } - let list = AiSupportLanguage.record.map{$0.title} + let list = AiSupportLanguage.translate.map{$0.title} let v = CustomPicker(title: "请选择语言".l10n, list:list ) v.selectedIndex = list.firstIndex(where: {leftItem.language.title == $0})! v.show() v.didSelected = {[weak self] (index,value) in guard let self = self else { return } - leftItem.language = AiSupportLanguage.record.first(where: {$0.title == value})! + leftItem.language = AiSupportLanguage.translate.first(where: {$0.title == value})! delegate?.fieldRecordBar(self, languageChange:leftItem.language) } return diff --git a/ShenYin/ShenYin/UI/Login/View/CodeView.swift b/ShenYin/ShenYin/UI/Login/View/CodeView.swift index b601e9f..ca1d3a4 100644 --- a/ShenYin/ShenYin/UI/Login/View/CodeView.swift +++ b/ShenYin/ShenYin/UI/Login/View/CodeView.swift @@ -18,7 +18,7 @@ class CodeView: BaseView { v.placeholder = "请输入验证码".l10n } codeButton.do { (v) in - v.maxCount = 20 + v.maxCount = 60 v.label.textColor = .color(.theme) v.backgroundColor = .clear v.addLine(height: 22) diff --git a/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackContentView.swift b/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackContentView.swift index 49bc4ee..f895767 100644 --- a/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackContentView.swift +++ b/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackContentView.swift @@ -5,6 +5,8 @@ // Created by liangshi on 2025/10/16. // +import Photos + class FeedbackContentModel{ var content = "" var isSend = false @@ -195,10 +197,37 @@ class FeedbackContentImageCell:BaseTableViewCell{ } @objc func longPressAction(_ gesture: UILongPressGestureRecognizer) { + guard let image = imgView.image else { return } if gesture.state == .began { + let vc = UIAlertController(title: "", message: "是否保存到相册?".l10n, preferredStyle: .actionSheet) + let action0 = UIAlertAction(title: "取消".l10n, style: .cancel) { action in + + } + vc.addAction(action0) + + let action1 = UIAlertAction(title: "确定".l10n, style: .default) { action in + self.save(image: image) + } + vc.addAction(action1) + App.shared.topVC()?.present(vc, animated: true) } else if gesture.state == .ended { - print("长按结束") + Logger.debug("长按结束") + } + } + + func save(image:UIImage){ + PHPhotoLibrary.requestAuthorization { status in + guard status == .authorized else { return } + PHPhotoLibrary.shared().performChanges({ + PHAssetChangeRequest.creationRequestForAsset(from: image) + }) { success, error in + if success { + YLprogressHUD.showAutoHiden("保存成功".l10n) + } else { + YLprogressHUD.showAutoHiden("保存失败".l10n) + } + } } } } diff --git a/ShenYin/ShenYin/UI/Mine/Update/BleUpdateVM.swift b/ShenYin/ShenYin/UI/Mine/Update/BleUpdateVM.swift index 52df310..a710519 100644 --- a/ShenYin/ShenYin/UI/Mine/Update/BleUpdateVM.swift +++ b/ShenYin/ShenYin/UI/Mine/Update/BleUpdateVM.swift @@ -18,7 +18,7 @@ class BleUpdateVM:BaseVM{ guard let version = version else{ return } - startCheck(deviceName: deviceName, version: version) + startCheck(deviceName: deviceName, version: "1.1.0") } } } diff --git a/ShenYin/ShenYin/lan/AiSupportLanguage.swift b/ShenYin/ShenYin/lan/AiSupportLanguage.swift index b5a2f12..2b4024d 100644 --- a/ShenYin/ShenYin/lan/AiSupportLanguage.swift +++ b/ShenYin/ShenYin/lan/AiSupportLanguage.swift @@ -19,19 +19,24 @@ enum AiSupportLanguage:String{ case indonesian = "indonesian" case russian = "russian" case malay = "malay" + case German = "German" + case Filipino = "Filipino" + case thai = "thai" + case Arabic = "Arabic" + case Vietnam = "Vietnam" /// 现场录音,通话录音,同传听译 - static var record:[AiSupportLanguage]{ - return [.chinse,.english,.japanese,.korean] - } +// static var record:[AiSupportLanguage]{ +// return [.chinse,.english,.japanese,.korean] +// } static var chinse2english:[AiSupportLanguage]{ return [.chinse,.english] } - static var dialog:[AiSupportLanguage]{ - return [.chinse,.english,.japanese] - } +// static var dialog:[AiSupportLanguage]{ +// return [.chinse,.english,.japanese] +// } static var translate:[AiSupportLanguage]{ - return [.chinse,.english,.japanese,.korean,.french,.spanish,.portuguese,.indonesian,.russian,.malay] + return [.chinse,.english,.japanese,.korean,.french,.spanish,.portuguese,.indonesian,.russian,.malay,German,Filipino,thai,Arabic,Vietnam] } var title:String{ switch self { @@ -55,6 +60,16 @@ enum AiSupportLanguage:String{ return "俄文".l10n case .malay: return "马来文".l10n + case .German: + return "德文".l10n + case .Filipino: + return "菲律宾文".l10n + case .thai: + return "泰文".l10n + case .Arabic: + return "阿拉伯文".l10n + case .Vietnam: + return "越南文".l10n } } var value:String{ @@ -79,6 +94,16 @@ enum AiSupportLanguage:String{ return kJoyGemAILocalizationRU_Target case .malay: return kJoyGemAILocalizationMS + case .German: + return kJoyGemAILocalizationDE + case .Filipino: + return kJoyGemAILocalizationFIL + case .thai: + return kJoyGemAILocalizationTH + case .Arabic: + return kJoyGemAILocalizationAR + case .Vietnam: + return kJoyGemAILocalizationVI } } diff --git a/ShenYin/ShenYin/lan/Arabic.swift b/ShenYin/ShenYin/lan/Arabic.swift new file mode 100644 index 0000000..b0661f3 --- /dev/null +++ b/ShenYin/ShenYin/lan/Arabic.swift @@ -0,0 +1,237 @@ +// +// arabic.swift +// ShenYin +// +// Created by liangshi on 2025/11/10. +// + +let arabicMap:[String:String] = +[ + "智能" : "ذكي", + "模式" : "النمط", + "睡眠" : "النوم", + "客服" : "خدمة العملاء", + "我的" : "ملكي", + "设备":"الجهاز", + "已连接" : "متصل", + "未连接" : "غير متصل", + + "现场录音" : "التسجيل الميداني", + "随时随地,一键开录" : "سجل في أي وقت وفي أي مكان بنقرة واحدة", + "通话录音" : "تسجيل المكالمات", + "一键录音,翻译转写" : "التسجيل بنقرة واحدة، الترجمة والنسخ", + "中英互译" : "الترجمة بين الصينية والإنجليزية", + "实时对话,即时互译" : "دردشة في الوقت الحقيقي، الترجمة المباشرة", + "同传听译" : "الترجمة التزامنية", + "一机一耳,面对面畅聊" : "جهاز واحد، سماعة واحدة، تحدث وجها لوجه", + "对话翻译" : "ترجمة الحوار", + "会议讲座,同步翻译" : "المؤتمرات والمحاضرات، الترجمة المتزامنة", + "文本翻译" : "ترجمة النص", + "即打即译,多语支持":"الترجمة الفورية أثناء الكتابة، دعم متعدد اللغات", + "历史记录" : "التاريخ", + "所有记录,一目了然" : "كل السجلات واضحة على نطاق واسع", + "智能对话" : "حوار ذكي", + "伙伴,随叫随到" : "شريك، دائمًا على استعداد", + "切换角色" : "تبديل الدور", + "按住说话" : "اضغط وقل", + "同传听译模式使用介绍":"مقدمة في استخدام نمط الترجمة التزامنية", + "对话模式使用介绍" : "مقدمة في استخدام نمط الحوار", + "中英互译模式使用介绍" : "مقدمة في استخدام نمط الترجمة بين الصينية والإنجليزية", + "一方手持手机,一方戴上耳机,对手机发言时,耳机播放译文,对耳机发言时,手机播放译文" : "يحمل أحد الأشخاص الهاتف، والآخر يرتدي السماعة. عند التحدث إلى الهاتف، تنسج السماعة النص المترجم؛ عند التحدث إلى السماعة، تنسج الهاتف النص المترجم", + "两人各佩戴一只耳机,选择源语言语种, 双方耳机中播放目标语言" : "يرتدي كل من الأشخاصين سماعة واحدة، يختاران اللغة الأصلية، وتُعرض اللغة الهدف في سماعات كلا الطرفين", + "手机靠近音源收音,佩戴耳机收听译文" : "قرب الهاتف من مصدر الصوت لالتقاط الصوت، وارتداء السماعة لسماع النص المترجم", + "- 情景示例 -\n张张靠近手机讲中文,对方耳机播放英语" : "- مثال سيناريو -\nيتحدث تشانغ تشانغ بالصينية بالقرب من الهاتف، وتُعرض السماعة للطرف الآخر الإنجليزية", + "- 情景示例 -\n张张戴一只耳机讲中文,双方耳机播放英文翻译 Lucy切换为英语发言后,双方耳机中播报中文翻译" : "- مثال سيناريو -\nيرتدي تشانغ تشانغ سماعة واحدة ويتحدث بالصينية، وتُعرض سماعات كلا الطرفين الترجمة الإنجليزية. بعد أن تحولت لوسي إلى التحدث بالإنجليزية، تنشر سماعات كلا الطرفين الترجمة الصينية", + "- 情景示例 -\nLisa对着手机讲英语,小徐耳机中播放中文" : "- مثال سيناريو -\nيتحدث ليزا بالإنجليزية إلى الهاتف، وتُعرض السماعة لشياو شو الصينية", + "开始体验" : "ابدأ التجربة", + "下次不再提示":"لا تُظهر مرة أخرى", + "当前正在录音,确定放弃当前录音吗":"يتم التسجيل حاليًا، هل أنت متأكد من رفض التسجيل الحالي؟", + "云同步":"المزامنة السحابية", + "是否上传运存储空间备份":"هل تريد تحميل نسخة احتياطية إلى مساحة التخزين السحابي؟", + + "请选择语言":"اختر اللغة", + "中文" : "الصينية", + "英文" : "الإنجليزية", + "日文" : "اليابانية", + "韩文" : "الكورية", + "法文" : "الفرنسية", + "西班牙文" : "الإسبانية", + "葡萄牙文" : "البرتغالية", + "印度尼西亚文" : "الإندونيسية", + "俄文" : "الروسية", + "马来文" : "المالاية", + + "保存录音" : "حفظ التسجيل", + "原文" : "النص الأصلي", + "译文" : "النص المترجم", + "摘要" : "الملخص", + "翻译" : "ترجم", + "重命名" : "إعادة تسمية", + "播放录音" : "تشغيل التسجيل", + "更多" : "المزيد", + "字号" : "حجم الخط", + "分享" : "مشاركة", + "调整字号" : "ضبط حجم الخط", + "小" : "صغير", + "标准" : "قياسي", + "大" : "كبير", + "设置" : "الإعدادات", + "左耳" : "الأذن اليسرى", + "右耳" : "الأذن اليمنى", + "耳机" : "السماعة", + "手机" : "الهاتف", + "此处将显示原文" : "سيُعرض النص الأصلي هنا", + "此处将显示译文" : "سيُعرض النص المترجم هنا", + "请输入..." : "أدخل...", + "筛选录音" : "تصفية التسجيلات", + "全部录音":"كل التسجيلات", + "收藏录音" : "التسجيلات المفضلة", + "多选" : "اختيار متعدد", + "导出" : "تصدير", + "您要删除这些录音吗?" : "هل تريد حذف هذه التسجيلات؟", + "删除后,这些记录将无法恢复。" : "بعد الحذف، لا يمكن استعادة هذه السجلات.", + "删除后,此记录将无法恢复":"بعد الحذف، لا يمكن استعادة هذه السجل", + "您要删除这条录音吗?":"هل تريد حذف هذا التسجيل؟", + + "多个文件将压缩成一个.zip的文件以便于分享。请选择您需要导出的文件类型:" : "سيتم ضغط الملفات المتعددة إلى ملف .zip لسهولة المشاركة. اختر نوع الملف الذي تريد تصديره:", + "仅音频文件" : "ملفات الصوت فقط", + "仅文档" : "المستندات فقط", + "音频文件" : "ملفات الصوت", + "文档":"المستندات", + + "白噪音":"الضوضاء البيضاء", + "EQ调音":"ضبط الإكوالайزر", + "正常":"عادي", + "流行":"الشعبية", + "经典":"الكلاسيكي", + "爵士":"الجاز", + "摇滚":"الروك", + "自定义":"مخصص", + "查找耳机":"البحث عن السماعة", + "自定义音效":"الإعصار الصوتي المخصص", + "音效风格":"نمط الإعصار الصوتي", + "左耳机响铃":"نافذة السماعة اليسرى", + "右耳机响铃":"نافذة السماعة اليمنى", + "耳机在附近,可通过响铃进行查找":"السماعة قريبة، يمكن العثور عليها من خلال النافذة", + + "个智能设备":"أجهزة ذكية", + "云储存空间" : "مساحة التخزين السحابي", + "电子说明书" : "القائمة الإلكترونية", + "固件升级" : "تحديث البرامج الثابتة", + "语言设置" : "إعدادات اللغة", + "更多设置" : "مزيد من الإعدادات", + "帮助与反馈" : "المساعدة والملاحظات", + "关于" : "حول", + "设备详情":"تفاصيل الجهاز", + "设备名称":"اسم الجهاز", + "设备ID":"معرّف الجهاز", + "最近登录时间":"آخر وقت تسجيل الدخول", + "移除设备":"إزالة الجهاز", + "确定要解绑该设备吗?":"هل أنت متأكد من فك ارتباط هذا الجهاز؟", + "移除设备后会同步退出账号,在此设备上将无法访问该账号的数据":"بعد إزالة الجهاز، سوف تسجيل الخروج من الحساب Синكرو، ولن تتمكن من الوصول إلى بيانات الحساب على هذا الجهاز", + "设备地址":"عنوان الجهاز", + "硬件版本":"إصدار الجهاز الحاسوبي", + "软件版本":"إصدار البرنامج", + "设备信息":"معلومات الجهاز", + + "账号设置" : "إعدادات الحساب", + "登录方式" : "طريقة تسجيل الدخول", + "账号密码" : "كلمة مرور الحساب", + "安全手机" : "الهاتف الآمن", + "安全邮箱" : "البريد الإلكتروني الآمن", + "基本资料" : "المعلومات الأساسية", + "登录设备管理" : "إدارة أجهزة تسجيل الدخول", + "头像" : "الصورة الشخصية", + "昵称" : "اللقب", + "性别" : "الجنس", + "国家与地区" : "البلد والمنطقة", + "请输入昵称" : "أدخل اللقب", + "男" : "ذكر", + "女" : "أنثى", + "保密" : "مُرصوص", + "国家/地区" : "البلد/المنطقة", + "请输入新的安全手机号码" : "أدخل رقم هاتف آمن جديد", + "请输入手机号码" : "أدخل رقم الهاتف", + + "请输入新的安全邮箱地址" : "أدخل عنوان بريد إلكتروني آمن جديد", + "请输入邮箱地址" : "أدخل عنوان البريد الإلكتروني", + "请使用安全手机":"استخدم الهاتف الآمن", + "请使用安全邮箱":"استخدم البريد الإلكتروني الآمن", + "获取验证码短信":"الحصول على رمز التحقق عبر الرسالة القصيرة", + "请输入型号查询" : "أدخل النوع للبحث", + "问题描述或建议" : "وصف المشكلة أو المقترح", + "在线咨询" : "الاستشارة عبر الإنترنت", + "问题类型" : "نوع المشكلة", + "功能异常" : "الوظيفة غير طبيعية", + "意见与反馈" : "الرأي والملاحظات", + "联系方式" : "بيانات الاتصال", + "请输入手机号或邮箱" : "أدخل رقم الهاتف أو البريد الإلكتروني", + "请至少用10个字描述问题,并添加截图,这有助于问题快速解决。" : "أوصف المشكلة بلون لا يقل عن 10 أحرف وأضف لقطة شاشة، مما سيساعد في حل المشكلة بسرعة.", + "反馈历史" : "تاريخ الملاحظات", + "你好,请问有什么我可以帮助到您" : "مرحباً، هل هناك أي شيء يمكنني مساعدتك به؟", + "请用一句话简单描述下您的问题~" : "أوصف مشكلتك بإجابة مختصرة في جملة واحدة ~", + "猜你想问" : "أعتقد أنك تريد السؤال", + + + "当前版本" : "الإصدار الحالي", + "检查更新" : "التحقق من التحديثات", + "系统权限管理" : "إدارة أذونات النظام", + "切换账号" : "تبديل الحساب", + "退出登录" : "تسجيل الخروج", + "注销账号" : "إلغاء الحساب", + "提示" : "تذكير", + "确定" : "تأكيد", + "确认" : "تأكيد", + "取消" : "إلغاء", + "删除" : "حذف", + "下一步" : "الخطوة التالية", + "确定要切换账号吗?" : "هل أنت متأكد من تبديل الحساب؟", + "确定要退出登录吗?" : "هل أنت متأكد من تسجيل الخروج؟", + "真的要注销账号吗?" : "هل أنت حقًا تريد إلغاء الحساب؟", + "用户协议" : "اتفاق المستخدم", + "隐私政策" : "سياسة الخصوصية", + "个人信息手机清单" : "قائمة هواتف المعلومات الشخصية", + "系统权限清单" : "قائمة أذونات النظام", + "撤回同意" : "سحب الموافقة", + "确认撤回" : "تأكيد السحب", + "请您确保您是有权进行本撤回同意隐私政策操作的相关当事人。撤回同意隐私政策,您将放弃以下资产或者权益:\n\n1.数据清空\n将会停止收集您的个人信息。您使用DeepChords应用过程中产生的数据将被清空;手机中DeepChords应用的缓存数据将被清除。\n\n2.设备解除绑定\nDeepChords账号中,所有设备会与您当前登录的账号解除绑定,并清除设备之前存储在服务器的数据。存储在物理设备中的数据请通过人工本地物理重置来清除。如果您需要重新使用设备,需要您再次进行绑定并且重新授权。\n\n3.其他\n此举还将撤回您对用户协议的同意,并退出DeepChords应用。\n\n请您知悉,撤回同意隐私政策不代表撤回同意前的相关行为和责任得到豁免或减轻。若您需要重新在该账号管理设备,需要您重新授权并绑定。请谨慎操作!" : "يرجى التأكد من أنك الطرف المعني المُسلَّح لتنفيذ عملية سحب الموافقة على سياسة الخصوصية هذه. من خلال سحب موافقتك على سياسة الخصوصية، ستتخلى عن الأصول أو الحقوق التالية:\n\n1. مسح البيانات\nسيقف جمع معلوماتك الشخصية. سيتم مسح البيانات الناتجة أثناء استخدامك لتطبيق DeepChords؛ سيتم مسح بيانات التخزين المؤقت لتطبيق DeepChords على هاتفك.\n\n2. فك ارتباط الجهاز\nفي حسابك على DeepChords، سيتم فك ارتباط جميع الأجهزة بحسابك الحالي الذي قمت بتسجيل الدخول إليه، وسيتم مسح البيانات التي حفظتها الأجهزة سابقًا على الخادم. يجب مسح البيانات المخزنة في الأجهزة المادية من خلال إعادة تعيين مادي محلي يدوي. إذا كنت بحاجة إلى إعادة استخدام الجهاز، ستحتاج إلى إعادة ربطه وتأكيد إذن جديد.\n\n3. أخرى\nستؤدي هذه الخطوة أيضًا إلى سحب موافقتك على اتفاق المستخدم والخروج من تطبيق DeepChords.\n\nيرجى العلم بأن سحب الموافقة على سياسة الخصوصية لا يعني إعفاء أو تخفيف الأعمال والمسؤوليات المرتبطة بالفترة قبل سحب الموافقة. إذا كنت بحاجة إلى إدارة الأجهزة مرة أخرى في هذا الحساب، ستحتاج إلى تأكيد إذن جديد وربط. يرجى تنفيذ العملية بحذر!", + "您好, \n欢迎使用DeepChords" : "مرحباً، \nأهلاً بك في DeepChords", + "用户登录" : "تسجيل دخول المستخدم", + "请输入密码" : "أدخل كلمة المرور", + "请输入手机号码/邮箱":"أدخل رقم الهاتف/البريد الإلكتروني", + "登录并同意" : "تسجيل الدخول والاتفاق", + "《隐私政策》" : "سياسة الخصوصية", + " 和 " : " و ", + "《用户协议》" : "اتفاق المستخدم", + "忘记密码" : "نسيت كلمة المرور", + "验证码登录" : "تسجيل الدخول برمز التحقق", + "其他登录方式" : "طرق تسجيل دخول أخرى", + "用户注册" : "تسجيل المستخدم", + "请输入验证码" : "أدخل رمز التحقق", + "发送验证码":"إرسال رمز التحقق", + "点击获取" : "انقر للحصول", + "登录" : "تسجيل الدخول", + "密码登录" : "تسجيل الدخول بكلمة المرور", + "重置密码":"إعادة تعيين كلمة المرور", + "注册" : "تسجيل", + "请输入正确的手机号码" : "أدخل رقم الهاتف الصحيح", + "请求失败" : "فشل الطلب", + "请求成功!":"نجاح الطلب!", + "加载中...":"جارٍ التحميل...", + "上传中...":"جارٍ التحميل...", + "连接中":"جارٍ الاتصال", + "连接成功":"نجاح الاتصال", + "连接失败":"فشل الاتصال", + "智能体":"الوكيل الذكي", + "已成功更新到云储存空间":"تم التحديث بنجاح إلى مساحة التخزين السحابي", + "按日期查找":"البحث حسب التاريخ", + "绑定安全手机":"ربط الهاتف الآمن", + "内容由AI生成,请仔细甄别":"المحتوى مُولَّد بواسطة الذكاء الاصطناعي، يرجى التحقق بعناية", + "松手发送,上移取消":"أزل إصباحك للإرسال، انقل لأعلى للإلغاء", + "设置壁纸":"تعيين خلفية سطح المكتب", + "是否保存到相册?":"هل تريد حفظ في الألبوم؟", + "保存成功":"نجاح الحفظ", + "保存失败":"فشل الحفظ", + "成功":"نجاح", + "失败":"فشل", +] diff --git a/ShenYin/ShenYin/lan/Filipino.swift b/ShenYin/ShenYin/lan/Filipino.swift new file mode 100644 index 0000000..67e4c59 --- /dev/null +++ b/ShenYin/ShenYin/lan/Filipino.swift @@ -0,0 +1,238 @@ + +// +// filipino.swift +// ShenYin +// +// Created by liangshi on 2025/11/10. +// + +let filipinoMap:[String:String] = +[ + "智能" : "Intelisiyente", + "模式" : "Mode", + "睡眠" : "Tulog", + "客服" : "Serbisyo sa Kliyente", + "我的" : "Aking", + "设备":"Device", + "已连接" : "Nakakonekta", + "未连接" : "Hindi Nakakonekta", + + "现场录音" : "Pag-record sa Lugar", + "随时随地,一键开录" : "Mag-record kahit kailan at saan man sa isang klick", + "通话录音" : "Pag-record ng Telepono", + "一键录音,翻译转写" : "Pag-record sa isang klick, pagsasalin at transkripsyon", + "中英互译" : "Pagsasalin sa Chinese-English", + "实时对话,即时互译" : "Tunay na Oras na Dialogo, Instant na Pagsasalin", + "同传听译" : "Simultaneous Interpretation", + "一机一耳,面对面畅聊" : "Isang Device, Isang Earphone, Makipag-usap nang Harapan", + "对话翻译" : "Pagsasalin ng Dialogo", + "会议讲座,同步翻译" : "Kumperensya at Lektyur, Kasabay na Pagsasalin", + "文本翻译" : "Pagsasalin ng Teksto", + "即打即译,多语支持":"Instant na Pagsasalin habang nagtatype, Suporta sa Maraming Wika", + "历史记录" : "Kasaysayan", + "所有记录,一目了然" : "Lahat ng talaan ay malinaw sa isang sulyap", + "智能对话" : "Intelisiyenteng Dialogo", + "伙伴,随叫随到" : "Kaibigan, Laging Handang Tumulong", + "切换角色" : "Palitan ang Papel", + "按住说话" : "Hold at Magsalita", + "同传听译模式使用介绍":"Panimula sa Paggamit ng Simultaneous Interpretation Mode", + "对话模式使用介绍" : "Panimula sa Paggamit ng Dialog Mode", + "中英互译模式使用介绍" : "Panimula sa Paggamit ng Chinese-English Translation Mode", + "一方手持手机,一方戴上耳机,对手机发言时,耳机播放译文,对耳机发言时,手机播放译文" : "Ang isang tao ay may hawak na telepono, ang isa pa ay nagsusuot ng earphone. Kapag nagsalita sa telepono, ang earphone ay nagpe-play ng nai-translate na teksto; kapag nagsalita sa earphone, ang telepono ay nagpe-play ng nai-translate na teksto", + "两人各佩戴一只耳机,选择源语言语种, 双方耳机中播放目标语言" : "Ang dalawang tao ay nagsusuot ng isang earphone bawat isa, pumili ng pinagmulan na wika, at ang target na wika ay nagpe-play sa mga earphone ng parehong panig", + "手机靠近音源收音,佩戴耳机收听译文" : "Ilapit ang telepono sa pinagmulan ng tunog upang kumuha ng audio, at magsuot ng earphone upang marinig ang nai-translate na teksto", + "- 情景示例 -\n张张靠近手机讲中文,对方耳机播放英语" : "- Halimbawa ng Senaryo -\nSi Zhang Zhang ay malapit sa telepono at nagsasalita ng Chinese, at ang earphone ng kabilang panig ay nagpe-play ng English", + "- 情景示例 -\n张张戴一只耳机讲中文,双方耳机播放英文翻译 Lucy切换为英语发言后,双方耳机中播报中文翻译" : "- Halimbawa ng Senaryo -\nSi Zhang Zhang ay nagsusuot ng isang earphone at nagsasalita ng Chinese, ang mga earphone ng parehong panig ay nagpe-play ng English translation. Pagkatapos magpalit si Lucy sa pagsasalita ng English, ang mga earphone ng parehong panig ay nag-broadcast ng Chinese translation", + "- 情景示例 -\nLisa对着手机讲英语,小徐耳机中播放中文" : "- Halimbawa ng Senaryo -\nSi Lisa ay nagsasalita ng English sa telepono, at ang earphone ni Xiao Xu ay nagpe-play ng Chinese", + "开始体验" : "Simulan ang Karanasan", + "下次不再提示":"Huwag Nang Ipakita sa Susunod", + "当前正在录音,确定放弃当前录音吗":"Kasalukuyang nagre-record, sigurado ka bang isasantabi ang kasalukuyang pag-record?", + "云同步":"Cloud Sync", + "是否上传运存储空间备份":"Gustong i-upload sa cloud storage para sa backup?", + + "请选择语言":"Pumili ng Wika", + "中文" : "Chinese", + "英文" : "English", + "日文" : "Japanese", + "韩文" : "Korean", + "法文" : "French", + "西班牙文" : "Spanish", + "葡萄牙文" : "Portuguese", + "印度尼西亚文" : "Indonesian", + "俄文" : "Russian", + "马来文" : "Malay", + + "保存录音" : "I-save ang Pag-record", + "原文" : "Orihinal na Teksto", + "译文" : "Nai-translate na Teksto", + "摘要" : "Buod", + "翻译" : "Isalin", + "重命名" : "Palitan ang Pangalan", + "播放录音" : "I-play ang Pag-record", + "更多" : "Higit Pa", + "字号" : "Laki ng Font", + "分享" : "Ibahagi", + "调整字号" : "Ayusin ang Laki ng Font", + "小" : "Maliit", + "标准" : "Pamantayan", + "大" : "Malaki", + "设置" : "Mga Setting", + "左耳" : "Kaliwang Tainga", + "右耳" : "Kanang Tainga", + "耳机" : "Earphone", + "手机" : "Telepono", + "此处将显示原文" : "Ipapakita dito ang Orihinal na Teksto", + "此处将显示译文" : "Ipapakita dito ang Nai-translate na Teksto", + "请输入..." : "Mangyaring I-type...", + "筛选录音" : "Filtrang Pag-record", + "全部录音":"Lahat ng Pag-record", + "收藏录音" : "Favorites na Pag-record", + "多选" : "Maramihang Pili", + "导出" : "I-export", + "您要删除这些录音吗?" : "Gustong mong tanggalin ang mga pag-record na ito?", + "删除后,这些记录将无法恢复。" : "Pagkatapos tanggalin, hindi na mababawi ang mga talaan na ito.", + "删除后,此记录将无法恢复":"Pagkatapos tanggalin, hindi na mababawi ang talahanayan na ito", + "您要删除这条录音吗?":"Gustong mong tanggalin ang pag-record na ito?", + + "多个文件将压缩成一个.zip的文件以便于分享。请选择您需要导出的文件类型:" : "Ang maraming file ay icocompressed sa isang .zip file para sa madaling pagbabahagi. Pumili ng uri ng file na nais mong i-export:", + "仅音频文件" : "Mga Audio File Lamang", + "仅文档" : "Mga Dokumento Lamang", + "音频文件" : "Mga Audio File", + "文档":"Mga Dokumento", + + "白噪音":"White Noise", + "EQ调音":"EQ Tuning", + "正常":"Normal", + "流行":"Pop", + "经典":"Klasiko", + "爵士":"Jazz", + "摇滚":"Rock", + "自定义":"Custom", + "查找耳机":"Hanapin ang Earphone", + "自定义音效":"Custom Sound Effects", + "音效风格":"Estilo ng Sound Effect", + "左耳机响铃":"Tunog ng Bell sa Kaliwang Earphone", + "右耳机响铃":"Tunog ng Bell sa Kanang Earphone", + "耳机在附近,可通过响铃进行查找":"Ang earphone ay malapit, mahahanap sa pamamagitan ng tunog ng bell", + + "个智能设备":"mga Intelisiyenteng Device", + "云储存空间" : "Cloud Storage Space", + "电子说明书" : "Electronic Manual", + "固件升级" : "Firmware Upgrade", + "语言设置" : "Mga Setting ng Wika", + "更多设置" : "Higit Pang Mga Setting", + "帮助与反馈" : "Tulong at Feedback", + "关于" : "Tungkol Sa", + "设备详情":"Detalyeng ng Device", + "设备名称":"Pangalan ng Device", + "设备ID":"ID ng Device", + "最近登录时间":"Huling Oras ng Pag-login", + "移除设备":"Alisin ang Device", + "确定要解绑该设备吗?":"Sigurado ka bang tanggalin ang pagbubuklod sa device na ito?", + "移除设备后会同步退出账号,在此设备上将无法访问该账号的数据":"Pagkatanggal ng device, mag-logout同步 sa account, at hindi na makaka-access sa data ng account sa device na ito", + "设备地址":"Adres ng Device", + "硬件版本":" Bersyon ng Hardware", + "软件版本":"Bersyon ng Software", + "设备信息":"Impormasyon ng Device", + + "账号设置" : "Mga Setting ng Account", + "登录方式" : "Paraan ng Pag-login", + "账号密码" : "Password ng Account", + "安全手机" : "Secure na Telepono", + "安全邮箱" : "Secure na Email", + "基本资料" : "Mga Basikong Impormasyon", + "登录设备管理" : "Pamamahala ng mga Device na Nag-login", + "头像" : "Avatar", + "昵称" : "Palayaw", + "性别" : "Kasarian", + "国家与地区" : "Bansa at Rehiyon", + "请输入昵称" : "Mangyaring I-type ang Palayaw", + "男" : "Lalaki", + "女" : "Babae", + "保密" : "Sekreto", + "国家/地区" : "Bansa/Rehiyon", + "请输入新的安全手机号码" : "Mangyaring I-type ang Bagong Secure na Numero ng Telepono", + "请输入手机号码" : "Mangyaring I-type ang Numero ng Telepono", + + "请输入新的安全邮箱地址" : "Mangyaring I-type ang Bagong Secure na Email Address", + "请输入邮箱地址" : "Mangyaring I-type ang Email Address", + "请使用安全手机":"Gamitin ang Secure na Telepono", + "请使用安全邮箱":"Gamitin ang Secure na Email", + "获取验证码短信":"Kumuha ng Verification Code via SMS", + "请输入型号查询" : "Mangyaring I-type ang Modelo para sa Paghahanap", + "问题描述或建议" : "Paglalarawan ng Problema o Mungkahi", + "在线咨询" : "Online Konsultasyon", + "问题类型" : "Uri ng Problema", + "功能异常" : "Abnormal na Function", + "意见与反馈" : "Opinyon at Feedback", + "联系方式" : "Paraan ng Pakikipag-ugnay", + "请输入手机号或邮箱" : "Mangyaring I-type ang Numero ng Telepono o Email", + "请至少用10个字描述问题,并添加截图,这有助于问题快速解决。" : "Mangyaring ilarawan ang problema sa hindi bababa sa 10 salita at magdagdag ng screenshot, makakatulong ito upang mabilis na malutas ang problema.", + "反馈历史" : "Kasaysayan ng Feedback", + "你好,请问有什么我可以帮助到您" : "Kumusta, may maitutulong ba ako sa iyo?", + "请用一句话简单描述下您的问题~" : "Mangyaring ilarawan ang iyong problema sa isang pangungusap ~", + "猜你想问" : "Sa palagay ko nais mong tanungin", + + + "当前版本" : "Kasalukuyang Bersyon", + "检查更新" : "Suriin para sa Update", + "系统权限管理" : "Pamamahala ng Sistema ng Permiso", + "切换账号" : "Palitan ang Account", + "退出登录" : "Log Out", + "注销账号" : "Wag ng Gamitin ang Account", + "提示" : "Paalala", + "确定" : "Konfirmahin", + "确认" : "Konfirmahin", + "取消" : "Kanselahin", + "删除" : "Tanggalin", + "下一步" : "Susunod na Hakbang", + "确定要切换账号吗?" : "Sigurado ka bang papalitan ang account?", + "确定要退出登录吗?" : "Sigurado ka bang mag-logout?", + "真的要注销账号吗?" : "Talagang gusto mong wag ng gamitin ang account?", + "用户协议" : "User Agreement", + "隐私政策" : "Privacy Policy", + "个人信息手机清单" : "Listahan ng Personal na Impormasyon sa Telepono", + "系统权限清单" : "Listahan ng Permiso ng Sistema", + "撤回同意" : "Bawiin ang Pahintulot", + "确认撤回" : "Konfirmahin ang Pagbawi ng Pahintulot", + "请您确保您是有权进行本撤回同意隐私政策操作的相关当事人。撤回同意隐私政策,您将放弃以下资产或者权益:\n\n1.数据清空\n将会停止收集您的个人信息。您使用DeepChords应用过程中产生的数据将被清空;手机中DeepChords应用的缓存数据将被清除。\n\n2.设备解除绑定\nDeepChords账号中,所有设备会与您当前登录的账号解除绑定,并清除设备之前存储在服务器的数据。存储在物理设备中的数据请通过人工本地物理重置来清除。如果您需要重新使用设备,需要您再次进行绑定并且重新授权。\n\n3.其他\n此举还将撤回您对用户协议的同意,并退出DeepChords应用。\n\n请您知悉,撤回同意隐私政策不代表撤回同意前的相关行为和责任得到豁免或减轻。若您需要重新在该账号管理设备,需要您重新授权并绑定。请谨慎操作!" : "Siguraduhin mong ikaw ang may karapatan na gawin ang operasyon na ito ng pagbawi ng pahintulot sa Privacy Policy. Sa pamamagitan ng pagbawi ng pahintulot sa Privacy Policy, isasakripisyo mo ang mga sumusunod na asset o karapatan:\n\n1. Paglilinis ng Data\nTitigil ang pagkolekta ng iyong personal na impormasyon. Ang data na nabuo habang gumagamit ka ng DeepChords app ay malilinis; ang cache data ng DeepChords app sa iyong telepono ay malilinis.\n\n2. Pagbubuklod ng Device na Tinanggal\nSa iyong DeepChords account, lahat ng device ay matatanggal ang pagbubuklod sa iyong kasalukuyang naka-login na account, at malilinis ang data na naka-save sa server ng device. Ang data na naka-save sa pisikal na device ay dapat malinis sa pamamagitan ng manual na lokal na pisikal na reset. Kung kailangan mong gamitin muli ang device, kailangan mong ibuklod muli at bigyan muli ng pahintulot.\n\n3. Iba Pa\nAng hakbang na ito ay magbubukod din ng iyong pahintulot sa User Agreement at mag-logout sa DeepChords app.\n\nAlamin mong ang pagbawi ng pahintulot sa Privacy Policy ay hindi nangangahulugang ang mga nauugnay na aksyon at responsibilidad bago ang pagbawi ng pahintulot ay napapatawad o nababawasan. Kung kailangan mong pamahalaan muli ang mga device sa account na ito, kailangan mong bigyan muli ng pahintulot at ibuklod. Mangyaring mag-operate nang may pag-iingat!", + "您好, \n欢迎使用DeepChords" : "Kumusta, \nMaligayang Pagdating sa DeepChords", + "用户登录" : "Pag-login ng User", + "请输入密码" : "Mangyaring I-type ang Password", + "请输入手机号码/邮箱":"Mangyaring I-type ang Numero ng Telepono/Email", + "登录并同意" : "Mag-login at Sumang-ayon", + "《隐私政策》" : "Privacy Policy", + " 和 " : " at ", + "《用户协议》" : "User Agreement", + "忘记密码" : "Nakalimutan ang Password", + "验证码登录" : "Pag-login gamit ang Verification Code", + "其他登录方式" : "Iba pang Paraan ng Pag-login", + "用户注册" : "Pagrehistro ng User", + "请输入验证码" : "Mangyaring I-type ang Verification Code", + "发送验证码":"Ipadala ang Verification Code", + "点击获取" : "I-click upang Kumuha", + "登录" : "Mag-login", + "密码登录" : "Pag-login gamit ang Password", + "重置密码":"I-reset ang Password", + "注册" : "Magrehistro", + "请输入正确的手机号码" : "Mangyaring I-type ang Tamang Numero ng Telepono", + "请求失败" : "Nabigo ang Request", + "请求成功!":"Nagtagumpay ang Request!", + "加载中...":"Naglo-load...", + "上传中...":"Nag-upload...", + "连接中":"Nakakonekta...", + "连接成功":"Nagtagumpay ang Koneksyon", + "连接失败":"Nabigo ang Koneksyon", + "智能体":"Intelisiyenteng Agent", + "已成功更新到云储存空间":"Nagtagumpay na na-update sa Cloud Storage Space", + "按日期查找":"Maghanap ayon sa Petsa", + "绑定安全手机":"Ibuklod ang Secure na Telepono", + "内容由AI生成,请仔细甄别":"Ang nilalaman ay ginawa ng AI, mangyaring suriin nang mabuti", + "松手发送,上移取消":"Bitawan upang Ipadala, Ilipat pataas upang Kanselahin", + "设置壁纸":"Itakda ang Wallpaper", + "是否保存到相册?":"Gustong i-save sa Album?", + "保存成功":"Nagtagumpay ang Pag-save", + "保存失败":"Nabigo ang Pag-save", + "成功":"Tagumpay", + "失败":"Pagkabigo", +] diff --git a/ShenYin/ShenYin/lan/German.swift b/ShenYin/ShenYin/lan/German.swift new file mode 100644 index 0000000..bb3ff40 --- /dev/null +++ b/ShenYin/ShenYin/lan/German.swift @@ -0,0 +1,237 @@ +// +// Untitled.swift +// ShenYin +// +// Created by liangshi on 2025/11/21. +// + +let germanMap:[String:String] = +[ + "智能" : "Intelligent", + "模式" : "Modus", + "睡眠" : "Schlafen", + "客服" : "Kundenservice", + "我的" : "Mein", + "设备":"Gerät", + "已连接" : "Verbunden", + "未连接" : "Nicht verbunden", + + "现场录音" : "Vor-Ort-Aufnahme", + "随时随地,一键开录" : "Aufnehmen Sie jederzeit und überall mit einem einzigen Klick", + "通话录音" : "Anrufaufnahme", + "一键录音,翻译转写" : "Einklick-Aufnahme, Übersetzung und Transkription", + "中英互译" : "Chinesisch-Englisch-Übersetzung", + "实时对话,即时互译" : "Echtzeit-Dialog, sofortige gegenseitige Übersetzung", + "同传听译" : "Simultandolmetschen", + "一机一耳,面对面畅聊" : "Ein Gerät, ein Kopfhörer, face-to-face-Platz", + "对话翻译" : "Dialogübersetzung", + "会议讲座,同步翻译" : "Konferenzen und Vorträge, simultane Übersetzung", + "文本翻译" : "Textübersetzung", + "即打即译,多语支持":"Sofortige Übersetzung bei Eingabe, mehrsprachige Unterstützung", + "历史记录" : "Verlauf", + "所有记录,一目了然" : "Alle Aufzeichnungen sind auf einen Blick ersichtlich", + "智能对话" : "Intelligenter Dialog", + "伙伴,随叫随到" : "Partner, jederzeit verfügbar", + "切换角色" : "Rolle wechseln", + "按住说话" : "Drücken und Sprechen", + "同传听译模式使用介绍":"Einführung in die Nutzung des Simultandolmetschen-Modus", + "对话模式使用介绍" : "Einführung in die Nutzung des Dialogmodus", + "中英互译模式使用介绍" : "Einführung in die Nutzung des Chinesisch-Englisch-Übersetzungsmodus", + "一方手持手机,一方戴上耳机,对手机发言时,耳机播放译文,对耳机发言时,手机播放译文" : "Eine Person hält das Handy, die andere trägt einen Kopfhörer. Wenn Sie ins Handy sprechen, spielt der Kopfhörer die Übersetzung ab; wenn Sie in den Kopfhörer sprechen, spielt das Handy die Übersetzung ab", + "两人各佩戴一只耳机,选择源语言语种, 双方耳机中播放目标语言" : "Zwei Personen tragen jeweils einen Kopfhörer, wählen die Ausgangssprache, und die Zielsprache wird in den Kopfhörern beider Seiten abgespielt", + "手机靠近音源收音,佩戴耳机收听译文" : "Bringen Sie das Handy nahe an die Schallquelle, um Ton aufzunehmen, und tragen Sie einen Kopfhörer, um die Übersetzung zu hören", + "- 情景示例 -\n张张靠近手机讲中文,对方耳机播放英语" : "- Szenario-Beispiel -\nZhang Zhang spricht chinesisch nahe am Handy, und der Kopfhörer des anderen Spielers spielt Englisch ab", + "- 情景示例 -\n张张戴一只耳机讲中文,双方耳机播放英文翻译 Lucy切换为英语发言后,双方耳机中播报中文翻译" : "- Szenario-Beispiel -\nZhang Zhang trägt einen Kopfhörer und spricht chinesisch, die Kopfhörer beider Seiten spielen die englische Übersetzung ab. Nachdem Lucy auf englisch umgeschaltet hat, senden die Kopfhörer beider Seiten die chinesische Übersetzung aus", + "- 情景示例 -\nLisa对着手机讲英语,小徐耳机中播放中文" : "- Szenario-Beispiel -\nLisa spricht ins Handy auf Englisch, und in Xiao Xus Kopfhörer wird Chinesisch abgespielt", + "开始体验" : "Erlebnis starten", + "下次不再提示":"Nicht mehr anzeigen", + "当前正在录音,确定放弃当前录音吗":"Aktuell wird aufgenommen, sind Sie sicher, die aktuelle Aufnahme zu verwerfen?", + "云同步":"Cloud-Synchronisation", + "是否上传运存储空间备份":"Möchten Sie eine Sicherung auf den Cloud-Speicher hochladen?", + + "请选择语言":"Bitte wählen Sie die Sprache", + "中文" : "Chinesisch", + "英文" : "Englisch", + "日文" : "Japanisch", + "韩文" : "Koreanisch", + "法文" : "Französisch", + "西班牙文" : "Spanisch", + "葡萄牙文" : "Portugiesisch", + "印度尼西亚文" : "Indonesisch", + "俄文" : "Russisch", + "马来文" : "Malaiisch", + + "保存录音" : "Aufnahme speichern", + "原文" : "Originaltext", + "译文" : "Übersetzter Text", + "摘要" : "Zusammenfassung", + "翻译" : "Übersetzen", + "重命名" : "Umbenennen", + "播放录音" : "Aufnahme abspielen", + "更多" : "Mehr", + "字号" : "Schriftgröße", + "分享" : "Teilen", + "调整字号" : "Schriftgröße anpassen", + "小" : "Klein", + "标准" : "Standard", + "大" : "Groß", + "设置" : "Einstellungen", + "左耳" : "Linkes Ohr", + "右耳" : "Rechtes Ohr", + "耳机" : "Kopfhörer", + "手机" : "Handy", + "此处将显示原文" : "Hier wird der Originaltext angezeigt", + "此处将显示译文" : "Hier wird der übersetzte Text angezeigt", + "请输入..." : "Bitte eingeben...", + "筛选录音" : "Aufnahmen filtern", + "全部录音":"Alle Aufnahmen", + "收藏录音" : "Favorisierte Aufnahmen", + "多选" : "Mehrfachauswahl", + "导出" : "Exportieren", + "您要删除这些录音吗?" : "Möchten Sie diese Aufnahmen löschen?", + "删除后,这些记录将无法恢复。" : "Nach dem Löschen können diese Aufzeichnungen nicht wiederhergestellt werden.", + "删除后,此记录将无法恢复":"Nach dem Löschen kann diese Aufzeichnung nicht wiederhergestellt werden", + "您要删除这条录音吗?":"Möchten Sie diese Aufnahme löschen?", + + "多个文件将压缩成一个.zip的文件以便于分享。请选择您需要导出的文件类型:" : "Mehrere Dateien werden zu einer .zip-Datei komprimiert, um das Teilen zu erleichtern. Bitte wählen Sie den Dateityp, den Sie exportieren möchten:", + "仅音频文件" : "Nur Audiodateien", + "仅文档" : "Nur Dokumente", + "音频文件" : "Audiodateien", + "文档":"Dokumente", + + "白噪音":"Weißes Rauschen", + "EQ调音":"EQ-Einstellung", + "正常":"Normal", + "流行":"Pop", + "经典":"Klassik", + "爵士":"Jazz", + "摇滚":"Rock", + "自定义":"Benutzerdefiniert", + "查找耳机":"Kopfhörer suchen", + "自定义音效":"Benutzerdefinierte Soundeffekte", + "音效风格":"Soundeffekt-Stil", + "左耳机响铃":"Klingelton des linken Kopfhörers", + "右耳机响铃":"Klingelton des rechten Kopfhörers", + "耳机在附近,可通过响铃进行查找":"Die Kopfhörer sind in der Nähe und können über den Klingelton gefunden werden", + + "个智能设备":"intelligente Geräte", + "云储存空间" : "Cloud-Speicherplatz", + "电子说明书" : "Elektronisches Handbuch", + "固件升级" : "Firmware-Update", + "语言设置" : "Sprach-Einstellungen", + "更多设置" : "Weitere Einstellungen", + "帮助与反馈" : "Hilfe und Feedback", + "关于" : "Über", + "设备详情":"Geräte Details", + "设备名称":"Gerätename", + "设备ID":"Geräte-ID", + "最近登录时间":"Letzte Anmeldezeit", + "移除设备":"Gerät entfernen", + "确定要解绑该设备吗?":"Sind Sie sicher, dass Sie dieses Gerät entbinden möchten?", + "移除设备后会同步退出账号,在此设备上将无法访问该账号的数据":"Nachdem das Gerät entfernt wurde, melden Sie sich synchron vom Konto ab, und Sie können auf die Daten des Kontos auf diesem Gerät nicht mehr zugreifen", + "设备地址":"Geräteadresse", + "硬件版本":"Hardware-Version", + "软件版本":"Software-Version", + "设备信息":"Geräteinformation", + + "账号设置" : "Konto-Einstellungen", + "登录方式" : "Anmeldeart", + "账号密码" : "Kontopasswort", + "安全手机" : "Sicherheits-Handy", + "安全邮箱" : "Sicherheits-E-Mail", + "基本资料" : "Grundlegende Informationen", + "登录设备管理" : "Verwaltung der angemeldeten Geräte", + "头像" : "Profilbild", + "昵称" : "Spitzname", + "性别" : "Geschlecht", + "国家与地区" : "Land und Region", + "请输入昵称" : "Bitte geben Sie einen Spitznamen ein", + "男" : "Männlich", + "女" : "Weiblich", + "保密" : "Geheim", + "国家/地区" : "Land/Region", + "请输入新的安全手机号码" : "Bitte geben Sie eine neue Sicherheits-Handynummer ein", + "请输入手机号码" : "Bitte geben Sie eine Handynummer ein", + + "请输入新的安全邮箱地址" : "Bitte geben Sie eine neue Sicherheits-E-Mail-Adresse ein", + "请输入邮箱地址" : "Bitte geben Sie eine E-Mail-Adresse ein", + "请使用安全手机":"Bitte verwenden Sie ein Sicherheits-Handy", + "请使用安全邮箱":"Bitte verwenden Sie eine Sicherheits-E-Mail", + "获取验证码短信":"SMS mit Bestätigungscode abrufen", + "请输入型号查询" : "Bitte geben Sie die Modellnummer zur Suche ein", + "问题描述或建议" : "Problem Beschreibung oder Vorschlag", + "在线咨询" : "Online-Beratung", + "问题类型" : "Problemtyp", + "功能异常" : "Funktionsstörung", + "意见与反馈" : "Meinungen und Feedback", + "联系方式" : "Kontaktinformationen", + "请输入手机号或邮箱" : "Bitte geben Sie eine Handynummer oder E-Mail-Adresse ein", + "请至少用10个字描述问题,并添加截图,这有助于问题快速解决。" : "Beschreiben Sie das Problem bitte mit mindestens 10 Zeichen und fügen Sie Screenshots hinzu, dies hilft, das Problem schnell zu lösen.", + "反馈历史" : "Feedback-Verlauf", + "你好,请问有什么我可以帮助到您" : "Hallo, kann ich Ihnen helfen?", + "请用一句话简单描述下您的问题~" : "Beschreiben Sie Ihr Problem bitte in einer einfachen Satz ~", + "猜你想问" : "Ich denke, Sie möchten fragen", + + + "当前版本" : "Aktuelle Version", + "检查更新" : "Nach Updates prüfen", + "系统权限管理" : "Systemberechtigungsverwaltung", + "切换账号" : "Konto wechseln", + "退出登录" : "Abmelden", + "注销账号" : "Konto löschen", + "提示" : "Hinweis", + "确定" : "Bestätigen", + "确认" : "Bestätigen", + "取消" : "Abbrechen", + "删除" : "Löschen", + "下一步" : "Nächster Schritt", + "确定要切换账号吗?" : "Sind Sie sicher, das Konto zu wechseln?", + "确定要退出登录吗?" : "Sind Sie sicher, sich abzumelden?", + "真的要注销账号吗?" : "Möchten Sie das Konto wirklich löschen?", + "用户协议" : "Nutzungsbedingungen", + "隐私政策" : "Datenschutzrichtlinie", + "个人信息手机清单" : "Liste der persönlichen Informations-Handys", + "系统权限清单" : "Liste der Systemberechtigungen", + "撤回同意" : "Zustimmung widerrufen", + "确认撤回" : "Widerruf bestätigen", + "请您确保您是有权进行本撤回同意隐私政策操作的相关当事人。撤回同意隐私政策,您将放弃以下资产或者权益:\n\n1.数据清空\n将会停止收集您的个人信息。您使用DeepChords应用过程中产生的数据将被清空;手机中DeepChords应用的缓存数据将被清除。\n\n2.设备解除绑定\nDeepChords账号中,所有设备会与您当前登录的账号解除绑定,并清除设备之前存储在服务器的数据。存储在物理设备中的数据请通过人工本地物理重置来清除。如果您需要重新使用设备,需要您再次进行绑定并且重新授权。\n\n3.其他\n此举还将撤回您对用户协议的同意,并退出DeepChords应用。\n\n请您知悉,撤回同意隐私政策不代表撤回同意前的相关行为和责任得到豁免或减轻。若您需要重新在该账号管理设备,需要您重新授权并绑定。请谨慎操作!" : "Bitte stellen Sie sicher, dass Sie berechtigt sind, diese Operation zum Widerruf der Zustimmung zur Datenschutzrichtlinie durchzuführen. Durch den Widerruf der Zustimmung zur Datenschutzrichtlinie verzichten Sie auf die folgenden Vermögenswerte oder Rechte:\n\n1. Datenlöschung\nDie Erfassung Ihrer persönlichen Daten wird gestoppt. Daten, die bei der Nutzung der DeepChords-App generiert werden, werden gelöscht; zwischengespeicherte Daten der DeepChords-App auf Ihrem Handy werden bereinigt.\n\n2. Geräte-Entbindung\nIn Ihrem DeepChords-Konto werden alle Geräte von Ihrem aktuell angemeldeten Konto entbunden, und Daten, die zuvor von den Geräten auf dem Server gespeichert wurden, werden gelöscht. Daten, die auf physischen Geräten gespeichert sind, müssen manuell durch eine lokale physische Rücksetzung gelöscht werden. Wenn Sie das Gerät erneut verwenden möchten, müssen Sie es erneut binden und autorisieren.\n\n3. Sonstiges\nDiese Maßnahme widerruft auch Ihre Zustimmung zu den Nutzungsbedingungen und beendet die DeepChords-App.\n\nBitte beachten Sie, dass der Widerruf der Zustimmung zur Datenschutzrichtlinie nicht bedeutet, dass relevante Handlungen und Verantwortlichkeiten vor dem Widerruf der Zustimmung entlastet oder gemindert werden. Wenn Sie Geräte in diesem Konto erneut verwalten möchten, müssen Sie sich erneut autorisieren und binden. Bitte操作 Sie vorsichtig!", + "您好, \n欢迎使用DeepChords" : "Hallo, \nWillkommen bei DeepChords", + "用户登录" : "Benutzeranmeldung", + "请输入密码" : "Bitte geben Sie das Passwort ein", + "请输入手机号码/邮箱":"Bitte geben Sie eine Handynummer/E-Mail-Adresse ein", + "登录并同意" : "Anmelden und zustimmen", + "《隐私政策》" : "Datenschutzrichtlinie", + " 和 " : " und ", + "《用户协议》" : "Nutzungsbedingungen", + "忘记密码" : "Passwort vergessen", + "验证码登录" : "Anmeldung mit Bestätigungscode", + "其他登录方式" : "Andere Anmeldearten", + "用户注册" : "Benutzerregistrierung", + "请输入验证码" : "Bitte geben Sie den Bestätigungscode ein", + "发送验证码":"Bestätigungscode senden", + "点击获取" : "Klicken Sie zum Abrufen", + "登录" : "Anmelden", + "密码登录" : "Passwortanmeldung", + "重置密码":"Passwort zurücksetzen", + "注册" : "Registrieren", + "请输入正确的手机号码" : "Bitte geben Sie die richtige Handynummer ein", + "请求失败" : "Anfrage fehlgeschlagen", + "请求成功!":"Anfrage erfolgreich!", + "加载中...":"Laden...", + "上传中...":"Hochladen...", + "连接中":"Verbinden...", + "连接成功":"Verbindung erfolgreich", + "连接失败":"Verbindung fehlgeschlagen", + "智能体":"Intelligenter Agent", + "已成功更新到云储存空间":"Erfolgreich auf den Cloud-Speicher aktualisiert", + "按日期查找":"Nach Datum suchen", + "绑定安全手机":"Sicherheits-Handy binden", + "内容由AI生成,请仔细甄别":"Inhalt von KI generiert, bitte sorgfältig prüfen", + "松手发送,上移取消":"Loslassen zum Senden, nach oben bewegen zum Abbrechen", + "设置壁纸":"Hintergrundbild einstellen", + "是否保存到相册?":"Möchten Sie es in das Album speichern?", + "保存成功":"Speichern erfolgreich", + "保存失败":"Speichern fehlgeschlagen", + "成功":"Erfolg", + "失败":"Fehler", +] diff --git a/ShenYin/ShenYin/lan/LanConfig.swift b/ShenYin/ShenYin/lan/LanConfig.swift index 3ac9da4..d2ebf59 100644 --- a/ShenYin/ShenYin/lan/LanConfig.swift +++ b/ShenYin/ShenYin/lan/LanConfig.swift @@ -20,9 +20,13 @@ enum AppSupportLanguage{ case malay case Filipino case Singlish + case German + case Arabic + + static var all:[AppSupportLanguage]{ - return [.chinse,.Traditional_Chinese,.english,.japanese,.korean,.spanish,.vietnam,.thai,.malay,.Filipino,.indonesian,.french,.Singlish,.russian] + return [.chinse,.Traditional_Chinese,.english,.japanese,.korean,.spanish,.vietnam,.thai,.malay,.Filipino,.indonesian,.french,.Singlish,.russian,German,Arabic] } var title:String{ switch self { @@ -54,6 +58,10 @@ enum AppSupportLanguage{ return "Singlish" case .russian: return "русский язык" + case .German: + return "Deutsch" + case .Arabic: + return "اللغة العربية" } } var lanCode:String{ @@ -86,6 +94,10 @@ enum AppSupportLanguage{ return "en" case .russian: return "ru" + case .German: + return "de" + case .Arabic: + return "ar" } } var yonghuCode:String{ @@ -118,6 +130,10 @@ enum AppSupportLanguage{ return "en" case .russian: return "ru_RU" + case .German: + return "de" + case .Arabic: + return "ar" } } var map:[String:String]{ @@ -144,13 +160,18 @@ enum AppSupportLanguage{ case .thai: return thaiMap case .Filipino: - return englishMap + return filipinoMap case .Singlish: return englishMap case .Traditional_Chinese: return traditionalChineseMap case .vietnam: return VietnamMap + + case .German: + return germanMap + case .Arabic: + return arabicMap } } diff --git a/ShenYin/ShenYin/lan/TraditionalChinese.swift b/ShenYin/ShenYin/lan/TraditionalChinese.swift index 337acc4..ea09f84 100644 --- a/ShenYin/ShenYin/lan/TraditionalChinese.swift +++ b/ShenYin/ShenYin/lan/TraditionalChinese.swift @@ -232,4 +232,9 @@ let traditionalChineseMap:[String:String] = "内容由AI生成,请仔细甄别":"內容由AI生成,請仔細甄別", "松手发送,上移取消":"松手發送,上移取消", "设置壁纸":"設定壁紙", + "是否保存到相册?":"是否儲存到相簿?", + "保存成功":"儲存成功", + "保存失败":"儲存失敗", + "成功":"成功", + "失败":"失敗", ] diff --git a/ShenYin/ShenYin/lan/Vietnam.swift b/ShenYin/ShenYin/lan/Vietnam.swift index ab8612b..b671be9 100644 --- a/ShenYin/ShenYin/lan/Vietnam.swift +++ b/ShenYin/ShenYin/lan/Vietnam.swift @@ -229,4 +229,9 @@ let VietnamMap:[String:String] = "内容由AI生成,请仔细甄别":"Nội dung được tạo bởi AI, vui lòng kiểm tra kỹ lưỡng", "松手发送,上移取消":"Thả để gá»­i, di chuyển lên để há»§y", "设置壁纸":"Đặt hình nền", + "是否保存到相册?":"Lưu vào album ảnh?", + "保存成功":"Lưu thành công", + "保存失败":"Lưu thất bại", + "成功":"Thành công", + "失败":"Thất bại", ] diff --git a/ShenYin/ShenYin/lan/chinese.swift b/ShenYin/ShenYin/lan/chinese.swift index 07fa714..751332d 100644 --- a/ShenYin/ShenYin/lan/chinese.swift +++ b/ShenYin/ShenYin/lan/chinese.swift @@ -229,5 +229,10 @@ let chineseMap:[String:String] = "内容由AI生成,请仔细甄别":"", "松手发送,上移取消":"", "设置壁纸":"", + "是否保存到相册?":"", + "保存成功":"", + "保存失败":"", + "成功":"", + "失败":"", ] diff --git a/ShenYin/ShenYin/lan/english.swift b/ShenYin/ShenYin/lan/english.swift index 1ed7132..e61ca9e 100644 --- a/ShenYin/ShenYin/lan/english.swift +++ b/ShenYin/ShenYin/lan/english.swift @@ -229,4 +229,9 @@ let englishMap:[String:String] = "内容由AI生成,请仔细甄别":"Content generated by AI, please verify carefully", "松手发送,上移取消":"Release to send, move up to cancel", "设置壁纸":"Set wallpaper", + "是否保存到相册?":"Save to photo album?", + "保存成功":"Save successful", + "保存失败":"Save failed", + "成功":"Success", + "失败":"Failed", ] diff --git a/ShenYin/ShenYin/lan/french.swift b/ShenYin/ShenYin/lan/french.swift index 1d1cddc..0cf9898 100644 --- a/ShenYin/ShenYin/lan/french.swift +++ b/ShenYin/ShenYin/lan/french.swift @@ -230,4 +230,9 @@ let frenchMap:[String:String] = "内容由AI生成,请仔细甄别":"Contenu généré par IA, veuillez vérifier attentivement", "松手发送,上移取消":"Relâchez pour envoyer, déplacez vers le haut pour annuler", "设置壁纸":"Définir l'arrière-plan", + "是否保存到相册?":"Enregistrer dans l'album photo?", + "保存成功":"Enregistrement réussi", + "保存失败":"Échec de l'enregistrement", + "成功":"Succès", + "失败":"Échec", ] diff --git a/ShenYin/ShenYin/lan/indonesian.swift b/ShenYin/ShenYin/lan/indonesian.swift index aaafdd4..2b67e98 100644 --- a/ShenYin/ShenYin/lan/indonesian.swift +++ b/ShenYin/ShenYin/lan/indonesian.swift @@ -229,5 +229,10 @@ let indonesianMap:[String:String] = "绑定安全手机":"Hubungkan ponsel aman", "内容由AI生成,请仔细甄别":"Konten dihasilkan oleh AI, silakan verifikasi dengan saksama", "松手发送,上移取消":"Lepaskan untuk mengirim, pindahkan ke atas untuk membatalkan", - "设置壁纸":"Atur wallpaper", + "设置壁纸":"Atur wallpaper", + "是否保存到相册?":"Simpan ke album foto?", + "保存成功":"Simpan berhasil", + "保存失败":"Simpan gagal", + "成功":"Berhasil", + "失败":"Gagal", ] diff --git a/ShenYin/ShenYin/lan/japanese.swift b/ShenYin/ShenYin/lan/japanese.swift index 710b4a0..2030025 100644 --- a/ShenYin/ShenYin/lan/japanese.swift +++ b/ShenYin/ShenYin/lan/japanese.swift @@ -229,7 +229,12 @@ let japaneseMap:[String:String] = "绑定安全手机":"安全な携帯電話", "内容由AI生成,请仔细甄别":"コンテンツはAIによって生成されたものです、詳細に確認してください", "松手发送,上移取消":"手を離して送信、上に移動してキャンセル", - "设置壁纸":"壁紙を設定", + "设置壁纸":"壁紙を設定", + "是否保存到相册?":"アルバムに保存しますか?", + "保存成功":"保存が成功しました", + "保存失败":"保存に失敗しました", + "成功":"成功", + "失败":"失敗", ] diff --git a/ShenYin/ShenYin/lan/korean.swift b/ShenYin/ShenYin/lan/korean.swift index 710fa4d..3c45520 100644 --- a/ShenYin/ShenYin/lan/korean.swift +++ b/ShenYin/ShenYin/lan/korean.swift @@ -229,4 +229,9 @@ let koreanMap:[String:String] = "内容由AI生成,请仔细甄别":"컨텐츠는 AI가 생성한 것이므로, 신중하게 판별해 주세요", "松手发送,上移取消":"손을 떼면 전송하고, 위로 이동하면 취소", "设置壁纸":"배경화면 설정", + "是否保存到相册?":"앨범에 저장하시겠습니까?", + "保存成功":"저장 성공", + "保存失败":"저장 실패", + "成功":"성공", + "失败":"실패", ] diff --git a/ShenYin/ShenYin/lan/malay.swift b/ShenYin/ShenYin/lan/malay.swift index c81010f..05067a0 100644 --- a/ShenYin/ShenYin/lan/malay.swift +++ b/ShenYin/ShenYin/lan/malay.swift @@ -224,5 +224,10 @@ let malayMap:[String:String] = "绑定安全手机":"Hubungkan telefon selamat", "内容由AI生成,请仔细甄别":"Kandungan dijana oleh AI, sila semak dengan teliti", "松手发送,上移取消":"Lepaskan untuk menghantar, gerakkan ke atas untuk membatalkan", - "设置壁纸":"Tetapkan wallpaper", + "设置壁纸":"Tetapkan wallpaper", + "是否保存到相册?":"Simpan ke album foto?", + "保存成功":"Simpan berjaya", + "保存失败":"Simpan gagal", + "成功":"Berjaya", + "失败":"Gagal", ] diff --git a/ShenYin/ShenYin/lan/russian.swift b/ShenYin/ShenYin/lan/russian.swift index 2efbbf9..94f871f 100644 --- a/ShenYin/ShenYin/lan/russian.swift +++ b/ShenYin/ShenYin/lan/russian.swift @@ -224,4 +224,9 @@ let russianMap:[String:String] = "内容由AI生成,请仔细甄别":"Контент сгенерирован ИИ, пожалуйста, тщательно проверяйте", "松手发送,上移取消":"Отпустите, чтобы отправить, переместите вверх, чтобы отменить", "设置壁纸":"Установить обои", + "是否保存到相册?":"Сохранить в фотоальбом?", + "保存成功":"Сохранение успешно", + "保存失败":"Сохранение не удалось", + "成功":"Успех", + "失败":"Не удалось", ] diff --git a/ShenYin/ShenYin/lan/spanish.swift b/ShenYin/ShenYin/lan/spanish.swift index 7791fef..a3e93e4 100644 --- a/ShenYin/ShenYin/lan/spanish.swift +++ b/ShenYin/ShenYin/lan/spanish.swift @@ -229,5 +229,10 @@ let spanishMap:[String:String] = "绑定安全手机":"Vincular teléfono móvil seguro", "内容由AI生成,请仔细甄别":"Contenido generado por IA, por favor verifique cuidadosamente", "松手发送,上移取消":"Suelte para enviar, mueva hacia arriba para cancelar", - "设置壁纸":"Establecer fondo de pantalla", + "设置壁纸":"Establecer fondo de pantalla", + "是否保存到相册?":"¿Guardar en el álbum de fotos?", + "保存成功":"Guardado exitosamente", + "保存失败":"Guardado fallido", + "成功":"Éxito", + "失败":"Fallido", ] diff --git a/ShenYin/ShenYin/lan/thai.swift b/ShenYin/ShenYin/lan/thai.swift index 77988f4..7aad59c 100644 --- a/ShenYin/ShenYin/lan/thai.swift +++ b/ShenYin/ShenYin/lan/thai.swift @@ -229,4 +229,9 @@ let thaiMap:[String:String] = "内容由AI生成,请仔细甄别":"เนื้อหาถูกสร้างโดย AI โปรดตรวจสอบอย่างละเอียด", "松手发送,上移取消":"ปล่อยเพื่อส่ง ย้ายขึ้นเพื่อยกเลิก", "设置壁纸":"ตั้งภาพพื้นหลัง", + "是否保存到相册?":"บันทึกเข้าอัลบั้มภาพหรือไม่?", + "保存成功":"บันทึกสำเร็จ", + "保存失败":"บันทึกไม่สำเร็จ", + "成功":"สำเร็จ", + "失败":"ไม่สำเร็จ", ]