Sfoglia il codice sorgente

feat:3.6.4(1)提测
增加 西班牙和阿拉伯语言

100Years 2 mesi fa
parent
commit
6f66673382
24 ha cambiato i file con 596 aggiunte e 715 eliminazioni
  1. 28 19
      TSLiveWallpaper.xcodeproj/project.pbxproj
  2. 1 1
      TSLiveWallpaper/AppDelegate.swift
  3. 24 9
      TSLiveWallpaper/Business/TSAIListVC/TSAIListHistoryVC/TSAIListHistoryVC.swift
  4. 1 1
      TSLiveWallpaper/Business/TSAIListVC/TSAIListVC/TSAIListVC.swift
  5. 23 0
      TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsBrowserCell.swift
  6. 131 0
      TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsBrowserVC.swift
  7. 13 4
      TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC.swift
  8. 1 1
      TSLiveWallpaper/Business/TSBusinessWebVC/TSBusinessWebVC.swift
  9. 6 5
      TSLiveWallpaper/Business/TSMineVC/View/TSMineTopView.swift
  10. 9 9
      TSLiveWallpaper/Business/TSPurchaseMembershipVC/TSPurchaseVC.swift
  11. 2 2
      TSLiveWallpaper/Common/Purchase/TSPurchaseEnum.swift
  12. 5 5
      TSLiveWallpaper/Common/Purchase/TSPurchaseManager.swift
  13. 8 0
      TSLiveWallpaper/ar.lproj/InfoPlist.strings
  14. 114 108
      TSLiveWallpaper/ar.lproj/Localizable.strings
  15. 0 1
      TSLiveWallpaper/de.lproj/LaunchScreen.strings
  16. 0 115
      TSLiveWallpaper/de.lproj/Localizable.strings
  17. 8 0
      TSLiveWallpaper/en.lproj/InfoPlist.strings
  18. 105 101
      TSLiveWallpaper/en.lproj/Localizable.strings
  19. 8 0
      TSLiveWallpaper/es.lproj/InfoPlist.strings
  20. 109 103
      TSLiveWallpaper/es.lproj/Localizable.strings
  21. 0 1
      TSLiveWallpaper/fr.lproj/LaunchScreen.strings
  22. 0 115
      TSLiveWallpaper/fr.lproj/Localizable.strings
  23. 0 1
      TSLiveWallpaper/pt-PT.lproj/LaunchScreen.strings
  24. 0 114
      TSLiveWallpaper/pt-PT.lproj/Localizable.strings

+ 28 - 19
TSLiveWallpaper.xcodeproj/project.pbxproj

@@ -100,6 +100,9 @@
 		A86857D72DF983620089D222 /* generat_loading.gif in Resources */ = {isa = PBXBuildFile; fileRef = A86857D62DF983620089D222 /* generat_loading.gif */; };
 		A86857DA2DF994600089D222 /* TSAIPhotoDetailsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86857D92DF9945F0089D222 /* TSAIPhotoDetailsVC.swift */; };
 		A86857DD2DF99C200089D222 /* TSImageIPanComparisonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86857DC2DF99C200089D222 /* TSImageIPanComparisonView.swift */; };
+		A87CF8522E0296B30063CB7E /* TSAIPhotoDetailsBrowserVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87CF8512E0296960063CB7E /* TSAIPhotoDetailsBrowserVC.swift */; };
+		A87CF8542E029B450063CB7E /* TSAIPhotoDetailsBrowserCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87CF8532E029B3F0063CB7E /* TSAIPhotoDetailsBrowserCell.swift */; };
+		A87CF85A2E02AF070063CB7E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A87CF8582E02AF070063CB7E /* InfoPlist.strings */; };
 		A895B5002E01370E004F9B85 /* TSTextToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A895B4FF2E01370E004F9B85 /* TSTextToastView.swift */; };
 		A895B5102E0287F2004F9B85 /* TYPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = A895B50E2E0287F2004F9B85 /* TYPageControl.m */; };
 		A895B5112E0287F2004F9B85 /* TYCyclePagerView.m in Sources */ = {isa = PBXBuildFile; fileRef = A895B50C2E0287F2004F9B85 /* TYCyclePagerView.m */; };
@@ -157,14 +160,8 @@
 		60553FCD2D3B54A400BAAD7F /* GradientText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientText.swift; sourceTree = "<group>"; };
 		60553FCE2D3B54A400BAAD7F /* GradientBackgroundModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientBackgroundModifier.swift; sourceTree = "<group>"; };
 		60553FDC2D3B84E700BAAD7F /* UIScrollView+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIScrollView+Ext.swift"; sourceTree = "<group>"; };
-		609B6E9F2D6F11D0007942D4 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
-		609B6EA02D6F11D5007942D4 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
 		609B6EA12D6F11E0007942D4 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
-		609B6EA22D6F11E6007942D4 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/LaunchScreen.strings"; sourceTree = "<group>"; };
 		609B6EA42D6F1221007942D4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
-		609B6EA62D6F1227007942D4 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
-		609B6EA72D6F1230007942D4 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
-		609B6EA82D6F1231007942D4 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = "<group>"; };
 		609B6EA92D6F1231007942D4 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
 		71E5F623537702A8306DF3C8 /* Pods-TSLiveWallpaper.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TSLiveWallpaper.release.xcconfig"; path = "Target Support Files/Pods-TSLiveWallpaper/Pods-TSLiveWallpaper.release.xcconfig"; sourceTree = "<group>"; };
 		A81CA4642D15685D00A3AAC8 /* TSLaunchVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSLaunchVC.swift; sourceTree = "<group>"; };
@@ -249,6 +246,11 @@
 		A86857D62DF983620089D222 /* generat_loading.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = generat_loading.gif; sourceTree = "<group>"; };
 		A86857D92DF9945F0089D222 /* TSAIPhotoDetailsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSAIPhotoDetailsVC.swift; sourceTree = "<group>"; };
 		A86857DC2DF99C200089D222 /* TSImageIPanComparisonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSImageIPanComparisonView.swift; sourceTree = "<group>"; };
+		A87CF8512E0296960063CB7E /* TSAIPhotoDetailsBrowserVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSAIPhotoDetailsBrowserVC.swift; sourceTree = "<group>"; };
+		A87CF8532E029B3F0063CB7E /* TSAIPhotoDetailsBrowserCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSAIPhotoDetailsBrowserCell.swift; sourceTree = "<group>"; };
+		A87CF8592E02AF070063CB7E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		A87CF85C2E02AF150063CB7E /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		A87CF85D2E02AF410063CB7E /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		A895B4FF2E01370E004F9B85 /* TSTextToastView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TSTextToastView.swift; sourceTree = "<group>"; };
 		A895B5012E025020004F9B85 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
 		A895B5022E025020004F9B85 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = "<group>"; };
@@ -830,6 +832,8 @@
 			children = (
 				A86857DB2DF99C170089D222 /* View */,
 				A86857D92DF9945F0089D222 /* TSAIPhotoDetailsVC.swift */,
+				A87CF8512E0296960063CB7E /* TSAIPhotoDetailsBrowserVC.swift */,
+				A87CF8532E029B3F0063CB7E /* TSAIPhotoDetailsBrowserCell.swift */,
 			);
 			path = TSAIPhotoDetailsVC;
 			sourceTree = "<group>";
@@ -900,6 +904,7 @@
 				A8E56BED2D1520EC003C54AF /* Assets.xcassets */,
 				A8FD8F462DFC3092008CAACF /* launch2.png */,
 				A8E56BEE2D1520EC003C54AF /* Info.plist */,
+				A87CF8582E02AF070063CB7E /* InfoPlist.strings */,
 				A8E56BF02D1520EC003C54AF /* LaunchScreen.storyboard */,
 				609B6EA32D6F1221007942D4 /* Localizable.strings */,
 			);
@@ -1049,10 +1054,7 @@
 			knownRegions = (
 				en,
 				Base,
-				de,
-				fr,
 				es,
-				"pt-PT",
 				ar,
 			);
 			mainGroup = A8E56BCB2D1520DD003C54AF;
@@ -1075,6 +1077,7 @@
 			buildActionMask = 2147483647;
 			files = (
 				603901222DF9770A0096551E /* Flash-old-Time.png in Resources */,
+				A87CF85A2E02AF070063CB7E /* InfoPlist.strings in Resources */,
 				A8C4C0A42D24218A003C46FC /* metadata.mov in Resources */,
 				A86857D72DF983620089D222 /* generat_loading.gif in Resources */,
 				A86857C62DF92BE70089D222 /* ZillaSlab-Bold.ttf in Resources */,
@@ -1186,6 +1189,7 @@
 				A81CA47F2D15789C00A3AAC8 /* TSConfig.swift in Sources */,
 				A81CA49F2D1655CE00A3AAC8 /* UICollectionView+Ex.swift in Sources */,
 				A81CA4BA2D16B6E300A3AAC8 /* TSHomeCell.swift in Sources */,
+				A87CF8542E029B450063CB7E /* TSAIPhotoDetailsBrowserCell.swift in Sources */,
 				A8F778B22D1BA07200BF55D5 /* TSRandomWallpaperBrowseSelectView.swift in Sources */,
 				A8477C9F2D22ABDA00DF0B93 /* TSEditLiveEidtCell.swift in Sources */,
 				A81CA4652D15685F00A3AAC8 /* TSLaunchVC.swift in Sources */,
@@ -1200,6 +1204,7 @@
 				A86857B72DF9258D0089D222 /* TSAIUploadPhotoVC.swift in Sources */,
 				A86857822DF81AD40089D222 /* TSActionInfoModel.swift in Sources */,
 				A86857B22DF921F90089D222 /* TSView.swift in Sources */,
+				A87CF8522E0296B30063CB7E /* TSAIPhotoDetailsBrowserVC.swift in Sources */,
 				A86857872DF81B660089D222 /* TSNetWork+Business.swift in Sources */,
 				A86857882DF81B660089D222 /* TSNetworkManager.swift in Sources */,
 				A86857892DF81B660089D222 /* TSNetworkManager+Loading.swift in Sources */,
@@ -1271,23 +1276,27 @@
 			isa = PBXVariantGroup;
 			children = (
 				609B6EA42D6F1221007942D4 /* en */,
-				609B6EA62D6F1227007942D4 /* fr */,
-				609B6EA72D6F1230007942D4 /* de */,
-				609B6EA82D6F1231007942D4 /* pt-PT */,
 				609B6EA92D6F1231007942D4 /* es */,
 				A895B5022E025020004F9B85 /* ar */,
 			);
 			name = Localizable.strings;
 			sourceTree = "<group>";
 		};
