From: liangzhenying <867174124@qq.com> Date: Thu, 20 Nov 2025 07:47:11 +0000 (+0800) Subject: AI对话增加上划取消 X-Git-Tag: 1.0.2~59 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=e1853414456bcaf995094ebe3b70d0db187b2c61;p=mirrors%2FShenYin.git AI对话增加上划取消 --- diff --git a/ShenYin/ShenYin/Api/HttpClient2.swift b/ShenYin/ShenYin/Api/HttpClient2.swift index 112ad6a..d0559e3 100644 --- a/ShenYin/ShenYin/Api/HttpClient2.swift +++ b/ShenYin/ShenYin/Api/HttpClient2.swift @@ -122,6 +122,8 @@ enum CommomApi case voiceRecordList(param:[String:Any]) ///收藏,或者取消收藏 case voiceRecordCollection(param:[String:Any]) + /// 获取背景图 + case backgroundList } // 实现TargetType协议 @@ -262,7 +264,8 @@ extension CommomApi{ case .voiceRecordCollection(let param): return "/res/voice-record/favorite/\(param["recordId"]!)?favorite=\(param["favorite"]!)" - + case .backgroundList: + return "/dev/devBg/list" } } diff --git a/ShenYin/ShenYin/Cache/TipsCache.swift b/ShenYin/ShenYin/Cache/TipsCache.swift index e41de2e..01f4a93 100644 --- a/ShenYin/ShenYin/Cache/TipsCache.swift +++ b/ShenYin/ShenYin/Cache/TipsCache.swift @@ -44,3 +44,15 @@ class RoleCache{ return nil } } +class BackgroundCache{ + static func save(url:String){ + UserDefaults.standard.set(url, forKey: "BackgroundCache") + UserDefaults.standard.synchronize() + } + static func get()->String?{ + if let value = UserDefaults.standard.value(forKey: "BackgroundCache"),let obj = value as? String { + return obj + } + return nil + } +} diff --git a/ShenYin/ShenYin/Launch/AppLaunch.swift b/ShenYin/ShenYin/Launch/AppLaunch.swift index e751598..ca18bc3 100644 --- a/ShenYin/ShenYin/Launch/AppLaunch.swift +++ b/ShenYin/ShenYin/Launch/AppLaunch.swift @@ -40,5 +40,6 @@ class AppLaunch:NSObject{ else{ App.shared.goToLogin() } +// App.shared.window?.rootViewController = ChatVC() } } diff --git a/ShenYin/ShenYin/UI/Base/BaseTC.swift b/ShenYin/ShenYin/UI/Base/BaseTC.swift index 294fb83..bcc2891 100644 --- a/ShenYin/ShenYin/UI/Base/BaseTC.swift +++ b/ShenYin/ShenYin/UI/Base/BaseTC.swift @@ -51,7 +51,7 @@ class BaseTC:UITabBarController{ appearance.stackedLayoutAppearance.normal.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.rgb(0x8D8D8D)] appearance.stackedLayoutAppearance.selected.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.rgb(0x121212)] self.tabBar.standardAppearance = appearance - self.tabBar.backgroundColor = .white + self.tabBar.backgroundColor = .clear view.backgroundColor = .color(.bgColor) // self.selectedIndex = 2 diff --git a/ShenYin/ShenYin/UI/Home/Chat/ChatRecordBar.swift b/ShenYin/ShenYin/UI/Home/Chat/ChatRecordBar.swift index ed5b7cc..ba72fe0 100644 --- a/ShenYin/ShenYin/UI/Home/Chat/ChatRecordBar.swift +++ b/ShenYin/ShenYin/UI/Home/Chat/ChatRecordBar.swift @@ -7,83 +7,37 @@ @objc protocol ChatRecordBarDelegate { func recordBarStart(_ toolBar:ChatRecordBar) + func recordBarCancel(_ toolBar:ChatRecordBar) func recordBarStop(_ toolBar:ChatRecordBar) } class ChatRecordBar:BaseView{ - private var label = UILabel() - private var animationBg = UIView() - private var animationView = UIImageView() + let recordBtn = RecordButton() weak var delegate:ChatRecordBarDelegate? - - var isRecord:Bool = false{ - didSet{ - if isRecord { - animationBg.backgroundColor = .hexString("#0092E1") - animationView.isHidden = false - label.text = "" - } - else{ - animationBg.backgroundColor = .white - animationView.isHidden = true - animationView.isHidden = true - label.text = "按住说话".l10n - } - } - } - - override func setupViews() { - addSubview(animationBg) - animationBg.addSubviews([label,animationView]) - - backgroundColor = .clear - label.do { v in - v.textColor = .hexString("#121212") - v.font = .bold(16) - v.textAlignment = .center - } - - animationBg.do { v in - v.yc.setCornerRadius(16) - animationBg.backgroundColor = .white - } - - animationView.kf.setImage(with: Bundle.main.url(forResource: "dialog_record", withExtension: "gif")!) - self.isRecord = false - let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:))) - self.addGestureRecognizer(longPressGesture) - - } - override func setupLayout() { - animationBg.snp.makeConstraints { make in - make.left.right.equalToSuperview().inset(18) + override func setupViews() { +// recordBtn.yc.setCornerRadius(16) + addSubview(recordBtn) + recordBtn.snp.makeConstraints { make in + make.left.right.equalToSuperview() make.top.height.equalToSuperview() } - animationView.snp.makeConstraints { make in - make.width.equalTo(218) - make.height.equalTo(24) - make.center.equalToSuperview() - } - label.snp.makeConstraints { make in - make.edges.equalToSuperview() - } - } - - @objc func handleLongPress(_ gesture: UILongPressGestureRecognizer) { - switch gesture.state { - case.began: - Logger.debug("started") - self.isRecord = true - delegate?.recordBarStart(self) - case.ended: - Logger.debug("ended") - self.isRecord = false - delegate?.recordBarStop(self) - default: - break + + // 监听状态变化 + recordBtn.onStatusChanged = { [weak self] status in + guard let self = self else { return } + switch status { + case .start: + Logger.debug("开始录音(模拟)") + delegate?.recordBarStart(self) + case .cancel: + Logger.debug("取消录音(模拟)") + delegate?.recordBarCancel(self) + case .finish: + Logger.debug("发送录音(模拟)") + delegate?.recordBarStop(self) + } } } - } diff --git a/ShenYin/ShenYin/UI/Home/Chat/ChatVC.swift b/ShenYin/ShenYin/UI/Home/Chat/ChatVC.swift index eb0bbd2..57577cc 100644 --- a/ShenYin/ShenYin/UI/Home/Chat/ChatVC.swift +++ b/ShenYin/ShenYin/UI/Home/Chat/ChatVC.swift @@ -86,10 +86,10 @@ class ChatVC:BaseVC{ guard let self = self else { return } switch code { case .startRecord: - toolBar.isRecord = true + toolBar.recordBtn.state = .start break case .stopRecord: - toolBar.isRecord = false + toolBar.recordBtn.state = .finish break default: break @@ -179,8 +179,16 @@ class ChatVC:BaseVC{ } extension ChatVC:ChatRecordBarDelegate{ + func recordBarCancel(_ toolBar: ChatRecordBar) { + JoyGemChatManager.shared().stopChat() + JoyGemChatManager.shared().stopSingleChat() + if let item = JoySdkManager.shared.dataList.last,item.content.isEmpty{ + JoySdkManager.shared.dataList.removeLast() + refreshData() + } + } + func recordBarStart(_ toolBar: ChatRecordBar) { - let model = ChatCellModel() model.type = 1 model.content = "" diff --git a/ShenYin/ShenYin/UI/Home/Chat/RecordButton.swift b/ShenYin/ShenYin/UI/Home/Chat/RecordButton.swift new file mode 100644 index 0000000..bb9eb9d --- /dev/null +++ b/ShenYin/ShenYin/UI/Home/Chat/RecordButton.swift @@ -0,0 +1,182 @@ +// +// Untitled.swift +// ShenYin +// +// Created by liangshi on 2025/11/19. +// + +import UIKit +import SnapKit + +// 对讲状态回调 +enum RecordStatus { + case start // 开始(按住) + case cancel // 取消(上划) + case finish // 完成(松开) +} + +class RecordButton: UIView { + + private var animationBg = UIView() + private var animationView = UIImageView() + + + // 回调闭包 + var onStatusChanged: ((RecordStatus) -> Void)? + + // 配置属性 + private let normalColor = UIColor.white + private let recordingColor = UIColor.hexString("#0092E1") + private let cancelColor = UIColor.red + private let titleLabel = UILabel() + private let cancelLabel = UILabel() + + // 状态标识 + private var isRecording = false + private var isCanceling = false + + // 取消阈值(可根据需求调整) + private let cancelThreshold: CGFloat = 30 + + var state:RecordStatus = .start{ + didSet{ + if state == .start { + animationBg.backgroundColor = .hexString("#0092E1") + animationView.isHidden = false + titleLabel.isHidden = true + cancelLabel.isHidden = true + } + else{ + animationBg.backgroundColor = .white + animationView.isHidden = true + animationView.isHidden = true + titleLabel.isHidden = state != .finish + cancelLabel.isHidden = true + } + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupUI() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupUI() + } + + private func setupUI() { + // 基本样式 +// backgroundColor = normalColor +// layer.cornerRadius = 0 // 圆角在 layoutSubviews 中设置(保证正方形) +// clipsToBounds = true + + + titleLabel.do { v in + v.textColor = .hexString("#121212") + v.font = .bold(16) + v.textAlignment = .center + titleLabel.text = "按住说话".l10n + } + cancelLabel.do { v in + v.textColor = .hexString("#666666") + v.font = .regular(12) + v.textAlignment = .center + v.text = "松手发送,上移取消".l10n + } + + animationBg.do { v in + v.yc.setCornerRadius(16) + animationBg.backgroundColor = .white + } + + animationView.kf.setImage(with: Bundle.main.url(forResource: "dialog_record", withExtension: "gif")!) + self.updateUI() + + addSubviews([animationBg,cancelLabel]) + animationBg.addSubviews([titleLabel,animationView]) + titleLabel.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + cancelLabel.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalTo(-30) + } + animationBg.snp.makeConstraints { make in + make.left.right.equalToSuperview().inset(18) + make.top.height.equalToSuperview() + } + animationView.snp.makeConstraints { make in + make.width.equalTo(218) + make.height.equalTo(24) + make.center.equalToSuperview() + } + } + + // 触摸开始(按住) + override func touchesBegan(_ touches: Set, with event: UIEvent?) { + super.touchesBegan(touches, with: event) + isRecording = true + isCanceling = false + state = .start + updateUI() + onStatusChanged?(.start) + } + + override func touchesMoved(_ touches: Set, with event: UIEvent?) { + super.touchesMoved(touches, with: event) + guard isRecording, let touch = touches.first else { return } + let location = touch.location(in: self) + isCanceling = location.y < -cancelThreshold + + updateUI() + } + + override func touchesEnded(_ touches: Set, with event: UIEvent?) { + super.touchesEnded(touches, with: event) + defer { + // 重置状态 + isRecording = false + isCanceling = false + updateUI() + } + + guard isRecording else { return } + state = isCanceling ? .cancel : .finish + onStatusChanged?(isCanceling ? .cancel : .finish) + } + + override func touchesCancelled(_ touches: Set, with event: UIEvent?) { + super.touchesCancelled(touches, with: event) + isRecording = false + isCanceling = false + state = .cancel + updateUI() + onStatusChanged?(.cancel) + } + + private func updateUI() { + if isRecording { + animationView.isHidden = false + if isCanceling { + animationBg.backgroundColor = .red + cancelLabel.isHidden = false + titleLabel.isHidden = true + } + else{ + cancelLabel.isHidden = true + titleLabel.isHidden = true + animationBg.backgroundColor = .hexString("#0092E1") + } + } else { + titleLabel.isHidden = false + cancelLabel.isHidden = true + + animationBg.backgroundColor = .white + animationView.isHidden = true + animationView.isHidden = true + } + } + +} diff --git a/ShenYin/ShenYin/UI/Home/Device/BackgroundModel.swift b/ShenYin/ShenYin/UI/Home/Device/BackgroundModel.swift new file mode 100644 index 0000000..4c9af58 --- /dev/null +++ b/ShenYin/ShenYin/UI/Home/Device/BackgroundModel.swift @@ -0,0 +1,19 @@ +// +// BackgroundModel.swift +// ShenYin +// +// Created by liangshi on 2025/11/20. +// + +import HandyJSON + +class BackgroundModelRoot:ResponseBaseModel { + var data = [BackgroundModel]() +} + +class BackgroundModel:HandyJSON { + var id = "" + var name = "" + var bgPath = "" + required public init() { } +} diff --git a/ShenYin/ShenYin/UI/Home/Device/BackgroundVC.swift b/ShenYin/ShenYin/UI/Home/Device/BackgroundVC.swift new file mode 100644 index 0000000..909329d --- /dev/null +++ b/ShenYin/ShenYin/UI/Home/Device/BackgroundVC.swift @@ -0,0 +1,130 @@ +// +// BackgroundVC.swift +// ShenYin +// +// Created by liangshi on 2025/11/20. +// + +import UIKit +import JXSegmentedView +import MJRefresh + +class BackgroundVC: BaseVC{ + private var collectionView:UICollectionView! + var dataList = [BackgroundModel]() + var didSelected:((String)->Void)? + var currentUrl:String = "" + + override func setupViews() { + let layout = UICollectionViewFlowLayout() + // layout.minimumInteritemSpacing = 10.fitR + layout.minimumLineSpacing = 18 + layout.itemSize = CGSize(width: (kScreenWid-62)/3, height: 156) + collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: layout) + view.addSubview(collectionView) + + collectionView.do { (v) in + v.dataSource = self + v.delegate = self + v.backgroundColor = .clear + v.bounces = true + v.contentInset = UIEdgeInsets(top: 0, left: 18, bottom: 0, right: 18) + v.register(BackgroundCell.self, forCellWithReuseIdentifier: BackgroundCell.reuseID) + } + } + + override func setupLayout() { + collectionView.snp.makeConstraints { (m) in + m.top.equalToSuperview().inset(kNavBtm) + m.left.right.bottom.equalToSuperview() + } + } + override func setupData() { + currentUrl = BackgroundCache.get() ?? "" + HttpClient.request(.backgroundList) {[weak self] (model:BackgroundModelRoot,res) in + guard let self = self else {return} + if model.isSuccess{ + dataList = model.data + collectionView.reloadData() + } + } + } +} +extension BackgroundVC:UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout { + func numberOfSections(in collectionView: UICollectionView) -> Int { + return 1 + } + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return dataList.count + } + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = BackgroundCell.cell(withCollectionView: collectionView, indexPath: indexPath) + cell.model = dataList[indexPath.row] + cell.isCurrent = dataList[indexPath.row].bgPath == currentUrl + return cell + } + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let model = dataList[indexPath.row] + didSelected?(model.bgPath) + BackgroundCache.save(url: model.bgPath) + App.shared.popPage() + } +} +class BackgroundCell: BaseCollectionViewCell { + let bgView = UIView() + let imgV = UIImageView() + let titleLab = UILabel() + var isCurrent:Bool = false{ + didSet{ + if isCurrent { + imgV.yc.setBorder(width: 3, color: .color(.theme), radius: 12) + } + else{ + imgV.yc.setBorder(width: 0, color: .color(.theme), radius: 12) + } + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + contentView.addSubview(bgView) + bgView.addSubview(imgV) + bgView.addSubview(titleLab) + +// bgView.yc.setCornerRadius(12) +// bgView.clipsToBounds = true +// bgView.backgroundColor = .white + bgView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + imgV.snp.makeConstraints { (make) in + make.edges.equalToSuperview() + } + + titleLab.snp.makeConstraints { (make) in + make.left.equalToSuperview().inset(12) + make.bottom.equalToSuperview().inset(18) + } + + titleLab.textColor = .white + titleLab.font = .medium(16) + + imgV.do { v in + v.contentMode = .scaleAspectFill + v.clipsToBounds = true + v.yc.setCornerRadius(12) + } + } + + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + var model:BackgroundModel!{ + didSet{ +// titleLab.text = model.name + imgV.kf.setImage(with: model.bgPath.yc.asUrl) + } + } +} diff --git a/ShenYin/ShenYin/UI/Home/Device/HomeDeviceVC.swift b/ShenYin/ShenYin/UI/Home/Device/HomeDeviceVC.swift index 1c576bb..5b3c899 100644 --- a/ShenYin/ShenYin/UI/Home/Device/HomeDeviceVC.swift +++ b/ShenYin/ShenYin/UI/Home/Device/HomeDeviceVC.swift @@ -10,6 +10,7 @@ import UIKit class HomeDeviceVC:BaseVC{ private var collectionView:UICollectionView! let imgView = UIImageView() + let edtLabel = UILabel() override func viewDidLoad() { super.viewDidLoad() @@ -31,7 +32,7 @@ class HomeDeviceVC:BaseVC{ layout.minimumLineSpacing = 18 layout.itemSize = CGSize(width: (kScreenWid-54)/2, height: 128) collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: layout) - view.addSubviews([imgView,collectionView]) + view.addSubviews([imgView,collectionView,edtLabel]) collectionView.do { (v) in v.dataSource = self @@ -44,7 +45,21 @@ class HomeDeviceVC:BaseVC{ } imgView.do { v in // v.backgroundColor = .red - v.image = UIImage(named: "home_bg") + 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.font = .regular(12) + v.backgroundColor = .hexString("#FAFAFA") + v.textColor = .hexString("#4E4E4E") + v.textAlignment = .center + v.yc.setCornerRadius(13) + v.yc.addTap(target: self, action: #selector(editAction)) } } override func setupLayout() { @@ -55,6 +70,12 @@ class HomeDeviceVC:BaseVC{ imgView.snp.makeConstraints { make in make.edges.equalToSuperview() } + edtLabel.snp.makeConstraints { make in + make.width.equalTo(72) + make.height.equalTo(26) + make.centerX.equalToSuperview() + make.bottom.equalToSuperview().inset(120) + } } func reloadData() { DeviceVM.shared.refresh {[weak self] result in @@ -73,18 +94,17 @@ class HomeDeviceVC:BaseVC{ } } override func navRightViewTapped() { - // App.shared.goToPage(AddDeviceVC()) - // let v = BasePickerView() - // v.setupData(["2","3","4","5","6","7","8"]) - // v.selectedIndex(4) - // v.show(animate: true) - App.shared.goToPage(BleScanVC()) // App.shared.goToPage(CalendarPickerVC()) - // BleManager.shared.checkSettingsConnected() } - + @objc func editAction(){ + let vc = BackgroundVC() + vc.didSelected = {[weak self] url in + self?.imgView.kf.setImage(with: url.yc.asUrl) + } + App.shared.goToPage(vc) + } func unbindAction(_ deviceModel:HomeDeviceModel){ YLprogressHUD.showLoading() diff --git a/ShenYin/ShenYin/lan/TraditionalChinese.swift b/ShenYin/ShenYin/lan/TraditionalChinese.swift index 60869eb..337acc4 100644 --- a/ShenYin/ShenYin/lan/TraditionalChinese.swift +++ b/ShenYin/ShenYin/lan/TraditionalChinese.swift @@ -230,4 +230,6 @@ let traditionalChineseMap:[String:String] = "按日期查找":"按日期查詢", "绑定安全手机":"綁定安全手機", "内容由AI生成,请仔细甄别":"內容由AI生成,請仔細甄別", + "松手发送,上移取消":"松手發送,上移取消", + "设置壁纸":"設定壁紙", ] diff --git a/ShenYin/ShenYin/lan/Vietnam.swift b/ShenYin/ShenYin/lan/Vietnam.swift index 231bf88..ab8612b 100644 --- a/ShenYin/ShenYin/lan/Vietnam.swift +++ b/ShenYin/ShenYin/lan/Vietnam.swift @@ -226,5 +226,7 @@ let VietnamMap:[String:String] = "已成功更新到云储存空间":"Đã cập nhật thành công lên kho lưu trữ đám mây", "按日期查找":"Tìm kiếm theo ngày", "绑定安全手机":"Li kết nối điện an toàn", - "内容由AI生成,请仔细甄别":"Nội dung được tạo bởi AI, vui lòng kiểm tra kỹ lưỡng", + "内容由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", ] diff --git a/ShenYin/ShenYin/lan/chinese.swift b/ShenYin/ShenYin/lan/chinese.swift index 1227707..07fa714 100644 --- a/ShenYin/ShenYin/lan/chinese.swift +++ b/ShenYin/ShenYin/lan/chinese.swift @@ -227,5 +227,7 @@ let chineseMap:[String:String] = "按日期查找":"", "绑定安全手机":"", "内容由AI生成,请仔细甄别":"", + "松手发送,上移取消":"", + "设置壁纸":"", ] diff --git a/ShenYin/ShenYin/lan/english.swift b/ShenYin/ShenYin/lan/english.swift index 3a9db1f..1ed7132 100644 --- a/ShenYin/ShenYin/lan/english.swift +++ b/ShenYin/ShenYin/lan/english.swift @@ -226,5 +226,7 @@ let englishMap:[String:String] = "已成功更新到云储存空间":"Successfully updated to cloud storage space", "按日期查找":"Search by Date", "绑定安全手机":"Bind Secure Mobile Phone", - "内容由AI生成,请仔细甄别":"Content generated by AI, please verify carefully", + "内容由AI生成,请仔细甄别":"Content generated by AI, please verify carefully", + "松手发送,上移取消":"Release to send, move up to cancel", + "设置壁纸":"Set wallpaper", ] diff --git a/ShenYin/ShenYin/lan/french.swift b/ShenYin/ShenYin/lan/french.swift index ac62f7f..1d1cddc 100644 --- a/ShenYin/ShenYin/lan/french.swift +++ b/ShenYin/ShenYin/lan/french.swift @@ -227,5 +227,7 @@ let frenchMap:[String:String] = "已成功更新到云储存空间":"Mise à jour réussie dans l'espace de stockage cloud", "按日期查找":"Rechercher par date", "绑定安全手机":"Lier le téléphone sécurisé", - "内容由AI生成,请仔细甄别":"Contenu généré par IA, veuillez vérifier attentivement", + "内容由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", ] diff --git a/ShenYin/ShenYin/lan/indonesian.swift b/ShenYin/ShenYin/lan/indonesian.swift index cf2622d..aaafdd4 100644 --- a/ShenYin/ShenYin/lan/indonesian.swift +++ b/ShenYin/ShenYin/lan/indonesian.swift @@ -227,5 +227,7 @@ let indonesianMap:[String:String] = "已成功更新到云储存空间":"Berhasil diperbarui ke ruang penyimpanan cloud", "按日期查找":"Cari berdasarkan tanggal", "绑定安全手机":"Hubungkan ponsel aman", - "内容由AI生成,请仔细甄别":"Konten dihasilkan oleh AI, silakan verifikasi dengan saksama", + "内容由AI生成,请仔细甄别":"Konten dihasilkan oleh AI, silakan verifikasi dengan saksama", + "松手发送,上移取消":"Lepaskan untuk mengirim, pindahkan ke atas untuk membatalkan", + "设置壁纸":"Atur wallpaper", ] diff --git a/ShenYin/ShenYin/lan/japanese.swift b/ShenYin/ShenYin/lan/japanese.swift index 7cc8b97..710b4a0 100644 --- a/ShenYin/ShenYin/lan/japanese.swift +++ b/ShenYin/ShenYin/lan/japanese.swift @@ -227,7 +227,9 @@ let japaneseMap:[String:String] = "已成功更新到云储存空间":"クラウドストレージスペースに正常に更新されました", "按日期查找":"日付", "绑定安全手机":"安全な携帯電話", - "内容由AI生成,请仔细甄别":"コンテンツはAIによって生成されたものです、詳細に確認してください", + "内容由AI生成,请仔细甄别":"コンテンツはAIによって生成されたものです、詳細に確認してください", + "松手发送,上移取消":"手を離して送信、上に移動してキャンセル", + "设置壁纸":"壁紙を設定", ] diff --git a/ShenYin/ShenYin/lan/korean.swift b/ShenYin/ShenYin/lan/korean.swift index 695834a..710fa4d 100644 --- a/ShenYin/ShenYin/lan/korean.swift +++ b/ShenYin/ShenYin/lan/korean.swift @@ -226,5 +226,7 @@ let koreanMap:[String:String] = "已成功更新到云储存空间":"클라우드 저장 공간에 성공적으로 업데이트되었습니다", "按日期查找":"날짜별 검색", "绑定安全手机":"보안 휴대폰 연결", - "内容由AI生成,请仔细甄别":"컨텐츠는 AI가 생성한 것이므로, 신중하게 판별해 주세요", + "内容由AI生成,请仔细甄别":"컨텐츠는 AI가 생성한 것이므로, 신중하게 판별해 주세요", + "松手发送,上移取消":"손을 떼면 전송하고, 위로 이동하면 취소", + "设置壁纸":"배경화면 설정", ] diff --git a/ShenYin/ShenYin/lan/malay.swift b/ShenYin/ShenYin/lan/malay.swift index 6433c15..c81010f 100644 --- a/ShenYin/ShenYin/lan/malay.swift +++ b/ShenYin/ShenYin/lan/malay.swift @@ -223,4 +223,6 @@ let malayMap:[String:String] = "按日期查找":"Cari mengikut tarikh", "绑定安全手机":"Hubungkan telefon selamat", "内容由AI生成,请仔细甄别":"Kandungan dijana oleh AI, sila semak dengan teliti", + "松手发送,上移取消":"Lepaskan untuk menghantar, gerakkan ke atas untuk membatalkan", + "设置壁纸":"Tetapkan wallpaper", ] diff --git a/ShenYin/ShenYin/lan/russian.swift b/ShenYin/ShenYin/lan/russian.swift index b21509d..2efbbf9 100644 --- a/ShenYin/ShenYin/lan/russian.swift +++ b/ShenYin/ShenYin/lan/russian.swift @@ -221,5 +221,7 @@ let russianMap:[String:String] = "已成功更新到云储存空间":"Успешно обновлено в облачное хранилище", "按日期查找":"Поиск по дате", "绑定安全手机":"Привязать безопасный мобильный телефон", - "内容由AI生成,请仔细甄别":"Контент сгенерирован ИИ, пожалуйста, тщательно проверяйте", + "内容由AI生成,请仔细甄别":"Контент сгенерирован ИИ, пожалуйста, тщательно проверяйте", + "松手发送,上移取消":"Отпустите, чтобы отправить, переместите вверх, чтобы отменить", + "设置壁纸":"Установить обои", ] diff --git a/ShenYin/ShenYin/lan/spanish.swift b/ShenYin/ShenYin/lan/spanish.swift index 2e0cda4..7791fef 100644 --- a/ShenYin/ShenYin/lan/spanish.swift +++ b/ShenYin/ShenYin/lan/spanish.swift @@ -228,4 +228,6 @@ let spanishMap:[String:String] = "按日期查找":"Buscar por fecha", "绑定安全手机":"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", ] diff --git a/ShenYin/ShenYin/lan/thai.swift b/ShenYin/ShenYin/lan/thai.swift index 950f72a..77988f4 100644 --- a/ShenYin/ShenYin/lan/thai.swift +++ b/ShenYin/ShenYin/lan/thai.swift @@ -226,5 +226,7 @@ let thaiMap:[String:String] = "已成功更新到云储存空间":"อัปเดต到พื้นที่เก็บข้อมูลคลาวด์สำเร็จแล้ว", "按日期查找":"ค้น โดยตามวันที่", "绑定安全手机":"เชื่อมโยงโทรศัพท์มือถือปลอดภัย", - "内容由AI生成,请仔细甄别":"เนื้อหาถูกสร้างโดย AI โปรดตรวจสอบอย่างละเอียด", + "内容由AI生成,请仔细甄别":"เนื้อหาถูกสร้างโดย AI โปรดตรวจสอบอย่างละเอียด", + "松手发送,上移取消":"ปล่อยเพื่อส่ง ย้ายขึ้นเพื่อยกเลิก", + "设置壁纸":"ตั้งภาพพื้นหลัง", ]