From c11a46d012cb73d2615258f5fa1e1d69a0b58200 Mon Sep 17 00:00:00 2001 From: "Mr.zhou" <1422157428@qq.com> Date: Thu, 15 Aug 2024 15:50:48 +0800 Subject: [PATCH] =?UTF-8?q?1.1.7=EF=BC=8C=E5=A4=9A=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E7=89=B9=E5=8C=96=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project.pbxproj | 109 +++++++++++- .../UserInterfaceState.xcuserstate | Bin 299287 -> 483394 bytes .../Controllers/MP_IAPViewController.swift | 31 +++- .../Controllers/MP_IAPViewController.xib | 5 + .../Common/Extension(扩展)/ImagePicker.swift | 2 +- .../MP/Common/Extension(扩展)/String.swift | 4 + .../ar.lproj/InfoPlist.strings | 14 ++ .../ar.lproj/Localizable.strings | 155 ++++++++++++++++++ .../de.lproj/InfoPlist.strings | 13 ++ .../de.lproj/Localizable.strings | 155 ++++++++++++++++++ .../en.lproj/InfoPlist.strings | 13 ++ .../en.lproj/Localizable.strings | 155 ++++++++++++++++++ .../es-419.lproj/InfoPlist.strings | 13 ++ .../es-419.lproj/Localizable.strings | 155 ++++++++++++++++++ .../fr.lproj/InfoPlist.strings | 13 ++ .../fr.lproj/Localizable.strings | 155 ++++++++++++++++++ .../it.lproj/InfoPlist.strings | 13 ++ .../it.lproj/Localizable.strings | 155 ++++++++++++++++++ .../pt-BR.lproj/InfoPlist.strings | 13 ++ .../pt-BR.lproj/Localizable.strings | 155 ++++++++++++++++++ .../tr.lproj/InfoPlist.strings | 13 ++ .../tr.lproj/Localizable.strings | 155 ++++++++++++++++++ .../Common/Macro(宏定义与全局量)/Macro.swift | 4 +- .../Tool(工具封装)/MP_AdMobManager.swift | 42 ++--- .../Tool(工具封装)/MP_AnalyticsManager.swift | 34 +++- .../Tool(工具封装)/MP_DownloadManager.swift | 96 ++++++----- .../Common/Tool(工具封装)/MP_IAPManager.swift | 12 +- .../MPPositive_DownloadViewModel.swift | 2 +- .../MPPositive_LibraryListViewModel.swift | 14 +- ...MPPositive_SearchResultListViewModel.swift | 6 +- .../MPPositive_PlayerLoadViewModel.swift | 31 +++- .../MPPositive_BaseViewController.swift | 2 +- .../MPPositive_MoreSongOperationsViewController.swift | 44 +++-- .../MPPositive_PresentationController.swift | 2 +- .../MPPositive_ChoosePlayListViewController.swift | 4 +- .../MPPositive_CustomPlayListViewController.swift | 18 +- .../MPPositive_LibraryViewController.swift | 12 +- .../MPPositive_LoveArtistsViewController.swift | 4 +- .../MPPositive_LoveSongsViewController.swift | 24 +-- .../MPPositive_OfflineSongsViewController.swift | 22 +-- .../MPPositive_HomeViewController.swift | 12 +- .../MPPositive_ListShowViewController.swift | 18 +- .../MPPositive_MoreContentViewController.swift | 2 +- .../MPPositive_PlayerViewController.swift | 22 +-- .../MPPositive_GrideMoodViewController.swift | 2 +- ...MPPositive_SearchResultShowViewController.swift | 2 +- .../MPPositive_SearchViewController.swift | 3 +- .../Base/MPPositive_BottomShowView.swift | 2 +- .../MPPositive_CenterListSearchView.swift | 2 +- ...Positive_ArtistShowSongTableViewCell.swift | 2 +- .../Home/MPPositive_ArtistShowTypeView.swift | 20 +-- ...sitive_HomeLibraryListstableViewCell.swift | 2 +- ...ositive_HomeSingleCollectionViewCell.swift | 4 +- .../MPPositive_HomeSinglesTableViewCell.swift | 20 +-- ...PPositive_MusicItemShowTableViewCell.swift | 4 +- .../Player/MPPositive_PlayerCoverView.swift | 6 +- .../MPPositive_RecommendShowTypeView.swift | 18 +- ...Positive_SearchResultPreviewShowView.swift | 18 +- ...sitive_SearchResultShowTableViewCell.swift | 4 +- .../MPPositive_SearchResultTypeShowView.swift | 20 +-- .../ViewModels/MPSideA_MusicViewModel.swift | 6 +- .../MPSideA_AddViewController.swift | 12 +- .../MPSideA_AddViewController.xib | 4 +- .../MPSideA_AboutViewController.swift | 16 +- .../MPSideA_AboutViewController.xib | 2 + .../MPSideA_CenterViewController.swift | 5 + .../MPSideA_CenterViewController.xib | 1 + .../MPSideA_DeleteViewController.swift | 20 +++ .../MPSideA_DeleteViewController.xib | 6 +- .../MPSideA_MoreViewController.swift | 10 ++ .../MPSideA_MoreViewController.xib | 4 +- .../MPSideA_RenameViewController.swift | 19 ++- .../MPSideA_RenameViewController.xib | 3 + .../MPSideA_SettingViewController.swift | 29 ++-- .../MPSideA_SettingViewController.xib | 3 +- .../MPSideA_HomeViewController.swift | 1 + .../MPSideA_SettingTableViewCell.swift | 2 +- .../ar.lproj/LaunchScreen.strings | 1 + relax.offline.mp3.music/ar.lproj/Main.strings | 1 + .../de.lproj/LaunchScreen.strings | 1 + relax.offline.mp3.music/de.lproj/Main.strings | 1 + .../es-419.lproj/LaunchScreen.strings | 1 + .../es-419.lproj/Main.strings | 1 + .../fr.lproj/LaunchScreen.strings | 1 + relax.offline.mp3.music/fr.lproj/Main.strings | 1 + .../it.lproj/LaunchScreen.strings | 1 + relax.offline.mp3.music/it.lproj/Main.strings | 1 + .../pt-BR.lproj/LaunchScreen.strings | 1 + .../pt-BR.lproj/Main.strings | 1 + .../tr.lproj/LaunchScreen.strings | 1 + relax.offline.mp3.music/tr.lproj/Main.strings | 1 + 91 files changed, 1942 insertions(+), 267 deletions(-) create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/ar.lproj/InfoPlist.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/ar.lproj/Localizable.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/de.lproj/InfoPlist.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/de.lproj/Localizable.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/en.lproj/InfoPlist.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/en.lproj/Localizable.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/es-419.lproj/InfoPlist.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/es-419.lproj/Localizable.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/fr.lproj/InfoPlist.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/fr.lproj/Localizable.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/it.lproj/InfoPlist.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/it.lproj/Localizable.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/pt-BR.lproj/InfoPlist.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/pt-BR.lproj/Localizable.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/tr.lproj/InfoPlist.strings create mode 100644 relax.offline.mp3.music/MP/Common/Localizable(本地化)/tr.lproj/Localizable.strings create mode 100644 relax.offline.mp3.music/ar.lproj/LaunchScreen.strings create mode 100644 relax.offline.mp3.music/ar.lproj/Main.strings create mode 100644 relax.offline.mp3.music/de.lproj/LaunchScreen.strings create mode 100644 relax.offline.mp3.music/de.lproj/Main.strings create mode 100644 relax.offline.mp3.music/es-419.lproj/LaunchScreen.strings create mode 100644 relax.offline.mp3.music/es-419.lproj/Main.strings create mode 100644 relax.offline.mp3.music/fr.lproj/LaunchScreen.strings create mode 100644 relax.offline.mp3.music/fr.lproj/Main.strings create mode 100644 relax.offline.mp3.music/it.lproj/LaunchScreen.strings create mode 100644 relax.offline.mp3.music/it.lproj/Main.strings create mode 100644 relax.offline.mp3.music/pt-BR.lproj/LaunchScreen.strings create mode 100644 relax.offline.mp3.music/pt-BR.lproj/Main.strings create mode 100644 relax.offline.mp3.music/tr.lproj/LaunchScreen.strings create mode 100644 relax.offline.mp3.music/tr.lproj/Main.strings diff --git a/relax.offline.mp3.music.xcodeproj/project.pbxproj b/relax.offline.mp3.music.xcodeproj/project.pbxproj index 20986a7..4a5bced 100644 --- a/relax.offline.mp3.music.xcodeproj/project.pbxproj +++ b/relax.offline.mp3.music.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ CB0968752C2121410045E55B /* GADTSmallTemplateView.m in Sources */ = {isa = PBXBuildFile; fileRef = CB09686C2C2121410045E55B /* GADTSmallTemplateView.m */; }; CB0968762C2121410045E55B /* GADTSmallTemplateView.xib in Resources */ = {isa = PBXBuildFile; fileRef = CB09686D2C2121410045E55B /* GADTSmallTemplateView.xib */; }; CB0968772C2121410045E55B /* GADTTemplateView.m in Sources */ = {isa = PBXBuildFile; fileRef = CB09686F2C2121410045E55B /* GADTTemplateView.m */; }; + CB09B0D22C6B0F2F00810590 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CB09B0D02C6B0F2F00810590 /* InfoPlist.strings */; }; CB0B368B2C65AE3A004036E2 /* Lottie in Frameworks */ = {isa = PBXBuildFile; productRef = CB0B368A2C65AE3A004036E2 /* Lottie */; }; CB0B368D2C65AEEF004036E2 /* Wave_Animation.json in Resources */ = {isa = PBXBuildFile; fileRef = CB0B368C2C65AEEF004036E2 /* Wave_Animation.json */; }; CB0B368F2C65B026004036E2 /* MP_WaveAnimationMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB0B368E2C65B026004036E2 /* MP_WaveAnimationMaskView.swift */; }; @@ -27,7 +28,6 @@ CB1E3B682C23E09100071DEA /* MPPositive_CustomVideoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1E3B672C23E09100071DEA /* MPPositive_CustomVideoModel.swift */; }; CB20A0702C53BDBF00FC5AFC /* MP_WebVisitorDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB20A06F2C53BDBF00FC5AFC /* MP_WebVisitorDataManager.swift */; }; CB2CAAD42C59DC1100EF691D /* MPPositive_TrashListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2CAAD32C59DC1100EF691D /* MPPositive_TrashListModel.swift */; }; - CB2CAAD72C5A1AC500EF691D /* MP_IAPViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = CB2CAAD62C5A1AC500EF691D /* MP_IAPViewController.xib */; }; CB2CAAD82C5A1AC500EF691D /* MP_IAPViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2CAAD52C5A1AC500EF691D /* MP_IAPViewController.swift */; }; CB6EEB8E2C5DFE6100AEC414 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB6EEB8D2C5DFE6100AEC414 /* StoreKit.framework */; }; CB7FC5422C2AA01F00292A43 /* FacebookAEM in Frameworks */ = {isa = PBXBuildFile; productRef = CB7FC5412C2AA01F00292A43 /* FacebookAEM */; }; @@ -232,6 +232,8 @@ CBAFCBAF2C0A10DA0054500E /* FirebaseRemoteConfig in Frameworks */ = {isa = PBXBuildFile; productRef = CBAFCBAE2C0A10DA0054500E /* FirebaseRemoteConfig */; }; CBAFCBB12C0A121F0054500E /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = CBAFCBB02C0A121F0054500E /* GoogleService-Info.plist */; }; CBB6372C2C1C17C300F1DEC9 /* MP_AdMobManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBB6372B2C1C17C300F1DEC9 /* MP_AdMobManager.swift */; }; + CBB720332C69A91500D1B504 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CBB720312C69A91500D1B504 /* Localizable.strings */; }; + CBB720542C6A040000D1B504 /* MP_IAPViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = CBB720532C6A040000D1B504 /* MP_IAPViewController.xib */; }; CBB75FDD2C4F7AA60041665D /* UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBB75FDC2C4F7AA60041665D /* UIImageView.swift */; }; CBBAF8CD2C339CF200B3C838 /* MPPositive_JsonCharts.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBBAF8CC2C339CF200B3C838 /* MPPositive_JsonCharts.swift */; }; CBC1FB7A2C50999800AC0633 /* MPPositive_LibraryItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC1FB792C50999800AC0633 /* MPPositive_LibraryItemModel.swift */; }; @@ -278,6 +280,14 @@ CB09686E2C2121410045E55B /* GADTTemplateView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADTTemplateView.h; sourceTree = ""; }; CB09686F2C2121410045E55B /* GADTTemplateView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GADTTemplateView.m; sourceTree = ""; }; CB09687E2C2126DD0045E55B /* Swift-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Swift-Bridging-Header.h"; sourceTree = ""; }; + CB09B0D12C6B0F2F00810590 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + CB09B0DA2C6B0F8600810590 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; + CB09B0DB2C6B0F8A00810590 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; + CB09B0DC2C6B0F9300810590 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/InfoPlist.strings"; sourceTree = ""; }; + CB09B0DD2C6B0F9700810590 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; + CB09B0DE2C6B0F9900810590 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; + CB09B0DF2C6B0F9D00810590 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; + CB09B0E02C6B0F9E00810590 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; CB0B368C2C65AEEF004036E2 /* Wave_Animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Wave_Animation.json; sourceTree = ""; }; CB0B368E2C65B026004036E2 /* MP_WaveAnimationMaskView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MP_WaveAnimationMaskView.swift; sourceTree = ""; }; CB0B36902C65EBFC004036E2 /* MPPositive_BaseShowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPPositive_BaseShowView.swift; sourceTree = ""; }; @@ -288,7 +298,6 @@ CB20A06F2C53BDBF00FC5AFC /* MP_WebVisitorDataManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MP_WebVisitorDataManager.swift; sourceTree = ""; }; CB2CAAD32C59DC1100EF691D /* MPPositive_TrashListModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPPositive_TrashListModel.swift; sourceTree = ""; }; CB2CAAD52C5A1AC500EF691D /* MP_IAPViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MP_IAPViewController.swift; sourceTree = ""; }; - CB2CAAD62C5A1AC500EF691D /* MP_IAPViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MP_IAPViewController.xib; sourceTree = ""; }; CB6EEB8D2C5DFE6100AEC414 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; CB7FC5472C2AC25C00292A43 /* MPPositive_CenterListSearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPPositive_CenterListSearchView.swift; sourceTree = ""; }; CBAFC9F22C0A10500054500E /* MP_BaseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MP_BaseViewController.swift; sourceTree = ""; }; @@ -486,6 +495,29 @@ CBAFCAE02C0A10500054500E /* MPSideA_PlayerActionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MPSideA_PlayerActionView.swift; sourceTree = ""; }; CBAFCBB02C0A121F0054500E /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; CBB6372B2C1C17C300F1DEC9 /* MP_AdMobManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MP_AdMobManager.swift; sourceTree = ""; }; + CBB720322C69A91500D1B504 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + CBB720342C69AA6500D1B504 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Main.strings; sourceTree = ""; }; + CBB720352C69AA6600D1B504 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/LaunchScreen.strings; sourceTree = ""; }; + CBB720362C69AA6600D1B504 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + CBB720372C69AAA800D1B504 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Main.strings; sourceTree = ""; }; + CBB720382C69AAA800D1B504 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/LaunchScreen.strings; sourceTree = ""; }; + CBB720392C69AAA800D1B504 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; + CBB7203A2C69AACB00D1B504 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Main.strings"; sourceTree = ""; }; + CBB7203B2C69AACC00D1B504 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/LaunchScreen.strings"; sourceTree = ""; }; + CBB7203C2C69AACC00D1B504 /* es-419 */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "es-419"; path = "es-419.lproj/Localizable.strings"; sourceTree = ""; }; + CBB7203D2C69AB1800D1B504 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Main.strings"; sourceTree = ""; }; + CBB7203E2C69AB1800D1B504 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/LaunchScreen.strings"; sourceTree = ""; }; + CBB7203F2C69AB1800D1B504 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; + CBB720402C69AB3900D1B504 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main.strings; sourceTree = ""; }; + CBB720412C69AB3A00D1B504 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/LaunchScreen.strings; sourceTree = ""; }; + CBB720422C69AB3A00D1B504 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; + CBB720432C69AB4A00D1B504 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Main.strings; sourceTree = ""; }; + CBB720442C69AB4A00D1B504 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/LaunchScreen.strings; sourceTree = ""; }; + CBB720452C69AB4A00D1B504 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; + CBB720462C69AB5100D1B504 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Main.strings; sourceTree = ""; }; + CBB720472C69AB5200D1B504 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/LaunchScreen.strings; sourceTree = ""; }; + CBB720482C69AB5200D1B504 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; + CBB720532C6A040000D1B504 /* MP_IAPViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MP_IAPViewController.xib; sourceTree = ""; }; CBB75FDC2C4F7AA60041665D /* UIImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImageView.swift; sourceTree = ""; }; CBBAF8CC2C339CF200B3C838 /* MPPositive_JsonCharts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPPositive_JsonCharts.swift; sourceTree = ""; }; CBC1FB792C50999800AC0633 /* MPPositive_LibraryItemModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPPositive_LibraryItemModel.swift; sourceTree = ""; }; @@ -571,6 +603,15 @@ path = "OC插件"; sourceTree = ""; }; + CB3DB13E2C69A570002DCCDD /* Localizable(本地化) */ = { + isa = PBXGroup; + children = ( + CBB720312C69A91500D1B504 /* Localizable.strings */, + CB09B0D02C6B0F2F00810590 /* InfoPlist.strings */, + ); + path = "Localizable(本地化)"; + sourceTree = ""; + }; CBAFC9F62C0A10500054500E /* Controllers */ = { isa = PBXGroup; children = ( @@ -581,7 +622,7 @@ CB15B8992C353B2400756E89 /* MP_GuideViewController.swift */, CB15B89A2C353B2400756E89 /* MP_GuideViewController.xib */, CB2CAAD52C5A1AC500EF691D /* MP_IAPViewController.swift */, - CB2CAAD62C5A1AC500EF691D /* MP_IAPViewController.xib */, + CBB720532C6A040000D1B504 /* MP_IAPViewController.xib */, ); path = Controllers; sourceTree = ""; @@ -727,6 +768,7 @@ CBAFCA062C0A10500054500E /* Macro(宏定义与全局量) */, CBAFCA092C0A10500054500E /* Protocol(公用协议) */, CBAFCA1E2C0A10500054500E /* Resource(资源) */, + CB3DB13E2C69A570002DCCDD /* Localizable(本地化) */, CB0968702C2121410045E55B /* OC插件 */, CBAFCA2E2C0A10500054500E /* Tool(工具封装) */, ); @@ -1269,6 +1311,13 @@ knownRegions = ( en, Base, + de, + fr, + "es-419", + "pt-BR", + ar, + tr, + it, ); mainGroup = CBC2D6DF2BFDF3D700E17703; packageReferences = ( @@ -1303,6 +1352,7 @@ CBAFCBB12C0A121F0054500E /* GoogleService-Info.plist in Resources */, CBAFCBA52C0A10500054500E /* MPSideA_Home_RowListsTableViewCell.xib in Resources */, CBAFCB042C0A10500054500E /* Seawater Surging.mp3 in Resources */, + CBB720332C69A91500D1B504 /* Localizable.strings in Resources */, CBAFCB032C0A10500054500E /* Nocturnal Insects.mp3 in Resources */, CBC2D6F82BFDF3D800E17703 /* Assets.xcassets in Resources */, CBAFCAFB2C0A10500054500E /* Mountain stream.mp3 in Resources */, @@ -1319,12 +1369,12 @@ CBC2D6F32BFDF3D700E17703 /* Base in Resources */, CBAFCB9A2C0A10500054500E /* MPSideA_CustomTabBarView.xib in Resources */, CBAFCB012C0A10500054500E /* Cicada Chirping.mp3 in Resources */, + CBB720542C6A040000D1B504 /* MP_IAPViewController.xib in Resources */, CBAFCB7A2C0A10500054500E /* MPSideA_AddViewController.xib in Resources */, CBAFCBA22C0A10500054500E /* MPSideA_Home_FourthListCollectionViewCell.xib in Resources */, CBAFCB022C0A10500054500E /* Howling Wind.mp3 in Resources */, CBAFCB842C0A10500054500E /* MPSideA_DeleteViewController.xib in Resources */, CBAFCB822C0A10500054500E /* MPSideA_CenterViewController.xib in Resources */, - CB2CAAD72C5A1AC500EF691D /* MP_IAPViewController.xib in Resources */, CBAFCB062C0A10500054500E /* waterfall.mp3 in Resources */, CBAFCAFE2C0A10500054500E /* Beach.mp3 in Resources */, CBC2D7D42BFDF4B900E17703 /* PrivacyInfo.xcprivacy in Resources */, @@ -1332,6 +1382,7 @@ CBAFCB882C0A10500054500E /* MPSideA_PrivacyViewController.xib in Resources */, CBAFCB802C0A10500054500E /* MPSideA_AboutViewController.xib in Resources */, CBAFCAFF2C0A10500054500E /* Call of Seagulls.mp3 in Resources */, + CB09B0D22C6B0F2F00810590 /* InfoPlist.strings in Resources */, CBAFCB052C0A10500054500E /* Summer Insects.mp3 in Resources */, CB15B89C2C353B2400756E89 /* MP_GuideViewController.xib in Resources */, CBAFCB002C0A10500054500E /* Chirping of Birds.mp3 in Resources */, @@ -1627,10 +1678,47 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ + CB09B0D02C6B0F2F00810590 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + CB09B0D12C6B0F2F00810590 /* en */, + CB09B0DA2C6B0F8600810590 /* de */, + CB09B0DB2C6B0F8A00810590 /* fr */, + CB09B0DC2C6B0F9300810590 /* es-419 */, + CB09B0DD2C6B0F9700810590 /* pt-BR */, + CB09B0DE2C6B0F9900810590 /* ar */, + CB09B0DF2C6B0F9D00810590 /* tr */, + CB09B0E02C6B0F9E00810590 /* it */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + CBB720312C69A91500D1B504 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + CBB720322C69A91500D1B504 /* en */, + CBB720362C69AA6600D1B504 /* de */, + CBB720392C69AAA800D1B504 /* fr */, + CBB7203C2C69AACC00D1B504 /* es-419 */, + CBB7203F2C69AB1800D1B504 /* pt-BR */, + CBB720422C69AB3A00D1B504 /* ar */, + CBB720452C69AB4A00D1B504 /* tr */, + CBB720482C69AB5200D1B504 /* it */, + ); + name = Localizable.strings; + sourceTree = ""; + }; CBC2D6F12BFDF3D700E17703 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( CBC2D6F22BFDF3D700E17703 /* Base */, + CBB720342C69AA6500D1B504 /* de */, + CBB720372C69AAA800D1B504 /* fr */, + CBB7203A2C69AACB00D1B504 /* es-419 */, + CBB7203D2C69AB1800D1B504 /* pt-BR */, + CBB720402C69AB3900D1B504 /* ar */, + CBB720432C69AB4A00D1B504 /* tr */, + CBB720462C69AB5100D1B504 /* it */, ); name = Main.storyboard; sourceTree = ""; @@ -1639,6 +1727,13 @@ isa = PBXVariantGroup; children = ( CBC2D6FA2BFDF3D800E17703 /* Base */, + CBB720352C69AA6600D1B504 /* de */, + CBB720382C69AAA800D1B504 /* fr */, + CBB7203B2C69AACC00D1B504 /* es-419 */, + CBB7203E2C69AB1800D1B504 /* pt-BR */, + CBB720412C69AB3A00D1B504 /* ar */, + CBB720442C69AB4A00D1B504 /* tr */, + CBB720472C69AB5200D1B504 /* it */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -1651,6 +1746,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; @@ -1714,6 +1810,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; @@ -1782,7 +1879,7 @@ INFOPLIST_FILE = relax.offline.mp3.music/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Musiclax; INFOPLIST_KEY_NSMicrophoneUsageDescription = "\"Musiclax\" requires you to turn on the microphone to recognize surrounding decibels and automatically turn on white noise for you. Do you allow this application to obtain your microphone permissions?"; - INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "\"Musiclax\" requires opening your album to obtain photos, which are used to add your custom white noise. Do you want to allow this application to obtain your album permissions?"; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "\"Musiclax\" needs to open your photo album to get the album resources, which are used to add your custom white noise. Do you want to allow this app to access your photo album permissions?"; INFOPLIST_KEY_NSUserTrackingUsageDescription = "\"Musiclax\" needs to request tracking permissions to provide a personalized advertising experience. We respect and protect your privacy and will not sell your data to third parties."; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; @@ -1828,7 +1925,7 @@ INFOPLIST_FILE = relax.offline.mp3.music/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Musiclax; INFOPLIST_KEY_NSMicrophoneUsageDescription = "\"Musiclax\" requires you to turn on the microphone to recognize surrounding decibels and automatically turn on white noise for you. Do you allow this application to obtain your microphone permissions?"; - INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "\"Musiclax\" requires opening your album to obtain photos, which are used to add your custom white noise. Do you want to allow this application to obtain your album permissions?"; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "\"Musiclax\" needs to open your photo album to get the album resources, which are used to add your custom white noise. Do you want to allow this app to access your photo album permissions?"; INFOPLIST_KEY_NSUserTrackingUsageDescription = "\"Musiclax\" needs to request tracking permissions to provide a personalized advertising experience. We respect and protect your privacy and will not sell your data to third parties."; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; diff --git a/relax.offline.mp3.music.xcworkspace/xcuserdata/zhou.xcuserdatad/UserInterfaceState.xcuserstate b/relax.offline.mp3.music.xcworkspace/xcuserdata/zhou.xcuserdatad/UserInterfaceState.xcuserstate index 1b245bdf4d115f435dbcd5cf8b0a851417fdc1e1..55e51373fe4d4f7b34d3b0a663395e3def5efc10 100644 GIT binary patch literal 483394 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

xCxZN|34%~P>`nF- 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 z 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 literal 299287 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 HcQyV$-9N&& diff --git a/relax.offline.mp3.music/MP/Common/Base(公用基类)/Controllers/MP_IAPViewController.swift b/relax.offline.mp3.music/MP/Common/Base(公用基类)/Controllers/MP_IAPViewController.swift index 1ec1da8..27806f2 100644 --- a/relax.offline.mp3.music/MP/Common/Base(公用基类)/Controllers/MP_IAPViewController.swift +++ b/relax.offline.mp3.music/MP/Common/Base(公用基类)/Controllers/MP_IAPViewController.swift @@ -49,6 +49,32 @@ class MP_IAPViewController: UIViewController { } @IBOutlet weak var lifeImageView: UIImageView! @IBOutlet weak var lifePriceLabel: UILabel! + @IBOutlet weak var noticeLabel: UILabel!{ + didSet{ + noticeLabel.text = NSLocalizedString("No mandatory,cancel at anytime", comment: "提醒用户可以取消订阅") + } + } + @IBOutlet weak var continueBtn: UIButton!{ + didSet{ + continueBtn.setTitle(NSLocalizedString("Continue", comment: "继续"), for: .normal) + } + } + @IBOutlet weak var leftBtn: UIButton!{ + didSet{ + leftBtn.setTitle(NSLocalizedString("Terms of Use", comment: "用户协议"), for: .normal) + } + } + @IBOutlet weak var centerBtn: UIButton!{ + didSet{ + centerBtn.setTitle(NSLocalizedString("Restore", comment: "恢复"), for: .normal) + } + } + @IBOutlet weak var rightBtn: UIButton!{ + didSet{ + rightBtn.setTitle(NSLocalizedString("Privacy Policy", comment: "隐私政策"), for: .normal) + } + } + var privacyBlock:(() -> Void)? var termsBlock:(() -> Void)? //选择的等级 @@ -57,6 +83,7 @@ class MP_IAPViewController: UIViewController { super.viewDidLoad() scrollView.contentInsetAdjustmentBehavior = .never MP_IAPManager.shared.requestProducts() + MP_AnalyticsManager.shared.VIP_page_impAction() //根据isType调整约束(A/B面样式存在差距) if isType { //B面 @@ -143,11 +170,11 @@ class MP_IAPViewController: UIViewController { //继续购买 @IBAction func continueClick(_ sender: UIButton) { guard let level = level else { - MP_HUD.onlytext("Please select your membership type", delay: 1.0, completion: nil) + MP_HUD.onlytext("Please select your product type".localizableString(), delay: 1.0, completion: nil) return } guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.onlytext("Bad connection~", delay: 1.0, completion: nil) + MP_HUD.onlytext("Bad connection~".localizableString(), delay: 1.0, completion: nil) return } MP_IAPManager.shared.purchaseProduct(level) diff --git a/relax.offline.mp3.music/MP/Common/Base(公用基类)/Controllers/MP_IAPViewController.xib b/relax.offline.mp3.music/MP/Common/Base(公用基类)/Controllers/MP_IAPViewController.xib index d5d6b57..cd3d7c8 100644 --- a/relax.offline.mp3.music/MP/Common/Base(公用基类)/Controllers/MP_IAPViewController.xib +++ b/relax.offline.mp3.music/MP/Common/Base(公用基类)/Controllers/MP_IAPViewController.xib @@ -15,13 +15,18 @@ + + + + + diff --git a/relax.offline.mp3.music/MP/Common/Extension(扩展)/ImagePicker.swift b/relax.offline.mp3.music/MP/Common/Extension(扩展)/ImagePicker.swift index e183b74..53caac6 100644 --- a/relax.offline.mp3.music/MP/Common/Extension(扩展)/ImagePicker.swift +++ b/relax.offline.mp3.music/MP/Common/Extension(扩展)/ImagePicker.swift @@ -164,7 +164,7 @@ extension UIImagePickerControllerDelegate where Self:UIViewController{ private func video(){ DispatchQueue.main.async { //次要处理 - let alertController = UIAlertController(title: "Access album permission request", message: "“Musiclax” needs to open your album to get the photos that will be used to add your custom white noise. Please go to ”Settings“ to turn on this permission!", preferredStyle: .alert) + let alertController = UIAlertController(title: "Access album permission request".localizableString(), message: "\"Musiclax\" needs to open your album to get the resources that will be used to add your custom white noise. Please go to ”Settings“ to turn on this permission!".localizableString(), preferredStyle: .alert) let CancelAction = UIAlertAction(title:"Cancel", style: .cancel) { (Cancel) in } diff --git a/relax.offline.mp3.music/MP/Common/Extension(扩展)/String.swift b/relax.offline.mp3.music/MP/Common/Extension(扩展)/String.swift index ae96ddd..337b80a 100644 --- a/relax.offline.mp3.music/MP/Common/Extension(扩展)/String.swift +++ b/relax.offline.mp3.music/MP/Common/Extension(扩展)/String.swift @@ -38,6 +38,10 @@ extension String { let rect = string.boundingRect(with:CGSize(width:0, height: height), options: [origin,lead], attributes: [NSAttributedString.Key.font:font], context:nil) return rect.width } + ///获取文本的多语言 + func localizableString() -> String { + return NSLocalizedString(self, comment: "") + } } extension Range where Bound == String.Index { func toNSRange(in string: String) -> NSRange { diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/ar.lproj/InfoPlist.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/ar.lproj/InfoPlist.strings new file mode 100644 index 0000000..d492fb2 --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/ar.lproj/InfoPlist.strings @@ -0,0 +1,14 @@ +/* + 阿拉伯语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/13. + +*/ +///相册使用说明 +"NSPhotoLibraryUsageDescription" = "يحتاج \"Musiclax\" إلى فتح ألبوم الصور الخاص بك للحصول على موارد الألبوم، والتي يتم استخدامها لإضافة الضوضاء البيضاء المخصصة الخاصة بك. هل تريد السماح لهذا التطبيق بالوصول إلى ألبوم الصور الخاص بك؟"; +///麦克风使用说明 +"NSMicrophoneUsageDescription" = "يتطلب \"Musiclax\" منك تشغيل الميكروفون الخاص بك للتعرف على وحدات الديسيبل المحيطة وتشغيل الضوضاء البيضاء تلقائيًا نيابةً عنك. هل تريد السماح لهذا التطبيق بالوصول إلى الميكروفون الخاص بك؟"; +///用户跟踪使用说明 +"NSUserTrackingUsageDescription" = "يحتاج \"Musiclax\" إلى طلب أذونات التتبع لتوفير تجربة إعلانية مخصصة. نحن نحترم ونحمي خصوصيتك ولن نبيع بياناتك لأطراف ثالث +."; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/ar.lproj/Localizable.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/ar.lproj/Localizable.strings new file mode 100644 index 0000000..83cc303 --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/ar.lproj/Localizable.strings @@ -0,0 +1,155 @@ +/* + 阿拉伯语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/12. + +*/ +//MARK: - 页面展示文本 +///曲库 +"Library" = "مكتبة الموسيقى"; +///真实人类声音 +"Real human voice" = "صوت بشري حقيقي"; +///电器的声音 +"Sounds of appliances" = "صوت الأجهزة الكهربائية"; +///大自然的声音 +"Sounds of nature" = "أصوات الطبيعة"; +///正在播放 +"Now Playing" = "العب الآن"; +///音量 +"Volume" = "مقدار"; +///定时关闭 +"Timing off" = "الاغلاق المقرر"; +///关于 +"About" = "عن"; +///反馈 +"Feedback" = "تعليق"; +///分享 +"Share" = "يشارك"; +///隐私政策 +"Privacy Policy" = "سياسة الخصوصية"; +///使用条款 +"Terms of Use" = "شروط الاستخدام"; +///清除缓存 +"Clear Cache" = "مسح ذاكرة التخزين المؤقت"; +///无强制,可随时取消 +"No mandatory,cancel at anytime" = "لا يوجد أي التزام، يمكنك الإلغاء في أي وقت"; +///继续 +"Continue" = "يكمل"; +///恢复 +"Restore" = "يتعافى"; +///设置 +"Setting" = "يثبت"; +///当前版本 +"Current Version" = "الإصدار الحالي"; +///版本 +"Version" = "إصدار"; +///版本更新 +"Version Update" = "تحديث الإصدار"; +///是最新版本 +"is the latest Version" = "هو الإصدار الأحدث"; +///取消 +"Cancel" = "يلغي"; +///如果您有任何意见或建议,请通过以下电子邮件地址与我们联系 +"If you have any comments or suggestions, please contact us at the following e-mail address" = "إذا كان لديك أي تعليقات أو اقتراحات، يرجى الاتصال بنا على عنوان البريد الإلكتروني التالي"; +///确认 +"Sure" = "يتأكد"; +///清除B面缓存 +"Clearing B" = "يمكن أن يساعد مسح ذاكرة التخزين المؤقت في تحرير مساحة التخزين وحل مشكلات التشغيل المحتملة. هل أنت متأكد أنك تريد أن تفعل هذا؟"; +///清除A面数据 +"Clearing A" = "سيؤدي النقر فوق ’موافق‘ إلى مسح أصول الوسائط التي تم تحميلها. هل أنت متأكد أنك تريد أن تفعل هذا؟"; +///重命名 +"Rename" = "إعادة تسمية"; +///删除 +"Delete" = "يمسح"; +///命名您的声音 +"Name Your Voice" = "قم بتسمية الصوت الخاص بك"; +///该值最多包含 60 个字符 +"60 characters" = "يمكن أن تحتوي القيمة على \nما يصل إلى 60 حرفًا"; +///确认 +"Confirm" = "يتأكد"; +///确认删除语音 +"Confirm Voice Deletion" = "تأكيد لحذف الصوت"; +///此操作无法撤消 +"This cannot be undone" = "لا يمكن التراجع عن هذا الإجراء"; +///从相册中获取 +"Pick from photo Library" = "اختر من معرض الصور"; +///从文件夹中获取 +"Pick from files" = "اختر من الملف"; +///访问相册权限请求 +"Access album permission request" = "الوصول إلى طلب إذن ألبوم الصور"; +///“Musiclax”需要打开您的专辑以获取用于添加自定义白噪声的资源。请前往“设置”开启此权限! +"\"Musiclax\" needs to open your album to get the resources that will be used to add your custom white noise. Please go to ”Settings“ to turn on this permission!" = "يتطلب \"Musiclax\" فتح الألبوم الخاص بك للحصول على الموارد اللازمة لإضافة ضوضاء بيضاء مخصصة. يرجى الانتقال إلى \"الإعدادات\" لتمكين هذا الإذن!"; +///歌曲 +"Songs" = "أغنية"; +///艺术家 +"Artists" = "فنان"; +///离线 +"Offline" = "غير متصل"; +///收藏歌曲 +"Love Songs" = "الأغاني المفضلة"; +///收藏艺术家 +"Love Artists" = "الفنان المفضل"; +///离线歌曲 +"Offline Songs" = "الأغاني دون اتصال"; +///搜索 +"Search" = "يبحث"; +///搜索歌曲、艺术家、播放列表 +"Search songs,artists,playlists" = "بحث الأغاني والفنانين وقوائم التشغيل"; +///历史 +"History" = "تاريخ"; +///播放列表 +"Playlists" = "قائمة التشغيل"; +///收藏播放列表 +"Collect PlayLists" = "قائمة التشغيل المفضلة"; +///命名您的播放列表 +"Name Your PlayList" = "قم بتسمية قائمة التشغيل الخاصة بك"; +///删除这首歌曲 +"Delete This Song" = "احذف هذه الأغنية"; +///您确定要删除这首歌曲的离线资源吗? +"Are you sure you want to delete the offline resources of this song?" = "هل أنت متأكد أنك تريد حذف الموارد غير المتصلة لهذه الأغنية؟"; +///取消歌曲下载任务 +"Cancel Song Download Task" = "إلغاء مهمة تنزيل الأغنية"; +///您确定要取消这首歌曲的下载任务吗? +"Are you sure you want to cancel the download task of this song?" = "هل أنت متأكد أنك تريد إلغاء مهمة التنزيل لهذه الأغنية؟"; +//MARK: - HUD文本 +///已成功将电子邮件地址复制到剪贴板 +"Successfully copied the e-mail address to the clipboard" = "تم نسخ عنوان البريد الإلكتروني بنجاح إلى الحافظة"; +///成功了 +"Success" = "ناجح"; +///失败了 +"Failure" = "فشل"; +///请选择产品类型 +"Please select your product type" = "الرجاء تحديد نوع المنتج"; +///连接不良 +"Bad connection~" = "اتصال سيء~"; +///获取资源失败,请稍后重试 +"Failed to obtain resource, please try again later" = "فشل الحصول على الموارد، يرجى المحاولة مرة أخرى في وقت لاحق"; +///下载时出错,请重新下载。 +"An error occurred while downloading. Please download again." = "حدث خطأ أثناء التنزيل، يرجى التنزيل مرة أخرى"; +///下载成功 +"Download Successfull" = "تم التنزيل بنجاح"; +///存储空间不足,下载失败 +"Insufficient storage space, download failed" = "مساحة التخزين غير كافية، فشل التنزيل"; +///再试一次 +"Try again" = "حاول ثانية"; +///当前交易失败 +"The current transaction failed" = "فشلت المعاملة الحالية"; +///当前交易已取消 +"The current transaction has been canceled" = "تم إلغاء المعاملة الحالية"; +///正在加载... +"Loading..." = "تحميل..."; +///已移除 +"Removed" = "تمت الإزالة"; +///您的报告已提交,我们将尽快处理。 +"Your report has been submitted and we will process it as soon as possible." = "لقد تم إرسال بلاغك وسيتم معالجته في أقرب وقت ممكن."; +///该播放列表已包含这首歌曲 +"This playlist already contains this song" = "تحتوي قائمة التشغيل هذه على هذه الأغنية بالفعل"; +///已成功添加到播放列表 +"Successfully added to the playlist" = "تمت الإضافة بنجاح إلى قائمة التشغيل"; +///当前没有正在播放的列表 +"There is no playlist currently playing" = "لا توجد قوائم التشغيل حاليا"; +///已存在当前播放列表 +"The current playlist already exists" = "قائمة التشغيل الحالية موجودة بالفعل"; +///已成功添加到下一首播放 +"Successfully added to next song" = "تمت الإضافة بنجاح إلى التشغيل التالي"; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/de.lproj/InfoPlist.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/de.lproj/InfoPlist.strings new file mode 100644 index 0000000..9b6560e --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/de.lproj/InfoPlist.strings @@ -0,0 +1,13 @@ +/* + 德语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/13. + +*/ +///相册使用说明 +"NSPhotoLibraryUsageDescription" = "„Musiclax“ muss Ihr Fotoalbum öffnen, um die Albumressourcen abzurufen, die zum Hinzufügen Ihres benutzerdefinierten weißen Rauschens verwendet werden. Erlauben Sie dieser App, auf Ihr Fotoalbum zuzugreifen?"; +///麦克风使用说明 +"NSMicrophoneUsageDescription" = "Bei „Musiclax“ müssen Sie Ihr Mikrofon einschalten, um die umgebenden Dezibel zu erkennen und automatisch weißes Rauschen für Sie einzuschalten. Möchten Sie dieser App erlauben, auf Ihr Mikrofon zuzugreifen?"; +///用户跟踪使用说明 +"NSUserTrackingUsageDescription" = "„Musiclax“ muss Tracking-Berechtigungen anfordern, um ein personalisiertes Werbeerlebnis bieten zu können. Wir respektieren und schützen Ihre Privatsphäre und werden Ihre Daten nicht an Dritte verkaufen."; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/de.lproj/Localizable.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/de.lproj/Localizable.strings new file mode 100644 index 0000000..9ad0a41 --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/de.lproj/Localizable.strings @@ -0,0 +1,155 @@ +/* + 德语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/12. + +*/ +//MARK: - 页面展示文本 +///曲库 +"Library" = "Bibliothek"; +///真实人类声音 +"Real human voice" = "Echte menschliche Stimme"; +///电器的声音 +"Sounds of appliances" = "Geräusche von Elektrogeräten"; +///大自然的声音 +"Sounds of nature" = "Geräusche der Natur"; +///正在播放 +"Now Playing" = "Jetzt spielen"; +///音量 +"Volume" = "Volumen"; +///定时关闭 +"Timing off" = "Geplantes Herunterfahren"; +///关于 +"About" = "Um"; +///反馈 +"Feedback" = "Rückmeldung"; +///分享 +"Share" = "Aktie"; +///隐私政策 +"Privacy Policy" = "Datenschutzrichtlinie"; +///使用条款 +"Terms of Use" = "Nutzungsbedingungen"; +///清除缓存 +"Clear Cache" = "Cache leeren"; +///无强制,可随时取消 +"No mandatory,cancel at anytime" = "Keine Verpflichtung, Sie können jederzeit kündigen"; +///继续 +"Continue" = "Weitermachen"; +///恢复 +"Restore" = "Genesen"; +///设置 +"Setting" = "Aufstellen"; +///当前版本 +"Current Version" = "Aktuelle Version"; +///版本 +"Version" = "Version"; +///版本更新 +"Version Update" = "Update der Version"; +///是最新版本 +"is the latest Version" = "ist die neueste Version"; +///取消 +"Cancel" = "Stornieren"; +///如果您有任何意见或建议,请通过以下电子邮件地址与我们联系 +"If you have any comments or suggestions, please contact us at the following e-mail address" = "Wenn Sie Kommentare oder Vorschläge haben, kontaktieren Sie uns bitte unter der folgenden E-Mail-Adresse"; +///确认 +"Sure" = "OK"; +///清除B面缓存 +"Clearing B" = "Durch das Leeren des Caches können Sie Speicherplatz freigeben und mögliche Wiedergabeprobleme beheben. Sind Sie sicher, dass Sie dies tun möchten?"; +///清除A面数据 +"Clearing A" = "Wenn Sie auf „OK“ klicken, werden Ihre hochgeladenen Medienressourcen gelöscht. Sind Sie sicher, dass Sie dies tun möchten?"; +///重命名 +"Rename" = "Umbenennen"; +///删除 +"Delete" = "löschen"; +///命名您的声音 +"Name Your Voice" = "Benennen Sie Ihren Sound"; +///该值最多包含 60 个字符 +"60 characters" = "Der Wert kann bis zu \n60 Zeichen enthalten"; +///确认 +"Confirm" = "Bestätigen"; +///确认删除语音 +"Confirm Voice Deletion" = "Bestätigen Sie, um die Stimme zu löschen"; +///此操作无法撤消 +"This cannot be undone" = "kann nicht rückgängig gemacht werden"; +///从相册中获取 +"Pick from photo Library" = "Wählen Sie aus der Fotogalerie"; +///从文件夹中获取 +"Pick from files" = "Aus Datei auswählen"; +///访问相册权限请求 +"Access album permission request" = "Zugriffsanfrage für Fotoalbum-Berechtigung"; +///“Musiclax”需要打开您的专辑以获取用于添加自定义白噪声的资源。请前往“设置”开启此权限! +"\"Musiclax\" needs to open your album to get the resources that will be used to add your custom white noise. Please go to ”Settings“ to turn on this permission!" = "„Musiclax“ erfordert das Öffnen Ihres Albums, um die Ressourcen zum Hinzufügen von benutzerdefiniertem weißem Rauschen zu erhalten. Bitte gehen Sie zu „Einstellungen“, um diese Berechtigung zu aktivieren!"; +///歌曲 +"Songs" = "Lied"; +///艺术家 +"Artists" = "Künstler"; +///离线 +"Offline" = "Offline"; +///收藏歌曲 +"Love Songs" = "Lieblingslieder"; +///收藏艺术家 +"Love Artists" = "Lieblingskünstler"; +///离线歌曲 +"Offline Songs" = "Offline-Songs"; +///搜索 +"Search" = "Suchen"; +///搜索歌曲、艺术家、播放列表 +"Search songs,artists,playlists" = "Suchen Sie nach Liedern, Künstlern und Wiedergabelisten"; +///历史 +"History" = "Geschichte"; +///播放列表 +"Playlists" = "Wiedergabeliste"; +///收藏播放列表 +"Collect PlayLists" = "Lieblings-Playlist"; +///命名您的播放列表 +"Name Your PlayList" = "Benennen Sie Ihre Playlist"; +///删除这首歌曲 +"Delete This Song" = "Dieses Lied löschen"; +///您确定要删除这首歌曲的离线资源吗? +"Are you sure you want to delete the offline resources of this song?" = "Sind Sie sicher, dass Sie die Offline-Ressourcen dieses Liedes löschen möchten?"; +///取消歌曲下载任务 +"Cancel Song Download Task" = "Song-Download-Aufgabe abbrechen"; +///您确定要取消这首歌曲的下载任务吗? +"Are you sure you want to cancel the download task of this song?" = "Möchten Sie den Download-Auftrag für diesen Song wirklich abbrechen?"; +//MARK: - HUD文本 +///已成功将电子邮件地址复制到剪贴板 +"Successfully copied the e-mail address to the clipboard" = "E-Mail-Adresse erfolgreich in die Zwischenablage kopiert"; +///成功了 +"Success" = "Erfolgreich"; +///失败了 +"Failure" = "Fehlgeschlagen"; +///请选择产品类型 +"Please select your product type" = "Bitte wählen Sie den Produkttyp aus"; +///连接不良 +"Bad connection~" = "Schlechte Verbindung~"; +///获取资源失败,请稍后重试 +"Failed to obtain resource, please try again later" = "Fehler beim Abrufen der Ressourcen. Bitte versuchen Sie es später erneut"; +///下载时出错,请重新下载。 +"An error occurred while downloading. Please download again." = "Beim Herunterladen ist ein Fehler aufgetreten. Bitte laden Sie es erneut herunter"; +///下载成功 +"Download Successfull" = "Download erfolgreich"; +///存储空间不足,下载失败 +"Insufficient storage space, download failed" = "Nicht genügend Speicherplatz, Download fehlgeschlagen"; +///再试一次 +"Try again" = "Versuchen Sie es erneut"; +///当前交易失败 +"The current transaction failed" = "Die aktuelle Transaktion ist fehlgeschlagen"; +///当前交易已取消 +"The current transaction has been canceled" = "Die aktuelle Transaktion wurde abgebrochen"; +///正在加载... +"Loading..." = "Laden..."; +///已移除 +"Removed" = "ENTFERNT"; +///您的报告已提交,我们将尽快处理。 +"Your report has been submitted and we will process it as soon as possible." = "Ihre Meldung wurde übermittelt und wird schnellstmöglich bearbeitet."; +///该播放列表已包含这首歌曲 +"This playlist already contains this song" = "Diese Playlist enthält dieses Lied bereits"; +///已成功添加到播放列表 +"Successfully added to the playlist" = "Erfolgreich zur Playlist hinzugefügt"; +///当前没有正在播放的列表 +"There is no playlist currently playing" = "Derzeit sind keine Wiedergabelisten vorhanden"; +///已存在当前播放列表 +"The current playlist already exists" = "Die aktuelle Playlist existiert bereits"; +///已成功添加到下一首播放 +"Successfully added to next song" = "Erfolgreich zur nächsten Wiedergabe hinzugefügt"; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/en.lproj/InfoPlist.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..21eb7d7 --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/en.lproj/InfoPlist.strings @@ -0,0 +1,13 @@ +/* + 英语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/13. + +*/ +///相册使用说明 +"NSPhotoLibraryUsageDescription" = "\"Musiclax\" needs to open your photo album to get the album resources, which are used to add your custom white noise. Do you want to allow this app to access your photo album permissions?"; +///麦克风使用说明 +"NSMicrophoneUsageDescription" = "\"Musiclax\" requires you to turn on the microphone to recognize surrounding decibels and automatically turn on white noise for you. Do you allow this application to obtain your microphone permissions?"; +///用户跟踪使用说明 +"NSUserTrackingUsageDescription" = "\"Musiclax\" needs to request tracking permissions to provide a personalized advertising experience. We respect and protect your privacy and will not sell your data to third parties."; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/en.lproj/Localizable.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/en.lproj/Localizable.strings new file mode 100644 index 0000000..7284fdc --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/en.lproj/Localizable.strings @@ -0,0 +1,155 @@ +/* + 英语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/12. + +*/ +//MARK: - 页面展示文本 +///曲库 +"Library" = "Library"; +///真实人类声音 +"Real human voice" = "Real human voice"; +///电器的声音 +"Sounds of appliances" = "Sounds of appliances"; +///大自然的声音 +"Sounds of nature" = "Sounds of nature"; +///正在播放 +"Now Playing" = "Now Playing"; +///音量 +"Volume" = "Volume"; +///定时关闭 +"Timing off" = "Timing off"; +///关于 +"About" = "About"; +///反馈 +"Feedback" = "Feedback"; +///分享 +"Share" = "Share"; +///隐私政策 +"Privacy Policy" = "Privacy Policy"; +///使用条款 +"Terms of Use" = "Terms of Use"; +///清除缓存 +"Clear Cache" = "Clear Cache"; +///无强制,可随时取消 +"No mandatory,cancel at anytime" = "No mandatory,cancel at anytime"; +///继续 +"Continue" = "Continue"; +///恢复 +"Restore" = "Restore"; +///设置 +"Setting" = "Setting"; +///当前版本 +"Current Version" = "Current Version"; +///版本 +"Version" = "Version"; +///版本更新 +"Version Update" = "Version Update"; +///是最新版本 +"is the latest Version" = "is the latest Version"; +///取消 +"Cancel" = "Cancel"; +///如果您有任何意见或建议,请通过以下电子邮件地址与我们联系 +"If you have any comments or suggestions, please contact us at the following e-mail address" = "If you have any comments or suggestions, please contact us at the following e-mail address"; +///确认 +"Sure" = "Sure"; +///清除B面缓存 +"Clearing B" = "Clearing the cache can help free up storage space and resolve possible playback issues. Are you sure you want to do this?"; +///清除A面数据 +"Clearing A" = "Clicking “Sure” will clear your uploaded media assets. Are you sure you want to do this?"; +///重命名 +"Rename" = "Rename"; +///删除 +"Delete" = "Delete"; +///命名您的声音 +"Name Your Voice" = "Name Your Voice"; +///该值最多包含 60 个字符 +"60 characters" = "The value contains a \nmaximumof 60 characters"; +///确认 +"Confirm" = "Confirm"; +///确认删除语音 +"Confirm Voice Deletion" = "Confirm Voice Deletion"; +///此操作无法撤消 +"This cannot be undone" = "This cannot be undone"; +///从相册中获取 +"Pick from photo Library" = "Pick from photo Library"; +///从文件夹中获取 +"Pick from files" = "Pick from files"; +///访问相册权限请求 +"Access album permission request" = "Access album permission request"; +///“Musiclax”需要打开您的专辑以获取用于添加自定义白噪声的资源。请前往“设置”开启此权限! +"\"Musiclax\" needs to open your album to get the resources that will be used to add your custom white noise. Please go to ”Settings“ to turn on this permission!" = "\"Musiclax\" needs to open your album to get the resources that will be used to add your custom white noise. Please go to ”Settings“ to turn on this permission!"; +///歌曲 +"Songs" = "Songs"; +///艺术家 +"Artists" = "Artists"; +///离线 +"Offline" = "Offline"; +///收藏歌曲 +"Love Songs" = "Love Songs"; +///收藏艺术家 +"Love Artists" = "Love Artists"; +///离线歌曲 +"Offline Songs" = "Offline Songs"; +///搜索 +"Search" = "Search"; +///搜索歌曲、艺术家、播放列表 +"Search songs,artists,playlists" = "Search songs,artists,playlists"; +///历史 +"History" = "History"; +///播放列表 +"Playlists" = "Playlists"; +///收藏播放列表 +"Collect PlayLists" = "Collect PlayLists"; +///命名您的播放列表 +"Name Your PlayList" = "Name Your PlayList"; +///删除这首歌曲 +"Delete This Song" = "Delete This Song"; +///您确定要删除这首歌曲的离线资源吗? +"Are you sure you want to delete the offline resources of this song?" = "Are you sure you want to delete the offline resources of this song?"; +///取消歌曲下载任务 +"Cancel Song Download Task" = "Cancel Song Download Task"; +///您确定要取消这首歌曲的下载任务吗? +"Are you sure you want to cancel the download task of this song?" = "Are you sure you want to cancel the download task of this song?"; +//MARK: - HUD文本 +///已成功将电子邮件地址复制到剪贴板 +"Successfully copied the e-mail address to the clipboard" = "Successfully copied the e-mail address to the clipboard"; +///成功了 +"Success" = "Success"; +///失败了 +"Failure" = "Failure"; +///请选择产品类型 +"Please select your product type" = "Please select your product type"; +///连接不良 +"Bad connection~" = "Bad connection~"; +///获取资源失败,请稍后重试 +"Failed to obtain resource, please try again later" = "Failed to obtain resource, please try again later"; +///下载时出错,请重新下载。 +"An error occurred while downloading. Please download again." = "An error occurred while downloading. Please download again."; +///下载成功 +"Download Successfull" = "Download Successfull"; +///存储空间不足,下载失败 +"Insufficient storage space, download failed" = "Insufficient storage space, download failed"; +///再试一次 +"Try again" = "Try again"; +///当前交易失败 +"The current transaction failed" = "The current transaction failed"; +///当前交易已取消 +"The current transaction has been canceled" = "The current transaction has been canceled"; +///正在加载... +"Loading..." = "Loading..."; +///已移除 +"Removed" = "Removed"; +///您的报告已提交,我们将尽快处理。 +"Your report has been submitted and we will process it as soon as possible." = "Your report has been submitted and we will process it as soon as possible."; +///该播放列表已包含这首歌曲 +"This playlist already contains this song" = "This playlist already contains this song"; +///已成功添加到播放列表 +"Successfully added to the playlist" = "Successfully added to the playlist"; +///当前没有正在播放的列表 +"There is no playlist currently playing" = "There is no playlist currently playing"; +///已存在当前播放列表 +"The current playlist already exists" = "The current playlist already exists"; +///已成功添加到下一首播放 +"Successfully added to next song" = "Successfully added to next song"; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/es-419.lproj/InfoPlist.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/es-419.lproj/InfoPlist.strings new file mode 100644 index 0000000..8dd0d63 --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/es-419.lproj/InfoPlist.strings @@ -0,0 +1,13 @@ +/* + 西班牙语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/13. + +*/ +///相册使用说明 +"NSPhotoLibraryUsageDescription" = "\"Musiclax\" necesita abrir su álbum de fotos para obtener los recursos del álbum, que se utilizan para agregar su ruido blanco personalizado. ¿Permitir que esta aplicación acceda a tu álbum de fotos?"; +///麦克风使用说明 +"NSMicrophoneUsageDescription" = "\"Musiclax\" requiere que enciendas tu micrófono para reconocer los decibelios circundantes y activar automáticamente el ruido blanco. ¿Quieres permitir que esta aplicación acceda a tu micrófono?"; +///用户跟踪使用说明 +"NSUserTrackingUsageDescription" = "\"Musiclax\" necesita solicitar permisos de seguimiento para proporcionar una experiencia publicitaria personalizada. Respetamos y protegemos su privacidad y no venderemos sus datos a terceros."; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/es-419.lproj/Localizable.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/es-419.lproj/Localizable.strings new file mode 100644 index 0000000..25fb98b --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/es-419.lproj/Localizable.strings @@ -0,0 +1,155 @@ +/* + 西班牙语(拉丁美洲) + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/12. + +*/ +//MARK: - 页面展示文本 +///曲库 +"Library" = "Biblioteca de música"; +///真实人类声音 +"Real human voice" = "Verdadera voz humana"; +///电器的声音 +"Sounds of appliances" = "Sonido de electrodomésticos"; +///大自然的声音 +"Sounds of nature" = "Sonidos de la naturaleza"; +///正在播放 +"Now Playing" = "Ahora jugando"; +///音量 +"Volume" = "Volumen"; +///定时关闭 +"Timing off" = "Apagado programado"; +///关于 +"About" = "Acerca de"; +///反馈 +"Feedback" = "Comentario"; +///分享 +"Share" = "Compartir"; +///隐私政策 +"Privacy Policy" = "Política de privacidad"; +///使用条款 +"Terms of Use" = "Condiciones de uso"; +///清除缓存 +"Clear Cache" = "Borrar caché"; +///无强制,可随时取消 +"No mandatory,cancel at anytime" = "Sin compromiso, puedes cancelar en cualquier momento"; +///继续 +"Continue" = "Continuar"; +///恢复 +"Restore" = "Recuperar"; +///设置 +"Setting" = "Configuración"; +///当前版本 +"Current Version" = "Versión actual"; +///版本 +"Version" = "Versión"; +///版本更新 +"Version Update" = "Actualización de Versión"; +///是最新版本 +"is the latest Version" = "es la última Versión"; +///取消 +"Cancel" = "Cancelar"; +///如果您有任何意见或建议,请通过以下电子邮件地址与我们联系 +"If you have any comments or suggestions, please contact us at the following e-mail address" = "Si tiene algún comentario o sugerencia, por favor contáctenos a la siguiente dirección de correo electrónico"; +///确认 +"Sure" = "OK"; +///清除B面缓存 +"Clearing B" = "Borrar el caché puede ayudar a liberar espacio de almacenamiento y resolver posibles problemas de reproducción. ¿Estás seguro de que quieres hacer esto?"; +///清除A面数据 +"Clearing A" = "Al hacer clic en Aceptar se borrarán los recursos multimedia cargados. ¿Estás seguro de que quieres hacer esto?"; +///重命名 +"Rename" = "Rebautizar"; +///删除 +"Delete" = "Borrar"; +///命名您的声音 +"Name Your Voice" = "Nombra tu sonido"; +///该值最多包含 60 个字符 +"60 characters" = "El valor puede contener \nhasta 60 caracteres."; +///确认 +"Confirm" = "Confirmar"; +///确认删除语音 +"Confirm Voice Deletion" = "Confirmar para eliminar voz"; +///此操作无法撤消 +"This cannot be undone" = "Esta acción no se puede deshacer."; +///从相册中获取 +"Pick from photo Library" = "Elige de la galería de fotos"; +///从文件夹中获取 +"Pick from files" = "Seleccionar del archivo"; +///访问相册权限请求 +"Access album permission request" = "Acceder a la solicitud de permiso del álbum de fotos"; +///“Musiclax”需要打开您的专辑以获取用于添加自定义白噪声的资源。请前往“设置”开启此权限! +"\"Musiclax\" needs to open your album to get the resources that will be used to add your custom white noise. Please go to ”Settings“ to turn on this permission!" = "\"Musiclax\" requiere abrir su álbum para obtener los recursos para agregar ruido blanco personalizado. ¡Vaya a \"Configuración\" para habilitar este permiso!"; +///歌曲 +"Songs" = "Canción"; +///艺术家 +"Artists" = "Artista"; +///离线 +"Offline" = "Desconectado"; +///收藏歌曲 +"Love Songs" = "Canciones favoritas"; +///收藏艺术家 +"Love Artists" = "Artista favorito"; +///离线歌曲 +"Offline Songs" = "Canciones sin conexión"; +///搜索 +"Search" = "Buscar"; +///搜索歌曲、艺术家、播放列表 +"Search songs,artists,playlists" = "Buscar canciones, artistas, listas de reproducción."; +///历史 +"History" = "Historia"; +///播放列表 +"Playlists" = "Lista de reproducción"; +///收藏播放列表 +"Collect PlayLists" = "Lista de reproducción favorita"; +///命名您的播放列表 +"Name Your PlayList" = "Nombra tu lista de reproducción"; +///删除这首歌曲 +"Delete This Song" = "Eliminar esta cancion"; +///您确定要删除这首歌曲的离线资源吗? +"Are you sure you want to delete the offline resources of this song?" = "¿Estás seguro de que deseas eliminar los recursos sin conexión de esta canción?"; +///取消歌曲下载任务 +"Cancel Song Download Task" = "Cancelar tarea de descarga de canción"; +///您确定要取消这首歌曲的下载任务吗? +"Are you sure you want to cancel the download task of this song?" = "¿Estás seguro de que deseas cancelar la tarea de descarga de esta canción?"; +//MARK: - HUD文本 +///已成功将电子邮件地址复制到剪贴板 +"Successfully copied the e-mail address to the clipboard" = "Dirección de correo electrónico copiada correctamente al portapapeles"; +///成功了 +"Success" = "Exitoso"; +///失败了 +"Failure" = "Fallido"; +///请选择产品类型 +"Please select your product type" = "Por favor seleccione el tipo de producto"; +///连接不良 +"Bad connection~" = "Mala conexión~"; +///获取资源失败,请稍后重试 +"Failed to obtain resource, please try again later" = "No se pudieron obtener los recursos, inténtelo nuevamente más tarde"; +///下载时出错,请重新下载。 +"An error occurred while downloading. Please download again." = "Se produjo un error durante la descarga, descargue nuevamente"; +///下载成功 +"Download Successfull" = "Descarga exitosa"; +///存储空间不足,下载失败 +"Insufficient storage space, download failed" = "Espacio de almacenamiento insuficiente, la descarga falló"; +///再试一次 +"Try again" = "Intentar otra vez"; +///当前交易失败 +"The current transaction failed" = "La transacción actual falló"; +///当前交易已取消 +"The current transaction has been canceled" = "La transacción actual ha sido cancelada."; +///正在加载... +"Loading..." = "Cargando..."; +///已移除 +"Removed" = "Remoto"; +///您的报告已提交,我们将尽快处理。 +"Your report has been submitted and we will process it as soon as possible." = "Su informe ha sido enviado y será procesado lo antes posible."; +///该播放列表已包含这首歌曲 +"This playlist already contains this song" = "Esta lista de reproducción ya contiene esta canción."; +///已成功添加到播放列表 +"Successfully added to the playlist" = "Agregado exitosamente a la lista de reproducción"; +///当前没有正在播放的列表 +"There is no playlist currently playing" = "No hay listas de reproducción actualmente"; +///已存在当前播放列表 +"The current playlist already exists" = "La lista de reproducción actual ya existe"; +///已成功添加到下一首播放 +"Successfully added to next song" = "Agregado exitosamente a la siguiente reproducción"; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/fr.lproj/InfoPlist.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/fr.lproj/InfoPlist.strings new file mode 100644 index 0000000..f2939ee --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/fr.lproj/InfoPlist.strings @@ -0,0 +1,13 @@ +/* + 法语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/13. + +*/ +///相册使用说明 +"NSPhotoLibraryUsageDescription" = "\"Musiclax\" doit ouvrir votre album photo pour obtenir les ressources de l'album, qui sont utilisées pour ajouter votre bruit blanc personnalisé. Autoriser cette application à accéder à votre album photo ?"; +///麦克风使用说明 +"NSMicrophoneUsageDescription" = "\"Musiclax\" vous oblige à allumer votre microphone pour reconnaître les décibels environnants et activer automatiquement le bruit blanc pour vous. Voulez-vous autoriser cette application à accéder à votre microphone ?"; +///用户跟踪使用说明 +"NSUserTrackingUsageDescription" = "\"Musiclax\" doit demander des autorisations de suivi pour offrir une expérience publicitaire personnalisée. Nous respectons et protégeons votre vie privée et ne vendrons pas vos données à des tiers."; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/fr.lproj/Localizable.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/fr.lproj/Localizable.strings new file mode 100644 index 0000000..b1374ca --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/fr.lproj/Localizable.strings @@ -0,0 +1,155 @@ +/* + 法语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/12. + +*/ +//MARK: - 页面展示文本 +///曲库 +"Library" = "Bibliothèque"; +///真实人类声音 +"Real human voice" = "Vraie voix humaine"; +///电器的声音 +"Sounds of appliances" = "Bruit des appareils électriques"; +///大自然的声音 +"Sounds of nature" = "Sons de la nature"; +///正在播放 +"Now Playing" = "Je joue en ce moment"; +///音量 +"Volume" = "Volume"; +///定时关闭 +"Timing off" = "Arrêt programmé"; +///关于 +"About" = "À propos"; +///反馈 +"Feedback" = "Retour"; +///分享 +"Share" = "Partager"; +///隐私政策 +"Privacy Policy" = "Politique de confidentialité"; +///使用条款 +"Terms of Use" = "Conditions d'utilisation"; +///清除缓存 +"Clear Cache" = "Vider le cache"; +///无强制,可随时取消 +"No mandatory,cancel at anytime" = "Sans engagement, vous pouvez annuler à tout moment"; +///继续 +"Continue" = "Continuer"; +///恢复 +"Restore" = "Récupérer"; +///设置 +"Setting" = "Installation"; +///当前版本 +"Current Version" = "Version actuelle"; +///版本 +"Version" = "Version"; +///版本更新 +"Version Update" = "Mise à jour de Version"; +///是最新版本 +"is the latest Version" = "est la dernière Version"; +///取消 +"Cancel" = "Annuler"; +///如果您有任何意见或建议,请通过以下电子邮件地址与我们联系 +"If you have any comments or suggestions, please contact us at the following e-mail address" = "Si vous avez des commentaires ou des suggestions, veuillez nous contacter à l'adresse email suivante"; +///确认 +"Sure" = "OK"; +///清除B面缓存 +"Clearing B" = "Vider le cache peut aider à libérer de l'espace de stockage et à résoudre d'éventuels problèmes de lecture. Êtes-vous sûr de vouloir faire cela ?"; +///清除A面数据 +"Clearing A" = "En cliquant sur OK, vos ressources multimédias téléchargées seront effacées. Êtes-vous sûr de vouloir faire cela ?"; +///重命名 +"Rename" = "Rebaptiser"; +///删除 +"Delete" = "Supprimer"; +///命名您的声音 +"Name Your Voice" = "Nommez votre son"; +///该值最多包含 60 个字符 +"60 characters" = "La valeur peut contenir jusqu'à\n 60 caractères"; +///确认 +"Confirm" = "Confirmer"; +///确认删除语音 +"Confirm Voice Deletion" = "Confirmez pour supprimer la voix"; +///此操作无法撤消 +"This cannot be undone" = "Cette action ne peut pas être annulée"; +///从相册中获取 +"Pick from photo Library" = "Choisissez parmi la galerie de photos"; +///从文件夹中获取 +"Pick from files" = "sélectionner dans un fichier"; +///访问相册权限请求 +"Access album permission request" = "Demande d'autorisation d'accès à l'album photo"; +///“Musiclax”需要打开您的专辑以获取用于添加自定义白噪声的资源。请前往“设置”开启此权限! +"\"Musiclax\" needs to open your album to get the resources that will be used to add your custom white noise. Please go to ”Settings“ to turn on this permission!" = "\"Musiclax\" nécessite d'ouvrir votre album pour obtenir les ressources permettant d'ajouter du bruit blanc personnalisé. Veuillez vous rendre dans « Paramètres » pour activer cette autorisation !"; +///歌曲 +"Songs" = "Chanson"; +///艺术家 +"Artists" = "Artiste"; +///离线 +"Offline" = "Hors ligne"; +///收藏歌曲 +"Love Songs" = "Chansons préférées"; +///收藏艺术家 +"Love Artists" = "Artiste préféré"; +///离线歌曲 +"Offline Songs" = "Chansons hors ligne"; +///搜索 +"Search" = "Recherche"; +///搜索歌曲、艺术家、播放列表 +"Search songs,artists,playlists" = "Rechercher des chansons, des artistes, des listes de lecture"; +///历史 +"History" = "Histoire"; +///播放列表 +"Playlists" = "Liste de lecture"; +///收藏播放列表 +"Collect PlayLists" = "Liste de lecture préférée"; +///命名您的播放列表 +"Name Your PlayList" = "Nommez votre liste de lecture"; +///删除这首歌曲 +"Delete This Song" = "Supprimer cette chanson"; +///您确定要删除这首歌曲的离线资源吗? +"Are you sure you want to delete the offline resources of this song?" = "Êtes-vous sûr de vouloir supprimer les ressources hors ligne de cette chanson ?"; +///取消歌曲下载任务 +"Cancel Song Download Task" = "Annuler la tâche de téléchargement de chanson"; +///您确定要取消这首歌曲的下载任务吗? +"Are you sure you want to cancel the download task of this song?" = "Êtes-vous sûr de vouloir annuler la tâche de téléchargement de cette chanson ?"; +//MARK: - HUD文本 +///已成功将电子邮件地址复制到剪贴板 +"Successfully copied the e-mail address to the clipboard" = "Adresse e-mail copiée avec succès dans le presse-papiers"; +///成功了 +"Success" = "Réussi"; +///失败了 +"Failure" = "échoué"; +///请选择产品类型 +"Please select your product type" = "Veuillez sélectionner le type de produit"; +///连接不良 +"Bad connection~" = "Mauvaise connexion~"; +///获取资源失败,请稍后重试 +"Failed to obtain resource, please try again later" = "Échec de l'obtention des ressources, veuillez réessayer plus tard"; +///下载时出错,请重新下载。 +"An error occurred while downloading. Please download again." = "Une erreur s'est produite lors du téléchargement, veuillez télécharger à nouveau"; +///下载成功 +"Download Successfull" = "Téléchargement réussi"; +///存储空间不足,下载失败 +"Insufficient storage space, download failed" = "Espace de stockage insuffisant, échec du téléchargement"; +///再试一次 +"Try again" = "Essayer à nouveau"; +///当前交易失败 +"The current transaction failed" = "La transaction en cours a échoué"; +///当前交易已取消 +"The current transaction has been canceled" = "La transaction en cours a été annulée"; +///正在加载... +"Loading..." = "Chargement..."; +///已移除 +"Removed" = "Supprimé"; +///您的报告已提交,我们将尽快处理。 +"Your report has been submitted and we will process it as soon as possible." = "Votre rapport a été soumis et sera traité dans les plus brefs délais."; +///该播放列表已包含这首歌曲 +"This playlist already contains this song" = "Cette playlist contient déjà cette chanson"; +///已成功添加到播放列表 +"Successfully added to the playlist" = "Ajouté avec succès à la playlist"; +///当前没有正在播放的列表 +"There is no playlist currently playing" = "Il n'y a aucune liste de lecture en cours"; +///已存在当前播放列表 +"The current playlist already exists" = "La playlist actuelle existe déjà"; +///已成功添加到下一首播放 +"Successfully added to next song" = "Ajout réussi à la prochaine lecture"; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/it.lproj/InfoPlist.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/it.lproj/InfoPlist.strings new file mode 100644 index 0000000..e824930 --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/it.lproj/InfoPlist.strings @@ -0,0 +1,13 @@ +/* + 意大利语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/13. + +*/ +///相册使用说明 +"NSPhotoLibraryUsageDescription" = "\"Musiclax\" deve aprire il tuo album fotografico per ottenere le risorse dell'album, che vengono utilizzate per aggiungere il tuo rumore bianco personalizzato. Consentire a questa app di accedere al tuo album fotografico?"; +///麦克风使用说明 +"NSMicrophoneUsageDescription" = "\"Musiclax\" richiede che tu accenda il microfono per riconoscere i decibel circostanti e attivare automaticamente il rumore bianco. Vuoi consentire a questa app di accedere al tuo microfono?"; +///用户跟踪使用说明 +"NSUserTrackingUsageDescription" = "\"Musiclax\" deve richiedere autorizzazioni di tracciamento per fornire un'esperienza pubblicitaria personalizzata. Rispettiamo e proteggiamo la tua privacy e non venderemo i tuoi dati a terzi."; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/it.lproj/Localizable.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/it.lproj/Localizable.strings new file mode 100644 index 0000000..5a3dc5d --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/it.lproj/Localizable.strings @@ -0,0 +1,155 @@ +/* + 意大利语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/12. + +*/ +//MARK: - 页面展示文本 +///曲库 +"Library" = "Biblioteca Musicale"; +///真实人类声音 +"Real human voice" = "Vera voce umana"; +///电器的声音 +"Sounds of appliances" = "Rumore degli elettrodomestici"; +///大自然的声音 +"Sounds of nature" = "Suoni della natura"; +///正在播放 +"Now Playing" = "Adesso sto giocando"; +///音量 +"Volume" = "Volume"; +///定时关闭 +"Timing off" = "Spegnimento programmato"; +///关于 +"About" = "Di"; +///反馈 +"Feedback" = "Feedback"; +///分享 +"Share" = "Condividere"; +///隐私政策 +"Privacy Policy" = "Politica sulla riservatezza"; +///使用条款 +"Terms of Use" = "Termini di utilizzo"; +///清除缓存 +"Clear Cache" = "Svuota la Cache"; +///无强制,可随时取消 +"No mandatory,cancel at anytime" = "Nessun impegno, puoi disdire in qualsiasi momento"; +///继续 +"Continue" = "Continuare"; +///恢复 +"Restore" = "Recuperare"; +///设置 +"Setting" = "Impostare"; +///当前版本 +"Current Version" = "Versione attuale"; +///版本 +"Version" = "Versione"; +///版本更新 +"Version Update" = "Aggiornamento della Versione"; +///是最新版本 +"is the latest Version" = "è l'ultima versione"; +///取消 +"Cancel" = "Cancellare"; +///如果您有任何意见或建议,请通过以下电子邮件地址与我们联系 +"If you have any comments or suggestions, please contact us at the following e-mail address" = "Se avete commenti o suggerimenti, vi preghiamo di contattarci al seguente indirizzo email"; +///确认 +"Sure" = "OK"; +///清除B面缓存 +"Clearing B" = "Svuotare la cache può aiutare a liberare spazio di archiviazione e risolvere possibili problemi di riproduzione. Sei sicuro di volerlo fare?"; +///清除A面数据 +"Clearing A" = "Facendo clic su OK verranno cancellate le risorse multimediali caricate. Sei sicuro di volerlo fare?"; +///重命名 +"Rename" = "Rinominare"; +///删除 +"Delete" = "Eliminare"; +///命名您的声音 +"Name Your Voice" = "Dai un nome al tuo suono"; +///该值最多包含 60 个字符 +"60 characters" = "Il valore può contenere fino a 60 caratteri"; +///确认 +"Confirm" = "Confermare"; +///确认删除语音 +"Confirm Voice Deletion" = "Conferma per eliminare la voce"; +///此操作无法撤消 +"This cannot be undone" = "Questa azione non può essere annullata"; +///从相册中获取 +"Pick from photo Library" = "Scegli dalla galleria fotografica"; +///从文件夹中获取 +"Pick from files" = "Seleziona dal file"; +///访问相册权限请求 +"Access album permission request" = "Accedi alla richiesta di autorizzazione dell'album fotografico"; +///“Musiclax”需要打开您的专辑以获取用于添加自定义白噪声的资源。请前往“设置”开启此权限! +"\"Musiclax\" needs to open your album to get the resources that will be used to add your custom white noise. Please go to ”Settings“ to turn on this permission!" = "\"Musiclax\" richiede l'apertura del tuo album per ottenere le risorse per aggiungere rumore bianco personalizzato. Vai su \"Impostazioni\" per abilitare questa autorizzazione!"; +///歌曲 +"Songs" = "Canzone"; +///艺术家 +"Artists" = "Artista"; +///离线 +"Offline" = "Non in linea"; +///收藏歌曲 +"Love Songs" = "Canzoni preferite"; +///收藏艺术家 +"Love Artists" = "Artista preferito"; +///离线歌曲 +"Offline Songs" = "Canzoni offline"; +///搜索 +"Search" = "Ricerca"; +///搜索歌曲、艺术家、播放列表 +"Search songs,artists,playlists" = "Cerca brani, artisti, playlist"; +///历史 +"History" = "Storia"; +///播放列表 +"Playlists" = "Playlist"; +///收藏播放列表 +"Collect PlayLists" = "Playlist Preferita"; +///命名您的播放列表 +"Name Your PlayList" = "Dai un nome alla tua playlist"; +///删除这首歌曲 +"Delete This Song" = "Elimina questa canzone"; +///您确定要删除这首歌曲的离线资源吗? +"Are you sure you want to delete the offline resources of this song?" = "Sei sicuro di voler eliminare le risorse offline di questo brano?"; +///取消歌曲下载任务 +"Cancel Song Download Task" = "Annulla l'attività di download del brano"; +///您确定要取消这首歌曲的下载任务吗? +"Are you sure you want to cancel the download task of this song?" = "Sei sicuro di voler annullare l'attività di download per questo brano?"; +//MARK: - HUD文本 +///已成功将电子邮件地址复制到剪贴板 +"Successfully copied the e-mail address to the clipboard" = "Indirizzo email copiato con successo negli appunti"; +///成功了 +"Success" = "Riuscito"; +///失败了 +"Failure" = "Fallito"; +///请选择产品类型 +"Please select your product type" = "Seleziona il tipo di prodotto"; +///连接不良 +"Bad connection~" = "Cattiva connessione~"; +///获取资源失败,请稍后重试 +"Failed to obtain resource, please try again later" = "Impossibile ottenere le risorse, riprova più tardi"; +///下载时出错,请重新下载。 +"An error occurred while downloading. Please download again." = "İndirirken bir hata oluştu, lütfen tekrar indirin"; +///下载成功 +"Download Successfull" = "Download riuscito"; +///存储空间不足,下载失败 +"Insufficient storage space, download failed" = "Spazio di archiviazione insufficiente, download non riuscito"; +///再试一次 +"Try again" = "Riprova"; +///当前交易失败 +"The current transaction failed" = "La transazione corrente non è riuscita"; +///当前交易已取消 +"The current transaction has been canceled" = "La transazione corrente è stata annullata"; +///正在加载... +"Loading..." = "Caricamento..."; +///已移除 +"Removed" = "RIMOSSO"; +///您的报告已提交,我们将尽快处理。 +"Your report has been submitted and we will process it as soon as possible." = "La tua segnalazione è stata inviata e verrà elaborata il prima possibile."; +///该播放列表已包含这首歌曲 +"This playlist already contains this song" = "Questa playlist contiene già questo brano"; +///已成功添加到播放列表 +"Successfully added to the playlist" = "Aggiunto alla playlist con successo"; +///当前没有正在播放的列表 +"There is no playlist currently playing" = "Al momento non ci sono elenchi in riproduzione"; +///已存在当前播放列表 +"The current playlist already exists" = "La playlist corrente esiste già"; +///已成功添加到下一首播放 +"Successfully added to next song" = "Aggiunto con successo alla riproduzione successiva"; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/pt-BR.lproj/InfoPlist.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/pt-BR.lproj/InfoPlist.strings new file mode 100644 index 0000000..461daaf --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/pt-BR.lproj/InfoPlist.strings @@ -0,0 +1,13 @@ +/* + 葡萄牙语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/13. + +*/ +///相册使用说明 +"NSPhotoLibraryUsageDescription" = "\"Musiclax\" precisa abrir seu álbum de fotos para obter os recursos do álbum, que são usados ​​para adicionar seu ruído branco personalizado. Permitir que este app acesse seu álbum de fotos?"; +///麦克风使用说明 +"NSMicrophoneUsageDescription" = "\"Musiclax\" exige que você ligue o microfone para reconhecer os decibéis ao redor e ativar automaticamente o ruído branco para você. Deseja permitir que este aplicativo acesse seu microfone?"; +///用户跟踪使用说明 +"NSUserTrackingUsageDescription" = "\"Musiclax\" precisa solicitar permissões de rastreamento para fornecer uma experiência de publicidade personalizada. Respeitamos e protegemos a sua privacidade e não venderemos os seus dados a terceiros."; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/pt-BR.lproj/Localizable.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/pt-BR.lproj/Localizable.strings new file mode 100644 index 0000000..3dbba58 --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/pt-BR.lproj/Localizable.strings @@ -0,0 +1,155 @@ +/* + 葡萄牙语(拉丁美洲) + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/12. + +*/ +//MARK: - 页面展示文本 +///曲库 +"Library" = "Biblioteca de música"; +///真实人类声音 +"Real human voice" = "Verdadeira voz humana"; +///电器的声音 +"Sounds of appliances" = "Som de aparelhos elétricos"; +///大自然的声音 +"Sounds of nature" = "Sons da natureza"; +///正在播放 +"Now Playing" = "Agora jogando"; +///音量 +"Volume" = "Volume"; +///定时关闭 +"Timing off" = "Desligamento programado"; +///关于 +"About" = "Sobre"; +///反馈 +"Feedback" = "Opinião"; +///分享 +"Share" = "Compartilhar"; +///隐私政策 +"Privacy Policy" = "Política de Privacidade"; +///使用条款 +"Terms of Use" = "Termos de uso"; +///清除缓存 +"Clear Cache" = "Limpar cache"; +///无强制,可随时取消 +"No mandatory,cancel at anytime" = "Sem compromisso, você pode cancelar a qualquer momento"; +///继续 +"Continue" = "Continuar"; +///恢复 +"Restore" = "Recuperar"; +///设置 +"Setting" = "Configurar"; +///当前版本 +"Current Version" = "Versão atual"; +///版本 +"Version" = "Versão"; +///版本更新 +"Version Update" = "Atualização de Versão"; +///是最新版本 +"is the latest Version" = "é a versão mais recente"; +///取消 +"Cancel" = "Cancelar"; +///如果您有任何意见或建议,请通过以下电子邮件地址与我们联系 +"If you have any comments or suggestions, please contact us at the following e-mail address" = "Se você tiver algum comentário ou sugestão, entre em contato conosco pelo seguinte endereço de e-mail"; +///确认 +"Sure" = "OK"; +///清除B面缓存 +"Clearing B" = "Limpar o cache pode ajudar a liberar espaço de armazenamento e resolver possíveis problemas de reprodução. Tem certeza de que deseja fazer isso?"; +///清除A面数据 +"Clearing A" = "Clicar em OK limpará seus ativos de mídia carregados. Tem certeza de que deseja fazer isso?"; +///重命名 +"Rename" = "Renomear"; +///删除 +"Delete" = "Excluir"; +///命名您的声音 +"Name Your Voice" = "Dê um nome ao seu som"; +///该值最多包含 60 个字符 +"60 characters" = "O valor pode conter até\n 60 caracteres"; +///确认 +"Confirm" = "Confirmar"; +///确认删除语音 +"Confirm Voice Deletion" = "Confirme para excluir a voz"; +///此操作无法撤消 +"This cannot be undone" = "Esta ação não pode ser desfeita"; +///从相册中获取 +"Pick from photo Library" = "Escolha na galeria de fotos"; +///从文件夹中获取 +"Pick from files" = "Selecione do arquivo"; +///访问相册权限请求 +"Access album permission request" = "Solicitação de permissão de acesso ao álbum de fotos"; +///“Musiclax”需要打开您的专辑以获取用于添加自定义白噪声的资源。请前往“设置”开启此权限! +"\"Musiclax\" needs to open your album to get the resources that will be used to add your custom white noise. Please go to ”Settings“ to turn on this permission!" = "\"Musiclax\" requer a abertura do seu álbum para obter os recursos para adicionar ruído branco personalizado. Por favor, vá em \"Configurações\" para ativar esta permissão!"; +///歌曲 +"Songs" = "Canção"; +///艺术家 +"Artists" = "Artista"; +///离线 +"Offline" = "Off-line"; +///收藏歌曲 +"Love Songs" = "Músicas favoritas"; +///收藏艺术家 +"Love Artists" = "Artista favorito"; +///离线歌曲 +"Offline Songs" = "Músicas off-line"; +///搜索 +"Search" = "Procurar"; +///搜索歌曲、艺术家、播放列表 +"Search songs,artists,playlists" = "Pesquise músicas, artistas, playlists"; +///历史 +"History" = "História"; +///播放列表 +"Playlists" = "Lista de reprodução"; +///收藏播放列表 +"Collect PlayLists" = "Lista de reprodução favorita"; +///命名您的播放列表 +"Name Your PlayList" = "Dê um nome à sua lista de reprodução"; +///删除这首歌曲 +"Delete This Song" = "Excluir esta música"; +///您确定要删除这首歌曲的离线资源吗? +"Are you sure you want to delete the offline resources of this song?" = "Tem certeza de que deseja excluir os recursos off-line desta música?"; +///取消歌曲下载任务 +"Cancel Song Download Task" = "Cancelar tarefa de download de música"; +///您确定要取消这首歌曲的下载任务吗? +"Are you sure you want to cancel the download task of this song?" = "Tem certeza de que deseja cancelar a tarefa de download desta música?"; +//MARK: - HUD文本 +///已成功将电子邮件地址复制到剪贴板 +"Successfully copied the e-mail address to the clipboard" = "Endereço de e-mail copiado com sucesso para a área de transferência"; +///成功了 +"Success" = "Bem-sucedido"; +///失败了 +"Failure" = "Fracassado"; +///请选择产品类型 +"Please select your product type" = "Selecione o tipo de produto"; +///连接不良 +"Bad connection~" = "Conexão ruim ~"; +///获取资源失败,请稍后重试 +"Failed to obtain resource, please try again later" = "Falha ao obter recursos. Tente novamente mais tarde"; +///下载时出错,请重新下载。 +"An error occurred while downloading. Please download again." = "Ocorreu um erro durante o download, faça download novamente"; +///下载成功 +"Download Successfull" = "Download bem-sucedido"; +///存储空间不足,下载失败 +"Insufficient storage space, download failed" = "Espaço de armazenamento insuficiente, download falhou"; +///再试一次 +"Try again" = "Tente novamente"; +///当前交易失败 +"The current transaction failed" = "Falha na transação atual"; +///当前交易已取消 +"The current transaction has been canceled" = "A transação atual foi cancelada"; +///正在加载... +"Loading..." = "Carregando..."; +///已移除 +"Removed" = "Removido"; +///您的报告已提交,我们将尽快处理。 +"Your report has been submitted and we will process it as soon as possible." = "Seu relatório foi enviado e será processado o mais rápido possível."; +///该播放列表已包含这首歌曲 +"This playlist already contains this song" = "Esta playlist já contém esta música"; +///已成功添加到播放列表 +"Successfully added to the playlist" = "Adicionado com sucesso à playlist"; +///当前没有正在播放的列表 +"There is no playlist currently playing" = "Não há listas em reprodução no momento"; +///已存在当前播放列表 +"The current playlist already exists" = "A playlist atual já existe"; +///已成功添加到下一首播放 +"Successfully added to next song" = "Adicionado com sucesso à próxima reprodução"; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/tr.lproj/InfoPlist.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/tr.lproj/InfoPlist.strings new file mode 100644 index 0000000..29053fd --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/tr.lproj/InfoPlist.strings @@ -0,0 +1,13 @@ +/* + 土耳其语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/13. + +*/ +///相册使用说明 +"NSPhotoLibraryUsageDescription" = "Özel beyaz gürültüyü eklemek için kullanılan albüm kaynaklarını almak için \"Musiclax\"ın fotoğraf albümünüzü açması gerekiyor. Bu uygulamanın fotoğraf albümünüze erişmesine izin verilsin mi?"; +///麦克风使用说明 +"NSMicrophoneUsageDescription" = "\"Musiclax\", çevredeki desibelleri tanımak için mikrofonunuzu açmanızı ve sizin için beyaz gürültüyü otomatik olarak açmanızı gerektirir. Bu uygulamanın mikrofonunuza erişmesine izin vermek istiyor musunuz?"; +///用户跟踪使用说明 +"NSUserTrackingUsageDescription" = "\"Musiclax\"ın kişiselleştirilmiş bir reklam deneyimi sunabilmesi için izleme izinleri istemesi gerekiyor. Gizliliğinize saygı duyuyor ve koruyoruz ve verilerinizi üçüncü taraflara satmayacağız."; diff --git a/relax.offline.mp3.music/MP/Common/Localizable(本地化)/tr.lproj/Localizable.strings b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/tr.lproj/Localizable.strings new file mode 100644 index 0000000..76f642a --- /dev/null +++ b/relax.offline.mp3.music/MP/Common/Localizable(本地化)/tr.lproj/Localizable.strings @@ -0,0 +1,155 @@ +/* + 土耳其语 + relax.offline.mp3.music + + Created by Mr.Zhou on 2024/8/12. + +*/ +//MARK: - 页面展示文本 +///曲库 +"Library" = "Müzik kütüphanesi"; +///真实人类声音 +"Real human voice" = "Gerçek insan sesi"; +///电器的声音 +"Sounds of appliances" = "Elektrikli aletlerin sesi"; +///大自然的声音 +"Sounds of nature" = "Doğanın sesleri"; +///正在播放 +"Now Playing" = "Şimdi oynatılıyor"; +///音量 +"Volume" = "Hacim"; +///定时关闭 +"Timing off" = "Planlanmış kapatma"; +///关于 +"About" = "Hakkında"; +///反馈 +"Feedback" = "Geri bildirim"; +///分享 +"Share" = "Paylaşmak"; +///隐私政策 +"Privacy Policy" = "Gizlilik politikası"; +///使用条款 +"Terms of Use" = "Kullanım şartları"; +///清除缓存 +"Clear Cache" = "Önbelleği temizle"; +///无强制,可随时取消 +"No mandatory,cancel at anytime" = "Hiçbir zorunluluk yok, istediğiniz zaman iptal edebilirsiniz"; +///继续 +"Continue" = "Devam etmek"; +///恢复 +"Restore" = "Iyileşmek"; +///设置 +"Setting" = "Kurmak"; +///当前版本 +"Current Version" = "Güncel sürüm"; +///版本 +"Version" = "Sürüm"; +///版本更新 +"Version Update" = "Sürüm güncellemesi"; +///是最新版本 +"is the latest Version" = "en son sürüm"; +///取消 +"Cancel" = "İptal etmek"; +///如果您有任何意见或建议,请通过以下电子邮件地址与我们联系 +"If you have any comments or suggestions, please contact us at the following e-mail address" = "Herhangi bir yorumunuz veya öneriniz varsa lütfen aşağıdaki e-posta adresinden bizimle iletişime geçin."; +///确认 +"Sure" = "Onaylamak"; +///清除B面缓存 +"Clearing B" = "Önbelleği temizlemek, depolama alanında yer açılmasına ve olası oynatma sorunlarının çözülmesine yardımcı olabilir. Bunu yapmak istediğinden emin misin?"; +///清除A面数据 +"Clearing A" = "Tamam'ı tıklamak, yüklediğiniz medya varlıklarını temizleyecektir. Bunu yapmak istediğinden emin misin?"; +///重命名 +"Rename" = "Rename"; +///删除 +"Delete" = "Silmek"; +///命名您的声音 +"Name Your Voice" = "Sesinizi adlandırın"; +///该值最多包含 60 个字符 +"60 characters" = "Değer en fazla 60 karakter içerebilir"; +///确认 +"Confirm" = "Onaylamak"; +///确认删除语音 +"Confirm Voice Deletion" = "Sesi silmeyi onaylayın"; +///此操作无法撤消 +"This cannot be undone" = "Bu işlem geri alınamaz"; +///从相册中获取 +"Pick from photo Library" = "Fotoğraf galerisinden seçim yapın"; +///从文件夹中获取 +"Pick from files" = "Dosyadan seç"; +///访问相册权限请求 +"Access album permission request" = "Fotoğraf albümü izin isteğine erişme"; +///“Musiclax”需要打开您的专辑以获取用于添加自定义白噪声的资源。请前往“设置”开启此权限! +"\"Musiclax\" needs to open your album to get the resources that will be used to add your custom white noise. Please go to ”Settings“ to turn on this permission!" = "\"Musiclax\", özel beyaz gürültü eklemek için gerekli kaynakları elde etmek üzere albümünüzü açmanızı gerektirir. Bu izni etkinleştirmek için lütfen \"Ayarlar\"a gidin!"; +///歌曲 +"Songs" = "Sarkı"; +///艺术家 +"Artists" = "Sanatçı"; +///离线 +"Offline" = "Çevrimdışı"; +///收藏歌曲 +"Love Songs" = "Favori şarkılar"; +///收藏艺术家 +"Love Artists" = "Favori sanatçı"; +///离线歌曲 +"Offline Songs" = "Çevrimdışı şarkılar"; +///搜索 +"Search" = "Aramak"; +///搜索歌曲、艺术家、播放列表 +"Search songs,artists,playlists" = "Şarkıları, sanatçıları, çalma listelerini arayın"; +///历史 +"History" = "Tarih"; +///播放列表 +"Playlists" = "çalma listesi"; +///收藏播放列表 +"Collect PlayLists" = "Favori çalma listesi"; +///命名您的播放列表 +"Name Your PlayList" = "Çalma listenizi adlandırın"; +///删除这首歌曲 +"Delete This Song" = "Bu şarkıyı sil"; +///您确定要删除这首歌曲的离线资源吗? +"Are you sure you want to delete the offline resources of this song?" = "Bu şarkının çevrimdışı kaynaklarını silmek istediğinizden emin misiniz?"; +///取消歌曲下载任务 +"Cancel Song Download Task" = "Şarkı indirme görevini iptal et"; +///您确定要取消这首歌曲的下载任务吗? +"Are you sure you want to cancel the download task of this song?" = "Bu şarkının indirme görevini iptal etmek istediğinizden emin misiniz?"; +//MARK: - HUD文本 +///已成功将电子邮件地址复制到剪贴板 +"Successfully copied the e-mail address to the clipboard" = "Herhangi bir yorumunuz veya öneriniz varsa lütfen aşağıdaki e-posta adresinden bizimle iletişime geçin."; +///成功了 +"Success" = "Başarılı"; +///失败了 +"Failure" = "Arızalı"; +///请选择产品类型 +"Please select your product type" = "Lütfen ürün tipini seçin"; +///连接不良 +"Bad connection~" = "Kötü bağlantı~"; +///获取资源失败,请稍后重试 +"Failed to obtain resource, please try again later" = "Kaynaklar alınamadı, lütfen daha sonra tekrar deneyin"; +///下载时出错,请重新下载。 +"An error occurred while downloading. Please download again." = "İndirirken bir hata oluştu, lütfen tekrar indirin"; +///下载成功 +"Download Successfull" = "İndirme başarılı"; +///存储空间不足,下载失败 +"Insufficient storage space, download failed" = "Yetersiz depolama alanı, indirme işlemi başarısız oldu"; +///再试一次 +"Try again" = "Tekrar deneyin"; +///当前交易失败 +"The current transaction failed" = "Mevcut işlem başarısız oldu"; +///当前交易已取消 +"The current transaction has been canceled" = "Mevcut işlem iptal edildi"; +///正在加载... +"Loading..." = "Yükleniyor..."; +///已移除 +"Removed" = "Kaldırıldı"; +///您的报告已提交,我们将尽快处理。 +"Your report has been submitted and we will process it as soon as possible." = "Raporunuz gönderildi ve en kısa sürede işleme alınacaktır."; +///该播放列表已包含这首歌曲 +"This playlist already contains this song" = "Bu şarkı listesi zaten bu şarkıyı içeriyor"; +///已成功添加到播放列表 +"Successfully added to the playlist" = "Çalma listesine başarıyla eklendi"; +///当前没有正在播放的列表 +"There is no playlist currently playing" = "Şu anda oynatılacak liste yok"; +///已存在当前播放列表 +"The current playlist already exists" = "Geçerli oynatma listesi zaten mevcut"; +///已成功添加到下一首播放 +"Successfully added to next song" = "Sonraki oynatmaya başarıyla eklendi"; diff --git a/relax.offline.mp3.music/MP/Common/Macro(宏定义与全局量)/Macro.swift b/relax.offline.mp3.music/MP/Common/Macro(宏定义与全局量)/Macro.swift index a5b8bb0..3dbbfbb 100644 --- a/relax.offline.mp3.music/MP/Common/Macro(宏定义与全局量)/Macro.swift +++ b/relax.offline.mp3.music/MP/Common/Macro(宏定义与全局量)/Macro.swift @@ -446,9 +446,9 @@ func saveLoadVideoItem(_ song:MPPositive_SongItemModel, completion:(() -> Void)? //保存下载数据 MPPositive_DownloadItemModel.save() completion?() + //更新数据库 + MPPositive_LoadCoreModel.shared.reloadLoadSongViewModel(nil) DispatchQueue.main.async { - //更新数据库 - MPPositive_LoadCoreModel.shared.reloadLoadSongViewModel(nil) //执行埋点 MP_AnalyticsManager.shared.player_b_downloadsuccess_actionAction(item.videoId, videoname: item.title ?? "", artistname: item.shortBylineText ?? "") print("完成了对\(song.title ?? "")的下载数据保存") diff --git a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AdMobManager.swift b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AdMobManager.swift index 5bfff39..0bd5322 100644 --- a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AdMobManager.swift +++ b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AdMobManager.swift @@ -20,6 +20,8 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont private let sharedInstance = GADMobileAds.sharedInstance() ///广告总开关 private var openAdStatus:Bool = true + ///内部使用广告开光 + private var internalAdStatus:Bool = false ///设置广告总开关 func setOpenAdStatus(_ bool:Bool) { DispatchQueue.main.async { @@ -267,7 +269,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///加载更多广告 func loadMoreAdMobs() { - guard openAdStatus else {return} + guard openAdStatus, internalAdStatus else {return} loadPlayInterstitialAd{status in if status { print("成功加载播放插页广告") @@ -385,7 +387,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont ///异步加载开屏广告 func loadOpenAd(_ type:OpenType, level:Int = 0, completion: @escaping (Bool) -> Void) { - guard openAdStatus else {return} + guard openAdStatus, internalAdStatus else {return} // 检测当前是否有广告或者有广告正在加载 if isLoadingOpenAd || isOpenAdAvailable() { // 有广告或有广告在加载 @@ -499,7 +501,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///开屏广告展示 func showOpenAdIfAvailable(_ type:OpenType, completion:((_ T:GADFullScreenPresentingAd, _ isOpen:Bool) -> Void)?) { - guard openAdStatus else {return} + guard openAdStatus, internalAdStatus else {return} // 如果应用插页广告或者开屏广告已经正在展示,则不再展示该广告。 guard !interstitialSwitch, !isShowingOpenAd else { return } // 如果应用开屏广告尚不可用但应该显示,则加载新广告。 @@ -622,7 +624,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///搜索原生广告加载 func loadSearchNativeAd() { - guard openAdStatus else {return} + guard openAdStatus, internalAdStatus else {return} guard let vc = searchViewController else {return} //请求数量限制器 let multipleAdOptions = GADMultipleAdsAdLoaderOptions() @@ -643,7 +645,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///将加载的搜索原生广告添加到页面中 func layoutSearchNativeAd(in containerView: UIView) { - guard openAdStatus else {return} + guard openAdStatus, internalAdStatus else {return} containerView.subviews.forEach { item in item.removeFromSuperview() } @@ -688,7 +690,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont //异步加载搜索插页广告 func loadSearchInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { - guard openAdStatus else {return} + guard openAdStatus, internalAdStatus else {return} // 检测当前是否有广告或者有广告正在加载 if isLoadingSearchInterstitialAd || isSearchInterstitialAdAvailable() { // 有广告或有广告在加载 @@ -746,7 +748,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///搜索插页广告展示 func showSearchInterstitialAdIfAvailable(completion:((GADInterstitialAd) -> Void)?) { - guard openAdStatus else {return} + guard openAdStatus, internalAdStatus else {return} // 如果应用插页广告或者开屏广告已经正在展示,则不再展示该广告。 guard !interstitialSwitch, !isShowingSearchInterstitialAd else { return } //检索是否存在插页间隔时间 @@ -804,7 +806,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont var completePlayInterstitialAdBlock:(() -> Void)? //异步加载播放插页广告 func loadPlayInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { - guard openAdStatus else { + guard openAdStatus, internalAdStatus else { completion(false) return } @@ -862,7 +864,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///播放插页广告展示 func showPlayInterstitialAdIfAvailable(completion:((GADInterstitialAd?) -> Void)?) { - guard openAdStatus else { + guard openAdStatus, internalAdStatus else { completion?(nil) return } @@ -933,7 +935,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont var completeSwitchInterstitialAdBlock:(() -> Void)? //异步加载切歌插页广告 func loadSwitchInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { - guard openAdStatus else { + guard openAdStatus, internalAdStatus else { completion(false) return } @@ -990,7 +992,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///切歌插页广告展示 func showSwitchInterstitialAdIfAvailable(completion:((GADInterstitialAd) -> Void)?) { - guard openAdStatus else { + guard openAdStatus, internalAdStatus else { return } // 如果应用插页广告或者开屏广告已经正在展示,则不再展示该广告。 @@ -1050,7 +1052,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont var completeLoadInterstitialAdBlock:(() -> Void)? //异步加载下载插页广告 func loadLoadInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { - guard openAdStatus else { + guard openAdStatus, internalAdStatus else { completion(false) return } @@ -1107,7 +1109,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///下载插页广告展示 func showLoadInterstitialAdIfAvailable(completion:((GADInterstitialAd) -> Void)?) { - guard openAdStatus else { + guard openAdStatus, internalAdStatus else { return } // 如果应用插页广告或者开屏广告已经正在展示,则不再展示该广告。 @@ -1186,7 +1188,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont var onLibraryNativeAdBlock:(() -> Void)? ///配置曲库原生广告加载器 func configureLibraryNativeAd(rootController vc:UIViewController) { - guard openAdStatus else { + guard openAdStatus, internalAdStatus else { return } if libraryViewController == nil { @@ -1195,7 +1197,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///曲库原生广告加载 func loadLibraryNativeAd() { - guard openAdStatus else {return} + guard openAdStatus, internalAdStatus else {return} guard let vc = libraryViewController, libraryNativeAds == nil else {return} //请求数量限制器 let multipleAdOptions = GADMultipleAdsAdLoaderOptions() @@ -1216,7 +1218,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///将加载的曲库原生广告添加到页面中 func layoutLibraryNativeAd(in containerView: UIView, index:Int) { - guard openAdStatus else {return} + guard openAdStatus, internalAdStatus else {return} containerView.subviews.forEach { item in item.removeFromSuperview() } @@ -1294,7 +1296,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } //异步加载曲库插页广告 func loadLibraryInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { - guard openAdStatus else { + guard openAdStatus, internalAdStatus else { completion(false) return } @@ -1351,7 +1353,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///曲库插页广告展示 func showLibraryInterstitialAdIfAvailable(completion:((GADInterstitialAd) -> Void)?) { - guard openAdStatus else { + guard openAdStatus, internalAdStatus else { return } // 如果应用插页广告或者开屏广告已经正在展示,则不再展示该广告。 @@ -1413,7 +1415,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont var completeGlobalInterstitialAdBlock:(() -> Void)? //异步加载全局插页广告 func loadGlobalInterstitialAd(_ level:Int = 0, completion: @escaping (Bool) -> Void) { - guard openAdStatus else { + guard openAdStatus, internalAdStatus else { return } // 检测当前是否有广告或者有广告正在加载 @@ -1451,7 +1453,7 @@ class MP_AdMobManager: NSObject, GADAudioVideoManagerDelegate, GADFullScreenCont } ///全局插页广告展示 func showGlobalInterstitialAdIfAvailable(completion:((GADInterstitialAd?) -> Void)?) { - guard openAdStatus else { + guard openAdStatus, internalAdStatus else { return } // 如果应用插页广告或者开屏广告已经正在展示,则不再展示该广告。 diff --git a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AnalyticsManager.swift b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AnalyticsManager.swift index 8103ca8..a8cf0d8 100644 --- a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AnalyticsManager.swift +++ b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AnalyticsManager.swift @@ -87,7 +87,16 @@ class MP_AnalyticsManager: NSObject { private let guide_click = "guide_click" //曲库点击 private let library_click = "library_click" - + ///点击付费入口 + private let VIP_click = "VIP_click" + ///付费页面展示 + private let VIP_page_imp = "VIP_page_imp" + ///购买付费套餐 + private let VIP_continue_click = "VIP_continue_click" + ///购买成功 + private let VIP_buy_success = "VIP_buy_success" + ///购买失败 + private let VIP_buy_failure = "VIP_buy_failure" private override init() { //获取用户是新用户还是老用户 if UserDefaults.standard.bool(forKey: "UserStatus") { @@ -449,8 +458,27 @@ class MP_AnalyticsManager: NSObject { Analytics.logEvent(library_click, parameters: ["click_from":click, "folder_click":folder]) } - - + ///点击付费入口 + func VIP_clickAction() { + Analytics.logEvent(VIP_click, parameters: nil) + } + ///付费页面展示 + func VIP_page_impAction() { + Analytics.logEvent(VIP_page_imp, parameters: nil) + } + ///购买付费套餐 + func VIP_continue_clickAction(_ productID:String) { + Analytics.logEvent(VIP_continue_click, parameters: ["productID":productID]) + } + ///购买成功 + func VIP_buy_successAction(_ productID:String) { + Analytics.logEvent(VIP_buy_success, parameters: ["productID":productID]) + } + ///购买失败 + func VIP_buy_failureAction(_ productID:String, error:String) { + Analytics.logEvent(VIP_buy_failure, parameters: ["productID":productID, + "buy_error":error]) + } //MARK: - 广告埋点事件 //冷启动展示机会 private let cold_ads_chance:String = "cold_ads_chance" diff --git a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_DownloadManager.swift b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_DownloadManager.swift index e4b8be3..8edd806 100644 --- a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_DownloadManager.swift +++ b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_DownloadManager.swift @@ -76,7 +76,7 @@ class MP_DownloadManager: NSObject { //根据歌曲信息获得下载链接,并创建下载任务(允许压缩下载) guard let url = URL(string: song.resourceUrls?.first ?? ""), let videoId = song.videoId else { //获取链接失败 - MP_HUD.error("Source details not available yet, please try again later!", delay: 2.0, completion: nil) + MP_HUD.error("Failed to obtain resource, please try again later".localizableString(), delay: 2.0, completion: nil) //失败事件埋点 MP_AnalyticsManager.shared.player_b_downloadfailure_errorAction(song.videoId ?? "", videoname: song.title ?? "", artistname: song.shortBylineText ?? "", error: "Failed to create download link") return @@ -170,53 +170,58 @@ class MP_DownloadManager: NSObject { //确实存在一个文件,将它删除 try? fileManager.removeItem(at: fileURL) } - //将任务缓存文件移动到真实下载地址 - do{ - try fileManager.moveItem(at: filePathUrl, to: fileURL) - }catch{ - //移动失败,终止任务 - NotificationCenter.notificationKey.post(notificationName: .dowload_end_source, object: ["videoId":nextVideoId]) - //发布报错埋点 - MP_AnalyticsManager.shared.player_b_downloadfailure_errorAction(nextVideoId, videoname: songHandlers[nextVideoId]?.title ?? "", artistname: songHandlers[nextVideoId]?.shortBylineText ?? "", error: error.localizedDescription) - //清除已失败任务的队列组内容 + DispatchQueue.global(qos: .utility).async { + [weak self] in + guard let self = self else {return} + //将任务缓存文件移动到真实下载地址 + do{ + try fileManager.moveItem(at: filePathUrl, to: fileURL) + }catch{ + //移动失败,终止任务 + NotificationCenter.notificationKey.post(notificationName: .dowload_end_source, object: ["videoId":nextVideoId]) + //发布报错埋点 + MP_AnalyticsManager.shared.player_b_downloadfailure_errorAction(nextVideoId, videoname: songHandlers[nextVideoId]?.title ?? "", artistname: songHandlers[nextVideoId]?.shortBylineText ?? "", error: error.localizedDescription) + //清除已失败任务的队列组内容 + if self.downloadTasks[nextVideoId]?.status == .downloading { + self.downloadTasks[nextVideoId]?.status = .failed + } + downloadURLs[nextVideoId] = nil + progressStorage[nextVideoId] = nil + songHandlers[nextVideoId] = nil + MP_HUD.text("An error occurred while downloading. Please download again.".localizableString(), delay: 1.5, completion: nil) + session.cancel(task) { _ in + self.downloadTasks[nextVideoId] = nil + print("移动\(self.songHandlers[nextVideoId]?.title ?? "")到真实下载地址失败,失败原因:\(error)") + } + //启动新的任务 + self.executeVideoDownloadTask() + return + } + //文件移动完成后,执行任务队列清理 + saveLoadVideoItem(self.songHandlers[nextVideoId]!){ + [weak self] in + guard let self = self else {return} + NotificationCenter.notificationKey.post(notificationName: .dowload_end_source, object: ["videoId":nextVideoId]) + } + // 清除已完成任务的进度记录 if self.downloadTasks[nextVideoId]?.status == .downloading { - self.downloadTasks[nextVideoId]?.status = .failed + self.downloadTasks[nextVideoId]?.status = .finished } - downloadURLs[nextVideoId] = nil - progressStorage[nextVideoId] = nil - songHandlers[nextVideoId] = nil - MP_HUD.text("An error occurred while downloading. Please download again.", delay: 1.5, completion: nil) - session.cancel(task) { _ in - self.downloadTasks[nextVideoId] = nil - print("移动\(self.songHandlers[nextVideoId]?.title ?? "")到真实下载地址失败,失败原因:\(error)") + self.downloadURLs[nextVideoId] = nil + self.downloadTasks[nextVideoId] = nil + self.progressStorage[nextVideoId] = nil + self.songHandlers[nextVideoId] = nil + //告知用户下载成功 + MP_HUD.downloadText("Download Successfull".localizableString(), delay: 1.0, completion: nil) + //结束后台任务 + if let bgTaskID = self.backgroundTaskIDs[nextVideoId] { + UIApplication.shared.endBackgroundTask(bgTaskID) + self.backgroundTaskIDs[nextVideoId] = .invalid } + session.remove(task) //启动新的任务 self.executeVideoDownloadTask() - return } - //文件移动完成后,执行任务队列清理 - saveLoadVideoItem(self.songHandlers[nextVideoId]!){ - [weak self] in - NotificationCenter.notificationKey.post(notificationName: .dowload_end_source, object: ["videoId":nextVideoId]) - } - // 清除已完成任务的进度记录 - if self.downloadTasks[nextVideoId]?.status == .downloading { - self.downloadTasks[nextVideoId]?.status = .finished - } - self.downloadURLs[nextVideoId] = nil - self.downloadTasks[nextVideoId] = nil - self.progressStorage[nextVideoId] = nil - self.songHandlers[nextVideoId] = nil - //告知用户下载成功 - MP_HUD.downloadText("Download Successfull", delay: 1.0, completion: nil) - //结束后台任务 - if let bgTaskID = self.backgroundTaskIDs[nextVideoId] { - UIApplication.shared.endBackgroundTask(bgTaskID) - self.backgroundTaskIDs[nextVideoId] = .invalid - } - session.remove(task) - //启动新的任务 - self.executeVideoDownloadTask() }.failure { [weak self] task in //下载失败 guard let self = self else {return} @@ -235,11 +240,12 @@ class MP_DownloadManager: NSObject { songHandlers[nextVideoId] = nil switch error.localizedDescription { case "The operation couldn’t be completed. No space left on device": - MP_HUD.text("Insufficient storage space, download failed", delay: 1.5, completion: nil) + MP_HUD.text("Insufficient storage space, download failed".localizableString(), delay: 1.5, completion: nil) default: - MP_HUD.text("An error occurred while downloading. Please download again.", delay: 1.5, completion: nil) + MP_HUD.text("An error occurred while downloading. Please download again.".localizableString(), delay: 1.5, completion: nil) } - session.cancel(task) { _ in + session.cancel(task) { [weak self] _ in + guard let self = self else {return} self.downloadTasks[nextVideoId] = nil print("\(self.songHandlers[nextVideoId]?.title ?? "")下载任务失败,失败原因:\(error)") //结束后台任务 diff --git a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_IAPManager.swift b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_IAPManager.swift index ba7a184..1ecf10b 100644 --- a/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_IAPManager.swift +++ b/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_IAPManager.swift @@ -48,12 +48,14 @@ class MP_IAPManager: NSObject { //检索用户选择的产品 guard availableProducts.indices.contains(index) else { //越界了,说明广告总数出了问题,重新请求 - MP_HUD.onlytext("Try again!", delay: 1.0, completion: nil) + MP_HUD.onlytext("Try again".localizableString(), delay: 1.0, completion: nil) + MP_AnalyticsManager.shared.VIP_buy_failureAction(productIdentifiers[index], error: "Product data loading failed") requestProducts() return } let id = productIdentifiers[index] if let product = availableProducts.first(where: {$0.productIdentifier == id}) { + MP_AnalyticsManager.shared.VIP_continue_clickAction(id) //将产品转为交易项 let payment = SKPayment(product: product) //将交易项添加进购买线程中 @@ -165,7 +167,7 @@ extension MP_IAPManager: SKProductsRequestDelegate, SKPaymentTransactionObserver } func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: any Error) { print("重启交易失败") - MP_HUD.error("The current transaction failed, \(error.localizedDescription)", delay: 1.0, completion: nil) + MP_HUD.error("The current transaction failed".localizableString(), delay: 1.0, completion: nil) //清理所有的VIP信息 productIdentifiers.forEach { item in cleanPurchase(productId: item) @@ -197,6 +199,7 @@ extension MP_IAPManager: SKProductsRequestDelegate, SKPaymentTransactionObserver private func complete(transaction: SKPaymentTransaction) { MP_HUD.success("Successfully purchased", delay: 1.0, completion: nil) print("Transaction completed successfully.") + MP_AnalyticsManager.shared.VIP_buy_successAction(transaction.payment.productIdentifier) validateReceipt { [weak self] status in guard let self = self else {return} if status { @@ -226,10 +229,11 @@ extension MP_IAPManager: SKProductsRequestDelegate, SKPaymentTransactionObserver private func fail(transaction: SKPaymentTransaction) { //检索错误 if let error = transaction.error as NSError? { + MP_AnalyticsManager.shared.VIP_buy_failureAction(transaction.payment.productIdentifier, error: error.localizedDescription) if error.code != SKError.paymentCancelled.rawValue { - MP_HUD.error("The current transaction failed, \(error.localizedDescription)", delay: 1.0, completion: nil) + MP_HUD.error("The current transaction failed".localizableString(), delay: 1.0, completion: nil) } else { - MP_HUD.onlytext("The current transaction has been canceled", delay: 1.0, completion: nil) + MP_HUD.onlytext("The current transaction has been canceled".localizableString(), delay: 1.0, completion: nil) } } } diff --git a/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_DownloadViewModel.swift b/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_DownloadViewModel.swift index 762e796..d51ab7a 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_DownloadViewModel.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_DownloadViewModel.swift @@ -24,7 +24,7 @@ class MPPositive_DownloadViewModel: NSObject { } //配置数据 private func configure() { - if let url = URL(string: loadItem.reviewImage) { + if let reviewImage = loadItem.reviewImage ,let url = URL(string: reviewImage) { reviewURL = url } title = loadItem.title diff --git a/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_LibraryListViewModel.swift b/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_LibraryListViewModel.swift index 36ba4f4..48018ce 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_LibraryListViewModel.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_LibraryListViewModel.swift @@ -9,7 +9,7 @@ import UIKit class MPPositive_LibraryListViewModel: NSObject { ///对应模块标题 - var title:String = "Library" + var title:String = NSLocalizedString("Library", comment: "曲库") ///曲库View组 var libraryViewModels:[MPPositive_LibraryViewModel] = [] @@ -23,26 +23,26 @@ class MPPositive_LibraryListViewModel: NSObject { let songs = MPPositive_LoadCoreModel.shared.songViewModels if songs.isEmpty == false, let lastUrl = songs.first?.coverURL { //获取收藏歌曲 - let item = MPPositive_LibraryViewModel(.init(libraryType: .love_songs, coverUrl: lastUrl, title: "Love Songs")) + let item = MPPositive_LibraryViewModel(.init(libraryType: .love_songs, coverUrl: lastUrl, title: "Love Songs".localizableString())) array.append(item) }else { - let item = MPPositive_LibraryViewModel(.init(libraryType: .love_songs, coverUrl: nil, title: "Love Songs")) + let item = MPPositive_LibraryViewModel(.init(libraryType: .love_songs, coverUrl: nil, title: "Love Songs".localizableString())) array.append(item) } let artists = MPPositive_LoadCoreModel.shared.artistViewModels if artists.isEmpty == false, let lastUrl = artists.first?.coverURL { - let item = MPPositive_LibraryViewModel(.init(libraryType: .love_aritists, coverUrl: lastUrl, title: "Love Artists")) + let item = MPPositive_LibraryViewModel(.init(libraryType: .love_aritists, coverUrl: lastUrl, title: "Love Artists".localizableString())) array.append(item) }else { - let item = MPPositive_LibraryViewModel(.init(libraryType: .love_aritists, coverUrl: nil, title: "Love Artists")) + let item = MPPositive_LibraryViewModel(.init(libraryType: .love_aritists, coverUrl: nil, title: "Love Artists".localizableString())) array.append(item) } let offlines = MPPositive_LoadCoreModel.shared.loadViewModels if offlines.isEmpty == false, let lastUrl = offlines.first?.reviewURL { - let item = MPPositive_LibraryViewModel(.init(libraryType: .offline_songs, coverUrl: lastUrl, title: "Offline Songs")) + let item = MPPositive_LibraryViewModel(.init(libraryType: .offline_songs, coverUrl: lastUrl, title: "Offline Songs".localizableString())) array.append(item) }else { - let item = MPPositive_LibraryViewModel(.init(libraryType: .offline_songs, coverUrl: nil, title: "Offline Songs")) + let item = MPPositive_LibraryViewModel(.init(libraryType: .offline_songs, coverUrl: nil, title: "Offline Songs".localizableString())) array.append(item) } //对自定义列表进行添加 diff --git a/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_SearchResultListViewModel.swift b/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_SearchResultListViewModel.swift index 5be4c00..8eed639 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_SearchResultListViewModel.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/ListViewModels/MPPositive_SearchResultListViewModel.swift @@ -55,11 +55,13 @@ class MPPositive_SearchResultListViewModel: NSObject { } MP_NetWorkManager.shared.requestSearchTypeContinuation(continuation, itct: itct) { [weak self] (items, continuation, itct) in guard let self = self else {return} - //对全部的内容模块组进行追加 - allItemViews.append(contentsOf: items) //记录分页内容 self.continuation = continuation self.itct = itct + DispatchQueue.main.async { + //对全部的内容模块组进行追加 + self.allItemViews.append(contentsOf: items) + } } } } diff --git a/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/LoadViewModels/MPPositive_PlayerLoadViewModel.swift b/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/LoadViewModels/MPPositive_PlayerLoadViewModel.swift index 667eecf..3dbd5a3 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/LoadViewModels/MPPositive_PlayerLoadViewModel.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Models/ViewModels/LoadViewModels/MPPositive_PlayerLoadViewModel.swift @@ -169,7 +169,36 @@ class MPPositive_PlayerLoadViewModel: NSObject { } } } - + ///插入下一首播放 + func playNextAction(_ next:MPPositive_SongItemModel) { + //获取当前播放音乐在顺序播放列表和随机播放列表中的下标 + if let index = songVideos.firstIndex(where: {$0.videoId == currentVideo?.song.videoId}) { + //判断下一首会不会越界 + let nextIndex:Int = index + 1 + if songVideos.indices.contains(nextIndex) { + //不会越界,可以插入 + songVideos.insert(next, at: nextIndex) + }else { + //越界了,只能添加到最后 + songVideos.append(next) + } + } + //设置随机列表 + if let index = randomVideos.firstIndex(where: {$0.videoId == currentVideo?.song.videoId}) { + //判断下一首会不会越界 + let nextIndex:Int = index + 1 + if randomVideos.indices.contains(nextIndex) { + //不会越界,可以插入 + randomVideos.insert(next, at: nextIndex) + }else { + //越界了,只能添加到最后 + randomVideos.append(next) + } + } + MP_HUD.success("Successfully added to next song".localizableString(), delay: 1.0) { + print("用户将\(next.title ?? "")添加到下一首播放") + } + } //销毁时 deinit { itemObservation?.invalidate() diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_BaseViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_BaseViewController.swift index 59d05e8..7e8a917 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_BaseViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_BaseViewController.swift @@ -140,7 +140,7 @@ class MPPositive_BaseViewController: MP_BaseViewController, UIGestureRecognizerD DispatchQueue.main.async { [weak self] in guard let self = self else {return} - MP_HUD.text("Weak connection.", delay: 1.0){ [weak self] in + MP_HUD.text("Bad connection~".localizableString(), delay: 1.0){ [weak self] in //执行报错回调闭包 if self?.errorBlock != nil { self?.errorBlock!() diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_MoreSongOperationsViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_MoreSongOperationsViewController.swift index 14db2db..6d2426f 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_MoreSongOperationsViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_MoreSongOperationsViewController.swift @@ -339,7 +339,7 @@ class MPPositive_MoreSongOperationsViewController: UIViewController, UIViewContr //MARK: - tableView extension MPPositive_MoreSongOperationsViewController:UITableViewDataSource, UITableViewDelegate { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return 3 + return 4 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { switch indexPath.row { @@ -354,6 +354,8 @@ extension MPPositive_MoreSongOperationsViewController:UITableViewDataSource, UIT switch indexPath.row { case 1://添加歌单/移除歌单 cell.title = playList != nil ? "Remove from playlist":"Add to playlist" + case 2: + cell.title = "Play next" default://举报 cell.title = "Report" } @@ -368,7 +370,7 @@ extension MPPositive_MoreSongOperationsViewController:UITableViewDataSource, UIT case .startDownload://开始状态,点击后进入下载状态 //检索当前网络状态 guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } //检索当前歌曲是否下载过 @@ -382,15 +384,15 @@ extension MPPositive_MoreSongOperationsViewController:UITableViewDataSource, UIT //补全了数据,执行下载 MP_DownloadManager.shared.prepareVideoDownloadTask(from: song) case .downloaded://已下载,点击删除下载 - let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Delete This Song".localizableString(), message: "Are you sure you want to delete the offline resources of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {[weak self](action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {[weak self](action) in guard let videoId = self?.song?.videoId else {return} //确定删除 MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in - MP_HUD.progress("Loading...", delay: 0.5) { - MP_HUD.text("Removed", delay: 1.0, completion: nil) + MP_HUD.progress("Loading...".localizableString(), delay: 0.5) { + MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil) tableView.reloadData() self?.dismiss(animated: true) } @@ -400,14 +402,14 @@ extension MPPositive_MoreSongOperationsViewController:UITableViewDataSource, UIT present(alertController, animated: true) default://取消下载 //点击取消下载 - let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {[weak self](action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {[weak self](action) in guard let videoId = self?.song?.videoId else {return} //确定取消 MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in - MP_HUD.text("Canceled", delay: 1.0, completion: nil) + MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil) tableView.reloadData() } } @@ -428,7 +430,7 @@ extension MPPositive_MoreSongOperationsViewController:UITableViewDataSource, UIT MPPositive_LoadCoreModel.shared.reloadCustomPlayLists(nil) dismiss(animated: true) { [weak self] in - MP_HUD.onlytext("Removed successfully", delay: 1.0, completion: nil) + MP_HUD.onlytext("Success".localizableString(), delay: 1.0, completion: nil) } }else { //选择歌单 @@ -442,8 +444,24 @@ extension MPPositive_MoreSongOperationsViewController:UITableViewDataSource, UIT chooseVC.modalPresentationStyle = .custom present(chooseVC, animated: true) } + case 2://下一首播放 + //检索播放列表,如果不存在播放列表,则禁止下一首播放 + guard let load = MP_PlayerManager.shared.loadPlayer else { + //不存在播放列表,禁止下一首播放 + MP_HUD.onlytext("There is no playlist currently playing".localizableString(), delay: 1.0, completion: nil) + return + } + //存在播放列表,判断当前歌曲是否存在于播放列表 + guard load.songVideos?.contains(where: {$0.videoId == song.videoId}) == false else { + //存在于播放列表中,不可再度添加 + MP_HUD.onlytext("The current playlist already exists".localizableString(), delay: 1.0, completion: nil) + return + } + if let s = song { + MP_PlayerManager.shared.loadPlayer?.playNextAction(s) + } default://举报 - MP_HUD.onlytext("Your report has been submitted and we will process it as soon as possible.", delay: 1.0, completion: nil) + MP_HUD.onlytext("Your report has been submitted and we will process it as soon as possible.".localizableString(), delay: 1.0, completion: nil) } } diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_PresentationController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_PresentationController.swift index 6a26392..e1bf5e3 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_PresentationController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_PresentationController.swift @@ -42,7 +42,7 @@ class MPPositive_PresentationController: UIPresentationController { case .MoreOperations: presentedView?.snp.makeConstraints({ (make) in make.left.right.bottom.equalToSuperview() - make.height.equalTo(300*width+bottomPadding) + make.height.equalTo(350*width+bottomPadding) }) case .NewList: presentedView?.snp.makeConstraints({ (make) in diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_ChoosePlayListViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_ChoosePlayListViewController.swift index c36e7b4..a555d73 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_ChoosePlayListViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_ChoosePlayListViewController.swift @@ -146,7 +146,7 @@ extension MPPositive_ChoosePlayListViewController:UITableViewDataSource, UITable //判断videos中是否存在当前歌曲 if videos.first(where: {$0.videoId == song.videoId}) != nil { //不为空的情况下,说明有选中歌单有这首歌,弹出HUD - MP_HUD.onlytext("The song already exists in the current playlist", delay: 1.5, completion: nil) + MP_HUD.onlytext("This playlist already contains this song".localizableString(), delay: 1.5, completion: nil) }else{ //为空,将歌曲存入选中歌单 let video = MPPositive_CustomVideoModel.create() @@ -159,7 +159,7 @@ extension MPPositive_ChoosePlayListViewController:UITableViewDataSource, UITable video.addTime = Date().timeZone() video.playList = playList MPPositive_CustomVideoModel.save() - MP_HUD.onlytext("Successfully added to the playlist", delay: 1.5) { + MP_HUD.onlytext("Successfully added to the playlist".localizableString(), delay: 1.5) { [weak self] in self?.dismiss(animated: true, completion: { [weak self] in diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_CustomPlayListViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_CustomPlayListViewController.swift index e862444..f824e10 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_CustomPlayListViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_CustomPlayListViewController.swift @@ -415,15 +415,15 @@ extension MPPositive_CustomPlayListViewController: UITableViewDataSource, UITabl [weak self] in guard let self = self else {return} //点击删除下载 - let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Delete This Song".localizableString(), message: "Are you sure you want to delete the offline resources of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = self.isSearchStyle ? self.videos[indexPath.row].videoId:self.list?.videosArray[indexPath.row].videoId else {return} //确定删除 MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in - MP_HUD.progress("Loading...", delay: 0.5) { - MP_HUD.text("Removed", delay: 1.0, completion: nil) + MP_HUD.progress("Loading...".localizableString(), delay: 0.5) { + MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil) tableView.reloadData() } } @@ -435,14 +435,14 @@ extension MPPositive_CustomPlayListViewController: UITableViewDataSource, UITabl [weak self] in guard let self = self else {return} //点击取消下载 - let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = self.isSearchStyle ? self.videos[indexPath.row].videoId:self.list?.videosArray[indexPath.row].videoId else {return} //确定取消 MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in - MP_HUD.text("Canceled", delay: 1.0, completion: nil) + MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil) tableView.reloadData() } } diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LibraryViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LibraryViewController.swift index 90001b4..5d92c7f 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LibraryViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LibraryViewController.swift @@ -16,7 +16,7 @@ class MPPositive_LibraryViewController: MPPositive_BaseViewController, UIViewCon return imageView }() //标题Label - private lazy var titleLabel:UILabel = createLabel("Library", font: .systemFont(ofSize: 32*width, weight: .regular), textColor: .white, textAlignment: .left) + private lazy var titleLabel:UILabel = createLabel(NSLocalizedString("Library", comment: "曲库"), font: .italicSystemFont(ofSize: 32*width), textColor: .white, textAlignment: .left) ///封面图片组 private lazy var coverImageViews:[UIImageView] = { var array:[UIImageView] = [] @@ -53,7 +53,7 @@ class MPPositive_LibraryViewController: MPPositive_BaseViewController, UIViewCon //数据源 private lazy var dataSource:JXSegmentedTitleDataSource = { var dataSource = JXSegmentedTitleDataSource() - dataSource.titles = ["Playlists", "Collect Playlists"] + dataSource.titles = ["Playlists".localizableString(), "Collect Playlists".localizableString()] //标题未选中状态 dataSource.titleNormalColor = .init(hex: "#999999") dataSource.titleNormalFont = .systemFont(ofSize: 14*width, weight: .regular) @@ -114,15 +114,15 @@ class MPPositive_LibraryViewController: MPPositive_BaseViewController, UIViewCon guard let self = self else {return} //封面设置 - songsLabel.text = "Songs \(MPPositive_LoadCoreModel.shared.songViewModels.count)" + songsLabel.text = "\("Songs".localizableString()) \(MPPositive_LoadCoreModel.shared.songViewModels.count)" let songCover = MPPositive_LoadCoreModel.shared.songViewModels.first?.coverURL coverImageViews[0].kf.setImage(with: songCover, placeholder: love_songBGImage) - artistsLabel.text = "Artists \(MPPositive_LoadCoreModel.shared.artistViewModels.count)" + artistsLabel.text = "\("Artists".localizableString()) \(MPPositive_LoadCoreModel.shared.artistViewModels.count)" let artistCover = MPPositive_LoadCoreModel.shared.artistViewModels.first?.coverURL coverImageViews[1].kf.setImage(with: artistCover, placeholder: love_artistBGImage) - loadsLabel.text = "Offline \(MPPositive_LoadCoreModel.shared.loadViewModels.count)" + loadsLabel.text = "\("Offline".localizableString()) \(MPPositive_LoadCoreModel.shared.loadViewModels.count)" let loadCover = MPPositive_LoadCoreModel.shared.loadViewModels.first?.reviewURL coverImageViews[2].kf.setImage(with: loadCover, placeholder: offline_songBGImage) @@ -267,7 +267,7 @@ extension MPPositive_LibraryViewController:JXSegmentedListContainerViewDataSourc //弹出新增自定义框 MPPositive_ModalType = .NewList let listVC = MPSideA_RenameViewController() - listVC.titleText = "Name Your PlayList" + listVC.titleText = "Name Your PlayList".localizableString() listVC.renameBlock = { [weak self] text in //新建一个自定歌单列表 diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LoveArtistsViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LoveArtistsViewController.swift index ab4fc70..6591b60 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LoveArtistsViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LoveArtistsViewController.swift @@ -34,7 +34,7 @@ class MPPositive_LoveArtistsViewController: MPPositive_BaseViewController { private let MPPositive_LoveArtistTableViewCellID = "MPPositive_LoveArtistTableViewCell" override func viewDidLoad() { super.viewDidLoad() - setTitle("Love Artists") + setTitle("Love Artists".localizableString()) setPopBtn() configure() MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 1) @@ -54,7 +54,7 @@ class MPPositive_LoveArtistsViewController: MPPositive_BaseViewController { [weak self] in guard let self = self else {return} tableView.showMessage(MPPositive_LoadCoreModel.shared.artistViewModels.count, title: "No Artists") - numbersLabel.text = "\(MPPositive_LoadCoreModel.shared.artistViewModels.count) Artists" + numbersLabel.text = "\(MPPositive_LoadCoreModel.shared.artistViewModels.count) \("Artists".localizableString())" tableView.reloadData() } } diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LoveSongsViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LoveSongsViewController.swift index 10b4cf5..97e08bf 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LoveSongsViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LoveSongsViewController.swift @@ -34,7 +34,7 @@ class MPPositive_LoveSongsViewController: MPPositive_BaseViewController, UIViewC private let MPPositive_SearchResultShowTableViewCellID = "MPPositive_SearchResultShowTableViewCell" override func viewDidLoad() { super.viewDidLoad() - setTitle("Love Songs") + setTitle("Love Songs".localizableString()) setPopBtn() configure() MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 1) @@ -54,7 +54,7 @@ class MPPositive_LoveSongsViewController: MPPositive_BaseViewController, UIViewC [weak self] in guard let self = self else {return} tableView.showMessage(MPPositive_LoadCoreModel.shared.songViewModels.count, title: "No Songs") - numbersLabel.text = "\(MPPositive_LoadCoreModel.shared.songViewModels.count) Songs" + numbersLabel.text = "\(MPPositive_LoadCoreModel.shared.songViewModels.count) \("Songs".localizableString())" tableView.reloadData() } } @@ -105,15 +105,15 @@ extension MPPositive_LoveSongsViewController: UITableViewDataSource, UITableView [weak self] in guard let self = self else {return} //点击删除下载 - let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Delete This Song".localizableString(), message: "Are you sure you want to delete the offline resources of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = MPPositive_LoadCoreModel.shared.songViewModels[indexPath.row].collectionSong.videoId else {return} //确定删除 MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in - MP_HUD.progress("Loading...", delay: 0.5) { - MP_HUD.text("Removed", delay: 1.0, completion: nil) + MP_HUD.progress("Loading...".localizableString(), delay: 0.5) { + MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil) tableView.reloadData() } } @@ -125,14 +125,14 @@ extension MPPositive_LoveSongsViewController: UITableViewDataSource, UITableView [weak self] in guard let self = self else {return} //点击取消下载 - let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = MPPositive_LoadCoreModel.shared.songViewModels[indexPath.row].collectionSong.videoId else {return} //确定取消 MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in - MP_HUD.text("Canceled", delay: 1.0, completion: nil) + MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil) tableView.reloadData() } } @@ -146,7 +146,7 @@ extension MPPositive_LoveSongsViewController: UITableViewDataSource, UITableView [weak self] in guard let self = self else {return} guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } MP_AnalyticsManager.shared.song_clickAction("Love Song") diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_OfflineSongsViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_OfflineSongsViewController.swift index 23bc80a..cf75c72 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_OfflineSongsViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_OfflineSongsViewController.swift @@ -35,7 +35,7 @@ class MPPositive_OfflineSongsViewController: MPPositive_BaseViewController { private var offlines:[MPPositive_DownloadViewModel] = [] override func viewDidLoad() { super.viewDidLoad() - setTitle("Offline Songs") + setTitle("Offline Songs".localizableString()) setPopBtn() configure() MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 1) @@ -56,7 +56,7 @@ class MPPositive_OfflineSongsViewController: MPPositive_BaseViewController { guard let self = self else {return} offlines = MPPositive_LoadCoreModel.shared.loadViewModels tableView.showMessage(offlines.count, title: "No Songs") - numbersLabel.text = "\(offlines.count) Songs" + numbersLabel.text = "\(offlines.count) \("Songs".localizableString())" tableView.reloadData() } } @@ -117,15 +117,15 @@ extension MPPositive_OfflineSongsViewController: UITableViewDataSource, UITableV [weak self] in guard let self = self else {return} //点击删除下载 - let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Delete This Song".localizableString(), message: "Are you sure you want to delete the offline resources of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = self.offlines[indexPath.row].loadItem.videoId else {return} //确定删除 MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in - MP_HUD.progress("Loading...", delay: 0.5) { - MP_HUD.text("Removed", delay: 1.0, completion: nil) + MP_HUD.progress("Loading...".localizableString(), delay: 0.5) { + MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil) self.reload() } } @@ -137,14 +137,14 @@ extension MPPositive_OfflineSongsViewController: UITableViewDataSource, UITableV [weak self] in guard let self = self else {return} //点击取消下载 - let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = self.offlines[indexPath.row].loadItem.videoId else {return} //确定取消 MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in - MP_HUD.text("Canceled", delay: 1.0, completion: nil) + MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil) self.reload() } } diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_HomeViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_HomeViewController.swift index 504e296..cbb58ef 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_HomeViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_HomeViewController.swift @@ -188,10 +188,11 @@ class MPPositive_HomeViewController: MPPositive_BaseViewController, UIViewContro make.left.equalToSuperview().offset(16*width) make.centerY.equalToSuperview() } - let label = createLabel("Search songs,artists,playlists", font: .systemFont(ofSize: 14*width, weight: .regular), textColor: .init(hex: "#666666"), textAlignment: .left) + let label = createLabel("Search songs,artists,playlists".localizableString(), font: .systemFont(ofSize: 14*width, weight: .regular), textColor: .init(hex: "#666666"), textAlignment: .left) searchView.addSubview(label) label.snp.makeConstraints { make in make.left.equalTo(iconImageView.snp.right).offset(8*width) + make.right.equalToSuperview().offset(-16*width) make.centerY.equalToSuperview() } searchView.isUserInteractionEnabled = true @@ -228,14 +229,14 @@ class MPPositive_HomeViewController: MPPositive_BaseViewController, UIViewContro } guideVC.feedBackBlock = { DispatchQueue.main.async { - let alert = UIAlertController(title: "Feedback", message: "If you have any comments or suggestions, please contact us at the following e-mail address", preferredStyle: .actionSheet) + let alert = UIAlertController(title: "Feedback".localizableString(), message: "If you have any comments or suggestions, please contact us at the following e-mail address".localizableString(), preferredStyle: .actionSheet) let email = UIAlertAction(title: "marketing@lux-ad.com", style: .default) { (_) in //将邮箱复制到剪切板中 UIPasteboard.general.string = "marketing@lux-ad.com" - MP_HUD.text("Successfully copied the e-mail address to the clipboard", delay: 1.0, completion: nil) + MP_HUD.text("Successfully copied the e-mail address to the clipboard".localizableString(), delay: 1.0, completion: nil) } alert.addAction(email) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alert.addAction(cancel) self.present(alert, animated: true) } @@ -381,6 +382,7 @@ class MPPositive_HomeViewController: MPPositive_BaseViewController, UIViewContro //弹出VIP页面 @objc private func vipIAPClick(_ sender:UITapGestureRecognizer) { view.endEditing(true) + MP_AnalyticsManager.shared.VIP_clickAction() let iapVC = MP_IAPViewController() iapVC.isType = true iapVC.privacyBlock = { @@ -501,7 +503,7 @@ extension MPPositive_HomeViewController: UITableViewDataSource, UITableViewDeleg [weak self] in guard let self = self else {return} guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } MP_AnalyticsManager.shared.song_clickAction("Home") diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_ListShowViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_ListShowViewController.swift index 7e74c0f..2f12308 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_ListShowViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_ListShowViewController.swift @@ -249,7 +249,7 @@ class MPPositive_ListShowViewController: MPPositive_BaseViewController, UIViewCo [weak self] in guard let self = self, let item = listOrAlbum.items.first else {return} guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } MP_AnalyticsManager.shared.song_clickAction("List") @@ -277,7 +277,7 @@ class MPPositive_ListShowViewController: MPPositive_BaseViewController, UIViewCo [weak self] in guard let self = self, let item = listOrAlbum.items.randomElement() else {return} guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } MP_AnalyticsManager.shared.song_clickAction("List") @@ -362,8 +362,8 @@ extension MPPositive_ListShowViewController: UITableViewDataSource, UITableViewD guard let videoId = self.listOrAlbum.items[indexPath.row].browseItem.videoId else {return} //确定删除 MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in - MP_HUD.progress("Loading...", delay: 0.5) { - MP_HUD.text("Removed", delay: 1.0, completion: nil) + MP_HUD.progress("Loading...".localizableString(), delay: 0.5) { + MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil) tableView.reloadData() } } @@ -375,14 +375,14 @@ extension MPPositive_ListShowViewController: UITableViewDataSource, UITableViewD [weak self] in guard let self = self else {return} //点击取消下载 - let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = self.listOrAlbum.items[indexPath.row].browseItem.videoId else {return} //确定取消 MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in - MP_HUD.text("Canceled", delay: 1.0, completion: nil) + MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil) tableView.reloadData() } } @@ -396,7 +396,7 @@ extension MPPositive_ListShowViewController: UITableViewDataSource, UITableViewD [weak self] in guard let self = self else {return} guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } MP_AnalyticsManager.shared.song_clickAction("List") diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_MoreContentViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_MoreContentViewController.swift index 403209b..40663f4 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_MoreContentViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_MoreContentViewController.swift @@ -139,7 +139,7 @@ extension MPPositive_MoreContentViewController: UICollectionViewDataSource, UICo [weak self] in guard let self = self else {return} guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } MP_AnalyticsManager.shared.song_clickAction("MoreContent") diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift index db93117..6f2fccc 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift @@ -199,14 +199,14 @@ class MPPositive_PlayerViewController: MPPositive_BaseViewController, UIViewCont [weak self] in guard let self = self else {return} //点击取消下载 - let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = MP_PlayerManager.shared.loadPlayer?.currentVideo?.song?.videoId else {return} //确定取消 MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in - MP_HUD.text("Canceled", delay: 1.0, completion: nil) + MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil) self.uploadUI() MP_PlayerManager.shared.loadPlayer?.currentVideo?.reloadCollectionAndDownLoad() } @@ -218,15 +218,15 @@ class MPPositive_PlayerViewController: MPPositive_BaseViewController, UIViewCont [weak self] in guard let self = self else {return} //点击删除下载 - let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Delete This Song".localizableString(), message: "Are you sure you want to delete the offline resources of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = MP_PlayerManager.shared.loadPlayer?.currentVideo?.song?.videoId else {return} //确定删除 MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in - MP_HUD.progress("Loading...", delay: 0.5) { - MP_HUD.text("Removed", delay: 1.0, completion: nil) + MP_HUD.progress("Loading...".localizableString(), delay: 0.5) { + MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil) self.uploadUI() MP_PlayerManager.shared.loadPlayer?.currentVideo?.reloadCollectionAndDownLoad() } @@ -560,7 +560,7 @@ class MPPositive_PlayerViewController: MPPositive_BaseViewController, UIViewCont //切换页面显示内容(单曲封面|歌词)按钮组 @objc private func switchActionClick(_ sender:UIButton) { guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } topShowType = .init(rawValue: sender.tag)! @@ -611,7 +611,7 @@ class MPPositive_PlayerViewController: MPPositive_BaseViewController, UIViewCont //弹出关联内容 @objc private func relatedContentClick(_ sender:UIButton) { guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } guard MP_PlayerManager.shared.loadPlayer?.currentVideo?.song.relatedID != nil else {return} diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_GrideMoodViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_GrideMoodViewController.swift index 1ce318f..e73ab4d 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_GrideMoodViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_GrideMoodViewController.swift @@ -144,7 +144,7 @@ extension MPPositive_GrideMoodViewController: UITableViewDataSource, UITableView [weak self] in guard let self = self else {return} guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } MP_AnalyticsManager.shared.song_clickAction("Mood") diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_SearchResultShowViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_SearchResultShowViewController.swift index 4c76a72..e32fee2 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_SearchResultShowViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_SearchResultShowViewController.swift @@ -16,7 +16,7 @@ class MPPositive_SearchResultShowViewController: MPPositive_BaseViewController, textField.font = .systemFont(ofSize: 14*width, weight: .regular) textField.textColor = .white //设置一个富文本占位符 - let attributedText = NSAttributedString(string: "Search songs,artists,playlists", attributes: [.font:UIFont.systemFont(ofSize: 14*width, weight: .regular), .foregroundColor:UIColor(hex: "#666666")]) + let attributedText = NSAttributedString(string: "Search songs,artists,playlists".localizableString(), attributes: [.font:UIFont.systemFont(ofSize: 14*width, weight: .regular), .foregroundColor:UIColor(hex: "#666666")]) textField.attributedPlaceholder = attributedText return textField }() diff --git a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_SearchViewController.swift b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_SearchViewController.swift index 339b28e..a4bca1e 100644 --- a/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_SearchViewController.swift +++ b/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Search(搜索页)/MPPositive_SearchViewController.swift @@ -83,10 +83,11 @@ class MPPositive_SearchViewController: MPPositive_BaseViewController { make.left.equalToSuperview().offset(16*width) make.centerY.equalToSuperview() } - let label = createLabel("Search songs,artists,playlists", font: .systemFont(ofSize: 14*width, weight: .regular), textColor: .init(hex: "#666666"), textAlignment: .left) + let label = createLabel("Search songs,artists,playlists".localizableString(), font: .systemFont(ofSize: 14*width, weight: .regular), textColor: .init(hex: "#666666"), textAlignment: .left) searchView.addSubview(label) label.snp.makeConstraints { make in make.left.equalTo(iconImageView.snp.right).offset(8*width) + make.right.equalToSuperview().offset(-16*width) make.centerY.equalToSuperview() } searchView.isUserInteractionEnabled = true diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Base/MPPositive_BottomShowView.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Base/MPPositive_BottomShowView.swift index ecdf46a..34ca07a 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Base/MPPositive_BottomShowView.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Base/MPPositive_BottomShowView.swift @@ -118,7 +118,7 @@ class MPPositive_BottomShowView: UIView { //展开当前音乐列表 @objc private func nextClick(_ sender:UIButton) { guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } guard MP_PlayerManager.shared.loadPlayer?.currentVideo != nil else { diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Center/MPPositive_CenterListSearchView.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Center/MPPositive_CenterListSearchView.swift index 25d50d6..e20cd9a 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Center/MPPositive_CenterListSearchView.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Center/MPPositive_CenterListSearchView.swift @@ -15,7 +15,7 @@ class MPPositive_CenterListSearchView: UIView, UITextFieldDelegate { textField.textColor = .init(hex: "#80F988") textField.tintColor = .init(hex: "#80F988") textField.font = .systemFont(ofSize: 12*width, weight: .regular) - let attributed = NSAttributedString(string: "Search songs in this list", attributes: [.font:UIFont.systemFont(ofSize: 12*width, weight: .regular), .foregroundColor:UIColor(hex: "#FFFFFF", alpha: 0.6)]) + let attributed = NSAttributedString(string: "Search", attributes: [.font:UIFont.systemFont(ofSize: 12*width, weight: .regular), .foregroundColor:UIColor(hex: "#FFFFFF", alpha: 0.6)]) textField.attributedPlaceholder = attributed return textField }() diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowSongTableViewCell.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowSongTableViewCell.swift index 46ffa62..0f1ebfc 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowSongTableViewCell.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowSongTableViewCell.swift @@ -205,7 +205,7 @@ class MPPositive_ArtistShowSongTableViewCell: UITableViewCell, PKDownloadButtonD //点击更多 @objc private func moreActionClick(_ sender:UIButton) { guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } guard moreBlock != nil else { diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowTypeView.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowTypeView.swift index 573b2ad..696da36 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowTypeView.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_ArtistShowTypeView.swift @@ -157,14 +157,14 @@ extension MPPositive_ArtistShowTypeView:UITableViewDataSource, UITableViewDelega [weak self] in if let itemView = self?.sectionList.itemViews[indexPath.row]{ //点击取消下载 - let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = itemView.browseItem.videoId else {return} //确定取消 MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in - MP_HUD.text("Canceled", delay: 1.0, completion: nil) + MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil) DispatchQueue.main.async { tableView.reloadData() } @@ -178,15 +178,15 @@ extension MPPositive_ArtistShowTypeView:UITableViewDataSource, UITableViewDelega [weak self] in if let itemView = self?.sectionList.itemViews[indexPath.row]{ //点击删除下载 - let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Delete This Song".localizableString(), message: "Are you sure you want to delete the offline resources of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = itemView.browseItem.videoId else {return} //确定删除 MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in - MP_HUD.progress("Loading...", delay: 0.5) { - MP_HUD.text("Removed", delay: 1.0, completion: nil) + MP_HUD.progress("Loading...".localizableString(), delay: 0.5) { + MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil) DispatchQueue.main.async { tableView.reloadData() } @@ -274,7 +274,7 @@ extension MPPositive_ArtistShowTypeView:UITableViewDataSource, UITableViewDelega [weak self] in guard let self = self else {return} guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } MP_AnalyticsManager.shared.song_clickAction("Artist") diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeLibraryListstableViewCell.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeLibraryListstableViewCell.swift index 60e44c8..ee04473 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeLibraryListstableViewCell.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeLibraryListstableViewCell.swift @@ -9,7 +9,7 @@ import UIKit ///首页曲库内容展示Cell class MPPositive_HomeLibraryListstableViewCell: UITableViewCell { //标题Label - private lazy var titleLabel:UILabel = createLabel("Library", font: .systemFont(ofSize: 18*width, weight: .regular), textColor: .white, textAlignment: .left) + private lazy var titleLabel:UILabel = createLabel(NSLocalizedString("Library", comment: "曲库"), font: .systemFont(ofSize: 18*width, weight: .regular), textColor: .white, textAlignment: .left) private lazy var layout:UICollectionViewFlowLayout = { let layout = UICollectionViewFlowLayout() layout.itemSize = .init(width: 109*width, height: 135*width) diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSingleCollectionViewCell.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSingleCollectionViewCell.swift index c3898cf..7d91971 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSingleCollectionViewCell.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSingleCollectionViewCell.swift @@ -145,7 +145,7 @@ class MPPositive_HomeSingleCollectionViewCell: UICollectionViewCell, PKDownloadB //点击更多 @objc private func moreActionClick(_ sender:UIButton) { guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } guard moreBlock != nil else { @@ -213,7 +213,7 @@ class MPPositive_HomeSingleCollectionViewCell: UICollectionViewCell, PKDownloadB case .startDownload://开始状态,点击后进入下载状态 //检索当前网络状态 guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } //检索当前歌曲是否下载过 diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSinglesTableViewCell.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSinglesTableViewCell.swift index 22a6728..314f730 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSinglesTableViewCell.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_HomeSinglesTableViewCell.swift @@ -116,15 +116,15 @@ extension MPPositive_HomeSinglesTableViewCell:UICollectionViewDataSource, UIColl [weak self] in guard let self = self else {return} //点击删除下载 - let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Delete This Song".localizableString(), message: "Are you sure you want to delete the offline resources of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = self.browseViewModel?.items[indexPath.row].browseItem.videoId else {return} //确定删除 MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in - MP_HUD.progress("Loading...", delay: 0.5) { - MP_HUD.text("Removed", delay: 1.0, completion: nil) + MP_HUD.progress("Loading...".localizableString(), delay: 0.5) { + MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil) collectionView.reloadData() } } @@ -136,14 +136,14 @@ extension MPPositive_HomeSinglesTableViewCell:UICollectionViewDataSource, UIColl [weak self] in guard let self = self else {return} //点击取消下载 - let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = self.browseViewModel?.items[indexPath.row].browseItem.videoId else {return} //确定取消 MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in - MP_HUD.text("Canceled", delay: 1.0, completion: nil) + MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil) collectionView.reloadData() } } @@ -158,7 +158,7 @@ extension MPPositive_HomeSinglesTableViewCell:UICollectionViewDataSource, UIColl [weak self] in guard let self = self else {return} guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } let item = self.browseViewModel.items[indexPath.row] diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_MusicItemShowTableViewCell.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_MusicItemShowTableViewCell.swift index d8bde46..0e8df2c 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_MusicItemShowTableViewCell.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Home/MPPositive_MusicItemShowTableViewCell.swift @@ -230,7 +230,7 @@ class MPPositive_MusicItemShowTableViewCell: UITableViewCell, PKDownloadButtonDe //点击更多 @objc private func moreActionClick(_ sender:UIButton) { guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } guard moreBlock != nil else { @@ -246,7 +246,7 @@ class MPPositive_MusicItemShowTableViewCell: UITableViewCell, PKDownloadButtonDe case .startDownload://开始状态,点击后进入下载状态 //检索当前网络状态 guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } //检索当前歌曲是否下载过 diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Player/MPPositive_PlayerCoverView.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Player/MPPositive_PlayerCoverView.swift index 2534171..08be1f9 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Player/MPPositive_PlayerCoverView.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Player/MPPositive_PlayerCoverView.swift @@ -270,7 +270,7 @@ class MPPositive_PlayerCoverView: UIView, PKDownloadButtonDelegate { @objc private func collectionSwitchClick(_ sender:UIButton) { guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } if self.collectionSongBtn.isSelected == true{ @@ -313,7 +313,7 @@ class MPPositive_PlayerCoverView: UIView, PKDownloadButtonDelegate { return } guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } MP_AdMobManager.shared.showLoadInterstitialAdIfAvailable(completion: nil) @@ -321,7 +321,7 @@ class MPPositive_PlayerCoverView: UIView, PKDownloadButtonDelegate { downloadButton.state = .pending //当开始下载时 guard let currentVideo = MP_PlayerManager.shared.loadPlayer?.currentVideo else { - MP_HUD.text("An error occurred while downloading. Please download again.", delay: 1.0) { + MP_HUD.text("An error occurred while downloading. Please download again.".localizableString(), delay: 1.0) { downloadButton.state = .startDownload } return diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Player/MPPositive_RecommendShowTypeView.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Player/MPPositive_RecommendShowTypeView.swift index aa31d39..f5659dd 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Player/MPPositive_RecommendShowTypeView.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Player/MPPositive_RecommendShowTypeView.swift @@ -135,14 +135,14 @@ extension MPPositive_RecommendShowTypeView:UITableViewDataSource, UITableViewDel [weak self] in if let itemView = self?.sectionList.items[indexPath.row]{ //点击取消下载 - let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = itemView.browseItem.videoId else {return} //确定取消 MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in - MP_HUD.text("Canceled", delay: 1.0, completion: nil) + MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil) DispatchQueue.main.async { tableView.reloadData() } @@ -156,15 +156,15 @@ extension MPPositive_RecommendShowTypeView:UITableViewDataSource, UITableViewDel [weak self] in if let itemView = self?.sectionList.items[indexPath.row]{ //点击删除下载 - let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Delete This Song".localizableString(), message: "Are you sure you want to delete the offline resources of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = itemView.browseItem.videoId else {return} //确定删除 MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in - MP_HUD.progress("Loading...", delay: 0.5) { - MP_HUD.text("Removed", delay: 1.0, completion: nil) + MP_HUD.progress("Loading...".localizableString(), delay: 0.5) { + MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil) DispatchQueue.main.async { tableView.reloadData() } diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultPreviewShowView.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultPreviewShowView.swift index 5bad970..aa72a6e 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultPreviewShowView.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultPreviewShowView.swift @@ -94,7 +94,7 @@ class MPPositive_SearchResultPreviewShowView: MPPositive_BaseShowView, JXSegment [weak self] in guard let self = self else {return} guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } MP_AnalyticsManager.shared.song_clickAction("Search") @@ -159,14 +159,14 @@ extension MPPositive_SearchResultPreviewShowView:UITableViewDataSource, UITableV [weak self] in if let itemView = self?.sectionLists[indexPath.section].previewItemViews[indexPath.row]{ //点击取消下载 - let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert) + let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert) let cancel = UIAlertAction(title: "Cancel", style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = itemView.item.videoId else {return} //确定取消 MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in - MP_HUD.text("Canceled", delay: 1.0, completion: nil) + MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil) DispatchQueue.main.async { tableView.reloadData() } @@ -180,15 +180,15 @@ extension MPPositive_SearchResultPreviewShowView:UITableViewDataSource, UITableV [weak self] in if let itemView = self?.sectionLists[indexPath.section].previewItemViews[indexPath.row]{ //点击删除下载 - let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Delete This Song".localizableString(), message: "Are you sure you want to delete the offline resources of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = itemView.item.videoId else {return} //确定删除 MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in - MP_HUD.progress("Loading...", delay: 0.5) { - MP_HUD.text("Removed", delay: 1.0, completion: nil) + MP_HUD.progress("Loading...".localizableString(), delay: 0.5) { + MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil) DispatchQueue.main.async { tableView.reloadData() } diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultShowTableViewCell.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultShowTableViewCell.swift index e20cf46..df56ecc 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultShowTableViewCell.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultShowTableViewCell.swift @@ -258,7 +258,7 @@ class MPPositive_SearchResultShowTableViewCell: UITableViewCell, PKDownloadButto //点击更多 @objc private func moreActionClick(_ sender:UIButton) { guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } if moreBlock != nil { @@ -273,7 +273,7 @@ class MPPositive_SearchResultShowTableViewCell: UITableViewCell, PKDownloadButto case .startDownload://开始状态,点击后进入下载状态 //检索当前网络状态 guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } var videoId:String? diff --git a/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultTypeShowView.swift b/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultTypeShowView.swift index d60bc11..35e91e7 100644 --- a/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultTypeShowView.swift +++ b/relax.offline.mp3.music/MP/MPPositive/Views/Search/MPPositive_SearchResultTypeShowView.swift @@ -119,7 +119,7 @@ class MPPositive_SearchResultTypeShowView: MPPositive_BaseShowView, JXSegmentedL [weak self] in guard let self = self else {return} guard MP_NetWorkManager.shared.netWorkStatu == .reachable else { - MP_HUD.text("Weak connection.", delay: 2.0, completion: nil) + MP_HUD.text("Bad connection~".localizableString(), delay: 2.0, completion: nil) return } MP_AnalyticsManager.shared.song_clickAction("Search") @@ -182,14 +182,14 @@ extension MPPositive_SearchResultTypeShowView:UITableViewDataSource, UITableView [weak self] in if let itemView = self?.sectionList?.allItemViews[indexPath.row]{ //点击取消下载 - let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Cancel Song Download Task".localizableString(), message: "Are you sure you want to cancel the download task of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = itemView.item.videoId else {return} //确定取消 MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in - MP_HUD.text("Canceled", delay: 1.0, completion: nil) + MP_HUD.text("Cancel".localizableString(), delay: 1.0, completion: nil) DispatchQueue.main.async { tableView.reloadData() } @@ -203,15 +203,15 @@ extension MPPositive_SearchResultTypeShowView:UITableViewDataSource, UITableView [weak self] in if let itemView = self?.sectionList?.allItemViews[indexPath.row]{ //点击删除下载 - let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Delete This Song".localizableString(), message: "Are you sure you want to delete the offline resources of this song?".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) {(action) in guard let videoId = itemView.item.videoId else {return} //确定删除 MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in - MP_HUD.progress("Loading...", delay: 0.5) { - MP_HUD.text("Removed", delay: 1.0, completion: nil) + MP_HUD.progress("Loading...".localizableString(), delay: 0.5) { + MP_HUD.text("Removed".localizableString(), delay: 1.0, completion: nil) DispatchQueue.main.async { tableView.reloadData() } diff --git a/relax.offline.mp3.music/MP/MPSideA/Models/ViewModels/MPSideA_MusicViewModel.swift b/relax.offline.mp3.music/MP/MPSideA/Models/ViewModels/MPSideA_MusicViewModel.swift index 828b156..f970b28 100644 --- a/relax.offline.mp3.music/MP/MPSideA/Models/ViewModels/MPSideA_MusicViewModel.swift +++ b/relax.offline.mp3.music/MP/MPSideA/Models/ViewModels/MPSideA_MusicViewModel.swift @@ -15,11 +15,11 @@ enum MPSideA_MusicShowType:Int { var title:String{ switch self { case .First: - return "Real human voice" + return NSLocalizedString("Real human voice", comment: "人声") case .Second: - return "Sounds of appliances" + return NSLocalizedString("Sounds of appliances", comment: "电器声") case .Third: - return "Sounds of nature" + return NSLocalizedString("Sounds of nature", comment: "自然声") } } } diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Add(新增资源)/MPSideA_AddViewController.swift b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Add(新增资源)/MPSideA_AddViewController.swift index ab32512..138af53 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Add(新增资源)/MPSideA_AddViewController.swift +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Add(新增资源)/MPSideA_AddViewController.swift @@ -9,7 +9,17 @@ import UIKit import AVFoundation import Photos class MPSideA_AddViewController: UIViewController { - + @IBOutlet weak var firstBtn: UIButton!{ + didSet{ + firstBtn.setTitle("Pick from photo Library".localizableString(), for: .normal) + } + } + @IBOutlet weak var secondBtn: UIButton!{ + didSet{ + secondBtn.setTitle("Pick from files".localizableString(), for: .normal) + } + } + override func viewDidLoad() { super.viewDidLoad() //设置圆角 diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Add(新增资源)/MPSideA_AddViewController.xib b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Add(新增资源)/MPSideA_AddViewController.xib index c385636..9f78c04 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Add(新增资源)/MPSideA_AddViewController.xib +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Add(新增资源)/MPSideA_AddViewController.xib @@ -8,8 +8,10 @@ - + + + diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_AboutViewController.swift b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_AboutViewController.swift index 42a0003..d9549b4 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_AboutViewController.swift +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_AboutViewController.swift @@ -16,13 +16,23 @@ class MPSideA_AboutViewController: MPSideA_BaseViewController { } } @IBOutlet weak var versionLabel: UILabel! + @IBOutlet weak var aboutLabel: UILabel!{ + didSet{ + aboutLabel.text = NSLocalizedString("About", comment: "关于") + } + } + @IBOutlet weak var currentLabel: UILabel!{ + didSet{ + currentLabel.text = NSLocalizedString("Current Version", comment: "当前版本") + } + } override func viewDidLoad() { super.viewDidLoad() - versionLabel.text = "Version \(app_Version)" + versionLabel.text = "\(NSLocalizedString("Version", comment: "版本号")) \(app_Version)" } @objc private func versionClick(){ - let eventAlert = UIAlertController(title: "Version Update", message: "is the latest Version", preferredStyle: .alert) - let canelAction = UIAlertAction(title: "Cancel", style: .cancel,handler: nil) + let eventAlert = UIAlertController(title: NSLocalizedString("Version Update", comment: ""), message: NSLocalizedString("is the latest Version", comment: ""), preferredStyle: .alert) + let canelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel,handler: nil) eventAlert.addAction(canelAction) self.present(eventAlert, animated: true, completion: nil) } diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_AboutViewController.xib b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_AboutViewController.xib index d09b65d..12ed7d6 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_AboutViewController.xib +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_AboutViewController.xib @@ -10,6 +10,8 @@ + + diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_CenterViewController.swift b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_CenterViewController.swift index 3170ffa..6afaa8a 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_CenterViewController.swift +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_CenterViewController.swift @@ -9,6 +9,11 @@ import UIKit ///个人中心 class MPSideA_CenterViewController: MPSideA_BaseViewController { @IBOutlet weak var setBtn: UIButton! + @IBOutlet weak var libraryLabel: UILabel!{ + didSet{ + libraryLabel.text = NSLocalizedString("Library", comment: "曲库") + } + } private lazy var tableView:UITableView = { let tableView = UITableView(frame: .init(x: 0, y: 0, width: screen_Width, height: screen_Height), style: .plain) diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_CenterViewController.xib b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_CenterViewController.xib index ecd909a..6c12fe8 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_CenterViewController.xib +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_CenterViewController.xib @@ -11,6 +11,7 @@ + diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_DeleteViewController.swift b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_DeleteViewController.swift index c42e396..c0ae913 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_DeleteViewController.swift +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_DeleteViewController.swift @@ -8,6 +8,26 @@ import UIKit class MPSideA_DeleteViewController: UIViewController { + @IBOutlet weak var titleLabel: UILabel!{ + didSet{ + titleLabel.text = titleLabel.text?.localizableString() + } + } + @IBOutlet weak var subtitleLabel: UILabel!{ + didSet{ + subtitleLabel.text = subtitleLabel.text?.localizableString() + } + } + @IBOutlet weak var cancelBtn: UIButton!{ + didSet{ + cancelBtn.setTitle("Cancel".localizableString(), for: .normal) + } + } + @IBOutlet weak var deleteBtn: UIButton!{ + didSet{ + deleteBtn.setTitle("Delete".localizableString(), for: .normal) + } + } var deleteBlock:ActionBlock? override func viewDidLoad() { super.viewDidLoad() diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_DeleteViewController.xib b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_DeleteViewController.xib index b356013..458d898 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_DeleteViewController.xib +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_DeleteViewController.xib @@ -9,8 +9,12 @@ - + + + + + diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_MoreViewController.swift b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_MoreViewController.swift index 5eb3deb..37c6db4 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_MoreViewController.swift +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_MoreViewController.swift @@ -8,6 +8,16 @@ import UIKit ///更多操作 class MPSideA_MoreViewController: UIViewController { + @IBOutlet weak var renameBtn: UIButton!{ + didSet{ + renameBtn.setTitle("Rename".localizableString(), for: .normal) + } + } + @IBOutlet weak var deleteBtn: UIButton!{ + didSet{ + deleteBtn.setTitle("Delete".localizableString(), for: .normal) + } + } var renameBlock:ActionBlock? var deleteBlock:ActionBlock? override func viewDidLoad() { diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_MoreViewController.xib b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_MoreViewController.xib index d9566dc..fd20173 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_MoreViewController.xib +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_MoreViewController.xib @@ -8,8 +8,10 @@ - + + + diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_RenameViewController.swift b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_RenameViewController.swift index 1b601b2..2575085 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_RenameViewController.swift +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_RenameViewController.swift @@ -11,12 +11,27 @@ class MPSideA_RenameViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var textField: UITextField!{ didSet{ - textField.attributedPlaceholder = NSAttributedString(string: "Placeholder", attributes: [NSAttributedString.Key.foregroundColor:UIColor.init(hex: "#999999"), NSAttributedString.Key.font : UIFont.systemFont(ofSize: 13, weight: .regular)]) + textField.attributedPlaceholder = NSAttributedString(string: "XXXXXX", attributes: [NSAttributedString.Key.foregroundColor:UIColor.init(hex: "#999999"), NSAttributedString.Key.font : UIFont.systemFont(ofSize: 13, weight: .regular)]) textField.delegate = self } } + @IBOutlet weak var maxLabel: UILabel!{ + didSet{ + maxLabel.text = "60 characters".localizableString() + } + } + @IBOutlet weak var cancelBtn: UIButton!{ + didSet{ + cancelBtn.setTitle("Cancel".localizableString(), for: .normal) + } + } + @IBOutlet weak var confirmBtn: UIButton!{ + didSet{ + confirmBtn.setTitle("Confirm".localizableString(), for: .normal) + } + } var renameBlock:((String) -> Void)? - var titleText:String = "Name Your Voice" + var titleText:String = "Name Your Voice".localizableString() var contentText:String = "" override func viewDidLoad() { super.viewDidLoad() diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_RenameViewController.xib b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_RenameViewController.xib index ad8d8ae..3fa1f71 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_RenameViewController.xib +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_RenameViewController.xib @@ -10,6 +10,9 @@ + + + diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_SettingViewController.swift b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_SettingViewController.swift index e4b067b..e13ffa4 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_SettingViewController.swift +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_SettingViewController.swift @@ -19,6 +19,11 @@ class MPSideA_SettingViewController: MPSideA_BaseViewController { tableView.register(UINib(nibName: SettingTableViewCellID, bundle: nil), forCellReuseIdentifier: SettingTableViewCellID) } } + @IBOutlet weak var setLabel: UILabel!{ + didSet{ + setLabel.text = NSLocalizedString("Setting", comment: "设置页") + } + } private let SettingTableViewCellID = "MPSideA_SettingTableViewCell" private lazy var titles:[String] = ["About","Feedback","Share","Privacy Policy","Terms of Use","Clear Cache"] var cleanSide:Bool = false @@ -57,14 +62,14 @@ extension MPSideA_SettingViewController: UITableViewDataSource, UITableViewDeleg let aboutVC = MPSideA_AboutViewController() navigationController?.pushViewController(aboutVC, animated: true) case 1://Feedback - let alert = UIAlertController(title: "Feedback", message: "If you have any comments or suggestions, please contact us at the following e-mail address", preferredStyle: .actionSheet) + let alert = UIAlertController(title: NSLocalizedString("Feedback".localizableString(), comment: ""), message: NSLocalizedString("If you have any comments or suggestions, please contact us at the following e-mail address".localizableString(), comment: ""), preferredStyle: .actionSheet) let email = UIAlertAction(title: "marketing@lux-ad.com", style: .default) { (_) in //将邮箱复制到剪切板中 UIPasteboard.general.string = "marketing@lux-ad.com" - MP_HUD.text("Successfully copied the e-mail address to the clipboard", delay: 1.0, completion: nil) + MP_HUD.text(NSLocalizedString("Successfully copied the e-mail address to the clipboard".localizableString(), comment: ""), delay: 1.0, completion: nil) } alert.addAction(email) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let cancel = UIAlertAction(title: NSLocalizedString("Cancel".localizableString(), comment: ""), style: .cancel) alert.addAction(cancel) present(alert, animated: true) case 2://Share @@ -97,20 +102,20 @@ extension MPSideA_SettingViewController: UITableViewDataSource, UITableViewDeleg default://清除缓存 if cleanSide { //清除B面缓存数据 - let alertController = UIAlertController(title: "Clear Cache", message: "Clearing the cache can help free up storage space and resolve possible playback issues. Are you sure you want to do this?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Clear Cache".localizableString(), message: "Clearing B".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) { [weak self] (action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) { [weak self] (action) in MP_HUD.loading() MP_CacheAndArchiverManager.shared.cleanAllCache { statu in if statu { //清除成功 MP_HUD.hideNow() - MP_HUD.success("Successfully", delay: 1.0, completion: nil) + MP_HUD.success("Success".localizableString(), delay: 1.0, completion: nil) }else { //清除失败 MP_HUD.hideNow() - MP_HUD.error("Failed", delay: 1.0, completion: nil) + MP_HUD.error("Failure".localizableString(), delay: 1.0, completion: nil) } tableView.reloadData() } @@ -119,10 +124,10 @@ extension MPSideA_SettingViewController: UITableViewDataSource, UITableViewDeleg present(alertController, animated: true) }else { //清除A面缓存数据 - let alertController = UIAlertController(title: "Clear Cache", message: "Clicking “Sure” will clear your uploaded media assets. Are you sure you want to do this?", preferredStyle: .alert) - let cancel = UIAlertAction(title: "Cancel", style: .cancel) + let alertController = UIAlertController(title: "Clear Cache".localizableString(), message: "Clearing A".localizableString(), preferredStyle: .alert) + let cancel = UIAlertAction(title: "Cancel".localizableString(), style: .cancel) alertController.addAction(cancel) - let sure = UIAlertAction(title: "Sure", style: .destructive) { [weak self] (action) in + let sure = UIAlertAction(title: "Confirm".localizableString(), style: .destructive) { [weak self] (action) in MP_HUD.loading() MPSideA_LoadDataMusic.shared.userlistMusics.forEach { music in //判断是否是当前播放音乐 @@ -136,7 +141,7 @@ extension MPSideA_SettingViewController: UITableViewDataSource, UITableViewDeleg MPSideA_MusicModel.delete(music.music) } MP_HUD.hideNow() - MP_HUD.success("Successfully", delay: 1.0, completion: nil) + MP_HUD.success("Success".localizableString(), delay: 1.0, completion: nil) tableView.reloadData() } alertController.addAction(sure) diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_SettingViewController.xib b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_SettingViewController.xib index 451908a..1b7d880 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_SettingViewController.xib +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Center(个人资源)/MPSideA_SettingViewController.xib @@ -8,8 +8,9 @@ - + + diff --git a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Home(音乐资源列表)/MPSideA_HomeViewController.swift b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Home(音乐资源列表)/MPSideA_HomeViewController.swift index 505f013..697e69c 100644 --- a/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Home(音乐资源列表)/MPSideA_HomeViewController.swift +++ b/relax.offline.mp3.music/MP/MPSideA/ViewControllers/Home(音乐资源列表)/MPSideA_HomeViewController.swift @@ -78,6 +78,7 @@ class MPSideA_HomeViewController: MPSideA_BaseViewController { } @IBAction func vipClick(_ sender: UIButton) { view.endEditing(true) + MP_AnalyticsManager.shared.VIP_clickAction() let iapVC = MP_IAPViewController() iapVC.isType = false iapVC.privacyBlock = { diff --git a/relax.offline.mp3.music/MP/MPSideA/Views/Center(个人资源)/MPSideA_SettingTableViewCell.swift b/relax.offline.mp3.music/MP/MPSideA/Views/Center(个人资源)/MPSideA_SettingTableViewCell.swift index 8f23fca..27d97e7 100644 --- a/relax.offline.mp3.music/MP/MPSideA/Views/Center(个人资源)/MPSideA_SettingTableViewCell.swift +++ b/relax.offline.mp3.music/MP/MPSideA/Views/Center(个人资源)/MPSideA_SettingTableViewCell.swift @@ -15,7 +15,7 @@ class MPSideA_SettingTableViewCell: UITableViewCell { var title:String!{ didSet{ iconImageView.image = UIImage(named: title) - titleLabel.text = title + titleLabel.text = NSLocalizedString(title, comment: "") nextImageView.isHidden = (title == "Clear Cache") sizeLabel.text = MP_CacheAndArchiverManager.shared.getCacheSizeText() } diff --git a/relax.offline.mp3.music/ar.lproj/LaunchScreen.strings b/relax.offline.mp3.music/ar.lproj/LaunchScreen.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/ar.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/ar.lproj/Main.strings b/relax.offline.mp3.music/ar.lproj/Main.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/ar.lproj/Main.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/de.lproj/LaunchScreen.strings b/relax.offline.mp3.music/de.lproj/LaunchScreen.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/de.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/de.lproj/Main.strings b/relax.offline.mp3.music/de.lproj/Main.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/de.lproj/Main.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/es-419.lproj/LaunchScreen.strings b/relax.offline.mp3.music/es-419.lproj/LaunchScreen.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/es-419.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/es-419.lproj/Main.strings b/relax.offline.mp3.music/es-419.lproj/Main.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/es-419.lproj/Main.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/fr.lproj/LaunchScreen.strings b/relax.offline.mp3.music/fr.lproj/LaunchScreen.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/fr.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/fr.lproj/Main.strings b/relax.offline.mp3.music/fr.lproj/Main.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/fr.lproj/Main.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/it.lproj/LaunchScreen.strings b/relax.offline.mp3.music/it.lproj/LaunchScreen.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/it.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/it.lproj/Main.strings b/relax.offline.mp3.music/it.lproj/Main.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/it.lproj/Main.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/pt-BR.lproj/LaunchScreen.strings b/relax.offline.mp3.music/pt-BR.lproj/LaunchScreen.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/pt-BR.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/pt-BR.lproj/Main.strings b/relax.offline.mp3.music/pt-BR.lproj/Main.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/pt-BR.lproj/Main.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/tr.lproj/LaunchScreen.strings b/relax.offline.mp3.music/tr.lproj/LaunchScreen.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/tr.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/relax.offline.mp3.music/tr.lproj/Main.strings b/relax.offline.mp3.music/tr.lproj/Main.strings new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/relax.offline.mp3.music/tr.lproj/Main.strings @@ -0,0 +1 @@ +