mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-12 02:51:46 +00:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ca04c4561b | |||
| 7d8fbf49a8 | |||
| 75e15b948d | |||
| 125b69fd75 | |||
| a68d6b64dd | |||
| a60d4264dc | |||
| 9e2c6b1afa | |||
| 14965a93e9 | |||
| f62664b6a5 | |||
| 60cb7f32f1 | |||
| 008b3ad710 | |||
| 8cae64f496 | |||
| 5cdc1bc762 | |||
| 15c455105b | |||
| 14407a98c9 | |||
| 0d004d5caf | |||
| 4b75a2405c |
11
changelog.md
11
changelog.md
@ -2,7 +2,16 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
||||
|
||||
#### [v3.0.0](https://github.com/th-ch/youtube-music/compare/v2.2.0...v3.0.0)
|
||||
#### [v3.0.1](https://github.com/th-ch/youtube-music/compare/v3.0.0...v3.0.1)
|
||||
|
||||
- hotfix(adblocker): fix #1475 [`#1475`](https://github.com/th-ch/youtube-music/issues/1475)
|
||||
- Translated using Weblate (French) [`7f02afc`](https://github.com/th-ch/youtube-music/commit/7f02afc5a6839adfe8437d4e2cc8dee13a93b311)
|
||||
- Update changelog for v3.0.0 [`d8c8bd1`](https://github.com/th-ch/youtube-music/commit/d8c8bd17ecfbdf96ebd29eb4c5748c07876ee242)
|
||||
- Translated using Weblate (German) [`0660f0b`](https://github.com/th-ch/youtube-music/commit/0660f0b7ce6895ef5800f48ade1da2d7f8e0c1f7)
|
||||
|
||||
### [v3.0.0](https://github.com/th-ch/youtube-music/compare/v2.2.0...v3.0.0)
|
||||
|
||||
> 2 December 2023
|
||||
|
||||
- Add text to Translation section [`#1470`](https://github.com/th-ch/youtube-music/pull/1470)
|
||||
- fix(deps): update dependency youtubei.js to v8 [`#1473`](https://github.com/th-ch/youtube-music/pull/1473)
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "youtube-music",
|
||||
"productName": "YouTube Music",
|
||||
"version": "3.0.1",
|
||||
"version": "3.0.2",
|
||||
"description": "YouTube Music Desktop App - including custom plugins",
|
||||
"main": "./dist/main/index.js",
|
||||
"license": "MIT",
|
||||
@ -162,7 +162,7 @@
|
||||
"node-html-parser": "6.1.11",
|
||||
"node-id3": "0.2.6",
|
||||
"serve": "14.2.1",
|
||||
"simple-youtube-age-restriction-bypass": "git+https://github.com/organization/Simple-YouTube-Age-Restriction-Bypass.git#v2.5.8",
|
||||
"simple-youtube-age-restriction-bypass": "github:organization/Simple-YouTube-Age-Restriction-Bypass#v2.5.9",
|
||||
"ts-morph": "20.0.0",
|
||||
"vudio": "2.1.1",
|
||||
"x11": "2.3.0",
|
||||
|
||||
809
pnpm-lock.yaml
generated
809
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
export interface LanguageResources {
|
||||
[lang: string]: {
|
||||
translation: Record<string, unknown> & {
|
||||
language: {
|
||||
language?: {
|
||||
name: string;
|
||||
'local-name': string;
|
||||
code: string;
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "did finish load. dev tools opened"
|
||||
"dev-tools": "Finished loading. DevTools opened"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n loaded"
|
||||
|
||||
@ -44,5 +44,69 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"ambient-mode": {
|
||||
"menu": {
|
||||
"buffer": {
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
},
|
||||
"opacity": {
|
||||
"submenu": {
|
||||
"percent": "{{opacity}}%"
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"submenu": {
|
||||
"percent": "{{size}}%"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"captions-selector": {
|
||||
"prompt": {
|
||||
"selector": {
|
||||
"none": "Aucun"
|
||||
}
|
||||
}
|
||||
},
|
||||
"crossfade": {
|
||||
"prompt": {
|
||||
"options": {
|
||||
"multi-input": {
|
||||
"fade-scaling": {
|
||||
"linear": "Linéaire",
|
||||
"logarithmic": "Logarithmique"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"downloader": {
|
||||
"backend": {
|
||||
"dialog": {
|
||||
"start-download-playlist": {
|
||||
"detail": "({{playlistSize}} chansons)",
|
||||
"title": "Téléchargement a commencé"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"download-progress": "Télécharger: {{percent}}%",
|
||||
"downloading": "Télécharge…",
|
||||
"downloading-counter": "Télécharge {{current}}/{{total}}…",
|
||||
"preparing-file": "Péparer des fichier…",
|
||||
"saving": "Sauvegarde…"
|
||||
}
|
||||
},
|
||||
"name": "Téléchargeur",
|
||||
"templates": {
|
||||
"button": "Télécharger"
|
||||
}
|
||||
},
|
||||
"last-fm": {
|
||||
"name": "Last.fm"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
145
src/i18n/resources/zh-TW.json
Normal file
145
src/i18n/resources/zh-TW.json
Normal file
@ -0,0 +1,145 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "插件 {{pluginName}} 無法被執行::{{contextName}}",
|
||||
"executed-at-ms": "插件 {{pluginName}} ::{{contextName}} 用了 {{ms}} ms 來執行",
|
||||
"initialize-failed": "初始化插件 \"{{pluginName}}\" 失敗",
|
||||
"load-all": "載入所有插件",
|
||||
"load-failed": "載入插件 \"{{pluginName}}\" 失敗",
|
||||
"loaded": "插件 \"{{pluginName}}\" 已被載入",
|
||||
"unload-failed": "解除安裝插件 \"{{pluginName}}\" 失敗",
|
||||
"unloaded": "插件 \"{{pluginName}}\" 已被解除安裝"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "zh-TW",
|
||||
"local-name": "正體字",
|
||||
"name": "Traditional Chinese"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "載入完成。開發者工具已開啟"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n 已載入"
|
||||
},
|
||||
"second-instance": {
|
||||
"receive-command": "使用協定來接收指令: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS 檔案 \"{{cssFile}}\" 不存在,已忽略"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "無回應錯誤!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "清理程式的快取資料"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "視窗正嘗試在螢幕外渲染,視窗大小 = {{windowSize}},螢幕大小 = {{displaySize}},位置 = {{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "選單已隱藏,使用 'Alt' 鍵來重新顯示(或是使用空白鍵來使用程式內選單)",
|
||||
"message": "隱藏選單已經啟用",
|
||||
"title": "隱藏選單已啟用"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "稍後",
|
||||
"restart-now": "立即重啟"
|
||||
},
|
||||
"detail": "插件 \"{{pluginName}}\" 需要程式重新啟動之後才會生效",
|
||||
"message": "\"{{pluginName}}\" 需要重新啟動",
|
||||
"title": "需要重新啟動"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
"quit": "離開",
|
||||
"relaunch": "重新啟動",
|
||||
"wait": "等一下"
|
||||
},
|
||||
"detail": "造成不便我們深表歉意!請選擇動作:",
|
||||
"message": "應用程式無回應",
|
||||
"title": "視窗無回應"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "關閉更新",
|
||||
"download": "下載",
|
||||
"ok": "OK"
|
||||
},
|
||||
"detail": "新的版本已經推出,你可以到 {{downloadLink}} 下載",
|
||||
"message": "有新版本可用",
|
||||
"title": "有可用的更新"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"about": "關於",
|
||||
"navigation": {
|
||||
"label": "導覽列",
|
||||
"submenu": {
|
||||
"copy-current-url": "複製目前的網址",
|
||||
"go-back": "回到上一頁",
|
||||
"go-forward": "回到下一頁",
|
||||
"quit": "退出",
|
||||
"restart": "重啟程式"
|
||||
}
|
||||
},
|
||||
"options": {
|
||||
"label": "選項",
|
||||
"submenu": {
|
||||
"advanced-options": {
|
||||
"label": "進階選項",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "當程式啟動時重置應用程式快取",
|
||||
"disable-hardware-acceleration": "關閉硬體加速",
|
||||
"edit-config-json": "編輯 config.json",
|
||||
"override-user-agent": "複寫用戶代理",
|
||||
"restart-on-config-changes": "重新啟動來更改配置",
|
||||
"set-proxy": {
|
||||
"label": "設定代理伺服器",
|
||||
"prompt": {
|
||||
"label": "輸入代理伺服器位置:(留空以停用本設定)",
|
||||
"placeholder": "示例: socks5://127.0.0.1:9999",
|
||||
"title": "設定代理伺服器"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "切換開發者工具"
|
||||
}
|
||||
},
|
||||
"always-on-top": "永遠顯示在最上層",
|
||||
"auto-update": "自動更新",
|
||||
"hide-menu": {
|
||||
"label": "隱藏選單"
|
||||
},
|
||||
"language": {
|
||||
"dialog": {
|
||||
"message": "語言會在下一次重啟應用時變更",
|
||||
"title": "語言已變更"
|
||||
},
|
||||
"label": "語言",
|
||||
"submenu": {
|
||||
"to-help-translate": "想要協助翻譯?點擊這裡"
|
||||
}
|
||||
},
|
||||
"resume-on-start": "繼續上次關閉應用前的音樂",
|
||||
"start-at-login": "開機時啟動",
|
||||
"starting-page": {
|
||||
"label": "啟動頁面",
|
||||
"unset": "未設置"
|
||||
},
|
||||
"tray": {
|
||||
"submenu": {
|
||||
"disabled": "已停用"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -404,7 +404,7 @@ async function createMainWindow() {
|
||||
removeContentSecurityPolicy();
|
||||
|
||||
win.webContents.on('dom-ready', async () => {
|
||||
if (useInlineMenu) {
|
||||
if (useInlineMenu && !is.linux()) {
|
||||
win.setTitleBarOverlay({
|
||||
...defaultTitleBarOverlayOptions,
|
||||
height: Math.floor(
|
||||
|
||||
@ -377,7 +377,7 @@ export const mainMenuTemplate = async (
|
||||
availableLanguages
|
||||
.map(
|
||||
(lang): Electron.MenuItemConstructorOptions => ({
|
||||
label: `${languageResources[lang].translation.language.name} (${languageResources[lang].translation.language['local-name']})`,
|
||||
label: `${languageResources[lang].translation.language?.name ?? 'Unknown'} (${languageResources[lang].translation.language?.['local-name'] ?? 'Unknown'})`,
|
||||
type: 'checkbox',
|
||||
checked: (config.get('options.language') ?? 'en') === lang,
|
||||
click() {
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
let injected = false;
|
||||
|
||||
export const isInjected = () => isInjected;
|
||||
export const isInjected = () => injected;
|
||||
|
||||
export const inject = () => {
|
||||
injected = true;
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
import { inject } from 'simple-youtube-age-restriction-bypass';
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
import { t } from '@/i18n';
|
||||
|
||||
@ -6,6 +8,6 @@ export default createPlugin({
|
||||
description: () => t('plugins.bypass-age-restrictions.description'),
|
||||
restartNeeded: true,
|
||||
|
||||
// See https://github.com/zerodytrash/Simple-YouTube-Age-Restriction-Bypass#userscript
|
||||
renderer: () => import('simple-youtube-age-restriction-bypass'),
|
||||
// See https://github.com/organization/Simple-YouTube-Age-Restriction-Bypass#userscript
|
||||
renderer: () => inject(),
|
||||
});
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
declare module 'simple-youtube-age-restriction-bypass' {
|
||||
const nothing: never;
|
||||
export default nothing;
|
||||
export const inject: () => void;
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ export const onMenu = async ({
|
||||
if (is.linux()) {
|
||||
return [
|
||||
{
|
||||
label: t('plugins.in-app-menu.hide-dom-window-controls'),
|
||||
label: t('plugins.in-app-menu.menu.hide-dom-window-controls'),
|
||||
type: 'checkbox',
|
||||
checked: config.hideDOMWindowControls,
|
||||
click(item) {
|
||||
|
||||
Reference in New Issue
Block a user