+		A87CF8582E02AF070063CB7E /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				A87CF8592E02AF070063CB7E /* en */,
+				A87CF85C2E02AF150063CB7E /* es */,
+				A87CF85D2E02AF410063CB7E /* ar */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
 		A8E56BF02D1520EC003C54AF /* LaunchScreen.storyboard */ = {
 			isa = PBXVariantGroup;
 			children = (
 				A8E56BEF2D1520EC003C54AF /* Base */,
-				609B6E9F2D6F11D0007942D4 /* de */,
-				609B6EA02D6F11D5007942D4 /* fr */,
 				609B6EA12D6F11E0007942D4 /* es */,
-				609B6EA22D6F11E6007942D4 /* pt-PT */,
 				A895B5012E025020004F9B85 /* ar */,
 			);
 			name = LaunchScreen.storyboard;
@@ -1304,7 +1313,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 6;
+				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_APP_SANDBOX = NO;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
@@ -1321,7 +1330,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 3.6.2;
+				MARKETING_VERSION = 3.6.4;
 				PRODUCT_BUNDLE_IDENTIFIER = musicplayer.offline.com;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
@@ -1344,7 +1353,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 6;
+				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				ENABLE_APP_SANDBOX = NO;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
@@ -1361,7 +1370,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 3.6.2;
+				MARKETING_VERSION = 3.6.4;
 				PRODUCT_BUNDLE_IDENTIFIER = musicplayer.offline.com;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";

+ 1 - 1
TSLiveWallpaper/AppDelegate.swift

@@ -75,7 +75,7 @@ extension AppDelegate {
     func initPlatform() {
         TSRTLManage.setUpInit() //阿拉伯语适配
         dePrint("TSRMShared.aiListDB.listModels.count=\(TSRMShared.aiListDB.listModels.count)")//提前预热数据库
-        
+        TSColorConfigShared.themeColor = .themeColor
         TSColorConfigShared.naviMianTextColor = .white//设置基类颜色
 //        _ = TSImageDataCenter.shared
         

+ 24 - 9
TSLiveWallpaper/Business/TSAIListVC/TSAIListHistoryVC/TSAIListHistoryVC.swift

@@ -23,7 +23,7 @@ class TSAIListHistoryVC: TSBaseVC {
     lazy var navBarView: TSBaseNavContentBarView = {
         let navBarView = TSBaseNavContentBarView()
 
-        let label = UILabel.createLabel(text: "History",font: .font(name: .Pacifico, size: 24))
+        let label = UILabel.createLabel(text: "History".localized,font: .font(name: .Pacifico, size: 24))
         navBarView.barView.addSubview(label)
         label.snp.makeConstraints { make in
            make.center.equalToSuperview()
@@ -137,10 +137,18 @@ class TSAIListHistoryVC: TSBaseVC {
     }
     
     @objc func clickNavRight() {
-        showCustomAlert(message: "Are you sure to delete all histories?".localized, rightActionString: "Delete All".localized ,deleteHandler:  {
-            self.removeAllHistoryList()
-            self.updateDataView()
-        })
+        TSCustomAlertController.show(in: self, config: TSCustomAlertController.AlertConfig(
+            message: "Are you sure to delete all histories?".localized,
+            cancelTitle: "Delete All".localized,
+            cancelColor: .red,
+            confirmTitle: "Retain".localized,
+            confirmColor: .white,
+            cancelAction: { [weak self]  in
+                guard let self = self else { return }
+                self.removeAllHistoryList()
+                self.updateDataView()
+            }
+        ))
     }
     
 }
@@ -192,10 +200,17 @@ extension TSAIListHistoryVC{
                     updateDataView()
                 })
             }else if cmd == "delete" {
-                showCustomAlert(message: "Are you sure to delete?".localized, rightActionString: "Delete".localized ,deleteHandler:  { [weak self]  in
-                    guard let self = self else { return }
-                    removeDelete(index: indexPath.row)
-                })
+                TSCustomAlertController.show(in: self, config: TSCustomAlertController.AlertConfig(
+                    message: "Are you sure to delete?".localized,
+                    cancelTitle: "Delete".localized,
+                    cancelColor: .red,
+                    confirmTitle: "Retain".localized,
+                    confirmColor: .white,
+                    cancelAction: { [weak self]  in
+                        guard let self = self else { return }
+                        removeDelete(index: indexPath.row)
+                    }
+                ))
             }
         }
     }

+ 1 - 1
TSLiveWallpaper/Business/TSAIListVC/TSAIListVC/TSAIListVC.swift

@@ -29,7 +29,7 @@ class TSAIListVC: TSBaseVC {
     lazy var navBarView: TSBaseNavContentBarView = {
         let navBarView = TSBaseNavContentBarView()
 
-        let label = UILabel.createLabel(text: "Home",font: .font(name: .Pacifico, size: 24))
+        let label = UILabel.createLabel(text: "Home".localized,font: .font(name: .Pacifico, size: 24))
         navBarView.barView.addSubview(label)
         label.snp.makeConstraints { make in
            make.center.equalToSuperview()

+ 23 - 0
TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsBrowserCell.swift

@@ -0,0 +1,23 @@
+//
+//  TSAIPhotoDetailsBrowserCell.swift
+//  TSLiveWallpaper
+//
+//  Created by 100Years on 2025/6/17.
+//
+
+class TSAIPhotoDetailsBrowserCell: TSBaseCollectionCell {
+    var model:TSActionInfoModel = TSActionInfoModel(){
+        didSet{
+            dePrint("TSAIPhotoDetailsBrowserCell didSet model")
+
+            
+        }
+    }
+    
+    override func creatUI() {
+        
+        
+    }
+    
+    
+}

+ 131 - 0
TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsBrowserVC.swift

@@ -0,0 +1,131 @@
+//
+//  TSAIPhotoDetailsBrowserVC.swift
+//  TSLiveWallpaper
+//
+//  Created by 100Years on 2025/6/17.
+//
+private let cellId = "TSAIPhotoDetailsBrowserCell"
+class TSAIPhotoDetailsBrowserVC: TSBaseVC {
+    
+    var deleteBlock:((Int)->Void)?
+    var dataModelArray:[TSActionInfoModel] = []
+
+    var currentModel:TSActionInfoModel?{
+        if let model = dataModelArray.safeObj(At: currentIndex){
+            return model
+        }
+        return nil
+    }
+    
+    var currentIndex:Int = 0
+    
+    lazy var collectionView: UICollectionView = {
+
+        let layout = UICollectionViewFlowLayout()
+        layout.scrollDirection = .vertical
+        
+        let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
+        collectionView.delegate = self
+        collectionView.dataSource = self
+        collectionView.showsVerticalScrollIndicator = false
+        collectionView.showsHorizontalScrollIndicator = false
+        collectionView.backgroundColor = .clear
+        if #available(iOS 11.0, *) {
+            collectionView.contentInsetAdjustmentBehavior = .never
+        }
+        collectionView.register(TSAIPhotoDetailsBrowserCell.self, forCellWithReuseIdentifier: cellId)
+        
+        collectionView.isPagingEnabled = true
+        collectionView.isHidden = true
+        if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
+            flowLayout.minimumInteritemSpacing = 0
+            flowLayout.minimumLineSpacing = 0
+            flowLayout.scrollDirection = .horizontal
+            flowLayout.itemSize = CGSize(width: k_ScreenWidth, height: k_ScreenHeight)
+        }
+        return collectionView
+    }()
+
+    lazy var bottomViewH = 60+k_Height_safeAreaInsetsBottom()
+    lazy var bottomView: UIView = {
+        let bottom = 60+k_Height_safeAreaInsetsBottom()
+        let bottomView = UIView(frame: CGRectMake(0, k_ScreenHeight-bottomViewH, k_ScreenWidth, bottomViewH))
+        bottomView.backgroundColor = "#111111".uiColor
+        
+        let colorView = UIView.creatColor(color: "#222222".uiColor)
+        colorView.frame = bottomView.bounds
+        colorView.cornersRound(radius: 20, corner: [.topLeft,.topRight])
+        bottomView.addSubview(colorView)
+
+        return bottomView
+    }()
+    
+    
+    override func createView() {
+        super.createView()
+        
+  
+        contentView.addSubview(collectionView)
+        collectionView.snp.makeConstraints { make in
+            make.edges.equalTo(0)
+        }
+        
+        DispatchQueue.main.async {
+            self.collectionView.isHidden = false
+            self.collectionView.reloadData()
+            self.collectionView.setContentOffset(CGPoint(x: CGFloat(self.currentIndex) * self.collectionView.frame.size.width, y: 0), animated: false)
+
+            if let flowLayout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
+                flowLayout.itemSize = self.collectionView.bounds.size
+            }
+        }
+    }
+    
+    
+    @objc func clickSubmitBtn(){
+        guard let currentModel = currentModel else { return }
+        let urlString = currentModel.response.resultUrl
+        TSImageStoreTool.downloadImageWithProgress(urlString: urlString) { image in
+            if let image = image{
+                PhotoManagerShared.saveImageToAlbum(image) { success, error in
+                    if success {
+                        kSaveSuccesswShared.show(atView: self.view)
+                    }else{
+                        debugPrint(error)
+                    }
+                }
+            }
+        }
+    }
+    
+}
+
+//MARK: UICollectionViewDataSource
+extension TSAIPhotoDetailsBrowserVC:UICollectionViewDataSource,UICollectionViewDelegate {
+    
+    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
+        resetIndexWithOffset(scrollView)
+    }
+
+    func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
+        resetIndexWithOffset(scrollView)
+    }
+
+    private func resetIndexWithOffset(_ scrollView: UIScrollView) {
+        let item = Int((scrollView.contentOffset.x / scrollView.bounds.width).rounded())
+        currentIndex = item
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+        return dataModelArray.count
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
+        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! TSAIPhotoDetailsBrowserCell
+        if let model = dataModelArray.safeObj(At: indexPath.item){
+            cell.model = model
+        }
+        return cell
+    }
+    
+}

