MiniPlayer/Sources/Localization.swift
yumoqing 3e3a990f5e fix: replace Combine KVO with NSKeyValueObservation to prevent autorelease crash
- Remove Combine import and cancellables
- Use NSKeyValueObservation for timeControlStatus (controlled teardown)
- Invalidate itemStatusObserver before replacing playerItem
- Store endObserver token for proper removal
- Add cleanup() method called on view disappear
- Proper deinit with direct property cleanup (nonisolated-safe)
2026-06-22 00:36:18 +08:00

54 lines
3.5 KiB
Swift

import Foundation
// MARK: - i18n
enum L {
//
static let playPause = NSLocalizedString("play_pause", value: "Play/Pause", comment: "")
static let prev = NSLocalizedString("prev", value: "Previous", comment: "")
static let next = NSLocalizedString("next", value: "Next", comment: "")
static let fullscreen = NSLocalizedString("fullscreen", value: "Fullscreen", comment: "")
static let volUp = NSLocalizedString("vol_up", value: "Volume+", comment: "")
static let volDown = NSLocalizedString("vol_down", value: "Volume-", comment: "")
static let repeatMode = NSLocalizedString("repeat_mode", value: "Repeat Mode", comment: "")
static let openFile = NSLocalizedString("open_file", value: "Open File...", comment: "")
static let addURL = NSLocalizedString("add_url", value: "Add URL...", comment: "")
static let playback = NSLocalizedString("menu_playback", value: "Playback", comment: "")
static let file = NSLocalizedString("menu_file", value: "File", comment: "")
//
static let playlist = NSLocalizedString("playlist", value: "Playlist", comment: "")
static let addFile = NSLocalizedString("add_file", value: "Add File", comment: "")
static let addURLBtn = NSLocalizedString("add_url_btn", value: "Add URL", comment: "")
static let itemsCount = NSLocalizedString("items_count", value: "items", comment: "")
static let noMedia = NSLocalizedString("no_media", value: "No media", comment: "")
// URL
static let addMediaURL = NSLocalizedString("add_media_url", value: "Add Media URL", comment: "")
static let cancel = NSLocalizedString("cancel", value: "Cancel", comment: "")
static let add = NSLocalizedString("add", value: "Add", comment: "")
//
static let selectTrack = NSLocalizedString("select_track", value: "Select Track", comment: "")
static let track = NSLocalizedString("track", value: "Track", comment: "")
static let audioTrack = NSLocalizedString("audio_track", value: "Audio Track", comment: "")
static let close = NSLocalizedString("close", value: "Close", comment: "")
//
static let repeatNone = NSLocalizedString("repeat_none", value: "No Repeat", comment: "")
static let repeatSingle = NSLocalizedString("repeat_single", value: "Repeat One", comment: "")
static let repeatAll = NSLocalizedString("repeat_all", value: "Repeat All", comment: "")
// Toast
static func nowPlaying(_ name: String) -> String {
String(format: NSLocalizedString("now_playing", value: "Now Playing: %@", comment: ""), name)
}
static func repeatModeLabel(_ mode: String) -> String {
String(format: NSLocalizedString("repeat_mode_label", value: "Repeat: %@", comment: ""), mode)
}
static let invalidURL = NSLocalizedString("invalid_url", value: "Invalid URL", comment: "")
//
static let open = NSLocalizedString("open", value: "Open", comment: "")
static let list = NSLocalizedString("list", value: "List", comment: "")
}