diff --git a/LyricsX.xcodeproj/project.pbxproj b/LyricsX.xcodeproj/project.pbxproj index 910148f3..8ca1c7fe 100644 --- a/LyricsX.xcodeproj/project.pbxproj +++ b/LyricsX.xcodeproj/project.pbxproj @@ -45,7 +45,7 @@ BB4141C01E45B67800A51775 /* KaraokeLyricsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4141BF1E45B67800A51775 /* KaraokeLyricsController.swift */; }; BB4141C81E46CDD700A51775 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB4141C61E46CDD200A51775 /* SnapKit.framework */; }; BB4141C91E46CDD700A51775 /* SnapKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BB4141C61E46CDD200A51775 /* SnapKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BB458C63201C5F4500740C3B /* LyricsMetaData+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB458C62201C5F4500740C3B /* LyricsMetaData+Extension.swift */; }; + BB458C63201C5F4500740C3B /* LyricsMetadata+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB458C62201C5F4500740C3B /* LyricsMetadata+Extension.swift */; }; BB4919361F00CD800054EA09 /* PreferenceShortcutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4919351F00CD800054EA09 /* PreferenceShortcutViewController.swift */; }; BB50786422014C3900B695C3 /* KaraokeLyricsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4141BF1E45B67800A51775 /* KaraokeLyricsController.swift */; }; BB50786522014C3900B695C3 /* Polyfill.swift in Sources */ = {isa = PBXBuildFile; fileRef = E97593E32150F47800D80616 /* Polyfill.swift */; }; @@ -62,7 +62,7 @@ BB50787022014C3900B695C3 /* TouchBarLyricsItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5863F221EFFD9F0084D2C0 /* TouchBarLyricsItem.swift */; }; BB50787222014C3900B695C3 /* CFExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1B2FFC20E8780A002F1AF8 /* CFExtension.swift */; }; BB50787322014C3900B695C3 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4141AD1E458BA800A51775 /* AppDelegate.swift */; }; - BB50787422014C3900B695C3 /* LyricsMetaData+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB458C62201C5F4500740C3B /* LyricsMetaData+Extension.swift */; }; + BB50787422014C3900B695C3 /* LyricsMetadata+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB458C62201C5F4500740C3B /* LyricsMetadata+Extension.swift */; }; BB50787622014C3900B695C3 /* PreferenceGeneralViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC7C5541E6AE28600E3EC4F /* PreferenceGeneralViewController.swift */; }; BB50787722014C3900B695C3 /* Then.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE8FC741F6BEA6200122AFA /* Then.swift */; }; BB50787822014C3900B695C3 /* Updater.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB34F7E51F21911700B7C484 /* Updater.swift */; }; @@ -228,7 +228,7 @@ BB4141B61E458BA900A51775 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; BB4141BF1E45B67800A51775 /* KaraokeLyricsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KaraokeLyricsController.swift; sourceTree = ""; }; BB4141C61E46CDD200A51775 /* SnapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SnapKit.framework; path = Carthage/Build/Mac/SnapKit.framework; sourceTree = ""; }; - BB458C62201C5F4500740C3B /* LyricsMetaData+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LyricsMetaData+Extension.swift"; sourceTree = ""; }; + BB458C62201C5F4500740C3B /* LyricsMetadata+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LyricsMetadata+Extension.swift"; sourceTree = ""; }; BB4919351F00CD800054EA09 /* PreferenceShortcutViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferenceShortcutViewController.swift; sourceTree = ""; }; BB5078AD22014C3900B695C3 /* LyricsX.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LyricsX.app; sourceTree = BUILT_PRODUCTS_DIR; }; BB5863F221EFFD9F0084D2C0 /* TouchBarLyricsItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TouchBarLyricsItem.swift; sourceTree = ""; }; @@ -518,7 +518,7 @@ BB947DFA23B4C60000C43BF2 /* SelectedPlayer.swift */, BB34F7E51F21911700B7C484 /* Updater.swift */, BB03C8881FDF6FC000FBE0DA /* ChineseConverter+Singleton.swift */, - BB458C62201C5F4500740C3B /* LyricsMetaData+Extension.swift */, + BB458C62201C5F4500740C3B /* LyricsMetadata+Extension.swift */, BB89089D21ED69410078F522 /* Lyrics+Language.swift */, BB5863F221EFFD9F0084D2C0 /* TouchBarLyricsItem.swift */, BB58640621F2B7500084D2C0 /* TouchBarArtworkViewController.swift */, @@ -922,7 +922,7 @@ BB5863F321EFFD9F0084D2C0 /* TouchBarLyricsItem.swift in Sources */, BB1B2FFD20E8780A002F1AF8 /* CFExtension.swift in Sources */, BB4141AE1E458BA800A51775 /* AppDelegate.swift in Sources */, - BB458C63201C5F4500740C3B /* LyricsMetaData+Extension.swift in Sources */, + BB458C63201C5F4500740C3B /* LyricsMetadata+Extension.swift in Sources */, BBC7C5551E6AE28600E3EC4F /* PreferenceGeneralViewController.swift in Sources */, BBE8FC751F6BEA6200122AFA /* Then.swift in Sources */, BB34F7E61F21911700B7C484 /* Updater.swift in Sources */, @@ -967,7 +967,7 @@ BB50787022014C3900B695C3 /* TouchBarLyricsItem.swift in Sources */, BB50787222014C3900B695C3 /* CFExtension.swift in Sources */, BB50787322014C3900B695C3 /* AppDelegate.swift in Sources */, - BB50787422014C3900B695C3 /* LyricsMetaData+Extension.swift in Sources */, + BB50787422014C3900B695C3 /* LyricsMetadata+Extension.swift in Sources */, BB50787622014C3900B695C3 /* PreferenceGeneralViewController.swift in Sources */, BB50787722014C3900B695C3 /* Then.swift in Sources */, BB50787822014C3900B695C3 /* Updater.swift in Sources */, @@ -1432,7 +1432,7 @@ repositoryURL = "https://github.com/cx-org/CombineX"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.3.0; + minimumVersion = 0.4.0; }; }; BB22681A234C9085008FAFED /* XCRemoteSwiftPackageReference "SwiftCF" */ = { @@ -1448,7 +1448,7 @@ repositoryURL = "https://github.com/cx-org/CXExtensions"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.3.0; + minimumVersion = 0.4.0; }; }; BB6C75E6248B908500804AEB /* XCRemoteSwiftPackageReference "TouchBarHelper" */ = { @@ -1464,7 +1464,7 @@ repositoryURL = "https://github.com/ddddxxx/MusicPlayer"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.7.3; + minimumVersion = 0.8.2; }; }; BBA82EF9256AB1490076831F /* XCRemoteSwiftPackageReference "appcenter-sdk-apple" */ = { @@ -1488,7 +1488,7 @@ repositoryURL = "https://github.com/ddddxxx/GenericID"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.6.0; + minimumVersion = 0.7.0; }; }; BBB03F2E232FB40400A3879E /* XCRemoteSwiftPackageReference "Semver" */ = { @@ -1512,7 +1512,7 @@ repositoryURL = "https://github.com/ddddxxx/LyricsKit"; requirement = { kind = upToNextMinorVersion; - minimumVersion = 0.10.0; + minimumVersion = 0.11.0; }; }; /* End XCRemoteSwiftPackageReference section */ diff --git a/LyricsX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/LyricsX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index e3081a92..165588b8 100644 --- a/LyricsX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/LyricsX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -15,8 +15,8 @@ "repositoryURL": "https://github.com/cx-org/CombineX", "state": { "branch": null, - "revision": "b9afefe14653f02a80a9f5aa546859e99073d0c8", - "version": "0.3.1" + "revision": "98096c6b2a51481cb6e4bae8da0a808d8cab09a1", + "version": "0.4.0" } }, { @@ -24,8 +24,26 @@ "repositoryURL": "https://github.com/cx-org/CXExtensions", "state": { "branch": null, - "revision": "6843af94bfaedfe90df1435c1a6c83cc3366a62b", - "version": "0.3.0" + "revision": "4790ecd6a6c0e796d776a28a820b552f7e8f6abd", + "version": "0.4.0" + } + }, + { + "package": "CXShim", + "repositoryURL": "https://github.com/cx-org/CXShim", + "state": { + "branch": null, + "revision": "82fecc246c7ca9f0ac1656b8199b7956e64d68f3", + "version": "0.4.0" + } + }, + { + "package": "CXTest", + "repositoryURL": "https://github.com/cx-org/CXTest", + "state": { + "branch": null, + "revision": "929ce7cbd3005bc9356ae826bb65ee2611379b17", + "version": "0.4.0" } }, { @@ -33,8 +51,8 @@ "repositoryURL": "https://github.com/ddddxxx/GenericID", "state": { "branch": null, - "revision": "31594c0f73306bb338316d7beec505e9b8b40dc1", - "version": "0.6.0" + "revision": "c6da97cd19899174cde6a14c7a46c794cd5d9cf8", + "version": "0.7.0" } }, { @@ -51,8 +69,8 @@ "repositoryURL": "https://github.com/ddddxxx/LyricsKit", "state": { "branch": null, - "revision": "1f8a3b3f40ff8b040d18fc8b402561bb3effed6c", - "version": "0.10.0" + "revision": "5506ee497ca689ed1686655ebb11e8ee29cc24cb", + "version": "0.11.0" } }, { @@ -60,8 +78,8 @@ "repositoryURL": "https://github.com/ddddxxx/MusicPlayer", "state": { "branch": null, - "revision": "34d5e23c5e1b4932124c83dd58d2be590fcf2b9f", - "version": "0.7.3" + "revision": "50904bac7aec79c5842f2ec3d1a1d858496dd6fe", + "version": "0.8.2" } }, { @@ -78,8 +96,8 @@ "repositoryURL": "https://github.com/ddddxxx/Regex", "state": { "branch": null, - "revision": "df530c4955725c04190a88e09b9756ae5b0b8e95", - "version": "1.0.0" + "revision": "c0ad0a7e9a48989d9688c2b524a1e69b6293b733", + "version": "1.0.1" } }, { @@ -100,6 +118,15 @@ "version": "1.26.0" } }, + { + "package": "swift-atomics", + "repositoryURL": "https://github.com/apple/swift-atomics.git", + "state": { + "branch": null, + "revision": "3e95ba32cd1b4c877f6163e8eea54afc4e63bf9f", + "version": "0.0.3" + } + }, { "package": "SwiftCF", "repositoryURL": "https://github.com/ddddxxx/SwiftCF", diff --git a/LyricsX/Component/AppController.swift b/LyricsX/Component/AppController.swift index 5242f12d..8a6a15c8 100644 --- a/LyricsX/Component/AppController.swift +++ b/LyricsX/Component/AppController.swift @@ -201,12 +201,7 @@ class AppController: NSObject { } let duration = track.duration ?? 0 - let req = LyricsSearchRequest(searchTerm: .info(title: title, artist: artist), - title: title, - artist: artist, - duration: duration, - limit: 5, - timeout: 10) + let req = LyricsSearchRequest(searchTerm: .info(title: title, artist: artist), duration: duration, limit: 5) searchRequest = req searchCanceller = lyricsManager.lyricsPublisher(request: req) .timeout(.seconds(10), scheduler: DispatchQueue.lyricsDisplay.cx) @@ -223,7 +218,8 @@ class AppController: NSObject { func lyricsReceived(lyrics: Lyrics) { guard let req = searchRequest, - lyrics.metadata.request == req else { + lyrics.metadata.request == req, + let track = selectedPlayer.currentTrack else { return } if defaults[.strictSearchEnabled] && !lyrics.isMatched() { @@ -232,6 +228,7 @@ class AppController: NSObject { if let current = currentLyrics, current.quality >= lyrics.quality { return } + lyrics.associateWithTrack(track) lyrics.filtrate() lyrics.recognizeLanguage() lyrics.metadata.needsPersist = true diff --git a/LyricsX/Component/LyricsMetaData+Extension.swift b/LyricsX/Component/LyricsMetadata+Extension.swift similarity index 71% rename from LyricsX/Component/LyricsMetaData+Extension.swift rename to LyricsX/Component/LyricsMetadata+Extension.swift index 25c251c5..8b618900 100644 --- a/LyricsX/Component/LyricsMetaData+Extension.swift +++ b/LyricsX/Component/LyricsMetadata+Extension.swift @@ -1,5 +1,5 @@ // -// LyricsMetaData+Extension.swift +// LyricsMetadata+Extension.swift // LyricsX - https://github.com/ddddxxx/LyricsX // // This Source Code Form is subject to the terms of the Mozilla Public @@ -10,15 +10,15 @@ import Foundation import LyricsCore -extension Lyrics.MetaData.Key { - static var localURL = Lyrics.MetaData.Key("localURL") - static var title = Lyrics.MetaData.Key("title") - static var artist = Lyrics.MetaData.Key("artist") - static var needsPersist = Lyrics.MetaData.Key("needsPersist") - static var language = Lyrics.MetaData.Key("language") +extension Lyrics.Metadata.Key { + static var localURL = Lyrics.Metadata.Key("localURL") + static var title = Lyrics.Metadata.Key("title") + static var artist = Lyrics.Metadata.Key("artist") + static var needsPersist = Lyrics.Metadata.Key("needsPersist") + static var language = Lyrics.Metadata.Key("language") } -extension Lyrics.MetaData { +extension Lyrics.Metadata { var localURL: URL? { get { return data[.localURL] as? URL } @@ -26,12 +26,12 @@ extension Lyrics.MetaData { } var title: String? { - get { return request?.title ?? data[.title] as? String } + get { return data[.title] as? String } set { data[.title] = newValue } } var artist: String? { - get { return request?.artist ?? data[.artist] as? String } + get { return data[.artist] as? String } set { data[.artist] = newValue } } diff --git a/LyricsX/Component/TouchBarLyricsItem.swift b/LyricsX/Component/TouchBarLyricsItem.swift index 8023a683..63eec414 100644 --- a/LyricsX/Component/TouchBarLyricsItem.swift +++ b/LyricsX/Component/TouchBarLyricsItem.swift @@ -61,7 +61,7 @@ class TouchBarLyricsItem: NSCustomTouchBarItem { if let timetag = line.attachments.timetag { let position = selectedPlayer.playbackTime let timeDelay = line.lyrics?.adjustedTimeDelay ?? 0 - let progress = timetag.tags.map { ($0.timeTag + line.position - timeDelay - position, $0.index) } + let progress = timetag.tags.map { ($0.time + line.position - timeDelay - position, $0.index) } self.lyricsTextField.setProgressAnimation(color: self.progressColor, progress: progress) } } diff --git a/LyricsX/Controller/KaraokeLyricsController.swift b/LyricsX/Controller/KaraokeLyricsController.swift index 0a31cb16..5ef0a5e5 100644 --- a/LyricsX/Controller/KaraokeLyricsController.swift +++ b/LyricsX/Controller/KaraokeLyricsController.swift @@ -162,7 +162,7 @@ class KaraokeLyricsWindowController: NSWindowController { let timetag = lrc.attachments.timetag { let position = selectedPlayer.playbackTime let timeDelay = AppController.shared.currentLyrics?.adjustedTimeDelay ?? 0 - let progress = timetag.tags.map { ($0.timeTag + lrc.position - timeDelay - position, $0.index) } + let progress = timetag.tags.map { ($0.time + lrc.position - timeDelay - position, $0.index) } upperTextField.setProgressAnimation(color: self.lyricsView.progressColor, progress: progress) if !selectedPlayer.playbackState.isPlaying { upperTextField.pauseProgressAnimation() diff --git a/LyricsX/Controller/SearchLyricsViewController.swift b/LyricsX/Controller/SearchLyricsViewController.swift index 6509210b..5624fa70 100644 --- a/LyricsX/Controller/SearchLyricsViewController.swift +++ b/LyricsX/Controller/SearchLyricsViewController.swift @@ -79,14 +79,7 @@ class SearchLyricsViewController: NSViewController, NSTableViewDelegate, NSTable let track = selectedPlayer.currentTrack let duration = track?.duration ?? 0 - let title = track?.title ?? "" - let artist = track?.artist ?? "" - let req = LyricsSearchRequest(searchTerm: .info(title: searchTitle, artist: searchArtist), - title: title, - artist: artist, - duration: duration, - limit: 8, - timeout: 10) + let req = LyricsSearchRequest(searchTerm: .info(title: searchTitle, artist: searchArtist), duration: duration, limit: 8) searchRequest = req searchCanceller = lyricsManager.lyricsPublisher(request: req) .sink(receiveCompletion: { [unowned self] _ in @@ -105,16 +98,18 @@ class SearchLyricsViewController: NSViewController, NSTableViewDelegate, NSTable return } - if let track = selectedPlayer.currentTrack { - if let index = defaults[.noSearchingTrackIds].firstIndex(of: track.id) { - defaults[.noSearchingTrackIds].remove(at: index) - } - if let index = defaults[.noSearchingAlbumNames].firstIndex(of: track.album ?? "") { - defaults[.noSearchingAlbumNames].remove(at: index) - } + guard let track = selectedPlayer.currentTrack else { + return + } + if let index = defaults[.noSearchingTrackIds].firstIndex(of: track.id) { + defaults[.noSearchingTrackIds].remove(at: index) + } + if let index = defaults[.noSearchingAlbumNames].firstIndex(of: track.album ?? "") { + defaults[.noSearchingAlbumNames].remove(at: index) } let lrc = searchResult[index] + lrc.associateWithTrack(track) AppController.shared.currentLyrics = lrc if defaults[.writeToiTunesAutomatically] { AppController.shared.writeToiTunes(overwrite: true) diff --git a/LyricsX/Supporting Files/Info.plist b/LyricsX/Supporting Files/Info.plist index eb38e353..f136d64a 100644 --- a/LyricsX/Supporting Files/Info.plist +++ b/LyricsX/Supporting Files/Info.plist @@ -32,9 +32,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.6.1 + 1.6.2-beta.1 CFBundleVersion - 2344 + 2347 Fabric APIKey @@ -58,7 +58,7 @@ LSUIElement LX_BUILD_TIME - 1622460550 + 1625917652 NSAppTransportSecurity NSExceptionDomains diff --git a/LyricsX/Supporting Files/fa.lproj/Localizable.strings b/LyricsX/Supporting Files/fa.lproj/Localizable.strings index f63f8619..eed5d52a 100644 --- a/LyricsX/Supporting Files/fa.lproj/Localizable.strings +++ b/LyricsX/Supporting Files/fa.lproj/Localizable.strings @@ -11,7 +11,7 @@ "Search Lyrics" = "جستجو ترانه"; /* No comment provided by engineer. */ -"Touch Bar lyrics is not supported in Mac App Store Version. Please download on GitHub." = "نمایش متن ترانه در تاچ بار در نسخه دانلود از استور پشتیبانی نمی شود. لطفا از نسخه موجود در گیت هاب استفاده کنید."; +"Touch Bar lyrics is not supported in Mac App Store Version. Please download on GitHub." = "نمایش متن ترانه در تاچ بار در نسخه دانلود شده از فروشگاه اپل پشتیبانی نمی شود. لطفا از نسخه موجود در گیتهاب استفاده کنید."; /* alert title */ "Unable to enable Touch Bar lyrics." = "نمایش متن ترانه در تاچ بار فعال نشد."; diff --git a/LyricsX/Utility/CombineExtension.swift b/LyricsX/Utility/CombineExtension.swift index 4bd163d1..99428f29 100644 --- a/LyricsX/Utility/CombineExtension.swift +++ b/LyricsX/Utility/CombineExtension.swift @@ -9,13 +9,6 @@ import CXShim -extension Publisher { - - func signal() -> Publishers.Map { - return self.map { _ in Void() } - } -} - extension Publisher where Output == Void { func prepend() -> Publishers.Concatenate, Self> { diff --git a/LyricsX/Utility/Extension.swift b/LyricsX/Utility/Extension.swift index 9663d407..aac7339e 100644 --- a/LyricsX/Utility/Extension.swift +++ b/LyricsX/Utility/Extension.swift @@ -122,6 +122,11 @@ extension UserDefaults { extension Lyrics { + func associateWithTrack(_ track: MusicTrack) { + metadata.title = track.title + metadata.artist = track.artist + } + var fileName: String? { guard let title = metadata.title?.replacingOccurrences(of: "/", with: ":"), let artist = metadata.artist?.replacingOccurrences(of: "/", with: ":") else { @@ -130,10 +135,6 @@ extension Lyrics { return "\(title) - \(artist).lrcx" } -} - -extension Lyrics { - func persist() { let (url, security) = defaults.lyricsSavingPath() if security { diff --git a/LyricsX/fa.lproj/Preferences.strings b/LyricsX/fa.lproj/Preferences.strings index 0f9a453e..233d5284 100644 --- a/LyricsX/fa.lproj/Preferences.strings +++ b/LyricsX/fa.lproj/Preferences.strings @@ -5,7 +5,7 @@ "0VO-JB-ubq.title" = "خودکار"; /* Class = "NSTextFieldCell"; title = "Lyrics lines matching following rules will be ignored. Use \"/\" to start a regular expression."; ObjectID = "19E-DG-Q23"; */ -"19E-DG-Q23.title" = "Lyrics lines maching following rules will be ignored. Use \"/\" to start a regular expression."; +"19E-DG-Q23.title" = "Lyrics lines maching following rules will be ignored. Use \"/\" to start a regular expression.\nبخش هایی از ترانه که از قانون مشخص شده در ادامه پیروی می کنند نشان داده نخواهند شد.\nبرای شروع به نوشتن عبارات باقاعده “RegX” از «/» استفاده کنید."; /* Class = "NSTextFieldCell"; title = "Lyrics"; ObjectID = "3Bt-md-QNc"; */ "3Bt-md-QNc.title" = "ترانه ها"; @@ -41,7 +41,7 @@ "As7-rZ-u6c.title" = "جستجوی دقیق"; /* Class = "NSTabViewItem"; label = "Karaoke"; ObjectID = "aUg-eg-K5C"; */ -"aUg-eg-K5C.label" = "کاراکویه"; +"aUg-eg-K5C.label" = "کارائوکه"; /* Class = "NSButtonCell"; title = "Combine menubar icon with menubar lyrics"; ObjectID = "bbd-ra-rSF"; */ "bbd-ra-rSF.title" = "تلفیق آیکون منو با ترانه منو"; @@ -116,7 +116,7 @@ "lN1-gG-AVq.title" = "فیلتر"; /* Class = "NSTextFieldCell"; title = "Show / Hide karaoke lyrics:"; ObjectID = "lOc-OP-AcU"; */ -"lOc-OP-AcU.title" = "نمایش/پنهان متن ترانه به صورت Karaoke:"; +"lOc-OP-AcU.title" = "نمایش/پنهان متن ترانه به صورت کارائوکه:"; /* Class = "NSTextFieldCell"; title = "Increase lyrics offset:"; ObjectID = "mo2-3C-gLY"; */ "mo2-3C-gLY.title" = "افزایش فاصله متن ترانه:"; @@ -134,19 +134,19 @@ "ppx-ob-WJc.title" = "میانبر"; /* Class = "NSTextFieldCell"; title = "Search result match the exact search term"; ObjectID = "rSD-qR-EXA"; */ -"rSD-qR-EXA.title" = "Search result match the exact search term"; +"rSD-qR-EXA.title" = "نتیجه جستجو دقیقا با عبارت جستجو شده برابر است"; /* Class = "NSTextFieldCell"; title = "Global offset (ms):"; ObjectID = "slB-q7-1dB"; */ -"slB-q7-1dB.title" = "Global offset (ms):"; +"slB-q7-1dB.title" = "تاخیر سراسری ( میلی ثانیه):"; /* Class = "NSButtonCell"; title = "Draggable"; ObjectID = "T7p-MT-Mrh"; */ -"T7p-MT-Mrh.title" = "Draggable"; +"T7p-MT-Mrh.title" = "قابل تکان دادن"; /* Class = "NSTextFieldCell"; title = "Show lyrics window:"; ObjectID = "TB9-Fk-WAX"; */ -"TB9-Fk-WAX.title" = "Show lyrics window:"; +"TB9-Fk-WAX.title" = "نمایش پنجره متن ترانه:"; /* Class = "NSButtonCell"; title = "Automatically generate furigana for Japanese lyrics"; ObjectID = "ThQ-vA-Krb"; */ -"ThQ-vA-Krb.title" = "Automatically generate furigana for Japanese lyrics"; +"ThQ-vA-Krb.title" = "تولید خودکار “furigana” برای متن ترانه های ژاپنی"; /* Class = "NSTextFieldCell"; title = "Text:"; ObjectID = "Txi-D9-jjB"; */ "Txi-D9-jjB.title" = "متن:"; @@ -158,16 +158,16 @@ "Uer-qJ-3T9.title" = "پس زمینه"; /* Class = "NSTextFieldCell"; title = "Hightlight:"; ObjectID = "UfE-QU-Yhm"; */ -"UfE-QU-Yhm.title" = "Hightlight:"; +"UfE-QU-Yhm.title" = "برجسته ها:"; /* Class = "NSButtonCell"; title = "Auto launch & quit with music player"; ObjectID = "v63-4a-fPw"; */ "v63-4a-fPw.title" = "باز و بسته شدن خودکار همراه با آهنگ"; /* Class = "NSTextFieldCell"; title = "Language (Requires Restart):"; ObjectID = "WfA-pe-S5D"; */ -"WfA-pe-S5D.title" = "Language (Requires Restart):"; +"WfA-pe-S5D.title" = "زبان ( نیازمند باز راه اندازی):"; /* Class = "NSTextFieldCell"; title = "Show / Hide menu bar lyrics:"; ObjectID = "XHQ-gX-urF"; */ -"XHQ-gX-urF.title" = "Show / Hide menu bar lyrics:"; +"XHQ-gX-urF.title" = "نمایش / پنهان کردن ترانه در نوار ابزار:"; /* Class = "NSButtonCell"; title = "Reset"; ObjectID = "XUF-aM-ZmS"; */ "XUF-aM-ZmS.title" = "ریست"; @@ -176,7 +176,7 @@ "XuN-vs-cgI.title" = "پیشرفت"; /* Class = "NSMenuItem"; title = "No Conversion"; ObjectID = "zhB-kd-WWG"; */ -"zhB-kd-WWG.title" = "No Conversion"; +"zhB-kd-WWG.title" = "بدون تبدیل"; /* Class = "NSButtonCell"; title = "Customize TouchBar"; ObjectID = "zQK-i2-2Nc"; */ -"zQK-i2-2Nc.title" = "Customize TouchBar"; +"zQK-i2-2Nc.title" = "شخصی سازی تاچ بار";