+ 13 - 4
TSLiveWallpaper/Business/TSAIListVC/TSAIPhotoDetailsVC/TSAIPhotoDetailsVC.swift

@@ -167,10 +167,19 @@ class TSAIPhotoDetailsVC: TSBaseVC {
     }
     
     @objc func clickNavRight() {
-        showCustomAlert(message: "Are you sure to delete?".localized, rightActionString: "Delete".localized ,deleteHandler:  {
-            self.deleteBlock?()
-            self.navBarClickLeftAction()
-        })
+
+        TSCustomAlertController.show(in: self, config: TSCustomAlertController.AlertConfig(
+            message: "Are you sure to delete?".localized,
+            cancelTitle: "Delete".localized,
+            cancelColor: .red,
+            confirmTitle: "Retain".localized,
+            confirmColor: .white,
+            cancelAction: { [weak self]  in
+                guard let self = self else { return }
+                self.deleteBlock?()
+                self.navBarClickLeftAction()
+            }
+        ))
     }
 }
 

+ 1 - 1
TSLiveWallpaper/Business/TSBusinessWebVC/TSBusinessWebVC.swift

@@ -18,7 +18,7 @@ class TSBusinessWebVC: TSBaseVC , WKNavigationDelegate {
             case .privacy:
                 return "Privacy Policy".localized
             case .terms:
-                return "Terms of Service".localized
+                return "User Agreement".localized
             }
         }
     }

+ 6 - 5
TSLiveWallpaper/Business/TSMineVC/View/TSMineTopView.swift

@@ -17,12 +17,12 @@ class TSMineTopView: TSBaseView {
     
  
     lazy var titleLabel: UILabel = {
-        let titleLabel = UILabel.createLabel(text: "Update to PRO", font: .font(name: .ZillaSlabBoldItalic,size: 24,weight: .bold), textColor: .mainText)
+        let titleLabel = UILabel.createLabel(text: "Update to PRO".localized, font: .font(name: .ZillaSlabBoldItalic,size: 24,weight: .bold), textColor: .mainText)
         return titleLabel
     }()
     
     lazy var timeLabel: UILabel = {
-        let timeLabel = UILabel.createLabel(text: "Limited Time Discount", font: .font(name: .ZillaSlab,size: 14), textColor: .lesserText)
+        let timeLabel = UILabel.createLabel(text: "Limited Time Discount".localized, font: .font(name: .ZillaSlab,size: 14), textColor: .lesserText)
         return timeLabel
     }()
 
@@ -31,6 +31,7 @@ class TSMineTopView: TSBaseView {
             guard let self = self else { return }
             clickView()
         }
+        upgradeBtn.setTitleImageSpace(spacing: 0)
         return upgradeBtn
     }()
     
@@ -89,7 +90,7 @@ class TSMineTopView: TSBaseView {
     }()
     
     lazy var vipTimeLabel: UILabel = {
-        let timeLabel = UILabel.createLabel(text: "Limited Time Discount", font: .font(size: 14), textColor: .lesserText)
+        let timeLabel = UILabel.createLabel(text: "Limited Time Discount".localized, font: .font(size: 14), textColor: .lesserText)
         return timeLabel
     }()
     
@@ -154,12 +155,12 @@ class TSMineTopView: TSBaseView {
             self.height = 120 + 16
             noVipView.isHidden = true
             vipView.isHidden = false
-            vipTimeLabel.text = "Due Date: \(PurchaseManager.default.expiredDateString)"
+            vipTimeLabel.text = "Due Date:".localized + "\(PurchaseManager.default.expiredDateString)"
         } else {
             self.height = 134 + 16
             noVipView.isHidden = false
             vipView.isHidden = true
-            saveView.setTitle("Save" + " " + PurchaseManager.default.vipType.saveString, for: .normal)
+            saveView.setTitle("Save-Vip".localized + " " + PurchaseManager.default.vipType.saveString, for: .normal)
         }
     }
 }

+ 9 - 9
TSLiveWallpaper/Business/TSPurchaseMembershipVC/TSPurchaseVC.swift

