diff --git a/src/main/index.js b/src/main/index.js
index c2e8d1e9..8125c9a1 100644
--- a/src/main/index.js
+++ b/src/main/index.js
@@ -308,7 +308,7 @@ function runApp() {
ipcMain.on('setBounds', (_e, data) => {
const value = {
- ...mainWindow.getBounds(),
+ ...mainWindow.getNormalBounds(),
maximized: mainWindow.isMaximized()
}
diff --git a/src/renderer/components/ft-video-player/ft-video-player.js b/src/renderer/components/ft-video-player/ft-video-player.js
index 4009c081..cc57f376 100644
--- a/src/renderer/components/ft-video-player/ft-video-player.js
+++ b/src/renderer/components/ft-video-player/ft-video-player.js
@@ -73,6 +73,7 @@ export default Vue.extend({
useDash: false,
useHls: false,
selectedDefaultQuality: '',
+ selectedQuality: '',
maxFramerate: 0,
activeSourceList: [],
mouseTimeout: null,
@@ -198,7 +199,8 @@ export default Vue.extend({
vhs: {
limitRenditionByPlayerDimensions: false,
smoothQualityChange: false,
- allowSeeksWithinUnsafeLiveWindow: true
+ allowSeeksWithinUnsafeLiveWindow: true,
+ handlePartialData: true
}
}
})
@@ -214,14 +216,12 @@ export default Vue.extend({
}
if (this.useDash) {
- this.dataSetup.plugins.httpSourceSelector = {
- default: 'auto'
- }
+ // this.dataSetup.plugins.httpSourceSelector = {
+ // default: 'auto'
+ // }
- this.player.httpSourceSelector()
- setTimeout(() => {
- this.determineDefaultQualityDash()
- }, 400)
+ // this.player.httpSourceSelector()
+ this.createDashQualitySelector(this.player.qualityLevels())
}
if (this.autoplayVideos) {
@@ -417,7 +417,7 @@ export default Vue.extend({
determineDefaultQualityDash: function () {
if (this.defaultQuality === 'auto') {
- return
+ this.setDashQualityLevel('auto')
}
this.player.qualityLevels().levels_.sort((a, b) => {
@@ -433,27 +433,62 @@ export default Vue.extend({
}
if (this.defaultQuality === quality) {
- ql.enabled = true
+ this.setDashQualityLevel(height)
} else if (upperLevel !== null) {
const upperHeight = upperLevel.height
const upperWidth = upperLevel.width
const upperQuality = upperWidth < upperHeight ? upperWidth : upperHeight
if (this.defaultQuality >= quality && this.defaultQuality < upperQuality) {
- ql.enabled = true
- } else {
- ql.enabled = false
+ this.setDashQualityLevel(height)
}
} else if (index === 0 && quality > this.defaultQuality) {
- ql.enabled = true
+ this.setDashQualityLevel(height)
} else if (index === (arr.length - 1) && quality < this.defaultQuality) {
- ql.enabled = true
- } else {
- ql.enabled = false
+ this.setDashQualityLevel(height)
}
})
},
+ setDashQualityLevel: function (qualityLevel) {
+ if (this.selectedQuality === qualityLevel) {
+ return
+ }
+ this.player.qualityLevels().levels_.sort((a, b) => {
+ return a.height - b.height
+ }).forEach((ql, index, arr) => {
+ if (qualityLevel === 'auto' || ql.height === qualityLevel) {
+ ql.enabled = true
+ ql.enabled_(true)
+ } else {
+ ql.enabled = false
+ ql.enabled_(false)
+ }
+ })
+
+ const selectedQuality = qualityLevel === 'auto' ? 'auto' : qualityLevel + 'p'
+
+ const qualityElement = document.getElementById('vjs-current-quality')
+ qualityElement.innerText = selectedQuality
+ this.selectedQuality = qualityLevel
+
+ const qualityItems = $('.quality-item').get()
+
+ $('.quality-item').removeClass('quality-selected')
+
+ qualityItems.forEach((item) => {
+ const qualityText = $(item).find('.vjs-menu-item-text').get(0)
+ if (qualityText.innerText === selectedQuality) {
+ $(item).addClass('quality-selected')
+ }
+ })
+
+ // const currentTime = this.player.currentTime()
+
+ // this.player.currentTime(0)
+ // this.player.currentTime(currentTime)
+ },
+
enableDashFormat: function () {
if (this.dashSrc === null) {
console.log('No dash format available.')
@@ -629,6 +664,58 @@ export default Vue.extend({
videojs.registerComponent('fullWindowButton', fullWindowButton)
},
+ createDashQualitySelector: function (levels) {
+ const v = this
+ if (levels.levels_.length === 0) {
+ setTimeout(() => {
+ this.createDashQualitySelector(this.player.qualityLevels())
+ }, 200)
+ return
+ }
+ const VjsButton = videojs.getComponent('Button')
+ const dashQualitySelector = videojs.extend(VjsButton, {
+ constructor: function(player, options) {
+ VjsButton.call(this, player, options)
+ },
+ handleClick: function(event) {
+ const selectedQuality = event.target.innerText
+ const quality = selectedQuality === 'auto' ? 'auto' : parseInt(selectedQuality.replace('p', ''))
+ v.setDashQualityLevel(quality)
+ // console.log(this.player().qualityLevels())
+ },
+ createControlTextEl: function (button) {
+ const beginningHtml = `
+ 1080p
+
+ '
+
+ let qualityHtml = ``
+
+ levels.levels_.sort((a, b) => {
+ return b.height - a.height
+ }).forEach((quality) => {
+ qualityHtml = qualityHtml + ``
+ })
+ return $(button).html(
+ $(beginningHtml + qualityHtml + endingHtml).attr(
+ 'title',
+ 'Select Quality'
+ ))
+ }
+ })
+ videojs.registerComponent('dashQualitySelector', dashQualitySelector)
+ this.player.controlBar.addChild('dashQualitySelector', {}, this.player.controlBar.children_.length - 1)
+ this.determineDefaultQualityDash()
+ },
+
toggleFullWindow: function() {
if (!this.player.isFullscreen_) {
if (this.player.isFullWindow) {
diff --git a/src/renderer/main.js b/src/renderer/main.js
index 478f3121..9513d603 100644
--- a/src/renderer/main.js
+++ b/src/renderer/main.js
@@ -27,7 +27,7 @@ Vue.component('FontAwesomeIcon', FontAwesomeIcon)
Vue.use(VueI18n)
// List of locales approved for use
-const activeLocales = ['en-US', 'en_GB', 'ar', 'bg', 'cs', 'da', 'de-DE', 'el', 'es', 'es-MX', 'fi', 'fr-FR', 'gl', 'he', 'hu', 'hr', 'id', 'it', 'ja', 'nl', 'pl', 'pt', 'pt-BR', 'pt-PT', 'ru', 'sk', 'sl', 'sv', 'tr', 'vi', 'zh-CN', 'zh-TW']
+const activeLocales = ['en-US', 'en_GB', 'ar', 'bg', 'cs', 'da', 'de-DE', 'el', 'es', 'es-MX', 'fi', 'fr-FR', 'gl', 'he', 'hu', 'hr', 'id', 'it', 'ja', 'nb_NO', 'nl', 'pl', 'pt', 'pt-BR', 'pt-PT', 'ru', 'sk', 'sl', 'sv', 'tr', 'uk', 'vi', 'zh-CN', 'zh-TW']
const messages = {}
/* eslint-disable-next-line */
const fileLocation = isDev ? 'static/locales/' : `${__dirname}/static/locales/`
diff --git a/src/renderer/videoJS.css b/src/renderer/videoJS.css
index 767006db..3203ae64 100644
--- a/src/renderer/videoJS.css
+++ b/src/renderer/videoJS.css
@@ -643,6 +643,46 @@ body.vjs-full-window {
display: none;
}
+.vjs-quality-level-value {
+ width: 100%;
+ height: 100%;
+}
+
+.vjs-quality-level-value span {
+ line-height: 40px;
+}
+
+.vjs-quality-level-value:hover + .vjs-quality-level-menu {
+ display: block;
+}
+
+.vjs-quality-level-menu {
+ display: none;
+ position: absolute;
+ bottom: 30px;
+ left: -8px;
+ z-index: 5;
+ background-color: #151b17;
+ width: 50px;
+}
+
+.vjs-quality-level-menu:hover {
+ display: block;
+}
+
+.vjs-quality-level-menu .vjs-menu-item {
+ padding: 5px;
+}
+
+.quality-selected {
+ background-color: var(--primary-color);
+ color: var(--text-with-main-color);
+}
+
+.quality-selected:hover {
+ background-color: var(--primary-color-hover) !important;
+}
+
.vjs-menu .vjs-menu-content {
display: block;
padding: 0;
diff --git a/static/locales/bg.yaml b/static/locales/bg.yaml
index ddaa2988..24d8ea43 100644
--- a/static/locales/bg.yaml
+++ b/static/locales/bg.yaml
@@ -30,10 +30,10 @@ Close: 'Затваряне'
Back: 'Назад'
Forward: 'Напред'
-Version $ is now available! Click for more details: 'Версия $ е вече налична! Щракнете
+Version $ is now available! Click for more details: 'Версия $ е вече налична! Кликнете
за повече детайли'
Download From Site: 'Сваляне от сайта'
-A new blog is now available, $. Click to view more: 'Нова публикация в блога, $. Щракнете
+A new blog is now available, $. Click to view more: 'Нова публикация в блога, $. Кликнете
за преглед'
# Search Bar
@@ -90,7 +90,7 @@ Playlists: 'Плейлисти'
User Playlists:
Your Playlists: 'Вашите плейлисти'
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Няма
- запазени видеоклипове. За запазване щракнете в ъгъла на видеоклипа
+ запазени видеоклипове. За запазване кликнете в ъгъла на видеоклипа
Playlist Message: Тази страница не отразява напълно работещи плейлисти. В него са
изброени само видеоклипове, които сте запазили или избрали за любими. Когато работата
приключи, всички видеоклипове, които в момента са тук, ще бъдат мигрирани в плейлист
@@ -305,7 +305,7 @@ Settings:
Ip: Ip
Your Info: Вашата информация
Test Proxy: Тестване на прокси
- Clicking on Test Proxy will send a request to: Щракването върху "Тестване на прокси"
+ Clicking on Test Proxy will send a request to: Кликването върху "Тестване на прокси"
ще изпрати заявка до
Proxy Port Number: Номер на прокси порта
Proxy Host: Прокси хост
@@ -583,7 +583,7 @@ Share:
Mini Player: 'Мини плейър'
Comments:
Comments: 'Коментари'
- Click to View Comments: 'Щракнете, за да видите коментарите'
+ Click to View Comments: 'Кликнете, за да видите коментарите'
Getting comment replies, please wait: 'Получаване на отговори на коментара, моля
изчакайте'
There are no more comments for this video: 'Към това видео няма повече коментари'
@@ -603,8 +603,8 @@ Comments:
Up Next: 'Следващ'
# Toast Messages
-Local API Error (Click to copy): 'Грешка в локалния интерфейс (щракнете за копиране)'
-Invidious API Error (Click to copy): 'Грешка в Invidious интерфейса (щракнете за копиране)'
+Local API Error (Click to copy): 'Грешка в локалния интерфейс (кликни за копиране)'
+Invidious API Error (Click to copy): 'Грешка в Invidious интерфейса (кликнете за копиране)'
Falling back to Invidious API: 'Връщане към Invidious интерфейса'
Falling back to the local API: 'Връщане към локалния интерфейс'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Видеото
@@ -658,6 +658,6 @@ Tooltips:
Локалният интерфейс има вградено извличане. Invidious интерфейсът изисква Invidious
сървър, към който да се свърже.
More: Още
-Playing Next Video Interval: Пускане на следващото видео веднага. Щракнете за отказ.
- | Пускане на следващото видео след {nextVideoInterval} секунда. Щракнете за отказl.
- | Пускане на следващото видео след {nextVideoInterval} секунди. Щракнете за отказ.
+Playing Next Video Interval: Пускане на следващото видео веднага. Кликнете за отказ.
+ | Пускане на следващото видео след {nextVideoInterval} секунда. Кликнете за отказl.
+ | Пускане на следващото видео след {nextVideoInterval} секунди. Кликнете за отказ.
diff --git a/static/locales/cs.yaml b/static/locales/cs.yaml
index c623a18c..59a5ed67 100644
--- a/static/locales/cs.yaml
+++ b/static/locales/cs.yaml
@@ -192,7 +192,7 @@ Settings:
1440p: '1440p'
4k: '4k'
8k: '8k'
- Playlist Next Video Interval: Interval dalšího seznamu videí
+ Playlist Next Video Interval: Interval pro další video na playlistu
Privacy Settings:
Privacy Settings: 'Nastavení soukromí'
Remember History: 'Zapamatovat historii'
@@ -653,7 +653,7 @@ Canceled next video autoplay: 'Automatické přehrávání dalšího videa bylo
Yes: 'Ano'
No: 'Ne'
-Playing Next Video Interval: Přehrávání dalšího videa v žádném čase. Kliknutím zrušíte.
+Playing Next Video Interval: Přehrávání dalšího videa bez prodlevy Kliknutím zrušíte.
| Přehrávání dalšího videa za {nextVideoInterval} s. Kliknutím zrušíte. | Přehrávání
dalšího videa za {nextVideoInterval} s. Kliknutím zrušíte.
More: Více
diff --git a/static/locales/el.yaml b/static/locales/el.yaml
index 5c767141..005ff3c8 100644
--- a/static/locales/el.yaml
+++ b/static/locales/el.yaml
@@ -190,6 +190,7 @@ Settings:
1440p: '1440p'
4k: '4k'
8k: '8k'
+ Playlist Next Video Interval: Παύση μεταξύ Βίντεο στη λίστα αναπαραγωγής
Privacy Settings:
Privacy Settings: 'Ρυθμίσεις απορρήτου'
Remember History: 'Διατήρηση ιστορικού'
@@ -290,6 +291,7 @@ Settings:
Hide Channel Subscribers: Απόκρυψη συνδρομών καναλιού
Hide Video Views: Απόκρυψη προβολών βίντεο
Hide Active Subscriptions: Απόκρυψη ενεργών συνδρομών
+ Hide Playlists: Απόκρυψη λιστών αναπαραγωγής
The app needs to restart for changes to take effect. Restart and apply change?: Η
εφαρμογή πρέπει να κάνει επανεκκίνηση για να εφαρμοστούν οι αλλαγές. Επανεκκίνηση
και εφαρμογή αλλαγών;
@@ -411,6 +413,7 @@ Profile:
βέβαιοι ότι θέλετε να διαγράψετε τα επιλεγμένα κανάλια; Αυτό δε θα διαγράψει
το κανάλι από οποιοδήποτε άλλο προφίλ.'
#On Channel Page
+ Profile Filter: Φίλτρο προφίλ
Channel:
Subscriber: 'Συνδρομητής'
Subscribers: 'Συνδρομητές'
@@ -462,7 +465,7 @@ Video:
View: 'Προβολή'
Views: 'Προβολές'
Loop Playlist: 'Επανάληψη λίστας αναπαραγωγής'
- Shuffle Playlist: 'Τυχαία αναπαραγωγή'
+ Shuffle Playlist: 'Τυχαία σειρά στη λίστα αναπαραγωγής'
Reverse Playlist: 'Αντιστροφή της λίστας αναπαραγωγής'
Play Next Video: 'Αναπαραγωγή επόμενου βίντεο'
Play Previous Video: 'Αναπαραγωγή προηγούμενου βίντεο'
@@ -677,3 +680,8 @@ Tooltips:
Invidious Instance: Το στιγμιότυπο Invidious στο οποίο το FreeTube θα συνδεθεί
για κλήσεις διεπαφής. Καθαρίστε το παρόν στιγμιότυπο για να δείτε μια λίστα
δημόσιων στιγμιότυπων προς επιλογή
+Playing Next Video Interval: Αναπαραγωγή επόμενου βίντεο άμεσα. Κάντε κλικ για ακύρωση.
+ | Αναπαραγωγή επόμενου βίντεο σε {nextVideoInterval} δευτερόλεπτο. Κάντε κλικ για
+ ακύρωση. | Αναπαραγωγή επόμενου βίντεο σε {nextVideoInterval} δευτερόλεπτα. Κάντε
+ κλικ για ακύρωση.
+More: Περισσότερα
diff --git a/static/locales/hi.yaml b/static/locales/hi.yaml
index f35c82f1..510154ca 100644
--- a/static/locales/hi.yaml
+++ b/static/locales/hi.yaml
@@ -90,15 +90,24 @@ Most Popular: 'सबसे ज़्यादा देखा हुआ'
Playlists: 'प्लेलिस्टे (playlists)'
User Playlists:
Your Playlists: 'आपके प्लेलिस्टे'
+ Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: आपके
+ पास बचाए गए वीडियोए नहीं हैं। एक वीडियो के कोने पर सेव बटन पर क्लिक (click) करें,
+ यहां लिस्ट पर वही आएगा
+ Playlist Message: यह पृष्ठ पूरी तरह से काम करने वाली प्लेलिस्ट को प्रतिबिंबित नहीं
+ करता है। यह केवल उन वीडियो को सूचीबद्ध करता है जिन्हें आपने सहेजा है या पसंदीदा
+ है। जब काम समाप्त हो जाता है, तो वर्तमान में यहां सभी वीडियो 'पसंदीदा' प्लेलिस्ट
+ में स्थानांतरित हो जाएंगे।
History:
# On History Page
- History: ''
+ History: 'इतिहास'
Watch History: ''
Your history list is currently empty.: ''
Settings:
# On Settings Page
- Settings: ''
- The app needs to restart for changes to take effect. Restart and apply change?: ''
+ Settings: 'स्थापना'
+ The app needs to restart for changes to take effect. Restart and apply change?: 'ऐप
+ को प्रभावी होने वाले परिवर्तनों के लिए पुनः आरंभ करने की आवश्यकता है। Restart
+ और परिवर्तन लागू करें?'
General Settings:
General Settings: ''
Check for Updates: ''
@@ -531,3 +540,4 @@ Canceled next video autoplay: ''
Yes: ''
No: ''
+More: ज़्यादा
diff --git a/static/locales/hr.yaml b/static/locales/hr.yaml
index 87f49ed3..622710eb 100644
--- a/static/locales/hr.yaml
+++ b/static/locales/hr.yaml
@@ -185,6 +185,7 @@ Settings:
1440p: '1440 p'
4k: '4 k'
8k: '8 k'
+ Playlist Next Video Interval: Interval sljedećeg videa zbirke
Privacy Settings:
Privacy Settings: 'Postavke privatnosti'
Remember History: 'Zapamti povijest'
@@ -287,6 +288,7 @@ Settings:
Hide Video Views: Sakrij broj gledanja videa
Distraction Free Settings: Postavke za nesmetan rad
Hide Active Subscriptions: Sakrij aktivne pretplate
+ Hide Playlists: Sakrij zbirke
The app needs to restart for changes to take effect. Restart and apply change?: Promjene
će se primijeniti nakon ponovnog pokeretanja programa. Ponovo pokrenuti program?
Proxy Settings:
@@ -410,6 +412,7 @@ Profile:
$ selected: $ je odabran
Other Channels: Ostali kanali
Subscription List: Popis pretplata
+ Profile Filter: Filtar profila
Channel:
Subscriber: 'Pretplatnik'
Subscribers: 'Pretplatnici'
@@ -660,3 +663,7 @@ Tooltips:
standardne metode za dohvaćanje podataka tvoje pretplate. RSS je brži i sprečava
blokiranje IP adresa, ali ne pruža određene podatke kao što su trajanje videa
ili stanja „uživo”
+Playing Next Video Interval: Trenutna reprodukcija sljedećeg videa. Pritisni za prekid.
+ | Reprodukcija sljedećeg videa za {nextVideoInterval} sekunde. Pritisni za prekid.
+ | Reprodukcija sljedećeg videa za {nextVideoInterval} sekundi. Pritisni za prekid.
+More: Još
diff --git a/static/locales/ko.yaml b/static/locales/ko.yaml
index 7b7ead49..c0b01508 100644
--- a/static/locales/ko.yaml
+++ b/static/locales/ko.yaml
@@ -126,6 +126,7 @@ Settings:
(기본설정은 https://invidious.snopyta.org)'
Region for Trending: '트렌드 국가'
#! List countries
+ View all Invidious instance information: Indivious 서버의 전체 목록 보기
Theme Settings:
Theme Settings: '테마 설정'
Match Top Bar with Main Color: '상단바를 메인컬러와 동기화'
@@ -185,6 +186,7 @@ Settings:
1440p: '1440p'
4k: '4k'
8k: '8k'
+ Playlist Next Video Interval: 재생 목록 다음 비디오 간격
Privacy Settings:
Privacy Settings: '개인정보 설정'
Remember History: '기록 저장하기'
@@ -213,36 +215,40 @@ Settings:
Hide Trending Videos: '현재 트렌딩 영상 숨기기'
Hide Popular Videos: '인기 영상 숨기기'
Hide Live Chat: '실시간 댓글 숨기기'
+ Hide Playlists: 재생 목록 숨기기
+ Hide Active Subscriptions: 활성 구독 숨기기
Data Settings:
Data Settings: '데이터 설정'
- Select Import Type: '구독 및 재생 목록 가져오기 형식 고르기'
- Select Export Type: '구독 및 재생 목록 내보내기 형식 고르기'
+ Select Import Type: '가져오기 유형 선택'
+ Select Export Type: '내보내기 유형 선택'
Import Subscriptions: '구독 목록 가져오기'
- Import FreeTube: '구독 목록 가져오기: 형식 Freetube'
- Import YouTube: '구독 목록 가져오기 형식: 유투브'
- Import NewPipe: '구독 목록 가져오기 형식: NewPipe'
- Check for Legacy Subscriptions: ''
+ Import FreeTube: 'FreeTube 가져오기'
+ Import YouTube: 'YouTube 가져오기'
+ Import NewPipe: 'NewPipe 가져오기'
+ Check for Legacy Subscriptions: '레거시 구독 확인'
Export Subscriptions: '구독 목록 내보내기'
- Export FreeTube: '구독 목록 내보내기 형식: FreeTube'
- Export YouTube: '구독 목록 내보내기 형식: 유투브'
- Export NewPipe: '구독 목록 내보내기 형식: NewPipe'
+ Export FreeTube: 'FreeTube 내보내기'
+ Export YouTube: 'YouTube 내보내기'
+ Export NewPipe: 'NewPipe 내보내기'
Import History: '재생 기록 가져오기'
Export History: '재생 기록 내보내기'
- Profile object has insufficient data, skipping item: ''
- All subscriptions and profiles have been successfully imported: ''
- All subscriptions have been successfully imported: ''
- One or more subscriptions were unable to be imported: ''
- Invalid subscriptions file: ''
- This might take a while, please wait: ''
- Invalid history file: ''
- Subscriptions have been successfully exported: ''
- History object has insufficient data, skipping item: ''
- All watched history has been successfully imported: ''
- All watched history has been successfully exported: ''
- Unable to read file: ''
- Unable to write file: ''
- Unknown data key: ''
- How do I import my subscriptions?: ''
+ Profile object has insufficient data, skipping item: '프로필 개체에 데이터가 부족하여 항목을 건너뜁니다'
+ All subscriptions and profiles have been successfully imported: '모든 구독 및 프로필을
+ 성공적으로 가져왔습니다'
+ All subscriptions have been successfully imported: '모든 구독을 성공적으로 가져왔습니다'
+ One or more subscriptions were unable to be imported: '하나 이상의 구독을 가져올 수 없습니다'
+ Invalid subscriptions file: '잘못된 구독 파일입니다'
+ This might take a while, please wait: '시간이 좀 걸릴 수 있습니다. 잠시 기다려 주십시오'
+ Invalid history file: '잘못된 기록 파일입니다'
+ Subscriptions have been successfully exported: '구독을 성공적으로 내보냈습니다'
+ History object has insufficient data, skipping item: '기록 개체에 데이터가 부족하여 항목을 건너뜁니다'
+ All watched history has been successfully imported: '시청한 모든 기록을 성공적으로 가져왔습니다'
+ All watched history has been successfully exported: '시청한 모든 기록이 성공적으로 내보내졌습니다'
+ Unable to read file: '파일을 읽을 수 없습니다'
+ Unable to write file: '파일을 쓸 수 없습니다'
+ Unknown data key: '알 수 없는 데이터 키입니다'
+ How do I import my subscriptions?: '구독을 가져오려면 어떻게 해야 합니까?'
+ Manage Subscriptions: 구독 관리
Advanced Settings:
Advanced Settings: ''
Enable Debug Mode (Prints data to the console): ''
@@ -265,9 +271,24 @@ Settings:
#& Yes
#& No
+ Proxy Settings:
+ Error getting network information. Is your proxy configured properly?: 네트워크 정보를
+ 가져오는 중 오류가 발생했습니다. 프록시가 올바르게 구성되어 있습니까?
+ City: 도시
+ Region: 지역
+ Country: 국가
+ Ip: Ip
+ Your Info: 사용자 정보
+ Test Proxy: 프록시 테스트
+ Clicking on Test Proxy will send a request to: 프록시 테스트를 클릭하면 다음 주소로 요청이 전송됩니다
+ Proxy Port Number: 프록시 포트 번호
+ Proxy Host: 프록시 호스트
+ Proxy Protocol: 프록시 프로토콜
+ Enable Tor / Proxy: Tor / Proxy 사용
+ Proxy Settings: 프록시 설정
About:
#On About page
- About: ''
+ About: '정보'
#& About
'This software is FOSS and released under the GNU Affero General Public License v3.0.': ''
@@ -287,51 +308,78 @@ About:
Latest FreeTube News: ''
+ Donate: 기부
+ these people and projects: 이 사람들과 프로젝트
+ FreeTube is made possible by: FreeTube는 가능합니다
+ Credits: 제작
+ Translate: 번역
+ room rules: 방 규정
+ Please read the: 읽어주세요
+ Chat on Matrix: 매트릭스 채팅
+ Mastodon: Mastodon
+ Email: 이메일
+ Blog: 블로그
+ Website: 웹사이트
+ Please check for duplicates before posting: 게시하기 전에 중복 항목을 확인하십시오
+ GitHub issues: GitHub 이슈
+ Report a problem: 문제 보고
+ FAQ: FAQ
+ FreeTube Wiki: FreeTube Wiki
+ Help: 도움말
+ GitHub releases: GitHub 릴리스
+ Downloads / Changelog: 다운로드 / 변경 로그
+ View License: 라이센스 보기
+ Licensed under the AGPLv3: AGPLv3에 따라 라이센스가 부여됨
+ Source code: 소스 코드
+ Beta: 베타
Profile:
- Profile Select: ''
- All Channels: ''
- Profile Manager: ''
- Create New Profile: ''
- Edit Profile: ''
- Color Picker: ''
- Custom Color: ''
- Profile Preview: ''
- Create Profile: ''
- Update Profile: ''
- Make Default Profile: ''
- Delete Profile: ''
- Are you sure you want to delete this profile?: ''
- All subscriptions will also be deleted.: ''
- Profile could not be found: ''
- Your profile name cannot be empty: ''
- Profile has been created: ''
- Profile has been updated: ''
- Your default profile has been set to $: ''
- Removed $ from your profiles: ''
- Your default profile has been changed to your primary profile: ''
- $ is now the active profile: ''
- Subscription List: ''
- Other Channels: ''
- $ selected: ''
- Select All: ''
- Select None: ''
- Delete Selected: ''
- Add Selected To Profile: ''
- No channel(s) have been selected: ''
+ Profile Select: '프로필 선택'
+ All Channels: '모든 채널'
+ Profile Manager: '프로필 관리자'
+ Create New Profile: '새 프로파일 작성'
+ Edit Profile: '프로필 편집'
+ Color Picker: '색상 선택기'
+ Custom Color: '사용자 지정 색'
+ Profile Preview: '프로필 미리보기'
+ Create Profile: '프로필 작성'
+ Update Profile: '프로필 업데이트'
+ Make Default Profile: '기본 프로파일 만들기'
+ Delete Profile: '프로필 삭제'
+ Are you sure you want to delete this profile?: '이 프로필을 삭제하시겠습니까?'
+ All subscriptions will also be deleted.: '모든 구독도 삭제됩니다.'
+ Profile could not be found: '프로필을 찾을 수 없습니다'
+ Your profile name cannot be empty: '프로필 이름은 비워 둘 수 없습니다'
+ Profile has been created: '프로필이 생성되었습니다'
+ Profile has been updated: '프로필이 업데이트되었습니다'
+ Your default profile has been set to $: '기본 프로필이 $로 설정되었습니다'
+ Removed $ from your profiles: '프로필에서 $가 제거되었습니다'
+ Your default profile has been changed to your primary profile: '기본값 프로필이 기본 프로필로
+ 변경되었습니다'
+ $ is now the active profile: '$가 현재 활성 프로필입니다'
+ Subscription List: '구독 목록'
+ Other Channels: '기타 채널'
+ $ selected: '$선택되었습니다'
+ Select All: '모두 선택'
+ Select None: '선택 안 함'
+ Delete Selected: '선택한 항목 삭제'
+ Add Selected To Profile: '프로필에 선택한 항목 추가'
+ No channel(s) have been selected: '선택된 채널이 없습니다'
? This is your primary profile. Are you sure you want to delete the selected channels? The
same channels will be deleted in any profile they are found in.
- : ''
- Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: ''
+ : '이것은 귀하의 기본 프로필입니다. 선택한 채널을 삭제하시겠습니까? 동일한 채널이 발견되는 모든 프로필에서 삭제됩니다.'
+ Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: '선택한
+ 채널을 삭제하시겠습니까? 다른 프로파일에서는 채널이 삭제되지 않습니다.'
#On Channel Page
+ Profile Filter: 프로필 필터
Channel:
- Subscriber: ''
- Subscribers: ''
- Subscribe: ''
- Unsubscribe: ''
- Channel has been removed from your subscriptions: ''
- Removed subscription from $ other channel(s): ''
- Added channel to your subscriptions: ''
- Search Channel: ''
+ Subscriber: '구독자'
+ Subscribers: '구독자'
+ Subscribe: '구독'
+ Unsubscribe: '구독 취소'
+ Channel has been removed from your subscriptions: '채널이 구독에서 제거되었습니다'
+ Removed subscription from $ other channel(s): '$ 다른 채널에서 구독을 제거했습니다'
+ Added channel to your subscriptions: '구독에 채널을 추가했습니다'
+ Search Channel: '채널 검색'
Your search results have returned 0 results: ''
Sort By: ''
Videos:
@@ -534,3 +582,4 @@ Canceled next video autoplay: ''
Yes: ''
No: ''
+More: 더 보기
diff --git a/static/locales/nb_NO.yaml b/static/locales/nb_NO.yaml
index 37c9c699..17b01624 100644
--- a/static/locales/nb_NO.yaml
+++ b/static/locales/nb_NO.yaml
@@ -184,6 +184,7 @@ Settings:
1440p: '1440p'
4k: 'UHD'
8k: '8k UHD'
+ Playlist Next Video Interval: Intervall for avspilling av neste i spilleliste
Privacy Settings:
Privacy Settings: 'Personvernsinnstillinger'
Remember History: 'Husk historikk'
@@ -300,6 +301,7 @@ Settings:
Hide Popular Videos: Skjul populære videoer
Hide Video Views: Skjul videovisninger
Hide Live Chat: Gjem direktechat
+ Hide Playlists: Skjul spillelister
The app needs to restart for changes to take effect. Restart and apply change?: Start
programmet på ny for å bruke de nye endringene?
About:
@@ -607,6 +609,7 @@ Profile:
Subscription List: Abonnementsliste
Profile Preview: Profilforhåndsvisning
Custom Color: Egendefinert farge
+ Profile Filter: Profilfilter
This video is unavailable because of missing formats. This can happen due to country unavailability.: Denne
videoen er utilgjengelig grunnet manglende formater. Dette kan skyldes tilgangbegrensninger
i ditt land.
@@ -645,3 +648,7 @@ The playlist has been reversed: Spillelisten har blitt snudd
Download From Site: Last ned fra nettsiden
Version $ is now available! Click for more details: Versjon $ er nå tilgjengelig.
Klikk for flere detaljer.
+Playing Next Video Interval: Spiller neste video nå. Klikk for å avbryte. | Spiller
+ neste video om {nextVideoInterval} sekund. Klikk for å avbryte. | Spiller neste
+ video om {nextVideoInterval} sekunder. Klikk for å avbryte.
+More: Mer
diff --git a/static/locales/ru.yaml b/static/locales/ru.yaml
index b7770c24..19739547 100644
--- a/static/locales/ru.yaml
+++ b/static/locales/ru.yaml
@@ -186,6 +186,7 @@ Settings:
1440p: '1440p'
4k: '4k'
8k: '8k'
+ Playlist Next Video Interval: Задержка перед автовоспроизведением
Subscription Settings:
Subscription Settings: 'Настройки подписки'
Hide Videos on Watch: 'Скрыть видео после просмотра'
@@ -290,6 +291,7 @@ Settings:
Hide Video Likes And Dislikes: Скрыть лайки и дизлайки к видео
Hide Video Views: Скрыть просмотры видео
Hide Active Subscriptions: Скрыть активные подписки
+ Hide Playlists: Скрыть плейлисты
The app needs to restart for changes to take effect. Restart and apply change?: Чтобы
изменения вступили в силу, необходимо перезапустить приложение. Перезапустить
и применить изменения?
@@ -297,7 +299,7 @@ Settings:
Error getting network information. Is your proxy configured properly?: Ошибка
при получении информации о сети. Вы уверены, что прокси настроен правильно?
Your Info: Ваша информация
- Clicking on Test Proxy will send a request to: Нажмите на rкнопку "Протестировать
+ Clicking on Test Proxy will send a request to: Нажмите на кнопку "Протестировать
соединение", чтобы отправить запрос на
Test Proxy: Протестировать соединение
Proxy Port Number: Порт прокси-сервера
@@ -570,8 +572,8 @@ Loop is now disabled: 'Цикл теперь отключён'
Loop is now enabled: 'Цикл теперь включён'
Shuffle is now disabled: 'Перемешивание теперь отключено'
Shuffle is now enabled: 'Перемешивание теперь включено'
-Playing Next Video: 'Воспроизвести следующее видео'
-Playing Previous Video: 'Воспроизвести предыдущее видео'
+Playing Next Video: 'Воспроизведение следующего видео'
+Playing Previous Video: 'Воспроизведение предыдущего видео'
Playing next video in 5 seconds. Click to cancel: 'Воспроизведение следующего видео
через 5 секунд. Нажмите, чтобы отменить.'
Canceled next video autoplay: 'Отменено автовоспроизведение следующего видео'
@@ -622,6 +624,7 @@ Profile:
$ selected: $ выбрано
Other Channels: Другие каналы
Subscription List: Список подписок
+ Profile Filter: Фильтры профилей
The playlist has been reversed: Плейлист был перевёрнут
A new blog is now available, $. Click to view more: Теперь доступен новый блог $.
Нажмите, чтобы увидеть больше
@@ -648,10 +651,10 @@ Tooltips:
из страны, которые вы хотите отображать. Не все отображаемые страны на самом
деле поддерживаются YouTube
Subscription Settings:
- Fetch Feeds from RSS: Если этот параметр включен, FreeTube будет использовать
- RSS вместо метода по умолчанию для получения вашего канала подписки. RSS работает
- быстрее и предотвращает блокировку IP, но не предоставляет определенную информацию,
- такую как продолжительность видео или статус в реальном времени
+ Fetch Feeds from RSS: Если этот параметр включен, FreeTube будет получать вашу
+ ленту подписок с помощью RSS, а не как обычно. RSS работает быстрее и предотвращает
+ блокировку IP, но не предоставляет определенную информацию, такую как продолжительность
+ видео или сведения о том, транслируется ли видео в реальном времени
Player Settings:
Default Video Format: Установите форматы, используемые при воспроизведении видео.
Формат dash может воспроизводить более высокое качество. Устаревшие форматы
@@ -664,3 +667,8 @@ Tooltips:
устаревшие форматы, возвращаемые им, вместо форматов, возвращаемых Invidious.
Помогает, когда видео, возвращенные Invidious, не воспроизводятся из-за ограничений
страны
+More: Больше
+Playing Next Video Interval: Воспроизведение следующего видео без задержки. Нажмите
+ для отмены. | Воспроизведение следующего видео через {nextVideoInterval} сек. Нажмите
+ для отмены. | Воспроизведение следующего видео через {nextVideoInterval} сек. Нажмите
+ для отмены.
diff --git a/static/locales/sk.yaml b/static/locales/sk.yaml
index 6617565e..1a41eb01 100644
--- a/static/locales/sk.yaml
+++ b/static/locales/sk.yaml
@@ -105,7 +105,7 @@ Settings:
Preferred API Backend:
Preferred API Backend: 'Preferované API Backend'
Local API: 'Lokálne API'
- Invidious API: 'Invidious API'
+ Invidious API: 'API služby Invidious'
Video View Type:
Video View Type: 'Typ zobrazenia videa'
Grid: 'Mriežka'
@@ -184,6 +184,7 @@ Settings:
1440p: '1440p'
4k: '4k'
8k: '8k'
+ Playlist Next Video Interval: Čas spustenia nasledujúceho videa v zozname videí
Subscription Settings:
Subscription Settings: 'Nastavenia Odberov'
Hide Videos on Watch: 'Skryť videá po zhliadnutí'
@@ -272,6 +273,7 @@ Settings:
Hide Video Views: Skryť počet zhliadnutí
Distraction Free Settings: Nastavenia nerušenia
Hide Active Subscriptions: Skryť aktívne odbery
+ Hide Playlists: Skryť zoznamy videí
Privacy Settings:
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Naozaj
chcete odstrániť všetky odbery a profily? Toto je nenávratná akcia.
@@ -356,7 +358,7 @@ About:
room rules: pravidlá miestností
Please read the: Prečítajte si
Chat on Matrix: Napíšte nám na Matrix-e
- Mastodon: Mastodon
+ Mastodon: Komunikačná platforma Mastodon
Email: Elektronická pošta
Blog: Blog
Website: Webstránka
@@ -649,9 +651,14 @@ Profile:
Profile Manager: Správca profilov
All Channels: Všetky kanály
Profile Select: Vyberte profil
+ Profile Filter: Filter Profilov
A new blog is now available, $. Click to view more: Nový príspevok na blogu je k dispozícií,
$. Klikni pre viac informácií
Download From Site: Stiahnuť zo stránky
Version $ is now available! Click for more details: Je k dispozícií verzia $ ! Klikni
pre viac informácií
Locale Name: Slovenčina
+Playing Next Video Interval: Prehrávanie ďalšieho videa za chvíľu. Kliknutím zrušíte.
+ | Prehráva sa ďalšie video o {nextVideoInterval} sekundu. Kliknutím zrušíte. | Prehráva
+ sa ďalšie video o {nextVideoInterval} sekúnd. Kliknutím zrušíte.
+More: Viac
diff --git a/static/locales/zh-TW.yaml b/static/locales/zh-TW.yaml
index 510213a8..cf43977b 100644
--- a/static/locales/zh-TW.yaml
+++ b/static/locales/zh-TW.yaml
@@ -176,6 +176,7 @@ Settings:
1440p: '1440p'
4k: '4k'
8k: '8k'
+ Playlist Next Video Interval: 播放清單 下一個影片間隔時間
Subscription Settings:
Subscription Settings: '訂閱設定'
Hide Videos on Watch: '觀看時隱藏影片'
@@ -265,6 +266,7 @@ Settings:
Hide Recommended Videos: 隱藏推薦影片
Hide Channel Subscribers: 隱藏頻道訂閱者
Hide Active Subscriptions: 隱藏作用中的訂閱
+ Hide Playlists: 隱藏播放清單
The app needs to restart for changes to take effect. Restart and apply change?: 此變更需要重啟讓修改生效。重啟並且套用變更?
Proxy Settings:
Error getting network information. Is your proxy configured properly?: 取得網路資訊時發生錯誤。您的代理伺服器設定正確嗎?
@@ -328,7 +330,7 @@ About:
room rules: 聊天室規則
Please read the: 請閱讀
Chat on Matrix: 在 Matrix 上聊天
- Mastodon: Mastodon
+ Mastodon: Mastodon(長毛象/萬象)
Please check for duplicates before posting: 提交前請檢查有無重複的問題
GitHub issues: GitHub 問題追蹤器
Report a problem: 回報問題
@@ -363,7 +365,7 @@ Channel:
About:
About: '關於'
Channel Description: '頻道說明'
- Featured Channels: '列出頻道'
+ Featured Channels: '推薦頻道'
Added channel to your subscriptions: 已新增頻道至您的訂閱
Removed subscription from $ other channel(s): 從$個其他頻道移除訂閱
Channel has been removed from your subscriptions: 頻道已從您的訂閱中移除
@@ -420,7 +422,7 @@ Video:
Minute: 分鐘
Published on: '發布於'
# $ is replaced with the number and % with the unit (days, hours, minutes...)
- Publicationtemplate: '$ %前'
+ Publicationtemplate: '$ % 前'
#& Videos
Video has been removed from your history: 影片已從您的歷史紀錄中移除
Video has been marked as watched: 影片標記為已觀看
@@ -445,7 +447,7 @@ Video:
Open Channel in Invidious: 在Invidious開啟頻道
Copy YouTube Channel Link: 複製YouTube頻道連結
Open Channel in YouTube: 在YouTube開啟頻道
- Started streaming on: '開始直播時間:'
+ Started streaming on: '開始直播時間'
Streamed on: 直播於
Video has been removed from your saved list: 影片已從您的播放清單移除
Video has been saved: 影片已儲存
@@ -500,7 +502,7 @@ Mini Player: '迷你播放器'
Comments:
Comments: '留言'
Click to View Comments: '點擊查看留言'
- Getting comment replies, please wait: '獲取留言中,請稍候...'
+ Getting comment replies, please wait: '擷取留言中,請稍候...'
Show Comments: '查看留言'
Hide Comments: '隱藏留言'
# Context: View 10 Replies, View 1 Reply
@@ -572,6 +574,7 @@ Profile:
$ selected: $個選取的
Other Channels: 其他頻道
Subscription List: 訂閱清單
+ Profile Filter: 設定檔篩選器
The playlist has been reversed: 播放清單已反轉
A new blog is now available, $. Click to view more: 已有新的部落格文章,$。點擊以檢視更多
Download From Site: 從網站下載
@@ -579,7 +582,7 @@ Version $ is now available! Click for more details: 版本更新囉! 最新版
This video is unavailable because of missing formats. This can happen due to country unavailability.: 沒有這個影片因為缺少格式。這個可能發生由於國家不可用。
Tooltips:
Subscription Settings:
- Fetch Feeds from RSS: 啟用後,FreeTube 將使用 RSS 而非預設方式來取得您的訂閱推送。RSS 更快而且可避免 IP 封鎖,但不提供某些訊息,如影片長度與即時狀態
+ Fetch Feeds from RSS: 啟用後,FreeTube將使用RSS代替它的預設方法來抓取您的訂閱來源。RSS的速度較快,而且可以防止IP封鎖,但它可能不會提供某些資訊,例如影片長度或是直播狀態。
Player Settings:
Default Video Format: 設定要用於影片播放的格式。Dash格式有更高的品質。傳統格式會限制在 720p但頻寬需求更低。音訊格式為僅有音訊的串流
Proxy Videos Through Invidious: 將連線到 Invidious而非直接連線到 YouTube 來提供影片。覆寫 API 偏好
@@ -593,3 +596,6 @@ Tooltips:
Preferred API Backend: 選擇 FreeTube 要用於取得YouTube資料的伺服器。本地 API 是內建擷取器。Invidious
API 需要 Invidious 伺服器才能連線。
Region for Trending: 發燒影片區域可以讓您選擇想要顯示哪個國家的發燒影片。 注意:並非所有國家都被YouTube支援
+Playing Next Video Interval: 馬上播放下一個影片。點擊取消。| 播放下一個影片的時間為{nextVideoInterval}秒。點擊取消。|
+ 播放下一個影片的時間為{nextVideoInterval}秒。點擊取消。
+More: 更多