mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-03-09 21:03:55 +00:00
Compare commits
13 Commits
6262a1c269
...
462cb71dd7
| Author | SHA1 | Date | |
|---|---|---|---|
| 462cb71dd7 | |||
| e2f1ff50dd | |||
| 3f1ceca39c | |||
| 37277b2764 | |||
| ba89772b09 | |||
| 13a0e8e2ab | |||
| faddaea403 | |||
| f50025f1f6 | |||
| 0f3a01718c | |||
| 3b4a1444f1 | |||
| f403700bf7 | |||
| eab9f8ebcb | |||
| 8a074a6f37 |
2
.github/workflows/pr-build-artifacts.yml
vendored
2
.github/workflows/pr-build-artifacts.yml
vendored
@ -87,7 +87,7 @@ jobs:
|
||||
pnpm dist:win
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: build-artifacts-${{ matrix.os }}
|
||||
path: pack/
|
||||
|
||||
42
package.json
42
package.json
@ -46,7 +46,7 @@
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
"vite": "npm:rolldown-vite@7.3.1",
|
||||
"node-gyp": "11.5.0",
|
||||
"node-gyp": "12.2.0",
|
||||
"xml2js": "0.6.2",
|
||||
"node-fetch": "3.3.2",
|
||||
"@electron/universal": "3.0.2",
|
||||
@ -64,7 +64,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@dehoist/romanize-thai": "1.0.0",
|
||||
"@electron-toolkit/tsconfig": "1.0.1",
|
||||
"@electron-toolkit/tsconfig": "2.0.0",
|
||||
"@electron/remote": "2.1.3",
|
||||
"@ffmpeg.wasm/core-mt": "0.12.0",
|
||||
"@ffmpeg.wasm/main": "0.12.0",
|
||||
@ -75,13 +75,14 @@
|
||||
"@hono/node-server": "1.19.9",
|
||||
"@hono/node-ws": "1.3.0",
|
||||
"@hono/swagger-ui": "0.5.3",
|
||||
"@hono/zod-openapi": "1.2.0",
|
||||
"@hono/zod-openapi": "1.2.1",
|
||||
"@hono/zod-validator": "0.7.6",
|
||||
"@indic-transliteration/sanscript": "1.3.3",
|
||||
"@jellybrick/dbus-next": "0.10.3",
|
||||
"@jellybrick/electron-better-web-request": "2.0.0",
|
||||
"@jellybrick/mpris-service": "2.1.5",
|
||||
"@jimp/plugin-color": "1.6.0",
|
||||
"@mdui/icons": "^1.0.3",
|
||||
"@mdui/icons": "1.0.3",
|
||||
"@skyra/jaro-winkler": "1.1.1",
|
||||
"@xhayper/discord-rpc": "1.3.0",
|
||||
"async-mutex": "0.5.0",
|
||||
@ -89,27 +90,26 @@
|
||||
"butterchurn": "3.0.0-beta.5",
|
||||
"butterchurn-presets": "3.0.0-beta.4",
|
||||
"color": "5.0.3",
|
||||
"conf": "14.0.0",
|
||||
"conf": "15.0.2",
|
||||
"custom-electron-prompt": "1.6.1",
|
||||
"deepmerge-ts": "7.1.5",
|
||||
"delay": "6.0.0",
|
||||
"electron-debug": "4.1.0",
|
||||
"electron-is": "3.0.0",
|
||||
"electron-localshortcut": "3.2.1",
|
||||
"electron-store": "10.1.0",
|
||||
"electron-store": "11.0.2",
|
||||
"electron-unhandled": "5.0.0",
|
||||
"electron-updater": "6.7.3",
|
||||
"es-hangul": "2.3.8",
|
||||
"fast-average-color": "9.5.0",
|
||||
"fast-equals": "5.4.0",
|
||||
"fast-equals": "6.0.0",
|
||||
"fflate": "0.8.2",
|
||||
"filenamify": "6.0.0",
|
||||
"filenamify": "7.0.1",
|
||||
"hanja": "1.1.5",
|
||||
"happy-dom": "20.4.0",
|
||||
"happy-dom": "20.5.0",
|
||||
"hono": "4.11.7",
|
||||
"howler": "2.2.4",
|
||||
"html-to-text": "9.0.5",
|
||||
"i18next": "25.5.2",
|
||||
"i18next": "25.8.0",
|
||||
"jimp": "1.6.0",
|
||||
"keyboardevent-from-electron-accelerator": "2.0.0",
|
||||
"keyboardevents-areequal": "0.2.2",
|
||||
@ -134,14 +134,14 @@
|
||||
"virtua": "0.48.5",
|
||||
"vudio": "2.1.1",
|
||||
"x11": "2.3.0",
|
||||
"youtubei.js": "^16.0.1",
|
||||
"zod": "4.2.1"
|
||||
"youtubei.js": "16.0.1",
|
||||
"zod": "4.3.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@electron-toolkit/tsconfig": "1.0.1",
|
||||
"@eslint/js": "9.39.2",
|
||||
"@malept/flatpak-bundler": "0.4.0",
|
||||
"@playwright/test": "1.58.0",
|
||||
"@playwright/test": "1.58.1",
|
||||
"@stylistic/eslint-plugin": "5.7.1",
|
||||
"@total-typescript/ts-reset": "0.6.1",
|
||||
"@types/electron-localshortcut": "3.1.3",
|
||||
@ -152,11 +152,11 @@
|
||||
"bufferutil": "4.1.0",
|
||||
"builtin-modules": "5.0.0",
|
||||
"cross-env": "10.1.0",
|
||||
"del-cli": "6.0.0",
|
||||
"discord-api-types": "0.38.37",
|
||||
"del-cli": "7.0.0",
|
||||
"discord-api-types": "0.38.38",
|
||||
"electron": "40.1.0",
|
||||
"electron-builder": "26.4.0",
|
||||
"electron-builder-squirrel-windows": "26.4.0",
|
||||
"electron-builder": "26.7.0",
|
||||
"electron-builder-squirrel-windows": "26.7.0",
|
||||
"electron-devtools-installer": "4.0.0",
|
||||
"electron-vite": "5.0.0",
|
||||
"eslint": "9.39.2",
|
||||
@ -166,11 +166,11 @@
|
||||
"eslint-plugin-import": "2.32.0",
|
||||
"eslint-plugin-prettier": "5.5.5",
|
||||
"eslint-plugin-solid": "0.14.5",
|
||||
"glob": "11.1.0",
|
||||
"node-gyp": "11.5.0",
|
||||
"glob": "13.0.0",
|
||||
"node-gyp": "12.2.0",
|
||||
"ts-morph": "27.0.2",
|
||||
"typescript": "5.9.3",
|
||||
"typescript-eslint": "8.53.1",
|
||||
"typescript-eslint": "8.54.0",
|
||||
"utf-8-validate": "6.0.6",
|
||||
"vite": "npm:rolldown-vite@7.3.1",
|
||||
"vite-plugin-inspect": "11.3.3",
|
||||
|
||||
856
pnpm-lock.yaml
generated
856
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -161,7 +161,8 @@
|
||||
"default": "Par défaut",
|
||||
"force-show": "Forcer à apparaître",
|
||||
"hide": "Cacher",
|
||||
"label": "Boutons « J'aime »"
|
||||
"label": "Boutons « J'aime »",
|
||||
"swap": "Inverser l'order des boutons like"
|
||||
},
|
||||
"remove-upgrade-button": "Supprimer le bouton de mise à niveau",
|
||||
"theme": {
|
||||
@ -412,6 +413,17 @@
|
||||
"no-captions": "Aucun sous-titres disponibles pour cette chanson"
|
||||
}
|
||||
},
|
||||
"clock": {
|
||||
"description": "Ajoute une horloge a la barre de navigation",
|
||||
"menu": {
|
||||
"format": {
|
||||
"24-hour-format": "Format 24 heures",
|
||||
"display-seconds": "Afficher les secondes",
|
||||
"label": "Format"
|
||||
}
|
||||
},
|
||||
"name": "Horloge"
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Toujours définir la barre latérale en mode compact",
|
||||
"name": "Barre latérale compacte"
|
||||
|
||||
@ -161,7 +161,8 @@
|
||||
"default": "Predefinito",
|
||||
"force-show": "Forza la visualizzazione",
|
||||
"hide": "Nascondi",
|
||||
"label": "Pulsanti Like"
|
||||
"label": "Pulsanti Like",
|
||||
"swap": "Scambia l'ordine dei pulsanti like"
|
||||
},
|
||||
"remove-upgrade-button": "Rimuovi il pulsante aggiorna",
|
||||
"theme": {
|
||||
@ -412,6 +413,17 @@
|
||||
"no-captions": "Nessun sottotitolo disponibile per questa canzone"
|
||||
}
|
||||
},
|
||||
"clock": {
|
||||
"description": "Aggiungi un orologio alla barra di navigazione",
|
||||
"menu": {
|
||||
"format": {
|
||||
"24-hour-format": "Formato in 24 ore",
|
||||
"display-seconds": "Mostra Secondi",
|
||||
"label": "Formato"
|
||||
}
|
||||
},
|
||||
"name": "Orologio"
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Imposta sempre la barra laterale in modalità compatta",
|
||||
"name": "Barra laterale compatta"
|
||||
|
||||
@ -2,13 +2,13 @@
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "확장 {{pluginName}}::{{contextName}}을(를) 실행하지 못했습니다",
|
||||
"execute-failed": "확장 {{pluginName}}::{{contextName}}을(를) 실행 실패함",
|
||||
"executed-at-ms": "확장 {{pluginName}}::{{contextName}}이 {{ms}}ms 만에 실행됨",
|
||||
"initialize-failed": "확장 \"{{pluginName}}\"을(를) 초기화하지 못했습니다",
|
||||
"initialize-failed": "확장 \"{{pluginName}}\"을(를) 초기화 실패함",
|
||||
"load-all": "모든 확장 로드 중",
|
||||
"load-failed": "확장 \"{{pluginName}}\"을(를) 로드하지 못했습니다",
|
||||
"loaded": "확장 \"{{pluginName}}\" 로드됨",
|
||||
"unload-failed": "확장 \"{{pluginName}}\"을(를) 언로드하지 못했습니다",
|
||||
"unload-failed": "확장 \"{{pluginName}}\"을(를) 언로드 실패함",
|
||||
"unloaded": "확장 \"{{pluginName}}\" 언로드 됨"
|
||||
}
|
||||
}
|
||||
@ -21,7 +21,7 @@
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "로드가 완료되었습니다. 개발자 도구가 열렸습니다"
|
||||
"dev-tools": "로드 완료. 개발자 도구 실행됨"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "국제화 로드됨"
|
||||
@ -30,32 +30,32 @@
|
||||
"receive-command": "프로토콜을 통해 명령을 받았습니다: \"{{command}}\""
|
||||
},
|
||||
"theme": {
|
||||
"css-file-not-found": "CSS 파일 \"{{cssFile}}\"이(가) 존재하지 않습니다. 무시합니다"
|
||||
"css-file-not-found": "CSS 파일 \"{{cssFile}}\"이(가) 존재하지 않음. 무시됨"
|
||||
},
|
||||
"unresponsive": {
|
||||
"details": "응답 없음 오류!\n{{error}}"
|
||||
},
|
||||
"when-ready": {
|
||||
"clearing-cache-after-20s": "앱 캐시 지우기"
|
||||
"clearing-cache-after-20s": "앱 캐시 지우는 중"
|
||||
},
|
||||
"window": {
|
||||
"tried-to-render-offscreen": "창이 오프스크린 렌더링을 시도했습니다. windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
|
||||
"tried-to-render-offscreen": "창이 오프스크린 렌더링을 시도했습니다, windowSize={{windowSize}}, displaySize={{displaySize}}, position={{position}}"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"hide-menu-enabled": {
|
||||
"detail": "'Alt' 키를 눌러 숨겨진 메뉴를 표시할 수 있습니다 (인앱 메뉴를 사용하는 경우 'Esc' 키를 사용)",
|
||||
"message": "메뉴 숨기기가 활성화되어 있습니다",
|
||||
"message": "메뉴 숨기기가 활성화되어 있음",
|
||||
"title": "메뉴 숨기기 활성화됨"
|
||||
},
|
||||
"need-to-restart": {
|
||||
"buttons": {
|
||||
"later": "나중에 하기",
|
||||
"later": "나중에",
|
||||
"restart-now": "지금 재시작하기"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" 확장을 적용하려면 재시작해야 합니다",
|
||||
"message": "\"{{pluginName}}\"은(는) 재시작이 필요합니다",
|
||||
"title": "재시작 필요"
|
||||
"title": "재시작 필요함"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
@ -63,17 +63,17 @@
|
||||
"relaunch": "재시작",
|
||||
"wait": "기다리기"
|
||||
},
|
||||
"detail": "불편을 드려 죄송합니다! 방법을 선택해 주세요:",
|
||||
"detail": "불편을 드려 죄송합니다! 다음 중 하나를 선택해 주세요.",
|
||||
"message": "애플리케이션이 응답하지 않습니다",
|
||||
"title": "창이 응답하지 않음"
|
||||
},
|
||||
"update-available": {
|
||||
"buttons": {
|
||||
"disable": "업데이트 비활성화",
|
||||
"disable": "업데이트 비활성화하기",
|
||||
"download": "다운로드",
|
||||
"ok": "확인"
|
||||
},
|
||||
"detail": "새 버전이 출시되었습니다. {{downloadLink}}에서 다운로드할 수 있습니다",
|
||||
"detail": "새 버전을 {{downloadLink}}에서 설치할 수 있습니다",
|
||||
"message": "새 버전을 사용할 수 있습니다",
|
||||
"title": "업데이트 사용 가능"
|
||||
}
|
||||
@ -96,23 +96,23 @@
|
||||
"advanced-options": {
|
||||
"label": "고급 설정",
|
||||
"submenu": {
|
||||
"auto-reset-app-cache": "앱 시작 시 앱 캐시 초기화",
|
||||
"auto-reset-app-cache": "앱 시작 시 앱 캐시 초기화하기",
|
||||
"disable-hardware-acceleration": "하드웨어 가속 비활성화",
|
||||
"edit-config-json": "config.json 편집",
|
||||
"override-user-agent": "User-Agent 재정의",
|
||||
"restart-on-config-changes": "설정 변경 시 재시작",
|
||||
"override-user-agent": "User-Agent 재정의하기",
|
||||
"restart-on-config-changes": "설정 변경 시 재시작하기",
|
||||
"set-proxy": {
|
||||
"label": "프록시 설정",
|
||||
"label": "프록시 설정하기",
|
||||
"prompt": {
|
||||
"label": "프록시 주소를 입력하세요: (비워두면 비활성화됨)",
|
||||
"label": "프록시 주소를 입력하세요: (비어있을 시 비활성화됨)",
|
||||
"placeholder": "예제: SOCKS5://127.0.0.1:9999",
|
||||
"title": "프록시 설정"
|
||||
"title": "프록시 설정하기"
|
||||
}
|
||||
},
|
||||
"toggle-dev-tools": "DevTools 열기"
|
||||
}
|
||||
},
|
||||
"always-on-top": "항상 최상단에 표시",
|
||||
"always-on-top": "항상 최상단에 표시하기",
|
||||
"auto-update": "자동 업데이트",
|
||||
"hide-menu": {
|
||||
"dialog": {
|
||||
@ -153,15 +153,16 @@
|
||||
"custom-window-title": {
|
||||
"label": "사용자 정의 앱 제목",
|
||||
"prompt": {
|
||||
"label": "앱 제목으로 표시할 내용 : (빈 칸 일시 비활성화)",
|
||||
"label": "앱 제목으로 표시할 내용: (빈칸일 시 비활성화됨)",
|
||||
"placeholder": "예: {{applicationName}}"
|
||||
}
|
||||
},
|
||||
"like-buttons": {
|
||||
"default": "기본",
|
||||
"force-show": "강제로 표시",
|
||||
"force-show": "강제로 표시하기",
|
||||
"hide": "숨기기",
|
||||
"label": "좋아요 버튼"
|
||||
"label": "좋아요 버튼",
|
||||
"swap": "\"좋아요\" 버튼 순서 변경하기"
|
||||
},
|
||||
"remove-upgrade-button": "업그레이드 버튼 제거",
|
||||
"theme": {
|
||||
@ -186,7 +187,7 @@
|
||||
"plugins": {
|
||||
"enabled": "활성화",
|
||||
"label": "확장",
|
||||
"new": "NEW"
|
||||
"new": "새 플러그인"
|
||||
},
|
||||
"view": {
|
||||
"label": "보기",
|
||||
@ -215,7 +216,7 @@
|
||||
},
|
||||
"plugins": {
|
||||
"ad-speedup": {
|
||||
"description": "광고가 재생될 때, 오디오가 음소거되고 재생 속도가 16배로 설정됩니다",
|
||||
"description": "광고가 재생될 때 소리를 음소거하고 재생 속도를 16배로 설정합니다",
|
||||
"name": "광고 배속"
|
||||
},
|
||||
"adblocker": {
|
||||
@ -243,7 +244,7 @@
|
||||
"name": "앨범 컬러 기반 테마"
|
||||
},
|
||||
"ambient-mode": {
|
||||
"description": "영상의 간접 조명을 화면 배경에 투사합니다",
|
||||
"description": "영상의 간접 조명을 화면 배경에 투사하여 조명 효과를 적용합니다",
|
||||
"menu": {
|
||||
"blur-amount": {
|
||||
"label": "흐림 효과 강도",
|
||||
@ -252,7 +253,7 @@
|
||||
}
|
||||
},
|
||||
"buffer": {
|
||||
"label": "버퍼링",
|
||||
"label": "버퍼",
|
||||
"submenu": {
|
||||
"buffer": "{{buffer}}"
|
||||
}
|
||||
@ -289,7 +290,7 @@
|
||||
},
|
||||
"amuse": {
|
||||
"description": "6K Labs Amuse의 'now playing' 위젯에 {{applicationName}} 지원 추가",
|
||||
"name": "Amuseio AB",
|
||||
"name": "Amuse (어뮤즈)",
|
||||
"response": {
|
||||
"query": "Amuse API 서버가 실행 중입니다. GET /query로 노래 정보를 가져오세요."
|
||||
}
|
||||
@ -358,10 +359,10 @@
|
||||
"name": "오디오 컴프레서"
|
||||
},
|
||||
"auth-proxy-adapter": {
|
||||
"description": "아이디/패스워드가 필요한 프록시를 지원합니다",
|
||||
"description": "인증이 필요한 프록시를 지원합니다",
|
||||
"menu": {
|
||||
"disable": "프록시 어댑터 차단",
|
||||
"enable": "프록시 어댑터 허용",
|
||||
"disable": "프록시 어댑터 비활성화",
|
||||
"enable": "프록시 어댑터 활성화",
|
||||
"hostname": {
|
||||
"label": "호스트 명"
|
||||
},
|
||||
@ -372,11 +373,11 @@
|
||||
"name": "권한 프록시 어댑터",
|
||||
"prompt": {
|
||||
"hostname": {
|
||||
"label": "로컬 프록시 서버의 호스트명 을 입력 해주세요 (재시동이 필요합니다):",
|
||||
"label": "로컬 프록시 서버의 호스트명을 입력해주세요 (재시작이 필요합니다):",
|
||||
"title": "프록시 호스트명"
|
||||
},
|
||||
"port": {
|
||||
"label": "로컬 프록시 서버의 포트를 입력 해주세요 (재시동이 필요합니다):",
|
||||
"label": "로컬 프록시 서버의 포트를 입력 해주세요 (재시작이 필요합니다):",
|
||||
"title": "프록시 포트"
|
||||
}
|
||||
}
|
||||
@ -386,7 +387,7 @@
|
||||
"name": "탐색 바 흐림 효과"
|
||||
},
|
||||
"bypass-age-restrictions": {
|
||||
"description": "음악 플레이어의 연령 확인 우회합니다",
|
||||
"description": "플레이어의 연령 확인 인증 우회",
|
||||
"name": "나이 제한 우회"
|
||||
},
|
||||
"captions-selector": {
|
||||
@ -408,10 +409,21 @@
|
||||
},
|
||||
"toast": {
|
||||
"caption-changed": "자막 언어가 {{language}}(으)로 변경되었습니다",
|
||||
"caption-disabled": "자막이 비활성화 되었습니다",
|
||||
"caption-disabled": "자막 비활성화됨",
|
||||
"no-captions": "이 곡에는 자막이 없습니다"
|
||||
}
|
||||
},
|
||||
"clock": {
|
||||
"description": "네비게이션 바 옆 시계 추가하기",
|
||||
"menu": {
|
||||
"format": {
|
||||
"24-hour-format": "24시간 형식",
|
||||
"display-seconds": "초 표시하기",
|
||||
"label": "형식"
|
||||
}
|
||||
},
|
||||
"name": "시계"
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "사이드바를 항상 컴팩트 모드로 설정합니다",
|
||||
"name": "컴팩트 사이드바"
|
||||
@ -439,9 +451,9 @@
|
||||
}
|
||||
},
|
||||
"custom-output-device": {
|
||||
"description": "미디어 출력 장치 구성",
|
||||
"description": "미디어를 출력할 장치 구성하기",
|
||||
"menu": {
|
||||
"device-selector": "장치 선택"
|
||||
"device-selector": "장치를 선택하세요"
|
||||
},
|
||||
"name": "출력 장치 커스텀",
|
||||
"prompt": {
|
||||
@ -461,12 +473,12 @@
|
||||
"discord": {
|
||||
"backend": {
|
||||
"already-connected": "활성화 된 연결에 연결을 시도했습니다",
|
||||
"connected": "디스코드에 연결됨",
|
||||
"disconnected": "디스코드에서 연결이 끊김"
|
||||
"connected": "Discord에 연결됨",
|
||||
"disconnected": "Discord에서 연결이 끊김"
|
||||
},
|
||||
"description": "활동 상태를 사용하여 친구들에게 내가 듣는 음악을 보여주세요",
|
||||
"description": "Rich Presence를 사용하여 친구들에게 내가 듣는 음악을 보여주세요",
|
||||
"menu": {
|
||||
"auto-reconnect": "자동 연결",
|
||||
"auto-reconnect": "자동 재연결",
|
||||
"clear-activity": "활동 제거",
|
||||
"clear-activity-after-timeout": "시간 초과 시 활동 제거",
|
||||
"connected": "연결됨",
|
||||
@ -484,7 +496,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"name": "디스코드 활동 상태",
|
||||
"name": "Discord 활동 상태",
|
||||
"prompt": {
|
||||
"set-inactivity-timeout": {
|
||||
"label": "비활성 시간 제한을 초 단위로 입력하세요:",
|
||||
@ -499,7 +511,7 @@
|
||||
"buttons": {
|
||||
"ok": "확인"
|
||||
},
|
||||
"message": "죄송합니다. 다운로드가 실패했습니다…",
|
||||
"message": "앗! 죄송합니다. 다운로드가 실패했습니다…",
|
||||
"title": "다운로드 중 오류 발생!"
|
||||
},
|
||||
"start-download-playlist": {
|
||||
@ -512,7 +524,7 @@
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"conversion-progress": "변환: {{percent}}%",
|
||||
"conversion-progress": "변환율: {{percent}}%",
|
||||
"converting": "변환 중…",
|
||||
"done": "완료: {{filePath}}",
|
||||
"download-info": "{{artist}} - {{title}} [{{videoId}} 다운로드 중",
|
||||
@ -527,7 +539,7 @@
|
||||
"playlist-has-only-one-song": "재생목록에 한 항목만 존재합니다. 직접 다운로드합니다",
|
||||
"playlist-id-not-found": "재생목록 ID를 찾을 수 없습니다",
|
||||
"playlist-is-empty": "재생목록이 비어있습니다",
|
||||
"playlist-is-mix-or-private": "재생목록 정보 가져오는 중 오류 발생: 비공개 재생목록 또는 '유튜브 Mix' 재생목록이 아닌지 확인하세요\n\n{{error}}",
|
||||
"playlist-is-mix-or-private": "재생목록 정보 가져오는 중 오류 발생: 비공개 재생목록 또는 \"나만을 위한 맞춤 믹스\" 재생목록이 아닌지 확인하세요\n\n{{error}}",
|
||||
"preparing-file": "파일 준비 중…",
|
||||
"saving": "저장 중…",
|
||||
"trying-to-get-playlist-id": "재생목록 ID를 가져오는 중: {{playlistId}}",
|
||||
|
||||
@ -396,6 +396,17 @@
|
||||
"no-captions": "Pre túto skladbu nie sú dostupné žiadne titulky"
|
||||
}
|
||||
},
|
||||
"clock": {
|
||||
"description": "Pridať hodiny do navigačnej lišty",
|
||||
"menu": {
|
||||
"format": {
|
||||
"24-hour-format": "24-hodinový formát",
|
||||
"display-seconds": "Zobraz sekundy",
|
||||
"label": "Formát"
|
||||
}
|
||||
},
|
||||
"name": "Hodiny"
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Vždy nastaviť bočný panel do kompaktného režimu",
|
||||
"name": "Kompaktný bočný panel"
|
||||
@ -462,8 +473,8 @@
|
||||
"set-status-display-type": {
|
||||
"label": "Text stavu",
|
||||
"submenu": {
|
||||
"artist": "Aktuálne si prehráva {artist}",
|
||||
"application": "Počúvať {{applicationName}}",
|
||||
"artist": "Aktuálne si prehráva {artist}",
|
||||
"title": "Aktuálne si prehráva {song title}"
|
||||
}
|
||||
}
|
||||
|
||||
31
src/i18n/resources/te.json
Normal file
31
src/i18n/resources/te.json
Normal file
@ -0,0 +1,31 @@
|
||||
{
|
||||
"common": {
|
||||
"console": {
|
||||
"plugins": {
|
||||
"execute-failed": "{{pluginName}}::{{contextName}} ప్లగిన్ను అమలు చేయడంలో విఫలమైంది",
|
||||
"executed-at-ms": "{{pluginName}}::{{contextName}} ప్లగిన్ అమలు చేయబడిన సమయం {{ms}} మిల్లీసెకను",
|
||||
"initialize-failed": "\"{{pluginName}}\" ప్లగిన్ను ప్రారంభించడంలో విఫలమైంది",
|
||||
"load-all": "అన్నీ ప్లగిన్లను లోడ్ చెయ్యబడుతోంది",
|
||||
"load-failed": "\"{{pluginName}}\" ప్లగిన్ లోడ్ చేయడంలో విఫలమైంది",
|
||||
"loaded": "ప్లగిన్ \"{{pluginName}}\" లోడ్ చేయబడింది",
|
||||
"unload-failed": "“{{pluginName}}” ప్లగిన్ను అన్లోడ్ చేయడంలో విఫలమైంది",
|
||||
"unloaded": "\"{{pluginName}}\" ప్లగిన్ అన్లోడ్ చేయబడింది"
|
||||
}
|
||||
}
|
||||
},
|
||||
"language": {
|
||||
"code": "te",
|
||||
"local-name": "తెలుగు",
|
||||
"name": "Telugu"
|
||||
},
|
||||
"main": {
|
||||
"console": {
|
||||
"did-finish-load": {
|
||||
"dev-tools": "లోడ్ చేయడం పూర్తయింది. డెవ్టూల్స్ తెరవబడ్డాయి"
|
||||
},
|
||||
"i18n": {
|
||||
"loaded": "i18n లోడ్ చేయబడింది"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -53,9 +53,9 @@
|
||||
"later": "Daha Sonra",
|
||||
"restart-now": "Şimdi yeniden başlat"
|
||||
},
|
||||
"detail": "\"{{pluginName}}\" eklentisinin çalışabilmesi için yeniden başlatman gerekiyor",
|
||||
"message": "\"{{pluginName}}\" için yeniden başlatman gerekiyor",
|
||||
"title": "Uygulamayı yeniden başlatman gerekiyor"
|
||||
"detail": "\"{{pluginName}}\" eklentisinin çalışması için uygulamanın yeniden başlatılması gerekiyor",
|
||||
"message": "\"{{pluginName}}\" eklentisi için uygulamanın yeniden başlatılması gerekiyor",
|
||||
"title": "Uygulamanın yeniden başlatılması gerekiyor"
|
||||
},
|
||||
"unresponsive": {
|
||||
"buttons": {
|
||||
@ -161,7 +161,8 @@
|
||||
"default": "Varsayılan",
|
||||
"force-show": "Zorla göster",
|
||||
"hide": "Gizle",
|
||||
"label": "Beğenme düğmeleri"
|
||||
"label": "Beğenme düğmeleri",
|
||||
"swap": "Beğenme butonlarının sıralamasını değiştir"
|
||||
},
|
||||
"remove-upgrade-button": "Yükseltme düğmesini kaldır",
|
||||
"theme": {
|
||||
@ -412,6 +413,17 @@
|
||||
"no-captions": "Bu şarkı için altyazı mevcut değil"
|
||||
}
|
||||
},
|
||||
"clock": {
|
||||
"description": "Navigasyon barına bir saat ekle",
|
||||
"menu": {
|
||||
"format": {
|
||||
"24-hour-format": "24-Saat Formatı, Biçimi",
|
||||
"display-seconds": "Saniyeleri göster",
|
||||
"label": "Format, Biçim"
|
||||
}
|
||||
},
|
||||
"name": "Saat"
|
||||
},
|
||||
"compact-sidebar": {
|
||||
"description": "Her zaman kompakt kenar çubugu",
|
||||
"name": "Kompakt Kenar Çubuğu"
|
||||
|
||||
@ -1,15 +1,9 @@
|
||||
import {
|
||||
type DataConnection,
|
||||
Peer,
|
||||
type PeerError,
|
||||
PeerErrorType,
|
||||
} from 'peerjs';
|
||||
import delay from 'delay';
|
||||
import { type DataConnection, Peer, type PeerError } from 'peerjs';
|
||||
|
||||
import type { Permission, Profile, VideoData } from './types';
|
||||
|
||||
export type ConnectionEventMap = {
|
||||
CLEAR_QUEUE: {};
|
||||
CLEAR_QUEUE: null;
|
||||
ADD_SONGS: { videoList: VideoData[]; index?: number };
|
||||
REMOVE_SONG: { index: number };
|
||||
MOVE_SONG: { fromIndex: number; toIndex: number };
|
||||
@ -104,16 +98,14 @@ export class Connection {
|
||||
this.peer.disconnect();
|
||||
this.peer.destroy();
|
||||
});
|
||||
this.peer.on('error', async (err) => {
|
||||
if (err.type === PeerErrorType.Network) {
|
||||
// retrying after 10 seconds
|
||||
await delay(10000);
|
||||
this.peer.on('error', (err) => {
|
||||
if (err.type === 'network') {
|
||||
setTimeout(() => {
|
||||
try {
|
||||
this.peer.reconnect();
|
||||
} catch {}
|
||||
}, 10000);
|
||||
return;
|
||||
} catch {
|
||||
//ignored
|
||||
}
|
||||
}
|
||||
|
||||
this.waitOpen.reject(err);
|
||||
@ -176,7 +168,9 @@ export class Connection {
|
||||
after?: ConnectionEventUnion[],
|
||||
) {
|
||||
await Promise.all(
|
||||
this.getConnections().map((conn) => conn.send({ type, payload, after })),
|
||||
this.getConnections().map(
|
||||
(conn) => conn.send({ type, payload, after }) ?? Promise.resolve(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -224,7 +224,7 @@ export default createPlugin<
|
||||
}
|
||||
|
||||
this.queue?.clear();
|
||||
await this.connection?.broadcast('CLEAR_QUEUE', {});
|
||||
await this.connection?.broadcast('CLEAR_QUEUE', null);
|
||||
break;
|
||||
}
|
||||
case 'SET_INDEX': {
|
||||
@ -413,7 +413,7 @@ export default createPlugin<
|
||||
this.ignoreChange = true;
|
||||
switch (event.type) {
|
||||
case 'CLEAR_QUEUE': {
|
||||
await this.connection?.broadcast('CLEAR_QUEUE', {});
|
||||
await this.connection?.broadcast('CLEAR_QUEUE', null);
|
||||
break;
|
||||
}
|
||||
case 'SET_INDEX': {
|
||||
|
||||
@ -316,7 +316,7 @@ export class Queue {
|
||||
this.ignoreFlag = true;
|
||||
this.broadcast({
|
||||
type: 'CLEAR_QUEUE',
|
||||
payload: {},
|
||||
payload: null,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import * as pinyin from 'tiny-pinyin';
|
||||
import { romanize as romanizeThaiFrag } from '@dehoist/romanize-thai';
|
||||
import { lazy } from 'lazy-var';
|
||||
import { detect } from 'tinyld';
|
||||
import Sanscript from '@indic-transliteration/sanscript';
|
||||
|
||||
import { waitForElement } from '@/utils/wait-for-element';
|
||||
import { LyricsRenderer, setIsVisible } from './renderer';
|
||||
@ -155,6 +156,12 @@ const hasChinese = (lines: string[]) =>
|
||||
const hasThai = (lines: string[]) =>
|
||||
lines.some((line) => /[\u0E00-\u0E7F]+/.test(line));
|
||||
|
||||
const hasBengali = (lines: string[]) =>
|
||||
lines.some((line) => /[\u0980-\u09FF]+/.test(line));
|
||||
|
||||
const hasHindi = (lines: string[]) =>
|
||||
lines.some((line) => /[\u0900-\u097F]+/.test(line));
|
||||
|
||||
export const romanizeJapanese = async (line: string) =>
|
||||
(await kuroshiro.get()).convert(line, {
|
||||
to: 'romaji',
|
||||
@ -190,11 +197,35 @@ export const romanizeThai = (line: string) => {
|
||||
return latin;
|
||||
};
|
||||
|
||||
export const romanizeBengali = (line: string) => {
|
||||
try {
|
||||
let out = Sanscript.t(line, 'bengali', 'iast');
|
||||
out = out.normalize('NFD');
|
||||
out = out.replace(/[\u0300-\u036f]/g, '');
|
||||
out = out.replace(/[\u09BC\u09BE-\u09CD]/g, '');
|
||||
return out.toLowerCase();
|
||||
} catch {
|
||||
return line;
|
||||
}
|
||||
};
|
||||
|
||||
export const romanizeHindi = (line: string) => {
|
||||
try {
|
||||
let out = Sanscript.t(line, 'devanagari', 'iast');
|
||||
out = out.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); // strip accents
|
||||
return out.replace(/[^a-zA-Z\s]/g, '') || line; // remove any remaining symbols
|
||||
} catch {
|
||||
return line;
|
||||
}
|
||||
};
|
||||
|
||||
const handlers: Record<string, (line: string) => Promise<string> | string> = {
|
||||
ja: romanizeJapanese,
|
||||
ko: romanizeHangul,
|
||||
zh: romanizeChinese,
|
||||
th: romanizeThai,
|
||||
bn: romanizeBengali,
|
||||
hi: romanizeHindi,
|
||||
};
|
||||
|
||||
export const romanize = async (line: string) => {
|
||||
@ -210,6 +241,8 @@ export const romanize = async (line: string) => {
|
||||
if (hasKorean([line])) line = romanizeHangul(line);
|
||||
if (hasChinese([line])) line = romanizeChinese(line);
|
||||
if (hasThai([line])) line = romanizeThai(line);
|
||||
if (hasBengali([line])) line = romanizeBengali(line);
|
||||
if (hasHindi([line])) line = romanizeHindi(line);
|
||||
|
||||
return line;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user