@@ -254,7 +254,7 @@ struct PurchaseView :View {
                     //                    //增加月付费
                     //                        PurchaseItemView(title: "One Month".localized, type: .month, selectedType: $viewModel.selectedType).onTapGesture {
                     //                            viewModel.selectedType = .month
-                    PurchaseItemView(title: "YEARLY".localized, type: .year, selectedType: $viewModel.selectedType).onTapGesture {
+                    PurchaseItemView(title: "Yearly".localized, type: .year, selectedType: $viewModel.selectedType).onTapGesture {
                         viewModel.selectedType = .year
                         viewModel.buyPublisher.send(true)
                     }
@@ -262,7 +262,7 @@ struct PurchaseView :View {
                         .offset(x:-30,y:-14)
                 }
                 
-                PurchaseItemView(title: "WEEKLY".localized, type: .week, selectedType: $viewModel.selectedType).onTapGesture {
+                PurchaseItemView(title: "Weekly".localized, type: .week, selectedType: $viewModel.selectedType).onTapGesture {
                     viewModel.selectedType = .week
                     viewModel.buyPublisher.send(true)
                 }
@@ -284,7 +284,7 @@ struct PurchaseView :View {
                 } label: {
                     ZStack {
                         Image("submit_btn_bg").resizable().aspectRatio(contentMode: .fill)
-                        Text("Continue")
+                        Text("Continue".localized)
                             .font(.system(size: 16))
                             .foregroundColor(.hex("#111111"))
                         
@@ -293,9 +293,9 @@ struct PurchaseView :View {
                 }
                 
                 HStack {
-                    Text("Recurring billing, cancel anytime")
+                    Text("Recurring billing,cancel anytime.".localized)
                         .foregroundColor(UIColor.themeColor.color) +
-                    Text(", Payment will be charged to your iTunes account at confirmation of purchase. Subscriptions automatically renew for the same applicable term and price, unless auto-renew is turned off at least 24 hours before the end of the current period.")
+                    Text("Payment will be charged to your iTunes account at confirmation of purchase. Subscriptions automatically renew for the same applicable term and price, unless auto-renew is turned off at least 24 hours before the end of the current period.".localized)
                         .foregroundColor(UIColor.lesserText.color)
                 }
                 .multilineTextAlignment(.center)
@@ -305,17 +305,17 @@ struct PurchaseView :View {
                 }
                 
                 HStack(spacing: 8) {
-                    Text("Term of us")
+                    Text("Terms of us".localized)
                         .onTapGesture {
                             viewModel.termPublisher.send(true)
                         }
                     Text("|")
-                    Text("Privacy Policy")
+                    Text("Privacy Policy".localized)
                         .onTapGesture {
                             viewModel.privacyPublisher.send(true)
                         }
                     Text("|")
-                    Text("Restore")
+                    Text("Restore".localized)
                         .onTapGesture {
                             viewModel.restorePublisher.send(true)
                         }
@@ -359,7 +359,7 @@ struct PurchaseItemView: View {
                 //右边每周的💰
                 VStack(alignment: .trailing, spacing: 2) {
                     Text("\(PurchaseManager.default.averageWeekly(for:type) ?? "--")")
-                    Text("Per week".localized)
+                    Text("per week".localized)
 
                 }.font(.font(size: 16,weight: .regular)).foregroundColor(Color.white.opacity(0.6))
 

+ 2 - 2
TSLiveWallpaper/Common/Purchase/TSPurchaseEnum.swift

@@ -32,9 +32,9 @@ public enum PremiumPeriod: String, CaseIterable {
     var saveString: String {
         switch self {
         case .none:
-            return "60%"
+            return "90%"
         default:
-            return "60%"
+            return "90%"
         }
     }
     

+ 5 - 5
TSLiveWallpaper/Common/Purchase/TSPurchaseManager.swift

@@ -75,9 +75,9 @@ public class PurchaseManager: NSObject {
     }
 
     @objc public var isVip: Bool {
-        #if DEBUG
-        return true
-        #endif
+//        #if DEBUG
+//        return true
+//        #endif
         guard let expiresDate = expiredDate else {
             return false
         }
@@ -329,10 +329,10 @@ extension PurchaseManager: SKPaymentTransactionObserver {
                     }
                 }
                 
-                var message = "Payment Failed"
+                var message = "Payment Failed".localized
                 if let error = transaction.error as? SKError{
                     if error.code == SKError.paymentCancelled {
-                        message = "The subscription was canceled"
+                        message = "The subscription was canceled".localized
                     }
                 }
                 purchase(self, didChaged: .payFail, object: message)

+ 8 - 0
TSLiveWallpaper/ar.lproj/InfoPlist.strings

@@ -0,0 +1,8 @@
+/* 
+  InfoPlist.strings
+  TSLiveWallpaper
+
+  Created by 100Years on 2025/6/18.
+  
+*/
+NSPhotoLibraryUsageDescription = "اسمح لنا بالوصول إلى الصور التي تم تحميلها لمعالجتها وحفظها على جهازك.";

+ 114 - 108
TSLiveWallpaper/ar.lproj/Localizable.strings

@@ -6,111 +6,117 @@
   
 */
 
-/* Unlock Message */
-"It will be unlocked after an ad." = "It will be unlocked after an ad.";
-
-/* Unlocking */
-"Unlocking..." = "Unlocking...";
-
-/* Loading */
-"Loading Failed" = "Loading Failed";
-
-/* Search */
-"Search" = "Search";
-
-/* Music */
-"No Music" = "No Music";
-
-/* Network */
-"Network error, please check." = "Network error, please check.";
-
-/* Data */
-"No Data" = "No Data";
-
-/* Reload */
-"Reload" = "Reload";
-
-/* Rename */
-"Rename" = "Rename";
-
-/* Playlist */
-"Delete Playlist" = "Delete Playlist";
-"Create Playlist" = "Create Playlist";
-"Playlist Name" = "Playlist Name";
-"input name" = "input name";
-"Playlist" = "Playlist";
-"Shuffle All" = "Shuffle All";
-
-/* Confirmation */
-"Are you sure to delete" = "Are you sure to delete";
-
-/* Actions */
-"Like" = "Like";
-"Delete" = "Delete";
-"Add to Playlist" = "Add to Playlist";
-"Remove from playlist" = "Remove from playlist";
-"Created Successfully" = "Created Successfully";
-"OK" = "OK";
-"Recently" = "Recently";
-"Already Exists" = "Already Exists";
-"Up Next" = "Up Next";
-"UnKnown" = "UnKnown";
-"Select All" = "Select All";
-"Play All" = "Play All";
-"Done" = "Done";
-"Find your favorite songs" = "Find your favorite songs";
-"Sort By" = "Sort By";
-"Ascending order by time" = "Ascending order by time";
-"Descending order by time" = "Descending order by time";
-"Ascending order by name" = "Ascending order by name";
-"Descending order by name" = "Descending order by name";
-"Add to like" = "Add to like";
-"Remove from like" = "Remove from like";
-"Removed Successfully" = "Removed Successfully";
-"Added Successfully" = "Added Successfully";
-"Delete Successfully" = "Delete Successfully";
-"Search Music" = "Search Music";
-"History" = "History";
-"Delete all" = "Delete all";
-"Sleep Mode" = "Sleep Mode";
-"Turn Off" = "Turn Off";
-"Downloading" = "Downloading";
-"Retry" = "Retry";
-"From Photo" = "From Photo";
-"From Files" = "From Files";
-"Go to Add" = "Go to Add";
-"Getting price" = "Getting price";
-"Get price failure, Will automatically retry in 5 seconds" = "Get price failure, Will automatically retry in 5 seconds";
-"Purchasing now" = "Purchasing now";
-"Congratulation you have become VIP" = "Congratulation you have become VIP";
-"Finish" = "Finish";
-"Restoring now" = "Restoring now";
-"Couldn't Restore Subscription" = "Couldn't Restore Subscription";
-"Failed to restore subscribe, please try again" = "Failed to restore subscribe, please try again";
-"Verify receipt failed" = "Verify receipt failed";
-"Continue" = "Continue";
-
-
-"Save Successfully" = "Save Successfully";
-"View" = "View";
-"Create Live Wallpaper" = "Create Live Wallpaper";
-"DIY Live Wallpaper" = "DIY Live Wallpaper";
-"DIY Successfully" = "DIY Successfully";
-"Upload Video" = "Upload Video";
-"How to set shuffle packs" = "How to set shuffle packs";
-"Save All" = "Save All";
-"Upgrade" = "Upgrade";
-"Update" = "Update";
-"Rate us" = "Rate us";
-"Share us" = "Share us";
-"Privacy Policy" = "Privacy Policy";
-"Terms of Service" = "Terms of Service";
-"About us" = "About us";
-"Save" = "Save";
-"Save Fail" = "Save Fail";
-"ScreenRecorder unAvailable" = "ScreenRecorder unAvailable";
-
-"All Premium Wallpapers" = "All Premium Wallpapers";
-"Unlimited Video to Live" = "Unlimited Video to Live";
-"100% No Ads" = "100% No Ads";
-"Share" = "Share";
+"Allow us to access to upload photos to process and save processed photos to your device." = "اسمح لنا بالوصول إلى الصور التي تم تحميلها لمعالجتها وحفظها على جهازك.";
+"Add Color to Memories" = "أضف اللون إلى الذكريات";
+"Your photo is now vibrantly colorized, bringing memories to life" = "أصبحت صورتك الآن ملونة بشكل نابض بالحياة، مما يجعل الذكريات تنبض بالحياة";
+"Erase Scratches" = "مسح الخدوش";
+"Scratches and blemishes have vanished" = "لقد اختفت الخدوش والبقع";
+"Make photos clearer" = "جعل الصور أكثر وضوحا";
+"Your photo has become clearer,and the details are more noticeable" = "أصبحت صورتك أكثر وضوحًا، والتفاصيل أكثر وضوحًا";
+"Continue" = "يكمل";
+"Colorize Photo" = "تلوين الصورة";
+"Remove Scratches" = "إزالة الخدوش";
+"Enhance Photo" = "تحسين الصورة";
+"Get PRO Access" = "احصل على وصول احترافي";
+"Unlimited Process" = "عملية غير محدودة";
+"Unlock All Features" = "فتح جميع الميزات";
+"High Speed & Quality" = "سرعة وجودة عالية";
+"100%\nNo Ads" = "100% \nلا إعلانات";
+"Yearly" = "سنويا";
+"Weekly" = "أسبوعياً";
+"Just" = "فقط";
+"Per Year" = "كل سنة";
+"Per Week" = "للأسبوع";
+"Save-Vip" = "يحفظ";
+"per week" = "لمدة اسبوع";
+"Continue" = "يكمل";
+"Recurring billing,cancel anytime." = "الفواتير المتكررة، يمكن إلغاؤها في أي وقت.";
+"Payment will be charged to your iTunes account at confirmation of purchase. Subscriptions automatically renew for the same applicable term and price, unless auto-renew is turned off at least 24 hours before the end of the current period." = "سيتم خصم المبلغ من حساب iTunes الخاص بك عند تأكيد الشراء. تُجدد الاشتراكات تلقائيًا لنفس المدة والسعر المطبقين، ما لم يتم إيقاف التجديد التلقائي قبل 24 ساعة على الأقل من نهاية الفترة الحالية.";
+"Terms of us" = "شروطنا";
+"Privacy Policy" = "سياسة الخصوصية";
+"Restore" = "يعيد";
+"Enhance" = "يحسن";
+"Remove blur, sharpen, add details" = "إزالة الضبابية، وزيادة الوضوح، وإضافة التفاصيل";
+"Try" = "يحاول";
+"Colorize" = "تلوين";
+"Add colors to black-and-white photos" = "إضافة الألوان إلى الصور بالأبيض والأسود";
+"Descratch" = "ديسكراتش";
+"Remove scratches and dirt" = "إزالة الخدوش والأوساخ";
+"Enhance Tips" = "نصائح التحسين";
+"Suitable" = "مناسب";
+"Portraits, Low-resolution and photos, faces should be visible" = "الصور الشخصية والصور منخفضة الدقة والصور التي يجب أن تكون الوجوه مرئية";
+"Unsuitable" = "غير مناسب";
+"High resulotion, Severaly damaged and Difficult to recognize the face" = "نتائج عالية، تالفة للغاية ويصعب التعرف على الوجه";
+"Colorize Tips" = "نصائح التلوين";
+"Clear outline black-and-white photos" = "صور واضحة بالأبيض والأسود";
+"Colorful or Severely damaged photos" = "الصور الملونة أو التالفة بشدة";
+"Descratch Tips" = "نصائح ديسكراتش";
+"Scratched and Damaged photos
+" = "الصور المخدوشة والمتضررة";
+"High-resolution, Not damaged, and Clear photos" = "صور عالية الدقة، غير تالفة، وواضحة";
+"Upload Photo" = "تحميل الصورة";
+"Enhance Photo" = "تحسين الصورة";
+"Colorize Photo" = "تلوين الصورة";
+"Descratch Photo" = "ديسكراتش فوتو";
+"Enlighten Photo" = "إنليتن فوتو";
+"Recreate Photo" = "إعادة إنشاء الصورة";
+"You haven't saved the photo yet. Are you sure to quit?" = "لم تحفظ الصورة بعد. هل أنت متأكد من إغلاقها؟";
+"Quit" = "يترك";
+"Save" = "يحفظ";
+"As you leave, your task will be interrupted and no result." = "عندما تغادر، سوف يتم مقاطعة مهمتك ولن تحصل على أي نتيجة.";
+"Leave" = "يترك";
+"Wait" = "انتظر";
+"Processing" = "يعالج";
+"Uploading Photo" = "تحميل الصورة";
+"Process successfully" = "تمت العملية بنجاح";
+"Save Successfully" = "تم الحفظ بنجاح";
+"1 task is processing" = "1 مهمة قيد المعالجة";
+"~ %d mins" = "~ %d دقيقة";
+"Lots of people are processing images right now, so this might take a bit." = "هناك الكثير من الأشخاص الذين يقومون بمعالجة الصور في الوقت الحالي، لذا قد يستغرق هذا الأمر بعض الوقت.";
+"Home" = "بيت";
+"Result" = "نتيجة";
+"Are you sure to delete?" = "هل أنت متأكد من الحذف؟";
+"Retain" = "يحتفظ";
+"Delete" = "يمسح";
+"Delete this error history?" = "حذف سجل هذا الخطأ؟";
+"Due Date:" = "تاريخين:";
+"Share us" = "شاركنا";
+"Rate us" = "قيمنا";
+"User Agreement" = "اتفاقية المستخدم";
+"Privacy Policy" = "سياسة الخصوصية";
+"About us" = "معلومات عنا";
+"Lifetime" = "حياة";
+"Congratulation you have become VIP" = "مبروك لقد أصبحت VIP";
+"Finish" = "ينهي";
+"Restoring now" = "استعادة الآن";
+"Couldn't Restore Subscription" = "تعذر استعادة الاشتراك";
+"Getting price" = "الحصول على السعر";
+"Failed to get the price, will automatically retry in 5 seconds" = "فشل في الحصول على السعر، سيتم إعادة المحاولة تلقائيًا في غضون 5 ثوانٍ";
+"Failed to restore subscribe, please try again" = "فشل في استعادة الاشتراك، يرجى المحاولة مرة أخرى";
+"Verifying receipt..." = "جاري التحقق من الإيصال...";
+"Failed to validate receipt" = "فشل التحقق من صحة الإيصال";
+"Verify receipt failed" = "فشل التحقق من الإيصال";
+"Purchasing now" = "الشراء الآن";
+"Got it" = "فهمتها";
+"Reselect photos" = "إعادة تحديد الصور";
+"Sorry there was a slight problem with the image processing, please try again later." = "نأسف لوجود مشكلة بسيطة في معالجة الصورة، يرجى المحاولة مرة أخرى لاحقًا.";
+"No network, please check your network and try again." = "لا يوجد شبكة، يرجى التحقق من شبكتك ومحاولة مرة أخرى.";
+"Your photo may contain nudity, gore or violence that does not comply with the health policy, please replace the photo and try again." = "قد تحتوي صورتك على مشاهد عُري أو دماء أو عنف لا تتوافق مع سياسة الصحة، يرجى استبدال الصورة والمحاولة مرة أخرى.";
+"Process in the background" = "عملية في الخلفية";
+"History" = "تاريخ";
+"Upgrade" = "يرقي";
+"Well-exposed or severely damaged photos" = "الصور المعرضة جيدًا أو التالفة بشدة";
+"Over-dark or over-light, overexposed, or underexposed photos" = "الصور شديدة الظلام أو شديدة الإضاءة، أو شديدة التعرض، أو قليلة التعرض";
+"Recreate Tips" = "نصائح إعادة الإنشاء";
+"Recreate" = "إعادة إنشاء";
+"Bring new life to old photos" = "إضفاء حياة جديدة على الصور القديمة";
+"Enlighten" = "تنوير";
+"Easily fix lighting issues on photos" = "إصلاح مشاكل الإضاءة في الصور بسهولة";
+"View" = "منظر";
+"Example" = "مثال";
+"Limited Time Discount" = "خصم لفترة محدودة";
+"This task has expired" = "انتهت صلاحية هذه المهمة";
+"Processing you photo" = "معالجة صورتك";
+"Enlighten Tips" = "نصائح التنوير";
+"Payment Failed" = "فشل الدفع";
+"The subscription was canceled" = "تم إلغاء الاشتراك";

+ 0 - 1
TSLiveWallpaper/de.lproj/LaunchScreen.strings

@@ -1 +0,0 @@
-

+ 0 - 115
TSLiveWallpaper/de.lproj/Localizable.strings

@@ -1,115 +0,0 @@
-/* 
-  Localizable.strings
-  TSLiveWallpaper
-
-  Created by nkl on 2025/2/26.
-  
-*/
-
-/* Unlock Message */
-"It will be unlocked after an ad." = "Es wird nach einer Werbung freigeschaltet.";
-
-/* Unlocking */
-"Unlocking..." = "Wird freigeschaltet...";
-
-/* Loading */
-"Loading Failed" = "Laden fehlgeschlagen";
-
-/* Search */
-"Search" = "Suchen";
-
-/* Music */
-"No Music" = "Keine Musik";
-
-/* Network */
-"Network error, please check." = "Netzwerkfehler, bitte überprüfen.";
-
-/* Data */
-"No Data" = "Keine Daten";
-
-/* Reload */
-"Reload" = "Neu laden";
-
-/* Rename */
-"Rename" = "Umbenennen";
-
-/* Playlist */
-"Delete Playlist" = "Playlist löschen";
-"Create Playlist" = "Playlist erstellen";
-"Playlist Name" = "Playlist-Name";
-"input name" = "Name eingeben";
-"Playlist" = "Playlist";
-"Shuffle All" = "Alle mischen";
-
-/* Confirmation */
-"Are you sure to delete" = "Möchten Sie dies wirklich löschen?";
-
-/* Actions */
-"Like" = "Gefällt mir";
-"Delete" = "Löschen";
-"Add to Playlist" = "Zur Playlist";
-"Remove from playlist" = "Aus Playlist entfernen";
-"Created Successfully" = "Erfolgreich erstellt";
-"OK" = "OK";
-"Recently" = "Kürzlich";
-"Already Exists" = "Existiert bereits";
-"Up Next" = "Als Nächstes";
-"UnKnown" = "Unbekannt";
-"Select All" = "Alle auswählen";
-"Play All" = "Alle abspielen";
-"Done" = "Fertig";
-"Find your favorite songs" = "Finden Sie Ihre Lieblingssongs";
-"Sort By" = "Sortieren nach";
-"Ascending order by time" = "Aufsteigend nach Zeit";
-"Descending order by time" = "Absteigend nach Zeit";
-"Ascending order by name" = "Aufsteigend nach Name";
-"Descending order by name" = "Absteigend nach Name";
-"Add to like" = "Zu Favoriten hinzufügen";
-"Remove from like" = "Aus Favoriten entfernen";
-"Removed Successfully" = "Erfolgreich entfernt";
-"Added Successfully" = "Erfolgreich hinzugefügt";
-"Delete Successfully" = "Erfolgreich gelöscht";
-"Search Music" = "Musik suchen";
-"History" = "Verlauf";
-"Delete all" = "Alle löschen";
-"Sleep Mode" = "Schlafmodus";
-"Turn Off" = "Ausschalten";
-"Downloading" = "Wird heruntergeladen";
-"Retry" = "Erneut versuchen";
-"From Photo" = "Aus Foto";
-"From Files" = "Aus Dateien";
-"Go to Add" = "Zum Hinzufügen gehen";
-"Getting price" = "Preis wird abgerufen";
-"Get price failure, Will automatically retry in 5 seconds" = "Preisabruf fehlgeschlagen, automatischer Versuch in 5 Sekunden";
-"Purchasing now" = "Kauf wird durchgeführt";
-"Congratulation you have become VIP" = "Herzlichen Glückwunsch, Sie sind jetzt VIP";
-"Finish" = "Fertig";
-"Restoring now" = "Wird wiederhergestellt";
-"Couldn't Restore Subscription" = "Abonnement konnte nicht wiederhergestellt werden";
-"Failed to restore subscribe, please try again" = "Wiederherstellung des Abonnements fehlgeschlagen, bitte versuchen Sie es erneut";
-"Verify receipt failed" = "Überprüfung des Belegs fehlgeschlagen";
-"Continue" = "Fortsetzen";
-
-"Save Successfully" = "Erfolgreich gespeichert";
-"View" = "Anzeigen";
-"Create Live Wallpaper" = "Live-Hintergrund erstellen";
-"DIY Live Wallpaper" = "DIY Live-Hintergrund";
-"DIY Successfully" = "DIY erfolgreich";
-"Upload Video" = "Video hochladen";
-"How to set shuffle packs" = "Wie man Shuffle-Packs einstellt";
-"Save All" = "Alle speichern";
-"Upgrade" = "Upgrade";
-"Update" = "Aktualisieren";
-"Rate us" = "Bewerte uns";
-"Share us" = "Teile uns";
-"Privacy Policy" = "Datenschutzrichtlinie";
-"Terms of Service" = "Nutzungsbedingungen";
-"About us" = "Über uns";
-"Save" = "Speichern";
-"Save Fail" = "Speichern fehlgeschlagen";
-"ScreenRecorder unAvailable" = "Bildschirmrecorder nicht verfügbar";
-
-"All Premium Wallpapers" = "Alle Premium-Hintergründe";
-"Unlimited Video to Live" = "Unbegrenztes Video to Live";
-"100% No Ads" = "100 % keine Werbung";
-"Share" = "Aktie";

+ 8 - 0
TSLiveWallpaper/en.lproj/InfoPlist.strings

@@ -0,0 +1,8 @@
+/* 
+  InfoPlist.strings
+  TSLiveWallpaper
+
+  Created by 100Years on 2025/6/18.
+  
+*/
+NSPhotoLibraryUsageDescription = "Allow us to access to upload photos to process and save processed photos to your device.";

+ 105 - 101
TSLiveWallpaper/en.lproj/Localizable.strings

@@ -5,112 +5,116 @@
   Created by nkl on 2025/2/26.
   
 */
-
-/* Unlock Message */
-"It will be unlocked after an ad." = "It will be unlocked after an ad.";
-
-/* Unlocking */
-"Unlocking..." = "Unlocking...";
-
-/* Loading */
-"Loading Failed" = "Loading Failed";
-
-/* Search */
-"Search" = "Search";
-
-/* Music */
-"No Music" = "No Music";
-
-/* Network */
-"Network error, please check." = "Network error, please check.";
-
-/* Data */
-"No Data" = "No Data";
-
-/* Reload */
-"Reload" = "Reload";
-
-/* Rename */
-"Rename" = "Rename";
-
-/* Playlist */
-"Delete Playlist" = "Delete Playlist";
-"Create Playlist" = "Create Playlist";
-"Playlist Name" = "Playlist Name";
-"input name" = "input name";
-"Playlist" = "Playlist";
-"Shuffle All" = "Shuffle All";
-
-/* Confirmation */
-"Are you sure to delete" = "Are you sure to delete";
-
-/* Actions */
-"Like" = "Like";
+"Allow us to access to upload photos to process and save processed photos to your device." = "Allow us to access to upload photos to process and save processed photos to your device.";
+"Add Color to Memories" = "Add Color to Memories";
+"Your photo is now vibrantly colorized, bringing memories to life" = "Your photo is now vibrantly colorized, bringing memories to life";
+"Erase Scratches" = "Erase Scratches";
+"Scratches and blemishes have vanished" = "Scratches and blemishes have vanished";
+"Make photos clearer" = "Make photos clearer";
+"Your photo has become clearer,and the details are more noticeable" = "Your photo has become clearer,and the details are more noticeable";
+"Continue" = "Continue";
+"Colorize Photo" = "Colorize Photo";
+"Remove Scratches" = "Remove Scratches";
+"Enhance Photo" = "Enhance Photo";
+"Get PRO Access" = "Get PRO Access";
+"Unlimited Process" = "Unlimited Process";
+"Unlock All Features" = "Unlock All Features";
+"High Speed & Quality" = "High Speed & Quality";
+"100%\nNo Ads" = "100%\nNo Ads";
+"Yearly" = "Yearly";
+"Weekly" = "Weekly";
+"Just" = "Just";
+"Per Year" = "Per Year";
+"Per Week" = "Per Week";
+"Save-Vip" = "Save";
+"per week" = "per week";
+"Continue" = "Continue";
+"Recurring billing,cancel anytime." = "Recurring billing,cancel anytime.";
+"Payment will be charged to your iTunes account at confirmation of purchase. Subscriptions automatically renew for the same applicable term and price, unless auto-renew is turned off at least 24 hours before the end of the current period." = "Payment will be charged to your iTunes account at confirmation of purchase. Subscriptions automatically renew for the same applicable term and price, unless auto-renew is turned off at least 24 hours before the end of the current period.";
+"Terms of us" = "Terms of us";
+"Privacy Policy" = "Privacy Policy";
+"Restore" = "Restore";
+"Enhance" = "Enhance";
+"Remove blur, sharpen, add details" = "Remove blur, sharpen, add details";
+"Try" = "Try";
+"Colorize" = "Colorize";
+"Add colors to black-and-white photos" = "Add colors to black-and-white photos";
+"Descratch" = "Descratch";
+"Remove scratches and dirt" = "Remove scratches and dirt";
+"Enhance Tips" = "Enhance Tips";
+"Suitable" = "Suitable";
+"Portraits, Low-resolution and photos, faces should be visible" = "Portraits, Low-resolution and photos, faces should be visible";
+"Unsuitable" = "Unsuitable";
+"High resulotion, Severaly damaged and Difficult to recognize the face" = "High resulotion, Severaly damaged and Difficult to recognize the face";
+"Colorize Tips" = "Colorize Tips";
+"Clear outline black-and-white photos" = "Clear outline black-and-white photos";
+"Colorful or Severely damaged photos" = "Colorful or Severely damaged photos";
+"Descratch Tips" = "Descratch Tips";
+"Scratched and Damaged photos" = "Scratched and Damaged photos";
+"High-resolution, Not damaged, and Clear photos" = "High-resolution, Not damaged, and Clear photos";
+"Upload Photo" = "Upload Photo";
+"Enhance Photo" = "Enhance Photo";
+"Colorize Photo" = "Colorize Photo";
+"Descratch Photo" = "Descratch Photo";
+"Enlighten Photo" = "Enlighten Photo";
+"Recreate Photo" = "Recreate Photo";
+"You haven't saved the photo yet. Are you sure to quit?" = "You haven't saved the photo yet. Are you sure to quit?";
+"Quit" = "Quit";
+"Save" = "Save";
+"As you leave, your task will be interrupted and no result." = "As you leave, your task will be interrupted and no result.";
+"Leave" = "Leave";
+"Wait" = "Wait";
+"Processing" = "Processing";
+"Uploading Photo" = "Uploading Photo";
+"Process successfully" = "Process successfully";
+"Save Successfully" = "Save Successfully";
+"1 task is processing" = "1 task is processing";
+"~ %d mins" = "~ %d mins";
+"Lots of people are processing images right now, so this might take a bit." = "Lots of people are processing images right now, so this might take a bit.";
+"Home" = "Home";
+"Result" = "Result";
+"Are you sure to delete?" = "Are you sure to delete?";
+"Retain" = "Retain";
 "Delete" = "Delete";
-"Add to Playlist" = "Add to Playlist";
-"Remove from playlist" = "Remove from playlist";
-"Created Successfully" = "Created Successfully";
-"OK" = "OK";
-"Recently" = "Recently";
-"Already Exists" = "Already Exists";
-"Up Next" = "Up Next";
-"UnKnown" = "UnKnown";
-"Select All" = "Select All";
-"Play All" = "Play All";
-"Done" = "Done";
-"Find your favorite songs" = "Find your favorite songs";
-"Sort By" = "Sort By";
-"Ascending order by time" = "Ascending order by time";
-"Descending order by time" = "Descending order by time";
-"Ascending order by name" = "Ascending order by name";
-"Descending order by name" = "Descending order by name";
-"Add to like" = "Add to like";
-"Remove from like" = "Remove from like";
-"Removed Successfully" = "Removed Successfully";
-"Added Successfully" = "Added Successfully";
-"Delete Successfully" = "Delete Successfully";
-"Search Music" = "Search Music";
-"History" = "History";
-"Delete all" = "Delete all";
-"Sleep Mode" = "Sleep Mode";
-"Turn Off" = "Turn Off";
-"Downloading" = "Downloading";
-"Retry" = "Retry";
-"From Photo" = "From Photo";
-"From Files" = "From Files";
-"Go to Add" = "Go to Add";
-"Getting price" = "Getting price";
-"Get price failure, Will automatically retry in 5 seconds" = "Get price failure, Will automatically retry in 5 seconds";
-"Purchasing now" = "Purchasing now";
+"Delete this error history?" = "Delete this error history?";
+"Due Date:" = "Due Date:";
+"Share us" = "Share us";
+"Rate us" = "Rate us";
+"User Agreement" = "User Agreement";
+"Privacy Policy" = "Privacy Policy";
+"About us" = "About us";
+"Lifetime" = "Lifetime";
 "Congratulation you have become VIP" = "Congratulation you have become VIP";
 "Finish" = "Finish";
 "Restoring now" = "Restoring now";
 "Couldn't Restore Subscription" = "Couldn't Restore Subscription";
+"Getting price" = "Getting price";
+"Failed to get the price, will automatically retry in 5 seconds" = "Failed to get the price, will automatically retry in 5 seconds";
 "Failed to restore subscribe, please try again" = "Failed to restore subscribe, please try again";
+"Verifying receipt..." = "Verifying receipt...";
+"Failed to validate receipt" = "Failed to validate receipt";
 "Verify receipt failed" = "Verify receipt failed";
-"Continue" = "Continue";
-
-
-"Save Successfully" = "Save Successfully";
-"View" = "View";
-"Create Live Wallpaper" = "Create Live Wallpaper";
-"DIY Live Wallpaper" = "DIY Live Wallpaper";
-"DIY Successfully" = "DIY Successfully";
-"Upload Video" = "Upload Video";
-"How to set shuffle packs" = "How to set shuffle packs";
-"Save All" = "Save All";
+"Purchasing now" = "Purchasing now";
+"Got it" = "Got it";
+"Reselect photos" = "Reselect photos";
+"Sorry there was a slight problem with the image processing, please try again later." = "Sorry there was a slight problem with the image processing, please try again later.";
+"No network, please check your network and try again." = "No network, please check your network and try again.";
+"Your photo may contain nudity, gore or violence that does not comply with the health policy, please replace the photo and try again." = "Your photo may contain nudity, gore or violence that does not comply with the health policy, please replace the photo and try again.";
+"Process in the background" = "Process in the background";
+"History" = "History";
 "Upgrade" = "Upgrade";
-"Update" = "Update";
-"Rate us" = "Rate us";
-"Share us" = "Share us";
-"Privacy Policy" = "Privacy Policy";
-"Terms of Service" = "Terms of Service";
-"About us" = "About us";
-"Save" = "Save";
-"Save Fail" = "Save Fail";
-"ScreenRecorder unAvailable" = "ScreenRecorder unAvailable";
-
-"All Premium Wallpapers" = "All Premium Wallpapers";
-"Unlimited Video to Live" = "Unlimited Video to Live";
-"100% No Ads" = "100% No Ads";
-"Share" = "Share";
+"Well-exposed or severely damaged photos" = "Well-exposed or severely damaged photos";
+"Over-dark or over-light, overexposed, or underexposed photos" = "Over-dark or over-light, overexposed, or underexposed photos";
+"Recreate Tips" = "Recreate Tips";
+"Recreate" = "Recreate";
+"Bring new life to old photos" = "Bring new life to old photos";
+"Enlighten" = "Enlighten";
+"Easily fix lighting issues on photos" = "Easily fix lighting issues on photos";
+"View" = "View";
+"Example" = "Example";
+"Limited Time Discount" = "Limited Time Discount";
+"This task has expired" = "This task has expired";
+"Processing you photo" = "Processing you photo";
+"Enlighten Tips" = "Enlighten Tips";
+"Payment Failed" = "Payment Failed";
+"The subscription was canceled" = "The subscription was canceled";

+ 8 - 0
TSLiveWallpaper/es.lproj/InfoPlist.strings

@@ -0,0 +1,8 @@
+/* 
+  InfoPlist.strings
+  TSLiveWallpaper
+
+  Created by 100Years on 2025/6/18.
+  
+*/
+NSPhotoLibraryUsageDescription = "Permítanos acceder para cargar fotos para procesarlas y guardar las fotos procesadas en su dispositivo.";

+ 109 - 103
TSLiveWallpaper/es.lproj/Localizable.strings

@@ -5,111 +5,117 @@
   Created by nkl on 2025/2/26.
   
 */
-/* Unlock Message */
-"It will be unlocked after an ad." = "Se desbloqueará después de un anuncio.";
 
-/* Unlocking */
-"Unlocking..." = "Desbloqueando...";
-
-/* Loading */
-"Loading Failed" = "Error al cargar";
-
-/* Search */
-"Search" = "Buscar";
-
-/* Music */
-"No Music" = "No hay música";
-
-/* Network */
-"Network error, please check." = "Error de red, por favor verifique.";
-
-/* Data */
-"No Data" = "No hay datos";
-
-/* Reload */
-"Reload" = "Recargar";
-
-/* Rename */
-"Rename" = "Renombrar";
-
-/* Playlist */
-"Delete Playlist" = "Eliminar lista de reproducción";
-"Create Playlist" = "Crear lista de reproducción";
-"Playlist Name" = "Nombre de la lista de reproducción";
-"input name" = "ingrese un nombre";
-"Playlist" = "Lista de reproducción";
-"Shuffle All" = "Mezclar todo";
-
-/* Confirmation */
-"Are you sure to delete" = "¿Estás seguro de eliminar?";
-
-/* Actions */
-"Like" = "Me gusta";
+"Allow us to access to upload photos to process and save processed photos to your device." = "Permítanos acceder para cargar fotos para procesarlas y guardar las fotos procesadas en su dispositivo.";
+"Add Color to Memories" = "Añade color a los recuerdos";
+"Your photo is now vibrantly colorized, bringing memories to life" = "Tu foto ahora tiene colores vibrantes, dando vida a los recuerdos.";
+"Erase Scratches" = "Borrar arañazos";
+"Scratches and blemishes have vanished" = "Los arañazos y las imperfecciones han desaparecido.";
+"Make photos clearer" = "Hacer fotos más claras";
+"Your photo has become clearer,and the details are more noticeable" = "Tu foto se ha vuelto más clara y los detalles son más visibles.";
+"Continue" = "Continuar";
+"Colorize Photo" = "Colorear foto";
+"Remove Scratches" = "Eliminar arañazos";
+"Enhance Photo" = "Mejorar foto";
+"Get PRO Access" = "Obtenga acceso PRO";
+"Unlimited Process" = "Proceso ilimitado";
+"Unlock All Features" = "Desbloquear todo";
+"High Speed & Quality" = "Alta velocidad y calidad";
+"100%\nNo Ads" = "100% \nSin anuncios";
+"Yearly" = "Anual";
+"Weekly" = "Semanal";
+"Just" = "Justo";
+"Per Year" = "Por año";
+"Per Week" = "Por semana";
+"Save-Vip" = "Ahorrar";
+"per week" = "por semana";
+"Continue" = "Continuar";
+"Recurring billing,cancel anytime." = "Facturación recurrente, cancele en cualquier momento.";
+"Payment will be charged to your iTunes account at confirmation of purchase. Subscriptions automatically renew for the same applicable term and price, unless auto-renew is turned off at least 24 hours before the end of the current period." = "El pago se cargará a su cuenta de iTunes al confirmar la compra. Las suscripciones se renuevan automáticamente por el mismo plazo y precio, a menos que la renovación automática se desactive al menos 24 horas antes del final del periodo actual.";
+"Terms of us" = "Términos de uso";
+"Privacy Policy" = "política de privacidad";
+"Restore" = "Restaurar";
+"Enhance" = "Mejorar";
+"Remove blur, sharpen, add details" = "Eliminar desenfoque, enfocar, agregar detalles";
+"Try" = "Intentar";
+"Colorize" = "Colorear";
+"Add colors to black-and-white photos" = "Añadir colores a fotos en blanco y negro";
+"Descratch" = "Descratch";
+"Remove scratches and dirt" = "Eliminar arañazos y suciedad";
+"Enhance Tips" = "Consejos para mejorar";
+"Suitable" = "Adecuado";
+"Portraits, Low-resolution and photos, faces should be visible" = "Retratos, fotografías de baja resolución y en las que los rostros deben ser visibles.";
+"Unsuitable" = "Inadecuado";
+"High resulotion, Severaly damaged and Difficult to recognize the face" = "Alta resolución, muy dañado y difícil de reconocer la cara.";
+"Colorize Tips" = "Consejos para colorear";
+"Clear outline black-and-white photos" = "Fotografías en blanco y negro con contornos claros";
+"Colorful or Severely damaged photos" = "Fotos coloridas o muy dañadas";
+"Descratch Tips" = "Consejos para descratch";
+"Scratched and Damaged photos" = "Fotos rayadas y dañadas";
+"High-resolution, Not damaged, and Clear photos" = "Fotos de alta resolución, sin daños y claras.";
+"Upload Photo" = "Subir foto";
+"Enhance Photo" = "Mejorar foto";
+"Colorize Photo" = "Colorear foto";
+"Descratch Photo" = "Descratch Photo";
+"Enlighten Photo" = "Iluminar la foto";
+"Recreate Photo" = "Recrear foto";
+"You haven't saved the photo yet. Are you sure to quit?" = "Aún no has guardado la foto. ¿Estás seguro de que quieres salir?";
+"Quit" = "Abandonar";
+"Save" = "Ahorrar";
+"As you leave, your task will be interrupted and no result." = "Al salir, su tarea se verá interrumpida y no habrá resultado.";
+"Leave" = "Dejar";
+"Wait" = "Esperar";
+"Processing" = "Tratamiento";
+"Uploading Photo" = "Subiendo foto";
+"Process successfully" = "Procesar exitosamente";
+"Save Successfully" = "Guardar exitosamente";
+"1 task is processing" = "1 tarea está procesando";
+"~ %d mins" = "~ %d minutos";
+"Lots of people are processing images right now, so this might take a bit." = "Mucha gente está procesando imágenes en estos momentos, por lo que esto podría demorar un poco.";
+"Home" = "Hogar";
+"Result" = "Resultado";
+"Are you sure to delete?" = "¿Estás seguro de eliminarlo?";
+"Retain" = "Retener";
 "Delete" = "Borrar";
-"Add to Playlist" = "Añadir a la playlist";
-"Remove from playlist" = "Eliminar de la lista de reproducción";
-"Created Successfully" = "Creado exitosamente";
-"OK" = "OK";
-"Recently" = "Recientemente";
-"Already Exists" = "Ya existe";
-"Up Next" = "A continuación";
-"UnKnown" = "Desconocido";
-"Select All" = "Seleccionar todo";
-"Play All" = "Reproducir todo";
-"Done" = "Hecho";
-"Find your favorite songs" = "Encuentra tus canciones favoritas";
-"Sort By" = "Ordenar por";
-"Ascending order by time" = "Orden ascendente por tiempo";
-"Descending order by time" = "Orden descendente por tiempo";
-"Ascending order by name" = "Orden ascendente por nombre";
-"Descending order by name" = "Orden descendente por nombre";
-"Add to like" = "Añadir a favoritos";
-"Remove from like" = "Eliminar de favoritos";
-"Removed Successfully" = "Eliminado exitosamente";
-"Added Successfully" = "Añadido exitosamente";
-"Delete Successfully" = "Eliminado exitosamente";
-"Search Music" = "Buscar música";
-"History" = "Historial";
-"Delete all" = "Eliminar todo";
-"Sleep Mode" = "Modo de suspensión";
-"Turn Off" = "Apagar";
-"Downloading" = "Descargando";
-"Retry" = "Reintentar";
-"From Photo" = "Desde la foto";
-"From Files" = "Desde archivos";
-"Go to Add" = "Ir a añadir";
-"Getting price" = "Obteniendo precio";
-"Get price failure, Will automatically retry in 5 seconds" = "Error al obtener el precio, se reintentará automáticamente en 5 segundos";
-"Purchasing now" = "Comprando ahora";
-"Congratulation you have become VIP" = "Felicidades, te has convertido en VIP";
+"Delete this error history?" = "¿Borrar este historial de errores?";
+"Due Date:" = "Dos fechas:";
+"Share us" = "Compartenos";
+"Rate us" = "Calificanos";
+"User Agreement" = "Acuerdo de usuario";
+"Privacy Policy" = "política de privacidad";
+"About us" = "Sobre nosotros";
+"Lifetime" = "Vida";
+"Congratulation you have become VIP" = "¡Enhorabuena! ¡Te has convertido en VIP!";
 "Finish" = "Finalizar";
 "Restoring now" = "Restaurando ahora";
 "Couldn't Restore Subscription" = "No se pudo restaurar la suscripción";
-"Failed to restore subscribe, please try again" = "Error al restaurar la suscripción, por favor inténtalo de nuevo";
-"Verify receipt failed" = "Error al verificar el recibo";
-"Continue" = "Continuar";
-
-
-"Save Successfully" = "Guardado exitosamente";
-"View" = "Ver";
-"Create Live Wallpaper" = "Crear fondo de pantalla en vivo";
-"DIY Live Wallpaper" = "Fondo de pantalla en vivo DIY";
-"DIY Successfully" = "DIY exitoso";
-"Upload Video" = "Subir video";
-"How to set shuffle packs" = "Cómo configurar paquetes aleatorios";
-"Save All" = "Guardar todo";
-"Upgrade" = "Actualizar";
-"Update" = "Actualización";
-"Rate us" = "Califícanos";
-"Share us" = "Compártenos";
-"Privacy Policy" = "Política de Privacidad";
-"Terms of Service" = "Términos de Servicio";
-"About us" = "Sobre nosotros";
-"Save" = "Guardar";
-"Save Fail" = "Error al guardar";
-"ScreenRecorder unAvailable" = "Grabador de pantalla no disponible";
-
-"All Premium Wallpapers" = "Todos los fondos de pantalla premium";
-"Unlimited Video to Live" = "Vídeo ilimitado para vivir";
-"100% No Ads" = "100% sin publicidad";
-"Share" = "Compartir";
+"Getting price" = "Obtener precio";
+"Failed to get the price, will automatically retry in 5 seconds" = "No se pudo obtener el precio, se volverá a intentar automáticamente en 5 segundos.";
+"Failed to restore subscribe, please try again" = "No se pudo restaurar la suscripción, inténtelo nuevamente";
+"Verifying receipt..." = "Verificando recibo...";
+"Failed to validate receipt" = "No se pudo validar el recibo";
+"Verify receipt failed" = "Verificación de recibo fallida";
+"Purchasing now" = "Comprando ahora";
+"Got it" = "Entiendo";
+"Reselect photos" = "Volver a seleccionar fotos";
+"Sorry there was a slight problem with the image processing, please try again later." = "Lamentamos que haya habido un pequeño problema con el procesamiento de la imagen, inténtelo nuevamente más tarde.";
+"No network, please check your network and try again." = "No hay red, por favor verifique su red y vuelva a intentarlo.";
+"Your photo may contain nudity, gore or violence that does not comply with the health policy, please replace the photo and try again." = "Su foto puede contener desnudez, sangre o violencia que no cumple con la política de salud; reemplace la foto y vuelva a intentarlo.";
+"Process in the background" = "Proceso en segundo plano";
+"History" = "Historia";
+"Upgrade" = "Mejora";
+"Well-exposed or severely damaged photos" = "Fotos bien expuestas o muy dañadas";
+"Over-dark or over-light, overexposed, or underexposed photos" = "Fotos demasiado oscuras o demasiado claras, sobreexpuestas o subexpuestas";
+"Recreate Tips" = "Consejos para recrear";
+"Recreate" = "Recrear";
+"Bring new life to old photos" = "Dale nueva vida a fotos antiguas";
+"Enlighten" = "Iluminar";
+"Easily fix lighting issues on photos" = "Solucione fácilmente los problemas de iluminación en las fotografías";
+"View" = "Vista";
+"Example" = "Ejemplo";
+"Limited Time Discount" = "Oferta por Tiempo Limitado";
+"This task has expired" = "Esta tarea ha expirado";
+"Processing you photo" = "Procesando tu foto";
+"Enlighten Tips" = "Consejos para iluminar";
+"Payment Failed" = "Pago fallido";
+"The subscription was canceled" = "La suscripción fue cancelada";

+ 0 - 1
TSLiveWallpaper/fr.lproj/LaunchScreen.strings

@@ -1 +0,0 @@
-

+ 0 - 115
TSLiveWallpaper/fr.lproj/Localizable.strings

@@ -1,115 +0,0 @@
-/* 
-  Localizable.strings
-  TSLiveWallpaper
-
-  Created by nkl on 2025/2/26.
-  
-*/
-
-/* Unlock Message */
-"It will be unlocked after an ad." = "Il sera débloqué après une publicité.";
-
-/* Unlocking */
-"Unlocking..." = "Déverrouillage...";
-
-/* Loading */
-"Loading Failed" = "Échec du chargement";
-
-/* Search */
-"Search" = "Rechercher";
-
-/* Music */
-"No Music" = "Aucune musique";
-
-/* Network */
-"Network error, please check." = "Erreur réseau, veuillez vérifier.";
-
-/* Data */
-"No Data" = "Aucune donnée";
-
-/* Reload */
-"Reload" = "Recharger";
-
-/* Rename */
-"Rename" = "Renommer";
-
-/* Playlist */
-"Delete Playlist" = "Supprimer la playlist";
-"Create Playlist" = "Créer une playlist";
-"Playlist Name" = "Nom de la playlist";
-"input name" = "saisir un nom";
-"Playlist" = "Playlist";
-"Shuffle All" = "Mélanger tout";
-
-/* Confirmation */
-"Are you sure to delete" = "Êtes-vous sûr de vouloir supprimer ?";
-
-/* Actions */
-"Like" = "J'aime";
-"Delete" = "Supprimer";
-"Add to Playlist" = "Ajouter à la playlist";
-"Remove from playlist" = "Retirer de la playlist";
-"Created Successfully" = "Créé avec succès";
-"OK" = "OK";
-"Recently" = "Récemment";
-"Already Exists" = "Existe déjà";
-"Up Next" = "À suivre";
-"UnKnown" = "Inconnu";
-"Select All" = "Tout sélectionner";
-"Play All" = "Tout lire";
-"Done" = "Terminé";
-"Find your favorite songs" = "Trouvez vos chansons préférées";
-"Sort By" = "Trier par";
-"Ascending order by time" = "Ordre croissant par temps";
-"Descending order by time" = "Ordre décroissant par temps";
-"Ascending order by name" = "Ordre croissant par nom";
-"Descending order by name" = "Ordre décroissant par nom";
-"Add to like" = "Ajouter aux favoris";
-"Remove from like" = "Retirer des favoris";
-"Removed Successfully" = "Retiré avec succès";
-"Added Successfully" = "Ajouté avec succès";
-"Delete Successfully" = "Supprimé avec succès";
-"Search Music" = "Rechercher de la musique";
-"History" = "Historique";
-"Delete all" = "Tout supprimer";
-"Sleep Mode" = "Mode veille";
-"Turn Off" = "Éteindre";
-"Downloading" = "Téléchargement en cours";
-"Retry" = "Réessayer";
-"From Photo" = "Depuis la photo";
-"From Files" = "Depuis les fichiers";
-"Go to Add" = "Aller à Ajouter";
-"Getting price" = "Obtention du prix";
-"Get price failure, Will automatically retry in 5 seconds" = "Échec de l'obtention du prix, nouvelle tentative automatique dans 5 secondes";
-"Purchasing now" = "Achat en cours";
-"Congratulation you have become VIP" = "Félicitations, vous êtes devenu VIP";
-"Finish" = "Terminer";
-"Restoring now" = "Restauration en cours";
-"Couldn't Restore Subscription" = "Impossible de restaurer l'abonnement";
-"Failed to restore subscribe, please try again" = "Échec de la restauration de l'abonnement, veuillez réessayer";
-"Verify receipt failed" = "Échec de la vérification du reçu";
-"Continue" = "Continuer";
-
-"Save Successfully" = "Enregistré avec succès";
-"View" = "Voir";
-"Create Live Wallpaper" = "Créer un fond d'écran animé";
-"DIY Live Wallpaper" = "Fond d'écran animé DIY";
-"DIY Successfully" = "DIY réussi";
-"Upload Video" = "Télécharger une vidéo";
-"How to set shuffle packs" = "Comment configurer les packs aléatoires";
-"Save All" = "Tout enregistrer";
-"Upgrade" = "Améliorer";
-"Update" = "Mettre à jour";
-"Rate us" = "Évaluez-nous";
-"Share us" = "Partagez-nous";
-"Privacy Policy" = "Politique de confidentialité";
-"Terms of Service" = "Conditions d'utilisation";
-"About us" = "À propos de nous";
-"Save" = "Enregistrer";
-"Save Fail" = "Échec de l'enregistrement";
-"ScreenRecorder unAvailable" = "Enregistreur d'écran non disponible";
-
-"All Premium Wallpapers" = "Tous les fonds d'écran premium";
-"Unlimited Video to Live" = "Vidéo illimitée en direct";
-"100% No Ads" = "100 % sans publicité";
-"Share" = "Partager";

+ 0 - 1
TSLiveWallpaper/pt-PT.lproj/LaunchScreen.strings

@@ -1 +0,0 @@
-

+ 0 - 114
TSLiveWallpaper/pt-PT.lproj/Localizable.strings

@@ -1,114 +0,0 @@
-/* 
-  Localizable.strings
-  TSLiveWallpaper
-
-  Created by nkl on 2025/2/26.
-  
-*/
-/* Unlock Message */
-"It will be unlocked after an ad." = "Será desbloqueado após um anúncio.";
-
-/* Unlocking */
-"Unlocking..." = "Desbloqueando...";
-
-/* Loading */
-"Loading Failed" = "Falha ao carregar";
-
-/* Search */
-"Search" = "Pesquisar";
-
-/* Music */
-"No Music" = "Nenhuma música";
-
-/* Network */
-"Network error, please check." = "Erro de rede, por favor verifique.";
-
-/* Data */
-"No Data" = "Nenhum dado";
-
-/* Reload */
-"Reload" = "Recarregar";
-
-/* Rename */
-"Rename" = "Renomear";
-
-/* Playlist */
-"Delete Playlist" = "Excluir playlist";
-"Create Playlist" = "Criar playlist";
-"Playlist Name" = "Nome da playlist";
-"input name" = "insira o nome";
-"Playlist" = "Playlist";
-"Shuffle All" = "Embaralhar tudo";
-
-/* Confirmation */
-"Are you sure to delete" = "Tem certeza que deseja excluir?";
-
-/* Actions */
-"Like" = "Curtir";
-"Delete" = "Excluir";
-"Add to Playlist" = "Adicionar à playlist";
-"Remove from playlist" = "Remover da playlist";
-"Created Successfully" = "Criado com sucesso";
-"OK" = "OK";
-"Recently" = "Recentemente";
-"Already Exists" = "Já existe";
-"Up Next" = "A seguir";
-"UnKnown" = "Desconhecido";
-"Select All" = "Selecionar tudo";
-"Play All" = "Reproduzir tudo";
-"Done" = "Concluído";
-"Find your favorite songs" = "Encontre suas músicas favoritas";
-"Sort By" = "Ordenar por";
-"Ascending order by time" = "Ordem crescente por tempo";
-"Descending order by time" = "Ordem decrescente por tempo";
-"Ascending order by name" = "Ordem crescente por nome";
-"Descending order by name" = "Ordem decrescente por nome";
-"Add to like" = "Adicionar aos favoritos";
-"Remove from like" = "Remover dos favoritos";
-"Removed Successfully" = "Removido com sucesso";
-"Added Successfully" = "Adicionado com sucesso";
-"Delete Successfully" = "Excluído com sucesso";
-"Search Music" = "Pesquisar música";
-"History" = "Histórico";
-"Delete all" = "Excluir tudo";
-"Sleep Mode" = "Modo de espera";
-"Turn Off" = "Desligar";
-"Downloading" = "Baixando";
-"Retry" = "Tentar novamente";
-"From Photo" = "Da foto";
-"From Files" = "Dos arquivos";
-"Go to Add" = "Ir para adicionar";
-"Getting price" = "Obtendo preço";
-"Get price failure, Will automatically retry in 5 seconds" = "Falha ao obter preço, tentativa automática em 5 segundos";
-"Purchasing now" = "Comprando agora";
-"Congratulation you have become VIP" = "Parabéns, você se tornou VIP";
-"Finish" = "Concluir";
-"Restoring now" = "Restaurando agora";
-"Couldn't Restore Subscription" = "Não foi possível restaurar a assinatura";
-"Failed to restore subscribe, please try again" = "Falha ao restaurar a assinatura, por favor tente novamente";
-"Verify receipt failed" = "Falha ao verificar o recibo";
-"Continue" = "Continuar";
-
-"Save Successfully" = "Salvo com sucesso";
-"View" = "Ver";
-"Create Live Wallpaper" = "Criar papel de parede ao vivo";
-"DIY Live Wallpaper" = "Papel de parede ao vivo DIY";
-"DIY Successfully" = "DIY concluído com sucesso";
-"Upload Video" = "Carregar vídeo";
-"How to set shuffle packs" = "Como configurar pacotes aleatórios";
-"Save All" = "Salvar tudo";
-"Upgrade" = "Atualizar";
-"Update" = "Atualização";
-"Rate us" = "Avalie-nos";
-"Share us" = "Compartilhe-nos";
-"Privacy Policy" = "Política de Privacidade";
-"Terms of Service" = "Termos de Serviço";
-"About us" = "Sobre nós";
-"Save" = "Salvar";
-"Save Fail" = "Falha ao salvar";
-"ScreenRecorder unAvailable" = "Gravador de tela indisponível";
-
-"All Premium Wallpapers" = "Todos os papéis de parede premium";
-"Unlimited Video to Live" = "Vídeo ilimitado para viver";
-"100% No Ads" = "100% sem anúncios";
-"Share" = "Compartilhar";