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/?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 à¹à¸à¸£à¸à¸à¸£à¸§à¸à¸ªà¸à¸à¸à¸¢à¹à¸²à¸à¸¥à¸°à¹à¸à¸µà¸¢à¸",
"æ¾æåéï¼ä¸ç§»åæ¶":"à¸à¸¥à¹à¸à¸¢à¹à¸à¸·à¹à¸à¸ªà¹à¸ ยà¹à¸²à¸¢à¸à¸¶à¹à¸à¹à¸à¸·à¹à¸à¸¢à¸à¹à¸¥à¸´à¸",
"设置å£çº¸":"à¸à¸±à¹à¸à¸ าà¸à¸à¸·à¹à¸à¸«à¸¥à¸±à¸",
+ "æ¯å¦ä¿åå°ç¸åï¼":"à¸à¸±à¸à¸à¸¶à¸à¹à¸à¹à¸²à¸à¸±à¸¥à¸à¸±à¹à¸¡à¸ าà¸à¸«à¸£à¸·à¸à¹à¸¡à¹ï¼",
+ "ä¿åæå":"à¸à¸±à¸à¸à¸¶à¸à¸ªà¸³à¹à¸£à¹à¸",
+ "ä¿å失败":"à¸à¸±à¸à¸à¸¶à¸à¹à¸¡à¹à¸ªà¸³à¹à¸£à¹à¸",
+ "æå":"สำà¹à¸£à¹à¸",
+ "失败":"à¹à¸¡à¹à¸ªà¸³à¹à¸£à¹à¸",
]