mirror of
https://github.com/yattee/yattee.git
synced 2025-12-13 19:48:14 +00:00
Compare commits
78 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c51f24d3f | ||
|
|
c231546b5c | ||
|
|
58c43acb2b | ||
|
|
4d953b0871 | ||
|
|
101fee9a37 | ||
|
|
a44bbe4cec | ||
|
|
3f0eec3c54 | ||
|
|
ea0f52ebe0 | ||
|
|
a82bdd2a00 | ||
|
|
b2b8565635 | ||
|
|
a061c1c040 | ||
|
|
0182faceae | ||
|
|
3b4e594fcf | ||
|
|
51e5aeec13 | ||
|
|
06aafc1719 | ||
|
|
f468fa6340 | ||
|
|
eb85e3b731 | ||
|
|
935f5cc75e | ||
|
|
bdbd23d66b | ||
|
|
e4796b08b6 | ||
|
|
19bc9197ec | ||
|
|
c513753f59 | ||
|
|
81b5ae1fa9 | ||
|
|
eddab1980a | ||
|
|
7ff52294a8 | ||
|
|
5ae18a5170 | ||
|
|
ecba91f35d | ||
|
|
36ecf63b6c | ||
|
|
0671b6ef9f | ||
|
|
39f6319043 | ||
|
|
6a2dc9164e | ||
|
|
37d3f43596 | ||
|
|
aef0ba6ffd | ||
|
|
1ae12cfa21 | ||
|
|
8475669aab | ||
|
|
6fec76fcb3 | ||
|
|
08b2e7ceac | ||
|
|
60972f0c7b | ||
|
|
a49db76588 | ||
|
|
bd0c86060b | ||
|
|
9849f31e1f | ||
|
|
00ac222af6 | ||
|
|
732a8d7385 | ||
|
|
a009ad7d53 | ||
|
|
91c7c9fc8e | ||
|
|
e836f87c88 | ||
|
|
1e1a23acd0 | ||
|
|
d8d728a48f | ||
|
|
067e8a79bf | ||
|
|
576f40360d | ||
|
|
c679a52903 | ||
|
|
82f109290d | ||
|
|
765006b185 | ||
|
|
86cddb06e4 | ||
|
|
012b5156b7 | ||
|
|
d6c04540e9 | ||
|
|
3144b52b55 | ||
|
|
b04385ceae | ||
|
|
721a97dc41 | ||
|
|
4ca8adc4dd | ||
|
|
d361ef01d4 | ||
|
|
0d9c27319d | ||
|
|
600b8d198b | ||
|
|
d65224320e | ||
|
|
586cea7d44 | ||
|
|
aa5d6733b2 | ||
|
|
982dca1846 | ||
|
|
7de702ad23 | ||
|
|
13ef96cd02 | ||
|
|
4ec6f35c5d | ||
|
|
7f19f7aa47 | ||
|
|
fb5cd0f681 | ||
|
|
3feafc153c | ||
|
|
8f08674527 | ||
|
|
a7baaeb485 | ||
|
|
b0d81cdefd | ||
|
|
a33a1d7658 | ||
|
|
e436dec4ba |
22
CHANGELOG.md
22
CHANGELOG.md
@@ -1,14 +1,22 @@
|
||||
## Build 170
|
||||
## Build 173
|
||||
* Updated dependencies
|
||||
* Updated localizations
|
||||
* Fixed reported crashes
|
||||
* Other minor changes and improvements
|
||||
|
||||
## Previous builds
|
||||
* Description is collapsible with a button
|
||||
* Links in description are clickable on macOS
|
||||
* Aspect ratio is honored on resize on macOS
|
||||
* Added support for private Invidious instances
|
||||
* Updated dependencies
|
||||
|
||||
**Big thanks to [@stonerl](https://github.com/stonerl) for these contributions!**
|
||||
**And to all other project contributors!**
|
||||
|
||||
## Previous builds
|
||||
* Collapsible chapters view, player setting "Open vertical chapters expanded"
|
||||
* Current chapter is highlighted
|
||||
* Disabled portrait upside down orientation on iPhone
|
||||
* Fixed issue with handling private Invidious instances requests
|
||||
* Fixed issue where Piped login token would not refresh
|
||||
* Fixed issue with MPV subtitles not working
|
||||
* Added Persian, Spanish, Turkish and Russian localizations
|
||||
* Fixed issue with displaying account username
|
||||
* Other minor changes and improvements
|
||||
|
||||
**Big thanks to the past, current and future project contributors!**
|
||||
|
||||
51
Gemfile.lock
51
Gemfile.lock
@@ -3,25 +3,25 @@ GEM
|
||||
specs:
|
||||
CFPropertyList (3.0.6)
|
||||
rexml
|
||||
addressable (2.8.5)
|
||||
addressable (2.8.6)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.3.0)
|
||||
aws-partitions (1.856.0)
|
||||
aws-sdk-core (3.188.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (1.877.0)
|
||||
aws-sdk-core (3.190.1)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (~> 1.8)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.73.0)
|
||||
aws-sdk-kms (1.76.0)
|
||||
aws-sdk-core (~> 3, >= 3.188.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.139.0)
|
||||
aws-sdk-core (~> 3, >= 3.188.0)
|
||||
aws-sdk-s3 (1.142.0)
|
||||
aws-sdk-core (~> 3, >= 3.189.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.6)
|
||||
aws-sigv4 (1.7.0)
|
||||
aws-sigv4 (~> 1.8)
|
||||
aws-sigv4 (1.8.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
claide (1.1.0)
|
||||
@@ -32,10 +32,10 @@ GEM
|
||||
declarative (0.0.20)
|
||||
digest-crc (0.6.5)
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.6.20231109)
|
||||
domain_name (0.6.20240107)
|
||||
dotenv (2.8.1)
|
||||
emoji_regex (3.2.3)
|
||||
excon (0.104.0)
|
||||
excon (0.109.0)
|
||||
faraday (1.10.3)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
@@ -64,8 +64,8 @@ GEM
|
||||
faraday-retry (1.0.3)
|
||||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.7)
|
||||
fastlane (2.217.0)
|
||||
fastimage (2.3.0)
|
||||
fastlane (2.219.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -84,6 +84,7 @@ GEM
|
||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
||||
google-apis-androidpublisher_v3 (~> 0.3)
|
||||
google-apis-playcustomapp_v1 (~> 0.1)
|
||||
google-cloud-env (>= 1.6.0, < 2.0.0)
|
||||
google-cloud-storage (~> 1.31)
|
||||
highline (~> 2.0)
|
||||
http-cookie (~> 1.0.5)
|
||||
@@ -92,7 +93,7 @@ GEM
|
||||
mini_magick (>= 4.9.4, < 5.0.0)
|
||||
multipart-post (>= 2.0.0, < 3.0.0)
|
||||
naturally (~> 2.2)
|
||||
optparse (~> 0.1.1)
|
||||
optparse (>= 0.1.1)
|
||||
plist (>= 3.1.0, < 4.0.0)
|
||||
rubyzip (>= 2.0.0, < 3.0.0)
|
||||
security (= 0.1.3)
|
||||
@@ -106,7 +107,7 @@ GEM
|
||||
xcpretty (~> 0.3.0)
|
||||
xcpretty-travis-formatter (>= 0.0.3)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.53.0)
|
||||
google-apis-androidpublisher_v3 (0.54.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-core (0.11.2)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
@@ -121,19 +122,19 @@ GEM
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.13.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-storage_v1 (0.29.0)
|
||||
google-apis-storage_v1 (0.31.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-cloud-core (1.6.0)
|
||||
google-cloud-env (~> 1.0)
|
||||
google-cloud-core (1.6.1)
|
||||
google-cloud-env (>= 1.0, < 3.a)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.3.1)
|
||||
google-cloud-storage (1.45.0)
|
||||
google-cloud-storage (1.47.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.29.0)
|
||||
google-apis-storage_v1 (~> 0.31.0)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
@@ -148,7 +149,7 @@ GEM
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.8.3)
|
||||
jmespath (1.6.2)
|
||||
json (2.6.3)
|
||||
json (2.7.1)
|
||||
jwt (2.7.1)
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.5)
|
||||
@@ -156,9 +157,9 @@ GEM
|
||||
multipart-post (2.3.0)
|
||||
nanaimo (0.3.0)
|
||||
naturally (2.2.1)
|
||||
optparse (0.1.1)
|
||||
optparse (0.4.0)
|
||||
os (1.1.4)
|
||||
plist (3.7.0)
|
||||
plist (3.7.1)
|
||||
public_suffix (5.0.4)
|
||||
rake (13.1.0)
|
||||
representable (3.2.0)
|
||||
@@ -184,7 +185,7 @@ GEM
|
||||
unicode-display_width (>= 1.1.1, < 3)
|
||||
trailblazer-option (0.1.2)
|
||||
tty-cursor (0.7.1)
|
||||
tty-screen (0.8.1)
|
||||
tty-screen (0.8.2)
|
||||
tty-spinner (0.9.3)
|
||||
tty-cursor (~> 0.7)
|
||||
uber (0.1.0)
|
||||
|
||||
@@ -144,52 +144,63 @@ extension VideosAPI {
|
||||
}
|
||||
|
||||
func extractChapters(from description: String) -> [Chapter] {
|
||||
guard let chaptersRegularExpression = try? NSRegularExpression(
|
||||
pattern: "(?<start>(?:[0-9]+:){1,}(?:[0-9]+))(?:\\s)+(?:- ?)?(?<title>.*)",
|
||||
options: .caseInsensitive
|
||||
) else { return [] }
|
||||
/*
|
||||
The following chapter patterns are covered:
|
||||
|
||||
let chapterLines = chaptersRegularExpression.matches(
|
||||
in: description,
|
||||
range: NSRange(description.startIndex..., in: description)
|
||||
)
|
||||
start - end - title / start - end: Title / start - end title
|
||||
start - title / start: title / start title / [start] - title / [start]: title / [start] title
|
||||
index. title - start / index. title start
|
||||
title: (start)
|
||||
|
||||
return chapterLines.compactMap { line in
|
||||
let titleRange = line.range(withName: "title")
|
||||
let startRange = line.range(withName: "start")
|
||||
The order is important!
|
||||
*/
|
||||
let patterns = [
|
||||
"(?<=\\n|^)\\s*(?:►\\s*)?\\[?(?<start>(?:[0-9]+:){1,2}[0-9]+)\\]?(?:\\s*-\\s*)?(?<end>(?:[0-9]+:){1,2}[0-9]+)?(?:\\s*-\\s*|\\s*[:]\\s*)?(?<title>.*)(?=\\n|$)",
|
||||
"(?<=\\n|^)\\s*(?:►\\s*)?\\[?(?<start>(?:[0-9]+:){1,2}[0-9]+)\\]?\\s*[-:]?\\s*(?<title>.+)(?=\\n|$)",
|
||||
"(?<=\\n|^)(?<index>[0-9]+\\.\\s)(?<title>.+?)(?:\\s*-\\s*)?(?<start>(?:[0-9]+:){1,2}[0-9]+)(?=\\n|$)",
|
||||
"(?<=\\n|^)(?<title>.+?):\\s*\\((?<start>(?:[0-9]+:){1,2}[0-9]+)\\)(?=\\n|$)"
|
||||
]
|
||||
|
||||
guard let titleSubstringRange = Range(titleRange, in: description),
|
||||
let startSubstringRange = Range(startRange, in: description) else { return nil }
|
||||
for pattern in patterns {
|
||||
guard let chaptersRegularExpression = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) else { continue }
|
||||
let chapterLines = chaptersRegularExpression.matches(in: description, range: NSRange(description.startIndex..., in: description))
|
||||
|
||||
let titleCapture = String(description[titleSubstringRange])
|
||||
let startCapture = String(description[startSubstringRange])
|
||||
let startComponents = startCapture.components(separatedBy: ":")
|
||||
guard startComponents.count <= 3 else { return nil }
|
||||
if !chapterLines.isEmpty {
|
||||
return chapterLines.compactMap { line in
|
||||
let titleRange = line.range(withName: "title")
|
||||
let startRange = line.range(withName: "start")
|
||||
guard let titleSubstringRange = Range(titleRange, in: description),
|
||||
let startSubstringRange = Range(startRange, in: description)
|
||||
else {
|
||||
return nil
|
||||
}
|
||||
let titleCapture = String(description[titleSubstringRange]).trimmingCharacters(in: .whitespaces)
|
||||
let startCapture = String(description[startSubstringRange])
|
||||
let startComponents = startCapture.components(separatedBy: ":")
|
||||
guard startComponents.count <= 3 else { return nil }
|
||||
|
||||
var hours: Double?
|
||||
var minutes: Double?
|
||||
var seconds: Double?
|
||||
var hours: Double?
|
||||
var minutes: Double?
|
||||
var seconds: Double?
|
||||
|
||||
if startComponents.count == 3 {
|
||||
hours = Double(startComponents[0])
|
||||
minutes = Double(startComponents[1])
|
||||
seconds = Double(startComponents[2])
|
||||
} else if startComponents.count == 2 {
|
||||
minutes = Double(startComponents[0])
|
||||
seconds = Double(startComponents[1])
|
||||
if startComponents.count == 3 {
|
||||
hours = Double(startComponents[0])
|
||||
minutes = Double(startComponents[1])
|
||||
seconds = Double(startComponents[2])
|
||||
} else if startComponents.count == 2 {
|
||||
minutes = Double(startComponents[0])
|
||||
seconds = Double(startComponents[1])
|
||||
}
|
||||
|
||||
guard var startSeconds = seconds else { return nil }
|
||||
|
||||
startSeconds += (minutes ?? 0) * 60
|
||||
startSeconds += (hours ?? 0) * 60 * 60
|
||||
|
||||
return .init(title: titleCapture, start: startSeconds)
|
||||
}
|
||||
}
|
||||
|
||||
guard var startSeconds = seconds else { return nil }
|
||||
|
||||
if let minutes {
|
||||
startSeconds += 60 * minutes
|
||||
}
|
||||
|
||||
if let hours {
|
||||
startSeconds += 60 * 60 * hours
|
||||
}
|
||||
|
||||
return .init(title: titleCapture, start: startSeconds)
|
||||
}
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
@@ -596,6 +596,8 @@ final class AVPlayerBackend: PlayerBackend {
|
||||
if self.controlsUpdates {
|
||||
self.updateControls()
|
||||
}
|
||||
|
||||
self.model.updateTime(self.currentTime!)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -182,13 +182,21 @@ final class MPVBackend: PlayerBackend {
|
||||
}
|
||||
|
||||
init() {
|
||||
// swiftlint:disable shorthand_optional_binding
|
||||
clientTimer = .init(interval: .seconds(Self.timeUpdateInterval), mode: .infinite) { [weak self] _ in
|
||||
self?.getTimeUpdates()
|
||||
guard let self = self, self.model.activeBackend == .mpv else {
|
||||
return
|
||||
}
|
||||
self.getTimeUpdates()
|
||||
}
|
||||
|
||||
networkStateTimer = .init(interval: .seconds(Self.networkStateUpdateInterval), mode: .infinite) { [weak self] _ in
|
||||
self?.updateNetworkState()
|
||||
guard let self = self, self.model.activeBackend == .mpv else {
|
||||
return
|
||||
}
|
||||
self.updateNetworkState()
|
||||
}
|
||||
// swiftlint:enable shorthand_optional_binding
|
||||
}
|
||||
|
||||
typealias AreInIncreasingOrder = (Stream, Stream) -> Bool
|
||||
@@ -432,6 +440,8 @@ final class MPVBackend: PlayerBackend {
|
||||
timeObserverThrottle.execute {
|
||||
self.model.updateWatch(time: self.currentTime)
|
||||
}
|
||||
|
||||
self.model.updateTime(self.currentTime!)
|
||||
}
|
||||
|
||||
private func stopClientUpdates() {
|
||||
|
||||
@@ -131,6 +131,8 @@ final class PlayerModel: ObservableObject {
|
||||
@Default(.rotateToLandscapeOnEnterFullScreen) private var rotateToLandscapeOnEnterFullScreen
|
||||
#endif
|
||||
|
||||
@Published var currentChapterIndex: Int?
|
||||
|
||||
var accounts: AccountsModel { .shared }
|
||||
var comments: CommentsModel { .shared }
|
||||
var controls: PlayerControlsModel { .shared }
|
||||
@@ -1112,4 +1114,36 @@ final class PlayerModel: ObservableObject {
|
||||
onPlayStream.forEach { $0(stream) }
|
||||
onPlayStream.removeAll()
|
||||
}
|
||||
|
||||
func updateTime(_ cmTime: CMTime) {
|
||||
let time = CMTimeGetSeconds(cmTime)
|
||||
let newChapterIndex = chapterForTime(time)
|
||||
if currentChapterIndex != newChapterIndex {
|
||||
DispatchQueue.main.async {
|
||||
self.currentChapterIndex = newChapterIndex
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func chapterForTime(_ time: Double) -> Int? {
|
||||
guard let chapters = self.videoForDisplay?.chapters else {
|
||||
return nil
|
||||
}
|
||||
|
||||
for (index, chapter) in chapters.enumerated() {
|
||||
let nextChapterStartTime = index < (chapters.count - 1) ? chapters[index + 1].start : nil
|
||||
|
||||
if let nextChapterStart = nextChapterStartTime {
|
||||
if time >= chapter.start, time < nextChapterStart {
|
||||
return index
|
||||
}
|
||||
} else {
|
||||
if time >= chapter.start {
|
||||
return index
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -364,6 +364,7 @@ struct ChannelVideosView: View {
|
||||
}
|
||||
} label: {
|
||||
Label("Unsubscribe", systemImage: "xmark.circle")
|
||||
.help("Unsubscribe")
|
||||
#if os(iOS)
|
||||
.labelStyle(.automatic)
|
||||
#else
|
||||
@@ -380,6 +381,7 @@ struct ChannelVideosView: View {
|
||||
}
|
||||
} label: {
|
||||
Label("Subscribe", systemImage: "circle")
|
||||
.help("Subscribe")
|
||||
#if os(iOS)
|
||||
.labelStyle(.automatic)
|
||||
#else
|
||||
@@ -413,6 +415,7 @@ struct ChannelVideosView: View {
|
||||
feed.markChannelAsWatched(channel.id)
|
||||
} label: {
|
||||
Label("Mark channel feed as watched", systemImage: "checkmark.circle.fill")
|
||||
.help("Mark channel feed as watched")
|
||||
}
|
||||
.disabled(!feed.canMarkAllFeedAsWatched)
|
||||
}
|
||||
@@ -423,6 +426,7 @@ struct ChannelVideosView: View {
|
||||
feed.markChannelAsUnwatched(channel.id)
|
||||
} label: {
|
||||
Label("Mark channel feed as unwatched", systemImage: "checkmark.circle")
|
||||
.help("Mark channel feed as unwatched")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -265,6 +265,7 @@ extension Defaults.Keys {
|
||||
static let hideWatched = Key<Bool>("hideWatched", default: false)
|
||||
static let showInspector = Key<ShowInspectorSetting>("showInspector", default: .onlyLocal)
|
||||
static let showChapters = Key<Bool>("showChapters", default: true)
|
||||
static let expandChapters = Key<Bool>("expandChapters", default: true)
|
||||
static let showRelated = Key<Bool>("showRelated", default: true)
|
||||
static let widgetsSettings = Key<[WidgetSettings]>("widgetsSettings", default: [])
|
||||
}
|
||||
|
||||
@@ -116,14 +116,14 @@ struct HomeView: View {
|
||||
#endif
|
||||
}
|
||||
.onAppear {
|
||||
Defaults.observe(.favorites) { _ in
|
||||
favoritesChanged.toggle()
|
||||
Task {
|
||||
for await _ in Defaults.updates(.favorites) {
|
||||
favoritesChanged.toggle()
|
||||
}
|
||||
for await _ in Defaults.updates(.widgetsSettings) {
|
||||
favoritesChanged.toggle()
|
||||
}
|
||||
}
|
||||
.tieToLifetime(of: accounts)
|
||||
Defaults.observe(.widgetsSettings) { _ in
|
||||
favoritesChanged.toggle()
|
||||
}
|
||||
.tieToLifetime(of: accounts)
|
||||
}
|
||||
|
||||
.redrawOn(change: favoritesChanged)
|
||||
|
||||
@@ -30,7 +30,6 @@ struct AccountViewButton: View {
|
||||
|
||||
if accountPickerDisplaysUsername {
|
||||
label
|
||||
.labelStyle(.titleOnly)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -47,6 +46,6 @@ struct AccountViewButton: View {
|
||||
}
|
||||
|
||||
private var label: some View {
|
||||
Label(model.current?.description ?? "Select Account", systemImage: "globe")
|
||||
Text(model.current?.description ?? "Select Account")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,28 +2,85 @@ import Foundation
|
||||
import SDWebImageSwiftUI
|
||||
import SwiftUI
|
||||
|
||||
struct ChapterView: View {
|
||||
var chapter: Chapter
|
||||
#if !os(tvOS)
|
||||
struct ChapterView: View {
|
||||
var chapter: Chapter
|
||||
|
||||
var player = PlayerModel.shared
|
||||
var chapterIndex: Int
|
||||
@ObservedObject private var player = PlayerModel.shared
|
||||
|
||||
var body: some View {
|
||||
Button {
|
||||
player.backend.seek(to: chapter.start, seekType: .userInteracted)
|
||||
} label: {
|
||||
Group {
|
||||
#if os(tvOS)
|
||||
horizontalChapter
|
||||
#else
|
||||
verticalChapter
|
||||
#endif
|
||||
}
|
||||
.contentShape(Rectangle())
|
||||
var isCurrentChapter: Bool {
|
||||
player.currentChapterIndex == chapterIndex
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
Button(action: {
|
||||
player.backend.seek(to: chapter.start, seekType: .userInteracted)
|
||||
}) {
|
||||
Group {
|
||||
verticalChapter
|
||||
}
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
|
||||
var verticalChapter: some View {
|
||||
VStack(spacing: 12) {
|
||||
if !chapter.image.isNil {
|
||||
smallImage(chapter)
|
||||
}
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(chapter.title)
|
||||
.lineLimit(3)
|
||||
.multilineTextAlignment(.leading)
|
||||
.font(.headline)
|
||||
.foregroundColor(isCurrentChapter ? Color("AppRedColor") : .primary)
|
||||
Text(chapter.start.formattedAsPlaybackTime(allowZero: true) ?? "")
|
||||
.font(.system(.subheadline).monospacedDigit())
|
||||
.foregroundColor(.secondary)
|
||||
}
|
||||
.frame(maxWidth: !chapter.image.isNil ? Self.thumbnailWidth : nil, alignment: .leading)
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder func smallImage(_ chapter: Chapter) -> some View {
|
||||
WebImage(url: chapter.image, options: [.lowPriority])
|
||||
.resizable()
|
||||
.placeholder {
|
||||
ProgressView()
|
||||
}
|
||||
.indicator(.activity)
|
||||
.frame(width: Self.thumbnailWidth, height: Self.thumbnailHeight)
|
||||
|
||||
.mask(RoundedRectangle(cornerRadius: 6))
|
||||
}
|
||||
|
||||
static var thumbnailWidth: Double {
|
||||
250
|
||||
}
|
||||
|
||||
static var thumbnailHeight: Double {
|
||||
thumbnailWidth / 1.7777
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
|
||||
#if os(tvOS)
|
||||
#else
|
||||
struct ChapterViewTVOS: View {
|
||||
var chapter: Chapter
|
||||
var player = PlayerModel.shared
|
||||
|
||||
var body: some View {
|
||||
Button {
|
||||
player.backend.seek(to: chapter.start, seekType: .userInteracted)
|
||||
} label: {
|
||||
Group {
|
||||
horizontalChapter
|
||||
}
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
|
||||
var horizontalChapter: some View {
|
||||
HStack(spacing: 12) {
|
||||
@@ -41,53 +98,36 @@ struct ChapterView: View {
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
}
|
||||
#else
|
||||
var verticalChapter: some View {
|
||||
VStack(spacing: 12) {
|
||||
if !chapter.image.isNil {
|
||||
smallImage(chapter)
|
||||
|
||||
@ViewBuilder func smallImage(_ chapter: Chapter) -> some View {
|
||||
WebImage(url: chapter.image, options: [.lowPriority])
|
||||
.resizable()
|
||||
.placeholder {
|
||||
ProgressView()
|
||||
}
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(chapter.title)
|
||||
.lineLimit(2)
|
||||
.multilineTextAlignment(.leading)
|
||||
.font(.headline)
|
||||
Text(chapter.start.formattedAsPlaybackTime(allowZero: true) ?? "")
|
||||
.font(.system(.subheadline).monospacedDigit())
|
||||
.foregroundColor(.secondary)
|
||||
}
|
||||
.frame(maxWidth: Self.thumbnailWidth, alignment: .leading)
|
||||
}
|
||||
.indicator(.activity)
|
||||
.frame(width: Self.thumbnailWidth, height: Self.thumbnailHeight)
|
||||
.mask(RoundedRectangle(cornerRadius: 12))
|
||||
}
|
||||
#endif
|
||||
|
||||
@ViewBuilder func smallImage(_ chapter: Chapter) -> some View {
|
||||
WebImage(url: chapter.image, options: [.lowPriority])
|
||||
.resizable()
|
||||
.placeholder {
|
||||
ProgressView()
|
||||
}
|
||||
.indicator(.activity)
|
||||
.frame(width: Self.thumbnailWidth, height: Self.thumbnailHeight)
|
||||
#if os(tvOS)
|
||||
.mask(RoundedRectangle(cornerRadius: 12))
|
||||
#else
|
||||
.mask(RoundedRectangle(cornerRadius: 6))
|
||||
#endif
|
||||
}
|
||||
static var thumbnailWidth: Double {
|
||||
250
|
||||
}
|
||||
|
||||
static var thumbnailWidth: Double {
|
||||
250
|
||||
static var thumbnailHeight: Double {
|
||||
thumbnailWidth / 1.7777
|
||||
}
|
||||
}
|
||||
|
||||
static var thumbnailHeight: Double {
|
||||
thumbnailWidth / 1.7777
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
struct ChapterView_Preview: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ChapterView(chapter: .init(title: "Chapter", start: 30))
|
||||
.injectFixtureEnvironmentObjects()
|
||||
#if os(tvOS)
|
||||
ChapterViewTVOS(chapter: .init(title: "Chapter", start: 30))
|
||||
.injectFixtureEnvironmentObjects()
|
||||
#else
|
||||
ChapterView(chapter: .init(title: "Chapter", start: 30), chapterIndex: 0)
|
||||
.injectFixtureEnvironmentObjects()
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import SwiftUI
|
||||
|
||||
struct ChaptersView: View {
|
||||
@ObservedObject private var player = PlayerModel.shared
|
||||
@Binding var expand: Bool
|
||||
|
||||
var chapters: [Chapter] {
|
||||
player.videoForDisplay?.chapters ?? []
|
||||
@@ -15,45 +16,71 @@ struct ChaptersView: View {
|
||||
|
||||
var body: some View {
|
||||
if !chapters.isEmpty {
|
||||
#if os(tvOS)
|
||||
List {
|
||||
Section {
|
||||
ForEach(chapters) { chapter in
|
||||
ChapterView(chapter: chapter)
|
||||
}
|
||||
}
|
||||
.listRowBackground(Color.clear)
|
||||
}
|
||||
.listStyle(.plain)
|
||||
#else
|
||||
if chaptersHaveImages {
|
||||
ScrollView(.horizontal) {
|
||||
LazyHStack(spacing: 20) {
|
||||
if chaptersHaveImages {
|
||||
#if os(tvOS)
|
||||
List {
|
||||
Section {
|
||||
ForEach(chapters) { chapter in
|
||||
ChapterView(chapter: chapter)
|
||||
ChapterViewTVOS(chapter: chapter)
|
||||
}
|
||||
}
|
||||
.padding(.horizontal, 15)
|
||||
.listRowBackground(Color.clear)
|
||||
}
|
||||
.frame(minHeight: ChapterView.thumbnailHeight + 100)
|
||||
} else {
|
||||
.listStyle(.plain)
|
||||
#else
|
||||
ScrollView(.horizontal) {
|
||||
LazyHStack(spacing: 20) { chapterViews(for: chapters[...]) }.padding(.horizontal, 15)
|
||||
}
|
||||
#endif
|
||||
} else if expand {
|
||||
#if os(tvOS)
|
||||
Section {
|
||||
ForEach(chapters) { chapter in
|
||||
ChapterView(chapter: chapter)
|
||||
ChapterViewTVOS(chapter: chapter)
|
||||
}
|
||||
}
|
||||
.padding(.horizontal)
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
NoCommentsView(text: "No chapters information available".localized(), systemImage: "xmark.circle.fill")
|
||||
#else
|
||||
Section { chapterViews(for: chapters[...]) }.padding(.horizontal)
|
||||
#endif
|
||||
} else {
|
||||
#if os(iOS)
|
||||
Button(action: {
|
||||
self.expand.toggle()
|
||||
}) {
|
||||
Section {
|
||||
chapterViews(for: chapters.prefix(3), opacity: 0.3, clickable: false)
|
||||
}.padding(.horizontal)
|
||||
}
|
||||
#elseif os(macOS)
|
||||
Section {
|
||||
chapterViews(for: chapters.prefix(3), opacity: 0.3, clickable: false)
|
||||
}.padding(.horizontal)
|
||||
#else
|
||||
Section {
|
||||
ForEach(chapters) { chapter in
|
||||
ChapterViewTVOS(chapter: chapter)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if !os(tvOS)
|
||||
private func chapterViews(for chaptersToShow: ArraySlice<Chapter>, opacity: Double = 1.0, clickable: Bool = true) -> some View {
|
||||
ForEach(Array(chaptersToShow.indices), id: \.self) { index in
|
||||
let chapter = chaptersToShow[index]
|
||||
ChapterView(chapter: chapter, chapterIndex: index)
|
||||
.opacity(index == 0 ? 1.0 : opacity)
|
||||
.allowsHitTesting(clickable)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
struct ChaptersView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ChaptersView()
|
||||
ChaptersView(expand: .constant(false))
|
||||
.injectFixtureEnvironmentObjects()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,27 +56,24 @@ struct VideoDescription: View {
|
||||
}
|
||||
}
|
||||
|
||||
var shouldExpand: Bool {
|
||||
expand
|
||||
}
|
||||
|
||||
@ViewBuilder var textDescription: some View {
|
||||
#if canImport(AppKit)
|
||||
Group {
|
||||
if #available(macOS 12, *) {
|
||||
DescriptionWithLinks(description: description, detailsSize: detailsSize)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.lineLimit(shouldExpand ? 500 : collapsedLinesDescription)
|
||||
.lineLimit(expand ? 500 : collapsedLinesDescription)
|
||||
.textSelection(.enabled)
|
||||
} else {
|
||||
Text(description)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.lineLimit(shouldExpand ? 500 : collapsedLinesDescription)
|
||||
.lineLimit(expand ? 500 : collapsedLinesDescription)
|
||||
}
|
||||
}
|
||||
.multilineTextAlignment(.leading)
|
||||
.font(.system(size: 14))
|
||||
.lineSpacing(3)
|
||||
.allowsHitTesting(expand)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -169,6 +169,7 @@ struct VideoDetails: View {
|
||||
@State private var subscriptionToggleButtonDisabled = false
|
||||
@State private var page = DetailsPage.info
|
||||
@State private var descriptionExpanded = false
|
||||
@State private var chaptersExpanded = false
|
||||
|
||||
@Environment(\.navigationStyle) private var navigationStyle
|
||||
#if os(iOS)
|
||||
@@ -190,6 +191,7 @@ struct VideoDetails: View {
|
||||
@Default(.showScrollToTopInComments) private var showScrollToTopInComments
|
||||
#endif
|
||||
@Default(.expandVideoDescription) private var expandVideoDescription
|
||||
@Default(.expandChapters) private var expandChapters
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
@@ -245,6 +247,7 @@ struct VideoDetails: View {
|
||||
.background(colorScheme == .dark ? Color.black : .white)
|
||||
.onAppear {
|
||||
descriptionExpanded = expandVideoDescription
|
||||
chaptersExpanded = expandChapters
|
||||
}
|
||||
}
|
||||
|
||||
@@ -320,7 +323,7 @@ struct VideoDetails: View {
|
||||
!video.chapters.isEmpty
|
||||
{
|
||||
Section(header: chaptersHeader) {
|
||||
ChaptersView()
|
||||
ChaptersView(expand: $chaptersExpanded)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -440,11 +443,48 @@ struct VideoDetails: View {
|
||||
#endif
|
||||
}
|
||||
|
||||
var chaptersHaveImages: Bool {
|
||||
player.videoForDisplay?.chapters.allSatisfy { $0.image != nil } ?? false
|
||||
}
|
||||
|
||||
var chaptersHeader: some View {
|
||||
Text("Chapters".localized())
|
||||
.padding(.horizontal)
|
||||
.font(.caption)
|
||||
.foregroundColor(.secondary)
|
||||
Group {
|
||||
if !chaptersHaveImages {
|
||||
#if canImport(UIKit)
|
||||
Button(action: {
|
||||
chaptersExpanded.toggle()
|
||||
}) {
|
||||
HStack {
|
||||
Text("Chapters".localized())
|
||||
Spacer()
|
||||
Image(systemName: chaptersExpanded ? "chevron.up" : "chevron.down")
|
||||
.imageScale(.small)
|
||||
}
|
||||
.padding(.horizontal)
|
||||
.font(.caption)
|
||||
.foregroundColor(.secondary)
|
||||
}
|
||||
#elseif canImport(AppKit)
|
||||
HStack {
|
||||
Text("Chapters".localized())
|
||||
Spacer()
|
||||
Button(action: { chaptersExpanded.toggle() }) {
|
||||
Image(systemName: chaptersExpanded ? "chevron.up" : "chevron.down")
|
||||
.imageScale(.small)
|
||||
}
|
||||
}
|
||||
.padding(.horizontal)
|
||||
.font(.caption)
|
||||
.foregroundColor(.secondary)
|
||||
#endif
|
||||
} else {
|
||||
// No button, just the title when there are images
|
||||
Text("Chapters".localized())
|
||||
.font(.caption)
|
||||
.foregroundColor(.secondary)
|
||||
.padding(.horizontal)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ struct PlayerSettings: View {
|
||||
|
||||
@Default(.showInspector) private var showInspector
|
||||
@Default(.showChapters) private var showChapters
|
||||
@Default(.expandChapters) private var expandChapters
|
||||
@Default(.showRelated) private var showRelated
|
||||
|
||||
@ObservedObject private var accounts = AccountsModel.shared
|
||||
@@ -80,6 +81,7 @@ struct PlayerSettings: View {
|
||||
expandVideoDescriptionToggle
|
||||
collapsedLineDescriptionStepper
|
||||
showChaptersToggle
|
||||
expandChaptersToggle
|
||||
showRelatedToggle
|
||||
#if os(macOS)
|
||||
HStack {
|
||||
@@ -282,7 +284,13 @@ struct PlayerSettings: View {
|
||||
}
|
||||
|
||||
private var showChaptersToggle: some View {
|
||||
Toggle("Chapters", isOn: $showChapters)
|
||||
Toggle("Chapters (if available)", isOn: $showChapters)
|
||||
}
|
||||
|
||||
private var expandChaptersToggle: some View {
|
||||
Toggle("Open vertical chapters expanded", isOn: $expandChapters)
|
||||
.disabled(!showChapters)
|
||||
.foregroundColor(showChapters ? .primary : .secondary)
|
||||
}
|
||||
|
||||
private var showRelatedToggle: some View {
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
|
||||
|
||||
"Add Account" = "أضف حساب";
|
||||
"Add Account..." = "أضف حساب…";
|
||||
"Add Location" = "أضف موقع";
|
||||
"Add Location..." = "إضافة موقع ...";
|
||||
"%@ Playlist" = "قائمة التشغيل";
|
||||
"%@ Channel" = "قناة %@";
|
||||
"%@ subscribers" = "%@ مشترك";
|
||||
"Add to %@" = "أضف إلى %@";
|
||||
"%lld videos" = "%lld مقاطع فيديو";
|
||||
"Add profile..." = "إضافة ملف تعريف ...";
|
||||
"Add Account" = "إضافة حساب";
|
||||
"Add Account..." = "إضافة حساب…";
|
||||
"Add Location" = "إضافة موقع";
|
||||
"Add Location..." = "إضافة موقع...";
|
||||
"%@ Playlist" = "%@ قائمة تشغيل";
|
||||
"%@ Channel" = "%@ قناة";
|
||||
"%@ subscribers" = "%@ المتابعين";
|
||||
"Add to %@" = "إضافة إلى %@";
|
||||
"%lld videos" = "%Lld مقاطع الفيديو";
|
||||
"Add profile..." = "إضافة ملف تعريف...";
|
||||
"Add Quality Profile" = "إضافة ملف تعريف الجودة";
|
||||
"Add to Playlist" = "أضف إلى قائمة التشغيل";
|
||||
"Add to Playlist..." = "أضف إلى قائمة التشغيل...";
|
||||
"Add to Playlist" = "إضافة إلى قائمة تشغيل";
|
||||
"Add to Playlist..." = "إضافة إلى قائمة تشغيل...";
|
||||
"Advanced" = "متقدم";
|
||||
|
||||
/* Trending category, section containing all kinds of videos */
|
||||
@@ -22,13 +22,13 @@
|
||||
"Are you sure you want to restore default quality profiles?" = "هل أنت متأكد من أنك تريد استعادة ملفات تعريف الجودة الافتراضية؟";
|
||||
"Automatic" = "تلقائي";
|
||||
"Autoplaying Next" = "التشغيل التلقائي للتالي";
|
||||
"Are you sure you want to unsubscribe from %@?" = "هل أنت متأكد من رغبتك في إلغاء الاشتراك من ٪@؟";
|
||||
"Are you sure you want to unsubscribe from %@?" = "هل أنت متأكد من رغبتك في إلغاء الإشتراك من ٪@؟";
|
||||
"Badge & Decreased opacity" = "شارة ونقص التعتيم";
|
||||
"Browsing" = "التصفح";
|
||||
"Based on system color scheme" = "بناء على نظام ألوان الجهاز";
|
||||
"Battery" = "البطارية";
|
||||
"Blue" = "أزرق";
|
||||
"Buffering stream..." = "جار تخزين تيار الفيديو…";
|
||||
"Buffering stream..." = "جار تخزين بث الفيديو…";
|
||||
"Bugs and great feature ideas can be sent to the GitHub issues tracker. " = "يمكن إرسال الأخطاء وأفكار الميزات الرائعة إلى أداة تعقب مشكلات فى GitHub. ";
|
||||
"Button" = "زر";
|
||||
"Cancel" = "إلغاء";
|
||||
@@ -37,27 +37,27 @@
|
||||
"Chapters" = "الفصول";
|
||||
"Captions" = "التسميات التوضيحية";
|
||||
"Cellular" = "خلوي";
|
||||
"Clear History" = "مسح التاريخ";
|
||||
"Clear History" = "مسح سجل التاريخ";
|
||||
"Clear Search History" = "مسح سجل البحث";
|
||||
"Clear Search History..." = "مسح سجل البحث…";
|
||||
"Clear All" = "مسح الكل";
|
||||
"Clear All Recents" = "مسح جميع الجديد";
|
||||
"Close player when closing video" = "أغلق المشغل عند غلق الفيديو";
|
||||
"Clear" = "مسح الكل";
|
||||
"Close PiP and open player when application enters foreground" = "أغلق الفيديو المصغر وافتح المشغل عندما يدخل التطبيق في المقدمة";
|
||||
"Close PiP when player is opened" = "أغلق الفيديو المصغر عند فتح المشغل";
|
||||
"Close Video" = "اغلق الفيديو";
|
||||
"Close video after playing last in the queue" = "أغلق الفيديو عند إنتهاء الفيديو الاخير فى قائمة الانتظار";
|
||||
"Clear All Recents" = "مسح جميع الأخيرة";
|
||||
"Close player when closing video" = "غلق المشغل عند غلق الفيديو";
|
||||
"Clear" = "مسح";
|
||||
"Close PiP and open player when application enters foreground" = "غلق الفيديو المصغر وفتح المشغل عندما يدخل التطبيق في المقدمة";
|
||||
"Close PiP when player is opened" = "غلق الفيديو المصغر عند فتح المشغل";
|
||||
"Close Video" = "غلق الفيديو";
|
||||
"Close video after playing last in the queue" = "غلق الفيديو عند إنتهاء الفيديو الاخير فى قائمة الانتظار";
|
||||
"Comments" = "التعليقات";
|
||||
"Connection failed" = "فشل الاتصال";
|
||||
"Continue" = "استمر";
|
||||
"Continue" = "الإستمرار";
|
||||
"Connected successfully (%@)" = "تم الاتصال بنجاح (%@)";
|
||||
"Country" = "البلد";
|
||||
"Country Name or Code" = "اسم الدولة أو الرمز";
|
||||
"Copy %@ link" = "انسخ الرابط: %@";
|
||||
"Copy %@ link" = "نسخ الرابط: %@";
|
||||
"Contributing" = "المساهمة";
|
||||
"Contact" = "التواصل";
|
||||
"Continue from %@" = "الاستمرار من %@";
|
||||
"Continue from %@" = "الإستمرار من %@";
|
||||
"Controls" = "عناصر التحكم";
|
||||
"Copy %@ link with time" = "نسخ رابط %@ مع الوقت";
|
||||
"Could not load locations manifest" = "تعذر تحميل بيان المواقع";
|
||||
@@ -74,31 +74,31 @@
|
||||
"Decrease rate" = "انخفاض معدل";
|
||||
"Decreased opacity" = "انخفاض التعتيم";
|
||||
"Enable logging" = "تمكين التسجيل";
|
||||
"Discord Server" = "سيرفر Discord";
|
||||
"Discord Server" = "خادم Discord";
|
||||
"Discussions take place in Discord and Matrix. It's a good spot for general questions." = "تجري المناقشات في Discord و Matrix. إنه مكان جيد للأسئلة العامة.";
|
||||
"Don't use public locations" = "لا تستخدم المواقع العامة";
|
||||
"Donations" = "التبرعات";
|
||||
"Done" = "تم";
|
||||
"Duration" = "مدة";
|
||||
"Edit" = "تعديل";
|
||||
"Edit Playlist" = "عدل قائمة التشغيل";
|
||||
"Edit Playlist" = "تعديل قائمة تشغيل";
|
||||
"Edit Quality Profile" = "تعديل ملف تعريف الجودة";
|
||||
"Edit..." = "تعديل...";
|
||||
"Enable Return YouTube Dislike" = "تمكين إرجاع زر لا يعجبني";
|
||||
"Enter fullscreen in landscape" = "املاء الشاشة عند الدخول فى الوضع الافقي";
|
||||
"Error" = "خطأ";
|
||||
"Error when accessing playlist" = "خطأ عند الوصول إلى قائمة التشغيل";
|
||||
"Favorites" = "المفضلات";
|
||||
"Filter: active" = "المنقى: فعال";
|
||||
"Error when accessing playlist" = "خطأ عند الوصول إلى قائمة تشغيل";
|
||||
"Favorites" = "المفضلة";
|
||||
"Filter: active" = "عامل التصفية: فعال";
|
||||
"Find Other" = "العثور على غيرها";
|
||||
"Finding something to play..." = "العثور على شيء للتشغيل ...";
|
||||
"For videos which feature music as the primary content." = "لمقاطع الفيديو التي تحتوي على الموسيقى كمحتوى أساسي.";
|
||||
"Gaming" = "اللعب";
|
||||
"Help" = "مساعدة";
|
||||
"Hide sidebar" = "إخفاء الشريط الجانبي";
|
||||
"Highest" = "أعلى";
|
||||
"Highest" = "الأعلى";
|
||||
"Highest quality" = "أعلى جودة";
|
||||
"History" = "تاريخ";
|
||||
"History" = "سجل التاريخ";
|
||||
|
||||
/* Video date filter in search */
|
||||
"Hour" = "ساعة";
|
||||
@@ -121,7 +121,7 @@
|
||||
"Issues Tracker" = "تعقب المشاكل";
|
||||
|
||||
/* Selected video has just finished playing */
|
||||
"Just watched" = "تمت مشاهدته للتو";
|
||||
"Just watched" = "تمت المشاهدة للتو";
|
||||
|
||||
/* Player controls layout size */
|
||||
"Large" = "كبير";
|
||||
@@ -129,17 +129,17 @@
|
||||
"LIVE" = "مباشر";
|
||||
|
||||
/* Loading stream OSD */
|
||||
"Loading streams..." = "جارٍ تحميل البثوث ...";
|
||||
"Loading streams..." = "جارٍ تحميل بثوث ...";
|
||||
"Loading..." = "تحميل...";
|
||||
|
||||
/* Video duration filter in search */
|
||||
"Long" = "طويل";
|
||||
"Low" = "منخفض";
|
||||
"Low quality" = "جودة منخفضة";
|
||||
"Lowest" = "أدنى";
|
||||
"Mark as watched" = "وضع علامة كمراقب";
|
||||
"Mark video as watched after playing" = "ضع علامة على الفيديو كمشاهدة بعد التشغيل";
|
||||
"Mark watched videos with" = "وضع علامة على مقاطع الفيديو التي تمت مشاهدتها باستخدام";
|
||||
"Lowest" = "الأدنى";
|
||||
"Mark as watched" = "وضع علامة تمت المشاهدة";
|
||||
"Mark video as watched after playing" = "ضع علامة على الفيديو تمت المشاهدة بعد التشغيل";
|
||||
"Mark watched videos with" = "وضع علامة على مقاطع الفيديو التي تمت المشاهدة باستخدام";
|
||||
"Matrix Channel" = "قناة Matrix";
|
||||
"Matrix Chat" = "دردشة Matrix";
|
||||
"More info can be found in:" = "يمكن العثور على مزيد من المعلومات في:";
|
||||
@@ -154,35 +154,35 @@
|
||||
"No results" = "لا توجد نتائج";
|
||||
"Normal" = "عادي";
|
||||
"Not available" = "غير متوفر";
|
||||
"Not Playing" = "لا يلعب";
|
||||
"Not Playing" = "لا يعمل";
|
||||
"Nothing" = "لا شئ";
|
||||
|
||||
/* SponsorBlock category name */
|
||||
"Offtopic in Music Videos" = "خارج الموضوع في مقاطع الفيديو الموسيقية";
|
||||
"Only when signed in" = "فقط عندما يكون مسجل";
|
||||
"Open Settings" = "افتح الإعدادات";
|
||||
"Open Settings" = "فتح الإعدادات";
|
||||
|
||||
/* Loading stream OSD */
|
||||
"Opening %@ stream..." = "فتح %@ تيار ...";
|
||||
"Opening audio stream..." = "يتم الآن فتح الصوت ...";
|
||||
"Opening %@ stream..." = "فتح %@ بث ...";
|
||||
"Opening audio stream..." = "يتم فتح بث صوتي ...";
|
||||
"Orientation" = "اتجاه";
|
||||
"Play in PiP" = "تشغيل الفيديو المصغر";
|
||||
"Play in PiP" = "تشغيل في الفيديو المصغر";
|
||||
"Play Last" = "تشغيل الاخير";
|
||||
"Play Music" = "شغل الموسيقى";
|
||||
"Play Music" = "تشغل الموسيقى";
|
||||
"Play Next" = "تشغيل التالى";
|
||||
"Play Now" = "شغل الآن";
|
||||
"Playback" = "التشغيل";
|
||||
"Play Now" = "تشغيل الآن";
|
||||
"Playback" = "إعادة تشغيل المقطع";
|
||||
"Player" = "المشغل";
|
||||
"Playlist" = "قائمة التشغيل";
|
||||
"Playlist \"%@\" will be deleted.\nIt cannot be reverted." = "سيتم حذف قائمة التشغيل \"%@\".\nلا يمكن التراجع عنه.";
|
||||
"Playlists" = "قوائم التشغيل";
|
||||
"Playlist" = "قائمة تشغيل";
|
||||
"Playlist \"%@\" will be deleted.\nIt cannot be reverted." = "سيتم حذف قائمة تشغيل \"%@\".\nلا يمكن التراجع عنه.";
|
||||
"Playlists" = "قوائم تشغيل";
|
||||
"Popular" = "شعبي";
|
||||
"Preferred Formats" = "التنسيقات المفضلة";
|
||||
"Profiles" = "ملفات تعريف";
|
||||
"Promoting a product or service that is directly related to the creator themselves. This usually includes merchandise or promotion of monetized platforms." = "الترويج لمنتج أو خدمة مرتبطة مباشرة بمنشئ المحتوى نفسه. يتضمن هذا عادة البضائع أو الترويج للمنصات التي يتم تحقيق الدخل منها.";
|
||||
"Public Locations" = "المواقع العامة";
|
||||
"Public Manifest" = "البيان العام";
|
||||
"Quality" = "جودة";
|
||||
"Quality" = "الجودة";
|
||||
"Quality Profile" = "ملف تعريف الجودة";
|
||||
"Queue" = "قائمة الانتظار";
|
||||
"Queue is empty" = "قائمة الانتظار فارغة";
|
||||
@@ -190,31 +190,31 @@
|
||||
|
||||
/* Video sort order in search */
|
||||
"Rating" = "تقييم";
|
||||
"Recents" = "الجدد";
|
||||
"Recents" = "الأخيرة";
|
||||
"Red" = "أحمر";
|
||||
"Refresh" = "تحديث";
|
||||
"Regular size" = "الحجم العادي";
|
||||
"Regular Size" = "الحجم العادي";
|
||||
"Related" = "ذات الصله";
|
||||
"Related" = "ذات الصلة";
|
||||
|
||||
/* Video sort order in search */
|
||||
"Relevance" = "الصلة";
|
||||
"Remove" = "أزيل";
|
||||
"Remove" = "إزالة";
|
||||
"Remove from Favorites" = "إزالة من المفضلة";
|
||||
"Remove from history" = "إزالة من سجل التاريخ";
|
||||
"Remove from Playlist" = "إزالة من قائمة التشغيل";
|
||||
"Remove from Playlist" = "إزالة من قائمة تشغيل";
|
||||
"Remove from the queue" = "إزالة من قائمة الانتظار";
|
||||
"Replies" = "الردود";
|
||||
"Reset" = "إعادة ضبط";
|
||||
"Reset" = "إعادة تعيين";
|
||||
"Reset search filters" = "إعادة تعيين عوامل تصفية البحث";
|
||||
"Reset watched status when playing again" = "إعادة تعيين حالة المشاهدة عند اللعب مرة أخرى";
|
||||
"Reset watched status when playing again" = "إعادة تعيين حالة المشاهدة عند التشغيل مرة أخرى";
|
||||
"Resolution" = "دقة";
|
||||
"Restart" = "اعاده تشغيل";
|
||||
"Restart" = "إعادة تشغيل";
|
||||
"Restart the app to apply the settings above." = "أعد تشغيل التطبيق لتطبيق الإعدادات أعلاه.";
|
||||
"Restore default profiles..." = "استعادة ملفات التعريف الافتراضية ...";
|
||||
"Round corners" = "زوايا مستديرة";
|
||||
"Save" = "يحفظ";
|
||||
"Save history of searches, channels and playlists" = "حفظ سجل عمليات البحث والقنوات وقوائم التشغيل";
|
||||
"Save" = "حفظ";
|
||||
"Save history of searches, channels and playlists" = "حفظ سجل عمليات البحث والقنوات وقوائم تشغيل";
|
||||
"Search history is empty" = "سجل البحث فارغ";
|
||||
"Search..." = "بحث...";
|
||||
"Sections" = "الأقسام";
|
||||
@@ -222,19 +222,19 @@
|
||||
|
||||
/* SponsorBlock category name */
|
||||
"Self-promotion" = "الترويج الذاتي";
|
||||
"Settings" = "اعدادات";
|
||||
"Share %@ link" = "مشاركة الرابط %@";
|
||||
"Settings" = "الإعدادات";
|
||||
"Share %@ link" = "مشاركة رابط %@";
|
||||
"Share %@ link with time" = "مشاركة الرابط %@ مع الوقت";
|
||||
"Share..." = "شارك...";
|
||||
"Share..." = "مشاركة...";
|
||||
|
||||
/* Video duration filter in search */
|
||||
"Short" = "قصير";
|
||||
"Show account username" = "إظهار اسم مستخدم الحساب";
|
||||
"Show anonymous accounts" = "إظهار الحسابات المجهولة";
|
||||
"Show channel name" = "إظهار اسم القناة";
|
||||
"Show history" = "عرض التاريخ";
|
||||
"Show history" = "إظهار سجل التاريخ";
|
||||
"Show keywords" = "إظهار الكلمات الرئيسية";
|
||||
"Show playback statistics" = "عرض إحصائيات التشغيل";
|
||||
"Show playback statistics" = "إظهار إحصائيات التشغيل";
|
||||
"Show sidebar when space permits" = "إظهار الشريط الجانبي عندما تسمح المساحة";
|
||||
"Shuffle" = "خلط";
|
||||
"Shuffle All" = "خلط الجميع";
|
||||
@@ -249,40 +249,40 @@
|
||||
|
||||
/* SponsorBlock category name */
|
||||
"Sponsor" = "راعي";
|
||||
"SponsorBlock" = "مغلق الاعلانات";
|
||||
"SponsorBlock API Instance" = "مثيل واجهة برمجة تطبيقات مغلق الاعلانات";
|
||||
"SponsorBlock" = "حظر الإعلانات";
|
||||
"SponsorBlock API Instance" = "مثيل واجهة برمجة تطبيقات حظر الإعلانات";
|
||||
"Subscribe" = "الإشتراك";
|
||||
|
||||
/* Subscriptions title */
|
||||
"Subscriptions" = "الاشتراكات";
|
||||
"Switch to other public location" = "التبديل إلى موقع عام آخر";
|
||||
"System controls buttons" = "أزرار التحكم في النظام";
|
||||
"System controls buttons" = "أزرار نظام عناصر التحكم";
|
||||
"This cannot be reverted" = "هذا لا يمكن تغييره";
|
||||
"This cannot be reverted. You might need to switch between views or restart the app to see changes." = "لا يمكن التراجع عن هذا. قد تحتاج إلى التبديل بين طرق العرض أو إعادة تشغيل التطبيق للاطلاع على التغييرات.";
|
||||
"This information will be processed only on your device and used to connect you to the server in the specified country." = "ستتم معالجة هذه المعلومات فقط على جهازك واستخدامها لتوصيلك بالخادم في البلد المحدد.";
|
||||
"Upload date" = "تاريخ الرفع";
|
||||
"URL" = "الرابط";
|
||||
"Used to create links from videos, channels and playlists" = "يستخدم لإنشاء روابط من مقاطع الفيديو والقنوات وقوائم التشغيل";
|
||||
"Used to create links from videos, channels and playlists" = "يستخدم لإنشاء روابط من مقاطع الفيديو والقنوات وقوائم تشغيل";
|
||||
"Username" = "اسم المستخدم";
|
||||
|
||||
/* Player controls layout size */
|
||||
"Very Large" = "كبير جدا";
|
||||
"Videos" = "الفيديوات";
|
||||
"Videos" = "مقاطع الفيديو";
|
||||
|
||||
/* Video sort order in search */
|
||||
"Views" = "المشاهدات";
|
||||
"Watched" = "تمت مشاهدته";
|
||||
"Watched" = "تمت المشاهدة";
|
||||
|
||||
/* Selected video was played on given date */
|
||||
"Watched %@" = "شاهدت %@";
|
||||
"Watched %@" = "تمت المشاهدة %@";
|
||||
|
||||
/* Selected video is being played */
|
||||
"Watching now" = "يشاهد الآن";
|
||||
"Watching now" = "المشاهدة الآن";
|
||||
|
||||
/* Video date filter in search */
|
||||
"Week" = "أسبوع";
|
||||
"Welcome" = "مرحبا";
|
||||
"When partially watched video is played" = "عند تشغيل الفيديو الذي تمت مشاهدته جزئيا";
|
||||
"When partially watched video is played" = "عند تشغيل الفيديو الذي تمت المشاهدة جزئيا";
|
||||
"Wi-Fi" = "واي فاي";
|
||||
"Yattee" = "Yattee";
|
||||
"Yattee %@ (build %@)" = "Yattee%@ (بناء%@)";
|
||||
@@ -295,29 +295,29 @@
|
||||
"You have no playlists\n\nTap on \"New Playlist\" to create one" = "ليس لديك قوائم تشغيل\n\nاضغط على \"قائمة تشغيل جديدة\" لإنشاء واحدة";
|
||||
"You need to create an instance and accounts\nto access %@ section" = "تحتاج إلى إنشاء مثيل وحسابات\nللوصول إلى قسم %@";
|
||||
"You need to select an account\nto access %@ section" = "تحتاج إلى تحديد حساب\nللوصول إلى قسم %@";
|
||||
"Unlisted" = "غير علنى";
|
||||
"Unlisted" = "غير مدرج";
|
||||
"Now Playing" = "يعرض الآن";
|
||||
"Playback queue is empty" = "قائمة انتظار التشغيل فارغة";
|
||||
"Playing Next" = "تشغيل الآتي";
|
||||
"Add Channels, Playlists and Searches to Favorites using" = "إضافة القنوات وقوائم التشغيل وعمليات البحث إلى المفضلات باستخدام";
|
||||
"Playing Next" = "تشغيل التالي";
|
||||
"Add Channels, Playlists and Searches to Favorites using" = "إضافة القنوات، قوائم تشغيل، عمليات البحث إلى المفضلة باستخدام";
|
||||
"Make default" = "جعله افتراضي";
|
||||
"Visibility" = "امكانية الرؤية";
|
||||
"Stream & Player" = "تيار ومشغل";
|
||||
"Stream & Player" = "بث و تشغيل";
|
||||
"Statistics" = "إحصائيات";
|
||||
"Hardware decoder" = "وحدة فك ترميز الأجهزة";
|
||||
"Rate & Captions" = "التقييم والتسميات التوضيحية";
|
||||
"Dropped frames" = "الإطارات المتساقطة";
|
||||
"Stream FPS" = "عدد الإطارات فى الثانية فى التيار";
|
||||
"Stream FPS" = "عدد الإطارات فى الثانية فى البث";
|
||||
"Any format" = "أي شكل";
|
||||
"%@ formats" = "%@ تنسيقات";
|
||||
"Playlist is empty\n\nTap and hold on a video and then \n\"Add to Playlist\"" = "قائمة التشغيل فارغة\n\nاضغط مع الاستمرار على مقطع فيديو ثم\n\"إضافة إلى قائمة التشغيل\"";
|
||||
"Playlist is empty\n\nTap and hold on a video and then \n\"Add to Playlist\"" = "قائمة تشغيل فارغة\n\nاضغط مع الاستمرار على مقطع الفيديو ثم\n\"إضافة إلى قائمة تشغيل\"";
|
||||
"Press and hold remote button to open captions and quality menus" = "اضغط مع الاستمرار على زر التحكم عن بعد لفتح التسميات التوضيحية وقوائم الجودة";
|
||||
"Comments are disabled" = "التعليقات معطلة";
|
||||
"No comments" = "لا توجد تعليقات";
|
||||
"No chapters information available" = "لا توجد معلومات متاحة عن الفصول";
|
||||
"Open logs in Finder" = "فتح السجلات في Finder";
|
||||
"Could not refresh Subscriptions" = "تعذر تحديث الاشتراكات";
|
||||
"Could not load streams" = "تعذر تحميل التدفقات";
|
||||
"Could not load streams" = "تعذر تحميل البثوث";
|
||||
"Could not extract channel information" = "تعذر استخراج معلومات القناة";
|
||||
"Could not extract SID from received cookies: %@" = "تعذر استخراج SID من ملفات تعريف الارتباط المستلمة: %@";
|
||||
"Could not update your token." = "تعذر تحديث الرمز المميز الخاص بك.";
|
||||
@@ -325,13 +325,13 @@
|
||||
"For custom locations you can configure Frontend URL in Locations settings" = "بالنسبة للمواقع المخصصة، يمكنك تكوين عنوان URL للواجهة الأمامية في إعدادات المواقع";
|
||||
"This URL could not be opened" = "تعذر فتح عنوان URL هذا";
|
||||
"Could not open channel" = "تعذر فتح القناة";
|
||||
"Could not open playlist" = "تعذر فتح قائمة التشغيل";
|
||||
"Could not open playlist" = "تعذر فتح قائمة تشغيل";
|
||||
"Could not extract video ID" = "تعذر استخراج معرف الفيديو";
|
||||
"This video could not be opened" = "تعذر فتح هذا الفيديو";
|
||||
"Could not extract playlist ID" = "تعذر استخراج معرف قائمة التشغيل";
|
||||
"Could not extract playlist ID" = "تعذر استخراج معرف قائمة تشغيل";
|
||||
"Could not load video" = "تعذر تحميل الفيديو";
|
||||
"No locations available at the moment" = "لا توجد مواقع متاحة في الوقت الحالي";
|
||||
"Could not refresh Playlists" = "تعذر تحديث قوائم التشغيل";
|
||||
"Could not refresh Playlists" = "تعذر تحديث قوائم تشغيل";
|
||||
"If you want this app to be available in your language, join translation project." = "إذا كنت تريد أن يكون هذا التطبيق متاحا بلغتك ، فانضم إلى مشروع الترجمة.";
|
||||
"Translations" = "الترجمات";
|
||||
"No documents" = "لا توجد مستندات";
|
||||
@@ -339,56 +339,56 @@
|
||||
"Share files from Finder on a Mac\nor iTunes on Windows" = "مشاركة الملفات من Finder على جهاز Mac\nأو iTunes على Windows";
|
||||
"Home" = "الصفحة الرئيسية";
|
||||
"Show Open Videos quick actions" = "إظهار الإجراءات السريعة لمقاطع الفيديو المفتوحة";
|
||||
"Recent History" = "التاريخ الحديث";
|
||||
"Show Favorites" = "إظهار المفضلات";
|
||||
"Recent History" = "سجل تاريخ مؤخرًا";
|
||||
"Show Favorites" = "إظهار المفضلة";
|
||||
"Inspector visibility" = "امكانية رؤية المفتش";
|
||||
"Edit Favorites…" = "تعديل المفضلات…";
|
||||
"Edit Favorites…" = "تعديل المفضلة…";
|
||||
"Buttons labels" = "تسميات الأزرار";
|
||||
"Show Documents" = "عرض الوثائق";
|
||||
"Show Documents" = "إظهار الوثائق";
|
||||
"Pages toolbar position" = "موضع شريط أدوات الصفحات";
|
||||
"Show Inspector" = "عرض المفتش";
|
||||
"Show Inspector" = "إظهار المفتش";
|
||||
"Reload manifest" = "إعادة تحميل البيان";
|
||||
"Open" = "فتح";
|
||||
"Video actions buttons" = "أزرار إجراءات الفيديو";
|
||||
"Open Files" = "فتح الملفات";
|
||||
"Channels" = "القنوات";
|
||||
"Channel" = "قناة";
|
||||
"Shorts" = "فيديوهات قصيرة";
|
||||
"Verified" = "مصدق عليها";
|
||||
"Live Streams" = "البثوث المباشرة";
|
||||
"Channel" = "القناة";
|
||||
"Shorts" = "مقاطع الفيديو القصيرة";
|
||||
"Verified" = "تم التحقق منه";
|
||||
"Live Streams" = "بثوث مباشرة";
|
||||
"Are you sure you want to remove %@ location?" = "هل أنت متأكد أنك تريد إزالة موقع @%؟";
|
||||
"Could not delete document" = "تعذر حذف المستند";
|
||||
"\"%@\" will be irreversibly removed from this device." = "ستتم إزالة \"%@\" بشكل لا رجعة فيه من هذا الجهاز.";
|
||||
"Are you sure you want to remove this document?" = "هل أنت متأكد من أنك تريد إزالة هذا المستند؟";
|
||||
"Open Video" = "افتح الفيديو";
|
||||
"Address" = "عنوان";
|
||||
"Remove…" = "أزيل…";
|
||||
"Show sidebar" = "عرض الشريط الجانبي";
|
||||
"Open Video" = "فتح الفيديو";
|
||||
"Address" = "العنوان";
|
||||
"Remove…" = "إزالة…";
|
||||
"Show sidebar" = "إظهار الشريط الجانبي";
|
||||
"Remove Location" = "إزالة الموقع";
|
||||
" subscribers" = " المتابعين";
|
||||
"Accounts" = "الحسابات";
|
||||
"10 seconds forwards/backwards" = "عشرة ثوان إلى الأمام/الخلف";
|
||||
"10 seconds forwards/backwards" = "10 ثوان إلى الأمام/للخلف";
|
||||
|
||||
/* Video date filter in search
|
||||
Video duration filter in search */
|
||||
"Any" = "أي";
|
||||
"Are you sure you want to clear search history?" = "هل أنت متأكد من أنك تريد مسح سجل البحث؟";
|
||||
"Add to Favorites" = "أضف إلى المفضلات";
|
||||
"Add to Favorites" = "إضافة إلى المفضلة";
|
||||
"Anonymous" = "مجهول";
|
||||
"Are you sure you want to delete playlist?" = "هل أنت متأكد من أنك تريد حذف قائمة التشغيل؟";
|
||||
"Are you sure you want to clear history of watched videos?" = "هل أنت متأكد من أنك تريد مسح سجل مقاطع الفيديو التي تمت مشاهدتها؟";
|
||||
"Clear the queue" = "امسح قائمة الانتظار";
|
||||
"Are you sure you want to delete playlist?" = "هل أنت متأكد من أنك تريد حذف قائمة تشغيل؟";
|
||||
"Are you sure you want to clear history of watched videos?" = "هل أنت متأكد من أنك تريد مسح سجل مقاطع الفيديو التي تمت المشاهدة؟";
|
||||
"Clear the queue" = "مسح قائمة الانتظار";
|
||||
"Charging" = "جاري الشحن";
|
||||
"Close" = "أغلق";
|
||||
"Close player when starting PiP" = "أغلق المشغل عند فتح الفيديو المصغر";
|
||||
"High" = "عالية";
|
||||
"Close" = "غلق";
|
||||
"Close player when starting PiP" = "غلق المشغل عند فتح الفيديو المصغر";
|
||||
"High" = "عالي";
|
||||
"Badge color" = "لون الشارة";
|
||||
"Accounts are not supported for the application of this instance" = "الحسابات غير مدعومة للتطبيق الخاص بهذه الحالة";
|
||||
"Backend" = "الواجهة الخلفية";
|
||||
"Badge" = "شارة";
|
||||
"Close PiP when starting playing other video" = "أغلق الفيديو المصغر عند بدء تشغيل فيديو آخر";
|
||||
"Explicit reminders to like, subscribe or interact with them on any paid or free platform(s) (e.g. click on a video)." = "تذكيرات صريحة لإبداء الإعجاب بها أو الاشتراك فيها أو التفاعل معها على أي منصة (منصات) مدفوعة أو مجانية (مثل النقر فوق مقطع فيديو).";
|
||||
"Filter" = "تنقية";
|
||||
"Close PiP when starting playing other video" = "غلق الفيديو المصغر عند بدء تشغيل فيديو آخر";
|
||||
"Explicit reminders to like, subscribe or interact with them on any paid or free platform(s) (e.g. click on a video)." = "تذكيرات صريحة لإبداء الإعجاب بها أو الإشتراك فيها أو التفاعل معها على أي منصة (منصات) مدفوعة أو مجانية (مثل النقر فوق مقطع الفيديو).";
|
||||
"Filter" = " عامل التصفية";
|
||||
"Frontend URL" = "عنوان URL للواجهة الأمامية";
|
||||
"Fullscreen size" = "حجم ملء الشاشة";
|
||||
"Locations" = "مواقع";
|
||||
@@ -401,30 +401,30 @@
|
||||
|
||||
/* Video date filter in search */
|
||||
"Month" = "شهر";
|
||||
"Open \"Playlists\" tab to create new one" = "افتح علامة التبويب \"قوائم التشغيل\" لإنشاء واحدة جديدة";
|
||||
"Pause when player is closed" = "إيقاف مؤقت عند إغلاق اللاعب";
|
||||
"Open \"Playlists\" tab to create new one" = "فتح علامة التبويب \"قوائم تشغيل\" لإنشاء واحدة جديدة";
|
||||
"Pause when player is closed" = "إيقاف مؤقت عند إغلاق المشغل";
|
||||
"Play" = "تشغيل";
|
||||
"Pause when entering background" = "توقف مؤقتا عند إدخال الخلفية";
|
||||
"Pause" = "وقف مؤقت";
|
||||
"Pause when entering background" = "إيقاف مؤقت عند دخول الخلفية";
|
||||
"Pause" = "إيقاف مؤقت";
|
||||
|
||||
/* SponsorBlock category name */
|
||||
"Outro" = "الخاتمة";
|
||||
"Part of a video promoting a product or service not directly related to the creator. The creator will receive payment or compensation in the form of money or free products." = "جزء من فيديو يروج لمنتج أو خدمة لا يرتبط مباشرة بمنشئ المحتوى سيحصل المنشئ على مدفوعات أو تعويض في شكل أموال أو منتجات مجانية.";
|
||||
"Part of a video promoting a product or service not directly related to the creator. The creator will receive payment or compensation in the form of money or free products." = "جزء من الفيديو يروج لمنتج أو خدمة لا يرتبط مباشرة بمنشئ المحتوى سيحصل المنشئ على مدفوعات أو تعويض في شكل أموال أو منتجات مجانية.";
|
||||
"Password" = "كلمة المرور";
|
||||
"Picture in Picture" = "الفيديو المصغر";
|
||||
"Play All" = "تشغيل الكل";
|
||||
"Formats will be selected in order as listed.\nHLS is an adaptive format (resolution setting does not apply)." = "سيتم تحديد التنسيقات بالترتيب كما هو مدرج.\nHLS هو تنسيق قابل للتكيف (لا ينطبق إعداد الدقة).";
|
||||
"Restart/Play next" = "أعد تشغيل / شغل بعد ذلك";
|
||||
"Restart/Play next" = "أعد التشغيل / تشغيل التالي";
|
||||
"Rotate to portrait when exiting fullscreen" = "التدوير إلى عمودي عند الخروج من وضع ملء الشاشة";
|
||||
"Save history of played videos" = "حفظ تاريخ مقاطع الفيديو المشغلة";
|
||||
"Save history of played videos" = "حفظ سجل تاريخ مقاطع الفيديو المشغلة";
|
||||
"Search" = "بحث";
|
||||
"Segments typically found at the start of a video that include an animation, still frame or clip which are also seen in other videos by the same creator." = "المقاطع التي يتم العثور عليها عادة في بداية الفيديو والتي تتضمن رسما متحركا أو إطارا ثابتا أو مقطعا يظهر أيضا في مقاطع فيديو أخرى من قبل منشئ المحتوى نفسه.";
|
||||
"Segments typically found at the start of a video that include an animation, still frame or clip which are also seen in other videos by the same creator." = "المقاطع التي يتم العثور عليها عادة في بداية الفيديو والتي تتضمن رسما متحركا أو إطارا ثابتا أو مقطعا يظهر أيضا في مقاطع الفيديو الأخرى من قبل منشئ المحتوى نفسه.";
|
||||
"Show progress of watching on thumbnails" = "إظهار تقدم المشاهدة على الصور المصغرة";
|
||||
|
||||
/* Player controls layout size */
|
||||
"Smaller" = "الأصغر";
|
||||
"Switch to public locations" = "التبديل إلى المواقع العامة";
|
||||
"Show video length" = "عرض طول الفيديو";
|
||||
"Show video length" = "إظهار طول الفيديو";
|
||||
"Private" = "خاص";
|
||||
"That's nice to hear. It is fun to deliver apps other people want to use. You can consider donating to the project or help by contributing to new features development." = "من الجيد سماع ذلك. من الممتع تقديم التطبيقات التي يريد الآخرون استخدامها. يمكنك التفكير في التبرع للمشروع أو المساعدة من خلال المساهمة في تطوير ميزات جديدة.";
|
||||
|
||||
@@ -436,15 +436,15 @@
|
||||
/* Video date filter in search */
|
||||
"Today" = "اليوم";
|
||||
"Trending" = "الشائع";
|
||||
"Typically near or at the end of the video when the credits pop up and/or endcards are shown." = "عادةً ما تكون بالقرب من الفيديو أو في نهايته عند ظهور قائمة الأسماء و / أو ظهور بطاقات النهاية.";
|
||||
"Unsubscribe" = "إلغاء الاشتراك";
|
||||
"Typically near or at the end of the video when the credits pop up and/or endcards are shown." = "عادةً ما تكون بالقرب من نهاية الفيديو عند ظهور قائمة الأسماء و / أو ظهور بطاقات النهاية.";
|
||||
"Unsubscribe" = "إلغاء الإشتراك";
|
||||
|
||||
|
||||
"Public" = "علني";
|
||||
"Public" = "عام";
|
||||
"Share Logs..." = "مشاركة السجلات …";
|
||||
"Current Location" = "الموقع الحالي";
|
||||
"You can switch between profiles in playback settings controls." = "يمكنك التبديل بين ملفات التعريف في عناصر التحكم في إعدادات التشغيل.";
|
||||
"Current Playlist" = "قائمة التشغيل الحالية";
|
||||
"Current Playlist" = "قائمة تشغيل الحالية";
|
||||
"Keep last played video in the queue after restart" = "احتفظ بآخر فيديو تم تشغيله في قائمة الانتظار بعد إعادة التشغيل";
|
||||
"Cached time" = "الوقت المخزن مؤقتا";
|
||||
"It can be changed later in settings. You can use your own locations too." = "يمكن تغييره لاحقا في الإعدادات. يمكنك استخدام المواقع الخاصة بك أيضا.";
|
||||
@@ -453,19 +453,19 @@
|
||||
"Could not refresh Popular" = "تعذر تحديث المحتويات الشعبية";
|
||||
"Files" = "الملفات";
|
||||
"Could not create share link" = "تعذر إنشاء رابط مشاركة";
|
||||
"Show Home" = "عرض الصفحة الرئيسية";
|
||||
"Show Home" = "إظهار الصفحة الرئيسية";
|
||||
"Video Details" = "تفاصيل الفيديو";
|
||||
"Clear Queue before opening" = "مسح قائمة الانتظار قبل الفتح";
|
||||
"Current: %@\n%@" = "الحالي: %@\n%@";
|
||||
"Thumbnails" = "المعاينات";
|
||||
"Show Open Videos toolbar button" = "إظهار زر الفيديوهات المفتوحة في شريط الأدوات";
|
||||
"Thumbnails" = "الصور المصغرة";
|
||||
"Show Open Videos toolbar button" = "أظهار زر شريط الأدوات لمقاطع الفيديو المفتوحة";
|
||||
"URL to Open" = "الرابط المراد فتحه";
|
||||
"Enter link to open" = "أدخل الرابط للفتح";
|
||||
"Enter link to open" = "إدخال الرابط للفتح";
|
||||
"Pages buttons" = "أزرار الصفحات";
|
||||
"Could not open Files" = "لا يمكن فتح الملفات";
|
||||
"Could not open Files" = "تعذر فتح الملفات";
|
||||
"Paste" = "لصق";
|
||||
"Open Videos" = "فتح الفيديوهات";
|
||||
"Enter links to open, one per line" = "أدخل الروابط للفتح, كل رابط في سطر";
|
||||
"Open Videos" = "فتح مقاطع الفيديو";
|
||||
"Enter links to open, one per line" = "إدخال الروابط للفتح, كل رابط في سطر";
|
||||
"Playback Mode" = "وضع التشغيل";
|
||||
"Add" = "إضافة";
|
||||
"Hide" = "إخفاء";
|
||||
@@ -479,12 +479,12 @@
|
||||
"Driver" = "التعريف";
|
||||
"Show only icons" = "إظهار الأيقونات فقط";
|
||||
"Center" = "منتصف";
|
||||
"Documents" = "مستندات";
|
||||
"File" = "ملف";
|
||||
"Documents" = "المستندات";
|
||||
"File" = "الملف";
|
||||
"Codec" = "الترميز";
|
||||
"Size" = "حجم";
|
||||
"FPS" = "شريحة كل ثانية";
|
||||
"Could not find any links to open in your clipboard" = "لا يمكن العثور على روابط للفتح في الحافظة";
|
||||
"Size" = "الحجم";
|
||||
"FPS" = "إطار لكل ثانية";
|
||||
"Could not find any links to open in your clipboard" = "تعذر العثور على روابط للفتح في الحافظة";
|
||||
"Actions buttons" = "أزرار الإجراءات";
|
||||
"Locations Manifest" = "بيان المواقع";
|
||||
"Default Profile" = "الملف الشخصي الإفتراضي";
|
||||
@@ -492,14 +492,115 @@
|
||||
"Copy%@link" = "نسخ الرابط %@";
|
||||
"Share%@link" = "مشاركة الرابط %@";
|
||||
"Instance of current account" = "مثيل الحساب الحالي";
|
||||
"Seek gesture sensitivity" = "إطار حساسية الإيماءات";
|
||||
"Video" = "";
|
||||
"Audio" = "";
|
||||
"Honor orientation lock" = "";
|
||||
"Proxy videos" = "توكيل الفيديوهات";
|
||||
"Seek gesture speed" = "سرعة بحث الإيماءة";
|
||||
"Seek with horizontal swipe on video" = "للبحث بالتمرير الأفقي على الفيديو";
|
||||
"System controls show buttons for %@" = "تعرض ضوابط النظام أزرارًا لـ %@";
|
||||
"Seek gesture sensitivity" = "حساسية إيماءة التقديم";
|
||||
"Video" = "الفيديو";
|
||||
"Audio" = "الصوت";
|
||||
"Honor orientation lock" = "قفل توجيه الشرف";
|
||||
"Proxy videos" = "وكيل مقاطع الفيديو";
|
||||
"Seek gesture speed" = "سرعة إيماءة التقديم";
|
||||
"Seek with horizontal swipe on video" = "التقديم باستخدام التمرير الأفقي على الفيديو";
|
||||
"System controls show buttons for %@" = "نظام عناصر التحكم إظهار الأزرار لـ %@";
|
||||
"Wiki" = "ويكي";
|
||||
"Sample Rate" = "";
|
||||
"Sample Rate" = "معدل العينة";
|
||||
"Short videos: visible" = "مقاطع الفيديو القصيرة: مرئية";
|
||||
"Show channel avatars in channels lists" = "إظهار الصور الرمزية للقناة في قوائم القنوات";
|
||||
"Show channel avatars in videos lists" = "أظهر الصور الرمزية للقناة في قوائم مقاطع الفيديو";
|
||||
"Keep channels with unwatched videos on top of subscriptions list" = "احتفظ بالقنوات التي تحتوي على مقاطع الفيديو غير المشاهدة على رأس قائمة الاشتراكات";
|
||||
"Show video context menu options to force selected backend" = "أظهر خيارات قائمة سياق الفيديو لفرض الواجهة الخلفية المحددة";
|
||||
"Play Now in AVPlayer" = "تشغيل الآن في AVPlayer";
|
||||
"Play Now in MPV" = "تشغيل الآن في MPV";
|
||||
"Enter account credentials to connect..." = "أدخل بيانات اعتماد الحساب للاتصال...";
|
||||
"Seek" = "التقديم";
|
||||
"Show scroll to top button in comments" = "أظهر التمرير إلى الزر العلوي في التعليقات";
|
||||
"Enter location address to connect..." = "أدخل عنوان الموقع للإتصال...";
|
||||
"File Extension" = "ملحق الملف";
|
||||
"Public account" = "حساب عام";
|
||||
"Your Accounts" = "حساباتك";
|
||||
"Browse without account" = "تصفح بدون حساب";
|
||||
"Mark channel feed as unwatched" = "ضع علامة على تغذية القناة لم تتم المشاهدة";
|
||||
"Play all unwatched" = "تشغيل كل شيء لم تتم المشاهدة";
|
||||
"Player Bar" = "شريط المشغل";
|
||||
"Double tap gesture" = "إيماءة بنقرة المزدوجة";
|
||||
"Open expanded" = "فتح موسعاً";
|
||||
"Always show controls buttons" = "دائما إظهار أزرار عناصر التحكم";
|
||||
"Clear all" = "مسح الكل";
|
||||
"Maximum width expanded" = "الحد الأقصى للعرض الموسع";
|
||||
"Single tap gesture" = "إيماءة بنقرة الواحدة";
|
||||
"Tap and hold channel thumbnail to open context menu with more actions" = " اضغط مع الاستمرار على الصورة المصغرة للقناة لفتح قائمة السياق مع المزيد من الإجراءات";
|
||||
"Right click channel thumbnail to open context menu with more actions" = "نقر زر الماوس الأيمن فوق الصورة المصغرة للقناة لفتح قائمة السياق مع المزيد من الإجراءات";
|
||||
"Seeking" = "التقديم";
|
||||
"Gesture: fowards" = "إيماءة: إلى الأمام";
|
||||
"Show unwatched feed badges" = "أظهر شارات التغذية التي لم تتم المشاهدة";
|
||||
"Controls button: forwards" = "زر عناصر التحكم: إلى الأمام";
|
||||
"Gesture: backwards" = "إيماءة: للخلف";
|
||||
"Hide player" = "إخفاء المشغل";
|
||||
"Gesture settings control skipping interval for double tap gesture on left/right side of the player. Changing system controls settings requires restart." = "التحكم في إعدادات إيماءة الفاصل الزمني للتخطي لإيماءة النقر المزدوج على الجانب الأيسر / الأيمن من المشغل. تغيير إعدادات نظام عناصر التحكم يتطلب إعادة التشغيل.";
|
||||
"Controls Buttons" = "أزرار عناصر التحكم";
|
||||
"Play next item" = "تشغيل العنصر التالي";
|
||||
"Lock orientation" = "إقفال التدوير";
|
||||
"Music Mode" = "وضع الموسيقى";
|
||||
"Close video" = "غلق الفيديو";
|
||||
"Total size: %@" = "الحجم الإجمالي: %@";
|
||||
"Actions Buttons" = "أزرار الإجراءات";
|
||||
"Subscribe/Unsubscribe" = "الإشتراك/إلغاء الإشتراك";
|
||||
"Show cache status" = "أظهر حالة ذاكرة التخزين المؤقت";
|
||||
"Cache" = "ذاكرة التخزين المؤقت";
|
||||
"Maximum feed items" = "الحد الأقصى لعناصر التغذية";
|
||||
"Open channels with description expanded" = "فتح القنوات مع الوصف موسعاً";
|
||||
"Close video and player on end" = "غلق الفيديو والمشغل عند النهاية";
|
||||
"Use system controls with AVPlayer" = "استخدم نظام عناصر التحكم مع AVPlayer";
|
||||
"Rotate when entering fullscreen on landscape video" = "قم بالتدوير عند إدخال ملء الشاشة على الفيديو الأفقي";
|
||||
"Landscape left" = "يسار الأفقي";
|
||||
"Landscape right" = "يمين الأفقي";
|
||||
"No rotation" = "لا تدوير";
|
||||
"System controls" = "نظام عناصر التحكم";
|
||||
"Controls button: backwards" = "زر عناصر التحكم: للخلف";
|
||||
"Are you sure you want to clear cache?" = "هل أنت متأكد من أنك تريد مسح ذاكرة التخزين المؤقت؟";
|
||||
"Gesture settings control skipping interval for remote arrow buttons (for 2nd generation Siri Remote or newer). Changing system controls settings requires restart." = "التحكم في إعدادات إيماءة الفاصل الزمني للتخطي لأزرار الأسهم عن بعد (للجيل الثاني من Siri Remote أو أحدث). تغيير إعدادات نظام عناصر التحكم يتطلب إعادة التشغيل.";
|
||||
"Opened File" = "ملف مفتوح";
|
||||
"Opening file..." = "فتح الملف...";
|
||||
"Short videos: hidden" = "مقاطع الفيديو القصيرة: مخفية";
|
||||
"Mark channel feed as watched" = "ضع علامة على تغذية القناة تمت المشاهدة";
|
||||
"Gesture settings control skipping interval for double click on left/right side of the player. Changing system controls settings requires restart." = "التحكم في إعدادات إيماءة فترة التخطي للنقر المزدوج على الجانب الأيسر/الأيمن من المشغل. تغيير إعدادات نظام عناصر التحكم يتطلب إعادة التشغيل.";
|
||||
"Available" = "متوفر";
|
||||
"Startup section" = "قسم بدء التشغيل";
|
||||
"Home Settings" = "إعدادات الصفحة الرئيسية";
|
||||
"Watched: hidden" = "تمت المشاهدة: مخفي";
|
||||
"Watched: visible" = "تمت المشاهدة: مرئي";
|
||||
"No videos to show" = "لا توجد مقاطع فيديو لعرضها";
|
||||
"(watched and shorts hidden)" = "(تمت المشاهدة ومقاطع قصيرة مخفية)";
|
||||
"(shorts hidden)" = "(مقاطع قصيرة مخفية)";
|
||||
"Disable filters" = "تعطيل عوامل التصفية";
|
||||
"(watched hidden)" = "(تم المشاهدة مخفية)";
|
||||
"Limit" = "حد";
|
||||
"Are you sure you want to remove %@ from Favorites?" = "هل أنت متأكد من أنك تريد إزالة %@ من المفضلة؟";
|
||||
"List" = "قائمة";
|
||||
"Cells" = "خلايا";
|
||||
"Toggle size" = "حجم التبديل";
|
||||
"Toggle player" = "تبديل المشغل";
|
||||
"Show Next in Queue" = "أظهر التالي في قائمة الانتظار";
|
||||
"Show toggle watch status button" = "إظهار تبديل زر حالة الساعة";
|
||||
"Next in Queue" = "التالي في قائمة الإنتظار";
|
||||
"Do nothing" = "لا تفعل شيئا";
|
||||
"Open channel" = "فتح القناة";
|
||||
"Inspector" = "مفتش";
|
||||
"Open video description expanded" = "فتح وصف الفيديو موسعاً";
|
||||
"Feed" = "تغذية";
|
||||
"Mark all as unwatched" = "ضع علامة على الجميع لم تتم المشاهدة";
|
||||
"Mark all as watched" = "ضع علامة على الجميع تمت المشاهدة";
|
||||
"Queue - shuffled" = "قائمة الإنتظار - تم خلطها";
|
||||
"Replay" = "إعادة المشغل";
|
||||
"Lock" = "قفل";
|
||||
"Fullscreen" = "ملء الشاشة";
|
||||
"Loop one" = "حلقة واحدة";
|
||||
"Playback Settings" = "إعدادات التشغيل";
|
||||
"Description" = "وصف";
|
||||
"Autoplay next" = "التشغيل التلقائي التالي";
|
||||
"Stream" = "بث";
|
||||
"Chapters (if available)" = "الفصول (إن وجدت)";
|
||||
"Open vertical chapters expanded" = "فتح الفصول الرأسية موسعاً";
|
||||
"No preview" = "لا توجد معاينة";
|
||||
"Description preview" = "معاينة الوصف";
|
||||
"Podcasts" = "بودكاست";
|
||||
"Releases" = "الإصدارات";
|
||||
"Add %@" = "إضافة %@";
|
||||
|
||||
4
Shared/ars.lproj/Localizable.strings
Normal file
4
Shared/ars.lproj/Localizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
|
||||
" subscribers" = " المشتركين";
|
||||
"%@ Channel" = "القناة";
|
||||
@@ -598,3 +598,7 @@
|
||||
"Podcasts" = "Podcasts";
|
||||
"Releases" = "Releases";
|
||||
"Add %@" = "Add %@";
|
||||
"Description preview" = "Description preview";
|
||||
"No preview" = "No preview";
|
||||
"Open vertical chapters expanded" = "Open vertical chapters expanded";
|
||||
"Chapters (if available)" = "Chapters (if available)";
|
||||
|
||||
@@ -600,3 +600,7 @@
|
||||
"Add %@" = "Añada %@";
|
||||
"Show video context menu options to force selected backend" = "Mostrar las opciones del menú contextual del vídeo para forzar el backend seleccionado";
|
||||
"Play Now in AVPlayer" = "Reproducir ahora en AVPlayer";
|
||||
"Description preview" = "Vista previa de la descripción";
|
||||
"No preview" = "Sin vista previa";
|
||||
"Open vertical chapters expanded" = "Abrir capítulos verticales ampliados";
|
||||
"Chapters (if available)" = "Capítulos (si están disponibles)";
|
||||
|
||||
485
Shared/fa.lproj/Localizable.strings
Normal file
485
Shared/fa.lproj/Localizable.strings
Normal file
@@ -0,0 +1,485 @@
|
||||
|
||||
|
||||
"Podcasts" = "پادکستها";
|
||||
"Reset watched status when playing again" = "بازنشانی وضعیت تماشای ویدیو هنگام تماشای مجدد";
|
||||
"Finding something to play..." = "یافتن چیزی برای پخش…";
|
||||
"Available" = "در دسترس";
|
||||
|
||||
/* Player controls layout size */
|
||||
"Very Large" = "خیلی بزرگ";
|
||||
"Audio" = "صدا";
|
||||
"Custom Locations" = "سرویس دهندگان سفارشی";
|
||||
"Always use AVPlayer for live videos" = "همیشه از AVPlayer برای ویدیوهای پخش زنده استفاده کن";
|
||||
"Clear Search History..." = "پاک کردن سابقهٔ جست و جو…";
|
||||
"Related" = "مرتبط";
|
||||
"Close Video" = "بستن پخش کننده";
|
||||
"Add to %@" = "افزودن به %@";
|
||||
"Could not open playlist" = "فهرست پخش باز نشد";
|
||||
"Disabled" = "غیرفعال";
|
||||
"Share..." = "اشتراک گذاری…";
|
||||
"For videos which feature music as the primary content." = "برای ویدیوهایی که محتوای اصلیشان موسیقی است.";
|
||||
"Save history of searches, channels and playlists" = "ذخیرهٔ سابقهٔ جست و جو، کانالها و فهرستهای پخش";
|
||||
"Clear Queue before opening" = "صف را پیش از باز کردن خالی کن";
|
||||
"Show playback statistics" = "نمایش آمار پخش";
|
||||
"Could not extract channel information" = "اطلاعات کانال دریافت نشد";
|
||||
"Video" = "ویدیو";
|
||||
"Matrix Chat" = "چت Matrix";
|
||||
"Loop one" = "پخش دوبارهٔ تکی";
|
||||
"Settings" = "تنظیمات";
|
||||
"10 seconds forwards/backwards" = "۱۰ ثانیه جلو/عقب";
|
||||
"Show progress of watching on thumbnails" = "پیشرفت پخش را روی تصویر بندانگشتی نشان بده";
|
||||
"Recents" = "تازهترینها";
|
||||
"Could not open channel" = "کانال باز نمیشود";
|
||||
"Select location closest to you:" = "نزدیکترین سرویس دهنده را انتخاب کنید:";
|
||||
"Fullscreen size" = "ابعاد تمام صفحه";
|
||||
"No Playlists" = "بدون فهرست پخش";
|
||||
"Highest quality" = "بالاترین کیفیت";
|
||||
"Edit..." = "ویرایش…";
|
||||
"Based on system color scheme" = "براساس طرح رنگ سیستم";
|
||||
"Quality" = "کیفیت";
|
||||
"Pause" = "مکث";
|
||||
"Controls Buttons" = "دکمههای کنترل";
|
||||
|
||||
/* Subscriptions title */
|
||||
"Subscriptions" = "اشتراکها";
|
||||
" subscribers" = " مشترکان";
|
||||
"Channels" = "کانالها";
|
||||
"Resolution" = "وضوح تصویر";
|
||||
"Button" = "دکمه";
|
||||
"Badge & Decreased opacity" = "نشان و کاهش شفافیت";
|
||||
"Milestones" = "نقطهٔ عطف";
|
||||
"Are you sure you want to restore default quality profiles?" = "آیا از بازنشانی نمایههای کیفیت پیشفرض مطمئنید؟";
|
||||
"Show sidebar" = "نمایش نوار کناری";
|
||||
"Error" = "خطا";
|
||||
|
||||
/* Video date filter in search */
|
||||
"Week" = "هفته";
|
||||
"Make default" = "پیش فرض شو";
|
||||
"Verified" = "تاییدشده";
|
||||
"Subscribe/Unsubscribe" = "اشتراک/لغو اشتراک";
|
||||
"Close player when closing video" = "هنگامی که ویدیو بسته میشود پخش کننده را ببند";
|
||||
"It can be changed later in settings. You can use your own locations too." = "میتوانید بعدا در تنظیمات تغییر دهید. همچنان میتوانید از سرویس دهندهٔ خودتان استفاده کنید.";
|
||||
"Comments are disabled" = "نظرها غیرفعال است";
|
||||
"Queue is empty" = "صف خالیست";
|
||||
"Playback Mode" = "وضعیت پخش";
|
||||
"Country" = "کشور";
|
||||
"Share" = "اشتراکگذاری";
|
||||
"Play in PiP" = "در تصویر-در-تصویر پخش کن";
|
||||
"System controls buttons" = "دکمههای کنترل سیستم";
|
||||
"Picture in Picture" = "تصویر-در-تصویر";
|
||||
"Comments" = "نظرها";
|
||||
"\"%@\" will be irreversibly removed from this device." = "\"%@\" از دستگاه حذف شده و غیرقابل بازگردانی خواهد بود.";
|
||||
"Now Playing" = "در حال پخش";
|
||||
"Charging" = "در حال شارژ";
|
||||
"Refresh" = "تازهسازی";
|
||||
|
||||
/* Player controls layout size */
|
||||
"Large" = "بزرگ";
|
||||
"Are you sure you want to unsubscribe from %@?" = "آیا از لفو اشتراک %@ مطمئنید؟";
|
||||
|
||||
/* Video duration filter in search */
|
||||
"Short" = "Short";
|
||||
"Switch to public locations" = "به سرویس دهندهٔ عمومی منتقل شو";
|
||||
"Profiles" = "نمایهها";
|
||||
"New Playlist" = "فهرست پخش جدید";
|
||||
"Automatic" = "خودکار";
|
||||
"Opening file..." = "در حال باز کردن فایل…";
|
||||
"Add Quality Profile" = "افزودن نمایهٔ کیفیت";
|
||||
"Close video after playing last in the queue" = "ویدیو را پس از پخش آخرین مورد فهرست ببند";
|
||||
|
||||
/* Player controls layout size */
|
||||
"Small" = "کوچک";
|
||||
"Clear" = "پاک کردن";
|
||||
"Anonymous" = "ناشناس";
|
||||
"Channel could not be found" = "کانال پیدا نشد";
|
||||
"Add to Favorites" = "افزودن به موردعلاقهها";
|
||||
"Total size: %@" = "مجموع اندازه: %@";
|
||||
"Wi-Fi" = "اینترنت Wi-Fi";
|
||||
|
||||
/* Selected video is being played */
|
||||
"Watching now" = "در حال تماشا";
|
||||
"Size" = "اندازه";
|
||||
"Connection failed" = "اتصال موفق نبود";
|
||||
"Could not open video" = "ویدیو باز نشد";
|
||||
"Badge color" = "رنگ نشان";
|
||||
|
||||
/* Player controls layout size */
|
||||
"Medium" = "متوسط";
|
||||
"Reset search filters" = "بازنشانی صافیهای جست و جو";
|
||||
"Play" = "پخش";
|
||||
|
||||
/* Trending category, section containing all kinds of videos */
|
||||
"All" = "همه";
|
||||
"No videos to show" = "ویدیویی برای نمایش نیست";
|
||||
"Username" = "نام کاربری";
|
||||
"Don't use public locations" = "از سرویس دهندگان عمومی استفاده نکنید";
|
||||
"I have a feature request" = "درخواست ویژگی و قابلیت دارم";
|
||||
"Clear All Recents" = "همهٔ موارد اخیر را پاک کن";
|
||||
"Regular size" = "ابعاد معمولی";
|
||||
"Autoplay next" = "پخش خودکار بعدی";
|
||||
"Shuffle" = "شافل";
|
||||
"This cannot be reverted" = "این گزینه غیرقابل بازگشت است";
|
||||
"unknown" = "ناشناخته";
|
||||
"Could not create share link" = "پیوند اشتراکگذاری ساخته نشد";
|
||||
"Home Settings" = "تنظیمات صفحهٔ اصلی";
|
||||
"You have no Playlists" = "فهرست پخشی ندارید";
|
||||
"Watched: visible" = "تماشاشدهها: قابل رویت";
|
||||
"Are you sure you want to remove this document?" = "از حذف این سند مطمئنید؟";
|
||||
|
||||
/* Video sort order in search */
|
||||
"Rating" = "امتیازدهی";
|
||||
|
||||
|
||||
"Public" = "عمومی";
|
||||
"Add to Playlist..." = "افزودن به فهرست پخش…";
|
||||
"Category" = "دستهبندی";
|
||||
"Fullscreen" = "تمام صفحه";
|
||||
"No description" = "بدون شرح";
|
||||
"Gaming" = "بازی";
|
||||
"Apply to all" = "اعمال روی همه";
|
||||
"Close" = "بستن";
|
||||
|
||||
/* Video date filter in search */
|
||||
"Year" = "سال";
|
||||
"Continue" = "ادامه";
|
||||
"Show channel name" = "نمایش نام کانال";
|
||||
"Remove Location" = "حذف سرویس دهنده";
|
||||
"Large layout is not suitable for all devices and using it may cause controls not to fit on the screen." = "چیدمان بزرگ مناسب همهٔ دستگاهها نیست و استفاده از آن ممکن است باعث بیرون ماندن کنترلها از صفحهٔ نمایش شود.";
|
||||
"Shorts" = "Shortها";
|
||||
"Show Favorites" = "نمایش موردعلاقهها";
|
||||
"Interface" = "رابط کاربری";
|
||||
"Unsubscribe" = "لغو اشتراک";
|
||||
"URL" = "نشانی";
|
||||
"Short videos: visible" = "ویدیوهای Short: قابل رویت";
|
||||
"Hardware decoder" = "دکودر سختافزاری";
|
||||
"Search history is empty" = "سابقهٔ جست و جو خالیست";
|
||||
"Playback Settings" = "تنظیمات پخش";
|
||||
"Are you sure you want to clear search history?" = "آیا از حذف سابقهٔ جست و جو مطمئنید؟";
|
||||
"Could not load video" = "ویدیو دریافت نشد";
|
||||
"Show video length" = "طول ویدیو را نشان بده";
|
||||
"Hide" = "مخفی کردن";
|
||||
"Clear Search History" = "پاک کردن سابقهٔ جست و جو";
|
||||
"Play Now in MPV" = "الان در MPV پخش کن";
|
||||
"Switch to other public location" = "به یک سرویس دهندهٔ عمومی دیگر منتقل شو";
|
||||
"Restart the app to apply the settings above." = "برای اعمال تنظیمات بالا اپ را دوباره راهاندازی کنید.";
|
||||
"Are you sure you want to clear cache?" = "آیا از حذف حافظهٔ مخفی مطمئنید؟";
|
||||
"Filter" = "صافی";
|
||||
"Open Settings" = "باز کردن تنظیمات";
|
||||
"Buffering stream..." = "بافر کردن استریم…";
|
||||
"Playlist is empty\n\nTap and hold on a video and then \n\"Add to Playlist\"" = "فهرست پخش خالیست\n\nروی ویدیو ضربه بزنید و نگه دارید، سپس\n\"افزودن به فهرست پخش\" را انتخاب کنید";
|
||||
"Playback history is empty" = "سابقهٔ پخش خالیست";
|
||||
"Chapters" = "فصلهای ویدیو";
|
||||
"(watched and shorts hidden)" = "(تماشاشدهها و Shortها مخفی)";
|
||||
|
||||
/* Video sort order in search */
|
||||
"Views" = "بازدیدها";
|
||||
"I want to ask a question" = "میخواهم سوالی بپرسم";
|
||||
"Show keywords" = "نمایش کلیدواژهها";
|
||||
"Edit" = "ویرایش";
|
||||
"Could not refresh Playlists" = "فهرست پخش بازسازی نشد";
|
||||
"Categories to Skip" = "دستهبندیهایی که رد میشوند";
|
||||
"Private" = "خصوصی";
|
||||
"This video could not be opened" = "این ویدیو باز نمیشود";
|
||||
"Center" = "وسط";
|
||||
"High" = "بالا";
|
||||
|
||||
/* Video date filter in search */
|
||||
"Today" = "امروز";
|
||||
"Remove from Playlist" = "حذف از فهرست پخش";
|
||||
"URL to Open" = "نشانی برای باز کردن";
|
||||
"Replies" = "پاسخها";
|
||||
"Movies" = "فیلمها";
|
||||
"Unlisted" = "فهرست نشده";
|
||||
"Wiki" = "ویکی";
|
||||
"Sort" = "ترتیب";
|
||||
"Frontend URL" = "نشانی Frontend";
|
||||
"Restore default profiles..." = "بازنشانی نمایههای پیشفرض…";
|
||||
"Any format" = "هر فرمتی";
|
||||
"Open" = "باز کردن";
|
||||
"Filter: active" = "صافی: فعال";
|
||||
"Play Music" = "موسیقی را پخش کن";
|
||||
"Clear All" = "همه را پاک کن";
|
||||
"Add Account" = "افزودن حساب کاربری";
|
||||
"Cancel" = "لغو";
|
||||
"Accounts are not supported for the application of this instance" = "حساب کاربری در این سرویس دهنده پشتیبانی نمیشود";
|
||||
"System controls" = "کنترلهای سیستم";
|
||||
"Hide player" = "پخشکننده را مخفی کن";
|
||||
"Lock orientation" = "قفل چرخش صفحه";
|
||||
"Cache" = "حافظهٔ مخفی";
|
||||
|
||||
/* Video date filter in search */
|
||||
"Hour" = "ساعت";
|
||||
"Open Videos" = "باز کردن ویدیو";
|
||||
"Add" = "افزودن";
|
||||
"Show icons and text when space permits" = "اگر جا بود متن و آیکنها را نشان بده";
|
||||
"Documents" = "مستندات";
|
||||
"Play Next" = "بعدی را پخش کن";
|
||||
"Battery" = "باتری";
|
||||
"Rotate to portrait when exiting fullscreen" = "پس از خروج از تمام صفحه به حالت عمودی بچرخ";
|
||||
"Could not delete document" = "سند حذف نشد";
|
||||
"Show account username" = "نمایش نام کاربری";
|
||||
"Queue - shuffled" = "صف - شافل";
|
||||
"Source" = "منبع";
|
||||
"Always" = "همیشه";
|
||||
|
||||
/* Video duration filter in search */
|
||||
"Long" = "دراز";
|
||||
"Mark video as watched after playing" = "ویدیو را پس از پخش به عنوان تماشا شده نشانه بگذار";
|
||||
"%@ Playlist" = "%@ فهرست پخش";
|
||||
"Playback queue is empty" = "صف پخش خالیست";
|
||||
"Add profile..." = "افزودن نمایه…";
|
||||
"Short videos: hidden" = "ویدیوهای Short: مخفی";
|
||||
"No documents" = "بدون مستندات";
|
||||
"Lowest" = "پایینترین";
|
||||
"Not available" = "در دسترس نیست";
|
||||
"Add Location" = "افزودن سرویس دهنده";
|
||||
"Public Locations" = "سرویس دهندگان عمومی";
|
||||
"Remove from history" = "حذف از سابقه";
|
||||
"Could not update your token." = "Token شما به روز نشد.";
|
||||
"Channel" = "کانال";
|
||||
"Limit" = "محدود";
|
||||
|
||||
/* Locations settings, custom instance is selected as current */
|
||||
"Custom" = "سفارشی";
|
||||
"Close video" = "ویدیو را ببند";
|
||||
"Remove from Favorites" = "حذف از موردعلاقهها";
|
||||
"Watched: hidden" = "تماشاشده: مخفی";
|
||||
"Close PiP and open player when application enters foreground" = "هنگامی که اپ باز میشود تصویر-در-تصویر را ببند و پخشکننده را باز کن";
|
||||
"Show Documents" = "نمایش مستندات";
|
||||
|
||||
/* SponsorBlock category name */
|
||||
"Outro" = "انتها";
|
||||
"Music Mode" = "وضعیت موسیقی";
|
||||
"Edit Playlist" = "ویرایش فهرست پخش";
|
||||
"Mark as watched" = "نشانه گذاری به عنوان تماشا شده";
|
||||
"Stream" = "استریم";
|
||||
"Remove…" = "حذف…";
|
||||
"Add Location..." = "افزودن سرویس دهنده…";
|
||||
"%@ subscribers" = "%@ مشترکان";
|
||||
|
||||
/* SponsorBlock category name */
|
||||
"Sponsor" = "حامی مالی";
|
||||
"Remove from the queue" = "حذف از صف";
|
||||
"Quality Profile" = "نمایهٔ کیفیت";
|
||||
"LIVE" = "زنده";
|
||||
"Accounts" = "حسابها";
|
||||
"Done" = "انجام شد";
|
||||
"Enter links to open, one per line" = "پیوندها را وارد کنید تا باز شوند، هر خط یک پیوند";
|
||||
"Files" = "فایلها";
|
||||
"No results" = "بدون نتیجه";
|
||||
"Current: %@\n%@" = "فعلی: %@\n%@";
|
||||
"Donations" = "حمایت مالی";
|
||||
"%@ Channel" = "%@ کانال";
|
||||
"Do nothing" = "کاری نکن";
|
||||
"File" = "فایل";
|
||||
"Yattee %@ (build %@)" = "Yattee %@ (بیلد %@)";
|
||||
"Proxy videos" = "پروکسی کردن ویدیوها";
|
||||
"Player" = "پخشکننده";
|
||||
"Play next item" = "مورد بعدی را پخش کن";
|
||||
"Controls" = "کنترلها";
|
||||
"This URL could not be opened" = "این نشانی باز نمیشود";
|
||||
"Trending" = "پرطرفدار";
|
||||
"Opening audio stream..." = "باز کردن استریم صوتی…";
|
||||
"Statistics" = "آمار";
|
||||
"Pause when player is closed" = "پس از بسته شدن پخشکننده مکث کن";
|
||||
"Play All" = "همه را پخش کن";
|
||||
"Sort: %@" = "ترتیب: %@";
|
||||
|
||||
/* Loading stream OSD */
|
||||
"Opening %@ stream..." = "باز کردن استریم %@…";
|
||||
"Next in Queue" = "مورد بعد در صف";
|
||||
"Honor orientation lock" = "قفل چرخش صفحه را در نظر بگیر";
|
||||
"Rate" = "امتیاز";
|
||||
"Playing Next" = "پخش بعدی";
|
||||
"%lld videos" = "%lld ویدیو";
|
||||
"Enable Return YouTube Dislike" = "فعال کردن بازگرداندن YouTube Dislike";
|
||||
"Country Name or Code" = "نام یا کد کشور";
|
||||
"Clear the queue" = "پاک کردن صف";
|
||||
"Could not extract playlist ID" = "شناسهٔ فهرست پخش دریافت نشد";
|
||||
"Could not load streams" = "استریم قابل دریافت نیست";
|
||||
"Are you sure you want to clear history of watched videos?" = "آیا از حذف سابقهٔ تماشا مطمئنید؟";
|
||||
"Mark all as unwatched" = "همه را به عنوان تماشانشده نشانه بگذار";
|
||||
"Thumbnails" = "بندانگشتیها";
|
||||
"Left" = "چپ";
|
||||
"Open \"Playlists\" tab to create new one" = "زبانهٔ «فهرست پخش» را باز کنید تا یک فهرست جدید بسازید";
|
||||
"Replay" = "پخش دوباره";
|
||||
"Remove" = "حذف کردن";
|
||||
"Close player when starting PiP" = "هنگامی که تصویر-در-تصویر آغاز میشود پخش کننده را ببند";
|
||||
"Controls button: backwards" = "دکمههای کنترل: عقب";
|
||||
"I am lost" = "گم شدهام";
|
||||
"Show only icons" = "فقط آیکنها را نشان بده";
|
||||
"Clear all" = "همه را پاک کن";
|
||||
"Shuffle All" = "شافل کردن همه";
|
||||
"Discord Server" = "سرور Discord";
|
||||
"Subscribe" = "اشتراک";
|
||||
"Loading..." = "درحال دریافت…";
|
||||
"Edit Favorites…" = "ویرایش موردعلاقهها…";
|
||||
"Sections" = "بخشها";
|
||||
"Play Last" = "آخرین را پخش کن";
|
||||
"Pages buttons" = "دکمههای صفحهها";
|
||||
"No comments" = "بدون نظر";
|
||||
"Connected successfully (%@)" = "با موفقیت وصل شد (%@)";
|
||||
"(watched hidden)" = "(تماشاشدهها مخفی)";
|
||||
"Enable logging" = "فعال کردن ثبت log";
|
||||
"Are you sure you want to delete playlist?" = "آیا از حذف فهرست پخش مطمئنید؟";
|
||||
"Description preview" = "پیشنمایش شرح";
|
||||
"Open Files" = "باز کردن فایلها";
|
||||
"Hide sidebar" = "نوار کناری را مخفی کن";
|
||||
"Show anonymous accounts" = "نمایش حسابهای ناشناس";
|
||||
"Always show controls buttons" = "همیشه دکمههای کنترل را نشان بده";
|
||||
"Mark all as watched" = "همه را به عنوان تماشاشده نشانه بگذار";
|
||||
|
||||
/* Player controls layout size */
|
||||
"Smaller" = "کوچکتر";
|
||||
"Search" = "جست و جو";
|
||||
"Favorites" = "مورد علاقهها";
|
||||
"Address" = "نشانی";
|
||||
"MPV Documentation" = "مستندات MPV";
|
||||
"If you are reporting a bug, include all relevant details (especially: app version, used device and system version, steps to reproduce)." = "اگر ایرادی را گزارش میکنید، همهٔ جزییات مربوط (به ویژه نسخهٔ اپ، دستگاه مورد استفاده و نسخهٔ سیستم عامل و گامهایی که برای بازسازی ایراد لازم است) را ذکر کنید.";
|
||||
"Only when signed in" = "تنها پس از ورود";
|
||||
"Sign In Required" = "لازم است که وارد شوید";
|
||||
|
||||
/* SponsorBlock category name */
|
||||
"Self-promotion" = "تبلیغ شخصی";
|
||||
"Only for local files and URLs" = "فقط برای فایلهای محلی و پیوندها";
|
||||
|
||||
/* SponsorBlock category name */
|
||||
"Interaction" = "تعامل";
|
||||
"Preferred Formats" = "فرمتهای ترجیحی";
|
||||
"Reset" = "بازنشانی";
|
||||
"Badge" = "نشان";
|
||||
"Error when accessing playlist" = "خطا هنگام دسترسی به فهرست پخش";
|
||||
"Right" = "راست";
|
||||
"Blue" = "آبی";
|
||||
"Low quality" = "کیفیت پایین";
|
||||
"Popular" = "محبوب";
|
||||
"List" = "فهرست";
|
||||
"Create Playlist" = "ساخت فهرست پخش";
|
||||
"Show sidebar when space permits" = "اگر جا بود نوارکناری را نشان بده";
|
||||
"Locations" = "سرویس دهندگان";
|
||||
"Playlists" = "فهرستهای پخش";
|
||||
"Current Location" = "سرویس دهندهٔ فعلی";
|
||||
"Could not open Files" = "فایل باز نشد";
|
||||
"Regular Size" = "ابعاد معمولی";
|
||||
"Could not refresh Popular" = "محبوبترینها به روز نمیشود";
|
||||
"Recent History" = "سابقهٔ اخیر";
|
||||
"Clear History" = "پاک کردن سابقه";
|
||||
"Play all unwatched" = "همهٔ دیدهنشدهها را پخش کن";
|
||||
"Show Home" = "نمایش صفحهٔ اصلی";
|
||||
"More info can be found in:" = "اطلاعات بیشتر در:";
|
||||
"Name" = "نام";
|
||||
"History" = "سابقه";
|
||||
|
||||
/* Video date filter in search */
|
||||
"Month" = "ماه";
|
||||
"Matrix Channel" = "کانال Matrix";
|
||||
"Round corners" = "گوشههای گرد";
|
||||
"Pause when entering background" = "پس از ورود به پسزمینه مکث کن";
|
||||
"Music" = "موسیقی";
|
||||
"I like this app!" = "از این اپ خوشم میآید!";
|
||||
"Upload date" = "تاریخ انتشار";
|
||||
"Save history of played videos" = "ذخیرهٔ سابقهٔ ویدیوهای پخش شده";
|
||||
"Add Account..." = "افزودن حساب کاربری…";
|
||||
"Public account" = "حساب کاربری عمومی";
|
||||
"Add %@" = "افزودن %@";
|
||||
"Autoplaying Next" = "پخش خودکار بعدی";
|
||||
"You have no playlists\n\nTap on \"New Playlist\" to create one" = "فهرست پخش ندارید\n\nروی «فهرست جدید» ضربه بزنید و یکی بسازید";
|
||||
"No chapters information available" = "اطلاعاتی در مورد فصلهای ویدیو در دسترس نیست";
|
||||
"Lock" = "قفل";
|
||||
"Nothing" = "هیچ";
|
||||
"Cellular" = "اینترنت همراه";
|
||||
"Password" = "رمز عبور";
|
||||
"Add to Playlist" = "افزودن به فهرست پخش";
|
||||
"(shorts hidden)" = "(Shortها مخفی)";
|
||||
"Are you sure you want to remove %@ location?" = "از حذف سرویس دهندهٔ \"%@\" مطمئنید؟";
|
||||
"Current Playlist" = "فهرست پخش فعلی";
|
||||
|
||||
/* Selected video was played on given date */
|
||||
"Watched %@" = "تماشا شده %@";
|
||||
"Videos" = "ویدیوها";
|
||||
"No locations available at the moment" = "در حال حاضر سرویس دهندهای در دسترس نیست";
|
||||
"Show history" = "نمایش سابقه";
|
||||
"Default Profile" = "نمایهٔ پیشفرض";
|
||||
"Red" = "قرمز";
|
||||
"No preview" = "بدون پیشنمایش";
|
||||
"Info" = "اطلاعات";
|
||||
|
||||
/* Loading stream OSD */
|
||||
"Loading streams..." = "درحال دریافت استریم…";
|
||||
"No rotation" = "بدون چرخش";
|
||||
"Codec" = "کدک (Codec)";
|
||||
"Startup section" = "بخش آغازین";
|
||||
"Edit Quality Profile" = "ویرایش نمایهٔ کیفیت";
|
||||
"Browse without account" = "استفاده بدون حساب کاربری";
|
||||
|
||||
/* Video sort order in search */
|
||||
"Relevance" = "ارتباط";
|
||||
"Help" = "کمک";
|
||||
"Find Other" = "یافتن دیگری";
|
||||
"Play Now" = "الان پخش کن";
|
||||
"Close PiP when starting playing other video" = "هنگامی که ویدیوی دیگری آغاز به پخش میکند تصویر-در-تصویر را ببند";
|
||||
"Show cache status" = "نمایش وضعیت حافظهٔ مخفی";
|
||||
"Play Now in AVPlayer" = "الان در AVPlayer پخش کن";
|
||||
"Medium quality" = "کیفیت متوسط";
|
||||
"Stream & Player" = "استریم و پخشکننده";
|
||||
"Contributing" = "مشارکت";
|
||||
"Save" = "ذخیره";
|
||||
"Buttons labels" = "برچسب دکمهها";
|
||||
"Close video and player on end" = "در پایان ویدیو و پخشکننده را ببند";
|
||||
"Delete" = "حذف";
|
||||
|
||||
/* Player controls layout size for TV */
|
||||
"TV" = "تلویزیون";
|
||||
"Continue from %@" = "از %@ ادامه بده";
|
||||
"I found a bug /" = "ایرادی پیدا کردهام /";
|
||||
"Recent Documents" = "مستندات تازه";
|
||||
"Orientation" = "چرخش صفحه";
|
||||
"Low" = "پایین";
|
||||
"Restart" = "راهاندازی دوباره";
|
||||
"Search..." = "جست و جو…";
|
||||
"Open Video" = "ویدیو را باز کن";
|
||||
"Sidebar" = "نوار کناری";
|
||||
"Translations" = "ترجمهها";
|
||||
"Duration" = "مدت زمان";
|
||||
|
||||
/* Video sort order in search */
|
||||
"Date" = "تاریخ";
|
||||
"Disable filters" = "غیرفعال کردن صافیها";
|
||||
"Playlist \"%@\" will be deleted.\nIt cannot be reverted." = "فهرست پخش \"%@\" حذف خواهد شد.\nقابل بازگردانی نیست.";
|
||||
"Enter link to open" = "پیوند را وارد کنید تا باز شود";
|
||||
"Restart/Play next" = "پخش دوباره/بعدی";
|
||||
"Your Accounts" = "حساب کاربری شما";
|
||||
"Open channel" = "کانال را باز کن";
|
||||
"Queue" = "صف";
|
||||
"Controls button: forwards" = "دکمههای کنترل: جلو";
|
||||
"Normal" = "عادی";
|
||||
"Next" = "بعدی";
|
||||
"Home" = "صفحهٔ اصلی";
|
||||
"Contact" = "تماس";
|
||||
"Show Next in Queue" = "مورد بعدی صف را نشان بده";
|
||||
"Browsing" = "مرور";
|
||||
"Watched" = "تماشا شده";
|
||||
"Highest" = "بالاترین";
|
||||
"You can find information about using Yattee in the Wiki pages." = "اطلاعات در مورد چگونگی استفاده از Yattee را میتوانید در صفحات ویکی پیدا کنید.";
|
||||
"Captions" = "زیرنویس";
|
||||
"Playlist" = "فهرست پخش";
|
||||
|
||||
/* SponsorBlock category name */
|
||||
"Intro" = "مقدمه";
|
||||
"Description" = "شرح";
|
||||
"Instance of current account" = "سرویس دهندهٔ حساب کاربری فعلی";
|
||||
"Advanced" = "پیشرفته";
|
||||
"Welcome" = "خوش آمدید";
|
||||
|
||||
/* Selected video has just finished playing */
|
||||
"Just watched" = "همین الان تماشا کردم";
|
||||
"Close PiP when player is opened" = "هنگامی که پخشکننده باز میشود تصویر-در-تصویر را ببند";
|
||||
"Lock portrait mode" = "قفل حالت عمودی";
|
||||
|
||||
/* Video date filter in search
|
||||
Video duration filter in search */
|
||||
"Any" = "هر";
|
||||
"Mark watched videos with" = "نشانه گذاری ویدیوها به عنوان تماشا شده با";
|
||||
"Not Playing" = "پخش نمیشود";
|
||||
"Video Details" = "جزییات ویدیو";
|
||||
"Live Streams" = "پخش زنده";
|
||||
@@ -600,3 +600,7 @@
|
||||
"Podcasts" = "Podcasts";
|
||||
"Releases" = "Sorties";
|
||||
"Add %@" = "Ajouter %@";
|
||||
"Description preview" = "Aperçu de la description";
|
||||
"No preview" = "Aucun aperçu";
|
||||
"Open vertical chapters expanded" = "Ouvrir les chapitres verticaux étendus";
|
||||
"Chapters (if available)" = "Chapitres (si disponibles)";
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
|
||||
|
||||
"%@ Channel" = "%@ चैनल";
|
||||
"%@ Playlist" = "%@ प्लेलिस्ट";
|
||||
"%@ Playlist" = "%@ गीतमाला";
|
||||
"%@ subscribers" = "%@ सदस्य";
|
||||
"%lld videos" = "%lld वीडियों";
|
||||
"%lld videos" = "%lld वीडियो";
|
||||
" subscribers" = " सदस्य";
|
||||
"10 seconds forwards/backwards" = "10 पल आगे/पीछे";
|
||||
"Accounts" = "खातें";
|
||||
"Accounts are not supported for the application of this instance" = "इस इन्सटेंस के लिए खातों उपलब्ध नहीं हैं";
|
||||
"10 seconds forwards/backwards" = "10 सेकंड आगे/पीछे";
|
||||
"Accounts" = "खाते";
|
||||
"Accounts are not supported for the application of this instance" = "इस इन्सटेंस के लिए खाते उपलब्ध नहीं हैं";
|
||||
"Add to Playlist..." = "गीतमाला में जोड़ें…";
|
||||
"Advanced" = "उन्नत";
|
||||
|
||||
/* Trending category, section containing all kinds of videos */
|
||||
"All" = "सभी";
|
||||
"Always use AVPlayer for live videos" = "लाइव वीडियो के लिए सदा ए.वी. प्लेयर का उपयोग करें";
|
||||
"Always use AVPlayer for live videos" = "लाइव वीडियो के लिए सदा AVPlayer का उपयोग करें";
|
||||
"Anonymous" = "गुप्त";
|
||||
|
||||
/* Video date filter in search
|
||||
@@ -24,16 +24,16 @@
|
||||
"Are you sure you want to clear search history?" = "क्या आप निश्चित रूप से खोज का इतिहास मिटाना चाहते हैं?";
|
||||
"Close PiP and open player when application enters foreground" = "PiP बंद करें और प्लेयर खोलें जब ऐप्लिकेशन मुख्यभूमी में जाता है";
|
||||
"Close PiP when player is opened" = "PiP बंद करें जब प्लेयर खुले";
|
||||
"Close PiP when starting playing other video" = "PiP बंद करें जब दूसरा वीडियो प्ले हो";
|
||||
"Close player when closing video" = "प्लेयर बंद करें जब वीडियो बंद हो";
|
||||
"Close player when starting PiP" = "प्लेयर बंद करें जब PiP चालू हो";
|
||||
"Close PiP when starting playing other video" = "PiP बंद करें जब दूसरा वीडियो चालू हो";
|
||||
"Close player when closing video" = "जब वीडियो बंद हो तब प्लेयर बंद करें";
|
||||
"Close player when starting PiP" = "जब PiP चालू हो रहा हो तब प्लेयर बंद करें";
|
||||
"Close Video" = "वीडियो बंद करें";
|
||||
"Close video after playing last in the queue" = "कतार में आख़िरी समाप्त होने के पश्चात वीडियो बंद करें";
|
||||
"Close video after playing last in the queue" = "अंतिम पंक्तिबद्ध समाप्त होने के पश्चात वीडियो बंद करें";
|
||||
"Comments" = "टिप्पणियाँ";
|
||||
"Connected successfully (%@)" = "जुड़ाव सफल";
|
||||
"Connected successfully (%@)" = "जुड़ाव सफल (%@)";
|
||||
"Connection failed" = "जुड़ाव असफल";
|
||||
"Contact" = "संपर्क";
|
||||
"Continue" = "जारी";
|
||||
"Continue" = "जारी रखें";
|
||||
"Disabled" = "निर्योग्य";
|
||||
"Discord Server" = "डिस्कॉर्ड सर्वर";
|
||||
"Discussions take place in Discord and Matrix. It's a good spot for general questions." = "चर्चाएँ डिस्कॉर्ड एवं मेट्रिक्स पर होतीं हैं। यह सामान्य प्रश्नों के लिए अच्छा मंच है।";
|
||||
@@ -154,18 +154,18 @@
|
||||
"Play Now" = "अभी चलाएँ";
|
||||
"Playback" = "प्लेबैक";
|
||||
"Player" = "प्लेयर";
|
||||
"Playlist" = "प्लेलिस्ट";
|
||||
"Playlist" = "गीतमाला";
|
||||
"Decreased opacity" = "पारदर्शिता घटी";
|
||||
"Continue from %@" = "%@ से जारी करें";
|
||||
"Continue from %@" = "%@ से जारी रखें";
|
||||
"Current: %@\n%@" = "वर्तमान: %@\n%@";
|
||||
"Contributing" = "योगदान दें";
|
||||
"Contributing" = "योगदान";
|
||||
"Controls" = "नियंत्रक";
|
||||
"Copy %@ link" = "%@ लिंक नक़ल करें";
|
||||
"Copy %@ link" = "%@ लिंक कॉपी करें";
|
||||
"Country" = "देश";
|
||||
"Country Name or Code" = "देश नाम एवं कोड";
|
||||
"Could not load locations manifest" = "लोकेशन मैनिफ़ेस्ट लोड नहीं हो पाई";
|
||||
"Country Name or Code" = "देश का नाम एवं कोड";
|
||||
"Could not load locations manifest" = "लोकेशन मैनिफ़ेस्ट लोड नहीं हो सका";
|
||||
"Custom Locations" = "कस्टम स्थान";
|
||||
"Copy %@ link with time" = "%@ लिंक समय के साथ नक़ल करें";
|
||||
"Copy %@ link with time" = "%@ लिंक समय के साथ कॉपी करें";
|
||||
"Add Account" = "खाता जोड़ें";
|
||||
"Add Account..." = "खाता जोड़ें…";
|
||||
"Add Location" = "स्थान जोड़ें";
|
||||
@@ -177,35 +177,35 @@
|
||||
"Add to %@" = "%@ में जोड़ें";
|
||||
"Badge color" = "बिल्ले का रंग";
|
||||
"Category" = "श्रेणी";
|
||||
"Clear Search History..." = "खोज इतिहास साफ़ करें…";
|
||||
"Clear Search History..." = "खोज इतिहास हटायें…";
|
||||
"Are you sure you want to restore default quality profiles?" = "क्या आप निश्चित रूप से डीफ़ॉल्ट गुणवत्ता प्रोफ़ाइल को पुनः प्राप्त करना चाहते हैं?";
|
||||
"Based on system color scheme" = "मूल तंत्र रंग प्रणाली पर निर्भर";
|
||||
"Based on system color scheme" = "सिस्टम के रंग प्रणाली पर निर्भर";
|
||||
"Categories to Skip" = "श्रेणियाँ जिन्हें छोड़ें";
|
||||
"Chapters" = "अध्यायें";
|
||||
"Chapters" = "अध्याय";
|
||||
"Are you sure you want to delete playlist?" = "क्या आप निश्चित रूप से इस गीतमाला को मिटाना चाहते हैं?";
|
||||
"Are you sure you want to unsubscribe from %@?" = "क्या आप निश्चित रूप से %@ की सदस्यता छोड़ना चाहते हैं?";
|
||||
"Automatic" = "स्वतः";
|
||||
"Autoplaying Next" = "अगला ऑटोप्ले हो रहा";
|
||||
"Automatic" = "स्वचालित";
|
||||
"Autoplaying Next" = "अगला स्वतः चालू हो रहा";
|
||||
"Badge" = "बिल्ला";
|
||||
"Blue" = "नीला";
|
||||
"Browsing" = "ब्राउज़ करना";
|
||||
"Buffering stream..." = "स्ट्रीम बफ़र हो रहा…";
|
||||
"Bugs and great feature ideas can be sent to the GitHub issues tracker. " = "आप बग एवं फ़ीचर सुझाव गिटहब के इशु ट्रैकर पर भेज सकते हैं ";
|
||||
"Cancel" = "रद्द";
|
||||
"Captions" = "कैप्शन";
|
||||
"Charging" = "चार्ज हो रहा";
|
||||
"Clear" = "साफ़";
|
||||
"Clear All" = "सभी साफ़";
|
||||
"Clear All Recents" = "सभी हालिया साफ़ करें";
|
||||
"Clear History" = "इतिहास साफ़ करें";
|
||||
"Clear Search History" = "खोज इतिहास साफ़ करें";
|
||||
"Clear the queue" = "क़तार साफ़ करें";
|
||||
"Captions" = "अनुशीर्षक";
|
||||
"Charging" = "चार्ज हो रहा है";
|
||||
"Clear" = "हटायें";
|
||||
"Clear All" = "सभी हटायें";
|
||||
"Clear All Recents" = "सभी हालिया हटायें";
|
||||
"Clear History" = "इतिहास हटायें";
|
||||
"Clear Search History" = "खोज इतिहास हटायें";
|
||||
"Clear the queue" = "पंक्तिबद्ध हटायें";
|
||||
"Close" = "बंद";
|
||||
"Backend" = "बैकऐंड";
|
||||
"Backend" = "पृष्ठभाग";
|
||||
"Badge & Decreased opacity" = "बिल्ला एवं पारदर्शिता में कमी";
|
||||
"Battery" = "बैटरी";
|
||||
"Button" = "बटन";
|
||||
"Cellular" = "मोबाइल डाटा";
|
||||
"Cellular" = "मोबाइल";
|
||||
"Create Playlist" = "गीतमाला बनाएँ";
|
||||
|
||||
/* Player controls layout size */
|
||||
@@ -267,7 +267,7 @@
|
||||
"Statistics" = "आँकड़े";
|
||||
"Hardware decoder" = "हार्डवेयर डीकोडर";
|
||||
"Stream FPS" = "स्ट्रीम FPS";
|
||||
"Playlists" = "प्लेलिस्ट";
|
||||
"Playlists" = "गीतमाला";
|
||||
"Popular" = "लोकप्रिय";
|
||||
"Preferred Formats" = "पसंदीदा प्रारूप";
|
||||
"Profiles" = "प्रोफ़ाइल";
|
||||
@@ -415,7 +415,7 @@
|
||||
"Locations Manifest" = "";
|
||||
"Could not delete document" = "";
|
||||
"Show Inspector" = "";
|
||||
"Could not load streams" = "";
|
||||
"Could not load streams" = "स्ट्रीम्स नहीं खोला जा सका";
|
||||
"Address" = "";
|
||||
"Playback Mode" = "";
|
||||
"Left" = "";
|
||||
@@ -447,17 +447,17 @@
|
||||
"Verified" = "";
|
||||
"No documents" = "";
|
||||
"Show Open Videos toolbar button" = "";
|
||||
"Could not refresh Subscriptions" = "";
|
||||
"Could not refresh Subscriptions" = "सदस्यता पुनर्स्थापित नहीं किया जा सका";
|
||||
"Remove Location" = "";
|
||||
"Only for local files and URLs" = "";
|
||||
"Codec" = "";
|
||||
"File" = "";
|
||||
"Could not extract playlist ID" = "";
|
||||
"Paste" = "";
|
||||
"Could not extract SID from received cookies: %@" = "";
|
||||
"Could not extract SID from received cookies: %@" = "प्राप्त कुकीज़ से SID नहीं निकाला जा सका: %@";
|
||||
"Files" = "";
|
||||
"Show Home" = "";
|
||||
"Could not extract channel information" = "";
|
||||
"Could not extract channel information" = "चैनल की जानकारी नहीं निकाली जा सकी";
|
||||
"Enter link to open" = "";
|
||||
"Home" = "";
|
||||
"No locations available at the moment" = "";
|
||||
@@ -469,7 +469,7 @@
|
||||
"Format" = "";
|
||||
"Share files from Finder on a Mac\nor iTunes on Windows" = "";
|
||||
"Share%@link" = "";
|
||||
"Could not open video" = "";
|
||||
"Could not open video" = "वीडियो नहीं खोला जा सका";
|
||||
"Center" = "";
|
||||
"Size" = "";
|
||||
"Recent Documents" = "";
|
||||
@@ -484,14 +484,14 @@
|
||||
"Could not create share link" = "";
|
||||
"Sample Rate" = "";
|
||||
"Translations" = "";
|
||||
"Open logs in Finder" = "";
|
||||
"Open logs in Finder" = "लॉग को Finder में खोलें";
|
||||
"Could not refresh Playlists" = "";
|
||||
"Could not update your token." = "";
|
||||
"Could not refresh Trending" = "";
|
||||
"Could not update your token." = "आपका टोकन अपडेट नहीं हो सका।";
|
||||
"Could not refresh Trending" = "ट्रेंडिंग को पुनर्स्थापित नहीं किया जा सका";
|
||||
"Could not open playlist" = "";
|
||||
"This URL could not be opened" = "";
|
||||
"Could not open channel" = "";
|
||||
"Channel could not be found" = "";
|
||||
"This URL could not be opened" = "इस URL को नहीं खोला जा सका";
|
||||
"Could not open channel" = "चैनल नहीं खुल सका";
|
||||
"Channel could not be found" = "चैनल नहीं मिला";
|
||||
"Could not refresh Popular" = "";
|
||||
"Could not extract video ID" = "";
|
||||
"Channel" = "";
|
||||
@@ -501,4 +501,4 @@
|
||||
"Pages toolbar position" = "";
|
||||
"Default Profile" = "";
|
||||
"Copy%@link" = "";
|
||||
"Share Logs..." = "";
|
||||
"Share Logs..." = "लॉग साझा करें…";
|
||||
|
||||
@@ -600,3 +600,7 @@
|
||||
"Podcasts" = "ポッドキャスト";
|
||||
"Releases" = "リリース";
|
||||
"Add %@" = "追加 %@";
|
||||
"Description preview" = "説明のプレビュー";
|
||||
"No preview" = "プレビューなし";
|
||||
"Open vertical chapters expanded" = "チャプターを縦方向に開く";
|
||||
"Chapters (if available)" = "チャプター (あれば)";
|
||||
|
||||
62
Shared/nl.lproj/Localizable.strings
Normal file
62
Shared/nl.lproj/Localizable.strings
Normal file
@@ -0,0 +1,62 @@
|
||||
|
||||
|
||||
"Always use AVPlayer for live videos" = "Gebruik altijd AVPlayer voor live video's";
|
||||
"Clear Search History..." = "Wis zoek geschiedenis...";
|
||||
"Add to %@" = "Toevoegen aan %@";
|
||||
"10 seconds forwards/backwards" = "10 seconden vooruit/achteruit";
|
||||
"Based on system color scheme" = "Gebaseerd op systeem kleuren pallet";
|
||||
" subscribers" = " Abonnees";
|
||||
"Button" = "Knop";
|
||||
"Are you sure you want to restore default quality profiles?" = "Weet u zeker dat u de standaardkwaliteitsprofielen wilt herstellen?";
|
||||
"Charging" = "Opladen";
|
||||
"Are you sure you want to unsubscribe from %@?" = "Weet u zeker dat u zich wilt afmelden voor %@?";
|
||||
"Automatic" = "Automatisch";
|
||||
"Add Quality Profile" = "Kwaliteitsprofiel toevoegen";
|
||||
"Clear" = "Leeg";
|
||||
"Anonymous" = "Anoniem";
|
||||
"Add to Favorites" = "Toevoegen aan favorieten";
|
||||
"Badge color" = "Embleem kleur";
|
||||
|
||||
/* Trending category, section containing all kinds of videos */
|
||||
"All" = "Alles";
|
||||
"Clear All Recents" = "Leeg alle recenten";
|
||||
"Bugs and great feature ideas can be sent to the GitHub issues tracker. " = "Bugs en functie-ideeën kunnen naar de GitHub-problementracker worden gestuurd. ";
|
||||
"Add to Playlist..." = "Toevoegen aan afspeellijst...";
|
||||
"Category" = "Categorie";
|
||||
"Apply to all" = "Toepassen op alles";
|
||||
"Close" = "Dicht";
|
||||
"Are you sure you want to clear search history?" = "Weet u zeker dat u de zoekgeschiedenis wilt wissen?";
|
||||
"Clear Search History" = "Wis zoek geschiedenis";
|
||||
"Buffering stream..." = "Stream bufferen...";
|
||||
"Chapters" = "Hoofdstukken";
|
||||
"Categories to Skip" = "Categorieën om over te slaan";
|
||||
"Clear All" = "Leeg alles";
|
||||
"Add Account" = "Account toevoegen";
|
||||
"Cancel" = "Annuleren";
|
||||
"Accounts are not supported for the application of this instance" = "Accounts zijn niet ondersteund voor de toepassing van dit exemplaar";
|
||||
"Battery" = "Batterij";
|
||||
"%@ Playlist" = "Afspeellijst";
|
||||
"Add profile..." = "Profiel toevoegen...";
|
||||
"Add Location" = "Locatie toevoegen";
|
||||
"Add Location..." = "Locatie toevoegen...";
|
||||
"%@ subscribers" = "abonnees";
|
||||
"Accounts" = "Accounts";
|
||||
"%@ Channel" = "Kanaal";
|
||||
"%lld videos" = "%lld video's";
|
||||
"Clear the queue" = "Wis de wachtrij";
|
||||
"Are you sure you want to clear history of watched videos?" = "Weet je zeker dat je de geschiedenis van bekeken video's wilt wissen?";
|
||||
"Are you sure you want to delete playlist?" = "Weet je zeker dat je de afspeellijst wilt verwijderen?";
|
||||
"Badge" = "Embleem";
|
||||
"Blue" = "Blauw";
|
||||
"Clear History" = "Wis geschiedenis";
|
||||
"Add Account..." = "Account toevoegen...";
|
||||
"Autoplaying Next" = "Volgende automatisch afspelen";
|
||||
"Cellular" = "Mobiele data";
|
||||
"Add to Playlist" = "Toevoegen aan afspeellijst";
|
||||
"Browsing" = "Zoeken";
|
||||
"Captions" = "Ondertiteling";
|
||||
"Advanced" = "Geavanceerd";
|
||||
|
||||
/* Video date filter in search
|
||||
Video duration filter in search */
|
||||
"Any" = "Elk";
|
||||
@@ -601,3 +601,7 @@
|
||||
"Podcasts" = "Podkasty";
|
||||
"Releases" = "Wydania";
|
||||
"Add %@" = "Dodaj %@";
|
||||
"Description preview" = "Podgląd opisu";
|
||||
"No preview" = "Brak podglądu";
|
||||
"Open vertical chapters expanded" = "Otwórz pionowe rozdziały rozwinięte";
|
||||
"Chapters (if available)" = "Rozdziały (jeśli dostępne)";
|
||||
|
||||
@@ -600,3 +600,7 @@
|
||||
"Podcasts" = "Podcasts";
|
||||
"Releases" = "Lançamentos";
|
||||
"Add %@" = "Adicionar %@";
|
||||
"Description preview" = "Descrição da prévia";
|
||||
"No preview" = "Sem prévia";
|
||||
"Open vertical chapters expanded" = "Abrir capítulos verticais expandidos";
|
||||
"Chapters (if available)" = "Capítulos (se disponível)";
|
||||
|
||||
@@ -595,3 +595,12 @@
|
||||
"Replay" = "Replay";
|
||||
"Autoplay next" = "Tocar automaticamente próximo";
|
||||
"Stream" = "Stream";
|
||||
"Podcasts" = "Podcasts";
|
||||
"Releases" = "Lançamentos";
|
||||
"Show channel avatars in channels lists" = "Mostrar avatares de canais em listas de canais";
|
||||
"Open vertical chapters expanded" = "Abrir capítulos verticais expandidos";
|
||||
"Description preview" = "Descrição da prévia";
|
||||
"Show channel avatars in videos lists" = "Mostrar avatares de canais em listas de vídeos";
|
||||
"Add %@" = "Adicionar %@";
|
||||
"No preview" = "Sem prévia";
|
||||
"Chapters (if available)" = "Capítulos (se disponível)";
|
||||
|
||||
@@ -600,3 +600,7 @@
|
||||
"Podcasts" = "Podcast-uri";
|
||||
"Releases" = "Lansări";
|
||||
"Add %@" = "Adaugă %@";
|
||||
"Open vertical chapters expanded" = "Deschideți capitolele verticale extinse";
|
||||
"Description preview" = "Descriere preview";
|
||||
"No preview" = "Fără previzualizare";
|
||||
"Chapters (if available)" = "Capitole (dacă există)";
|
||||
|
||||
@@ -597,3 +597,8 @@
|
||||
"Close video and player on end" = "Закрыть видео и плеер в конце";
|
||||
"Use system controls with AVPlayer" = "Использование системных элементов управления с помощью AVPlayer";
|
||||
"File Extension" = "Расширение файла";
|
||||
"No preview" = "Без предварительного просмотра";
|
||||
"Description preview" = "Предварительный просмотр описания";
|
||||
"Podcasts" = "Подкасты";
|
||||
"Releases" = "Релизы";
|
||||
"Add %@" = "Добавить %@";
|
||||
|
||||
@@ -294,15 +294,15 @@
|
||||
"Hide" = "";
|
||||
"Playing Next" = "";
|
||||
"Are you sure you want to remove this document?" = "";
|
||||
"Show channel name" = "";
|
||||
"Show channel name" = "Kanal adını göster";
|
||||
"Unlisted" = "";
|
||||
"Paste" = "";
|
||||
"Rate & Captions" = "";
|
||||
"Format" = "";
|
||||
"Right" = "";
|
||||
"Right" = "Sağ";
|
||||
"Stream FPS" = "";
|
||||
"Cached time" = "";
|
||||
"Sign In Required" = "";
|
||||
"Sign In Required" = "Giriş yapmanız gerekiyor";
|
||||
"Could not create share link" = "";
|
||||
"Locations Manifest" = "";
|
||||
"When partially watched video is played" = "";
|
||||
@@ -323,19 +323,19 @@
|
||||
"Show Documents" = "";
|
||||
"Press and hold remote button to open captions and quality menus" = "";
|
||||
"No locations available at the moment" = "";
|
||||
"Show account username" = "";
|
||||
"Show account username" = "Hesabın kullanıcı adını göster";
|
||||
"Used to create links from videos, channels and playlists" = "";
|
||||
"Size" = "";
|
||||
"You have no playlists\n\nTap on \"New Playlist\" to create one" = "";
|
||||
"Sort: %@" = "";
|
||||
"Select location closest to you:" = "";
|
||||
"Sort: %@" = "Sırala: %@";
|
||||
"Select location closest to you:" = "Size en yakın konumu seçin:";
|
||||
"Playlist is empty\n\nTap and hold on a video and then \n\"Add to Playlist\"" = "";
|
||||
|
||||
/* Video duration filter in search */
|
||||
"Short" = "";
|
||||
"Short" = "Kısa";
|
||||
"Home" = "";
|
||||
"Remove Location" = "";
|
||||
"Edit Favorites…" = "";
|
||||
"Edit Favorites…" = "Favorileri düzenle…";
|
||||
"Show Open Videos toolbar button" = "";
|
||||
"Sample Rate" = "";
|
||||
"Private" = "";
|
||||
@@ -365,14 +365,14 @@
|
||||
"Subscriptions" = "";
|
||||
"Upload date" = "";
|
||||
"This information will be processed only on your device and used to connect you to the server in the specified country." = "";
|
||||
"Shuffle" = "";
|
||||
"Shuffle" = "Karıştır";
|
||||
"Buttons labels" = "";
|
||||
"Share %@ link" = "";
|
||||
"Share %@ link" = "%@ bağlantısını paylaş";
|
||||
"Could not load streams" = "";
|
||||
"Playback history is empty" = "";
|
||||
"Show icons and text when space permits" = "";
|
||||
"unknown" = "";
|
||||
"Share..." = "";
|
||||
"Share..." = "Paylaş...";
|
||||
|
||||
/* Video sort order in search */
|
||||
"Views" = "";
|
||||
@@ -382,7 +382,7 @@
|
||||
"Could not refresh Playlists" = "";
|
||||
"Actions buttons" = "";
|
||||
"Any format" = "";
|
||||
"Show playback statistics" = "";
|
||||
"Show playback statistics" = "Oynatma istatistiklerini göster";
|
||||
"Pages buttons" = "";
|
||||
"Videos" = "";
|
||||
"Codec" = "";
|
||||
@@ -396,7 +396,7 @@
|
||||
"Open" = "";
|
||||
|
||||
/* Loading stream OSD */
|
||||
"Opening %@ stream..." = "";
|
||||
"Opening %@ stream..." = "%@ akışı açılıyor...";
|
||||
"Clear Queue before opening" = "";
|
||||
"Copy %@ link with time" = "Bağlantıyı %@ zaman ile kopyala";
|
||||
"Show Inspector" = "";
|
||||
@@ -412,15 +412,15 @@
|
||||
|
||||
/* Video date filter in search */
|
||||
"Week" = "";
|
||||
"Sidebar" = "";
|
||||
"Sidebar" = "Kenar çubuğu";
|
||||
"Show only icons" = "";
|
||||
"Current: %@\n%@" = "Şuan: %@\n%@";
|
||||
"Show anonymous accounts" = "";
|
||||
"Show anonymous accounts" = "Anonim hesapları göster";
|
||||
"Could not open playlist" = "";
|
||||
"Round corners" = "";
|
||||
"URL" = "";
|
||||
"Recents" = "";
|
||||
"Show sidebar when space permits" = "";
|
||||
"Show sidebar when space permits" = "Alan olduğu sürece kenar çubuğunu göster";
|
||||
"System controls buttons" = "";
|
||||
"Could not extract channel information" = "";
|
||||
"Public Locations" = "";
|
||||
@@ -431,22 +431,22 @@
|
||||
"Continue from %@" = "% devam et";
|
||||
"Copy %@ link" = "Bağlantıyı %@ kopyala";
|
||||
"Seek gesture sensitivity" = "";
|
||||
"Show keywords" = "";
|
||||
"Show keywords" = "Anahtar kelimeleri göster";
|
||||
"Wiki" = "";
|
||||
"Username" = "";
|
||||
"Could not extract video ID" = "";
|
||||
|
||||
/* Player controls layout size */
|
||||
"Smaller" = "";
|
||||
"Sort" = "";
|
||||
"Smaller" = "Küçült";
|
||||
"Sort" = "Sırala";
|
||||
"This cannot be reverted" = "";
|
||||
"Public Manifest" = "";
|
||||
"You have no Playlists" = "";
|
||||
"Watched" = "";
|
||||
"Could not open video" = "";
|
||||
"Channel could not be found" = "";
|
||||
"Show video length" = "";
|
||||
"Source" = "";
|
||||
"Show video length" = "Video uzunluğunu göster";
|
||||
"Source" = "Kaynak";
|
||||
"Welcome" = "";
|
||||
"Wi-Fi" = "";
|
||||
"Could not open channel" = "";
|
||||
@@ -454,13 +454,13 @@
|
||||
"Could not extract playlist ID" = "";
|
||||
"Could not load video" = "";
|
||||
"Decreased opacity" = "Düşük şeffaflık";
|
||||
"Shuffle All" = "";
|
||||
"Share %@ link with time" = "";
|
||||
"Shuffle All" = "Tümünü karıştır";
|
||||
"Share %@ link with time" = "%@ bağlantısını zaman bilgisiyle birlikte paylaş";
|
||||
"This cannot be reverted. You might need to switch between views or restart the app to see changes." = "";
|
||||
"Unsubscribe" = "";
|
||||
"Current Location" = "";
|
||||
"Stream & Player" = "";
|
||||
"Hardware decoder" = "";
|
||||
"Hardware decoder" = "Donanımsal çözücü";
|
||||
"Honor orientation lock" = "";
|
||||
"Seek with horizontal swipe on video" = "";
|
||||
"Segments typically found at the start of a video that include an animation, still frame or clip which are also seen in other videos by the same creator." = "";
|
||||
@@ -473,12 +473,12 @@
|
||||
"Self-promotion" = "";
|
||||
|
||||
/* Player controls layout size */
|
||||
"Small" = "";
|
||||
"Small" = "Küçük";
|
||||
|
||||
/* SponsorBlock category name */
|
||||
"Sponsor" = "";
|
||||
"Sponsor" = "Sponsor";
|
||||
"System controls show buttons for %@" = "";
|
||||
"Show history" = "";
|
||||
"Show history" = "Kullanım geçmişini göster";
|
||||
"Could not extract SID from received cookies: %@" = "";
|
||||
"This will remove all your custom profiles and return their default values. This cannot be reverted." = "";
|
||||
"Switch to other public location" = "";
|
||||
@@ -502,3 +502,6 @@
|
||||
"Share" = "";
|
||||
"File" = "";
|
||||
"Share%@link" = "";
|
||||
"Cache" = "Önbellek";
|
||||
"Enter account credentials to connect..." = "Bağlanmak için hesap bilgilerini girin...";
|
||||
"Show scroll to top button in comments" = "Yorumlarda yukarıya götür düğmesini göster";
|
||||
|
||||
@@ -1183,6 +1183,10 @@
|
||||
376578902685490700D4EA09 /* PlaylistsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaylistsView.swift; sourceTree = "<group>"; };
|
||||
37658ED428E1C567004BF6A2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
376787BA291C43CD00D356A4 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
3767F3312B2504F800F257BC /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = fa.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
3767F3322B25053B00F257BC /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
3767F3332B25058300F257BC /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
3767F3342B2505EF00F257BC /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
3768122C28E8D0BC0036FC8D /* hi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hi; path = hi.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
3769C02D2779F18600DDB3EA /* PlaceholderProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceholderProgressView.swift; sourceTree = "<group>"; };
|
||||
376A33DF2720CAD6000C1D6B /* VideosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideosApp.swift; sourceTree = "<group>"; };
|
||||
@@ -2606,6 +2610,10 @@
|
||||
pt,
|
||||
"pt-BR",
|
||||
ja,
|
||||
fa,
|
||||
es,
|
||||
tr,
|
||||
ru,
|
||||
);
|
||||
mainGroup = 37D4B0BC2671614700C925CA;
|
||||
packageReferences = (
|
||||
@@ -3787,6 +3795,10 @@
|
||||
37E868FE29AA402D003128D0 /* pt */,
|
||||
37E868FF29AA407B003128D0 /* pt-BR */,
|
||||
37ABD5FE29BE7FA800DDCAD7 /* ja */,
|
||||
3767F3312B2504F800F257BC /* fa */,
|
||||
3767F3322B25053B00F257BC /* es */,
|
||||
3767F3332B25058300F257BC /* tr */,
|
||||
3767F3342B2505EF00F257BC /* ru */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
@@ -3801,7 +3813,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "Open in Yattee/Info.plist";
|
||||
INFOPLIST_KEY_CFBundleDisplayName = "Open in Yattee";
|
||||
@@ -3832,7 +3844,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = "Open in Yattee/Info.plist";
|
||||
@@ -3863,7 +3875,7 @@
|
||||
buildSettings = {
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||
@@ -3883,7 +3895,7 @@
|
||||
buildSettings = {
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.0;
|
||||
@@ -4047,7 +4059,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "iOS/Yattee (iOS).entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
@@ -4100,7 +4112,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "GLES_SILENCE_DEPRECATION=1";
|
||||
@@ -4152,7 +4164,7 @@
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
ENABLE_APP_SANDBOX = YES;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
@@ -4191,7 +4203,7 @@
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
"DEVELOPMENT_TEAM[sdk=macosx*]" = 78Z5H3M6RJ;
|
||||
ENABLE_APP_SANDBOX = YES;
|
||||
@@ -4226,7 +4238,7 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@@ -4250,7 +4262,7 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@@ -4276,7 +4288,7 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@@ -4301,7 +4313,7 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@@ -4327,7 +4339,7 @@
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
ENABLE_PREVIEWS = YES;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
@@ -4367,7 +4379,7 @@
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
DEVELOPMENT_ASSET_PATHS = "";
|
||||
"DEVELOPMENT_TEAM[sdk=appletvos*]" = 78Z5H3M6RJ;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
@@ -4408,7 +4420,7 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -4432,7 +4444,7 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
CURRENT_PROJECT_VERSION = 173;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -4615,7 +4627,7 @@
|
||||
repositoryURL = "https://github.com/sindresorhus/Defaults";
|
||||
requirement = {
|
||||
kind = upToNextMajorVersion;
|
||||
minimumVersion = 6.0.0;
|
||||
minimumVersion = 7.0.0;
|
||||
};
|
||||
};
|
||||
372AA40E286D067B0000B1DC /* XCRemoteSwiftPackageReference "Repeat" */ = {
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/sindresorhus/Defaults",
|
||||
"state" : {
|
||||
"revision" : "981ccb0a01c54abbe3c12ccb8226108527bbf115",
|
||||
"version" : "6.3.0"
|
||||
"revision" : "3efef5a28ebdbbe922d4a2049493733ed14475a6",
|
||||
"version" : "7.3.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -105,7 +105,7 @@
|
||||
"location" : "https://github.com/SDWebImage/SDWebImage",
|
||||
"state" : {
|
||||
"branch" : "master",
|
||||
"revision" : "191b94cd545274603fcffce275dd4c1247587b6e"
|
||||
"revision" : "fbe79221b146aa6647dceb5a5c75873a48b69519"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -122,8 +122,8 @@
|
||||
"kind" : "remoteSourceControl",
|
||||
"location" : "https://github.com/SDWebImage/SDWebImageSwiftUI.git",
|
||||
"state" : {
|
||||
"revision" : "5f025e54a03d3d33dff24d7a19331f446f00ed9d",
|
||||
"version" : "2.2.4"
|
||||
"revision" : "aee64ef39b570c44ccf0f884c440fc6494a23c76",
|
||||
"version" : "2.2.5"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -86,9 +86,11 @@ public class OrientationTracker {
|
||||
if accelerometerData.acceleration.y <= -threshold {
|
||||
return .portrait
|
||||
}
|
||||
if accelerometerData.acceleration.y >= threshold {
|
||||
|
||||
if UIDevice.current.userInterfaceIdiom == .pad && accelerometerData.acceleration.y >= threshold {
|
||||
return .portraitUpsideDown
|
||||
}
|
||||
|
||||
return currentDeviceOrientation
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ struct NowPlayingView: View {
|
||||
} else {
|
||||
Section(header: Text("Chapters")) {
|
||||
ForEach(video.chapters) { chapter in
|
||||
ChapterView(chapter: chapter)
|
||||
ChapterViewTVOS(chapter: chapter)
|
||||
.padding(.horizontal, 40)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user