diff --git a/_scripts/ProcessLocalesPlugin.js b/_scripts/ProcessLocalesPlugin.js index 51ff870c698f3..2b6abeae8df09 100644 --- a/_scripts/ProcessLocalesPlugin.js +++ b/_scripts/ProcessLocalesPlugin.js @@ -72,6 +72,7 @@ class ProcessLocalesPlugin { } for (let [locale, data] of this.locales) { + // eslint-disable-next-line no-async-promise-executor promises.push(new Promise(async (resolve) => { if (IS_DEV_SERVER && compiler.fileTimestamps) { const filePath = join(this.inputDir, `${locale}.yaml`) @@ -131,6 +132,7 @@ class ProcessLocalesPlugin { }) compiler.hooks.afterCompile.tap(PLUGIN_NAME, (compilation) => { + // eslint-disable-next-line no-extra-boolean-cast if (!!compiler.watching) { // watch locale files for changes compilation.fileDependencies.addAll(this.filePaths) diff --git a/_scripts/getShakaLocales.js b/_scripts/getShakaLocales.js index 5beb42407840d..76ed42b2633c1 100644 --- a/_scripts/getShakaLocales.js +++ b/_scripts/getShakaLocales.js @@ -3,7 +3,7 @@ const { readFileSync, readdirSync } = require('fs') function getPreloadedLocales() { const localesFile = readFileSync(`${__dirname}/../node_modules/shaka-player/dist/locales.js`, 'utf-8') - const localesLine = localesFile.match(/^\/\/ LOCALES: ([\w, -]+)$/m) + const localesLine = localesFile.match(/^\/\/ LOCALES: ([\w ,-]+)$/m) if (!localesLine) { throw new Error("Failed to parse shaka-player's preloaded locales") diff --git a/_scripts/patchShaka.mjs b/_scripts/patchShaka.mjs index b497a0e89cf5c..a064ce9b59758 100644 --- a/_scripts/patchShaka.mjs +++ b/_scripts/patchShaka.mjs @@ -63,7 +63,7 @@ async function removeRobotoFont() { let cssContents = readFileSync(cssFileHandle, 'utf-8') const beforeReplacement = cssContents.length - cssContents = cssContents.replace(/@font-face\{font-family:Roboto;[^}]+\}/, '') + cssContents = cssContents.replace(/@font-face{font-family:Roboto;[^}]+}/, '') if (cssContents.length !== beforeReplacement) { ftruncateSync(cssFileHandle) @@ -100,7 +100,7 @@ async function replaceAndDownloadMaterialIconsFont() { let newFontCSS = text.match(/(@font-face\s*{[^}]+})/)[1].replaceAll('\n', '') - const urlMatch = newFontCSS.match(/https:\/\/fonts\.gstatic\.com\/s\/materialiconsround\/(?[^\/]+)\/[^.]+\.(?[\w]+)/) + const urlMatch = newFontCSS.match(/https:\/\/fonts\.gstatic\.com\/s\/materialiconsround\/(?[^/]+)\/[^.]+\.(?\w+)/) const url = urlMatch[0] const { version, extension } = urlMatch.groups diff --git a/eslint.config.mjs b/eslint.config.mjs index b75d8f94793e0..0105059384b8a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -22,6 +22,12 @@ const compat = new FlatCompat({ }) export default [ + { + ignores: [ + 'dist/', + 'eslint.config.mjs' + ] + }, ...fixupConfigRules( compat.config({ extends: ['standard'] @@ -37,9 +43,7 @@ export default [ '**/*.{js,vue}', ], ignores: [ - '**/node_modules', - '**/_scripts', - '**/dist', + '_scripts/', ], plugins: { unicorn: eslintPluginUnicorn, @@ -125,9 +129,7 @@ export default [ { files: ['**/*.json'], ignores: [ - '**/node_modules/**', - '**/_scripts/**', - '**/dist/**', + '_scripts/', ], languageOptions: { @@ -152,10 +154,8 @@ export default [ { files: ['**/*.{yml,yaml}'], ignores: [ - '**/node_modules/**', - '**/_scripts/**', - '**/dist/**', - '**/.github/**', + '.github/', + '_scripts/' ], languageOptions: { @@ -192,4 +192,43 @@ export default [ }, }, }, + { + files: ['_scripts/*.js'], + languageOptions: { + globals: { + ...globals.node + }, + ecmaVersion: 'latest', + }, + + plugins: { + unicorn: eslintPluginUnicorn, + }, + + rules: { + 'no-console': 'off', + 'n/no-path-concat': 'off', + 'unicorn/better-regex': 'error', + } + }, + { + files: ['_scripts/*.mjs'], + languageOptions: { + globals: { + ...globals.node, + }, + ecmaVersion: 'latest', + sourceType: 'module', + }, + + plugins: { + unicorn: eslintPluginUnicorn, + }, + + rules: { + 'no-console': 'off', + 'n/no-path-concat': 'off', + 'unicorn/better-regex': 'error', + } + } ] diff --git a/package.json b/package.json index 4e5c9ac081f00..d4dedf61bbcc9 100644 --- a/package.json +++ b/package.json @@ -37,8 +37,8 @@ "lint-all": "run-p lint lint-json", "lint": "run-p eslint-lint lint-style", "lint-fix": "run-p eslint-lint-fix lint-style-fix", - "eslint-lint": "eslint --config eslint.config.mjs \"./src/**/*.js\" \"./src/**/*.vue\" \"./static/**/*.js\"", - "eslint-lint-fix": "eslint --config eslint.config.mjs --fix \"./src/**/*.js\" \"./src/**/*.vue\" \"./static/**/*.js\"", + "eslint-lint": "eslint --config eslint.config.mjs \"./src/**/*.js\" \"./src/**/*.vue\" \"./static/**/*.js\" \"./_scripts/*.js\" \"./_scripts/*.mjs\"", + "eslint-lint-fix": "eslint --config eslint.config.mjs --fix \"./src/**/*.js\" \"./src/**/*.vue\" \"./static/**/*.js\" \"./_scripts/*.js\" \"./_scripts/*.mjs\"", "lint-json": "eslint --config eslint.config.mjs \"./static/**/*.json\"", "lint-style": "stylelint \"**/*.{css,scss}\"", "lint-style-fix": "stylelint --fix \"**/*.{css,scss}\"", diff --git a/src/renderer/components/data-settings/data-settings.js b/src/renderer/components/data-settings/data-settings.js index 52a1951c9387a..e0198e32ea74f 100644 --- a/src/renderer/components/data-settings/data-settings.js +++ b/src/renderer/components/data-settings/data-settings.js @@ -875,6 +875,7 @@ export default defineComponent({ // to the app, so we'll only grab the data we need here. const playlistObject = {} + const videoIdToBeAddedSet = new Set() Object.keys(playlistData).forEach((key) => { if ([requiredKeys, optionalKeys, ignoredKeys].every((ks) => !ks.includes(key))) { @@ -888,6 +889,7 @@ export default defineComponent({ if (videoObjectHasAllRequiredKeys) { videoArray.push(video) + videoIdToBeAddedSet.add(video.videoId) } }) @@ -901,48 +903,62 @@ export default defineComponent({ const playlistObjectKeys = Object.keys(playlistObject) const playlistObjectHasAllRequiredKeys = requiredKeys.every((k) => playlistObjectKeys.includes(k)) - if (playlistObjectHasAllRequiredKeys) { - const existingPlaylist = this.allPlaylists.find((playlist) => { - return playlist.playlistName === playlistObject.playlistName - }) + if (!playlistObjectHasAllRequiredKeys) { + const message = this.$t('Settings.Data Settings.Playlist insufficient data', { playlist: playlistData.playlistName }) + showToast(message) + return + } - if (existingPlaylist !== undefined) { - playlistObject.videos.forEach((video) => { - let videoExists = false - if (video.playlistItemId != null) { - // Find by `playlistItemId` if present - videoExists = existingPlaylist.videos.some((x) => { - // Allow duplicate (by videoId) videos to be added - return x.videoId === video.videoId && x.playlistItemId === video.playlistItemId - }) - } else { - // Older playlist exports have no `playlistItemId` but have `timeAdded` - // Which might be duplicate for copied playlists with duplicate `videoId` - videoExists = existingPlaylist.videos.some((x) => { - // Allow duplicate (by videoId) videos to be added - return x.videoId === video.videoId && x.timeAdded === video.timeAdded - }) - } + const existingPlaylist = this.allPlaylists.find((playlist) => { + return playlist.playlistName === playlistObject.playlistName + }) - if (!videoExists) { - // Keep original `timeAdded` value - const payload = { - _id: existingPlaylist._id, - videoData: video, - } + if (existingPlaylist === undefined) { + this.addPlaylist(playlistObject) + return + } - this.addVideo(payload) - } - }) - // Update playlist's `lastUpdatedAt` - this.updatePlaylist({ _id: existingPlaylist._id }) + const duplicateVideoPresentInToBeAdded = playlistObject.videos.length > videoIdToBeAddedSet.size + const existingVideoIdSet = existingPlaylist.videos.reduce((video) => videoIdToBeAddedSet.add(video.videoId), new Set()) + const duplicateVideoPresentInExistingPlaylist = existingPlaylist.videos.length > existingVideoIdSet.size + const shouldAddDuplicateVideos = duplicateVideoPresentInToBeAdded || duplicateVideoPresentInExistingPlaylist + + playlistObject.videos.forEach((video) => { + let videoExists = false + if (shouldAddDuplicateVideos) { + if (video.playlistItemId != null) { + // Find by `playlistItemId` if present + videoExists = existingPlaylist.videos.some((x) => { + // Allow duplicate (by videoId) videos to be added + return x.videoId === video.videoId && x.playlistItemId === video.playlistItemId + }) + } else { + // Older playlist exports have no `playlistItemId` but have `timeAdded` + // Which might be duplicate for copied playlists with duplicate `videoId` + videoExists = existingPlaylist.videos.some((x) => { + // Allow duplicate (by videoId) videos to be added + return x.videoId === video.videoId && x.timeAdded === video.timeAdded + }) + } } else { - this.addPlaylist(playlistObject) + videoExists = existingPlaylist.videos.some((x) => { + // Disallow duplicate (by videoId) videos to be added + return x.videoId === video.videoId + }) } - } else { - const message = this.$t('Settings.Data Settings.Playlist insufficient data', { playlist: playlistData.playlistName }) - showToast(message) - } + + if (!videoExists) { + // Keep original `timeAdded` value + const payload = { + _id: existingPlaylist._id, + videoData: video, + } + + this.addVideo(payload) + } + }) + // Update playlist's `lastUpdatedAt` + this.updatePlaylist({ _id: existingPlaylist._id }) }) showToast(this.$t('Settings.Data Settings.All playlists has been successfully imported')) diff --git a/src/renderer/components/ft-list-video/ft-list-video.js b/src/renderer/components/ft-list-video/ft-list-video.js index cffc195fa16b3..67acb17bb96a1 100644 --- a/src/renderer/components/ft-list-video/ft-list-video.js +++ b/src/renderer/components/ft-list-video/ft-list-video.js @@ -101,6 +101,11 @@ export default defineComponent({ published: undefined, isLive: false, is4k: false, + is8k: false, + isNew: false, + isVr180: false, + isVr360: false, + is3D: false, hasCaptions: false, isUpcoming: false, isPremium: false, @@ -662,6 +667,11 @@ export default defineComponent({ this.isLive = this.data.liveNow || this.data.lengthSeconds === 'undefined' this.isUpcoming = this.data.isUpcoming || this.data.premiere this.is4k = this.data.is4k + this.is8k = this.data.is8k + this.isNew = this.data.isNew + this.isVr180 = this.data.isVr180 + this.isVr360 = this.data.isVr360 + this.is3D = this.data.is3d this.hasCaptions = this.data.hasCaptions this.isPremium = this.data.premium || false this.viewCount = this.data.viewCount diff --git a/src/renderer/components/ft-list-video/ft-list-video.vue b/src/renderer/components/ft-list-video/ft-list-video.vue index 8504b3683d92b..7d63dcf983228 100644 --- a/src/renderer/components/ft-list-video/ft-list-video.vue +++ b/src/renderer/components/ft-list-video/ft-list-video.vue @@ -146,9 +146,17 @@ > • {{ $tc('Global.Counts.Watching Count', viewCount, {count: parsedViewCount}) }}
+
{{ $t('Search Listing.Label.4K') }}
+ + + +
{ + if (videoDurationPresent(video)) { return } + + const videoHistory = this.$store.getters.getHistoryCacheById[video.videoId] + if (typeof videoHistory !== 'undefined') { + const fetchedLengthSeconds = videoDurationWithFallback(videoHistory) + video.lengthSeconds = fetchedLengthSeconds + // if the video duration is 0, it will be the fallback value, so mark it as missing a duration + if (fetchedLengthSeconds === 0) { anyVideoMissingDuration = true } + } else { + // Mark at least one video have no duration, show notice later + // Also assign fallback duration here + anyVideoMissingDuration = true + video.lengthSeconds = 0 + } + }) + + // Show notice if not already shown before returning playlist items + if (anyVideoMissingDuration && !this.alreadyShownNotice) { + showToast(this.$t('User Playlists.SinglePlaylistView.Toast.This playlist has a video with a duration error'), 5000) + this.alreadyShownNotice = true + } + + return modifiedPlaylistItems + }, + getNextPage: function () { switch (this.infoSource) { case 'local': diff --git a/static/geolocations/be.json b/static/geolocations/be.json new file mode 100644 index 0000000000000..2ef170a09cce5 --- /dev/null +++ b/static/geolocations/be.json @@ -0,0 +1 @@ +[{"name":"Аб’ядн. Арабскія Эміраты","code":"AE"},{"name":"Азербайджан","code":"AZ"},{"name":"Алжыр","code":"DZ"},{"name":"Аман","code":"OM"},{"name":"Аргенціна","code":"AR"},{"name":"Аўстралія","code":"AU"},{"name":"Аўстрыя","code":"AT"},{"name":"Балгарыя","code":"BG"},{"name":"Балівія","code":"BO"},{"name":"Бангладэш","code":"BD"},{"name":"Бахрэйн","code":"BH"},{"name":"Беларусь","code":"BY"},{"name":"Бельгія","code":"BE"},{"name":"Боснія і Герцагавіна","code":"BA"},{"name":"Бразілія","code":"BR"},{"name":"В’етнам","code":"VN"},{"name":"Венгрыя","code":"HU"},{"name":"Венесуэла","code":"VE"},{"name":"Вялікабрытанія","code":"GB"},{"name":"Гана","code":"GH"},{"name":"Гандурас","code":"HN"},{"name":"Ганконг","code":"HK"},{"name":"Гватэмала","code":"GT"},{"name":"Германія","code":"DE"},{"name":"Грузія","code":"GE"},{"name":"Грэцыя","code":"GR"},{"name":"Дамініканская Рэспубліка","code":"DO"},{"name":"Данія","code":"DK"},{"name":"Егіпет","code":"EG"},{"name":"Емен","code":"YE"},{"name":"Зімбабвэ","code":"ZW"},{"name":"Злучаныя Штаты Амерыкі","code":"US"},{"name":"Іарданія","code":"JO"},{"name":"Ізраіль","code":"IL"},{"name":"Інданезія","code":"ID"},{"name":"Індыя","code":"IN"},{"name":"Ірак","code":"IQ"},{"name":"Ірландыя","code":"IE"},{"name":"Ісландыя","code":"IS"},{"name":"Іспанія","code":"ES"},{"name":"Італія","code":"IT"},{"name":"Казахстан","code":"KZ"},{"name":"Калумбія","code":"CO"},{"name":"Камбоджа","code":"KH"},{"name":"Канада","code":"CA"},{"name":"Катар","code":"QA"},{"name":"Кенія","code":"KE"},{"name":"Кіпр","code":"CY"},{"name":"Коста-Рыка","code":"CR"},{"name":"Кувейт","code":"KW"},{"name":"Лаос","code":"LA"},{"name":"Латвія","code":"LV"},{"name":"Ліван","code":"LB"},{"name":"Лівія","code":"LY"},{"name":"Літва","code":"LT"},{"name":"Ліхтэнштэйн","code":"LI"},{"name":"Люксембург","code":"LU"},{"name":"Малайзія","code":"MY"},{"name":"Малдова","code":"MD"},{"name":"Мальта","code":"MT"},{"name":"Марока","code":"MA"},{"name":"Мексіка","code":"MX"},{"name":"Нарвегія","code":"NO"},{"name":"Непал","code":"NP"},{"name":"Нігерыя","code":"NG"},{"name":"Нідэрланды","code":"NL"},{"name":"Нікарагуа","code":"NI"},{"name":"Новая Зеландыя","code":"NZ"},{"name":"Пакістан","code":"PK"},{"name":"Панама","code":"PA"},{"name":"Папуа – Новая Гвінея","code":"PG"},{"name":"Парагвай","code":"PY"},{"name":"Партугалія","code":"PT"},{"name":"Паўднёвая Афрыка","code":"ZA"},{"name":"Паўднёвая Карэя","code":"KR"},{"name":"Паўночная Македонія","code":"MK"},{"name":"Перу","code":"PE"},{"name":"Польшча","code":"PL"},{"name":"Пуэрта-Рыка","code":"PR"},{"name":"Расія","code":"RU"},{"name":"Румынія","code":"RO"},{"name":"Саудаўская Аравія","code":"SA"},{"name":"Сенегал","code":"SN"},{"name":"Сербія","code":"RS"},{"name":"Сінгапур","code":"SG"},{"name":"Славакія","code":"SK"},{"name":"Славенія","code":"SI"},{"name":"Тайвань","code":"TW"},{"name":"Тайланд","code":"TH"},{"name":"Танзанія","code":"TZ"},{"name":"Туніс","code":"TN"},{"name":"Турцыя","code":"TR"},{"name":"Уганда","code":"UG"},{"name":"Украіна","code":"UA"},{"name":"Уругвай","code":"UY"},{"name":"Філіпіны","code":"PH"},{"name":"Фінляндыя","code":"FI"},{"name":"Францыя","code":"FR"},{"name":"Харватыя","code":"HR"},{"name":"Чарнагорыя","code":"ME"},{"name":"Чылі","code":"CL"},{"name":"Чэхія","code":"CZ"},{"name":"Швейцарыя","code":"CH"},{"name":"Швецыя","code":"SE"},{"name":"Шры-Ланка","code":"LK"},{"name":"Эквадор","code":"EC"},{"name":"Эль-Сальвадор","code":"SV"},{"name":"Эстонія","code":"EE"},{"name":"Ямайка","code":"JM"},{"name":"Японія","code":"JP"}] \ No newline at end of file diff --git a/static/geolocations/fa.json b/static/geolocations/fa.json index bdf1994d95680..1318b2381cddd 100644 --- a/static/geolocations/fa.json +++ b/static/geolocations/fa.json @@ -1 +1 @@ -[{"name":"آذربایجان","code":"AZ"},{"name":"آرژانتین","code":"AR"},{"name":"آفریقای جنوبی","code":"ZA"},{"name":"آلمان","code":"DE"},{"name":"اتریش","code":"AT"},{"name":"اردن","code":"JO"},{"name":"اسپانیا","code":"ES"},{"name":"استرالیا","code":"AU"},{"name":"استونی","code":"EE"},{"name":"اسرائیل","code":"IL"},{"name":"اسلواکی","code":"SK"},{"name":"اسلوونی","code":"SI"},{"name":"اکراین","code":"UA"},{"name":"اکوادور","code":"EC"},{"name":"الجزایر","code":"DZ"},{"name":"السالوادور","code":"SV"},{"name":"امارات متحدهٔ عربی","code":"AE"},{"name":"اندونزی","code":"ID"},{"name":"انگلستان","code":"GB"},{"name":"اوروگوئه","code":"UY"},{"name":"اوگاندا","code":"UG"},{"name":"ایالات متحده","code":"US"},{"name":"ایتالیا","code":"IT"},{"name":"ایرلند","code":"IE"},{"name":"ایسلند","code":"IS"},{"name":"بحرین","code":"BH"},{"name":"برزیل","code":"BR"},{"name":"بلاروس","code":"BY"},{"name":"بلژیک","code":"BE"},{"name":"بلغارستان","code":"BG"},{"name":"بنگلادش","code":"BD"},{"name":"بوسنی و هرزگوین","code":"BA"},{"name":"بولیوی","code":"BO"},{"name":"پاپوآ گینه نو","code":"PG"},{"name":"پاراگوئه","code":"PY"},{"name":"پاکستان","code":"PK"},{"name":"پاناما","code":"PA"},{"name":"پرتغالی","code":"PT"},{"name":"پرو","code":"PE"},{"name":"پورتوریکو","code":"PR"},{"name":"تانزانیا","code":"TZ"},{"name":"تایلند","code":"TH"},{"name":"تایوان","code":"TW"},{"name":"ترکیه","code":"TR"},{"name":"تونس","code":"TN"},{"name":"جامائیکا","code":"JM"},{"name":"جمهوری چک","code":"CZ"},{"name":"جمهوری دومینیکن","code":"DO"},{"name":"دانمارک","code":"DK"},{"name":"روسیه","code":"RU"},{"name":"رومانی","code":"RO"},{"name":"زیمبابوه","code":"ZW"},{"name":"ژاپن","code":"JP"},{"name":"سری لانکا","code":"LK"},{"name":"سنگاپور","code":"SG"},{"name":"سنگال","code":"SN"},{"name":"سوئد","code":"SE"},{"name":"سوئیس","code":"CH"},{"name":"شیلی","code":"CL"},{"name":"صربستان","code":"RS"},{"name":"عراق","code":"IQ"},{"name":"عربستان سعودی","code":"SA"},{"name":"عمان","code":"OM"},{"name":"غنا","code":"GH"},{"name":"فرانسه","code":"FR"},{"name":"فنلاند","code":"FI"},{"name":"فیلیپین","code":"PH"},{"name":"قبرس","code":"CY"},{"name":"قزاقستان","code":"KZ"},{"name":"قطر","code":"QA"},{"name":"کاستاریکا","code":"CR"},{"name":"کانادا","code":"CA"},{"name":"کرواسی","code":"HR"},{"name":"کرهٔ جنوبی","code":"KR"},{"name":"کلمبیا","code":"CO"},{"name":"کمبوجیه","code":"KH"},{"name":"کنیا","code":"KE"},{"name":"کویت","code":"KW"},{"name":"گرجستان","code":"GE"},{"name":"گواتمالا","code":"GT"},{"name":"لائوس","code":"LA"},{"name":"لبنان","code":"LB"},{"name":"لتونی","code":"LV"},{"name":"لوکزامبورگ","code":"LU"},{"name":"لهستان","code":"PL"},{"name":"لیبی","code":"LY"},{"name":"لیتوانی","code":"LT"},{"name":"لیختن اشتاین","code":"LI"},{"name":"مالت","code":"MT"},{"name":"مالزی","code":"MY"},{"name":"مجارستان","code":"HU"},{"name":"مراکش","code":"MA"},{"name":"مصر","code":"EG"},{"name":"مقدونیه شمالی","code":"MK"},{"name":"مکزیک","code":"MX"},{"name":"مولداوی","code":"MD"},{"name":"مونته‌نگرو","code":"ME"},{"name":"نپال","code":"NP"},{"name":"نروژ","code":"NO"},{"name":"نیجریه","code":"NG"},{"name":"نیکاراگوئه","code":"NI"},{"name":"نیوزلند","code":"NZ"},{"name":"ونزوئلا","code":"VE"},{"name":"ویتنام","code":"VN"},{"name":"هلند","code":"NL"},{"name":"هند","code":"IN"},{"name":"هندوراس","code":"HN"},{"name":"هنگ کنگ","code":"HK"},{"name":"یمن","code":"YE"},{"name":"یونان","code":"GR"}] \ No newline at end of file +[{"name":"آذربایجان","code":"AZ"},{"name":"آرژانتین","code":"AR"},{"name":"آلمان","code":"DE"},{"name":"اتریش","code":"AT"},{"name":"اردن","code":"JO"},{"name":"اسپانیا","code":"ES"},{"name":"استرالیا","code":"AU"},{"name":"استونی","code":"EE"},{"name":"اسرائیل","code":"IL"},{"name":"اسلواکی","code":"SK"},{"name":"اسلوونی","code":"SI"},{"name":"افریقای جنوبی","code":"ZA"},{"name":"اکراین","code":"UA"},{"name":"اکوادور","code":"EC"},{"name":"الجزایر","code":"DZ"},{"name":"السالوادور","code":"SV"},{"name":"امارات متحدهٔ عربی","code":"AE"},{"name":"اندونزی","code":"ID"},{"name":"انگلستان","code":"GB"},{"name":"اوروگوئه","code":"UY"},{"name":"اوگاندا","code":"UG"},{"name":"ایالات متحده","code":"US"},{"name":"ایتالیا","code":"IT"},{"name":"ایرلند","code":"IE"},{"name":"ایسلند","code":"IS"},{"name":"بحرین","code":"BH"},{"name":"برزیل","code":"BR"},{"name":"بلاروس","code":"BY"},{"name":"بلژیک","code":"BE"},{"name":"بلغارستان","code":"BG"},{"name":"بنگلادش","code":"BD"},{"name":"بوسنی و هرزگوین","code":"BA"},{"name":"بولیوی","code":"BO"},{"name":"پاپوآ گینه نو","code":"PG"},{"name":"پاراگوئه","code":"PY"},{"name":"پاکستان","code":"PK"},{"name":"پاناما","code":"PA"},{"name":"پرتغالی","code":"PT"},{"name":"پرو","code":"PE"},{"name":"پورتوریکو","code":"PR"},{"name":"تانزانیا","code":"TZ"},{"name":"تایلند","code":"TH"},{"name":"تایوان","code":"TW"},{"name":"ترکیه","code":"TR"},{"name":"تونس","code":"TN"},{"name":"جامائیکا","code":"JM"},{"name":"جمهوری چک","code":"CZ"},{"name":"جمهوری دومینیکن","code":"DO"},{"name":"دانمارک","code":"DK"},{"name":"روسیه","code":"RU"},{"name":"رومانی","code":"RO"},{"name":"زیمبابوه","code":"ZW"},{"name":"ژاپن","code":"JP"},{"name":"سری لانکا","code":"LK"},{"name":"سنگاپور","code":"SG"},{"name":"سنگال","code":"SN"},{"name":"سوئد","code":"SE"},{"name":"سوئیس","code":"CH"},{"name":"شیلی","code":"CL"},{"name":"صربستان","code":"RS"},{"name":"عراق","code":"IQ"},{"name":"عربستان سعودی","code":"SA"},{"name":"عمان","code":"OM"},{"name":"غنا","code":"GH"},{"name":"فرانسه","code":"FR"},{"name":"فنلاند","code":"FI"},{"name":"فیلیپین","code":"PH"},{"name":"قبرس","code":"CY"},{"name":"قزاقستان","code":"KZ"},{"name":"قطر","code":"QA"},{"name":"کاستاریکا","code":"CR"},{"name":"کانادا","code":"CA"},{"name":"کرواسی","code":"HR"},{"name":"کرهٔ جنوبی","code":"KR"},{"name":"کلمبیا","code":"CO"},{"name":"کمبوجیه","code":"KH"},{"name":"کنیا","code":"KE"},{"name":"کویت","code":"KW"},{"name":"گرجستان","code":"GE"},{"name":"گواتمالا","code":"GT"},{"name":"لائوس","code":"LA"},{"name":"لبنان","code":"LB"},{"name":"لتونی","code":"LV"},{"name":"لوکزامبورگ","code":"LU"},{"name":"لهستان","code":"PL"},{"name":"لیبی","code":"LY"},{"name":"لیتوانی","code":"LT"},{"name":"لیختن اشتاین","code":"LI"},{"name":"مالت","code":"MT"},{"name":"مالزی","code":"MY"},{"name":"مجارستان","code":"HU"},{"name":"مراکش","code":"MA"},{"name":"مصر","code":"EG"},{"name":"مقدونیه شمالی","code":"MK"},{"name":"مکزیک","code":"MX"},{"name":"مولداوی","code":"MD"},{"name":"مونته‌نگرو","code":"ME"},{"name":"نپال","code":"NP"},{"name":"نروژ","code":"NO"},{"name":"نیجریه","code":"NG"},{"name":"نیکاراگوئه","code":"NI"},{"name":"نیوزلند","code":"NZ"},{"name":"ونزوئلا","code":"VE"},{"name":"ویتنام","code":"VN"},{"name":"هلند","code":"NL"},{"name":"هند","code":"IN"},{"name":"هندوراس","code":"HN"},{"name":"هنگ کنگ","code":"HK"},{"name":"یمن","code":"YE"},{"name":"یونان","code":"GR"}] \ No newline at end of file diff --git a/static/geolocations/pt-PT.json b/static/geolocations/pt-PT.json index bbf84f1af9695..f1fcb9486180b 100644 --- a/static/geolocations/pt-PT.json +++ b/static/geolocations/pt-PT.json @@ -1 +1 @@ -[{"name":"África do Sul","code":"ZA"},{"name":"Alemanha","code":"DE"},{"name":"Arábia Saudita","code":"SA"},{"name":"Argélia","code":"DZ"},{"name":"Argentina","code":"AR"},{"name":"Austrália","code":"AU"},{"name":"Áustria","code":"AT"},{"name":"Azerbaijão","code":"AZ"},{"name":"Bangladeche","code":"BD"},{"name":"Barém","code":"BH"},{"name":"Bélgica","code":"BE"},{"name":"Bielorrússia","code":"BY"},{"name":"Bolívia","code":"BO"},{"name":"Bósnia-Herzegovina","code":"BA"},{"name":"Brasil","code":"BR"},{"name":"Bulgária","code":"BG"},{"name":"Camboja","code":"KH"},{"name":"Canadá","code":"CA"},{"name":"Catar","code":"QA"},{"name":"Cazaquistão","code":"KZ"},{"name":"Chéquia","code":"CZ"},{"name":"Chile","code":"CL"},{"name":"Chipre","code":"CY"},{"name":"Colômbia","code":"CO"},{"name":"Coreia do Sul","code":"KR"},{"name":"Costa Rica","code":"CR"},{"name":"Croácia","code":"HR"},{"name":"Dinamarca","code":"DK"},{"name":"Egito","code":"EG"},{"name":"El Salvador","code":"SV"},{"name":"Emirados Árabes Unidos","code":"AE"},{"name":"Equador","code":"EC"},{"name":"Eslováquia","code":"SK"},{"name":"Eslovénia","code":"SI"},{"name":"Espanha","code":"ES"},{"name":"Estados Unidos","code":"US"},{"name":"Estónia","code":"EE"},{"name":"Filipinas","code":"PH"},{"name":"Finlândia","code":"FI"},{"name":"França","code":"FR"},{"name":"Gana","code":"GH"},{"name":"Geórgia","code":"GE"},{"name":"Grécia","code":"GR"},{"name":"Guatemala","code":"GT"},{"name":"Holanda","code":"NL"},{"name":"Honduras","code":"HN"},{"name":"Hong Kong","code":"HK"},{"name":"Hungria","code":"HU"},{"name":"Iémen","code":"YE"},{"name":"Índia","code":"IN"},{"name":"Indonésia","code":"ID"},{"name":"Iraque","code":"IQ"},{"name":"Irlanda","code":"IE"},{"name":"Islândia","code":"IS"},{"name":"Israel","code":"IL"},{"name":"Itália","code":"IT"},{"name":"Jamaica","code":"JM"},{"name":"Japão","code":"JP"},{"name":"Jordânia","code":"JO"},{"name":"Kuwait","code":"KW"},{"name":"Laos","code":"LA"},{"name":"Letónia","code":"LV"},{"name":"Líbano","code":"LB"},{"name":"Líbia","code":"LY"},{"name":"Lienchtenstein","code":"LI"},{"name":"Lituânia","code":"LT"},{"name":"Luxemburgo","code":"LU"},{"name":"Macedónia do Norte","code":"MK"},{"name":"Malásia","code":"MY"},{"name":"Malta","code":"MT"},{"name":"Marrocos","code":"MA"},{"name":"México","code":"MX"},{"name":"Moldávia","code":"MD"},{"name":"Montenegro","code":"ME"},{"name":"Nepal","code":"NP"},{"name":"Nicarágua","code":"NI"},{"name":"Nigéria","code":"NG"},{"name":"Noruega","code":"NO"},{"name":"Nova Zelândia","code":"NZ"},{"name":"Omã","code":"OM"},{"name":"Panamá","code":"PA"},{"name":"Papuásia-Nova Guiné","code":"PG"},{"name":"Paquistão","code":"PK"},{"name":"Paraguai","code":"PY"},{"name":"Peru","code":"PE"},{"name":"Polónia","code":"PL"},{"name":"Porto Rico","code":"PR"},{"name":"Portugal","code":"PT"},{"name":"Quénia","code":"KE"},{"name":"Reino Unido","code":"GB"},{"name":"República Dominicana","code":"DO"},{"name":"Roménia","code":"RO"},{"name":"Rússia","code":"RU"},{"name":"Senegal","code":"SN"},{"name":"Sérvia","code":"RS"},{"name":"Singapura","code":"SG"},{"name":"Sri Lanka","code":"LK"},{"name":"Suécia","code":"SE"},{"name":"Suíça","code":"CH"},{"name":"Tailândia","code":"TH"},{"name":"Taiwan","code":"TW"},{"name":"Tanzânia","code":"TZ"},{"name":"Tunísia","code":"TN"},{"name":"Turquia","code":"TR"},{"name":"Ucrânia","code":"UA"},{"name":"Uganda","code":"UG"},{"name":"Uruguai","code":"UY"},{"name":"Venezuela","code":"VE"},{"name":"Vietname","code":"VN"},{"name":"Zimbabué","code":"ZW"}] \ No newline at end of file +[{"name":"África do Sul","code":"ZA"},{"name":"Alemanha","code":"DE"},{"name":"Arábia Saudita","code":"SA"},{"name":"Argélia","code":"DZ"},{"name":"Argentina","code":"AR"},{"name":"Austrália","code":"AU"},{"name":"Áustria","code":"AT"},{"name":"Azerbaijão","code":"AZ"},{"name":"Bangladexe","code":"BD"},{"name":"Barém","code":"BH"},{"name":"Bélgica","code":"BE"},{"name":"Bielorrússia","code":"BY"},{"name":"Bolívia","code":"BO"},{"name":"Bósnia-Herzegovina","code":"BA"},{"name":"Brasil","code":"BR"},{"name":"Bulgária","code":"BG"},{"name":"Camboja","code":"KH"},{"name":"Canadá","code":"CA"},{"name":"Catar","code":"QA"},{"name":"Cazaquistão","code":"KZ"},{"name":"Chéquia","code":"CZ"},{"name":"Chile","code":"CL"},{"name":"Chipre","code":"CY"},{"name":"Colômbia","code":"CO"},{"name":"Coreia do Sul","code":"KR"},{"name":"Costa Rica","code":"CR"},{"name":"Croácia","code":"HR"},{"name":"Dinamarca","code":"DK"},{"name":"Egito","code":"EG"},{"name":"El Salvador","code":"SV"},{"name":"Emirados Árabes Unidos","code":"AE"},{"name":"Equador","code":"EC"},{"name":"Eslováquia","code":"SK"},{"name":"Eslovénia","code":"SI"},{"name":"Espanha","code":"ES"},{"name":"Estados Unidos","code":"US"},{"name":"Estónia","code":"EE"},{"name":"Filipinas","code":"PH"},{"name":"Finlândia","code":"FI"},{"name":"França","code":"FR"},{"name":"Gana","code":"GH"},{"name":"Geórgia","code":"GE"},{"name":"Grécia","code":"GR"},{"name":"Guatemala","code":"GT"},{"name":"Holanda","code":"NL"},{"name":"Honduras","code":"HN"},{"name":"Hong Kong","code":"HK"},{"name":"Hungria","code":"HU"},{"name":"Iémen","code":"YE"},{"name":"Índia","code":"IN"},{"name":"Indonésia","code":"ID"},{"name":"Iraque","code":"IQ"},{"name":"Irlanda","code":"IE"},{"name":"Islândia","code":"IS"},{"name":"Israel","code":"IL"},{"name":"Itália","code":"IT"},{"name":"Jamaica","code":"JM"},{"name":"Japão","code":"JP"},{"name":"Jordânia","code":"JO"},{"name":"Kuwait","code":"KW"},{"name":"Laos","code":"LA"},{"name":"Letónia","code":"LV"},{"name":"Líbano","code":"LB"},{"name":"Líbia","code":"LY"},{"name":"Lienchtenstein","code":"LI"},{"name":"Lituânia","code":"LT"},{"name":"Luxemburgo","code":"LU"},{"name":"Macedónia do Norte","code":"MK"},{"name":"Malásia","code":"MY"},{"name":"Malta","code":"MT"},{"name":"Marrocos","code":"MA"},{"name":"México","code":"MX"},{"name":"Moldávia","code":"MD"},{"name":"Montenegro","code":"ME"},{"name":"Nepal","code":"NP"},{"name":"Nicarágua","code":"NI"},{"name":"Nigéria","code":"NG"},{"name":"Noruega","code":"NO"},{"name":"Nova Zelândia","code":"NZ"},{"name":"Omã","code":"OM"},{"name":"Panamá","code":"PA"},{"name":"Papuásia-Nova Guiné","code":"PG"},{"name":"Paquistão","code":"PK"},{"name":"Paraguai","code":"PY"},{"name":"Peru","code":"PE"},{"name":"Polónia","code":"PL"},{"name":"Porto Rico","code":"PR"},{"name":"Portugal","code":"PT"},{"name":"Quénia","code":"KE"},{"name":"Reino Unido","code":"GB"},{"name":"República Dominicana","code":"DO"},{"name":"Roménia","code":"RO"},{"name":"Rússia","code":"RU"},{"name":"Senegal","code":"SN"},{"name":"Sérvia","code":"RS"},{"name":"Singapura","code":"SG"},{"name":"Sri Lanka","code":"LK"},{"name":"Suécia","code":"SE"},{"name":"Suíça","code":"CH"},{"name":"Tailândia","code":"TH"},{"name":"Taiwan","code":"TW"},{"name":"Tanzânia","code":"TZ"},{"name":"Tunísia","code":"TN"},{"name":"Turquia","code":"TR"},{"name":"Ucrânia","code":"UA"},{"name":"Uganda","code":"UG"},{"name":"Uruguai","code":"UY"},{"name":"Venezuela","code":"VE"},{"name":"Vietname","code":"VN"},{"name":"Zimbabué","code":"ZW"}] \ No newline at end of file diff --git a/static/geolocations/zh-TW.json b/static/geolocations/zh-TW.json index 72c4510db36c5..34c2d9b01f9ba 100644 --- a/static/geolocations/zh-TW.json +++ b/static/geolocations/zh-TW.json @@ -1 +1 @@ -[{"name":"土耳其","code":"TR"},{"name":"丹麥","code":"DK"},{"name":"厄瓜多","code":"EC"},{"name":"巴布亞紐幾內亞","code":"PG"},{"name":"巴西","code":"BR"},{"name":"巴拉圭","code":"PY"},{"name":"巴林","code":"BH"},{"name":"巴拿馬","code":"PA"},{"name":"巴基斯坦","code":"PK"},{"name":"日本","code":"JP"},{"name":"比利時","code":"BE"},{"name":"牙買加","code":"JM"},{"name":"以色列","code":"IL"},{"name":"加拿大","code":"CA"},{"name":"北馬其頓","code":"MK"},{"name":"卡達","code":"QA"},{"name":"台灣","code":"TW"},{"name":"尼加拉瓜","code":"NI"},{"name":"尼泊爾","code":"NP"},{"name":"瓜地馬拉","code":"GT"},{"name":"白俄羅斯","code":"BY"},{"name":"立陶宛","code":"LT"},{"name":"伊拉克","code":"IQ"},{"name":"冰島","code":"IS"},{"name":"列支敦士登","code":"LI"},{"name":"匈牙利","code":"HU"},{"name":"印尼","code":"ID"},{"name":"印度","code":"IN"},{"name":"多明尼加共和國","code":"DO"},{"name":"西班牙","code":"ES"},{"name":"克羅埃西亞","code":"HR"},{"name":"利比亞","code":"LY"},{"name":"宏都拉斯","code":"HN"},{"name":"希臘","code":"GR"},{"name":"沙烏地阿拉伯","code":"SA"},{"name":"辛巴威","code":"ZW"},{"name":"亞賽拜然","code":"AZ"},{"name":"坦尚尼亞","code":"TZ"},{"name":"奈及利亞","code":"NG"},{"name":"委內瑞拉","code":"VE"},{"name":"孟加拉","code":"BD"},{"name":"拉脫維亞","code":"LV"},{"name":"法國","code":"FR"},{"name":"波士尼亞-赫塞哥維納","code":"BA"},{"name":"波多黎克","code":"PR"},{"name":"波蘭","code":"PL"},{"name":"肯亞","code":"KE"},{"name":"芬蘭","code":"FI"},{"name":"阿拉伯聯合大公國","code":"AE"},{"name":"阿根廷","code":"AR"},{"name":"阿曼","code":"OM"},{"name":"阿爾及利亞","code":"DZ"},{"name":"俄羅斯","code":"RU"},{"name":"保加利亞","code":"BG"},{"name":"南非","code":"ZA"},{"name":"南韓","code":"KR"},{"name":"哈薩克","code":"KZ"},{"name":"柬埔寨","code":"KH"},{"name":"玻利維亞","code":"BO"},{"name":"科威特","code":"KW"},{"name":"突尼西亞","code":"TN"},{"name":"約旦","code":"JO"},{"name":"美國","code":"US"},{"name":"英國","code":"GB"},{"name":"迦納","code":"GH"},{"name":"香港","code":"HK"},{"name":"哥倫比亞","code":"CO"},{"name":"哥斯大黎加","code":"CR"},{"name":"埃及","code":"EG"},{"name":"挪威","code":"NO"},{"name":"泰國","code":"TH"},{"name":"烏干達","code":"UG"},{"name":"烏克蘭","code":"UA"},{"name":"烏拉圭","code":"UY"},{"name":"祕魯","code":"PE"},{"name":"紐西蘭","code":"NZ"},{"name":"馬來西亞","code":"MY"},{"name":"馬爾他","code":"MT"},{"name":"捷克","code":"CZ"},{"name":"荷蘭","code":"NL"},{"name":"喬治亞","code":"GE"},{"name":"斯里蘭卡","code":"LK"},{"name":"斯洛伐克","code":"SK"},{"name":"斯洛維尼亞","code":"SI"},{"name":"智利","code":"CL"},{"name":"菲律賓","code":"PH"},{"name":"越南","code":"VN"},{"name":"塞內加爾","code":"SN"},{"name":"塞爾維亞","code":"RS"},{"name":"奧地利","code":"AT"},{"name":"愛沙尼亞","code":"EE"},{"name":"愛爾蘭","code":"IE"},{"name":"新加坡","code":"SG"},{"name":"瑞士","code":"CH"},{"name":"瑞典","code":"SE"},{"name":"義大利","code":"IT"},{"name":"葉門","code":"YE"},{"name":"葡萄牙","code":"PT"},{"name":"蒙特內哥羅","code":"ME"},{"name":"寮國","code":"LA"},{"name":"德國","code":"DE"},{"name":"摩洛哥","code":"MA"},{"name":"摩爾多瓦","code":"MD"},{"name":"黎巴嫩","code":"LB"},{"name":"墨西哥","code":"MX"},{"name":"澳洲","code":"AU"},{"name":"盧森堡","code":"LU"},{"name":"賽普勒斯","code":"CY"},{"name":"薩爾瓦多","code":"SV"},{"name":"羅馬尼亞","code":"RO"}] \ No newline at end of file +[{"name":"土耳其","code":"TR"},{"name":"丹麥","code":"DK"},{"name":"厄瓜多","code":"EC"},{"name":"巴布亞紐幾內亞","code":"PG"},{"name":"巴西","code":"BR"},{"name":"巴拉圭","code":"PY"},{"name":"巴林","code":"BH"},{"name":"巴拿馬","code":"PA"},{"name":"巴基斯坦","code":"PK"},{"name":"日本","code":"JP"},{"name":"比利時","code":"BE"},{"name":"牙買加","code":"JM"},{"name":"以色列","code":"IL"},{"name":"加拿大","code":"CA"},{"name":"北馬其頓","code":"MK"},{"name":"卡達","code":"QA"},{"name":"台灣","code":"TW"},{"name":"尼加拉瓜","code":"NI"},{"name":"尼泊爾","code":"NP"},{"name":"瓜地馬拉","code":"GT"},{"name":"白俄羅斯","code":"BY"},{"name":"立陶宛","code":"LT"},{"name":"伊拉克","code":"IQ"},{"name":"冰島","code":"IS"},{"name":"列支敦士登","code":"LI"},{"name":"匈牙利","code":"HU"},{"name":"印尼","code":"ID"},{"name":"印度","code":"IN"},{"name":"多明尼加共和國","code":"DO"},{"name":"西班牙","code":"ES"},{"name":"克羅埃西亞","code":"HR"},{"name":"利比亞","code":"LY"},{"name":"宏都拉斯","code":"HN"},{"name":"希臘","code":"GR"},{"name":"沙烏地阿拉伯","code":"SA"},{"name":"辛巴威","code":"ZW"},{"name":"亞賽拜然","code":"AZ"},{"name":"坦尚尼亞","code":"TZ"},{"name":"奈及利亞","code":"NG"},{"name":"委內瑞拉","code":"VE"},{"name":"孟加拉","code":"BD"},{"name":"拉脫維亞","code":"LV"},{"name":"法國","code":"FR"},{"name":"波士尼亞-赫塞哥維納","code":"BA"},{"name":"波多黎克","code":"PR"},{"name":"波蘭","code":"PL"},{"name":"肯亞","code":"KE"},{"name":"芬蘭","code":"FI"},{"name":"阿拉伯聯合大公國","code":"AE"},{"name":"阿根廷","code":"AR"},{"name":"阿曼","code":"OM"},{"name":"阿爾及利亞","code":"DZ"},{"name":"俄羅斯","code":"RU"},{"name":"保加利亞","code":"BG"},{"name":"南非","code":"ZA"},{"name":"南韓","code":"KR"},{"name":"哈薩克","code":"KZ"},{"name":"柬埔寨","code":"KH"},{"name":"玻利維亞","code":"BO"},{"name":"科威特","code":"KW"},{"name":"突尼西亞","code":"TN"},{"name":"約旦","code":"JO"},{"name":"美國","code":"US"},{"name":"英國","code":"GB"},{"name":"迦納","code":"GH"},{"name":"香港","code":"HK"},{"name":"哥倫比亞","code":"CO"},{"name":"哥斯大黎加","code":"CR"},{"name":"埃及","code":"EG"},{"name":"挪威","code":"NO"},{"name":"泰國","code":"TH"},{"name":"烏干達","code":"UG"},{"name":"烏克蘭","code":"UA"},{"name":"烏拉圭","code":"UY"},{"name":"秘魯","code":"PE"},{"name":"紐西蘭","code":"NZ"},{"name":"馬來西亞","code":"MY"},{"name":"馬爾他","code":"MT"},{"name":"捷克","code":"CZ"},{"name":"荷蘭","code":"NL"},{"name":"喬治亞","code":"GE"},{"name":"斯里蘭卡","code":"LK"},{"name":"斯洛伐克","code":"SK"},{"name":"斯洛維尼亞","code":"SI"},{"name":"智利","code":"CL"},{"name":"菲律賓","code":"PH"},{"name":"越南","code":"VN"},{"name":"塞內加爾","code":"SN"},{"name":"塞爾維亞","code":"RS"},{"name":"奧地利","code":"AT"},{"name":"愛沙尼亞","code":"EE"},{"name":"愛爾蘭","code":"IE"},{"name":"新加坡","code":"SG"},{"name":"瑞士","code":"CH"},{"name":"瑞典","code":"SE"},{"name":"義大利","code":"IT"},{"name":"葉門","code":"YE"},{"name":"葡萄牙","code":"PT"},{"name":"蒙特內哥羅","code":"ME"},{"name":"寮國","code":"LA"},{"name":"德國","code":"DE"},{"name":"摩洛哥","code":"MA"},{"name":"摩爾多瓦","code":"MD"},{"name":"黎巴嫩","code":"LB"},{"name":"墨西哥","code":"MX"},{"name":"澳洲","code":"AU"},{"name":"盧森堡","code":"LU"},{"name":"賽普勒斯","code":"CY"},{"name":"薩爾瓦多","code":"SV"},{"name":"羅馬尼亞","code":"RO"}] \ No newline at end of file diff --git a/static/locales/activeLocales.json b/static/locales/activeLocales.json index 0a0357af8031d..4e1768c3febb2 100644 --- a/static/locales/activeLocales.json +++ b/static/locales/activeLocales.json @@ -2,6 +2,7 @@ "en-US", "en-GB", "ar", + "be", "bg", "ca", "cs", diff --git a/static/locales/be.yaml b/static/locales/be.yaml index 280e5a8432425..abf2e41969dcc 100644 --- a/static/locales/be.yaml +++ b/static/locales/be.yaml @@ -328,7 +328,7 @@ Settings: Label: Аўтаматычная загрузка наступнай старонкі Tooltip: Аўтаматычна загружаць дадатковыя старонкі і каментарыі. Theme Settings: - Theme Settings: 'Налады тэмы' + Theme Settings: 'Тэма' Match Top Bar with Main Color: 'Выкарыстоўваць асноўны колер да верхняй панэлі' Expand Side Bar by Default: 'Разгарнуць бакавую панэль па змаўчанні' Disable Smooth Scrolling: 'Адключыць плыўную пракрутку' @@ -398,7 +398,7 @@ Settings: Secondary Color Theme: 'Другасны колер тэмы' #* Main Color Theme Player Settings: - Player Settings: 'Налады плэера' + Player Settings: 'Прайгравальнік' Play Next Video: 'Прайграваць наступнае відэа' Turn on Subtitles by Default: 'Уключыць субцітры па змаўчанні' Autoplay Videos: 'Аўтапрайграванне відэа' @@ -452,7 +452,7 @@ Settings: Forbidden Characters: 'Забароненыя сімвалы' Empty File Name: 'Пустая назва файла' External Player Settings: - External Player Settings: 'Налады вонкавага прайгравальніка' + External Player Settings: 'Вонкавы прайгравальнік' External Player: 'Вонкавы прайгравальнік' Ignore Unsupported Action Warnings: 'Ігнараваць папярэджанні аб дзеяннях, якія не падтрымліваюцца' @@ -463,7 +463,7 @@ Settings: Name: 'Ніякі' Ignore Default Arguments: Ігнараваць аргументы па змаўчанні Privacy Settings: - Privacy Settings: 'Налады прыватнасці' + Privacy Settings: 'Прыватнасць' Remember History: 'Памятаць гісторыю' Save Watched Progress: 'Захоўваць прагрэс прагляду' Save Watched Videos With Last Viewed Playlist: 'Захоўваць прагледжаныя відэа з @@ -484,7 +484,7 @@ Settings: Remove All Playlists: Выдаліць усе плэй-лісты All playlists have been removed: Усе плэй-лісты былі выдалены Subscription Settings: - Subscription Settings: 'Налады падпіскі' + Subscription Settings: 'Падпіскі' Hide Videos on Watch: 'Хаваць відэа пасля прагляду' Fetch Feeds from RSS: 'Атрымліваць стужкі з RSS' Manage Subscriptions: 'Кіраванне падпіскамі' @@ -544,7 +544,7 @@ Settings: Hide Channels API Error: Памылка атрымання карыстальніка з указаным ідэнтыфікатарам. Праверце яшчэ раз, ці правільны ідэнтыфікатар. Data Settings: - Data Settings: 'Налады даных' + Data Settings: 'Даныя' Select Import Type: 'Выбраць тып імпарту' Select Export Type: 'Выбраць тып экспарту' Import Subscriptions: 'Імпарт падпісак' @@ -594,7 +594,7 @@ Settings: ў раздзеле «Налады прыватнасці».\n3. Запусціце старую версію FreeTube і імпартуйце экспартаваныя плэй-лісты.\"" Proxy Settings: - Proxy Settings: 'Налады проксі' + Proxy Settings: 'Проксі' Enable Tor / Proxy: 'Уключыць Tor / Проксі' Proxy Protocol: 'Пратакол проксі' Proxy Host: 'Адрас проксі' @@ -610,7 +610,7 @@ Settings: Error getting network information. Is your proxy configured properly?: 'Памылка атрымання інфармацыі аб сетцы. Ці правільна наладжаны ваш проксі?' SponsorBlock Settings: - SponsorBlock Settings: 'Налады SponsorBlock' + SponsorBlock Settings: 'SponsorBlock' Enable SponsorBlock: 'Уключыць SponsorBlock' 'SponsorBlock API Url (Default is https://sponsor.ajay.app)': 'URL-адрас SponsorBlock API (па змаўчанні https://sponsor.ajay.app)' @@ -627,12 +627,12 @@ Settings: API генератара мініяцюр DeArrow (па змаўчанні https://dearrow-thumb.ajay.app) UseDeArrowThumbnails: Выкарыстоўваць DeArrow для мініяцюр Parental Control Settings: - Parental Control Settings: 'Налады бацькоўскага кантролю' + Parental Control Settings: 'Бацькоўскі кантроль' Hide Unsubscribe Button: 'Хаваць кнопку адпіскі' Show Family Friendly Only: 'Паказаць толькі для сямейнага прагляду' Hide Search Bar: 'Хаваць панэль пошуку' Download Settings: - Download Settings: 'Налады спампоўкі' + Download Settings: 'Спампоўка' Ask Download Path: 'Пытаць шлях спампоўкі' Choose Path: 'Выберыце шлях' Download Behavior: 'Паводзіны спампоўкі' @@ -650,7 +650,7 @@ Settings: Password Incorrect: 'Пароль няправільны' Unlock: 'Разблакіраваць' Password Settings: - Password Settings: 'Налады пароля' + Password Settings: 'Пароль' Set Password To Prevent Access: 'Задайце пароль, каб забараніць доступ да налад' Set Password: 'Задаць пароль' Remove Password: 'Выдаліць пароль' @@ -689,7 +689,7 @@ About: AGPLv3: AGPLv3 Licensed under the: Пад ліцэнзіяй Profile: - Profile Settings: 'Налады профілю' + Profile Settings: 'Профіль' Toggle Profile List: 'Пераключыць спіс профіляў' Profile Select: 'Выбар профілю' Profile Filter: 'Фільтр профілю' @@ -1137,7 +1137,7 @@ This video is unavailable because of missing formats. This can happen due to cou Subscriptions have not yet been implemented: 'Падпіскі яшчэ не рэалізаваны' Unknown YouTube url type, cannot be opened in app: 'Невядомы тып URL-адраса YouTube, немагчыма адкрыць у праграме' -Hashtags have not yet been implemented, try again later: 'Хэштэгі яшчэ не рэалізаваны, +Hashtags have not yet been implemented, try again later: 'Цэтлікі яшчэ не рэалізаваны, паўтарыце спробу пазней' Loop is now disabled: 'Цыкл адключаны' Loop is now enabled: 'Цыкл уключаны' @@ -1157,7 +1157,7 @@ Playing Next Video Interval: 'Прайграванне наступнага ві Canceled next video autoplay: 'Аўтапрайграванне наступнага відэа адменена' Default Invidious instance has been set to {instance}: 'Экземпляр Invidious па змаўчанні - быў усталяваны ў {экзэмпляр}' + быў усталяваны ў {instance}' Default Invidious instance has been cleared: 'Экземпляр Invidious па змаўчанні быў выдалены' 'The playlist has ended. Enable loop to continue playing': 'Плэй-ліст скончыўся. Каб @@ -1171,8 +1171,8 @@ Screenshot Success: 'Здымак захаваны як "{filePath}"' Screenshot Error: 'Здымак не ўдаўся. {error}' Hashtag: - Hashtag: 'Хэштэг' - This hashtag does not currently have any videos: 'Гэты хэштэг зараз не змяшчае відэа' + Hashtag: 'Цэтлік' + This hashtag does not currently have any videos: 'Гэты цэтлік зараз не змяшчае відэа' Yes: 'Так' No: 'Не' Ok: 'Ок' diff --git a/static/locales/bg.yaml b/static/locales/bg.yaml index a904b4df57b07..2dfd553753e34 100644 --- a/static/locales/bg.yaml +++ b/static/locales/bg.yaml @@ -43,6 +43,8 @@ Global: Subscriber Count: 1 абонат | {count} абоната View Count: 1 преглед | {count} прегледа Watching Count: 1 гледане | {count} гледания + Like Count: 1 харесване | {count} харесвания + Comment Count: 1 коментар | {count} коментара Input Tags: Length Requirement: Дължината на етикета трябва да бъде поне {number} знака Version {versionNumber} is now available! Click for more details: 'Версия {versionNumber} @@ -106,7 +108,9 @@ Subscriptions: Subscriptions: 'Абонаменти' Latest Subscriptions: 'Последни абонаменти' 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Списъкът - с абонаменти е празен. Започнете да добавяте, за да ги видите тук.' + с абонаменти е празен. Ако искате да внесете абонаментите си, отидете в "Настройки + на данни" и изберете "Внасяне на абонаменти" или можете да потърсите канал и да + се абонирате за него.' 'Getting Subscriptions. Please wait.': 'Получаване на абонаменти. Моля, изчакайте.' Refresh Subscriptions: 'Опресняване на абонаментите' This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: Този @@ -183,6 +187,9 @@ User Playlists: се използва за бързи отметки. Playlist {playlistName} is the new quick bookmark playlist.: Плейлиста {playlistName} е новият списък за бързи отметки. + This playlist has a video with a duration error: Този плейлист съдържа поне + едно видео, което няма продължителност, той ще бъде подреден така, сякаш продължителността + му е нула. Search for Videos: Търсене за видеа CreatePlaylistPrompt: Toast: @@ -833,6 +840,10 @@ Channel: Reveal Answers: Разкриване на отговорите Hide Answers: Скриване на отговорите Video hidden by FreeTube: Видео, скрито от FreeTube + Viewing Posts Only Supported By Invidious: Преглеждането на публикации се поддържа + само от Invidious. Отидете в раздела на общността на канала, за да видите съдържанието + там без Invidious. + View Full Post: Преглед на цялата публикация This channel does not exist: Каналът не съществува This channel does not allow searching: Каналът не позволява търсене This channel is age-restricted and currently cannot be viewed in FreeTube.: Каналът @@ -1000,6 +1011,8 @@ Video: Theatre Mode: Широкоекранен режим Full Window: Цял прозорец Hide Stats: Скриване на статистиката + IP block: YouTube е блокирал вашия IP адрес за гледане на видеа. Опитайте да преминете + към друга VPN услуга или прокси сървър. Videos: #& Sort By Sort By: @@ -1028,6 +1041,8 @@ Playlist: VideoTitleAscending: Заглавие (A-Z) Custom: Потребителски VideoTitleDescending: Заглавие (Z-A) + VideoDurationAscending: Продължителност (първо най-кратките) + VideoDurationDescending: Продължителност (първо най-дългите) Toggle Theatre Mode: 'Режим "Широк екран"' Change Format: Change Media Formats: 'Смяна видео формати' @@ -1084,6 +1099,7 @@ Comments: View {replyCount} replies: Преглед на {replyCount} отговора Hearted: Сърдечно Subscribed: Абониран + There are no comments available for this post: За тази публикация няма налични коментари Up Next: 'Следващ' # Toast Messages @@ -1112,8 +1128,8 @@ Tooltips: Subscription Settings: Fetch Feeds from RSS: FreeTube ще използва RSS вместо метода по подразбиране за получаване на абонаментите. RSS е по-бърз метод и преодолява блокиранията на - IP адреса, но не получава някои съпътстващи данни, като продължителност на видеото - или дали е на живо + IP адреса, но не получава някои съпътстващи данни, като продължителност на видеото, + дали е на живо или публикации в общността Fetch Automatically: FreeTube автоматично ще извлича абонаментите при отваряне на нов прозорец и при смяна на профила. Player Settings: @@ -1261,5 +1277,10 @@ Search Listing: 4K: 4K Subtitles: Субтитри Closed Captions: Затворени субтитри + VR180: VR180 + 3D: 3D + 8K: 8K + 360 Video: 360° + New: Нов 'Blocked opening potentially unsafe URL': 'Блокирано отваряне на потенциално опасен URL адрес: "{url}".' diff --git a/static/locales/cs.yaml b/static/locales/cs.yaml index 078f5eb825020..67582a15098aa 100644 --- a/static/locales/cs.yaml +++ b/static/locales/cs.yaml @@ -93,7 +93,7 @@ Search Filters: další výsledky Features: HD: HD - 360 Video: 360° + 360 Video: 360° video Subtitles: Titulky Features: Vlastnosti Creative Commons: Creative Commons @@ -200,6 +200,9 @@ User Playlists: používán pro rychlou záložku. Playlist {playlistName} is the new quick bookmark playlist.: Playlist {playlistName} je nový playlist rychlé záložky. + This playlist has a video with a duration error: Tento playlist obsahuje nejméně + jedno video, které nemá dobu trvání. Bude seřazeno tak, jako by mělo dobu + trvání nula. Search for Videos: Hledat videa Are you sure you want to delete this playlist? This cannot be undone: Opravdu chcete odstranit tento playlist? Tato akce je nevratná. @@ -1021,6 +1024,8 @@ Playlist: VideoTitleDescending: Název (Z-A) VideoTitleAscending: Název (A-Z) Custom: Vlastní + VideoDurationAscending: Doba trvání (od nejkratších) + VideoDurationDescending: Doba trvání (od nejdelších) Toggle Theatre Mode: 'Přepnout režim divadla' Change Format: Change Media Formats: 'Změnit formát videa' @@ -1257,5 +1262,10 @@ Search Listing: 4K: 4K Subtitles: Titulky Closed Captions: Skryté titulky + 360 Video: 360° + New: Nové + 8K: 8K + VR180: VR180 + 3D: 3D 'Blocked opening potentially unsafe URL': 'Zablokováno otevření potenciálně nebezpečné adresy URL: „{url}“.' diff --git a/static/locales/de-DE.yaml b/static/locales/de-DE.yaml index 2934d9c8340d6..6c78321fee5cd 100644 --- a/static/locales/de-DE.yaml +++ b/static/locales/de-DE.yaml @@ -208,6 +208,9 @@ User Playlists: {playlistName} ist die neue Wiedergabeliste für schnelle Lesezeichen. This playlist is already being used for quick bookmark.: Diese Wiedergabeliste wird bereits für schnelle Lesezeichen verwendet. + This playlist has a video with a duration error: Diese Wiedergabeliste enthält + mindestens ein Video ohne Dauer. Daher wird die Wiedergabeliste so sortiert, + als ob die Dauer null wäre. Search for Videos: Nach Videos suchen AddVideoPrompt: N playlists selected: '{playlistCount} ausgewählt' @@ -1018,6 +1021,8 @@ Playlist: AuthorDescending: Autor (Z-A) VideoTitleAscending: Titel (A-Z) Custom: Benutzerdefiniert + VideoDurationAscending: Dauer (Kürzeste zuerst) + VideoDurationDescending: Dauer (Längste zuerst) Toggle Theatre Mode: Kinomodus umschalten Change Format: Change Media Formats: Medienformate ändern @@ -1321,5 +1326,10 @@ Search Listing: 4K: 4K Closed Captions: Geschlossene Untertitel Subtitles: Untertitel + 8K: 8K + VR180: VR180 + 360 Video: 360° + New: Neu + 3D: 3D 'Blocked opening potentially unsafe URL': 'Das Öffnen einer potenziell unsicheren URL wurde blockiert: „{url}“.' diff --git a/static/locales/en-GB.yaml b/static/locales/en-GB.yaml index 0e21909dd26f0..587aae689c78a 100644 --- a/static/locales/en-GB.yaml +++ b/static/locales/en-GB.yaml @@ -107,7 +107,9 @@ Subscriptions: Subscriptions: 'Subscriptions' Latest Subscriptions: 'Latest subscriptions' 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Your - Subscription list is currently empty. Start adding subscriptions to see them here.' + Subscription list is currently empty. If you want to import your subscriptions + you can go to Data Settings and select Import Subscriptions or you can search + for a channel and subscribe to them.' 'Getting Subscriptions. Please wait.': 'Getting Subscriptions. Please wait.' Refresh Subscriptions: 'Refresh Subscriptions' Load More Videos: Load more videos @@ -174,6 +176,10 @@ User Playlists: This playlist is protected and cannot be removed.: This playlist is protected and cannot be removed. This playlist does not exist: This playlist does not exist + + This playlist has a video with a duration error: This playlist contains at least + one video that doesn't have a duration, it will be sorted as if their duration + is zero. Playlist {playlistName} has been deleted.: Playlist {playlistName} has been deleted. Video has been removed: Video has been removed @@ -978,6 +984,8 @@ Video: Playback will resume automatically when your connection comes back: Playback will resume automatically when your connection comes back. Skipped segment: 'Skipped {segmentCategory} segment' + IP block: YouTube has blocked your IP address from watching videos. Please try switching + to a different VPN or proxy. Videos: #& Sort By Sort By: @@ -1006,6 +1014,8 @@ Playlist: AuthorAscending: Author (A-Z) AuthorDescending: Author (Z-A) VideoTitleAscending: Title (A-Z) + VideoDurationAscending: Duration (Shortest first) + VideoDurationDescending: Duration (Longest first) Toggle Theatre Mode: 'Toggle Theatre Mode' Change Format: Change Media Formats: 'Change Media Formats' @@ -1229,6 +1239,11 @@ Search Listing: 4K: 4K Subtitles: Subtitles Closed Captions: Closed Captions + 8K: 8K + 3D: 3D + VR180: VR180 + 360 Video: 360° + New: New Search character limit: Search query is over the {searchCharacterLimit} character limit Feed: diff --git a/static/locales/en-US.yaml b/static/locales/en-US.yaml index b6b01ec1142f7..88f9725a5f183 100644 --- a/static/locales/en-US.yaml +++ b/static/locales/en-US.yaml @@ -66,7 +66,12 @@ Search character limit: Search query is over the {searchCharacterLimit} characte Search Listing: Label: 4K: 4K + 8K: 8K + VR180: VR180 + 360 Video: 360° Subtitles: Subtitles + New: New + 3D: 3D # Aria labels Closed Captions: Closed Captions # In Filter Button @@ -236,6 +241,8 @@ User Playlists: Playlist {playlistName} is the new quick bookmark playlist.: Playlist {playlistName} is the new quick bookmark playlist. This playlist does not exist: This playlist does not exist + + This playlist has a video with a duration error: This playlist contains at least one video that doesn't have a duration, it will be sorted as if their duration is zero. AddVideoPrompt: Select a playlist to add your N videos to: 'Select a playlist to add your video to | Select a playlist to add your {videoCount} videos to' N playlists selected: '{playlistCount} Selected' @@ -929,6 +936,8 @@ Playlist: AuthorDescending: Author (Z-A) VideoTitleAscending: Title (A-Z) VideoTitleDescending: Title (Z-A) + VideoDurationAscending: Duration (Shortest first) + VideoDurationDescending: Duration (Longest first) Custom: Custom # On Video Watch Page diff --git a/static/locales/es.yaml b/static/locales/es.yaml index bac7bc36a6edd..7d103bd68ce0d 100644 --- a/static/locales/es.yaml +++ b/static/locales/es.yaml @@ -198,6 +198,9 @@ User Playlists: ya se utiliza como marcador rápido. Playlist {playlistName} is the new quick bookmark playlist.: L lista de reproducción {playlistName} es la nueva lista de reproducción de marcadores rápidos. + This playlist has a video with a duration error: Esta lista de reproducción + contiene al menos un vídeo sin duración, se ordenará como si su duración fuera + cero. Search for Videos: Buscar vídeos Are you sure you want to delete this playlist? This cannot be undone: ¿Estás seguro de que quieres borrar esta lista de reproducción? Esto no se puede deshacer. @@ -1041,6 +1044,8 @@ Playlist: VideoTitleAscending: Título (A-Z) Sort By: Ordenar por VideoTitleDescending: Título (Z-A) + VideoDurationAscending: Duración (primero la más corta) + VideoDurationDescending: Duración (la más larga primero) Toggle Theatre Mode: 'Activar modo cine' Change Format: Change Media Formats: 'Cambiar formato de vídeo' @@ -1289,5 +1294,10 @@ Search Listing: Subtitles: Subtítulos Closed Captions: Subtítulos descriptivos 4K: 4K + 360 Video: 360° + New: Nuevo + 8K: 8K + VR180: VR180 + 3D: 3D 'Blocked opening potentially unsafe URL': 'Bloqueada la apertura de la URL potencialmente insegura: «{url}».' diff --git a/static/locales/et.yaml b/static/locales/et.yaml index 15affdf341d72..2a9ae4fbf4c15 100644 --- a/static/locales/et.yaml +++ b/static/locales/et.yaml @@ -1199,5 +1199,10 @@ Search Listing: Subtitles: Subtiitrid Closed Captions: Subtiitrid 4K: 4K + New: Uus + 3D: 3D-sisu + 8K: 8K + VR180: VR180 + 360 Video: 360° 'Blocked opening potentially unsafe URL': 'Blokeerisime võimaliku ohtliku aadressi avamise: „{url}“.' diff --git a/static/locales/fr-FR.yaml b/static/locales/fr-FR.yaml index a88b3cb7ab79c..8146ed8406221 100644 --- a/static/locales/fr-FR.yaml +++ b/static/locales/fr-FR.yaml @@ -43,7 +43,7 @@ Global: Subscriber Count: 1 abonné | {count} abonnés Watching Count: 1 spectateur | {count} spectateurs Comment Count: 1 commentaire | {count} commentaires - Like Count: 1 like | {count} likes + Like Count: 1 j’aime | {count} j’aime Input Tags: Length Requirement: L'étiquette doit comporter au moins {number} caractères Search / Go to URL: 'Rechercher / ouvrir l''URL' @@ -82,7 +82,7 @@ Search Filters: Fetching results. Please wait: 'Récupération des résultats. Veuillez patienter' Fetch more results: 'Afficher plus de résultats' # Sidebar - There are no more results for this search: Il n'y a plus de résultats pour cette + There are no more results for this search: Il n’y a pas plus de résultats pour cette recherche Features: Creative Commons: Creative Commons @@ -101,7 +101,7 @@ Subscriptions: Subscriptions: 'Abonnements' Latest Subscriptions: 'Derniers abonnements' 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Votre - liste d''abonnements est actuellement vide. Si vous souhaitez importer vos abonnements, + liste d’abonnements est actuellement vide. Si vous souhaitez importer vos abonnements, vous pouvez aller dans Paramètres des données et sélectionner Importer des abonnements ou vous pouvez rechercher une chaîne et vous y abonner.' 'Getting Subscriptions. Please wait.': 'Récupération des vidéos de vos abonnements, @@ -109,7 +109,7 @@ Subscriptions: Getting Subscriptions. Please wait.: Obtention des abonnements. Veuillez patienter. Refresh Subscriptions: Actualiser les abonnements This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: Ce - profil comporte un grand nombre d'abonnements. Le flux RSS outrepassera la limite + profil comporte un grand nombre d'abonnements. Le flux RSS dépassera la limite fixée Load More Videos: Charger plus de vidéos Error Channels: Chaînes avec des erreurs @@ -152,7 +152,7 @@ User Playlists: Save: Sauvegarder Select a playlist to add your N videos to: Sélectionnez une liste de lecture à laquelle ajouter votre vidéo | Sélectionnez une liste de lecture à laquelle - ajouter vos vidéos {videoCount} + ajouter vos {videoCount} vidéos Toast: "{videoCount} video(s) added to 1 playlist": 1 vidéo ajoutée à 1 liste de lecture | {videoCount} vidéos ajoutées à 1 liste de lecture @@ -205,6 +205,9 @@ User Playlists: est déjà utilisée comme signet rapide. Playlist {playlistName} is the new quick bookmark playlist.: La liste de lecture {playlistName} est la nouvelle liste de lecture des signets rapides. + This playlist has a video with a duration error: Cette liste de lecture contient + au moins une vidéo qui n'a pas de durée, elle sera triée comme si la durée + était nulle. Search for Videos: Rechercher des vidéos Are you sure you want to delete this playlist? This cannot be undone: Êtes-vous sûr(e) de vouloir supprimer cette liste de lecture ? Cette opération ne peut pas @@ -1030,6 +1033,8 @@ Playlist: VideoTitleAscending: Titre (A-Z) VideoTitleDescending: Titre (Z-A) Custom: Personnalisé + VideoDurationDescending: Durée (la plus longue en premier) + VideoDurationAscending: Durée (la plus courte en premier) Toggle Theatre Mode: 'Mode Cinéma' Change Format: Change Media Formats: 'Changer le format de la vidéo' @@ -1337,5 +1342,10 @@ Search Listing: 4K: 4K Subtitles: Sous-titres Closed Captions: Sous-titrage codé + 8K: 8k + VR180: VR180 + 360 Video: 360° + New: Nouveau + 3D: 3D 'Blocked opening potentially unsafe URL': "Blocage de l'ouverture d'une URL potentiellement dangereuse : « {url} »." diff --git a/static/locales/hu.yaml b/static/locales/hu.yaml index eef0924fb87b6..5aa278bf12f3b 100644 --- a/static/locales/hu.yaml +++ b/static/locales/hu.yaml @@ -207,6 +207,9 @@ User Playlists: lejátszási lista az új gyors könyvjelző lejátszási lista. This playlist is already being used for quick bookmark.: Ez a lejátszási lista már használatban van mint gyors könyvjelző. + This playlist has a video with a duration error: Ez a lejátszási lista legalább + egy olyan videót tartalmaz, amelynek nincs időtartama, ezért úgy lesz rendezve, + mintha az időtartamuk nulla lenne. Search for Videos: Videók keresése Are you sure you want to delete this playlist? This cannot be undone: Biztos, hogy törölni szeretné ezt a lejátszási listát? Ezt nem lehet visszacsinálni. @@ -1046,6 +1049,8 @@ Playlist: VideoTitleAscending: Cím szerint (A-Z) VideoTitleDescending: Cím szerint (Z-A) Custom: Egyéni rendezés + VideoDurationAscending: Időtartam (legrövidebb elöl) + VideoDurationDescending: Időtartam (leghosszabb elöl) Toggle Theatre Mode: 'Mozi mód be-/kikapcsolása' Change Format: Change Media Formats: 'Videoformátumok módosítása' @@ -1096,7 +1101,7 @@ Comments: hozzászólások' Load More Comments: 'További hozzászólások betöltése' No more comments available: Nincs több hozzászólás - Newest first: Legújabb először + Newest first: Legújabb elöl Top comments: Legnépszerűbb hozzászólások Sort by: Rendezés alapja Show More Replies: További válaszok megjelenítése @@ -1288,5 +1293,10 @@ Search Listing: 4K: 4K Subtitles: Feliratok Closed Captions: Feliratok (effektek is) + 8K: 8K + VR180: VR180 + 360 Video: 360° + New: Új + 3D: 3D 'Blocked opening potentially unsafe URL': 'Potenciálisan nem biztonságos webcím megnyitása letiltva: „{url}”.' diff --git a/static/locales/it.yaml b/static/locales/it.yaml index 6bdd0a4be6f1f..dc053142bb4cf 100644 --- a/static/locales/it.yaml +++ b/static/locales/it.yaml @@ -200,6 +200,9 @@ User Playlists: utilizzata per i segnalibri rapidi. Playlist {playlistName} is the new quick bookmark playlist.: La playlist {playlistName} è la nuova playlist con segnalibri rapidi. + This playlist has a video with a duration error: Questa playlist contiene almeno + un video che non ha durata; verranno ordinati come se la loro durata fosse + zero. Search for Videos: Cerca video Are you sure you want to delete this playlist? This cannot be undone: Sei sicuro di voler eliminare questa playlist? Questa operazione non può essere annullata. @@ -999,6 +1002,8 @@ Playlist: DateAddedNewest: Prima gli aggiunti più nuovi DateAddedOldest: Prima gli aggiunti più vecchi VideoTitleAscending: Titolo (A-Z) + VideoDurationAscending: Durata (prima la più breve) + VideoDurationDescending: Durata (prima la più lunga) Toggle Theatre Mode: 'Attiva/disattiva la modalità teatro' Change Format: Change Media Formats: 'Cambia formato video' @@ -1292,5 +1297,10 @@ Search Listing: 4K: 4K Closed Captions: Sottotitoli per non udenti Subtitles: Sottotitoli + 8K: 8K + VR180: VR180 + 360 Video: 360° + New: Nuovo + 3D: 3D 'Blocked opening potentially unsafe URL': 'Apertura di URL potenzialmente non sicura bloccata: "{url}".' diff --git a/static/locales/pl.yaml b/static/locales/pl.yaml index 6a9f24e01d584..6fa7d0d48d1df 100644 --- a/static/locales/pl.yaml +++ b/static/locales/pl.yaml @@ -100,8 +100,8 @@ Subscriptions: Subscriptions: 'Subskrypcje' Latest Subscriptions: 'Ostatnie subskrypcje' 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Twoja - lista subskrypcji jest obecnie pusta. Zacznij dodawać subskrypcje, aby zobaczyć - je tutaj.' + lista subskrypcji jest obecnie pusta. Możesz zaimportować swoje subskrypcje w + Ustawieniach danych, klikając w „Zaimportuj subskrypcje”.' 'Getting Subscriptions. Please wait.': 'Pobieranie subskrypcji. Proszę czekać...' Refresh Subscriptions: Odśwież subskrypcje Getting Subscriptions. Please wait.: Pobieranie subskrypcji. Proszę poczekać. @@ -972,6 +972,8 @@ Video: zostanie wznowione, jak tylko połączenie zostanie odzyskane. Skipped segment: Pominięto segment {segmentCategory} Full Window: Pełny ekran + IP block: YouTube uniemożliwił odtworzenie filmów blokując Twój adres IP. Możesz + spróbować przełączyć się na inny, korzystając z VPN lub proxy. Videos: #& Sort By Sort By: @@ -1294,5 +1296,10 @@ Search Listing: Subtitles: Napisy Closed Captions: Napisy z opisami 4K: 4K + New: Nowe + 3D: 3D + VR180: VR180 + 8K: 8K + 360 Video: 360° 'Blocked opening potentially unsafe URL': 'Zablokowano otwarcie potencjalnie niebezpiecznego URL: "{url}".' diff --git a/static/locales/pt-BR.yaml b/static/locales/pt-BR.yaml index 9e34976c6f30a..8ebbc869b5ab4 100644 --- a/static/locales/pt-BR.yaml +++ b/static/locales/pt-BR.yaml @@ -1285,5 +1285,10 @@ Search Listing: Subtitles: Legendas Closed Captions: Legendas ocultas (CC) 4K: 4K + 8K: 8K + VR180: VR180 + 360 Video: 360° + 3D: 3D + New: Novo 'Blocked opening potentially unsafe URL': 'Impedido de abrir URL potencialmente inseguro: "{url}".' diff --git a/static/locales/sr.yaml b/static/locales/sr.yaml index 3ec1b9e9fe513..0f9d0dd9da8b4 100644 --- a/static/locales/sr.yaml +++ b/static/locales/sr.yaml @@ -203,6 +203,9 @@ User Playlists: користи за брзо обележавање. Playlist {playlistName} is the new quick bookmark playlist.: Плејлиста {playlistName} је нова плејлиста за брзо обележавање. + This playlist has a video with a duration error: Ова плејлиста садржи најмање + један видео снимак који нема трајање, биће сортиран као да је његово трајање + нула. Search for Videos: Претрага видео снимака Are you sure you want to delete this playlist? This cannot be undone: Желите ли заиста да избришете ову плејлисту? Ово се не може поништити. @@ -1044,6 +1047,8 @@ Playlist: Sort By: Сортирање по AuthorDescending: Аутор (Z-A) DateAddedNewest: Најновије додато прво + VideoDurationDescending: Трајање (прво најдуже) + VideoDurationAscending: Трајање (прво најкраће) Falling back to Invidious API: Повратак на Invidious API Change Format: Dash formats are not available for this video: DASH формати нису доступни за овај @@ -1199,5 +1204,10 @@ Search Listing: Closed Captions: Скривени титлови 4K: 4K Subtitles: Титлови + 8K: 8K + VR180: VR180 + 360 Video: 360° + New: Ново + 3D: 3D 'Blocked opening potentially unsafe URL': 'Блокирано отварање потенцијално небезбедне URL адресе: „{url}“.' diff --git a/static/locales/tr.yaml b/static/locales/tr.yaml index c81fe7f34fecd..223a055bdabf1 100644 --- a/static/locales/tr.yaml +++ b/static/locales/tr.yaml @@ -196,6 +196,8 @@ User Playlists: oynatma listesi yeni hızlı yer imi oynatma listesi.' This playlist is already being used for quick bookmark.: Bu oynatma listesi zaten hızlı yer imi için kullanılıyor. + This playlist has a video with a duration error: Bu oynatma listesi süresi olmayan + en az bir video içeriyor, süreleri sıfırmış gibi sıralanacaktır. Search for Videos: Video Ara AddVideoPrompt: Select a playlist to add your N videos to: Videonuzu eklemek için bir oynatma @@ -1045,6 +1047,8 @@ Playlist: Sort By: Sıralama ölçütü DateAddedOldest: İlk eklenen önce Custom: Özel + VideoDurationAscending: Süre (Önce en kısa) + VideoDurationDescending: Süre (Önce en uzun) Toggle Theatre Mode: 'Tiyatro Modunu Aç/Kapat' Change Format: Change Media Formats: 'Medya Biçimlerini Değiştir' @@ -1285,5 +1289,10 @@ Search Listing: Closed Captions: Kapalı Alt Yazılar 4K: 4K Subtitles: Alt Yazılar + VR180: VR180 + 360 Video: 360° + New: Yeni + 3D: 3B + 8K: 8K 'Blocked opening potentially unsafe URL': "Güvenli olmayabilir URL'nin açılması engellendi: \"{url}\"." diff --git a/static/locales/zh-CN.yaml b/static/locales/zh-CN.yaml index c43d8e224e380..1d9afd44cf558 100644 --- a/static/locales/zh-CN.yaml +++ b/static/locales/zh-CN.yaml @@ -171,6 +171,8 @@ User Playlists: This playlist is already being used for quick bookmark.: 此播放列表已被用于快速书签。 Playlist {playlistName} is the new quick bookmark playlist.: 播放列表 {playlistName} 是新的快速书签播放列表。 + This playlist has a video with a duration error: 此播放列表包含至少一个没有持续时间的视频,排序时将按照持续时间为 + 0 对待此视频。 Search for Videos: 搜索视频 Are you sure you want to delete this playlist? This cannot be undone: 你确定要删除此播放列表吗?此操作无法撤销。 Sort By: @@ -883,6 +885,8 @@ Playlist: VideoTitleDescending: 标题(Z-A) Custom: 自定义 VideoTitleAscending: 标题(A-Z) + VideoDurationAscending: 持续时间(最短的优先) + VideoDurationDescending: 持续时间(最长的优先) Toggle Theatre Mode: '切换剧场模式' Change Format: Change Media Formats: '更换视频格式' @@ -1110,4 +1114,9 @@ Search Listing: 4K: 4K Subtitles: 字幕 Closed Captions: 隐藏式字幕 + New: 新的 + 3D: 3D + 8K: 8K + VR180: VR180 + 360 Video: 360° 'Blocked opening potentially unsafe URL': 阻止了打开潜在不安全的 URL: "{url}".