Compare commits

...

24 Commits

Author SHA1 Message Date
Arkadiusz Fal
d94a50f8c3 Retry SPM dependency resolve to work around binary-target race
xcodebuild's resolvePackageDependencies sometimes fails with
"already exists in file system" when multiple binary xcframework
targets from the same release URL try to extract concurrently.
The failing target varies across runs, confirming a race, not a
missing-file problem. Wipe the three SPM cache roots between
attempts and retry up to three times before giving up; once the
resolve succeeds, fastlane's own resolve step reuses the cache.
2026-04-18 19:41:42 +02:00
Arkadiusz Fal
b7edbe5683 Pin Xcode 26.0.1 for release and broaden SPM cache clear
Xcode 26.2 (the new default on macos-26) hits a SwiftPM race where
binary xcframework downloads fail with "already exists in file system".
Xcode 26.0.1 — the toolchain the last successful release ran against —
resolved the same deps cleanly. Also download the iOS platform if the
runner image only ships the platform bundled with the default Xcode,
and clear SPM cache more broadly rather than only the artifacts dir.
2026-04-18 19:33:48 +02:00
Arkadiusz Fal
42849c1aae Drop explicit Xcode 26.0.1 selection on release workflow
setup-xcode was switching to /Applications/Xcode_26.0.1.app, which on
the macos-26 runner lacks the iOS 26.0 platform SDK. The runner's
default Xcode has it bundled. Matches rewrite/v2.
2026-04-18 19:25:31 +02:00
Arkadiusz Fal
11f0dff4e2 Pass is_key_content_base64: true to app_store_connect_api_key
The DEVELOPER_KEY_CONTENT secret is stored base64-encoded, so fastlane
needs to be told to decode it before parsing. Matches the approach on
rewrite/v2. Removes the openssl-shell-out workaround from the previous
commits, which was solving the wrong problem.
2026-04-18 19:10:04 +02:00
Arkadiusz Fal
a26044cc04 Un-escape \n in DEVELOPER_KEY_CONTENT before openssl conversion
GitHub secrets store multi-line PEMs as a single line with literal "\n"
sequences. Fastlane's app_store_connect_api_key action un-escapes them
via gsub before use; the helper must do the same before writing the
temp file, otherwise openssl sees garbage.
2026-04-18 19:05:44 +02:00
Arkadiusz Fal
c978ec6b89 Work around invalid curve name on CI runners
The hosted macOS runner's OpenSSL rejects Apple's PKCS#8 .p8 key via
OpenSSL::PKey::EC.new with "invalid curve name". Shell out to system
openssl to convert the key to SEC1/traditional PEM before handing it
to fastlane's app_store_connect_api_key action.

