├── .flake8 ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ └── bug-report.md └── workflows │ └── master.yaml ├── .gitignore ├── ASSWriter.py ├── HTMLParser.py ├── JSONParser.py ├── JSONParser2.py ├── JSParser.py ├── LICENSE ├── Language ├── .tx │ └── config ├── bili.ASSWriter.ja.po ├── bili.ASSWriter.pot ├── bili.ASSWriter.zh_CN.po ├── bili.ASSWriter.zh_TW.po ├── bili.JSONParser2.ja.po ├── bili.JSONParser2.pot ├── bili.JSONParser2.zh_CN.po ├── bili.JSONParser2.zh_TW.po ├── bili.PrintInfo.ja.po ├── bili.PrintInfo.pot ├── bili.PrintInfo.zh_CN.po ├── bili.PrintInfo.zh_TW.po ├── bili.biliDanmu.ja.po ├── bili.biliDanmu.pot ├── bili.biliDanmu.zh_CN.po ├── bili.biliDanmu.zh_TW.po ├── bili.biliLogin.ja.po ├── bili.biliLogin.pot ├── bili.biliLogin.zh_CN.po ├── bili.biliLogin.zh_TW.po ├── bili.biliSub.ja.po ├── bili.biliSub.pot ├── bili.biliSub.zh_CN.po ├── bili.biliSub.zh_TW.po ├── bili.biliVersion.ja.po ├── bili.biliVersion.pot ├── bili.biliVersion.zh_CN.po ├── bili.biliVersion.zh_TW.po ├── bili.biliext.ja.po ├── bili.biliext.pot ├── bili.biliext.zh_CN.po ├── bili.biliext.zh_TW.po ├── bili.bilischeme.ja.po ├── bili.bilischeme.pot ├── bili.bilischeme.zh_CN.po ├── bili.bilischeme.zh_TW.po ├── bili.command.ja.po ├── bili.command.pot ├── bili.command.zh_CN.po ├── bili.command.zh_TW.po ├── bili.exeinfo.ja.po ├── bili.exeinfo.pot ├── bili.exeinfo.zh_CN.po ├── bili.exeinfo.zh_TW.po ├── bili.filter.ja.po ├── bili.filter.pot ├── bili.filter.zh_CN.po ├── bili.filter.zh_TW.po ├── bili.innosetup.ja.po ├── bili.innosetup.pot ├── bili.innosetup.zh_CN.po ├── bili.innosetup.zh_TW.po ├── bili.setsettings.ja.po ├── bili.setsettings.pot ├── bili.setsettings.zh_CN.po ├── bili.setsettings.zh_TW.po ├── bili.start.ja.po ├── bili.start.pot ├── bili.start.zh_CN.po ├── bili.start.zh_TW.po ├── bili.videodownload.ja.po ├── bili.videodownload.pot ├── bili.videodownload.zh_CN.po ├── bili.videodownload.zh_TW.po ├── file.all.ja.po ├── file.all.pot ├── file.all.zh_CN.po ├── file.all.zh_TW.po ├── webui.about.ja.po ├── webui.about.pot ├── webui.about.zh_CN.po ├── webui.about.zh_TW.po ├── webui.bililogin.ja.po ├── webui.bililogin.pot ├── webui.bililogin.zh_CN.po ├── webui.bililogin.zh_TW.po ├── webui.command.ja.po ├── webui.command.pot ├── webui.command.zh_CN.po ├── webui.command.zh_TW.po ├── webui.dir.ja.po ├── webui.dir.pot ├── webui.dir.zh_CN.po ├── webui.dir.zh_TW.po ├── webui.index.ja.po ├── webui.index.pot ├── webui.index.zh_CN.po ├── webui.index.zh_TW.po ├── webui.page.ja.po ├── webui.page.pot ├── webui.page.zh_CN.po ├── webui.page.zh_TW.po ├── webui.settings.ja.po ├── webui.settings.pot ├── webui.settings.zh_CN.po ├── webui.settings.zh_TW.po ├── webui.startwebui.ja.po ├── webui.startwebui.pot ├── webui.startwebui.zh_CN.po └── webui.startwebui.zh_TW.po ├── Logger.py ├── M3UDownloader.py ├── M3UParser.py ├── PrintInfo.py ├── README.en.md ├── README.ja.md ├── README.md ├── acfunDanmu.py ├── autoopenlist.py ├── biliAudio.py ├── biliBv.py ├── biliDanmu.py ├── biliDanmuAuto.py ├── biliDanmuCreate.py ├── biliDanmuDown.py ├── biliDanmuXmlFilter.py ├── biliDanmuXmlParser.py ├── biliHdVideo.py ├── biliLRC.py ├── biliLiveDanmu.py ├── biliLogin.py ├── biliPlayerXmlParser.py ├── biliSub.py ├── biliTime.py ├── biliVersion.py ├── biliext.py ├── bilischeme.py ├── bstr.py ├── chon.py ├── command.py ├── dict.py ├── dictcopy.py ├── file ├── __init__.py ├── dir.py ├── filter.py ├── get.py ├── info.py ├── md.py ├── str.py ├── time.py └── win32.py ├── filter.py ├── hashl.py ├── icon ├── favicon.ai ├── favicon.ico └── favicon.svg ├── lang.py ├── multithread.py ├── nfofile.py ├── nicoDanmu.py ├── nicoHeartBeat.py ├── nicoPara.py ├── nicolive.py ├── prepare.py ├── requirements.txt ├── setsettings.py ├── start.py ├── startwebui.py ├── version.txt ├── videodownload.py ├── webui ├── __init__.py ├── about.py ├── api │ ├── __init__.py │ ├── api.py │ ├── apiclass.py │ ├── apilist.py │ ├── checklogin.py │ ├── infoextractor.py │ ├── loginapi.py │ ├── rsa.py │ ├── session.py │ └── videourl.py ├── biliLogin.py ├── command.py ├── css.py ├── dealwithcapcha.py ├── extractor │ ├── __init__.py │ ├── normal.py │ └── utils.py ├── favicon.py ├── font.py ├── headers.py ├── index.py ├── js.py ├── json.py ├── live.py ├── loadsettings.py ├── login.py ├── page │ ├── __init__.py │ ├── extractor.py │ ├── extractorlist.py │ ├── normal.py │ └── page.py ├── pas.py ├── pic.py ├── range.py ├── section.py ├── section2.py ├── settings.py ├── template.py ├── translate.py └── video.py └── webuihtml ├── HTTP404.html ├── about.html ├── bililogin.html ├── css ├── about.css ├── dealwithcapcha.css ├── display.css ├── footer.css ├── form.css ├── index.css ├── login.css ├── page.css ├── topmenu.css └── video.css ├── dealwithcapcha.html ├── index.html ├── js(origin) ├── about.js ├── bililogin.js ├── dealwithcapcha.js ├── dir.js ├── footer.js ├── index.js ├── login.js ├── page.js ├── prototype.js ├── rsa.js ├── settings.js └── translatie.js ├── json └── fontlist.json ├── login.html ├── page.html ├── settings.html └── video.html /.flake8: -------------------------------------------------------------------------------- 1 | [flake8] 2 | ignore = E501, E722 3 | exclude = ./v.py, python_x64/*, python_x86/* 4 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.ai binary 2 | *.svg binary 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report/提交BUG 3 | about: Please report BUG here.请在这里描述BUG 4 | title: BUG Report 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | Please describe BUG here. Attach a log file will be a good choice. (You can find log files in log directory which located in program directory. If you can not see it, please enable logging to file in settings.) 11 | 请在这里描述BUG。如果能提供一个日志文件的话更好。(你可以在程序目录下的log文件夹里找到日志文件。如果找不到,请去设置里启用写入日志至文件。) 12 | -------------------------------------------------------------------------------- /.github/workflows/master.yaml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | push: 4 | branches: [ master, dev ] 5 | pull_request: 6 | branches: [ master, dev ] 7 | workflow_dispatch: 8 | jobs: 9 | flake8: 10 | runs-on: ubuntu-20.04 11 | steps: 12 | - name: checkout 13 | uses: actions/checkout@v2 14 | - name: install flake8 15 | shell: bash 16 | run: pip3 install --upgrade flake8 17 | - name: check code 18 | shell: bash 19 | run: python3 -m flake8 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #temp file 2 | *.pyc 3 | *.log 4 | log/ 5 | .vs/ 6 | *.txt 7 | Temp/ 8 | #download file or config file 9 | *.xml 10 | *.json 11 | *.flv 12 | *.mp4 13 | *.m4s 14 | *.mkv 15 | Download/ 16 | #other file 17 | .project 18 | #execute library 19 | *.exe 20 | *.spec 21 | dist/ 22 | build/ 23 | *.bat 24 | v.py 25 | python_x86/ 26 | python_x64/ 27 | # README.md Convert file 28 | node_modules/ 29 | converttohtml.js 30 | README.html 31 | easyuse.html 32 | html.css 33 | # Download JavaScript file or Compressed JavaScript file 34 | webuihtml/csso/ 35 | webuihtml/js/ 36 | webuihtml/jso/ 37 | compiler.jar 38 | # JSON use for webUI 39 | !webuihtml/json/*.json 40 | # FONT file 41 | *.ttf 42 | *.otf 43 | *.woff 44 | *.woff2 45 | -------------------------------------------------------------------------------- /JSParser.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2021 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from js2py import eval_js 17 | from HTMLParser import NicoUserParser 18 | from Logger import Logger 19 | from inspect import currentframe 20 | from traceback import format_exc 21 | 22 | 23 | def toDict(obj) -> dict: 24 | r = {} 25 | for i in obj: 26 | r[i] = obj[i] 27 | return r 28 | 29 | 30 | def getNicoUser(p, logg: Logger = None) -> dict: 31 | data = None 32 | if isinstance(p, str): 33 | data = p 34 | elif isinstance(p, NicoUserParser): 35 | data = p.userData 36 | if data is None or data == '': 37 | return None 38 | try: 39 | t = 'function(){var user={};' + data + ';return user;}' 40 | f = eval_js(t) 41 | return toDict(f()) 42 | except: 43 | if logg: 44 | logg.write(format_exc(), currentframe(), "Get Niconico User Data") 45 | return None 46 | -------------------------------------------------------------------------------- /Language/bili.ASSWriter.ja.po: -------------------------------------------------------------------------------- 1 | # bili - ASSWriter.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-10 05:08:00+0000\n" 13 | "PO-Revision-Date: 2020-08-10 11:42+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "COM_MUST_STR" 23 | msgid "The comment must be a string." 24 | msgstr "コメントは文字列である必要があります。" 25 | 26 | msgctxt "COLOR_MUST_INT" 27 | msgid "The color value must be a integer." 28 | msgstr "色の値は整数である必要があります。" 29 | 30 | msgctxt "COLOR_OUT_OF_RANGE" 31 | msgid "The color value must between 0 and 255." 32 | msgstr "色の値は0~255の間でなければなりません。" 33 | 34 | msgctxt "INVALID_ASS_COLOR" 35 | msgid "\"\" is a invalid color in ASS script." 36 | msgstr "\"\" は ASS スクリプトの無効な色です。" 37 | 38 | msgctxt "INVALID_CSS_COLOR" 39 | msgid "\"\" is a invalid color." 40 | msgstr "\"\" は 無効な色です。" 41 | 42 | msgctxt "OUT_OF_RANGE" 43 | msgid "This value must be greater than 0 or equal to 0." 44 | msgstr "この値は0より大きいか、0に等しいものでなければなりません。" 45 | 46 | msgctxt "MUST_NUM" 47 | msgid "This value must be a number." 48 | msgstr "この値は数値でなければなりません。" 49 | 50 | msgctxt "MUST_BOOL" 51 | msgid "This value must be a boolean." 52 | msgstr "この値はブール値でなければなりません。" 53 | 54 | msgctxt "ALIGN_OUT_OF_RANGE" 55 | msgid "This value must between 1 and 9." 56 | msgstr "この値は1から9の間でなければなりません。" 57 | -------------------------------------------------------------------------------- /Language/bili.ASSWriter.pot: -------------------------------------------------------------------------------- 1 | # bili - ASSWriter.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-08-10 05:08:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "COM_MUST_STR" 19 | msgid "The comment must be a string." 20 | msgstr "" 21 | 22 | msgctxt "COLOR_MUST_INT" 23 | msgid "The color value must be a integer." 24 | msgstr "" 25 | 26 | msgctxt "COLOR_OUT_OF_RANGE" 27 | msgid "The color value must between 0 and 255." 28 | msgstr "" 29 | 30 | msgctxt "INVALID_ASS_COLOR" 31 | msgid "\"\" is a invalid color in ASS script." 32 | msgstr "" 33 | 34 | msgctxt "INVALID_CSS_COLOR" 35 | msgid "\"\" is a invalid color." 36 | msgstr "" 37 | 38 | msgctxt "OUT_OF_RANGE" 39 | msgid "This value must be greater than 0 or equal to 0." 40 | msgstr "" 41 | 42 | msgctxt "MUST_NUM" 43 | msgid "This value must be a number." 44 | msgstr "" 45 | 46 | msgctxt "MUST_BOOL" 47 | msgid "This value must be a boolean." 48 | msgstr "" 49 | 50 | msgctxt "ALIGN_OUT_OF_RANGE" 51 | msgid "This value must between 1 and 9." 52 | msgstr "" 53 | -------------------------------------------------------------------------------- /Language/bili.ASSWriter.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - ASSWriter.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-10 05:08:00+0000\n" 13 | "PO-Revision-Date: 2020-08-10 11:42+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "COM_MUST_STR" 23 | msgid "The comment must be a string." 24 | msgstr "评论必须是字符串。" 25 | 26 | msgctxt "COLOR_MUST_INT" 27 | msgid "The color value must be a integer." 28 | msgstr "颜色的值必须是整数。" 29 | 30 | msgctxt "COLOR_OUT_OF_RANGE" 31 | msgid "The color value must between 0 and 255." 32 | msgstr "颜色的值必须在0-255之间。" 33 | 34 | msgctxt "INVALID_ASS_COLOR" 35 | msgid "\"\" is a invalid color in ASS script." 36 | msgstr "\"\"在ASS脚本中是无效的颜色。" 37 | 38 | msgctxt "INVALID_CSS_COLOR" 39 | msgid "\"\" is a invalid color." 40 | msgstr "\"\"是无效的颜色。" 41 | 42 | msgctxt "OUT_OF_RANGE" 43 | msgid "This value must be greater than 0 or equal to 0." 44 | msgstr "该值必须大于等于0。" 45 | 46 | msgctxt "MUST_NUM" 47 | msgid "This value must be a number." 48 | msgstr "该值必须是数字。" 49 | 50 | msgctxt "MUST_BOOL" 51 | msgid "This value must be a boolean." 52 | msgstr "该值必须是布尔型。" 53 | 54 | msgctxt "ALIGN_OUT_OF_RANGE" 55 | msgid "This value must between 1 and 9." 56 | msgstr "该值必须在1-9之间。" 57 | -------------------------------------------------------------------------------- /Language/bili.ASSWriter.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - ASSWriter.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-10 05:08:00+0000\n" 13 | "PO-Revision-Date: 2020-08-10 11:42+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "COM_MUST_STR" 23 | msgid "The comment must be a string." 24 | msgstr "評論必須是字串。" 25 | 26 | msgctxt "COLOR_MUST_INT" 27 | msgid "The color value must be a integer." 28 | msgstr "顏色的值必須是整數。" 29 | 30 | msgctxt "COLOR_OUT_OF_RANGE" 31 | msgid "The color value must between 0 and 255." 32 | msgstr "顏色的值必須在0-255之間。" 33 | 34 | msgctxt "INVALID_ASS_COLOR" 35 | msgid "\"\" is a invalid color in ASS script." 36 | msgstr "\"\" 在ASS腳本中是無效的顏色。" 37 | 38 | msgctxt "INVALID_CSS_COLOR" 39 | msgid "\"\" is a invalid color." 40 | msgstr "\"\" 是無效的顏色。" 41 | 42 | msgctxt "OUT_OF_RANGE" 43 | msgid "This value must be greater than 0 or equal to 0." 44 | msgstr "該值必須大於等於0。" 45 | 46 | msgctxt "MUST_NUM" 47 | msgid "This value must be a number." 48 | msgstr "該值必須是數字。" 49 | 50 | msgctxt "MUST_BOOL" 51 | msgid "This value must be a boolean." 52 | msgstr "該值必須是布林型。" 53 | 54 | msgctxt "ALIGN_OUT_OF_RANGE" 55 | msgid "This value must between 1 and 9." 56 | msgstr "該值必須在 1-9 之間。" 57 | -------------------------------------------------------------------------------- /Language/bili.JSONParser2.ja.po: -------------------------------------------------------------------------------- 1 | # bili - PrintInfo.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-12 10:01:00+0000\n" 13 | "PO-Revision-Date: 2020-07-12 10:25+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "OUTPUT1" 23 | msgid "Unable to get page of Favorites. Try again now……" 24 | msgstr "お気に入りのページ を取得できません。もう一度お試しください。" 25 | 26 | msgctxt "OUTPUT2" 27 | msgid "Unable to get page of Channel. Try again now……" 28 | msgstr "チャンネルのページ を取得できません。もう一度お試しください。" 29 | 30 | msgctxt "OUTPUT3" 31 | msgid "Unable to get page . Try again now……" 32 | msgstr "ページ を取得できません。もう一度お試しください。" 33 | 34 | msgctxt "OUTPUT4" 35 | msgid "Unable to get uploader's information. Try again now……" 36 | msgstr "投稿者の情報を取得できません。もう一度お試しください。" 37 | -------------------------------------------------------------------------------- /Language/bili.JSONParser2.pot: -------------------------------------------------------------------------------- 1 | # bili - PrintInfo.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-07-12 10:01:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "OUTPUT1" 19 | msgid "Unable to get page of Favorites. Try again now……" 20 | msgstr "" 21 | 22 | msgctxt "OUTPUT2" 23 | msgid "Unable to get page of Channel. Try again now……" 24 | msgstr "" 25 | 26 | msgctxt "OUTPUT3" 27 | msgid "Unable to get page . Try again now……" 28 | msgstr "" 29 | 30 | msgctxt "OUTPUT4" 31 | msgid "Unable to get uploader's information. Try again now……" 32 | msgstr "" 33 | -------------------------------------------------------------------------------- /Language/bili.JSONParser2.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - PrintInfo.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-12 10:01:00+0000\n" 13 | "PO-Revision-Date: 2020-07-12 10:25+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "OUTPUT1" 23 | msgid "Unable to get page of Favorites. Try again now……" 24 | msgstr "获取收藏夹第页失败,正在重试……" 25 | 26 | msgctxt "OUTPUT2" 27 | msgid "Unable to get page of Channel. Try again now……" 28 | msgstr "获取频道第页失败,正在重试……" 29 | 30 | msgctxt "OUTPUT3" 31 | msgid "Unable to get page . Try again now……" 32 | msgstr "获取第页失败,正在重试……" 33 | 34 | msgctxt "OUTPUT4" 35 | msgid "Unable to get uploader's information. Try again now……" 36 | msgstr "获取UP主信息失败,正在重试……" 37 | -------------------------------------------------------------------------------- /Language/bili.JSONParser2.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - PrintInfo.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-12 10:01:00+0000\n" 13 | "PO-Revision-Date: 2020-07-12 10:25+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "OUTPUT1" 23 | msgid "Unable to get page of Favorites. Try again now……" 24 | msgstr "獲取收藏夾第頁失敗,正在重試……" 25 | 26 | msgctxt "OUTPUT2" 27 | msgid "Unable to get page of Channel. Try again now……" 28 | msgstr "獲取頻道第頁失敗,正在重試……" 29 | 30 | msgctxt "OUTPUT3" 31 | msgid "Unable to get page . Try again now……" 32 | msgstr "獲取第頁失敗,正在重試……" 33 | 34 | msgctxt "OUTPUT4" 35 | msgid "Unable to get uploader's information. Try again now……" 36 | msgstr "獲取UP主訊息失敗,正在重試……" 37 | -------------------------------------------------------------------------------- /Language/bili.biliLogin.ja.po: -------------------------------------------------------------------------------- 1 | # bili - biliLogin.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-11 06:34:00+0000\n" 13 | "PO-Revision-Date: 2020-07-11 06:57+0000\n" 14 | "Last-Translator: Kum4423, 2021\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "ERROR1" 23 | msgid "" 24 | "An error occurred while logging in with ChromeDriver, try to log in with " 25 | "username and password." 26 | msgstr "ChromeDriver使用によるログイン中にエラーが発生したので、ユーザー名とパスワードでログインしてみてください。" 27 | 28 | msgctxt "ERROR2" 29 | msgid "Login failed!" 30 | msgstr "ログインに失敗しました!" 31 | 32 | msgctxt "OUTPUT1" 33 | msgid "Login successfully!" 34 | msgstr "ログインに成功しました!" 35 | 36 | msgctxt "ERROR3" 37 | msgid "Network Error!" 38 | msgstr "ネットワークエラー!" 39 | 40 | msgctxt "ERROR4" 41 | msgid "Login failed:" 42 | msgstr "ログインに失敗しました:" 43 | 44 | msgctxt "INPUT1" 45 | msgid "Please enter user name:" 46 | msgstr "ユーザー名を入力してください:" 47 | 48 | msgctxt "INPUT2" 49 | msgid "Please enter password:" 50 | msgstr "パスワードを入力してください:" 51 | 52 | msgctxt "OUTPUT2" 53 | msgid "Login verification code recognition result: \"\"." 54 | msgstr "ログイン認証コードの認識結果: \"\"." 55 | 56 | msgctxt "ERROR5" 57 | msgid "" 58 | "Login verification code recognition service is temporarily unavailable, " 59 | "please try again later." 60 | msgstr "ログイン認証コード認識サービスは一時的にご利用いただけません。お手数ですが、あとでもう一度お試しください。" 61 | 62 | msgctxt "ERROR6" 63 | msgid "Service is busy, try to log in using V3 interface." 64 | msgstr "現在、サービスが混雑しています。V3インターフェースを使ってログインしてみてください。" 65 | 66 | msgctxt "ERROR7" 67 | msgid "Please press Enter to retry." 68 | msgstr "Enterキーを押してもう一度試してみてください。" 69 | 70 | msgctxt "OUTPUT3" 71 | msgid "The QR Code image is saved at \"\"." 72 | msgstr "QRコードの画像は \"\" で保存されます。" 73 | 74 | msgctxt "OUTPUT4" 75 | msgid "The QR Code is expired. Press any key to generate a new one." 76 | msgstr "QRコードの有効期限が切れています。いずれかのキーを押して、新しいQRコードを生成してください。" 77 | 78 | msgctxt "WARN1" 79 | msgid "This login method now have bugs, some contents may not available." 80 | msgstr "このログイン方法にはバグがあり、一部のコンテンツが利用できない場合があります。" 81 | 82 | msgctxt "QRCODE" 83 | msgid "(If you don't input anything, the program will use QR code to login.)" 84 | msgstr "(何も入力しないと、プログラムはQRコードを使ってログインします)" 85 | -------------------------------------------------------------------------------- /Language/bili.biliLogin.pot: -------------------------------------------------------------------------------- 1 | # bili - biliLogin.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-07-11 06:34:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "ERROR1" 19 | msgid "An error occurred while logging in with ChromeDriver, try to log in with username and password." 20 | msgstr "" 21 | 22 | msgctxt "ERROR2" 23 | msgid "Login failed!" 24 | msgstr "" 25 | 26 | msgctxt "OUTPUT1" 27 | msgid "Login successfully!" 28 | msgstr "" 29 | 30 | msgctxt "ERROR3" 31 | msgid "Network Error!" 32 | msgstr "" 33 | 34 | msgctxt "ERROR4" 35 | msgid "Login failed:" 36 | msgstr "" 37 | 38 | msgctxt "INPUT1" 39 | msgid "Please enter user name:" 40 | msgstr "" 41 | 42 | msgctxt "INPUT2" 43 | msgid "Please enter password:" 44 | msgstr "" 45 | 46 | msgctxt "OUTPUT2" 47 | msgid "Login verification code recognition result: \"\"." 48 | msgstr "" 49 | 50 | msgctxt "ERROR5" 51 | msgid "Login verification code recognition service is temporarily unavailable, please try again later." 52 | msgstr "" 53 | 54 | msgctxt "ERROR6" 55 | msgid "Service is busy, try to log in using V3 interface." 56 | msgstr "" 57 | 58 | msgctxt "ERROR7" 59 | msgid "Please press Enter to retry." 60 | msgstr "" 61 | 62 | msgctxt "OUTPUT3" 63 | msgid "The QR Code image is saved at \"\"." 64 | msgstr "" 65 | 66 | msgctxt "OUTPUT4" 67 | msgid "The QR Code is expired. Press any key to generate a new one." 68 | msgstr "" 69 | 70 | msgctxt "WARN1" 71 | msgid "This login method now have bugs, some contents may not available." 72 | msgstr "" 73 | 74 | msgctxt "QRCODE" 75 | msgid "(If you don't input anything, the program will use QR code to login.)" 76 | msgstr "" 77 | -------------------------------------------------------------------------------- /Language/bili.biliLogin.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - biliLogin.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-11 06:34:00+0000\n" 13 | "PO-Revision-Date: 2020-07-11 06:57+0000\n" 14 | "Last-Translator: 1 q , 2021\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "ERROR1" 23 | msgid "" 24 | "An error occurred while logging in with ChromeDriver, try to log in with " 25 | "username and password." 26 | msgstr "使用ChromeDriver登录发生错误,尝试采用用户名、密码登录。" 27 | 28 | msgctxt "ERROR2" 29 | msgid "Login failed!" 30 | msgstr "登录失败!" 31 | 32 | msgctxt "OUTPUT1" 33 | msgid "Login successfully!" 34 | msgstr "登录成功!" 35 | 36 | msgctxt "ERROR3" 37 | msgid "Network Error!" 38 | msgstr "网络错误!" 39 | 40 | msgctxt "ERROR4" 41 | msgid "Login failed:" 42 | msgstr "登录失败:" 43 | 44 | msgctxt "INPUT1" 45 | msgid "Please enter user name:" 46 | msgstr "请输入用户名:" 47 | 48 | msgctxt "INPUT2" 49 | msgid "Please enter password:" 50 | msgstr "请输入密码:" 51 | 52 | msgctxt "OUTPUT2" 53 | msgid "Login verification code recognition result: \"\"." 54 | msgstr "登录验证码识别结果:" 55 | 56 | msgctxt "ERROR5" 57 | msgid "" 58 | "Login verification code recognition service is temporarily unavailable, " 59 | "please try again later." 60 | msgstr "登录验证码识别服务暂时不可用,请稍后再试。" 61 | 62 | msgctxt "ERROR6" 63 | msgid "Service is busy, try to log in using V3 interface." 64 | msgstr "服务繁忙,尝试使用V3接口登录。" 65 | 66 | msgctxt "ERROR7" 67 | msgid "Please press Enter to retry." 68 | msgstr "请按回车键重试。" 69 | 70 | msgctxt "OUTPUT3" 71 | msgid "The QR Code image is saved at \"\"." 72 | msgstr "二维码图片已保存至\"\"。" 73 | 74 | msgctxt "OUTPUT4" 75 | msgid "The QR Code is expired. Press any key to generate a new one." 76 | msgstr "二维码已过期。请按任意键重新生成。" 77 | 78 | msgctxt "WARN1" 79 | msgid "This login method now have bugs, some contents may not available." 80 | msgstr "这种登录方式目前有BUG,部分内容可能不可用。" 81 | 82 | msgctxt "QRCODE" 83 | msgid "(If you don't input anything, the program will use QR code to login.)" 84 | msgstr "(如果不输入内容,程序会使用二维码登录。)" 85 | -------------------------------------------------------------------------------- /Language/bili.biliLogin.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - biliLogin.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-11 06:34:00+0000\n" 13 | "PO-Revision-Date: 2020-07-11 06:57+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "ERROR1" 23 | msgid "" 24 | "An error occurred while logging in with ChromeDriver, try to log in with " 25 | "username and password." 26 | msgstr "使用 ChromeDriver 登入發生錯誤,嘗試採用使用者名稱、密碼登入。" 27 | 28 | msgctxt "ERROR2" 29 | msgid "Login failed!" 30 | msgstr "登入失敗!" 31 | 32 | msgctxt "OUTPUT1" 33 | msgid "Login successfully!" 34 | msgstr "登入成功!" 35 | 36 | msgctxt "ERROR3" 37 | msgid "Network Error!" 38 | msgstr "網路錯誤!" 39 | 40 | msgctxt "ERROR4" 41 | msgid "Login failed:" 42 | msgstr "登入失敗:" 43 | 44 | msgctxt "INPUT1" 45 | msgid "Please enter user name:" 46 | msgstr "請輸入使用者名稱:" 47 | 48 | msgctxt "INPUT2" 49 | msgid "Please enter password:" 50 | msgstr "請輸入密碼:" 51 | 52 | msgctxt "OUTPUT2" 53 | msgid "Login verification code recognition result: \"\"." 54 | msgstr "登入驗證碼識別結果:" 55 | 56 | msgctxt "ERROR5" 57 | msgid "" 58 | "Login verification code recognition service is temporarily unavailable, " 59 | "please try again later." 60 | msgstr "登入驗證碼識別服務暫時不可用,請稍後再試。" 61 | 62 | msgctxt "ERROR6" 63 | msgid "Service is busy, try to log in using V3 interface." 64 | msgstr "服務繁忙,嘗試使用V3介面登入。" 65 | 66 | msgctxt "ERROR7" 67 | msgid "Please press Enter to retry." 68 | msgstr "請按確認鍵重試。" 69 | 70 | msgctxt "OUTPUT3" 71 | msgid "The QR Code image is saved at \"\"." 72 | msgstr "二維碼圖片已儲存至\"\"。" 73 | 74 | msgctxt "OUTPUT4" 75 | msgid "The QR Code is expired. Press any key to generate a new one." 76 | msgstr "二維碼已過期。請按任意鍵重新生成。" 77 | 78 | msgctxt "WARN1" 79 | msgid "This login method now have bugs, some contents may not available." 80 | msgstr "這種登入方式目前有BUG,部分內容可能不可用。" 81 | 82 | msgctxt "QRCODE" 83 | msgid "(If you don't input anything, the program will use QR code to login.)" 84 | msgstr "(如果不輸入內容,程式會使用二維碼登入。)" 85 | -------------------------------------------------------------------------------- /Language/bili.biliSub.ja.po: -------------------------------------------------------------------------------- 1 | # bili - biliLogin.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-11 07:10:00+0000\n" 13 | "PO-Revision-Date: 2020-07-11 07:31+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "INPUT1" 23 | msgid "The file \"\" already exists, do you want to overwrite it?" 24 | msgstr "ファイル \"\" は既に存在していますが、上書きしますか?" 25 | 26 | msgctxt "OUTPUT1" 27 | msgid "Failed to delete the original file, skip download." 28 | msgstr "元のファイルの削除に失敗し、ダウンロードをスキップしました。" 29 | 30 | msgctxt "OUTPUT2" 31 | msgid " subtitles for part download complete." 32 | msgstr "パート 字幕のダウンロードが完了しました。" 33 | 34 | msgctxt "ERROR1" 35 | msgid "Failed to save \"\"." 36 | msgstr "\"\" の保存に失敗しました。" 37 | 38 | msgctxt "ERROR2" 39 | msgid "Failed to write to the file \"\"." 40 | msgstr "ファイル \"\" への書き込みに失敗しました。" 41 | 42 | msgctxt "OUTPUT3" 43 | msgid " lyrics for part download complete." 44 | msgstr "パート 歌詞のダウンロードが完了しました。" 45 | 46 | msgctxt "AULRCCOM" 47 | msgid " lyric download completed." 48 | msgstr " 歌詞のダウンロードが完了しました。" 49 | -------------------------------------------------------------------------------- /Language/bili.biliSub.pot: -------------------------------------------------------------------------------- 1 | # bili - biliLogin.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-07-11 07:10:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "INPUT1" 19 | msgid "The file \"\" already exists, do you want to overwrite it?" 20 | msgstr "" 21 | 22 | msgctxt "OUTPUT1" 23 | msgid "Failed to delete the original file, skip download." 24 | msgstr "" 25 | 26 | msgctxt "OUTPUT2" 27 | msgid " subtitles for part download complete." 28 | msgstr "" 29 | 30 | msgctxt "ERROR1" 31 | msgid "Failed to save \"\"." 32 | msgstr "" 33 | 34 | msgctxt "ERROR2" 35 | msgid "Failed to write to the file \"\"." 36 | msgstr "" 37 | 38 | msgctxt "OUTPUT3" 39 | msgid " lyrics for part download complete." 40 | msgstr "" 41 | 42 | msgctxt "AULRCCOM" 43 | msgid " lyric download completed." 44 | msgstr "" 45 | -------------------------------------------------------------------------------- /Language/bili.biliSub.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - biliLogin.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-11 07:10:00+0000\n" 13 | "PO-Revision-Date: 2020-07-11 07:31+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "INPUT1" 23 | msgid "The file \"\" already exists, do you want to overwrite it?" 24 | msgstr "文件\"\"已存在,是否覆盖?" 25 | 26 | msgctxt "OUTPUT1" 27 | msgid "Failed to delete the original file, skip download." 28 | msgstr "删除原有文件失败,跳过下载。" 29 | 30 | msgctxt "OUTPUT2" 31 | msgid " subtitles for part download complete." 32 | msgstr "第P字幕下载完毕!" 33 | 34 | msgctxt "ERROR1" 35 | msgid "Failed to save \"\"." 36 | msgstr "保存\"\"失败!" 37 | 38 | msgctxt "ERROR2" 39 | msgid "Failed to write to the file \"\"." 40 | msgstr "写入到文件\"\"时失败!" 41 | 42 | msgctxt "OUTPUT3" 43 | msgid " lyrics for part download complete." 44 | msgstr "第P歌词下载完毕!" 45 | 46 | msgctxt "AULRCCOM" 47 | msgid " lyric download completed." 48 | msgstr "歌词下载完成。" 49 | -------------------------------------------------------------------------------- /Language/bili.biliSub.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - biliLogin.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-11 07:10:00+0000\n" 13 | "PO-Revision-Date: 2020-07-11 07:31+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "INPUT1" 23 | msgid "The file \"\" already exists, do you want to overwrite it?" 24 | msgstr "文件\"\"已存在,是否覆蓋?" 25 | 26 | msgctxt "OUTPUT1" 27 | msgid "Failed to delete the original file, skip download." 28 | msgstr "刪除原有文件失敗,跳過下載。" 29 | 30 | msgctxt "OUTPUT2" 31 | msgid " subtitles for part download complete." 32 | msgstr "第P字幕下載完畢!" 33 | 34 | msgctxt "ERROR1" 35 | msgid "Failed to save \"\"." 36 | msgstr "儲存\"\"失敗!" 37 | 38 | msgctxt "ERROR2" 39 | msgid "Failed to write to the file \"\"." 40 | msgstr "寫入到文件\"\"時失敗!" 41 | 42 | msgctxt "OUTPUT3" 43 | msgid " lyrics for part download complete." 44 | msgstr "第P歌詞下載完畢!" 45 | 46 | msgctxt "AULRCCOM" 47 | msgid " lyric download completed." 48 | msgstr "歌詞下載完成。" 49 | -------------------------------------------------------------------------------- /Language/bili.biliVersion.ja.po: -------------------------------------------------------------------------------- 1 | # bili - biliVersion.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-08 03:19:00+0000\n" 13 | "PO-Revision-Date: 2020-08-08 04:18+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "UNKNOWN_VER_STR" 23 | msgid "Unknown version string:" 24 | msgstr "不明なバージョンの文字列です:" 25 | 26 | msgctxt "CUR_VER" 27 | msgid "Current version:" 28 | msgstr "現在のバージョン:" 29 | 30 | msgctxt "LATEST_STABLE_VER" 31 | msgid "Latest stable version:" 32 | msgstr "最新の安定版:" 33 | 34 | msgctxt "NETWORK_ERROR" 35 | msgid "Network Error: Can not get latest stable version." 36 | msgstr "ネットワークエラー: 最新の安定版を取得できません。" 37 | 38 | msgctxt "HTTP_STATUS_ERROR" 39 | msgid "An unexpected HTTP status return from the server:" 40 | msgstr "サーバーから予期しない HTTP ステータスが返されました:" 41 | 42 | msgctxt "GET_NEW_VER" 43 | msgid "" 44 | "You can get the latest stable version on " 45 | "." 46 | msgstr "最新の安定版は で入手できます。" 47 | -------------------------------------------------------------------------------- /Language/bili.biliVersion.pot: -------------------------------------------------------------------------------- 1 | # bili - biliVersion.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-08-08 03:19:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "UNKNOWN_VER_STR" 19 | msgid "Unknown version string:" 20 | msgstr "" 21 | 22 | msgctxt "CUR_VER" 23 | msgid "Current version:" 24 | msgstr "" 25 | 26 | msgctxt "LATEST_STABLE_VER" 27 | msgid "Latest stable version:" 28 | msgstr "" 29 | 30 | msgctxt "NETWORK_ERROR" 31 | msgid "Network Error: Can not get latest stable version." 32 | msgstr "" 33 | 34 | msgctxt "HTTP_STATUS_ERROR" 35 | msgid "An unexpected HTTP status return from the server:" 36 | msgstr "" 37 | 38 | msgctxt "GET_NEW_VER" 39 | msgid "You can get the latest stable version on ." 40 | msgstr "" 41 | -------------------------------------------------------------------------------- /Language/bili.biliVersion.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - biliVersion.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-08 03:19:00+0000\n" 13 | "PO-Revision-Date: 2020-08-08 04:18+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "UNKNOWN_VER_STR" 23 | msgid "Unknown version string:" 24 | msgstr "未知的版本字符串:" 25 | 26 | msgctxt "CUR_VER" 27 | msgid "Current version:" 28 | msgstr "当前版本:" 29 | 30 | msgctxt "LATEST_STABLE_VER" 31 | msgid "Latest stable version:" 32 | msgstr "最新稳定版本:" 33 | 34 | msgctxt "NETWORK_ERROR" 35 | msgid "Network Error: Can not get latest stable version." 36 | msgstr "网络错误:无法获取最新稳定版本字符串。" 37 | 38 | msgctxt "HTTP_STATUS_ERROR" 39 | msgid "An unexpected HTTP status return from the server:" 40 | msgstr "一个预料之外的HTTP状态码从服务器返回:" 41 | 42 | msgctxt "GET_NEW_VER" 43 | msgid "" 44 | "You can get the latest stable version on " 45 | "." 46 | msgstr "你可以在上获取最新稳定版本。" 47 | -------------------------------------------------------------------------------- /Language/bili.biliVersion.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - biliVersion.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-08 03:19:00+0000\n" 13 | "PO-Revision-Date: 2020-08-08 04:18+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "UNKNOWN_VER_STR" 23 | msgid "Unknown version string:" 24 | msgstr "未知的版本字串:" 25 | 26 | msgctxt "CUR_VER" 27 | msgid "Current version:" 28 | msgstr "目前版本:" 29 | 30 | msgctxt "LATEST_STABLE_VER" 31 | msgid "Latest stable version:" 32 | msgstr "最新穩定版本:" 33 | 34 | msgctxt "NETWORK_ERROR" 35 | msgid "Network Error: Can not get latest stable version." 36 | msgstr "網路錯誤:無法獲取最新穩定版本字串。" 37 | 38 | msgctxt "HTTP_STATUS_ERROR" 39 | msgid "An unexpected HTTP status return from the server:" 40 | msgstr "一個預料之外的HTTP狀態碼從伺服器返回:" 41 | 42 | msgctxt "GET_NEW_VER" 43 | msgid "" 44 | "You can get the latest stable version on " 45 | "." 46 | msgstr "你可以在上獲取最新穩定版本。" 47 | -------------------------------------------------------------------------------- /Language/bili.biliext.ja.po: -------------------------------------------------------------------------------- 1 | # bili - biliext.py Strings 2 | # (C) 2019-2021 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2021-03-28 04:26:00+0000\n" 13 | "PO-Revision-Date: 2021-03-28 04:28+0000\n" 14 | "Last-Translator: Kum4423, 2021\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "XML" 23 | msgid "XML files" 24 | msgstr "XML files" 25 | 26 | msgctxt "ALL" 27 | msgid "All files" 28 | msgstr "全てのファイル" 29 | -------------------------------------------------------------------------------- /Language/bili.biliext.pot: -------------------------------------------------------------------------------- 1 | # bili - biliext.py Strings 2 | # (C) 2019-2021 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2021-03-28 04:26:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "XML" 19 | msgid "XML files" 20 | msgstr "" 21 | 22 | msgctxt "ALL" 23 | msgid "All files" 24 | msgstr "" 25 | -------------------------------------------------------------------------------- /Language/bili.biliext.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - biliext.py Strings 2 | # (C) 2019-2021 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # lifegpc , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2021-03-28 04:26:00+0000\n" 13 | "PO-Revision-Date: 2021-03-28 04:28+0000\n" 14 | "Last-Translator: lifegpc , 2021\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "XML" 23 | msgid "XML files" 24 | msgstr "XML文件" 25 | 26 | msgctxt "ALL" 27 | msgid "All files" 28 | msgstr "所有文件" 29 | -------------------------------------------------------------------------------- /Language/bili.biliext.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - biliext.py Strings 2 | # (C) 2019-2021 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2021-03-28 04:26:00+0000\n" 10 | "PO-Revision-Date: 2021-03-28 04:28+0000\n" 11 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 12 | "MIME-Version: 1.0\n" 13 | "Content-Type: text/plain; charset=UTF-8\n" 14 | "Content-Transfer-Encoding: 8bit\n" 15 | "Language: zh_TW\n" 16 | "Plural-Forms: nplurals=1; plural=0;\n" 17 | 18 | msgctxt "XML" 19 | msgid "XML files" 20 | msgstr "" 21 | 22 | msgctxt "ALL" 23 | msgid "All files" 24 | msgstr "" 25 | -------------------------------------------------------------------------------- /Language/bili.bilischeme.ja.po: -------------------------------------------------------------------------------- 1 | # bili - bilischeme.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-11 06:34:00+0000\n" 13 | "PO-Revision-Date: 2020-12-19 11:21+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "UNSPT" 23 | msgid "This program does not support URI scheme on ." 24 | msgstr "このプログラムは の URI スキームをサポートしていません。" 25 | 26 | msgctxt "REGERR" 27 | msgid "Unable to access HKEY_CLASSES_ROOT." 28 | msgstr "HKEY_CLASSES_ROOTにアクセスできません。" 29 | 30 | msgctxt "CNOTDEL" 31 | msgid "Unable to delete the old registry." 32 | msgstr "古いレジストリを削除できません。" 33 | 34 | msgctxt "CNOTCRE" 35 | msgid "Unable to create key \"\"." 36 | msgstr "キー \"\" を作成できません。 " 37 | -------------------------------------------------------------------------------- /Language/bili.bilischeme.pot: -------------------------------------------------------------------------------- 1 | # bili - bilischeme.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-07-11 06:34:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "UNSPT" 19 | msgid "This program does not support URI scheme on ." 20 | msgstr "" 21 | 22 | msgctxt "REGERR" 23 | msgid "Unable to access HKEY_CLASSES_ROOT." 24 | msgstr "" 25 | 26 | msgctxt "CNOTDEL" 27 | msgid "Unable to delete the old registry." 28 | msgstr "" 29 | 30 | msgctxt "CNOTCRE" 31 | msgid "Unable to create key \"\"." 32 | msgstr "" 33 | -------------------------------------------------------------------------------- /Language/bili.bilischeme.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - bilischeme.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-11 06:34:00+0000\n" 13 | "PO-Revision-Date: 2020-12-19 11:21+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "UNSPT" 23 | msgid "This program does not support URI scheme on ." 24 | msgstr "此程序不支持在上的URI scheme。" 25 | 26 | msgctxt "REGERR" 27 | msgid "Unable to access HKEY_CLASSES_ROOT." 28 | msgstr "无法访问HKEY_CLASSES_ROOT。" 29 | 30 | msgctxt "CNOTDEL" 31 | msgid "Unable to delete the old registry." 32 | msgstr "无法删除旧注册表。" 33 | 34 | msgctxt "CNOTCRE" 35 | msgid "Unable to create key \"\"." 36 | msgstr "无法新建项\"\"。" 37 | -------------------------------------------------------------------------------- /Language/bili.bilischeme.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - bilischeme.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-11 06:34:00+0000\n" 13 | "PO-Revision-Date: 2020-12-19 11:21+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "UNSPT" 23 | msgid "This program does not support URI scheme on ." 24 | msgstr "此程式不支援在上的URI scheme。" 25 | 26 | msgctxt "REGERR" 27 | msgid "Unable to access HKEY_CLASSES_ROOT." 28 | msgstr "無法讀寫 HKEY_CLASSES_ROOT。" 29 | 30 | msgctxt "CNOTDEL" 31 | msgid "Unable to delete the old registry." 32 | msgstr "無法刪除舊註冊表。" 33 | 34 | msgctxt "CNOTCRE" 35 | msgid "Unable to create key \"\"." 36 | msgstr "無法建立項\"\"。" 37 | -------------------------------------------------------------------------------- /Language/bili.exeinfo.ja.po: -------------------------------------------------------------------------------- 1 | # bili - The exe versioninfo Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-10-04 01:37:00+0000\n" 13 | "PO-Revision-Date: 2020-10-04 01:43+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "start" 23 | msgid "Download video/barrage from BiliBili" 24 | msgstr " BiliBiliから動画と弾幕をダウンロードする" 25 | 26 | msgctxt "filter" 27 | msgid "Filter the barrage file" 28 | msgstr "弾幕ファイルをフィルター" 29 | 30 | msgctxt "setsettings" 31 | msgid "Set settings for program" 32 | msgstr "プログラムの設定をする" 33 | 34 | msgctxt "startwebui" 35 | msgid "WEB User Interface server" 36 | msgstr "WEBユーザーインターフェースサーバー" 37 | 38 | msgctxt "bilischeme" 39 | msgid "Add bili URI scheme to system." 40 | msgstr "システムにbili URIスキームを追加する。" 41 | -------------------------------------------------------------------------------- /Language/bili.exeinfo.pot: -------------------------------------------------------------------------------- 1 | # bili - The exe versioninfo Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-10-04 01:37:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "start" 19 | msgid "Download video/barrage from BiliBili" 20 | msgstr "" 21 | 22 | msgctxt "filter" 23 | msgid "Filter the barrage file" 24 | msgstr "" 25 | 26 | msgctxt "setsettings" 27 | msgid "Set settings for program" 28 | msgstr "" 29 | 30 | msgctxt "startwebui" 31 | msgid "WEB User Interface server" 32 | msgstr "" 33 | 34 | msgctxt "bilischeme" 35 | msgid "Add bili URI scheme to system." 36 | msgstr "" 37 | -------------------------------------------------------------------------------- /Language/bili.exeinfo.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - The exe versioninfo Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-10-04 01:37:00+0000\n" 13 | "PO-Revision-Date: 2020-10-04 01:43+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "start" 23 | msgid "Download video/barrage from BiliBili" 24 | msgstr "从BiliBili下载视频/弹幕" 25 | 26 | msgctxt "filter" 27 | msgid "Filter the barrage file" 28 | msgstr "过滤弹幕文件" 29 | 30 | msgctxt "setsettings" 31 | msgid "Set settings for program" 32 | msgstr "设置程序" 33 | 34 | msgctxt "startwebui" 35 | msgid "WEB User Interface server" 36 | msgstr "web用户界面服务器" 37 | 38 | msgctxt "bilischeme" 39 | msgid "Add bili URI scheme to system." 40 | msgstr "把bili URI协议增至系统。" 41 | -------------------------------------------------------------------------------- /Language/bili.exeinfo.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - The exe versioninfo Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-10-04 01:37:00+0000\n" 13 | "PO-Revision-Date: 2020-10-04 01:43+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "start" 23 | msgid "Download video/barrage from BiliBili" 24 | msgstr "從BiliBili下載影片/彈幕" 25 | 26 | msgctxt "filter" 27 | msgid "Filter the barrage file" 28 | msgstr "過濾彈幕文件" 29 | 30 | msgctxt "setsettings" 31 | msgid "Set settings for program" 32 | msgstr "設定程式" 33 | 34 | msgctxt "startwebui" 35 | msgid "WEB User Interface server" 36 | msgstr "web使用者介面伺服器" 37 | 38 | msgctxt "bilischeme" 39 | msgid "Add bili URI scheme to system." 40 | msgstr "把bili URI協議增至系統。" 41 | -------------------------------------------------------------------------------- /Language/bili.filter.ja.po: -------------------------------------------------------------------------------- 1 | # bili - filter.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-13 09:24:00+0000\n" 13 | "PO-Revision-Date: 2020-07-13 10:17+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "OUTPUT1" 23 | msgid "Please run \"filter.py\"." 24 | msgstr "\"filter.py\" を実行してください。" 25 | 26 | msgctxt "OUTPUT2" 27 | msgid "Can not find the file \"\"." 28 | msgstr "ファイル \"\" を見つけることができません。" 29 | 30 | msgctxt "INPUT1" 31 | msgid "Please enter the number of files you want to filter:" 32 | msgstr "フィルタリングしたいファイル数を入力してください:" 33 | 34 | msgctxt "INPUT2" 35 | msgid "This file is not a barrage file." 36 | msgstr "このファイルは弾幕ではありません。" 37 | 38 | msgctxt "INPUT3" 39 | msgid "Press Enter to start choosing output file." 40 | msgstr "Enterキーを押して出力ファイルの選択を開始します。" 41 | 42 | msgctxt "ERROR1" 43 | msgid "Failed to save \"\"." 44 | msgstr "\"\" の保存に失敗しました。" 45 | 46 | msgctxt "OUTPUT3" 47 | msgid "" 48 | "There are barrages in this file. Filtered barrages, barrages" 49 | " left." 50 | msgstr "このファイルには の弾幕があります。 のフィルタリングされた弾幕。残り の弾幕。" 51 | -------------------------------------------------------------------------------- /Language/bili.filter.pot: -------------------------------------------------------------------------------- 1 | # bili - filter.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-07-13 09:24:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "OUTPUT1" 19 | msgid "Please run \"filter.py\"." 20 | msgstr "" 21 | 22 | msgctxt "OUTPUT2" 23 | msgid "Can not find the file \"\"." 24 | msgstr "" 25 | 26 | msgctxt "INPUT1" 27 | msgid "Please enter the number of files you want to filter:" 28 | msgstr "" 29 | 30 | msgctxt "INPUT2" 31 | msgid "This file is not a barrage file." 32 | msgstr "" 33 | 34 | msgctxt "INPUT3" 35 | msgid "Press Enter to start choosing output file." 36 | msgstr "" 37 | 38 | msgctxt "ERROR1" 39 | msgid "Failed to save \"\"." 40 | msgstr "" 41 | 42 | msgctxt "OUTPUT3" 43 | msgid "There are barrages in this file. Filtered barrages, barrages left." 44 | msgstr "" 45 | -------------------------------------------------------------------------------- /Language/bili.filter.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - filter.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-13 09:24:00+0000\n" 13 | "PO-Revision-Date: 2020-07-13 10:17+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "OUTPUT1" 23 | msgid "Please run \"filter.py\"." 24 | msgstr "请运行\"filter.py\"。" 25 | 26 | msgctxt "OUTPUT2" 27 | msgid "Can not find the file \"\"." 28 | msgstr "找不到文件\"\"。" 29 | 30 | msgctxt "INPUT1" 31 | msgid "Please enter the number of files you want to filter:" 32 | msgstr "请输入要过滤的文件数量:" 33 | 34 | msgctxt "INPUT2" 35 | msgid "This file is not a barrage file." 36 | msgstr "此文件不是弹幕文件。" 37 | 38 | msgctxt "INPUT3" 39 | msgid "Press Enter to start choosing output file." 40 | msgstr "按Enter开始选择输出文件。" 41 | 42 | msgctxt "ERROR1" 43 | msgid "Failed to save \"\"." 44 | msgstr "保存\"\"失败!" 45 | 46 | msgctxt "OUTPUT3" 47 | msgid "" 48 | "There are barrages in this file. Filtered barrages, barrages" 49 | " left." 50 | msgstr "该文件中有条弹幕,过滤了条,剩余条。" 51 | -------------------------------------------------------------------------------- /Language/bili.filter.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - filter.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-07-13 09:24:00+0000\n" 13 | "PO-Revision-Date: 2020-07-13 10:17+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "OUTPUT1" 23 | msgid "Please run \"filter.py\"." 24 | msgstr "請執行\"filter.py\"。" 25 | 26 | msgctxt "OUTPUT2" 27 | msgid "Can not find the file \"\"." 28 | msgstr "找不到文件\"\"。" 29 | 30 | msgctxt "INPUT1" 31 | msgid "Please enter the number of files you want to filter:" 32 | msgstr "請輸入要過濾的文件數量:" 33 | 34 | msgctxt "INPUT2" 35 | msgid "This file is not a barrage file." 36 | msgstr "此文件不是彈幕文件。" 37 | 38 | msgctxt "INPUT3" 39 | msgid "Press Enter to start choosing output file." 40 | msgstr "按Enter開始選擇輸出文件。" 41 | 42 | msgctxt "ERROR1" 43 | msgid "Failed to save \"\"." 44 | msgstr "儲存\"\"失敗!" 45 | 46 | msgctxt "OUTPUT3" 47 | msgid "" 48 | "There are barrages in this file. Filtered barrages, barrages" 49 | " left." 50 | msgstr "該文件中有條彈幕,過濾了條,剩餘條。" 51 | -------------------------------------------------------------------------------- /Language/bili.innosetup.ja.po: -------------------------------------------------------------------------------- 1 | # bili - bili inno setup script Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # Kum4423, 2020 9 | # 10 | msgid "" 11 | msgstr "" 12 | "Project-Id-Version: bili\n" 13 | "POT-Creation-Date: 2020-12-20 09:07:00+0000\n" 14 | "PO-Revision-Date: 2020-12-20 09:09+0000\n" 15 | "Last-Translator: Kum4423, 2020\n" 16 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Language: ja\n" 21 | "Plural-Forms: nplurals=1; plural=0;\n" 22 | 23 | msgctxt "ViewChangelog" 24 | msgid "View changelog" 25 | msgstr "変更ログの表示" 26 | 27 | msgctxt "bilischeme" 28 | msgid "Add bili URI scheme to registry" 29 | msgstr "レジストリにbili URIスキームを追加する。" 30 | -------------------------------------------------------------------------------- /Language/bili.innosetup.pot: -------------------------------------------------------------------------------- 1 | # bili - bili inno setup script Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-12-20 09:07:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "ViewChangelog" 19 | msgid "View changelog" 20 | msgstr "" 21 | 22 | msgctxt "bilischeme" 23 | msgid "Add bili URI scheme to registry" 24 | msgstr "" 25 | -------------------------------------------------------------------------------- /Language/bili.innosetup.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - bili inno setup script Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-12-20 09:07:00+0000\n" 13 | "PO-Revision-Date: 2020-12-20 09:09+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "ViewChangelog" 23 | msgid "View changelog" 24 | msgstr "查看更新日志" 25 | 26 | msgctxt "bilischeme" 27 | msgid "Add bili URI scheme to registry" 28 | msgstr "将bili URI协议添加到注册表" 29 | -------------------------------------------------------------------------------- /Language/bili.innosetup.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - bili inno setup script Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-12-20 09:07:00+0000\n" 13 | "PO-Revision-Date: 2020-12-20 09:09+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "ViewChangelog" 23 | msgid "View changelog" 24 | msgstr "查看更新日誌" 25 | 26 | msgctxt "bilischeme" 27 | msgid "Add bili URI scheme to registry" 28 | msgstr "將bili URI協議添加到註冊表" 29 | -------------------------------------------------------------------------------- /Language/file.all.pot: -------------------------------------------------------------------------------- 1 | # bili - file packages Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-07-13 10:30:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "OUTPUT1" 19 | msgid "NO.\tFile name\t" 20 | msgstr "" 21 | 22 | msgctxt "OUTPUT2" 23 | msgid "Type\tLast access time\tCreate time\t\tLast modify time\tFile size" 24 | msgstr "" 25 | 26 | msgctxt "DIR" 27 | msgid "DIR" 28 | msgstr "" 29 | 30 | msgctxt "FILE" 31 | msgid "FILE" 32 | msgstr "" 33 | 34 | msgctxt "OUTPUT3" 35 | msgid "Page of " 36 | msgstr "" 37 | 38 | msgctxt "O1" 39 | msgid "Previous page" 40 | msgstr "" 41 | 42 | msgctxt "O2" 43 | msgid "Next page" 44 | msgstr "" 45 | 46 | msgctxt "O3" 47 | msgid "Parent folder" 48 | msgstr "" 49 | 50 | msgctxt "O4" 51 | msgid "Do not display files with no file extensions" 52 | msgstr "" 53 | 54 | msgctxt "O5" 55 | msgid "Display files with no file extensions" 56 | msgstr "" 57 | 58 | msgctxt "O6" 59 | msgid "Display all files" 60 | msgstr "" 61 | 62 | msgctxt "O7" 63 | msgid "Display files which pass the filter" 64 | msgstr "" 65 | 66 | msgctxt "O8" 67 | msgid "Enter folder name" 68 | msgstr "" 69 | 70 | msgctxt "O9" 71 | msgid "Enter file name" 72 | msgstr "" 73 | 74 | msgctxt "OUTPUT4" 75 | msgid "Please enter the number before file/directory name to select/enter the file/directory or the letter to do that operation:" 76 | msgstr "" 77 | 78 | msgctxt "ERROR1" 79 | msgid "There is no parent folder." 80 | msgstr "" 81 | 82 | msgctxt "INPUT1" 83 | msgid "Please enter the location of folder (Support absolute and relative location):" 84 | msgstr "" 85 | 86 | msgctxt "ERROR2" 87 | msgid "This folder does not exist." 88 | msgstr "" 89 | 90 | msgctxt "INPUT2" 91 | msgid "Please enter the file name:" 92 | msgstr "" 93 | 94 | msgctxt "ERROR3" 95 | msgid "This file has been selected before." 96 | msgstr "" 97 | 98 | msgctxt "INPUT3" 99 | msgid "This file already exists, do you want to overwrite it?" 100 | msgstr "" 101 | 102 | msgctxt "INPUT4" 103 | msgid "Do you want to select the file \"\"?" 104 | msgstr "" 105 | -------------------------------------------------------------------------------- /Language/webui.about.ja.po: -------------------------------------------------------------------------------- 1 | # bili - webui/about Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-30 07:20:00+0000\n" 13 | "PO-Revision-Date: 2020-08-30 10:47+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "THIRDPARTY" 23 | msgid "Third Party Libraries" 24 | msgstr "サードパーティーライブラリ" 25 | 26 | msgctxt "PROJECT" 27 | msgid "Project" 28 | msgstr "プロジェクト" 29 | 30 | msgctxt "WEBSITE" 31 | msgid "Website" 32 | msgstr "ウェブサイト" 33 | -------------------------------------------------------------------------------- /Language/webui.about.pot: -------------------------------------------------------------------------------- 1 | # bili - webui/about Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-08-30 07:20:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "THIRDPARTY" 19 | msgid "Third Party Libraries" 20 | msgstr "" 21 | 22 | msgctxt "PROJECT" 23 | msgid "Project" 24 | msgstr "" 25 | 26 | msgctxt "WEBSITE" 27 | msgid "Website" 28 | msgstr "" 29 | -------------------------------------------------------------------------------- /Language/webui.about.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - webui/about Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-30 07:20:00+0000\n" 13 | "PO-Revision-Date: 2020-08-30 10:47+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "THIRDPARTY" 23 | msgid "Third Party Libraries" 24 | msgstr "第三方库" 25 | 26 | msgctxt "PROJECT" 27 | msgid "Project" 28 | msgstr "项目" 29 | 30 | msgctxt "WEBSITE" 31 | msgid "Website" 32 | msgstr "网站" 33 | -------------------------------------------------------------------------------- /Language/webui.about.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - webui/about Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-30 07:20:00+0000\n" 13 | "PO-Revision-Date: 2020-08-30 10:47+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "THIRDPARTY" 23 | msgid "Third Party Libraries" 24 | msgstr "第三方庫" 25 | 26 | msgctxt "PROJECT" 27 | msgid "Project" 28 | msgstr "項目" 29 | 30 | msgctxt "WEBSITE" 31 | msgid "Website" 32 | msgstr "網站" 33 | -------------------------------------------------------------------------------- /Language/webui.bililogin.pot: -------------------------------------------------------------------------------- 1 | # bili - webui/bililogin Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-09-206 11:03:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "NEEDLOGIN" 19 | msgid "You need to login in to your bilibili account if you want to continue using this program." 20 | msgstr "" 21 | 22 | msgctxt "USERNAME" 23 | msgid "User name:" 24 | msgstr "" 25 | 26 | msgctxt "CAPTCHA" 27 | msgid "Captcha:" 28 | msgstr "" 29 | 30 | msgctxt "NEEDCAP" 31 | msgid "Captcha is required to login in." 32 | msgstr "" 33 | 34 | msgctxt "SERISBUS" 35 | msgid "Service is busy." 36 | msgstr "" 37 | 38 | msgctxt "INCOUSPA" 39 | msgid "Incorrect user name or password." 40 | msgstr "" 41 | 42 | msgctxt "HTTPWARN" 43 | msgid "Although the program has encrypted the user name and password, it is still subject to man-in-the-middle(MITM) attacks. If you use this in the public network, please enable HTTPS." 44 | msgstr "" 45 | 46 | msgctxt "QRSCAN" 47 | msgid "Use APP to scan QR Code to login in" 48 | msgstr "" 49 | 50 | msgctxt "USEANDPA" 51 | msgid "Use user name and password to login in" 52 | msgstr "" 53 | 54 | msgctxt "QRCEXPR" 55 | msgid "The QR code has expired, click here to reload." 56 | msgstr "" 57 | 58 | msgctxt "USEPHONE" 59 | msgid "Login in with SMS" 60 | msgstr "" 61 | 62 | msgctxt "PHONEN" 63 | msgid "Phone number:" 64 | msgstr "" 65 | 66 | msgctxt "SENDSMS" 67 | msgid "Send captcha code by SMS" 68 | msgstr "" 69 | 70 | msgctxt "INVALIDCPN" 71 | msgid "This is an invalid China phone number." 72 | msgstr "" 73 | 74 | msgctxt "MUSTCAPT" 75 | msgid "You must complete the captcha to continue." 76 | msgstr "" 77 | 78 | msgctxt "CAPERROR" 79 | msgid "An error occured:" 80 | msgstr "" 81 | 82 | msgctxt "SMSSEND" 83 | msgid "SMS is already send." 84 | msgstr "" 85 | 86 | msgctxt "USEANDPAW" 87 | msgid "Use user name and password to login in (Web API)" 88 | msgstr "" 89 | 90 | msgctxt "BUGWARN" 91 | msgid "This login method now have bugs, some contents may not available." 92 | msgstr "" 93 | -------------------------------------------------------------------------------- /Language/webui.command.ja.po: -------------------------------------------------------------------------------- 1 | # bili - webui/command.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-24 05:17:00+0000\n" 13 | "PO-Revision-Date: 2020-08-24 10:08+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "O1" 23 | msgid "Command line help:" 24 | msgstr "コマンドラインヘルプ:" 25 | 26 | msgctxt "O2" 27 | msgid "Display command line help information." 28 | msgstr "コマンドラインのヘルプ情報を表示します。" 29 | 30 | msgctxt "O3" 31 | msgid "Set the program language." 32 | msgstr "プログラムの言語を設定します。" 33 | 34 | msgctxt "O4" 35 | msgid "The IP address you want to bind." 36 | msgstr "結束したいIPアドレス。" 37 | 38 | msgctxt "O5" 39 | msgid "The port of IP address you want to bind." 40 | msgstr "結束したいIPアドレスのポート。" 41 | 42 | msgctxt "O6" 43 | msgid "The path to SSL certificate." 44 | msgstr "SSL証明書のパスです。" 45 | 46 | msgctxt "O7" 47 | msgid "The path to SSL private key." 48 | msgstr "SSL秘密鍵のパスです。" 49 | 50 | msgctxt "O8" 51 | msgid "You need to give both the SSL certificate and the SSL private key." 52 | msgstr "SSL証明書とSSL秘密鍵の両方を渡す必要があります。" 53 | 54 | msgctxt "O9" 55 | msgid "The path to SSL certificate chain." 56 | msgstr "SSL証明書チェーンへのパス。" 57 | 58 | msgctxt "O10" 59 | msgid "Enable password verification and set the password." 60 | msgstr "パスワード認証を有効にし、パスワードを設定します。" 61 | 62 | msgctxt "O11" 63 | msgid "The length of the password needs to be between and ." 64 | msgstr "パスワードの長さは、 の間の長さにする必要があります。" 65 | -------------------------------------------------------------------------------- /Language/webui.command.pot: -------------------------------------------------------------------------------- 1 | # bili - webui/command.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-08-24 05:17:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "O1" 19 | msgid "Command line help:" 20 | msgstr "" 21 | 22 | msgctxt "O2" 23 | msgid "Display command line help information." 24 | msgstr "" 25 | 26 | msgctxt "O3" 27 | msgid "Set the program language." 28 | msgstr "" 29 | 30 | msgctxt "O4" 31 | msgid "The IP address you want to bind." 32 | msgstr "" 33 | 34 | msgctxt "O5" 35 | msgid "The port of IP address you want to bind." 36 | msgstr "" 37 | 38 | msgctxt "O6" 39 | msgid "The path to SSL certificate." 40 | msgstr "" 41 | 42 | msgctxt "O7" 43 | msgid "The path to SSL private key." 44 | msgstr "" 45 | 46 | msgctxt "O8" 47 | msgid "You need to give both the SSL certificate and the SSL private key." 48 | msgstr "" 49 | 50 | msgctxt "O9" 51 | msgid "The path to SSL certificate chain." 52 | msgstr "" 53 | 54 | msgctxt "O10" 55 | msgid "Enable password verification and set the password." 56 | msgstr "" 57 | 58 | msgctxt "O11" 59 | msgid "The length of the password needs to be between and ." 60 | msgstr "" 61 | -------------------------------------------------------------------------------- /Language/webui.command.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - webui/command.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-24 05:17:00+0000\n" 13 | "PO-Revision-Date: 2020-08-24 10:08+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "O1" 23 | msgid "Command line help:" 24 | msgstr "命令行帮助:" 25 | 26 | msgctxt "O2" 27 | msgid "Display command line help information." 28 | msgstr "显示命令行帮助信息" 29 | 30 | msgctxt "O3" 31 | msgid "Set the program language." 32 | msgstr "设置程序语言" 33 | 34 | msgctxt "O4" 35 | msgid "The IP address you want to bind." 36 | msgstr "你想关联的IP地址。" 37 | 38 | msgctxt "O5" 39 | msgid "The port of IP address you want to bind." 40 | msgstr "你想关联的IP地址的端口。" 41 | 42 | msgctxt "O6" 43 | msgid "The path to SSL certificate." 44 | msgstr "SSL证书路径。" 45 | 46 | msgctxt "O7" 47 | msgid "The path to SSL private key." 48 | msgstr "SSL私钥路径。" 49 | 50 | msgctxt "O8" 51 | msgid "You need to give both the SSL certificate and the SSL private key." 52 | msgstr "你需要同时给出SSL证书和SSL私钥。" 53 | 54 | msgctxt "O9" 55 | msgid "The path to SSL certificate chain." 56 | msgstr "SSL证书链路径。" 57 | 58 | msgctxt "O10" 59 | msgid "Enable password verification and set the password." 60 | msgstr "启用密码验证并设置密码。" 61 | 62 | msgctxt "O11" 63 | msgid "The length of the password needs to be between and ." 64 | msgstr "密码的长度必须在-之间。" 65 | -------------------------------------------------------------------------------- /Language/webui.command.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - webui/command.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-24 05:17:00+0000\n" 13 | "PO-Revision-Date: 2020-08-24 10:08+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "O1" 23 | msgid "Command line help:" 24 | msgstr "命令列幫助:" 25 | 26 | msgctxt "O2" 27 | msgid "Display command line help information." 28 | msgstr "顯示命令列說明資訊" 29 | 30 | msgctxt "O3" 31 | msgid "Set the program language." 32 | msgstr "設定程式語言" 33 | 34 | msgctxt "O4" 35 | msgid "The IP address you want to bind." 36 | msgstr "你想關聯的IP位址。" 37 | 38 | msgctxt "O5" 39 | msgid "The port of IP address you want to bind." 40 | msgstr "你想關聯的IP位址的埠。" 41 | 42 | msgctxt "O6" 43 | msgid "The path to SSL certificate." 44 | msgstr "SSL證書路徑。" 45 | 46 | msgctxt "O7" 47 | msgid "The path to SSL private key." 48 | msgstr "SSL私鑰路徑。" 49 | 50 | msgctxt "O8" 51 | msgid "You need to give both the SSL certificate and the SSL private key." 52 | msgstr "你需要同時給出SSL證書和SSL私鑰。" 53 | 54 | msgctxt "O9" 55 | msgid "The path to SSL certificate chain." 56 | msgstr "SSL證書鏈路徑。" 57 | 58 | msgctxt "O10" 59 | msgid "Enable password verification and set the password." 60 | msgstr "啟用密碼驗證並設定密碼。" 61 | 62 | msgctxt "O11" 63 | msgid "The length of the password needs to be between and ." 64 | msgstr "密碼的長度必須在-之間。" 65 | -------------------------------------------------------------------------------- /Language/webui.dir.ja.po: -------------------------------------------------------------------------------- 1 | # bili - webuihtml/js(origin)/dir.js Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 1 q , 2020 9 | # 10 | msgid "" 11 | msgstr "" 12 | "Project-Id-Version: bili\n" 13 | "POT-Creation-Date: 2020-08-27 05:04:00+0000\n" 14 | "PO-Revision-Date: 2020-08-27 08:04+0000\n" 15 | "Last-Translator: 1 q , 2020\n" 16 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=UTF-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Language: ja\n" 21 | "Plural-Forms: nplurals=1; plural=0;\n" 22 | 23 | msgctxt "FILENAME" 24 | msgid "File name" 25 | msgstr "ファイル名" 26 | 27 | msgctxt "FILETYPE" 28 | msgid "File type" 29 | msgstr "ファイルの種類" 30 | 31 | msgctxt "FILESIZE" 32 | msgid "File size" 33 | msgstr "ファイルサイズ" 34 | 35 | msgctxt "LASTMODI" 36 | msgid "Last modified time" 37 | msgstr "最新更新時間" 38 | 39 | msgctxt "INDEXOF" 40 | msgid "Index of " 41 | msgstr " のインデックス" 42 | 43 | msgctxt "AO" 44 | msgid "Ascending order" 45 | msgstr "昇順" 46 | 47 | msgctxt "DO" 48 | msgid "Descending order" 49 | msgstr "降順" 50 | 51 | msgctxt "DIR" 52 | msgid "Directory" 53 | msgstr "ディレクトリ" 54 | 55 | msgctxt "FILE" 56 | msgid "File" 57 | msgstr "ファイル" 58 | -------------------------------------------------------------------------------- /Language/webui.dir.pot: -------------------------------------------------------------------------------- 1 | # bili - webuihtml/js(origin)/dir.js Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-08-27 05:04:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "FILENAME" 19 | msgid "File name" 20 | msgstr "" 21 | 22 | msgctxt "FILETYPE" 23 | msgid "File type" 24 | msgstr "" 25 | 26 | msgctxt "FILESIZE" 27 | msgid "File size" 28 | msgstr "" 29 | 30 | msgctxt "LASTMODI" 31 | msgid "Last modified time" 32 | msgstr "" 33 | 34 | msgctxt "INDEXOF" 35 | msgid "Index of " 36 | msgstr "" 37 | 38 | msgctxt "AO" 39 | msgid "Ascending order" 40 | msgstr "" 41 | 42 | msgctxt "DO" 43 | msgid "Descending order" 44 | msgstr "" 45 | 46 | msgctxt "DIR" 47 | msgid "Directory" 48 | msgstr "" 49 | 50 | msgctxt "FILE" 51 | msgid "File" 52 | msgstr "" 53 | -------------------------------------------------------------------------------- /Language/webui.dir.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - webuihtml/js(origin)/dir.js Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-27 05:04:00+0000\n" 13 | "PO-Revision-Date: 2020-08-27 08:04+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "FILENAME" 23 | msgid "File name" 24 | msgstr "文件名" 25 | 26 | msgctxt "FILETYPE" 27 | msgid "File type" 28 | msgstr "文件类型" 29 | 30 | msgctxt "FILESIZE" 31 | msgid "File size" 32 | msgstr "文件大小" 33 | 34 | msgctxt "LASTMODI" 35 | msgid "Last modified time" 36 | msgstr "上次修改时间" 37 | 38 | msgctxt "INDEXOF" 39 | msgid "Index of " 40 | msgstr "的索引" 41 | 42 | msgctxt "AO" 43 | msgid "Ascending order" 44 | msgstr "升序" 45 | 46 | msgctxt "DO" 47 | msgid "Descending order" 48 | msgstr "降序" 49 | 50 | msgctxt "DIR" 51 | msgid "Directory" 52 | msgstr "目录" 53 | 54 | msgctxt "FILE" 55 | msgid "File" 56 | msgstr "文件" 57 | -------------------------------------------------------------------------------- /Language/webui.dir.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - webuihtml/js(origin)/dir.js Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-27 05:04:00+0000\n" 13 | "PO-Revision-Date: 2020-08-27 08:04+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "FILENAME" 23 | msgid "File name" 24 | msgstr "檔案名" 25 | 26 | msgctxt "FILETYPE" 27 | msgid "File type" 28 | msgstr "檔案類型" 29 | 30 | msgctxt "FILESIZE" 31 | msgid "File size" 32 | msgstr "檔案大小" 33 | 34 | msgctxt "LASTMODI" 35 | msgid "Last modified time" 36 | msgstr "上次修改時間" 37 | 38 | msgctxt "INDEXOF" 39 | msgid "Index of " 40 | msgstr "的索引" 41 | 42 | msgctxt "AO" 43 | msgid "Ascending order" 44 | msgstr "升序" 45 | 46 | msgctxt "DO" 47 | msgid "Descending order" 48 | msgstr "降序" 49 | 50 | msgctxt "DIR" 51 | msgid "Directory" 52 | msgstr "目錄" 53 | 54 | msgctxt "FILE" 55 | msgid "File" 56 | msgstr "文件" 57 | -------------------------------------------------------------------------------- /Language/webui.index.ja.po: -------------------------------------------------------------------------------- 1 | # bili - webui/index Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-24 06:16:00+0000\n" 13 | "PO-Revision-Date: 2020-08-24 10:08+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "TITLE" 23 | msgid "bili WEB User Interface" 24 | msgstr "bili WEBユーザーインターフェース" 25 | 26 | msgctxt "MAINPAGE" 27 | msgid "Main Page" 28 | msgstr "メインページ" 29 | 30 | msgctxt "DOWNLIST" 31 | msgid "Download Task List" 32 | msgstr "ダウンロード タスクリスト" 33 | 34 | msgctxt "SETTING" 35 | msgid "Settings" 36 | msgstr "設定" 37 | 38 | msgctxt "NELOGIN" 39 | msgid "You need to login in to access." 40 | msgstr "アクセスするにはログインが必要です。" 41 | 42 | msgctxt "NONELOG" 43 | msgid "" 44 | "You have disabled password verification, so you don't need to login in." 45 | msgstr "パスワード認証を無効にしているので、ログインしなくても大丈夫です。" 46 | 47 | msgctxt "BACKTOINDEX" 48 | msgid "Back to the main page." 49 | msgstr "メインページに戻る" 50 | 51 | msgctxt "ABOUT" 52 | msgid "About" 53 | msgstr "ソフトウェアについて" 54 | 55 | msgctxt "SOURCE" 56 | msgid "Source code" 57 | msgstr "ソースコード" 58 | 59 | msgctxt "LICENSE" 60 | msgid "License" 61 | msgstr "ライセンス" 62 | 63 | msgctxt "ENTTOS" 64 | msgid "Please press Enter to confirm." 65 | msgstr "Enterキーを押して確定してください。" 66 | 67 | msgctxt "TOOMANREQ" 68 | msgid "" 69 | "Because of too much requests, BiliBili now block your requests, please try " 70 | "again later…… (maybe a few hours)" 71 | msgstr "" 72 | "リクエストが多すぎるため、BiliBiliは現在、あなたのリクエストをブロックしています。あとでもう一度やってみてください...... " 73 | "(数時間かかるかもしれません)" 74 | -------------------------------------------------------------------------------- /Language/webui.index.pot: -------------------------------------------------------------------------------- 1 | # bili - webui/index Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-08-24 06:16:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "TITLE" 19 | msgid "bili WEB User Interface" 20 | msgstr "" 21 | 22 | msgctxt "MAINPAGE" 23 | msgid "Main Page" 24 | msgstr "" 25 | 26 | msgctxt "DOWNLIST" 27 | msgid "Download Task List" 28 | msgstr "" 29 | 30 | msgctxt "SETTING" 31 | msgid "Settings" 32 | msgstr "" 33 | 34 | msgctxt "NELOGIN" 35 | msgid "You need to login in to access." 36 | msgstr "" 37 | 38 | msgctxt "NONELOG" 39 | msgid "You have disabled password verification, so you don't need to login in." 40 | msgstr "" 41 | 42 | msgctxt "BACKTOINDEX" 43 | msgid "Back to the main page." 44 | msgstr "" 45 | 46 | msgctxt "ABOUT" 47 | msgid "About" 48 | msgstr "" 49 | 50 | msgctxt "SOURCE" 51 | msgid "Source code" 52 | msgstr "" 53 | 54 | msgctxt "LICENSE" 55 | msgid "License" 56 | msgstr "" 57 | 58 | msgctxt "ENTTOS" 59 | msgid "Please press Enter to confirm." 60 | msgstr "" 61 | 62 | msgctxt "TOOMANREQ" 63 | msgid "Because of too much requests, BiliBili now block your requests, please try again later…… (maybe a few hours)" 64 | msgstr "" 65 | -------------------------------------------------------------------------------- /Language/webui.index.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - webui/index Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-24 06:16:00+0000\n" 13 | "PO-Revision-Date: 2020-08-24 10:08+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "TITLE" 23 | msgid "bili WEB User Interface" 24 | msgstr "bili WEB用户界面" 25 | 26 | msgctxt "MAINPAGE" 27 | msgid "Main Page" 28 | msgstr "主页" 29 | 30 | msgctxt "DOWNLIST" 31 | msgid "Download Task List" 32 | msgstr "下载任务列表" 33 | 34 | msgctxt "SETTING" 35 | msgid "Settings" 36 | msgstr "设置" 37 | 38 | msgctxt "NELOGIN" 39 | msgid "You need to login in to access." 40 | msgstr "您需要登录才能访问。" 41 | 42 | msgctxt "NONELOG" 43 | msgid "" 44 | "You have disabled password verification, so you don't need to login in." 45 | msgstr "您禁用了密码验证,因此无需进行登录。" 46 | 47 | msgctxt "BACKTOINDEX" 48 | msgid "Back to the main page." 49 | msgstr "返回主页。" 50 | 51 | msgctxt "ABOUT" 52 | msgid "About" 53 | msgstr "关于" 54 | 55 | msgctxt "SOURCE" 56 | msgid "Source code" 57 | msgstr "源代码" 58 | 59 | msgctxt "LICENSE" 60 | msgid "License" 61 | msgstr "许可证" 62 | 63 | msgctxt "ENTTOS" 64 | msgid "Please press Enter to confirm." 65 | msgstr "请按Enter以确认。" 66 | 67 | msgctxt "TOOMANREQ" 68 | msgid "" 69 | "Because of too much requests, BiliBili now block your requests, please try " 70 | "again later…… (maybe a few hours)" 71 | msgstr "由于太多的请求,BiliBili阻止了你的请求,请稍后重试……(大约几小时)" 72 | -------------------------------------------------------------------------------- /Language/webui.index.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - webui/index Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-24 06:16:00+0000\n" 13 | "PO-Revision-Date: 2020-08-24 10:08+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "TITLE" 23 | msgid "bili WEB User Interface" 24 | msgstr "bili WEB使用者介面" 25 | 26 | msgctxt "MAINPAGE" 27 | msgid "Main Page" 28 | msgstr "首頁" 29 | 30 | msgctxt "DOWNLIST" 31 | msgid "Download Task List" 32 | msgstr "下載任務列表" 33 | 34 | msgctxt "SETTING" 35 | msgid "Settings" 36 | msgstr "設定" 37 | 38 | msgctxt "NELOGIN" 39 | msgid "You need to login in to access." 40 | msgstr "您需要登入才能訪問。" 41 | 42 | msgctxt "NONELOG" 43 | msgid "" 44 | "You have disabled password verification, so you don't need to login in." 45 | msgstr "您禁用了密碼驗證,因此無需進行登入。" 46 | 47 | msgctxt "BACKTOINDEX" 48 | msgid "Back to the main page." 49 | msgstr "返回首頁。" 50 | 51 | msgctxt "ABOUT" 52 | msgid "About" 53 | msgstr "關於" 54 | 55 | msgctxt "SOURCE" 56 | msgid "Source code" 57 | msgstr "原始碼" 58 | 59 | msgctxt "LICENSE" 60 | msgid "License" 61 | msgstr "授權條款" 62 | 63 | msgctxt "ENTTOS" 64 | msgid "Please press Enter to confirm." 65 | msgstr "請按Enter以確認。" 66 | 67 | msgctxt "TOOMANREQ" 68 | msgid "" 69 | "Because of too much requests, BiliBili now block your requests, please try " 70 | "again later…… (maybe a few hours)" 71 | msgstr "由於太多的請求,BiliBili阻止了你的請求,請稍後重試……(大約幾小時)" 72 | -------------------------------------------------------------------------------- /Language/webui.page.ja.po: -------------------------------------------------------------------------------- 1 | # bili - webui/page Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-09-11 06:58:00+0000\n" 13 | "PO-Revision-Date: 2020-09-11 13:39+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "NOTEXT" 23 | msgid "Now is not support this." 24 | msgstr "今はこれをサポートしていません。" 25 | 26 | msgctxt "PARTNO" 27 | msgid "Part Number" 28 | msgstr "Part 番号" 29 | 30 | msgctxt "PARTCID" 31 | msgid "Part CID" 32 | msgstr "Part CID" 33 | 34 | msgctxt "PARTNAME" 35 | msgid "Part Name" 36 | msgstr "Part 名 :" 37 | 38 | msgctxt "DMME" 39 | msgid "Download Method" 40 | msgstr "ダウンロード方法" 41 | 42 | msgctxt "DMME1" 43 | msgid "Barrage" 44 | msgstr "弾幕" 45 | 46 | msgctxt "DMME2" 47 | msgid "All barrage" 48 | msgstr "全弾幕" 49 | 50 | msgctxt "DMME3" 51 | msgid "Video" 52 | msgstr "動画" 53 | 54 | msgctxt "DMME4" 55 | msgid "Barrage and video" 56 | msgstr "弾幕と動画" 57 | 58 | msgctxt "DMME5" 59 | msgid "All barrage and video" 60 | msgstr "全弾幕と動画" 61 | 62 | msgctxt "DMME6" 63 | msgid "Subtitles only" 64 | msgstr "字幕のみ" 65 | 66 | msgctxt "DMME7" 67 | msgid "Cover image only" 68 | msgstr "カバーイメージのみ" 69 | 70 | msgctxt "DMME8" 71 | msgid "Audio only" 72 | msgstr "音声のみ" 73 | 74 | msgctxt "PARTDUR" 75 | msgid "Part Duration" 76 | msgstr "パーツの長さ" 77 | 78 | msgctxt "DFE" 79 | msgid "Default" 80 | msgstr "デフォルト" 81 | 82 | msgctxt "VCB" 83 | msgid "Copy video link" 84 | msgstr "動画リンクをコピー" 85 | 86 | msgctxt "ACB" 87 | msgid "Copy audio link" 88 | msgstr "音声リンクをコピー" 89 | 90 | msgctxt "SMU" 91 | msgid "Save as playlist file" 92 | msgstr "プレイリストファイルとして保存する" 93 | 94 | msgctxt "SELNUM" 95 | msgid "You have selected parts." 96 | msgstr "パート を選択しました。" 97 | 98 | msgctxt "ASNOW" 99 | msgid "Use the selection above" 100 | msgstr "上記の選択を使用する" 101 | -------------------------------------------------------------------------------- /Language/webui.page.pot: -------------------------------------------------------------------------------- 1 | # bili - webui/page Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-09-11 06:58:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "NOTEXT" 19 | msgid "Now is not support this." 20 | msgstr "" 21 | 22 | msgctxt "PARTNO" 23 | msgid "Part Number" 24 | msgstr "" 25 | 26 | msgctxt "PARTCID" 27 | msgid "Part CID" 28 | msgstr "" 29 | 30 | msgctxt "PARTNAME" 31 | msgid "Part Name" 32 | msgstr "" 33 | 34 | msgctxt "DMME" 35 | msgid "Download Method" 36 | msgstr "" 37 | 38 | msgctxt "DMME1" 39 | msgid "Barrage" 40 | msgstr "" 41 | 42 | msgctxt "DMME2" 43 | msgid "All barrage" 44 | msgstr "" 45 | 46 | msgctxt "DMME3" 47 | msgid "Video" 48 | msgstr "" 49 | 50 | msgctxt "DMME4" 51 | msgid "Barrage and video" 52 | msgstr "" 53 | 54 | msgctxt "DMME5" 55 | msgid "All barrage and video" 56 | msgstr "" 57 | 58 | msgctxt "DMME6" 59 | msgid "Subtitles only" 60 | msgstr "" 61 | 62 | msgctxt "DMME7" 63 | msgid "Cover image only" 64 | msgstr "" 65 | 66 | msgctxt "DMME8" 67 | msgid "Audio only" 68 | msgstr "" 69 | 70 | msgctxt "PARTDUR" 71 | msgid "Part Duration" 72 | msgstr "" 73 | 74 | msgctxt "DFE" 75 | msgid "Default" 76 | msgstr "" 77 | 78 | msgctxt "VCB" 79 | msgid "Copy video link" 80 | msgstr "" 81 | 82 | msgctxt "ACB" 83 | msgid "Copy audio link" 84 | msgstr "" 85 | 86 | msgctxt "SMU" 87 | msgid "Save as playlist file" 88 | msgstr "" 89 | 90 | msgctxt "SELNUM" 91 | msgid "You have selected parts." 92 | msgstr "" 93 | 94 | msgctxt "ASNOW" 95 | msgid "Use the selection above" 96 | msgstr "" 97 | -------------------------------------------------------------------------------- /Language/webui.page.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - webui/page Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-09-11 06:58:00+0000\n" 13 | "PO-Revision-Date: 2020-09-11 13:39+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "NOTEXT" 23 | msgid "Now is not support this." 24 | msgstr "现在不支持这个。" 25 | 26 | msgctxt "PARTNO" 27 | msgid "Part Number" 28 | msgstr "分P序号" 29 | 30 | msgctxt "PARTCID" 31 | msgid "Part CID" 32 | msgstr "分P CID" 33 | 34 | msgctxt "PARTNAME" 35 | msgid "Part Name" 36 | msgstr "分P名" 37 | 38 | msgctxt "DMME" 39 | msgid "Download Method" 40 | msgstr "下载方式" 41 | 42 | msgctxt "DMME1" 43 | msgid "Barrage" 44 | msgstr "弹幕" 45 | 46 | msgctxt "DMME2" 47 | msgid "All barrage" 48 | msgstr "全弹幕" 49 | 50 | msgctxt "DMME3" 51 | msgid "Video" 52 | msgstr "视频" 53 | 54 | msgctxt "DMME4" 55 | msgid "Barrage and video" 56 | msgstr "弹幕和视频" 57 | 58 | msgctxt "DMME5" 59 | msgid "All barrage and video" 60 | msgstr "全弹幕和视频" 61 | 62 | msgctxt "DMME6" 63 | msgid "Subtitles only" 64 | msgstr "仅字幕" 65 | 66 | msgctxt "DMME7" 67 | msgid "Cover image only" 68 | msgstr "仅封面" 69 | 70 | msgctxt "DMME8" 71 | msgid "Audio only" 72 | msgstr "仅音频" 73 | 74 | msgctxt "PARTDUR" 75 | msgid "Part Duration" 76 | msgstr "分P时长" 77 | 78 | msgctxt "DFE" 79 | msgid "Default" 80 | msgstr "默认" 81 | 82 | msgctxt "VCB" 83 | msgid "Copy video link" 84 | msgstr "复制视频链接" 85 | 86 | msgctxt "ACB" 87 | msgid "Copy audio link" 88 | msgstr "复制音频链接" 89 | 90 | msgctxt "SMU" 91 | msgid "Save as playlist file" 92 | msgstr "保存为播放列表文件" 93 | 94 | msgctxt "SELNUM" 95 | msgid "You have selected parts." 96 | msgstr "您选中了个部分。" 97 | 98 | msgctxt "ASNOW" 99 | msgid "Use the selection above" 100 | msgstr "使用上面的选择" 101 | -------------------------------------------------------------------------------- /Language/webui.page.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - webui/page Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-09-11 06:58:00+0000\n" 13 | "PO-Revision-Date: 2020-09-11 13:39+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "NOTEXT" 23 | msgid "Now is not support this." 24 | msgstr "現在不支援這個。" 25 | 26 | msgctxt "PARTNO" 27 | msgid "Part Number" 28 | msgstr "分P序號" 29 | 30 | msgctxt "PARTCID" 31 | msgid "Part CID" 32 | msgstr "分P CID" 33 | 34 | msgctxt "PARTNAME" 35 | msgid "Part Name" 36 | msgstr "分P名" 37 | 38 | msgctxt "DMME" 39 | msgid "Download Method" 40 | msgstr "下載方式" 41 | 42 | msgctxt "DMME1" 43 | msgid "Barrage" 44 | msgstr "彈幕" 45 | 46 | msgctxt "DMME2" 47 | msgid "All barrage" 48 | msgstr "全彈幕" 49 | 50 | msgctxt "DMME3" 51 | msgid "Video" 52 | msgstr "影片" 53 | 54 | msgctxt "DMME4" 55 | msgid "Barrage and video" 56 | msgstr "彈幕和影片" 57 | 58 | msgctxt "DMME5" 59 | msgid "All barrage and video" 60 | msgstr "全彈幕和影片" 61 | 62 | msgctxt "DMME6" 63 | msgid "Subtitles only" 64 | msgstr "僅字幕" 65 | 66 | msgctxt "DMME7" 67 | msgid "Cover image only" 68 | msgstr "僅封面" 69 | 70 | msgctxt "DMME8" 71 | msgid "Audio only" 72 | msgstr "僅音訊" 73 | 74 | msgctxt "PARTDUR" 75 | msgid "Part Duration" 76 | msgstr "分P時長" 77 | 78 | msgctxt "DFE" 79 | msgid "Default" 80 | msgstr "預設" 81 | 82 | msgctxt "VCB" 83 | msgid "Copy video link" 84 | msgstr "複製影片連結" 85 | 86 | msgctxt "ACB" 87 | msgid "Copy audio link" 88 | msgstr "複製音訊連結" 89 | 90 | msgctxt "SMU" 91 | msgid "Save as playlist file" 92 | msgstr "儲存為播放列表文件" 93 | 94 | msgctxt "SELNUM" 95 | msgid "You have selected parts." 96 | msgstr "您選中了個部分。" 97 | 98 | msgctxt "ASNOW" 99 | msgid "Use the selection above" 100 | msgstr "使用上面的選擇" 101 | -------------------------------------------------------------------------------- /Language/webui.startwebui.ja.po: -------------------------------------------------------------------------------- 1 | # bili - startwebui.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # Kum4423, 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-25 03:12:00+0000\n" 13 | "PO-Revision-Date: 2020-08-25 03:23+0000\n" 14 | "Last-Translator: Kum4423, 2020\n" 15 | "Language-Team: Japanese (https://www.transifex.com/lifegpc/teams/111556/ja/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: ja\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "INVALPAS" 23 | msgid "Invalid password. Please reset your password." 24 | msgstr "無効なパスワードです。パスワードを再設定してください。" 25 | 26 | msgctxt "UNAPORT" 27 | msgid "" 28 | "The port is not available, try to replace it with the port " 29 | "." 30 | msgstr "ポート が利用できませんので、ポート に置き換えてみてください。" 31 | 32 | msgctxt "ZEROPORT" 33 | msgid "" 34 | "The port 0 is an invalid port in some software (such as Chrome, curl), try " 35 | "to replace it with the port 2." 36 | msgstr "ポート0は一部のソフトウェア(Chromeやcurlなど)では無効なポートなので、ポート2に置き換えてみてください。" 37 | 38 | msgctxt "UNSAFEPORT" 39 | msgid "" 40 | "The port is in the list of the unsafe port in Chrome, try to " 41 | "replace it with the port ." 42 | msgstr "Chromeの安全でないポートのリストにポート があるので、ポート に置き換えてみてください。" 43 | -------------------------------------------------------------------------------- /Language/webui.startwebui.pot: -------------------------------------------------------------------------------- 1 | # bili - startwebui.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: bili\n" 9 | "POT-Creation-Date: 2020-08-25 03:12:00+0000\n" 10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 11 | "Last-Translator: FULL NAME \n" 12 | "Language-Team: LANGUAGE \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: 8bit\n" 16 | "Language: \n" 17 | 18 | msgctxt "INVALPAS" 19 | msgid "Invalid password. Please reset your password." 20 | msgstr "" 21 | 22 | msgctxt "UNAPORT" 23 | msgid "The port is not available, try to replace it with the port ." 24 | msgstr "" 25 | 26 | msgctxt "ZEROPORT" 27 | msgid "The port 0 is an invalid port in some software (such as Chrome, curl), try to replace it with the port 2." 28 | msgstr "" 29 | 30 | msgctxt "UNSAFEPORT" 31 | msgid "The port is in the list of the unsafe port in Chrome, try to replace it with the port ." 32 | msgstr "" 33 | -------------------------------------------------------------------------------- /Language/webui.startwebui.zh_CN.po: -------------------------------------------------------------------------------- 1 | # bili - startwebui.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # 1 q , 2020 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-25 03:12:00+0000\n" 13 | "PO-Revision-Date: 2020-08-25 03:23+0000\n" 14 | "Last-Translator: 1 q , 2020\n" 15 | "Language-Team: Chinese (China) (https://www.transifex.com/lifegpc/teams/111556/zh_CN/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_CN\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "INVALPAS" 23 | msgid "Invalid password. Please reset your password." 24 | msgstr "无效的密码。请重置您的密码。" 25 | 26 | msgctxt "UNAPORT" 27 | msgid "" 28 | "The port is not available, try to replace it with the port " 29 | "." 30 | msgstr "端口不可用,尝试使用端口代替它。" 31 | 32 | msgctxt "ZEROPORT" 33 | msgid "" 34 | "The port 0 is an invalid port in some software (such as Chrome, curl), try " 35 | "to replace it with the port 2." 36 | msgstr "端口0在一些软件(例如Chrome、curl)中不是一个有效的端口,尝试使用端口2代替它。" 37 | 38 | msgctxt "UNSAFEPORT" 39 | msgid "" 40 | "The port is in the list of the unsafe port in Chrome, try to " 41 | "replace it with the port ." 42 | msgstr "端口在Chrome的不安全端口列表上,尝试使用端口代替它。" 43 | -------------------------------------------------------------------------------- /Language/webui.startwebui.zh_TW.po: -------------------------------------------------------------------------------- 1 | # bili - startwebui.py Strings 2 | # (C) 2019-2020 lifegpc 3 | # This file is distributed under the same license as the bili package. 4 | # You should have received a copy of the GNU Affero General Public License 5 | # along with this program. If not, see . 6 | # Translators: 7 | # david082321 , 2021 8 | # 9 | msgid "" 10 | msgstr "" 11 | "Project-Id-Version: bili\n" 12 | "POT-Creation-Date: 2020-08-25 03:12:00+0000\n" 13 | "PO-Revision-Date: 2020-08-25 03:23+0000\n" 14 | "Last-Translator: david082321 , 2021\n" 15 | "Language-Team: Chinese (Taiwan) (https://www.transifex.com/lifegpc/teams/111556/zh_TW/)\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Language: zh_TW\n" 20 | "Plural-Forms: nplurals=1; plural=0;\n" 21 | 22 | msgctxt "INVALPAS" 23 | msgid "Invalid password. Please reset your password." 24 | msgstr "無效的密碼。請重設您的密碼。" 25 | 26 | msgctxt "UNAPORT" 27 | msgid "" 28 | "The port is not available, try to replace it with the port " 29 | "." 30 | msgstr "埠不可用,嘗試使用埠代替它。" 31 | 32 | msgctxt "ZEROPORT" 33 | msgid "" 34 | "The port 0 is an invalid port in some software (such as Chrome, curl), try " 35 | "to replace it with the port 2." 36 | msgstr "埠0在一些軟體(例如Chrome、curl)中不是一個有效的埠,嘗試使用埠2代替它。" 37 | 38 | msgctxt "UNSAFEPORT" 39 | msgid "" 40 | "The port is in the list of the unsafe port in Chrome, try to " 41 | "replace it with the port ." 42 | msgstr "埠在Chrome的不安全埠列表上,嘗試使用埠代替它。" 43 | -------------------------------------------------------------------------------- /M3UParser.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2021 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from typing import List 17 | from urllib.parse import urljoin 18 | 19 | 20 | def parseSimpleMasterM3U(data: str, base: str) -> List[str]: 21 | r = [] 22 | li = data.splitlines(False) 23 | for s in li: 24 | s = s.strip() 25 | if s.startswith('#'): 26 | continue 27 | if len(s) == 0: 28 | continue 29 | r.append(urljoin(base, s)) 30 | return r 31 | -------------------------------------------------------------------------------- /README.ja.md: -------------------------------------------------------------------------------- 1 | [中文(中国)](README.md) [English](README.en.md) 2 | -------------------------------------------------------------------------------- /acfunDanmu.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2021 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from hashl import crc32 17 | from requests import Session 18 | from Logger import Logger 19 | from inspect import currentframe 20 | 21 | 22 | def convertToBiliVer(dm: dict) -> dict: 23 | return {"t": dm["body"], "mod": dm["mode"], "fs": dm["size"], "fc": dm["color"], "ut": 24 | round(dm["createTime"] / 1000), "dp": dm["danmakuType"], "ti": 25 | dm["position"] / 1000, "si": crc32(dm["userId"]), "ri": dm["danmakuId"]} 26 | 27 | 28 | def getDanmuList(r: Session, rid: str, totalCount: int, se: dict, ip: dict, logg: Logger = None) -> list: 29 | rel = [] 30 | page = 0 31 | pageLimit = 40 32 | if 'mxd' in se: 33 | pageLimit = se['mxd'] 34 | if 'mxd' in ip: 35 | pageLimit = ip['mxd'] 36 | if logg: 37 | logg.write(f"pageLimit = {pageLimit}", currentframe(), "Acfun Danmu Para") 38 | while pageLimit <= 0 or page < pageLimit: 39 | page += 1 40 | url = "https://www.acfun.cn/rest/pc-direct/new-danmaku/list" 41 | data = {"resourceId": rid, "resourceType": "9", "enableAdvanced": "true", 42 | "pcursor": str(page), "count": "200", "sortType": "1", "asc": "false"} 43 | if logg: 44 | logg.write(f"POST {url}\ndata = {data}", currentframe(), "Get Acfun Danmu Page") 45 | re = r.post(url, data) 46 | re.encoding = 'utf8' 47 | if logg: 48 | logg.write(f"status = {re.status_code}\n{re.text}", currentframe(), "Acfun Danme Page Result") 49 | re = re.json() 50 | if re['result'] != 0: 51 | print(f"{re['result']} {re['error_msg']}") 52 | break 53 | if len(re['danmakus']) == 0: 54 | break 55 | rel += re['danmakus'] 56 | if totalCount is None: 57 | totalCount = re['totalCount'] 58 | if len(rel) >= totalCount: 59 | break 60 | rel2 = [] 61 | for i in rel: 62 | rel2.append(convertToBiliVer(i)) 63 | return rel2 64 | -------------------------------------------------------------------------------- /autoopenlist.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from os.path import abspath, exists, isfile 17 | from platform import system 18 | from inspect import currentframe 19 | from traceback import format_exc 20 | try: 21 | from file.win32 import openFileInExplorer 22 | except: 23 | pass 24 | 25 | 26 | class autoopenfilelist: 27 | __fl = None 28 | __logg = None 29 | 30 | def __init__(self, logg=None): 31 | self.__fl = [] 32 | self.__logg = logg 33 | 34 | def add(self, fn: str): 35 | r = abspath(fn) 36 | self.__fl.append(r) 37 | if self.__logg is not None: 38 | self.__logg.write( 39 | f"Add '{r}' to download file list.", currentframe(), "Auto Open File List Add") 40 | 41 | def open(self): 42 | i = len(self.__fl) - 1 43 | r = "" 44 | while i >= 0: 45 | fn = self.__fl[i] 46 | if exists(fn) and isfile(fn): 47 | r = fn 48 | break 49 | i = i - 1 50 | if r != "": 51 | if system() == "Windows": 52 | if self.__logg is not None: 53 | self.__logg.write( 54 | f"Try open '{r}'.", currentframe(), "Auto Open File List Open") 55 | try: 56 | openFileInExplorer(r) 57 | except: 58 | if self.__logg: 59 | self.__logg.write(format_exc(), currentframe(), "Auto Open File List Open error") 60 | -------------------------------------------------------------------------------- /biliAudio.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from requests import Session 17 | from Logger import Logger 18 | from inspect import currentframe 19 | 20 | 21 | def checkCid(data: dict, r: Session, logg: Logger = None) -> bool: 22 | if 'cid' in data and data['cid'] > 0: # 有CID并且应该是有效的 23 | return True 24 | uri = f"https://api.bilibili.com/x/player/pagelist?bvid={data['bvid']}&jsonp=jsonp" 25 | if logg is not None: 26 | logg.write(f"GET {uri}", currentframe(), 27 | "Check Audio Cid Get Pagelist") 28 | re = r.get(uri) 29 | re.encoding = 'utf8' 30 | if logg is not None: 31 | logg.write(f"status = {re.status_code}\n{re.text}", 32 | currentframe(), "Check Audio Cid Get Pagelist Result") 33 | re = re.json() 34 | if re['code'] != 0: 35 | print(f"{re['code']} {re['message']}") 36 | return False 37 | re = re['data'] 38 | if len(re) > 0: 39 | if len(re) == 1: 40 | if 'cid' in re[0] and re[0]['cid'] > 0: 41 | data['cid'] = re[0]['cid'] 42 | return True 43 | drt = [] 44 | for d in re: 45 | drt.append({d['cid']: d['duration']}) 46 | tt = {-1: data['duration']} 47 | drt.append(tt) 48 | 49 | def taken(elem: dict): 50 | for i in elem.keys(): 51 | return elem[i] 52 | drt.sort(key=taken) 53 | k = drt.index(tt) 54 | ind = 0 55 | if k == len(drt) - 1: 56 | ind = k - 1 57 | elif k == 0: 58 | ind = 1 59 | elif (taken(drt[k + 1]) - taken(tt)) >= (taken(tt) - taken(drt[k - 1])): 60 | ind = k - 1 61 | else: 62 | ind = k + 1 63 | if 'cid' in re[ind] and re[ind]['cid'] > 0: 64 | data['cid'] = re[ind]['cid'] 65 | return True 66 | return False 67 | -------------------------------------------------------------------------------- /biliBv.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF' 17 | tr = {} 18 | for i in range(58): 19 | tr[table[i]] = i 20 | s = [11, 10, 3, 8, 4, 6] 21 | xor = 177451812 22 | add = 8728348608 23 | 24 | 25 | def debv(x): 26 | if len(x) == 11: 27 | x = "BV1" + x[2:] 28 | r = 0 29 | for i in range(6): 30 | r += tr[x[s[i]]] * 58**i 31 | return (r - add) ^ xor 32 | 33 | 34 | def enbv(x): 35 | x = (x ^ xor) + add 36 | r = list('BV1 4 1 7 ') 37 | for i in range(6): 38 | r[s[i]] = table[x // 58**i % 58] 39 | return ''.join(r) 40 | -------------------------------------------------------------------------------- /biliDanmuCreate.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from html import escape 17 | 18 | 19 | def objtoxml(s): 20 | return f'''{escape(s['t'])}''' 21 | -------------------------------------------------------------------------------- /biliDanmuDown.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from inspect import currentframe 17 | from traceback import format_exc 18 | 19 | 20 | def downloadn(cid, r, logg=None): 21 | "下载当前弹幕" 22 | uri = f"https://comment.bilibili.com/{cid}.xml" 23 | try: 24 | if logg is not None: 25 | logg.write(f"GET {uri}", currentframe(), "Download Barrage Request") 26 | re = r.get(uri) 27 | except: 28 | if logg is not None: 29 | logg.write(format_exc(), currentframe(), "Download Barrage Failed") 30 | return -1 31 | re.encoding = 'utf8' 32 | if logg is not None: 33 | if re.ok: 34 | logg.write(f"status = {re.status_code}", currentframe(), "Download Barrage Result") 35 | else: 36 | logg.write(f"status = {re.status_code}\n{re.text}", currentframe(), "Download Barrage Result2") 37 | return re.text if re.ok else -1 38 | 39 | 40 | def downloadh(cid, r, date, logg=None): 41 | "下载历史弹幕" 42 | uri = f"https://api.bilibili.com/x/v2/dm/history?type=1&date={date}&oid={cid}" 43 | if logg is not None: 44 | logg.write(f"GET {uri}", currentframe(), "Download History Barrage Request") 45 | try: 46 | re = r.get(uri) 47 | except: 48 | if logg is not None: 49 | logg.write(format_exc(), currentframe(), "Download History Barrage Failed") 50 | return -1 51 | if logg is not None: 52 | if re.ok: 53 | logg.write(f"status = {re.status_code}", currentframe(), "Download History Barrage Result") 54 | else: 55 | logg.write(f"status = {re.status_code}\n{re.text}", currentframe(), "Download History Barrage Result2") 56 | re.encoding = 'utf8' 57 | return re.text if re.ok else -1 58 | -------------------------------------------------------------------------------- /biliDanmuXmlFilter.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from re import search 17 | 18 | 19 | def Filter(s, l): # noqa: E741 20 | "过滤弹幕" 21 | for i in l: 22 | if i['e'] == 'true': 23 | if i['t'] == 't': 24 | if s['t'].find(i['w']) > -1: 25 | return True 26 | elif i['t'] == 'r': 27 | if search(i['w'], s['t']) is not None: 28 | return True 29 | elif i['t'] == 'u': 30 | if i['w'] == s['si']: 31 | return True 32 | return False 33 | -------------------------------------------------------------------------------- /biliLRC.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from re import search, I 17 | 18 | 19 | def filterLRC(s: str) -> (str, int): 20 | "标准化LRC(鬼知道BiliBili还可能会出现不标准的LRC)" 21 | t = s.splitlines() 22 | r = "" 23 | n = 0 24 | for i in t: 25 | if i == "": 26 | continue 27 | a = search(r'^\[([^\]]+)\]', i, I) 28 | if a is None: 29 | r = r + '\n' + i 30 | else: 31 | b = a.groups()[0] # 时间戳 32 | c = search(r':(\d{2,3})$', b, I) # 匹配末尾的:000或:00 33 | if c is None: 34 | r = r + '\n' + i 35 | else: 36 | d = i[:c.start() + 1] + "." + c.groups()[0] + \ 37 | i[c.end() + 1:] # 替换为.00或.000 38 | r = r + '\n' + d 39 | n = n + 1 40 | while r.startswith('\n') and len(r) > 0: 41 | r = r[1:] 42 | return r, n 43 | -------------------------------------------------------------------------------- /biliPlayerXmlParser.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | import xml.sax 17 | 18 | 19 | def loadXML(): 20 | "加载BiliBili弹幕过滤文件" 21 | try: 22 | fo = open('tv.bilibili.player.xml', mode='r') 23 | except: 24 | return -1 25 | fo.close() 26 | p = xml.sax.make_parser() 27 | p.setFeature(xml.sax.handler.feature_namespaces, 0) 28 | h = Hander() 29 | p.setContentHandler(h) 30 | p.parse('tv.bilibili.player.xml') 31 | return p.getContentHandler().sa 32 | 33 | 34 | class Hander(xml.sax.ContentHandler): 35 | istag = False 36 | sa = [] 37 | now = {} 38 | 39 | def startElement(self, tag, attributes): 40 | if tag == 'item': 41 | self.istag = True 42 | self.now = {'e': attributes['enabled']} 43 | else: 44 | self.istag = False 45 | 46 | def characters(self, context): 47 | if self.istag: 48 | if context[0] == 't': 49 | self.now['t'] = 't' 50 | elif context[0] == 'r': 51 | self.now['t'] = 'r' 52 | elif context[0] == 'u': 53 | self.now['t'] = 'u' 54 | else: 55 | self.now['t'] = '' 56 | self.now['w'] = context[2:len(context)] 57 | 58 | def endElement(self, tag): 59 | if tag == 'item' and self.istag: 60 | self.istag = False 61 | self.sa.append(self.now) 62 | 63 | 64 | if __name__ == '__main__': 65 | re = loadXML() 66 | if re == -1: 67 | print('没有文件') 68 | else: 69 | print(re) 70 | -------------------------------------------------------------------------------- /biliext.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2021 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from JSONParser import loadset 17 | import sys 18 | from command import gopt 19 | from lang import getdict, getlan 20 | 21 | 22 | lan = None 23 | se = loadset() 24 | if se == -1 or se == -2: 25 | se = {} 26 | ip = {} 27 | if len(sys.argv) > 1: 28 | ip = gopt(sys.argv[1:]) 29 | lan = getdict('biliext', getlan(se, ip)) 30 | 31 | XMLFILE = (lan['XML'], "*.xml") 32 | ALLFILE = (lan['ALL'], "*") 33 | -------------------------------------------------------------------------------- /chon.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | def getcho(cho, data): 17 | "将选中的数字转为相应信息" 18 | m = 0 19 | if 'epList' in data: 20 | m = len(data['epList']) 21 | n = [] 22 | if 'sections' in data: 23 | for j in data['sections']: 24 | n.append(len(j['epList'])) 25 | re = [] 26 | for i in cho: 27 | if i <= m: 28 | # data['epList'][i-1]['i']=i 29 | data['epList'][i - 1]['s'] = 'e' 30 | re.append(data['epList'][i - 1]) 31 | continue 32 | r = m 33 | q = m 34 | for j in range(0, len(n)): 35 | r = r + n[j] 36 | if i <= r: 37 | # data['sections'][j]['epList'][i-q-1]['i']=i 38 | data['sections'][j]['epList'][i - q - 1]['s'] = 's' 39 | re.append(data['sections'][j]['epList'][i - q - 1]) 40 | break 41 | q = q + n[j] 42 | return re 43 | -------------------------------------------------------------------------------- /dict.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | def delli(l: list, i) -> (list, int): # noqa: E741 17 | r = [] 18 | a = -1 19 | b = 0 20 | for j in l: 21 | if i != j: 22 | r.append(j) 23 | else: 24 | a = b 25 | b = b + 1 26 | return r, a 27 | 28 | 29 | def dellk(l: list, i: int) -> list: # noqa: E741 30 | r = [] 31 | a = 0 32 | for k in l: 33 | if a != i: 34 | r.append(k) 35 | a = a + 1 36 | return r 37 | -------------------------------------------------------------------------------- /dictcopy.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from requests.structures import CaseInsensitiveDict 17 | 18 | 19 | def copydict(x): 20 | if isinstance(x, dict): 21 | r = {} 22 | elif isinstance(x, CaseInsensitiveDict): 23 | r = CaseInsensitiveDict() 24 | else: 25 | return {} 26 | for i in x.keys(): 27 | t = x[i] 28 | if isinstance(t, (dict, CaseInsensitiveDict)): 29 | r[i] = copydict(t) 30 | elif isinstance(t, list): 31 | r[i] = copylist(t) 32 | else: 33 | r[i] = t 34 | return r 35 | 36 | 37 | def copylist(x): 38 | r = [] 39 | for i in x: 40 | if isinstance(i, (dict, CaseInsensitiveDict)): 41 | r.append(copydict(i)) 42 | elif isinstance(i, list): 43 | r.append(copylist(i)) 44 | else: 45 | r.append(i) 46 | return r 47 | 48 | 49 | def copyip(x: dict): 50 | "复制时不保留i,p" 51 | r = {} 52 | for i in x.keys(): 53 | if i != 'i' and i != 'p': 54 | t = x[i] 55 | if isinstance(t, (dict, CaseInsensitiveDict)): 56 | r[i] = copydict(t) 57 | elif isinstance(t, list): 58 | r[i] = copylist(t) 59 | else: 60 | r[i] = t 61 | return r 62 | -------------------------------------------------------------------------------- /file/__init__.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | # flake8: noqa 17 | from JSONParser import loadset 18 | import sys 19 | from lang import getdict, getlan 20 | lan = None 21 | se = loadset() 22 | if se == -1 or se == -2: 23 | se = {} 24 | ip = {} 25 | la = getlan(se, ip) 26 | lan = getdict('all', la, 'file') 27 | from file.info import getinfo, getinfox, printinfo, spfn, spfln 28 | from file.dir import getinfod, printinfod, listd 29 | from file.filter import listf, listfd, listff, filtern, filterd 30 | from file.get import getfilen 31 | from file.info import geturlfe, getEtag, getlanEtag, urlsplitfn 32 | from file.str import cml 33 | from file.md import mkdir 34 | # 对后缀名过滤 35 | LX_FILTER = 0 36 | # 对文件名进行正则过滤 37 | TEXT_FILTER = 1 38 | # 对后缀名进行过滤时,保留无后缀名名文件 39 | ILX_FILTER = 2 40 | -------------------------------------------------------------------------------- /file/dir.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from file.info import getinfox, printinfo 17 | from os.path import abspath 18 | from os import listdir 19 | from file.str import width 20 | from file import lan, la 21 | 22 | 23 | def getinfod(filelist): 24 | "从listd获得的列表得到信息" 25 | j = 1 26 | ar = [] 27 | for i in filelist: 28 | r = getinfox(i, j) 29 | if r != -1: 30 | j = j + 1 31 | ar.append(r) 32 | return ar 33 | 34 | 35 | def printinfod(filelist): 36 | "打印整个filelist" 37 | m = maxwidth(filelist) 38 | j = 1 39 | print(lan['OUTPUT1'], end='') # 序号\t文件名\t 40 | if la == "en": 41 | n = 12 42 | else: 43 | n = 8 44 | while m > n: 45 | print('\t', end='') 46 | m = m - 8 47 | j = j + 1 48 | print(lan['OUTPUT2']) # 类型\t上次访问时间\t\t创建时间\t\t上次修改时间\t\t文件大小 49 | for i in filelist: 50 | printinfo(i, j * 8) 51 | 52 | 53 | def listd(l='.'): # noqa: E741 54 | '获取列表' 55 | d = listdir(l) 56 | r = [] 57 | for i in d: 58 | if l != '.': # noqa: E741 59 | r.append({'a': abspath('%s/%s' % (l, i)), 'f': i}) 60 | else: 61 | r.append({'a': abspath(i), 'f': i}) 62 | return r 63 | 64 | 65 | def maxwidth(l): # noqa: E741 66 | m = 0 67 | for i in l: 68 | n = width(i['f']) 69 | if n > m: 70 | m = n 71 | return m 72 | 73 | 74 | def listc(l, s=0, e='True'): # noqa: E741 75 | "截取listinfo中的一部分" 76 | if e == 'True': 77 | e = len(l) 78 | r = [] 79 | j = 1 80 | for i in l[s:e]: 81 | i['x'] = j 82 | r.append(i) 83 | j = j + 1 84 | return r 85 | -------------------------------------------------------------------------------- /file/md.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from os.path import exists 17 | import os 18 | from file import filterd 19 | 20 | 21 | def mkdir(dir: str): 22 | dir = filterd(dir) 23 | dl = dir.split('/')[:-1] 24 | if len(dl): 25 | s = "" 26 | f = True 27 | for i in dl: 28 | if f: 29 | f = False 30 | s = i 31 | else: 32 | s = s + "/" + i 33 | if s != "" and not exists(s): 34 | os.mkdir(s) 35 | -------------------------------------------------------------------------------- /file/str.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from unicodedata import east_asian_width 17 | from file import lan 18 | 19 | 20 | def width(s): 21 | '获取字符串宽度' 22 | t = 0 23 | for i in s: 24 | if east_asian_width(i) in ('F', 'W', 'A'): 25 | t = t + 2 26 | else: 27 | t = t + 1 28 | return t 29 | 30 | 31 | dw = ['B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'] 32 | 33 | 34 | def size(i): 35 | '将字节数转为可读性较好的数' 36 | if i == 'N/A': 37 | return 'N/A' 38 | t = float(i) 39 | b = 0 40 | while t > 10 * 2**10 and b < 8: 41 | b = b + 1 42 | t = t / 2**10 43 | global dw 44 | return "%.2f%s" % (t, dw[b]) 45 | 46 | 47 | def ftts(i): 48 | '转换' 49 | if i == 'd': 50 | return lan['DIR'] 51 | elif i == 'f': 52 | return lan['FILE'] 53 | 54 | 55 | def cml(s, t): 56 | '计算码率,s 大小B,t 时间ms' 57 | s = s * 8 / t 58 | return "%.2fkbps" % (s) 59 | -------------------------------------------------------------------------------- /file/time.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from time import strftime, localtime 17 | 18 | 19 | def ttos(tm): 20 | "将时间戳转换为字符串(当地时间)" 21 | if tm == 'N/A': 22 | return 'N/A' 23 | elif tm >= 0: 24 | return strftime('%Y-%m-%d %H:%M:%S', localtime(tm)) 25 | else: 26 | return str(tm) 27 | -------------------------------------------------------------------------------- /hashl.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | import hashlib 17 | from zlib import crc32 as crc32f 18 | 19 | 20 | def sha256(s): 21 | t = str(s) 22 | h = hashlib.sha256() 23 | h.update(t.encode('utf8')) 24 | return h.hexdigest() 25 | 26 | 27 | def md5(s): 28 | t = str(s) 29 | h = hashlib.md5() 30 | h.update(t.encode('utf8')) 31 | return h.hexdigest() 32 | 33 | 34 | def crc32(s): 35 | t = str(s) 36 | te = hex(crc32f(t.encode('utf8')))[2:] 37 | return '0' * (8 - len(te)) + te 38 | -------------------------------------------------------------------------------- /icon/favicon.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lifegpc/bili/17d592f5476871166e249a0a1de39b34cff7dc9d/icon/favicon.ai -------------------------------------------------------------------------------- /icon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lifegpc/bili/17d592f5476871166e249a0a1de39b34cff7dc9d/icon/favicon.ico -------------------------------------------------------------------------------- /multithread.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2021 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from threading import Thread 17 | from typing import Union 18 | 19 | 20 | def makeSureSendKill(d: Union[dict, list]): 21 | """确保已经给线程发送了kill""" 22 | if isinstance(d, dict): 23 | for key in d: 24 | t = d[key] 25 | if isinstance(t, Thread): 26 | if hasattr(t, '_mystop') and hasattr(t, 'kill'): 27 | if not t._mystop: 28 | t.kill() 29 | elif isinstance(d, list): 30 | for t in d: 31 | if isinstance(t, Thread): 32 | if hasattr(t, '_mystop') and hasattr(t, 'kill'): 33 | if not t._mystop: 34 | t.kill() 35 | 36 | 37 | def makeSureAllClosed(d: Union[dict, list]): 38 | """所有进程是否已经全部退出""" 39 | if isinstance(d, dict): 40 | for key in d: 41 | t = d[key] 42 | if isinstance(t, Thread): 43 | if t.isAlive(): 44 | return False 45 | elif isinstance(d, list): 46 | for t in d: 47 | if isinstance(t, Thread): 48 | if t.isAlive(): 49 | return False 50 | return True 51 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | iso-639>=0.4.5 2 | polib>=1.1.0 3 | regex>=2020.11.13 4 | requests>=2.25.1 5 | rsa>=4.6 6 | selenium>=3.141.0 7 | web.py>=0.62 8 | qrcode>=6.1 9 | Js2Py>=0.70 10 | websocket-client>=0.58.0 11 | -------------------------------------------------------------------------------- /version.txt: -------------------------------------------------------------------------------- 1 | v1.4.2 2 | -------------------------------------------------------------------------------- /webui/__init__.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | # flake8: noqa 17 | http_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36", "Connection": "keep-alive", 18 | "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8"} 19 | from .range import getrange, checkrange, getcontentbyrange, DashRange 20 | from .headers import getheader, getstatus, getcontenttype, mimetype, getacceptlanguage 21 | from .template import gettemplate 22 | from .loadsettings import loadset, getdfset, saveset 23 | from .command import gopt 24 | from file import getEtag, getlanEtag 25 | from urllib.parse import urlencode, quote 26 | import web 27 | from .pas import passw 28 | pa = passw() 29 | from .section import sectionlist 30 | sect = sectionlist() 31 | from .section2 import logincheck, apilogincheck, logincheck2 32 | from .api import api 33 | from .index import index 34 | from .translate import translate 35 | from .js import js 36 | from .css import css 37 | from .settings import setting 38 | from .json import jsong 39 | from .login import login 40 | from .font import font 41 | from .video import video 42 | from .favicon import favicon 43 | from .about import about, server_ver 44 | from .biliLogin import biliLogin 45 | from .page import page 46 | from .pic import pic 47 | from .live import live 48 | from .dealwithcapcha import dealwithcapcha 49 | -------------------------------------------------------------------------------- /webui/about.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import web, loadset, gopt, gettemplate 17 | import sys 18 | from biliVersion import getversion 19 | 20 | 21 | ip = {} 22 | if len(sys.argv) > 1: 23 | ip = gopt(sys.argv[1:]) 24 | se = loadset() 25 | if se == -1 or se == -2: 26 | se = {} 27 | ver = getversion() 28 | if ver is None: 29 | ver2 = "bili" 30 | ver2 = f"bili v{ver}" 31 | 32 | 33 | class about: 34 | def GET(self, *t): 35 | web.header('Content-Type', 'text/html; charset=utf-8') 36 | abo = gettemplate('about') 37 | return abo(ip, se, ver) 38 | 39 | 40 | def server_ver(handler): 41 | web.header('Server', ver2) 42 | return handler() 43 | -------------------------------------------------------------------------------- /webui/api/__init__.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | # flake8: noqa 17 | from .apiclass import InvalidInputEroor, apic 18 | from .session import new_Session 19 | from .apilist import getapilist 20 | from .api import api 21 | -------------------------------------------------------------------------------- /webui/api/api.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from .. import web, apilogincheck 17 | from . import getapilist, InvalidInputEroor 18 | from .session import NotLoginError 19 | from json import dumps 20 | import traceback 21 | 22 | apil = getapilist() 23 | 24 | 25 | class api: 26 | def GET(self, t): 27 | web.header('Content-Type', 'text/json; charset=utf-8') 28 | h = web.cookies().get('section') 29 | if apilogincheck(h): 30 | return dumps({'code': -403}) 31 | asc = False 32 | if web.input().get('asc') is not None: 33 | asc = True 34 | for i in apil: 35 | try: 36 | e = i(t) 37 | return dumps(e._handle(), ensure_ascii=asc) 38 | except InvalidInputEroor: 39 | pass 40 | except NotLoginError: 41 | return {'code': -501} 42 | except Exception: 43 | return dumps({'code': -500, 'e': traceback.format_exc()}, ensure_ascii=asc) 44 | return dumps({'code': -404}) 45 | -------------------------------------------------------------------------------- /webui/api/apiclass.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from regex import search, I 17 | 18 | 19 | class InvalidInputEroor(Exception): 20 | def __init__(self): 21 | Exception.__init__(self, 'Input is invalid.') 22 | 23 | 24 | class apic: 25 | _VALID_URI = r'' 26 | _groupdict = {} 27 | _inp = "" 28 | 29 | def __init__(self, inp: str): 30 | "对uri进行处理" 31 | re = search(self._VALID_URI, inp, I) 32 | if re is None: 33 | raise InvalidInputEroor() 34 | self._inp = inp 35 | self._groupdict = re.groupdict() 36 | 37 | def _handle(self): 38 | "具体处理" 39 | return {'code': 0} 40 | -------------------------------------------------------------------------------- /webui/api/apilist.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | # flake8: noqa 17 | from . import apic 18 | from typing import List 19 | from .rsa import apirsa 20 | from .checklogin import checklogin, checkuilogin 21 | from .videourl import normalvideourl 22 | from .loginapi import getpubkey, captcha, login, qrgetloginurl, qrgetlogininfo, getcountrylist, getcaptchacombine, sendloginsms, loginwithsms, getpubkeyweb, loginwithuserpassweb 23 | from .infoextractor import infoextractor 24 | 25 | apil = [value for key, value in globals().items() if type( 26 | value) == type(apic) and issubclass(value, apic) and key != "apic"] 27 | 28 | 29 | def getapilist() -> List[apic]: 30 | return apil 31 | -------------------------------------------------------------------------------- /webui/api/checklogin.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import apic, new_Session 17 | from os.path import exists 18 | from JSONParser import loadcookie 19 | 20 | 21 | def logincheck(needdata: bool = False) -> bool: 22 | "检查登录,needdata为True时同时返回数据" 23 | if not exists('cookies.json'): 24 | return False 25 | r = new_Session(False) 26 | read = loadcookie(r) 27 | if read != 0: 28 | return False 29 | re = r.get('https://api.bilibili.com/x/web-interface/nav') 30 | re.encoding = 'utf8' 31 | obj = re.json() 32 | if obj['code'] == 0 and 'data' in obj and obj['data']['isLogin']: 33 | if not needdata: 34 | return True 35 | else: 36 | return True, obj['data'] 37 | if not needdata: 38 | return False 39 | else: 40 | return False, None 41 | 42 | 43 | class checklogin(apic): 44 | _VALID_URI = r"^checklogin$" 45 | 46 | def _handle(self): 47 | return {'code': 0, 'islogin': logincheck()} 48 | 49 | 50 | class checkuilogin(apic): 51 | _VALID_URI = r'^checkuilogin$' 52 | 53 | def _handle(self): 54 | return {'code': 0} 55 | -------------------------------------------------------------------------------- /webui/api/rsa.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import apic 17 | import rsa 18 | from base64 import b64encode 19 | 20 | pubkey = None 21 | privkey = None 22 | 23 | 24 | def decrypt(s: bytes) -> bytes: 25 | "解密" 26 | return rsa.decrypt(s, privkey) 27 | 28 | 29 | def int_to_bytes(x: int) -> bytes: 30 | return x.to_bytes((x.bit_length() + 7) // 8, 'big') 31 | 32 | 33 | class apirsa(apic): 34 | _VALID_URI = r'^rsa$' 35 | 36 | def _handle(self): 37 | global pubkey, privkey 38 | if pubkey is None: 39 | pubkey, privkey = rsa.newkeys(2048) 40 | k = b64encode(int_to_bytes(pubkey.n)).decode('utf8') 41 | e = b64encode(int_to_bytes(pubkey.e)).decode('utf8') 42 | return {'code': '0', 'k': k, 'e': e} 43 | -------------------------------------------------------------------------------- /webui/api/session.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from requests import Session 17 | from .. import http_headers 18 | from JSONParser import loadcookie, loadset, getset 19 | 20 | 21 | se = loadset() 22 | if se == -1 or se == -2: 23 | se = {} 24 | 25 | 26 | class NotLoginError(Exception): 27 | def __init__(self): 28 | Exception.__init__(self, "You are not login in.") 29 | 30 | 31 | def new_Session(cookies: bool = True): 32 | "新建新会话,cookies为True则包含cookies" 33 | r = Session() 34 | r.headers.update(http_headers) 35 | if cookies: 36 | read = loadcookie(r) 37 | if read != 0: 38 | raise NotLoginError() 39 | if getset(se, 'te') is False: 40 | r.trust_env = False 41 | return r 42 | -------------------------------------------------------------------------------- /webui/biliLogin.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import gopt, loadset, web, logincheck, gettemplate, pa 17 | import sys 18 | 19 | ip = {} 20 | if len(sys.argv) > 1: 21 | ip = gopt(sys.argv[1:]) 22 | se = loadset() 23 | if se == -1 or se == -2: 24 | se = {} 25 | 26 | 27 | class biliLogin: 28 | def GET(self, t): 29 | h = web.cookies().get('section') 30 | if logincheck(h): 31 | return '' 32 | web.header('Content-Type', 'text/html; charset=utf-8') 33 | bilo = gettemplate('bililogin') 34 | return bilo(ip, se, pa.https) 35 | -------------------------------------------------------------------------------- /webui/css.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import web, getEtag 17 | from os.path import exists 18 | 19 | 20 | class css: 21 | def GET(self, n): 22 | web.header('Content-Type', 'text/css; charset=utf-8') 23 | fn = f'webuihtml/css/{n}' 24 | if not exists(fn): 25 | fn = f'webuihtml/csso/{n}' 26 | if not exists(fn): 27 | web.HTTPError('404') 28 | return '' 29 | et = web.ctx.env.get('HTTP_IF_NONE_MATCH') 30 | et2 = getEtag(fn) 31 | if et == et2 and et2 is not None: 32 | web.HTTPError('304') 33 | t = '' 34 | else: 35 | web.header('Etag', et2) 36 | f = open(fn, 'r', encoding='utf8') 37 | t = f.read() 38 | f.close() 39 | return t 40 | -------------------------------------------------------------------------------- /webui/dealwithcapcha.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import web, gettemplate, logincheck, getEtag, gopt, loadset 17 | import sys 18 | 19 | 20 | ip = {} 21 | if len(sys.argv) > 1: 22 | ip = gopt(sys.argv[1:]) 23 | se = loadset() 24 | if se == -1 or se == -2: 25 | se = {} 26 | 27 | 28 | class dealwithcapcha: 29 | def GET(self, *t): 30 | h = web.cookies().get('section') 31 | if logincheck(h): 32 | return '' 33 | web.header('Content-Type', 'text/html; charset=utf-8') 34 | et = web.ctx.env.get('HTTP_IF_NONE_MATCH') 35 | et2 = getEtag('webuihtml/dealwithcapcha.html') 36 | if et == et2 and et2 is not None: 37 | web.HTTPError('304') 38 | t = '' 39 | return t 40 | else: 41 | web.header('Etag', et2) 42 | dea = gettemplate('dealwithcapcha') 43 | return dea(se, ip) 44 | -------------------------------------------------------------------------------- /webui/extractor/__init__.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | -------------------------------------------------------------------------------- /webui/extractor/utils.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from requests import Session 17 | import traceback 18 | 19 | 20 | def addcookies(r: Session, vq: int = 125): 21 | "增加具体的cookies,vq为视频画质" 22 | r.cookies.set('CURRENT_QUALITY', str(vq), domain='.bilibili.com', path='/') 23 | r.cookies.set('CURRENT_FNVAL', '80', domain='.bilibili.com', path='/') 24 | r.cookies.set('laboratory', '1-1', domain='.bilibili.com', path='/') 25 | r.cookies.set('stardustvideo', '1', domain='.bilibili.com', path='/') 26 | 27 | 28 | def geturllength(r: Session, url: str) -> int: 29 | "获取URI的长度" 30 | try: 31 | re = r.get(url, stream=True) 32 | try: 33 | if re.headers.get('Content-Length') is not None: 34 | a = int(re.headers.get('Content-Length')) 35 | re.close() 36 | return a 37 | else: 38 | re.close() 39 | return 0 40 | except: 41 | re.close() 42 | print(traceback.format_exc()) 43 | return 0 44 | except: 45 | print(traceback.format_exc()) 46 | return 0 47 | -------------------------------------------------------------------------------- /webui/favicon.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import web, getEtag 17 | from os.path import exists 18 | 19 | 20 | class favicon: 21 | def GET(self): 22 | web.header('Content-Type', 'image/svg+xml') 23 | fn = 'icon/favicon.svg' 24 | if not exists(fn): 25 | web.HTTPError('404') 26 | return '' 27 | et = web.ctx.env.get('HTTP_IF_NONE_MATCH') 28 | et2 = getEtag(fn) 29 | if et == et2: 30 | web.HTTPError('304') 31 | return '' 32 | else: 33 | web.header('Etag', et2) 34 | f = open(fn, 'r', encoding='utf8') 35 | t = f.read() 36 | f.close() 37 | return t 38 | -------------------------------------------------------------------------------- /webui/font.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import web, getEtag, logincheck2, getrange, checkrange, getcontentbyrange, DashRange 17 | from os.path import exists, getsize 18 | from file import spfn 19 | 20 | mimetype = {'otf': 'font/otf', 'ttf': 'font/ttf', 21 | 'woff': 'font/woff', 'woff2': 'font/woff'} 22 | 23 | 24 | class font: 25 | def GET(self): 26 | h = web.cookies().get('section') 27 | if logincheck2(h): 28 | return '403 Forbidden' 29 | t = web.input().get('l') 30 | if not exists(t): 31 | web.HTTPError('404') 32 | return '404 Not Found' 33 | elif spfn(t)[1].lower() in mimetype: 34 | mime = mimetype[spfn(t)[1].lower()] 35 | web.header('Content-type', mime) 36 | et = web.ctx.env.get('HTTP_IF_NONE_MATCH') 37 | et2 = getEtag(t) 38 | if et == et2: 39 | web.HTTPError('304') 40 | return '' 41 | else: 42 | web.header('Etag', et2) 43 | web.header('Content-Transfer-Encoding', 'BINARY') 44 | fs = getsize(t) 45 | ran = web.ctx.env.get('HTTP_RANGE') 46 | if ran is None: 47 | web.header('Content-Length', str(fs)) 48 | return getcontentbyrange(None, t) 49 | else: 50 | ran2 = getrange(ran) 51 | if not checkrange(ran2, fs): 52 | web.HTTPError('416') 53 | return '416 Range Not Satisfiable' 54 | else: 55 | web.header('Content-Range', DashRange(ran2, fs)) 56 | web.HTTPError('206') 57 | return getcontentbyrange(ran2, t) 58 | else: 59 | web.HTTPError('400') 60 | return '400 Bad Request' 61 | -------------------------------------------------------------------------------- /webui/index.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import web, loadset, gopt, logincheck, gettemplate 17 | import sys 18 | 19 | 20 | ip = {} 21 | if len(sys.argv) > 1: 22 | ip = gopt(sys.argv[1:]) 23 | se = loadset() 24 | if se == -1 or se == -2: 25 | se = {} 26 | 27 | 28 | class index: 29 | def GET(self, *t): 30 | h = web.cookies().get('section') 31 | if logincheck(h): 32 | return '' 33 | web.header('Content-Type', 'text/html; charset=utf-8') 34 | ind = gettemplate('index') 35 | return ind(ip, se) 36 | -------------------------------------------------------------------------------- /webui/js.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import web, getEtag 17 | from os.path import exists 18 | 19 | 20 | class js: 21 | def GET(self, n): 22 | web.header('Content-Type', 'application/javascript; charset=utf-8') 23 | if exists(f'webuihtml/js/{n}'): 24 | et = web.ctx.env.get('HTTP_IF_NONE_MATCH') 25 | et2 = getEtag(f'webuihtml/js/{n}') 26 | if et == et2 and et2 is not None: 27 | web.HTTPError('304') 28 | t = '' 29 | else: 30 | web.header('Etag', et2) 31 | f = open(f'webuihtml/js/{n}', 'r', encoding='utf8') 32 | t = f.read() 33 | f.close() 34 | return t 35 | elif exists(f'webuihtml/js(origin)/{n}'): 36 | et = web.ctx.env.get('HTTP_IF_NONE_MATCH') 37 | et2 = getEtag(f'webuihtml/js(origin)/{n}') 38 | if et == et2 and et2 is not None: 39 | web.HTTPError('304') 40 | t = '' 41 | else: 42 | web.header('Etag', et2) 43 | f = open(f'webuihtml/js(origin)/{n}', 'r', encoding='utf8') 44 | t = f.read() 45 | f.close() 46 | return t 47 | elif exists(f'webuihtml/jso/{n}'): 48 | et = web.ctx.env.get('HTTP_IF_NONE_MATCH') 49 | et2 = getEtag(f'webuihtml/jso/{n}') 50 | if et == et2 and et2 is not None: 51 | web.HTTPError('304') 52 | t = '' 53 | else: 54 | web.header('Etag', et2) 55 | f = open(f'webuihtml/jso/{n}', 'r', encoding='utf8') 56 | t = f.read() 57 | f.close() 58 | return t 59 | else: 60 | web.notfound() 61 | return '' 62 | -------------------------------------------------------------------------------- /webui/json.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import web, getEtag 17 | from os.path import exists 18 | from json import dumps, loads 19 | 20 | 21 | class jsong: 22 | def GET(self, n): 23 | web.header('Content-Type', 'text/json; charset=utf-8') 24 | if exists(f'webuihtml/json/{n}'): 25 | et = web.ctx.env.get('HTTP_IF_NONE_MATCH') 26 | et2 = getEtag(f'webuihtml/json/{n}') 27 | if et == et2 and et2 is not None: 28 | web.HTTPError('304') 29 | t = '' 30 | else: 31 | web.header('Etag', et2) 32 | f = open(f'webuihtml/json/{n}', 'r', encoding='utf8') 33 | t = f.read() 34 | f.close() 35 | t = loads(t) 36 | t = dumps({'code': 0, 'result': t}, ensure_ascii=False) 37 | return t 38 | else: 39 | return dumps({'code': -404}) 40 | -------------------------------------------------------------------------------- /webui/loadsettings.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from json import loads, dumps 17 | from os.path import exists 18 | from os import remove 19 | 20 | 21 | def loadset(): 22 | "加载webui.json设置" 23 | try: 24 | obj = open('webui.json', mode='r') 25 | except: 26 | return -1 27 | try: 28 | obj.seek(0, 2) 29 | si = obj.tell() 30 | obj.seek(0, 0) 31 | s = obj.read(si) 32 | o = loads(s) 33 | except: 34 | return -2 35 | return o 36 | 37 | 38 | def getdfset(): 39 | "获取默认设置" 40 | o = {} 41 | o['s'] = '127.0.0.1' 42 | o['p'] = '8080' 43 | o['dclive'] = True 44 | return o 45 | 46 | 47 | def saveset(d: dict): 48 | "保存设置到webui.json" 49 | try: 50 | if exists('webui.json'): 51 | remove('webui.json') 52 | obj = open('webui.json', mode='w') 53 | except: 54 | return -1 55 | try: 56 | obj.write(dumps(d)) 57 | obj.close() 58 | except: 59 | return -2 60 | return 0 61 | -------------------------------------------------------------------------------- /webui/login.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import web, loadset, gopt, sect, pa, gettemplate 17 | import sys 18 | from json import dumps 19 | 20 | 21 | ip = {} 22 | if len(sys.argv) > 1: 23 | ip = gopt(sys.argv[1:]) 24 | se = loadset() 25 | if se == -1 or se == -2: 26 | se = {} 27 | 28 | 29 | class login: 30 | def GET(self, *t): 31 | web.header('Content-Type', 'text/html; charset=utf-8') 32 | log = gettemplate('login') 33 | return log(ip, se) 34 | 35 | def POST(self, *t): 36 | web.header('Content-Type', 'text/json; charset=utf-8') 37 | r = {} 38 | i = web.input() 39 | ip = web.ctx.get('ip') 40 | if 'p' in i and pa.pas: 41 | h = sect.login(i['p'], ip) 42 | if h is not None: 43 | web.setcookie('section', h, 3600 * 24 * 30, secure=pa.https, 44 | httponly=True, path='/', samesite="Strict") 45 | r['code'] = 0 46 | else: 47 | r['code'] = -1 48 | elif not pa.pas: 49 | r['code'] = -2 50 | else: 51 | r['code'] = -1 52 | return dumps(r) 53 | -------------------------------------------------------------------------------- /webui/page/__init__.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | # flake8: noqa 17 | from ..api.session import new_Session 18 | from ..api.apiclass import InvalidInputEroor 19 | from .extractor import extractor 20 | from .extractorlist import getextractorlist 21 | from .page import page 22 | -------------------------------------------------------------------------------- /webui/page/extractor.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import InvalidInputEroor, new_Session 17 | from regex import search, I 18 | from requests import Session 19 | 20 | 21 | class TooMuchRequestsError(Exception): 22 | def __init__(self, url: str): 23 | self.url = url 24 | Exception.__init__(self) 25 | 26 | 27 | class extractor: 28 | _VALID_URI = r'' 29 | _groupdict = {} 30 | _inp = "" 31 | _r: Session = None 32 | 33 | def __init__(self, inp: str): 34 | "对uri进行处理" 35 | re = search(self._VALID_URI, inp, I) 36 | if re is None: 37 | raise InvalidInputEroor() 38 | self._inp = inp 39 | self._groupdict = re.groupdict() 40 | self._r = new_Session() 41 | 42 | def _handle(self): 43 | "具体处理" 44 | return {'code': 0, 'type': 'unknown'} 45 | 46 | def _addcookies(self, vq: int = 125): 47 | "增加具体的cookies,vq为视频画质" 48 | self._r.cookies.set('CURRENT_QUALITY', str( 49 | vq), domain='.bilibili.com', path='/') 50 | self._r.cookies.set('CURRENT_FNVAL', '80', 51 | domain='.bilibili.com', path='/') 52 | self._r.cookies.set('laboratory', '1-1', 53 | domain='.bilibili.com', path='/') 54 | self._r.cookies.set('stardustvideo', '1', 55 | domain='.bilibili.com', path='/') 56 | -------------------------------------------------------------------------------- /webui/page/extractorlist.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | # flake8: noqa 17 | from . import extractor 18 | from typing import List 19 | from .normal import normal 20 | 21 | extractorl = [value for key, value in globals().items() if type(value) == type( 22 | extractor) and issubclass(value, extractor) and key != "extractor"] 23 | 24 | 25 | def getextractorlist() -> List[extractor]: 26 | return extractorl 27 | -------------------------------------------------------------------------------- /webui/pas.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from re import search, I 17 | 18 | 19 | class passw(): 20 | pas = False 21 | __password = "" 22 | https = False 23 | 24 | def setpassword(self, s: str): 25 | if search(r'[0-9A-F]{64}', s, I) is not None: 26 | self.__password = s 27 | return 0 28 | else: 29 | return -1 30 | 31 | def password(self): 32 | return self.__password 33 | -------------------------------------------------------------------------------- /webui/section2.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import pa, sect, web, urlencode 17 | 18 | 19 | def logincheck(h: str): 20 | "检查是否登录(返回302)" 21 | if pa.pas: 22 | read = sect.check(h) 23 | if not read: 24 | web.HTTPError('302', {'Location': "/login?" + urlencode( 25 | {"p": web.ctx.get('homepath') + web.ctx.get('fullpath')})}) 26 | return True 27 | return False 28 | 29 | 30 | def apilogincheck(h: str): 31 | "检查是否登录(啥都不返回)" 32 | if pa.pas: 33 | read = sect.check(h) 34 | if not read: 35 | return True 36 | return False 37 | 38 | 39 | def logincheck2(h: str): 40 | "检查是否登录(返回403)" 41 | if pa.pas: 42 | read = sect.check(h) 43 | if not read: 44 | web.HTTPError('403') 45 | return True 46 | return False 47 | -------------------------------------------------------------------------------- /webui/settings.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from . import web, loadset, getdfset, saveset, gopt, logincheck, apilogincheck, gettemplate 17 | from lang import lan 18 | from json import dumps, loads 19 | import sys 20 | from JSONParser import loadset as loadset2 21 | from JSONParser import saveset as saveset2 22 | from JSONParser import getDefalutSettings 23 | 24 | 25 | ip = {} 26 | if len(sys.argv) > 1: 27 | ip = gopt(sys.argv[1:]) 28 | 29 | 30 | class setting: 31 | def GET(self, *t): 32 | h = web.cookies().get('section') 33 | if logincheck(h): 34 | return '' 35 | se = loadset() 36 | if se == -1 or se == -2: 37 | se = {} 38 | se2 = loadset2() 39 | if se2 == -1 or se2 == -2: 40 | se2 = {} 41 | web.header('Content-Type', 'text/html; charset=utf-8') 42 | sett = gettemplate('settings') 43 | return sett(t[1], lan, se, getdfset(), ip, se2, getDefalutSettings()) 44 | 45 | def POST(self, *t): 46 | web.header('Content-Type', 'text/json; charset=utf-8') 47 | h = web.cookies().get('section') 48 | if apilogincheck(h): 49 | return dumps({'code': '-403'}) 50 | r = {} 51 | i = web.input() 52 | if 'type' in i and 'data' in i and int(i['type']) == 1: 53 | i2 = loads(i['data']) 54 | se = loadset() 55 | if se == -1 or se == -2: 56 | se = {} 57 | if 'pas' in se and 'pas' in i2 and i2['pas'] == 'c': 58 | i2['pas'] = se['pas'] 59 | re = saveset(i2) 60 | r['code'] = re 61 | elif 'type' in i and 'data' in i and int(i['type']) == 2: 62 | i2 = loads(i['data']) 63 | if 'lan' in i2 and i2['lan'] not in lan: 64 | del i2['lan'] 65 | re = saveset2(i2) 66 | r['code'] = re 67 | else: 68 | r['code'] = '-404' 69 | return dumps(r) 70 | -------------------------------------------------------------------------------- /webui/template.py: -------------------------------------------------------------------------------- 1 | # (C) 2019-2020 lifegpc 2 | # This file is part of bili. 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as published 6 | # by the Free Software Foundation, either version 3 of the License, or 7 | # (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | from web.template import Template 17 | 18 | 19 | def gettemplate(s: str) -> Template: 20 | f = open(f"webuihtml/{s}.html", 'r', encoding='utf8') 21 | t = Template(f.read()) 22 | f.close() 23 | return t 24 | -------------------------------------------------------------------------------- /webuihtml/HTTP404.html: -------------------------------------------------------------------------------- 1 | $def with (ip, se) 2 | $code: 3 | urlencode = __import__('webui').urlencode 4 | match = __import__('re').match 5 | def gets(s): 6 | t=None 7 | if s in se:t=se[s] 8 | if s in ip:t=ip[s] 9 | return t 10 | def getfonturl(s): 11 | if match(r'^https?:/{2}\w.+$', s): 12 | return s 13 | else: 14 | return '/font?' + urlencode({'l':s}) 15 | 16 | 17 | 18 | 19 | bili WEB用户界面 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | $ fontname=gets('uifont') 29 | $if fontname is not None: 30 | 31 | $if 'uifontloc' in se: 32 | 33 | 34 | 35 | 36 | 404 Not Found 37 |
38 | 回到首页 39 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /webuihtml/css/about.css: -------------------------------------------------------------------------------- 1 | .about { 2 | text-align: center; 3 | } 4 | 5 | .about * a { 6 | text-decoration: none; 7 | color: #0366d6; 8 | } 9 | 10 | .about div a { 11 | color: pink; 12 | } 13 | 14 | .about div a:hover { 15 | color: #0366d6; 16 | } 17 | 18 | #third { 19 | position: absolute; 20 | padding-bottom: 10px; 21 | } 22 | 23 | #third * td { 24 | text-align: center; 25 | padding-left: 10px; 26 | padding-right: 10px; 27 | border-right: 1px dashed; 28 | border-bottom: 1px dashed; 29 | } 30 | 31 | #third * td.first { 32 | border-left: 1px dashed; 33 | } 34 | 35 | #third thead * td { 36 | border-top: 1px dashed; 37 | } 38 | 39 | #third * a:hover { 40 | color: pink; 41 | } 42 | -------------------------------------------------------------------------------- /webuihtml/css/dealwithcapcha.css: -------------------------------------------------------------------------------- 1 | #main { 2 | position: absolute; 3 | width: 99%; 4 | text-align: center; 5 | } 6 | 7 | #main label { 8 | font-size: 30px; 9 | } 10 | -------------------------------------------------------------------------------- /webuihtml/css/display.css: -------------------------------------------------------------------------------- 1 | .hide { 2 | display: none !important; 3 | } 4 | -------------------------------------------------------------------------------- /webuihtml/css/footer.css: -------------------------------------------------------------------------------- 1 | .footer { 2 | display: inline-block; 3 | position: absolute; 4 | bottom: 0; 5 | left: 0; 6 | width: 100%; 7 | text-align: center; 8 | } 9 | 10 | .footer div { 11 | display: inline-block; 12 | padding-left: 10px; 13 | padding-right: 10px; 14 | } 15 | 16 | .footer * a { 17 | color: #0366d6; 18 | text-decoration: none; 19 | } 20 | -------------------------------------------------------------------------------- /webuihtml/css/form.css: -------------------------------------------------------------------------------- 1 | form.form { 2 | margin-top: 10px; 3 | } 4 | 5 | input.form, input.form2 { 6 | width: max-content; 7 | min-width: 300px; 8 | } 9 | 10 | input.form.checkt, input.form.check { 11 | min-width: unset; 12 | } 13 | 14 | button.form#submit { 15 | margin-top: 10px; 16 | position: absolute; 17 | right: 10%; 18 | margin-bottom: 10px; 19 | } 20 | -------------------------------------------------------------------------------- /webuihtml/css/index.css: -------------------------------------------------------------------------------- 1 | #main { 2 | position: absolute; 3 | width: 99%; 4 | text-align: center; 5 | } 6 | 7 | #main input { 8 | width: 80%; 9 | text-align: center; 10 | color: gray; 11 | } 12 | -------------------------------------------------------------------------------- /webuihtml/css/login.css: -------------------------------------------------------------------------------- 1 | body { 2 | text-align: center; 3 | } 4 | 5 | #main { 6 | position: absolute; 7 | width: 99%; 8 | } 9 | 10 | #submit { 11 | margin-top: 10px; 12 | position: absolute; 13 | right: 10%; 14 | } 15 | 16 | #captimg { 17 | width: 200px; 18 | height: 50px; 19 | } 20 | 21 | #qrcimg { 22 | width: 140px; 23 | height: 140px; 24 | } 25 | -------------------------------------------------------------------------------- /webuihtml/css/page.css: -------------------------------------------------------------------------------- 1 | .e500 { 2 | text-align: center; 3 | font-size: 20px; 4 | } 5 | 6 | .e404, .e1 { 7 | text-align: center; 8 | font-size: 30px; 9 | } 10 | 11 | #main { 12 | position: absolute; 13 | min-width: 100%; 14 | } 15 | 16 | #main .videoinfo { 17 | margin-top: 10px; 18 | border: 1px dashed; 19 | min-width: 90%; 20 | padding-left: 5%; 21 | padding-right: 5%; 22 | } 23 | 24 | #main .videoinfo * a { 25 | color: #0366d6; 26 | text-decoration: none; 27 | } 28 | 29 | #main .videoinfo * a:hover { 30 | color: pink; 31 | } 32 | 33 | #main .videoinfo h1 { 34 | text-align: center; 35 | } 36 | 37 | #main * .flex { 38 | display: flex; 39 | } 40 | 41 | #main * .flex div { 42 | padding-right: 10px; 43 | min-width: 33%; 44 | } 45 | 46 | #main .pagelist { 47 | border: 1px dashed; 48 | min-width: 100%; 49 | margin-top: 10px; 50 | } 51 | 52 | .pagelist * td { 53 | border-right: 1px dashed; 54 | border-bottom: 1px dashed; 55 | white-space: nowrap; 56 | } 57 | 58 | .pagelist * td.last { 59 | border-right: none; 60 | } 61 | 62 | .pagelist * tr.last td { 63 | border-bottom: none; 64 | } 65 | 66 | .videoinfo * img:hover { 67 | cursor: zoom-in; 68 | } 69 | 70 | #main .toolbar { 71 | position: fixed; 72 | width: 100%; 73 | z-index: 1; 74 | height: 40px; 75 | background-color: #0bf7ffee; 76 | left: 0; 77 | bottom: 0; 78 | overflow: auto; 79 | } 80 | -------------------------------------------------------------------------------- /webuihtml/css/topmenu.css: -------------------------------------------------------------------------------- 1 | .topmenu * { 2 | display: inline-block; 3 | width: max-content; 4 | min-width: 15%; 5 | height: min-content; 6 | text-align: center; 7 | font-size: 20px; 8 | text-decoration: none; 9 | } 10 | 11 | .topmenu div { 12 | background-color: #00000022; 13 | } 14 | 15 | .topmenu div.select { 16 | background-color: #00000066; 17 | } 18 | 19 | .topmenu div:hover { 20 | background-color: #00000044; 21 | } 22 | 23 | .topmenu * a { 24 | width: 100%; 25 | color: black; 26 | } 27 | 28 | .topmenu * a:hover { 29 | color: red; 30 | } 31 | 32 | .topmenu { 33 | padding-bottom: 10px; 34 | border-bottom: solid; 35 | padding-top: 10px; 36 | } 37 | 38 | .topmenu.first { 39 | padding-top: initial; 40 | } 41 | -------------------------------------------------------------------------------- /webuihtml/css/video.css: -------------------------------------------------------------------------------- 1 | #n * a { 2 | color: #0366d6; 3 | text-decoration: none; 4 | } 5 | -------------------------------------------------------------------------------- /webuihtml/dealwithcapcha.html: -------------------------------------------------------------------------------- 1 | $def with (ip, se) 2 | $code: 3 | urlencode = __import__('webui').urlencode 4 | match = __import__('re').match 5 | def gets(s): 6 | t=None 7 | if s in se:t=se[s] 8 | if s in ip:t=ip[s] 9 | return t 10 | def getfonturl(s): 11 | if match(r'^https?:/{2}\w.+$', s): 12 | return s 13 | else: 14 | return '/font?' + urlencode({'l':s}) 15 | 16 | 17 | 18 | 19 | bili WEB用户界面 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | $ fontname=gets('uifont') 32 | $if fontname is not None: 33 | 34 | $if 'uifontloc' in se: 35 | 36 | 37 | 38 | 39 |
40 | 41 | 42 | 43 |
44 |
45 |
46 |
47 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /webuihtml/index.html: -------------------------------------------------------------------------------- 1 | $def with (ip, se) 2 | $code: 3 | urlencode = __import__('webui').urlencode 4 | match = __import__('re').match 5 | def gets(s): 6 | t=None 7 | if s in se:t=se[s] 8 | if s in ip:t=ip[s] 9 | return t 10 | def getfonturl(s): 11 | if match(r'^https?:/{2}\w.+$', s): 12 | return s 13 | else: 14 | return '/font?' + urlencode({'l':s}) 15 | 16 | 17 | 18 | 19 | bili WEB用户界面 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | $ fontname=gets('uifont') 32 | $if fontname is not None: 33 | 34 | $if 'uifontloc' in se: 35 | 36 | 37 | 38 | 39 |
40 | 41 | 42 | 43 |
44 |
45 | 46 |
47 | 48 |
49 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /webuihtml/js(origin)/about.js: -------------------------------------------------------------------------------- 1 | /* (C) 2019-2020 lifegpc 2 | This file is part of bili. 3 | 4 | This program is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Affero General Public License as published 6 | by the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Affero General Public License for more details. 13 | 14 | You should have received a copy of the GNU Affero General Public License 15 | along with this program. If not, see . */ 16 | (() => { 17 | /**@type {HTMLStyleElement}*/ 18 | var sty = null; 19 | /**@type {HTMLTableElement}*/ 20 | var table = null; 21 | function tablechange() { 22 | if (sty == null) { 23 | sty = document.createElement('style'); 24 | document.head.append(sty); 25 | } 26 | if (table == null) { 27 | table = document.getElementById('third'); 28 | if (table == null) return; 29 | } 30 | var w_width = window.innerWidth; 31 | var t_width = table.scrollWidth; 32 | if (t_width > w_width) sty.innerText = ""; 33 | else { 34 | var left = (w_width - t_width) / 2; 35 | sty.innerText = "#third{left:" + left + "px;}"; 36 | } 37 | } 38 | window.addEventListener('load', () => { 39 | tablechange(); 40 | var timeout = () => { 41 | tablechange(); 42 | setTimeout(timeout, 2000); 43 | } 44 | setTimeout(timeout, 2000); 45 | }) 46 | window.addEventListener('resize', tablechange) 47 | })(); 48 | window.addEventListener('load', () => { 49 | /**@type {HTMLTableElement}*/ 50 | var table = document.getElementById('third'); 51 | var le = table.tBodies.length; 52 | for (var i = 0; i <= le; i++) { 53 | var tbody = null; 54 | if(i==le)tbody = table.tHead; 55 | else tbody = table.tBodies[i]; 56 | for (var j = 0; j < tbody.rows.length; j++) { 57 | var row = tbody.rows[j]; 58 | if (row.cells.length > 0) { 59 | var cell = row.cells[0]; 60 | cell.classList.add(['first']); 61 | } 62 | } 63 | } 64 | }) 65 | -------------------------------------------------------------------------------- /webuihtml/js(origin)/dealwithcapcha.js: -------------------------------------------------------------------------------- 1 | /* (C) 2019-2020 lifegpc 2 | This file is part of bili. 3 | 4 | This program is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Affero General Public License as published 6 | by the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Affero General Public License for more details. 13 | 14 | You should have received a copy of the GNU Affero General Public License 15 | along with this program. If not, see . */ 16 | window.addEventListener('load', () => { 17 | /**@type {HTMLStyleElement}*/ 18 | var sty = null; 19 | /**@type {HTMLDivElement}*/ 20 | var main = null; 21 | function mainchange() { 22 | if (sty == null) { 23 | sty = document.createElement('style'); 24 | document.head.append(sty); 25 | } 26 | if (main == null) { 27 | main = document.getElementById('main'); 28 | if (main == null) return; 29 | } 30 | var w_height = window.innerHeight; 31 | var m_height = main.scrollHeight; 32 | var m_width = main.scrollWidth; 33 | if (w_height <= m_height) { 34 | sty.innerText = ""; 35 | } 36 | else { 37 | var top = (w_height - m_height) / 2; 38 | sty.innerText = "#main{top:" + top + "px;}" 39 | } 40 | if (m_width <= 640) { 41 | sty.innerText += "#main input{width:95%;}" 42 | } 43 | } 44 | window.addEventListener('resize', mainchange); 45 | mainchange(); 46 | var timeout = () => { 47 | mainchange(); 48 | setTimeout(timeout, 2000); 49 | } 50 | setTimeout(timeout, 2000); 51 | }) 52 | -------------------------------------------------------------------------------- /webuihtml/js(origin)/footer.js: -------------------------------------------------------------------------------- 1 | /* (C) 2019-2020 lifegpc 2 | This file is part of bili. 3 | 4 | This program is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Affero General Public License as published 6 | by the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Affero General Public License for more details. 13 | 14 | You should have received a copy of the GNU Affero General Public License 15 | along with this program. If not, see . */ 16 | (() => { 17 | function calabselement() { 18 | var absc = document.getElementsByClassName('abs'); 19 | var height = 0; 20 | for (var i = 0; i < absc.length; i++) { 21 | height += absc[i].scrollHeight; 22 | } 23 | return height; 24 | } 25 | /**@type {HTMLStyleElement}*/ 26 | var sty = null; 27 | function footerchange() { 28 | if (sty == null) { 29 | sty = document.createElement('style'); 30 | document.head.append(sty); 31 | } 32 | if (sty.hasAttribute('top')) { 33 | sty.innerText = ".footer{display:none;top:" + sty.getAttribute('top') + "px;}" 34 | } 35 | else { 36 | sty.innerText = ".footer{display:none;}" 37 | } 38 | var w_height = window.innerHeight; 39 | var b_height = document.body.scrollHeight; 40 | var abs_height = calabselement(); 41 | if ((b_height + abs_height) > w_height) { 42 | sty.innerText = ".footer{top:" + (b_height + abs_height + 20) + "px;padding-boto}" 43 | sty.setAttribute('top', b_height); 44 | } 45 | else { 46 | sty.innerText = ""; 47 | sty.removeAttribute('top'); 48 | } 49 | } 50 | window.addEventListener('load', () => { 51 | footerchange(); 52 | var timeout = () => { 53 | footerchange(); 54 | setTimeout(timeout, 2000); 55 | } 56 | setTimeout(timeout, 2000); 57 | }) 58 | window.addEventListener('resize', footerchange) 59 | })(); 60 | -------------------------------------------------------------------------------- /webuihtml/js(origin)/prototype.js: -------------------------------------------------------------------------------- 1 | /* (C) 2019-2020 lifegpc 2 | This file is part of bili. 3 | 4 | This program is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU Affero General Public License as published 6 | by the Free Software Foundation, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU Affero General Public License for more details. 13 | 14 | You should have received a copy of the GNU Affero General Public License 15 | along with this program. If not, see . */ 16 | /**查找列表中是否存在某个值*/ 17 | DOMTokenList.prototype.has = function (s) { 18 | for (var i = 0; i < this.length; i++) { 19 | var t = this[i]; 20 | if (s == t) return true; 21 | } 22 | return false; 23 | } 24 | /**Date格式化 */ 25 | Date.prototype.format = function (fmt) { 26 | var o = { 27 | "M+": this.getMonth() + 1, //月份 28 | "d+": this.getDate(), //日 29 | "h+": this.getHours(), //小时 30 | "m+": this.getMinutes(), //分 31 | "s+": this.getSeconds(), //秒 32 | "q+": Math.floor((this.getMonth() + 3) / 3), //季度 33 | "S": this.getMilliseconds() //毫秒 34 | }; 35 | if (/(y+)/.test(fmt)) { 36 | fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); 37 | } 38 | for (var k in o) { 39 | if (new RegExp("(" + k + ")").test(fmt)) { 40 | fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); 41 | } 42 | } 43 | return fmt; 44 | } 45 | -------------------------------------------------------------------------------- /webuihtml/login.html: -------------------------------------------------------------------------------- 1 | $def with (ip, se) 2 | $code: 3 | urlencode = __import__('webui').urlencode 4 | match = __import__('re').match 5 | def gets(s): 6 | t=None 7 | if s in se:t=se[s] 8 | if s in ip:t=ip[s] 9 | return t 10 | def getfonturl(s): 11 | if match(r'^https?:/{2}\w.+$', s): 12 | return s 13 | else: 14 | return '/font?' + urlencode({'l':s}) 15 | 16 | 17 | 18 | 19 | bili WEB用户界面 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | $ fontname=gets('uifont') 32 | $if fontname is not None: 33 | 34 | $if 'uifontloc' in se: 35 | 36 | 37 | 38 | 39 | 40 |
41 |

您需要登录才能访问。

42 |
43 | 44 | 45 |
46 |
47 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /webuihtml/page.html: -------------------------------------------------------------------------------- 1 | $def with (ip, se, r) 2 | $code: 3 | urlencode = __import__('webui').urlencode 4 | match = __import__('re').match 5 | def gets(s): 6 | t=None 7 | if s in se:t=se[s] 8 | if s in ip:t=ip[s] 9 | return t 10 | def getfonturl(s): 11 | if match(r'^https?:/{2}\w.+$', s): 12 | return s 13 | else: 14 | return '/font?' + urlencode({'l':s}) 15 | 16 | 17 | 18 | 19 | bili WEB用户界面 20 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | $ fontname=gets('uifont') 37 | $if fontname is not None: 38 | 39 | $if 'uifontloc' in se: 40 | 41 | 42 | 43 | 44 |
45 | 46 | 47 | 48 |
49 |
50 | 55 | 56 | 57 | 58 | --------------------------------------------------------------------------------