Ref: fastlane/fastlane#20593
2026-04-18 19:03:27 +02:00
Arkadiusz Fal
4a69172bed Bump CI Ruby to 3.3
Fastlane 2.232 transitive deps (public_suffix 7, multi_json 1.20)
require Ruby >= 3.2, and Ruby 3.1 is EOL since March 2025.
2026-04-18 18:57:21 +02:00
Arkadiusz Fal
0db1c08b98 Bump fastlane to 2.232 to fix invalid curve name on CI
Works around OpenSSL::PKey::ECError when parsing App Store Connect
API .p8 keys on the updated GitHub-hosted macOS runner image.
2026-04-18 18:47:22 +02:00
Arkadiusz Fal
f9ecfcd3dd Fix README 2026-04-18 18:36:42 +02:00
Arkadiusz Fal
b9351b502c Update changelog 2026-04-18 18:33:24 +02:00
Arkadiusz Fal
f28fdcec96 Bump build number 2026-04-18 18:31:19 +02:00
Arkadiusz Fal
ba3da4fc03 Wire Finnish, Indonesian, Korean, Dutch, Swedish into Localizable.strings build
Commit 37c6f6abb added fi/id/ko/nl/sv to knownRegions but never registered
their .strings files, so Xcode never copied them into the app bundle and the
runtime fell back to English even when the scheme forced one of these
languages. Adds the missing PBXFileReference entries and includes them in
the Localizable.strings PBXVariantGroup.
2026-04-18 18:25:57 +02:00
Arkadiusz Fal
627ee48325 Update README 2026-04-18 17:59:44 +02:00
Arkadiusz Fal
f23b010241 Merge pull request #903 from weblate/weblate-yattee-localizable-strings
Translations update from Hosted Weblate
2026-04-18 12:28:59 +02:00
Sketch6580
9a5d377ae0 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (562 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/zh_Hans/
2026-04-02 01:09:50 +00:00
ButterflyOfFire
b789e320e0 Translated using Weblate (Kabyle)
Currently translated at 17.0% (96 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/kab/
2026-03-26 16:09:49 +00:00
Ghost of Sparta
6bdb187d18 Translated using Weblate (Hungarian)
Currently translated at 100.0% (562 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/hu/
2026-03-13 08:09:48 +00:00
Sketch6580
ca36254661 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (562 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/zh_Hans/
2026-02-07 20:54:12 +01:00
Aditya Bhat
3312e1df82 Translated using Weblate (Kannada)
Currently translated at 1.6% (9 of 562 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/kn/
2026-02-07 20:54:12 +01:00
Aditya Bhat
a484aaf889 Added translation using Weblate (Kannada) 2026-02-07 20:54:11 +01:00
Arkadiusz Fal
20d0cfc0c7 Use macos-26 runner for release workflow
macos-latest (macos-15) doesn't have iOS 26 / tvOS 26 platform
SDKs pre-installed, causing build failures. The macos-26 runner
ships with the required SDKs.
2026-02-07 20:53:38 +01:00
Arkadiusz Fal
7fe99b09ef Update build number 2026-02-07 20:24:45 +01:00
Arkadiusz Fal
78f155a3b9 Merge pull request #904 from telyn/support-invidious-empty-domain
Support Invidious servers which have unspecified domains (... at least for thumbnail URLs 🙂)
2025-12-22 23:07:29 +01:00
telyn
6f696c9262 [invidious] default thumbnail hostname to configured URL's
For context, Invidious performs a type check of its configuration during
bootup, and allows the "domain" to be unspecified, in which case the API
and HTML it generates includes path-only URLs. This is valid: in these
cases we should assume that the Host for those URLs is the same as
the Host we used to access the endpoint called.

This commit adds support for servers configured in such a way, by
defaulting the host of thumbnail URLs, to that used for authentication.
2025-12-22 14:59:39 +00:00
14 changed files with 300 additions and 219 deletions

View File

@@ -26,7 +26,7 @@ jobs:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1'
ruby-version: '3.3'
bundler-cache: true
cache-version: 1
- name: Replace signing certificate to Direct with Developer ID

View File

@@ -17,7 +17,7 @@ jobs:
git config --local user.name "github-actions[bot]"
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1'
ruby-version: '3.3'
bundler-cache: true
cache-version: 1
- uses: maierj/fastlane-action@v3.0.0

View File

@@ -27,12 +27,12 @@ jobs:
# lane: ['mac beta', 'ios beta', 'tvos beta']
lane: ['ios beta', 'tvos beta']
name: Releasing ${{ matrix.lane }} version to TestFlight
runs-on: macos-latest
runs-on: macos-26
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1'
ruby-version: '3.3'
bundler-cache: true
cache-version: 1
- name: Replace signing certificate to AppStore
@@ -42,8 +42,29 @@ jobs:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '26.0.1'
- name: Clear SPM cache
run: rm -rf ~/Library/Caches/org.swift.swiftpm/artifacts
- name: Install iOS/tvOS platform SDKs if missing
run: |
sudo xcodebuild -downloadPlatform iOS || true
sudo xcodebuild -downloadPlatform tvOS || true
- name: Resolve SPM dependencies (retry around SPM binary-target race)
run: |
case "${{ matrix.lane }}" in
"ios beta") SCHEME="Yattee (iOS)" ;;
"tvos beta") SCHEME="Yattee (tvOS)" ;;
*) SCHEME="Yattee (iOS)" ;;
esac
set +e
for attempt in 1 2 3; do
rm -rf ~/Library/Caches/org.swift.swiftpm ~/Library/org.swift.swiftpm ~/Library/Developer/Xcode/DerivedData
echo "::group::Resolve attempt $attempt for $SCHEME"
xcodebuild -resolvePackageDependencies -project Yattee.xcodeproj -scheme "$SCHEME"
RC=$?
echo "::endgroup::"
[ $RC -eq 0 ] && exit 0
echo "Attempt $attempt failed (rc=$RC), retrying after 15s..."
sleep 15
done
exit 1
- uses: maierj/fastlane-action@v3.0.0
with:
lane: ${{ matrix.lane }}
@@ -54,12 +75,12 @@ jobs:
if-no-files-found: ignore
mac_notarized:
name: Build and notarize macOS app
runs-on: macos-latest
runs-on: macos-26
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1'
ruby-version: '3.3'
bundler-cache: true
cache-version: 1
- name: Replace signing certificate to Direct with Developer ID
@@ -69,8 +90,20 @@ jobs:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '26.0.1'
- name: Clear SPM cache
run: rm -rf ~/Library/Caches/org.swift.swiftpm/artifacts
- name: Resolve SPM dependencies (retry around SPM binary-target race)
run: |
set +e
for attempt in 1 2 3; do
rm -rf ~/Library/Caches/org.swift.swiftpm ~/Library/org.swift.swiftpm ~/Library/Developer/Xcode/DerivedData
echo "::group::Resolve attempt $attempt for Yattee (macOS)"
xcodebuild -resolvePackageDependencies -project Yattee.xcodeproj -scheme "Yattee (macOS)"
RC=$?
echo "::endgroup::"
[ $RC -eq 0 ] && exit 0
echo "Attempt $attempt failed (rc=$RC), retrying after 15s..."
sleep 15
done
exit 1
- uses: maierj/fastlane-action@v3.0.0
with:
lane: mac build_and_notarize

View File

@@ -1,6 +1,14 @@
## Build 211
## Build 257 (v1.5.2)
## What's Changed
* Fixed Finnish, Indonesian, Korean, Dutch and Swedish translations
### Dependencies
* Update dependencies
## Previous builds
## Build 241
### iOS Fixes
* Fix menu text disappearing in navigation headers and playback settings
@@ -25,11 +33,6 @@
* Add experimental setting to hide videos without duration in Invidious instance settings (can be used to filter shorts)
* Add optional AVPlayer support for non-streamable MP4/AVC1 formats in advanced settings with warnings about slow loading
### Dependencies
* Update dependencies
## Previous builds
## Build 210
## What's Changed

View File

@@ -1,6 +1,6 @@
source "https://rubygems.org"
gem 'fastlane'
gem 'fastlane', '~> 2.232'
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)

View File

@@ -3,13 +3,13 @@ GEM
specs:
CFPropertyList (3.0.8)
abbrev (0.1.2)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
addressable (2.9.0)
public_suffix (>= 2.0.2, < 8.0)
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.4.0)
aws-partitions (1.1187.0)
aws-sdk-core (3.239.1)
aws-partitions (1.1240.0)
aws-sdk-core (3.245.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
@@ -17,18 +17,19 @@ GEM
bigdecimal
jmespath (~> 1, >= 1.6.1)
logger
aws-sdk-kms (1.118.0)
aws-sdk-core (~> 3, >= 3.239.1)
aws-sdk-kms (1.123.0)
aws-sdk-core (~> 3, >= 3.244.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.205.0)
aws-sdk-core (~> 3, >= 3.234.0)
aws-sdk-s3 (1.219.0)
aws-sdk-core (~> 3, >= 3.244.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.3.0)
bigdecimal (3.3.1)
base64 (0.2.0)
benchmark (0.5.0)
bigdecimal (4.1.2)
claide (1.1.0)
colored (1.2)
colored2 (3.1.2)
@@ -42,7 +43,7 @@ GEM
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.112.0)
faraday (1.10.4)
faraday (1.10.5)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
@@ -61,24 +62,26 @@ GEM
faraday-em_synchrony (1.0.1)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.1.1)
faraday-multipart (1.2.0)
multipart-post (~> 2.0)
faraday-net_http (1.0.2)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday-retry (1.0.4)
faraday_middleware (1.2.1)
faraday (~> 1.0)
fastimage (2.4.0)
fastlane (2.229.0)
fastimage (2.4.1)
fastlane (2.232.2)
CFPropertyList (>= 2.3, < 4.0.0)
abbrev (~> 0.1.2)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
aws-sdk-s3 (~> 1.0)
aws-sdk-s3 (~> 1.197)
babosa (>= 1.0.3, < 2.0.0)
bundler (>= 1.12.0, < 3.0.0)
base64 (~> 0.2.0)
benchmark (>= 0.1.0)
bundler (>= 1.17.3, < 5.0.0)
colored (~> 1.2)
commander (~> 4.6)
csv (~> 3.3)
@@ -93,17 +96,20 @@ 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-env (>= 1.6.0, <= 2.1.1)
google-cloud-storage (~> 1.31)
highline (~> 2.0)
http-cookie (~> 1.0.5)
json (< 3.0.0)
jwt (>= 2.1.0, < 3)
logger (>= 1.6, < 2.0)
mini_magick (>= 4.9.4, < 5.0.0)
multipart-post (>= 2.0.0, < 3.0.0)
mutex_m (~> 0.3.0)
naturally (~> 2.2)
nkf (~> 0.2.0)
optparse (>= 0.1.1, < 1.0.0)
ostruct (>= 0.1.0)
plist (>= 3.1.0, < 4.0.0)
rubyzip (>= 2.0.0, < 3.0.0)
security (= 0.1.5)
@@ -116,41 +122,42 @@ GEM
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.4.1)
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-sirp (1.0.0)
sysrandom (~> 1.0)
fastlane-sirp (1.1.0)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.54.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.3)
google-apis-androidpublisher_v3 (0.98.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-core (0.18.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
googleauth (~> 1.9)
httpclient (>= 2.8.3, < 3.a)
mini_mime (~> 1.0)
mutex_m
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
rexml
google-apis-iamcredentials_v1 (0.17.0)
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.31.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-iamcredentials_v1 (0.26.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-playcustomapp_v1 (0.17.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-storage_v1 (0.61.0)
google-apis-core (>= 0.15.0, < 2.a)
google-cloud-core (1.8.0)
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.5.0)
google-cloud-storage (1.47.0)
google-cloud-env (2.1.1)
faraday (>= 1.0, < 3.a)
google-cloud-errors (1.6.0)
google-cloud-storage (1.59.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.31.0)
google-apis-core (>= 0.18, < 2)
google-apis-iamcredentials_v1 (~> 0.18)
google-apis-storage_v1 (>= 0.42)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
googleauth (~> 1.9)
mini_mime (~> 1.0)
googleauth (1.8.1)
faraday (>= 0.17.3, < 3.a)
googleauth (1.11.2)
faraday (>= 1.0, < 3.a)
google-cloud-env (~> 2.1)
jwt (>= 1.4, < 3.0)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
@@ -161,27 +168,29 @@ GEM
httpclient (2.9.0)
mutex_m
jmespath (1.6.2)
json (2.16.0)
json (2.19.3)
jwt (2.10.2)
base64
logger (1.7.0)
mini_magick (4.13.2)
mini_mime (1.1.5)
multi_json (1.17.0)
multi_json (1.20.1)
multipart-post (2.4.1)
mutex_m (0.3.0)
nanaimo (0.4.0)
naturally (2.3.0)
optparse (0.8.0)
nkf (0.2.0)
optparse (0.8.1)
os (1.1.4)
ostruct (0.6.3)
plist (3.7.2)
public_suffix (6.0.2)
rake (13.3.1)
public_suffix (7.0.5)
rake (13.4.2)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
retriable (3.4.1)
rexml (3.4.4)
rouge (3.28.0)
ruby2_keywords (0.0.5)
@@ -195,7 +204,6 @@ GEM
simctl (1.6.10)
CFPropertyList
naturally
sysrandom (1.0.5)
terminal-notifier (2.0.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
@@ -230,7 +238,7 @@ PLATFORMS
x86_64-linux
DEPENDENCIES
fastlane
fastlane (~> 2.232)
BUNDLED WITH
2.5.22

View File

@@ -612,6 +612,9 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
// Some instances are not configured properly and return thumbnail links
// with an incorrect scheme or a missing port.
components.scheme = accountUrlComponents.scheme
if (components.host ?? "") == "" {
components.host = accountUrlComponents.host
}
components.port = accountUrlComponents.port
// If basic HTTP authentication is used,

View File

@@ -3,17 +3,18 @@
<h1>Yattee</h1>
<p>Privacy oriented video player for iOS, tvOS and macOS<br /></p>
[![AGPL v3](https://shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0.en.html)
[![GitHub issues](https://img.shields.io/github/issues/yattee/yattee)](https://github.com/yattee/yattee/issues)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/yattee/yattee)](https://github.com/yattee/yattee/pulls)
[![Matrix](https://img.shields.io/matrix/yattee:matrix.org)](https://matrix.to/#/#Yattee:matrix.org)
[![Discord](https://invidget.switchblade.xyz/pSnNKhZHEG)](https://yattee.stream/discord)
![Screenshot](https://r.yattee.stream/screenshots/all-platforms.png)
</div>
> **Yattee 2 is in the works!** A new version of the app is being built with a refreshed experience for iOS, tvOS and soon for macOS.
> It pairs with the new [Yattee Server](https://github.com/yattee/yattee-server) — a self-hosted backend powered by yt-dlp that supports 1000+ sites.
> Join the [TestFlight beta](https://yattee.stream/beta2) to try early builds, and check the new documentation site at [docs.yattee.stream](https://docs.yattee.stream) for guides, roadmap and changelog.
## Features
* Native user interface built with [SwiftUI](https://developer.apple.com/swiftui/) with customization settings
* Player queue and history
@@ -21,30 +22,5 @@
* Fullscreen, Picture in Picture and background audio playback
* [SponsorBlock](https://sponsor.ajay.app/), configurable categories to skip
## Documentation
* [Installation](https://github.com/yattee/yattee/wiki/Installation-Instructions)
* [Building](https://github.com/yattee/yattee/wiki/Building-instructions)
* [Features](https://github.com/yattee/yattee/wiki/Features)
* [FAQ](https://github.com/yattee/yattee/wiki/FAQ)
* [Screenshots Gallery](https://github.com/yattee/yattee/wiki/Screenshots-Gallery)
* [Tips](https://github.com/yattee/yattee/wiki/Tips)
* [Integrations](https://github.com/yattee/yattee/wiki/Integrations)
* [Donations](https://github.com/yattee/yattee/wiki/Donations)
## Contributing
If you're interestred in contributing, you can browse the [issues](https://github.com/yattee/yattee/issues) list or create a new one to discuss your feature idea. Every contribution is very welcome.
Use [building instructions](https://github.com/yattee/yattee/wiki/Building-instructions) or
join [Discord](https://yattee.stream/discord) or [Matrix Channel](https://matrix.to/#/#yattee:matrix.org) for a chat if you need an advice or want to discuss the project.
## Translations
You can help to make this project accessible to everyone by contributing to its localizations.
<a href="https://hosted.weblate.org/engage/yattee/">
<img src="https://hosted.weblate.org/widgets/yattee/-/localizable-strings/multi-auto.svg" alt="Translation status" />
</a>
Localization service and hosting is provided by [Weblate](https://weblate.org/en/).
## License
Yattee and its components is shared on [AGPL v3](https://www.gnu.org/licenses/agpl-3.0.en.html) license.

View File

@@ -4,13 +4,13 @@
"%@ Channel" = "%@ Csatorna";
"%@ Playlist" = "%@ Lejátszási lista";
"10 seconds forwards/backwards" = "10 másodperc előre/vissza";
"%@ subscribers" = "%@ feliratkozók";
"%lld videos" = "%lld videók";
"%@ subscribers" = "%@ feliratkozó";
"%lld videos" = "%lld videó";
"No results" = "Nincsenek találatok";
"No Playlists" = "Nincsenek lejátszási listák";
"Mark video as watched after playing" = "Jelölje meg a videót megtekintettként lejátszás után";
"Mark watched videos with" = "Megtekintett videók megjelölése a következővel";
"Matrix Channel" = "Matrix csatorna";
"Matrix Channel" = "Matrix-csatorna";
"Find Other" = "Egyebek keresése";
"Hour" = "Óra";
"Month" = "Hónap";
@@ -156,7 +156,7 @@
"Honor orientation lock" = "Tájolás zárolása";
"I am lost" = "Elvesztem";
"I found a bug /" = "Találtam egy hibát /";
"I have a feature request" = "Van egy funkció kérésem";
"I have a feature request" = "Van egy funkciójavaslatom";
"I like this app!" = "Tetszik ez az alkalmazás!";
"I want to ask a question" = "Szeretnék feltenni egy kérdést";
"If you are interested what's coming in future updates, you can track project Milestones." = "Ha érdekli Önt, hogy mi várható a jövőbeni frissítésekben, akkor nyomon követheti a projekt mérföldköveit.";
@@ -218,7 +218,7 @@
"Playback" = "Visszajátszás";
"Player" = "Lejátszó";
"Playlist" = "Lejátszási lista";
"Playlist \"%@\" will be deleted.\nIt cannot be reverted." = "A(z) „%@” lejátszási lista törlésre kerül.\nEzt nem lehet visszaállítani.";
"Playlist \"%@\" will be deleted.\nIt cannot be reverted." = "A(z) „%@” lejátszási lista törölve lesz.\nEzt nem lehet visszaállítani.";
"Popular" = "Népszerű";
"Preferred Formats" = "Előnyben részesített formátumok";
"Proxy videos" = "Proxyzott videók";
@@ -276,7 +276,7 @@
"Source" = "Forrás";
"Sponsor" = "Szponzor";
"SponsorBlock" = "SponsorBlock";
"SponsorBlock API Instance" = "SponsorBlock API példány";
"SponsorBlock API Instance" = "SponsorBlock API-példány";
"Subscribe" = "Feliratkozás";
"Subscriptions" = "Feliratkozások";
"Switch to other public location" = "Váltás más nyilvános helyre";
@@ -329,7 +329,7 @@
"Stream & Player" = "Közvetítő és lejátszó";
"Statistics" = "Statisztika";
"Hardware decoder" = "Hardveres dekódoló";
"Stream FPS" = "FPS folyam";
"Stream FPS" = "FPS-folyam";
"Rate & Captions" = "Értékelés és feliratok";
"Dropped frames" = "Eldobott keretek";
"Any format" = "Bármilyen formátum";
@@ -395,7 +395,7 @@
"Open Video" = "Videó megnyitása";
"Default Profile" = "Alapértelmezett profil";
"Share%@link" = "%@ hivatkozás megosztása";
"\"%@\" will be irreversibly removed from this device." = "A(z) „%@” visszavonhatatlanul eltávolításra kerül erről az eszközről.";
"\"%@\" will be irreversibly removed from this device." = "A(z) „%@” visszavonhatatlanul el lesz távolítva erről az eszközről.";
"Could not delete document" = "A dokumentum törlése nem sikerült";
"Are you sure you want to remove %@ location?" = "Biztosan törölni szeretné a(z) %@ helyet?";
"Live Streams" = "Élő közvetítések";
@@ -471,7 +471,7 @@
"Disable filters" = "Szűrők kikapcsolása";
"You need to create an instance and accounts\nto access %@ section" = "Létre kell hoznia egy példányt és fiókokat\na(z) %@ szakasz eléréséhez";
"You can switch between profiles in playback settings controls." = "A lejátszási beállítások vezérlőiben válthat a profilok között.";
"Share files from Finder on a Mac\nor iTunes on Windows" = "Fájlok megosztása a Finderből Macen\nvagy iTunes használatával Windowson";
"Share files from Finder on a Mac\nor iTunes on Windows" = "Fájlok megosztása a Finderből Mac számítógépen\nvagy iTunes használatával Windowson";
"Open logs in Finder" = "Naplók megnyitása a Finderben";
"Could not open playlist" = "Nem sikerült megnyitni a lejátszási listát";
"Now Playing" = "Jelenleg lejátszás alatt";

View File

@@ -9,7 +9,7 @@
"Help" = "Tallalt";
"Movies" = "Isura";
"Music" = "Aẓawan";
"Profiles" = "Imaɣnuyen";
"Profiles" = "Imaɣnuten";
"Search" = "Nadi";
"Search..." = "Nadi...";
"Settings" = "Iɣewwaren";

View File

@@ -0,0 +1,10 @@
" subscribers" = " ಸಬ್‌ಸ್ಕ್ರೈಬರ್‌ಗಳು";
"%@ Channel" = "%@ ಚಾನಲ್";
"%@ subscribers" = "%@ ಸಬ್‌ಸ್ಕ್ರೈಬರ್‌ಗಳು";
"Accounts" = "ಖಾತೆ";
"Add Account" = "ಖಾತೆಯನ್ನು ಸೇರಿಸಿ";
"Add Account..." = "ಖಾತೆಯನ್ನು ಸೇರಿಸಿ...";
"Add Location" = "ಸ್ಥಳವನ್ನು ಸೇರಿಸಿ";
"Add Location..." = "ಸ್ಥಳವನ್ನು ಸೇರಿಸಿ...";
"Add profile..." = "ಪ್ರೊಫೈಲ್ ಸೇರಿಸಿ...";
"Add Quality Profile" = "ಕ್ವಾಲಿಟಿ ಪ್ರೊಫೈಲ್ ಸೇರಿಸಿ";

View File

@@ -5,19 +5,19 @@
"%@ Playlist" = "%@ 播放列表";
"%@ subscribers" = "%@ 订阅者";
"%lld videos" = "%lld 视频";
"10 seconds forwards/backwards" = "向前/向后10秒";
"10 seconds forwards/backwards" = "快进/快退 10 秒";
"Accounts" = "账号";
"Accounts are not supported for the application of this instance" = "此实例的应用程序不支持帐户";
"Add Account" = "新建账户";
"Add Account..." = "新建账户...";
"Add Location" = "新建地址";
"Add Location..." = "新建地址...";
"Add profile..." = "新建配置...";
"Add Quality Profile" = "新建质量配置";
"Accounts are not supported for the application of this instance" = "此实例的应用程序不支持账号";
"Add Account" = "添加账号";
"Add Account..." = "添加账号…";
"Add Location" = "添加位置";
"Add Location..." = "添加位置…";
"Add profile..." = "添加配置…";
"Add Quality Profile" = "添加质量配置";
"Add to %@" = "添加到 %@";
"Add to Favorites" = "添加到喜欢";
"Add to Favorites" = "添加到收藏";
"Add to Playlist" = "添加到播放列表";
"Add to Playlist..." = "添加到播放列表...";
"Add to Playlist..." = "添加到播放列表";
"Advanced" = "高级";
/* Trending category, section containing all kinds of videos */
@@ -25,11 +25,11 @@
"Always use AVPlayer for live videos" = "对于直播,总是使用 AVPlayer";
"Anonymous" = "匿名";
"Apply to all" = "应用到所有";
"Are you sure you want to clear history of watched videos?" = "确定要清除视频播放历史记录";
"Are you sure you want to clear search history?" = "确定要清除搜索记录";
"Are you sure you want to delete playlist?" = "确定要删除播放列表";
"Are you sure you want to restore default quality profiles?" = "确定要重置默认质量配置?";
"Are you sure you want to unsubscribe from %@?" = "确定要取消订阅 %@";
"Are you sure you want to clear history of watched videos?" = "是否确定要清除已观看视频的历史记录?";
"Are you sure you want to clear search history?" = "是否确定要清除搜索历史记录?";
"Are you sure you want to delete playlist?" = "是否确定要删除播放列表?";
"Are you sure you want to restore default quality profiles?" = "是否确定要恢复默认质量配置?";
"Are you sure you want to unsubscribe from %@?" = "是否确定要取消订阅 %@";
"Automatic" = "自动";
"Autoplaying Next" = "自动播放下一个";
"Backend" = "后端";
@@ -38,21 +38,21 @@
"Battery" = "电池";
"Blue" = "蓝色";
"Browsing" = "浏览";
"Buffering stream..." = "缓冲中...";
"Buffering stream..." = "正在缓冲流…";
"Bugs and great feature ideas can be sent to the GitHub issues tracker. " = "Bug 以及不错的主意可以在 GitHub Issues 界面提出。 ";
"Button" = "按钮";
"Cancel" = "取消";
"Captions" = "字幕";
"Categories to Skip" = "要过的类别";
"Categories to Skip" = "要过的类别";
"Category" = "类别";
"Chapters" = "章节";
"Charging" = "充电";
"Clear" = "清除";
"Clear All" = "清除所有";
"Clear All" = "全部清除";
"Clear All Recents" = "清除最近所有";
"Clear History" = "清除历史记录";
"Clear Search History" = "清除搜索记录";
"Clear Search History..." = "清除搜索记录...";
"Clear Search History" = "清除搜索历史记录";
"Clear Search History..." = "清除搜索历史记录…";
"Clear the queue" = "清除队列";
"Close" = "关闭";
"Close PiP and open player when application enters foreground" = "当应用程序进入前台时,关闭 PiP 并打开播放器";
@@ -72,16 +72,16 @@
"Controls" = "控制";
"Copy %@ link" = "复制 %@ 的链接";
"Copy %@ link with time" = "复制 %@ 的链接(包含时间)";
"Could not load locations manifest" = "无法加载地区列表";
"Country" = "国家地区";
"Could not load locations manifest" = "无法加载位置清单";
"Country" = "国家/地区";
"Cellular" = "移动网络";
"Country Name or Code" = "地区名称或代码";
"Country Name or Code" = "国家/地区名称或代码";
"Create Playlist" = "创建播放列表";
"Current: %@\n%@" = "正在播放:%@\n%@";
/* Locations settings, custom instance is selected as current */
"Custom" = "自定义";
"Custom Locations" = "自定义地址";
"Custom Locations" = "自定义位置";
/* Video sort order in search */
"Date" = "日期";
@@ -90,33 +90,33 @@
"Delete" = "删除";
"Disabled" = "禁用";
"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" = "不使用公开地址";
"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 Quality Profile" = "编辑质量配置";
"Edit..." = "编辑...";
"Edit..." = "编辑";
"Enable logging" = "启用日志";
"Enter fullscreen in landscape" = "在屏模式进入全屏";
"Enter fullscreen in landscape" = "在屏模式进入全屏";
"Error" = "错误";
"Error when accessing playlist" = "在访问播放列表时出错";
"Explicit reminders to like, subscribe or interact with them on any paid or free platform(s) (e.g. click on a video)." = "明确提醒你在任何付费或免费平台上点赞、订阅或与他们互动(例如点击视频)。";
"Favorites" = "喜欢";
"Favorites" = "收藏";
"Filter" = "过滤器";
"Filter: active" = "过滤器:启用";
"Find Other" = "寻找其他";
"Finding something to play..." = "正在寻找一些视频来播放...";
"Enable Return YouTube Dislike" = "启用返回 YouTube 不喜欢";
"Finding something to play..." = "正在查找可播放的视频…";
"Enable Return YouTube Dislike" = "启用 Return YouTube Dislike";
"Formats will be selected in order as listed.\nHLS is an adaptive format (resolution setting does not apply)." = "格式将按列出的顺序选择。\nHLS是一种自适应格式不应用分辨率设置。";
"Frontend URL" = "前端地址";
"Fullscreen size" = "全屏大小";
"Gaming" = "游戏";
"Help" = "帮助";
"Hide sidebar" = "隐藏侧边栏";
"High" = "高";
"High" = "高";
"Highest" = "最高";
"Highest quality" = "最高质量";
"History" = "历史记录";
@@ -132,7 +132,7 @@
"If you are interested what's coming in future updates, you can track project Milestones." = "如果您对最近的功能更新感兴趣,您可以跟踪我们的项目里程碑。";
"Increase rate" = "增长率";
"Info" = "信息";
"Instance of current account" = "正在使用的帐户实例";
"Instance of current account" = "当前账号实例";
/* SponsorBlock category name */
"Interaction" = "交互";
@@ -149,11 +149,11 @@
"Large" = "大";
"Large layout is not suitable for all devices and using it may cause controls not to fit on the screen." = "大布局并不适合所有设备。使用它可能导致控制按钮在屏幕上并不适合。";
"LIVE" = "直播";
"Loading..." = "加载中...";
"Loading..." = "正在加载…";
/* Loading stream OSD */
"Loading streams…" = "加载流…";
"Locations" = "地址";
"Loading streams…" = "正在加载流…";
"Locations" = "位置";
"Lock portrait mode" = "锁定竖屏模式";
/* Video duration filter in search */
@@ -185,13 +185,13 @@
"Normal" = "普通";
"Not available" = "不可用";
"Not Playing" = "没有播放";
"Nothing" = "没有东西";
"Only when signed in" = "仅当登陆时";
"Nothing" = "";
"Only when signed in" = "仅当登录后";
"Open \"Playlists\" tab to create new one" = "打开“播放列表” 页面创建新的播放列表";
"Open Settings" = "打开设置";
/* Loading stream OSD */
"Opening %@ stream…" = "正在打开 %@ 流…";
"Opening %@ stream…" = "正在打开 %@ 流…";
"Opening audio stream…" = "正在打开音频流…";
"Orientation" = "方向";
@@ -209,10 +209,10 @@
"Play Next" = "播放下一个";
"Play Last" = "播放上一个";
"Play Now" = "现在播放";
"Playback" = "放";
"Playback" = "放";
"Player" = "播放器";
"Playlist" = "播放列表";
"Playlist \"%@\" will be deleted.\nIt cannot be reverted." = "播放列表 “%@” 将被删除。\n此操作不可恢复。";
"Playlist \"%@\" will be deleted.\nIt cannot be reverted." = "播放列表“%@”将被删除。\n此操作无法撤销。";
"Playlists" = "播放列表";
"Popular" = "流行";
"Preferred Formats" = "首选格式";
@@ -233,13 +233,13 @@
"Music" = "音乐";
"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." = "视频宣传产品或服务的一部分,与创作者没有直接关系。创作者将以金钱或免费产品的形式获得报酬或补偿。";
"Promoting a product or service that is directly related to the creator themselves. This usually includes merchandise or promotion of monetized platforms." = "推广与创作者本身直接相关的产品或服务。这通常包括商品或盈利平台的推广。";
"Remove from Playlist" = "从播放列表中除";
"Remove from the queue" = "从队列中除";
"Remove from Playlist" = "从播放列表中除";
"Remove from the queue" = "从队列中除";
"Restart the app to apply the settings above." = "重启 App 以应用以上设置。";
"Restart/Play next" = "重新播放/播放下一个";
"Typically near or at the end of the video when the credits pop up and/or endcards are shown." = "通常在视频结束时或接近视频结尾时,出现 Credits Pop Up 和结束卡片。";
"Public Locations" = "公共地址";
"Public Manifest" = "公清单";
"Public Locations" = "公开位置";
"Public Manifest" = "公清单";
"Quality" = "质量";
"Quality Profile" = "质量配置";
"Queue" = "队列";
@@ -257,51 +257,51 @@
/* Video sort order in search */
"Relevance" = "相关";
"Remove" = "除";
"Remove from Favorites" = "从收藏中除";
"Remove from history" = "从历史列表中删除";
"Remove" = "除";
"Remove from Favorites" = "从收藏中除";
"Remove from history" = "从历史记录中移除";
"Replies" = "回复";
"Reset" = "重置";
"Reset search filters" = "重置搜索过滤器";
"Reset watched status when playing again" = "重置播放状态当重新播放时";
"Resolution" = "解决方法";
"Restart" = "重新播放";
"Search history is empty" = "搜索记录为空";
"Restore default profiles..." = "重置默认配置文件...";
"Search history is empty" = "搜索历史记录为空";
"Restore default profiles..." = "恢复默认配置";
"Rotate to portrait when exiting fullscreen" = "离开全屏时旋转到竖屏";
"Round corners" = "圆角";
"Save" = "保存";
"Save history of played videos" = "保存视频播放历史记录";
"Save history of played videos" = "保存已播放视频的历史记录";
"Save history of searches, channels and playlists" = "保存搜索、频道、播放列表的历史记录";
"Search" = "搜索";
"Search..." = "搜索...";
"Search..." = "搜索";
"Sections" = "章节";
"Seek gesture sensitivity" = "手势灵敏度";
"Seek gesture speed" = "手势灵敏度速度";
"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." = "通常在视频开头找到的片段,包括动画、静止帧或剪辑,这些片段也可以由同一创作者在其他视频中看到。";
"Select location closest to you:" = "选择离最近的位置:";
"Select location closest to you:" = "选择离最近的位置:";
/* SponsorBlock category name */
"Self-promotion" = "自我推销";
"Settings" = "设置";
"Share %@ link" = "分享 %@ 的链接";
"Share %@ link with time" = "分享 %@ 的链接(包含时间)";
"Share..." = "分享...";
"Share..." = "分享";
/* Video duration filter in search */
"Short" = "短视频";
"Show account username" = "显示户名";
"Show anonymous accounts" = "显示匿名帐户";
"Show account username" = "显示账号用户名";
"Show anonymous accounts" = "显示匿名账号";
"Show channel name" = "显示频道名称";
"Show history" = "显示历史记录";
"Show keywords" = "显示关键词";
"Show playback statistics" = "显示放统计信息";
"Show playback statistics" = "显示放统计数据";
"Show progress of watching on thumbnails" = "在缩略图上显示观看进度";
"Show sidebar when space permits" = "在空间允许时显示侧边栏";
"Show video length" = "显示视频长度";
"Shuffle All" = "打乱所有顺序";
"Shuffle" = "打乱顺序";
"Shuffle All" = "全部随机播放";
"Shuffle" = "随机播放";
"Sidebar" = "侧边栏";
"Sign In Required" = "需要登陆";
@@ -321,15 +321,15 @@
/* Subscriptions title */
"Subscriptions" = "关注列表";
"Switch to other public location" = "选择其他公共地址";
"Switch to public locations" = "切换到公共地址";
"Switch to other public location" = "切换到其他公开位置";
"Switch to public locations" = "切换到公开位置";
"System controls buttons" = "系统控制按钮";
"System controls show buttons for %@" = "系统控件显示 %@ 的按钮";
"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." = "很高兴听到您这么说。提供人们想要的应用程序是一件很有趣的事情。您可以考虑为项目捐款,或为新功能开发做出贡献。";
"This cannot be reverted" = "此操作不可还原";
"This cannot be reverted. You might need to switch between views or restart the app to see changes." = "此操作无法恢复。您可能需要在视图之间切换或重新启动 App 以查看更改。";
"This information will be processed only on your device and used to connect you to the server in the specified country." = "此信息将仅在您的设备上处理,并用于将您连接到指定国家/地区的服务器。";
"This will remove all your custom profiles and return their default values. This cannot be reverted." = "这将删除所有自定义配置文件并还原为其默认值。此操作无法恢复。";
"This will remove all your custom profiles and return their default values. This cannot be reverted." = "这将移除您所有自定义配置并恢复其默认值。此操作无法撤销。";
"Thumbnails" = "缩略图";
/* Video date filter in search */
@@ -372,27 +372,27 @@
"Year" = "年";
"You can find information about using Yattee in the Wiki pages." = "您可以在 Wiki 相关页面中找到有关使用 Yattee 的信息。";
"Yattee %@ (build %@)" = "Yattee %@ (内部构建版本 %@)";
"You can use automatic profile selection based on current device status or switch it in video playback settings controls." = "您可以使用基于当前设备状态自动配置文件选择,或在视频播放设置控件中进行切换。";
"You can use automatic profile selection based on current device status or switch it in video playback settings controls." = "您可以根据当前设备状态使用自动配置选择功能,或在视频播放设置控件中进行切换。";
"You have no Playlists" = "你没有播放列表";
"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访问 %@ 部分";
"You need to create an instance and accounts\nto access %@ section" = "需要创建实例和账号\n才能访问 %@ 的部分";
"You need to select an account\nto access %@ section" = "需要选择账号\n才能访问 %@ 部分";
"Public" = "公开";
"Unlisted" = "未列出";
"Now Playing" = "正在播放";
"Current Location" = "当前地址";
"Current Location" = "当前位置";
"Private" = "私有";
"Playback queue is empty" = "回放列表空空如也";
"Playback queue is empty" = "播放队列为空";
"Playing Next" = "播放下一个";
"You can switch between profiles in playback settings controls." = "您可以在放设置控件中切换配置文件。";
"Add Channels, Playlists and Searches to Favorites using" = "添加将频道、播放列表和搜索到收藏";
"You can switch between profiles in playback settings controls." = "您可以在放设置控件中切换配置。";
"Add Channels, Playlists and Searches to Favorites using" = "将频道、播放列表和搜索添加到收藏使用";
"Make default" = "设置默认值";
"Visibility" = "可见性";
"Current Playlist" = "当前播放列表";
"Stream & Player" = "播放流 & 播放器";
"Statistics" = "统计";
"Statistics" = "统计数据";
"Hardware decoder" = "硬件解码";
"Stream FPS" = "流 FPS";
"Cached time" = "缓存时间";
@@ -401,8 +401,8 @@
"Any format" = "任何格式";
"%@ formats" = "%@ 格式";
"Keep last played video in the queue after restart" = "重新启动后在队列中保留上次播放的视频";
"Playlist is empty\n\nTap and hold on a video and then \n\"Add to Playlist\"" = "播放列表空空如也\n\n点击并按住视频,然后\n添加到播放列表";
"It can be changed later in settings. You can use your own locations too." = "稍后可以在设置中更改。也可以使用自己的地址。";
"Playlist is empty\n\nTap and hold on a video and then \n\"Add to Playlist\"" = "播放列表为空\n\n长按视频,然后\n添加到播放列表";
"It can be changed later in settings. You can use your own locations too." = "稍后可以在设置中更改。也可以使用自己的位置。";
"Press and hold remote button to open captions and quality menus" = "按住遥控按钮打开字幕和质量菜单";
"Comments are disabled" = "评论区已被关闭";
"No comments" = "没有评论";
@@ -410,14 +410,14 @@
"Share Logs..." = "分享日志…";
"Open logs in Finder" = "在 Finder 中打开日志";
"Could not refresh Subscriptions" = "无法刷新关注列表";
"Could not load streams" = "无法加载视频流";
"Could not load streams" = "无法加载流";
"Could not open video" = "无法打开视频";
"Channel could not be found" = "无法找到频道";
"Could not extract channel information" = "无法获取频道信息";
"Could not extract SID from received cookies: %@" = "无法从收到的 Cookie 中提取 SID%@";
"Could not update your token." = "无法更新你的令牌Token。";
"Could not refresh Trending" = "无法刷新今日趋势";
"For custom locations you can configure Frontend URL in Locations settings" = "对于自定义位置,您可以在设置中配置前端 URL";
"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 refresh Popular" = "无法刷新「流行」";
@@ -427,15 +427,15 @@
"This video could not be opened" = "无法打开这个视频";
"Could not extract playlist ID" = "无法获取播放列表 ID";
"Could not load video" = "无法加载视频";
"No locations available at the moment" = "此时没有地址可用";
"No locations available at the moment" = "目前没有可用的位置";
"Could not refresh Playlists" = "无法刷新播放列表";
"If you want this app to be available in your language, join translation project." = "如果你想让此 App 在你的语言中可用,或翻译存在错误,请加入翻译项目。";
"Translations" = "翻译";
"No documents" = "没有文档";
"Are you sure you want to remove this document?" = "你确定想要删除这个文档";
"\"%@\" will be irreversibly removed from this device." = "“%@” 将会从这个设备中删除。此操作不可逆。";
"Are you sure you want to remove this document?" = "是否确定要移除此文档?";
"\"%@\" will be irreversibly removed from this device." = "“%@”将从本设备不可逆地移除。";
"Could not delete document" = "无法删除文档";
"Are you sure you want to remove %@ location?" = "你确定想要删除 %@ 地址";
"Are you sure you want to remove %@ location?" = "是否确定要移除 %@ 位置";
"Recent Documents" = "最近的文档";
"Recent History" = "最近的历史记录";
"Show Open Videos quick actions" = "显示打开视频快速操作";
@@ -448,13 +448,13 @@
"Enter link to open" = "输入要打开的链接";
"Show only icons" = "仅显示图标";
"Video" = "视频";
"Sample Rate" = "码率示例";
"Sample Rate" = "采样率";
"Edit Favorites…" = "编辑收藏…";
"Show Open Videos toolbar button" = "显示「打开视频」工具栏按钮";
"Buttons labels" = "按钮标签";
"Files" = "文件";
"Show Documents" = "显示文档";
"Video Details" = "视频详细描述";
"Video Details" = "视频详";
"Show Inspector" = "显示检查器";
"Inspector visibility" = "检查器可见性";
"Reload manifest" = "重新加载清单";
@@ -466,7 +466,7 @@
"Paste" = "粘贴";
"Open Videos" = "打开视频";
"Enter links to open, one per line" = "输入需要打开的链接,每行一个";
"Playback Mode" = "放模式";
"Playback Mode" = "放模式";
"Add" = "添加";
"Hide" = "隐藏";
"Always" = "总是";
@@ -483,17 +483,17 @@
"Documents" = "文档";
"Audio" = "音频";
"File" = "文件";
"Codec" = "编码器Codec";
"Codec" = "编码器";
"Size" = "大小";
"FPS" = "FPS";
"Could not find any links to open in your clipboard" = "无法在你的剪辑版中找到任何可以打开的链接";
"Remove…" = "除…";
"Playback history is empty" = "放历史为空";
"Remove…" = "除…";
"Playback history is empty" = "放历史记录为空";
"Address" = "地址";
"Actions buttons" = "动作按钮";
"Show sidebar" = "显示侧边栏";
"Locations Manifest" = "地址清单";
"Remove Location" = "删除地址";
"Locations Manifest" = "位置清单";
"Remove Location" = "移除位置";
"Open Video" = "打开视频";
"Default Profile" = "默认配置";
"Copy%@link" = "复制 %@ 的链接";
@@ -515,18 +515,18 @@
"Show video context menu options to force selected backend" = "显示视频内容目录选项来强制选择的后端";
"Gesture: backwards" = "手势:向后";
"Maximum width expanded" = "最大宽度展开";
"Clear all" = "清除所有APP缓存";
"Clear all" = "全部清除";
"Total size: %@" = "总大小:%@";
"Gesture settings control skipping interval for double tap gesture on left/right side of the player. Changing system controls settings requires restart." = "手势设置控制玩家左右两侧双击手势的跳过间隔。更改系统控制设置需要重新启动。";
"Play next item" = "播放下一个";
"Subscribe/Unsubscribe" = "关注/取消关注";
"Autoplay next" = "自动播放下一个";
"Enter location address to connect..." = "输入链接地址以连接...";
"Enter location address to connect..." = "输入要连接的位置地址…";
"Keep channels with unwatched videos on top of subscriptions list" = "保留频道,并且未观看视频放在关注列表最上面";
"Play Now in AVPlayer" = "在 AVPlayer 中播放当前项目";
"Play Now in MPV" = "在 MPV 中播放当前项目";
"Seek" = "探索";
"Enter account credentials to connect..." = "输入账户凭据来连接...";
"Enter account credentials to connect..." = "输入要连接的账号凭据…";
"Show scroll to top button in comments" = "在评论中显示“滚动到顶部”按钮";
"Opened File" = "打开的文件";
"File Extension" = "文件扩展";
@@ -551,12 +551,12 @@
"Show cache status" = "显示缓存状态";
"Maximum feed items" = "最大 Feed 项目";
"Open channels with description expanded" = "打开描述展开的频道";
"Are you sure you want to clear cache?" = "确定要清除缓存";
"Are you sure you want to clear cache?" = "是否确定要清除缓存?";
"Close video and player on end" = "在播放结束时关闭播放器和视频";
"Use system controls with AVPlayer" = "使用 AVPlayer 与系统控制按钮";
"Public account" = "公账号";
"Your Accounts" = "的账号";
"Browse without account" = "匿名浏览";
"Public account" = "公账号";
"Your Accounts" = "的账号";
"Browse without account" = "无账号浏览";
"Rotate when entering fullscreen on landscape video" = "当观看全景视频,进入全屏时旋转";
"Landscape left" = "全景视频左边";
"Landscape right" = "全景视频右边";
@@ -572,7 +572,7 @@
"(watched hidden)" = "(已观看已隐藏)";
"(shorts hidden)" = "(短视频已隐藏)";
"Limit" = "限制";
"Are you sure you want to remove %@ from Favorites?" = "确定要从收藏夹中删除 %@";
"Are you sure you want to remove %@ from Favorites?" = "是否确定要从收藏中移除 %@";
"List" = "列表";
"Cells" = "Cells";
"Toggle size" = "总大小";
@@ -588,10 +588,44 @@
"Mark all as unwatched" = "标记所有未看过的";
"Mark all as watched" = "标记所有看过的";
"Queue - shuffled" = "队列 - 随机";
"Playback Settings" = "放设置";
"Playback Settings" = "放设置";
"Replay" = "重新播放";
"Fullscreen" = "全屏";
"Lock" = "锁定";
"Description" = "描述";
"Loop one" = "单个循环";
"Stream" = "流播放";
"Accounts passwords (unencrypted)" = "账号密码(未加密)";
"Do not share this file with anyone or you can lose access to your accounts. If you don't select to export passwords you will be asked to provide them during import" = "请勿与任何人分享此文件,否则您可能会失去对账号访问权限。如果您未选择导出密码,系统将要求您在导入过程中提供密码";
"Account already exists" = "账号已存在";
"Add %@" = "添加 %@";
"Custom Location already exists" = "自定义位置已存在";
"Custom Location selected for import" = "已选择导入的自定义位置";
"Custom Location not selected for import" = "未选择导入的自定义位置";
"Are you sure you want to export unencrypted passwords?" = "是否确定要导出未加密的密码?";
"Other data include last used playback preferences and listing options" = "其他数据包括上次使用的播放偏好设置和列表选项";
"Import Settings..." = "导入设置…";
"Export..." = "导出…";
"Export in progress..." = "导出正在进行中…";
"In progress..." = "正在进行中…";
"Podcasts" = "播客";
"Releases" = "发布";
"Other" = "其他";
"Export" = "导出";
"Build" = "构建";
"Platform" = "平台";
"Import" = "导入";
"No preview" = "无预览";
"Description preview" = "描述预览";
"Export Settings" = "导出设置";
"Other data" = "其他数据";
"File information" = "文件信息";
"Icon only" = "仅图标";
"Chapters (if available)" = "章节(如有)";
"Action button labels" = "操作按钮标签";
"Icon and text" = "图标和文本";
"Password required to import" = "导入需要密码";
"Password saved in import file" = "密码已保存在导入文件中";
"Show channel avatars in channels lists" = "在频道列表中显示频道头像";
"Show channel avatars in videos lists" = "在视频列表中显示频道头像";
"Open vertical chapters expanded" = "垂直章节展开";

View File

@@ -1283,6 +1283,11 @@
375AC29D2B66BDD600B680E7 /* ImportExportSettingsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportExportSettingsModel.swift; sourceTree = "<group>"; };
375B537728DF6CBB004C1D19 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
375B537928DF6CC4004C1D19 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
37FFBA77110000000000F001 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = "<group>"; };
37FFBA77110000000000F002 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = id; path = id.lproj/Localizable.strings; sourceTree = "<group>"; };
37FFBA77110000000000F003 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = "<group>"; };
37FFBA77110000000000F004 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
37FFBA77110000000000F005 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = "<group>"; };
375B8AB228B580D300397B31 /* KeychainModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainModel.swift; sourceTree = "<group>"; };
375CE60428E4A038009B8EA2 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
375CE60528E4A054009B8EA2 /* nb-NO */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "nb-NO"; path = "nb-NO.lproj/Localizable.strings"; sourceTree = "<group>"; };
@@ -4154,6 +4159,11 @@
37367E582B8F63C200436163 /* zh-Hant */,
37E21DC52CDE528A008DF47C /* ta */,
376EC9D82D1DD39800EC4500 /* hu */,
37FFBA77110000000000F001 /* fi */,
37FFBA77110000000000F002 /* id */,
37FFBA77110000000000F003 /* ko */,
37FFBA77110000000000F004 /* nl */,
37FFBA77110000000000F005 /* sv */,
);
name = Localizable.strings;
sourceTree = "<group>";
@@ -4168,7 +4178,7 @@
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Open in Yattee/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "Open in Yattee";
@@ -4199,7 +4209,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Open in Yattee/Info.plist";
@@ -4230,7 +4240,7 @@
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
MACOSX_DEPLOYMENT_TARGET = 14.0;
@@ -4250,7 +4260,7 @@
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
MACOSX_DEPLOYMENT_TARGET = 14.0;
@@ -4414,7 +4424,7 @@
CODE_SIGN_ENTITLEMENTS = "iOS/Yattee (iOS).entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
ENABLE_PREVIEWS = YES;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
@@ -4468,7 +4478,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
ENABLE_PREVIEWS = YES;
GCC_PREPROCESSOR_DEFINITIONS = "GLES_SILENCE_DEPRECATION=1";
@@ -4522,7 +4532,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
DEAD_CODE_STRIPPING = YES;
ENABLE_APP_SANDBOX = YES;
ENABLE_HARDENED_RUNTIME = YES;
@@ -4561,7 +4571,7 @@
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
DEAD_CODE_STRIPPING = YES;
"DEVELOPMENT_TEAM[sdk=macosx*]" = 78Z5H3M6RJ;
ENABLE_APP_SANDBOX = YES;
@@ -4596,7 +4606,7 @@
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4619,7 +4629,7 @@
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4644,7 +4654,7 @@
buildSettings = {
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
DEAD_CODE_STRIPPING = YES;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4668,7 +4678,7 @@
buildSettings = {
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
DEAD_CODE_STRIPPING = YES;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4694,7 +4704,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
DEVELOPMENT_ASSET_PATHS = "";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -4734,7 +4744,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
DEVELOPMENT_ASSET_PATHS = "";
"DEVELOPMENT_TEAM[sdk=appletvos*]" = 78Z5H3M6RJ;
ENABLE_PREVIEWS = YES;
@@ -4774,7 +4784,7 @@
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -4797,7 +4807,7 @@
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 211;
CURRENT_PROJECT_VERSION = 257;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",

View File

@@ -79,7 +79,8 @@ platform :ios do
api_key = app_store_connect_api_key(
key_id: DEVELOPER_KEY_ID,
issuer_id: DEVELOPER_KEY_ISSUER_ID,
key_content: DEVELOPER_KEY_CONTENT
key_content: DEVELOPER_KEY_CONTENT,
is_key_content_base64: true
)
build = get_build_number(xcodeproj: XCODEPROJ)
@@ -131,7 +132,8 @@ platform :tvos do
api_key = app_store_connect_api_key(
key_id: DEVELOPER_KEY_ID,
issuer_id: DEVELOPER_KEY_ISSUER_ID,
key_content: DEVELOPER_KEY_CONTENT
key_content: DEVELOPER_KEY_CONTENT,
is_key_content_base64: true
)
build = get_build_number(xcodeproj: XCODEPROJ)
@@ -183,7 +185,8 @@ platform :mac do
api_key = app_store_connect_api_key(
key_id: DEVELOPER_KEY_ID,
issuer_id: DEVELOPER_KEY_ISSUER_ID,
key_content: DEVELOPER_KEY_CONTENT
key_content: DEVELOPER_KEY_CONTENT,
is_key_content_base64: true
)
build = get_build_number(xcodeproj: XCODEPROJ)
@@ -234,7 +237,8 @@ platform :mac do
api_key = app_store_connect_api_key(
key_id: DEVELOPER_KEY_ID,
issuer_id: DEVELOPER_KEY_ISSUER_ID,
key_content: DEVELOPER_KEY_CONTENT
key_content: DEVELOPER_KEY_CONTENT,
is_key_content_base64: true
)
build = get_build_number(xcodeproj: XCODEPROJ)