Repository: KurtBestor/Hitomi-Downloader Branch: master Commit: d46e53ea3bde Files: 113 Total size: 1.2 MB Directory structure: gitextract_gsyu7ov9/ ├── .github/ │ └── stale.yml ├── .gitignore ├── FUNDING.yml ├── README.md ├── push_^q^.bat ├── src/ │ └── extractor/ │ ├── _4chan_downloader.py │ ├── afreeca_downloader.py │ ├── artstation_downloader.py │ ├── asmhentai_downloader.py │ ├── avgle_downloader.py │ ├── baraag_downloader.py │ ├── bcy_downloader.py │ ├── bdsmlr_downloader.py │ ├── bili_downloader.py │ ├── coub_downloader.py │ ├── danbooru_downloader.py │ ├── discord_emoji_downloader.py │ ├── etc_downloader.py │ ├── fc2_downloader.py │ ├── file_downloader.py │ ├── flickr_downloader.py │ ├── gelbooru_downloader.py │ ├── hameln_downloader.py │ ├── hanime_downloader.py │ ├── hentaicosplay_downloader.py │ ├── hf_downloader.py │ ├── imgur_downloader.py │ ├── iwara_downloader.py │ ├── jmana_downloader.py │ ├── kakaotv_downloader.py │ ├── kakuyomu_downloader.py │ ├── kissjav_downloader.py │ ├── lhscan_downloader.py │ ├── luscious_downloader.py │ ├── m3u8_downloader.py │ ├── manatoki_downloader.py │ ├── mastodon_downloader.py │ ├── misskey_downloader.py │ ├── mrm_downloader.py │ ├── naver_downloader.py │ ├── navercafe_downloader.py │ ├── naverpost_downloader.py │ ├── navertoon_downloader.py │ ├── navertv_downloader.py │ ├── newgrounds_downloader.py │ ├── nhentai_com_downloader.py │ ├── nhentai_downloader.py │ ├── nico_downloader.py │ ├── nijie_downloader.py │ ├── nozomi_downloader.py │ ├── pawoo_downloader.py │ ├── pinter_downloader.py │ ├── pixiv_downloader.py │ ├── pornhub_downloader.py │ ├── rule34_xxx_downloader.py │ ├── sankaku_downloader.py │ ├── soundcloud_downloader.py │ ├── syosetu_downloader.py │ ├── talk_op_gg_downloader.py │ ├── tiktok_downloader.py │ ├── tokyomotion_downloader.py │ ├── torrent_downloader.py │ ├── tumblr_downloader.py │ ├── twitch_downloader.py │ ├── v2ph_downloader.py │ ├── vimeo_downloader.py │ ├── wayback_machine_downloader.py │ ├── webtoon_downloader.py │ ├── weibo_downloader.py │ ├── wikiart_downloader.py │ ├── xhamster_downloader.py │ ├── xnxx_downloader.py │ ├── xvideo_downloader.py │ ├── yandere_downloader.py │ ├── youku_downloader.py │ ├── youporn_downloader.py │ └── youtube_downloader.py └── translation/ ├── changelog_en.txt ├── changelog_ko.txt ├── help_en.html ├── help_ja.html ├── help_ko.html ├── help_pl.html ├── help_ru.html ├── help_si.html ├── help_zh.html ├── qt_ar.json ├── qt_es.json ├── qt_fr.json ├── qt_ja.json ├── qt_ko.json ├── qt_pl.json ├── qt_pt.json ├── qt_ru.json ├── qt_si.json ├── qt_tr.json ├── qt_vi.json ├── qt_zh-TW.json ├── qt_zh.json ├── tr_ar.hdl ├── tr_en.hdl ├── tr_es.hdl ├── tr_fr.hdl ├── tr_ja.hdl ├── tr_ko.hdl ├── tr_pl.hdl ├── tr_pt.hdl ├── tr_ru.hdl ├── tr_si.hdl ├── tr_tr.hdl ├── tr_vi.hdl ├── tr_zh-TW.hdl └── tr_zh.hdl ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/stale.yml ================================================ # Configuration for probot-stale - https://github.com/probot/stale # Number of days of inactivity before an Issue or Pull Request becomes stale daysUntilStale: 90 # Number of days of inactivity before a stale Issue or Pull Request is closed daysUntilClose: 30 # Issues or Pull Requests with these labels will never be considered stale exemptLabels: - help wanted - notice # Label to use when marking as stale staleLabel: stale # Comment to post when marking as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed after 30 days if no further activity occurs, but feel free to re-open a closed issue if needed. ================================================ FILE: .gitignore ================================================ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover .hypothesis/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py # dotenv .env # virtualenv .venv venv/ ENV/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ # etc #*.bat call cmd.bat ================================================ FILE: FUNDING.yml ================================================ patreon: KurtBestor ================================================ FILE: README.md ================================================


[![GitHub release](https://img.shields.io/github/release/KurtBestor/Hitomi-Downloader.svg?logo=github)](https://github.com/KurtBestor/Hitomi-Downloader/releases/latest) [![GitHub downloads](https://img.shields.io/github/downloads/KurtBestor/Hitomi-Downloader/latest/total.svg?logo=github)](https://github.com/KurtBestor/Hitomi-Downloader/releases/latest) [![GitHub downloads](https://img.shields.io/github/downloads/KurtBestor/Hitomi-Downloader/total.svg?logo=github)](https://github.com/KurtBestor/Hitomi-Downloader/releases) ## Links - [Download](https://github.com/KurtBestor/Hitomi-Downloader/releases/latest) - [Issues](https://github.com/KurtBestor/Hitomi-Downloader/issues) - [Scripts & Plugins](https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts-&-Plugins) - [Chrome Extension](https://github.com/KurtBestor/Hitomi-Downloader/wiki/Chrome-Extension) ## Demo ## Features - 🍰 Simple and clear user interface - 🚀 Download acceleration - 💻 Supports 24 threads in a single task - 🚥 Supports speed limit - 📜 Supports user scripts - 🧲 Supports BitTorrent & Magnet - 🎞️ Supports M3U8 & MPD format videos - 🌙 Dark mode - 🧳 Portable - 📋 Clipboard monitor - 🗃️ Easy to organize tasks ## Supported Sites | Site | URL | | :--: | -- | | **4chan** | | | **AfreecaTV** | | | **ArtStation** | | | **baraag.net** | | | **bilibili** | | | **ComicWalker** | | | **Coub** | | | **DeviantArt** | | | **Facebook** | | | **FC2 Video** | | | **Flickr** | | | **Hameln** | | | **Imgur** | | | **Instagram** | | | **カクヨム** | | | **Mastodon** | | | **Misskey** | | | **Naver Blog** | | | **Naver Cafe** | | | **Naver Post** | | | **Naver Webtoon** | | | **Naver TV** | | | **Niconico** | | | **Pawoo** | | | **Pinterest** | | | **Pixiv** | | | **pixivコミック** | | | **Soundcloud** | | | **小説家になろう** | | | **TikTok** |
| | **Tumblr** | | | **Twitch** | | | **Twitter** | | | **Vimeo** | | | **Wayback Machine** | | | **Weibo** | | | **WikiArt** | | | **Youku** | | | **YouTube** | | | **and more...** | [Supported sites by yt-dlp](https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md) | ================================================ FILE: push_^q^.bat ================================================ @echo off git add . git commit -m "^q^" git push echo Done! pause>nul ================================================ FILE: src/extractor/_4chan_downloader.py ================================================ import downloader from utils import Downloader, File, clean_title, urljoin, get_ext, limits import utils class File_4chan(File): type = '4chan' format = 'page:04;' @limits(.5) def get(self): return {} class Downloader_4chan(Downloader): type = '4chan' URLS = [r'regex:boards.(4chan|4channel).org'] MAX_CORE = 4 display_name = '4chan' ACCEPT_COOKIES = [r'(.*\.)?(4chan|4channel)\.org'] @classmethod def fix_url(cls, url): return url.split('#')[0] def read(self): soup = downloader.read_soup(self.url) for div in soup.findAll('div', class_='fileText'): href = urljoin(self.url, div.a['href']) d = { 'page': len(self.urls), } file = File_4chan({'url': href, 'referer': self.url, 'name': utils.format('4chan', d, get_ext(href))}) self.urls.append(file) board = self.url.split('/')[3] title = soup.find('span', class_='subject').text id_ = int(self.url.split('/thread/')[1].split('/')[0]) self.title = clean_title(f'[{board}] {title} ({id_})') ================================================ FILE: src/extractor/afreeca_downloader.py ================================================ import downloader from utils import Soup, Downloader, Session, try_n, format_filename, cut_pair, File, get_print, print_error, json import ree as re from io import BytesIO from m3u8_tools import playlist2stream, M3u8_stream import errors import utils import os import dateutil.parser class LoginRequired(errors.LoginRequired): def __init__(self, *args): super().__init__(*args, method='browser', url='https://login.sooplive.co.kr/afreeca/login.php') class Downloader_afreeca(Downloader): type = 'afreeca' URLS = ['afreecatv.com', 'sooplive.co.kr'] single = True display_name = 'SOOP' ACCEPT_COOKIES = [r'(.*\.)?afreecatv\.com', r'(.*\.)?sooplive\.co\.kr'] def init(self): self.session = Session() @classmethod def fix_url(cls, url): if Live_afreeca.is_live(url): url = Live_afreeca.fix_url(url) return url.rstrip(' /') def read(self): video = Video({'referer': self.url}) video.ready(self.cw) self.urls.append(video) thumb = BytesIO() downloader.download(video['url_thumb'], buffer=thumb) self.setIcon(thumb) self.title = os.path.splitext(video['name'])[0].replace(':', ':') self.artist = video['artist'] if video['live']: d = {} d['url'] = self.url d['title'] = self.artist d['thumb'] = thumb.getvalue() utils.update_live(d, self.cw) @try_n(4) def _get_stream(url_m3u8, session, referer, cw=None): print_ = get_print(cw) print_(f'_get_stream: {url_m3u8}') try: stream = playlist2stream(url_m3u8, referer=referer, session=session) except Exception as e: print_(print_error(e)) stream = M3u8_stream(url_m3u8, referer=referer, session=session) return stream class Video(File): type = 'afreeca' _live_info = None def get(self): print_ = get_print(self.cw) url, session = self['referer'], self.session if session is None: session = Session() session.purge('afreeca') html = downloader.read_html(url, session=session) if "document.location.href='https://login." in html: raise LoginRequired() if len(html) < 2000: alert = re.find(r'''alert\(['"](.+?)['"]\)''', html) if alert: raise LoginRequired(alert) soup = Soup(html) date = None url_thumb = soup.find('meta', {'property': 'og:image'}).attrs['content'] print_('url_thumb: {}'.format(url_thumb)) vid = re.find('/player/([0-9]+)', url) if vid is None: # live bid = re.find('sooplive.co.kr/([^/]+)', url, err='no bid') url_api = f'https://st.sooplive.co.kr/api/get_station_status.php?szBjId={bid}' r = session.post(url_api, headers={'Referer': url}) d = json.loads(r.text) artist = d['DATA']['user_nick'] if self._live_info is not None: self._live_info['title'] = artist url_api = f'https://live.sooplive.co.kr/afreeca/player_live_api.php?bjid={bid}' #bno = re.find('sooplive.co.kr/[^/]+/([0-9]+)', url, err='no bno') bno = re.find(r'nBroadNo\s=\s([0-9]+)', html, err='no bno') #6915 r = session.post(url_api, data={'bid': bid, 'bno': bno, 'type': 'aid', 'pwd': '', 'player_type': 'html5', 'stream_type': 'common', 'quality': 'master', 'mode': 'landing', 'from_api': '0'}, headers={'Referer': url}) d = json.loads(r.text) res = d['CHANNEL'].get('RESULT') print_(f'result: {res}') if res == -6: raise LoginRequired() aid = d['CHANNEL']['AID'] data = {} data['title'] = soup.find('meta', {'property': 'og:title'})['content'].strip() data['files'] = [{'file': f'https://pc-web.stream.sooplive.co.kr/live-stm-16/auth_master_playlist.m3u8?aid={aid}'}] data['writer_nick'] = artist data['live'] = True elif f'{vid}/catch' in url: #6215 url_api = 'https://api.m.sooplive.co.kr/station/video/a/catchview' r = session.post(url_api, data={'nPageNo': '1', 'nLimit': '10', 'nTitleNo': vid}, headers={'Referer': url}) try: s = cut_pair(r.text) d = json.loads(s) except Exception as e: print_(r.text) raise e data = d['data'][0] date = dateutil.parser.parse(data['reg_date']) #7054 else: url_api = 'https://api.m.sooplive.co.kr/station/video/a/view' r = session.post(url_api, data={'nTitleNo': vid, 'nApiLevel': '10', 'nPlaylistIdx': '0'}, headers={'Referer': url}) try: s = cut_pair(r.text) d = json.loads(s) except Exception as e: print_(r.text) raise e data = d['data'] date = dateutil.parser.parse(data.get('broad_start') or data['write_tm']) #7054, #7093 title = data.get('full_title') or data['title'] artist = data.get('copyright_nickname') or data.get('original_user_nick') or data['writer_nick'] if data.get('adult_status') == 'notLogin': raise LoginRequired(title) urls_m3u8 = [] for file in data['files']: if file.get('quality_info'): file = file['quality_info'][0]['file'] else: file = file['file'] urls_m3u8.append(file) print_(f'urls_m3u8: {len(urls_m3u8)}') if data.get('live'): stream = playlist2stream(urls_m3u8[0], url, session=session) #6934 if stream.ms: stream = stream.live stream._cw = self.cw if not stream.live: stream.live = True# else: streams = [] for url_m3u8 in urls_m3u8: try: stream = _get_stream(url_m3u8, session, url, cw=self.cw) except Exception as e: print_(print_error(e)) continue #2193 streams.append(stream) for stream in streams[1:]: streams[0] += stream stream = streams[0] stream.live = None# live = data.get('live') or False return {'url': stream, 'title': title, 'name': format_filename(title, vid, '.mp4', artist=artist, live=live, date=date), 'url_thumb': url_thumb, 'artist': artist, 'live': live} class Live_afreeca(utils.Live): type = 'afreeca' @classmethod def is_live(cls, url): return bool(re.match(r'https?://(play|bj|ch).(afreecatv.com|sooplive.co.kr)/([^/?#]+)', url)) and url.strip('/').count('/') <= 4 @classmethod def fix_url(cls, url): bj = re.find(r'https?://(play|bj|ch).(afreecatv.com|sooplive.co.kr)/([^/?#]+)', url)[2] return f'https://play.sooplive.co.kr/{bj}' @classmethod def check_live(cls, url, info=None): try: video = Video({'referer': url}) video._live_info = info video.ready(None) return True except Exception as e: print(e) return False ================================================ FILE: src/extractor/artstation_downloader.py ================================================ #coding:utf8 import downloader from error_printer import print_error from translator import tr_ from utils import Downloader, Soup, get_print, lazy, Session, try_n, File, clean_title, check_alive, get_ext, get_max_range import dateutil.parser import utils class File_artstation(File): type = 'artstation' format = '[date] name_ppage' c_alter = 0 def alter(self): #6401 self.c_alter += 1 if self.c_alter % 2 == 0: url = self['url'] else: url = self['url'].replace('/4k/', '/large/') return url class Downloader_artstation(Downloader): type = 'artstation' URLS = ['artstation.com'] display_name = 'ArtStation' ACCEPT_COOKIES = [r'(.*\.)?artstation\.(com|co)'] url_main = None @try_n(8) def init(self): # 3849 self.session = Session() import clf2 clf2.solve(self.url, self.session, self.cw) _ = self._id.replace('artstation_', '', 1) self.url_main = f'https://www.artstation.com/{_}' if '/artwork/' in self.url or '/projects/' in self.url: pass else: self.url = self.url_main self.print_(self.url) @classmethod def fix_url(cls, url): #6516 if '.artstation.com' in url: sub = url.split('.artstation.com')[0].split('/')[-1] if sub != 'www': url = f'https://www.artstation.com/{sub}' return url @lazy def _id(self): _id = get_id(self.url, self.cw) return f'artstation_{_id}' @lazy @try_n(2) def name(self): soup = downloader.read_soup(self.url_main, session=self.session) name = soup.find('meta', {'property': 'og:title'}).attrs['content'] return clean_title(f'{name} ({self._id})') def read(self): self.title = self.name id_ = self._id.replace('artstation_', '', 1) if '/' in id_: id_ = id_.split('/')[0] if '/artwork/' in self.url or '/projects/' in self.url: id_art = get_id_art(self.url) imgs = get_imgs_page(id_art, self.session, cw=self.cw) else: imgs = get_imgs(id_, self.title, self.session, cw=self.cw) for img in imgs: self.urls.append(img) self.title = self.name @try_n(2) def get_imgs(id_, title, session, cw=None): referer = f'https://www.artstation.com/{id_}' downloader.read_html(referer, session=session) #print(session.cookies.keys()) url = f'https://www.artstation.com/users/{id_}/quick.json' j = downloader.read_json(url, referer, session=session) uid = j['id'] datas = [] ids = set() for p in range(1, 1000): check_alive(cw) url = f'https://www.artstation.com/users/{id_}/projects.json??user_id={uid}&page={p}' #6516 j = try_n(4)(downloader.read_json)(url, referer, session=session) data = j['data'] if not data: break for d in data: if d['id'] not in ids: ids.add(d['id']) datas.append(d) if cw: cw.setTitle(f'{tr_("페이지 읽는 중...")} {title} - {len(datas)}') else: print(len(datas)) datas = sorted(datas, key=lambda data: int(data['id']), reverse=True) imgs = [] i = 0 names = set() while i < len(datas): check_alive(cw) data = datas[i] date = data['created_at'] post_url = data['permalink'] #print('post_url', post_url) id_art = get_id_art(post_url) imgs += get_imgs_page(id_art, session, date=date, cw=cw, names=names) if len(imgs) >= get_max_range(cw): break if cw: cw.setTitle(f'{tr_("이미지 읽는 중...")} {title} - {i+1} / {len(datas)} ({len(imgs)})') else: print(len(imgs)) i += 1 return imgs def get_id_art(post_url): return post_url.split('/artwork/')[-1].split('/projects/')[-1].split('/')[0].split('?')[0].split('#')[0] def get_id(url, cw=None): print_ = get_print(cw) url = url.split('?')[0].split('#')[0] if '/artwork/' in url: id_art = get_id_art(url) imgs = get_imgs_page(id_art, session=Session(), cw=cw) return imgs[0].data['user']['username'] if '.artstation.' in url and 'www.artstation.' not in url: id_ = url.split('.artstation')[0].split('//')[-1] type_ = None elif 'artstation.com' in url: paths = url.split('artstation.com/')[1].split('/') id_ = paths[0] type_ = paths[1] if len(paths) > 1 else None else: id_ = url.replace('artstation_', '').replace('/', '/') type_ = None if type_ not in [None, 'likes']: type_ = None print_(f'type: {type_}, id: {id_}') if type_: return f'{id_}/{type_}' return id_ def get_imgs_page(id_art, session, date=None, cw=None, names=None): print_ = get_print(cw) url_json = f'https://www.artstation.com/projects/{id_art}.json' post_url = f'https://www.artstation.com/artwork/{id_art}' name = post_url.strip('/').split('/')[-1] if names is not None: while name.lower() in names: name += '_' names.add(name.lower()) try: data = downloader.read_json(url_json, session=session, referer=post_url) imgs_ = data['assets'] except Exception as e: print_(print_error(e)) return [] if date is None: date = data['created_at'] date = dateutil.parser.parse(date) imgs = [] for page, img in enumerate(imgs_): if not img['has_image']: print('no img') continue url = None embed = img.get('player_embedded') if embed: soup = Soup(embed) url_embed = soup.find('iframe').attrs['src'] print_(f'embed: {url_embed}') try: soup = downloader.read_soup(url_embed, post_url, session=session) v = soup.find('video') if v: url = v.find('source').attrs['src'] except Exception as e: print_(print_error(e)) if not url: try: url = soup.find('link', {'rel': 'canonical'}).attrs['href'] print_(f'YouTube: {url}') raise Exception('YouTube') except Exception as e: print(e) url = None if not url: url = img['image_url'] d = { 'date': date, 'name': clean_title(name), 'page': page, } filename = utils.format('artstation', d, get_ext(url)) img = File_artstation({'referer':post_url, 'url':url.replace('/large/', '/4k/'), 'name': filename}) img.data = data imgs.append(img) return imgs ================================================ FILE: src/extractor/asmhentai_downloader.py ================================================ #coding: utf8 import downloader import ree as re from utils import Soup, urljoin, Downloader, join, Session, File, clean_title, limits import os import utils def get_id(url): try: return int(url) except: return int(re.find('/(g|gallery)/([0-9]+)', url)[1]) class File_asmhentai(File): type = 'asmhentai' format = 'name' @limits(.25) def get(self): soup = downloader.read_soup(self['referer'], self['rereferer'], session=self.session) img = soup.find('img', id='fimg') url = img['data-src'] name, ext = os.path.splitext(os.path.basename(url).split('?')[0]) d = { 'name': clean_title(name), } return {'url': url, 'name': utils.format('asmhentai', d, ext)} class Downloader_asmhentai(Downloader): type = 'asmhentai' URLS = ['asmhentai.com'] MAX_CORE = 8 display_name = 'AsmHentai' ACCEPT_COOKIES = [r'(.*\.)?asmhentai\.com'] def init(self): self.session = Session() @classmethod def fix_url(cls, url): id_ = get_id(url) return f'https://asmhentai.com/g/{id_}/' def read(self): info = get_info(self.url, self.session, self.cw) self.print_(info) # 1225 artist = join(info['artist']) self.artist = artist group = join(info['group']) if info['group'] else 'N/A' lang = info['language'][0] if info['language'] else 'N/A' series = info['parody'][0] if info['parody'] else 'N/A' title = self.format_title(info['category'][0], info['id'], info['title'], artist, group, series, lang) for i in range(info['n']): url = f'https://asmhentai.com/gallery/{info["id"]}/{i+1}/' file = File_asmhentai({'referer':url, 'rereferer': self.url}) self.urls.append(file) self.title = title def get_info(url, session, cw): html = downloader.read_html(url, session=session) soup = Soup(html) info = {} info['id'] = get_id(url) title = soup.find('h1').text.strip() info['title'] = title for tag in soup.findAll('span', class_='tag'): href = tag.parent.attrs['href'] href = urljoin(url, href).strip('/') key = href.split('/')[3] value = href.split('/')[-1] if key == 'language' and value == 'translated': continue if key in info: info[key].append(value) else: info[key] = [value] for key in ['artist', 'group', 'parody', 'tag', 'character']: if key not in info: info[key] = [] info['n'] = int(soup.find('input', id='t_pages')['value']) return info ================================================ FILE: src/extractor/avgle_downloader.py ================================================ #coding: utf8 import downloader from m3u8_tools import M3u8_stream from utils import Soup, Downloader, LazyUrl, get_print, try_n, check_alive, format_filename, json from io import BytesIO import base64 import webbrowser import errors class Downloader_avgle(Downloader): type = 'avgle' single = True URLS = ['avgle.com'] ACCEPT_COOKIES = [r'(.*\.)?avgle\.com'] def init(self): if not self.cw.data_: link = 'https://github.com/KurtBestor/Hitomi-Downloader/wiki/Chrome-Extension' webbrowser.open(link) raise errors.Invalid('No data; See: {}'.format(link)) def read(self): video = get_video(self.url, cw=self.cw) self.urls.append(video.url) self.setIcon(video.thumb) self.title = video.title @try_n(2) def get_video(url, cw=None): print_ = get_print(cw) check_alive(cw) data = cw.data_ version = data['version'] print_('version: {}'.format(version)) if version == '0.1': raise errors.OutdatedExtension() data = data['data'] if not isinstance(data, bytes): data = data.encode('utf8') s = base64.b64decode(data).decode('utf8') urls = json.loads(s) print_('\n'.join(urls[:4])) referer_seg = 'auto' if 'referer=force' in urls[0] else None # 1718 stream = M3u8_stream(url, urls=urls, n_thread=4, referer_seg=referer_seg) html = downloader.read_html(url) soup = Soup(html) url_thumb = soup.find('meta', {'property': 'og:image'}).attrs['content'] title = soup.find('meta', {'property': 'og:title'}).attrs['content'].strip() video = Video(stream, url_thumb, url, title) return video class Video: def __init__(self, url, url_thumb, referer, title): self.url = LazyUrl(referer, lambda x: url, self) self.url_thumb = url_thumb self.thumb = BytesIO() downloader.download(url_thumb, referer=referer, buffer=self.thumb) self.title = title self.filename = format_filename(title, '', '.mp4') ================================================ FILE: src/extractor/baraag_downloader.py ================================================ #coding:utf8 from utils import Downloader, clean_title, Session from mastodon import get_info import ree as re def get_id(url): return re.find('baraag.net/([^/]+)', url.lower()) class Downloader_baraag(Downloader): type = 'baraag' URLS = ['baraag.net'] display_name = 'baraag.net' ACCEPT_COOKIES = [r'(.*\.)?baraag\.net'] def init(self): self.session = Session() @classmethod def fix_url(cls, url): id_ = get_id(url) or url return f'https://baraag.net/{id_}' def read(self): id_ = get_id(self.url) info = get_info('baraag.net', id_, f'baraag_{id_}', self.session, self.cw) self.urls += info['files'] self.title = clean_title('{} (baraag_{})'.format(info['title'], id_)) ================================================ FILE: src/extractor/bcy_downloader.py ================================================ #coding:utf8 import downloader from utils import Soup, cut_pair, LazyUrl, Downloader, get_print, get_max_range, try_n, clean_title, check_alive, json import os from translator import tr_ class Downloader_bcy(Downloader): type = 'bcy' URLS = ['bcy.net/item/detail/', 'bcy.net/u/'] MAX_CORE = 8 display_name = '半次元' ACCEPT_COOKIES = [r'(.*\.)?bcy\.net'] def init(self): self.html = downloader.read_html(self.url) self.info = get_info(self.url, self.html) @property def name(self): info = self.info if '/detail/' in self.url: title = '{} (bcy_{}) - {}'.format(clean_title(info['artist']), info['uid'], info['id']) else: title = '{} (bcy_{})'.format(clean_title(info['artist']), info['uid']) return title def read(self): imgs = get_imgs(self.url, self.html, cw=self.cw) for img in imgs: self.urls.append(img.url) self.title = self.name self.artist = self.info['artist'] def get_ssr_data(html): s = html.split('window.__ssr_data = JSON.parse("')[1].replace('\\"', '"') s = cut_pair(s).replace('"', '\\"') data = json.loads(json.loads('"{}"'.format(s))) return data @try_n(2) def get_imgs(url, html=None, cw=None): if '/detail/' not in url: return get_imgs_channel(url, html, cw) if html is None: html = downloader.read_html(url) data = get_ssr_data(html) multi = data['detail']['post_data']['multi'] imgs = [] for m in multi: path = m['original_path'] img = json.loads('"{}"'.format(path)) img = Image_single(img, url, len(imgs)) imgs.append(img) return imgs class Image_single: def __init__(self, url ,referer, p): self._url = url self.p = p self.url = LazyUrl(referer, self.get, self) def get(self, referer): ext = get_ext(self._url, referer) self.filename = '{:04}{}'.format(self.p, ext) return self._url class Image: def __init__(self, url, referer, id, p): self.id = id self.p = p self._url = url self.url = LazyUrl(referer, self.get, self) def get(self, referer): ext = get_ext(self._url, referer) self.filename = '{}_p{}{}'.format(self.id, self.p, ext) return self._url def get_ext(url, referer=None): ext = os.path.splitext(url.split('?')[0].replace('~noop.image', ''))[1] if ext in ['.image', '']: ext = downloader.get_ext(url, referer=referer) return ext def get_info(url, html): soup = Soup(html) info = {} uname = soup.find('div', class_='user-name') or soup.find('p', class_='uname') or soup.find('div', class_='user-info-name') info['artist'] = uname.text.strip() j = get_ssr_data(html) if '/detail/' in url: info['uid'] = j['detail']['detail_user']['uid'] info['id'] = j['detail']['post_data']['item_id'] else: info['uid'] = j['homeInfo']['uid'] return info def get_imgs_channel(url, html=None, cw=None): print_ = get_print(cw) if html is None: html = downloader.read_html(url) info = get_info(url, html) # Range max_pid = get_max_range(cw) ids = set() imgs = [] for p in range(1000): url_api = 'https://bcy.net/apiv3/user/selfPosts?uid={}'.format(info['uid']) if imgs: url_api += '&since={}'.format(imgs[-1].id) data_raw = downloader.read_html(url_api, url) data = json.loads(data_raw)['data'] items = data['items'] if not items: print('no items') break c = 0 for item in items: check_alive(cw) id = item['item_detail']['item_id'] if id in ids: print('duplicate') continue c += 1 ids.add(id) url_single = 'https://bcy.net/item/detail/{}'.format(id) imgs_single = get_imgs(url_single, cw=cw) print_(str(id)) for p, img in enumerate(imgs_single): img = Image(img._url, url_single, id, p) imgs.append(img) s = '{} {} - {}'.format(tr_('읽는 중...'), info['artist'], min(len(imgs), max_pid)) if cw: cw.setTitle(s) else: print(s) if len(imgs) >= max_pid: break if not c: print('not c') break if len(imgs) >= max_pid: print('over max_pid:', max_pid) break return imgs[:max_pid] ================================================ FILE: src/extractor/bdsmlr_downloader.py ================================================ #coding:utf8 import downloader from utils import Session, Soup, LazyUrl, Downloader, get_max_range, try_n, get_print, clean_title, check_alive from datetime import datetime import ree as re import os from translator import tr_ from error_printer import print_error import clf2 import errors class Downloader_bdsmlr(Downloader): type = 'bdsmlr' URLS = ['bdsmlr.com'] display_name = 'BDSMlr' ACCEPT_COOKIES = [r'(.*\.)?bdsmlr\.com'] def init(self): if 'bdsmlr.com/post/' in self.url: raise errors.Invalid(tr_('개별 다운로드는 지원하지 않습니다: {}').format(self.url)) self.url = 'https://{}.bdsmlr.com'.format(self.id_) self.session = Session() clf2.solve(self.url, session=self.session, cw=self.cw) @property def id_(self): url = self.url if 'bdsmlr.com' in url: if 'www.bdsmlr.com' in url: raise Exception('www.bdsmlr.com') gal_num = url.split('.bdsmlr.com')[0].split('/')[-1] else: gal_num = url return gal_num def read(self): info = get_imgs(self.id_, session=self.session, cw=self.cw) for post in info['posts']: self.urls.append(post.url) self.title = '{} (bdsmlr_{})'.format(clean_title(info['username']), self.id_) class Post: def __init__(self, url, referer, id, p): self.id = id self.url = LazyUrl(referer, lambda x: url, self) ext = os.path.splitext(url)[1] self.filename = '{}_p{}{}'.format(id, p, ext) def foo(url, soup, info, reblog=False): #print('foo', info['c'], len(info['ids'])) for post in soup.findAll('div', class_='wrap-post'): try: id = int(re.find('[0-9]+', post.attrs['class'][1])) except Exception as e: print(print_error(e)) continue if id in info['ids']: continue info['ids'].add(id) info['last'] = id if not reblog and post.find('div', class_='ogname'): continue for p, mag in enumerate(post.findAll(['a', 'div'], class_='magnify')): post = Post(mag.attrs['href'], url, id, p) info['posts'].append(post) info['c'] += 20 if info['c'] else 5 @try_n(2) def get_imgs(user_id, session, cw=None): print_ = get_print(cw) url = 'https://{}.bdsmlr.com/'.format(user_id) info = {'c': 0, 'posts': [], 'ids': set()} html = downloader.read_html(url, session=session) soup = Soup(html) sorry = soup.find('div', class_='sorry') if sorry: raise Exception(sorry.text.strip()) username = soup.find('title').text.strip()### print('username:', username) info['username'] = username token = soup.find('meta', {'name': 'csrf-token'}).attrs['content'] print_('token: {}'.format(token)) max_pid = get_max_range(cw) n = len(info['ids']) for p in range(1000): check_alive(cw) if p == 0: url_api = 'https://{}.bdsmlr.com/loadfirst'.format(user_id) else: url_api = 'https://{}.bdsmlr.com/infinitepb2/{}'.format(user_id, user_id) data = { 'scroll': str(info['c']), 'timenow': datetime.now().strftime('%Y-%m-%d %H:%M:%S'), } if 'last' in info: data['last'] = str(info['last']) print_('n:{}, scroll:{}, last:{}'.format(len(info['posts']), data['scroll'], data.get('last'))) headers = { 'Referer': url, 'X-CSRF-TOKEN': token, } _e = None for try_ in range(4): try: r = session.post(url_api, data=data, headers=headers) if p == 0: r.raise_for_status() break except Exception as e: _e = e print(e) else: if _e is not None: raise _e soup = Soup(r.text) foo(url, soup, info) if len(info['ids']) == n: print('same; break') break n = len(info['ids']) s = '{} {} (tumblr_{}) - {}'.format(tr_('읽는 중...'), username, user_id, len(info['posts'])) if cw is not None: cw.setTitle(s) else: print(s) if len(info['posts']) > max_pid: break return info ================================================ FILE: src/extractor/bili_downloader.py ================================================ import downloader import downloader_v3 from utils import Downloader, get_print, format_filename, clean_title, get_resolution, try_n, Session, uuid, File, get_max_range, query_url import os from io import BytesIO import ffmpeg import math import ree as re import ytdl import constants import putils import threading import errors _VALID_URL = r'''(?x) https?:// (?:(?:www|bangumi)\.)? bilibili\.(?:tv|com)/ (?: (?: video/[aA][vV]| anime/(?P\d+)/play\# )(?P\d+)| video/[bB][vV](?P[^/?#&]+) ) ''' class File_bili(File): type = 'bili' thread_audio = None @try_n(4) def get(self): session = self.session cw = self.cw print_ = get_print(cw) options = { #'noplaylist': True, #5562 #'extract_flat': True, 'playlistend': 1, } ydl = ytdl.YoutubeDL(options, cw=cw) info = ydl.extract_info(self['referer']) #5562 entries = info.get('entries') if entries: info.update(entries[0]) fs = info['formats'] res = max(get_resolution(), min(f.get('height', 0) for f in fs)) print_(f'res: {res}') fs = [f for f in fs if f.get('height', 0) <= res] for f in fs: print_(f"{f['format']} - {f['url']}") f_video = sorted(fs, key=lambda f:(f.get('height', 0), f.get('vbr', 0)))[-1] print_('video: {}'.format(f_video['format'])) if f_video.get('abr'): f_audio = None else: fs_audio = sorted([f_audio for f_audio in fs if f_audio.get('abr')], key=lambda f:f['abr']) if fs_audio: f_audio = fs_audio[-1] else: raise Exception('no audio') print_('audio: {}'.format(f_audio['format'])) title = info['title'] url_thumb = info['thumbnail'] ext = info['ext'] session.headers.update(info.get('http_headers', {})) mobj = re.match(_VALID_URL, self['referer']) video_id = mobj.group('id') artist = info.get('uploader') or None info = { 'url': f_video['url'], 'url_thumb': url_thumb, 'artist': artist, 'name': format_filename(title, video_id, ext, artist=artist), #7127 } if f_audio: def f(): audio = f_audio['url'] path = os.path.join(putils.DIRf, f'{uuid()}_a.tmp') if cw is not None: cw.trash_can.append(path) if constants.FAST: downloader_v3.download(audio, session=self.session, chunk=1024*1024, n_threads=2, outdir=os.path.dirname(path), fileName=os.path.basename(path), customWidget=cw, overwrite=True) else: downloader.download(audio, session=self.session, outdir=os.path.dirname(path), fileName=os.path.basename(path), customWidget=cw, overwrite=True) self.audio_path = path print_('audio done') self.thread_audio = threading.Thread(target=f, daemon=True) self.thread_audio.start() return info def pp(self, filename): if self.thread_audio: self.thread_audio.join() ffmpeg.merge(filename, self.audio_path, cw=self.cw) return filename # 1804 @try_n(2) def fix_url(url, cw=None): print_ = get_print(cw) if '?' in url: tail = url.split('?')[1] else: tail = None soup = downloader.read_soup(url, methods={'requests'}) err = soup.find('div', class_='error-text') if err: raise errors.Invalid('{}: {}'.format(err.text.strip(), url)) meta = soup.find('meta', {'itemprop': 'url'}) if meta: url_new = meta.attrs['content'] if tail: url_new = '{}?{}'.format(url_new, tail) print_('redirect: {} -> {}'.format(url, url_new)) else: url_new = url print_('no redirect') return url_new class Downloader_bili(Downloader): type = 'bili' URLS = [r'regex:'+_VALID_URL, 'space.bilibili.com/'] lock = True detect_removed = False detect_local_lazy = False display_name = 'bilibili' single = True ACCEPT_COOKIES = [r'(.*\.)?bilibili\.com'] def init(self): self.url = fix_url(self.url, self.cw) if 'bilibili.com' not in self.url.lower(): self.url = 'https://www.bilibili.com/video/{}'.format(self.url) self.url = self.url.replace('m.bilibili', 'bilibili') self.session = Session() @classmethod def key_id(cls, url): mobj = re.match(_VALID_URL, url) video_id = mobj.group('id') qs = query_url(url) p = qs.get('p', ['1'])[0] #6580 return f'{video_id or url} {p}' @property def id_(self): mobj = re.match(_VALID_URL, self.url) video_id = mobj.group('id') #anime_id = mobj.group('anime_id') return video_id def read(self): sd = self.session.cookies.get('SESSDATA', domain='.bilibili.com') self.print_('sd: {}'.format(sd)) if not sd: #5647 self.cw.showCookie() self.cw.showLogin('https://passport.bilibili.com/login', 1030, None) sid = re.find(r'/channel/collectiondetail?sid=([0-9]+)', self.url) mid = re.find(r'space.bilibili.com/([0-9]+)', self.url) if sid or mid: if not sd: raise errors.LoginRequired() if sid: url_api = f'https://api.bilibili.com/x/polymer/web-space/seasons_archives_list?mid={mid}&season_id={sid}' j = downloader.read_json(url_api, self.url) title = clean_title(j['data']['meta']['name']) elif mid: url_api = f'https://api.bilibili.com/x/space/wbi/acc/info?mid={mid}' j = downloader.read_json(url_api, self.url) title = clean_title(j['data']['name']) else: raise NotImplementedError() self.single = False options = { 'extract_flat': True, 'playlistend': get_max_range(self.cw), } ydl = ytdl.YoutubeDL(options, cw=self.cw) info = ydl.extract_info(self.url) files = [] for e in info['entries']: files.append(File_bili({'referer': e['url']})) self.print_(f'urls: {len(files)}') file = self.process_playlist(title, files) self.title = title else: file = File_bili({'referer': self.url}) file.ready(self.cw) self.urls.append(file) self.title = os.path.splitext(file['name'])[0] thumb = BytesIO() downloader.download(file['url_thumb'], buffer=thumb) self.setIcon(thumb) n = int(math.ceil(8.0 / len(self.urls))) self.print_(f'n_threads: {n}') self.enableSegment(n_threads=n, overwrite=True) self.artist = file['artist'] ================================================ FILE: src/extractor/coub_downloader.py ================================================ from utils import Downloader, LazyUrl, try_n, format_filename, get_ext import ytdl from io import BytesIO as IO import downloader import ree as re PATTEN_IMAGIZER = r'coub-com-.+\.imagizer\.com' def get_id(url): return re.find(r'/view/([0-9a-z]+)', url, err='no id') class Downloader_coub(Downloader): type = 'coub' URLS = ['coub.com', r'regex:'+PATTEN_IMAGIZER] single = True ACCEPT_COOKIES = [r'(.*\.)?coub\.com'] @classmethod def fix_url(cls, url): return re.sub(PATTEN_IMAGIZER, 'coub.com', url) @classmethod def key_id(cls, url): return get_id(url) def read(self): video = Video(self.url, cw=self.cw) video.url()# self.urls.append(video.url) self.setIcon(video.thumb) self.enableSegment() self.title = video.title class Video: _url = None def __init__(self, url, cw=None): self.url = LazyUrl(url, self.get, self, pp=self.pp) self.cw = cw @try_n(2) def get(self, url): if self._url: return self._url ydl = ytdl.YoutubeDL(cw=self.cw) info = ydl.extract_info(url) fs = [f for f in info['formats'] if f['ext'] == 'mp4'] f = sorted(fs, key=lambda f: int(f.get('filesize', 0)))[-1] self._url = f['url'] ## fs = [f for f in info['formats'] if f['ext'] == 'mp3'] ## self.f_audio = sorted(fs, key=lambda f: int(f.get('filesize', 0)))[-1] self.thumb_url = info['thumbnails'][0]['url'] self.thumb = IO() downloader.download(self.thumb_url, buffer=self.thumb) self.title = info['title'] ext = get_ext(self._url) self.filename = format_filename(self.title, info['id'], ext) return self._url def pp(self, filename): ## import ffmpeg ## f = IO() ## downloader.download(self.f_audio['url'], buffer=f) ## ffmpeg.merge(filename, f) return filename ================================================ FILE: src/extractor/danbooru_downloader.py ================================================ #coding: utf-8 import downloader import ree as re from utils import Downloader, Session, get_max_range, clean_title, get_print, try_n, urljoin, check_alive, LazyUrl, get_ext, limits from translator import tr_ from urllib.parse import urlparse, parse_qs, quote import clf2 class Downloader_danbooru(Downloader): type = 'danbooru' URLS = ['danbooru.donmai.us'] MAX_CORE = 4 _name = None ACCEPT_COOKIES = [r'(.*\.)?donmai\.us'] def init(self): self.session = Session('chrome') clf2.solve(self.url, session=self.session, cw=self.cw) #5336 self.session.headers['User-Agent'] = 'Mozilla/5.' #7034 @classmethod def fix_url(cls, url): if 'donmai.us' in url: url = url.replace('http://', 'https://') else: url = url.replace(' ', '+') while '++' in url: url = url.replace('++', '+') url = f'https://danbooru.donmai.us/posts?tags={quote(url)}' if 'donmai.us/posts/' in url: url = url.split('?')[0] return url.strip('+') @property def name(self): if self._name is None: parsed_url = urlparse(self.url) qs = parse_qs(parsed_url.query) if 'donmai.us/favorites' in self.url: id = qs.get('user_id', [''])[0] print('len(id) =', len(id), f'"{id}"') if not id: raise AssertionError('[Fav] User id is not specified') id = f'fav_{id}' elif 'donmai.us/explore/posts/popular' in self.url: #4160 soup = read_soup(self.url, self.session, self.cw) id = soup.find('h1').text elif 'donmai.us/posts/' in self.url: id = re.find(r'donmai\.us/posts/([0-9]+)', self.url, err='no id') else: tags = qs.get('tags', []) tags.sort() id = ' '.join(tags) if not id: id = 'N/A' self._name = id return clean_title(self._name) def read(self): self.title = self.name if 'donmai.us/posts/' in self.url: self.single = True imgs = get_imgs(self.url, self.session, self.name, cw=self.cw) for img in imgs: self.urls.append(img.url) self.title = self.name class Image: def __init__(self, id, url, session, cw): self._cw = cw self.id = id self._session = session self.url = LazyUrl(url, self.get, self) def get(self, url): soup = read_soup(url, self._session, self._cw) ori = soup.find('li', id='post-option-view-original') if ori: img = ori.find('a')['href'] else: img = soup.find('li', id='post-info-size').find('a')['href'] if get_ext(img) == '.zip': #4635 img = soup.find('section', id='content').find('video')['src'] img = urljoin(url, img) ext = get_ext(img) self.filename = f'{self.id}{ext}' return img, None @limits(1) def wait(cw): check_alive(cw) def setPage(url, page): # Main page if re.findall(r'https://[\w]*[.]?donmai.us/?$', url): url = f"https://{'danbooru.' if 'danbooru.' in url else ''}donmai.us/posts?page=1" # Change the page if 'page=' in url: url = re.sub('page=[0-9]*', f'page={page}', url) else: url += f'&page={page}' return url @try_n(12) #4103 def read_soup(url, session, cw, try_=1): check_alive(cw) wait(cw) if try_ > 1: session.headers['User-Agent'] = downloader.ua.random #5730 return downloader.read_soup(url, session=session) def get_imgs(url, session, title=None, range_=None, cw=None): if 'donmai.us/artists' in url: raise NotImplementedError() if 'donmai.us/posts/' in url: id = re.find(r'donmai\.us/posts/([0-9]+)', url, err='no id') img = Image(id, url, session, cw) return [img] print_ = get_print(cw) # Range max_pid = get_max_range(cw) if range_ is None: range_ = range(1, 1001) print(range_) imgs = [] i = 0 empty_count = 0 empty_count_global = 0 url_imgs = set() while i < len(range_): check_alive(cw) p = range_[i] url = setPage(url, p) print_(url) soup = read_soup(url, session, cw) articles = soup.findAll('article') if articles: empty_count_global = 0 else: empty_count += 1 if empty_count < 4: s = f'empty page; retry... {p}' print_(s) continue else: empty_count = 0 empty_count_global += 1 if empty_count_global >= 6: break for article in articles: id = article.attrs['data-id'] #url_img = article.attrs['data-file-url'].strip() url_img = urljoin(url, article.find('a', class_='post-preview-link')['href']) #4160 #print(url_img) if url_img not in url_imgs: url_imgs.add(url_img) img = Image(id, url_img, session, cw) imgs.append(img) if len(imgs) >= max_pid: break if cw is not None: cw.setTitle(f'{tr_("읽는 중...")} {title} - {len(imgs)}') i += 1 return imgs[:max_pid] ================================================ FILE: src/extractor/discord_emoji_downloader.py ================================================ # coding: UTF-8 # title: Discord 서버 커스텀 이모지 다운로드 # author: SaidBySolo """ MIT License Copyright (c) 2020 SaidBySolo Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ from utils import Downloader, clean_title import requests import errors class DownloaderDiscordEmoji(Downloader): type = "discord" def init(self): pass def read(self): token_guild_id_list = self.url.split( "/" ) # 값을 어떻게 받을지 몰라서 일단 나눴어요. discord_이메일/비밀번호/서버아이디 또는 discord_토큰/서버아이디 이런식으로 받게 해놨어요. if len(token_guild_id_list) == 2: token = token_guild_id_list[0] guild_id = token_guild_id_list[1] elif len(token_guild_id_list) == 3: email = token_guild_id_list[0] password = token_guild_id_list[1] guild_id = token_guild_id_list[2] response = self.post_account_info(email, password) account_info = response.json() if response.status_code == 400: if account_info.get("captcha_key"): raise errors.Invalid( "먼저 웹 또는 디스코드 앱에서 로그인하신후 캡차를 인증해주세요." ) # 메세지 박스 return하니까 멈춰서 raise로 해놨어요 else: raise errors.Invalid("이메일 또는 비밀번호가 잘못되었습니다. 확인후 다시 시도해주세요.") else: if not account_info["token"]: raise errors.Invalid("토큰을 받아오지 못했어요. 2단계인증을 사용중이신경우 토큰을 이용해 요청해주세요.") else: token = account_info["token"] else: raise errors.Invalid("인자값이 더 많이왔어요.") guild_info_response = self.get_emoji_list(token, int(guild_id)) # 토큰과 함께 get요청함 if guild_info_response.status_code != 200: raise errors.Invalid("정상적인 토큰이 아니거나 서버를 찾을수없어요. 맞는 토큰인지, 해당 서버에 접속해있는지 확인해주세요.") else: guild_info = guild_info_response.json() if guild_info["emojis"]: base_url = "https://cdn.discordapp.com/emojis/" for emoji in guild_info["emojis"]: # 이모지 리스트로 가져옴 if emoji["animated"] is True: # 만약 gif면 gif 다운로드 param = emoji["id"] + ".gif" else: # 아닐경우 png로 param = emoji["id"] + ".png" self.title = clean_title( f'{guild_info["name"]}({guild_info["id"]})' # 폴더 이름은 서버 이름, id ) self.urls.append(base_url + param + "?v=1") # 인자 합치기 else: raise errors.Invalid("해당 서버에는 이모지가 없어요") def get_emoji_list(self, token: str, guild_id: int) -> dict: response = requests.get( f"https://discordapp.com/api/v6/guilds/{guild_id}", headers={"Authorization": token}, ) if response.status_code == 401: response = requests.get( f"https://discordapp.com/api/v6/guilds/{guild_id}", headers={"Authorization": f"Bot {token}"}, ) return response def post_account_info(self, email: str, password: str) -> dict: response = requests.post( "https://discordapp.com/api/v8/auth/login", json={ "email": email, "password": password, "undelete": False, "captcha_key": None, "login_source": None, "gift_code_sku_id": None, }, ) return response ================================================ FILE: src/extractor/etc_downloader.py ================================================ import downloader import ytdl from utils import Downloader, Session, try_n, LazyUrl, get_ext, format_filename, get_print, get_resolution, print_error, cut_pair, json from io import BytesIO import ree as re from m3u8_tools import playlist2stream, M3u8_stream import utils import ffmpeg import clf2 import os class Downloader_etc(Downloader): type = 'etc' URLS = ['thisvid.com'] #5153 single = True MAX_PARALLEL = 8 display_name = 'Etc' PRIORITY = 10 @try_n(2) def read(self): self.session = Session() name = ytdl.get_extractor_name(self.url) self.print_('extractor: {}'.format(name)) if name == 'ixigua': #6290 clf2.solve(self.url, session=self.session) #if name == 'generic': # raise NotImplementedError() video = get_video(self.url, self.session, self.cw) if video.artist: self.artist = video.artist self.print_('url_thumb: {}'.format(video.url_thumb)) self.setIcon(video.thumb) if video.header.lower() not in ['yourporn']: self.enableSegment()# if isinstance(video.url(), M3u8_stream): self.disableSegment() self.urls.append(video.url) self.title = os.path.splitext(video.filename)[0].replace(':', ':') def int_or_none(s): try: return int(s) except: return None def format_(f): if f is None: return 'None' return 'format:{} - resolution:{} - vbr:{} - audio:{} - url:{}'.format(f['format'], f['_resolution'], f['_vbr'], f['_audio'], f['url']) class UnSupportedError(Exception):pass def get_video(url, session, cw, ie_key=None): print_ = get_print(cw) try: video = _get_video(url, session, cw, ie_key, allow_m3u8=True) if isinstance(video, Exception): raise video if isinstance(video.url(), M3u8_stream): c = video.url().urls[0][1].download(cw) if not c: raise Exception('invalid m3u8') return video except Exception as e: if isinstance(e, UnSupportedError): raise e print_(print_error(e)) return _get_video(url, session, cw, ie_key, allow_m3u8=False) def extract_info_spankbang(url, session, cw): # temp fix print_ = get_print(cw) soup = downloader.read_soup(url, session=session) for script in soup.findAll('script'): script = script.string if script and 'var stream_data'in script: s = cut_pair(script.split('var stream_data')[-1].strip(' \t=').replace("'", '"')) break else: raise Exception('no stream_data') info = {} info['url'] = url info['title'] = soup.find('h1').text.strip() info['id'] = re.find(r'spankbang\.com/([^/]+)', soup.find('meta', {'property': 'og:url'})['content'], err='no id') info['thumbnail'] = soup.find('meta', {'property': 'og:image'})['content'] info['formats'] = [] data = json.loads(s) for res, item in data.items(): if res == 'main': continue if item and isinstance(item, list): item = item[0] else: continue ext = get_ext_(item, session, url) res = {'4k': '2160p', '8k': '4320p', '16k': '8640p'}.get(res, res) f = {'url': item, 'format': res} info['formats'].append(f) return info @try_n(2) def _get_video(url, session, cw, ie_key=None, allow_m3u8=True): print_ = get_print(cw) print_('get_video: {}, {}'.format(allow_m3u8, url)) options = { 'noplaylist': True, #'extract_flat': True, 'playlistend': 1, 'writesubtitles': True, } if ytdl.get_extractor_name(url) == 'spankbang': info = extract_info_spankbang(url, session, cw) else: ydl = ytdl.YoutubeDL(options, cw=cw) try: info = ydl.extract_info(url) except Exception as e: if 'ERROR: Unsupported URL' in str(e): return UnSupportedError(str(e)) raise e if not ie_key: ie_key = ytdl.get_extractor_name(url) info['ie_key'] = ie_key url_new = info.get('url') formats = info.get('formats', []) if not formats and (info.get('entries') or 'title' not in info): if 'entries' in info: entry = info['entries'][0] url_new = entry.get('url') or entry['webpage_url'] if url_new != url: return get_video(url_new, session, cw, ie_key=get_ie_key(info)) session.headers.update(info.get('http_headers', {})) #session.cookies.update(ydl.cookiejar) if not formats: if url_new: f = {'url': url_new, 'format': ''} formats.append(f) fs = [] for i, f in enumerate(formats): f['_index'] = i f['_resolution'] = int_or_none(re.find(r'([0-9]+)p', f['format'], re.I)) or f.get('height') or f.get('width') or int_or_none(f.get('quality')) or int(f.get('vcodec', 'none') != 'none') #5995 f['_vbr'] = f.get('vbr') or 0 f['_audio'] = f.get('abr') or f.get('asr') or int(f.get('acodec', 'none') != 'none') print_(format_(f)) fs.append(f) #4773 res = max(get_resolution(), min(f['_resolution'] for f in fs)) print_(f'res: {res}') fs = [f for f in fs if f['_resolution'] <= res] if not fs: raise Exception('No videos') def filter_f(fs): for f in fs: if allow_m3u8: return f ext = get_ext_(f['url'], session, url) if ext.lower() != '.m3u8': return f print_('invalid url: {}'.format(f['url'])) return list(fs)[0]# f_video = filter_f(sorted(fs, key=lambda f:(f['_resolution'], int(bool(f['_audio'])), f['_vbr'], f['_index']), reverse=True)) #6072, #6118 print_('video0: {}'.format(format_(f_video))) if f_video['_audio']: f_audio = None else: fs_audio = sorted([f_audio for f_audio in fs if (not f_audio['_resolution'] and f_audio['_audio'])], key=lambda f:(f['_audio'], f['_vbr'], f['_index'])) if fs_audio: f_audio = fs_audio[-1] else: try: print_('trying to get f_video with audio') f_video = filter_f(reversed(sorted([f for f in fs if f['_audio']], key=lambda f:(f['_resolution'], f['_index'])))) except Exception as e: print_('failed to get f_video with audio: {}'.format(e)) f_audio = None print_('video: {}'.format(format_(f_video))) print_('audio: {}'.format(format_(f_audio))) video = Video(f_video, f_audio, info, session, url, cw=cw) return video def get_ie_key(info): ie_key = info.get('ie_key') or info['extractor'] ie_key = ie_key.split(':')[0] if ie_key.lower().endswith('playlist'): ie_key = ie_key[:-len('playlist')] return ie_key def get_ext_(url, session, referer): try: ext = downloader.get_ext(url, session, referer) except Exception as e: ext = get_ext(url) return ext class Video: live = False def __init__(self, f, f_audio, info, session, referer, cw=None): self.f_audio = f_audio self.cw = cw print_ = get_print(cw) self.title = title = info['title'] self.id = info['id'] self.url = f['url'] self.artist = info.get('uploader') self.header = utils.capitalize(get_ie_key(info)) self.session = session self.referer = referer self.subs = ytdl.get_subtitles(info) self.url_thumb = info.get('thumbnail') self.thumb = BytesIO() if self.url_thumb: downloader.download(self.url_thumb, referer=referer, buffer=self.thumb, session=session) ext = get_ext_(self.url, session, referer) def foo(): hdr = session.headers.copy() if referer: hdr['Referer'] = referer self.live = True return utils.LiveStream(self.url, headers=hdr, fragments=f.get('fragments') if ytdl.LIVE_FROM_START.get('etc') else None) if not ext: if f['_resolution']: ext = '.mp4' else: ext = '.mp3' if ext.lower() == '.m3u8': res = get_resolution() #4773 ls = info.get('live_status') print_(f'live_status: {ls}') if ls == 'is_live': url = foo() else: try: url = playlist2stream(self.url, referer, session=session) except: url = M3u8_stream(self.url, referer=referer, session=session) print_(f'mpegts: {url.mpegts}') if url.ms or url.mpegts == False: #5110 url = url.live url._cw = cw ext = '.mp4' elif ext.lower() == '.mpd': # TVer url = foo() ext = '.mp4' else: url = self.url self.url = LazyUrl(referer, lambda x: url, self, pp=self.pp) info_ext = info.get('ext') if info_ext == 'unknown_video': #vk info_ext = None self.filename = format_filename(title, self.id, info_ext or ext, header=self.header, live=self.live) def pp(self, filename): if self.f_audio: f = BytesIO() downloader.download(self.f_audio['url'], buffer=f, referer=self.referer, session=self.session) ffmpeg.merge(filename, f, cw=self.cw) utils.pp_subtitle(self, filename, self.cw) return filename ================================================ FILE: src/extractor/fc2_downloader.py ================================================ import downloader import ree as re from utils import urljoin, Downloader, format_filename, Soup, LazyUrl, get_print, Session from m3u8_tools import M3u8_stream from io import BytesIO PATTERN_ID = r'/content/([^/]+)' class Downloader_fc2(Downloader): type = 'fc2' single = True URLS = ['video.fc2.com'] ACCEPT_COOKIES = [r'(.*\.)?fc2\.com'] @classmethod def fix_url(cls, url): if not re.match(r'https?://.+', url, re.I): url = f'https://video.fc2.com/content/{url}' return url @classmethod def key_id(cls, url): return re.find(PATTERN_ID, url) or url def read(self): self.session = Session() self.session.cookies.set('_ac', '1', domain='.video.fc2.com') info = get_info(self.url, self.session, self.cw) video = info['videos'][0] self.urls.append(video.url) f = BytesIO() downloader.download(video.url_thumb, referer=self.url, buffer=f) self.setIcon(f) self.title = info['title'] class Video: def __init__(self, url, url_thumb, referer, title, id_, session): self._url = url self.url = LazyUrl(referer, self.get, self) self.filename = format_filename(title, id_, '.mp4') self.url_thumb = url_thumb self.session = session def get(self, referer): ext = downloader.get_ext(self._url, session=self.session, referer=referer) if ext == '.m3u8': video = M3u8_stream(self._url, referer=referer, session=self.session, n_thread=4) else: video = self._url return video def get_info(url, session, cw=None): print_ = get_print(cw) info = {'videos': []} html = downloader.read_html(url, session=session) soup = Soup(html) info['title'] = soup.find('h2', class_='videoCnt_title').text.strip() id_ = re.find(PATTERN_ID, url, err='no id') print_('id: {}'.format(id_)) token = re.find(r'''window.FC2VideoObject.push\(\[['"]ae['"], *['"](.+?)['"]''', html, err='no token') print_('token: {}'.format(token)) url_api = 'https://video.fc2.com/api/v3/videoplaylist/{}?sh=1&fs=0'.format(id_) hdr = { 'X-FC2-Video-Access-Token': token, } data = downloader.read_json(url_api, url, session=session, headers=hdr) pl = data['playlist'] url_video = urljoin(url, pl.get('hq') or pl.get('nq') or pl['sample']) #3784 url_thumb = soup.find('meta', {'property':'og:image'})['content'] video = Video(url_video, url_thumb, url, info['title'], id_, session) info['videos'].append(video) return info ================================================ FILE: src/extractor/file_downloader.py ================================================ import downloader, os from utils import Downloader, query_url, clean_title, get_ext, Session, Soup, File, urljoin, fix_dup, try_n from hashlib import md5 import clf2 import os class Downloader_file(Downloader): type = 'file' single = True URLS = [] ACC_MTIME = True @classmethod def fix_url(cls, url): if url and '://' not in url: url = 'https://' + url.lstrip('/') return url @try_n(4) def read(self): if not self.url.strip(): raise Exception('empty url') self.session = Session() #6525 qs = query_url(self.url) for key in qs: if key.lower() in ('file', 'filename'): name = qs[key][-1] break else: name = self.url for esc in ['?', '#']: name = name.split(esc)[0] name = os.path.basename(name.strip('/')) try: ext = downloader.get_ext(self.url) except: ext = '' if not ext: ext = get_ext(name) name = os.path.splitext(name)[0] id_ = md5(self.url.encode('utf8')).hexdigest()[:8] if ext.lower()[1:] in ['htm', 'html']: self.single = False res = clf2.solve(self.url, session=self.session, cw=self.cw) soup = Soup(res['html']) ext = '' title = soup.find('meta', {'property': 'og:title'}) title = title['content'] names = {} srcs = set() for img in soup.findAll('img'): src = img.get('src') if not src: continue src = urljoin(self.url, src) if src in srcs: continue srcs.add(src) name = os.path.basename(src.split('?')[0].split('#')[0]) ext = get_ext(name) if not ext: try: ext = downloader.get_ext(src) except Exception as e: print(e) name = clean_title(os.path.splitext(name)[0], n=-len(ext)) + ext name = fix_dup(name, names) file = File({'referer': self.url, 'url': src, 'name': name}) self.urls.append(file) else: title = name file = File({'url': self.url, 'name': name}) self.urls.append(file) tail = f' ({id_})' if self.single: tail += f'{ext}' self.title = clean_title(title, n=-len(tail)) + tail def parse(s): _ = {'none': None, 'true': True, 'false': False}.get(s.lower(), ' ') return int(s) if _ == ' ' else _ kwargs = {} c = self.cw.comment() if c.startswith('segment:') and (s := c[len('segment:'):].strip()): if s.count('=') != 1: raise ValueError('not one "="') key, value = s.split('=') kwargs[key] = parse(value) if self.single or kwargs: self.enableSegment(**kwargs) ================================================ FILE: src/extractor/flickr_downloader.py ================================================ from utils import Downloader, File, Session, urljoin, get_ext, clean_title, Soup, limits import utils import ree as re import downloader import clf2 from timee import time TIMEOUT = 10 class File_flickr(File): type = 'flickr' format = '[date] id' @limits(1) def get(self): url = self['referer'] soup = downloader.read_soup(url, session=self.session) img = soup.find('meta', {'property': 'og:image'})['content'] date = re.find(r'"dateCreated":{"data":"([0-9]+)"', soup.html, err='no date') ext = get_ext(img) d = { 'date': int(date), 'id': re.find(r'/photos/[^/]+/([0-9]+)', url, err='no id'), } return {'url': img, 'name': utils.format('flickr', d, ext)} class Downloader_flickr(Downloader): type = 'flickr' URLS = ['flickr.com'] MAX_CORE = 4 ACCEPT_COOKIES = [r'(.*\.)?flickr\.com'] def init(self): self.session = Session() @classmethod def fix_url(cls, url): url = url.replace('flickr.com/people/', 'flickr.com/photos/') uid = re.find(r'flickr.com/photos/([^/]+)', url) if uid: url = f'https://www.flickr.com/photos/{uid}' return url def read(self): tab = ''.join(self.url.split('/')[3:4]) if tab == 'photos': uid = self.url.split('/')[4] title = None ids = set() c = 0 ct = None p_max = 1 def f(html, browser=None): nonlocal title, c, ct, p_max soup = Soup(html) browser.runJavaScript('window.scrollTo(0,document.body.scrollHeight);') for a in soup.findAll('a'): href = a.get('href') or '' href = urljoin(self.url, href) p_max = max(p_max, int(re.find(rf'flickr.com/photos/{uid}/page([0-9]+)', href) or 0)) id_ = re.find(rf'/photos/{uid}/([0-9]+)', href) if not id_: continue if id_ in ids: continue ids.add(id_) file = File_flickr({'referer': href}) self.urls.append(file) if ids: uname = soup.h1.text.strip() title = f'{clean_title(uname)} (flickr_{uid})' self.cw.setTitle(f'{title} - {len(ids)}') if c == len(ids): if not ct: ct = time() dt = time() - ct if dt > TIMEOUT: return True else: ct = None c = len(ids) p = 1 while p <= p_max: url = f'https://www.flickr.com/photos/{uid}/page{p}' self.print_(url) clf2.solve(url, session=self.session, f=f) p += 1 self.title = title else: raise NotImplementedError(tab) ================================================ FILE: src/extractor/gelbooru_downloader.py ================================================ #coding: utf-8 import downloader import ree as re from utils import Downloader, urljoin, query_url, get_max_range, get_print, get_ext, clean_title, Session, check_alive, File, clean_url from translator import tr_ from urllib.parse import quote import utils def get_tags(url): url = clean_url(url) qs = query_url(url) if 'page=favorites' in url: id = qs.get('id', ['N/A'])[0] id = 'fav_{}'.format(id) else: tags = qs.get('tags', []) tags.sort() id = ' '.join(tags) if not id: id = 'N/A' return id class Downloader_gelbooru(Downloader): type = 'gelbooru' URLS = ['gelbooru.com'] MAX_CORE = 8 _name = None ACCEPT_COOKIES = [r'(.*\.)?gelbooru\.com'] def init(self): self.session = Session() @classmethod def fix_url(cls, url): if 'gelbooru.com' in url.lower(): url = url.replace('http://', 'https://') else: url = url.replace(' ', '+') while '++' in url: url = url.replace('++', '+') url = quote(url) url = url.replace('%2B', '+') url = 'https://gelbooru.com/index.php?page=post&s=list&tags={}'.format(url) return url @property def name(self): if self._name is None: tags = get_tags(self.url) self._name = tags return clean_title(self._name) def read(self): self.title = self.name self.urls += get_imgs(self.url, self.session, self.name, cw=self.cw) self.title = self.name class File_gelbooru(File): type = 'gelbooru' format = 'id' def get(self): soup = downloader.read_soup(self['referer'], session=self.session) for li in soup.findAll('li'): if li.text.strip() == 'Original image': break else: raise Exception('no Original image') url = li.find('a')['href'] d = { 'id': self['id'], } return {'url': url, 'name': utils.format('gelbooru', d, get_ext(url))} def alter(self): return self.get()['url'] def setPage(url, page): if 'pid=' in url: url = re.sub('pid=[0-9]*', f'pid={page}', url) else: url += f'&pid={page}' if page == 0: url = url.replace('&pid=0', '') return url def get_imgs(url, session, title=None, cw=None): print_ = get_print(cw) url = clean_url(url) if 's=view' in url and 'page=favorites' not in url: raise NotImplementedError('Not Implemented') tags = get_tags(url) tags = quote(tags, safe='/') tags = tags.replace('%20', '+') url = f'https://gelbooru.com/index.php?page=post&s=list&tags={tags}' # 2566 user_id = session.cookies.get('user_id', domain='gelbooru.com') if not user_id: cookies = {'fringeBenefits': 'yup'} session.cookies.update(cookies) print_('user_id: {}'.format(user_id)) # Range max_pid = get_max_range(cw) imgs = [] ids = set() count_no_imgs = 0 for p in range(500): #1017 check_alive(cw) url = setPage(url, len(ids)) print_(url) soup = downloader.read_soup(url, session=session) posts = soup.findAll(class_='thumbnail-preview') imgs_new = [] for post in posts: id_ = int(re.find('[0-9]+', post.find('a')['id'], err='no id')) if id_ in ids: print('duplicate:', id_) continue ids.add(id_) url_img = urljoin(url, post.find('a')['href']) img = File_gelbooru({'id': id_, 'referer': url_img, 'name_hint': f'{id_}{{ext}}'}) imgs_new.append(img) if imgs_new: imgs += imgs_new count_no_imgs = 0 else: print('no imgs') count_no_imgs += 1 if count_no_imgs > 1: print('break') break if len(imgs) >= max_pid: break if cw is not None: cw.setTitle('{} {} - {}'.format(tr_('읽는 중...'), title, len(imgs))) return imgs[:max_pid] ================================================ FILE: src/extractor/hameln_downloader.py ================================================ #coding: utf8 import downloader import os import utils from utils import Soup, urljoin, get_text, LazyUrl, try_n, Downloader, lazy, clean_title import ree as re from io import BytesIO from translator import tr_ class Downloader_hameln(Downloader): type = 'hameln' URLS = ['syosetu.org'] MAX_CORE = 2 detect_removed = False ACCEPT_COOKIES = [r'(.*\.)?syosetu\.org'] def init(self): id_ = re.find('/novel/([^/]+)', self.url) if id_ is not None: self.url = 'https://syosetu.org/novel/{}/'.format(id_) @lazy def soup(self): html = read_html(self.url) soup = Soup(html) return soup @lazy def info(self): return get_info(self.url, self.soup) def read(self): for page in get_pages(self.url, self.soup): text = Text(page, len(self.urls)+1) self.urls.append(text.url) self.artist = self.info['artist'] self.title = clean_title('[{}] {}'.format(self.artist, self.info['title']), n=-len('[merged] .txt')) def post_processing(self): names = self.cw.names filename = os.path.join(self.dir, '[merged] {}.txt'.format(self.title)) try: with utils.open(filename, 'wb') as f: f.write(' {}\n\n 作者:{}\n\n\n'.format(self.info['title'], self.artist).encode('utf8')) if self.info['novel_ex']: f.write(self.info['novel_ex'].encode('utf8')) for i, file in enumerate(names): self.cw.pbar.setFormat('[%v/%m] {} [{}/{}]'.format(tr_('병합...'), i, len(names))) with open(file, 'rb') as f_: text = f_.read() f.write(b'\n\n\n\n') f.write(text) finally: self.cw.pbar.setFormat('[%v/%m]') class Text: def __init__(self, page, p): self.page = page self.url = LazyUrl(page.url, self.get, self) self.filename = clean_title('[{:04}] {}'.format(p, page.title), n=-4) + '.txt' def get(self, url): text = read_page(self.page) f = BytesIO() f.write(text.encode('utf8')) f.seek(0) return f class Page: def __init__(self, title, url): self.title = clean_title(title) self.url = url def read_html(url): return downloader.read_html(url, cookies={'over18': 'off'}, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}) def get_sss(soup): sss = [ss for ss in soup.findAll('div', class_='ss') if ss.attrs.get('id')!='fmenu'] return sss def get_pages(url, soup=None): if soup is None: html = read_html(url) soup = Soup(html) sss = get_sss(soup) list = sss[-1] pages = [] for tr in list.findAll('tr'): a = tr.find('a') if a is None: continue text =a.text.strip() href = urljoin(url, a.attrs['href']) page = Page(text, href) pages.append(page) return pages @try_n(22, sleep=30) def read_page(page): html = read_html(page.url) soup = Soup(html) text_top = get_text(soup.find('div', id='maegaki')) print(text_top.count('\n')) text_mid = get_text(soup.find('div', id='honbun')) text_bot = get_text(soup.find('div', id='atogaki')) texts = [text for text in (text_top, text_mid, text_bot) if text] story = ''' ──────────────────────────────── '''.join(texts) text = '''──────────────────────────────── ◆ {} ──────────────────────────────── {}'''.format(page.title, story) return text def get_info(url, soup=None): if soup is None: html = read_html(url) soup = Soup(html) info = {} info['artist'] = soup.find('span', {'itemprop':'author'}).text.strip() info['title'] = soup.find('span', {'itemprop':'name'}).text.strip() sss = get_sss(soup) info['novel_ex'] = get_text(sss[-2]) return info ================================================ FILE: src/extractor/hanime_downloader.py ================================================ import downloader from utils import Session, Downloader, try_n, Soup, format_filename, get_print, get_resolution, json import ree as re from io import BytesIO import os from timee import time from m3u8_tools import M3u8_stream from random import randrange class Video: def __init__(self, info, stream): self.info = info self.id = info['id'] self.title = info['name'] self.brand = info['brand'] self.url = stream['url'] self.url_thumb = info['poster_url'] self.thumb = BytesIO() downloader.download(self.url_thumb, buffer=self.thumb) ext = os.path.splitext(self.url.split('?')[0].split('#')[0])[1] if ext.lower() == '.m3u8': ext = '.mp4' self.url = M3u8_stream(self.url, n_thread=4) for i, seg in self.url.urls[-20:]: seg._ignore_err = True #5272 else: size = downloader.get_size(self.url) if size <= 0: raise Exception('Size is 0') self.filename = format_filename('[{}] {}'.format(self.brand, self.title), self.id, ext) def __repr__(self): return f'Video({self.id})' class Downloader_hanime(Downloader): type = 'hanime' URLS = ['hanime.tv/hentai-videos/', 'hanime.tv/videos/'] single = True display_name = 'hanime.tv' ACCEPT_COOKIES = [r'(.*\.)?hanime\.tv'] def init(self): self.session = Session('chrome') def read(self): video = get_video(self.url, self.session, cw=self.cw) self.video = video self.urls.append(video.url) self.filenames[video.url] = video.filename self.setIcon(video.thumb) self.title = '[{}] {}'.format(video.brand, video.title) @try_n(8) def get_video(url, session, cw=None): print_ = get_print(cw) session.headers['X-Directive'] = 'api' html = downloader.read_html(url, session=session) soup = Soup(html) for script in soup.findAll('script'): script = script.text or script.string or '' data = re.find('window.__NUXT__=(.+)', script) if data is not None: data = data.strip() if data.endswith(';'): data = data[:-1] data = json.loads(data) break else: raise Exception('No __NUXT__') info = data['state']['data']['video']['hentai_video'] query = info['slug'] #url_api = 'https://members.hanime.tv/api/v3/videos_manifests/{}?'.format(query) # old url_api = 'https://hanime.tv/rapi/v7/videos_manifests/{}?'.format(query) # new hdr = { 'x-signature': ''.join('{:x}'.format(randrange(16)) for i in range(32)), 'x-signature-version': 'web2', 'x-time': str(int(time())), } r = session.get(url_api, headers=hdr) data = json.loads(r.text) streams = [] for server in data['videos_manifest']['servers']: streams += server['streams'] streams_good = [] for stream in streams: url_video = stream['url'] if not url_video or 'deprecated.' in url_video: continue stream['height'] = int(stream['height']) streams_good.append(stream) if not streams_good: raise Exception('No video available') res = get_resolution() def print_stream(stream): print_([stream['extension'], stream['height'], stream['filesize_mbs'], stream['url']]) steams_filtered = [] for stream in streams_good: print_stream(stream) if stream['height'] <= res: #3712 steams_filtered.append(stream) if steams_filtered: stream = sorted(steams_filtered, key=lambda _: _['height'])[-1] else: stream = sorted(streams_good, key=lambda _: _['height'])[0] print_('Final stream:') print_stream(stream) return Video(info, stream) ================================================ FILE: src/extractor/hentaicosplay_downloader.py ================================================ #coding: utf8 import downloader from utils import Downloader, Session, Soup, LazyUrl, urljoin, get_ext, clean_title, try_n, limits import utils import ree as re from translator import tr_ import clf2 from m3u8_tools import M3u8_stream from timee import sleep import os class Image: def __init__(self, url, referer, p, session): self._url = url self._referer = referer self._p = p self.url = LazyUrl(url, self.get, self) self.session = session @try_n(3, 5) @limits(1) def get(self, _=None): soup = downloader.read_soup(self._url, self._referer, session=self.session) div = soup.find('div', id='display_image_detail') or soup.find('ul', id='detail_list') parent = div.find('img').parent while not parent.get('href'): parent = parent.parent url = urljoin(self._url, parent['href']) ext = get_ext(url) self.filename = '{:04}{}'.format(self._p, ext) return url, self._url class Video: def __init__(self, src, referer, title, session): ext = get_ext(src) if ext == '.m3u8': _src = src src = M3u8_stream(_src, referer=referer, session=session) ext = '.mp4' self.url = LazyUrl(referer, lambda _: src, self) self.filename = '{}{}'.format(clean_title(title), ext) class Downloader_hentaicosplay(Downloader): type = 'hentaicosplay' URLS = ['hentai-cosplays.com', 'porn-images-xxx.com', 'hentai-img.com', 'porn-video-xxx.com'] icon = None display_name = 'Hentai Cosplay' MAX_PARALLEL = 1 # must be 1 MAX_CORE = 4 ACCEPT_COOKIES = [rf'(.*\.)?{domain}' for domain in URLS] @classmethod def fix_url(cls, url): url = re.sub(r'/page/[0-9]+', '', url) url = re.sub(r'/attachment/[0-9]+', '', url) url = re.sub(r'([a-zA-Z]+\.)hentai-cosplays\.com', 'hentai-cosplays.com', url) url = re.sub(r'.com/story/', '.com/image/', url) return url def init(self): self.session = Session() @try_n(2) def read(self): #4961 ua = downloader.ua.random self.print_(f'read start ua: {ua}') downloader.REPLACE_UA[r'hentai-cosplays\.com'] = ua downloader.REPLACE_UA[r'porn-images-xxx\.com'] = ua if '/video/' in self.url: res = clf2.solve(self.url, session=self.session, cw=self.cw) soup = Soup(res['html']) title = (soup.find('h1', id='post_title') or soup.find('div', id='page').find('h2')).text.strip() self.title = title view = soup.find('div', id='post') or soup.find('div', class_='video-container') video = view.find('video') src = video.find('source')['src'] src = urljoin(self.url, src) video = Video(src, self.url, title, self.session) self.urls.append(video.url) self.single = True return if '/image/' not in self.url: raise NotImplementedError('Not a post') res = clf2.solve(self.url, session=self.session, cw=self.cw) soup = Soup(res['html']) title = (soup.find('h2') or soup.find('h3')).text paginator = soup.find('div', id='paginator') or soup.find('div', class_='paginator_area') pages = [self.url] for a in paginator.findAll('a'): href = a.get('href') if not href: continue href = urljoin(self.url, href) if href not in pages: pages.append(href) self.print_(f'pages: {len(pages)}') imgs = [] for i, page in enumerate(pages): sleep(2, self.cw) if page == self.url: soup_page = soup else: soup_page = try_n(3, 5)(downloader.read_soup)(page, session=self.session) view = soup_page.find('div', id='post') or soup_page.find('ul', id='detail_list') for img in view.findAll('img'): href = img.parent.get('href') or img.parent.parent.get('href') if not href: continue href = urljoin(page, href) img = Image(href, page, len(imgs), self.session) imgs.append(img) self.print_(f'imgs: {len(imgs)}') self.cw.setTitle('{} {} ({} / {})'.format(tr_('읽는 중...'), title, i+1, len(pages))) names = {} dirname = utils.dir(self.type, clean_title(title), self.cw) try: files = os.listdir(dirname) except: files = [] for file in files: name, ext = os.path.splitext(file) names[name] = ext for p, img in enumerate(imgs): name = '{:04}'.format(p) ext = names.get(name) if ext: self.urls.append(os.path.join(dirname, '{}{}'.format(name, ext))) else: self.urls.append(img.url) self.title = clean_title(title) ================================================ FILE: src/extractor/hf_downloader.py ================================================ #coding:utf8 import downloader from utils import Soup, urljoin, Session, LazyUrl, Downloader, try_n, clean_title, check_alive import ree as re import os from translator import tr_ URL_ENTER = 'https://www.hentai-foundry.com/site/index?enterAgree=1&size=1550' URL_FILTER = 'https://www.hentai-foundry.com/site/filters' class Image: def __init__(self, url, session): @try_n(4) def f(_): html = downloader.read_html(url, session=session) soup = Soup(html) box = soup.find('section', id='picBox') img = box.find('img') if img is None: raise Exception('No img') onclick = img.attrs.get('onclick', '') if onclick and '.src' in onclick: print('onclick', onclick) img = re.find('''.src *= *['"](.+?)['"]''', onclick) else: img = img.attrs['src'] img = urljoin(url, img) filename = clean_title(os.path.basename(img.split('?')[0])) name, ext = os.path.splitext(filename) # https://www.hentai-foundry.com/pictures/user/DrGraevling/74069/Eversong-Interrogation-pg.-13 if ext.lower() not in ['.bmp', '.png', '.gif', '.jpg', '.jpeg', '.webp', '.webm', '.avi', '.mp4', '.mkv', '.wmv']: filename = '{}.jpg'.format(name) self.filename = filename return img self.url = LazyUrl(url, f, self) def get_username(url): if 'user/' in url: username = url.split('user/')[1].split('?')[0].split('/')[0] return username class Downloader_hf(Downloader): type = 'hf' URLS = ['hentai-foundry.com'] MAX_CORE = 16 display_name = 'Hentai Foundry' ACCEPT_COOKIES = [r'(.*\.)?hentai-foundry\.com'] def init(self): self.session = enter() @classmethod def fix_url(cls, url): username = get_username(url) return 'https://www.hentai-foundry.com/user/{}'.format(username) def read(self): username = get_username(self.url) self.title = username imgs = get_imgs(username, self.title, self.session, cw=self.cw) for img in imgs: self.urls.append(img.url) self.title = username @try_n(2) def enter(): print('enter') session = Session() r = session.get(URL_ENTER) # 862 html = r.text soup = Soup(html) box = soup.find('aside', id='FilterBox') data = {} for select in box.findAll('select'): name = select.attrs['name'] value = select.findAll('option')[-1].attrs['value'] print(name, value) data[name] = value for input in box.findAll('input'): name = input.attrs['name'] value = input.attrs['value'] if name.startswith('rating_') or 'CSRF_TOKEN' in name: print(name, value) data[name] = value data.update({ 'filter_media': 'A', 'filter_order': 'date_new', 'filter_type': '0', }) r = session.post(URL_FILTER, data=data, headers={'Referer': r.url}) print(r) return session def get_imgs(username, title, session, cw=None): url = 'https://www.hentai-foundry.com/pictures/user/{}'.format(username) #downloader.read_html(url_enter, session=session) hrefs = [] for p in range(100): check_alive(cw) print(url) html = downloader.read_html(url, session=session) soup = Soup(html) if soup.find('div', id='entryButtonContainer'): session = enter() continue tab = soup.find('a', class_='active') n = re.find(r'\(([0-9]+)', tab.text) view = soup.find('div', class_='galleryViewTable') for a in view.findAll('a', class_='thumbLink'): href = urljoin(url, a.attrs['href']) if href in hrefs: print('dup') continue hrefs.append(href) next = soup.find(lambda tag: tag.name == 'li' and tag.get('class') == ['next']) if next is None: break url = urljoin(url, next.a.attrs['href']) s = '{} {} ({} / {})'.format(tr_('읽는 중...'), title, len(hrefs), n) if cw: cw.setTitle(s) else: print(s) imgs = [] for href in hrefs: img = Image(href, session) imgs.append(img) return imgs ================================================ FILE: src/extractor/imgur_downloader.py ================================================ import downloader from utils import Downloader, Soup, try_n, urljoin, get_max_range, clean_title, cut_pair, check_alive, json import ree as re import os from translator import tr_ class Downloader_imgur(Downloader): type = 'imgur' URLS = ['imgur.com'] MAX_CORE = 16 ACCEPT_COOKIES = [r'(.*\.)?imgur\.com'] def init(self): self.info = get_info(self.url) @property def id_(self): return re.find('imgur.com/.+?/([0-9a-zA-Z]+)', self.url) @property def name(self): title = self.info['title'] or 'N/A' return clean_title(title, n=100) def read(self): imgs = get_imgs(self.url, self.info, self.cw) for img in imgs: ext = os.path.splitext(img.split('?')[0])[1] if len(imgs) > 1: self.filenames[img] = '{:04}{}'.format(len(self.urls), ext) else: self.filenames[img] = clean_title(self.name, n=-len(ext)) + ext self.urls.append(img) self.single = len(imgs) == 1 self.referer = self.url self.title = '{} (imgur_{})'.format(self.name, self.id_) @try_n(4) def get_info(url): url = url.replace('/gallery/', '/a/') if '/r/' in url and url.split('/r/')[1].strip('/').count('/') == 0: title = re.find(r'/r/([^/]+)', url) info = {} info['title'] = title info['type'] = 'r' else: try: # legacy html = downloader.read_html(url, cookies={'over18':'1'}) s = re.find('image *: *({.+)', html) info_raw = cut_pair(s) except Exception as e: # new print(e) id_ = re.find(r'/a/([0-9a-zA-Z_]+)', url) or re.find(r'/r/[0-9a-zA-Z_]+/([0-9a-zA-Z_]+)', url, err='no id') url_api = 'https://api.imgur.com/post/v1/albums/{}?client_id=546c25a59c58ad7&include=media%2Cadconfig%2Caccount'.format(id_) info_raw = downloader.read_html(url_api, cookies={'over18':'1'}) info = json.loads(info_raw) info['type'] = 'a' return info def get_imgs(url, info=None, cw=None): print('get_imgs', url) if info is None: info = get_info(url) imgs = [] # Range max_pid = get_max_range(cw) if info['type'] == 'a': if 'album_images' in info: # legacy imgs_ = info['album_images']['images'] elif 'media' in info: # new imgs_ = info['media'] else: # legacy imgs_ = [info] for img in imgs_: img_url = img.get('url') # new if not img_url: # legacy hash = img['hash'] ext = img['ext'] img_url = 'https://i.imgur.com/{}{}'.format(hash, ext) if img_url in imgs: continue imgs.append(img_url) elif info['type'] == 'r': urls = set() for p in range(100): url_api = 'https://imgur.com/r/{}/new/page/{}/hit?scrolled'.format(info['title'], p) print(url_api) html = downloader.read_html(url_api, referer=url) soup = Soup(html) c = 0 for post in soup.findAll('div', class_='post'): check_alive(cw) a = post.find('a', class_='image-list-link') url_post = urljoin(url, a.attrs['href']) if url_post in urls: continue urls.add(url_post) c += 1 try: # for r18 images imgs += get_imgs(url_post) except Exception as e: print(e) s = '{} {} ({})'.format(tr_('읽는 중...'), info['title'], len(imgs)) if cw is not None: cw.setTitle(s) else: print(s) if c == 0: print('same; break') break if len(imgs) >= max_pid: break return imgs ================================================ FILE: src/extractor/iwara_downloader.py ================================================ import downloader from utils import Soup, urljoin, Downloader, LazyUrl, get_print, clean_url, clean_title, check_alive, Session, try_n, format_filename, tr_, get_ext, print_error, get_max_range import ree as re import errors import clf2 import hashlib import urllib from io import BytesIO from timee import time TIMEOUT = 300 PATTERN_ID = r'(image|video)/([0-9a-zA-Z_-]+)' class Downloader_iwara(Downloader): type = 'iwara' URLS = ['iwara.tv'] MAX_CORE = 16# single = True display_name = 'Iwara' ACCEPT_COOKIES = [r'(.*\.)?iwara\.tv'] @classmethod def fix_url(cls, url): url = clean_url(url) return url.split('?')[0] def init(self): self.session = Session() self.setTimeout(TIMEOUT) def read(self): info = get_info(self.url, self.session, self.cw) if info is None: return # embeded self.title = clean_title(info['title']) videos = info['files'] self.single = len(videos) < 2 # first video must be valid while videos: video = videos[0] try: video.url() break except Exception as e: e_ = e self.print_(print_error(e)) videos.remove(video) else: raise e_ if info.get('playlist', False): video = self.process_playlist(info['title'], videos) else: #6031 self.urls += [file.url for file in videos] self.enableSegment(n_threads=8) url_thumb = video.url_thumb self.print_(f'url_thumb: {url_thumb}') if url_thumb: f = BytesIO() downloader.download(url_thumb, buffer=f, session=self.session, customWidget=self.cw) f.seek(0) self.setIcon(f) username = info.get('username') if username: self.artist = username class File: def __init__(self, type, url, referer, info, session, multi_post=False): title = info['title'] p = len(info['files']) self.url = LazyUrl(referer, lambda _: url, self) ext = get_ext(url) or downloader.get_ext(url, session=session) if type == 'video': id_ = re.find(PATTERN_ID, referer, err='no video id')[1] self.filename = format_filename(title, id_, ext, artist=info.get('username')) #4287, #7127 else: name = '{}_p{}'.format(clean_title(title), p) if multi_post else p self.filename = '{}{}'.format(name, ext) self.url_thumb = info.get('url_thumb') class LazyFile: def __init__(self, url, session, cw): self.session = session self.cw = cw self.url = LazyUrl(url, self.get, self) def get(self, url): info = get_info(url, self.session, self.cw) file = info['files'][0] self.filename = file.filename self.url_thumb = file.url_thumb return file.url() def get_token(session, cw=None): #5794, #6031, #7030 token = None def f(html, browser=None): def callback(r): nonlocal token token = r browser.runJavaScript('window.localStorage.getItem("token")', callback=callback) return bool(token) clf2.solve('https://iwara.tv', session=session, cw=cw, f=f, timeout=15) #print_(f'token: {token}') r = session.post('https://api.iwara.tv/user/token', headers={'Authorization': f'Bearer {token}'}) d = r.json() token = d['accessToken'] #print_(f'token2: {token}') return token @try_n(2) def get_info(url, session, cw, multi_post=False): print_ = get_print(cw) t0 = None def f(html, browser=None): nonlocal t0 soup = Soup(html) if t0 is None: t0 = time() if time() - t0 > 10 or '/profile/' in url.lower(): for a in soup.findAll('a'): if urljoin(url, a.get('href', '')) == urljoin(url, '/login'): raise errors.LoginRequired(method='browser', url='https://www.iwara.tv/login', cookie=False, w=1460) #5794 buttons = soup.findAll(class_='button--primary') if buttons: for i, button in enumerate(buttons): button_text = button.text if not button_text: continue print_(f'button: {button_text}') if button_text.lower() in ['i am over 18', 'continue', '私は18歳以上です', '続ける', '继续', '我已满年满 18 岁']: #7534 browser.runJavaScript(f'btns=document.getElementsByClassName("button--primary");btns[{i}].click();') #5794#issuecomment-1517879513 if '/profile/' in url.lower(): return soup.find('div', class_='page-profile__header') is not None else: details = soup.find('div', class_='page-video__details') if details and not soup.find('div', class_='vjs-poster') and not soup.find(class_='embedPlayer__youtube'): #6737, #6836 print_('no poster') return False details = details or soup.find('div', class_='page-image__details') return details is not None and details.find('div', class_='text--h1') is not None html = clf2.solve(url, session=session, f=f, cw=cw, timeout=30)['html'] #5794 soup = Soup(html) try: token = get_token(session, cw=cw) except Exception as e: print_(print_error(e)) token = None hdr = {} if token: session.headers['Authorization'] = f'Bearer {token}' info = {} info['files'] = [] type = url.split('/')[3] if type == 'profile': max_pid = get_max_range(cw) ids = set() sub = (url+'/').split('/')[5] if not sub: sub = 'videos' uid = url.split('/')[4] url_api = f'https://api.iwara.tv/profile/{uid}' j = downloader.read_json(url_api, session=session) info['username'] = username = j['user']['name'] info['id'] = id = j['user']['username'] info['title'] = f'[Channel] [{sub.capitalize()}] {username} ({id})' id = j['user']['id'] if sub == 'videos': info['playlist'] = True for p in range(100): url_api = f'https://api.iwara.tv/videos?sort=date&page={p}&user={id}' j = downloader.read_json(url_api, session=session) for post in j['results']: id_ = post['id'] if id_ in ids: continue ids.add(id_) slug = post['slug'] url_post = f'https://www.iwara.tv/video/{id_}/{slug}' file = LazyFile(url_post, session, cw) info['files'].append(file) if cw: cw.setTitle(tr_('읽는 중... {} ({} / {})').format(info['title'], len(ids), j['count'])) if len(info['files']) >= max_pid: break if j['limit']*(p+1) >= j['count']: break elif sub == 'images': for p in range(100): url_api = f'https://api.iwara.tv/images?page={p}&sort=date&user={id}' j = downloader.read_json(url_api, session=session) for post in j['results']: check_alive(cw) id_ = post['id'] if id_ in ids: continue ids.add(id_) slug = post['slug'] url_post = f'https://www.iwara.tv/image/{id_}/{slug}' info_post = get_info(url_post, session, cw, True) info['files'] += info_post['files'] print_(f'imgs: {len(info["files"])}') if cw: cw.setTitle(tr_('읽는 중... {} ({} / {})').format(info['title'], len(ids), j['count'])) if len(info['files']) >= max_pid: break if len(info['files']) >= max_pid: break if j['limit']*(p+1) >= j['count']: break else: raise NotImplementedError(f'profile: {sub}') return info details = soup.find('div', class_='page-video__details') or soup.find('div', class_='page-image__details') info['title'] = details.find('div', class_='text--h1').text.strip() info['username'] = soup.find('a', class_='username')['title'] soup.find('div', class_='videoPlayer') or soup.find('div', class_='page-image__slideshow') id = re.find(PATTERN_ID, url, err='no id')[1] url_api = f'https://api.iwara.tv/{type}/{id}' data = downloader.read_json(url_api, url, session=session) if data.get('embedUrl'): if cw and not cw.downloader.single: raise errors.Invalid('[iwara] Embeded: {}'.format(data['embedUrl'])) #5869 cw.downloader.pass_() cw.gal_num = cw.url = data['embedUrl'] d = Downloader.get('youtube')(data['embedUrl'], cw, cw.downloader.thread, 1) d.start() return if not data.get('files'): data['files'] = [data['file']] for file in data['files']: id_ = file['id'] if type == 'video': fileurl = data['fileUrl'] up = urllib.parse.urlparse(fileurl) q = urllib.parse.parse_qs(up.query) paths = up.path.rstrip('/').split('/') x_version = hashlib.sha1('_'.join((paths[-1], q['expires'][0], '5nFp9kmbNnHdAFhaqMvt')).encode()).hexdigest() # https://github.com/yt-dlp/yt-dlp/issues/6549#issuecomment-1473771047 j = downloader.read_json(fileurl, url, session=session, headers={'X-Version': x_version}) def key(x): if x['name'].lower() == 'source': return float('inf') try: return float(x['name']) except: return -1 x = sorted(j, key=key)[-1] print_(f'name: {x["name"]}') url_file = urljoin(url, x['src']['view']) poster = soup.find('div', class_='vjs-poster')['style'] info['url_thumb'] = urljoin(url, re.find(r'url\("(.+?)"', poster, err='no poster')) else: name = file['name'] url_file = f'https://i.iwara.tv/image/original/{id_}/{name}' if len(data['files']) == 1: multi_post = True# file = File(type, url_file, url, info, session, multi_post) info['files'].append(file) return info ================================================ FILE: src/extractor/jmana_downloader.py ================================================ import downloader from utils import Soup, urljoin, Downloader, fix_title, Session, get_print, LazyUrl, clean_title, get_imgs_already, check_alive, try_n, clean_url import ree as re from timee import sleep from translator import tr_ import page_selector import bs4 import clf2 PATTERN = r'jmana[0-9]*.*/(comic_list_title|book)\?book' PATTERN_ALL = r'jmana[0-9]*.*/((comic_list_title|book|bookdetail)\?book|book_by_title\?title)' #6157 PATTERN_ID = '[?&]bookdetailid=([0-9]+)' class Image: def __init__(self, url, page, p): self.url = LazyUrl(page.url, lambda _: url, self) ext = '.jpg' name = '{:04}{}'.format(p, ext) self.filename = '{}/{}'.format(page.title, name) class Page: def __init__(self, title, url): self.title = clean_title(title) self.url = url self.id = int(re.find(PATTERN_ID, url)) class Downloader_jmana(Downloader): type = 'jmana' URLS = ['regex:'+PATTERN_ALL] MAX_CORE = 8 _soup = None def init(self): self.url = clean_url(self.url) self.session = Session() if re.search(PATTERN_ID, self.url): #1799 select = self.soup.find('select', class_='bookselect') for i, op in enumerate(select.findAll('option')[::-1]): if 'selected' in op.attrs: break else: raise Exception('no selected option') for a in self.soup.findAll('a'): url = urljoin(self.url, a.get('href') or '') if re.search(PATTERN, url): break else: raise Exception('list not found') self.url = self.fix_url(url) self._soup = None for i, page in enumerate(get_pages(self.url, self.soup, self.session)): if page.id == int(op['value']): break else: raise Exception('can not find page') self.cw.range_p = [i] @classmethod def fix_url(cls, url): return url @property def soup(self): if self._soup is None: res = clf2.solve(self.url, session=self.session) #4070 html = res['html'] soup = Soup(html) self._soup = soup return self._soup @property def name(self): title = get_title(self.soup) artist = get_artist(self.soup) title = fix_title(self, title, artist) return title def read(self): title = self.name artist = get_artist(self.soup) self.artist = artist for img in get_imgs(self.url, title, self.session, soup=self.soup, cw=self.cw): if isinstance(img, Image): self.urls.append(img.url) else: self.urls.append(img) self.title = self.name def get_title(soup): a = soup.find('a', class_='tit') if a: return a.text.strip() return re.find(r'제목\s*:\s*(.+)', soup.find('a', class_='tit').text, err='no title') def get_artist(soup): return re.find(r'작가\s*:\s*(.+)', soup.text, default='').strip() or 'N/A' @try_n(4, sleep=60) def get_imgs_page(page, referer, session, cw=None): print_ = get_print(cw) sleep(5, cw) #2017 html = downloader.read_html(page.url, referer, session=session) inserted = re.find(r'''var\s*inserted\s*=\s*['"](.*?)['"]''', html) print_('inserted: {}'.format(inserted)) inserted = set(int(i) for i in inserted.split(',')) if inserted else set() soup = Soup(html) view = soup.find(class_='pdf-wrap') imgs = [] for i, img in enumerate(child for child in view.children if isinstance(child, bs4.element.Tag)): src = img.get('data-src') or img.get('src') or '' if i in inserted: print_('remove: {}'.format(src)) continue if not src: continue src = urljoin(page.url, src.strip()) if '/adimg/' in src: print('adimg:', src) continue if '/notice' in src: print('notice:', src) continue img = Image(src, page, len(imgs)) imgs.append(img) return imgs def get_pages(url, soup, session): pages = [] for inner in soup.findAll('div', class_='inner'): a = inner.find('a') if not a: continue href = a.attrs.get('href', '') if not re.search(PATTERN_ID, href): continue if a.find('img'): print('skip img', a.attrs.get('href')) continue href = urljoin(url, href) title_page = a.text page = Page(title_page, href) pages.append(page) pages = list(reversed(pages)) return pages @page_selector.register('jmana') def f(url, win): if re.search(PATTERN_ID, url): raise Exception(tr_('목록 주소를 입력해주세요')) session = Session() res = clf2.solve(url, session=session, win=win) #4070 soup = Soup(res['html']) pages = get_pages(url, soup, session) return pages def get_imgs(url, title, session, soup=None, cw=None): print_ = get_print(cw) if soup is None: html = downloader.read_html(url, session=session) soup = Soup(html) pages = get_pages(url, soup, session) print_('pages: {}'.format(len(pages))) pages = page_selector.filter(pages, cw) imgs = [] for i, page in enumerate(pages): check_alive(cw) imgs_already = get_imgs_already('jmana', title, page, cw) if imgs_already: imgs += imgs_already continue imgs += get_imgs_page(page, url, session, cw) if cw is not None: cw.setTitle('{} {} / {} ({} / {})'.format(tr_('읽는 중...'), title, page.title, i + 1, len(pages))) if not imgs: raise Exception('no imgs') return imgs ================================================ FILE: src/extractor/kakaotv_downloader.py ================================================ import downloader import ytdl from utils import Downloader, try_n, LazyUrl, get_ext, format_filename from io import BytesIO as IO class Downloader_kakaotv(Downloader): type = 'kakaotv' URLS = ['tv.kakao'] single = True display_name = 'KakaoTV' ACCEPT_COOKIES = [r'(.*\.)?kakao\.com'] @classmethod def fix_url(cls, url): url = url.replace('.kakao.com/m/', '.kakao.com/') return url.split('?')[0].strip('/') def read(self): video = Video(self.url, cw=self.cw) video.url()# self.urls.append(video.url) self.setIcon(video.thumb) self.enableSegment() self.title = video.title class Video: _url = None def __init__(self, url, cw=None): self.url = LazyUrl(url, self.get, self) self.cw = cw @try_n(2) def get(self, url): if self._url: return self._url ydl = ytdl.YoutubeDL(cw=self.cw) info = ydl.extract_info(url) fs = [f for f in info['formats'] if f['ext'] == 'mp4'] f = sorted(fs, key=lambda f: f['height'])[-1] self._url = f['url'] self.thumb_url = info['thumbnails'][0]['url'] self.thumb = IO() downloader.download(self.thumb_url, buffer=self.thumb) self.title = info['title'] ext = get_ext(self._url) self.filename = format_filename(self.title, info['id'], ext) return self._url ================================================ FILE: src/extractor/kakuyomu_downloader.py ================================================ #coding:utf8 import downloader import utils from utils import Soup, urljoin, Downloader, LazyUrl, try_n, clean_title, get_print, json, File import os from io import BytesIO from translator import tr_ class Page(File): type = 'kakuyomu' format = 'title' def __init__(self, info): info['title_all'] = clean_title('[{:04}] {}'.format(info['p'], info['title'])) d = { 'title': info['title_all'], } info['name'] = utils.format(self.type, d, '.txt') super().__init__(info) def get(self): text = get_text(self) f = BytesIO() f.write(text.encode('utf8')) f.seek(0) return {'url': f} class Downloader_kakuyomu(Downloader): type = 'kakuyomu' URLS = ['kakuyomu.jp'] MAX_CORE = 2 detect_removed = False display_name = 'カクヨム' ACCEPT_COOKIES = [r'(.*\.)?kakuyomu\.jp'] atts = ['info_title', 'info_description'] def read(self): self.info = get_info(self.url, cw=self.cw) self.artist = self.info['artist'] title_dir = clean_title('[{}] {}'.format(self.artist, self.info['title'])) outdir = utils.dir(self.type, title_dir, self.cw) self.urls += self.info['pages'] self.title = title_dir self.info_title = self.info['title'] self.info_description = self.info['description'] def post_processing(self): names = self.cw.names filename = clean_title('[merged] [{}] {}'.format(self.artist, self.info_title), n=-4) + '.txt' filename = os.path.join(self.dir, filename) try: with utils.open(filename, 'wb') as f: f.write(' {}\n\n 作者:{}\n\n\n'.format(self.info_title, self.artist).encode('utf8')) f.write(self.info_description.encode('utf8')) for i, file in enumerate(names): self.cw.pbar.setFormat('[%v/%m] {} [{}/{}]'.format(tr_('병합...'), i, len(names))) with open(file, 'rb') as f_: text = f_.read() f.write(b'\n\n\n\n') f.write(text) finally: self.cw.pbar.setFormat('[%v/%m]') @try_n(4, sleep=30) def get_text(page): html = downloader.read_html(page['referer']) soup = Soup(html) view = soup.find('div', class_='widget-episodeBody') story = utils.get_text(view, '') text = '''──────────────────────────────── ◆ {} {} ──────────────────────────────── {}'''.format(page['title_all'], page['date'], story) return text def get_info(url, soup=None, cw=None): print_ = get_print(cw) if soup is None: html = downloader.read_html(url) soup = Soup(html) info = {} rdata = soup.find('script', id='__NEXT_DATA__').string #6620 data = json.loads(rdata) wid = data['query']['workId'] info['title'] = data['props']['pageProps']['__APOLLO_STATE__'][f'Work:{wid}']['title'] aid = data['props']['pageProps']['__APOLLO_STATE__'][f'Work:{wid}']['author']['__ref'] info['artist'] = data['props']['pageProps']['__APOLLO_STATE__'][f'{aid}']['activityName'] catch = data['props']['pageProps']['__APOLLO_STATE__'][f'Work:{wid}'].get('catchphrase') or '' intro = data['props']['pageProps']['__APOLLO_STATE__'][f'Work:{wid}'].get('introduction') or '' desc = ' {}{}'.format(catch, ('\n\n\n'+intro) if intro else '') info['description'] = desc eps = [] for tc in data['props']['pageProps']['__APOLLO_STATE__'][f'Work:{wid}']['tableOfContents']: _ = data['props']['pageProps']['__APOLLO_STATE__'][tc['__ref']].get('episodes') if _: eps += _ else: #6708 eps += data['props']['pageProps']['__APOLLO_STATE__'][tc['__ref']]['episodeUnions'] pages = [] for ep in eps: eid = ep['__ref'].split('Episode:')[1] href = urljoin(url, f'/works/{wid}/episodes/{eid}') subtitle = data['props']['pageProps']['__APOLLO_STATE__'][ep['__ref']]['title'] date = data['props']['pageProps']['__APOLLO_STATE__'][ep['__ref']]['publishedAt'] page = Page({'referer': href, 'title': subtitle, 'date': date, 'p': len(pages)+1}) pages.append(page) info['pages'] = pages return info ================================================ FILE: src/extractor/kissjav_downloader.py ================================================ import downloader from utils import urljoin, Downloader, LazyUrl, Session, try_n, format_filename, get_resolution, get_print import ree as re from io import BytesIO import clf2 class Downloader_kissjav(Downloader): type = 'kissjav' URLS = ['kissjav.com', 'kissjav.li', 'mrjav.net'] #4835 single = True display_name = 'KissJAV' ACCEPT_COOKIES = [r'(.*\.)?(kissjav|mrjav)\.(com|li|net)'] def read(self): self.session = Session()#get_session(self.url, cw=self.cw) video = get_video(self.url, self.session, self.cw) self.urls.append(video.url) self.setIcon(video.thumb) self.enableSegment(1024*1024//2) self.title = video.title @try_n(2) def get_video(url, session, cw): print_ = get_print(cw) soup = downloader.read_soup(url, session=session) view = soup.find('div', id='player-container-fluid') fs = [] for source in view.findAll('source'): src = urljoin(url, source.attrs['src']) res = re.find('([0-9]+)p', source.attrs['title']) res = int(res) if res else 0 f = {'res': res, 'src': src} fs.append(f) print_(f) if not fs: raise Exception('No source') #4773 res = max(get_resolution(), min(f['res'] for f in fs)) print_(f'res: {res}') fs = sorted([f for f in fs if f['res'] <= res], key=lambda f: f['res']) f = fs[-1] print_(f'best: {f}') src_best = f['src'] title = soup.find('h1').text.strip() id = soup.find('div', id='video').attrs['data-id'] url_thumb = soup.find('meta', {'property': 'og:image'}).attrs['content'] #src_best = downloader.real_url(src_best) video = Video(src_best, url_thumb, url, title, id, session) return video class Video: def __init__(self, url, url_thumb, referer, title, id, session): self.title = title self.filename = format_filename(title, id, '.mp4') self.url = LazyUrl(referer, lambda x: url, self) self.thumb = BytesIO() self.url_thumb = url_thumb downloader.download(url_thumb, buffer=self.thumb, session=session) @try_n(2) def get_session(url, cw=None): session = Session() clf2.solve(url, session=session, cw=cw) return session ================================================ FILE: src/extractor/lhscan_downloader.py ================================================ #coding:utf8 import downloader from utils import Soup, urljoin, LazyUrl, Downloader, try_n, Session, clean_title, get_print, check_alive import os from translator import tr_ import page_selector import clf2 import utils import base64 import ree as re import errors ##from image_reader import QPixmap class Image: def __init__(self, url, page, p): self._url = url self.url = LazyUrl(page.url, self.get, self)#, pp=self.pp) ext = os.path.splitext(url)[1] if ext.lower()[1:] not in ['jpg', 'jpeg', 'bmp', 'png', 'gif', 'webm', 'webp']: ext = '.jpg' self.filename = '{}/{:04}{}'.format(page.title, p, ext) def get(self, _): return self._url ## def pp(self, filename): ## pixmap = QPixmap(filename) ## pixmap.save(filename) ## return filename class Page: def __init__(self, title, url): self.title = clean_title(title) self.url = url def get_soup_session(url, cw=None, win=None): print_ = get_print(cw) session = Session() res = clf2.solve(url, session=session, cw=cw, win=win) print_('{} -> {}'.format(url, res['url'])) if res['url'].rstrip('/') == 'https://welovemanga.one': raise errors.LoginRequired() return Soup(res['html']), session class Downloader_lhscan(Downloader): type = 'lhscan' URLS = [ #'lhscan.net', 'loveheaven.net', 'lovehug.net', 'welovemanga.', 'nicomanga.com', ] MAX_CORE = 16 display_name = 'LHScan' ACCEPT_COOKIES = [rf'(.*\.)?{domain}' for domain in URLS] def init(self): self.soup, self.session = get_soup_session(self.url, self.cw) try: self.name except: raise errors.Invalid('{}: {}'.format(tr_('목록 주소를 입력해주세요'), self.url)) @classmethod def fix_url(cls, url): url = url.replace('lovehug.net', 'welovemanga.one') url = url.replace('welovemanga.net', 'welovemanga.one') #4298 return url @property def name(self): title = self.soup.find('ul', class_='manga-info').find('h3').text return clean_title(title) def read(self): self.title = tr_('읽는 중... {}').format(self.name) imgs = get_imgs(self.url, self.name, self.session, self.soup, self.cw) for img in imgs: self.urls.append(img.url) self.title = self.name @try_n(8) def get_imgs_page(page, referer, session, cw=None): print_ = get_print(cw) print_(page.title) html = downloader.read_html(page.url, referer, session=session) if clf2._is_captcha(Soup(html)): #4124 html = clf2.solve(page.url, session, cw)['html'] if not html: raise Exception('empty html') try: html = html.replace('{}='.format(re.find(r"\$\(this\)\.attr\('(.+?)'", html, err='no cn')), 'data-src=') except: #5351 pass soup = Soup(html) m = re.find(r'''(load_image|imgsListchap)\(([0-9]+)''', html) if m: #6186 cid = m[1] if utils.domain(page.url, 2).lower() == 'nicomanga.com': url_api = urljoin(page.url, f'/app/manga/controllers/cont.imgsList.php?cid={cid}') else: url_api = urljoin(page.url, f'/app/manga/controllers/cont.listImg.php?cid={cid}') soup = downloader.read_soup(url_api, page.url, session=session) imgs = [] for img in soup.findAll('img', class_='chapter-img'): src = img.get('data-pagespeed-lazy-src') or img.get('data-src') or img.get('data-srcset') or img.get('data-aload') or img.get('data-original') or img['src'] try: src = base64.b64decode(src).strip().decode('utf8') except: pass src0 = src src = src.replace('welovemanga.one', '1')# src = urljoin(page.url, src).strip() if 'Credit_LHScan_' in src or '5e1ad960d67b2_5e1ad962338c7' in src: continue if 'fe132b3d32acc39f5adcea9075bedad4LoveHeaven' in src: continue if 'LoveHug_600cfd96e98ff.jpg' in src: continue if 'image_5f0ecf23aed2e.png' in src: continue if '/uploads/lazy_loading.gif' in src: continue if '/xstaff.jpg.pagespeed.ic.gPQ2SGcYaN.webp' in src: continue if '/uploads/loading-mm.gif' in src: continue src = src.replace('\n', '').replace('\r', '') #5238 #6105 ## if 'proxy.php?link=' not in src: #5351 ## src = 'https://welovekai.com/proxy.php?link=' + src #5238 if not imgs: print_(src0) print_(src) img = Image(src, page, len(imgs)) imgs.append(img) return imgs def get_pages(url, session, soup=None, cw=None): if soup is None: html = downloader.read_html(url, session=session) soup = Soup(html) tab = soup.find('ul', class_='list-chapters') pages = [] for li in tab.findAll('li'): text = li.find('div', class_='chapter-name').text.strip() href = li.parent['href'] href = urljoin(url, href) page = Page(text, href) pages.append(page) if not pages: raise Exception('no pages') return pages[::-1] @page_selector.register('lhscan') def f(url, win): soup, session = get_soup_session(url, win=win) pages = get_pages(url, session, soup=soup) return pages @try_n(2) def get_imgs(url, title, session, soup=None, cw=None): if soup is None: html = downloader.read_html(url, session=session) soup = Soup(html) pages = get_pages(url, session, soup, cw) pages = page_selector.filter(pages, cw) imgs = [] for i, page in enumerate(pages): check_alive(cw) imgs += get_imgs_page(page, url, session, cw) s = '{} {} / {} ({} / {})'.format(tr_('읽는 중...'), title, page.title, i+1, len(pages)) if cw is not None: cw.setTitle(s) else: print(s) return imgs ================================================ FILE: src/extractor/luscious_downloader.py ================================================ #coding:utf8 import downloader import utils from utils import Soup, Downloader, LazyUrl, urljoin, try_n, clean_title, get_max_range, json, print_error import ree as re import os from translator import tr_ from io import BytesIO import clf2 import errors downloader.REPLACE_UA[r'\.luscious\.net'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36' class LoginRequired(errors.LoginRequired): def __init__(self, *args): super().__init__(*args, method='browser', url='https://members.luscious.net/login/') class Image: def __init__(self, item, referer): self.item = item self.id = str(item['id']) self.referer = referer self.url = LazyUrl(referer, self.get, self) def get(self, url): img = urljoin(url, self.item['url_to_original']) ext = os.path.splitext(img.split('?')[0])[1] self.filename = '{}{}'.format(self.id, ext) return img class Video: id = None def __init__(self, url, title, url_thumb): self.url = url self.title = title ext = os.path.splitext(url.split('?')[0])[1] self.filename = '{}{}'.format(title, ext) self.url_thumb = url_thumb self.thumb = BytesIO() downloader.download(self.url_thumb, buffer=self.thumb) class Downloader_luscious(Downloader): type = 'luscious' URLS = ['luscious.net'] MAX_CORE = 4 ACCEPT_COOKIES = [r'(.*\.)?luscious\.net'] @classmethod def fix_url(cls, url): url = url.replace('members.luscious.', 'www.luscious.') return url @classmethod def key_id(cls, url): return '/'.join(url.split('/')[3:]) def read(self): shown = True def f(html, browser=None): nonlocal shown soup = Soup(html) if soup.find(class_='http-error-404-page-container'): raise LoginRequired(get_title(soup, False)) #6912 if soup.find('input', type='password') or soup.find('img', class_='warning-page-image'): if not shown: shown = True browser.show() return False if shown: shown = False browser.hide() try: get_title(soup) except Exception as e: self.print_(print_error(e)) return False return True res = clf2.solve(self.url, f=f, cw=self.cw, show=True) self.url = res['url'] soup = Soup(res['html']) title = get_title(soup) self.title = tr_('읽는 중... {}').format(title) if '/videos/' in self.url: video = get_video(self.url, soup) imgs = [video] self.setIcon(video.thumb) else: imgs = get_imgs(self.url, soup, self.cw) dir = utils.dir(self.type, title, self.cw) names = {} try: for name in os.listdir(dir): id = os.path.splitext(name)[0] names[id] = name except: pass for img in imgs: if img.id in names: url = os.path.join(dir, names[img.id]) else: url = img.url self.urls.append(url) self.title = title# def update(cw, title, imgs): s = '{} {} - {}'.format(tr_('읽는 중...'), title, len(imgs)) if cw is not None: cw.setTitle(s) else: print(s) def get_imgs(url, soup=None, cw=None): if soup is None: html = downloader.read_html(url) soup = Soup(html) title = get_title(soup) n = get_max_range(cw) imgs = [] p = 1 while True: imgs_new, has_next_page = get_imgs_p(url, p) if not imgs_new: break imgs += imgs_new update(cw, title, imgs) p += 1 if len(imgs) >= n or not has_next_page: break return imgs[:n] @try_n(4, sleep=30) def get_imgs_p(url, p=1): id = re.find('/albums/[^/]+?([0-9]+)/', url+'/') print(url, id) #5699 #url_api = 'https://api.luscious.net/graphql/nobatch/?operationName=AlbumListOwnPictures&query=+query+AlbumListOwnPictures%28%24input%3A+PictureListInput%21%29+%7B+picture+%7B+list%28input%3A+%24input%29+%7B+info+%7B+...FacetCollectionInfo+%7D+items+%7B+...PictureStandardWithoutAlbum+%7D+%7D+%7D+%7D+fragment+FacetCollectionInfo+on+FacetCollectionInfo+%7B+page+has_next_page+has_previous_page+total_items+total_pages+items_per_page+url_complete+%7D+fragment+PictureStandardWithoutAlbum+on+Picture+%7B+__typename+id+title+created+like_status+number_of_comments+number_of_favorites+status+width+height+resolution+aspect_ratio+url_to_original+url_to_video+is_animated+position+tags+%7B+category+text+url+%7D+permissions+url+thumbnails+%7B+width+height+size+url+%7D+%7D+&variables=%7B%22input%22%3A%7B%22filters%22%3A%5B%7B%22name%22%3A%22album_id%22%2C%22value%22%3A%22{}%22%7D%5D%2C%22display%22%3A%22position%22%2C%22page%22%3A{}%7D%7D'.format(id, p) url_api = f'https://apicdn.luscious.net/graphql/nobatch/?operationName=AlbumListOwnPictures&query=%2520query%2520AlbumListOwnPictures%28%2524input%253A%2520PictureListInput%21%29%2520%257B%2520picture%2520%257B%2520list%28input%253A%2520%2524input%29%2520%257B%2520info%2520%257B%2520...FacetCollectionInfo%2520%257D%2520items%2520%257B%2520__typename%2520id%2520title%2520description%2520created%2520like_status%2520number_of_comments%2520number_of_favorites%2520moderation_status%2520width%2520height%2520resolution%2520aspect_ratio%2520url_to_original%2520url_to_video%2520is_animated%2520position%2520tags%2520%257B%2520category%2520text%2520url%2520%257D%2520permissions%2520url%2520thumbnails%2520%257B%2520width%2520height%2520size%2520url%2520%257D%2520%257D%2520%257D%2520%257D%2520%257D%2520fragment%2520FacetCollectionInfo%2520on%2520FacetCollectionInfo%2520%257B%2520page%2520has_next_page%2520has_previous_page%2520total_items%2520total_pages%2520items_per_page%2520url_complete%2520%257D%2520&variables=%7B%22input%22%3A%7B%22filters%22%3A%5B%7B%22name%22%3A%22album_id%22%2C%22value%22%3A%22{id}%22%7D%5D%2C%22display%22%3A%22rating_all_time%22%2C%22items_per_page%22%3A50%2C%22page%22%3A{p}%7D%7D' data_raw = downloader.read_html(url_api, referer=url) data = json.loads(data_raw) imgs = [] for item in data['data']['picture']['list']['items']: img = Image(item, url) imgs.append(img) return imgs, data['data']['picture']['list']['info']['has_next_page'] def get_video(url, soup): title = re.find('videos/([^/]+)', url) video = soup.find('video') url = urljoin(url, video.source.attrs['src']) url_thumb = urljoin(url, video['poster']) video = Video(url, title, url_thumb) return video def get_title(soup, id=True): title = soup.find('h1').text.strip() if not id: return title id = re.find(r'/moderation/flag/album/[0-9]+/.+id=([0-9]+)', soup.html, err='no id') #7026 title = clean_title(title, n=-len(f' ({id})')) return f'{title} ({id})' ================================================ FILE: src/extractor/m3u8_downloader.py ================================================ from utils import Downloader, LazyUrl, clean_title, Session, get_ext import utils from m3u8_tools import playlist2stream, M3u8_stream import os from hashlib import md5 from translator import tr_ DEFAULT_N_THREAD = 2 def suitable(url): return get_ext(url).lower() in ('.m3u8', '.mpd') class Downloader_m3u8(Downloader): type = 'm3u8' URLS = [suitable] single = True display_name = 'M3U8' @classmethod def fix_url(cls, url): if '://' not in url: url = 'http://' + url return url def read(self): fmt = self.cw.format referer = self.url if isinstance(fmt, str) and fmt.startswith('referer:'): referer = fmt[len('referer:'):] self.print_('referer: {}'.format(referer)) n_thread = DEFAULT_N_THREAD if isinstance(fmt, int) and fmt > 0: n_thread = fmt self.print_('n_thread: {}'.format(n_thread)) video = Video(self.url, n_thread, referer) self.urls.append(video.url) self.title = os.path.splitext(os.path.basename(video.filename))[0].replace(b'\xef\xbc\x9a'.decode('utf8'), ':') class Video: def __init__(self, url, n_thread, referer): session = Session() session.purge([rf'(.*\.)?{utils.domain(url)}']) if get_ext(url).lower() == '.mpd': def m(): hdr = session.headers.copy() if referer: hdr['Referer'] = referer return utils.LiveStream(url, headers=hdr) ms = [m] else: ms = [ lambda: playlist2stream(url, n_thread=n_thread, session=session), lambda: M3u8_stream(url, n_thread=n_thread, session=session), ] for m in ms: try: m = m() break except Exception as e: e_ = e else: raise e_ if getattr(m, 'live', None) is not None: #5110 #m = m.live hdr = session.headers.copy() if referer: hdr['Referer'] = referer m = utils.LiveStream(url, headers=hdr) live = True else: live = False self.url = LazyUrl(url, lambda _: m, self) self.title = os.path.splitext(os.path.basename(url).split('?')[0])[0][:50] self.id_ = md5(url.encode('utf8')).hexdigest()[:8] tail = f' ({self.id_}).mp4' if live: #5110 from datetime import datetime tail = ' ' + clean_title(datetime.now().strftime('%Y-%m-%d %H:%M')) + tail self.filename = clean_title(self.title, n=-len(tail)) + tail import selector @selector.options('m3u8') def options(urls): def f(urls): n_thread, ok = utils.QInputDialog.getInt(Downloader.mainWindow, tr_('Set number of threads'), tr_('Number of threads?'), value=DEFAULT_N_THREAD, min=1, max=4, step=1) if not ok: return return n_thread def f2(urls): referer, ok = utils.QInputDialog.getText(Downloader.mainWindow, tr_('Set a referer'), tr_('Referer?')) if not ok: return return 'referer:'+referer return [ {'text': 'Set the number of threads...', 'format': f}, {'text': 'Set the referer...', 'format': f2}, ] ================================================ FILE: src/extractor/manatoki_downloader.py ================================================ from utils import Soup, try_n, Downloader, urljoin, get_print, Session, clean_title, get_ext, fix_title, lazy, get_imgs_already, check_alive, File, limits from translator import tr_ import page_selector import utils import clf2 import ree as re from PIL import Image class File_manatoki(File): type = 'manatoki' format = 'title/page:04;' show_pp = False def __init__(self, info): ext = get_ext(info['url']) if ext.lower()[1:] not in ['jpg', 'jpeg', 'bmp', 'png', 'gif', 'webm', 'webp']: ext = '.jpg' d = { 'title': info['title'], 'page': info['page'], 'chapterid': re.find(r'/comic/([0-9]+)', info['referer']), #6380 } info['name'] = utils.format('manatoki', d, ext) super().__init__(info) @limits(.5) def get(self): return {} def pp(self, filename): #5233 img = Image.open(filename) nf = getattr(img, 'n_frames', 1) loop = img.info.get('loop') if nf > 1 and loop: img.seek(nf-1) img.save(filename) img.close() return filename class Page: def __init__(self, title, url): self.title = clean_title(title) self.url = url self.id = int(re.find(r'/(comic|webtoon)/([0-9]+)', url, err='no id')[1]) class Downloader_manatoki(Downloader): type = 'manatoki' URLS = [r'regex:(mana|new)toki[0-9]*\.(com|net)'] MAX_CORE = 4 ACCEPT_COOKIES = [r'(.*\.)?(mana|new)toki[0-9]*\.(com|net)'] @try_n(2) def init(self): self.session, self.soup, url = get_soup(self.url, cw=self.cw) self.url = self.fix_url(url) # 2377 list = self.soup.find(attrs={'data-original-title': '목록'}) if list: url = urljoin(self.url, list.parent['href']) nav = self.soup.find('div', class_='toon-nav') select = nav.find('select', {'name': 'wr_id'}) for i, op in enumerate(select.findAll('option')[::-1]): if 'selected' in op.attrs: break else: raise Exception('no selected option') self.session, self.soup, url = get_soup(url, cw=self.cw) url_page = self.fix_url(url) for i, page in enumerate(get_pages(url_page, self.soup)): if page.id == int(op['value']): break else: raise Exception('can not find page') self.cw.range_p = [i] self.url = url_page self.name @classmethod def fix_url(cls, url): # 2377 m = re.find(r'/board.php\?bo_table=([0-9a-zA-Z_]+)&wr_id=([0-9]+)', url) if m: return urljoin(url, '/{}/{}'.format(*m)) return url.split('?')[0] @classmethod def key_id(cls, url): return '/'.join(url.split('/')[3:5]) @lazy def name(self): artist = get_artist(self.soup) title = self.soup.find('meta', {'name':'subject'})['content'].strip() return fix_title(self, title, artist) def read(self): self.title = tr_('읽는 중... {}').format(self.name) self.artist = get_artist(self.soup) imgs = get_imgs(self.url, self.name, self.soup, self.session, self.cw) for img in imgs: self.urls.append(img) self.title = self.name def get_artist(soup): view = soup.find('div', class_='view-title', err='no title') text = view.text.replace('\n', '#') artist = re.find(r'작가[ #]*:[ #]*(.+?)#', text, default='N/A').strip() return artist @limits(10) def get_soup(url, session=None, cw=None, win=None): if session is None: session = Session() virgin = True def f(html, browser=None): nonlocal virgin soup = Soup(html) if soup.find('form', {'name':'fcaptcha'}): #4660 browser.show() if virgin: virgin = False browser.runJavaScript('window.scrollTo({top: document.getElementsByClassName("form-box")[0].getBoundingClientRect().top-150})') #5504 return False if not virgin: #7158 browser.hide() return True res = clf2.solve(url, session=session, f=f, cw=cw, win=win) soup = Soup(res['html'], apply_css=True) return session, soup, res['url'] def get_pages(url, soup, sub=False): list = soup.find('ul', class_='list-body') pages = [] for item in list.findAll('div', 'wr-subject'): for span in item.a.findAll('span'): span.decompose() title = item.a.text.strip() href = item.a['href'] href = urljoin(url, href) pages.append((title, href)) if not pages: raise Exception('no pages') ## if sub: #4909 ## return pages ## else: ## pg = soup.find('ul', class_='pagination') ## as_ = pg.findAll('a') ## for a in as_: ## href = a.get('href') ## if not href: ## continue ## href = urljoin(url, href) ## for try_ in range(2): ## try: ## session, soup2, href = get_soup(href) ## pages += get_pages(href, soup2, sub=True) ## break ## except Exception as e: ## e_ = e ## print(e) ## else: ## raise e_ titles = {} pages_ = [] for title, href in pages[::-1]: title = utils.fix_dup(title, titles) #4161 page = Page(title, href) pages_.append(page) return pages_ @page_selector.register('manatoki') def f(url, win): session, soup, url = get_soup(url, win=win) list = soup.find('ul', class_='list-body') if list is None: raise Exception(tr_('목록 주소를 입력해주세요')) pages = get_pages(url, soup) return pages def get_imgs(url, title, soup=None, session=None, cw=None): print_ = get_print(cw) if soup is None or session is None: session, soup, url = get_soup(url, session, cw) pages = get_pages(url, soup) pages = page_selector.filter(pages, cw) imgs = [] for i, page in enumerate(pages): check_alive(cw) imgs_already = get_imgs_already('manatoki', title, page, cw) if imgs_already: imgs += imgs_already continue imgs_ = get_imgs_page(page, title, url, session, cw) imgs += imgs_ s = '{} {} / {} ({} / {})'.format(tr_('읽는 중...'), title, page.title, i+1, len(pages)) print_('{} {}'.format(page.title, len(imgs_))) if cw is not None: cw.setTitle(s) else: print('read page... {} ({})'.format(page.url, len(imgs))) return imgs @try_n(4) def get_imgs_page(page, title, referer, session, cw): print_ = get_print(cw) # 2183 session, soup, page.url = get_soup(page.url, session, cw) title_page = page.title#clean_title(soup.find('span', class_='page-desc').text.strip()) if page.title != title_page: print_('{} -> {}'.format(page.title, title_page)) page.title = title_page views = soup.findAll('div', class_='view-content')\ + soup.findAll('div', class_='view-padding') if not views: raise Exception('no views') hash = re.find(r'''data_attribute\s*:\s*['"](.+?)['"]''', soup.html) print_('hash: {}'.format(hash)) if hash is None: raise Exception('no hash') imgs = [] for view in views: if view is None: continue for img in view.findAll('img'): if not isVisible(img): continue src = img.get('data-{}'.format(hash)) src = src or img.get('content') # https://manatoki77.net/comic/5266935 if not src: continue img = urljoin(page.url, src) if '/img/cang' in img: continue if '/img/blank.gif' in img: continue img = File_manatoki({'referer': page.url, 'url': img, 'title': page.title, 'page': len(imgs)}) imgs.append(img) ## if not imgs: ## raise Exception('no imgs') return imgs def isVisible(tag): while tag: if re.search(r'display:\s*none', tag.get('style', ''), re.I): return False tag = tag.parent return True ================================================ FILE: src/extractor/mastodon_downloader.py ================================================ #coding:utf8 from utils import Downloader, clean_title, Session from mastodon import get_info import ree as re def get_id(url): return re.find('mastodon.social/([^/]+)', url.lower()) class Downloader_mastodon(Downloader): type = 'mastodon' URLS = ['mastodon.social'] ACCEPT_COOKIES = [r'(.*\.)?mastodon\.social'] def init(self): self.session = Session() @classmethod def fix_url(cls, url): id_ = get_id(url) or url return f'https://mastodon.social/{id_}' def read(self): id_ = get_id(self.url) info = get_info('mastodon.social', id_, f'mastodon_{id_}', self.session, self.cw) self.urls += info['files'] self.title = clean_title('{} (mastodon_{})'.format(info['title'], id_)) ================================================ FILE: src/extractor/misskey_downloader.py ================================================ from utils import Downloader, Session, clean_title, get_ext, check_alive, tr_, try_n, File, get_max_range, limits import downloader import ree as re from datetime import datetime import utils import errors DOMAIN = 'misskey.io' SUBFOLDER = True class File_misskey(File): type = 'misskey' format = '[date] id_ppage' def get_file(nid, url, referer, session, p, time): ext = get_ext(url) or downloader.get_ext(url, session, referer) d = { 'date': time, 'id': nid, 'page': p, } filename = utils.format('misskey', d, ext) info = {'name': filename, 'url': url, 'referer': referer} return File_misskey(info) def get_time(note): ds = note['createdAt'] time = datetime.strptime(ds.split('.')[0], '%Y-%m-%dT%H:%M:%S') time = (time-datetime(1970,1,1)).total_seconds() return time class Downloader_misskey(Downloader): type = 'misskey' URLS = [f'{DOMAIN}/notes/', f'{DOMAIN}/@'] display_name = 'Misskey' ACCEPT_COOKIES = [rf'(.*\.)?{DOMAIN}'] MAX_CORE = 8 @classmethod def fix_url(cls, url): if DOMAIN.lower() in url.lower() and '://' not in url: url = 'https://' + url if url.startswith('@'): url = f'https://{DOMAIN}/{url}' return url def init(self): self.session = Session() if f'{DOMAIN}/notes/' in self.url: raise errors.Invalid(tr_('개별 다운로드는 지원하지 않습니다: {}').format(self.url)) @try_n(4, sleep=5) @limits(2) def call(self, path, payload): token = self.session.cookies.get('token', domain=DOMAIN) url_api = f'https://{DOMAIN}/api/{path}' if token: payload['i'] = token r = self.session.post(url_api, json=payload) d = r.json() if isinstance(d, dict): err = d.get('error') if err: raise errors.Invalid(err['message']) return d def read(self): nid = re.find(rf'{DOMAIN}/notes/([^/]+)', self.url) if nid: self.single = True data = {'noteId':nid, } note = self.call('notes/show', data) username = note['user']['username'] self.artist = note['user']['name'] or username host = note['user']['host'] if host: username += f'@{host}' self.title = f'{clean_title(self.artist)} (misskey_@{username})' time = get_time(note) for file in note['files']: file = get_file(note['id'], file['url'], self.url, self.session, len(self.urls), time) if SUBFOLDER: file['name'] = self.title + '/' + file['name'] self.urls.append(file) else: username = re.find(rf'{DOMAIN}/@([a-zA-Z0-9_@\.]+)', self.url, err='no username') if '@' in username: username, host = username.split('@') else: host = None data = {"username":username, "host":host, } d = self.call('users/show', data) username = d['username'] self.artist = d['name'] or username host = d['host'] or None if host: username += f'@{host}' uid = d['id'] self.title = title = f'{clean_title(self.artist)} (misskey_@{username})' untilId = None nids = set() n = get_max_range(self.cw) while check_alive(self.cw): data = {"userId":uid, "limit":30, } if untilId: data["untilId"] = untilId d = self.call('users/notes', data) if not d: break for note in d: nid = note['id'] if nid in nids: continue nids.add(nid) time = get_time(note) url_note = f'https://{DOMAIN}/notes/{nid}' for p, file in enumerate(note['files']): file = get_file(note['id'], file['url'], url_note, self.session, p, time) self.urls.append(file) untilId = nid self.cw.setTitle(f'{tr_("읽는 중...")} {title} - {len(self.urls)}') if len(self.urls) >= n: break self.title = title ================================================ FILE: src/extractor/mrm_downloader.py ================================================ #coding:utf8 from utils import Soup, urljoin, LazyUrl, Downloader, try_n, get_print, clean_title, get_ext, check_alive from translator import tr_ import ree as re import clf2# class Image: def __init__(self, url, p, page, cw): self.cw = cw ext = get_ext(url) self.filename = '{:04}{}'.format(p, ext) if page.title is not None: self.filename = '{}/{}'.format(page.title, self.filename) self._url = url self.url = LazyUrl(page.url, self.get, self) def get(self, _): return self._url#'tmp://' + clf2.download(self._url, cw=self.cw) class Page: def __init__(self, title, url, soup=None): self.title = clean_title(title) self.url = url self.soup = soup class Downloader_mrm(Downloader): type = 'mrm' URLS = ['myreadingmanga.info'] _soup = None MAX_CORE = 4 display_name = 'MyReadingManga' ACCEPT_COOKIES = [r'(.*\.)?myreadingmanga\.info'] def init(self): self.session = get_session(self.url, self.cw) @classmethod def fix_url(cls, url): return re.find('https?://myreadingmanga.info/[^/]+', url, err='err') @property def soup(self): if self._soup is None: for try_ in range(8): try: html = read_html(self.url, session=self.session, cw=self.cw) break except Exception as e: e_ = e self.print_(e) else: raise e_ self._soup = Soup(html) return self._soup @property def name(self): title = get_title(self.soup) return title def read(self): self.title = '읽는 중... {}'.format(self.name) imgs = get_imgs(self.url, self.soup, self.session, self.cw) for img in imgs: self.urls.append(img.url) self.title = self.name def get_title(soup): title = soup.find('h1', class_='entry-title').text.strip() title = fix_title(title) title = clean_title(title) return title def get_imgs(url, soup=None, session=None, cw=None): if soup is None: html = read_html(url, session=session, cw=cw) soup = Soup(html) title = get_title(soup) pagination = soup.find('div', class_='pagination') if pagination is None: page = Page(None, url, soup) imgs = get_imgs_page(page, session=session, cw=cw) else: pages = get_pages(url, soup, session=session) imgs = [] for i, page in enumerate(pages): check_alive(cw) s = '{} {} / {} ({} / {})'.format(tr_('읽는 중...'), title, page.title, i+1, len(pages)) if cw: cw.setTitle(s) else: print(s) imgs += get_imgs_page(page, session=session, cw=cw) if not imgs: raise Exception('no imgs') return imgs def get_pages(url, soup=None, session=None): if soup is None: html = read_html(url, session=session, cw=None) soup = Soup(html) pagination = soup.find('div', class_='pagination') pages = [] hrefs = set() for a in pagination.findAll('a'): href = a.attrs.get('href', '') href = urljoin(url, href) if not href.startswith(url): print('not match', href) continue while href.endswith('/'): href = href[:-1] if href in hrefs: print('duplicate', href) continue hrefs.add(href) text = a.text.strip() page = Page(text, href) pages.append(page) if url not in hrefs: page = Page('1', url, soup) pages.insert(0, page) return pages @try_n(4) def get_imgs_page(page, session=None, cw=None): url = page.url soup = page.soup if soup is None: html = read_html(url, session=session, cw=None) soup = Soup(html) page.soup = soup view = soup.find('div', class_='entry-content') imgs = [] for img in view.findAll('img'): img = img.get('data-lazy-src') or img.get('data-src') or img['src'] #7125 img = urljoin(url, img) img = Image(img, len(imgs), page, cw) imgs.append(img) print(page.title, len(imgs), page.url) return imgs def fix_title(title): title = re.sub(r'\(?[^()]*?c\.[^() ]+\)?', '', title) while ' ' in title: title = title.replace(' ', ' ') return title def read_html(url, session, cw): ## html = downloader.read_html(url, session=session) ## soup = Soup(html) ## ## cf = soup.find('div', class_='cf-browser-verification') ## if cf is None: ## return html r = clf2.solve(url, cw=cw, session=session) return r['html'] @try_n(4) def get_session(url, cw=None): print_ = get_print(cw) ## html = downloader.read_html(url) ## soup = Soup(html) ## ## cf = soup.find('div', class_='cf-browser-verification') ## if cf is None: ## print_('no cf protection') ## return None print_('cf protection') r = clf2.solve(url, cw=cw) session = r['session'] return session ================================================ FILE: src/extractor/naver_downloader.py ================================================ #coding:utf-8 import downloader import ree as re from utils import urljoin, Downloader, Soup, LazyUrl, clean_title, get_ext, get_print, Session, json import errors PATTERNS = ['.*blog.naver.com/(?P.+)/(?P[0-9]+)', '.*blog.naver.com/.+?blogId=(?P[^&]+).+?logNo=(?P[0-9]+)', '.*?(?P[0-9a-zA-Z_-]+)\.blog\.me/(?P[0-9]+)'] def get_id(url): for pattern in PATTERNS: m = re.match(pattern, url) if m is None: continue username = m.group('username') pid = m.group('pid') break else: username, pid = None, None return username, pid class Downloader_naver(Downloader): type = 'naver' URLS = ['blog.naver.', '.blog.me'] display_name = 'Naver Blog' ACCEPT_COOKIES = [r'(.*\.)?naver\.com', r'(.*\.)?blog\.me'] def init(self): self.session = Session() username, pid = get_id(self.url) if username is None: raise errors.Invalid(f'Invalid format: {self.url}') self.url = f'https://blog.naver.com/{username}/{pid}' def read(self): info = get_imgs(self.url, self.session, self.cw) for img in info['imgs']: self.urls.append(img.url) username, pid = get_id(self.url) self.title = clean_title(f'[{username}] {info["title"]} ({pid})') class Image: def __init__(self, url, referer, p): self.url = LazyUrl(referer, lambda _: url, self) #3788, #3817 ext = get_ext(url) self.filename = f'{p:04}{ext}' class Video: def __init__(self, url, referer, p): self.url = LazyUrl(referer, lambda _: url, self) self.filename = f'video_{p}.mp4' def read_page(url, session, depth=0): print('read_page', url, depth) if depth > 10: raise Exception('Too deep') html = downloader.read_html(url, session=session) if len(html) < 5000: id = re.find('logNo=([0-9]+)', html, err='no id') username = re.find('blog.naver.com/([0-9a-zA-Z]+)', url) or re.find('blogId=([0-9a-zA-Z]+)', url, err='no username') url = f'https://m.blog.naver.com/PostView.nhn?blogId={username}&logNo={id}&proxyReferer=' soup = Soup(html) if soup.find('div', {'id': 'viewTypeSelector'}): return url, soup frame = soup.find('frame') if frame is None: print('frame is None') return read_page(url, session, depth+1) return read_page(urljoin('https://blog.naver.com', frame['src']), session, depth+1) def get_imgs(url, session, cw): print_ = get_print(cw) info = {} url = url.replace('blog.naver', 'm.blog.naver') referer = url url_frame, soup = read_page(url, session) info['title'] = soup.find('meta', {'property': 'og:title'})['content'].strip() imgs = [] urls = set() view = soup.find('div', {'id': 'viewTypeSelector'}) imgs_ = view.findAll('span', class_='_img') + view.findAll(['img', 'video']) #7062 for img in imgs_: url = img.get('data-gif-url') or img.get('src') if not url: url = img.get('thumburl') if not url: continue if 'ssl.pstatic.net' in url: # continue if 'blogpfthumb-phinf.pstatic.net' in url: # profile continue if 'dthumb-phinf.pstatic.net' in url: # link continue if 'storep-phinf.pstatic.net' in url: # emoticon continue url = url.replace('mblogthumb-phinf', 'blogfiles') #url = re.sub('\?type=[a-zA-Z0-9]*', '?type=w1@2x', url) #url = re.sub('\?type=[a-zA-Z0-9]*', '', url) url = url.split('?')[0] if url in urls: print('### Duplicate:', url) continue urls.add(url) #url = url.split('?type=')[0] img = Image(url, referer, len(imgs)) imgs.append(img) pairs = [] for video in soup.findAll(class_='_naverVideo'): vid = video['vid'] key = video['key'] pairs.append((vid, key)) print_(f'pairs: {pairs}') for script in soup.findAll('script', class_='__se_module_data'): data_raw = script.get('data-module') or script.get('data-module-v2') data = json.loads(data_raw)['data'] vid = data.get('vid') if not vid: continue key = data['inkey'] pairs.append((vid, key)) videos = [] for vid, key in pairs: url_api = f'https://apis.naver.com/rmcnmv/rmcnmv/vod/play/v2.0/{vid}?key={key}' data_raw = downloader.read_html(url_api, session=session) data = json.loads(data_raw) fs = data['videos']['list'] fs = sorted(fs, key=lambda f: f['size'], reverse=True) video = Video(fs[0]['source'], url_frame, len(videos)) videos.append(video) info['imgs'] = imgs + videos return info ================================================ FILE: src/extractor/navercafe_downloader.py ================================================ # coding:utf8 from utils import Downloader, get_print, urljoin, Soup, get_ext, File, clean_title, downloader, re, try_n, errors, json, Session import utils class LoginRequired(errors.LoginRequired): def __init__(self, *args): super().__init__(*args, method='browser', url='https://nid.naver.com/nidlogin.login') class Downloader_navercafe(Downloader): type = 'navercafe' URLS = ['cafe.naver.com'] display_name = 'Naver Cafes' ACCEPT_COOKIES = [r'(.*\.)?naver\.com'] def init(self): self.session = Session() @classmethod def fix_url(cls, url): print('origin_url', url) # 신형 우선 처리 (성능 최적화) patterns = [ # REST API 스타일 (r'cafe\.naver\.com/[^/]+/cafes/([0-9]+)/articles/([0-9]+)', lambda m: f'https://cafe.naver.com/ArticleRead.nhn?articleid={m[1]}&clubid={m[0]}'), # 구형 스타일 (r'cafe\.naver\.com/([^/?#]+).+?articleid%3D([0-9]+)', lambda m: f'https://cafe.naver.com/{m[0]}/{m[1]}'), ] for pattern, formatter in patterns: m = re.search(pattern, url) if m: fixed_url = formatter(m.groups()) print('fixed_url', fixed_url) return fixed_url print('no_fix_needed', url) return url def read(self): info = get_info(self.url, self.session, self.cw) for img in info['imgs']: self.urls.append(img) tail = f' ({info["cafename"]}_{info["id"]})' self.title = clean_title(info['title'], n=-len(tail)) + tail @try_n(4) def get_info(url, session, cw=None): print_ = get_print(cw) info = {} html = downloader.read_html( url, 'http://search.naver.com', session=session) soup = Soup(html) if '"cafe_cautionpage"' in html: raise LoginRequired() PATTERN = r"//cafe\.naver\.com/ArticleRead\.nhn\?[^'\"]*articleid=[0-9]+[^'\"]*" matches = [match.group() for src in [html, url] for match in [re.search(PATTERN, src)] if match] url_article = matches[0] if matches else "no articleid" url_article = urljoin(url, url_article) print_(url_article) articleid = re.find(r'articleid=([0-9]+)', url_article) clubid = re.find(r'clubid(=|%3D)([0-9]+)', url_article)[1] art = re.find(r'art=(.+?)&', url_article) if art: url_api = f'https://apis.naver.com/cafe-web/cafe-articleapi/v2.1/cafes/{clubid}/articles/{articleid}?art={art}&useCafeId=true&requestFrom=A' else: url_api = f'https://apis.naver.com/cafe-web/cafe-articleapi/v2.1/cafes/{clubid}/articles/{articleid}?query=&useCafeId=true&requestFrom=A' j = downloader.read_json(url_api, url_article, session=session) if j['result'].get('errorCode'): # 6358 raise LoginRequired(j['result'].get('reason')) info['title'] = j['result']['article']['subject'] info['cafename'] = j['result']['cafe']['url'] info['cafeid'] = clubid info['id'] = articleid html_content = j['result']['article']['contentHtml'] soup = Soup(html_content) imgs = [] pairs = [] for video in soup.findAll('span', class_='_naverVideo'): vid = video.attrs['vid'] key = video.attrs['key'] pairs.append((vid, key)) for script in soup.findAll('script', class_='__se_module_data'): data_raw = script.get('data-module') or script.get('data-module-v2') data = json.loads(data_raw)['data'] vid = data.get('vid') if not vid: continue key = data['inkey'] pairs.append((vid, key)) for vid, key in pairs: url_api = f'https://apis.naver.com/rmcnmv/rmcnmv/vod/play/v2.0/{vid}?key={key}' data_raw = downloader.read_html(url_api) data = json.loads(data_raw) fs = data['videos']['list'] fs = sorted(fs, key=lambda f: f['size'], reverse=True) video = Image( {'url': fs[0]['source'], 'referer': url_article, 'p': len(imgs)}) imgs.append(video) for img in soup.findAll('img'): img = Image( {'url': urljoin(url_article, img['src']), 'referer': url, 'p': len(imgs)}) imgs.append(img) info['imgs'] = imgs return info class Image(File): type = 'navercafe' format = 'page:04;' def __init__(self, info): self._url = info['url'] info['url'] = re.sub(r'[?&]type=[wh0-9]+', '', self._url) # 6460 ext = get_ext(info['url']) d = { 'page': info['p'], } info['name'] = utils.format('navercafe', d, ext) super().__init__(info) def alter(self): return self._url ================================================ FILE: src/extractor/naverpost_downloader.py ================================================ # coding: UTF-8 # title: Download naver post image # author: SaidBySolo # comment: 네이버 포스트의 이미지를 다운로드합니다 """ MIT License Copyright (c) 2020 SaidBySolo Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ import codecs import json import re from distutils.util import strtobool from typing import Any, Iterator, List from urllib.parse import ParseResult, urlparse, parse_qs import requests from bs4 import BeautifulSoup import clf2 import page_selector from utils import Downloader, Soup, clean_title class Page: def __init__(self, title, url) -> None: self.title = clean_title(title) self.url = url class DownloaderNaverPost(Downloader): type = "naverpost" # 타입 URLS = ["m.post.naver.com", "post.naver.com"] def init(self) -> None: self.parsed_url = urlparse(self.url) # url 나눔 self.soup = get_soup(self.url) @property def client(self): return Client(self.parsed_url, self.soup) def read(self): if self.client.single: self.title = self.client.title posts = self.client.posts else: raise NotImplementedError for img_link in img_src_generator(posts): self.urls.append(img_link) # https://github.com/KurtBestor/Hitomi-Downloader/blob/master/src/extractor/manatoki_downloader.py#L106 참고 @page_selector.register("naverpost") def f(url, win): client = Client(urlparse(url), get_soup(url, win=win)) return [ page for page_list in client.posts for page in page_list ] # 2차원 리스트 -> 1차원 리스트 # https://github.com/KurtBestor/Hitomi-Downloader/blob/master/src/extractor/manatoki_downloader.py#L84 참고 def get_soup(url: str, win=None) -> BeautifulSoup: res = clf2.solve(url, win=win) return Soup(res["html"]) # 페이지 파싱에서 사용되는 파서 def page_soup(url: str) -> BeautifulSoup: get_html_regex = re.compile(r"\"html\"\:(.+)(\n|\s)\}") response = requests.get(url) like_html = get_html_regex.search(response.text)[1] html = decode_escapes(like_html).replace(r"\/", "/") return Soup(html) # HTML5 data-* 속성이 사용됨. def get_img_data_linkdatas(soup: Any) -> Iterator[str]: a_elements = soup.find_all("a", {"data-linktype": "img"}) # 링크 타입이 img인것만 전부 찾음 for a_element in a_elements: yield a_element["data-linkdata"] def img_src_generator(linkdatas: Iterator[str]) -> Iterator[str]: for linkdata in linkdatas: data = json.loads(linkdata) if data.get("linkUse") is None: yield data["src"] # 제네레이터 else: if not strtobool(data["linkUse"]): yield data["src"] # https://stackoverflow.com/a/24519338 참고 def decode_escapes(like_html: str) -> str: escape_sequence_regex = re.compile( r""" ( \\U........ # 8-digit hex escapes | \\u.... # 4-digit hex escapes | \\x.. # 2-digit hex escapes | \\[0-7]{1,3} # Octal escapes | \\N\{[^}]+\} # Unicode characters by name | \\[\\'"abfnrtv] # Single-character escapes )""", re.UNICODE | re.VERBOSE, ) return escape_sequence_regex.sub( lambda match: codecs.decode(match.group(0)), like_html ) # 제목 class Title: def __init__(self, soup: Any): self.soup = soup def get_profile_title(self) -> str: profile_name = self.soup.find("p", class_="nick_name").find( "span", class_="name" ) # 프로필 닉네임 return clean_title(profile_name.text) # 닉네임으로만 def get_series_title(self) -> str: series_name = self.soup.find("h2", class_="tit_series").find( "span", class_="ell" ) # 시리즈 제목 author = self.soup.find("div", class_="series_author_wrap").find( "strong", class_="ell1" ) # 작성자 return clean_title(f"{series_name.text} ({author.text})") # 무난하게 붙임 def get_title(self) -> str: title = self.soup.find("h3", class_="se_textarea") # 포스트 제목 author = self.soup.find("span", class_="se_author") # 작성자 return clean_title(f"{title.text.replace(' ', '')} ({author.text})") # 무난하게 붙임 # 총 포스트 수 class Total: def __init__(self, soup: Any) -> None: self.soup = soup # 0: 팔로워 1: 팔로잉 2: 포스트 3: 좋아요한글 def get_total_post(self) -> int: profile_info = self.soup.find("div", class_="expert_num_info") # 프로필 정보 total_post_element = profile_info.find_all("li", class_="inner")[2] return int(total_post_element.find("span", class_="num").text) # 총몇개인지만 리턴 # 0: 포스트 1: 팔로워 def get_series_total_post(self) -> int: series_info = self.soup.find("div", class_="series_follow_area") # 시리즈 정보 total_post_element = series_info.find_all("a")[0] return int(total_post_element.find("em").text) # 총몇개인지만 리턴 class UrlGenerator: def __init__(self, parsed_url: ParseResult, total_count: int) -> None: self.parsed_url = parsed_url self.count = ( round(total_count / 20) + 1 if not (total_count / 20).is_integer() else round(total_count / 20) ) def all_post_url_generator(self) -> Iterator[str]: query = parse_qs(self.parsed_url.query) for i in range(self.count): new_url_query = f"?memberNo={query['memberNo'][0]}&fromNo={i + 1}" url = f"https://{self.parsed_url.netloc}/async{self.parsed_url.path}{new_url_query}" yield url def all_series_url_generator(self) -> Iterator[str]: query = parse_qs(self.parsed_url.query) for i in range(self.count): new_url_query = f"?memberNo={query['memberNo'][0]}&seriesNo={query['seriesNo'][0]}&fromNo={i + 1}" url = f"https://{self.parsed_url.netloc}/my/series/detail/more.nhn{new_url_query}" yield url # 여기서 페이지 리스트 만듬 class PostPage: def __init__(self, soup: Any): self.soup = soup def all_post_page_generator(self) -> Iterator[List[Page]]: titles = self.soup.find_all("strong", class_="tit_feed ell") link_elements = self.soup.find_all("a", class_="link_end", href=True) page = [ Page(title.text.replace(" ", ""), link_element["href"]) for link_element, title in zip(link_elements, titles) ] yield page[::-1] def all_series_page_generator(self) -> Iterator[List[Page]]: titles = [ element.find("span") for element in self.soup.find_all("div", class_="spot_post_name") ] link_elements = self.soup.find_all("a", class_="spot_post_area", href=True) page = [ Page(title.text.replace(" ", ""), link_element["href"]) for link_element, title in zip(link_elements, titles) ] yield page[::-1] # 필요한 클래스 전부 상속후 편하게 쓸수있게 만듬 class Client(Title, Total, UrlGenerator): def __init__(self, parsed_url: ParseResult, soup: BeautifulSoup): Title.__init__(self, soup) Total.__init__(self, soup) if parsed_url.path.startswith("/viewer"): self.title = self.get_title() self.posts = get_img_data_linkdatas(self.soup) self.single = True elif parsed_url.path.startswith("/my.nhn"): UrlGenerator.__init__(self, parsed_url, self.get_total_post()) self.title = self.get_profile_title() self.posts = self.all_post_url_generator() self.single = False elif parsed_url.path.startswith("/my/series"): UrlGenerator.__init__(self, parsed_url, self.get_series_total_post()) self.title = self.get_series_title() self.posts = self.all_series_url_generator() self.single = False else: raise Exception("유효하지 않습니다.") ================================================ FILE: src/extractor/navertoon_downloader.py ================================================ import downloader from utils import Soup, urljoin, Downloader, get_imgs_already, clean_title, get_ext, get_print, errors, check_alive, File, try_n, json import ree as re import page_selector from translator import tr_ import utils class Page: def __init__(self, url, title, p): self.url = url self.title = title self.p = p class File_navertoon(File): type = 'navertoon' format = 'title/page:04;' def __init__(self, info): ext = get_ext(info['url']) d = { 'title': clean_title(info['title']), 'page': info['page'], 'chapterid': re.find(r'[?&]no=([0-9]+)', info['referer']), #6380 } info['name'] = utils.format('navertoon', d, ext) super().__init__(info) class Info: def __init__(self, id, title, artist): self.id = id self.title = title self.artist = artist class Downloader_navertoon(Downloader): type = 'navertoon' URLS = ['comic.naver.com'] MAX_CORE = 8 MAX_SPEED = 4.0 display_name = 'Naver Webtoon' ACCEPT_COOKIES = [r'(.*\.)?naver\.com'] def init(self): self.__info, _ = get_pages(self.url, self.cw) @classmethod def fix_url(cls, url): url = re.sub(r'[?&]page=[0-9]+', '', re.sub(r'[?&]no=[0-9]+', '', url)).replace('m.comic.naver.', 'comic.naver.') url = url.replace('detail.nhn', 'list.nhn').replace('/detail?', '/list?') return url.rstrip('#') @property def name(self): id = self.__info.id title = self.__info.title artist = self.__info.artist title = self.format_title('N/A', id, title, artist, 'N/A', 'N/A', 'Korean', prefix='navertoon_') return clean_title(title) def read(self): self.title = tr_('읽는 중... {}').format(self.name) imgs = get_imgs_all(self.url, self.name, cw=self.cw) for img in imgs: self.urls.append(img) self.title = self.name def set_no(url, p): if '&no=' not in url: url = url + f'&no={p}' return url url = re.sub('&no=[0-9]+', f'&no={p}', url) return url def get_id(url): return int(url.lower().split('titleid=')[1].split('&')[0]) def set_page(url, p): if '&page=' in url: url = re.sub('&page=[0-9]+', f'&page={p}', url) else: url += f'&page={p}' return url @try_n(4) def get_pages(url, cw=None): print_ = get_print(cw) url = Downloader_navertoon.fix_url(url).replace('comic.naver.', 'm.comic.naver.') id = get_id(url) print('id:', id) print(url) html = downloader.read_html(url) soup = Soup(html) if soup.find('button', class_='btn_check'): raise errors.LoginRequired() try: info = soup.find('div', class_='area_info') artist = info.find('span', class_='author').text.strip() except Exception as e: print(e) try: title = ('\n').join(soup.find('div', class_='title').text.strip().split('\n')[:-1]).strip() except: title = 'artist not found' raise Exception(title) print_('artist: {}'.format(artist)) title = soup.find('meta', {'property': 'og:title'}).attrs['content'] pages = [] nos = set() for p in range(1, 100): if p == 1: url_page = url else: url_page = set_page(url, p) html = downloader.read_html(url_page) print('read page:', url_page) soup = Soup(html) view = soup.findAll('ul', class_='section_episode_list')[-1] for lst in view.findAll('li'): url_page = urljoin(url, lst.find('a').attrs['href']) if 'detail.nhn' not in url_page.lower() and 'detail?' not in url_page.lower(): #3540 continue print_('url_page: {}'.format(url_page)) text = lst.find('strong', class_='title').find('span', class_='name').text.strip() no = int(re.findall('[?&]no=([0-9]+)', url_page)[0]) if no in nos: print('duplicate no: {}'.format(no)) continue nos.add(no) text = '{:04} - {}'.format(no, text) page = Page(url_page, text, p) pages.append(page) btn_next = soup.find('a', class_='btn_next') if btn_next is None or btn_next.attrs['href'] == '#': print('end of page') break info = Info(id, title, artist) return ( info, pages) @page_selector.register('navertoon') @try_n(4) def f(url): url = Downloader_navertoon.fix_url(url) info, pages = get_pages(url) return pages @try_n(6) def get_imgs(page, cw=None): print_ = get_print(cw) html = downloader.read_html(page.url) soup = Soup(html) type_ = re.find('''webtoonType *: *['"](.+?)['"]''', html) print_('type: {}'.format(type_)) imgs = [] if type_ == 'DEFAULT': # https://m.comic.naver.com/webtoon/detail.nhn?titleId=715772 view = soup.find('div', class_='toon_view_lst') for img in view.findAll('img'): img = img.attrs.get('data-src') if not img: continue img = urljoin(page.url, img) img = File_navertoon({'referer': page.url, 'url':img, 'title': page.title, 'page': len(imgs)}) imgs.append(img) elif type_ == 'CUTTOON': # https://m.comic.naver.com/webtoon/detail.nhn?titleId=752803 view = soup.find('div', class_='swiper-wrapper') for div in view.findAll('div', class_='swiper-slide'): if div.parent != view: continue if div.find('div', class_='cut_viewer_last'): print('cut_viewer_last') continue if div.find('div', class_='cut_viewer_recomm'): print('cut_viewer_recomm') continue img = div.find('img') img = img.attrs['data-src'] img = urljoin(page.url, img) img = File_navertoon({'referer': page.url, 'url':img, 'title': page.title, 'page': len(imgs)}) imgs.append(img) elif type_ == 'EFFECTTOON': #2313; https://m.comic.naver.com/webtoon/detail.nhn?titleId=670144 img_base = re.find('''imageUrl *: *['"](.+?)['"]''', html) + '/' print('img_base:', img_base) url_api = re.find('''documentUrl *: *['"](.+?)['"]''', html) data_raw = downloader.read_html(url_api, page.url) data = json.loads(data_raw) for img in data['assets']['stillcut'].values(): # ordered in python3.7+ img = urljoin(img_base, img) img = File_navertoon({'referer': page.url, 'url':img, 'title': page.title, 'page': len(imgs)}) imgs.append(img) else: _imgs = re.findall('sImageUrl *: *[\'"](.+?)[\'"]', html) if not _imgs: raise Exception('no imgs') for img in _imgs: img = urljoin(page.url, img) img = File_navertoon({'referer': page.url, 'url':img, 'title': page.title, 'page': len(imgs)}) imgs.append(img) return imgs def get_imgs_all(url, title, cw=None): print_ = get_print(cw) info, pages = get_pages(url, cw) pages = page_selector.filter(pages, cw) imgs = [] for p, page in enumerate(pages): check_alive(cw) imgs_already = get_imgs_already('navertoon', title, page, cw) if imgs_already: imgs += imgs_already continue imgs_new = get_imgs(page, cw) print_('{}: {}'.format(page.title, len(imgs_new))) imgs += imgs_new if cw is not None: cw.setTitle(tr_('읽는 중... {} / {} ({}/{})').format(title, page.title, p + 1, len(pages))) return imgs ================================================ FILE: src/extractor/navertv_downloader.py ================================================ import downloader import ree as re from io import BytesIO as IO from utils import Downloader, LazyUrl, get_ext, format_filename, try_n import ytdl class Downloader_navertv(Downloader): type = 'navertv' single = True URLS = ['tv.naver.com'] display_name = 'Naver TV' ACCEPT_COOKIES = [r'(.*\.)?naver\.com'] @classmethod def fix_url(cls, url): if not re.match(r'https?://.+', url, re.I): url = f'https://tv.naver.com/v/{url}' return url def read(self): video = Video(self.url, cw=self.cw) video.url()# self.urls.append(video.url) self.setIcon(video.thumb) self.enableSegment() self.title = video.title class Video: _url = None def __init__(self, url, cw=None): self.url = LazyUrl(url, self.get, self) self.cw = cw @try_n(4) def get(self, url): if self._url: return self._url ydl = ytdl.YoutubeDL(cw=self.cw) info = ydl.extract_info(url) fs = [f for f in info['formats'] if f['protocol'] in ['http', 'https']] fs = sorted(fs, key=lambda f: int(f.get('width', 0)), reverse=True) if not fs: raise Exception('No MP4 videos') f = fs[0] self._url = f['url'] self.thumb_url = info['thumbnails'][0]['url'] self.thumb = IO() downloader.download(self.thumb_url, buffer=self.thumb) self.title = info['title'] id = info['id'] ext = get_ext(self._url) self.filename = format_filename(self.title, id, ext) return self._url ================================================ FILE: src/extractor/newgrounds_downloader.py ================================================ # coding:utf8 from datetime import datetime import downloader import errors from functools import reduce import os import ree as re from timee import sleep from translator import tr_ from utils import Downloader, clean_title, Session, get_print, try_n, check_alive class Downloader_newgrounds(Downloader): type = 'newgrounds' URLS = ['newgrounds.com'] ACCEPT_COOKIES = [r'(.*\.)?newgrounds\.com'] def init(self): self.session = Session() @classmethod def fix_url(cls, url): user = re.find(r'(?:http(?:s)?://)?([^\.]+).newgrounds.com', url.lower()) if not user or user == 'www': user = re.find(r'newgrounds.com/art/view/([^/?#]+)', url, err='no user id') return 'https://{}.newgrounds.com/art'.format(user) def read(self): user = re.find('(?:http(?:s)?://)?([^\.]+).newgrounds.com', self.url.lower()) title = clean_title(user) for img in get_imgs(user, title, self.session, self.cw): self.urls.append(img.url) self.filenames[img.url] = img.filename self.title = title class Image: def __init__(self, url, filename=None): self.url = url if filename is None: filename = os.path.basename(url) self.filename = filename @try_n(10, sleep=20) def get_posts(url, params, session, print_): posts, data, items = [], None, None try: data = session.get(url, params=params).json() items = data.get('items') if items: for item in reduce(lambda x, y: x + y, items.values()): posts.append(re.find('(?<=href=")([^"]+)', item)) except Exception as e: print_('failed to get posts') print_('no. posts: {}'.format(len(posts))) print_('data: {}'.format(data)) print_('items: {}'.format(items)) raise e return posts @try_n(10, sleep=20) def get_html(post, session): return downloader.read_html(post, session=session) def get_img(post, session, print_): html, url, name, ext, _datetime = None, None, None, None, None try: html = get_html(post, session) if 'You must be logged in, and at least 18 years of age to view this content!' in html: raise errors.LoginRequired() url = re.find('(?<="full_image_text":"= max_pid or c == 0: break return imgs + imgs_old ================================================ FILE: src/extractor/nozomi_downloader.py ================================================ import downloader from urllib.parse import quote from io import BytesIO from utils import Downloader, query_url, get_ext, clean_title, check_alive, lock, get_print, get_max_range, File, Session, limits import errors from translator import tr_ import utils import os class File_nozomi(File): type = 'nozomi' format = 'idpage?' def get(self): infos = [] for p, img in enumerate(read_post(self['id'], self['referer'], self.session, self.cw)): url = img['url'] d = { 'id': img['id'], 'page?': f'_p{p}' if p else '', } filename = utils.format('nozomi', d, get_ext(url)) info = {'url': url, 'name': filename, 'referer': img['referer']} infos.append(info) return infos @limits(.25) def read_post(id, referer, session, cw): print_ = get_print(cw) check_alive(cw) # https://j.nozomi.la/nozomi.js s_id = str(id) url_post = 'https://j.nozomi.la/post/{}/{}/{}.json'.format(s_id[-1], s_id[-3:-1], s_id) try: j = downloader.read_json(url_post, referer, session=session) except Exception as e: print_(f'{id}: {e}') return [] #5989 imgs = [] for url in j['imageurls']: did = url['dataid'] if j.get('is_video'): #5754 cdn = 'v' ext = url['type'] else: cdn = 'g' if j.get('type') == 'gif' else 'w' ext = 'gif' if url.get('type') == 'gif' else 'webp' url = 'https://{}.nozomi.la/{}/{}/{}.{}'.format(cdn, did[-1], did[-3:-1], did, ext) #5340 img = {'id': id, 'url': url, 'referer': f'https://nozomi.la/post/{id}.html'} imgs.append(img) return imgs class Downloader_nozomi(Downloader): type = 'nozomi' URLS = ['nozomi.la'] display_name = 'Nozomi.la' MAX_CORE = 15 ACC_MTIME = True ACCEPT_COOKIES = [r'(.*\.)?nozomi\.la'] def init(self): self.session = Session() @classmethod def fix_url(cls, url): return url.split('#')[0] @property def name(self): qs = query_url(self.url) name = qs['q'][0] if self._popular: name += ' - Popular' return clean_title(name) def read(self): if '/post/' in self.url: raise errors.Invalid(tr_('개별 다운로드는 지원하지 않습니다: {}').format(self.url)) self._popular = 'search-Popular.' in self.url self.title = '{} {}'.format(tr_('읽는 중...'), self.name) qs = query_url(self.url) q = qs['q'][0] ids = get_ids_multi(q, self._popular, self.session, self.cw) self.print_(f'ids: {len(ids)}') max_pid = get_max_range(self.cw) def foo(id, p): d = { 'id': id, 'page?': f'_p{p}' if p else '', } filename_guess_base = utils.format('nozomi', d, '.webp') return os.path.join(utils.dir(self.type, self.name, self.cw), filename_guess_base) for id in ids: if os.path.isfile(foo(id, 0)): p = 0 while True: filename_guess = foo(id, p) if not os.path.isfile(filename_guess): break self.urls.append(filename_guess) p += 1 else: file = File_nozomi({'id': id, 'url': f'https://nozomi.la/post/{id}.html', 'referer': self.url}) self.urls.append(file) if len(self.urls) >= max_pid: break self.title = self.name @lock def get_ids(q, popular, session, cw): check_alive(cw) if q is None: if popular: url_api = 'https://j.nozomi.la/index-Popular.nozomi' else: url_api = 'https://j.nozomi.la/index.nozomi' else: q = q.replace('/', '') #5146 if popular: url_api = 'https://j.nozomi.la/nozomi/popular/{}-Popular.nozomi'.format(quote(q)) else: url_api = 'https://j.nozomi.la/nozomi/{}.nozomi'.format(quote(q)) #print_(url_api) f = BytesIO() downloader.download(url_api, 'https://nozomi.la/', session=session, buffer=f) data = f.read() ids = [] for i in range(0, len(data), 4): crop = data[i:i+4] id = crop[0]*16777216 + crop[1]*65536 + crop[2]*256 + crop[3] ids.append(id) return ids def get_ids_multi(q, popular, session, cw=None): print_ = get_print(cw) max_pid = get_max_range(cw) qs = q.split(' ') qs_pos = [q for q in qs if not q.startswith('-')] qs_neg = [q[1:] for q in qs if q.startswith('-')] q = qs_pos[0] if qs_pos else None ids = get_ids(q, popular, session, cw) print_('{}: {}'.format(q, len(ids))) # Positive for q in qs_pos[1:]: ids_ = get_ids(q, popular, session, cw) set_ids_ = set(ids_) ids_old = ids ids = [] for id in ids_old: if id in set_ids_: ids.append(id) print_('{}: {} ({})'.format(q, len(ids_), len(ids))) # Negative for q in qs_neg: ids_ = get_ids(q, popular, session, cw) set_ids_ = set(ids_) ids_old = ids ids = [] for id in ids_old: if id not in set_ids_: ids.append(id) print_('-{}: {} ({})'.format(q, len(ids_), len(ids))) return ids[:max_pid] ================================================ FILE: src/extractor/pawoo_downloader.py ================================================ #coding:utf8 from utils import Downloader, clean_title, Session, Soup, urljoin import clf2 from mastodon import get_info import ree as re def get_id(url): return re.find('pawoo.net/([^/]+)', url.lower()) class Downloader_pawoo(Downloader): type = 'pawoo' URLS = ['pawoo.net'] ACCEPT_COOKIES = [r'(.*\.)?pawoo\.net'] def init(self): self.session = Session() if get_id(self.url) == 'web': #6123 soup = Soup(clf2.solve(self.url)['html']) name = soup.find('div', class_='account__header__tabs__name') id_ = name.find('small').text.strip() self.url = urljoin(self.url, f'/{id_}') @classmethod def fix_url(cls, url): if url.endswith('/media'): url = url[:-len('/media')] id_ = get_id(url) or url if id_ == 'web': return url return f'https://pawoo.net/{id_}' def read(self): id_ = get_id(self.url) info = get_info('pawoo.net', id_, f'pawoo_{id_}', self.session, self.cw) self.urls += info['files'] self.title = clean_title('{} (pawoo_{})'.format(info['title'], id_)) ================================================ FILE: src/extractor/pinter_downloader.py ================================================ from utils import Session, Downloader, LazyUrl, clean_url, try_n, clean_title, get_ext, get_max_range, check_alive, limits, json import ree as re from translator import tr_ import urllib from m3u8_tools import playlist2stream, M3u8_stream BASE_URL = 'https://www.pinterest.com' class Downloader_pinter(Downloader): type = 'pinter' URLS = ['pinterest.'] type_pinter = 'board' display_name = 'Pinterest' ACCEPT_COOKIES = [r'(.*\.)?(pinterest)\.'] @try_n(4) def init(self): self.session = Session('chrome') self.api = PinterestAPI(self.session) self._pin_id = re.find(r'https?://.*pinterest\.[^/]+/pin/([0-9]+)', self.url) if self._pin_id is not None: self.type_pinter = 'pin' else: username, board = get_username_board(self.url) if '/' in board: self.type_pinter = 'section' if board == '_created': self.type_pinter = 'created' self.print_(f'type: {self.type_pinter}') if self.type_pinter in ['board', 'section', 'created']: self.info = get_info(username, board, self.api) elif self.type_pinter == 'pin': pass #5132 else: raise NotImplementedError(self.type_pinter) @classmethod def fix_url(cls, url): if 'pinterest.' not in url: url = f'https://www.pinterest.com/{url}' return url @property def name(self): if self.type_pinter == 'pin': return self._pin_id username = '' name = '' if self.type_pinter == 'created': username = self.info['native_creator']['username'] name = '_created' else: username = self.info['owner']['username'] name = self.info['name'] return clean_title(f'{username}/{name}') def read(self): if self.type_pinter == 'pin': self.single = True id = self._pin_id else: id = self.info['id'] self.title = self.name imgs = get_imgs(id, self.api, cw=self.cw, title=self.name, type=self.type_pinter) for img in imgs: self.urls.append(img.url) self.title = self.name def get_info(username, board, api): if '/' in board: section = '/'.join(board.split('/')[1:]) board = board.split('/')[0] info = api.board(username, board) for s in api.board_sections(info['id']): print(s['slug'].lower(), section) if s['slug'].lower() == section.lower(): break else: raise Exception('Invalid section') title = s['title'] info.update(s) info['name'] = f'{info["name"]}/{title}' print('section_id:', info['id']) elif board == '_created': info = api.board_created(username)[0] else: info = api.board(username, board) return info class PinterestAPI: HEADERS = { 'Accept': 'application/json, text/javascript, */*, q=0.01', 'Accept-Language': 'en-US,en;q=0.5', 'Referer': BASE_URL + '/', 'X-Requested-With': 'XMLHttpRequest', 'X-APP-VERSION' : '31461e0', 'X-Pinterest-AppState': 'active', 'Origin': BASE_URL, } def __init__(self, session): self.session = session self.session.headers.update(self.HEADERS) def pin(self, pin_id): options = {'id': pin_id, 'field_set_key': 'detailed'} return self._call('Pin', options)['resource_response']['data'] def pin_related(self, pin_id): options = {'pin': pin_id, 'add_vase': True, 'pins_only': True} return self._pagination('RelatedPinFeed', options) def board(self, user, board): options = {'slug': board, 'username': user, 'field_set_key': 'detailed'} return self._call('Board', options)['resource_response']['data'] def board_pins(self, board_id): options = {'board_id': board_id} return self._pagination('BoardFeed', options) def board_related(self, board_id): options = {'board_id': board_id, 'add_vase': True} return self._pagination('BoardRelatedPixieFeed', options) def board_sections(self, board_id): options = {'board_id': board_id} return self._pagination('BoardSections', options) def board_section_pins(self, section_id): options = {'section_id': section_id} return self._pagination('BoardSectionPins', options) def board_created(self, user): options = {'data': {}, 'username': user, 'field_set_key': 'grid_item'} return self._call('UserActivityPins', options)['resource_response']['data'] def board_created_pins(self, user): options = {'data': {}, 'username': user, 'field_set_key': 'grid_item'} return self._pagination('UserActivityPins', options) @try_n(4) @limits(4) # 1000 calls per hour def _call(self, resource, options): url = f'{BASE_URL}/resource/{resource}Resource/get/' params = {'data': json.dumps({'options': options}), 'source_url': ''} headers = {'X-Pinterest-PWS-Handler': 'www/[username]/[slug].js'} #print(f'_call: {url}, {params}') r = self.session.get(url, params=params, headers=headers) s = r.text status_code = r.status_code try: data = json.loads(s) except ValueError: data = {} if status_code < 400 and not r.history: return data if status_code == 404 or r.history: raise Exception('Not Found') raise Exception(f'API request failed: {status_code}') def _pagination(self, resource, options): while True: data = self._call(resource, options) if resource == 'UserActivityPins' and len(data['resource_response']['data']) == 0: return for x in data['resource_response']['data']: yield x try: bookmarks = data['resource']['options']['bookmarks'] if not bookmarks or bookmarks[0] == '-end-' or bookmarks[0].startswith('Y2JOb25lO'): return options['bookmarks'] = bookmarks except KeyError: return class Image: live = False def __init__(self, img): self.id = img['id'] print(self.id) videos = img.get('videos') if videos and 'video_list' in videos: src = list(videos['video_list'].values())[0]['url'] else: src = img['images']['orig']['url'] ext = get_ext(src) if ext.lower() == '.m3u8': try: src = playlist2stream(src) except: src = M3u8_stream(src) if src.live: #7541 self.live = True ext = '.mp4' self.url = LazyUrl(f'{BASE_URL}/pin/{self.id}/', lambda _: src, self) self.filename = f'{self.id}{ext}' def get_imgs(id, api, cw=None, title=None, type='board'): n = get_max_range(cw) imgs = [] ids = set() print(f'get_imgs: type={type}') if type == 'board': gen = api.board_pins(id) elif type == 'section': gen = api.board_section_pins(id) elif type == 'pin': gen = [api.pin(id)] elif type == 'created': gen = api.board_created_pins(title.split('/')[0]) else: raise Exception(f'Type "{type}" is not supported') for img in gen: check_alive(cw) if 'images' not in img: print('skip img:', img['id']) continue img = Image(img) if img.live: if type == 'pin': raise Exception('live') print('live:', img.id) continue if type == 'pin' and img.id != id: raise AssertionError('id mismatch') if img.id in ids: print('duplicate:', img.id) continue ids.add(img.id) imgs.append(img) if len(imgs) >= n: break if cw is not None: cw.setTitle('{} {} ({})'.format(tr_('읽는 중...'), title, len(imgs))) return imgs def get_username_board(url): url = clean_url(url) m = re.search('pinterest.[a-zA-Z.]+?/([^/]+)/([^#\\?]+)', url) username, board = m.groups() board = urllib.parse.unquote(board).strip() while board.endswith('/'): board = board[:-1].strip() return (username, board) ================================================ FILE: src/extractor/pixiv_downloader.py ================================================ import downloader from utils import Downloader, urljoin, clean_title, LazyUrl, get_ext, get_print, try_n, compatstr, get_max_range, check_alive, query_url, Soup, limits, json import ffmpeg import utils import os import ree as re import errors from translator import tr_ from error_printer import print_error from urllib.parse import quote, unquote import constants from datetime import datetime import requests from locker import lock from multiprocessing.pool import ThreadPool import clf2 from PIL import Image as Image_ import zipfile import weakref ##import asyncio LIMIT = 48 N_ERR = 4 for header in ['pixiv_illust', 'pixiv_bmk', 'pixiv_search', 'pixiv_following', 'pixiv_following_r18']: if header not in constants.available_extra: constants.available_extra.append(header) utils.TOKENS['pixiv'] = ['id', 'page', 'artist', 'artistid', 'title', 'date'] class LoginRequired(errors.LoginRequired): def __init__(self, *args): super().__init__(*args, method='browser', url='https://accounts.pixiv.net/login', w=560, h=920) class Downloader_pixiv(Downloader): type = 'pixiv' MAX_CORE = 4 MAX_PARALLEL = 2 keep_date = True STEP = 4, 16 URLS = ['pixiv.me', 'pixiv.net'] ACCEPT_COOKIES = [r'(.*\.)?pixiv\.(com|co|net|me)'] def init(self): setattr(self.cw, 'sid?', None) res = clf2.solve(self.url, cw=self.cw) self.session = res['session'] #5105 soup = Soup(res['html']) if soup.find('a', href=lambda h: h and '/login.php' in h): def f(html, browser=None): soup = Soup(html) for div in soup.findAll('div'): if div.get('data-page-name') == 'LoginPage': browser.show() return False browser.hide() return True try: res = clf2.solve('https://accounts.pixiv.net/login', session=self.session, cw=self.cw, f=f, delay=3, w=560, h=920, timeout=120) except clf2.Timeout: raise LoginRequired() res = clf2.solve(self.url, session=self.session, cw=self.cw) soup = Soup(res['html']) err = soup.find('p', class_='error-message') if err: #5223 raise errors.Invalid(f'{err.text.strip()}: {self.url}') @classmethod def fix_url(cls, url): rt = utils.query_url(url).get('return_to') if rt: url = urljoin(url, rt[0]) if '/search_user.php?' in url: url = f'https://pixiv.me/{utils.query_url(url).get("nick")[0]}' if url.startswith('illust_'): url = f'https://www.pixiv.net/en/artworks/{url[len("illust_"):]}' elif url.startswith('bmk_'): url = f'https://www.pixiv.net/en/users/{url[len("bmk_"):]}/bookmarks/artworks' elif url.startswith('search_'): _ = quote(url[len('search_'):].replace('+', ' ')) url = f'https://www.pixiv.net/en/tags/{_}/artworks' elif url.startswith('following_r18_'): url = 'https://www.pixiv.net/bookmark_new_illust_r18.php' elif url.startswith('following_'): url = 'https://www.pixiv.net/bookmark_new_illust.php' elif not re.find(r'^https?://', url) and '.' not in url: url = f'https://www.pixiv.net/en/users/{url}' #3474 url = re.sub(r'(users/[0-9]+)/artworks$', r'\1', url) url = re.sub(r'[?&]p=[0-9]+$', '', url) if '://' not in url: #6082 url = 'https://' + url return url.strip('/') @classmethod def key_id(cls, url): return url.replace('://www.', '://').replace('/en/', '/').replace('http://', 'https://').lower() def read(self): ## loop = asyncio.new_event_loop() ## asyncio.set_event_loop(loop) try: info = get_info(self.url, self.session, self.cw) self.artist = info.get('artist') #4897 for img in info['imgs']: if isinstance(img, str): # local self.urls.append(img) continue self.urls.append(img.url) self.title = clean_title(info['title']) finally: ## loop.close() pass class PixivAPIError(LoginRequired): pass class HTTPError(Exception): pass class PixivAPI: def __init__(self, session, cw): self.session = session hdr = { 'Accept': 'application/json', 'Accept-Encoding': 'gzip, deflate', #6588 'Accept-Language': 'en-US,en;q=0.9,ko-KR;q=0.8,ko;q=0.7,ja;q=0.6', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Referer': 'https://www.pixiv.net/', 'X-User-Id': my_id(session, cw), } self.session.headers.update(hdr) def illust_id(self, url): return re.find('/artworks/([0-9]+)', url) or re.find('[?&]illust_id=([0-9]+)', url) def user_id(self, url): return re.find('/users/([0-9]+)', url) or re.find('[?&]id=([0-9]+)', url) @try_n(4, sleep=5) @limits(1.5) #3355, #5105 def call(self, url): #print('call:', url) url = urljoin('https://www.pixiv.net/ajax/', url) e_ = None try: info = downloader.read_json(url, session=self.session) except requests.exceptions.HTTPError as e: code = e.response.status_code if code in (403, 404): e_ = HTTPError(f'{code} Client Error') else: raise e if e_: raise e_ err = info['error'] if err: raise PixivAPIError(info.get('message')) return info['body'] def illust(self, id_): return self.call(f'illust/{id_}') def pages(self, id_): return self.call(f'illust/{id_}/pages') def ugoira_meta(self, id_): return self.call(f'illust/{id_}/ugoira_meta') def profile(self, id_): return self.call(f'user/{id_}/profile/all') def top(self, id_): return self.call(f'user/{id_}/profile/top') def bookmarks(self, id_, offset=0, limit=None, rest='show'): if limit is None: limit = LIMIT return self.call(f'user/{id_}/illusts/bookmarks?tag=&offset={offset}&limit={limit}&rest={rest}') def search(self, q, order='date_d', mode='all', p=1, s_mode='s_tag_full', type_='all', scd=None, ecd=None, wlt=None, wgt=None, hlt=None, hgt=None, blt=None, bgt=None, ratio=None, tool=None): url = f'search/artworks/{quote(q)}?word={quote(q)}&order={order}&mode={mode}&p={p}&s_mode={s_mode}&type={type_}' if scd: url += f'&scd={scd}' if ecd: url += f'&ecd={ecd}' if wlt: url += f'&wlt={wlt}' if wgt: url += f'&wgt={wgt}' if hlt: url += f'&hlt={hlt}' if hgt: url += f'&hgt={hgt}' if blt: url += f'&blt={blt}' if bgt: url += f'&bgt={bgt}' if ratio: url += f'&ratio={ratio}' if tool: url += f'&tool={tool}' return self.call(url) def following(self, p, r18=False): #4077 mode = 'r18' if r18 else 'all' url = f'follow_latest/illust?p={p}&mode={mode}' return self.call(url) class Image: local = False def __init__(self, url, referer, id_, p, info, cw, ugoira=None): self._url = url self.id_ = id_ self.p = p self.artist = info['artist'] self.artistid = info['artist_id'] #3636 self.title = info['raw_title'] self.utime = info['create_date'] self.cw = weakref.ref(cw) self.ugoira = ugoira self.url = LazyUrl(referer, self.get, self, pp=self.pp, detect_local=not ugoira) def get(self, referer): d = { 'id': self.id_, 'page': self.p, 'artist': clean_title(self.artist, allow_dot=True), 'artistid': self.artistid, 'title': clean_title(self.title, allow_dot=True), #6433, #6592 'date': self.utime, } self.filename = utils.format('pixiv', d, get_ext(self._url)) if self.ugoira and self.ugoira['ext']: #3355 filename_local = os.path.join(self.cw().dir, self.filename) filename_local = f'{os.path.splitext(filename_local)[0]}{self.ugoira["ext"]}' if os.path.abspath(filename_local) in self.cw().names_old or os.path.exists(filename_local): #4534 self.filename = os.path.basename(filename_local) self.local = True return self._url def pp(self, filename): if self.ugoira and self.ugoira['ext'] and not self.local: if utils.ui_setting: dither = utils.ui_setting.checkDither.isChecked() quality = utils.ui_setting.ugoira_quality.value() else: dither = True quality = 90 filename_new = f'{os.path.splitext(filename)[0]}{self.ugoira["ext"]}' if self.ugoira['ext'] == '.ugoira': #6986 file = json.dumps(self.ugoira['frames'], separators=(',', ':')).encode('utf8') with zipfile.ZipFile(filename, 'a', zipfile.ZIP_STORED, allowZip64=True) as f: f.writestr('animation.json', file) os.rename(filename, filename_new) else: ffmpeg.gif(filename, filename_new, self.ugoira['delay'], dither=dither, quality=quality, cw=self.cw()) utils.submit_remove(filename, False) return filename_new def pretty_tag(tag): return tag.replace(' ', '').lower() @lock def tags_matched(tags_illust, tags_add, cw=None): print_ = get_print(cw) cache = cw.get_extra('pixiv_tag_cache') if cw else None init = True if cache is not None: init = False tags = set(cache['tags']) tags_ex = set(cache['tags_ex']) else: if utils.ui_setting and utils.ui_setting.groupBox_tag.isChecked(): tags_ = [compatstr(utils.ui_setting.tagList.item(i).text()) for i in range(utils.ui_setting.tagList.count())] else: tags_ = [] tags = set() tags_ex = set() for tag in tags_: tag = pretty_tag(tag) if tag.startswith('-'): tags_ex.add(tag[1:].strip()) else: tags.add(tag) if init: if cw: cache = {} cache['tags'] = list(tags) cache['tags_ex'] = list(tags_ex) cw.set_extra('pixiv_tag_cache', cache) print_(f'tags: [{", ".join(tags)}]') print_(f'tags_ex: [{", ".join(tags_ex)}]') if tags_add: tags.update((pretty_tag(tag) for tag in tags_add)) if init: print_(f'tags_add: {tags_add}') tags_illust = set(pretty_tag(tag) for tag in tags_illust) return (not tags or tags & tags_illust) and tags_ex.isdisjoint(tags_illust) def get_info(url, session, cw=None, depth=0, tags_add=None): print_ = get_print(cw) api = PixivAPI(session, cw) info = {} imgs = [] ugoira_ext = [None, '.gif', '.webp', '.ugoira'][utils.ui_setting.ugoira_convert.currentIndex()] if utils.ui_setting else None #6986 max_pid = get_max_range(cw) if api.illust_id(url): # Single post id_ = api.illust_id(url) data = api.illust(id_) login = 'noLoginData' not in data if not login:# raise LoginRequired() if data['xRestrict'] and not login: raise LoginRequired('R-18') info['artist'] = data['userName'] info['artist_id'] = data['userId'] info['raw_title'] = data['illustTitle'] info['title'] = f'{info["raw_title"]} (pixiv_illust_{id_})' info['create_date'] = parse_time(data['createDate']) tags_illust = set(tag['tag'] for tag in data['tags']['tags']) if tags_matched(tags_illust, tags_add, cw): if data['illustType'] == 2: # ugoira data = api.ugoira_meta(id_) ugoira = { 'ext': ugoira_ext, 'delay': [frame['delay'] for frame in data['frames']], 'frames': data['frames'], } img = Image(data['originalSrc'], url, id_, 0, info, cw, ugoira=ugoira) imgs.append(img) else: data = api.pages(id_) for img in data: img = Image(img['urls']['original'], url, id_, len(imgs), info, cw) imgs.append(img) else: print('tags mismatched') elif '/bookmarks/' in url or 'bookmark.php' in url: # User bookmarks id_ = api.user_id(url) if id_ is None: # id_ = my_id(session, cw) if id_ == my_id(session, cw): rests = ['show', 'hide'] else: rests = ['show'] process_user(id_, info, api) info['title'] = f'{info["artist"]} (pixiv_bmk_{info["artist_id"]})' ids = [] ids_set = set() for rest in rests: offset = 0 while len(ids) < max_pid: data = api.bookmarks(id_, offset, rest=rest) c = 0 for id in [work['id'] for work in data['works']]: if id in ids_set: continue ids_set.add(id) ids.append(id) c += 1 if not c: break offset += LIMIT if depth == 0: check_alive(cw) process_ids(ids, info, imgs, session, cw, depth) elif '/tags/' in url or 'search.php' in url: # Search q = unquote(re.find(r'/tags/([^/]+)', url) or re.find('[?&]word=([^&]*)', url, err='no tags')) info['title'] = f'{q} (pixiv_search_{q.replace(" ", "+")})' qs = query_url(url) order = qs.get('order', ['date_d'])[0] mode = qs.get('mode', ['all'])[0] s_mode = qs.get('s_mode', ['s_tag_full'])[0] scd = qs.get('scd', [None])[0] ecd = qs.get('ecd', [None])[0] type_ = qs.get('type', ['all'])[0] wlt = qs.get('wlt', [None])[0] wgt = qs.get('wgt', [None])[0] hlt = qs.get('hlt', [None])[0] hgt = qs.get('hgt', [None])[0] blt = qs.get('blt', [None])[0] bgt = qs.get('bgt', [None])[0] ratio = qs.get('ratio', [None])[0] tool = qs.get('tool', [None])[0] logs = [ f'order: {order}', f'mode: {mode}', f's_mode: {s_mode}', f'scd / ecd: {scd} / {ecd}', f'type: {type_}', f'wlt / wgt: {wlt} / {wgt}', f'hlt / hgt: {hlt} / {hgt}', f'blt / bgt: {blt} / {bgt}', f'ratio: {ratio}', f'tool: {tool}', ] print_('\n'.join(logs)) ids = [] ids_set = set() p = 1 while len(ids) < max_pid: data = api.search(q, order, mode, p=p, s_mode=s_mode, scd=scd, ecd=ecd, type_=type_, wlt=wlt, wgt=wgt, hlt=hlt, hgt=hgt, blt=blt, bgt=bgt, ratio=ratio, tool=tool) c = 0 for id in [illust['id'] for illust in data['illustManga']['data'] if 'id' in illust]: if id in ids_set: continue ids_set.add(id) ids.append(id) c += 1 if not c: break p += 1 process_ids(ids, info, imgs, session, cw, depth) elif 'bookmark_new_illust.php' in url or 'bookmark_new_illust_r18.php' in url or re.search(r'/users/[0-9]+/following', url): # Newest works: Following r18 = 'bookmark_new_illust_r18.php' in url id_ = my_id(session, cw) process_user(id_, info, api) info['title'] = f'{info["artist"]} (pixiv_following_{"r18_" if r18 else ""}{info["artist_id"]})' ids = [] ids_set = set() p = 1 while len(ids) < max_pid: data = api.following(p, r18=r18) c = 0 for id in data['page']['ids']: if id in ids_set: continue ids_set.add(id) ids.append(id) c += 1 if not c: break p += 1 process_ids(ids, info, imgs, session, cw, depth) elif api.user_id(url): # User illusts m = re.search(r'/users/[0-9]+/([\w]+)/?([^\?#/]*)', url) type_ = {'illustrations': 'illusts', 'manga': 'manga'}.get(m and m.groups()[0]) if type_: types = [type_] else: types = ['illusts', 'manga'] if m: tag = unquote(m.groups()[1]) or None else: tag = None print_(f'types: {types}, tag: {tag}') id_ = api.user_id(url) process_user(id_, info, api) data = api.profile(id_) info['title'] = f'{info["artist"]} (pixiv_{info["artist_id"]})' ids = [] for type_ in types: illusts = data[type_] if not illusts: continue ids += list(illusts.keys()) ids = sorted(ids, key=int, reverse=True) print_(f'ids: {len(ids)}') if not ids: raise Exception('no imgs') process_ids(ids, info, imgs, session, cw, depth, tags_add=[tag] if tag else None) else: raise NotImplementedError() info['imgs'] = imgs[:max_pid] return info def parse_time(ds): ds, z = ds[:-6], ds[-6:] dt = int(z[:3]) * 3600 + int(z[4:]) * 60 time = datetime.strptime(ds.replace(' ', ' '), '%Y-%m-%dT%H:%M:%S') time = (time-datetime(1970,1,1)).total_seconds() return time - dt @try_n(4, sleep=.5) #5469 def my_id(session, cw): print_ = get_print(cw) sid = session.cookies.get('PHPSESSID', domain='.pixiv.net', path='/') if not sid: raise LoginRequired() if cw is not None: _ = getattr(cw, 'sid?', None) if _ is None: setattr(cw, 'sid?', sid) print_(f'sid: {sid}') userid = re.find(r'^([0-9]+)', sid) if userid is None: raise LoginRequired() return userid def process_user(id_, info, api): info['artist_id'] = id_ data_user = api.top(id_) info['artist'] = data_user['extraData']['meta']['ogp']['title'] def process_ids(ids, info, imgs, session, cw, depth=0, tags_add=None): print_ = get_print(cw) max_pid = get_max_range(cw) errs = [] empty = True names = cw.names_old table = {} for name in names: id = re.find(r'([0-9]+)_p[0-9]+.*\.(jpg|jpeg|png|apng|bmp|webp|gif)$', os.path.basename(name)) #5541 if id is None: continue ext = os.path.splitext(name)[1] if ext.lower() in ['.gif', '.webp']: #5541 try: img = Image_.open(name) n_frames = getattr(img, 'n_frames', 1) except Exception as e: print_(print_error(e)) n_frames = 1 if n_frames > 1: print_(f'ugoira: {name}') continue id = id[0] if id in table: table[id].append(name) else: table[id] = [name] c_old = 0 def f(id_): nonlocal c_old if len(errs) >= N_ERR and empty: #7472 return errs[0] try: names = table.get(str(id_)) if names is not None: c_old += 1 return utils.natural_sort(names) else: info_illust = get_info(f'https://www.pixiv.net/en/artworks/{id_}', session, cw, depth=depth+1, tags_add=tags_add) return info_illust['imgs'] except Exception as e: if depth == 0 and (e.args and e.args[0] == '不明なエラーが発生しました' or isinstance(e, errors.LoginRequired)): # logout during extraction return e print_(f'process_ids error (id: {id_}, d:{depth}):\n{print_error(e)}') errs.append(e) return [] n, step = Downloader_pixiv.STEP print_(f'{n} / {step}') pool = ThreadPool(n) try: for i in range(0, len(ids), step): for imgs_ in pool.map(f, ids[i:i+step]): if isinstance(imgs_, Exception): raise imgs_ if imgs_: empty = False imgs += imgs_ s = f'{tr_("읽는 중...")} {info["title"]} - {len(imgs)}' if cw: cw.setTitle(s) else: print(s) if len(imgs) >= max_pid: break if depth == 0: check_alive(cw) finally: pool.close() print_(f'c_old: {c_old}') print_(f'empty: {empty}') ================================================ FILE: src/extractor/pornhub_downloader.py ================================================ #coding:utf8 ''' Pornhub Downloader ''' from io import BytesIO import downloader import ree as re from utils import (Downloader, Soup, try_n, LazyUrl, urljoin, get_print, Session, get_max_range, filter_range, get_ext, format_filename, clean_title, get_resolution, check_alive) import clf2 import utils from m3u8_tools import playlist2stream, M3u8_stream import errors from error_printer import print_error import ytdl class File: ''' File ''' _thumb = None def __init__(self, id_, title, url, url_thumb, artist=''): self.id_ = id_ self.title = clean_title(f'{title}') self.url = url ext = get_ext(self.url) if ext.lower() == '.m3u8': try: self.url = playlist2stream(self.url, n_thread=4) except: self.url = M3u8_stream(self.url, n_thread=4) self.url_thumb = url_thumb if ext.lower() == '.m3u8': ext = '.mp4' self.filename = format_filename(self.title, self.id_, ext, artist=artist) def thumb(self): if self._thumb is None: f = BytesIO() downloader.download(self.url_thumb, buffer=f) self._thumb = f else: f = self._thumb f.seek(0) return f class Video: ''' Video ''' _url = None filename = None thumb = None artist = None def __init__(self, url, cw, session): url = Downloader_pornhub.fix_url(url) self.url = LazyUrl(url, self.get, self) self.cw = cw self.session = session @try_n(2) def get(self, url): ''' get ''' cw = self.cw session = self.session print_ = get_print(cw) if self._url: return self._url id_ = re.find(r'viewkey=(\w+)', url, re.I) or \ re.find(r'/embed/(\w+)', url, re.I) print_('id: {}'.format(id_)) if 'viewkey=' not in url.lower() and '/gif/' not in url.lower(): if id_ is None: raise Exception('no id') url = urljoin(url, '/view_video.php?viewkey={}'.format(id_)) url_test = url.replace('pornhubpremium.com', 'pornhub.com') try: html = downloader.read_html(url_test, session=session) soup = Soup(html) if soup.find('div', id='lockedPlayer'): print_('Locked player') raise Exception('Locked player') url = url_test except Exception as e: #3511 print_(print_error(e)) url = url.replace('pornhub.com', 'pornhubpremium.com') html = downloader.read_html(url, session=session) soup = Soup(html) soup = fix_soup(soup, url, session, cw) html = soup.html artist = None # removed if soup.find('div', class_='removed'): raise Exception('removed') gif = soup.find('div', {'id': 'gifImageSection'}) if gif: print_('GIF') id_ = url.split('/gif/')[1] id_ = re.findall('[0-9a-zA-Z]+', id_)[0] jss = list(gif.children) for js in jss: if 'data-mp4' in getattr(js, 'attrs', {}): break else: raise Exception('gif mp4 url not found') title = js['data-gif-title'] url = js['data-mp4'] url_thumb = re.find(r'https?://.+?.phncdn.com/pics/gifs/.+?\.jpg', html, err='no thumb') file = File('gif_{}'.format(id_), title, url, url_thumb) else: if id_ is None: raise Exception('no id') print_('Video') # 1968 title = soup.find('h1', class_='title') for item in title.findAll(class_='phpFree'): item.decompose() title = title.text.strip() #4940 artist = soup.find('div', class_='userInfo').find('div', class_='usernameWrap').text.strip() ydl = ytdl.YoutubeDL(cw=cw) info = ydl.extract_info(url) session.headers.update(info.get('http_headers', {})) fs = [] for f in info['formats']: f['quality'] = f.get('height') or 0 if f['protocol'].startswith('m3u8'): f['quality'] -= 1 if 'dash' in f['protocol'].lower(): #5554 continue print_('[{}p] {} {}'.format(f['height'], f['protocol'], f['url'])) fs.append(f) if not fs: raise Exception('No formats') fs = sorted(fs, key=lambda f: f['quality']) res = get_resolution() fs_good = [f for f in fs if f['quality'] <= res] if fs_good: f = fs_good[-1] else: f = fs[0] print_('\n[{}p] {} {}'.format(f['height'], f['protocol'], f['url'])) file = File(id_, title, f['url'], info['thumbnail'], artist) self._url = file.url self.title = file.title self.filename = file.filename self.thumb = file.thumb self.artist = artist return self._url def is_login(session, cw=None, n=2): ''' is_login ''' print_ = get_print(cw) print_('is_login {}'.format(n)) if n <= 0: return False url = 'https://www.pornhubpremium.com' soup = downloader.read_soup(url, session=session) soup = fix_soup(soup, url, session, cw) if soup.find('ul', id='profileMenuDropdown'): return True return is_login(session, cw, n-1) class Downloader_pornhub(Downloader): ''' Downloader ''' type = 'pornhub' single = True strip_header = False URLS = ['pornhub.com', 'pornhubpremium.com', 'pornhubthbh7ap3u.onion'] ACCEPT_COOKIES = [r'.*(pornhub|phncdn|pornhubpremium).*'] #6181 @classmethod def fix_url(cls, url): if 'pornhub_gif_' in url: url = 'https://www.pornhub.com/gif/{}'.format( url.replace('pornhub_gif_', '')) elif 'pornhub_album_' in url: url = 'https://www.pornhub.com/album/{}'.format( url.replace('pornhub_album_', '')) elif 'pornhub_' in url: url = 'https://www.pornhub.com/view_video.php?viewkey={}'\ .format(url.replace('pornhub_', '')) if '/authenticate/goToLoggedIn' in url: qs = utils.query_url(url) url = urljoin(url, qs['url'][0]) url = url.replace('pornhubthbh7ap3u.onion', 'pornhub.com') return url @classmethod def key_id(cls, url): for domain in cls.URLS: if domain in url: id_ = domain + url.split(domain)[1] break else: raise Exception('no id') return id_.split('#')[0] @try_n(2) def read(self): cw = self.cw session = self.session = Session() # 1791 self.purge_cookies() session.cookies.update({ 'age_verified': '1', 'accessAgeDisclaimerPH': '1', 'accessPH': '1', }) #6124 if 'pornhubpremium.com' in self.url.lower() and\ not is_login(session, cw): raise errors.LoginRequired(method='browser', url='https://www.pornhubpremium.com/premium/login') videos = [] tab = ''.join(self.url.replace('pornhubpremium.com', 'pornhub.com', 1).split('?')[0].split('#')[0].split('pornhub.com/')[-1].split('/')[2:3]) if '/album/' in self.url: self.print_('Album') info = read_album(self.url, session=session) self.single = False for photo in info['photos']: self.urls.append(photo.url) self.title = clean_title(info['title']) elif '/photo/' in self.url: self.print_('Photo') info = read_photo(self.url, session=session) self.urls.append(info['photo'].url) self.title = info['title'] elif tab not in ['', 'videos']: raise NotImplementedError(tab) elif 'viewkey=' not in self.url.lower() and\ '/embed/' not in self.url.lower() and\ '/gif/' not in self.url.lower(): self.print_('videos') info = get_videos(self.url, session, cw) hrefs = info['hrefs'] self.print_('videos: {}'.format(len(hrefs))) if not hrefs: raise Exception('no hrefs') videos = [Video(href, cw, session) for href in hrefs] video = self.process_playlist(info['title'], videos) self.setIcon(video.thumb()) self.artist = video.artist #7127 self.enableSegment() else: video = Video(self.url, cw, session) video.url() self.urls.append(video.url) self.setIcon(video.thumb()) self.artist = video.artist #7127 self.title = video.title self.enableSegment() def fix_soup(soup, url, session=None, cw=None): ''' fix_soup ''' print_ = get_print(cw) if soup.find('div', class_='logo'): return soup print_('invalid soup: {}'.format(url)) res = clf2.solve(url, session=session, cw=cw) session.purge(Downloader_pornhub.ACCEPT_COOKIES) return Soup(res['html']) class Photo_lazy: ''' Photo_lazy ''' def __init__(self, url, session): self._session = session self.url = LazyUrl(url, self.get, self) def get(self, url): info = read_photo(url, self._session) photo = info['photo'] url = photo.url() self.filename = photo.filename return url class Photo: ''' Photo ''' def __init__(self, url, referer, id_, session): self._session = session ext = get_ext(url) self.filename = f'{id_}{ext}' self.url = LazyUrl(referer, lambda _: url, self) @try_n(8) def read_album(url, session=None): ''' read_album ''' photos = [] soup = downloader.read_soup(url, session=session) id_album = re.find('/album/([0-9]+)', url, err='no album id') for block in soup.findAll('div', class_='photoAlbumListBlock'): href = block.a.attrs['href'] href = urljoin(url, href) photo = Photo_lazy(href, session) photos.append(photo) info = {} title = soup.find('h1', class_='photoAlbumTitleV2').text info['title'] = format_filename(title, f'album_{id_album}') info['photos'] = photos return info @try_n(8) def read_photo(url, session=None): ''' read_photo ''' id_ = re.find('/photo/([0-9]+)', url, err='no photo id') soup = downloader.read_soup(url, session=session) section = soup.find('div', id='photoImageSection') photo = section.find('img')['src'] info = {} info['photo'] = Photo(photo, url, id_, session) title = soup.find('h1').text info['title'] = format_filename(title, f'photo_{id_}') return info @try_n(4) def get_videos(url, session, cw=None): ''' get_videos ''' print_ = get_print(cw) if '/users/' in url: mode = 'users' username = url.split('/users/')[1].split('/')[0] elif '/pornstar/' in url: mode = 'pornstar' username = url.split('/pornstar/')[1].split('/')[0] elif '/model/' in url: mode = 'model' username = url.split('/model/')[1].split('/')[0] elif '/channels/' in url: mode = 'channels' username = url.split('/channels/')[1].split('/')[0] elif '/playlist/' in url: mode = 'playlist' username = url.split('/playlist/')[1].split('/')[0] else: raise Exception('Not supported url') username = username.split('?')[0].split('#')[0] domain = utils.domain(url) if mode in ['pornstar']: url_main = 'https://{}/{}/{}'.format(domain, mode, username) html = downloader.read_html(url_main, session=session) soup = Soup(html) soup = fix_soup(soup, url_main, session, cw) for a in soup.findAll('a'): if '/{}/{}/videos/upload'.format(mode, username) in a.attrs.get('href', ''): free = True break else: free = False print_('free: {}'.format(free)) # Range max_pid = get_max_range(cw) html = downloader.read_html(url, session=session) soup = fix_soup(Soup(html), url, session, cw) info = {} # get title h1 = soup.find('h1') if h1: header = 'Playlist' title = h1.parent.find(id='watchPlaylist') else: title = None if not title: header = 'Channel' profile = soup.find('div', class_='profileUserName') wrapper = soup.find('div', class_='titleWrapper') bio = soup.find('div', class_='withBio') title = soup.find('h1', {'itemprop':'name'}) if not title and profile: title = profile.a if not title and wrapper: title = wrapper.h1 if not title and bio: title = bio.h1 if not title: raise Exception('No title') #print(title) info['title'] = '[{}] {}'.format(header, title.text.strip()) token = re.find('''token *= *['"](.*?)['"]''', html) print_('token: {}'.format(token)) # get links hrefs = [] fail = 0 for p in range(1, 1+100): check_alive(cw) try: if mode in ['users', 'model']: if mode == 'users': url_api = 'https://{}/users/{}/videos/public/'\ 'ajax?o=mr&page={}'.format(domain, username, p) elif mode == 'model': url_api = 'https://{}/model/{}/videos/upload/'\ 'ajax?o=mr&page={}'.format(domain, username, p) r = session.post(url_api) soup = Soup(r.text) if soup.find('h1'): print('break: h1') break elif mode in ['pornstar']: if free: url_api = 'https://{}/{}/{}/videos/upload'\ '?page={}'.format(domain, mode, username, p) soup = downloader.read_soup(url_api, session=session) soup = fix_soup(soup, url_api, session, cw) soup = soup.find('div', class_='videoUList') else: url_api = 'https://{}/{}/{}?page={}'.format(domain, mode, username, p) soup = downloader.read_soup(url_api, session=session) soup = fix_soup(soup, url_api, session, cw) soup = soup.find('ul', class_='pornstarsVideos') elif mode in ['channels']: url_api = 'https://{}/{}/{}/videos?page={}'.format(domain, mode, username, p) soup = downloader.read_soup(url_api, session=session) soup = fix_soup(soup, url_api, session, cw) try: soup = soup.find('div', {'id': 'channelsBody'}).find('div', class_='rightSide') except: break elif mode in ['playlist']: #url_api = 'https://{}/playlist/viewChunked?id={}&offset={}&itemsPerPage=40'.format(domain, username, len(hrefs)) if token is None: raise Exception('no token') url_api = 'https://{}/playlist/viewChunked?id={}&token={}&page={}'.format(domain, username, token, p) soup = downloader.read_soup(url_api, session=session) else: raise NotImplementedError(mode) fail = 0 except Exception as e: print_(e) fail += 1 if fail < 2: continue else: break finally: print_('{} ({})'.format(url_api, len(hrefs))) lis = soup.findAll('li', class_='videoblock') if not lis: print_('break: no lis') break if getattr(soup.find('title'), 'text', '').strip() == 'Page Not Found': print_('Page Not Found') break c = 0 for li in lis: a = li.find('a') href = a.attrs['href'] href = urljoin(url, href) if href in hrefs: continue c += 1 if href.startswith('javascript:'): # Remove Pornhub Premium print(href) continue hrefs.append(href) if c == 0: print('c==0') break print(c) # 1320 if len(hrefs) >= max_pid: break if cw: hrefs = filter_range(hrefs, cw.range) cw.fped = True info['hrefs'] = hrefs[:max_pid] return info ================================================ FILE: src/extractor/rule34_xxx_downloader.py ================================================ import downloader import ree as re import os from utils import Downloader, query_url, Soup, get_max_range, get_print, clean_title, try_n, check_alive, clean_url from translator import tr_ from urllib.parse import quote LIMIT = 100 def get_tags(url): url = clean_url(url) qs = query_url(url) if 'page=favorites' in url: id = qs.get('id', ['N/A'])[0] id = 'fav_{}'.format(id) else: tags = qs.get('tags', []) tags.sort() id = ' '.join(tags) if not id: id = 'N/A' return id class Downloader_rule34_xxx(Downloader): type = 'rule34_xxx' URLS = ['rule34.xxx'] MAX_CORE = 8 display_name = 'Rule34.xxx' _name = None ACCEPT_COOKIES = [r'(.*\.)?rule34\.xxx'] @classmethod def fix_url(cls, url): if 'rule34.xxx' not in url.lower(): url = url.replace(' ', '+') while '++' in url: url = url.replace('++', '+') url = quote(url) url = url.replace('%2B', '+') url = 'https://rule34.xxx/index.php?page=post&s=list&tags={}'.format(url) return url.replace('http://', 'https://') @property def name(self): if self._name is None: tags = get_tags(self.url) self._name = tags return clean_title(self._name) def read(self): self.title = self.name imgs = get_imgs(self.url, self.name, cw=self.cw) for img in imgs: self.urls.append(img.url) self.filenames[img.url] = img.filename self.title = self.name class Image: def __init__(self, id_, url): self.url = url ext = os.path.splitext(url)[1] self.filename = '{}{}'.format(id_, ext) def setPage(url, page): # Always use HTTPS url = url.replace('http://', 'https://') # Change the page if 'pid=' in url: url = re.sub('pid=[0-9]*', 'pid={}'.format(page), url) else: url += '&pid={}'.format(page) return url def get_imgs(url, title=None, cw=None): url = clean_url(url) if 's=view' in url and 'page=favorites' not in url: raise NotImplementedError('Not Implemented') if 'page=dapi' not in url.lower(): tags = get_tags(url) tags = quote(tags, safe='/') tags = tags.replace('%20', '+') url = "https://rule34.xxx/index.php?page=dapi&s=post&q=index&tags={}&pid={}&limit={}".format(tags, 0, LIMIT) print_ = get_print(cw) # Range max_pid = get_max_range(cw) imgs = [] ids = set() for p in range(500): #1017 check_alive(cw) url = setPage(url, p) print_(url) html = try_n(4, sleep=30)(downloader.read_html)(url) #3340 soup = Soup(html) posts = soup.findAll('post') if not posts: break for post in posts: id_ = post.attrs['id'] if id_ in ids: print('duplicate:', id_) continue ids.add(id_) url_img = post.attrs['file_url'] img = Image(id_, url_img) imgs.append(img) if len(imgs) >= max_pid: break if cw is not None: cw.setTitle('{} {} - {}'.format(tr_('읽는 중...'), title, len(imgs))) return imgs ================================================ FILE: src/extractor/sankaku_downloader.py ================================================ #coding: utf-8 #https://chan.sankakucomplex.com/ #https://idol.sankakucomplex.com/ #https://beta.sankakucomplex.com/ #https://sankaku.app/ #http://white.sankakucomplex.com/ #https://www.sankakucomplex.com/ import downloader import ree as re from utils import Downloader, urljoin, query_url, get_max_range, get_print, Soup, lazy, Session, clean_title, check_alive, File, get_ext, limits, clean_url from translator import tr_ import os from timee import sleep from error_printer import print_error from urllib.parse import quote import errors import utils class LoginRequired(errors.LoginRequired): def __init__(self, *args): super().__init__(*args, method='browser', url='https://login.sankakucomplex.com/login') class File_sankaku(File): type = 'sankaku' format = 'id' def get(self): print_ = get_print(self.cw) referer = self['referer'] for try_ in range(4): wait(self.cw) html = '' try: html = downloader.read_html(referer, session=self.session) soup = Soup(html) highres = soup.find(id='highres') url = urljoin(referer, highres['href'] if highres else soup.find(id='image')['src']) break except Exception as e: e_msg = print_error(e) if '429 Too many requests'.lower() in html.lower(): t_sleep = 120 * min(try_ + 1, 2) e = '429 Too many requests... wait {} secs'.format(t_sleep) elif 'post-content-notification' in html: # sankaku plus print_('Sankaku plus: {}'.format(self['id'])) return '' else: t_sleep = 5 s = '[Sankaku] failed to read image (id:{}): {}'.format(self['id'], e) print_(s) sleep(t_sleep, self.cw) else: raise Exception('can not find image (id:{})\n{}'.format(self['id'], e_msg)) soup = Soup('

{}

'.format(url)) url = soup.string d = { 'id': self['id'], } return {'url': url, 'name': utils.format('sankaku', d, get_ext(url))} class Downloader_sankaku(Downloader): type = 'sankaku' URLS = ['chan.sankakucomplex.com', 'idol.sankakucomplex.com', 'www.sankakucomplex.com'] MAX_CORE = 4 MAX_PARALLEL = 1 display_name = 'Sankaku Complex' ACCEPT_COOKIES = [r'(.*\.)?(sankakucomplex\.com|sankaku\.app)'] def init(self): type = self.url.split('sankakucomplex.com')[0].split('//')[-1].strip('.').split('.')[-1] if type == '': type = 'www' if type not in ['chan', 'idol', 'www']: raise Exception('Not supported subdomain') self.type_sankaku = type self.url = self.url.replace('&commit=Search', '') self.url = clean_url(self.url) self.session = Session() @lazy def soup(self): return downloader.read_soup(self.url, session=self.session) @classmethod def fix_url(cls, url): if 'sankakucomplex.com' not in url: url = url.replace(' ', '+') while '++' in url: url = url.replace('++', '+') url = quote(url) url = url.replace('%2B', '+') url = url.replace('%20', '+')# if url.startswith('[chan]'): type = 'chan' url = url.replace('[chan]', '', 1).strip() elif url.startswith('[idol]'): type = 'idol' url = url.replace('[idol]', '', 1).strip() elif url.startswith('[www]'): type = 'www' url = url.replace('[www]', '', 1).strip() else: raise Exception('Not supported subdomain') url = 'https://{}.sankakucomplex.com/?tags={}'.format(type, url) return url.replace('http://', 'https://') @lazy def id(self): if self.type_sankaku == 'www': id = '[www] ' + self.soup.find('h1', class_='entry-title').text.strip() else: if '/post/show/' in self.url or '/posts/' in self.url: #6718 id = get_id(self.url, self.soup) else: qs = query_url(self.url) tags = qs.get('tags', []) tags.sort() id = ' '.join(tags) if not id: id = 'N/A' id = '[{}] {}'.format(self.type_sankaku, id) return clean_title(id) @property def name(self): return self.id def read(self): get0 = self.session.get def get(*args, **kwargs): r = get0(*args, **kwargs) if kwargs.get('stream') and 'redirect.png' in r.url: #7043 raise Exception('Sankaku plus') return r self.session.get = get ui_setting = self.ui_setting self.title = self.name types = ['img', 'gif', 'video'] if ui_setting.exFile.isChecked(): if ui_setting.exFileImg.isChecked(): types.remove('img') if ui_setting.exFileGif.isChecked(): types.remove('gif') if ui_setting.exFileVideo.isChecked(): types.remove('video') if self.type_sankaku == 'www': imgs = get_imgs_www(self.url, self.soup) else: info = get_imgs(self.url, self.name, cw=self.cw, types=types, session=self.session) self.single = info['single'] imgs = info['imgs'] self.urls += imgs self.title = self.name def get_imgs_www(url, soup): imgs = [] view = soup.find('div', class_='entry-content') for img in view.findAll('img'): img = img.get('data-lazy-src') if not img: # no script continue img = urljoin(url, img) if img in imgs: print('duplicate', img) continue imgs.append(img) return imgs def setPage(url, page): # Always use HTTPS url = url.replace('http://', 'https://') # Change the page if 'page=' in url: url = re.sub(r'page=[0-9]*', 'page={}'.format(page), url) else: url += '&page={}'.format(page) return url @limits(6) def wait(cw): check_alive(cw) def get_imgs(url, title=None, cw=None, types=['img', 'gif', 'video'], session=None): print_ = get_print(cw) print_('types: {}'.format(', '.join(types))) if 'chan.sankakucomplex' in url: type = 'chan' elif 'idol.sankakucomplex' in url: type = 'idol' else: raise Exception('Not supported subdomain') info = {} info['single'] = False if '/post/show/' in url or '/posts/' in url: #6718 info['single'] = True id = get_id(url) info['imgs'] = [File_sankaku({'type': type, 'id': id, 'referer': url})] return info # Range max_pid = get_max_range(cw) local_ids = {} if cw is not None: dir = cw.downloader.dir try: names = os.listdir(dir) except Exception as e: print(e) names = [] for name in names: id = os.path.splitext(name)[0] local_ids[id] = os.path.join(dir, name) imgs = [] page = 1 ids = set() url_old = 'https://{}.sankakucomplex.com'.format(type) if cw is not None: cw.setTitle('{} {}'.format(tr_('읽는 중...'), title)) while len(imgs) < max_pid: #if page > 25: # Anonymous users can only view 25 pages of results # break wait(cw) #url = setPage(url, page) print_(url) try: html = downloader.read_html(url, referer=url_old, session=session) except Exception as e: #3366 print_(print_error(e)) break if '429 Too many requests'.lower() in html.lower(): print_('429 Too many requests... wait 120 secs') sleep(120, cw) continue page += 1 url_old = url soup = Soup(html) for banner in soup.findAll('div', class_='has-mail'): #5861 banner.decompose() banner = soup.find('div', class_='popular-previews') if banner: #6171 banner.decompose() err = soup.find('div', class_='post-premium-browsing_error') if err and not imgs: raise LoginRequired(err.text.strip()) articles = soup.findAll('article', class_='post-preview') if not articles: if soup.find(class_='post-premium-browsing_error'): #6418 print_('premium error') tags = utils.query_url(url)['tags'][0] tags = re.sub(r'id_range:<[0-9]+', '', tags).strip() tags += f' id_range:<{min(ids)}' url = utils.update_url_query(url, {'tags': tags}) url = re.sub(r'&page=[0-9]+', '', url) url = re.sub(r'&next=[0-9]+', '', url) continue print_('no articles') break for article in articles: # 1183 tags = article.find('img', class_='post-preview-image')['data-auto_page'].split() #6718 if 'animated_gif' in tags: type_ = 'gif' elif 'animated' in tags or 'webm' in tags or 'video' in tags or 'mp4' in tags: # 1697 type_ = 'video' else: type_ = 'img' if type_ not in types: continue url_img = article.a['href'] if not url_img.startswith('http'): url_img = urljoin('https://{}.sankakucomplex.com'.format(type), url_img) if 'get.sankaku.plus' in url_img: # sankaku plus continue id = re.find(r'p([0-9a-zA-Z]+)', article['id'], err='no id') #5892 #print_(article) if id in local_ids: #print('skip', id) local = True else: local = False #print(url_img) if id not in ids: ids.add(id) if local: img = local_ids[id] else: img = File_sankaku({'type':type, 'id':id, 'referer':url_img}) imgs.append(img) if len(imgs) >= max_pid: break try: # For page > 50 pagination = soup.find('div', class_='pagination') url = urljoin('https://{}.sankakucomplex.com'.format(type), utils.html.unescape(pagination['next-page-url'])) #6326 ## #3366 ## p = int(re.find(r'[?&]page=([0-9]+)', url, default=1)) ## if p > 100: ## break except Exception as e: print_(print_error(e)) #url = setPage(url, page) break if cw is not None: cw.setTitle('{} {} - {}'.format(tr_('읽는 중...'), title, len(imgs))) else: print(len(imgs), 'imgs') if not imgs: raise Exception('no images') info['imgs'] = imgs return info def get_id(url, soup=None): if soup is None: html = downloader.read_html(url) soup = Soup(html) if x := soup.find('input', id='post_id'): return x['value'] return soup.find('p', id='hidden_post_id').string ================================================ FILE: src/extractor/soundcloud_downloader.py ================================================ #coding: utf8 import downloader from io import BytesIO from utils import Downloader, LazyUrl, get_print, try_n, lock, get_max_range, format_filename, limits import ffmpeg import ytdl from m3u8_tools import M3u8_stream CLIENT_ID = None @lock def get_cid(force=False): global CLIENT_ID if CLIENT_ID is None or force: print('update cid...') d = ytdl.YoutubeDL() e = ytdl.extractor.soundcloud.SoundcloudIE(d) e._update_client_id() CLIENT_ID = e._CLIENT_ID return CLIENT_ID class Audio: _url = None def __init__(self, url, album_art, cw=None): self.album_art = album_art self.cw = cw self.url = LazyUrl(url, self.get, self, pp=self.pp) @try_n(2) @limits(1) def get(self, url): print_ = get_print(self.cw) if self._url: return self._url ydl = ytdl.YoutubeDL() self.info = info = ydl.extract_info(url) formats = info['formats'] print(formats) def key(f): abr = f.get('abr') if abr is None: abr = 320 return int(abr) formats = sorted(formats, key=key, reverse=True) url_audio = None for format in formats: protocol = format['protocol'] print_('【{}】 format【{}】 abr【{}】'.format(protocol, format['format'], format.get('abr', 0))) if not url_audio and protocol in ['http', 'https']: url_audio = format['url'] if not url_audio: url_audio = M3u8_stream(formats[0]['url']) self.album_art = False# self.username = info['uploader'] self.title = '{} - {}'.format(self.username, info['title']) self.filename = format_filename(self.title, '', '.mp3') self._thumb = None def thumb(): if self._thumb is None: for t in info['thumbnails'][::-1]: width = t.get('width', 1080) if not 100 <= width <= 500: continue url_thumb = t['url'] f = BytesIO() try: downloader.download(url_thumb, buffer=f) break except Exception as e: print(e) f = None self._thumb = f else: f = self._thumb if f is not None: f.seek(0) return f self.thumb = thumb self._url = url_audio return self._url def pp(self, filename): if self.thumb() and self.album_art: ffmpeg.add_cover(filename, self.thumb(), {'artist':self.username, 'title':self.info['title']}, cw=self.cw) class Downloader_soundcloud(Downloader): type = 'soundcloud' single = True URLS = ['soundcloud.com'] #lock = True audio = None display_name = 'SoundCloud' ACCEPT_COOKIES = [r'(.*\.)?soundcloud\.com'] def init(self): if 'soundcloud.com' in self.url.lower(): self.url = self.url.replace('http://', 'https://') else: self.url = 'https://soundcloud.com/{}'.format(self.url) @classmethod def fix_url(cls, url): return url.split('?')[0] def read(self): album_art = self.ui_setting.albumArt.isChecked() info = get_audios(self.url, self.cw, album_art) audios = info['audios'] if not audios: raise Exception('no audios') # first audio must be valid while audios: audio = audios[0] try: audio.url() break except Exception as e: e_ = e print(e) audios.remove(audio) else: raise e_ if len(audios) > 1: audio = self.process_playlist(info['title'], audios) else: self.urls.append(audio.url) self.title = audio.title self.artist = audio.username self.setIcon(audio.thumb()) @try_n(2) def get_audios(url, cw, album_art): print_ = get_print(cw) url = url.rstrip('/') if url.count('/') == 3: url += '/tracks' options = { 'extract_flat': True, 'playlistend': get_max_range(cw), } ydl = ytdl.YoutubeDL(options, cw=cw) info = ydl.extract_info(url) if 'entries' in info: entries = info['entries'] title = info['title'] for _type in ['All', 'Tracks', 'Albums', 'Sets', 'Reposts', 'Likes', 'Spotlight']: x = '({})'.format(_type) if x in title: title = title.replace(x, '') kind = _type break else: kind = 'Playlist' print_('kind: {}'.format(kind)) info['title'] = '[{}] {}'.format(kind.capitalize(), title) else: entries = [info] audios = [] for e in entries: url = e.get('webpage_url') or e['url'] if '/sets/' in url: continue audio = Audio(url, album_art, cw=cw) audios.append(audio) info['audios'] = audios return info ================================================ FILE: src/extractor/syosetu_downloader.py ================================================ #coding:utf8 import downloader import utils from utils import urljoin, try_n, Downloader, clean_title, Session, File, check_alive, get_max_range import ree as re from io import BytesIO import os from translator import tr_ from timee import sleep class Text(File): type = 'syosetu' format = 'title' def __init__(self, info): title = info['subtitle'] if not info['single']: p = int(re.findall('/([0-9]+)', info['referer'])[-1]) title = clean_title(f'[{p:04}] {title}') info['title_all'] = title d = { 'title': info['title_all'], } info['name'] = utils.format(self.type, d, '.txt') super().__init__(info) def get(self): text = get_text(self['referer'], self['title_all'], self['update'], self.session, self.cw) f = BytesIO() f.write(text.encode('utf8')) f.seek(0) return {'url': f} def get_id(url): return re.find(r'.com/([^/]+)', url) or url class Downloader_syosetu(Downloader): type = 'syosetu' URLS = ['syosetu.com'] MAX_CORE = 2 detect_removed = False display_name = '小説家になろう' ACCEPT_COOKIES = [r'(.*\.)?syosetu\.com'] atts = ['_title_', 'novel_ex'] @classmethod def fix_url(cls, url): return f'https://ncode.syosetu.com/{get_id(url)}/' def read(self): for try_ in range(8): self.print_('get_session') try: self.session = get_session() self.purge_cookies() soup = downloader.read_soup(self.url, session=self.session) get_title_artist(soup) break except Exception as e: print(e) e_ = e else: raise e_ title, self.artist = get_title_artist(soup) self._title_ = title ncode = re.find(r'syosetu.com/([^/]+)', self.url, err='no ncode') #3938 title_dir = clean_title(f'[{self.artist}] {title} ({ncode})') ex = soup.find('div', id='novel_ex') self.novel_ex = utils.get_text(ex, '', self.cw) if ex else None texts = [] # Range max_pid = get_max_range(self.cw) while check_alive(self.cw): subtitles = soup.findAll(class_='p-eplist__sublist') if subtitles: for subtitle in subtitles: update = subtitle.find(class_='p-eplist__update') #7502 update2 = None if update: for span in update.findAll('span'): update2 = span.attrs['title'] span.decompose() update = update.text.strip() if update2: update += f' ({update2})' a = subtitle.find('a') subtitle = a.text.strip() href = urljoin(self.url, a.attrs['href']) if not re.search(f'ncode.syosetu.com/{get_id(self.url)}/[0-9]+', href): self.print_(f'skip: {href}') continue text = Text({'referer': href, 'subtitle': subtitle, 'update': update, 'single': False}) texts.append(text) else: self.single = True text = Text({'referer': self.url, 'subtitle': title_dir, 'update': None, 'single': True}) texts.append(text) if len(texts) >= max_pid: break if pager_next := soup.find('a', class_='c-pager__item c-pager__item--next'): #6830 sleep(1) url_next = urljoin(self.url, pager_next['href']) self.print_(f'url_next: {url_next}') soup = downloader.read_soup(url_next, self.url, session=self.session) else: break self.print_(f'single: {self.single}') self.urls += texts self.title = title_dir def post_processing(self): if self.single: return names = self.cw.names filename = os.path.join(self.dir, f'[merged] {self.title}.txt') try: with utils.open(filename, 'wb') as f: f.write(f' {self._title_}\n\n \u4f5c\u8005\uff1a{self.artist}\n\n\n'.encode('utf8')) if self.novel_ex: f.write(self.novel_ex.encode('utf8')) for i, file in enumerate(names): self.cw.pbar.setFormat(f'[%v/%m] {tr_("병합...")} [{i}/{len(names)}]') with open(file, 'rb') as f_: text = f_.read() f.write(b'\n\n\n\n') f.write(text) finally: self.cw.pbar.setFormat("[%v/%m]") def get_title_artist(soup): #artist = soup.find('div', class_='novel_writername').text.replace('\u4f5c\u8005', '').replace('\uff1a', '').replace(':', '').replace('\u3000', ' ').strip() artist = soup.find('meta', {'name': 'twitter:creator'})['content'] rem = len(artist.encode('utf8', 'ignore')) + len('[merged] [] .txt') + len(' (n8273ds)') title = soup.find('title').text.strip() return clean_title(title, n=-rem), clean_title(artist) @try_n(22, sleep=30) def get_text(url, subtitle, update, session, cw): soup = downloader.read_soup(url, session=session) if update: update = ' ' + update else: update = '' p = soup.find(class_='p-novel__text--preface') if p: p_ = p p = utils.get_text(p, '', cw) p_.decompose() story = utils.get_text(soup.find(class_='p-novel__text'), '', cw) if p: story = f'{p}\n\n════════════════════════════════\n\n{story}' #2888 a = soup.find(class_='p-novel__text--afterword') a = '' if a is None else utils.get_text(a, '', cw) if a: story = f'{story}\n\n════════════════════════════════\n\n{a}' text = f'''──────────────────────────────── ◆ {subtitle}{update} ──────────────────────────────── {story}''' return text def get_session(): session = Session() session.cookies.set(name='over18', value='yes', path='/', domain='.syosetu.com') return session ================================================ FILE: src/extractor/talk_op_gg_downloader.py ================================================ # coding: UTF-8 # title: Download talk op.gg image # author: SaidBySolo # comment: op.gg 커뮤니티의 이미지를 다운로드합니다 """ MIT License Copyright (c) 2020 SaidBySolo Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ import requests from utils import Downloader, Soup class DownloaderTalkOPGG(Downloader): type = "talkopgg" URLS = ["talk.op.gg"] def init(self) -> None: pass def read(self) -> None: response = requests.get(self.url) soup = Soup(response.text) self.title = soup.find("title").text image_element_list = soup.find("div", class_="article-content").findAll("img") for image_element in image_element_list: self.urls.append(image_element["src"]) ================================================ FILE: src/extractor/tiktok_downloader.py ================================================ import downloader import ree as re from utils import Soup, LazyUrl, Downloader, try_n, compatstr, get_print, Session, get_max_range, format_filename, json import clf2 import ytdl from urllib.parse import unquote PATTERN_VID = '/(v|video)/(?P[0-9]+)' SHOW = True def is_captcha(soup, cw=None): r = soup.find('div', class_="verify-wrap") or soup.find('div', class_='captcha_verify_container') if r: get_print(cw)('captcha') return r class Downloader_tiktok(Downloader): type = 'tiktok' single = True URLS = ['tiktok.com', 'douyin.com'] display_name = 'TikTok' ACCEPT_COOKIES = [r'(.*\.)?(tiktok|douyin)\.com'] def init(self): cw = self.cw self.session = Session() res = clf2.solve(self.url, self.session, cw) soup = Soup(res['html']) if is_captcha(soup, cw): def f(html): return not is_captcha(Soup(html)) res = clf2.solve(self.url, self.session, cw, show=True, f=f) self.url = self.fix_url(res['url']) #4324 @classmethod def fix_url(cls, url): url = url.split('?')[0].split('#')[0].strip('/') if '://' not in url: url = 'https://www.tiktok.com/@{}'.format(url) return url def read(self): format = compatstr(self.ui_setting.youtubeFormat.currentText()).lower().strip() def parse_video_url(info, item): if 'url' in item: return item['url'] if 'tiktok.com' in self.url.lower(): # TikTok return 'https://www.tiktok.com/@{}/video/{}'.format(info.get('uid', ''), item['id']) #5235 else: # Douyin return 'https://www.douyin.com/video/{}'.format(item['id']) if re.search(PATTERN_VID, self.url): # single video video = Video(self.url, self.session, format, self.cw) video.url() self.urls.append(video.url) self.title = video.title elif 'tiktok.com/tag/' in self.url or 'douyin.com/search/' in self.url: # tag search tag = re.find(r'/(tag|search)/([^/#\?]+)', self.url)[1] tag = unquote(tag) title = '#{}'.format(tag) info = read_channel(self.url, self.session, self.cw, title=title) items = info['items'] videos = [Video(parse_video_url(info, item), self.session, format, self.cw) for item in items] video = self.process_playlist(title, videos) elif 'tiktok.com/@' in self.url or 'douyin.com/user/' in self.url: # channel info = read_channel(self.url, self.session, self.cw) items = info['items'] videos = [Video(parse_video_url(info, item), self.session, format, self.cw) for item in items] title = '{} (tiktok_{})'.format(info['nickname'], info['uid']) video = self.process_playlist(title, videos) else: raise NotImplementedError() class Video: _url = None def __init__(self, url, session, format, cw): self.url = LazyUrl(url, self.get, self) self.session = session self.format = format self.cw = cw @try_n(2) def get(self, url): if self._url: return self._url m = re.search(PATTERN_VID, url) id = m.group('id') ydl = ytdl.YoutubeDL(cw=self.cw) info = ydl.extract_info(url) ext = '.mp4' self.title = info['title'] self.filename = format_filename(self.title, id, ext) self._url = info['url'] return self._url def read_channel(url, session, cw=None, title=None): info = {} info['items'] = [] if 'tiktok.com' in url.lower(): # TikTok soup = downloader.read_soup(url, session=session, user_agent='facebookexternalhit/1.1') info['uid'] = re.find(r'/@([\w\.-]+)', soup.find('meta', {'property': 'og:url'})['content'], err='no uid') nick = soup.find('meta', {'property': 'og:title'})['content'] if nick.endswith(' on TikTok'): nick = nick[:-len(' on TikTok')] info['nickname'] = nick else: # Douyin def f(html, browser=None): soup = Soup(html) if is_captcha(soup): browser.show() return False try: info['uid'] = re.find(r'''uniqueId%22%3A%22(.+?)%22''', html, err='no uid') info['nickname'] = json.loads(re.findall(r'''"name"\s*:\s*(".+?")''', html)[-1]) #5896 return True except: return False clf2.solve(url, session, cw, f=f) options = { 'extract_flat': True, 'playlistend': get_max_range(cw), } ydl = ytdl.YoutubeDL(options, cw=cw) info_ = ydl.extract_info(url) for e in info_['entries']: info['items'].append({'url': e.get('webpage_url') or e['url']}) if not info['items']: raise Exception('no items') return info ================================================ FILE: src/extractor/tokyomotion_downloader.py ================================================ #coding:utf8 import downloader from utils import Soup, Downloader, LazyUrl, clean_title, format_filename from io import BytesIO import ree as re import os class Downloader_tokyomotion(Downloader): type = 'tokyomotion' URLS = ['tokyomotion.net'] single = True _type = None display_name = 'TOKYO Motion' ACCEPT_COOKIES = [r'(.*\.)?tokyomotion\.net'] def init(self): html = downloader.read_html(self.url) self.soup = Soup(html) if '/album/' in self.url: self._type = 'album' else: self._type = 'video' @property def name(self): title = get_title(self.soup) return clean_title(title) def read(self): if self._type == 'video': video = get_video(self.url, self.soup) self.urls.append(video.url) self.setIcon(video.thumb) elif self._type == 'album': imgs = get_imgs(self.url) for img in imgs: self.urls.append(img.url) self.single = False else: raise NotImplementedError('Unknown type: {}'.format(self._type)) self.title = self.name class Video: def __init__(self, url, url_thumb, referer, filename): self.url = LazyUrl(referer, lambda x: url, self) self.url_thumb = url_thumb self.thumb = BytesIO() downloader.download(url_thumb, referer=referer, buffer=self.thumb) self.filename = filename def get_title(soup): video = soup.find('video', id='vjsplayer') if video: title = soup.find('h3').text.strip() else: title = soup.find('title').text.split(' Album - ')[0].strip() return title def get_video(url, soup=None): if soup is None: html = downloader.read_html(url) soup = Soup(html) video = soup.find('video', id='vjsplayer').find('source').attrs['src'] url_thumb = soup.find('video', id='vjsplayer').attrs['poster'] title = get_title(soup) filename = format_filename(title, '', '.mp4') video = Video(video, url_thumb, url, filename) return video class Image: def __init__(self, url, referer): self.url = LazyUrl(referer, lambda x: url, self) self.filename = os.path.basename(url.split('?')[0]) def get_imgs(url): id = re.find('album/.*?([0-9]+)', url) print('id:', id) url = 'https://www.tokyomotion.net/album/slideshow/{}'.format(id) html = downloader.read_html(url) soup = Soup(html) imgs = [] for a in soup.findAll('a', {'data-lightbox': 'slideshow-{}'.format(id)}): img = a.find('img').attrs['src'] img = img.replace('/tmb/', '/') img = Image(img, url) imgs.append(img) return imgs ================================================ FILE: src/extractor/torrent_downloader.py ================================================ from utils import Downloader, clean_title, lock, json import constants, os, downloader from size import Size from timee import sleep from translator import tr_ import utils import filesize as fs from datetime import datetime import errors import ips import order from cacher import Cache torrent = None TIMEOUT = 1800 CACHE_INFO = True def isInfoHash(s): if len(s) != 40: return False try: bytes.fromhex(s) return True except: return False class Downloader_torrent(Downloader): type = 'torrent' URLS = [r'regex:^magnet:', r'regex:\.torrent$', isInfoHash] single = True update_filesize = False _info = None _name = None _filesize_prev = 0 _upload_prev = 0 _state = None _h = None _dn = None MAX_PARALLEL = 16 MAX_CORE = 0 skip_convert_imgs = True _filesize_init = False _max_speed = None _anon = False _proxy = '', '', 0, '', '' _seeding = False _virgin = True STOP_READING = False PRIORITY = -1 @classmethod def fix_url(cls, url): if isInfoHash(url): url = f'magnet:?xt=urn:btih:{url}' return url @classmethod def set_max_speed(cls, speed): cls._max_speed = speed cls.updateSettings() @classmethod def set_anon(cls, flag): cls._anon = flag cls.updateSettings() @classmethod def set_proxy(cls, protocol, host, port, username, password): cls._proxy = protocol, host, port, username, password cls.updateSettings() @classmethod @lock def updateSettings(cls): if torrent is None: print('torrent is None') return torrent.set_max_speed(cls._max_speed) torrent.set_anon(cls._anon) torrent.set_proxy(*cls._proxy) @classmethod def _import_torrent(cls): global torrent if torrent is None: import torrent @lock def __init(self): self._import_torrent() Downloader_torrent.updateSettings() @classmethod def key_id(cls, url): if torrent is None: #print('torrent is None') return url id_, e = torrent.key_id(url) if e: print(e) return id_ @property def name(self): if self._name is None: self._name = clean_title(self._info.name()) return self._name @classmethod def get_dn(cls, url): if not url: return if url.startswith('magnet:'): qs = utils.query_url(url) if 'dn' in qs: return utils.html_unescape(qs['dn'][0]) def read(self): cw = self.cw self.cw.pbar.hide() self.__init() if cw: cw._torrent_s = None self._dn = self.get_dn(cw.gal_num) info = getattr(cw, 'info?', None) if info is not None: self.print_('cached info') self._info = info if self._info is None: if not (self.url.startswith('http') or self.url.startswith('magnet:')) and not os.path.exists(self.url): sr = cw.serial_retry if sr is not None: self.url = json.loads(sr)['url'] or self.url try: self._info = torrent.get_info(self.url, cw, timeout=TIMEOUT, callback=self.callback) if CACHE_INFO: setattr(cw, 'info?', self._info) except: self.update_pause() if not cw.paused: raise errors.Invalid(f'Faild to read metadata: {self.url}', fail=True) if self._info is None: cw.paused = True if cw.paused: return hash_ = self._info.hash.hex() self.print_(f'v2: {self._info.v2}') self.print_(f'Hash: {hash_}') if not self._info.v2: self.url = f'magnet:?xt=urn:btih:{hash_}'# date = datetime.fromtimestamp(self._info.creation_date()) date = date.strftime('%y-%m-%d %H:%M:%S') self.print_(f'Created on: {date}') self.print_(f'Total size: {fs.size(self._info.total_size())}') self.print_(f'Pieces: {self._info.num_pieces()} x {fs.size(self._info.piece_length())}') self.print_(f'Creator: {self._info.creator()}') self.print_(f'Comment: {self._info.comment()}') cw.setTotalFileSize(self._info.total_size()) cw.imgs.clear() cw.dones.clear() self.urls = [self.url] self.title = self.name self.update_files() if not self.single and not os.path.isdir(self.dir): #4698 downloader.makedir_event(self.dir, cw) cw.pbar.show() def update_files(self): cw = self.cw files = torrent.get_files(self._info, cw=cw) if not files: raise Exception('No files') cw.single = self.single = len(files) <= 1 index = [0]*len(files) filesize = [] for i, file in enumerate(files): filename = os.path.join(self.dir, file.path) cw.imgs.append(filename) index[file.index] = i filesize.append(file.size) self._torrent_index = index self._torrent_filesize = filesize def update_pause(self): cw = self.cw if cw.pause_lock: if self._seeding: cw.pause_lock = False return cw.pause_data = { 'type': self.type, 'url': self.url, } cw.paused = True cw.pause_lock = False self.update_tools_buttons() def start_(self): cw = self.cw cw.pbar.setFormat('%p%') cw.setColor('reading') cw.downloader_pausable = True self._seeding = False pr = cw.get_extra('pr') if cw.paused: #data = cw.pause_data cw.paused = False cw.pause_lock = False self.update_tools_buttons() try: self.read() if self.status == 'stop': self.stop() return True if cw.paused: pass else: cw.dir = self.dir cw.urls[:] = self.urls cw.clearPieces() self.size = Size() self.size_upload = Size() cw.pbar.setMaximum(self._info.total_size()) cw.setColor('reading') if pr is None and utils.ui_setting.torrentSelectFiles.isChecked(): from utils import QApplication, QStyle, QIcon cache_icon = Cache(1024) files = torrent.get_files(self._info) icon_size = QApplication.style().pixelMetric(QStyle.PM_ListViewIconSize) def _getIcon(name): ext = os.path.splitext(name)[1] key_icon = icon_size, ext.lower() icon = cache_icon.get(key_icon) if icon is None: pixmap = utils.image_reader.getFilePixmap(name, size=icon_size, pad=0) icon = QIcon() icon.addPixmap(pixmap) cache_icon.set(key_icon, icon) return icon done = False res = None def f(): nonlocal done, res try: while True: res = order.getOrder([[True, file.path] for file in files], utils.ui.listWidget, self.title, tr_('파일을 고르세요:'), True, size=(600, 600), icon=_getIcon, move=False) if res is None or any(item[0] for item in res): break utils.messageBox('No files selected', self.title, icon=utils.QMessageBox.Warning, parent=utils.ui.listWidget) finally: done = True utils.exec_queue.run(f) while True: sleep(1, cw) if done: break if res: pr = [None] * len(files) for file, item in zip(files, res): pr[file.index] = int(item[0]) cw.set_extra('pr', pr) else: raise errors.Invalid(f'Canceled: {self.url}') torrent.download(self._info, save_path=self.dir, callback=self.callback, cw=cw, pr=pr) self.update_progress(self._h) cw.setSpeed(0.0) cw.setUploadSpeed(0.0) if not cw.alive: return self.update_pause() if cw.paused: return True self.title = self.name if not self.single: cw.pbar.setMaximum(len(cw.imgs)) finally: cw.clearPieces() try: # for Item.showFiles cw.set_extra('torrent_progress', torrent.get_file_progress(self._h, self._info, False)) except Exception as e: cw.remove_extra('torrent_progress') self.print_error(e) self._h = None def _updateIcon(self): cw = self.cw n = 4 for try_ in range(n): if cw.setIcon(cw.imgs[0], icon=try_==n-1): break sleep(.5) def update_progress(self, h): if self._info is None: return cw = self.cw if not cw.imgs: #??? self.print_('???') self.update_files() cw.setPieces(torrent.pieces(h, self._info)) def callback(self, h, s, alerts): try: return self._callback(h, s, alerts) except Exception as e: self.print_error(e) return 'abort' def _callback(self, h, s, alerts): self._h = h cw = self.cw if self._virgin: self._virgin = False try: ips.get('0.0.0.0') except Exception as e: self.print_error(e) if self._state != s.state_str: self._state = s.state_str self.print_(f'state: {s.state_str}') title = (self._dn or self.url) if self._info is None else self.name try: if cw.alive and cw.valid and not cw.pause_lock: seeding = False cw._torrent_s = s self.update_progress(h) filesize = s.total_done upload = s.total_upload color = 'downloading' if s.state_str in ('downloading', 'seeding'): # init filesize if not self._filesize_init: self._filesize_prev = filesize self._filesize_init = True self.print_(f'init filesize: {fs.size(filesize)}') # download d_size = filesize - self._filesize_prev self._filesize_prev = filesize self.size += d_size downloader.total_download_size_torrent += d_size # upload d_size = upload - self._upload_prev self._upload_prev = upload self.size_upload += d_size downloader.total_upload_size_torrent += d_size if self._info is not None: cw.pbar.setValue(s.progress * self._info.total_size()) if s.state_str == 'queued': color = 'reading' title_ = f'{tr_("대기 중...")} {title}' elif s.state_str == 'checking files': color = 'reading' title_ = f'{tr_("파일 체크 중...")} {title}' self._filesize_prev = filesize elif s.state_str == 'downloading': title_ = f'{title}' cw.setFileSize(filesize) cw.setSpeed(self.size.speed) cw.setUploadSpeed(self.size_upload.speed) elif s.state_str == 'seeding': cw.setFileSize(filesize) if not cw.seeding: return 'abort' seeding = True title_ = f'{tr_("시딩...")} {title}' cw.setSpeed(self.size_upload.speed) elif s.state_str == 'reading': color = 'reading' title_ = f'{tr_("읽는 중...")} {title}' elif s.state_str == 'finished': return 'abort' else: title_ = f'{s.state_str.capitalize()}... {title}' cw.setTitle(title_, update_filter=False) cw.setColor(color) self._seeding = seeding else: self.print_('abort') if cw: cw._torrent_s = None return 'abort' finally: if alerts: if not cw.imgs: #??? self.print_('??? 2') self.update_files() names = cw.names for alert in alerts: what = alert['what'] if what == 'file_completed': index = alert['index'] index = self._torrent_index[index] try: file = os.path.abspath(names[index]) except IndexError: continue #??? cw.dones.add(file) file = constants.compact(file).replace('\\', '/') files = file.split('/') file = ' / '.join(files[1:]) filesize = self._torrent_filesize[index] msg = f'Completed: {file} | {fs.size(filesize)}' self.print_(msg) if index == 0: self._updateIcon() else: raise NotImplementedError(what) @utils.actions('torrent') def actions(cw): if cw.type != 'torrent': return items = [item for item in cw.listWidget().selectedItems() if item.type == 'torrent'] seeding = int(all(item._seeding for item in items)) * 2 if not seeding: seeding = int(all(item._seeding is False for item in items)) if not seeding: seeding = 0 if all(item._seeding is None for item in items) else None if seeding is None: mix_seeding = any(item._seeding for item in items) mix_no_seeding = any(item._seeding is False for item in items) mix_pref = any(item._seeding is None for item in items) else: mix_seeding = mix_no_seeding = mix_pref = False return [ {'icon': 'list', 'text': '파일 목록', 'clicked': cw.showFiles}, {'icon': 'peer', 'text': 'Peers', 'clicked': cw.showPeers}, {'icon': 'tracker', 'text': '트래커 수정', 'clicked': cw.editTrackers}, {'text':'-'}, {'text': '시딩', 'clicked': lambda:cw.setSeedings(True), 'checkable': True, 'checked': seeding==2, 'group': 'seeding', 'mixed': mix_seeding}, {'text': '시딩 하지 않음', 'clicked': lambda:cw.setSeedings(False), 'checkable': True, 'checked': seeding==1, 'group': 'seeding', 'mixed': mix_no_seeding}, {'text': '설정을 따름', 'clicked': lambda:cw.setSeedings(None), 'checkable': True, 'checked': seeding==0, 'group': 'seeding', 'mixed': mix_pref}, ] ================================================ FILE: src/extractor/tumblr_downloader.py ================================================ #coding:utf8 import downloader from translator import tr_ from utils import Session, query_url, get_max_range, Downloader, clean_title, update_url_query, get_print, get_ext, LazyUrl, urljoin, check_alive, limits import ree as re import errors from error_printer import print_error class Image: def __init__(self, url, id, referer, p, cw=None): self._url = url self.id_ = id self.p = p self.cw = cw self.url = LazyUrl(referer, self.get, self) @limits(.25) def get(self, _): print_ = get_print(self.cw) url = self._url ext = get_ext(url) if ext.lower()[1:] not in ['jpg', 'png', 'mp4']: #4645 print_('get_ext: {}, {}'.format(self.id_, url)) try: ext = downloader.get_ext(url, referer=_) except Exception as e: #3235 print_('Err: {}, {}\n'.format(self.id_, url)+print_error(e)) self.filename = '{}_p{}{}'.format(self.id_, self.p, ext) return url class Downloader_tumblr(Downloader): type = 'tumblr' URLS = ['tumblr.com'] MAX_CORE = 4 ACCEPT_COOKIES = [r'(.*\.)?tumblr\.com'] def init(self): if 'tumblr.com/post/' in self.url: raise errors.Invalid(tr_('개별 다운로드는 지원하지 않습니다: {}').format(self.url)) self.session = Session() @classmethod def fix_url(cls, url): qs = query_url(url) path = qs.get('redirect_to') if path: url = urljoin('https://tumblr.com', path[0]) id = get_id(url) return 'https://{}.tumblr.com'.format(id) def read(self): username = get_id(self.url) name = get_name(username, self.session) for img in get_imgs(username, self.session, cw=self.cw): self.urls.append(img.url) self.title = clean_title('{} (tumblr_{})'.format(name, username)) class TumblrAPI: _url_base = 'https://www.tumblr.com/api' _hdr = { 'referer': 'https://www.tumblr.com', 'authorization': 'Bearer aIcXSOoTtqrzR8L8YEIOmBeW94c3FmbSNSWAUbxsny9KKx5VFh', } _qs = { 'fields[blogs]': 'name,avatar,title,url,is_adult,?is_member,description_npf,uuid,can_be_followed,?followed,?advertiser_name,is_paywall_on,theme,subscription_plan,?primary,share_likes,share_following,can_subscribe,subscribed,ask,?can_submit,?is_blocked_from_primary,?tweet,?admin,can_message,?analytics_url,?top_tags,paywall_access', 'npf': 'true', 'reblog_info': 'false', 'include_pinned_posts': 'false', #'page_number': None, } def __init__(self, session, cw=None): self.session = session self.cw = cw def print_(self, s): get_print(self.cw)(s) @limits(1) def call(self, path, qs, default_qs=True): if default_qs: qs_new = qs qs = self._qs.copy() qs.update(qs_new) url = self._url_base + path url = update_url_query(url, qs) r = self.session.get(url, headers=self._hdr) data = r.json() errs = data.get('errors', []) if errs: code = int(errs[0]['code']) if code == 0: raise Exception('Not found') elif code == 4012: raise errors.LoginRequired(errs[0]['detail']) r.raise_for_status() return data['response'] def name(self, username): path = '/v2/blog/{}/posts'.format(username) data = self.call(path, {}) return data['blog']['title'] or data['blog']['name'] def posts(self, username): path = '/v2/blog/{}/posts'.format(username) qs = {} ids = set() default_qs = True while True: check_alive(self.cw) data = self.call(path, qs, default_qs=default_qs) for post in (post for post in data['posts'] if post['object_type'] != 'backfill_ad'): id_ = post['id'] if id_ in ids: self.print_('duplicate: {}'.format(id_)) continue ids.add(id_) url = 'https://{}.tumblr.com/post/{}'.format(username, id_) yield Post(post, url, self.cw) try: links = data.get('links') or data['_links'] path_next = links['next']['href'] except: path_next = None if path_next: path = path_next default_qs = False else: break class Post: def __init__(self, data, url, cw=None): id_ = data['id'] self.imgs = [] cs = data['content'] for trail in data['trail']: cs += trail['content'] for c in cs: if c['type'] in ['image', 'video']: media = c.get('media') if not media: #2859 continue if isinstance(media, list): media = media[0] img = media['url'] self.imgs.append(Image(img, id_, url, len(self.imgs), cw)) elif c['type'] in ['text', 'link', 'audio']: continue else: raise NotImplementedError(id_, c) def get_name(username, session): return TumblrAPI(session).name(username) def get_imgs(username, session, cw=None): artist = get_name(username, session) imgs = [] max_pid = get_max_range(cw) api = TumblrAPI(session, cw) for post in api.posts(username): check_alive(cw) imgs += post.imgs s = '{} {} (tumblr_{}) - {}'.format(tr_('읽는 중...'), artist, username, len(imgs)) if cw: cw.setTitle(s) else: print(s) if len(imgs) > max_pid: break return imgs[:max_pid] def get_id(url): if '/dashboard/blog/' in url: url = re.find('/dashboard/blog/([0-9a-zA-Z_-]+)', url) if '/login_required/' in url: url = url.split('/login_required/')[1].split('?')[0].split('/')[0] if 'tumblr.com/blog/view/' in url: url = url.split('tumblr.com/blog/view/')[1] if 'tumblr.com' in url: qs = query_url(url) url_ = qs.get('url') if url_: return get_id(url_) id = url.split('tumblr.com')[0].split('/')[-1].strip('.') if id == 'www': url = re.find(r'tumblr\.com/([^/#?]+)', url, err='no id') #6333 else: url = id return url ================================================ FILE: src/extractor/twitch_downloader.py ================================================ #coding: utf8 import downloader import ytdl from utils import Downloader, LazyUrl, try_n, format_filename, get_ext, Session, get_print, get_resolution, get_max_range, print_error, json from io import BytesIO from m3u8_tools import M3u8_stream import ree as re import errors import utils import os class Downloader_twitch(Downloader): type = 'twitch' URLS = ['twitch.tv'] single = True ACCEPT_COOKIES = [r'.*(twitch|ttvnw|jtvnw).*'] def init(self): url = self.url if 'twitch.tv' in url: if not url.startswith('http://') and not url.startswith('https://'): url = 'https://' + url self.url = url else: url = f'https://www.twitch.tv/videos/{url}' self.url = url self.session = Session() @classmethod def fix_url(cls, url): url = url.replace('m.twitch.tv', 'www.twitch.tv') if re.search(r'/(videos|clips)\?filter=', url): return url.strip('/') url = url.split('?')[0].strip('/') filter = cls.get_filter(url) if filter == 'live': url = '/'.join(url.split('/')[:4]) return url @classmethod def get_filter(cls, url): if url.count('/') == 3: if 'www.twitch.tv' in url or '//twitch.tv' in url: filter = 'live' else: filter = None elif url.count('/') == 4: filter = re.find(r'filter=([0-9a-zA-Z_]+)', url) or re.find(r'[0-9a-zA-Z_]+', url.split('/')[-1]) if filter is not None and filter.isdigit(): filter = None else: filter = None if filter in ['about', 'schedule']: filter = 'live' return filter def read(self): if '/directory/' in self.url.lower(): raise errors.Invalid(f'[twitch] Directory is unsupported: {self.url}') filter = self.get_filter(self.url) if filter is None: video = Video(self.url, self.session, self.cw) video.url() self.urls.append(video.url) self.title = video.title elif filter == 'live': video = Video(self.url, self.session, self.cw, live=True) video.url() self.urls.append(video.url) self.title = os.path.splitext(video.filename)[0].replace(':', ':') elif filter == 'clips': info = get_videos(self.url, cw=self.cw) video = self.process_playlist('[Clip] {}'.format(info['name']), info['videos']) else: raise NotImplementedError(filter) self.artist = video.artist thumb = BytesIO() downloader.download(video.url_thumb, buffer=thumb) #5418 self.setIcon(thumb) if filter == 'live': d = {} d['url'] = self.url d['title'] = self.artist d['thumb'] = thumb.getvalue() utils.update_live(d, self.cw) @try_n(2) def get_videos(url, cw=None): print_ = get_print(cw) print_(f'get_videos: {url}') info = {} options = { 'extract_flat': True, 'playlistend': get_max_range(cw), } videos = [] ydl = ytdl.YoutubeDL(options, cw=cw) info = ydl.extract_info(url) for e in info['entries']: video = Video(e['url'], self.session, cw) video.id = int(e['id']) videos.append(video) if 'name' not in info: info['name'] = ydl.extract_info(e['url'])['creator'] if not videos: raise Exception('no videos') info['videos'] = sorted(videos, key=lambda video: video.id, reverse=True) return info def alter(seg, cw): if 'amazon' in seg.raw.title.lower(): get_print(cw)('strip ads') return [] segs = [] if '-muted' in seg.url: seg_ = seg.copy() seg_.url = seg.url.replace('-muted', '') segs.append(seg_) segs.append(seg) return segs def extract_info(url, cw=None): print_ = get_print(cw) ydl = ytdl.YoutubeDL(cw=cw) try: info = ydl.extract_info(url) except Exception as e: ex = type(ytdl.get_extractor(url))(ydl) _download_info = getattr(ex, '_download_info', None) if _download_info is not None: vod_id = ex._match_id(url) info = _download_info(vod_id) print_(info) if 'HTTPError 403' in str(e): raise errors.LoginRequired() raise return info class Video: _url = None def __init__(self, url, session, cw, live=False): self.url = LazyUrl(url, self.get, self) self.session = session self.cw = cw self._live = live @try_n(4) def get(self, url): print_ = get_print(self.cw) session = self.session if self._url: return self._url info = extract_info(url, self.cw) self.artist = info.get('creator') or info.get('uploader') #4953, #5031 def print_video(video): #print_(video)# print_('{}[{}] [{}] [{}] {}'.format('LIVE ', video['format_id'], video.get('height'), video.get('tbr'), video['url'])) videos = [video for video in info['formats'] if video.get('height')] videos = sorted(videos, key=lambda video:(video.get('height', 0), video.get('tbr', 0)), reverse=True) for video in videos: print_video(video) for video in videos: if video.get('height', 0) <= get_resolution(): #3723 video_best = video break else: video_best = videos[-1] print_video(video) video = video_best['url'] ext = get_ext(video) id = info['display_id'] if self._live: self.title = info['description'] if utils.SD['twitch']['strip_ads']: video = M3u8_stream(video, n_thread=4, alter=alter, session=session) else: video = utils.LiveStream(video, headers=video_best.get('http_headers', {})) ext = '.mp4' else: self.title = info['title'] if ext.lower() == '.m3u8': video = M3u8_stream(video, n_thread=4, alter=alter, session=session) ext = '.mp4' self.filename = format_filename(self.title, id, ext, artist=self.artist, live=self._live) self.url_thumb = info['thumbnail'] self._url = video return self._url def get_streamer_name(url): session = Session() session.purge('twitch') graphql_url = 'https://gql.twitch.tv/gql' headers = { 'Client-ID': 'kimne78kx3ncx6brgo4mv6wki5h1ko', 'Content-Type': 'application/json', } session.headers.update(headers) id = url.split('/')[3] payload = {'operationName': 'PlaybackAccessToken_Template', 'query': 'query PlaybackAccessToken_Template($login: String!, $isLive: Boolean!, $vodID: ID!, $isVod: Boolean!, $playerType: String!) { streamPlaybackAccessToken(channelName: $login, params: {platform: "web", playerBackend: "mediaplayer", playerType: $playerType}) @include(if: $isLive) { value signature authorization { isForbidden forbiddenReasonCode } __typename } videoPlaybackAccessToken(id: $vodID, params: {platform: "web", playerBackend: "mediaplayer", playerType: $playerType}) @include(if: $isVod) { value signature __typename }}', 'variables': {'isLive': True, 'login': id, 'isVod': False, 'vodID': '', 'playerType': 'site'}} r = session.post(graphql_url, json=payload) r.raise_for_status() data = r.json() value = json.loads(data['data']['streamPlaybackAccessToken']['value']) cid = value['channel_id'] utils.log(data) payload = [{"operationName":"EmotePicker_EmotePicker_UserSubscriptionProducts","variables":{"channelOwnerID":f"{cid}"},"extensions":{"persistedQuery":{"version":1,"sha256Hash":"71b5f829a4576d53b714c01d3176f192cbd0b14973eb1c3d0ee23d5d1b78fd7e"}}}] r = session.post(graphql_url, json=payload) r.raise_for_status() data = r.json() return data[0]['data']['user']['displayName'] class Live_twitch(utils.Live): type = 'twitch' @classmethod def is_live(cls, url): return Downloader.get('twitch').get_filter(url) == 'live' @classmethod def check_live(cls, url, info=None): if info is not None: try: info['title'] = get_streamer_name(url) except Exception as e: utils.log(print_error(e)) ydl = ytdl.YoutubeDL(type='twitch') try: ydl.extract_info(url) return True except Exception as e: print(e) return False ================================================ FILE: src/extractor/v2ph_downloader.py ================================================ #coding:utf8 import downloader from utils import get_ext, LazyUrl, Downloader, try_n, clean_title, get_print, print_error, limits import ree as re from translator import tr_ import errors import clf2 def setPage(url, p): url = url.split('?')[0] if p > 1: url += '?page={}'.format(p) return url def getPage(url): p = re.find('page=([0-9]+)', url) return int(p or 1) class Image: def __init__(self, url, referer, p): self._url = url self.url = LazyUrl(referer, self.get, self) ext = get_ext(url) self.filename = '{:04}{}'.format(p, ext) @limits(.25) def get(self, _): return self._url class Downloader_v2ph(Downloader): type = 'v2ph' URLS = ['v2ph.com/album/'] MAX_CORE = 4 MAX_PARALLEL = 1 display_name = 'V2PH' ACCEPT_COOKIES = [r'(.*\.)?v2ph\.com'] def init(self): self.session = clf2.solve(self.url)['session'] @classmethod def fix_url(cls, url): return url.split('?')[0] def read(self): info = get_info(self.url, self.session) for img in get_imgs(self.url, self.session, info['title'], self.cw): self.urls.append(img.url) self.title = clean_title(info['title']) @try_n(2) def get_info(url, session): soup = read_soup(url, session) info = {} info['title'] = soup.find('h1').text.strip() return info @try_n(4) @limits(5) def read_soup(url, session): return downloader.read_soup(url, session=session) def get_imgs(url, session, title, cw=None): print_ = get_print(cw) imgs = [] for p in range(1, 1001): url = setPage(url, p) print_(url) try: soup = read_soup(url, session) except Exception as e: if p > 1: print_(print_error(e)) cw.showCookie() #6774 cw.showLogin('https://www.v2ph.com/login', None, None) break else: raise e view = soup.find('div', class_='photos-list') if view is None: if p == 1: raise errors.LoginRequired() else: break # Guest user for img in view.findAll('img'): img = img.attrs['data-src'] img = Image(img, url, len(imgs)) imgs.append(img) pgn = soup.find('ul', class_='pagination') ps = [getPage(a.attrs['href']) for a in pgn.findAll('a')] if pgn else [] if not ps or p >= max(ps): print('max p') break msg = '{} {} ({} / {})'.format(tr_('읽는 중...'), title, p, max(ps)) if cw: cw.setTitle(msg) else: print(msg) return imgs ================================================ FILE: src/extractor/vimeo_downloader.py ================================================ import downloader from io import BytesIO as IO from utils import Downloader, LazyUrl, get_ext, format_filename, try_n, get_print import ytdl class Downloader_vimeo(Downloader): type = 'vimeo' URLS = ['vimeo.com'] single = True ACCEPT_COOKIES = [r'(.*\.)?vimeo\.com'] def init(self): if 'vimeo.com' not in self.url.lower(): self.url = 'https://vimeo.com/{}'.format(self.url) def read(self): video = Video(self.url, cw=self.cw) video.url()# self.urls.append(video.url) self.setIcon(video.thumb) self.enableSegment() self.title = video.title self.artist = video.artist def format_(f): if f is None: return 'None' return 'format:{} - resolution:{} - vbr:{} - abr:{} - url:{}'.format(f['format'], f['resolution'], f['vbr'], f['abr'], f['url']) class Video: _url = None def __init__(self, url, cw=None): self.url = LazyUrl(url, self.get, self) self.cw = cw @try_n(4) def get(self, url): if self._url: return self._url print_ = get_print(self.cw) ydl = ytdl.YoutubeDL(cw=self.cw) info = ydl.extract_info(url) for f in info['formats']: print_(format_(f)) fs = [f for f in info['formats'] if f['protocol'] in ['http', 'https']] fs = sorted(fs, key=lambda f: int(f.get('width') or 0), reverse=True) if not fs: raise Exception('No MP4 videos') f = fs[0] self.thumb_url = info['thumbnails'][0]['url'] self.thumb = IO() downloader.download(self.thumb_url, buffer=self.thumb) self.title = info['title'] url_video = f['url'] ext = get_ext(url) or '.mp4' self.artist = info['uploader'] self.filename = format_filename(self.title, info['id'], ext, artist=self.artist) #7127 self._url = url_video return self._url ================================================ FILE: src/extractor/wayback_machine_downloader.py ================================================ # coding: utf8 # title: Wayback Machine Downloader # author: bog_4t import downloader import concurrent.futures import os import ree as re from hashlib import md5 from ratelimit import limits, sleep_and_retry from utils import Downloader, Session, clean_title, get_print, print_error class Downloader_wayback_machine(Downloader): type = 'waybackmachine' URLS = ['archive.org', 'web.archive.org'] display_name = 'Wayback Machine' MAX_CORE = 1 def read(self): filter_ = Filter(self.url, self.cw) self.url = f'https://web.archive.org/cdx/search/cdx?url={filter_.url}' self.title = filter_.title self.urls.extend(get_imgs(self.url, filter_, self.dir, self.session, self.cw)) self.title = filter_.title class WaybackMachineAPI: def __init__(self, session, cw=None): self.session = session self.cw = cw self.params = { 'output': 'json', 'fl': 'timestamp,original', 'filter': 'mimetype:text/html&filter=statuscode:200', 'collapse': 'urlkey' } @sleep_and_retry @limits(1, 5) def call(self, url): for (key, value) in self.params.items(): url += f'&{key}={value}' return downloader.read_json(url, session=self.session) def snapshots(self, url): data = self.call(url) return data[1:] class Filter: domains = [ 'twitter.com' ] def __init__(self, url, cw=None): self.cw = cw self.url = re.findall(r'archive.[^/]+/(?:cdx/search/cdx\?url=|(?:web/)?(?:[^/]+/))(.+)', url.lower())[0].strip('/') self.base_url = self.url.split('&')[0].strip('/') self.md5 = md5(self.url.encode('utf8')).hexdigest()[:8] self.mode = self.__get_mode() self.title = self.__get_title() def __get_mode(self): for mode in (mode for mode, domain in enumerate(self.domains, start=1) if domain in self.url): return mode return 0 def __get_title(self): def default(): tail = f" ({md5(self.base_url.encode('utf8')).hexdigest()[:8]})" return clean_title(os.path.basename(self.base_url), n=-len(tail)) + tail def twitter(): return '@' + re.findall('twitter.[^/]+/([^/*?]+)', self.url)[0] return [ default, twitter ][self.mode]() class Bitmap: bitmask = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80] def __init__(self, size=0, cw=None): self.cw = cw self.bitmap = bytearray([False] * ((size + 7) // 8)) def set(self, index): self.bitmap[index // 8] |= self.bitmask[index % 8] def unset(self, index): self.bitmap[index // 8] &= ~self.bitmask[index % 8] def get(self, index): return (self.bitmap[index // 8] & (self.bitmask[index % 8])) != 0 def save(self, path): with open(path, 'wb') as file: file.seek(0) file.write(self.bitmap) def load(self, size, path): with open(path, 'rb') as file: self.bitmap = bytearray(file.read((size + 7) // 8)) return self def update(self, id_, path): self.set(id_) self.save(path) def get_imgs(url, filter_, directory, session=Session(), cw=None): print_ = get_print(cw) if not os.path.exists(directory): os.makedirs(directory) urls_path = os.path.join(directory, '{}.urls'.format(filter_.md5)) bitmap_path = os.path.join(directory, '{}.bitmap'.format(filter_.md5)) count_path = os.path.join(directory, '{}.count'.format(filter_.md5)) for path in [urls_path, bitmap_path, count_path]: if not os.path.exists(path): open(path, 'x').close() with open(count_path) as file: num_complete = (lambda x: int(x) if x else 0)(file.read()) snapshots = WaybackMachineAPI(session, cw).snapshots(url) bitmap = Bitmap(cw=cw).load(len(snapshots), bitmap_path) if num_complete else Bitmap(len(snapshots), cw=cw) base_url = 'https://web.archive.org/web/{}im_/{}' def get_imgs_snapshot(id_, snapshot): @sleep_and_retry @limits(1, 5) def get_soup(): try: return downloader.read_soup(f'https://web.archive.org/web/{snapshot[0]}id_/{snapshot[1]}') except Exception as exception: print_(print_error(exception)[0]) return None def get_imgs_soup(soup): if not soup: return [] def default(): return [base_url.format(snapshot[0], img['src']) for img in soup.find_all('img', src=True)] def twitter(): return [base_url.format(snapshot[0], img['src']) for img in soup.find_all('img', src=True) if 'twimg.com/media/' in img['src']] return [ default, twitter ][filter_.mode]() return id_, get_imgs_soup(get_soup()) with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: futures = [executor.submit(get_imgs_snapshot, id_, snapshot) for id_, snapshot in enumerate(snapshots) if not bitmap.get(id_)] with open(urls_path, 'a') as urls_file: for future in concurrent.futures.as_completed(futures): id_, urls = future.result() urls_file.writelines([f'{url}\n' for url in urls]) bitmap.update(id_, bitmap_path) num_complete += 1 with open(count_path, 'w') as count_file: count_file.write(str(num_complete)) msg = f'{filter_.title} - {num_complete}' cw.setTitle(msg) if cw else print_(msg) with open(urls_path) as file: urls = set() for url in file.readlines(): urls.update(re.findall(r'^\S+$', url)) os.remove(urls_path) os.remove(bitmap_path) os.remove(count_path) return urls ================================================ FILE: src/extractor/webtoon_downloader.py ================================================ import downloader from utils import Soup, Session, LazyUrl, clean_title, get_ext, get_imgs_already, urljoin, try_n, Downloader, check_alive import page_selector from translator import tr_ import ree as re import clf2 class Downloader_webtoon(Downloader): type = 'webtoon' URLS = ['webtoon.com', 'webtoons.com'] MAX_CORE = 8 MAX_SPEED = 4.0 display_name = 'WEBTOON' ACCEPT_COOKIES = [r'(.*\.)?webtoons?\.com'] def init(self): self.session = Session() clf2.solve(self.url, session=self.session) self.url = get_main(self.url, self.session) self.soup = downloader.read_soup(self.url, session=self.session) @classmethod def fix_url(cls, url): return url.replace('webtoon.com', 'webtoons.com') def read(self): title = clean_title(self.soup.find('h1').text.strip()) self.title = tr_('읽는 중... {}').format(title) imgs = get_imgs_all(self.url, self.session, title, cw=self.cw) for img in imgs: if isinstance(img, Image): self.urls.append(img.url) else: self.urls.append(img) self.title = title class Page: def __init__(self, url, title): self.url = url self.title = title class Image: def __init__(self, url, session, page, p): ext = get_ext(url) or downloader.get_ext(url, referer=page.url, session=session) self.filename = '{}/{:04}{}'.format(clean_title(page.title), p, ext) self.url = LazyUrl(page.url, lambda _: url, self) @try_n(2) def get_imgs(page, session): html = downloader.read_html(page.url, session=session) if 'window.__motiontoonViewerState__' in html: raise NotImplementedError('motiontoon') soup = Soup(html) view = soup.find('div', class_='viewer_img') imgs = [] for img in view.findAll('img'): src = img.get('data-url') or img['src'] img = Image(urljoin(page.url, src), session, page, len(imgs)) imgs.append(img) return imgs def get_main(url, session): if 'episode_no=' in url: soup = downloader.read_soup(url, session=session) url = urljoin(url, soup.find('div', class_='subj_info').find('a')['href']) return url def set_page(url, p): if '&page=' not in url: url = url + '&page={}'.format(p) else: url = re.sub('&page=[0-9]+', '&page={}'.format(p), url) if p == 1: url = url.replace('&page=1', '') return url def get_pages(url, session=None): pages = [] urls = set() for p in range(1, 101): url_page = set_page(url, p) print(url_page) for try_ in range(4): try: soup = downloader.read_soup(url_page, session=session) view = soup.find('ul', id='_listUl') if view is None: raise Exception('no view') break except Exception as e: e_ = e print(e) else: raise e_ pages_new = [] for li in view.findAll('li', recursive=False): href = urljoin(url, li.find('a')['href']) title = li.find('span', class_='subj').text.strip() if href in urls: continue urls.add(href) no = int(li['data-episode-no']) title = '{:04} - {}'.format(no, title) page = Page(href, title) pages_new.append(page) if not pages_new: break pages += pages_new return pages[::-1] @page_selector.register('webtoon') @try_n(4) def f(url): url = get_main(url, None) return get_pages(url) def get_imgs_all(url, session, title, cw=None): pages = get_pages(url, session) pages = page_selector.filter(pages, cw) imgs = [] for p, page in enumerate(pages): check_alive(cw) imgs_already = get_imgs_already('webtoon', title, page, cw) if imgs_already: imgs += imgs_already continue imgs += get_imgs(page, session) msg = tr_('읽는 중... {} / {} ({}/{})').format(title, page.title, p + 1, len(pages)) if cw is not None: cw.setTitle(msg) else: print(msg) return imgs ================================================ FILE: src/extractor/weibo_downloader.py ================================================ #coding:utf8 import downloader import ree as re from utils import Downloader, Session, get_print, clean_title, Soup, fix_protocol, domain, get_max_range, get_ext, File, check_alive, limits from translator import tr_ import clf2 import errors import utils import dateutil.parser def suitable(url): if domain(url.lower(), 2) not in ['weibo.com', 'weibo.cn']: return False if '/tv/' in url.lower(): return False return True class LoginRequired(errors.LoginRequired): def __init__(self, *args): super().__init__(*args, method='browser', url='https://weibo.com/login.php', w=1180) class Downloader_weibo(Downloader): type = 'weibo' URLS = [suitable] MAX_PARALLEL = 2 #6739 ACCEPT_COOKIES = [r'(.*\.)?(weibo\.com|sina\.com\.cn|weibo\.cn)'] def init(self): self.session = Session() @classmethod def fix_url(cls, url): url = url.replace('weibo.cn', 'weibo.com').split('?')[0] if 'weibo.com/p/' in url: id = re.find(r'weibo.com/p/([^/]+)', url, err='no id') url = f'https://weibo.com/p/{id}' elif 'weibo.com/u/' in url: id = re.find(r'weibo.com/u/([^/]+)', url, err='no id') url = f'https://weibo.com/u/{id}' elif 'weibo.com/' in url: id = re.find(r'weibo.com/([^/]+)', url, err='no id') url = f'https://weibo.com/{id}' else: id = url url = f'https://weibo.com/u/{id}' return fix_protocol(url) def read(self): checkLogin(self.session) uid, oid, name = get_id(self.url, self.cw) title = clean_title(f'{name} (weibo_{uid})') self.urls += get_imgs(uid, title, self.session, cw=self.cw) self.title = title def checkLogin(session): c = session.cookies._cookies.get('.weibo.com', {}).get('/',{}).get('SUBP') if not c or c.is_expired(): raise LoginRequired() class Album: def __init__(self, id, type): self.id = id self.type = type @limits(1) def wait(): pass class Image(File): type = 'weibo' format = '[date] id_ppage' def _get_page_id(html): return re.find(r"CONFIG\['page_id'\]='([0-9]+)'", html) or re.find(r'/u/page/follow/([0-9]+)', html) def get_id(url, cw=None): for try_ in range(2): try: res = clf2.solve(url, cw=cw, f=_get_page_id) html = res['html'] soup = Soup(html) if soup.find('div', class_='gn_login') or soup.find('a', class_=lambda c: c and c.startswith('LoginBtn')): raise LoginRequired() oid = _get_page_id(html) if not oid: raise Exception('no page_id') uids = re.findall(r'uid=([0-9]+)', html) uid = max(set(uids), key=uids.count) name = re.find(r"CONFIG\['onick'\]='(.+?)'", html) or soup.find('div', class_=lambda c:c and c.startswith('ProfileHeader_name')).text.strip() if not name: raise Exception('no name') break except errors.LoginRequired as e: raise e except Exception as e: e_ = e print(e) else: raise e_ return uid, oid, name def extract_video(d): return d.get('stream_url_hd') or d['stream_url'] def get_imgs(uid, title, session, cw=None): #6739 print_ = get_print(cw) print_(f'uid: {uid}') olds = utils.process_olds(Image, title, r'([0-9]+)_p', cw) mids = olds['ids'] imgs_old = olds['imgs'] referer = f'https://weibo.com/u/{uid}?tabtype=album' imgs = [] sinceid = None while check_alive(cw): if sinceid: url_api = f'https://weibo.com/ajax/profile/getImageWall?uid={uid}&sinceid={sinceid}' else: url_api = f'https://weibo.com/ajax/profile/getImageWall?uid={uid}&sinceid=0&has_album=true' wait() d = downloader.read_json(url_api, referer, session=session) sinceid = d['data']['since_id'] for item in d['data']['list']: mid = int(item['mid']) if mid in mids: #print_(f'dup: {mid}') continue mids.add(mid) url_api = f'https://weibo.com/ajax/statuses/show?id={mid}' wait() d = downloader.read_json(url_api, referer, session=session) if d.get('ok') != 1: print_(f'skip: {mid}') continue date = dateutil.parser.parse(d['created_at']) structs = [d] + (d.get('url_struct') or []) for struct in structs: media_info = struct.get('mix_media_info', {}).get('items') or (struct.get('pic_infos').values() if 'pic_infos' in struct else None) #6739 if media_info: break else: print_(f'no media: {mid}') #6739 continue for p, item in enumerate(media_info): if data := item.get('data'): type = item.get('type') if type == 'video': img = extract_video(data['media_info']) elif type == 'pic': img = data['largest']['url'] else: raise Exception(f'media type: {type}') else: img = item['largest']['url'] ext = get_ext(img) d = { 'date': date, 'id': mid, 'page': p, } filename = utils.format('weibo', d, ext) img = Image({'referer': referer, 'url': img, 'name': filename}) imgs.append(img) cw.setTitle(f'{tr_("읽는 중...")} {title} - {len(imgs)}') if not sinceid: break if len(imgs) >= get_max_range(cw): break return imgs + imgs_old ================================================ FILE: src/extractor/wikiart_downloader.py ================================================ #coding:utf8 import downloader from utils import LazyUrl, Downloader, Session, get_print, clean_title, check_alive, json import os from translator import tr_ class Image: def __init__(self, url, referer, title, id): self.url = LazyUrl(referer, lambda _: url, self) ext = os.path.splitext(url.split('?')[0])[1] n = len(id) + len(ext) + 3 title = clean_title(title, n=-n) self.filename = '{} - {}{}'.format(id, title, ext) class Downloader_wikiart(Downloader): type = 'wikiart' URLS = ['wikiart.org'] display_name = 'WikiArt' ACCEPT_COOKIES = [r'(.*\.)?wikiart\.org'] def init(self): self.session = Session() @classmethod def fix_url(cls, url): url = 'https://www.wikiart.org/en/{}'.format(get_id(url)) return url def read(self): artist = get_artist(get_id(self.url), self.session) self.artist = artist for img in get_imgs(self.url, artist, self.session, cw=self.cw): self.urls.append(img.url) self.title = clean_title(artist) def get_id(url): userid = url.split('?')[0].split('#')[0].split('wikiart.org/')[1].split('/')[1] return userid def get_imgs(url, artist, session, cw=None): print_ = get_print(cw) userid = get_id(url) print(userid) imgs = [] ids = set() for p in range(1, 100): check_alive(cw) url_api = 'https://www.wikiart.org/en/{}/mode/all-paintings?json=2&layout=new&page={}&resultType=masonry'.format(userid, p) print(url_api) data_raw = downloader.read_html(url_api, url, session=session) data = json.loads(data_raw) _imgs = data['Paintings'] n = data['AllPaintingsCount'] if not _imgs: print_('???') break for p in _imgs: img = p['image'] id = p['id'] referer = p['paintingUrl'] title = p['title'] if id in ids: print('duplicate: {}'.format(id)) continue ids.add(id) img = Image(img, referer, title, id) imgs.append(img) s = '{} {} - {} / {}'.format(tr_('읽는 중...'), artist, len(imgs), n) if cw: cw.setTitle(s) else: print(s) if len(imgs) == n: print_('full') break return imgs def get_artist(userid, session): url = 'https://www.wikiart.org/en/{}'.format(userid) soup = downloader.read_soup(url, session=session) return soup.find('h3').text.strip() ================================================ FILE: src/extractor/xhamster_downloader.py ================================================ import downloader, ree as re from utils import Downloader, Session, LazyUrl, get_print, get_ext, try_n, format_filename, clean_title, get_resolution from translator import tr_ from io import BytesIO import ytdl class Downloader_xhamster(Downloader): type = 'xhamster' __name = r'([^/]*\.)?(xhamster|xhwebsite|xhofficial|xhlocal|xhopen|xhtotal|megaxh|xhwide|xhtab|xhtime)([0-9]*)' #3881, #4332, #4826, #5029, #5696, #5893 URLS = [rf'regex:{__name}\.[a-z0-9]+/(shemale/)?(videos|users|creators|photos/gallery)/'] #6755 single = True display_name = 'xHamster' ACCEPT_COOKIES = __name def init(self): if re.search(r'xhamsterlive[0-9]*\.', self.url): raise Exception('xHamsterLive') if not re.search(r'{}\.'.format(self.__name), self.url): self.url = 'https://xhamster.com/videos/{}'.format(self.url) self.session = Session('chrome') @classmethod def fix_url(cls, url): url = re.sub(r'(/users/[^/]+/videos)/[0-9]+', r'\1', url, 1) #5029 return url @classmethod def key_id(cls, url): return re.sub(cls.__name+r'\.[^/]+', 'domain', url, 1).replace('http://', 'https://') def read(self): cw = self.cw self.enableSegment(1024*1024//2) thumb = BytesIO() if '/users/' in self.url or '/creators/' in self.url: #6257 info = read_channel(self.url, self.session, cw) urls = info['urls'] videos = [Video(url) for url in urls] video = self.process_playlist(info['title'], videos) elif '/photos/gallery/' in self.url: info = read_gallery(self.url, self.session, cw) for img in info['imgs']: self.urls.append(img.url) self.single = False self.title = clean_title(info['title']) self.url = info['url'] self.disableSegment() return else: video = Video(self.url) video.url() self.urls.append(video.url) self.title = video.title downloader.download(video.info['thumbnail'], buffer=thumb) self.setIcon(thumb) class Video: _url = None def __init__(self, url): #url = downloader.real_url(url) self.url = LazyUrl(url, self.get, self) @try_n(2) def get(self, url): if self._url is None: self.info = get_info(url) self.title = self.info['title'] id = self.info['id'] #4773 fs = self.info['formats'] res = max(get_resolution(), min(f['height'] for f in fs)) fs = [f for f in fs if f['height'] <= res] video_best = fs[-1] self._url = video_best['url'] ext = get_ext(self._url) self.filename = format_filename(self.title, id, ext) if isinstance(self._url, str) and 'referer=force' in self._url.lower(): self._referer = self._url else: self._referer = url return self._url, self._referer def get_info(url): #6318 info = {} ydl = ytdl.YoutubeDL() d = ydl.extract_info(url) info['title'] = d['title'] info['id'] = d['id'] info['thumbnail'] = d['thumbnail'] fs = [] for f in d['formats']: if f['protocol'] != 'https': continue f = {'url': f['url'], 'height': f['height']} fs.append(f) fs = sorted(fs, key=lambda f: f['height']) info['formats'] = fs return info def read_page(type_, username, p, session, cw): print_ = get_print(cw) if type_ == 'users': url = f'https://xhamster.com/users/{username}/videos/{p}' else: url = f'https://xhamster.com/{type_}/{username}/exclusive/{p}' #6755 print_(url) n = 4 for try_ in range(n): try: soup = downloader.read_soup(url, session=session) items = soup.findAll('div', class_='thumb-list__item') if not items and try_ < n-1: continue break except Exception as e: e_ = e print(e) else: if p == 1: raise e_ else: return [] return items def read_channel(url, session, cw=None): type_, username = re.find(r'/(users|creators)/([^/]+)', url, err='no username') sub = url.split('/')[3] #6755 if sub not in ['users', 'creators']: type_ = f'{sub}/{type_}' info = {} soup = downloader.read_soup(url, session=session) title = (soup.find('div', class_='user-name') or soup.find('h1')).text.strip() info['title'] = '[Channel] {}'.format(title) urls = [] urls_set = set() for p in range(1, 101): items = read_page(type_, username, p, session, cw) if not items: print('no items') break for item in items: if item.find('span', class_='thumb-image-container__status-text'): #2858 continue url = item.a.attrs['href'] if url in urls_set: print('duplicate:', url) continue urls_set.add(url) urls.append(url) s = '{} {} - {}'.format(tr_('읽는 중...'), info['title'], len(urls)) if cw: cw.setTitle(s) else: print(s) info['urls'] = urls return info class Image: def __init__(self, url, id, referer): self.id = id self._url = url self.url = LazyUrl(referer, self.get, self) def get(self, referer): url = self._url ext = get_ext(url) self.filename = '{}{}'.format(self.id, ext) return url def setPage(url, p): url = url.strip('/') c = url.split('/photos/gallery/')[1].count('/') if c: url = '/'.join(url.split('/')[:-1]) if p > 1: url += '/{}'.format(p) return url def read_gallery(url, session, cw=None): print_ = get_print(cw) info = {} soup = downloader.read_soup(url, session=session) h1 = soup.find('h1') if h1.find('a'): url = h1.find('a')['href'] return read_gallery(url, session, cw) info['title'] = h1.text.strip() info['url'] = setPage(url, 1) imgs = [] ids = set() for p in range(1, 101): print_('p: {}'.format(p)) url = setPage(url, p) soup = downloader.read_soup(url, session=session) view = soup.find('div', id='photo-slider') photos = view.findAll('a', id=lambda id: id and id.startswith('photo-')) if not photos: print_('no photos') break for photo in photos: img = photo['href'] id = photo['id'].split('photo-')[1] referer = url if id in ids: print('duplicate:', id) continue ids.add(id) img = Image(img, id, referer) imgs.append(img) info['imgs'] = imgs return info ================================================ FILE: src/extractor/xnxx_downloader.py ================================================ import downloader from utils import Soup, Downloader, LazyUrl, format_filename import ree as re from m3u8_tools import playlist2stream from io import BytesIO as IO class Video: def __init__(self, url, url_page, title, url_thumb): self._url = url self.url = LazyUrl(url_page, self.get, self) self.id = get_id(url_page) self.title = title self.filename = format_filename(title, self.id, '.mp4') f = IO() self.url_thumb = url_thumb downloader.download(url_thumb, buffer=f) self.thumb = f def get(self, _): return self._url def get_id(url): return url.split('xnxx.com/')[1].split('/')[0] class Downloader_xnxx(Downloader): type = 'xnxx' URLS = [r'regex:xnxx[0-9]*\.(com|es)'] single = True display_name = 'XNXX' ACCEPT_COOKIES = [r'(.*\.)?xnxx[0-9]*\.(com|es)'] @classmethod def fix_url(cls, url): return re.sub(r'xnxx[0-9]*\.(com|es)', 'xnxx.com', url) def read(self): video = get_video(self.url) self.urls.append(video.url) self.setIcon(video.thumb) self.title = video.title def get_video(url): html = downloader.read_html(url) soup = Soup(html) for script in soup.findAll('script'): script = script.text or script.string or '' hls = re.find(r'''html5player\.setVideoHLS\(['"](.+?)['"]''', script) if hls: break else: raise Exception('No VideoHLS') video = playlist2stream(hls) title = get_title(soup) url_thumb = soup.find('meta', {'property': 'og:image'}).attrs['content'].strip() video = Video(video, url, title, url_thumb) return video def get_title(soup): return soup.find('meta', {'property': 'og:title'}).attrs['content'].strip() ================================================ FILE: src/extractor/xvideo_downloader.py ================================================ import downloader from utils import Downloader, Soup, LazyUrl, urljoin, format_filename, Session, get_ext, get_print, get_max_range, html_unescape, try_n, limits, json from io import BytesIO import ree as re from m3u8_tools import playlist2stream from translator import tr_ from timee import sleep import os CHANNEL_PATTERN = r'/(profiles|[^/]*channels)/([0-9a-zA-Z_-]+)' def get_id(url): url = url.lower() if '/prof-video-click/' in url: return url.split('/prof-video-click/')[1].split('/')[2] return re.find(r'xvideos[0-9]*\.[^/]+/video\.([0-9a-z]+)', url, err='no id') #7041 class Video: _url = None def __init__(self, url_page): url_page = Downloader_xvideo.fix_url(url_page) self.url = LazyUrl(url_page, self.get, self) def get(self, url_page): if not self._url: self._get(url_page) return self._url @try_n(4) @limits(2) def _get(self, url_page): id = get_id(url_page) html = downloader.read_html(url_page) soup = Soup(html) self.title = html_unescape(soup.find('title').text).replace('- XVIDEOS.COM', '').strip() url = re.find(r'''.setVideoHLS\(['"](.+?)['"]\)''', html) or re.find(r'''.setVideoUrlHigh\(['"](.+?)['"]\)''', html) or re.find(r'''.setVideoUrlLow\(['"](.+?)['"]\)''', html) #https://www.xvideos.com/video65390539/party_night if not url: raise Exception('no video url') ext = get_ext(url) if ext.lower() == '.m3u8': url = playlist2stream(url, n_thread=5) #4773 self.url_thumb = soup.find('meta', {'property': 'og:image'}).attrs['content'] self.filename = format_filename(self.title, id, '.mp4') self._url= url @property def thumb(self): self.url() f = BytesIO() downloader.download(self.url_thumb, buffer=f) return f class Downloader_xvideo(Downloader): type = 'xvideo' URLS = [r'regex:[./]xvideos[0-9]*\.(com|in|es)'] single = True display_name = 'XVideos' ACCEPT_COOKIES = [r'(.*\.)?xvideos[0-9]*\.(com|in|es)'] def init(self): if 'xvideos.' in self.url.lower(): self.url = self.url.replace('http://', 'https://') else: self.url = 'https://www.xvideos.com/{}'.format(self.url) @classmethod def fix_url(cls, url): url = re.sub(r'[^/]*xvideos[0-9]*\.[^/]+', 'www.xvideos.com', url).replace('http://', 'https://') url = url.replace('/THUMBNUM/', '/') return url @classmethod def key_id(cls, url): res = re.find(CHANNEL_PATTERN, url) if res: return '_'.join(res) return url def read(self): res = re.find(CHANNEL_PATTERN, self.url) if res: header, username = res info = read_channel(self.url, self.cw) videos = [Video(url) for url in info['urls']] video = self.process_playlist('[Channel] {}'.format(info['name']), videos) else: video = Video(self.url) video.url() self.title = os.path.splitext(video.filename)[0] self.urls.append(video.url) self.setIcon(video.thumb) def read_channel(url_page, cw=None): print_ = get_print(cw) res = re.find(CHANNEL_PATTERN, url_page) if res is None: raise Exception('Not channel') header, username = res print(header, username) max_pid = get_max_range(cw) info = {} info['header'] = header info['username'] = username session = Session() urls = [] ids = set() for p in range(100): url_api = urljoin(url_page, '/{}/{}/videos/best/{}'.format(header, username, p)) print_(url_api) r = session.post(url_api) data = json.loads(r.text) videos = data.get('videos') #4530 if not videos: print_('empty') break for video in videos: id_ = video['id'] if id_ in ids: print_('duplicate: {}'.format(id_)) continue ids.add(id_) info['name'] = video['pn'] urls.append(urljoin(url_page, video['u'])) if len(urls) >= max_pid: break n = data['nb_videos'] s = '{} {} - {}'.format(tr_('읽는 중...'), info['name'], len(urls)) if cw: cw.setTitle(s) else: print(s) if len(ids) >= n: break sleep(1, cw) if not urls: raise Exception('no videos') info['urls'] = urls[:max_pid] return info ================================================ FILE: src/extractor/yandere_downloader.py ================================================ from utils import Downloader, urljoin, clean_title, try_n, check_alive, LazyUrl, get_ext, get_max_range, limits from translator import tr_ import ree as re import downloader from urllib.parse import unquote @try_n(4) @limits(.25) def read_soup(url): return downloader.read_soup(url) class Downloader_yandere(Downloader): type = 'yande.re' URLS = ['yande.re'] MAX_CORE = 4 ACCEPT_COOKIES = [r'(.*\.)?yande\.re'] @classmethod def fix_url(cls, url): url = re.sub(r'([?&])page=[0-9]+&?', r'\1', url).rstrip('?&') pool = re.find('/pool/show/([0-9]+)', url) if pool is not None: url = urljoin(url, '/post?tags=pool%3A{}'.format(pool)) return url def read(self): title = self.get_title(self.url) url = self.url n = get_max_range(self.cw) ids = set() while True: check_alive(self.cw) soup = read_soup(url) for a in soup.find_all('a', class_='thumb'): id_ = re.find(r'/show/([0-9]+)', a['href'], err='no id') if id_ in ids: self.print_(f'dup: {id_}') continue ids.add(id_) img = Image(urljoin(url, a['href']), id_) self.urls.append(img.url) if len(self.urls) >= n: del self.urls[n:] break self.cw.setTitle('{} {} - {}'.format(tr_('읽는 중...'), title, len(self.urls))) next_page = soup.find('a', attrs={'rel':'next'}, href=True) if not next_page: break else: url = urljoin(self.url, next_page['href']) self.title = title def get_id(self, url:str) -> str: id_ = url.split('yande.re%20')[1].split('%20')[0] return int(id_) def get_title(self, url:str) -> str: if "tags=" not in url: raise NotImplementedError('no tags') url_tags = url.split("tags=")[-1].split('+') return clean_title(unquote(" ".join(url_tags))) class Image: def __init__(self, url, id_): self._id = id_ self.url = LazyUrl(url, self.get, self) def get(self, url): soup = read_soup(url) img = soup.find('a', class_='original-file-unchanged') or soup.find('a', class_='original-file-changed') img = urljoin(url, img['href']) ext = get_ext(img) self.filename = clean_title(self._id, n=-len(ext)) + ext return img ================================================ FILE: src/extractor/youku_downloader.py ================================================ import downloader import ytdl from m3u8_tools import M3u8_stream from utils import LazyUrl, Downloader, format_filename from io import BytesIO class Downloader_youku(Downloader): type = 'youku' single = True URLS = ['v.youku.com'] ACCEPT_COOKIES = [r'(.*\.)?youku\.com'] def read(self): video = Video(self.url, cw=self.cw) video.url()# get thumb self.urls.append(video.url) self.setIcon(video.thumb) self.title = video.title class Video: _url = None def __init__(self, url, cw=None): self.url = LazyUrl(url, self.get, self) self.cw = cw def get(self, url): if self._url: return self._url ydl = ytdl.YoutubeDL(cw=self.cw) info = ydl.extract_info(url) # get best video fs = info['formats'] fs = sorted(fs, key=lambda x: int(x['width']), reverse=True) f = fs[0] url_video = f['url'] # thumb self.thumb_url = info['thumbnails'][0]['url'] self.thumb = BytesIO() downloader.download(self.thumb_url, buffer=self.thumb) # m3u8 print(f['protocol']) if 'm3u8' in f['protocol']: url_video = M3u8_stream(url_video, referer=url) # title & filename self.title = info['title'] self.filename = format_filename(self.title, info['id'], '.mp4') self._url = url_video return self._url ================================================ FILE: src/extractor/youporn_downloader.py ================================================ import downloader from io import BytesIO from utils import Downloader, LazyUrl, get_ext, format_filename, try_n import ytdl from m3u8_tools import M3u8_stream class Downloader_youporn(Downloader): type = 'youporn' single = True URLS = ['youporn.com'] display_name = 'YouPorn' ACCEPT_COOKIES = [r'(.*\.)?youporn\.com'] @classmethod def fix_url(cls, url): if 'youporn.com' not in url.lower(): url = 'https://www.youporn.com/watch/{}'.format(url) return url def read(self): video = Video(self.url, cw=self.cw) self.urls.append(video.url) self.setIcon(video.thumb) self.enableSegment() self.title = video.title class Video: @try_n(4) def __init__(self, url, cw=None): ydl = ytdl.YoutubeDL(cw=cw) info = ydl.extract_info(url) f = info['formats'][-1] url_video = f['url'] ext = get_ext(url_video) if ext.lower() == '.m3u8': #6142 ext = '.mp4' url_video = M3u8_stream(url_video, referer=url) self.url = LazyUrl(url, lambda _: url_video, self) self.url_thumb = info['thumbnails'][0]['url'] self.thumb = BytesIO() downloader.download(self.url_thumb, buffer=self.thumb) self.title = info['title'] self.filename = format_filename(self.title, info['id'], ext) ================================================ FILE: src/extractor/youtube_downloader.py ================================================ #coding: utf-8 import ytdl import downloader import downloader_v3 from error_printer import print_error from timee import sleep import ree as re from utils import urljoin, Downloader, try_n, get_print, filter_range, compatstr, uuid, get_max_range, format_filename, get_resolution, get_abr, Session, fix_dup, File, clean_title, display_url import ffmpeg import constants import os import utils from translator import tr, tr_ from datetime import datetime import threading import putils import errors MODE = 'query' utils.TOKENS['youtube'] = ['title', 'id', 'artist', 'date'] + utils.ADD_TOKENS def print_streams(streams, cw): print_ = get_print(cw) for stream in streams: print_(f'{"LIVE " if stream.live else ""}[{stream.resolution}][{stream.fps}fps][{stream.abr_str}{"(fixed)" if stream.abr_fixed else ""}][{stream.tbr}] {stream.subtype} [{stream.video_codec} / {stream.audio_codec}] ─ {stream.format}') print_('') class Video(File): type = 'youtube' vcodec = None filename0 = None chapters = None _yt = None _thumb = None @property def yt(self): print_ = get_print(self.cw) if self._yt is None: for try_ in range(4): try: self._yt = ytdl.YouTube(self['referer'], cw=self.cw) break except errors.Retry as e: raise e except Exception as e: e_ = e s = print_error(e) print_('### youtube retry...\n{}'.format(s)) sleep(try_, self.cw) else: raise e_ return self._yt def thumb(self): if self._thumb is None: self.thumb_url, self._thumb = ytdl.download_thumb(self.yt.thumbnail_url, self.cw, self.session) self._thumb.seek(0) return self._thumb def get(self): type = self['type'] only_mp4 = self['only_mp4'] audio_included = self['audio_included'] max_res = self['max_res'] max_abr = self['max_abr'] cw = self.cw session = self.session url = self['referer'] print_ = get_print(cw) print('max_res: {}'.format(max_res)) yt = self.yt if utils.ui_setting.chapterMarkerCheck.isChecked(): self.chapters = yt.info.get('chapters') streams = yt.streams.all() print_streams(streams, cw) #3528 time = datetime.strptime(yt.info['upload_date'], '%Y%m%d') if utils.ui_setting.youtubeMtimeCheck.isChecked(): #6092 self.utime = (time-datetime(1970,1,1)).total_seconds() print_('utime: {}'.format(self.utime)) if type == 'video': streams[:] = [stream for stream in streams if stream.video_codec is not None] # Only mp4 if only_mp4: streams_ = list(streams) streams[:] = [] for stream in streams_: if stream.subtype == 'mp4': streams.append(stream) # Audio included; Non-HD if audio_included: streams_ = list(streams) streams[:] = [] for stream in streams_: if stream.audio_codec is not None: streams.append(stream) # Maximum resolution streams_ = list(streams) streams[:] = [] for stream in streams_: if stream.resolution is None: continue res = int(stream.resolution.replace('p','')) if max_res is None or res <= max_res: streams.append(stream) def key(stream): fps = stream.fps vc = stream.video_codec if vc: vc = vc.lower().split('.')[0].lower() if vc == 'av01': vc = 'av1' if vc == 'vp09': vc = 'vp9' try: i = constants.CODECS_PRI.index(vc) except ValueError: i = 999 pr = 'premium' in stream.format.lower() #6350 dash = 'dash' in stream.format.lower() #7508 return dash, not pr, i, -fps, -stream.tbr streams = sorted(streams, key=key) #6079 print_('') elif type == 'audio': streams[:] = [stream for stream in streams if stream.abr] # Maximum abr abrs = [stream.abr for stream in streams] max_abr = min(max(abrs), max_abr) def key(stream): dash = 'dash' in stream.format.lower() #7508 return dash streams_ = sorted(streams, key=key) streams[:] = [] for stream in streams_: if stream.abr is None: continue abr = stream.abr if max_abr is None or abr >= max_abr: streams.append(stream) #''' else: raise Exception('type "{}" is not supported'.format(type)) # Pick the best while streams: if type == 'video': ress = [int_(stream.resolution.replace('p', '')) for stream in streams] m = max(ress) prefer_format = None#'mp4' elif type == 'audio': ress = [stream.abr for stream in streams] m = min(ress) prefer_format = 'webm' print('Resolutions:', ress) stream_final = None for stream, res in zip(streams, ress): if res == m: if type == 'video': foo = (stream_final is not None) and (stream_final.audio_codec is None) and bool(stream.audio_codec) and stream_final.fps <= stream.fps #6911 elif type == 'audio': foo = False if stream_final is None or (foo or (stream_final.subtype.lower()!=prefer_format and stream.subtype.lower()==prefer_format)): #print(foo) print_('# stream_final') print_streams([stream], cw) stream_final = stream ok = downloader.ok_url(stream_final.url, referer=url, session=session) if isinstance(stream_final.url, str) else True if ok: break else: print_('stream is not valid') streams.remove(stream_final) else: if type == 'audio' and max_abr > 0: self['max_abr'] = 0 return self.get(url) # 1776 raise Exception('No videos') stream = stream_final ## if stream.video_codec and stream_final.video_codec.lower().startswith('av'): ## self.vcodec = 'h264' self.id = yt.video_id self.stream = stream self.username = yt.info['uploader'] self.stream_audio = None self.audio = None self.thumb_url = None if type == 'audio' and 'dash' in self.stream.format.lower(): self.stream.setDashType('audio') # Audio if type=='video' and stream.audio_codec is None: print('audio required') def isAudio(stream): if stream.abr: return True #7392 return stream.video_codec is None and not stream.abr streams = [stream for stream in yt.streams.all() if isAudio(stream)] print_streams(streams, cw) # only mp4; https://github.com/KurtBestor/Hitomi-Downloader/issues/480 def isGood(stream): ac = stream.audio_codec or '' return ac.lower().startswith('mp4') streams_good = [stream for stream in streams if isGood(stream)] if streams_good: streams = streams_good print_streams(streams, cw) print_(f'streams_all: {len(yt.streams.all())}, streams: {len(streams)}, streams_good: {len(streams_good)}') # only audio? if any(stream.resolution is None for stream in streams): streams = [stream for stream in streams if stream.resolution is None] print_streams(streams, cw) def key(stream): abr = stream.abr or 0 format_note = stream.video.get('format_note') if format_note and 'original' in format_note.lower(): org = 0 else: org = 1 lang = stream.video.get('language') if lang and constants.ALANG: match_full = lang.lower().startswith(constants.ALANG) match_part = lang.lower().startswith(constants.ALANG.split('-')[0]) if match_full or match_part: lang = -1 if match_full else 0 else: lang = 1 else: lang = 1 dash = 'dash' in stream.format.lower() #7508 return dash, lang, org, -abr streams = sorted(streams, key=key) #6332 best_audio = streams[0] print_streams([best_audio], cw) self.stream_audio = best_audio if 'dash' in self.stream_audio.format.lower(): self.stream_audio.setDashType('audio') if self.stream.live: #7392 video = self.stream.video options = f'-i "{best_audio.video["url"]}" {{default}}' self.stream.url = lambda: utils.LiveStream(video['url'], headers=video.get('http_headers', {}), fragments=video.get('fragments') if ytdl.LIVE_FROM_START.get('youtube') else None, options=options) else: self.audio = best_audio.url if callable(self.audio): self.audio = self.audio() # _url = self.stream.url if callable(_url): _url = _url() title = yt.title #soup = Soup(yt.watch_html) #title = soup.title.text.replace('- YouTube', '').strip() self.title = title ext = '.' + self.stream.subtype #6425 d = {} v = self.stream.video if type != 'audio': d['width'] = v['width'] d['height'] = v['height'] tokens = ['fps', 'vcodec', 'acodec', 'audio_channels', 'language', 'vbr', 'abr', 'tbr', 'channel_id', 'uploader_id'] #6688 for token in tokens: value = v.get(token) if isinstance(value, str): value = clean_title(value) d[token] = value if self.stream_audio: v = self.stream_audio.video for token in tokens: value = v.get(token) if isinstance(value, str): value = clean_title(value) _ = d.get(token) if not _ or _ == 'none': d[token] = value filename = format_filename(title, yt.video_id, ext, artist=yt.info['uploader'], date=None if self.stream.live else time, d=d, live=self.stream.live) #4953, #5529 if cw: filename = fix_dup(filename, cw.downloader.cache_filenames) #6235 print_(f'filename: {filename}') if type == 'audio': self.filename0 = filename filename = f'{uuid()}_audio.tmp' #4776 print_('Resolution: {}'.format(stream.resolution)) print_('Codec: {} / {}'.format(stream.video_codec, stream.audio_codec)) print_('Abr: {}'.format(stream.abr)) print_('Subtype: {}'.format(stream.subtype)) print_('FPS: {}\n'.format(stream.fps)) if self.audio is not None: #5015 def f(audio): try: #7394 print_(f'Download audio: {display_url(audio)}') DIRf = getattr(putils, 'DIRf', putils.DIR) path = os.path.join(DIRf, f'{uuid()}_a.tmp') if cw is not None: cw.trash_can.append(path) if constants.FAST: downloader_v3.download(audio, session=session, chunk=1024*1024, n_threads=2, outdir=os.path.dirname(path), fileName=os.path.basename(path), customWidget=cw, overwrite=True, mode=MODE) else: downloader.download(audio, session=session, outdir=os.path.dirname(path), fileName=os.path.basename(path), customWidget=cw, overwrite=True) self.audio_path = path print_('audio done') except Exception as e: print_(print_error(e)) self.thread_audio = threading.Thread(target=f, args=(self.audio,), daemon=True) self.thread_audio.start() return {'url': _url, 'name': filename} def pp(self, filename, i=0): cw = self.cw print_ = get_print(cw) ui_setting = utils.ui_setting ext = os.path.splitext(filename)[1].lower() if not os.path.isfile(filename): print('no file: {}'.format(filename)) return filename_new = filename if self['type'] == 'video' and (self.audio is not None or ext != '.mp4') and not self.stream.live: # UHD or non-mp4 if self.audio is not None: # merge self.thread_audio.join() ext, out = ffmpeg.merge(filename, self.audio_path, cw=cw, vcodec=self.vcodec) #print(out) name, ext_old = os.path.splitext(filename) if ext_old.lower() != ext.lower(): print_('rename ext {} --> {}'.format(ext_old, ext)) filename_new = '{}{}'.format(name, ext) if os.path.isfile(filename_new): os.remove(filename_new) os.rename(filename, filename_new) else: # convert non-mp4 video -> mp4 name, ext_old = os.path.splitext(filename) filename_new = '{}.mp4'.format(name) print_('Convert video: {} -> {}'.format(filename, filename_new)) ffmpeg.convert(filename, filename_new, cw=cw) elif self['type'] == 'audio' and ext != '.mp3': # convert non-mp3 audio -> mp3 name, ext_old = os.path.splitext(filename) filename_new = '{}.mp3'.format(name) ffmpeg.convert(filename, filename_new, '-shortest -preset ultrafast -b:a {}k'.format(get_abr()), cw=cw) if self.filename0 and os.path.basename(filename_new) != self.filename0: #4776 filename0 = utils.fix_enumerate(self.filename0, i, cw) filename_old = filename_new ext = '.mp4' if self['type'] == 'video' else '.mp3' filename_new = os.path.join(os.path.dirname(filename_old), os.path.splitext(filename0)[0]+ext) print_(f'rename: {filename_old} -> {filename_new}') if filename_old != filename_new: if not os.path.exists(os.path.dirname(filename_new)): os.makedirs(os.path.dirname(filename_new)) if os.path.isfile(filename_new): os.remove(filename_new) os.rename(filename_old, filename_new) if self['type'] == 'audio' and ui_setting.albumArt.isChecked(): try: ffmpeg.add_cover(filename_new, self.thumb(), {'artist':self.yt.info['uploader'], 'title':self.title}, cw=cw) except Exception as e: s = print_error(e) print_(s) if self.chapters and self['type'] == 'video': #6085 try: chapters = [] for chapter in self.chapters: chapter = ffmpeg.Chapter(chapter['title'], chapter['start_time'], chapter['end_time']) chapters.append(chapter) ffmpeg.add_chapters(filename_new, chapters, cw=cw) except Exception as e: s = print_error(e) print_(s) return filename_new def pp_always(self, filename): cw = self.cw print_ = get_print(cw) if utils.ui_setting.thumbCheck.isChecked(): import filetype s = self.thumb().getvalue() ext = filetype.guess(s) if ext is None: raise Exception('unknown ext') filename_thumb = os.path.splitext(filename)[0] + '.' + ext.extension print_(f'filename_thumb: {filename_thumb}') with open(filename_thumb, 'wb') as f: f.write(s) cw.imgs.append(filename_thumb) cw.dones.add(os.path.abspath(filename_thumb)) if utils.ui_setting.subtitle.isChecked(): self.subs = self.yt.subtitles utils.pp_subtitle(self, filename, cw) return filename def get_id(url): id_ = re.find(r'youtu.be/([0-9A-Za-z-_]{10,})', url) or re.find(r'[?&]v=([0-9A-Za-z-_]{10,})', url) or re.find(r'/(v|embed|shorts|live)/([0-9A-Za-z-_]{10,})', url) or re.find(r'%3Fv%3D([0-9A-Za-z-_]{10,})', url) #5679 if isinstance(id_, tuple): id_ = id_[-1] return id_ class Downloader_youtube(Downloader): type = 'youtube' single = True yt_type = None URLS = ['youtube.co', 'youtu.be', 'yewtu.be'] lock = True display_name = 'YouTube' keep_date = True #3528 __format = {} ACCEPT_COOKIES = [r'.*(youtube|youtu\.be|google).*'] atts = ['cache_filenames'] def init(self): self.cache_filenames = {} format = self.cw.format if format: if isinstance(format, str): ext_result = format elif isinstance(format, dict): ext_result = format['format'] self.__format = format else: raise NotImplementedError(format) else: ext_result = default_option() self.cw.format = ext_result if ext_result in ['mp4', 'mkv', '3gp']: self.yt_type = 'video' else: self.yt_type = 'audio' self.cw.setMusic(True) self.session = Session() @classmethod def fix_url(cls, url): #2033 url = url.replace('yewtu.be', 'youtube.com') if not re.match('https?://.+', url, re.I): url = 'https://www.youtube.com/watch?v={}'.format(url) id_ = get_id(url) if id_: #6485 url = 'https://www.youtube.com/watch?v={}'.format(id_) for header in ['channel', 'user', 'c']: #5365, #5374 tab = re.find(rf'/{header}/[^/]+/?(.+)?', url, re.I) if tab == 'playlists': url = re.sub(rf'(/{header}/[^/]+/?)(.+)?', r'\1', url, flags=re.I) tab = '' if tab in ['', 'featured'] and '/{}/'.format(header) in url.lower(): username = re.find(r'/{}/([^/\?]+)'.format(header), url, re.I) url = urljoin(url, '/{}/{}/videos'.format(header, username)) m = re.find(r'youtube.com/(@[^/]+)/?(.+)?', url, re.I) if m and m[1] in ['', 'featured']: #6129 url = urljoin(url, f'/{m[0]}/videos') return url.strip('/') @classmethod def key_id(cls, url): return get_id(url) or url @classmethod def is_channel_url(cls, url): if '/channel/' in url or '/user/' in url or '/c/' in url: return True if ''.join(url.split('/')[3:4]).startswith('@'): return not url.lower().endswith('/live') return False def read(self): cw = self.cw if self.yt_type == 'video': res = self.__format.get('res', get_resolution()) info = get_videos(self.url, self.session, type=self.yt_type, max_res=res, only_mp4=False, audio_included=not True, cw=cw) else: abr = self.__format.get('abr', get_abr()) info = get_videos(self.url, self.session, type=self.yt_type, max_abr=abr, cw=cw) videos = info['videos'] if not videos: raise Exception('No videos') self.enableSegment(overwrite=True) self.cw.v3['mode'] = MODE # first video must be valid while videos: video = videos[0] try: video.ready(cw) break except Exception as e: e_ = e self.print_(print_error(e)) videos.remove(video) else: raise e_ if info['type'] != 'single': video = self.process_playlist(info['title'], videos) else: self.urls.append(video) self.title = os.path.splitext(video.filename0 or video['name'])[0].replace(':', ':') #4776 if video.stream.live: self.lock = False self.artist = video.username self.setIcon(video.thumb()) if video.stream.live: d = {} d['url'] = self.url d['title'] = self.artist d['thumb'] = video.thumb().getvalue() utils.update_live(d, self.cw) def int_(x): try: return int(x) except: return 0 @try_n(2, sleep=1) def get_videos(url, session, type='video', only_mp4=False, audio_included=False, max_res=None, max_abr=None, cw=None): info = {} n = get_max_range(cw) if Downloader.get('youtube').is_channel_url(url): #5445 reverse = utils.SD['youtube']['channel_reverse'] #5848 tab = ''.join(url.split('/')[4:5]) if tab == '': #5901 url = '/'.join(url.split('/')[:4]) + '/videos' info = read_channel(url, n=n, cw=cw, reverse=reverse) info['type'] = 'channel' info['title'] = '[Channel] {}'.format(info['uploader']) if cw: info['urls'] = filter_range(info['urls'], cw.range) cw.fped = True elif '/playlist' in url: info = read_playlist(url, n=n, cw=cw) info['type'] = 'playlist' info['title'] = '[Playlist] {}'.format(info['title']) if cw: info['urls'] = filter_range(info['urls'], cw.range) cw.fped = True elif get_id(url) or url.lower().endswith('/live'): info['type'] = 'single' info['urls'] = [url] else: raise NotImplementedError(url) info['videos'] = [Video({'referer':url, 'type':type, 'only_mp4':only_mp4, 'audio_included':audio_included, 'max_res':max_res, 'max_abr':max_abr}) for url in info['urls']] return info def read_channel(url, n, cw=None, reverse=False): return read_playlist(url, n, cw, reverse=reverse) @try_n(2) def read_playlist(url, n, cw=None, reverse=False): print_ = get_print(cw) options = { 'extract_flat': True, 'playlistend': n, 'writesubtitles': True, } ydl = ytdl.YoutubeDL(options, cw=cw) info = ydl.extract_info(url) es = info['entries'] urls = [] for e in es: href = 'https://www.youtube.com/watch?v={}'.format(e['id']) urls.append(href) if reverse: urls = urls[::-1] info['urls'] = urls if not info.get('uploader'): title = info['title'] if title.lower().endswith(' - videos'): title = title[:-len(' - videos')] info['uploader'] = title print_('⚠️ Fix uploader: None -> {}'.format(title)) return info import selector @selector.register('youtube') def select(): from Qt import Qt, QDialog, QFormLayout, QLabel, QComboBox, QWidget, QVBoxLayout, QDialogButtonBox if utils.ui_setting.askYoutube.isChecked(): win = QDialog(constants.mainWindow) win.setWindowTitle('Youtube format') utils.windows.append(win) layout = QFormLayout(win) youtubeCombo_type = QComboBox() layout.addRow('파일 형식', youtubeCombo_type) for i in range(utils.ui_setting.youtubeCombo_type.count()): youtubeCombo_type.addItem(utils.ui_setting.youtubeCombo_type.itemText(i)) youtubeCombo_type.setItemIcon(i, utils.ui_setting.youtubeCombo_type.itemIcon(i)) youtubeCombo_type.setCurrentIndex(utils.ui_setting.youtubeCombo_type.currentIndex()) youtubeLabel_res = QLabel('해상도') youtubeCombo_res = QComboBox() for i in range(utils.ui_setting.youtubeCombo_res.count()): youtubeCombo_res.addItem(utils.ui_setting.youtubeCombo_res.itemText(i)) youtubeCombo_res.setCurrentIndex(utils.ui_setting.youtubeCombo_res.currentIndex()) youtubeLabel_abr = QLabel('음질') youtubeCombo_abr = QComboBox() for i in range(utils.ui_setting.youtubeCombo_abr.count()): youtubeCombo_abr.addItem(utils.ui_setting.youtubeCombo_abr.itemText(i)) youtubeCombo_abr.setCurrentIndex(utils.ui_setting.youtubeCombo_abr.currentIndex()) aa = QWidget() a = QVBoxLayout(aa) a.setContentsMargins(0,0,0,0) a.addWidget(youtubeLabel_res) a.addWidget(youtubeLabel_abr) bb = QWidget() b = QVBoxLayout(bb) b.setContentsMargins(0,0,0,0) b.addWidget(youtubeCombo_res) b.addWidget(youtubeCombo_abr) layout.addRow(aa, bb) def currentIndexChanged(index): text_type = compatstr(youtubeCombo_type.currentText()) print(text_type) if tr_('동영상') in text_type: youtubeLabel_abr.hide() youtubeCombo_abr.hide() youtubeLabel_res.show() youtubeCombo_res.show() elif tr_('음원') in text_type: youtubeLabel_res.hide() youtubeCombo_res.hide() youtubeLabel_abr.show() youtubeCombo_abr.show() youtubeCombo_type.currentIndexChanged.connect(currentIndexChanged) youtubeCombo_type.currentIndexChanged.emit(youtubeCombo_type.currentIndex()) buttonBox = QDialogButtonBox() layout.addWidget(buttonBox) buttonBox.setOrientation(Qt.Horizontal) buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) buttonBox.accepted.connect(win.accept) buttonBox.rejected.connect(win.reject) tr(win) win.setWindowOpacity(constants.opacity_max) try: res = win.exec() if not res: return selector.Cancel utils.windows.remove(win) format = {} format['format'] = compatstr(youtubeCombo_type.currentText()).lower().split()[0] format['res'] = get_resolution(compatstr(youtubeCombo_res.currentText())) format['abr'] = get_abr(compatstr(youtubeCombo_abr.currentText())) finally: win.deleteLater() return format @selector.options('youtube') def options(urls): return [ {'text': 'MP4 (동영상)', 'format': 'mp4', 'icon': 'movie'}, {'text': 'MP3 (음원)', 'format': 'mp3', 'icon': 'music'}, ] @selector.default_option('youtube') def default_option(): return compatstr(utils.ui_setting.youtubeCombo_type.currentText()).lower().split()[0] def get_streamer_name(url): if url.endswith('/live'): url = url[:-len('/live')] ydl = ytdl.YoutubeDL({'playlistend': 0}, type='youtube') info = ydl.extract_info(url) return info['channel'] class Live_youtube(utils.Live): type = 'youtube' @classmethod def is_live(cls, url): return ''.join(url.split('/')[3:4]).startswith('@') @classmethod def fix_url(cls, url): cn = url.split('/')[3].split('?')[0].split('#')[0] return f'https://youtube.com/{cn}/live' @classmethod def check_live(cls, url, info=None): if info is not None: try: info['title'] = get_streamer_name(url) except Exception as e: utils.log(print_error(e)) ydl = ytdl.YoutubeDL(type='youtube') try: _ = ydl.extract_info(url) return _.get('live_status') == 'is_live' except Exception as e: print(e) return False ================================================ FILE: translation/changelog_en.txt ================================================ 4.2 【Oct 27, 2024】 [버그 해결 / 사이트 변경에 의한 수정] - 스크립트 호환성 문제 해결 (#6943) - TVer 문제 해결 (#6956) - 필터 북마크 내보내기 / 가져오기 형식 문제 해결 (#6960) - Niconico 업데이트 대응 (#6963, #7006) - #6976 - #6755 - #7011 - Iwara 일부 로그인 필요한 영상 다운로드 안 되는 문제 해결 (#6031) - Danbooru 업데이트 대응 (#7034) - #7037 - XVideos 업데이트 대응 (#7041) - Naver Blog 움짤 인식하지 못하는 문제 해결 (#7062) - #7039 - MyReadingManga 일부 작품 다운로드 안 되는 문제 해결 (#7125) - Chzzk 업데이트 대응 (#7137) - 일부 사이트 파일명 형식에 작가명이 적용되지 않는 문제 해결 (#7127) - Cloudflare DDoS protection 업데이트 대응 (#7158, #7410) - twitter.com > x.com 도메인 업데이트 대응 (#7194, #7199, #7202) - 小説家になろう 업데이트 대응 (#7148, #7167, #7502) - #7399 - DPI 우회 업데이트 - 파일명 형식 파싱 문제 해결 (#7505) - TikTok 업데이트 대응 (#7377) - 일부 오래된 YouTube 영상 다운로드 안 되는 문제 해결 (#7508) - Pinterest 일부 다운로드 안되는 문제 해결 (#7541) - E(x)Hentai 업데이트 대응 (#7577) - 기타 자잘한 것들 [변경/추가된 기능] - SOOP 지원 (#7552) - Linux 지원 (#3771) - Twitter Space 지원 (#4578) - AfreecaTV 녹화 해상도 설정 지원 (#6934) - #6950 - #6965 - 라이브 스트리밍 다운로드 세그먼트 오류 / 전체 세그먼트 수 표시 여기에서 확인 가능: 작업 우 클릭 - 작업 정보... - extras - "다시 시작" 한 작업 읽기 중 사용자가 멈출 때 마지막으로 읽었던 상태로 복구 - Pixiv 움짤 .ugoira 파일 형식 지원 (#6986) 옵션 - 설정 - Pixiv - 움짤 - 파일 형식 - 자동 녹화 갱신 간격 추가 (#6992) - 기본값 변경: "직접 다운로드" 시 분할 다운로드 - "직접 다운로드" 시 HTML 파일의 경우 내부 이미지 다운로드 - 선호 언어 설정 (#7004) 옵션 - 설정 - YouTube - 선호 언어 - CJK 글자 가독성 향상 - 작업 기록 옵션 - 설정 - 고급 - 작업 기록 - YouTube 파일명 형식 토큰 추가: "channel_id", "uploader_id" (#6688) - #6939 - 파일명 형식 자동완성 - AfreecaTV VOD & Catch 파일명 형식 "Date" 지원 (#7054) - Chzzk VOD 파일명 형식 "Date" 지원 (#7085) - Luscious 폴더명 형식 변경 (#7026) - Naver Blog 폴더명 형식 변경 - 검색기 최적화 - 자동 재시작 코멘트 그룹도 인식 (#6832) - 트레이에서 "클립보드에서 자동 추가" 기능 켜짐 여부 표시 (#7154) - 중복 이미지 찾기 이름 변경 (#7407) - Chzzk Clip 지원 (#7442) - GitHub에 접속 불가능한 지역에서도 yt-dlp, FFmpeg 등 동작하게 수정 - 작업 목록 상태 색 변경 - WebSocket 버전 업 (#7533) - "부팅 시 실행" 시 업데이트 생략하고 바로 실행 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 4.1 【Feb 28, 2024】 [버그 해결 / 사이트 변경에 의한 수정] - 컴퓨터 종료 시 인식하지 못 하는 문제 해결 - 작가 추천 문제 해결 - "로컬 파일로부터 새 작업 만들기" 문제 해결 (#6634) - 드래그 & 드롭으로 순서 변경 시 생기는 문제 해결 (#6734, #6735) - HTTP API Web UI 에서 파일 삭제 안 되는 문제 해결 (#6637) - 다중 모니터에서 일부 창 잘못 뜨는 문제 해결 (#6636) - カクヨム 업데이트 대응 (#6620, #6708) - 잠긴 작업 삭제 메시지 잘못 보이는 문제 해결 - E(x)Hentai mixed, other 태그들 인식 못하는 문제 해결 (#6669) - SankakuComplex 업데이트 대응 (#6718) - 압축파일 경로 문제 해결 (#6619, #6699) - DeviantArt Featured만 다운로드하는 문제 해결 (#6480, #6608, #6725) - ニジエ 업데이트 대응 (#6726) - Iwara 업데이트 대응 (#6737) - Weibo 업데이트 대응 (#6739) - Instagram Stories 다운로드 안 되는 문제 해결 (#6445) - DeviantArt 업데이트 대응 (#6827, #6829) - 小説家になろう 업데이트 대응 (#6830) - YouTube 방송이 끝나도 바로 멈추지 않고 오래 뒤에 멈추는 문제 해결 - #6911 - AfreecaTV 업데이트 대응 (#6915) - 기타 자잘한 것들 [변경/추가된 기능] - 치지직 지원 (#6722) - AfreecaTV 녹화 지원 (#1966) - ニコニコ生放送 지원 (#3986, #6790) - YouTube "/live" URL 지원 - YouTube Live 자동 녹화 지원 (#5654, #5908) 옵션 - 설정 - 녹화 - 자동 녹화 - 작업 고정, 잠금 아이콘 가장자리로 이동 (#6676) - 네트워크 드라이브 경로 분석 생략 (#6651) - M3u8 stream rate limit (#6700) - #6694 - 중복 이미지 찾기 폴더 리스트 유지 (#6655) - 중복 이미지 찾기 같은 소스 제외 (#6655) - 녹화 중 일부분이 불량일 경우 끊지 않고 계속 녹화 (에러 메시지 남김) - Weibo 파일명 형식 변경 (#6739) - 작업 수정창에 "Range" 추가 - 녹화 파일명 형식 추가 (#6722) 옵션 - 설정 - 녹화 - 파일명 형식 - Gelbooru 이전에 다운로드한 파일 인식해서 빠르게 읽음 (#6729) - Weibo 이전에 다운로드한 파일 인식해서 빠르게 읽음 (#6739) - 업로드 속도 표시 (#6574) 도움말 - 통계 - 코멘트 여러 줄 가능, 너무 길면 툴팁 띄움 (#6570) - 토렌트 고급 옵션 옵션 - 설정 - Torrent - 고급 옵션... - V2PH 로그인 알림 (#6774) - 프록시 연결 상태 더 정확하게 확인 - #6836 - 자동 녹화 일시 정지 마우스 우 클릭 - 일시 정지 - 자동 녹화 체크 중 표시 - 자동 녹화 갱신 간격 설정 (#6810) - 작업 목록 필터링 "live:" 추가 - #6892 - 녹화 파일명 중복 처리 (#6895) - 녹화 중 오류 발생으로 중단 시 재다운로드 시도 (#6722) - DPI 우회 제외 도메인 설정 (#5380, #5954, #5659) 옵션 - 설정 - 네트워크 - DPI 우회 - 설정 - #6912 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 4.0 【Dec 02, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - Pixiv 폴더명 형식에 "title" 이 포함되어있고 작품 제목에 사용할 수 없는 문자가 포함되어있을 때 발생하는 문제 해결 (#6433) - Pixiv /following 링크 인식하지 못하는 문제 해결 (#6427) - #6424 - #6440, #6441 - yt-dlp 프록시 문제 해결 (#6464) - 성능 최적화 (#6467) - 절전모드 방지 제대로 적용되지 않는 문제 해결 (#6491) - 중복 이미지 찾기 성능 & 정확도 개선 (#6491) - 일부 환경에서 생기는 내장 브라우저 문제 해결 (#6465) - Instagram 업데이트 대응 (#6473) - AfreecaTV 파일명 형식 id 토큰 인식하지 못하는 문제 해결 - ArtStation 일부 다운로드 못하는 문제 해결 (#6516) - youtu.be 도메인 문제 해결 (#6485) - E(x)Hentai 원본 이미지 다운로드 업데이트 대응 (#6533) - 검색기 Image Set 지원 (#6534) - SankakuComplex 업데이트 대응 (#6501) - YouTube MPD 형식 다운로드 안 되는 문제 해결 (#6560) - 하위폴더가 있는 Single 형식 작업 폴더 이동 안 되는 해결 (#6562) - 필터링 된 목록 선택 문제 해결 (#6377, #6569) - Cloudflare DDoS protection 업데이트 대응 (#6555) - Pixiv 업데이트 대응 (#6588, #6593) - Pixiv "." 으로 끝나는 제목 문제 해결 (#6592) - Bilibili 같은 재생목록의 다른 영상 같은 작업으로 인식하는 문제 해결 (#6580) - E(x)Hentai 509 업데이트 대응 (#6622) - Niconico 업데이트 대응 - 쿠키 문제 해결 (#6607) - 기타 자잘한 것들 [변경/추가된 기능] - Windows 10 미만 지원 종료 - 선택된 작업들 내보내기 자동으로 그룹 포함 (#6437) - #6380 - 자동 녹화 (#5908) 옵션 - 설정 - 녹화 - 자동 녹화 - 녹화 작업은 "최대 동시 작업" 에 영향주지 않도록 수정 - Naver Cafes 원본 다운로드 (#6460) - Naver Cafes 검색 허용일 경우 로그인 없이 다운로드 - 메시지 상자 Y / N 단축키 (#6461) - YouTube 파일명 형식 토큰 추가 (#6425) - 다크 모드 시스템 설정 옵션 - 설정 -디스플레이 - 다크 모드 - 시스템 설정 사용 - Twitch 광고 스킵 옵션 - 설정 - Twitch - 광고 스킵 - 다중 작업들 브라우저로 보기 (#6421) - Pixiv, YouTube, Instagram, Twitter 파일명 형식 토큰 목록 (#6425, #6446) - 작업 목록 필터링 자동완성 북마크 지원 - 작업 목록 제한 100,000 개로 늘림 (#6488) - 파일 단위 segment 지원 (#6567) - SRT 자막 호환성 개선 (#6564) - Torrent 작업 Favicon 누르면 메뉴 보임 - Twitter 파일명 형식 uid 토큰 추가 (#6624) - 파일명 형식 page:+1; 구문 추가 (#6624) - 번역 업데이트 (#6489) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8f 【Oct 05, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - 일부 위젯 폰트 적용 안 되는 문제 해결 - 이미지 포맷 변환 문제 해결 (#6206) - 불완전한 작업 파일 개수 잘못 표시되는 문제 해결 (#6210) - Shift 버그 해결 & 최적화 (#6227) - 폰트 미리보기 폰트 적용 안 되는 문제 해결 - #6231 - AfreecaTV catch 다운로드 (#6215) - #6224 - 유튜브 플레이리스트 같은 파일명 처리 (#6235) - Lossless WebP 문제 해결 (#6241) - 내장 웹브라우저 쿠키 증발 문제 해결 - #6266 - 아이콘 보기 모드에서 썸네일 드래그 선택 안 되는 문제 해결 - TikTok 업데이트 대응 (#6293) - #6290 - Twitter 한 트윗에 여러 개의 동영상이 있는 경우 다운로드되지 않는 문제 해결 - Twitter Retweets 포함 다운로드 Rate limit 문제 해결 - xHamster 업데이트 대응 (#6318) - SankakuComplex 업데이트 대응 (#6326) - KakaoPage 업데이트 대응 (#6169) - 작업 목록 필터링 후 선택 문제 해결 (#6372) - ComicWalker 업데이트 대응 (#6368) - DeviantArt 업데이트 대응 (#6025) - pixivコミック 업데이트 대응 (#6398) - #6401 - Flickr 업데이트 대응 (#6410) - 기타 자잘한 것들 [변경/추가된 기능] - Bilibili 채널 / 플레이리스트 다운로드 지원 - Russian 추가 (#6212, #6223) - TwitCasting 등 녹화 지원 - 작업 목록 필터링에서 관계 없는 그룹 숨김 (#6191) - Twitter Rate limit 처리 (#6245) - #6257 - Bilibili URL 중복 인식 - 소리 설정 (#6207) 옵션 - 설정 - 고급 설정 - 소리 - 여러 작업 폴더 이동 (#4020) 마우스 우 클릭 - 폴더 이동... - 모든 작업 완료 후 (#4097) 옵션 - 모든 작업 완료 후 - 중복 이미지 찾기 최적화 (#6324) - YouTube 오디오 트랙 설정 (#6332) 옵션 - 설정 - YouTube - 오디오 트랙 - Wine에서 실행시 창 투명도 애니메이션 끔 (#4974) - Tumblr "tumblr.com/(id)" 형식 URL 지원 (#6333) - Twitter x.com 도메인 지원 - YouTube Enhanced bitrate 지원 (#6350) - "그룹 안의 모든 작업 다시 시작" 다중 그룹 지원 (#6354) - Twitter API call 최적화 (#6343) - #6305 - Public IP 표시 (#6351) 옵션 - 설정 - 네트워크 - Public IP - #6358 - Twitter 파일명 설정 (#6041, #6380) 옵션 - 설정 - Twitter - 파일명 형식 - YouTube 썸네일 다운로드 옵션 - 설정 - YouTube 설정 - 썸네일 다운로드 - YouTube 파일명 형식 "date" 변경 (#6387) - Hook.format 지원 (#6380) - 자동 제거 전 Hook 실행(#6408) - SankakuComplex 페이지 제한 우회 (#6418) - 업데이트 속도 최적화 - YouTube 파일명 형식 "width", "height" 지원 (#6404) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8e 【Jul 25, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - yt-dlp 문제 해결 (#6086, #6087, #6089) - #6093 - Tiktok 업데이트 대응 (#6114) - WeLoveManga 업데이트 대응 (#6105, #6186) - Tiktok 제목 없는 영상 다운로드 안 되는 문제 해결 (#6119) - PornHub 업데이트 대응 (#6124) - YouTube "youtube.com/@(id)" 형식 URL 잘못 인식하는 문제 해결 (#6129) - yt-dlp 업데이트 대응 (#6136) - 한국어 로케일에서 설정 파일 없이 시작했을 때 일부 글자 깨지는 문제 해결 - YouPorn 업데이트 대응 (#6142) - #6115 - Jmana 업데이트 대응 (#6157) - "선택 화 다운로드" 할 때 내장 웹브라우저 문제 해결 - SoundCloud 업데이트 대응 - Naver Blog 업데이트 대응 - SankakuComplex Popular 부분 다운로드되는 문제 해결 (#6171) - #6190 - 기타 자잘한 것들 [변경/추가된 기능] - Mastodon 지원 (#6123) - Misskey 지원 (#6051, #6161) - Likee 지원 종료 - YouTube 비디오 코덱 우선순위 설정 (#6079) 옵션 - 설정 - YouTube 설정 - 비디오 코덱 우선순위... - YouTube 가능한 경우 챕터 마커 추가 설정 (#6085) - pixivコミック 화질 개선 - TVer 등 일부 yt-dlp 지원 사이트 다운로드 속도 개선 (#6072, #6118) - Twitter "twitter.com/i/user/(User ID)" 형식 URL 지원 (#5841, #6120) 여기에서 확인 가능: 작업 우 클릭 - 작업 정보... - extras - uids - Pawoo "pawoo.net/web/accounts/(id)" 형식 URL 지원 (#6123) - 자동 재시작 (#6152) 코멘트에 "restart:30:00" 입력하면 작업 완료 후 30분 뒤에 다시 시작 - "중복 이미지 찾기" 파일 검색 속도 최적화 - "중복 이미지 찾기" "폴더 열기" 단축키 추가 - 검색기 검색 전 파일 검색 속도 최적화 - "저장 폴더에 있는 모든 갤러리 넘버 복사" 속도 최적화 - 테마 변경 속도 최적화 - 다중 직접 다운로드 (#6158) - 트레이 아이콘에서 다운로드 시작 / 완료 표시 (#6102) - 작업 완료 알림 (#6102) 옵션 - 설정 - 고급 설정 - 작업이 완료되면 알림 보이기 옵션 - 설정 - 고급 설정 - 모든 작업이 완료되면 알림 보이기 - "클립보드에서 자동 추가" 로 추가시 알림음 (#6102) - 내장 웹브라우저로 바로 로그인할 수 있게 버튼 표시 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8d 【Jun 23, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - #5941 - Instagram 업데이트 대응 (#5930) - ComicWalker 제목이 너무 길 경우 생기는 문제 해결 (#5928) - Nozomi.la 일부 태그 다운로드 안 되는 문제 해결 (#5989) - 브라우저에서 쿠키 불러오기 Whale 브라우저로만 작동하는 문제 해결 (#5979) - #6010 - yt-dlp 문제 해결 (#6053) - 기타 자잘한 것들 [변경/추가된 기능] - 카카오페이지 같은 제목의 화 처리 (#4483) - ComicWalker 같은 제목의 화 처리 (#5929) - ComicWalker 화 제목 포맷 변경 (#5929) - Pixiv Comic 화 제목 포맷 변경 (#5929) - #5967 - Pinterest 생성됨 (_created) 보드 다운로드 (#5981) - 불완전한 작업도 PDF 생성 (#5967) - 사용자명에 Non-ASCII 문자가 들어간 경우 자동으로 --safemode 처리 (#5955, #5973, #5975) - 설정 분류 정리 - YouTube 파일명 형식 "date" 추가 (#5529) - YouTube 자동 생성 자막 지원 옵션 - 설정 - YouTube 설정 - 자막 - 자동 생성 자막 포함 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8c 【May 05, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - 카카오페이지 업데이트 대응 (#5806) - --safemode 버그 해결 (#5934) - 기타 자잘한 것들 [변경/추가된 기능] - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8b 【May 02, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - 최대 동시 작업 초과하는 문제 해결 (#5621) - "로컬 파일로부터 새 작업 만들기" 폴더 복수 선택 안 되는 문제 해결 - pixivコミック 업데이트 대응 (#5662) - YouTube URL 형식 업데이트 대응 (#5679) - #5657 - AfreecaTV 업데이트 대응 (#5685) - Weibo 업데이트 대응 (#5634) - xHamster 새 도메인 지원 (#5696, #5893) - Danbooru 업데이트 대응 (#5730) - #5709 - Nozomi.la 업데이트 대응 (#5754) - YouTube 업데이트 대응 (#5757) - SankakuComplex 업데이트 대응 (#5861, #5892) - Iwara 업데이트 대응 (#5794, #5869) - Douyin 업데이트 대응 (#5896) - Luscious 업데이트 대응 (#5699) - E(x)Hentai 에서 509.gif 이름의 파일 다운로드 못하는 문제 해결 (#5900) - 기타 자잘한 것들 [변경/추가된 기능] - Newgrounds 다운로드 (#5627) - 프로그램 시작 시간 최적화 - --safemode 로 실행 시 잘못된 경로일 때 해당 경로와 함께 오류 메시지 표시 - Bilibili 쿠키 없으면 쿠키 업데이트 아이콘 띄움 (#5647) - 일본어 사용법 추가 (#5643) - 작업 목록 제한 50,000 개로 늘림 (#5655) - 사이드바 추가 - 실시간 녹화 프록시 설정 반영 - PandoraTV 지원 종료 - #5687 - 단축키 추가 (#5691) - 브라우저에서 쿠키 불러오기 기능 추가 (#5779) - 옵션 - 설정 - 고급 - 다운로드가 완료될 때까지 절전모드 방지 - Sinhala 언어 추가 (#5763) - 채널 영상 역순으로 다운로드 (#5848) 옵션 - 설정 - YouTube - 채널 영상 역순으로 다운로드 - 작업 목록 필터링 "dur<", "dur>" 추가 "사용법 (F1) - 다운로더 작업 목록 필터링" 참고 - 베타 버전 설치 옵션 - 설정 - 고급 설정 - 베타 버전 설치 - #5865 - HTTP API 패스워드 지원 (#5668) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8a 【Jan 06, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - #5469 - #5533 - PornHub 업데이트 대응 (#5554) - #5562 - 작업 목록 필터링 대소문자 문제 해결 (#5569) - yt-dlp 문제 해결 (#5592) - 기타 자잘한 것들 [변경/추가된 기능] - VLIVE 지원 종료 - #5541 - Instagram 로그인 안정화 - 설정 레이아웃 변경 - MPD URL 인식 & 다운로드 - Twitter 읽기 속도 향상 (#5548) - #5559 - 읽기 중지 기능 - "빠른 실행 도구 모음" 에서 "트레이로 최소화" 동작하지 않는 문제 해결 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8 2022-12-16 [Bug Resolution / Fix due to site change] - Twitch: fix slow download - pixivコミック: fix author's name not being recognized (#5278) - Nozomi.la: update response (#5340) - Danbooru: update response (#5336) - Danbooru: allow download of single post - Niconico: update response (#5332) - Niconico: cookie required for login - YouTube: channel tab support (shorts, live) (#5365) - Bilibili: update response (#5383) - PornHub: update response (#5384) - Cloudflare DDoS protection: update response (#5392, #5404) - pixivコミック: stability fix(#5329, #5498) - LHScan: update response (#5351) - Twitch: troubleshooting memory (#5418) - PornHub GIF: fix download error - E(x)Hentai: update response - YouTube: fixed list download (#5095) - Instagram: fix download error (#5299) - Troubleshooting some video site playlist memory (#5423) - XnView MP: Troubleshooting connection file execution (#5224) - Troubleshooting freesing finding suplicate images (#4493) - hanime.tv: update response (#5272) - baraag.net: update response (#5435) - Pawoo: update response - ArtStation: troubleshoot downloading only one album if you have multiple albums (#5473) - Flickr: fix download error (#5492) - KakaoPage: update response (#5268) - PornHub: increase maximum videos download (#5488) - AsmHentai: update response - Other small changes [Changed/Added Features] - Hiyobi.me: support (#5425) - YouTube Handles: support (#5445) - Pixiv: window open if no cookies are loaded - Pixiv: "Restart" skip files already downloaded and read faster (#5281) - Export/Import Filter Bookmarks (#5298) - Turn off auto-save if errors occur while reading the settings file (*.ini) - Torrent: added option to select file before downloading (#4328) - Torrent: option to add tracker Options - Settings - Torrent - Add Tracker - Settings: you can now search settings - UX: Keyboard interface improvement (#5436) - thunder:// link support added - YouTube: recognize subfolders in "File Name Format" (#5177) - E(x)Hentai: restarting the task now download corrupted or missing images (#5126) - SankakuComplex: notification when login is needed (#5341) - YouTube: wait for the live broadcast to start before downloading - WebP: conversion option added (#5444) - Conversion: image format (#5444) Right-click - Image Format Conversion... - Context menu: layout modified - Auto-correct invalid proxy address & indicate proxy connection - TOR proxy support - UX: remember window location size (#3548) - Modify the "Auto-Add from Clipboard" notification window to continue to work even when it appears - Automatic focus when multiple message windows appear (#5458) - Tumblr URL redirect support (#5501) - Performance Optimization (#5510) - Other small changes -------------------------------------------------------------------------------------------------------------------------------------------- 3.7p 2022-09-20 [Bug Resolution / Fix due to site change] - YouTube shorts: now properly recognized (#5260) -------------------------------------------------------------------------------------------------------------------------------------------- 3.7o 【Sep 19, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - Twitch 다시보기 다운로드 안 되는 문제 해결 (#5031) - #5033 - #5046 - #5071 - Pixiv 업데이트 대응 (#5105) - V2ph 업데이트 대응 (#5082) - nhentai 업데이트 대응 (#5131) - MyReadingManga 업데이트 대응 (#5109, #5148) - Nozomi.la "/" 들어간 태그 인식 못하는 문제 해결 (#5146) - "옵션 - 설정 - 일반 - 플레이리스트 파일에 번호 매기기" 적용되지 않는 문제 해결 - pixivコミック 업데이트 대응 (#5158) - KakaoPage 업데이트 대응 (#5176) - Manatoki 업데이트 대응 (#5233) - WeLoveManga 업데이트 대응 (#5238) - Twitch 음소거 복구 작동하지 않는 문제 해결 (#5242) - 기타 자잘한 것들 [변경/추가된 기능] - Live M3U8 stream 지원 (#5110) - Pinterest 단일 포스트 다운로드 (#5132) - Nozomi.la 여러 이미지 포함하는 포스트 다운로드 (#4943) - ExHentai .onion 도메인 인식 - TikTok 태그 검색 다운로드 (#5235) - 성능 최적화 - "다시 시작" 한 작업 대기 중 "완료됨으로 표시" 가능 - #5029 - Instagram Reels 다운로드 (#5051) - 소설 사이트 루비 처리 (#5102) - #4980 - UI 스케일 설정 옵션 - 설정 - 고급 - UI 스케일 - 아이콘 모드에서도 우클릭 - 드래그 동작 - Pixiv 정지된 계정 처리 (#5223) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7n 【July 22, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - #4857 - Luscious member 전용 페이지 제목 읽지 못하는 문제 해결 (#4751) - Torrent 파일 연결 안 되는 문제 해결 (#4873) - --safemode 적용 안 되는 문제 해결 (#4932) - #4854 - Pixiv 작가명 문제 (#4897) - Iwara 일부 이미지 다운로드 안 되는 문제 해결 (#4901) - Pixiv Comic 업데이트 대응 (#4861) - Luscious 업데이트 대응 (#4905) - 다크모드에서 일부 위젯 제대로 안 보이는 해결 - Soundcloud 아주 많은 재생목록 다운로드 안 되는 문제 해결 (#4928) - 큰따옴표 들어간 작가명 인식 못하는 문제 해결 (#4936) - TikTok 업데이트 대응 (#4941) - Hentai Cosplay 업데이트 대응 (#4954, #4961) - AsmHentai 업데이트 대응 (#4971) - Twitter 특정 쿠키에서 생기는 문제 해결 (#4967) - Instagram 특정 쿠키에서 생기는 문제 해결 (#4967) - #4982 - #5006 - 기타 자잘한 것들 [변경/추가된 기능] - douyin 다운로드 - Twitter Likes 다운로드 (#726) - Twitter Retweets 포함 다운로드 (#3429) - Torrent 시딩 설정 옵션 - 설정 - Torrent 설정 - 시딩 - YouTube 해상도 지정 다운로드 (#4851, #4895) 옵션 - 설정 - YouTube 설정 - 파일 형식 물어보기 - Soundcloud 재생목록 더 빠르게 읽음 - Etc 사이트 자막 지원 - YouTube 자막 모든 언어 지원 - 플러그인 기능 옵션 - 설정 - 플러그인 - 커스텀 테마 지원 - Torrent 작업 메뉴 작업 마우스 우클릭 - Torrent - 관리자 권한 없이 실행 옵션 (#4934) 옵션 - 설정 - 관리자 권한 없이 실행 - "페이지 지정 다운로드 기본값" → "최대 페이지 제한" 으로 변경 (#4933) - TikTok 파일명 제목 포함하도록 변경 - 작가 추천 현재 언어 설정에 따르도록 변경 - 내장 웹브라우저 GPU 사용하게 변경 (#4941) - 작업표시줄 진행도 현재 다운로드 중인 작업들의 진행도를 표시하도록 변경 - 성능 / 메모리 최적화 - YouTube, Twitch 등 파일명 포맷 "artist" 지원 (#4940, #4953) - 스크립트 "@Downloader.register" 생략 가능 - 이미 동일한 작업이 있다면 다시 시작할지 물어봄 - Torrent 파일 가능하면 헤더 먼저 받음 - 아주 작은 이미지 & 동영상 파일은 다운로드 실패로 간주 (#4996) - 내장 브라우저 쿠키 ↔ 현재 쿠키 설정 동기화 - Instagram 쿠키가 없다면 로그인 창 띄움 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7m 2022-06-08 [Bug Resolution / Fix due to site change] - Downgrading to V3 module (#4835) -------------------------------------------------------------------------------------------------------------------------------------------- 3.7l 2022-06-07 [Bug Resolution / Fix due to site change] - Font: font-breaking solved - Video: fixed some sites which didn't follow quality option (in YouTube option) (#4773) - YouTube: false duplicate error solved. You can now download the video and then the audio without the audio being flagged as duplicate (#4776) - luscious: limited files downloaded fixed (#4794) - xHamster: new domain (xhwide.com) support (#4826) - Instagram: update response (#4829) - KissJav: new domain (kissjav.li) support (#4826) - YouTube: fixe proxy not usable (#4850) - Other small things [Changed/Added Features] - View a list of created folders (ctrl+L) (#4698) - Home/End keybkaord are supported again (#4752) - Hitomi.la / E(x)Hentai: filename new option "Number + Original" (#4762) - Torrent: Fixed reading the remaining magnet link when the Torrent seed file is deleted and restarted - Torrent Tracker: featured modified - When restarting, modify the ones that have already been downloaded to keep the modified date (#4764) - Packer Update (#4648, #4781) - Shortcup: you can now change them (#4805) - Optimizing program start time - Warning if you need to log in to Twitter (#4839) - Other small things -------------------------------------------------------------------------------------------------------------------------------------------- 3.7k 2022-05-06 [Bug Resolution / Fix due to site change] - Files can now be saved even if config file doesn't exist (#4733) -------------------------------------------------------------------------------------------------------------------------------------------- 3.7j 2022-05-06 [Bug Resolution / Fix due to site change] - Pawoo: download error resolved (#4381) - Luscious: update response (#4386) - Pixiv Comic: download error resolved (#4389) - XVideos: update response (#4401, #4410, #4530) - Show in browser: resolved WebP file not visible - Twitter: download error resolved (#4438) - Hitomi.la: download error (animated picture) resolved - カクヨム (kakuyomu): download error resolved (#4445) - Iwara: download error resolved (#4450) - Iwara: download error resolved. Only the first picture of channel was downloaded (#4499) - nhentai: update response (#4541) - DeviantArt: update response (#4515) - Pixiv: gif redownload problem (#4534) - Tumblr: update response (#4645) - Manatoki: update response (#4660, #4664) - Various websites: fixed missing files (#4633, #4676) - DeviantArt: update response (#4671) - Novelpia: download error resolved (#4713) - Iwara: download error resolved (#4728) - Other small things [Changed/Added Features] - Conversion to PNG is now possible (#4420, #4426) - built-in web brwoser: now accessible via quick access toolbar (#4451) - E(x)Hentai: empty file is not created anymore if quote is exceeded ( #4385) - Group: right-click "move to group" added (#4524) - Twitter: warning if you need to log-in (#4549) - Statistics: total available space added (#4328) - Danbooru Ugoira: now convertible in webm - YouTube: 8k support (#4593) - "Create a new task from a local file" - "Single file" Multiple choices (#4682) - Reconnect DB when hard drive got disconnected (#4712) - Preview video file - Other small things -------------------------------------------------------------------------------------------------------------------------------------------- 3.7i 2022-01-27 [Bug Resolution / Fix due to site change] - Fixed an issue where some sites should not pause and then resume - Kakuyomu (カクヨム): download error resolved (#4262) - Facebook: account download error resolved (#2417) - xHamster: support (#4332) - Hitomi.la: update response (#4351, #4352) - KAKAO WEBTOON: update response (#4360) - Hitomi.la: fixed some title bug (#4267) - Iwara: fixed download error (#4288) - welovemanga: new domain support (#4298) - Search: multiple bugs corrected (#4316) - Weibo: fixed "warning: old cookies" messages - Tiktok: fixed download error (#4324) - Instagram: update response (#4336) - XVideos: fixed title errors (#4359) - Twitter: update response - Other small things [Changed/Added Features] - Naver Cafe: support (#2090) - Open folder shortcut - Iwara: same videos title (but different url) are not treated as the same videos anymore (#4287) - Other small things -------------------------------------------------------------------------------------------------------------------------------------------- 3.7f 2022-01-03 [Bug Resolution / Fix due to site change] - Danbooru: support for website update (#4160) - Hitomi.la: support for website update (#4214) - Resolved stuttering when deleting while downloading - E(x)Hentai private: fixed download problem on private gallery (#4223) - Twitch: fixed clip list not being downloaded (#4191) - Other small things [Changed/Added Features] - Danbooru popular: support (#4160) - Manatoki: fixed download error (not downloading images if the there is a duplicate filename) #4161 - Yande.re: support for original resolution download (#4231) - Search: added an option to desactivate search #4159 - Other small things -------------------------------------------------------------------------------------------------------------------------------------------- 3.7e 2021-12-27 [Bug Resolution / Fix due to site change] - iwara: fixed un-downloaded channels (#4030) - Facebook: fixed un-downloaded videos (#4064) - XVideos: fixed un-downloaded videos (#4083) - Jmana: support for website update (#4070) - Pixiv Newest works ('Following'): support for website update (#4077) - Bilibili: fixed playlist download (#4117) - Mastodon: fixed download error (#4125) - Hitomi.la: support for website update (#4126, #4152) - syosetu.com, kakuyomu.jp: fixed download error (#4137) - Other small things [Changed/Added Features] - 4chan: support(#2085, #4116) - YouTube Live Stream: support - Twitch Live Stream: support - "View in browser": fixed to work even if HTTP API is turned off (#4060) - Move with with arrow keys (#4060) - Deduplication: auto select the most recent (#4085) - Task list filter: support for logical operator (OR, NOT, parentheses) (#4046) Example: A OR B NOT type:youtube (A OR B) C - danbooru: support to download pages >100 (ex: danbooru.donmai.us/posts?page=101, danbooru.donmai.us/posts?page=102, etc.) #4103 - (#4110) - Twitter: optimising download speed (#4130) - Other small things -------------------------------------------------------------------------------------------------------------------------------------------- 3.7d 2021-11-23 [Bug Resolution / Fix due to site change] - SankakuComplexe: solved URLs misrecognition (#3990) - Torrent: troubleshooting torrents not working in some environments (#3998) - Folder: fixed weird folders' creationg (#3951) - Internal: troubleshooting and old setting file (.ini) (#4025) - KAKAO WEBTOON: stabilization (#4009) - Hitomi.la: support for website update (#4037, #4038) - Other small things [Changed/Added Features] - E(x)Hentai: support for "Always use the Multi-Page Viewer" (#3415) - HTTP API support - Option -> Settings -> Advanced Settings -> HTTP API - "Watch it on your browser" fixed - ArtStation: support to download best resolution (#2600, #4039) - Instagram: added "old cookies" warning. Meaning you'll need to update cookies (#4014) - Other small things -------------------------------------------------------------------------------------------------------------------------------------------- 3.7c 2021-11-05 [Bug Resolution / Fix due to site change] - KissJav: solved download errors (#3944) - Folder: error in folder naming (#3951) - MyReadingProgram: solved download errors (#3965) - Twitter: solved download errors (#3970) - Navigation: solved navigation with arrows keys, Home, End, with filter on (#3974) - Weibo: support for the new UI (#3508) - TikTok: update compatibility (#3978) - bcy.net (半次元): solved download errors - Other small things [Changed/Added Features] - epio.app: removed support following its closure - M3U8: download speed improved - syosetu (小説家になろう): support for ncode (#3938) - Cookies: you can now use the Chrome extension to update the cookies (example: https://i.imgur.com/YsE2MZ9.gif) - Other small things -------------------------------------------------------------------------------------------------------------------------------------------- 3.7b 2021-10-29 [Bug Resolution / Fix due to site change] - Fixed small error (#3946) - YouTube: fixed some naming errors (#3958) -------------------------------------------------------------------------------------------------------------------------------------------- 3.7a 2021-10-28 [Bug Resolution / Fix due to site change] - Folder: fixed "/" in folder name not being recognized -------------------------------------------------------------------------------------------------------------------------------------------- 3.7 2021-10-28 [Bug Resolution / Fix due to site change] - Torrent: solving the problem of not being able to read some magnet links - Pixiv Comic: solving download errors (#3700, #3815, #3845) - Torent: solving various problems - Long adresses: solving download errors - Solving a problem where anime download cannot be checked in the search engine (#3714) - Anime: solving already donwloaded anime marks not working (#3714) - Bilibili: fixed some addresses not being downloaded (#3777) - Pixiv: fixed download error caused by "\" in folder name - LHScan: update response (#3809, #3815) - ArtStation: update response (#3849) - Twitter: solving stuttering when reading Twitter - YouTube: patched download speed issue (#3891) - nhentai: response to website update (#3930) - Other small things [Changed/Added Features] - Twitter Broadcast support - KAKAO WEBTOON support (#3692) - hentai-cosplays.com support (#3661) - Nozomi.la support (#3841) - xhwebsite.com domain support (#3881) - Daum Webtoon support (#3692) - Torrent: file association implemented Option - Settings - Torrent Settings - Torrent file association - Torrent: piece option Option - Settings - Torrent Settings - Show piece - Custom URI support Example: hitomi://123 - Video thumbnail extraction: optimised - Hanime.tv: resolution follow YT settings (#3712) - Twitch: resolution follow YT settings (#3723) - Torrent: no more limitation to concurrent download (used to be 3) - Task list filter: adding script script:"item.type != 'twitter'" script:"item.filesize > 1024*1024*100" - Show download file's final size if possible - ETA: addind ETA for files or torrent download if possible - Folder name format type: type==A?B:C; series==A?B:C - When ajusting thumbnail size, scroll to current selected task - UTF-8 with BOM support (#3739) - Translation update (#3739) - Adding leading zero (#3763) - V LIVE support for caption (#3778) - Numbering playlist files Option - Settings - General Settings - Number the playlist file - Naver blog: duplicate file names corrected (#3788, #3817) - Optimized initial driving speed and storage speed - Optimizing the speed of dark mode change - Theme setting Option - Settings - General Settings - Theme - Task list filtering : search include URL when searching for titles in task list filtering - Display single file work video length - Torrent: maximum download speed support - Torrent: support for proxy settings - DPI bypass: turning off bug corrected (#3790) - FC2 support for high definition (#3784) - Low specification mode (#3878) Option - Settings - Advanced Settings - Low specification mode - Twitter support for wider dates (previously some years weren't being donwloaded) - Hiyobi.io support (#3861, #3862) - LHScan: if there isn't cookies login a warning now appear (#3324, #3815, #3877) - Fiding duplicate images: Specify the similarity range and automatically select it (#3912) - Optimized to find duplicate images - Ctrl + Arrow Key movement support (#1336, #3867) - Preview: F5 to refresh - Swipe methods: Swipe right - to download Swipe left - to delete file - Direct download without site support for some file, .mp3/4 and .jpeg can now be downloaded whatever the site (#3935) - Other small things -------------------------------------------------------------------------------------------------------------------------------------------- 3.6 2021-08-12 Bug Resolution / Modification by Site Change. - Downloading more than 2 000 items is now possible on Kakao #2966 - Twitter Troubleshooting Some Accounts Infinite Loading - LHScan New Domain Support (#3603) - Hitomi.la Update Response (#3638) - urllib problem with proxy corrected #3632 - Corrected infinite loading from script issue #3641 - Troubleshooting E(x)Hentai Maximum Concurrent Tasks Ignored (#3643) - Other little things. [Change/Additional Features] - Initial loading time optimization - Optimize: thumbnail loading time - Optimize: setting file (*.ini) size - Change: the structure of the setup file (*.ini) (New .ini isn't compatible with old versions) - Modify: combo box or slider not to react when scrolling in advanced settings - Modify: preview window size is now adjustable - Show the number of downloader jobs in the group when filtered - Let's be a novelist, add a tail word (#2888, #3610) - Modified to allow completion after pause (#3482, #3609) - Option to turn off loading of job lager (#3613) - Add Pixiv Filename Format "artistid" (#3636) - Other little thing -------------------------------------------------------------------------------------------------------------------------------------------- 3.5 【July 11, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - Twitter 업데이트 대응 (#3525) - PornhubPremium 문제 해결 (#3511) - 네이버 웹툰 업데이트 대응 (#3540, #3541) - Hitomi.la 업데이트 대응 (#3545) - 프로그램 패스워드 입력창 다크모드에서 이상하게 보이는 문제 해결 (#3549) - 기타 자잘한 것들 [변경/추가된 기능] - 시작할 때 'Scripts' 폴더에 있는 스크립트 읽는 중 메시지박스 숨김 - 캐싱 작업 보여줌 (#3471) - Hitomi.la / E(x)Hentai 파일들 수정된 날짜 1초씩 띄움 - 작업 목록 필터링에서 제목 검색 시 코멘트도 포함해서 검색 - #3531 - #3528 - 초기 로딩 시간 최적화 (#3539) - 설정 파일 (*.ini) 구조 변경 (신버전에서 작성한 설정 파일 구버전에서 읽으면 썸네일과 파일목록 누락됨) - #3543 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.4a 【June 18, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - 페이지 지정 다운로드 기본값 체크 해제한 다음 다시 실행했을 때 적용되는 문제 해결 (#3464) - Pixiv /artworks 인식 못 하는 문제 해결 (#3474) - #3484 - Pixiv 일부 계정에서 북마크 다운로드 안 되는 문제 해결 (#3460, #3475) - Hitomi.la 업데이트 대응 (#3498) - 기타 자잘한 것들 [변경/추가된 기능] - #3463 - 다음 웹툰리그 다운로드 (#3477) - 화가 나눠진 사이트는 페이지 지정 다운로드 무시하도록 수정 (#3480) - #3481 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.4 【June 08, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - SankakuComplex 100 페이지 다운로드 시 실패하는 문제 해결 (#3366) - Iwara 502 문제 해결 - #3392 - #3387 - #3443 - Hitomi.la 업데이트 대응 (#3457) - 기타 자잘한 것들 [변경/추가된 기능] - #3340 - Pixiv 이미 다운로드한 Ugoira 스킵 (#3355) - 컴퓨터 종료 시 자동으로 저장하고 종료 (#1197) - Iwara 채널 이미지 다운로드 (#3357) - Pinterest 동영상 다운로드 (#3389) - 필터 북마크 추가 (#3353) - 검색기에서 폴더명 형식 달라도 이미 다운로드한 것 인식 (#1240) - 검색기에서 다운로드 완료 표시 마우스 우클릭하면 첫번 째 파일 여는 기능 추가 - Hiyobi.me 지원 종료 - 카카오페이지 로그인 방식 변경 - 이미지 크기 조절할 때 세로나 가로로 많이 긴 이미지 너무 줄어들지 않도록 수정 - 성능 / 메모리 최적화 - 설정 파일 (*.ini) 구조 변경 (신버전에서 작성한 설정 파일 구버전에서 읽을 수 없음) - #3407 - 검색기 날짜 표시 (#3410) - #3449 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.3b 【April 27, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - #3167 - 일시정지 안 되는 문제 해결 (#3191) - Jmana 다른 이미지 섞여서 나오는 문제 해결 (#3192) - Jmana 다운로드 안 되는 문제 해결 (#3220, #3223) - 페이지 지정 다운로드 큰 값 입력하면 생기는 오류 해결 - Niconico 다운로드 안 되는 문제 해결 (#3215, #3228, #3268, #3330) - DeviantArt 일부 이미지 다운로드 안 되는 문제 해결 (#3173) - Hitomi anime 완료 후 뜨는 오류 해결 - Twitter 최대 갯수 이상이면 마지막 트윗 하나만 읽는 문제 해결 (#3201) - 다시 시작 후 대기 중일 때 삭제하면 파일 삭제되지 않는 문제 해결 - Torrent 일시정지하면 파일 수 두 배로 표시되는 문제 해결 - Pixiv 비공개 Bookmarks 다운로드 안 되는 문제 해결 (#3218) - Tumblr 일부 다운로드 안 되는 문제 해결 (#3235) - Iwara 특수문자 들어간 유저명 프로필 페이지에서 다운로드 안 되는 문제 해결 (#3239) - Instagram 삭제된 계정 로딩 문제 해결 (#3249) - Bilibili 일부 주소 다운로드 안 되는 문제 해결 - MyReadingManga 다운로드 안 되는 문제 해결 (#3251) - PornHub 다운로드 안 되는 문제 해결 (#3278, #3283) - 폴더 붙여넣기 안 되는 문제 해결 (#3252) - 공백 있는 Torrent 파일 불러오기 안 되는 문제 해결 - YouTube 일부 영상 다운로드 안 되는 문제 해결 (#3236, #3282) - #3275 - Vimeo 일부 영상 다운로드 안 되는 문제 해결 - DeviantArt 무한 로딩 문제 해결 (#3295, #3329) - SankakuComplex 다운로드 안 되는 문제 해결 (#3325, #3326) - 기타 자잘한 것들 [변경/추가된 기능] - FFmpeg 변환 동시에 하나만 실행 (#3205) - 중복 이미지 찾기 해상도 정보 추가 (#3180) - 중복 이미지 찾기 유사도 설정 추가 (#3181) - 중복 이미지 찾기 썸네일 설정 추가 - Tumblr 움짤 읽는 속도 최적화 - 미리보기에서 마우스 휠로 스크롤 - 작업 목록 필터링에서 artist:, group: → artist: 로 통합 - 작업 고정 기능 추가 (#3242) - Niconico 음원 다운로드 다운로드 버튼 우 클릭 → MP3 (음원) - #3266 - 작업 목록 내림차순 정렬 추가 (#3267) - Gelbooru 검열된 태그 다운로드 (#2566) - 아이콘 모드에서도 태그 표시 - SankakuComplex 개별 게시물 다운로드 - Daum Webtoon 유료 화 다운로드 (#3314) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.3a 【Mar 1, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - LHScan 다운로드 안 되는 문제 해결 (#3079, #3130) - LHScan 제목 잘못 인식하는 문제 해결 (#3162) - 일부 동영상 다운로드 중 삭제하면 생기는 문제 해결 - Pixiv 업데이트 대응 (#3083, #3085) - Twitter twitter_ 인식 못 하는 문제 해결 (#3092) - Avgle 다운로드 안 되는 문제 해결 (#2998) - Jmana 다운로드 안 되는 문제 해결 (#2952) - 일부 Tumblr 다운로드 안 되는 문제 해결 (#3163) - 기타 자잘한 것들 [변경/추가된 기능] - 썸네일 잠금 옵션 (#3073) - Twitch 가능하면 음소거된 부분 복구 (#1585) - Pixiv 로그인 방식 변경 (쿠키 이용) - Pixiv Newest works: Following 지원 (#2286) - 리스트 보기 모드 단축키 변경 Ctrl+M → Alt+V - 플레이리스트 4 배 더 빠르게 다운로드 - #3140 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.3 【Feb 4, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - 다시시작 중 작업 삭제하면 생기는 오류 해결 - 일부 환경에서 너무 늦게 켜지는 문제 해결 (#2988, #2989, #2990, #2991, #2992, #2995) - xHamster 일부 다운로드 안 되는 문제 해결 (#3003) - FC2 동영상 다운로드 안 되는 문제 해결 - YouTube 다운로드 안 되는 문제 해결 (#3052) - 기타 자잘한 것들 [변경/추가된 기능] - --safemode 필요한 경우 자동으로 포함해서 재시작하지 않음 (#2988, #2989, #2990, #2991, #2992, #2995) - 설정 파일 (*.ini) 구조 변경 (신버전에서 작성한 설정 파일 구버전에서 읽을 수 없음) - 작업 목록 저장 시 메모리 점유율 / 속도 최적화 - 붙여넣고 다운로드 단축키 제거 - 검색기에서 태그 리스트 스크롤할 때 전체 리스트 움직이지 않도록 수정 (#2990) - 아이콘 모드에서도 진행바 표시 - 기본 페이지 범위 ~2000 으로 수정 - 기본 폰트 변경 - #2981, #3006 - 미리보기에서 동영상 파일인지 표시 - 필터 버튼 우클릭 메뉴 추가 - 잠금 표시 수정 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.2d 【Jan 16, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - Tumblr 일부 계정 다운로드 안 되는 문제 해결 (#2859) - Pornhub premium 다운로드 안 되는 문제 해결 (#2875) - LHScan 바뀐 URL 지원 (#2916) - Instagram 스토리 개별 다운로드 안 되는 문제 해결 (#2923) - Gelbooru 다운로드 안 되는 문제 해결 (#2924) - Facebook 동영상 소리 안 나오는 문제 해결 (#2912) - Instagram 일부 환경에서 다운로드 안 되는 문제 해결 (#2900) - Pornhub 업데이트 대응 (#2936) - 폴더명에 출력 불가능한 문자 들어가면 생기는 문제 해결 (#2950) - Instagram 오래된 게시물 다운로드 못 하는 문제 해결 (#2886, #2959) - 기타 자잘한 것들 [변경/추가된 기능] - --safemode 필요한 경우 자동으로 포함해서 재시작 (#2843) - 다시 시작 시 폴더명 유지 (#2883, #2882) - 작업 불러오는 시간 두 배 빠르게 최적화 (#2904) - Torrent 같은 해시 인식 - 빠른 액세스 기능 추가 - Instagram 스토리 포함 여부 선택 (#2762) 옵션 - 설정 - Instagram 설정 - 스토리 포함 - 다시 시작하는 중에 첫번째 파일 열 수 있게 수정 - Torrent 작업 주소 복사하면 Magnet URI 복사하도록 수정 - 필터 켜진 상태에서 작업 순서 바꿀 수 있게 수정 (#2813) - 사용자 지정 테마 색 & 다크모드 일반 설정 탭으로 옮김 (#2964) - 역슬래시 제대로 보이도록 수정 (#2965) - 스크롤 속도 조절 (#2972) 옵션 - 설정 - 고급 설정 - 스크롤 속도 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.2c 【Dec 27, 2020】 [버그 해결 / 사이트 변경에 의한 수정] - #2823 - 일부 HiDPI 환경에서 메뉴바가 보이지 않는 문제 해결 (#2824, #2827) - Twitter 로그인 쿠키로 다운로드 안 되는 문제 해결 - ZIP 파일대신 폴더 열리는 문제 해결 (#2823) - Instagram 일부 쿠키 인식 못하는 문제 해결 (#2849) - 트레이 아이콘 안 보이는 문제 해결 - Instagram Stories 다운로드 안 되는 문제 해결 (#2857) - Instagram 사진 수 두배로 나오는 문제 해결 - Tumblr 일부 다운로드 안 되는 문제 해결 (#2859) - YouTube 일부 MPD 포맷 영상 최고 화질로 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - youtube-dl 에서 지원하는 모든 사이트 지원 (#2817) - FC2 Video 다운로드 (#2563, #2819) - Likee 다운로드 - 그룹 열고 닫기 단축키 변경 (Enter → Space bar) - Instagram 로그인 쿠키 넣지 않으면 경고 - 작업 다시 시작해서 읽을 때 로더 보이기 - xHamster 채널 friends only 비디오 제외 (#2858) - 수정한 날짜 유지하면서 움짤 변환 - 수정한 날짜 유지하면서 이미지 크기 조절 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.2b 【Dec 10, 2020】 [버그 해결 / 사이트 변경에 의한 수정] - 플로팅 미리보기 화면 밖으로 나가는 문제 해결 - YouTube 일부 영상 다운로드 안 되는 문제 해결 (#2675) - JMana 다른 이미지 섞여서 다운로드되는 문제 해결 (#2662, #2674, #2709) - 휴지통으로 보내지 않고 바로 삭제하는 문제 해결 (#2677) - Hiyobi.me 일부 URL 인식 못 하는 문제 해결 (#2683, #2721) - Twitter 오래된 트윗 읽지 못하는 문제 해결 (#2534) - MyReadingManga 다운로드 안 되는 문제 해결 (#2598, #2693) - Instagram 압축 & 삭제 설정시 다시 시작 안 되는 문제 해결 (#2552) - 마우스 드래그 잔상 남는 문제 해결 - pixivコミック 다운로드 안 되는 문제 해결 (#2645) - No tags 작동 안 하는 문제 해결 (#2707, #2812) - YouTube VR 다운로드 안 되는 문제 해결 (#2606) - LHScan 일부분 다운로드 안 되는 문제 해결 (#2601) - Daum Webtoon 일부 다운로드 안 되는 문제 해결 (#2571) - Youtube Playlist 일부 다운로드 안 되는 문제 해결 (#2716) - Nijie 첫장만 다운로드되는 문제 해결 (#2669) - BDSMlr 다운로드 안 되는 문제 해결 (#2676) - TikTok 채널 다운로드 안 되는 문제 해결 (#1810) - VLIVE 다운로드 안 되는 문제 해결 (#2766) - XVideos .es 도메인 지원 (#2792) - Instagram 차단 방지 (#2708, #2761, #2773) - 기타 자잘한 것들 [변경 / 추가된 기능] - Rule34.xxx 다운로드 (#868, #1120, #1207, #1662, #2060, #2068, #2694, #2711) - nhentai.com 다운로드 (#2095) - XVideos 채널 다운로드 (#2019, #2695) - Yande.re Pool 다운로드 - 작업 폰트 가독성 개선 - YouTube 이미 다운로드한 파일 스킵 (#2713) - 다운로드 중에도 미리보기 볼 수 있도록 수정 - 검색기 선택한 데이터에 맞춰서 자동완성 되도록 수정 - --safemode 옵션 추가 (#2678, #2679, #2701, #2712, #2714, #2719, #2725) - Nijie 로그인 쿠키 넣어야 동작하도록 수정 (#2669) - 랜덤으로 하나 선택시 가능하면 최상단에 보이도록 수정 (#2200) - --experimental 옵션 추가 (#2687) - Ctrl + 마우스 스크롤로 썸네일 크기 조절 - 미리보기 창 화면 밖으로 나가지 않게 수정 - 주소바를 제외한 곳에 포커스가 있을 때 Ctrl + V 누르면 클립보드에 있는 주소 붙여넣고 다운로드 - youtube-dl (YouTube 영상 추출 모듈) 항상 최신으로 업데이트 - WEBTOON 화 순서대로 정렬되도록 수정 - 자동 완성 아무 텍스트 없이도 볼 수 있게 수정 - 검색어 자동 완성 옵션 "옵션 - 설정 - 고급 설정" 에서 "검색기 - 옵션" 으로 이동 - Twitter /media 탭 주소 중복 인식 - 여러 작업 선택 후 코멘트 수정하면 모두 적용되도록 수정 (#2805) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.2a 【Oct 31, 2020】 [버그 해결 / 사이트 변경에 의한 수정] - 다운로드 중 인터넷 끊기면 다시 연결되어도 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.2 【Oct 30, 2020】 [버그 해결 / 사이트 변경에 의한 수정] - 더보기 버튼 작동하지 않는 문제 해결 (#2508) - 일부 사이트 다운로드 중 열 수 없는 문제 해결 - Torrent 다운로드 안 되는 문제 해결 - 일시 정지 후 다시 다운로드 안 되는 문제 해결 (#2596) - 자동 재시작 전에 다시 시작하면 이상하게 작동하는 문제 해결 - 다시 시작할 때 가끔 파일 크기 잘못 표시하는 문제 해결 - Torrent Magnet 링크 넣으면 쓰레기 파일 만드는 문제 해결 - 내장 브라우저 숨겨지지 않는 문제 해결 (#2603) - Manatoki 일부 화 다운로드 안 되는 문제 해결 (#2622) - Hiyobi.me 다운로드 안 되는 문제 해결 - 삭제 확인창 뜨는 문제 해결 (#2624) - Hitomi.la 다운로드 안 되는 문제 해결 (#2631, #2608, #2609, #2610, #2615, #2616, #2625, #2627, #2628, #2629, #2643, #2657, #2659) - Hitomi.la 일부 다운로드 안 되는 문제 해결 (#2635) - 일시정지 다시 시작 못하는 문제 해결 (#2516) - Sankaku Complex Plus 포함되면 읽기 실패하는 문제 해결 (#2652) - Pixiv 일부 URL 인식하지 못하는 문제 해결 (#2653) - Tiktok 다운로드 안 되는 문제 해결 (#1810) - 작업 목록 메모리 누수 해결 - Kakaopage 다운로드 안 되는 문제 해결 (#2618, #2664) - 버벅일 때 창 드래그하면 이상하게 움직이는 문제 해결 - 동시에 많은 양의 동영상을 다운로드했을 때 전체 다운로드가 멈추는 문제 해결 - 기타 자잘한 것들 [변경 / 추가된 기능] - 메모리 점유율 / 속도 최적화 - 암호화된 M3U8 다운로드 - 특수문자 경로 등의 상황으로 인해 임시 폴더가 잘못 만들어지는 문제 / 권한 문제 (#2513, #2514, #2524, #2526, #2541, #2569, #2630) / 지저분한 임시폴더 문제 (#2565) 때문에 v3.1 이전과 같이 %TEMP% 폴더에 압축 풀도록 변경 - 미리보기 새 창에서 띄우게 수정 - 작가 / 그룹 제외 기능 (#2593) - 썸네일 크기 변경 옵션 옵션 - 썸네일 크기 - 작업 그룹 언제나 보이게 수정 (#2530) - 작가 추천 뷰어 개선 - 아이콘 보기 모드 추가 옵션 (Options) - 보기 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.1 【Sep 24, 2020】 [버그 해결 / 사이트 변경에 의한 수정] - YouTube 일부 앨범아트 삽입 오류 해결 (#2275) - /reader/ 주소 인식 안 되는 문제 해결 (#2277) - 작가 추천 뷰어 썸네일 안 보이는 문제 해결 - 중복 이미지 찾기 일부 파일명 삭제 오류 해결 (#2278) - 작가 추천 저장 안 되는 문제 해결 (#2287, #2444) - 일부 이미지 크기 조절 안 되는 문제 해결 (#2288, #2308, #2318, #2393) - Gelbooru 다운로드 안 되는 문제 해결 (#2290, #2297) - Avgle 일부 다운로드 안 되는 문제 해결 (#2300) - 언어에 .html 붙는 문제 해결 (#2355) - "다시 시작" 했을 때 메시지 길이 너무 늘어나는 문제 해결 - YouTube 일부 영상 변환 실패하는 문제 해결 (#2317, #2436) - Twitter 아무 사진도 없으면 무한 로딩되는 문제 해결 - Naver Webtoon 이펙트툰 다운로드 안 되는 문제 해결 (#2313) - Pawoo 다운로드 안 되는 문제 해결 (#2350) - 일부 사이트에서 폴더 형식에 [artist] 가 들어가지 않았을 때 생기는 문제 해결 (#2349) - YouTube 일부 영상 다운로드 안 되는 문제 해결 (#2368) - Instagram Stories 다운로드 안 되는 문제 해결 - Weibo 다운로드 안 되는 문제 해결 (#2407) - MyReadingManga 다운로드 안 되는 문제 해결 (#2336, #2435) - 하위 폴더 중복해서 압축하는 문제 해결 (#2397) - 일부 환경에서 가끔 다운로드가 완전히 멈추는 문제 해결 - JMana 필요 없는 이미지까지 다운로드되는 문제 해결 (#2431) - Imgur 다운로드 안 되는 문제 해결 (#2430) - 일부 주소 붙여넣기 안 되는 문제 해결 (#2440) - Twitter 개별 tweet 다운로드시 메시지가 길면 이미지를 얻지 못하는 문제 해결 - BDSMLR 다운로드 안 되는 문제 해결 (#2299) - Iwara 채널 다운로드 일부만 되는 문제 해결 (#2499) - AfreecaTV 19금 영상 다운로드 안 되는 문제 해결 (#2493) - 기타 자잘한 것들 [변경 / 추가된 기능] - Yande.re 다운로드 (#1455, #1527, #1756, #2011, #2040, #2211, #2319) - KakaoTV 다운로드 - WEBTOON 다운로드 (#2332) - Manatoki 다운로드 - Naver Post 다운로드 - BestJavPorn 지원 종료 (#2105) - Itmtu 지원 종료 - Manamoa 지원 종료 - Iwara 채널 다운로드 (#1882) - Twitch 모든 Clip 다운로드 (#2396) - Pixiv 중복 작업 방지 (#2302) - "다시 시작" 했을 때 실패하면 불완전한 작업으로 표시하고 에러 표시 - Twitter 안정화 (#2303) - Twitter "다시 시작" 하면 최근 트윗만 업데이트 하도록 수정 (#2344) - 검색기에서 이미 다운로드한 작품 제외하는 옵션 (#2329) 옵션 - 검색 필터 - YouTube 해상도 480p 추가 - FFmpeg 바이너리 다운로드 속도 개선 - Pixiv 원본 수정된 날짜 보존 (#2021) - Jmana 개별 화 주소 넣어도 동작하도록 수정 (#1799, #2496) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.0b 【Aug 15, 2020】 [버그 해결] - 검색기에서 추가 안 되는 문제 해결 -------------------------------------------------------------------------------------------------------------------------------------------- 3.0a 【Aug 15, 2020】 [버그 해결] - 검색기 찾기 퍼지 검색 안 되는 문제 해결 - Twitter 사용자 쿠키 입력시 동영상 다운로드 못 하는 문제 해결 (#2246) - Twitter 리사이징 된 이미지 다운로드 되는 문제 해결 (#2244) - Twitter 개별 트윗 동영상 다운로드 안 되는 문제 해결 - Twitter 오래된 트윗 다운로드 안 되는 문제 해결 (#2244, #2263) - Twitter 일부 계정 다운로드 안 되는 문제 해결 (#2244) - 갤러리 넘버 복사 안 되는 문제 해결 (#2247) - Hiyobi.me 다른 폴더에 저장되는 문제 해결 - YouTube 일부 영상 제대로 다운로드 안 되는 문제 해결 (MPEG DASH) (#2201) - Pixiv Comic 다운로드 안 되는 문제 해결 (#2259) - YouTube 일부 채널 다운로드 안 되는 문제 해결 (#2251) - 중복 이미지 찾기 비슷한 이미지 포함 끄면 메모리 & 디스크 캐시 너무 많이 소비하는 문제 해결 (#2274) cache_imgs.db 지운 후에 써주세요 - 작업 폴더 다른 드라이브로 변경하지 못하는 문제 해결 (#2256) - Weibo 다운로드 안 되는 문제 해결 (#2271) - 다크모드에서 "최대 다운로드 속도" 값 안 보이는 문제 해결 (#2270) - 일부 PNG 파일 포맷 변환 안 되는 문제 해결 (#2273) - 기타 자잘한 것들 [변경/추가된 기능] - PandoraTV 다운로드 (#1532, #1797) - Twitter Live 다운로드 - Weibo 로그인 쿠키 입력하는 방식으로 변경 (#2271) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.0 【Aug 10, 2020】 [버그 해결] - YouTube 일부 쿼리스트링 인식 못하는 문제 해결 (#2033) - Twitter 개별 트윗 다운로드 안 되는 문제 해결 (#2035, #2039) - Torrent 다운로드 시작하지 않는 문제 해결 (#2049) - Twitch 일부 영상 다운로드 안 되는 문제 해결 (#2050, #2133, #2197) - nHentai 다운로드 안 되는 문제 해결 (#2053) - Jmana 다운로드 안 되는 문제 해결 (#2017) - LHScan 다운로드 안 되는 문제 해결 (#2064) - #2042 - LHScan 다운로드 안 되는 문제 해결 (#2076, #2079) - AfreecaTV 5 시간 이상 다운로드 못하는 문제 해결 (#2081) - MyReadingManga 다운로드 안 되는 문제 해결 (#2103) - xHamster 새 URL 다운로드 안 되는 문제 해결 (#2104) - YouTube 일부 채널 다운로드 안 되는 문제 해결 (#2124) - #2127 - LHScan 다운로드 안 되는 문제 해결 (#2143) - YouTube 일부 영상 다운로드 안 되는 문제 해결 (#2182) - xHamster 다운로드 안 되는 문제 해결 (#2208) - Bilibili 첫 페이지 외 다운로드 안 되는 문제 해결 (#2184) - Soundcloud 일부 다운로드 안 되는 문제 해결 (#2207) - 일부 E(x)Hentai 다운로드 안 되는 문제 해결 (#2209) - Hitomi.la 제대로 다운로드 안 되는 문제 해결 (#2214, #2216, #2219, #2220, #2222, #2223, #2224, #2225, #2229, #2230, #2239) - Sankaku Complex 사용자 쿠키 인식 안 되는 문제 해결 (#2237) - Luscious 일부 다운로드 안 되는 문제 해결 (#1958) - Weibo 다운로드 안 되는 문제 해결 (#2240) - 기타 자잘한 것들 [변경/추가된 기능] - Danbooru 다운로드 (#155, #1017, #2074) - KakaoPage 다운로드 (#2149) - xHamster 갤러리 다운로드 (#1135, #2002) - TikTok 계정 다운로드 (#1810) - Naver TV 다운로드 - M3U8 파일 다운로드 - Naver Blog 동영상 다운로드 (#1838, #1910, #2032) - 중복 이미지 찾기 WEBP 지원 (#2052) - 다크 모드 옵션 - 설정 - 고급 설정 - 다크 모드 - 예전 스크립트 파일 (*.HDS) 미호환 가능성 인터프리터 Python2 → Python3 로 변경 위젯 툴킷 PyQt4 → PyQt5 로 변경 기타 자잘한 것들 - Windows XP 지원 종료 - 암호 저장 형식 바뀜; 예전 암호 미호환 - 쿠키 저장 방식 바뀜; 예전 쿠키 미호환 - 2 바이트 초과하는 유니코드 문자 지원 - Proxy 암호 저장되게 수정 - E(x)Hentai 밴 방지 - 플로팅 미리보기 속도 향상 - "로컬 파일로부터 새작업 만들기" 폴더 여러개 선택할 수 있도록 수정 (#2116) - E(x)Hentai MPV 주소 지원 - 이미 압축 파일이 있다면 기존 압축 파일에 추가하도록 수정 (#2125) - 선택된 작업 총 파일 크기 표시 - 쿠키 파일 CRLF 지원 (#2179) - 종료 시 진행 중인 작업 있으면 경고 - Bilibili 해상도 YouTube 설정을 따르도록 수정 (#2184) - 불완전한 작업 자동으로 지우지 않도록 수정 (#2150) - E(x)Hentai 중복된 파일명 보정 (#1094, #1923, #2012) - E(x)Hentai 이미 다운로드한 파일 스킵 - AfreecaTV 깨진 부분 제외하고 다운로드 (#2193) - 한 작업 씩 압축하도록 수정 - Pinterest Rate limit 블록 방지 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.8a 【May 30, 2020】 [버그 해결] - YouTube MP3 앨범아트 삽입 안 되는 문제 해결 (#1816) - 작업표시줄 진행상황 표시 안 되는 문제 해결 (#1818) - 토렌트 다운로드 안 되는 문제 해결 (#1837) - 토렌트 마그넷 주소 클립보드에서 자동 추가 인식 안 되는 문제 해결 - 일부 환경에서 폰트 깨지는 문제 해결 (#1823) - 일부 트위터 URL 다운로드 안 되는 문제 해결 (#1826) - E(x)Hentai 압축 안 되는 문제 해결 (#1827, #1889, #1926) - Pornhub 다운로드 안 되는 문제 해결 (#1842, #1843, #1845, #1846, #1855, #1880, #1897, #1899, #1906, #1919, #1928, #1930, #1941, #1952, #1954, #1963, #1974) - 2 GB 이상인 파일 진행 표시줄 보이지 않는 문제 해결 - #1828, #1927 - BDSMLR 다운로드 안 되는 문제 해결 (#1862) - Instagram 일부 환경에서 다운로드 안 되는 문제 해결 (#1489, #1947) - Facebook 로그인이 필요한 페이지 다운로드 안 되는 문제 해결 (#1869) - Pixiv Comic 일부 환경에서 다운로드 안 되는 문제 해결 (#1876) - 유튜브 자막 다운로드 안 되는 문제 해결 (#1879, #1956) - 클립보드에서 자동 추가 옵션 문제 해결 (#1851, #1904) - Iwara 문제 해결 (#1924) - Hiyobi 갤러리 정보 제대로 못 가져오는 문제 해결 (#1926) - Vimeo 일부 영상 저화질로 다운로드되는 문제 해결 (#1938) - MyReadingManga 제목 얻지 못하는 문제 해결 (#1944) - Jmana 다운로드 안 되는 문제 해결 (#1945, #1972) - Youtube 일부 다운로드 안 되는 문제 해결 (#1909, #1915, #1934, #1936, #1942) - hanime 다운로드 안 되는 문제 해결 (#1970, #1990) - YouTube 일부 다운로드 안 되는 문제 해결 (#2004) - 기타 자잘한 것들 [변경/추가된 기능] - WikiArt 다운로드 - baraag.net 다운로드 (#1911) - Hameln 다운로드 (#571, #1360) - V2ph 다운로드 (#1920) - YouPorn 다운로드 - Youku 다운로드 - BestJavPorn 다운로드 (#1960) - KissJav 다운로드 (#595, #1659, #2003) - #1817 - 클립보드에서 자동 추가 기능 모든 사이트별로 설정할 수 있게 변경 - 시스템 트레이 우클릭 메뉴 수정 (#1830) - 토렌트 파일 복붙 가능하게 수정 - Pornhub Premium 다운로드 시 로그인 쿠키 없으면 경고 메시지 - 주소바 우클릭 메뉴 "붙여넣고 다운로드" 추가 - Instagram 스토리 다운로드 (#1489, #1844, #1859) - 중복 이미지 찾기 자동 포커스 (#1790) - 중복 이미지 찾기 선택한 항목 중에서 자동 선택 기능 (#1881) - 중복 이미지 찾기 자동 선택 시 빨간색으로 표시되게 수정 (#1790) - 중복 이미지 찾기 상위 호환 고려 (이미지 정보 새로 캐시) - Pornhub 해상도 YouTube 설정을 따르도록 수정 (#1569, #1900) - PSD / PSB 파일 지원 - 페이지 지정 다운로드 기본값 설정 (#1907) - 프로그램 패스워드 지원 (#1921) - 페이지 수 필터링 다운로드 목록에도 적용되게 수정 - 이미지 읽는 속도 최적화 - 작업 다시 시작했을 때 정보 얻기 실패하면 이전 내용으로 복구 - Pornhub 현재 지역에 맞는 제목으로 다운로드 (#1968) - 작업 수정 기능 (#1973) 마우스 우클릭 - 작업 수정... (F2) - 로컬 파일로부터 새 작업 만들기 (#1806, #1863) 작업 - 로컬 파일로부터 새 작업 만들기 - 태그 단축키 (#1989) - Imgur 연령 제한 포스트 다운로드 (#1995) - 제목 없는 폴더 처리 - 그룹 태그 지원 - 이미 추가된 작업 다시 추가하면 선택하고 스크롤 (#2010) Shift 누르고 다운로드하면 무시하고 추가함 - 저장 중 수정 감지 - 외부 라이브러리 로딩 표시 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.8 【Mar 27, 2020】 [버그 해결] - 일부 유튜브 영상 다운로드 안 되는 문제 해결 (#1604, #1605, #1608, #1641) - Pornhub 일부 채널 다운로드 안 되는 문제 해결 (#1616) - 트위터 다운로드 안 되는 문제 해결 (#1626, #1632) - LHScan 다운로드 안 되는 문제 해결 (#1637, #1739) - 마나모아 다운로드 안 되는 문제 해결 (#1647, #1648, #1651, #1652, #1653, #1677, #1678, #1679, #1685, #1711, #1713, #1719, #1720, #1733, #1750, #1785, #1789) - 일부 사이트 파일 유형 제외 체크하면 다운로드 안 되는 문제 해결 (#1656) - 유튜브 해상도 표기 기준이 아닌 영상 높이 기준으로 다운로드하는 문제 해결 (#1654) - Pornhub 다운로드 안 되는 문제 해결 (#1670, #1673) - 2GB 이상 용량 폴더 압축 안 되는 문제 해결 (#1671, #1741) - epio.app 일부분 다운로드 안 되는 문제 해결 (#1308, #1696) - Pixiv 새로운 북마크 URL 인식 못 하는 문제 해결 (#1710) - 히요비 다운로드 안 되는 문제 해결 (#1748) - #1697 - 트위터 아주 큰 이미지 낮은 퀄리티로 다운로드 되는 문제 해결 (#1731) - Vimeo 다운로드 안 되는 문제 해결 (#1747) - xHamster 다운로드 안 되는 문제 해결 (#1763) - #1776 - #1780 - Soundcloud 다운로드 안 되는 문제 해결 (#1787, #1795) - Pornhub Premium 다운로드 안 되는 문제 해결 (#1791) - Luscious 다운로드 안 되는 문제 해결 (#1798) - YouTube 일부 한글 유니코드 분리되는 문제 해결 - Twitter 쿠키 넣은 채로 동영상 다운로드 안 되는 문제 해결 - Bilibili 다운로드 못 하는 문제 해결 (#1804) - 기타 자잘한 것들 [변경/추가된 기능] - 64bit 프로그램으로 변경 (32bit OS 지원 종료) 여러가지 메모리 관련 이슈 해결 - 작업 개수 제한 10,000 개로 확장 - 패커 변경 - 자체 웹브라우저 내장 - AsmHentai 다운로드 - Avgle 다운로드 (크롬 확장 프로그램) (#607, #1545, #1619) - V LIVE 다운로드 - 爱淘美图 다운로드 - Hanime.tv 다운로드 속도 향상 - 프록시 설정 고스트 드라이버에도 적용되게 수정 - 유튜브 MP4 / MP3 개별 지정 다운로드 (#1630) 주소 입력 - 다운로드 버튼 우 클릭 - `MP4 (동영상)` or `MP3 (음원)` 클릭 - 랜덤으로 하나 선택 (#1364) 작업 - 랜덤으로 하나 선택 - Instagram 개별 포스트 다운로드 지원 (#1665) - 글자수 제한 완화 (#1669) - 설정 파일 (*.ini) 읽는 속도 최적화 (#1663) - 중복 이미지 찾기 삭제된 파일은 오류 뜨지 않도록 수정 (#1391) - 중복 이미지 찾기 이미지 정보 캐시하는 기능 (#1391) - 중복 이미지 찾기 우클릭 메뉴 추가 - 중복 이미지 찾기 자동 선택 기능 (#994) - 쿠키 불러오는 기능 옵션 - 설정 - 고급 설정 - 쿠키 - E(x)Hentai 사용자 로그인 지원 (#817, #277, #1048, #1247) - YouTube 로그인 지원 (#1680) - Pornhub 플레이리스트 다운로드 (#1610, #1699) - 플레이리스트 한 폴더에 다운로드 (Youtube, Pornhub, xHamster, Soundcloud) (#1320) 옵션 - 설정 - 일반 - 플레이리스트 한 폴더에 다운로드 - Pornhub 로그인 방식 변경 - sora1.la URL 지원 - 압축 설정 모든 사이트 지원하도록 수정 - 구글 드라이브 다운로드 오류 메시지 인식 - 검색기 미리보기 검색 목록에서 우 클릭 - 미리보기 - E(x)Hentai 원본 이미지 다운로드 옵션 - 설정 - 히토미 / E(x)Hentai / 히요비 설정 - 원본 이미지 다운로드 - Instagram 비공개 계정 지원 (#1729) - 고스트 드라이버 안정화 (#1742) - 마나모아 중복된 화 (2) 붙이도록 수정 (#1758) - 마나모아 Cloudflare DDoS protection 내장 웹브라우저로 우회 - YouTube 파일 형식 물어보기 옵션 - 설정 - 유튜브 설정 - 파일 형식 물어보기 - MyReadingManga 안정화 - Pixiv Comic 안정화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7h 【Jan 23, 2020】 [버그 해결] - 스트림 영상 제대로 다운로드 안 되는 문제 해결 (#1599) -------------------------------------------------------------------------------------------------------------------------------------------- 2.7g 【Jan 23, 2020】 [버그 해결] - 스트림 영상 제대로 다운로드 안 되는 문제 해결 (#1599) -------------------------------------------------------------------------------------------------------------------------------------------- 2.7f 【Jan 23, 2020】 [버그 해결] - 타입에 hitomi_anime 보이는 문제 해결 - 유니코드 / 한국어 로케일이 아닐 경우에 패스워드 저장 안 되는 문제 해결 (#1533) - Hitomi.la / E(x)Hentai / Hiyobi 페이지 지정 다운로드 파일명 제대로 적용되지 않는 문제 해결 (#1548) - Pixiv 새 URL 인식하지 못하는 문제 해결 (#1550) - Hitomi.la 바뀐 URL 대응 (#1558) - 마나모아 새로운 DDoS protection 대응 (#1566) - 네트워크 위치에 저장 안 되는 문제 해결 (#1520, #1568) - 코멘트 대문자 들어갈 경우 검색 안 되는 문제 해결 (#1557) - Epio 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - Kakuyomu 다운로드 (#1544) - 시스템 로케일에 상관 없이 설정 파일 (*.ini) 인코딩 UTF-8 로 통일 (구버전 호환) (#1533) - 폴더 바로가기 목록 커스텀 - Hanime.tv 다운로드 방식 변경 (#1457) - Timeout 시간 늘림 (#1566) - E(x)Hentai 제목 / 일본어 제목 지원 (#855, #1237, #1565, #1583) - Manamoa 이미지 없는 화 건너뛰도록 수정 (#1589) - Twitch, Xvideos 다운로드 속도 향상 - Twitter 다운로드 안정화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7e 【Jan 2, 2020】 [버그 해결] - 서버를 자동으로 했을 때 일부분 다운로드 안 되는 문제 해결 (#1355) - 삭제된 데이터 일부분 미리보기 보이지 않는 문제 해결 (#1358) - Twitter 개별 트윗 다운로드 시 답글 링크는 다운로드 못 하는 문제 해결 - 마나모아 일부 도메인 다운로드 안 되는 문제 해결 (#1371) - Pixiv comic 다운로드 안 되는 문제 해결 (#1372) - MyReadingManga 다운로드 안 되는 문제 해결 (#1477, #1494) - Pixiv 검색 키워드 불가능한 문자 들어가면 다운로드 안 되는 문제 해결 (#1390) - 논-아스키코드 문자가 포함된 압축파일 연결프로그램에서 열리지 않는 문제 해결 (#1377) - 마나모아 일부 화 다운로드 안 되는 문제 해결 (#1386, #1388, #1404, #1411, #1427, #1440, #1449, #1453, #1461, #1468, #1501) - 대기중인 작업이 많으면 버벅이는 문제 해결 - Windows 10 유니코드 UTF-8 에서 클립보드 복사 시 글자 깨지는 문제 해결 - Hitomi.la 애니메이션 리다이렉트 안 되는 문제 해결 - Hiyobi.me 다운로드 / 검색 안 되는 문제 해결 (#1358, #1426, #1432, #1459) - 다시 시작할 때 프로토콜 들어간 프록시 호스트 잘못 표시되는 문제 해결 - Twitch 일부 영상 다운로드 안 되는 문제 해결 - Twitch 오디오 없는 부분 잘리는 문제 해결 - 중복 이미지 찾기 폴더 일부분만 읽는 문제 해결 (#1422) - Luscious 다운로드 안 되는 문제 해결 (#1423) - Soundcloud 다운로드 안 되는 문제 해결 (#1424) - Pornhub 일부 채널 다운로드 안 되는 문제 해결 (#1320) - Pornhub 일부 1080p 다운로드 안 되는 문제 해결 (#1376, #1433) - Pixiv Rate Limit 일 때 다운로드 안 되는 문제 해결 (#1434, #1450) - Afreeca 다운로드 안 되는 문제 해결 (#1446) - Pixiv 검색 다운로드 안 되는 문제 해결 (#1429, #1438) - DeviantArt 다운로드 안 되는 문제 해결 (#1463) - 검색기 아이콘 보기 모드에서 썸네일 클릭하면 생기는 문제 해결 - Flickr 다운로드 안 되는 문제 해결 (#1483) - 트위터 일부 다운로드 실패하는 문제 해결 (#1493) - 언어가 없는 경우에 그룹 정보를 얻어오지 못하는 문제 해결 (#1500) - Twitch 클립 다운로드 안 되는 문제 해결 - Jmana 다운로드 안 되는 문제 해결 (#1487, #1502) - Vimeo 가끔씩 오류 뜨는 문제 해결 (#1504) - 다음 웹툰 웹툰리그 다운로드 안 되는 문제 해결 (#1505) - 기타 자잘한 것들 [변경/추가된 기능] - XNXX 다운로드 - Pornhub 채널 다운로드 (#1320) - Sankaku Complex Post 다운로드 - imgur.com/r/ 다운로드 (#1498) - 주소바에 아무것도 입력하지 않고 다운로드 버튼 누르면 자동으로 클립보드에 있는 링크 다운로드하도록 수정 - 안정적인 다운로드를 위해 사이트별 최대 동시 작업 수 제한 (#1470) - 일부 화만 다운로드한 작업 "파일 삭제" 하면 필요한 경우 일부 폴더만 삭제하도록 수정 (#1415, #1507) - 히토미 / E(x)Hentai / 히요비 서버 자동으로 선택 시 특정 서버 제외하는 기능 (#1274) 옵션 (Options) - 설정 (Preferences)... - 히토미 / E(x)Hentai / 히요비 설정 - 서버 - 자동 - 우선순위... - weibo.cn URL 인식 (#1445) - French, Spanish 지원 추가 - Twitch & 아프리카TV 다운로드 방식 변경 (#1460) - 픽시브 북마크 id= 생략하면 자동으로 본인 북마크로 다운로드 - 최대 동시 작업 수 제한 (#1470) - 스트림 다운로드 안정화 - 트위터 비디오 다운로드 안정화 (#1493) - 첫 작업 목록 로딩이 모두 완료되면 다운로드 시작 하도록 수정 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7d 【Oct 31, 2019】 [버그 해결] - 작가명 복사 안 되는 문제 해결 (#1308, #1348) - 겔부루 "+" 들어간 태그 다운로드 안 되는 문제 해결 - 픽시브 로그인 안 되는 문제 해결 (#1322, #1332) - 폰허브 프리미엄 다운로드 안 되는 문제 해결 (#1296, #1335) - Bilibili 일부 다운로드 안 되는 문제 해결 (#1167, #1343) - 검색기에서 미리보기 안 보이는 문제 해결 (#1345) - 히토미 애니 다운로드 안 되는 문제 해결 - #1355 - 기타 자잘한 것들 [변경/추가된 기능] - "다시 시작" 하면 맨 위로 올리지 않고 제자리에 두도록 수정 - 그룹 기능 (#286, #1313) 작업 - 새 그룹 만들기 - 그룹 안의 모든 작업 다시 시작 (#1336) - 작업 목록 아이콘 보기 모드 제거 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7c 【Oct 22, 2019】 [버그 해결] - "폴더명 형식" 잘못 파싱하는 문제 해결 (#1243) - 픽시브 로그인 후 오랫동안 다운로드하지 않으면 다운로드 에러 뜨는 문제 해결 (#1244) - 제이마나 다운로드 안 되는 문제 해결 (#1250) - HiDPI 에서 작업이 겹치는 문제 해결 (#1256) - #1255 - HiDPI 에서 렉 걸리는 문제 해결 - xHamster 다른 도메인 인식하지 못하는 문제 해결 (#1268) - Pornhub 일부분 다운로드 안 되는 문제 해결 (#1289) - 로딩 중 응답없음 문제 해결 (#1292) - 저사양에서 검색 중 플로팅 미리보기 깜빡거리는 문제 해결 - 플로팅 미리보기 사라지지 않고 가끔씩 남아있는 문제 해결 - 히토미 다운로드 안 되는 문제 해결 (#1303) - 기타 자잘한 것들 [변경/추가된 기능] - 다음웹툰 다운로드 (#697, #912, #924, #1201) - imgur 다운로드 (#312) - 토렌트 다운로드 - 픽시브 제외 태그 (#1244) - 다운로드 안정화 - 통계 추가 도움말 - 통계... - DeviantArt mature content 다운로드 (#1272) - Pornhub 이미지 & 앨범 다운로드 (#1273) - 설정 파일 & HDS 파일 구조 변경 (구버전 호환) - ChromeDriver 위치 변경 - E(x)Hentai Content Warning 무시하고 다운로드 - 트위터 개별 트윗 다운로드 - 트위터 비디오 다운로드 안정화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7b 【Sep 29, 2019】 [버그 해결] - "작가 추천" - "뷰어" 에서 이미지 보이지 않는 문제 해결 - ".." 으로 끝나는 폴더명 문제 해결 (#1236) - 히토미 일부분 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 픽시브 검색 필터 더 자세히 적용되도록 수정 (인기순, 오래된 날짜순, 날짜 지정, 북마크 갯수 범위) (#1230) 픽시브 프리미엄 계정만 적용됨 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7a 【Sep 27, 2019】 [버그 해결] - 갤러리 정보 파일 생성 (info.txt) 체크하지 않아도 만들어지는 문제 해결 (#1180, #1197) - 검색기에서 갤러리 정보 보이지 않는 문제 해결 (#1181, #1224) - SankakuComplex 에서 파일 유형 제외 적용되지 않는 문제 해결 (#1183) - E(x)Hentai 에서 파일명 형식을 숫자로 하면 확장자 없이 다운로드 되는 문제 해결 - YouTube 일부분 소리 안 나오는 문제 해결 (#1107, #1194) - YouTube 다운로드 안 되는 문제 해결 (#1196) - Hanime 일부분 다운로드 안 되는 문제 해결 (#1175) - Hanime 썸네일 나오지 않는 문제 해결 - lhscan 다운로드 안 되는 문제 해결 (#1202) - 폴더명 끝에 "." 이 들어가면 생기는 문제 해결 (#1214, #1222) - 일부 환경에서 늦게 켜지는 문제 해결 (#1209) - 픽시브 새 URL 인식 못하는 문제 해결 (#1231) - 제목에 들어간 "/" 양쪽으로 공백이 늘어나는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 비디오 스트림 다운로드 안정화 - 개별 작업 다운로드 속도 표시 - lang==A?B:C; 폴더명 형식 규칙 추가 (#1197) - 컴퓨터 종료 시 자동으로 저장하고 종료 (#1197) - 아이콘 보기 모드 추가 옵션 (Options) - 보기 - 스크롤 미리보기 추가 - nhentai 에서 폴더명 형식 따르도록 수정 (#1225) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7 【Sep 7, 2019】 [버그 해결] - 검색기 페이지 수 필터링 안 되는 문제 해결 (#1047) - 유튜브 제목 가져오지 못 하는 문제 해결 (#1053, #1104) - 폴더명 형식에서 0:id 키워드 잘못 작동하는 문제 해결 (#1050) - 유튜브 일부분 60 FPS 다운로드 안 되는 문제 해결 (#1098) - DeviantArt 제대로 다운로드 안 되는 문제 해결 (#1099) - Referer에 Non-ASCII 문자가 들어가면 다운로드 안 되는 문제 해결 - 중복 이미지 찾기에서 일부분 잘못 인식하는 문제 해결 (#1091) - WorldCosplay 다운로드 안 되는 문제 해결 - XVideos 저화질로 다운로드 되는 문제 해결 (#1137) - xHamster 다른 도메인 인식하지 못하는 문제 해결 (#1165) - 트위터 일부 비디오 다운로드 안 되는 문제 해결 (#1028) - 핀터레스트 다운로드 안 되는 문제 해결 (#1087, #1173) - 기타 자잘한 것들 [변경/추가된 기능] - hanime.tv 다운로드 (#1083) - iwara 다운로드 (#675, #768, #1098) - xhamster 다운로드 (#1135) - 티비플 지원 중단 - 다운로더 목록 필터링 '태그 없음' 추가 (#600) - 코멘트 기능 (#1113) - 중복 이미지 찾기에서 여러줄 복사 기능 (#1090, #1118) - 기본 검색 순서 히토미 -> 히요비 -> E(x)Hentai 순으로 변경 - 서버 우선순위 변경 기능 (#1119) 옵션 (Options) - 설정 (Preferences)... - 히토미 / E(x)Hentai / 히요비 설정 - 서버 - 자동 - 우선순위... - DeviantArt 다운로드 안 되는 문제 해결 (#1130) - FFmpeg 에러 뜨는 문제 해결 (#1006, #1136) - 다시시도해서 Invalid 뜬 작업 폴더 열 수 있도록 수정 (#1113) - 메모리 최적화 - 트위터 일반적인 방법으론 보이지 않는 오래된 이미지도 다운로드 (#333, #1112, #1028) - 프록시 설정 재실행해도 유지 (#1156) - 개별 작업 일시 정지 기능 (#1028, #1101) - 트위터 트윗에 포함된 twitpic 다운로드 (#1155) - 트위터 비디오 포함되어있을 경우에도 읽는 속도 빠르게 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.6d 【Jul 27, 2019】 [버그 해결] - 언어를 바꾸고 스크립트를 가져오면 저장 폴더 콤보박스 텍스트 밀리는 문제 해결 - #847 - Hentai Foundry 필터 문제 해결 (#862) - 소설가가 되자 이름이 긴 화 다운로드 안 되는 문제 해결 (#863) - Cloudflare DDoS protection 우회 (#848, #823, #851) - 제이마나 다운로드 안 되는 문제 해결 (#894, #944, #992) - Ctrl + 방향키로 작업 순서를 변경하면 정렬 기준을 변경했을 때 반영되지 않는 문제 해결 - 페이스북 일부분 다운로드 안 되는 문제 해결 & 속도 개선 - 트위터 일부 동영상 다운로드 안 되는 문제 해결 (#896, #903) - 인스타그램 사진과 동영상 섞여있는 게시글 스냅샷으로 다운로드 되는 문제 해결 (#903) - 니코동 로그인 적용 안 되는 문제 해결 (#878, #886) - 니코동 팔로우 제한 영상 다운로드 안 되는 문제 해결 (#886) - #908 - 일부 환경에서 DPI 우회 안 되는 문제 해결 (#917) - 유튜브 다운로드 안 되는 문제 해결 (#927, #930, #943) - 네이버 웹툰 다운로드 안 되는 문제 해결 (#939) - 트위치 제목이 "." 으로 끝나면 비정상 작동하는 문제 해결 (#958) - #972 - 산카쿠컴플렉스 다운로드 안 되는 문제 해결 (#980, #981) - 히토미 파일 깨지는 문제 해결 (502 Bad Gateway) (#1024, #1025) - 클립보드 자동 추가 멈추는 문제 해결 (#1021) - 기타 자잘한 것들 [변경/추가된 기능] - 코믹워커 다운로드 (#890) - 소설가가되자 수정된 날짜 표시 (#845) - 중복 이미지 찾기 미리보기 크기 변경 (#871) - PhantomJS 위치 변경 (#888) - 잘못된 한글 태그 수정 (#898) - 기본 데이터 다운로드 속도 개선 - 겔부루 다운로드 제한 늘림 (#1017) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.6c 【May 16, 2019】 [버그 해결] - #741 - 폰트 문제 해결 (#738) - 아트스테이션 다운로드 안 되는 문제 해결 (#748, #773, #794, #807) - 히요비 다운로드 안 되는 문제 해결 (#758) - 히토미 애니메이션 다운로드 안 되는 문제 해결 (#763) - 유튜브 다운로드 안 되는 문제 해결 (#780, #799, #818) - #788 - 제이마나 다운로드 안 되는 문제 해결 (#808) - 니코동 프리미엄 계정 적용되지 않는 문제 해결 (#793, #805) - XP에서 유튜브 변환 안 되는 문제 해결 (#818) - 유튜브 채널 일부부만 다운로드 되는 문제 해결 - #831 - XVideos 다운로드 안 되는 문제 해결 - 픽시브 코믹 WEBP로 다운로드 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - Hentai Foundry 다운로드 (#256, #593, #743, #812) - 낮토끼 지원 중단 - 중국어 추가 (#738) - 익스플로러 잘못된 URL 지원 (#786) - 마나모아 오래된 URL 리다이렉트 - #823 - 유튜브 https://www.youtube.com/playlist?list=xxxxxxx 만 플레이리스트 다운로드하도록 수정 (#827) - 메모리 최적화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.6b 【Apr 15, 2019】 [버그 해결] - 히토미 다운로드 안 되는 문제 해결 (#700, #703, #706, #714, #715, #717, #718, #719, #720, #733) - 픽시브 다운로드 안 되는 문제 해결 (#701) - 마나모아 이미지 없는 화 실패하는 문제 해결 (#710) - 마나모아 일부분 다운로드 안 되는 문제 해결 (#731) - 프로그램 경로에 한글이나 특수문자가 들어가면 [브라우저로 보기] 기능이 작동하지 않는 문제 해결 - 히요비 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 망가쇼미 지원 중단 - 마나모아 새로운 도메인 지원 (#712) - #698 - #709 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.6a 【Apr 7, 2019】 [버그 해결] - 작가 추천 기능 작동하지 않는 문제 해결 (#588) - #556, #574 - 도움말 - 정보 나오지 않는 문제 해결 - #578 - 네이버 웹툰 컷툰 다운로드 안 되는 문제 해결 (#576) - PDF 생성 안 되는 문제 해결 (#582) - PDF 생성 중 작업을 삭제하면 멈추지 않는 문제 해결 - 히토미 일부분 다운로드 안 되는 문제 해결 (#555, #610, #619, #622) - 히요비 다운로드 안 되는 문제 해결 (#603) - 제이마나 일부분 다운로드 안 되는 문제 해결 (#605) - 픽시브 움짤 일부 변환 안 되는 문제 해결(#611) - 네이버 블로그 _blur 붙는 문제 해결 (#612) - Goodbyedpi 프로세스 남아서 실행되지 않는 문제 해결 (#619) - ; 들어간 URL 다운로드 안 되는 문제 해결 (#623) - 망가쇼미 다운로드 안 되는 문제 해결 (#624, #626) - 플로팅 미리보기 크기 문제 해결 (#633) - E(x)Hentai 다운로드 안 되는 문제 해결 (#638, #640, #643, #661) - 설정 저장 오류 해결 (#647) - 페이지 지정 다운로드 창 읽는 중 닫으면 프로그램 종료되는 문제 해결 - #673 - 네이버 웹툰 스마트툰 다운로드 안 되는 문제 해결 (#679) - 유튜브 60FPS 다운로드 안 되는 문제 해결 (#683) - 픽시브 다운로드 안 되는 문제 해결 (#686) - 기타 자잘한 것들 [변경/추가된 기능] - 트위치 다운로드 (#652) - 픽시브 키워드 다운로드 (#602) - 마나모아 다운로드 (#669) - 다운로드 속도 표시 - 최대 다운로드 속도 설정 옵션 - 설정 - 고급 설정 - 최대 다운로드 속도 - 네이버 웹툰 선택 화 다운로드 (#576) - 이미지 읽기 속도 향상 - PDF 스킵 (#585) - 설정 저장 중 예기치 않게 종료 된 경우에, 다시 실행할 때 설정 파일 복구 (#598) - 태그명 설정 (#600) - 망가쇼미 IP 주소 지원 (#642) - 음악 파일 앨범아트 지원 (#644) 옵션 - 설정 - 고급 설정 - 음악 파일에 앨범아트 삽입 - 잠금 기능 (#646) - 저장이 필요할때만 묻도록 수정 (#654, #667) - #684 - #689 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.6 【Feb 24, 2019】 [버그 해결] - 망가쇼미 이미지 잘리는 문제 해결 (#460) - 히토미 검색기 기본데이터 다운로드 안 되는 문제 해결 (#463, #466, #476, #479, #493, #494) - 소설가가 되자 단편 다운로드 안 되는 문제 해결 (#464) - info.txt 압축파일에 포함되지 않는 문제 해결 (#471) - 픽시브 움짤 많으면 실패하는 문제 해결 (#475) - 유튜브 일부 플레이어에서 소리 인식하지 못하는 문제 해결 (#480) - 망가쇼미 Timeout 문제 해결 (#488) - 망가쇼미 프록시 적용되지 않는 문제 해결 (#502) - 망가쇼미 ? 포함된 주소의 파일 다운로드 안 되는 문제 해결 - #522 - 망가쇼미 가장자리 검은줄 생기는 문제 해결 (#538) - 비리비리 다운로드 안 되는 문제 해결 (#536) - 니코동 일부 환경에서 다운로드 안 되는 문제 해결 (#544) - 섬네일 드래그 문제 해결 (#553) - 일부 환경에서 StackHash_0a9e 오류 뜨는 문제 해결 (#554) - 히요비 다운로드 안 되는 문제 해결 (#555) - 제이미나 다운로드 안 되는 문제 해결 (#560) - 마리망 다운로드 안 되는 문제 해결 (#562) - 기타 자잘한 것들 [변경/추가된 기능] - #458 - 압축파일 연결 프로그램 설정 (#489) 옵션 - 설정 - 고급 설정 - 압축파일 연결 프로그램 - 작업 목록 정렬 기능 (#491) - [첫 번째 파일 열기] 할 때 원본 파일이 삭제된 경우 압축 파일 열리게 수정 - 망가쇼미 새 도메인 지원 (#513) - [다시 시작] 할 때 지워진 파일 제외하고 다운로드 (#458, #519) - 마리망 여러 화 있는 작품 다운로드 (#520) - 자동으로 관리자 권한으로 실행 시도 (DPI 우회 시 필요) DPI 우회가 필요 없다면 취소하고 실행하셔도 됩니다 - DPI 우회 (Windows7 이상) (#515) 옵션 - 설정 - 고급 설정 - DPI 우회 - 플로팅 미리보기 CPU 사용량 최적화 - 작업표시줄 색 표시 방식 변경 (#553) - 중복 실행 시 먼저 실행된 프로그램 띄우기 (#553) - 부팅 시 실행 (#553) 옵션 - 설정 - 고급 설정 - 부팅 시 실행 - 다운로드 시 404 Not Found 뜨면 한번 더 시도하도록 수정 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.5d 【Feb 3, 2019】 [버그 해결] - 망가쇼미 일부 다운로드 안 되는 문제 해결 (#397) - 일부 환경에서 한글 폰트 깨지는 문제 해결 (#406) - 이미지 크기 조절 문제 해결 (#409) - 이미지 크기 조절 후 변경된 파일 크기가 반영되지 않는 문제 해결 - 망가쇼미 NEW 붙은 화 다운로드 안 되는 문제 해결 (#417) - 망가쇼미 NEW 붙는 문제 해결 (#421) - 유튜브 일부 다운로드 안 되는 문제 해결 (#425, #444) - 히요비 다운로드 안 되는 문제 해결 - 인스타그램 제대로 다운로드 안 되는 문제 해결 (#429) - 저장 폴더명 오류 해결 (#430) - 제이마나 작가명 잘못 인식하는 문제 해결 (#433) - 히토미 애니메이션 다운로드 안 되는 문제 해결 - E(x)Hentai Lo-Fi 갤러리 인식하지 못하는 문제 해결 - 사용자 이름에 한글이나 특수문자가 들어갔을 때 유튜브 / 우고이라 등 변환되지 않는 문제 해결 (#437) - weibo 일부 주소 인식하지 못하는 문제 해결 (#445) - lhscan 불안정한 문제 해결 - 망가쇼미 최신화 제대로 다운로드되지 않는 문제 해결 (#448, #451) - 히요비 다운로드 안 되는 문제 해결 (#449) - 검색기 기본 데이터 다운로드 안 되는 문제 해결 (#452, #453) - 기타 자잘한 것들 [변경/추가된 기능] - 소설가가 되자 다운로드 (#411) - 망가록 다운로드 - 히요비 non-h 지원 중단 - 이미지 포맷 변환 (#409) 옵션 - 설정 - 고급 설정 - 이미지 포맷 변환 - 비리비리 고화질 다운로드 (#418) - 비리비리 다운로드 속도 개선 - 비리비리 플레이리스트 다운로드 (#418) - 사이트 별 저장 폴더 지정 (#423) - 유튜브 음원 다운로드 음질 조정 (#21) 옵션 - 설정 - 유튜브 - 음질 - 유튜브 변환 속도 향상 (#425, #444) - 히토미 애니메이션 다운로드 속도 개선 - PDF 생성 (#399, #441) 옵션 - 설정 - 고급 설정 - PDF 생성 - 유튜브 자막 다운로드 (#444) 옵션 - 설정 - 유튜브 - 자막 - 동영상 파일도 섬네일 보이게 수정 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.5c 【Jan 9, 2019】 [버그 해결] - 텍스트 필드 실행 취소 / 다시 실행 문제 - 네이버 블로그 blog.me 형식의 주소 인식하지 못하는 문제 해결 - 제이마나 다운로드 안 되는 문제 해결 (#371) - 유튜브 다운로드 안정화 - 다운로더 목록에서 섬네일 드래그 & 드롭 시 파일명에 한글이나 특수문자가 들어가면 동작하지 않는 문제 해결 - 유튜브 변환 중 종료할 경우 FFmpeg 프로세스가 남는 문제 해결 - 망가쇼미 다운로드 안 되는 문제 해결 (#369, #370) - 유튜브 프록시 적용되지 않는 문제 해결 - 파이어폭스 웹브라우저에서 [브라우저로 보기]가 동작하지 않는 문제 해결 - FFmpeg 초기화 문제 해결 - 산카쿠컴플렉스 일부 환경에서 다운로드 안 되는 문제 해결 (#380) - 제이마나 다운로드 안 되는 문제 해결 (#378) - 산카쿠컴플렉스 & 들어가는 태그 다운로드 안 되는 문제 해결 (#382) - 히토미 일부 삭제된 갤러리 다운로드 안 되는 문제 해결 - 미리보기 체크하지 않고 검색했을 때 이미 다운로드한 작품 표시하지 못하는 문제 해결 - 작업 추가할 때 프로그램이 프리징 되는 문제 해결 - 경로에 한글이나 특수문자 있으면 작업 정보를 볼 수 없는 문제 해결 (#367, #379) - 페이지 지정 다운로드 문제 해결 (#389) - #367 - #389 - 기타 자잘한 것들 [변경/추가된 기능] - 저장할 때 주소 입력창 텍스트도 저장 - 유튜브 / 비메오 / 폰허브 / XVideos / 니코동 다운로드 성능 향상 - 제이마나 이미 다운로드한 화 스킵 - 제이마나 선택 화 다운로드 - 제이마나 폴더명 형식 변경 - 망가쇼미 폴더명 형식 변경 - 인스타그램 XP에서도 동작하도록 수정 (#362) - 유튜브 XP에서도 동작하도록 수정 (#358) - 픽시브 움짤 품질 & 성능 향상 - Win10 미만에서 픽시브 움짤 WEBP 지원 - 대기 중인 작업도 타입 표시 - 망가쇼미 개별화 주소 넣으면 해당 화만 다운로드 (#366) - 드래그 & 드롭으로 작업 순서 변경할 때 내용 보이게 수정 - 망가쇼미 폴더명 형식 설정 (#372, #375) - [다시 시작] 했을 때 대기 중에도 폴더 열거나 삭제 가능하게 수정 - 태그 기능 - #398 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.5b 【Dec 17, 2018】 [버그 해결] - #310, #311, #320, #324 - 데비안아트 다운로드 안 되는 문제 해결 (#342) - 유튜브 MP3 다운로드 안 되는 문제 해결 - 자동 저장 10배 빠르게 되는 문제 해결 - 제목이 없는 갤러리 에러 뜨는 문제 해결 (#328) - E(x)hentai 일부 이미지 다운로드 안 되는 문제 해결 - 저장 폴더가 상대 경로이고 다운로드 중 폴더 / 파일 선택창을 탐색할 경우, 저장 경로가 어긋나는 문제 해결 - 니코동 다운로드 안 되는 문제 해결 - HiDPI 문제 - 인스타그램 확장자 문제 해결 (#349) - 핀터레스트 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - nhentai 다운로드 - 마리망 다운로드 - Pawoo 다운로드 (#341) - 망가쇼미 다운로드 - 마루마루 지원 중단 - 밤툰 지원 중단 - 네이버 블로그 원본 이미지 다운로드 (#318) - 사운드클라우드 Tracks / Playlists 다운로드 - 업데이트 체크 안정화 - 단일 파일 다운로드 메시지 제거 - 여러 작업 선택 시 빠른 도구 제공 - 숨김 키 옵션 - 설정 - 고급 설정 - 숨김 키 - 선택 화 다운로드 (#330, #334, #345) 도움말 - 사용법... (F1) - 선택 화 다운로드 참고 - 히토미 Redirect 대응 - 이미 다운로드한 화 스킵 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.5a 【Nov 23, 2018】 [버그 해결] - 폴더명 형식 문제 해결 (#248) - 폴더명 길이가 255를 초과하면 다운로드되지 않는 문제 해결 (#260, #272) - 대문자 북마크 문제 해결 - 히요비 다운로드 안 되는 문제 해결 (#270, #285) - 다른 작업 다운로드 도중 리캡챠 풀지 못하는 문제 해결 (#251) - 갤부루 다중 태그 다운로드 안 되는 문제 해결 (#266) - #268 - 자동 업데이트 진행 안 되는 버그 해결 - URL 내에 maru_ 등이 들어있을 때 생기는 문제 해결 (#278, #285, #288) - 산카쿠 컴플렉스 일본어 페이지 인식 안 되는 문제 해결 - 비리비리 페이지 있는 영상 다운로드 안 되는 문제 해결 (#52) - 다운로드 파일이 0 개일 경우 info 파일 생성되지 않는 문제 해결 (#283) - E(x)hentai 특정 페이지 링크를 다운로드 시도하면 일부분만 다운로드되는 문제 해결 (#212) - reCAPTCHA 풀리지 않는 문제 해결 (#289, #292) - 유튜브 일부 영상 다운로드 안되는 문제 해결 (#306) - E(x)hentai 다운로드 중 삭제할 때 파일 일부분 남는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 검색 순서 변경 (#245) 검색기 - 옵션 - 검색 순서 - 다운로드 날짜 표시 (#265) 옵션 - 설정 - 고급 설정 - 다운로드 날짜 표시 - 픽시브 움짤 스킵 (#273) - 느린 네트워크 환경 대응 (응답 대기 시간 변경: 12초 -> 36초) - 다운로드 완료 후 자동 제거 (#232) 옵션 - 설정 - 고급 설정 - 다운로드 완료 후 자동 제거 - 검색기 아이콘 보기 모드에서도 이미 다운로드한 작품 표시 - 검색기 아이콘 보기 모드에서도 갤러리 넘버 보이게 수정 - E(x)hentai 이미 다운로드 된 파일 스킵 - 유튜브 해상도 선택 (#21, #207, #221, #295) 옵션 - 설정 - 유튜브 - 해상도 - 브라우저로 보기 서브 폴더 별로 페이지 만들도록 변경 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.5 【Sep 28, 2018】 [버그 해결] - 인스타그램 이름 없는 경우 다운로드 안 되는 문제 해결 (#184) - 유튜브 일부 MP3 다운로드 안 되는 문제 해결 (#186) - https://www.deviantart.com/*/ 형식의 갤러리 다운로드 안 되는 문제 해결 (#191) - 데비안아트 일부 갤러리 다운로드 안 되는 문제 해결 (#204) - 데비안아트 이름을 얻지 못했다고 뜨는 문제 해결 - 긴 북마크가 지워지지 않는 문제 해결 - 검색기 검색 중 플로팅 미리보기 깜빡이는 문제 해결 - 산카쿠 컴플렉스 Non-ASCII URL 인식 못하는 문제 해결 - 언어 변경할 때 다운되는 문제 해결 - 일부 컴퓨터에서 인스타그램 다운로드 안 되는 문제 해결 (#209) - 티비플 파일 확장자 잘못되는 문제 해결 - 겔부루 특수문자 들어간 태그 다운로드 안 되는 문제 해결 (#217) - 간단 검색에서 Enter 눌러서 검색했을 때 두번 연속 검색되는 문제 해결 - 트위터 일부 동영상 다운로드 안 되는 문제 해결 (#219) - 유튜브 일부 다운로드 안 되는 문제 해결 (#235) - ExHentai 다운로드 안 되는 문제 해결 - E(x)Hentai 일부 갤러리 다운로드 안 되는 문제 해결 (#223) - E(x)Hentai 일부 파일 다운로드 안 되는 문제 해결 (#236) - 비메오 일부 동영상 다운로드 안 되는 문제 해결 - 비리비리 제목 오류 문제 해결 - #238 - 기타 자잘한 것들 [변경/추가된 기능] - 네이버 웹툰 다운로드 (#185) - 히요비 다운로드 - 마나스페이스 지원 중단 - 스크립트 (#206) 메뉴 - 스크립트... 도움말 - 사용법... (F1) - 스크립트 참고 - 검색기 제목 목사 (#188) - 작가 합쳐서 불러오기 (#113) 검색기 - ★ - 작가 합쳐서 불러오기 - 산카쿠 컴플렉스 페이지 제한 없앰 (#189, #190) - 검색기 목록 보기 모드에서, 오른쪽 방향키로도 [다운로드 & 삭제] 할 수 있도록 수정 (#196) - 검색기 아이콘 보기 모드에서, 마우스를 올리면 정보가 보이게 수정 - 검색기 아이콘 보기 모드에서, 선택한 항목이 잘 구별되게 수정 - 데비안아트 플래시 다운로드 - 픽시브 / 트위터에서 이미 다운로드 했지만 닉네임 변경으로 폴더명이 일치하지 않는 경우 새 폴더명으로 변경해서 다운로드 - 파일 유형 제외 (#228) 옵션 - 설정 - 고급 설정 - 파일 유형 제외 - 이미 다운로드한 작품 검색기 검색 결과에서 표시 (#211, #232) - 검색기 목록 필터에 "done:" 추가 도움말 - 사용법... (F1) - 검색기 목록 필터링 참고 - 단일 파일 사이트 최대 동시 8개 다운로드 (Youtube, Niconico, etc.) - 중복 이미지 찾기 메뉴 - 중복 이미지 찾기... - 작업들 내보내기 / 가져오기 파일 - 선택된 작업들 내보내기 / 작업들 가져오기 - 다운로더 목록 순서 변경 ([Ctrl + Home], [Ctrl + End]) 도움말 - 사용법... (F1) - 다운로더 목록 순서 변경 참고 - 동영상 파일명 형식 (#233) 옵션 - 설정 - 유튜브 - 파일명 형식 - 자동 저장 (#242) 옵션 - 설정 - 고급 설정 - 자동 저장 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.4 【Aug 2, 2018】 [버그 해결] - 다운로더 목록에서 작업을 선택하고 다른 곳으로 스크롤 한 뒤에 새로 작업을 추가하거나 다른 작업의 제목이 바뀌면 선택한 작업으로 스크롤 되는 문제 해결 - 일부 컴퓨터에서 유튜브 다운로드 안 되는 문제 해결 (#149) - 일부 컴퓨터에서 픽시브, 마루마루 다운로드 안 되는 문제 해결 (#73, #133, #149, #167) - 파일 다운로드 안 되는 문제 해결 - 다운로드 버튼에 마우스 올리면 버벅이는 문제 해결 - 일부 컴퓨터에서 폰트 깨지는 문제 해결 (#147) - E(x)hentai 다시 시작하면 404 Not Found 뜨는 문제 해결 (#177) - 니코동 "nicovideo.jp/watch/so000000" 형식의 주소 인식하지 못하는 문제 해결 - 다운로더 필터를 킨 후에 목록 내용이 바뀌었을 때 반영되지 않는 문제 해결 - 트위터 동영상 다운로드 안 되는 문제 해결 (#172) - 유튜브 일부 동영상 720p 미만으로 다운로드 되는 문제 해결 (#176) - 태그 자동완성 순서 잘못되는 문제 해결 - 일부 제목 깨지는 문제 해결 (#179) - 일부 미리보기 안 보이는 문제 해결 (#179) - E(x)hentai 최근 갤러리 넘버 찾지 못하는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 산카쿠 컴플렉스 다운로드 (#109, #120, #155) - 사운드클라우드 다운로드 - 작가나 그룹이 둘일 경우 생략하지 않고 모두 표시하도록 수정 (#148) - 다운로드 대기 중인 것도 중복 체크 (#150) - 다운로더와 검색기를 작업표시줄에 서로 다른 창으로 표시되게 수정 (#151) - 마루마루 오래된 만화 로딩 더 빠르게 - 목록에서 몇 개 선택했는지 표시 (#153) - 북마크 버튼 토글로 동작하게 바꿈 (#153) - 검색기에서 링크 여는 기능 (#153) - HiDPI 관련 - 메뉴 한글화 안 된 부분 고침 - 키패드 Enter도 인식하게 수정 (#159) - 클립보드에서 자동 추가 사이트 선택 (#159) - 다운로더 목록 필터에 "bad:" 추가 도움말 - 사용법... (F1) - 다운로더 목록 필터링 참고 - 압축과 원본 폴더 삭제를 체크하고 다운로드 할 때, 이미 다운로드된 것 스킵 (#47, #62, #161) - [50개씩 끊어서 검색]을 체크하지 않았을 경우에 1000 개 씩 끊어서 검색하도록 수정 - 다운로더 목록 순서 변경 (#159) 도움말 - 사용법... (F1) - 다운로더 목록 순서 변경 참고 - 검색기 목록 필터링 (#161, #178) 도움말 - 사용법... (F1) - 검색기 목록 필터링 참고 - 픽시브 &type= 인식 (#167) - 일시 정지 기능 (#170) - 'dup:'으로 다운로더 목록 필터링할 때, 중복된 것이 하나만 남게 되면 자동으로 목록에서 사라지게 바꿈 (#170) - 미리보기 크기 조절 (#174) - 검색기 아이콘 보기 모드 검색기 - 옵션 - 보기 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.3d 【Jul 6, 2018】 [버그 해결] - 폴더 형식의 / 가 인식되지 않는 문제 해결 (#143) - 검색기 기본 데이터 다운로드 안 되는 문제 해결 (#144, #146) - 다중모니터 환경에서 플로팅 미리보기가 제대로 동작하지 않는 문제 해결 (#142) - 기타 자잘한 것들 [변경/추가된 기능] - 다운로더 목록 필터링을 켜고 끌 때 선택된 작업이 유지되게 수정 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.3c 【Jul 4, 2018】 [버그 해결] - 여러개 한꺼번에 추가할 때 버벅이는 문제 완화 - 403 Forbidden 다운로드 안 되는 문제 해결 (#141) - 기타 자잘한 것들 [변경/추가된 기능] - 마나스페이스 암호 걸린 만화 다운로드 - 검색기 데이터 언제 받았는지 표시하고 일주일 이상 오래됐다면 알려주도록 수정 - 작가 추천 기능에서, 표지 볼 수 있는 기능 결과 화면에서 [Viewer...] - 검색기 중복 제거 기능에서 작가 이름이 같을 때만 중복으로 판단하도록 변경 (#138) - 검색기 갤러리 넘버 복사 (#138) - 다운로더 창에서 Ctrl + Tab 으로 툴 켜고 끄기 - 다운로더 목록에서 태그로 필터링 (#135) 도움말 - 사용법... (F1) - 다운로더 목록 필터링 참고 - CBZ 압축 (#139) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.3b 【Jun 21, 2018】 [버그 해결] - 마루마루 다운로드 안 되는 문제 해결 (#123, #124) - 압축파일 경로가 이상하게 되는 문제 해결 - 유튜브 섬네일 안 보이는 문제 해결 - E-Hentai 일부 갤러리 다운로드 안 되는 문제 해결 - 잘못된 작업을 완료됨으로 표시할 때 에러 뜨는 문제 해결 - 검색기 기본 데이터 다운로드 안 되는 문제 해결 (#131) - 기타 자잘한 것들 [변경/추가된 기능] - 마나스페이스 다운로드 (#129) - 파일 다운로드 예: file_https://hitomi.la/logo.png - 플로팅 이미지 크기 조절 (옵션 - 설정 - 일반 - 플로팅 미리보기) - 검색기 중복 제거 (검색기 - 옵션 - 중복 제거) (#106) - 디스크 공간 부족시 경고 - 목록 저장 / 불러오기 속도 향상 - 디스크 공간 부족 또는 다른 이유로 목록을 저장 못할 시 경고 메시지 - 작업표시줄에서 진행 상황 보이게 (Windows 7 이상) - 도움말 - 정보 & 버전 확인 & 통계 하나로 합침 - 끊어서 검색하는 기능 (검색기 - 옵션 - 끊어서 검색) (#42) - E-Hentai 좀 더 안정적으로 다운로드하게 수정 (#126) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.3a 【Jun 7, 2018】 [버그 해결] - "저장 폴더에 있는 모든 갤러리 넘버 복사" 기능이 압축파일을 인식하지 못하는 문제 해결 (#96) - 작가 추천 기능에서 압축파일로 된 갤러리를 인식하지 못하는 문제 해결 (#96) - 폴더명 형식에 "/" 가 들어가면 인식하지 못하는 문제 해결 (#92, #98, #104) - #101 - 메모리 사용량 ERR 뜨는 문제 해결 (#118) - 작가 이름 소문자로 되는 문제 해결 (#97) - 핀터레스트 다운 안 되는 문제 해결 (#84) - 겔부루 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 자동 업데이트 - 픽시브 움짤 WEBP 변환 - 유튜브 채널 / 플레이리스트 다운로드 (#107) - 픽시브 태그 필터링 - 작가 추천 기능에서, 소괄호 또는 대괄호 안에 숫자가 들어있기만 하면 인식 되도록 수정 (#113) - 작가 추천 기능에서, 목록을 저장하고 불러오는 기능 (#95) - 마루마루 이미 다운로드 된 화 스킵 (#105) 제대로 다운되지 않은 화가 있다면 해당 화 폴더를 삭제하고 다시 시도해주세요 - 갤러리 넘버 복사 더 빠르게 - 검색기 - 고급 검색에서 검색 범위 수치 직접 입력할 수 있게 수정 (#103) - 북마크 이름 순 정렬 (#115), 초기화 - 히토미 제외 태그 (#110) 옵션 - 설정 - 히토미 - 제외 태그 - 검색기 태그 번역 - 완료됨으로 강제 설정하는 기능 (#116) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.3 【May 8, 2018】 [버그 해결] - 밤토끼 메인 페이지 입력할 시 오류 뜨는 문제 해결 - 밤토끼 한글 URL 인식 못하는 문제 해결 (#74) - 프로그램 종료 후 프로세스가 종료되지 않고 남아있는 문제 해결 - 마루마루 작가명을 읽지 못하는 문제 해결 - and가 들어간 단어를 제목 검색하면 오류 뜨는 문제 해결 - HiDPI에서 통계 항목이 작게 보이는 문제 해결 - 인스타그램 다운로드 안 되는 문제 해결 (#83, #87) - 제목에 by 들어가면 뒷부분 잘리는 문제 해결 - 유튜브 다운로드 실패 줄임 - 폴더명 형식에 0:id와 id가 동시에 들어가면 폴더 이름이 이상하게 되는 문제 해결 - Bilibili 제목을 제대로 읽지 못하는 문제 해결 - Color table 가진 이미지가 섬네일에서 깨지는 문제 해결 - 윈도우 10 UTF-8 인코딩 관련 오류 해결 (#86) - 기타 자잘한 것들 [변경/추가된 기능] - 플리커 다운로드 (#77) - ArtStation 다운로드 - 니코동 다운로드 - 핀터레스트 다운로드 (#84) - 머신러닝 기반 작가 추천 기능 (메뉴 - 작가 추천...) - 통계에서 점수 열 없앰 - 목록에서 제거할 때도 확인 창 뜨도록 수정 - 이미 존재하는 단일 동영상 파일 다운로드 하지 않게 수정 - 다운로더 목록 필터링 기능 추가 ([사용법...(F1)] 참고) - 설정 - 히토미 - 갤러리 정보 텍스트 파일로 저장 (#79) - '클립보드에서 자동 추가' 첫번째 링크 다운로드 생략되지 않게 수정 - 검색기 검색어에서 Korean, English 등 언어도 자동완성 되게 수정 - 태그 자동완성에서, "male:" 을 입력하면 "female:" 을 제외하고 보이게 수정 - 간단 검색에서 N/A인 언어 검색 가능 ([사용법...(F1)] 참고) - "다운로드가 완료되면 알림" 기능 삭제 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.2b 【Mar 30, 2018】 [버그 해결] - 히토미 애니메이션 삭제되지 않는 문제 해결 - 특정 상황에서 '첫번째 이미지 열기' 가 작동하지 않는 문제 해결 - 일부 컴퓨터에서 reCAPTCHA 뚫기가 제대로 동작하지 않는 문제 해결 - 밤토끼 다운로드 안되는 문제 해결 (#66) - 마루마루 동시에 다운로드 시 섞여서 다운로드 되는 문제 해결 (#65) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.2a 【Feb 22, 2018】 [버그 해결] - 이미 다운로드 완료된 것도 무조건 덮어씌우는 문제 해결 - wasabisyrup, shencomics, yuncomics 주소를 입력했을 때 실패하는 문제 해결 - 종료 후 일정시간동안 다시 실행이 안되는 문제 해결 - 클립보드에서 자동 추가 기능이 작동하지 않는 문제 해결 (#53) - 제목 검색 안되는 문제 해결 (#50) - 검색기를 많이 사용하면 프로그램이 작동 중지되는 문제 해결 (메모리 누수 문제) (#54) - 기타 자잘한 것들 [변경/추가된 기능] - 마루마루 한글 캡차 지원 (수동) (#57) - 간단 검색 ([사용법...(F1)] 참고) - 사이트 별 압축 설정 (설정 - 압축) - 자동완성 매칭 방식 변경 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.2 【Feb 11, 2018】 [버그 해결] - 검색기 속도, 버벅임 개선 (#42) - 다운로더 버벅임 개선 - https://www.pixiv.net/member.php?id=xxxxxx 형식의 주소 인식 못하는 문제 해결 (#43) - E-Hentai, ExHentai 조금 더 안정적으로 받게 - 폴더 이름이 "."으로 끝나면 다운로드 안되는 문제 해결 - 비메오 가끔 오류 뜨는 문제 해결 - 마루마루 빈 페이지 reCAPTCHA로 잘못 인식하는 문제 해결 - 유튜브 다운로드 안되는 문제 해결 (패턴 업데이트) - reCAPTCHA 뚫기 안되는 문제 해결 - reCAPTCHA 뚫는 도중 종료하면 프로그램을 다시 킬 수 없는 문제 (브라우저가 정상적으로 종료되지 않는 문제) 해결 - reCAPTCHA 브라우저 첫 실행에서 에러 뜨는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 이미지 읽을 때 메모리/속도 개선 - 픽시브 GIF 변환 메모리/속도 개선 - 불완전한 작업 자동으로 다시 시작하는 기능 (고급 설정 - 불완전한 작업 자동으로 다시 시작) (#41) - 파일 크기가 0일 때 다시 시도 - Access denied 떴을 때 다시 시도 - Cloudflare 우회 - Trend Micro 우회 - and, or, not, ",", +, - 같은 예약어가 들어간 단어를 자동완성하면 큰따옴표 붙게 수정 (예: spice and wolf --> "spice and wolf") - and, or, not, ",", +, - 같은 예약어가 들어가지 않은 단어를 복사하면 큰따옴표 붙지 않게 수정 (예: "heroes of the storm" --> heroes of the storm) - wasabisyrup, shencomics, yuncomics 입력해도 되게 수정 - Finder에서 갯수 많은 순으로 정렬 - 이미지 최대 크기 지정 (#44) - 페이지 지정 다운로드 (#44) - 마루마루 선택 화 다운로드 - 겔부루 다운로드 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.1b 【Jan 23, 2018】 [버그 해결] - 히토미 다운로드 제대로 안되는 문제 해결 (#31, #32, #39, #40) - 바이러스 오진 줄임 (#27, #31, #34, #38) - 일부 컴퓨터에서 검색기 섬네일 안 보이는 문제 해결 (#32) - 기타 자잘한 것들 [변경/추가된 기능] - 마루마루 중간에 404페이지 끼어있으면 건너뜀 (#36) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.1a 【Jan 21, 2018】 [버그 해결] - V3에서 multiprocessing.pyd를 오진해서 해당 모듈 빼고 만듦 (#29) -------------------------------------------------------------------------------------------------------------------------------------------- 2.1 【Jan 22, 2018】 [버그 해결] - 가끔씩 클립보드에 복사가 제대로 안되던 문제 해결 - '클립보드에서 자동 추가'를 키고 여러 주소를 연속해서 빠르게 복사할 경우 몇 개를 인식하지 못하는 문제 해결 (https://git.io/vN2vW) - 마루마루 http://marumaru.in/b/mangaup/... 형식의 주소를 입력할 시 제목을 잘못 읽는 문제 해결 - 마루마루 http://marumaru.in/b/mangaup/... 형식의 주소를 입력할 시 reCAPTCHA 오류 뜨는 문제 해결 - 다운로드 중 [저장&종료]한 후에 다시 시작하면 잘못된 폴더에 저장하는 문제 해결 (https://git.io/vN2v4) - 빈 목록에서 우 클릭하면 에러 뜨는 문제 해결 - CPU 점유율 높게 유지되는 문제 해결 - 히토미 다운로드 안되는 문제 해결 (https://git.io/vN2vB, https://git.io/vN2vR) - 기타 자잘한 것들 [변경/추가된 기능] - 검색기 목록에서 타입이나 태그 등을 바로 볼 수 있게 수정 - 히토미 계열 다운로드 시 파일 이름을 0000.jpg, 0001.jpg와 같이 바꾸어서 저장하는 기능 (옵션 - 설정 - 히토미 설정 - 파일 이름 형식 - 숫자) - 내장 이미지 뷰어 - 이미지를 더 빠르게 읽음 - 패키징 툴을 바꿈 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.0 【Jan 10, 2018】 [버그 해결] - 한 작업의 파일 갯수가 너무 많을 때, 정보를 보면 메모리 부족으로 에러뜨는 문제 해결 - 다운로드가 정상적으로 완료되었는데도 불완전한 작업으로 잘못 표시되는 문제 해결 - 시리즈명 등에 and, or, not, +, - 등이 들어가면 어떻게 해도 검색이 불가능한 문제 해결 (이제 큰따옴표로 묶어주면 검색 가능) 예: spice and wolf -> "spice and wolf" - 섬네일 이미지 읽을 때 버벅이는 문제 해결 - 일부 컴퓨터에서 유튜브 다운로드 안되는 문제 해결 - 유튜브 바뀐 패턴 적용 - 기타 자잘한 것들 [변경/추가된 기능] - 마루마루 reCAPTCHA 뚫기 (시험 기능; 고급 설정에서 On/Off 가능) - 한 파일 다운로드 중 연결이 끊어지는 경우 끊어진 지점부터 받음 - 폴더 열기 버튼을 누를 때, 폴더가 없고 압축파일만 있는 경우 압축파일이 있는 폴더를 엶 - 일반 설정 - 언어에 English 추가 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9e 【Dec 29, 2017】 [버그 해결] - 업데이트 링크 잘못돼서 고침 (v1.9 ~ v1.9d) - 텀블러 이름이 깨지는 문제 해결 - 파일 크기 체크하는 중에 파일을 지우면 에러 뜨는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 유튜브 음원(mp3) 다운로드 - Bilibili 다운로드 - ExHentai 다운로드 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9d 【Dec 21, 2017】 [버그 해결] - 일부 컴퓨터에서 주소입력창이 안 보이는 문제 해결 - 텀블러 다운로드 안되는 문제 해결 - 개별 파일이 덜 받아진 상태에서 완료되는 문제 해결 (파일 사이즈를 체크해서 덜 받아진 경우 다시 시도) - 기타 자잘한 것들 [변경/추가된 기능] - Pornhub 다운로드 - 작업 추가 부하 줄임 - 삭제시 폴더 / 압축파일 선택해서 지울 수 있게 - 검색기 작가 / 시리즈 / 캐릭터 이름 복사 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9c 【Dec 6, 2017】 [버그 해결] - 픽시브 움짤 사이즈가 600x600 이하로 받아지는 문제 해결 - 비메오 오래된 동영상 다운로드 안되는 문제 해결 - 다운로드 중 삭제 시 가끔씩 파일이 남아있는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 픽시브 움짤 변환 시 메모리 더 적게 쓰게 수정 - 검색기 북마크 기능 추가 - N/A를 작가, 그룹, 시리즈, 캐릭터, 태그에도 쓸 수 있게 수정 - 작업 정보창에서 존재하지 않는 파일은 빨간색으로 표시 - 작업 목록 저장 시 가능하면 상대경로로 저장 (다른 위치로 옮겨도 실행파일, 설정파일(*.ini), 다운로드 폴더가 같은 폴더에만 있으면 정상적으로 동작) - 검색기에서 검색 시 버벅이는 문제 완화 - 구글 이미지 다운로드 지원 중단 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9b 【Nov 27, 2017】 [버그 해결] - 마루마루 오래된 만화 다운로드 안되는 문제 해결 - 마루마루 패스워드 걸린 만화 다운로드 안되는 문제 해결 - 마루마루 파일 일부가 깨져서 다운로드 되는 문제 해결 - 트위터 다운로드 안되는 문제 해결 - 클립보드에서 가져오기 기능을 켜놓고 URL 복사를 하면 이미 추가된 것과 관계없이 추가되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 비메오 다운로드 - 티비플 다운로드 - 텀블러 다운로드 - 다운로더 목록 필터 기능 추가 (좌측 하단 돋보기 모양 아이콘) - 다운로드 폴더 종류별로 열 수 있게 바꿈 (하단 폴더 모양 아이콘) - 투명도 조절 슬라이더를 옮김 (우측 상단) - 저사양 PC에서 다운로드 시 프로그램이 버벅이는 문제 완화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9a 【Nov 20, 2017】 [버그 해결] - 사용자 계정 이름이 한글이나 특수문자로 이루어져 있을 시에 실행이 안되는 문제 해결 [변경/추가된 기능] - 자동완성 기능 강화 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9 【Nov 19, 2017】 [버그 해결] - 파일 수정 날짜가 밀리는 현상 해결 - 제목에 특수문자(윈도 파일시스템에서 인코딩 불가능한 것)가 있으면 폴더 생성이 안되는 문제 해결 (해당 문자 제거) - 픽시브 북마크 마지막 1~2 페이지가 다운로드 안되는 문제 해결 - 연결 상태가 좋지 않을 때 다운로드 중 취소 시 스레드가 매우 늦게 복구되는 문제 해결 - 파일 이름이 중복되면 압축 오류 뜨는 문제 해결 - E-Hentai 갤러리를 찾지 못하는 문제 해결 - E-Hentai 이미지 잘못 읽는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 트위터 다운로드 - 인스타그램 다운로드 - 구글 이미지 다운로드 - 데비안아트 다운로드 (갤러리; 이미지만) - 히토미 계열이 아닌 경우에 저장되는 폴더 이름을 조금 수정함 다운로드 폴더가 D라고 할 때, 마루마루 다운로드 폴더 = D_maru 픽시브 다운로드 폴더 = D_pixiv - 폴더나 압축파일을 복사해서 붙여넣을 수 있음 (주소 입력창에서 [Ctrl] + [V]) 해당 폴더를 업데이트할 때 사용 ... (id) ... 형식의 이름만 사용 가능 - Finder에서 퍼지로 찾기 기능 추가 - 브라우저로 보기 기능 추가 - 윈도우10 HiDPI 지원 - 재시작 했을 때 이전 작업 유지 - 자동 완성 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8f 【Oct 25, 2017】 [버그 해결] - 픽시브 R-18 다운로드 안되는 문제 해결 - 픽시브 다운로드 되지 않는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 픽시브 다운로드 속도 개선 - 픽시브 개별 일러스트 다운로드 - 픽시브 북마크 다운로드 - 픽시브 움짤 다운로드 - 7z 지원 중단 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8e 【Oct 22, 2017】 [버그 해결] - 제목이 너무 길 경우 삭제되지 않는 문제 해결 - 일부 컴퓨터에서 블루스크린이 뜨는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 하드디스크에 부담 적게 주도록 변경 [변경] 이미지 리사이징 시 하드디스크 사용 → 메모리 사용 [변경] 검색기에서 검색 시 hitomi_searcher_tmp 폴더를 만들고 캐시 → 메모리에 캐시 - 플로팅 미리보기 빨리 뜨게 변경 - 작가가 없을 시 그룹으로 대체해서 표기 - 픽시브 다운로드 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8d 【Oct 14, 2017】 [버그 해결] - 마루마루 다운로드 후 압축되지 않는 문제 해결 - 7Z 압축 제대로 되지 않는 문제 해결 [변경/추가된 기능] - 업데이트 체크 안정화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8c 【Oct 8, 2017】 [변경/추가된 기능] - 이미 다운로드 완료된 파일이 있을 경우 덮어쓰지 않고 다운로드 생략 - 마루마루 다운로드 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8b 【Oct 4, 2017】 [버그 해결] - 동영상 다운로드 시 4개를 초과하면 이전 파일이 삭제되는 문제 해결 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8a 【Sep 19, 2017】 [버그 해결] - 애니메이션이 다운로드되지 않는 문제 해결 [변경/추가된 기능] - 유튜브 동영상 다운로드 - 검색기에서 더 구체적으로 필터 적용할 수 있게 수정: 논리곱("and" 또는 ","), 논리합("or" 또는 "+"), 부정("not" 또는 "-") 그리고 괄호를 조합해서 사용 가능. 제목(Title)에선 특별히 논리곱을 생략하고 스페이스(" ")로 쓸 수 있음. (sushi boy = sushi and boy) 예시: 제목 (Title): sushi boy → "sushi" 와 "boy" 가 모두 들어간 제목을 검색 sushi + boy → "sushi" 또는 "boy"가 들어간 제목을 검색 "sushi boy" → "sushi boy"가 들어간 제목을 검색 "sushi boy" -kimchi → "sushi boy"가 들어가고 "kimchi"가 들어가지 않은 제목을 검색 A and B → "A" 와 "B"가 모두 들어간 제목을 검색 A or B → "A" 또는 "B"가 들어간 제목을 검색 ( A + B 와 같음) A or (B and C) → "A"가 들어가거나, "B"와 "C"가 모두 들어가는 제목을 검색 ( A + (B, C) 와 같음) 태그들 (Tags): female: loli, male:shota → female:loli 와 male:shota가 들어간 태그를 검색 (female:loli and male:shota와 같음) female: loli + male:shota → female:loli 또는 male:shota가 들어간 태그를 검색 (female:loli or male:shota와 같음) female: loli, -male:shota → female:loli 가 들어가고 male:shota가 들어가지 않은 태그를 검색 (female:loli and not male:shota와 같음) female: loli, male:shota + female:glasses → female:loli and male:shota or female:glasses 와 같음 -female:loli, (male:shota + -female:glasses) → not female:loli and (male:shota or not female:glasses) 와 같음 나머지 모든 항목에도 똑같이 적용됨. - 애니메이션도 삭제 가능하게 수정 -------------------------------------------------------------------------------------------------------------------------------------------- 0.1 【Nov 6, 2016】 첫 릴리즈 ================================================ FILE: translation/changelog_ko.txt ================================================ 4.2 【Oct 27, 2024】 [버그 해결 / 사이트 변경에 의한 수정] - 스크립트 호환성 문제 해결 (#6943) - TVer 문제 해결 (#6956) - 필터 북마크 내보내기 / 가져오기 형식 문제 해결 (#6960) - Niconico 업데이트 대응 (#6963, #7006) - #6976 - #6755 - #7011 - Iwara 일부 로그인 필요한 영상 다운로드 안 되는 문제 해결 (#6031) - Danbooru 업데이트 대응 (#7034) - #7037 - XVideos 업데이트 대응 (#7041) - Naver Blog 움짤 인식하지 못하는 문제 해결 (#7062) - #7039 - MyReadingManga 일부 작품 다운로드 안 되는 문제 해결 (#7125) - Chzzk 업데이트 대응 (#7137) - 일부 사이트 파일명 형식에 작가명이 적용되지 않는 문제 해결 (#7127) - Cloudflare DDoS protection 업데이트 대응 (#7158, #7410) - twitter.com > x.com 도메인 업데이트 대응 (#7194, #7199, #7202) - 小説家になろう 업데이트 대응 (#7148, #7167, #7502) - #7399 - DPI 우회 업데이트 - 파일명 형식 파싱 문제 해결 (#7505) - TikTok 업데이트 대응 (#7377) - 일부 오래된 YouTube 영상 다운로드 안 되는 문제 해결 (#7508) - Pinterest 일부 다운로드 안되는 문제 해결 (#7541) - E(x)Hentai 업데이트 대응 (#7577) - 기타 자잘한 것들 [변경/추가된 기능] - SOOP 지원 (#7552) - Linux 지원 (#3771) - Twitter Space 지원 (#4578) - AfreecaTV 녹화 해상도 설정 지원 (#6934) - #6950 - #6965 - 라이브 스트리밍 다운로드 세그먼트 오류 / 전체 세그먼트 수 표시 여기에서 확인 가능: 작업 우 클릭 - 작업 정보... - extras - "다시 시작" 한 작업 읽기 중 사용자가 멈출 때 마지막으로 읽었던 상태로 복구 - Pixiv 움짤 .ugoira 파일 형식 지원 (#6986) 옵션 - 설정 - Pixiv - 움짤 - 파일 형식 - 자동 녹화 갱신 간격 추가 (#6992) - 기본값 변경: "직접 다운로드" 시 분할 다운로드 - "직접 다운로드" 시 HTML 파일의 경우 내부 이미지 다운로드 - 선호 언어 설정 (#7004) 옵션 - 설정 - YouTube - 선호 언어 - CJK 글자 가독성 향상 - 작업 기록 옵션 - 설정 - 고급 - 작업 기록 - YouTube 파일명 형식 토큰 추가: "channel_id", "uploader_id" (#6688) - #6939 - 파일명 형식 자동완성 - AfreecaTV VOD & Catch 파일명 형식 "Date" 지원 (#7054) - Chzzk VOD 파일명 형식 "Date" 지원 (#7085) - Luscious 폴더명 형식 변경 (#7026) - Naver Blog 폴더명 형식 변경 - 검색기 최적화 - 자동 재시작 코멘트 그룹도 인식 (#6832) - 트레이에서 "클립보드에서 자동 추가" 기능 켜짐 여부 표시 (#7154) - 중복 이미지 찾기 이름 변경 (#7407) - Chzzk Clip 지원 (#7442) - GitHub에 접속 불가능한 지역에서도 yt-dlp, FFmpeg 등 동작하게 수정 - 작업 목록 상태 색 변경 - WebSocket 버전 업 (#7533) - "부팅 시 실행" 시 업데이트 생략하고 바로 실행 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 4.1 【Feb 28, 2024】 [버그 해결 / 사이트 변경에 의한 수정] - 컴퓨터 종료 시 인식하지 못 하는 문제 해결 - 작가 추천 문제 해결 - "로컬 파일로부터 새 작업 만들기" 문제 해결 (#6634) - 드래그 & 드롭으로 순서 변경 시 생기는 문제 해결 (#6734, #6735) - HTTP API Web UI 에서 파일 삭제 안 되는 문제 해결 (#6637) - 다중 모니터에서 일부 창 잘못 뜨는 문제 해결 (#6636) - カクヨム 업데이트 대응 (#6620, #6708) - 잠긴 작업 삭제 메시지 잘못 보이는 문제 해결 - E(x)Hentai mixed, other 태그들 인식 못하는 문제 해결 (#6669) - SankakuComplex 업데이트 대응 (#6718) - 압축파일 경로 문제 해결 (#6619, #6699) - DeviantArt Featured만 다운로드하는 문제 해결 (#6480, #6608, #6725) - ニジエ 업데이트 대응 (#6726) - Iwara 업데이트 대응 (#6737) - Weibo 업데이트 대응 (#6739) - Instagram Stories 다운로드 안 되는 문제 해결 (#6445) - DeviantArt 업데이트 대응 (#6827, #6829) - 小説家になろう 업데이트 대응 (#6830) - YouTube 방송이 끝나도 바로 멈추지 않고 오래 뒤에 멈추는 문제 해결 - #6911 - AfreecaTV 업데이트 대응 (#6915) - 기타 자잘한 것들 [변경/추가된 기능] - 치지직 지원 (#6722) - AfreecaTV 녹화 지원 (#1966) - ニコニコ生放送 지원 (#3986, #6790) - YouTube "/live" URL 지원 - YouTube Live 자동 녹화 지원 (#5654, #5908) 옵션 - 설정 - 녹화 - 자동 녹화 - 작업 고정, 잠금 아이콘 가장자리로 이동 (#6676) - 네트워크 드라이브 경로 분석 생략 (#6651) - M3u8 stream rate limit (#6700) - #6694 - 중복 이미지 찾기 폴더 리스트 유지 (#6655) - 중복 이미지 찾기 같은 소스 제외 (#6655) - 녹화 중 일부분이 불량일 경우 끊지 않고 계속 녹화 (에러 메시지 남김) - Weibo 파일명 형식 변경 (#6739) - 작업 수정창에 "Range" 추가 - 녹화 파일명 형식 추가 (#6722) 옵션 - 설정 - 녹화 - 파일명 형식 - Gelbooru 이전에 다운로드한 파일 인식해서 빠르게 읽음 (#6729) - Weibo 이전에 다운로드한 파일 인식해서 빠르게 읽음 (#6739) - 업로드 속도 표시 (#6574) 도움말 - 통계 - 코멘트 여러 줄 가능, 너무 길면 툴팁 띄움 (#6570) - 토렌트 고급 옵션 옵션 - 설정 - Torrent - 고급 옵션... - V2PH 로그인 알림 (#6774) - 프록시 연결 상태 더 정확하게 확인 - #6836 - 자동 녹화 일시 정지 마우스 우 클릭 - 일시 정지 - 자동 녹화 체크 중 표시 - 자동 녹화 갱신 간격 설정 (#6810) - 작업 목록 필터링 "live:" 추가 - #6892 - 녹화 파일명 중복 처리 (#6895) - 녹화 중 오류 발생으로 중단 시 재다운로드 시도 (#6722) - DPI 우회 제외 도메인 설정 (#5380, #5954, #5659) 옵션 - 설정 - 네트워크 - DPI 우회 - 설정 - #6912 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 4.0 【Dec 02, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - Pixiv 폴더명 형식에 "title" 이 포함되어있고 작품 제목에 사용할 수 없는 문자가 포함되어있을 때 발생하는 문제 해결 (#6433) - Pixiv /following 링크 인식하지 못하는 문제 해결 (#6427) - #6424 - #6440, #6441 - yt-dlp 프록시 문제 해결 (#6464) - 성능 최적화 (#6467) - 절전모드 방지 제대로 적용되지 않는 문제 해결 (#6491) - 중복 이미지 찾기 성능 & 정확도 개선 (#6491) - 일부 환경에서 생기는 내장 브라우저 문제 해결 (#6465) - Instagram 업데이트 대응 (#6473) - AfreecaTV 파일명 형식 id 토큰 인식하지 못하는 문제 해결 - ArtStation 일부 다운로드 못하는 문제 해결 (#6516) - youtu.be 도메인 문제 해결 (#6485) - E(x)Hentai 원본 이미지 다운로드 업데이트 대응 (#6533) - 검색기 Image Set 지원 (#6534) - SankakuComplex 업데이트 대응 (#6501) - YouTube MPD 형식 다운로드 안 되는 문제 해결 (#6560) - 하위폴더가 있는 Single 형식 작업 폴더 이동 안 되는 해결 (#6562) - 필터링 된 목록 선택 문제 해결 (#6377, #6569) - Cloudflare DDoS protection 업데이트 대응 (#6555) - Pixiv 업데이트 대응 (#6588, #6593) - Pixiv "." 으로 끝나는 제목 문제 해결 (#6592) - Bilibili 같은 재생목록의 다른 영상 같은 작업으로 인식하는 문제 해결 (#6580) - E(x)Hentai 509 업데이트 대응 (#6622) - Niconico 업데이트 대응 - 쿠키 문제 해결 (#6607) - 기타 자잘한 것들 [변경/추가된 기능] - Windows 10 미만 지원 종료 - 선택된 작업들 내보내기 자동으로 그룹 포함 (#6437) - #6380 - 자동 녹화 (#5908) 옵션 - 설정 - 녹화 - 자동 녹화 - 녹화 작업은 "최대 동시 작업" 에 영향주지 않도록 수정 - Naver Cafes 원본 다운로드 (#6460) - Naver Cafes 검색 허용일 경우 로그인 없이 다운로드 - 메시지 상자 Y / N 단축키 (#6461) - YouTube 파일명 형식 토큰 추가 (#6425) - 다크 모드 시스템 설정 옵션 - 설정 -디스플레이 - 다크 모드 - 시스템 설정 사용 - Twitch 광고 스킵 옵션 - 설정 - Twitch - 광고 스킵 - 다중 작업들 브라우저로 보기 (#6421) - Pixiv, YouTube, Instagram, Twitter 파일명 형식 토큰 목록 (#6425, #6446) - 작업 목록 필터링 자동완성 북마크 지원 - 작업 목록 제한 100,000 개로 늘림 (#6488) - 파일 단위 segment 지원 (#6567) - SRT 자막 호환성 개선 (#6564) - Torrent 작업 Favicon 누르면 메뉴 보임 - Twitter 파일명 형식 uid 토큰 추가 (#6624) - 파일명 형식 page:+1; 구문 추가 (#6624) - 번역 업데이트 (#6489) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8f 【Oct 05, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - 일부 위젯 폰트 적용 안 되는 문제 해결 - 이미지 포맷 변환 문제 해결 (#6206) - 불완전한 작업 파일 개수 잘못 표시되는 문제 해결 (#6210) - Shift 버그 해결 & 최적화 (#6227) - 폰트 미리보기 폰트 적용 안 되는 문제 해결 - #6231 - AfreecaTV catch 다운로드 (#6215) - #6224 - 유튜브 플레이리스트 같은 파일명 처리 (#6235) - Lossless WebP 문제 해결 (#6241) - 내장 웹브라우저 쿠키 증발 문제 해결 - #6266 - 아이콘 보기 모드에서 썸네일 드래그 선택 안 되는 문제 해결 - TikTok 업데이트 대응 (#6293) - #6290 - Twitter 한 트윗에 여러 개의 동영상이 있는 경우 다운로드되지 않는 문제 해결 - Twitter Retweets 포함 다운로드 Rate limit 문제 해결 - xHamster 업데이트 대응 (#6318) - SankakuComplex 업데이트 대응 (#6326) - KakaoPage 업데이트 대응 (#6169) - 작업 목록 필터링 후 선택 문제 해결 (#6372) - ComicWalker 업데이트 대응 (#6368) - DeviantArt 업데이트 대응 (#6025) - pixivコミック 업데이트 대응 (#6398) - #6401 - Flickr 업데이트 대응 (#6410) - 기타 자잘한 것들 [변경/추가된 기능] - Bilibili 채널 / 플레이리스트 다운로드 지원 - Russian 추가 (#6212, #6223) - TwitCasting 등 녹화 지원 - 작업 목록 필터링에서 관계 없는 그룹 숨김 (#6191) - Twitter Rate limit 처리 (#6245) - #6257 - Bilibili URL 중복 인식 - 소리 설정 (#6207) 옵션 - 설정 - 고급 설정 - 소리 - 여러 작업 폴더 이동 (#4020) 마우스 우 클릭 - 폴더 이동... - 모든 작업 완료 후 (#4097) 옵션 - 모든 작업 완료 후 - 중복 이미지 찾기 최적화 (#6324) - YouTube 오디오 트랙 설정 (#6332) 옵션 - 설정 - YouTube - 오디오 트랙 - Wine에서 실행시 창 투명도 애니메이션 끔 (#4974) - Tumblr "tumblr.com/(id)" 형식 URL 지원 (#6333) - Twitter x.com 도메인 지원 - YouTube Enhanced bitrate 지원 (#6350) - "그룹 안의 모든 작업 다시 시작" 다중 그룹 지원 (#6354) - Twitter API call 최적화 (#6343) - #6305 - Public IP 표시 (#6351) 옵션 - 설정 - 네트워크 - Public IP - #6358 - Twitter 파일명 설정 (#6041, #6380) 옵션 - 설정 - Twitter - 파일명 형식 - YouTube 썸네일 다운로드 옵션 - 설정 - YouTube 설정 - 썸네일 다운로드 - YouTube 파일명 형식 "date" 변경 (#6387) - Hook.format 지원 (#6380) - 자동 제거 전 Hook 실행(#6408) - SankakuComplex 페이지 제한 우회 (#6418) - 업데이트 속도 최적화 - YouTube 파일명 형식 "width", "height" 지원 (#6404) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8e 【Jul 25, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - yt-dlp 문제 해결 (#6086, #6087, #6089) - #6093 - Tiktok 업데이트 대응 (#6114) - WeLoveManga 업데이트 대응 (#6105, #6186) - Tiktok 제목 없는 영상 다운로드 안 되는 문제 해결 (#6119) - PornHub 업데이트 대응 (#6124) - YouTube "youtube.com/@(id)" 형식 URL 잘못 인식하는 문제 해결 (#6129) - yt-dlp 업데이트 대응 (#6136) - 한국어 로케일에서 설정 파일 없이 시작했을 때 일부 글자 깨지는 문제 해결 - YouPorn 업데이트 대응 (#6142) - #6115 - Jmana 업데이트 대응 (#6157) - "선택 화 다운로드" 할 때 내장 웹브라우저 문제 해결 - SoundCloud 업데이트 대응 - Naver Blog 업데이트 대응 - SankakuComplex Popular 부분 다운로드되는 문제 해결 (#6171) - #6190 - 기타 자잘한 것들 [변경/추가된 기능] - Mastodon 지원 (#6123) - Misskey 지원 (#6051, #6161) - Likee 지원 종료 - YouTube 비디오 코덱 우선순위 설정 (#6079) 옵션 - 설정 - YouTube 설정 - 비디오 코덱 우선순위... - YouTube 가능한 경우 챕터 마커 추가 설정 (#6085) - pixivコミック 화질 개선 - TVer 등 일부 yt-dlp 지원 사이트 다운로드 속도 개선 (#6072, #6118) - Twitter "twitter.com/i/user/(User ID)" 형식 URL 지원 (#5841, #6120) 여기에서 확인 가능: 작업 우 클릭 - 작업 정보... - extras - uids - Pawoo "pawoo.net/web/accounts/(id)" 형식 URL 지원 (#6123) - 자동 재시작 (#6152) 코멘트에 "restart:30:00" 입력하면 작업 완료 후 30분 뒤에 다시 시작 - "중복 이미지 찾기" 파일 검색 속도 최적화 - "중복 이미지 찾기" "폴더 열기" 단축키 추가 - 검색기 검색 전 파일 검색 속도 최적화 - "저장 폴더에 있는 모든 갤러리 넘버 복사" 속도 최적화 - 테마 변경 속도 최적화 - 다중 직접 다운로드 (#6158) - 트레이 아이콘에서 다운로드 시작 / 완료 표시 (#6102) - 작업 완료 알림 (#6102) 옵션 - 설정 - 고급 설정 - 작업이 완료되면 알림 보이기 옵션 - 설정 - 고급 설정 - 모든 작업이 완료되면 알림 보이기 - "클립보드에서 자동 추가" 로 추가시 알림음 (#6102) - 내장 웹브라우저로 바로 로그인할 수 있게 버튼 표시 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8d 【Jun 23, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - #5941 - Instagram 업데이트 대응 (#5930) - ComicWalker 제목이 너무 길 경우 생기는 문제 해결 (#5928) - Nozomi.la 일부 태그 다운로드 안 되는 문제 해결 (#5989) - 브라우저에서 쿠키 불러오기 Whale 브라우저로만 작동하는 문제 해결 (#5979) - #6010 - yt-dlp 문제 해결 (#6053) - 기타 자잘한 것들 [변경/추가된 기능] - 카카오페이지 같은 제목의 화 처리 (#4483) - ComicWalker 같은 제목의 화 처리 (#5929) - ComicWalker 화 제목 포맷 변경 (#5929) - Pixiv Comic 화 제목 포맷 변경 (#5929) - #5967 - Pinterest 생성됨 (_created) 보드 다운로드 (#5981) - 불완전한 작업도 PDF 생성 (#5967) - 사용자명에 Non-ASCII 문자가 들어간 경우 자동으로 --safemode 처리 (#5955, #5973, #5975) - 설정 분류 정리 - YouTube 파일명 형식 "date" 추가 (#5529) - YouTube 자동 생성 자막 지원 옵션 - 설정 - YouTube 설정 - 자막 - 자동 생성 자막 포함 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8c 【May 05, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - 카카오페이지 업데이트 대응 (#5806) - --safemode 버그 해결 (#5934) - 기타 자잘한 것들 [변경/추가된 기능] - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8b 【May 02, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - 최대 동시 작업 초과하는 문제 해결 (#5621) - "로컬 파일로부터 새 작업 만들기" 폴더 복수 선택 안 되는 문제 해결 - pixivコミック 업데이트 대응 (#5662) - YouTube URL 형식 업데이트 대응 (#5679) - #5657 - AfreecaTV 업데이트 대응 (#5685) - Weibo 업데이트 대응 (#5634) - xHamster 새 도메인 지원 (#5696, #5893) - Danbooru 업데이트 대응 (#5730) - #5709 - Nozomi.la 업데이트 대응 (#5754) - YouTube 업데이트 대응 (#5757) - SankakuComplex 업데이트 대응 (#5861, #5892) - Iwara 업데이트 대응 (#5794, #5869) - Douyin 업데이트 대응 (#5896) - Luscious 업데이트 대응 (#5699) - E(x)Hentai 에서 509.gif 이름의 파일 다운로드 못하는 문제 해결 (#5900) - 기타 자잘한 것들 [변경/추가된 기능] - Newgrounds 다운로드 (#5627) - 프로그램 시작 시간 최적화 - --safemode 로 실행 시 잘못된 경로일 때 해당 경로와 함께 오류 메시지 표시 - Bilibili 쿠키 없으면 쿠키 업데이트 아이콘 띄움 (#5647) - 일본어 사용법 추가 (#5643) - 작업 목록 제한 50,000 개로 늘림 (#5655) - 사이드바 추가 - 실시간 녹화 프록시 설정 반영 - PandoraTV 지원 종료 - #5687 - 단축키 추가 (#5691) - 브라우저에서 쿠키 불러오기 기능 추가 (#5779) - 옵션 - 설정 - 고급 - 다운로드가 완료될 때까지 절전모드 방지 - Sinhala 언어 추가 (#5763) - 채널 영상 역순으로 다운로드 (#5848) 옵션 - 설정 - YouTube - 채널 영상 역순으로 다운로드 - 작업 목록 필터링 "dur<", "dur>" 추가 "사용법 (F1) - 다운로더 작업 목록 필터링" 참고 - 베타 버전 설치 옵션 - 설정 - 고급 설정 - 베타 버전 설치 - #5865 - HTTP API 패스워드 지원 (#5668) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8a 【Jan 06, 2023】 [버그 해결 / 사이트 변경에 의한 수정] - #5469 - #5533 - PornHub 업데이트 대응 (#5554) - #5562 - 작업 목록 필터링 대소문자 문제 해결 (#5569) - yt-dlp 문제 해결 (#5592) - 기타 자잘한 것들 [변경/추가된 기능] - VLIVE 지원 종료 - #5541 - Instagram 로그인 안정화 - 설정 레이아웃 변경 - MPD URL 인식 & 다운로드 - Twitter 읽기 속도 향상 (#5548) - #5559 - 읽기 중지 기능 - "빠른 실행 도구 모음" 에서 "트레이로 최소화" 동작하지 않는 문제 해결 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.8 【Dec 16, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - Twitch 음소거된 부분 복구하지 못할 경우 느리게 다운로드되는 문제 해결 - pixivコミック 작가명 인식 안 되는 문제 해결 (#5278) - Nozomi.la 업데이트 대응 (#5340) - Danbooru 업데이트 대응 (#5336) - Danbooru 단일 포스트 다운로드 - Niconico 업데이트 대응 (#5332) - Niconico 로그인 방식 변경 - 쿠키 필요 - YouTube 채널 탭 인식 (#5365) - Bilibili 업데이트 대응 (#5383) - PornHub 업데이트 대응 (#5384) - Cloudflare DDoS protection 업데이트 대응 (#5392, #5404) - pixivコミック 안정화 (#5329, #5498) - LHScan 업데이트 대응 (#5351) - Twitch 메모리 문제 해결 (#5418) - PornHub GIF 다운로드 안 되는 문제 해결 - E(x)Hentai 업데이트 대응 - #5095 - #5299 - 일부 동영상 사이트 플레이리스트 메모리 문제 해결 (#5423) - XnView MP 연결파일 실행 문제 해결 (#5224) - 중복 이미지 찾기 프리징 문제 해결 (#4493) - hanime.tv 업데이트 대응 (#5272) - baraag.net 업데이트 대응 (#5435) - Pawoo 업데이트 대응 - ArtStation 여러 앨범 있을 경우 하나만 다운로드하는 문제 해결 (#5473) - Flickr 다운로드 안 되는 문제 해결 (#5492) - KakaoPage 업데이트 대응 (#5268) - #5488 - AsmHentai 업데이트 대응 - 기타 자잘한 것들 [변경/추가된 기능] - Hiyobi.me 지원 (#5425) - YouTube Handles 지원 (#5445) - Pixiv 쿠키가 없다면 로그인 창 띄움 - Pixiv "다시 시작" 할 때 이미 다운로드한 파일들 생략하고 더 빠르게 읽음 (#5281) - 필터 북마크 내보내기 / 가져오기 (#5298) - 설정 파일 (*.ini) 읽는 중 오류가 생기면 자동 저장 해제 - Torrent 다운로드하기 전에 파일 고르기 옵션 (#4328) - Torrent 트래커 추가 옵션 - 설정 - Torrent - 트래커 추가 - 설정 검색 - #5436 - thunder:// 링크 지원 - YouTube "파일명 형식" 에서 하위폴더 인식 (#5177) - #5126 - SankakuComplex 로그인 필요시 알림 (#5341) - YouTube 생방송 시작할 때까지 기다렸다가 다운로드 - WebP 변환 (#5444) - 선택한 작업 이미지 포맷 변환 (#5444) 마우스 우 클릭 - 이미지 포맷 변환... - 컨텍스트 메뉴 레이아웃 변경 - 잘못된 프록시 주소 자동 수정 & 프록시 연결 여부 표시 - 프록시 TOR 지원 - 창 위치 크기 기억 (#3548) - "클립보드에서 자동 추가" 알림 창 뜬 상태에서도 계속 동작하게 수정 - 메시지 창 여러개 떴을 때 자동 포커스 (#5458) - Tumblr URL redirect 지원 (#5501) - 성능 최적화 (#5510) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7p 【Sep 20, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - YouTube shorts 인식 안 되는 문제 해결 (#5260) -------------------------------------------------------------------------------------------------------------------------------------------- 3.7o 【Sep 19, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - Twitch 다시보기 다운로드 안 되는 문제 해결 (#5031) - #5033 - #5046 - #5071 - Pixiv 업데이트 대응 (#5105) - V2ph 업데이트 대응 (#5082) - nhentai 업데이트 대응 (#5131) - MyReadingManga 업데이트 대응 (#5109, #5148) - Nozomi.la "/" 들어간 태그 인식 못하는 문제 해결 (#5146) - "옵션 - 설정 - 일반 - 플레이리스트 파일에 번호 매기기" 적용되지 않는 문제 해결 - pixivコミック 업데이트 대응 (#5158) - KakaoPage 업데이트 대응 (#5176) - Manatoki 업데이트 대응 (#5233) - WeLoveManga 업데이트 대응 (#5238) - Twitch 음소거 복구 작동하지 않는 문제 해결 (#5242) - 기타 자잘한 것들 [변경/추가된 기능] - Live M3U8 stream 지원 (#5110) - Pinterest 단일 포스트 다운로드 (#5132) - Nozomi.la 여러 이미지 포함하는 포스트 다운로드 (#4943) - ExHentai .onion 도메인 인식 - TikTok 태그 검색 다운로드 (#5235) - 성능 최적화 - "다시 시작" 한 작업 대기 중 "완료됨으로 표시" 가능 - #5029 - Instagram Reels 다운로드 (#5051) - 소설 사이트 루비 처리 (#5102) - #4980 - UI 스케일 설정 옵션 - 설정 - 고급 - UI 스케일 - 아이콘 모드에서도 우클릭 - 드래그 동작 - Pixiv 정지된 계정 처리 (#5223) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7n 【July 22, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - #4857 - Luscious member 전용 페이지 제목 읽지 못하는 문제 해결 (#4751) - Torrent 파일 연결 안 되는 문제 해결 (#4873) - --safemode 적용 안 되는 문제 해결 (#4932) - #4854 - Pixiv 작가명 문제 (#4897) - Iwara 일부 이미지 다운로드 안 되는 문제 해결 (#4901) - Pixiv Comic 업데이트 대응 (#4861) - Luscious 업데이트 대응 (#4905) - 다크모드에서 일부 위젯 제대로 안 보이는 해결 - Soundcloud 아주 많은 재생목록 다운로드 안 되는 문제 해결 (#4928) - 큰따옴표 들어간 작가명 인식 못하는 문제 해결 (#4936) - TikTok 업데이트 대응 (#4941) - Hentai Cosplay 업데이트 대응 (#4954, #4961) - AsmHentai 업데이트 대응 (#4971) - Twitter 특정 쿠키에서 생기는 문제 해결 (#4967) - Instagram 특정 쿠키에서 생기는 문제 해결 (#4967) - #4982 - #5006 - 기타 자잘한 것들 [변경/추가된 기능] - douyin 다운로드 - Twitter Likes 다운로드 (#726) - Twitter Retweets 포함 다운로드 (#3429) - Torrent 시딩 설정 옵션 - 설정 - Torrent 설정 - 시딩 - YouTube 해상도 지정 다운로드 (#4851, #4895) 옵션 - 설정 - YouTube 설정 - 파일 형식 물어보기 - Soundcloud 재생목록 더 빠르게 읽음 - Etc 사이트 자막 지원 - YouTube 자막 모든 언어 지원 - 플러그인 기능 옵션 - 설정 - 플러그인 - 커스텀 테마 지원 - Torrent 작업 메뉴 작업 마우스 우클릭 - Torrent - 관리자 권한 없이 실행 옵션 (#4934) 옵션 - 설정 - 관리자 권한 없이 실행 - "페이지 지정 다운로드 기본값" → "최대 페이지 제한" 으로 변경 (#4933) - TikTok 파일명 제목 포함하도록 변경 - 작가 추천 현재 언어 설정에 따르도록 변경 - 내장 웹브라우저 GPU 사용하게 변경 (#4941) - 작업표시줄 진행도 현재 다운로드 중인 작업들의 진행도를 표시하도록 변경 - 성능 / 메모리 최적화 - YouTube, Twitch 등 파일명 포맷 "artist" 지원 (#4940, #4953) - 스크립트 "@Downloader.register" 생략 가능 - 이미 동일한 작업이 있다면 다시 시작할지 물어봄 - Torrent 파일 가능하면 헤더 먼저 받음 - 아주 작은 이미지 & 동영상 파일은 다운로드 실패로 간주 (#4996) - 내장 브라우저 쿠키 ↔ 현재 쿠키 설정 동기화 - Instagram 쿠키가 없다면 로그인 창 띄움 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7m 【June 08, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - V3 오진으로 모듈 다운그레이드 (#4835) -------------------------------------------------------------------------------------------------------------------------------------------- 3.7l 【June 07, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - 갑자기 폰트 깨지는 문제 해결 - 일부 화질 적용 안 되는 사이트 수정 (#4773) - YouTube 동영상 다운로드 후 음원 다운로드하면 중복 처리 되는 문제 해결 (#4776) - #4794 - xHamster 새 도메인 지원 (#4826) - Instagram 업데이트 대응 (#4829) - KissJav 새 도메인 지원 (#4835) - YouTube 프록시 적용 안 되는 문제 해결 (#4850) - 기타 자잘한 것들 [변경/추가된 기능] - 생성한 폴더 목록 보기 (#4698) - #4752 - Hitomi.la / E(x)Hentai 파일명 형식 "숫자 + 원본" 추가 (#4762) - Torrent 시드 파일 삭제한 후 재시작하면 남아있는 마그넷 링크로 읽도록 수정 - Torrent Tracker 수정 기능 - 다시 시작 시 이미 다운로드한 것들은 수정한 날짜 유지하도록 수정 (#4764) - 패커 업데이트 (#4648, #4781) - 단축키 수정 (#4805) - 프로그램 시작 시간 최적화 - Twitter 로그인 필요할 경우 경고 (#4839) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7k 【May 06, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - 설정 파일 없는 상태에서 시작할 때 저장 안 되는 문제 해결 (#4733) -------------------------------------------------------------------------------------------------------------------------------------------- 3.7j 【May 06, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - Pawoo 일부 다운로드 안 되는 문제 해결 (#4381) - Luscious 업데이트 대응 (#4386) - Pixiv Comic 일부 작품 다운로드 안 되는 문제 해결 (#4389) - XVideos 업데이트 대응 (#4401, #4410, #4530) - "브라우저로 보기"에서 WebP 파일 안 보이는 문제 해결 (#4424) - 일부 단일 트윗 다운로드 안 되는 문제 해결 (#4438) - Hitomi.la 애니메이션 다운로드 안 되는 문제 해결 - カクヨム 일부 다운로드 안 되는 문제 해결 (#4445) - Iwara 이미지 다운로드 안 되는 문제 해결 (#4450) - Iwara 채널 다운로드 시 첫 이미지만 다운로드 되는 문제 해결 (#4499) - nhentai 업데이트 대응 (#4541) - DeviantArt 업데이트 대응 (#4515) - #4534 - Tumblr 업데이트 대응(#4645) - Manatoki 업데이트 대응(#4660, #4664) - 불완전하게 받아진 화 다시 시작 시 완료되는 문제 해결 (#4633, #4676) - DeviantArt 업데이트 대응 (#4671) - #4713 - #4728 - 기타 자잘한 것들 [변경/추가된 기능] - PNG 변환 (#4420) - #4451 - #4385 - #4524 - Twitter 로그인 필요할 경우 경고 (#4549) - 통계 총 용량 표시 (#4328) - Danbooru Ugoira 비디오 형식으로 다운로드 하도록 수정 (#4635) - YouTube 8K 다운로드 (#4593) - "로컬 파일로 부터 새 작업 만들기" - "단일 파일" 여러 개 선택 가능 (#4682) - 도중에 하드드라이브 연결이 끊어졌을 때 다시 DB 연결 (#4712) - 동영상 파일 미리보기 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7i 【Jan 27, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - 일부 사이트에서 일시 정지 후 다시 시작 안 되는 문제 해결 - カクヨム 일부 작품 다운로드 안 되는 문제 해결 (#4262) - Facebook 일부 계정 다운로드 안 되는 문제 해결 (#2417) - xHamster 새로운 도메인 지원 (#4332) - Hitomi.la 업데이트 대응 (#4351, #4352) - KAKAO WEBTOON 업데이트 대응 (#4360) - #4267 - #4288 - #4298 - #4316 - Weibo 오래된 쿠키 업데이트 메시지 안 나오는 문제 해결 - Tiktok 모바일 주소 다운로드 안 되는 문제 해결 (#4324) - Instagram 업데이트 대응 (#4336) - XVideos 일부 제목 잘못 읽는 문제 해결 (#4359) - Twitter 업데이트 대응 - 기타 자잘한 것들 [변경/추가된 기능] - Naver Cafe 지원 (#2090) - 폴더 열기 단축키 - #4287 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7f 【Jan 03, 2022】 [버그 해결 / 사이트 변경에 의한 수정] - Danbooru 업데이트 대응 (#4160) - Hitomi.la 업데이트 대응 (#4214) - 다운로드 중 삭제하면 버벅이는 문제 해결 - E(x)Hentai private 다운로드 안 되는 문제 해결 (#4223) - Twitch 클립 리스트 다운로드 안 되는 문제 해결 (#4191) - 기타 자잘한 것들 [변경/추가된 기능] - Danbooru popular 다운로드 (#4160) - #4161 - Yande.re 원본 이미지 다운로드 (#4231) - #4159 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7e 【Dec 27, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - iwara 일부 채널 다운로드 안 되는 문제 해결 (#4030) - Facebook 일부 영상 다운로드 안 되는 문제 해결 (#4064) - XVideos 일부 영상 다운로드 안 되는 문제 해결 (#4083) - Jmana 업데이트 대응 (#4070) - Pixiv Newest works: Following 업데이트 대응 (#4077) - Bilibili 플레이리스트 페이지만 다른 영상 동시에 다운로드할 때 생기는 문제 해결 (#4117) - Mastodon 계열 문제 해결 (#4125) - Hitomi.la 업데이트 대응 (#4126, #4152) - #4137 - #4185 - #4196 - 기타 자잘한 것들 [변경/추가된 기능] - 4chan 지원 (#2085, #4116) - YouTube Live Stream 지원 - Twitch Live Stream 지원 - "브라우저로 보기" HTTP API 꺼도 보이게 수정 (#4060) - 방향키로 화 이동 (#4060) - 중북 이미지 찾기 "자동 선택": 완전히 같은 파일일 경우 최근 이미지 우선 선택 (#4085) - 작업 목록 필터링 OR, NOT, 괄호 지원 (#4046) 예: A OR B NOT type:youtube (A OR B) C - #4103 - #4110 - #4130 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7d 【Nov 23, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - SankakuComplex 일부 URL 잘못 인식하는 문제 해결 (#3990) - 일부 환경에서 토렌트 다운로드 안 되는 문제 해결 (#3998) - #3951 - 오래된 설정파일 (*.ini) 읽지 못하는 문제 해결 (#4025) - KAKAO WEBTOON 안정화 (#4009) - Hitomi.la 업데이트 대응 (#4037, #4038) - 기타 자잘한 것들 [변경/추가된 기능] - E(x)Hentai "Always use the Multi-Page Viewer" 지원 (#3415) - HTTP API 지원 옵션 - 설정 - 고급 설정 - HTTP API - "브라우저로 보기" 수정 - ArtStation 더 좋은 화질로 다운로드 (#2600, #4039) - Instagram 오래된 쿠키 경고 메시지 (#4014) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7c 【Nov 05, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - 일부 환경에서 특정 사이트 다운로드 안 되는 문제 해결 (#3944) - #3951 - MyReadingManga 다운로드 안 되는 문제 해결 (#3965) - Twitter 영상 다운로드 안 되는 문제 해결 (#3970) - 필터 켜 놓은 상태에서 방향키, Home, End 제대로 작동하지 않는 문제 해결 (#3974) - Weibo 새로운 UI 지원 (#3508) - Tiktok 업데이트 대응 (#3978) - 半次元 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - epio.app 지원 종료 - M3U8 다운로드 속도 개선 - 小説家になろう ncode 표시 (#3938) - 크롬 확장 프로그램에서 프로그램으로 쿠키 업데이트하는 기능 추가 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7b 【Oct 29, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - #3946 - #3958 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7a 【Oct 28, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - 폴더명 형식 "/" 인식 못 하는 문제 해결 -------------------------------------------------------------------------------------------------------------------------------------------- 3.7 【Oct 28, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - Torrent 일부 마그넷 링크 읽지 못하는 문제 해결 - Pixiv Comic 다운로드 안 되는 문제 해결 (#3700, #3815, #3845) - 여러 Torrent 관련 문제 해결 - 너무 긴 주소 다운로드 안 되는 문제 해결 - 검색기에서 anime 다운로드 체크 안 되는 문제 해결 (#3714) - Bilibili 일부 주소 다운로드 안 되는 문제 해결 (#3777) - Pixiv 폴더명에 "\" 들어가면 다운로드 안 되는 문제 해결 (#3797) - LHScan 업데이트 대응 (#3809, #3815) - ArtStation 업데이트 대응 (#3849) - Twitter 읽을 때 버벅이는 문제 해결 - YouTube 다운로드 속도 문제 패치 (#3891) - nhentai 업데이트 대응 (#3930) - 기타 자잘한 것들 [변경/추가된 기능] - Twitter Broadcast 지원 - KAKAO WEBTOON 지원 (#3692) - #3661 - Nozomi.la 지원 (#3841) - xhwebsite.com 도메인 지원 (#3881) - Daum Webtoon 지원 종료 (#3692) - Torrent 파일 연결 (#3696) 옵션 - 설정 - Torrent 설정 - 토렌트 파일 연결 - Torrent 조각 표시 옵션 - 설정 - Torrent 설정 - 조각 표시 - Custom URI 지원 예: hitomi://123 - 동영상 썸네일 추출 최적화 - Hanime.tv 해상도 YouTube 설정을 따르도록 수정 (#3712) - Twitch 해상도 YouTube 설정을 따르도록 수정 (#3723) - Torrent 동시 다운로드 3개 제한 해제 - 작업 목록 필터링 "script:" 추가 예: script:"item.type != 'twitter'" script:"item.filesize > 1024*1024*100" - 가능하면 최종 파일 크기 표시 - 단일 파일 또는 Torrent 작업에서 가능하면 ETA 표시 - 폴더명 형식 type==A?B:C; series==A?B:C; 등 지원 - 썸네일 크기 조절 시 현재 선택된 작업으로 스크롤 - UTF-8 with BOM 지원 (#3739) - 번역 업데이트 (#3739) - #3763 - V LIVE 자막 다운로드 (#3778) - 플레이리스트 파일에 번호 매기기 옵션 - 설정 - 일반 설정 - 플레이리스트 파일에 번호 매기기 - 네이버 블로그 중복 파일명 처리 (#3788, #3817) - 초기 구동 속도 & 저장 속도 최적화 - 다크 모드 전환 속도 최적화 - 테마 설정 옵션 - 설정 - 일반 설정 - 테마 - 작업 목록 필터링에서 제목 검색 시 URL도 포함해서 검색 - 단일 파일 작업 동영상 길이 표시 - Torrent "최대 다운로드 속도" 제한 지원 - Torrent 프록시 설정 지원 - #3790 - FC2 고화질 다운로드 (#3784) - 저사양 모드 (#3878) 옵션 - 설정 - 고급 설정 - 저사양 모드 - Twitter 더 넓은 범위 다운로드 (#3812) - Hiyobi.io 지원 (#3861, #3862) - LHScan 로그인 쿠키 없으면 경고 (#3324, #3815, #3877) - 중복 이미지 찾기 유사도 범위 지정해서 자동 선택 (#3912) - 중복 이미지 찾기 최적화 - Ctrl + 방향키 이동 그룹 지원 (#1336, #3867) - 미리보기 F5 눌러서 새로고침 - 다운로드 목록에서 마우스 오른쪽 버튼으로 스와이프 왼쪽으로 스와이프해서 파일 삭제 - 직접 다운로드 기능 (#3935) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.6 【Aug 12, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - #2966 - Twitter 일부 계정 무한 로딩 문제 해결 - LHScan 새 도메인 지원 (#3603) - Hitomi.la 업데이트 대응 (#3638) - #3632 - #3641 - E(x)Hentai 최대 동시 작업 무시하는 문제 해결 (#3643) - 기타 자잘한 것들 [변경/추가된 기능] - 초기 로딩 시간 최적화 - 썸네일 로딩 시간 최적화 - 설정 파일 (*.ini) 크기 최적화 - 설정 파일 (*.ini) 구조 변경 (신버전에서 작성한 설정 파일 구버전에서 읽을 수 없음) - 고급 설정에서 스크롤할 때 콤보박스나 슬라이더 반응하지 않도록 수정 - 미리보기 창 크기 조절 가능하게 수정 - 다운로더 작업 목록 필터링했을 때 그룹에 해당 갯수 표시 - 소설가가 되자 꼬릿말 추가 (#2888, #3610) - 일시정지 후 완료시킬 수 있게 수정 (#3482, #3609) - 작업 레이지 로딩 끄는 옵션 (#3613) - Pixiv 파일명 형식 "artistid" 추가 (#3636) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.5 【July 11, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - Twitter 업데이트 대응 (#3525) - PornhubPremium 문제 해결 (#3511) - 네이버 웹툰 업데이트 대응 (#3540, #3541) - Hitomi.la 업데이트 대응 (#3545) - 프로그램 패스워드 입력창 다크모드에서 이상하게 보이는 문제 해결 (#3549) - 기타 자잘한 것들 [변경/추가된 기능] - 시작할 때 'Scripts' 폴더에 있는 스크립트 읽는 중 메시지박스 숨김 - 캐싱 작업 보여줌 (#3471) - Hitomi.la / E(x)Hentai 파일들 수정된 날짜 1초씩 띄움 - 작업 목록 필터링에서 제목 검색 시 코멘트도 포함해서 검색 - #3531 - #3528 - 초기 로딩 시간 최적화 (#3539) - 설정 파일 (*.ini) 구조 변경 (신버전에서 작성한 설정 파일 구버전에서 읽으면 썸네일과 파일목록 누락됨) - #3543 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.4a 【June 18, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - 페이지 지정 다운로드 기본값 체크 해제한 다음 다시 실행했을 때 적용되는 문제 해결 (#3464) - Pixiv /artworks 인식 못 하는 문제 해결 (#3474) - #3484 - Pixiv 일부 계정에서 북마크 다운로드 안 되는 문제 해결 (#3460, #3475) - Hitomi.la 업데이트 대응 (#3498) - 기타 자잘한 것들 [변경/추가된 기능] - #3463 - 다음 웹툰리그 다운로드 (#3477) - 화가 나눠진 사이트는 페이지 지정 다운로드 무시하도록 수정 (#3480) - #3481 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.4 【June 08, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - SankakuComplex 100 페이지 다운로드 시 실패하는 문제 해결 (#3366) - Iwara 502 문제 해결 - #3392 - #3387 - #3443 - Hitomi.la 업데이트 대응 (#3457) - 기타 자잘한 것들 [변경/추가된 기능] - #3340 - Pixiv 이미 다운로드한 Ugoira 스킵 (#3355) - 컴퓨터 종료 시 자동으로 저장하고 종료 (#1197) - Iwara 채널 이미지 다운로드 (#3357) - Pinterest 동영상 다운로드 (#3389) - 필터 북마크 추가 (#3353) - 검색기에서 폴더명 형식 달라도 이미 다운로드한 것 인식 (#1240) - 검색기에서 다운로드 완료 표시 마우스 우클릭하면 첫번 째 파일 여는 기능 추가 - Hiyobi.me 지원 종료 - 카카오페이지 로그인 방식 변경 - 이미지 크기 조절할 때 세로나 가로로 많이 긴 이미지 너무 줄어들지 않도록 수정 - 성능 / 메모리 최적화 - 설정 파일 (*.ini) 구조 변경 (신버전에서 작성한 설정 파일 구버전에서 읽을 수 없음) - #3407 - 검색기 날짜 표시 (#3410) - #3449 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.3b 【April 27, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - #3167 - 일시정지 안 되는 문제 해결 (#3191) - Jmana 다른 이미지 섞여서 나오는 문제 해결 (#3192) - Jmana 다운로드 안 되는 문제 해결 (#3220, #3223) - 페이지 지정 다운로드 큰 값 입력하면 생기는 오류 해결 - Niconico 다운로드 안 되는 문제 해결 (#3215, #3228, #3268, #3330) - DeviantArt 일부 이미지 다운로드 안 되는 문제 해결 (#3173) - Hitomi anime 완료 후 뜨는 오류 해결 - Twitter 최대 갯수 이상이면 마지막 트윗 하나만 읽는 문제 해결 (#3201) - 다시 시작 후 대기 중일 때 삭제하면 파일 삭제되지 않는 문제 해결 - Torrent 일시정지하면 파일 수 두 배로 표시되는 문제 해결 - Pixiv 비공개 Bookmarks 다운로드 안 되는 문제 해결 (#3218) - Tumblr 일부 다운로드 안 되는 문제 해결 (#3235) - Iwara 특수문자 들어간 유저명 프로필 페이지에서 다운로드 안 되는 문제 해결 (#3239) - Instagram 삭제된 계정 로딩 문제 해결 (#3249) - Bilibili 일부 주소 다운로드 안 되는 문제 해결 - MyReadingManga 다운로드 안 되는 문제 해결 (#3251) - PornHub 다운로드 안 되는 문제 해결 (#3278, #3283) - 폴더 붙여넣기 안 되는 문제 해결 (#3252) - 공백 있는 Torrent 파일 불러오기 안 되는 문제 해결 - YouTube 일부 영상 다운로드 안 되는 문제 해결 (#3236, #3282) - #3275 - Vimeo 일부 영상 다운로드 안 되는 문제 해결 - DeviantArt 무한 로딩 문제 해결 (#3295, #3329) - SankakuComplex 다운로드 안 되는 문제 해결 (#3325, #3326) - 기타 자잘한 것들 [변경/추가된 기능] - FFmpeg 변환 동시에 하나만 실행 (#3205) - 중복 이미지 찾기 해상도 정보 추가 (#3180) - 중복 이미지 찾기 유사도 설정 추가 (#3181) - 중복 이미지 찾기 썸네일 설정 추가 - Tumblr 움짤 읽는 속도 최적화 - 미리보기에서 마우스 휠로 스크롤 - 작업 목록 필터링에서 artist:, group: → artist: 로 통합 - 작업 고정 기능 추가 (#3242) - Niconico 음원 다운로드 다운로드 버튼 우 클릭 → MP3 (음원) - #3266 - 작업 목록 내림차순 정렬 추가 (#3267) - Gelbooru 검열된 태그 다운로드 (#2566) - 아이콘 모드에서도 태그 표시 - SankakuComplex 개별 게시물 다운로드 - Daum Webtoon 유료 화 다운로드 (#3314) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.3a 【Mar 1, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - LHScan 다운로드 안 되는 문제 해결 (#3079, #3130) - LHScan 제목 잘못 인식하는 문제 해결 (#3162) - 일부 동영상 다운로드 중 삭제하면 생기는 문제 해결 - Pixiv 업데이트 대응 (#3083, #3085) - Twitter twitter_ 인식 못 하는 문제 해결 (#3092) - Avgle 다운로드 안 되는 문제 해결 (#2998) - Jmana 다운로드 안 되는 문제 해결 (#2952) - 일부 Tumblr 다운로드 안 되는 문제 해결 (#3163) - 기타 자잘한 것들 [변경/추가된 기능] - 썸네일 잠금 옵션 (#3073) - Twitch 가능하면 음소거된 부분 복구 (#1585) - Pixiv 로그인 방식 변경 (쿠키 이용) - Pixiv Newest works: Following 지원 (#2286) - 리스트 보기 모드 단축키 변경 Ctrl+M → Alt+V - 플레이리스트 4 배 더 빠르게 다운로드 - #3140 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.3 【Feb 4, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - 다시시작 중 작업 삭제하면 생기는 오류 해결 - 일부 환경에서 너무 늦게 켜지는 문제 해결 (#2988, #2989, #2990, #2991, #2992, #2995) - xHamster 일부 다운로드 안 되는 문제 해결 (#3003) - FC2 동영상 다운로드 안 되는 문제 해결 - YouTube 다운로드 안 되는 문제 해결 (#3052) - 기타 자잘한 것들 [변경/추가된 기능] - --safemode 필요한 경우 자동으로 포함해서 재시작하지 않음 (#2988, #2989, #2990, #2991, #2992, #2995) - 설정 파일 (*.ini) 구조 변경 (신버전에서 작성한 설정 파일 구버전에서 읽을 수 없음) - 작업 목록 저장 시 메모리 점유율 / 속도 최적화 - 붙여넣고 다운로드 단축키 제거 - 검색기에서 태그 리스트 스크롤할 때 전체 리스트 움직이지 않도록 수정 (#2990) - 아이콘 모드에서도 진행바 표시 - 기본 페이지 범위 ~2000 으로 수정 - 기본 폰트 변경 - #2981, #3006 - 미리보기에서 동영상 파일인지 표시 - 필터 버튼 우클릭 메뉴 추가 - 잠금 표시 수정 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.2d 【Jan 16, 2021】 [버그 해결 / 사이트 변경에 의한 수정] - Tumblr 일부 계정 다운로드 안 되는 문제 해결 (#2859) - Pornhub premium 다운로드 안 되는 문제 해결 (#2875) - LHScan 바뀐 URL 지원 (#2916) - Instagram 스토리 개별 다운로드 안 되는 문제 해결 (#2923) - Gelbooru 다운로드 안 되는 문제 해결 (#2924) - Facebook 동영상 소리 안 나오는 문제 해결 (#2912) - Instagram 일부 환경에서 다운로드 안 되는 문제 해결 (#2900) - Pornhub 업데이트 대응 (#2936) - 폴더명에 출력 불가능한 문자 들어가면 생기는 문제 해결 (#2950) - Instagram 오래된 게시물 다운로드 못 하는 문제 해결 (#2886, #2959) - 기타 자잘한 것들 [변경/추가된 기능] - --safemode 필요한 경우 자동으로 포함해서 재시작 (#2843) - 다시 시작 시 폴더명 유지 (#2883, #2882) - 작업 불러오는 시간 두 배 빠르게 최적화 (#2904) - Torrent 같은 해시 인식 - 빠른 액세스 기능 추가 - Instagram 스토리 포함 여부 선택 (#2762) 옵션 - 설정 - Instagram 설정 - 스토리 포함 - 다시 시작하는 중에 첫번째 파일 열 수 있게 수정 - Torrent 작업 주소 복사하면 Magnet URI 복사하도록 수정 - 필터 켜진 상태에서 작업 순서 바꿀 수 있게 수정 (#2813) - 사용자 지정 테마 색 & 다크모드 일반 설정 탭으로 옮김 (#2964) - 역슬래시 제대로 보이도록 수정 (#2965) - 스크롤 속도 조절 (#2972) 옵션 - 설정 - 고급 설정 - 스크롤 속도 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.2c 【Dec 27, 2020】 [버그 해결 / 사이트 변경에 의한 수정] - #2823 - 일부 HiDPI 환경에서 메뉴바가 보이지 않는 문제 해결 (#2824, #2827) - Twitter 로그인 쿠키로 다운로드 안 되는 문제 해결 - ZIP 파일대신 폴더 열리는 문제 해결 (#2823) - Instagram 일부 쿠키 인식 못하는 문제 해결 (#2849) - 트레이 아이콘 안 보이는 문제 해결 - Instagram Stories 다운로드 안 되는 문제 해결 (#2857) - Instagram 사진 수 두배로 나오는 문제 해결 - Tumblr 일부 다운로드 안 되는 문제 해결 (#2859) - YouTube 일부 MPD 포맷 영상 최고 화질로 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - youtube-dl 에서 지원하는 모든 사이트 지원 (#2817) - FC2 Video 다운로드 (#2563, #2819) - Likee 다운로드 - 그룹 열고 닫기 단축키 변경 (Enter → Space bar) - Instagram 로그인 쿠키 넣지 않으면 경고 - 작업 다시 시작해서 읽을 때 로더 보이기 - xHamster 채널 friends only 비디오 제외 (#2858) - 수정한 날짜 유지하면서 움짤 변환 - 수정한 날짜 유지하면서 이미지 크기 조절 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.2b 【Dec 10, 2020】 [버그 해결 / 사이트 변경에 의한 수정] - 플로팅 미리보기 화면 밖으로 나가는 문제 해결 - YouTube 일부 영상 다운로드 안 되는 문제 해결 (#2675) - JMana 다른 이미지 섞여서 다운로드되는 문제 해결 (#2662, #2674, #2709) - 휴지통으로 보내지 않고 바로 삭제하는 문제 해결 (#2677) - Hiyobi.me 일부 URL 인식 못 하는 문제 해결 (#2683, #2721) - Twitter 오래된 트윗 읽지 못하는 문제 해결 (#2534) - MyReadingManga 다운로드 안 되는 문제 해결 (#2598, #2693) - Instagram 압축 & 삭제 설정시 다시 시작 안 되는 문제 해결 (#2552) - 마우스 드래그 잔상 남는 문제 해결 - pixivコミック 다운로드 안 되는 문제 해결 (#2645) - No tags 작동 안 하는 문제 해결 (#2707, #2812) - YouTube VR 다운로드 안 되는 문제 해결 (#2606) - LHScan 일부분 다운로드 안 되는 문제 해결 (#2601) - Daum Webtoon 일부 다운로드 안 되는 문제 해결 (#2571) - Youtube Playlist 일부 다운로드 안 되는 문제 해결 (#2716) - Nijie 첫장만 다운로드되는 문제 해결 (#2669) - BDSMlr 다운로드 안 되는 문제 해결 (#2676) - TikTok 채널 다운로드 안 되는 문제 해결 (#1810) - VLIVE 다운로드 안 되는 문제 해결 (#2766) - XVideos .es 도메인 지원 (#2792) - Instagram 차단 방지 (#2708, #2761, #2773) - 기타 자잘한 것들 [변경 / 추가된 기능] - Rule34.xxx 다운로드 (#868, #1120, #1207, #1662, #2060, #2068, #2694, #2711) - nhentai.com 다운로드 (#2095) - XVideos 채널 다운로드 (#2019, #2695) - Yande.re Pool 다운로드 - 작업 폰트 가독성 개선 - YouTube 이미 다운로드한 파일 스킵 (#2713) - 다운로드 중에도 미리보기 볼 수 있도록 수정 - 검색기 선택한 데이터에 맞춰서 자동완성 되도록 수정 - --safemode 옵션 추가 (#2678, #2679, #2701, #2712, #2714, #2719, #2725) - Nijie 로그인 쿠키 넣어야 동작하도록 수정 (#2669) - 랜덤으로 하나 선택시 가능하면 최상단에 보이도록 수정 (#2200) - --experimental 옵션 추가 (#2687) - Ctrl + 마우스 스크롤로 썸네일 크기 조절 - 미리보기 창 화면 밖으로 나가지 않게 수정 - 주소바를 제외한 곳에 포커스가 있을 때 Ctrl + V 누르면 클립보드에 있는 주소 붙여넣고 다운로드 - youtube-dl (YouTube 영상 추출 모듈) 항상 최신으로 업데이트 - WEBTOON 화 순서대로 정렬되도록 수정 - 자동 완성 아무 텍스트 없이도 볼 수 있게 수정 - 검색어 자동 완성 옵션 "옵션 - 설정 - 고급 설정" 에서 "검색기 - 옵션" 으로 이동 - Twitter /media 탭 주소 중복 인식 - 여러 작업 선택 후 코멘트 수정하면 모두 적용되도록 수정 (#2805) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.2a 【Oct 31, 2020】 [버그 해결 / 사이트 변경에 의한 수정] - 다운로드 중 인터넷 끊기면 다시 연결되어도 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.2 【Oct 30, 2020】 [버그 해결 / 사이트 변경에 의한 수정] - 더보기 버튼 작동하지 않는 문제 해결 (#2508) - 일부 사이트 다운로드 중 열 수 없는 문제 해결 - Torrent 다운로드 안 되는 문제 해결 - 일시 정지 후 다시 다운로드 안 되는 문제 해결 (#2596) - 자동 재시작 전에 다시 시작하면 이상하게 작동하는 문제 해결 - 다시 시작할 때 가끔 파일 크기 잘못 표시하는 문제 해결 - Torrent Magnet 링크 넣으면 쓰레기 파일 만드는 문제 해결 - 내장 브라우저 숨겨지지 않는 문제 해결 (#2603) - Manatoki 일부 화 다운로드 안 되는 문제 해결 (#2622) - Hiyobi.me 다운로드 안 되는 문제 해결 - 삭제 확인창 뜨는 문제 해결 (#2624) - Hitomi.la 다운로드 안 되는 문제 해결 (#2631, #2608, #2609, #2610, #2615, #2616, #2625, #2627, #2628, #2629, #2643, #2657, #2659) - Hitomi.la 일부 다운로드 안 되는 문제 해결 (#2635) - 일시정지 다시 시작 못하는 문제 해결 (#2516) - Sankaku Complex Plus 포함되면 읽기 실패하는 문제 해결 (#2652) - Pixiv 일부 URL 인식하지 못하는 문제 해결 (#2653) - Tiktok 다운로드 안 되는 문제 해결 (#1810) - 작업 목록 메모리 누수 해결 - Kakaopage 다운로드 안 되는 문제 해결 (#2618, #2664) - 버벅일 때 창 드래그하면 이상하게 움직이는 문제 해결 - 동시에 많은 양의 동영상을 다운로드했을 때 전체 다운로드가 멈추는 문제 해결 - 기타 자잘한 것들 [변경 / 추가된 기능] - 메모리 점유율 / 속도 최적화 - 암호화된 M3U8 다운로드 - 특수문자 경로 등의 상황으로 인해 임시 폴더가 잘못 만들어지는 문제 / 권한 문제 (#2513, #2514, #2524, #2526, #2541, #2569, #2630) / 지저분한 임시폴더 문제 (#2565) 때문에 v3.1 이전과 같이 %TEMP% 폴더에 압축 풀도록 변경 - 미리보기 새 창에서 띄우게 수정 - 작가 / 그룹 제외 기능 (#2593) - 썸네일 크기 변경 옵션 옵션 - 썸네일 크기 - 작업 그룹 언제나 보이게 수정 (#2530) - 작가 추천 뷰어 개선 - 아이콘 보기 모드 추가 옵션 (Options) - 보기 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.1 【Sep 24, 2020】 [버그 해결 / 사이트 변경에 의한 수정] - YouTube 일부 앨범아트 삽입 오류 해결 (#2275) - /reader/ 주소 인식 안 되는 문제 해결 (#2277) - 작가 추천 뷰어 썸네일 안 보이는 문제 해결 - 중복 이미지 찾기 일부 파일명 삭제 오류 해결 (#2278) - 작가 추천 저장 안 되는 문제 해결 (#2287, #2444) - 일부 이미지 크기 조절 안 되는 문제 해결 (#2288, #2308, #2318, #2393) - Gelbooru 다운로드 안 되는 문제 해결 (#2290, #2297) - Avgle 일부 다운로드 안 되는 문제 해결 (#2300) - 언어에 .html 붙는 문제 해결 (#2355) - "다시 시작" 했을 때 메시지 길이 너무 늘어나는 문제 해결 - YouTube 일부 영상 변환 실패하는 문제 해결 (#2317, #2436) - Twitter 아무 사진도 없으면 무한 로딩되는 문제 해결 - Naver Webtoon 이펙트툰 다운로드 안 되는 문제 해결 (#2313) - Pawoo 다운로드 안 되는 문제 해결 (#2350) - 일부 사이트에서 폴더 형식에 [artist] 가 들어가지 않았을 때 생기는 문제 해결 (#2349) - YouTube 일부 영상 다운로드 안 되는 문제 해결 (#2368) - Instagram Stories 다운로드 안 되는 문제 해결 - Weibo 다운로드 안 되는 문제 해결 (#2407) - MyReadingManga 다운로드 안 되는 문제 해결 (#2336, #2435) - 하위 폴더 중복해서 압축하는 문제 해결 (#2397) - 일부 환경에서 가끔 다운로드가 완전히 멈추는 문제 해결 - JMana 필요 없는 이미지까지 다운로드되는 문제 해결 (#2431) - Imgur 다운로드 안 되는 문제 해결 (#2430) - 일부 주소 붙여넣기 안 되는 문제 해결 (#2440) - Twitter 개별 tweet 다운로드시 메시지가 길면 이미지를 얻지 못하는 문제 해결 - BDSMLR 다운로드 안 되는 문제 해결 (#2299) - Iwara 채널 다운로드 일부만 되는 문제 해결 (#2499) - AfreecaTV 19금 영상 다운로드 안 되는 문제 해결 (#2493) - 기타 자잘한 것들 [변경 / 추가된 기능] - Yande.re 다운로드 (#1455, #1527, #1756, #2011, #2040, #2211, #2319) - KakaoTV 다운로드 - WEBTOON 다운로드 (#2332) - Manatoki 다운로드 - Naver Post 다운로드 - BestJavPorn 지원 종료 (#2105) - Itmtu 지원 종료 - Manamoa 지원 종료 - Iwara 채널 다운로드 (#1882) - Twitch 모든 Clip 다운로드 (#2396) - Pixiv 중복 작업 방지 (#2302) - "다시 시작" 했을 때 실패하면 불완전한 작업으로 표시하고 에러 표시 - Twitter 안정화 (#2303) - Twitter "다시 시작" 하면 최근 트윗만 업데이트 하도록 수정 (#2344) - 검색기에서 이미 다운로드한 작품 제외하는 옵션 (#2329) 옵션 - 검색 필터 - YouTube 해상도 480p 추가 - FFmpeg 바이너리 다운로드 속도 개선 - Pixiv 원본 수정된 날짜 보존 (#2021) - Jmana 개별 화 주소 넣어도 동작하도록 수정 (#1799, #2496) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.0b 【Aug 15, 2020】 [버그 해결] - 검색기에서 추가 안 되는 문제 해결 -------------------------------------------------------------------------------------------------------------------------------------------- 3.0a 【Aug 15, 2020】 [버그 해결] - 검색기 찾기 퍼지 검색 안 되는 문제 해결 - Twitter 사용자 쿠키 입력시 동영상 다운로드 못 하는 문제 해결 (#2246) - Twitter 리사이징 된 이미지 다운로드 되는 문제 해결 (#2244) - Twitter 개별 트윗 동영상 다운로드 안 되는 문제 해결 - Twitter 오래된 트윗 다운로드 안 되는 문제 해결 (#2244, #2263) - Twitter 일부 계정 다운로드 안 되는 문제 해결 (#2244) - 갤러리 넘버 복사 안 되는 문제 해결 (#2247) - Hiyobi.me 다른 폴더에 저장되는 문제 해결 - YouTube 일부 영상 제대로 다운로드 안 되는 문제 해결 (MPEG DASH) (#2201) - Pixiv Comic 다운로드 안 되는 문제 해결 (#2259) - YouTube 일부 채널 다운로드 안 되는 문제 해결 (#2251) - 중복 이미지 찾기 비슷한 이미지 포함 끄면 메모리 & 디스크 캐시 너무 많이 소비하는 문제 해결 (#2274) cache_imgs.db 지운 후에 써주세요 - 작업 폴더 다른 드라이브로 변경하지 못하는 문제 해결 (#2256) - Weibo 다운로드 안 되는 문제 해결 (#2271) - 다크모드에서 "최대 다운로드 속도" 값 안 보이는 문제 해결 (#2270) - 일부 PNG 파일 포맷 변환 안 되는 문제 해결 (#2273) - 기타 자잘한 것들 [변경/추가된 기능] - PandoraTV 다운로드 (#1532, #1797) - Twitter Live 다운로드 - Weibo 로그인 쿠키 입력하는 방식으로 변경 (#2271) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 3.0 【Aug 10, 2020】 [버그 해결] - YouTube 일부 쿼리스트링 인식 못하는 문제 해결 (#2033) - Twitter 개별 트윗 다운로드 안 되는 문제 해결 (#2035, #2039) - Torrent 다운로드 시작하지 않는 문제 해결 (#2049) - Twitch 일부 영상 다운로드 안 되는 문제 해결 (#2050, #2133, #2197) - nHentai 다운로드 안 되는 문제 해결 (#2053) - Jmana 다운로드 안 되는 문제 해결 (#2017) - LHScan 다운로드 안 되는 문제 해결 (#2064) - #2042 - LHScan 다운로드 안 되는 문제 해결 (#2076, #2079) - AfreecaTV 5 시간 이상 다운로드 못하는 문제 해결 (#2081) - MyReadingManga 다운로드 안 되는 문제 해결 (#2103) - xHamster 새 URL 다운로드 안 되는 문제 해결 (#2104) - YouTube 일부 채널 다운로드 안 되는 문제 해결 (#2124) - #2127 - LHScan 다운로드 안 되는 문제 해결 (#2143) - YouTube 일부 영상 다운로드 안 되는 문제 해결 (#2182) - xHamster 다운로드 안 되는 문제 해결 (#2208) - Bilibili 첫 페이지 외 다운로드 안 되는 문제 해결 (#2184) - Soundcloud 일부 다운로드 안 되는 문제 해결 (#2207) - 일부 E(x)Hentai 다운로드 안 되는 문제 해결 (#2209) - Hitomi.la 제대로 다운로드 안 되는 문제 해결 (#2214, #2216, #2219, #2220, #2222, #2223, #2224, #2225, #2229, #2230, #2239) - Sankaku Complex 사용자 쿠키 인식 안 되는 문제 해결 (#2237) - Luscious 일부 다운로드 안 되는 문제 해결 (#1958) - Weibo 다운로드 안 되는 문제 해결 (#2240) - 기타 자잘한 것들 [변경/추가된 기능] - Danbooru 다운로드 (#155, #1017, #2074) - KakaoPage 다운로드 (#2149) - xHamster 갤러리 다운로드 (#1135, #2002) - TikTok 계정 다운로드 (#1810) - Naver TV 다운로드 - M3U8 파일 다운로드 - Naver Blog 동영상 다운로드 (#1838, #1910, #2032) - 중복 이미지 찾기 WEBP 지원 (#2052) - 다크 모드 옵션 - 설정 - 고급 설정 - 다크 모드 - 예전 스크립트 파일 (*.HDS) 미호환 가능성 인터프리터 Python2 → Python3 로 변경 위젯 툴킷 PyQt4 → PyQt5 로 변경 기타 자잘한 것들 - Windows XP 지원 종료 - 암호 저장 형식 바뀜; 예전 암호 미호환 - 쿠키 저장 방식 바뀜; 예전 쿠키 미호환 - 2 바이트 초과하는 유니코드 문자 지원 - Proxy 암호 저장되게 수정 - E(x)Hentai 밴 방지 - 플로팅 미리보기 속도 향상 - "로컬 파일로부터 새작업 만들기" 폴더 여러개 선택할 수 있도록 수정 (#2116) - E(x)Hentai MPV 주소 지원 - 이미 압축 파일이 있다면 기존 압축 파일에 추가하도록 수정 (#2125) - 선택된 작업 총 파일 크기 표시 - 쿠키 파일 CRLF 지원 (#2179) - 종료 시 진행 중인 작업 있으면 경고 - Bilibili 해상도 YouTube 설정을 따르도록 수정 (#2184) - 불완전한 작업 자동으로 지우지 않도록 수정 (#2150) - E(x)Hentai 중복된 파일명 보정 (#1094, #1923, #2012) - E(x)Hentai 이미 다운로드한 파일 스킵 - AfreecaTV 깨진 부분 제외하고 다운로드 (#2193) - 한 작업 씩 압축하도록 수정 - Pinterest Rate limit 블록 방지 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.8a 【May 30, 2020】 [버그 해결] - YouTube MP3 앨범아트 삽입 안 되는 문제 해결 (#1816) - 작업표시줄 진행상황 표시 안 되는 문제 해결 (#1818) - 토렌트 다운로드 안 되는 문제 해결 (#1837) - 토렌트 마그넷 주소 클립보드에서 자동 추가 인식 안 되는 문제 해결 - 일부 환경에서 폰트 깨지는 문제 해결 (#1823) - 일부 트위터 URL 다운로드 안 되는 문제 해결 (#1826) - E(x)Hentai 압축 안 되는 문제 해결 (#1827, #1889, #1926) - Pornhub 다운로드 안 되는 문제 해결 (#1842, #1843, #1845, #1846, #1855, #1880, #1897, #1899, #1906, #1919, #1928, #1930, #1941, #1952, #1954, #1963, #1974) - 2 GB 이상인 파일 진행 표시줄 보이지 않는 문제 해결 - #1828, #1927 - BDSMLR 다운로드 안 되는 문제 해결 (#1862) - Instagram 일부 환경에서 다운로드 안 되는 문제 해결 (#1489, #1947) - Facebook 로그인이 필요한 페이지 다운로드 안 되는 문제 해결 (#1869) - Pixiv Comic 일부 환경에서 다운로드 안 되는 문제 해결 (#1876) - 유튜브 자막 다운로드 안 되는 문제 해결 (#1879, #1956) - 클립보드에서 자동 추가 옵션 문제 해결 (#1851, #1904) - Iwara 문제 해결 (#1924) - Hiyobi 갤러리 정보 제대로 못 가져오는 문제 해결 (#1926) - Vimeo 일부 영상 저화질로 다운로드되는 문제 해결 (#1938) - MyReadingManga 제목 얻지 못하는 문제 해결 (#1944) - Jmana 다운로드 안 되는 문제 해결 (#1945, #1972) - Youtube 일부 다운로드 안 되는 문제 해결 (#1909, #1915, #1934, #1936, #1942) - hanime 다운로드 안 되는 문제 해결 (#1970, #1990) - YouTube 일부 다운로드 안 되는 문제 해결 (#2004) - 기타 자잘한 것들 [변경/추가된 기능] - WikiArt 다운로드 - baraag.net 다운로드 (#1911) - Hameln 다운로드 (#571, #1360) - V2ph 다운로드 (#1920) - YouPorn 다운로드 - Youku 다운로드 - BestJavPorn 다운로드 (#1960) - KissJav 다운로드 (#595, #1659, #2003) - #1817 - 클립보드에서 자동 추가 기능 모든 사이트별로 설정할 수 있게 변경 - 시스템 트레이 우클릭 메뉴 수정 (#1830) - 토렌트 파일 복붙 가능하게 수정 - Pornhub Premium 다운로드 시 로그인 쿠키 없으면 경고 메시지 - 주소바 우클릭 메뉴 "붙여넣고 다운로드" 추가 - Instagram 스토리 다운로드 (#1489, #1844, #1859) - 중복 이미지 찾기 자동 포커스 (#1790) - 중복 이미지 찾기 선택한 항목 중에서 자동 선택 기능 (#1881) - 중복 이미지 찾기 자동 선택 시 빨간색으로 표시되게 수정 (#1790) - 중복 이미지 찾기 상위 호환 고려 (이미지 정보 새로 캐시) - Pornhub 해상도 YouTube 설정을 따르도록 수정 (#1569, #1900) - PSD / PSB 파일 지원 - 페이지 지정 다운로드 기본값 설정 (#1907) - 프로그램 패스워드 지원 (#1921) - 페이지 수 필터링 다운로드 목록에도 적용되게 수정 - 이미지 읽는 속도 최적화 - 작업 다시 시작했을 때 정보 얻기 실패하면 이전 내용으로 복구 - Pornhub 현재 지역에 맞는 제목으로 다운로드 (#1968) - 작업 수정 기능 (#1973) 마우스 우클릭 - 작업 수정... (F2) - 로컬 파일로부터 새 작업 만들기 (#1806, #1863) 작업 - 로컬 파일로부터 새 작업 만들기 - 태그 단축키 (#1989) - Imgur 연령 제한 포스트 다운로드 (#1995) - 제목 없는 폴더 처리 - 그룹 태그 지원 - 이미 추가된 작업 다시 추가하면 선택하고 스크롤 (#2010) Shift 누르고 다운로드하면 무시하고 추가함 - 저장 중 수정 감지 - 외부 라이브러리 로딩 표시 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.8 【Mar 27, 2020】 [버그 해결] - 일부 유튜브 영상 다운로드 안 되는 문제 해결 (#1604, #1605, #1608, #1641) - Pornhub 일부 채널 다운로드 안 되는 문제 해결 (#1616) - 트위터 다운로드 안 되는 문제 해결 (#1626, #1632) - LHScan 다운로드 안 되는 문제 해결 (#1637, #1739) - 마나모아 다운로드 안 되는 문제 해결 (#1647, #1648, #1651, #1652, #1653, #1677, #1678, #1679, #1685, #1711, #1713, #1719, #1720, #1733, #1750, #1785, #1789) - 일부 사이트 파일 유형 제외 체크하면 다운로드 안 되는 문제 해결 (#1656) - 유튜브 해상도 표기 기준이 아닌 영상 높이 기준으로 다운로드하는 문제 해결 (#1654) - Pornhub 다운로드 안 되는 문제 해결 (#1670, #1673) - 2GB 이상 용량 폴더 압축 안 되는 문제 해결 (#1671, #1741) - epio.app 일부분 다운로드 안 되는 문제 해결 (#1308, #1696) - Pixiv 새로운 북마크 URL 인식 못 하는 문제 해결 (#1710) - 히요비 다운로드 안 되는 문제 해결 (#1748) - #1697 - 트위터 아주 큰 이미지 낮은 퀄리티로 다운로드 되는 문제 해결 (#1731) - Vimeo 다운로드 안 되는 문제 해결 (#1747) - xHamster 다운로드 안 되는 문제 해결 (#1763) - #1776 - #1780 - Soundcloud 다운로드 안 되는 문제 해결 (#1787, #1795) - Pornhub Premium 다운로드 안 되는 문제 해결 (#1791) - Luscious 다운로드 안 되는 문제 해결 (#1798) - YouTube 일부 한글 유니코드 분리되는 문제 해결 - Twitter 쿠키 넣은 채로 동영상 다운로드 안 되는 문제 해결 - Bilibili 다운로드 못 하는 문제 해결 (#1804) - 기타 자잘한 것들 [변경/추가된 기능] - 64bit 프로그램으로 변경 (32bit OS 지원 종료) 여러가지 메모리 관련 이슈 해결 - 작업 개수 제한 10,000 개로 확장 - 패커 변경 - 자체 웹브라우저 내장 - AsmHentai 다운로드 - Avgle 다운로드 (크롬 확장 프로그램) (#607, #1545, #1619) - V LIVE 다운로드 - 爱淘美图 다운로드 - Hanime.tv 다운로드 속도 향상 - 프록시 설정 고스트 드라이버에도 적용되게 수정 - 유튜브 MP4 / MP3 개별 지정 다운로드 (#1630) 주소 입력 - 다운로드 버튼 우 클릭 - `MP4 (동영상)` or `MP3 (음원)` 클릭 - 랜덤으로 하나 선택 (#1364) 작업 - 랜덤으로 하나 선택 - Instagram 개별 포스트 다운로드 지원 (#1665) - 글자수 제한 완화 (#1669) - 설정 파일 (*.ini) 읽는 속도 최적화 (#1663) - 중복 이미지 찾기 삭제된 파일은 오류 뜨지 않도록 수정 (#1391) - 중복 이미지 찾기 이미지 정보 캐시하는 기능 (#1391) - 중복 이미지 찾기 우클릭 메뉴 추가 - 중복 이미지 찾기 자동 선택 기능 (#994) - 쿠키 불러오는 기능 옵션 - 설정 - 고급 설정 - 쿠키 - E(x)Hentai 사용자 로그인 지원 (#817, #277, #1048, #1247) - YouTube 로그인 지원 (#1680) - Pornhub 플레이리스트 다운로드 (#1610, #1699) - 플레이리스트 한 폴더에 다운로드 (Youtube, Pornhub, xHamster, Soundcloud) (#1320) 옵션 - 설정 - 일반 - 플레이리스트 한 폴더에 다운로드 - Pornhub 로그인 방식 변경 - sora1.la URL 지원 - 압축 설정 모든 사이트 지원하도록 수정 - 구글 드라이브 다운로드 오류 메시지 인식 - 검색기 미리보기 검색 목록에서 우 클릭 - 미리보기 - E(x)Hentai 원본 이미지 다운로드 옵션 - 설정 - 히토미 / E(x)Hentai / 히요비 설정 - 원본 이미지 다운로드 - Instagram 비공개 계정 지원 (#1729) - 고스트 드라이버 안정화 (#1742) - 마나모아 중복된 화 (2) 붙이도록 수정 (#1758) - 마나모아 Cloudflare DDoS protection 내장 웹브라우저로 우회 - YouTube 파일 형식 물어보기 옵션 - 설정 - 유튜브 설정 - 파일 형식 물어보기 - MyReadingManga 안정화 - Pixiv Comic 안정화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7h 【Jan 23, 2020】 [버그 해결] - 스트림 영상 제대로 다운로드 안 되는 문제 해결 (#1599) -------------------------------------------------------------------------------------------------------------------------------------------- 2.7g 【Jan 23, 2020】 [버그 해결] - 스트림 영상 제대로 다운로드 안 되는 문제 해결 (#1599) -------------------------------------------------------------------------------------------------------------------------------------------- 2.7f 【Jan 23, 2020】 [버그 해결] - 타입에 hitomi_anime 보이는 문제 해결 - 유니코드 / 한국어 로케일이 아닐 경우에 패스워드 저장 안 되는 문제 해결 (#1533) - Hitomi.la / E(x)Hentai / Hiyobi 페이지 지정 다운로드 파일명 제대로 적용되지 않는 문제 해결 (#1548) - Pixiv 새 URL 인식하지 못하는 문제 해결 (#1550) - Hitomi.la 바뀐 URL 대응 (#1558) - 마나모아 새로운 DDoS protection 대응 (#1566) - 네트워크 위치에 저장 안 되는 문제 해결 (#1520, #1568) - 코멘트 대문자 들어갈 경우 검색 안 되는 문제 해결 (#1557) - Epio 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - Kakuyomu 다운로드 (#1544) - 시스템 로케일에 상관 없이 설정 파일 (*.ini) 인코딩 UTF-8 로 통일 (구버전 호환) (#1533) - 폴더 바로가기 목록 커스텀 - Hanime.tv 다운로드 방식 변경 (#1457) - Timeout 시간 늘림 (#1566) - E(x)Hentai 제목 / 일본어 제목 지원 (#855, #1237, #1565, #1583) - Manamoa 이미지 없는 화 건너뛰도록 수정 (#1589) - Twitch, Xvideos 다운로드 속도 향상 - Twitter 다운로드 안정화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7e 【Jan 2, 2020】 [버그 해결] - 서버를 자동으로 했을 때 일부분 다운로드 안 되는 문제 해결 (#1355) - 삭제된 데이터 일부분 미리보기 보이지 않는 문제 해결 (#1358) - Twitter 개별 트윗 다운로드 시 답글 링크는 다운로드 못 하는 문제 해결 - 마나모아 일부 도메인 다운로드 안 되는 문제 해결 (#1371) - Pixiv comic 다운로드 안 되는 문제 해결 (#1372) - MyReadingManga 다운로드 안 되는 문제 해결 (#1477, #1494) - Pixiv 검색 키워드 불가능한 문자 들어가면 다운로드 안 되는 문제 해결 (#1390) - 논-아스키코드 문자가 포함된 압축파일 연결프로그램에서 열리지 않는 문제 해결 (#1377) - 마나모아 일부 화 다운로드 안 되는 문제 해결 (#1386, #1388, #1404, #1411, #1427, #1440, #1449, #1453, #1461, #1468, #1501) - 대기중인 작업이 많으면 버벅이는 문제 해결 - Windows 10 유니코드 UTF-8 에서 클립보드 복사 시 글자 깨지는 문제 해결 - Hitomi.la 애니메이션 리다이렉트 안 되는 문제 해결 - Hiyobi.me 다운로드 / 검색 안 되는 문제 해결 (#1358, #1426, #1432, #1459) - 다시 시작할 때 프로토콜 들어간 프록시 호스트 잘못 표시되는 문제 해결 - Twitch 일부 영상 다운로드 안 되는 문제 해결 - Twitch 오디오 없는 부분 잘리는 문제 해결 - 중복 이미지 찾기 폴더 일부분만 읽는 문제 해결 (#1422) - Luscious 다운로드 안 되는 문제 해결 (#1423) - Soundcloud 다운로드 안 되는 문제 해결 (#1424) - Pornhub 일부 채널 다운로드 안 되는 문제 해결 (#1320) - Pornhub 일부 1080p 다운로드 안 되는 문제 해결 (#1376, #1433) - Pixiv Rate Limit 일 때 다운로드 안 되는 문제 해결 (#1434, #1450) - Afreeca 다운로드 안 되는 문제 해결 (#1446) - Pixiv 검색 다운로드 안 되는 문제 해결 (#1429, #1438) - DeviantArt 다운로드 안 되는 문제 해결 (#1463) - 검색기 아이콘 보기 모드에서 썸네일 클릭하면 생기는 문제 해결 - Flickr 다운로드 안 되는 문제 해결 (#1483) - 트위터 일부 다운로드 실패하는 문제 해결 (#1493) - 언어가 없는 경우에 그룹 정보를 얻어오지 못하는 문제 해결 (#1500) - Twitch 클립 다운로드 안 되는 문제 해결 - Jmana 다운로드 안 되는 문제 해결 (#1487, #1502) - Vimeo 가끔씩 오류 뜨는 문제 해결 (#1504) - 다음 웹툰 웹툰리그 다운로드 안 되는 문제 해결 (#1505) - 기타 자잘한 것들 [변경/추가된 기능] - XNXX 다운로드 - Pornhub 채널 다운로드 (#1320) - Sankaku Complex Post 다운로드 - imgur.com/r/ 다운로드 (#1498) - 주소바에 아무것도 입력하지 않고 다운로드 버튼 누르면 자동으로 클립보드에 있는 링크 다운로드하도록 수정 - 안정적인 다운로드를 위해 사이트별 최대 동시 작업 수 제한 (#1470) - 일부 화만 다운로드한 작업 "파일 삭제" 하면 필요한 경우 일부 폴더만 삭제하도록 수정 (#1415, #1507) - 히토미 / E(x)Hentai / 히요비 서버 자동으로 선택 시 특정 서버 제외하는 기능 (#1274) 옵션 (Options) - 설정 (Preferences)... - 히토미 / E(x)Hentai / 히요비 설정 - 서버 - 자동 - 우선순위... - weibo.cn URL 인식 (#1445) - French, Spanish 지원 추가 - Twitch & 아프리카TV 다운로드 방식 변경 (#1460) - 픽시브 북마크 id= 생략하면 자동으로 본인 북마크로 다운로드 - 최대 동시 작업 수 제한 (#1470) - 스트림 다운로드 안정화 - 트위터 비디오 다운로드 안정화 (#1493) - 첫 작업 목록 로딩이 모두 완료되면 다운로드 시작 하도록 수정 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7d 【Oct 31, 2019】 [버그 해결] - 작가명 복사 안 되는 문제 해결 (#1308, #1348) - 겔부루 "+" 들어간 태그 다운로드 안 되는 문제 해결 - 픽시브 로그인 안 되는 문제 해결 (#1322, #1332) - 폰허브 프리미엄 다운로드 안 되는 문제 해결 (#1296, #1335) - Bilibili 일부 다운로드 안 되는 문제 해결 (#1167, #1343) - 검색기에서 미리보기 안 보이는 문제 해결 (#1345) - 히토미 애니 다운로드 안 되는 문제 해결 - #1355 - 기타 자잘한 것들 [변경/추가된 기능] - "다시 시작" 하면 맨 위로 올리지 않고 제자리에 두도록 수정 - 그룹 기능 (#286, #1313) 작업 - 새 그룹 만들기 - 그룹 안의 모든 작업 다시 시작 (#1336) - 작업 목록 아이콘 보기 모드 제거 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7c 【Oct 22, 2019】 [버그 해결] - "폴더명 형식" 잘못 파싱하는 문제 해결 (#1243) - 픽시브 로그인 후 오랫동안 다운로드하지 않으면 다운로드 에러 뜨는 문제 해결 (#1244) - 제이마나 다운로드 안 되는 문제 해결 (#1250) - HiDPI 에서 작업이 겹치는 문제 해결 (#1256) - #1255 - HiDPI 에서 렉 걸리는 문제 해결 - xHamster 다른 도메인 인식하지 못하는 문제 해결 (#1268) - Pornhub 일부분 다운로드 안 되는 문제 해결 (#1289) - 로딩 중 응답없음 문제 해결 (#1292) - 저사양에서 검색 중 플로팅 미리보기 깜빡거리는 문제 해결 - 플로팅 미리보기 사라지지 않고 가끔씩 남아있는 문제 해결 - 히토미 다운로드 안 되는 문제 해결 (#1303) - 기타 자잘한 것들 [변경/추가된 기능] - 다음웹툰 다운로드 (#697, #912, #924, #1201) - imgur 다운로드 (#312) - 토렌트 다운로드 - 픽시브 제외 태그 (#1244) - 다운로드 안정화 - 통계 추가 도움말 - 통계... - DeviantArt mature content 다운로드 (#1272) - Pornhub 이미지 & 앨범 다운로드 (#1273) - 설정 파일 & HDS 파일 구조 변경 (구버전 호환) - ChromeDriver 위치 변경 - E(x)Hentai Content Warning 무시하고 다운로드 - 트위터 개별 트윗 다운로드 - 트위터 비디오 다운로드 안정화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7b 【Sep 29, 2019】 [버그 해결] - "작가 추천" - "뷰어" 에서 이미지 보이지 않는 문제 해결 - ".." 으로 끝나는 폴더명 문제 해결 (#1236) - 히토미 일부분 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 픽시브 검색 필터 더 자세히 적용되도록 수정 (인기순, 오래된 날짜순, 날짜 지정, 북마크 갯수 범위) (#1230) 픽시브 프리미엄 계정만 적용됨 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7a 【Sep 27, 2019】 [버그 해결] - 갤러리 정보 파일 생성 (info.txt) 체크하지 않아도 만들어지는 문제 해결 (#1180, #1197) - 검색기에서 갤러리 정보 보이지 않는 문제 해결 (#1181, #1224) - SankakuComplex 에서 파일 유형 제외 적용되지 않는 문제 해결 (#1183) - E(x)Hentai 에서 파일명 형식을 숫자로 하면 확장자 없이 다운로드 되는 문제 해결 - YouTube 일부분 소리 안 나오는 문제 해결 (#1107, #1194) - YouTube 다운로드 안 되는 문제 해결 (#1196) - Hanime 일부분 다운로드 안 되는 문제 해결 (#1175) - Hanime 썸네일 나오지 않는 문제 해결 - lhscan 다운로드 안 되는 문제 해결 (#1202) - 폴더명 끝에 "." 이 들어가면 생기는 문제 해결 (#1214, #1222) - 일부 환경에서 늦게 켜지는 문제 해결 (#1209) - 픽시브 새 URL 인식 못하는 문제 해결 (#1231) - 제목에 들어간 "/" 양쪽으로 공백이 늘어나는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 비디오 스트림 다운로드 안정화 - 개별 작업 다운로드 속도 표시 - lang==A?B:C; 폴더명 형식 규칙 추가 (#1197) - 컴퓨터 종료 시 자동으로 저장하고 종료 (#1197) - 아이콘 보기 모드 추가 옵션 (Options) - 보기 - 스크롤 미리보기 추가 - nhentai 에서 폴더명 형식 따르도록 수정 (#1225) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.7 【Sep 7, 2019】 [버그 해결] - 검색기 페이지 수 필터링 안 되는 문제 해결 (#1047) - 유튜브 제목 가져오지 못 하는 문제 해결 (#1053, #1104) - 폴더명 형식에서 0:id 키워드 잘못 작동하는 문제 해결 (#1050) - 유튜브 일부분 60 FPS 다운로드 안 되는 문제 해결 (#1098) - DeviantArt 제대로 다운로드 안 되는 문제 해결 (#1099) - Referer에 Non-ASCII 문자가 들어가면 다운로드 안 되는 문제 해결 - 중복 이미지 찾기에서 일부분 잘못 인식하는 문제 해결 (#1091) - WorldCosplay 다운로드 안 되는 문제 해결 - XVideos 저화질로 다운로드 되는 문제 해결 (#1137) - xHamster 다른 도메인 인식하지 못하는 문제 해결 (#1165) - 트위터 일부 비디오 다운로드 안 되는 문제 해결 (#1028) - 핀터레스트 다운로드 안 되는 문제 해결 (#1087, #1173) - 기타 자잘한 것들 [변경/추가된 기능] - hanime.tv 다운로드 (#1083) - iwara 다운로드 (#675, #768, #1098) - xhamster 다운로드 (#1135) - 티비플 지원 중단 - 다운로더 목록 필터링 '태그 없음' 추가 (#600) - 코멘트 기능 (#1113) - 중복 이미지 찾기에서 여러줄 복사 기능 (#1090, #1118) - 기본 검색 순서 히토미 -> 히요비 -> E(x)Hentai 순으로 변경 - 서버 우선순위 변경 기능 (#1119) 옵션 (Options) - 설정 (Preferences)... - 히토미 / E(x)Hentai / 히요비 설정 - 서버 - 자동 - 우선순위... - DeviantArt 다운로드 안 되는 문제 해결 (#1130) - FFmpeg 에러 뜨는 문제 해결 (#1006, #1136) - 다시시도해서 Invalid 뜬 작업 폴더 열 수 있도록 수정 (#1113) - 메모리 최적화 - 트위터 일반적인 방법으론 보이지 않는 오래된 이미지도 다운로드 (#333, #1112, #1028) - 프록시 설정 재실행해도 유지 (#1156) - 개별 작업 일시 정지 기능 (#1028, #1101) - 트위터 트윗에 포함된 twitpic 다운로드 (#1155) - 트위터 비디오 포함되어있을 경우에도 읽는 속도 빠르게 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.6d 【Jul 27, 2019】 [버그 해결] - 언어를 바꾸고 스크립트를 가져오면 저장 폴더 콤보박스 텍스트 밀리는 문제 해결 - #847 - Hentai Foundry 필터 문제 해결 (#862) - 소설가가 되자 이름이 긴 화 다운로드 안 되는 문제 해결 (#863) - Cloudflare DDoS protection 우회 (#848, #823, #851) - 제이마나 다운로드 안 되는 문제 해결 (#894, #944, #992) - Ctrl + 방향키로 작업 순서를 변경하면 정렬 기준을 변경했을 때 반영되지 않는 문제 해결 - 페이스북 일부분 다운로드 안 되는 문제 해결 & 속도 개선 - 트위터 일부 동영상 다운로드 안 되는 문제 해결 (#896, #903) - 인스타그램 사진과 동영상 섞여있는 게시글 스냅샷으로 다운로드 되는 문제 해결 (#903) - 니코동 로그인 적용 안 되는 문제 해결 (#878, #886) - 니코동 팔로우 제한 영상 다운로드 안 되는 문제 해결 (#886) - #908 - 일부 환경에서 DPI 우회 안 되는 문제 해결 (#917) - 유튜브 다운로드 안 되는 문제 해결 (#927, #930, #943) - 네이버 웹툰 다운로드 안 되는 문제 해결 (#939) - 트위치 제목이 "." 으로 끝나면 비정상 작동하는 문제 해결 (#958) - #972 - 산카쿠컴플렉스 다운로드 안 되는 문제 해결 (#980, #981) - 히토미 파일 깨지는 문제 해결 (502 Bad Gateway) (#1024, #1025) - 클립보드 자동 추가 멈추는 문제 해결 (#1021) - 기타 자잘한 것들 [변경/추가된 기능] - 코믹워커 다운로드 (#890) - 소설가가되자 수정된 날짜 표시 (#845) - 중복 이미지 찾기 미리보기 크기 변경 (#871) - PhantomJS 위치 변경 (#888) - 잘못된 한글 태그 수정 (#898) - 기본 데이터 다운로드 속도 개선 - 겔부루 다운로드 제한 늘림 (#1017) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.6c 【May 16, 2019】 [버그 해결] - #741 - 폰트 문제 해결 (#738) - 아트스테이션 다운로드 안 되는 문제 해결 (#748, #773, #794, #807) - 히요비 다운로드 안 되는 문제 해결 (#758) - 히토미 애니메이션 다운로드 안 되는 문제 해결 (#763) - 유튜브 다운로드 안 되는 문제 해결 (#780, #799, #818) - #788 - 제이마나 다운로드 안 되는 문제 해결 (#808) - 니코동 프리미엄 계정 적용되지 않는 문제 해결 (#793, #805) - XP에서 유튜브 변환 안 되는 문제 해결 (#818) - 유튜브 채널 일부부만 다운로드 되는 문제 해결 - #831 - XVideos 다운로드 안 되는 문제 해결 - 픽시브 코믹 WEBP로 다운로드 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - Hentai Foundry 다운로드 (#256, #593, #743, #812) - 낮토끼 지원 중단 - 중국어 추가 (#738) - 익스플로러 잘못된 URL 지원 (#786) - 마나모아 오래된 URL 리다이렉트 - #823 - 유튜브 https://www.youtube.com/playlist?list=xxxxxxx 만 플레이리스트 다운로드하도록 수정 (#827) - 메모리 최적화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.6b 【Apr 15, 2019】 [버그 해결] - 히토미 다운로드 안 되는 문제 해결 (#700, #703, #706, #714, #715, #717, #718, #719, #720, #733) - 픽시브 다운로드 안 되는 문제 해결 (#701) - 마나모아 이미지 없는 화 실패하는 문제 해결 (#710) - 마나모아 일부분 다운로드 안 되는 문제 해결 (#731) - 프로그램 경로에 한글이나 특수문자가 들어가면 [브라우저로 보기] 기능이 작동하지 않는 문제 해결 - 히요비 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 망가쇼미 지원 중단 - 마나모아 새로운 도메인 지원 (#712) - #698 - #709 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.6a 【Apr 7, 2019】 [버그 해결] - 작가 추천 기능 작동하지 않는 문제 해결 (#588) - #556, #574 - 도움말 - 정보 나오지 않는 문제 해결 - #578 - 네이버 웹툰 컷툰 다운로드 안 되는 문제 해결 (#576) - PDF 생성 안 되는 문제 해결 (#582) - PDF 생성 중 작업을 삭제하면 멈추지 않는 문제 해결 - 히토미 일부분 다운로드 안 되는 문제 해결 (#555, #610, #619, #622) - 히요비 다운로드 안 되는 문제 해결 (#603) - 제이마나 일부분 다운로드 안 되는 문제 해결 (#605) - 픽시브 움짤 일부 변환 안 되는 문제 해결(#611) - 네이버 블로그 _blur 붙는 문제 해결 (#612) - Goodbyedpi 프로세스 남아서 실행되지 않는 문제 해결 (#619) - ; 들어간 URL 다운로드 안 되는 문제 해결 (#623) - 망가쇼미 다운로드 안 되는 문제 해결 (#624, #626) - 플로팅 미리보기 크기 문제 해결 (#633) - E(x)Hentai 다운로드 안 되는 문제 해결 (#638, #640, #643, #661) - 설정 저장 오류 해결 (#647) - 페이지 지정 다운로드 창 읽는 중 닫으면 프로그램 종료되는 문제 해결 - #673 - 네이버 웹툰 스마트툰 다운로드 안 되는 문제 해결 (#679) - 유튜브 60FPS 다운로드 안 되는 문제 해결 (#683) - 픽시브 다운로드 안 되는 문제 해결 (#686) - 기타 자잘한 것들 [변경/추가된 기능] - 트위치 다운로드 (#652) - 픽시브 키워드 다운로드 (#602) - 마나모아 다운로드 (#669) - 다운로드 속도 표시 - 최대 다운로드 속도 설정 옵션 - 설정 - 고급 설정 - 최대 다운로드 속도 - 네이버 웹툰 선택 화 다운로드 (#576) - 이미지 읽기 속도 향상 - PDF 스킵 (#585) - 설정 저장 중 예기치 않게 종료 된 경우에, 다시 실행할 때 설정 파일 복구 (#598) - 태그명 설정 (#600) - 망가쇼미 IP 주소 지원 (#642) - 음악 파일 앨범아트 지원 (#644) 옵션 - 설정 - 고급 설정 - 음악 파일에 앨범아트 삽입 - 잠금 기능 (#646) - 저장이 필요할때만 묻도록 수정 (#654, #667) - #684 - #689 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.6 【Feb 24, 2019】 [버그 해결] - 망가쇼미 이미지 잘리는 문제 해결 (#460) - 히토미 검색기 기본데이터 다운로드 안 되는 문제 해결 (#463, #466, #476, #479, #493, #494) - 소설가가 되자 단편 다운로드 안 되는 문제 해결 (#464) - info.txt 압축파일에 포함되지 않는 문제 해결 (#471) - 픽시브 움짤 많으면 실패하는 문제 해결 (#475) - 유튜브 일부 플레이어에서 소리 인식하지 못하는 문제 해결 (#480) - 망가쇼미 Timeout 문제 해결 (#488) - 망가쇼미 프록시 적용되지 않는 문제 해결 (#502) - 망가쇼미 ? 포함된 주소의 파일 다운로드 안 되는 문제 해결 - #522 - 망가쇼미 가장자리 검은줄 생기는 문제 해결 (#538) - 비리비리 다운로드 안 되는 문제 해결 (#536) - 니코동 일부 환경에서 다운로드 안 되는 문제 해결 (#544) - 섬네일 드래그 문제 해결 (#553) - 일부 환경에서 StackHash_0a9e 오류 뜨는 문제 해결 (#554) - 히요비 다운로드 안 되는 문제 해결 (#555) - 제이미나 다운로드 안 되는 문제 해결 (#560) - 마리망 다운로드 안 되는 문제 해결 (#562) - 기타 자잘한 것들 [변경/추가된 기능] - #458 - 압축파일 연결 프로그램 설정 (#489) 옵션 - 설정 - 고급 설정 - 압축파일 연결 프로그램 - 작업 목록 정렬 기능 (#491) - [첫 번째 파일 열기] 할 때 원본 파일이 삭제된 경우 압축 파일 열리게 수정 - 망가쇼미 새 도메인 지원 (#513) - [다시 시작] 할 때 지워진 파일 제외하고 다운로드 (#458, #519) - 마리망 여러 화 있는 작품 다운로드 (#520) - 자동으로 관리자 권한으로 실행 시도 (DPI 우회 시 필요) DPI 우회가 필요 없다면 취소하고 실행하셔도 됩니다 - DPI 우회 (Windows7 이상) (#515) 옵션 - 설정 - 고급 설정 - DPI 우회 - 플로팅 미리보기 CPU 사용량 최적화 - 작업표시줄 색 표시 방식 변경 (#553) - 중복 실행 시 먼저 실행된 프로그램 띄우기 (#553) - 부팅 시 실행 (#553) 옵션 - 설정 - 고급 설정 - 부팅 시 실행 - 다운로드 시 404 Not Found 뜨면 한번 더 시도하도록 수정 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.5d 【Feb 3, 2019】 [버그 해결] - 망가쇼미 일부 다운로드 안 되는 문제 해결 (#397) - 일부 환경에서 한글 폰트 깨지는 문제 해결 (#406) - 이미지 크기 조절 문제 해결 (#409) - 이미지 크기 조절 후 변경된 파일 크기가 반영되지 않는 문제 해결 - 망가쇼미 NEW 붙은 화 다운로드 안 되는 문제 해결 (#417) - 망가쇼미 NEW 붙는 문제 해결 (#421) - 유튜브 일부 다운로드 안 되는 문제 해결 (#425, #444) - 히요비 다운로드 안 되는 문제 해결 - 인스타그램 제대로 다운로드 안 되는 문제 해결 (#429) - 저장 폴더명 오류 해결 (#430) - 제이마나 작가명 잘못 인식하는 문제 해결 (#433) - 히토미 애니메이션 다운로드 안 되는 문제 해결 - E(x)Hentai Lo-Fi 갤러리 인식하지 못하는 문제 해결 - 사용자 이름에 한글이나 특수문자가 들어갔을 때 유튜브 / 우고이라 등 변환되지 않는 문제 해결 (#437) - weibo 일부 주소 인식하지 못하는 문제 해결 (#445) - lhscan 불안정한 문제 해결 - 망가쇼미 최신화 제대로 다운로드되지 않는 문제 해결 (#448, #451) - 히요비 다운로드 안 되는 문제 해결 (#449) - 검색기 기본 데이터 다운로드 안 되는 문제 해결 (#452, #453) - 기타 자잘한 것들 [변경/추가된 기능] - 소설가가 되자 다운로드 (#411) - 망가록 다운로드 - 히요비 non-h 지원 중단 - 이미지 포맷 변환 (#409) 옵션 - 설정 - 고급 설정 - 이미지 포맷 변환 - 비리비리 고화질 다운로드 (#418) - 비리비리 다운로드 속도 개선 - 비리비리 플레이리스트 다운로드 (#418) - 사이트 별 저장 폴더 지정 (#423) - 유튜브 음원 다운로드 음질 조정 (#21) 옵션 - 설정 - 유튜브 - 음질 - 유튜브 변환 속도 향상 (#425, #444) - 히토미 애니메이션 다운로드 속도 개선 - PDF 생성 (#399, #441) 옵션 - 설정 - 고급 설정 - PDF 생성 - 유튜브 자막 다운로드 (#444) 옵션 - 설정 - 유튜브 - 자막 - 동영상 파일도 섬네일 보이게 수정 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.5c 【Jan 9, 2019】 [버그 해결] - 텍스트 필드 실행 취소 / 다시 실행 문제 - 네이버 블로그 blog.me 형식의 주소 인식하지 못하는 문제 해결 - 제이마나 다운로드 안 되는 문제 해결 (#371) - 유튜브 다운로드 안정화 - 다운로더 목록에서 섬네일 드래그 & 드롭 시 파일명에 한글이나 특수문자가 들어가면 동작하지 않는 문제 해결 - 유튜브 변환 중 종료할 경우 FFmpeg 프로세스가 남는 문제 해결 - 망가쇼미 다운로드 안 되는 문제 해결 (#369, #370) - 유튜브 프록시 적용되지 않는 문제 해결 - 파이어폭스 웹브라우저에서 [브라우저로 보기]가 동작하지 않는 문제 해결 - FFmpeg 초기화 문제 해결 - 산카쿠컴플렉스 일부 환경에서 다운로드 안 되는 문제 해결 (#380) - 제이마나 다운로드 안 되는 문제 해결 (#378) - 산카쿠컴플렉스 & 들어가는 태그 다운로드 안 되는 문제 해결 (#382) - 히토미 일부 삭제된 갤러리 다운로드 안 되는 문제 해결 - 미리보기 체크하지 않고 검색했을 때 이미 다운로드한 작품 표시하지 못하는 문제 해결 - 작업 추가할 때 프로그램이 프리징 되는 문제 해결 - 경로에 한글이나 특수문자 있으면 작업 정보를 볼 수 없는 문제 해결 (#367, #379) - 페이지 지정 다운로드 문제 해결 (#389) - #367 - #389 - 기타 자잘한 것들 [변경/추가된 기능] - 저장할 때 주소 입력창 텍스트도 저장 - 유튜브 / 비메오 / 폰허브 / XVideos / 니코동 다운로드 성능 향상 - 제이마나 이미 다운로드한 화 스킵 - 제이마나 선택 화 다운로드 - 제이마나 폴더명 형식 변경 - 망가쇼미 폴더명 형식 변경 - 인스타그램 XP에서도 동작하도록 수정 (#362) - 유튜브 XP에서도 동작하도록 수정 (#358) - 픽시브 움짤 품질 & 성능 향상 - Win10 미만에서 픽시브 움짤 WEBP 지원 - 대기 중인 작업도 타입 표시 - 망가쇼미 개별화 주소 넣으면 해당 화만 다운로드 (#366) - 드래그 & 드롭으로 작업 순서 변경할 때 내용 보이게 수정 - 망가쇼미 폴더명 형식 설정 (#372, #375) - [다시 시작] 했을 때 대기 중에도 폴더 열거나 삭제 가능하게 수정 - 태그 기능 - #398 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.5b 【Dec 17, 2018】 [버그 해결] - #310, #311, #320, #324 - 데비안아트 다운로드 안 되는 문제 해결 (#342) - 유튜브 MP3 다운로드 안 되는 문제 해결 - 자동 저장 10배 빠르게 되는 문제 해결 - 제목이 없는 갤러리 에러 뜨는 문제 해결 (#328) - E(x)hentai 일부 이미지 다운로드 안 되는 문제 해결 - 저장 폴더가 상대 경로이고 다운로드 중 폴더 / 파일 선택창을 탐색할 경우, 저장 경로가 어긋나는 문제 해결 - 니코동 다운로드 안 되는 문제 해결 - HiDPI 문제 - 인스타그램 확장자 문제 해결 (#349) - 핀터레스트 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - nhentai 다운로드 - 마리망 다운로드 - Pawoo 다운로드 (#341) - 망가쇼미 다운로드 - 마루마루 지원 중단 - 밤툰 지원 중단 - 네이버 블로그 원본 이미지 다운로드 (#318) - 사운드클라우드 Tracks / Playlists 다운로드 - 업데이트 체크 안정화 - 단일 파일 다운로드 메시지 제거 - 여러 작업 선택 시 빠른 도구 제공 - 숨김 키 옵션 - 설정 - 고급 설정 - 숨김 키 - 선택 화 다운로드 (#330, #334, #345) 도움말 - 사용법... (F1) - 선택 화 다운로드 참고 - 히토미 Redirect 대응 - 이미 다운로드한 화 스킵 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.5a 【Nov 23, 2018】 [버그 해결] - 폴더명 형식 문제 해결 (#248) - 폴더명 길이가 255를 초과하면 다운로드되지 않는 문제 해결 (#260, #272) - 대문자 북마크 문제 해결 - 히요비 다운로드 안 되는 문제 해결 (#270, #285) - 다른 작업 다운로드 도중 리캡챠 풀지 못하는 문제 해결 (#251) - 갤부루 다중 태그 다운로드 안 되는 문제 해결 (#266) - #268 - 자동 업데이트 진행 안 되는 버그 해결 - URL 내에 maru_ 등이 들어있을 때 생기는 문제 해결 (#278, #285, #288) - 산카쿠 컴플렉스 일본어 페이지 인식 안 되는 문제 해결 - 비리비리 페이지 있는 영상 다운로드 안 되는 문제 해결 (#52) - 다운로드 파일이 0 개일 경우 info 파일 생성되지 않는 문제 해결 (#283) - E(x)hentai 특정 페이지 링크를 다운로드 시도하면 일부분만 다운로드되는 문제 해결 (#212) - reCAPTCHA 풀리지 않는 문제 해결 (#289, #292) - 유튜브 일부 영상 다운로드 안되는 문제 해결 (#306) - E(x)hentai 다운로드 중 삭제할 때 파일 일부분 남는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 검색 순서 변경 (#245) 검색기 - 옵션 - 검색 순서 - 다운로드 날짜 표시 (#265) 옵션 - 설정 - 고급 설정 - 다운로드 날짜 표시 - 픽시브 움짤 스킵 (#273) - 느린 네트워크 환경 대응 (응답 대기 시간 변경: 12초 -> 36초) - 다운로드 완료 후 자동 제거 (#232) 옵션 - 설정 - 고급 설정 - 다운로드 완료 후 자동 제거 - 검색기 아이콘 보기 모드에서도 이미 다운로드한 작품 표시 - 검색기 아이콘 보기 모드에서도 갤러리 넘버 보이게 수정 - E(x)hentai 이미 다운로드 된 파일 스킵 - 유튜브 해상도 선택 (#21, #207, #221, #295) 옵션 - 설정 - 유튜브 - 해상도 - 브라우저로 보기 서브 폴더 별로 페이지 만들도록 변경 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.5 【Sep 28, 2018】 [버그 해결] - 인스타그램 이름 없는 경우 다운로드 안 되는 문제 해결 (#184) - 유튜브 일부 MP3 다운로드 안 되는 문제 해결 (#186) - https://www.deviantart.com/*/ 형식의 갤러리 다운로드 안 되는 문제 해결 (#191) - 데비안아트 일부 갤러리 다운로드 안 되는 문제 해결 (#204) - 데비안아트 이름을 얻지 못했다고 뜨는 문제 해결 - 긴 북마크가 지워지지 않는 문제 해결 - 검색기 검색 중 플로팅 미리보기 깜빡이는 문제 해결 - 산카쿠 컴플렉스 Non-ASCII URL 인식 못하는 문제 해결 - 언어 변경할 때 다운되는 문제 해결 - 일부 컴퓨터에서 인스타그램 다운로드 안 되는 문제 해결 (#209) - 티비플 파일 확장자 잘못되는 문제 해결 - 겔부루 특수문자 들어간 태그 다운로드 안 되는 문제 해결 (#217) - 간단 검색에서 Enter 눌러서 검색했을 때 두번 연속 검색되는 문제 해결 - 트위터 일부 동영상 다운로드 안 되는 문제 해결 (#219) - 유튜브 일부 다운로드 안 되는 문제 해결 (#235) - ExHentai 다운로드 안 되는 문제 해결 - E(x)Hentai 일부 갤러리 다운로드 안 되는 문제 해결 (#223) - E(x)Hentai 일부 파일 다운로드 안 되는 문제 해결 (#236) - 비메오 일부 동영상 다운로드 안 되는 문제 해결 - 비리비리 제목 오류 문제 해결 - #238 - 기타 자잘한 것들 [변경/추가된 기능] - 네이버 웹툰 다운로드 (#185) - 히요비 다운로드 - 마나스페이스 지원 중단 - 스크립트 (#206) 메뉴 - 스크립트... 도움말 - 사용법... (F1) - 스크립트 참고 - 검색기 제목 목사 (#188) - 작가 합쳐서 불러오기 (#113) 검색기 - ★ - 작가 합쳐서 불러오기 - 산카쿠 컴플렉스 페이지 제한 없앰 (#189, #190) - 검색기 목록 보기 모드에서, 오른쪽 방향키로도 [다운로드 & 삭제] 할 수 있도록 수정 (#196) - 검색기 아이콘 보기 모드에서, 마우스를 올리면 정보가 보이게 수정 - 검색기 아이콘 보기 모드에서, 선택한 항목이 잘 구별되게 수정 - 데비안아트 플래시 다운로드 - 픽시브 / 트위터에서 이미 다운로드 했지만 닉네임 변경으로 폴더명이 일치하지 않는 경우 새 폴더명으로 변경해서 다운로드 - 파일 유형 제외 (#228) 옵션 - 설정 - 고급 설정 - 파일 유형 제외 - 이미 다운로드한 작품 검색기 검색 결과에서 표시 (#211, #232) - 검색기 목록 필터에 "done:" 추가 도움말 - 사용법... (F1) - 검색기 목록 필터링 참고 - 단일 파일 사이트 최대 동시 8개 다운로드 (Youtube, Niconico, etc.) - 중복 이미지 찾기 메뉴 - 중복 이미지 찾기... - 작업들 내보내기 / 가져오기 파일 - 선택된 작업들 내보내기 / 작업들 가져오기 - 다운로더 목록 순서 변경 ([Ctrl + Home], [Ctrl + End]) 도움말 - 사용법... (F1) - 다운로더 목록 순서 변경 참고 - 동영상 파일명 형식 (#233) 옵션 - 설정 - 유튜브 - 파일명 형식 - 자동 저장 (#242) 옵션 - 설정 - 고급 설정 - 자동 저장 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.4 【Aug 2, 2018】 [버그 해결] - 다운로더 목록에서 작업을 선택하고 다른 곳으로 스크롤 한 뒤에 새로 작업을 추가하거나 다른 작업의 제목이 바뀌면 선택한 작업으로 스크롤 되는 문제 해결 - 일부 컴퓨터에서 유튜브 다운로드 안 되는 문제 해결 (#149) - 일부 컴퓨터에서 픽시브, 마루마루 다운로드 안 되는 문제 해결 (#73, #133, #149, #167) - 파일 다운로드 안 되는 문제 해결 - 다운로드 버튼에 마우스 올리면 버벅이는 문제 해결 - 일부 컴퓨터에서 폰트 깨지는 문제 해결 (#147) - E(x)hentai 다시 시작하면 404 Not Found 뜨는 문제 해결 (#177) - 니코동 "nicovideo.jp/watch/so000000" 형식의 주소 인식하지 못하는 문제 해결 - 다운로더 필터를 킨 후에 목록 내용이 바뀌었을 때 반영되지 않는 문제 해결 - 트위터 동영상 다운로드 안 되는 문제 해결 (#172) - 유튜브 일부 동영상 720p 미만으로 다운로드 되는 문제 해결 (#176) - 태그 자동완성 순서 잘못되는 문제 해결 - 일부 제목 깨지는 문제 해결 (#179) - 일부 미리보기 안 보이는 문제 해결 (#179) - E(x)hentai 최근 갤러리 넘버 찾지 못하는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 산카쿠 컴플렉스 다운로드 (#109, #120, #155) - 사운드클라우드 다운로드 - 작가나 그룹이 둘일 경우 생략하지 않고 모두 표시하도록 수정 (#148) - 다운로드 대기 중인 것도 중복 체크 (#150) - 다운로더와 검색기를 작업표시줄에 서로 다른 창으로 표시되게 수정 (#151) - 마루마루 오래된 만화 로딩 더 빠르게 - 목록에서 몇 개 선택했는지 표시 (#153) - 북마크 버튼 토글로 동작하게 바꿈 (#153) - 검색기에서 링크 여는 기능 (#153) - HiDPI 관련 - 메뉴 한글화 안 된 부분 고침 - 키패드 Enter도 인식하게 수정 (#159) - 클립보드에서 자동 추가 사이트 선택 (#159) - 다운로더 목록 필터에 "bad:" 추가 도움말 - 사용법... (F1) - 다운로더 목록 필터링 참고 - 압축과 원본 폴더 삭제를 체크하고 다운로드 할 때, 이미 다운로드된 것 스킵 (#47, #62, #161) - [50개씩 끊어서 검색]을 체크하지 않았을 경우에 1000 개 씩 끊어서 검색하도록 수정 - 다운로더 목록 순서 변경 (#159) 도움말 - 사용법... (F1) - 다운로더 목록 순서 변경 참고 - 검색기 목록 필터링 (#161, #178) 도움말 - 사용법... (F1) - 검색기 목록 필터링 참고 - 픽시브 &type= 인식 (#167) - 일시 정지 기능 (#170) - 'dup:'으로 다운로더 목록 필터링할 때, 중복된 것이 하나만 남게 되면 자동으로 목록에서 사라지게 바꿈 (#170) - 미리보기 크기 조절 (#174) - 검색기 아이콘 보기 모드 검색기 - 옵션 - 보기 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.3d 【Jul 6, 2018】 [버그 해결] - 폴더 형식의 / 가 인식되지 않는 문제 해결 (#143) - 검색기 기본 데이터 다운로드 안 되는 문제 해결 (#144, #146) - 다중모니터 환경에서 플로팅 미리보기가 제대로 동작하지 않는 문제 해결 (#142) - 기타 자잘한 것들 [변경/추가된 기능] - 다운로더 목록 필터링을 켜고 끌 때 선택된 작업이 유지되게 수정 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.3c 【Jul 4, 2018】 [버그 해결] - 여러개 한꺼번에 추가할 때 버벅이는 문제 완화 - 403 Forbidden 다운로드 안 되는 문제 해결 (#141) - 기타 자잘한 것들 [변경/추가된 기능] - 마나스페이스 암호 걸린 만화 다운로드 - 검색기 데이터 언제 받았는지 표시하고 일주일 이상 오래됐다면 알려주도록 수정 - 작가 추천 기능에서, 표지 볼 수 있는 기능 결과 화면에서 [Viewer...] - 검색기 중복 제거 기능에서 작가 이름이 같을 때만 중복으로 판단하도록 변경 (#138) - 검색기 갤러리 넘버 복사 (#138) - 다운로더 창에서 Ctrl + Tab 으로 툴 켜고 끄기 - 다운로더 목록에서 태그로 필터링 (#135) 도움말 - 사용법... (F1) - 다운로더 목록 필터링 참고 - CBZ 압축 (#139) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.3b 【Jun 21, 2018】 [버그 해결] - 마루마루 다운로드 안 되는 문제 해결 (#123, #124) - 압축파일 경로가 이상하게 되는 문제 해결 - 유튜브 섬네일 안 보이는 문제 해결 - E-Hentai 일부 갤러리 다운로드 안 되는 문제 해결 - 잘못된 작업을 완료됨으로 표시할 때 에러 뜨는 문제 해결 - 검색기 기본 데이터 다운로드 안 되는 문제 해결 (#131) - 기타 자잘한 것들 [변경/추가된 기능] - 마나스페이스 다운로드 (#129) - 파일 다운로드 예: file_https://hitomi.la/logo.png - 플로팅 이미지 크기 조절 (옵션 - 설정 - 일반 - 플로팅 미리보기) - 검색기 중복 제거 (검색기 - 옵션 - 중복 제거) (#106) - 디스크 공간 부족시 경고 - 목록 저장 / 불러오기 속도 향상 - 디스크 공간 부족 또는 다른 이유로 목록을 저장 못할 시 경고 메시지 - 작업표시줄에서 진행 상황 보이게 (Windows 7 이상) - 도움말 - 정보 & 버전 확인 & 통계 하나로 합침 - 끊어서 검색하는 기능 (검색기 - 옵션 - 끊어서 검색) (#42) - E-Hentai 좀 더 안정적으로 다운로드하게 수정 (#126) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.3a 【Jun 7, 2018】 [버그 해결] - "저장 폴더에 있는 모든 갤러리 넘버 복사" 기능이 압축파일을 인식하지 못하는 문제 해결 (#96) - 작가 추천 기능에서 압축파일로 된 갤러리를 인식하지 못하는 문제 해결 (#96) - 폴더명 형식에 "/" 가 들어가면 인식하지 못하는 문제 해결 (#92, #98, #104) - #101 - 메모리 사용량 ERR 뜨는 문제 해결 (#118) - 작가 이름 소문자로 되는 문제 해결 (#97) - 핀터레스트 다운 안 되는 문제 해결 (#84) - 겔부루 다운로드 안 되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 자동 업데이트 - 픽시브 움짤 WEBP 변환 - 유튜브 채널 / 플레이리스트 다운로드 (#107) - 픽시브 태그 필터링 - 작가 추천 기능에서, 소괄호 또는 대괄호 안에 숫자가 들어있기만 하면 인식 되도록 수정 (#113) - 작가 추천 기능에서, 목록을 저장하고 불러오는 기능 (#95) - 마루마루 이미 다운로드 된 화 스킵 (#105) 제대로 다운되지 않은 화가 있다면 해당 화 폴더를 삭제하고 다시 시도해주세요 - 갤러리 넘버 복사 더 빠르게 - 검색기 - 고급 검색에서 검색 범위 수치 직접 입력할 수 있게 수정 (#103) - 북마크 이름 순 정렬 (#115), 초기화 - 히토미 제외 태그 (#110) 옵션 - 설정 - 히토미 - 제외 태그 - 검색기 태그 번역 - 완료됨으로 강제 설정하는 기능 (#116) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.3 【May 8, 2018】 [버그 해결] - 밤토끼 메인 페이지 입력할 시 오류 뜨는 문제 해결 - 밤토끼 한글 URL 인식 못하는 문제 해결 (#74) - 프로그램 종료 후 프로세스가 종료되지 않고 남아있는 문제 해결 - 마루마루 작가명을 읽지 못하는 문제 해결 - and가 들어간 단어를 제목 검색하면 오류 뜨는 문제 해결 - HiDPI에서 통계 항목이 작게 보이는 문제 해결 - 인스타그램 다운로드 안 되는 문제 해결 (#83, #87) - 제목에 by 들어가면 뒷부분 잘리는 문제 해결 - 유튜브 다운로드 실패 줄임 - 폴더명 형식에 0:id와 id가 동시에 들어가면 폴더 이름이 이상하게 되는 문제 해결 - Bilibili 제목을 제대로 읽지 못하는 문제 해결 - Color table 가진 이미지가 섬네일에서 깨지는 문제 해결 - 윈도우 10 UTF-8 인코딩 관련 오류 해결 (#86) - 기타 자잘한 것들 [변경/추가된 기능] - 플리커 다운로드 (#77) - ArtStation 다운로드 - 니코동 다운로드 - 핀터레스트 다운로드 (#84) - 머신러닝 기반 작가 추천 기능 (메뉴 - 작가 추천...) - 통계에서 점수 열 없앰 - 목록에서 제거할 때도 확인 창 뜨도록 수정 - 이미 존재하는 단일 동영상 파일 다운로드 하지 않게 수정 - 다운로더 목록 필터링 기능 추가 ([사용법...(F1)] 참고) - 설정 - 히토미 - 갤러리 정보 텍스트 파일로 저장 (#79) - '클립보드에서 자동 추가' 첫번째 링크 다운로드 생략되지 않게 수정 - 검색기 검색어에서 Korean, English 등 언어도 자동완성 되게 수정 - 태그 자동완성에서, "male:" 을 입력하면 "female:" 을 제외하고 보이게 수정 - 간단 검색에서 N/A인 언어 검색 가능 ([사용법...(F1)] 참고) - "다운로드가 완료되면 알림" 기능 삭제 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.2b 【Mar 30, 2018】 [버그 해결] - 히토미 애니메이션 삭제되지 않는 문제 해결 - 특정 상황에서 '첫번째 이미지 열기' 가 작동하지 않는 문제 해결 - 일부 컴퓨터에서 reCAPTCHA 뚫기가 제대로 동작하지 않는 문제 해결 - 밤토끼 다운로드 안되는 문제 해결 (#66) - 마루마루 동시에 다운로드 시 섞여서 다운로드 되는 문제 해결 (#65) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.2a 【Feb 22, 2018】 [버그 해결] - 이미 다운로드 완료된 것도 무조건 덮어씌우는 문제 해결 - wasabisyrup, shencomics, yuncomics 주소를 입력했을 때 실패하는 문제 해결 - 종료 후 일정시간동안 다시 실행이 안되는 문제 해결 - 클립보드에서 자동 추가 기능이 작동하지 않는 문제 해결 (#53) - 제목 검색 안되는 문제 해결 (#50) - 검색기를 많이 사용하면 프로그램이 작동 중지되는 문제 해결 (메모리 누수 문제) (#54) - 기타 자잘한 것들 [변경/추가된 기능] - 마루마루 한글 캡차 지원 (수동) (#57) - 간단 검색 ([사용법...(F1)] 참고) - 사이트 별 압축 설정 (설정 - 압축) - 자동완성 매칭 방식 변경 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.2 【Feb 11, 2018】 [버그 해결] - 검색기 속도, 버벅임 개선 (#42) - 다운로더 버벅임 개선 - https://www.pixiv.net/member.php?id=xxxxxx 형식의 주소 인식 못하는 문제 해결 (#43) - E-Hentai, ExHentai 조금 더 안정적으로 받게 - 폴더 이름이 "."으로 끝나면 다운로드 안되는 문제 해결 - 비메오 가끔 오류 뜨는 문제 해결 - 마루마루 빈 페이지 reCAPTCHA로 잘못 인식하는 문제 해결 - 유튜브 다운로드 안되는 문제 해결 (패턴 업데이트) - reCAPTCHA 뚫기 안되는 문제 해결 - reCAPTCHA 뚫는 도중 종료하면 프로그램을 다시 킬 수 없는 문제 (브라우저가 정상적으로 종료되지 않는 문제) 해결 - reCAPTCHA 브라우저 첫 실행에서 에러 뜨는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 이미지 읽을 때 메모리/속도 개선 - 픽시브 GIF 변환 메모리/속도 개선 - 불완전한 작업 자동으로 다시 시작하는 기능 (고급 설정 - 불완전한 작업 자동으로 다시 시작) (#41) - 파일 크기가 0일 때 다시 시도 - Access denied 떴을 때 다시 시도 - Cloudflare 우회 - Trend Micro 우회 - and, or, not, ",", +, - 같은 예약어가 들어간 단어를 자동완성하면 큰따옴표 붙게 수정 (예: spice and wolf --> "spice and wolf") - and, or, not, ",", +, - 같은 예약어가 들어가지 않은 단어를 복사하면 큰따옴표 붙지 않게 수정 (예: "heroes of the storm" --> heroes of the storm) - wasabisyrup, shencomics, yuncomics 입력해도 되게 수정 - Finder에서 갯수 많은 순으로 정렬 - 이미지 최대 크기 지정 (#44) - 페이지 지정 다운로드 (#44) - 마루마루 선택 화 다운로드 - 겔부루 다운로드 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.1b 【Jan 23, 2018】 [버그 해결] - 히토미 다운로드 제대로 안되는 문제 해결 (#31, #32, #39, #40) - 바이러스 오진 줄임 (#27, #31, #34, #38) - 일부 컴퓨터에서 검색기 섬네일 안 보이는 문제 해결 (#32) - 기타 자잘한 것들 [변경/추가된 기능] - 마루마루 중간에 404페이지 끼어있으면 건너뜀 (#36) - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.1a 【Jan 21, 2018】 [버그 해결] - V3에서 multiprocessing.pyd를 오진해서 해당 모듈 빼고 만듦 (#29) -------------------------------------------------------------------------------------------------------------------------------------------- 2.1 【Jan 22, 2018】 [버그 해결] - 가끔씩 클립보드에 복사가 제대로 안되던 문제 해결 - '클립보드에서 자동 추가'를 키고 여러 주소를 연속해서 빠르게 복사할 경우 몇 개를 인식하지 못하는 문제 해결 (https://git.io/vN2vW) - 마루마루 http://marumaru.in/b/mangaup/... 형식의 주소를 입력할 시 제목을 잘못 읽는 문제 해결 - 마루마루 http://marumaru.in/b/mangaup/... 형식의 주소를 입력할 시 reCAPTCHA 오류 뜨는 문제 해결 - 다운로드 중 [저장&종료]한 후에 다시 시작하면 잘못된 폴더에 저장하는 문제 해결 (https://git.io/vN2v4) - 빈 목록에서 우 클릭하면 에러 뜨는 문제 해결 - CPU 점유율 높게 유지되는 문제 해결 - 히토미 다운로드 안되는 문제 해결 (https://git.io/vN2vB, https://git.io/vN2vR) - 기타 자잘한 것들 [변경/추가된 기능] - 검색기 목록에서 타입이나 태그 등을 바로 볼 수 있게 수정 - 히토미 계열 다운로드 시 파일 이름을 0000.jpg, 0001.jpg와 같이 바꾸어서 저장하는 기능 (옵션 - 설정 - 히토미 설정 - 파일 이름 형식 - 숫자) - 내장 이미지 뷰어 - 이미지를 더 빠르게 읽음 - 패키징 툴을 바꿈 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 2.0 【Jan 10, 2018】 [버그 해결] - 한 작업의 파일 갯수가 너무 많을 때, 정보를 보면 메모리 부족으로 에러뜨는 문제 해결 - 다운로드가 정상적으로 완료되었는데도 불완전한 작업으로 잘못 표시되는 문제 해결 - 시리즈명 등에 and, or, not, +, - 등이 들어가면 어떻게 해도 검색이 불가능한 문제 해결 (이제 큰따옴표로 묶어주면 검색 가능) 예: spice and wolf -> "spice and wolf" - 섬네일 이미지 읽을 때 버벅이는 문제 해결 - 일부 컴퓨터에서 유튜브 다운로드 안되는 문제 해결 - 유튜브 바뀐 패턴 적용 - 기타 자잘한 것들 [변경/추가된 기능] - 마루마루 reCAPTCHA 뚫기 (시험 기능; 고급 설정에서 On/Off 가능) - 한 파일 다운로드 중 연결이 끊어지는 경우 끊어진 지점부터 받음 - 폴더 열기 버튼을 누를 때, 폴더가 없고 압축파일만 있는 경우 압축파일이 있는 폴더를 엶 - 일반 설정 - 언어에 English 추가 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9e 【Dec 29, 2017】 [버그 해결] - 업데이트 링크 잘못돼서 고침 (v1.9 ~ v1.9d) - 텀블러 이름이 깨지는 문제 해결 - 파일 크기 체크하는 중에 파일을 지우면 에러 뜨는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 유튜브 음원(mp3) 다운로드 - Bilibili 다운로드 - ExHentai 다운로드 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9d 【Dec 21, 2017】 [버그 해결] - 일부 컴퓨터에서 주소입력창이 안 보이는 문제 해결 - 텀블러 다운로드 안되는 문제 해결 - 개별 파일이 덜 받아진 상태에서 완료되는 문제 해결 (파일 사이즈를 체크해서 덜 받아진 경우 다시 시도) - 기타 자잘한 것들 [변경/추가된 기능] - Pornhub 다운로드 - 작업 추가 부하 줄임 - 삭제시 폴더 / 압축파일 선택해서 지울 수 있게 - 검색기 작가 / 시리즈 / 캐릭터 이름 복사 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9c 【Dec 6, 2017】 [버그 해결] - 픽시브 움짤 사이즈가 600x600 이하로 받아지는 문제 해결 - 비메오 오래된 동영상 다운로드 안되는 문제 해결 - 다운로드 중 삭제 시 가끔씩 파일이 남아있는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 픽시브 움짤 변환 시 메모리 더 적게 쓰게 수정 - 검색기 북마크 기능 추가 - N/A를 작가, 그룹, 시리즈, 캐릭터, 태그에도 쓸 수 있게 수정 - 작업 정보창에서 존재하지 않는 파일은 빨간색으로 표시 - 작업 목록 저장 시 가능하면 상대경로로 저장 (다른 위치로 옮겨도 실행파일, 설정파일(*.ini), 다운로드 폴더가 같은 폴더에만 있으면 정상적으로 동작) - 검색기에서 검색 시 버벅이는 문제 완화 - 구글 이미지 다운로드 지원 중단 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9b 【Nov 27, 2017】 [버그 해결] - 마루마루 오래된 만화 다운로드 안되는 문제 해결 - 마루마루 패스워드 걸린 만화 다운로드 안되는 문제 해결 - 마루마루 파일 일부가 깨져서 다운로드 되는 문제 해결 - 트위터 다운로드 안되는 문제 해결 - 클립보드에서 가져오기 기능을 켜놓고 URL 복사를 하면 이미 추가된 것과 관계없이 추가되는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 비메오 다운로드 - 티비플 다운로드 - 텀블러 다운로드 - 다운로더 목록 필터 기능 추가 (좌측 하단 돋보기 모양 아이콘) - 다운로드 폴더 종류별로 열 수 있게 바꿈 (하단 폴더 모양 아이콘) - 투명도 조절 슬라이더를 옮김 (우측 상단) - 저사양 PC에서 다운로드 시 프로그램이 버벅이는 문제 완화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9a 【Nov 20, 2017】 [버그 해결] - 사용자 계정 이름이 한글이나 특수문자로 이루어져 있을 시에 실행이 안되는 문제 해결 [변경/추가된 기능] - 자동완성 기능 강화 -------------------------------------------------------------------------------------------------------------------------------------------- 1.9 【Nov 19, 2017】 [버그 해결] - 파일 수정 날짜가 밀리는 현상 해결 - 제목에 특수문자(윈도 파일시스템에서 인코딩 불가능한 것)가 있으면 폴더 생성이 안되는 문제 해결 (해당 문자 제거) - 픽시브 북마크 마지막 1~2 페이지가 다운로드 안되는 문제 해결 - 연결 상태가 좋지 않을 때 다운로드 중 취소 시 스레드가 매우 늦게 복구되는 문제 해결 - 파일 이름이 중복되면 압축 오류 뜨는 문제 해결 - E-Hentai 갤러리를 찾지 못하는 문제 해결 - E-Hentai 이미지 잘못 읽는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 트위터 다운로드 - 인스타그램 다운로드 - 구글 이미지 다운로드 - 데비안아트 다운로드 (갤러리; 이미지만) - 히토미 계열이 아닌 경우에 저장되는 폴더 이름을 조금 수정함 다운로드 폴더가 D라고 할 때, 마루마루 다운로드 폴더 = D_maru 픽시브 다운로드 폴더 = D_pixiv - 폴더나 압축파일을 복사해서 붙여넣을 수 있음 (주소 입력창에서 [Ctrl] + [V]) 해당 폴더를 업데이트할 때 사용 ... (id) ... 형식의 이름만 사용 가능 - Finder에서 퍼지로 찾기 기능 추가 - 브라우저로 보기 기능 추가 - 윈도우10 HiDPI 지원 - 재시작 했을 때 이전 작업 유지 - 자동 완성 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8f 【Oct 25, 2017】 [버그 해결] - 픽시브 R-18 다운로드 안되는 문제 해결 - 픽시브 다운로드 되지 않는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 픽시브 다운로드 속도 개선 - 픽시브 개별 일러스트 다운로드 - 픽시브 북마크 다운로드 - 픽시브 움짤 다운로드 - 7z 지원 중단 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8e 【Oct 22, 2017】 [버그 해결] - 제목이 너무 길 경우 삭제되지 않는 문제 해결 - 일부 컴퓨터에서 블루스크린이 뜨는 문제 해결 - 기타 자잘한 것들 [변경/추가된 기능] - 하드디스크에 부담 적게 주도록 변경 [변경] 이미지 리사이징 시 하드디스크 사용 → 메모리 사용 [변경] 검색기에서 검색 시 hitomi_searcher_tmp 폴더를 만들고 캐시 → 메모리에 캐시 - 플로팅 미리보기 빨리 뜨게 변경 - 작가가 없을 시 그룹으로 대체해서 표기 - 픽시브 다운로드 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8d 【Oct 14, 2017】 [버그 해결] - 마루마루 다운로드 후 압축되지 않는 문제 해결 - 7Z 압축 제대로 되지 않는 문제 해결 [변경/추가된 기능] - 업데이트 체크 안정화 - 기타 자잘한 것들 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8c 【Oct 8, 2017】 [변경/추가된 기능] - 이미 다운로드 완료된 파일이 있을 경우 덮어쓰지 않고 다운로드 생략 - 마루마루 다운로드 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8b 【Oct 4, 2017】 [버그 해결] - 동영상 다운로드 시 4개를 초과하면 이전 파일이 삭제되는 문제 해결 -------------------------------------------------------------------------------------------------------------------------------------------- 1.8a 【Sep 19, 2017】 [버그 해결] - 애니메이션이 다운로드되지 않는 문제 해결 [변경/추가된 기능] - 유튜브 동영상 다운로드 - 검색기에서 더 구체적으로 필터 적용할 수 있게 수정: 논리곱("and" 또는 ","), 논리합("or" 또는 "+"), 부정("not" 또는 "-") 그리고 괄호를 조합해서 사용 가능. 제목(Title)에선 특별히 논리곱을 생략하고 스페이스(" ")로 쓸 수 있음. (sushi boy = sushi and boy) 예시: 제목 (Title): sushi boy → "sushi" 와 "boy" 가 모두 들어간 제목을 검색 sushi + boy → "sushi" 또는 "boy"가 들어간 제목을 검색 "sushi boy" → "sushi boy"가 들어간 제목을 검색 "sushi boy" -kimchi → "sushi boy"가 들어가고 "kimchi"가 들어가지 않은 제목을 검색 A and B → "A" 와 "B"가 모두 들어간 제목을 검색 A or B → "A" 또는 "B"가 들어간 제목을 검색 ( A + B 와 같음) A or (B and C) → "A"가 들어가거나, "B"와 "C"가 모두 들어가는 제목을 검색 ( A + (B, C) 와 같음) 태그들 (Tags): female: loli, male:shota → female:loli 와 male:shota가 들어간 태그를 검색 (female:loli and male:shota와 같음) female: loli + male:shota → female:loli 또는 male:shota가 들어간 태그를 검색 (female:loli or male:shota와 같음) female: loli, -male:shota → female:loli 가 들어가고 male:shota가 들어가지 않은 태그를 검색 (female:loli and not male:shota와 같음) female: loli, male:shota + female:glasses → female:loli and male:shota or female:glasses 와 같음 -female:loli, (male:shota + -female:glasses) → not female:loli and (male:shota or not female:glasses) 와 같음 나머지 모든 항목에도 똑같이 적용됨. - 애니메이션도 삭제 가능하게 수정 -------------------------------------------------------------------------------------------------------------------------------------------- 0.1 【Nov 6, 2016】 첫 릴리즈 ================================================ FILE: translation/help_en.html ================================================ {head}


How to use

{date}


Supported sites

Address bar

  • Type some URLs into the address bar and click the Download button to download
  • Examples:
    https://hitomi.la/galleries/123.html
    https://hitomi.la/reader/123.html
    https://e-hentai.org/g/123/356dfa74ce/
    https://e-hentai.org/s/600e752112/123-4
    https://hiyobi.me/reader/123
    123

    https://www.pixiv.net/users/11
    https://www.pixiv.net/member_illust.php?id=11
    https://pixiv.me/pixiv
    pixiv_11

    https://twitter.com/TensorFlow
    @TensorFlow

    https://www.instagram.com/user_name
    insta_user_name

    https://username.deviantart.com
    deviant_username
  • Examples for multiple URLs:
    123, 125, 126
    123 125 126
  • Numbers not in Hitomi.la are automatically converted to E(x)Hentai URL.

Save

  • Save the preferences and tasks currently added.
  • File - Save
  • [Ctrl + S] key

Searcher

  • Search galleries
  • Menu - Searcher...
  • [Ctrl + F] key

Downloader tasks

  • Open the first file:
    Mouse right-click → [Open the first file]
    Click thumbnail
    Double-click
    [Enter] key
  • Remove multiple tasks:
    Select multiple tasks → [Del] key
  • Delete multiple files:
    Select multiple tasks → Mouse right-click → [Delete files]
    Select multiple tasks → [Shift] + [Del] key
  • Remove all complete tasks:
    Mouse right-click → [Remove all complete tasks]
    Remove all complete tasks which are not locked.

Task colors

  • Light gray: Wating or Reading
  • Dark gray: Downloading
  • Green: Downloaded completely
  • Orange: Downloaded incompletely
  •    Red: Fail or Invalid

Change the order of tasks

  • Drag and drop with the mouse wheel button to change the order.
  • Following commands are also working: [Ctrl + ↑], [Ctrl + ↓], [Ctrl + Home], [Ctrl + End].

Filtering the List of tasks

  • Click the filter icon at the bottom left of the downloader window and type.
  • Only tasks with a title that contains that word are visible.
  • You can also filter by type, such as "type:youtube".
  • If you type "dup:", you will see only duplicate tasks.
  • Type "rem:" to see only the tasks that have been deleted from the physical storage.
  • You can filter by tags such as "tag:glasses".
  • You can filter by comments, such as "comment:xxxx".
  • Type "bad:" to show only incomplete tasks.

Filtering the Searcher search list

  • Click the filter-shaped icon in the bottom left corner of Searcher and enter something
  • You'll only see galleries with titles, authors, groups, tags, and languages that contain those characters.
  • If you enter "title:A", you will only see galleries with titles that contain the letter A.
  • You can also filter by "artist:A", "group:A", "tag:A", "lang:A", etc.
  • Enter "p<100" to see only galleries with less than 100 pages.
  • Enter "p>100" to see only galleries with more than 100 pages.
  • Enter "done:o" to see only galleries that have already been downloaded.
  • Enter "done:x" to see only galleries that you have not yet downloaded.

Select pages & Download

  • Downloads only the pages you specify.
  • Examples:
    ~ 100    →  First 100 pages
    -100 ~    →  Last 100 pages
    1, 10 ~ 20, -1    →  First page, 10 ~ 20 pages, Last page

Select chapters & Download

  • Download only selected episodes.

Preferences

  • Options → Preferences

Simple search - Search keywords

  • Search like Google.
  • Examples :
    maid
    maid glasses korean
    maid -schoolgirl
    maid n/a
    maid (korean + n/a)

Advanced Search - Title

  • Examples :
    maid
    maid -schoolgirl
    maid glasses

Advanced Search - Artists

  • Examples :
    sekiya asami
    sekiya asami + amezawa koma

Advanced Search - Characters

  • Examples :
    chino kafuu
    chino kafuu + kokoa hoto
    hino kafuu, kokoa hoto

Advanced Search - Tags

  • Examples :
    female:maid
    female:maid, -female:schoolgirl uniform

Searcher List

  • Download multiple galleries :
    Select multiple → Right click → [Download]
    Select multiple → [Enter] key
  • View gallery information :
    Right click → Gallery Info...
    Click thumbnail

To stop searching

  • Click the search button one more time

Update Searcher search data

  • Searcher - Menu - Download data...
  • Each time you re-download the data, it will fetch the latest data from the server.

Scripts

Bypass DPI

  • Options - Preferences - Network Settings - Bypass DPI
  • Use GoodbyeDPI to block / bypass DPI (Deep Packet Inspection).

Load cookies

  • Options - Preferences - Network Setting - Cookies - Load...
  • Cookies exported from browser extensions can be loaded. (Netscape HTTP Cookie File)
  • Using these cookies, Hitomi Downloader can access login-required pages.
  • Chrome extension: Get cookies.txt LOCALLY
  • Firefox extension: cookies.txt
  • Edge extension: Get cookies.txt
  • Expired cookies are shown in gray.

Built-in Web browser

  • Options - Preferences - Network Setting - Built-in Web browser - View
  • Used to read pages that require JS rendering.
  • You can use this to update cookies.

Chrome Extension

  • Hitomi Downloader
  • Functions:
    Download sites that require the extension
    Update cookies

Save

  • Save & Quit :
    Quit with saving settings and currently added lists
  • Quit :
    Quit without saving
  • When launching the app, it starts with the most recent saved state.

Shortcuts

  • Alt + D : Address bar ↔ toggle task list
  • Ctrl + 1 ~ 7 : Set tags in tasks
  • Ctrl + Tab : Show/Hide Toolbar
  • Ctrl + - / + : Thumbnail size adjustment
  • Ctrl + Scroll : Thumbnail size adjustment
  • Space : Expand/Collapse Group(s)

Feedback

Etc.

  • Please use the downloaded files for personal use only.
  • Please look for further updates at Help - About - Bottom button.
================================================ FILE: translation/help_ja.html ================================================ {head}


使い方

{date}


対応サイト

アドレスバー

  • なんらかのURLをアドレスバーに入力し、ダウンロードボタンをクリック
  • URLの例:
    https://hitomi.la/galleries/123.html
    https://hitomi.la/reader/123.html
    https://e-hentai.org/g/123/356dfa74ce/
    https://e-hentai.org/s/600e752112/123-4
    https://hiyobi.me/reader/123
    123

    https://www.pixiv.net/users/11
    https://www.pixiv.net/member_illust.php?id=11
    https://pixiv.me/pixiv
    pixiv_11

    https://twitter.com/TensorFlow
    @TensorFlow

    https://www.instagram.com/user_name
    insta_user_name

    https://username.deviantart.com
    deviant_username
  • 複数のURLの例:
    123, 125, 126
    123 125 126
  • Hitomi.la 内にない数字は、自動で E(x)Hentai のURLに変換されます。

保存

  • 設定と現在追加されているタスクを保存する。
  • タスク - 保存
  • [Ctrl + S] キー

検索ツール (Searcher)

  • ギャラリーを検索
  • メニュー - 検索ツール...
  • [Ctrl + F] キー

ダウンロードのタスク

  • 最初のファイルを開く:
    マウス右クリック→ [最初のファイルを開く]
    サムネイルをクリック
    ダブルクリック
    [Enter] キー
  • 複数のタスクを削除:
    複数のタスクを選択 → [Del] キー
  • 複数のファイルを削除:
    複数のタスクを選択 → マウス右クリック → [ファイルの削除]
    複数のタスクを選択 → [Shift] + [Del] キー
  • すべての完了タスクを削除:
    マウス右クリック → [完了したタスクをすべて削除]
    ロックされていない完了済みのタスクがすべて削除されます。

タスクの色

  • 濃い灰色: 待機中または読み込み中
  • 薄い灰色: ダウンロード中
  • 青: 完全にダウンロード済み
  • オレンジ: ダウンロード未完了
  •    赤: 失敗または無効

タスクの順序を変更

  • 順番変更には、マウスのスクロールボタンでドラッグアンドドロップします。
  • 以下のコマンドも動作: [Ctrl + ↑], [Ctrl + ↓], [Ctrl + Home], [Ctrl + End].

タスクの一覧の絞り込み

  • ダウンロード一覧の左下のフィルターアイコンをクリックし入力します。
  • タイトルにその文字列を含むタスクのみを表示します。
  • type:youtube など種類で絞り込み。
  • dup: で重複タスクのみが表示。
  • rem: は物理的な保存領域から削除されているタスクのみを表示。
  • tag:glasses などタグで絞り込み。
  • comment:xxxx でコメントで絞り込み。
  • bad: で未完了タスクのみを表示。
  • p<10 : 10 枚より少ないタスクのみを表示。
  • dur<10 : 10秒より短いタスクのみを表示。
  • dur>1:00:00 : 1時間より長いタスクのみを表示。
  • a OR b : 2つの指定のどちらかに一致。

検索ツールの検索一覧の絞り込み

  • 検索ツール一覧の左下のフィルターアイコンをクリックし入力します。
  • タイトル、作者、グループ、タグ、言語にその文字列を含むギャラリーのみが表示されます
  • title:A : タイトルに A という文字列を含むギャラリーのみを表示。
  • "artist:A", "group:A", "tag:A", "lang:A" という絞り込みも可能。
  • p<100 : 100ページ未満のギャラリーのみを表示。
  • p>100 : 100ページ以上のギャラリーのみを表示。
  • done:o : ダウンロード済みのギャラリーのみを表示。
  • done:x : ダウンロードしていないギャラリーのみを表示。

ページを選択してダウンロード

  • ページを選択してダウンロード。
  • 例:
    ~ 100    →  最初の100ページ
    -100 ~    →  最後の100ページ
    1, 10 ~ 20, -1    →  最初のページ、10〜20ページ、最後のページ

チャプターを選択してダウンロード

  • チャプターを選択してダウンロード。

設定

  • オプション → 設定

スレッド

  • タスクごとの並列ダウンロード。
  • パソコンの性能やネット接続が良好ではないなら少なくします。
  • この設定をよく理解していないなら、初期値のままにします。

単に検索 - 検索語句

  • Google のように検索
  • 例:
    maid
    maid glasses japanese
    maid -schoolgirl
    maid n/a
    maid (japanese + n/a)

詳細検索 - タイトル

  • 例:
    maid
    maid -schoolgirl
    maid glasses

詳細検索 - 作者

  • 例:
    sekiya asami
    sekiya asami + amezawa koma

詳細検索 - キャラクター

  • 例:
    chino kafuu
    chino kafuu + kokoa hoto
    hino kafuu, kokoa hoto

詳細検索 - タグ

  • 例:
    female:maid
    female:maid, -female:schoolgirl uniform

検索ツールのリスト

  • 複数のギャラリーをダウンロード:
    複数を選択 → マウス右クリック → [ダウンロード]
    複数を選択 → [Enter] キー
  • ギャラリーの情報を表示:
    右クリック → ギャラリーの情報...
    サムネイルをクリック

検索中の中止

  • 再び検索ボタンをクリック

ファイルが適切にダウンロードされない(チェックサム読み込みの問題)

  • 推奨 (速度が低下) :
    スレッド数を下げて調整します。
  • 非推奨 (速度減少なし、安全性の問題が起こる可能性) :
    コントロールパネル → ハードウェア → デバイス マネージャー → ネットワーク アダプタ → いずれかのコントローラ → 右クリックし「プロパティ」 → 詳細設定 → オフロード関係をすべて「無効」に設定 → OK
    少し待つと、ネットに再接続されます。

検索ツール 検索データの更新

  • 検索ツール - メニュー - データのダウンロード...
  • ダウンロードするたびに最新のデータをダウンロードします。

スクリプト

  • ツール - スクリプトのインポート...
  • Python スクリプトを実行します。
  • ダウンロード用のスクリプトを自分で作成して利用することもできます。
  • スクリプトファイル (*.hds) はテキストエディタ (メモ帳) ねどで編集できます。
  • スクリプトファイルをアプリにドラッグ&ドロップして実行できます。
  • 実行ファイルのパス内にスクリプト用のフォルダを作成し、スクリプトファイル(* .hds)を置くと、起動時に自動的に実行されます。
  • スクリプトのダウンロード :
    https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts
  • スクリプトの書き方:
    https://github.com/KurtBestor/Hitomi-Downloader/wiki/How-to-write-a-script

DPIのバイパス

  • オプション - 設定 - ネットワークの設定 - DPIをバイパスする
  • GoodbyeDPI でDPIをブロック/バイパスできます (ディープ・パケット・インスペクション)。

クッキー (Cookie) の読み込み

  • オプション - 設定 - ネットワークの設定 - クッキー - 読み込み...
  • ブラウザーの拡張機能からエクスポートされた Cookie を読み込み可能です。(Netscape HTTP Cookie ファイル)
  • これらのクッキーを使用して、Hitomi Downloader はログインが必要なページにアクセスできます。
  • Chrome 拡張機能: Get cookies.txt LOCALLY
  • Firefox 拡張機能: cookies.txt
  • Edge 拡張機能: Get cookies.txt
  • 期限切れのクッキーは灰色で表示されます。

内蔵のウェブブラウザ

  • オプション - 設定 - ネットワークの設定 - 内蔵のウェブブラウザ - 表示
  • JS による描画が必要なページの読み込みに使用。
  • クッキーの更新に使用できます。

Chrome 拡張機能

  • Hitomi Downloader
  • 機能:
    拡張機能が必要なダウンロードサイト
    クッキーの更新

保存

  • 保存して終了:
    設定と現在追加されている位置r難を保存し終了
  • 終了 :
    保存せずに終了
  • アプリを起動すると、最後に保存された状態で開始されます。

ショートカットキー

  • Alt + D : アドレスバー ↔ タスク一覧
  • Ctrl + 1 ~ 7 : タスクにタグを設定
  • Ctrl + Tab : ツールバー表示/非表示
  • Ctrl + - / + : サムネイルのサイズを調整
  • Ctrl + Scroll : サムネイルのサイズを調整
  • Space : グループを展開/畳む

意見を寄せる

その他

  • ダウンロードされたファイルは私的使用の範囲内でご利用ください。
  • 更新の詳細を確認するには ヘルプ - アプリの情報 - 右下のボタン
================================================ FILE: translation/help_ko.html ================================================ {head}


사용법

{date}


지원 사이트

주소 바

  • 주소를 입력하고 다운로드 버튼을 눌러 다운로드 합니다.
  • 예시:
    https://hitomi.la/galleries/123.html
    https://hitomi.la/reader/123.html
    https://e-hentai.org/g/123/356dfa74ce/
    https://e-hentai.org/s/600e752112/123-4
    https://hiyobi.me/reader/123
    123

    https://www.pixiv.net/users/11
    https://www.pixiv.net/member_illust.php?id=11
    https://pixiv.me/pixiv
    pixiv_11

    https://twitter.com/TensorFlow
    @TensorFlow

    https://www.instagram.com/user_name
    insta_user_name

    https://username.deviantart.com
    deviant_username
  • 여러 주소 추가 예시:
    123, 125, 126
    123 125 126
  • 히토미에 없는 번호는 자동으로 E(x)Hentai 주소로 변환됩니다.

저장

  • 설정과 현재 추가된 목록을 저장
  • 파일 - 저장
  • [Ctrl + S] 키

검색기

  • 갤러리를 검색
  • 메뉴 - 검색기...
  • [Ctrl + F] 키

다운로더 작업

  • 첫 번째 이미지 열기:
    마우스 우 클릭 → [첫 번째 파일 열기]
    섬네일 클릭
    더블클릭
    [Enter] 키
  • 여러 작업 제거:
    여러 작업 선택 → [Del] 키
  • 여러 파일 삭제:
    여러 작업 선택 → 마우스 우 클릭 → [파일 삭제]
    여러 작업 선택 → [Shift] + [Del] 키
  • 완료된 작업 모두 제거:
    마우스 우 클릭 → [완료된 작업 모두 제거]
    잠기지 않은 모든 완료된 작업을 목록에서 제거합니다.

다운로더 작업 색

  • 밝은 회색: 대기 중 or 읽는 중
  • 어두운 회색: 다운로드 중
  • 초록색: 다운로드를 성공적으로 마침
  • 주황색: 다운로드는 완료했지만 완전하지 않음
  •    빨간색: 실패 or 잘못된 입력

다운로더 작업 목록 순서 변경

  • 마우스 휠버튼으로 드래그&드롭 하면 순서를 바꿀 수 있습니다.
  • [Ctrl + ↑], [Ctrl + ↓], [Ctrl + Home], [Ctrl + End] 키로 옮길 수도 있습니다.

다운로더 작업 목록 필터링

  • 다운로더 창 좌측 하단의 필터 아이콘을 클릭하고 입력
  • 해당 문자가 포함된 제목을 가진 작업만 보입니다.
  • "type:youtube" 와 같이 타입으로 필터링할 수도 있습니다.
  • "dup:" 를 입력하면 중복된 작업만 보이고,
  • "rem:" 를 입력하면 실제 파일이 삭제된 작업만 보입니다.
  • "tag:glasses" 와 같이 태그로 필터링할 수 있습니다.
  • "comment:xxx" 와 같이 코멘트로 필터링할 수 있습니다.
  • "bad:" 를 입력하면 불완전한 작업만 보입니다.
  • "p<10" 을 입력하면 10 장 보다 적은 작업만 보입니다.
  • "dur<10" 을 입력하면 10 초 보다 짧은 작업만 보입니다.
  • "dur>1:00:00" 을 입력하면 1 시간 보다 긴 작업만 보입니다.
  • "a OR b" 와 같이 두 가지 값 중 하나만 해당하는 경우도 필터링할 수 있습니다.

검색기 검색 목록 필터링

  • 검색기 좌측 하단의 필터 모양 아이콘을 클릭하고 내용 입력
  • 해당 문자가 포함된 제목, 작가, 그룹, 태그, 언어를 가진 갤러리만 보입니다.
  • "title:A" 를 입력하면 A라는 문자가 포함된 제목을 가진 갤러리만 보입니다.
  • "artist:A", "group:A", "tag:A", "lang:A" 과 같이 필터링할 수도 있습니다.
  • "p<100" 을 입력하면 100 페이지 미만인 갤러리만 보입니다.
  • "p>100" 을 입력하면 100 페이지 초과인 갤러리만 보입니다.
  • "done:o" 를 입력하면 이미 다운로드한 갤러리만 보입니다.
  • "done:x" 를 입력하면 아직 다운로드하지 않은 갤러리만 보입니다.

페이지 지정 다운로드

  • 지정한 페이지만 다운로드합니다.
  • 예시:
    ~ 100    →  앞 100 페이지
    -100 ~    →  뒤 100 페이지
    1, 10 ~ 20, -1    →  첫 페이지, 10 ~ 20 페이지, 마지막 페이지

선택 화 다운로드

  • 선택한 화만 다운로드합니다.

환경 설정

  • 옵션 → 설정 (Preferences...)

간단 검색 - 검색어

  • 구글 검색하듯이 검색하면 됩니다.
  • 예시 :
    maid
    maid glasses korean
    maid -schoolgirl
    maid n/a
    maid (korean + n/a)

고급 검색 - 제목 (Title)

  • 예시 :
    maid
    maid -schoolgirl
    maid glasses

고급 검색 - 작가 (Artists)

  • 예시 :
    sekiya asami
    sekiya asami + amezawa koma

고급 검색 - 캐릭터 (Characters)

  • 예시 :
    chino kafuu
    chino kafuu + kokoa hoto
    hino kafuu, kokoa hoto

고급 검색 - 태그 (Tags)

  • 예시 :
    female:maid
    female:maid, -female:schoolgirl uniform

검색기 목록

  • 여러 갤러리 다운로드 :
    여러 개 선택 → 마우스 우클릭 → [다운로드]
    여러 개 선택 → [Enter] 키
  • 갤러리 정보 보기 :
    마우스 우 클릭 → 갤러리 정보...
    섬네일 클릭

검색 중 중단

  • 검색 버튼 한번 더 클릭

검색기 검색 데이터 업데이트

  • 검색기 - 메뉴 - 데이터 다운로드...
  • 데이터를 다시 다운로드할 때마다 서버에서 최신 데이터를 가져옵니다.

스크립트

  • 도구 - 스크립트 가져오기...
  • 파이썬 스크립트를 실행합니다.
  • 다운로드 스크립트를 직접 만들어 추가하는 등 다양한 작업을 할 수 있습니다.
  • 스크립트 파일 (*.hds) 은 텍스트에디터(메모장 등)로 수정할 수 있습니다.
  • 스크립트 파일들을 프로그램에 드래그 & 드랍해서 실행시킬 수도 있습니다.
  • 실행파일 경로에 scripts 폴더 만들고 스크립트 파일 (*.hds) 넣으면 시작할 때 자동으로 실행합니다.
  • 스크립트 다운로드 :
    https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts
  • 스크립트 작성 방법 :
    https://github.com/KurtBestor/Hitomi-Downloader/wiki/How-to-write-a-script

DPI 우회

  • 옵션 - 설정 - 네트워크 설정 - DPI 우회
  • GoodbyeDPI를 이용해서 DPI 차단 / 우회를 합니다.

쿠키 불러오기

  • 옵션 - 설정 - 네트워크 설정 - 쿠키 - 불러오기...
  • 브라우저 확장프로그램에서 추출한 쿠키를 불러올 수 있습니다. (Netscape HTTP Cookie File)
  • 이 쿠키를 이용해서 로그인이 필요한 페이지에 접근할 수 있습니다.
  • 크롬 확장프로그램: Get cookies.txt LOCALLY
  • 파이어폭스 확장프로그램: cookies.txt
  • 엣지 확장프로그램: Get cookies.txt
  • 만료된 쿠키는 회색으로 표시됩니다.

내장 웹브라우저

  • 옵션 - 설정 - 네트워크 설정 - 내장 웹브라우저 - 보기
  • JS 렌더가 필요한 사이트를 읽는데 주로 사용됩니다.
  • 쿠키를 업데이트하는 데 사용할 수 있습니다.

크롬 확장 프로그램

  • Hitomi Downloader
  • 기능:
    확장프로그램이 필요한 사이트의 다운로드
    쿠키 업데이트

종료

  • 저장 & 종료 :
    설정과 현재 추가된 목록을 저장하고 종료
  • 종료 :
    저장하지 않고 종료
  • 다시 켤 때, 가장 최근에 저장한 상태로 시작합니다.

기타 단축키

  • Alt + D : 주소바 ↔ 작업 목록 전환
  • Ctrl + 1 ~ 7 : 작업에 태그 표시
  • Ctrl + Tab : 도구창 숨기기
  • Ctrl + - / + : 썸네일 크기 조절
  • Ctrl + 스크롤 : 썸네일 크기 조절
  • Space : 그룹 열고 닫기

피드백

기타

  • 다운로드한 파일들은 개인 소장 용도로만 사용해 주세요.
  • 자세한 업데이트 사항은 도움말 - 정보 - 우측하단 버튼을 눌러 확인해 주세요.
================================================ FILE: translation/help_pl.html ================================================ {head}


Jak urzywać

{date}


Obsługiwane witryny

Pasek adresu

  • Wpisz kilka adresów URL w pasku adresu i kliknij przycisk Pobierz, aby pobrać pliki
  • Przykłady:
    https://hitomi.la/galleries/123.html
    https://hitomi.la/reader/123.html
    https://e-hentai.org/g/123/356dfa74ce/
    https://e-hentai.org/s/600e752112/123-4
    https://hiyobi.me/reader/123
    123

    https://www.pixiv.net/users/11
    https://www.pixiv.net/member_illust.php?id=11
    https://pixiv.me/pixiv
    pixiv_11

    https://twitter.com/TensorFlow
    @TensorFlow

    https://www.instagram.com/user_name
    insta_user_name

    https://username.deviantart.com
    deviant_username
  • Przykłady dla wielu adresów URL:
    123, 125, 126
    123 125 126
  • Liczby spoza Hitomi są automatycznie konwertowane na adresy E(x)Hentai.

Zapisz

  • Zapisz preferencje i aktualnie dodane zadania.
  • Zadania - Zapisz
  • [Ctrl + S] skrót

Wyszukiwarka

  • Przeszukaj galerie
  • Narzędzia - Wyszukiwarka...
  • [Ctrl + F] skrót

Zadania Downloadera

  • Otwórz pierwszy plik:
    Prawy przycisk myszy → [Otwórz pierwszy plik]
    Kliknij podgląd
    Podwójne kliknięcie
    [Enter] klawisz
  • Usuń wiele zadań:
    Wybierz wiele zadań → [Del] klawisz
  • Delete multiple files:
    Wybierz wiele zadań → Prawy przycisk myszy → [Usuń pliki]
    Wybierz wiele zadań → [Shift] + [Del] klawisz
  • Usuń wszystkie zakończone zadania:
    Prawy przycisk myszy → [Usuń wszystkie zakończone zadania]
    Usuń wszystkie kompletne zadania, które nie są zablokowane.

Kolory zadań

  • Jasnoszary: Oczekiwanie lub czytanie
  • Ciemnoszary: Pobieranie
  • Zielony: Pobrano w całości
  • Pomarańczowy: Pobrano niekompletnie
  •    Czerwony: Nieudane lub nieważne

Zmień kolejność zadań

  • Przeciągnij i upuść za pomocą przycisku kółka myszy, aby zmienić kolejność.
  • Działają również następujące polecenia: [Ctrl + ↑], [Ctrl + ↓], [Ctrl + Home], [Ctrl + End].

Filtrowanie Listy zadań

  • Kliknij ikonę filtra w lewym dolnym rogu okna pobierania i pisz.
  • Widoczne są tylko zadania, których tytuł zawiera to słowo.
  • Można również filtrować według typu, na przykład "type:youtube".
  • Jeśli wpiszesz "dup:", zobaczysz tylko zduplikowane zadania.
  • Wpisz "rem:" aby zobaczyć tylko te zadania, które zostały usunięte z fizycznego magazynu.
  • Można filtrować według tagów, na przykład "tag:glasses".
  • Można filtrować według komentarzy, na przykład "comment:xxxx".
  • Wpisz "bad:" aby wyświetlać tylko niezakończone zadania.

Wyszukiwarka 검색 목록 필터링

  • Wyszukiwarka 좌측 하단의 필터 모양 아이콘을 클릭하고 내용 입력
  • 해당 문자가 포함된 제목, 작가, 그룹, 태그, 언어를 가진 갤러리만 보입니다.
  • "title:A" 를 입력하면 A라는 문자가 포함된 제목을 가진 갤러리만 보입니다.
  • "artist:A", "group:A", "tag:A", "lang:A" 과 같이 필터링 할 수도 있습니다.
  • "p<100" 을 입력하면 100 페이지 미만인 갤러리만 보입니다.
  • "p>100" 을 입력하면 100 페이지 초과인 갤러리만 보입니다.
  • "done:o" 를 입력하면 이미 다운로드한 갤러리만 보입니다.
  • "done:x" 를 입력하면 아직 다운로드하지 않은 갤러리만 보입니다.

Wybierz strony & Pobierz

  • 지정한 페이지만 다운로드합니다.
  • Przykłady:
    ~ 100    →  앞 100 페이지
    -100 ~    →  뒤 100 페이지
    1, 10 ~ 20, -1    →  첫 페이지, 10 ~ 20 페이지, 마지막 페이지

Wybierz rozdziały & Pobierz

  • 선택한 화만 다운로드합니다.

Preferencje

  • Opcje → Preferencje

Wątki

  • Równoległe pobieranie danych dla każdego zadania.
  • 컴퓨터 사양이나 인터넷 상태가 좋지 않다면 갯수를 좀 더 내립니다.
  • Jeśli nie masz pewności co do tego ustawienia, zachowaj wartości domyślne.

Proste wyszukiwanie - Wyszukiwanie słów kluczowych

  • Szukaj jak Google.
  • Przykłady:
    maid
    maid glasses korean
    maid -schoolgirl
    maid n/a
    maid (korean + n/a)

Wyszukiwanie zaawansowane - Tytuł

  • Przykłady:
    maid
    maid -schoolgirl
    maid glasses

Wyszukiwanie zaawansowane - Artyści

  • Przykłady:
    sekiya asami
    sekiya asami + amezawa koma

Wyszukiwanie zaawansowane - Postacie

  • Przykłady:
    chino kafuu
    chino kafuu + kokoa hoto
    hino kafuu, kokoa hoto

Wyszukiwanie zaawansowane - Znaczniki

  • Przykłady :
    female:maid
    female:maid, -female:schoolgirl uniform

Wyszukiwarka 목록

  • 여러 갤러리 다운로드 :
    여러 개 선택 → 마우스 우클릭 → [다운로드]
    여러 개 선택 → [Enter] key
  • 갤러리 정보 보기 :
    마우스 우 클릭 → 갤러리 정보...
    Kliknij miniaturkę

검색 중 중단

  • 검색 버튼 한번 더 클릭

파일이 제대로 다운로드 되지 않는 경우 (체크섬 오프로드 문제)

  • 권장 (속도 떨어짐) :
    스레드 갯수를 낮게 조절합니다.
  • 비권장 (속도 떨어지지 않음, 보안 문제 발생 가능) :
    제어판 → 시스템 → 하드웨어 → 장치관리자 → 네트워크 어댑터 → 무슨무슨 컨트롤러 → 우클릭 후 속성 → 고급 탭 → 무슨무슨 오프로드를 모두 '사용 안 함'으로 설정 → 확인
    조금 기다리면 인터넷이 다시 연결됩니다.

Wyszukiwarka 검색 데이터 업데이트

  • Wyszukiwarka - 메뉴 - 데이터 다운로드...
  • 데이터를 다시 다운로드할 때마다 서버에서 최신 데이터를 가져옵니다.

Skrypt

  • 메뉴 - 스크립트 가져오기...
  • 파이썬 스크립트를 실행합니다.
  • 다운로드 스크립트를 직접 만들어 추가하는 등 다양한 작업을 할 수 있습니다.
  • 스크립트 파일 (*.hds) 은 텍스트에디터(메모장 등)로 수정할 수 있습니다.
  • 스크립트 파일들을 프로그램에 드래그 & 드랍해서 실행시킬 수도 있습니다.
  • 실행파일 경로에 scripts 폴더 만들고 스크립트 파일 (*.hds) 넣으면 시작할 때 자동으로 실행합니다.
  • 스크립트 다운로드 :
    https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts
  • 스크립트 작성 방법 :
    https://github.com/KurtBestor/Hitomi-Downloader/wiki/How-to-write-a-script

Pomiń DPI

  • Opcje - Preferencje - Ustawienia zaawansowane - Pomiń DPI
  • GoodbyeDPITo block/ bypass DPI (Deep Packet Inspection).

Load cookies

  • Options - Preferencje - Ustawienia zaawansowane - Pliki Cookie - Wczytaj...
  • Można wczytywać pliki cookie wyeksportowane z rozszerzeń przeglądarki. (Plik cookie Netscape)
  • Dzięki tym plikom cookie program Hitomi Downloader może uzyskać dostęp do stron wymagających zalogowania.
  • Rozszerzenie Chrome: Get cookies.txt LOCALLY
  • Rozszerzenie Firefox: cookies.txt
  • Wygasłe pliki cookie są zaznaczone kolorem szarym.

Rozszerzenie Chrome

  • Hitomi Downloader
  • 기능:
    확장프로그램이 필요한 사이트의 다운로드
    쿠키 업데이트

Zapisz

  • Zapisz && Wyjdź :
    Zapisz ustawienia i aktualnie dodaną listę i wyjdź
  • Wyjdź :
    Wyjdź bez zapisywania
  • Podczas uruchamiania aplikacji rozpoczyna się ona od ostatnio zapisanego stanu.

Skróty

  • Alt + D : Pasek adresu ↔ przełączanie listy zadań
  • Ctrl + 1 ~ 7 : 작업에 태그 표시
  • Ctrl + Tab : Pokaż/Ukryj pasek narzędzi
  • Ctrl + - / + : Regulacja rozmiaru miniatur
  • Ctrl + Scroll : Regulacja rozmiaru miniatur
  • Space : Rozwiń/Zwiń Grupę(y)

Feedback

Itd.

  • Proszę używać pobranych plików wyłącznie do użytku osobistego.
  • Więcej informacji znajdziesz w Pomoc - Informacje - Przycisk dolny.
================================================ FILE: translation/help_ru.html ================================================ {head}


Как пользоваться

{date}


Поддерживаемые сайты

Адресная строка

  • Введите в адресную строку несколько URL-адресов и нажмите кнопку «Скачать» для загрузки
  • Примеры:
    https://hitomi.la/galleries/123.html
    https://hitomi.la/reader/123.html
    https://e-hentai.org/g/123/356dfa74ce/
    https://e-hentai.org/s/600e752112/123-4
    https://hiyobi.me/reader/123
    123

    https://www.pixiv.net/users/11
    https://www.pixiv.net/member_illust.php?id=11
    https://pixiv.me/pixiv
    pixiv_11

    https://twitter.com/TensorFlow
    @TensorFlow

    https://www.instagram.com/user_name
    insta_user_name

    https://username.deviantart.com
    deviant_username
  • Примеры для нескольких URL-адресов:
    123, 125, 126
    123 125 126
  • Номера, отсутствующие в Hitomi.la, автоматически преобразуются в URL-адрес E(x)Hentai.

Сохранение

  • Сохранение добавленных в данный момент параметров и задач.
  • Файл - Сохранение
  • Клавиша [Ctrl + S]

Поисковик

  • Поиск галерей
  • Меню - Поисковик...
  • Клавиша [Ctrl + F]

Задачи загрузчика

  • Откройте первый файл:
    Щёлкните правой кнопкой мыши → [Открыть первый файл]
    Нажмите на миниатюру
    Дважды щёлкните
    Клавиша [Enter]
  • Удаление нескольких задач:
    Выбор нескольких задач → клавиша [Del]
  • Удаление нескольких файлов:
    Выбор нескольких задач → Правая кнопка мыши → [Удалить файлы]
    Выбор нескольких задач → клавиша [Shift] + [Del]
  • Удалить все завершённые задачи:
    Щёлкните правой кнопкой мыши → [Удалить все завершённые задачи]
    Удалите все завершённые задачи, которые не заблокированы.

Цвета задач

  • Светло-серый: Ожидание или чтение
  • Тёмно-серый: Скачивание
  • Зелёный: Скачано полностью
  • Оранжевый: Скачано не полностью
  •    Красный: Ошибка или недействителен

Изменение порядка выполнения задач

  • Для изменения порядка перетаскивания используйте кнопку с колёсиком мыши.
  • Также работают следующие команды: [Ctrl + ↑], [Ctrl + ↓], [Ctrl + Home], [Ctrl + End].

Фильтрация списка задач

  • Щёлкните на значке фильтра в левой нижней части окна загрузчика и введите.
  • Видны только те задачи, название которых содержит это слово.
  • Можно также отфильтровать по типу, например "type:youtube".
  • Если ввести "dup:", то будут показаны только идентичные задачи.
  • Введите "rem:", чтобы увидеть только те задачи, которые были удалены из физического хранилища.
  • Вы можете фильтровать по меткам, например "tag:glasses".
  • Можно отфильтровать по комментариям, например, "comment:xxxx".
  • Введите "bad:", чтобы показать только незавершённые задачи.

Фильтрация списка поиска в поисковике

  • Щёлкните на значке фильтра в левом нижнем углу списка поисковика и введите.
  • Будут отображаться только те галереи, которые содержат эту строку в названии, авторе, группе, метке и языке.
  • Можно также отфильтровать по "artist:A", "group:A", "tag:A", "lang:A" и т.д.
  • Введите "p<100", чтобы увидеть только галереи, содержащие менее 100 страниц.
  • Введите "p>100", чтобы увидеть только галереи, содержащие более 100 страниц.
  • Введите "done:o", чтобы увидеть только скачанные галереи.
  • Введите "done:x", чтобы увидеть только не скачанные галереи.

Выбор страницы и скачивание

  • Скачать только указанные страницы.
  • Примеры:
    ~ 100    →  Первые 100 страниц
    -100 ~    →  Последние 100 страниц
    1, 10 ~ 20, -1    →  Первая страница, страницы 10 ~ 20, последняя страница

Выбор главы и скачивание

  • Скачать только выбранные серии.

Настройки программы

  • Настройки → Параметры

Простой поиск - Поиск по ключевым словам

  • Поиск как в Google.
  • Примеры :
    maid
    maid glasses korean
    maid -schoolgirl
    maid n/a
    maid (korean + n/a)

Расширенный поиск - Название

  • Примеры :
    maid
    maid -schoolgirl
    maid glasses

Расширенный поиск - Авторы

  • Примеры :
    sekiya asami
    sekiya asami + amezawa koma

Расширенный поиск - Персонажи

  • Примеры :
    chino kafuu
    chino kafuu + kokoa hoto
    hino kafuu, kokoa hoto

Расширенный поиск - Метки

  • Примеры :
    female:maid
    female:maid, -female:schoolgirl uniform

Список поисковика

  • Скачивание нескольких галерей :
    Выберите несколько → щёлкните правой кнопкой мыши → [Скачать].
    Выберите несколько → клавиша [Enter]
  • Информация о галерее:
    Щёлкните правой кнопкой мыши → Информация...
    Нажмите по миниатюре

Чтобы прекратить поиск

  • Ещё раз нажмите кнопку поиска

Обновление поисковых данных поисковика

  • Поисковик - Меню - Загрузка данных...
  • При каждом скачивании загружаются самые свежие данные с сервера.

Скрипты

  • Инструменты - Импорт скрипта...
  • Выполнение скрипта python.
  • Вы можете создавать собственные скрипты скачивания, добавлять их и многое другое.
  • Файлы скриптов (*.hds) могут быть изменены с помощью текстового редактора (например, Notepad++).
  • Вы также можете перетаскивать файлы скриптов в программу для их запуска.
  • Создайте в пути к исполняемым файлам папку scripts и поместите в неё файлы скриптов (*.hds) для их автоматического запуска при запуске компьютера.
  • Скачать скрипты :
    https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts
  • Как написать скрипт :
    https://github.com/KurtBestor/Hitomi-Downloader/wiki/How-to-write-a-script

Обход DPI

  • Настройки - Параметры - Параметры: Сеть - Обход DPI
  • Используется GoodbyeDPI для блокирования/обхода DPI (глубокой проверки пакетов).

Загрузка файлов cookie

  • Настройки - Параметры - Параметры: Сеть - Файлы cookie - Загрузка...
  • Можно загружать файлы cookie, экспортированные из расширений браузера. (Netscape HTTP Cookie)
  • Используя эти файлы cookie, Hitomi Downloader может получить доступ к страницам, требующим входа.
  • Расширение Chrome: Get cookies.txt LOCALLY
  • Расширение Firefox: cookies.txt
  • Расширение Edge: Get cookies.txt
  • Файлы cookie с истёкшим сроком хранения отображаются серым цветом.

Встроенный веб-браузер

  • Настройки - Параметры - Параметры: Сеть - Встроенный веб-браузер - Вид
  • Используется для чтения страниц, требующих JS.
  • Вы можете использовать это для обновления файлов cookie.

Расширение Chrome

  • Hitomi Downloader
  • Особенности:
    Скачивайте с сайтов, которые требуют расширение
    Обновляйте файлы cookie

Сохранение

  • Сохранить и выйти :
    Выход из программы с сохранением настроек и текущих добавленных списков
  • Выход :
    Выход без сохранения
  • При запуске приложения оно начинает работу с последнего сохранённого состояния.

Горячие клавиши

  • Alt + D : Адресная строка ↔ переключение списка задач
  • Ctrl + 1 ~ 7 : Установить метки в задачах
  • Ctrl + Tab : Отобразить/Скрыть панель инструментов
  • Ctrl + - / + : Регулировка размера миниатюры
  • Ctrl + колёсико мыши : Регулировка размера миниатюры
  • Пробел : Развернуть/свернуть группы

Отзывы

Другое...

  • Пожалуйста, используйте загруженные файлы только для личного пользования.
  • Пожалуйста, ознакомьтесь с дальнейшими обновлениями по: Справка - О программе - нижней кнопке.
================================================ FILE: translation/help_si.html ================================================ {head}


භාවිතා කරන ආකාරය

{date}


සහාය දක්වන අඩවි

ලිපින තීරුව

  • ලිපින තීරුවේ URL කිහිපයක් ටයිප් කර බාගැනීමට බාගැනීම් බොත්තම ක්ලික් කරන්න
  • උදාහරණ:
    https://hitomi.la/galleries/123.html
    https://hitomi.la/reader/123.html
    https://e-hentai.org/g/123/356dfa74ce/
    https://e-hentai.org/s/600e752112/123-4
    https://hiyobi.me/reader/123
    123

    https://www.pixiv.net/users/11
    https://www.pixiv.net/member_illust.php?id=11
    https://pixiv.me/pixiv
    pixiv_11

    https://twitter.com/TensorFlow
    @TensorFlow

    https://www.instagram.com/user_name
    insta_user_name

    https://username.deviantart.com
    deviant_username
  • බහු URL සඳහා උදාහරණ:
    123, 125, 126
    123 125 126
  • Hitomi.la හි නොමැති අංක ස්වයංක්‍රීයව E(x)Hentai URL වෙත පරිවර්තනය වේ.

සුරකින්න

  • දැනට එකතු කර ඇති මනාපයන් සහ කාර්යයන් සුරකින්න.
  • ගොනුව - සුරකින්න
  • [Ctrl + S] යතුර

සොයන්නා

  • ගැලරි සොයන්න
  • මෙනුව - සොයන්නා...
  • [Ctrl + F] යතුර

බාගත කරන්නාගේ කාර්යයන්

  • පළමු ගොනුව විවෘත කරන්න:
    මූසිකය දකුණු-ක්ලික් කරන්න → [පළමු ගොනුව විවෘත කරන්න]
    සිඟිති රුව ක්ලික් කරන්න
    ඩබල් ක්ලික් කරන්න
    [Enter] යතුර
  • කාර්යයන් කිහිපයක් ඉවත් කරන්න:
    බහු කාර්ය → [Del] යතුර තෝරන්න
  • ගොනු කිහිපයක් මකන්න:
    බහුවිධ කාර්යයන් තෝරන්න → මූසිකය දකුණු-ක්ලික් කරන්න → [ගොනු මකන්න]
    බහු කාර්ය → [Shift] + [Del] යතුර තෝරන්න
  • සියලුම සම්පූර්ණ කාර්යයන් ඉවත් කරන්න:
    මූසිකය දකුණු-ක්ලික් කරන්න → [සියලු සම්පූර්ණ කාර්යයන් ඉවත් කරන්න]
    අගුලු දමා නොමැති සියලුම සම්පූර්ණ කාර්යයන් ඉවත් කරන්න.

කාර්ය වර්ණ

  • ලා අළු: බලාසිටීම හෝ කියවීම
  • තද අළු: බාගත කිරීම
  • කොළ: සම්පූර්ණයෙන්ම බාගත කර ඇත
  • තැඹිලි: අසම්පූර්ණව බාගත කර ඇත
  •    රතු: අසාර්ථක හෝ වලංගු නොවේ

කාර්යයන් අනුපිළිවෙල වෙනස් කරන්න

  • ඇණවුම වෙනස් කිරීමට මූසික රෝද බොත්තම සමඟ ඇද දමන්න.
  • පහත විධාන ද ක්‍රියා කරයි: [Ctrl + ↑], [Ctrl + ↓], [Ctrl + මුල් පිටුව], [Ctrl + අවසානය].

කාර්යයන් ලැයිස්තුව පෙරීම

  • බාගැනීම් කවුළුවේ පහළ වම්පස ඇති පෙරහන් නිරූපකය ක්ලික් කරන්න සහ ටයිප් කිරීම.
  • එම වචනය අඩංගු මාතෘකාවක් සහිත කාර්යයන් පමණක් දෘශ්‍යමාන වේ.
  • ඔබට "type:youtube" වැනි වර්ගය අනුවද පෙරීමට හැකිය.
  • ඔබ "dup:" ටයිප් කළහොත්, ඔබට පෙනෙනුයේ අනුපිටපත් කාර්යයන් පමණි.
  • භෞතික ගබඩා කිරීම වෙතින් මකා දැමූ කාර්යයන් පමණක් බැලීමට "rem:" ටයිප් කරන්න .
  • ඔබට "tag:glasses" වැනි ටැග් මඟින් පෙරීමට හැකිය.
  • ඔබට "comment:xxxx" වැනි අදහස් මගින් පෙරීමට හැකිය.
  • අසම්පූර්ණ කාර්යයන් පමණක් පෙන්වීමට "bad:" ටයිප් කරන්න.

සෙවුම් ලැයිස්තුව පෙරහන් කිරීම

  • පහළ වම්පස ඇති පෙරහන හැඩැති නිරූපකය ක්ලික් කර අන්තර්ගතය ඇතුළත් කරන්න
  • මෙම අක්ෂර අඩංගු මාතෘකා, කතුවරුන්, කණ්ඩායම්, ටැග් සහ භාෂා සහිත ගැලරි පමණි.
  • "title:A" ඔබ ටයිප් කරන්නේ නම්, A අකුර අඩංගු මාතෘකා සහිත ගැලරි පමණක් දර්ශනය වේ.
  • "artist:A", "group:A", "tag:A", "lang:A" ලයික් පෙරිමටද හැකිය
  • "p<100" පිටු 100ට අඩු ගැලරි පමණක් පෙන්වනු ඇත.
  • "p>100" පිටු 100 ට වඩා විශාල ගැලරි පමණක් පෙන්වනු ඇත.
  • "done:o" ඔබ ටයිප් කළහොත්, ඔබට පෙනෙනුයේ ඔබ දැනටමත් බාගත කර ඇති ගැලරි පමණි.
  • "done:x" ඔබ ටයිප් කළහොත්, ඔබට පෙනෙනුයේ තවමත් බාගත කර නොමැති ගැලරි පමණි.

බාගත පිටු අංකනය

  • නිශ්චිත පිටු පමණක් බාගන්න.
  • උදාහරණ:
    ~ 100    →  පළමු පිටු 100
    -100 ~    →  පිටු 100 ආපසු
    1, 10 ~ 20, -1    →  පළමු පිටුව, පිටු 10 සිට 20 දක්වා, අවසාන පිටුව

බාගත තේරීම

  • තෝරාගත් කථාංග පමණක් බාගන්න.

මනාප

  • විකල්ප → මනාප

නූල්

  • එක් කාර්යයකට සමාන්තර බාගැනීම්.
  • ඔබේ පරිගණකයේ පිරිවිතරයන් හෝ අන්තර්ජාල තත්ත්වයන් හොඳ නැතිනම්, අංකය තව ටිකක් අඩු කරන්න.
  • ඔබට මෙම සැකසුම ගැන විශ්වාස නැත්නම්, පෙරනිමි අගයන් තබා ගන්න.

සරල සෙවීම - මූල පද සොයන්න

  • Google මෙන් සොයන්න.
  • උදාහරණ :
    සේවිකාව
    සේවිකාව කණ්ණාඩි කුට්ටම කොරියානු
    සේවිකාව - පාසල් දැරිය
    සේවිකාව n/a
    සේවිකාව (කොරියානු + n/a)

උසස් සෙවුම - මාතෘකාව

  • උදාහරණ :
    සේවිකාව
    සේවිකාව - පාසල් දැරිය
    සේවිකාව කණ්ණාඩි කුට්ටම

උසස් සෙවීම - කලාකරුවන්

  • උදාහරණ :
    sekiya asami
    sekiya asami + amezawa koma

උසස් සෙවුම් - චරිත

  • උදාහරණ :
    chino kafuu
    chino kafuu + kokoa hoto
    hino kafuu, kokoa hoto

උසස් සෙවීම - ටැග්

  • උදාහරණ :
    ගැහැණු:සේවිකාව
    ගැහැණු:සේවිකාව, -ගැහැණු:පාසල් දැරිය නිල ඇඳුම

බ්‍රව්සර් ලැයිස්තුව

  • බහු ගැලරි බාගන්න :
    බහු තෝරන්න → දකුණු-ක්ලික් කරන්න → [බාගන්න]
    බහු → [Enter] යතුර තෝරන්න
  • ගැලරි තොරතුරු බලන්න :
    දකුණු-ක්ලික් කරන්න → ගැලරි තොරතුරු...
    සිඟිති රුව ක්ලික් කරන්න

සොයන අතරතුර නවත්වන්න

  • සෙවුම් බොත්තම නැවත වරක් ක්ලික් කරන්න

ගොනුව නිසි ලෙස බාගත නොවන්නේ නම් (චෙක්සම් ඕෆ්ලෝඩ් ගැටළුව)

  • නිර්දේශිත (අඩු කරන ලද වේගය) :
    අඩු නූල් ගණනක් සකසන්න.
  • නිර්දේශ නොකරයි (වේග අඩුවීමක් නැත, ආරක්ෂක ගැටළු ඇති විය හැක):
    පාලන පැනලය → පද්ධතිය → දෘඪාංග → උපාංග කළමනාකරු → ජාල ඇඩැප්ටර → කුමක්ද පාලකය → දකුණු-ක්ලික් කිරීම සහ ගුණාංග → උසස් ටැබය → සියලුම ඕෆ්ලෝඩ් අක්‍රිය කරන්න 'Enabled' → OK ලෙස සකසන්න
    රැදී සිටින්න, අන්තර්ජාලය නැවත සම්බන්ධ වේ.

සෙවුම් දත්ත යාවත්කාලීන කිරීම

  • සොයන්නා - මෙනුව - දත්ත බාගත කරන්න...
  • දත්ත නැවත බාගත කරන සෑම අවස්ථාවකම, නවතම දත්ත සේවාදායකයෙන් ලබා ගනී.

සිද්ධි මාලා රාමුව

  • මෙවලම් - සිද්ධි මාලා රාමුව ආයාත කරන්න...
  • Python සිද්ධි මාලා රාමු ක්‍රියාත්මක කරන්න.
  • ඔබට ඔබේම බාගැනීම් සිද්ධි මාලා රාමු නිර්මාණය කිරීම සහ එකතු කිරීම වැනි විවිධ දේ කළ හැක. මෙහි ඇත.
  • සිද්ධි මාලා රාමු ගොනු (*.hds) පාඨ සංස්කාරකයක් (Notepad, ආදිය) සමඟ සංස්කරණය කළ හැක.
  • සිද්ධි මාලා රාමු වැඩසටහනට ඇදගෙන යන්න & ඔබට බිම දමා ධාවනය කළ හැකිය මෙහි ඇත.
  • ක්‍රියාත්මක කළ හැකි ගොනු මාර්ගයෙහි සිද්ධි මාලා රාමු ෆෝල්ඩරයක් සාදා එය ආරම්භ කිරීමට සිද්ධි මාලා රාමු ගොනුවක් (*.hds) දමන්න. විට ස්වයංක්‍රියව ක්‍රියාත්මක වේ
  • සිද්ධි මාලා රාමු බාගන්න :
    https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts
  • සිද්ධි මාලා රාමුවක් ලියන ආකාරය :
    https://github.com/KurtBestor/Hitomi-Downloader/wiki/How-to-write-a-script

DPI මඟහැරයාම

  • විකල්ප - මනාප - ජාල සැකසීම් - DPI මඟහැරයාම
  • GoodbyeDPIඅවහිර කිරීමට/ DPI මඟහැරයාම (ගැඹුරු පැකට් පරීක්ෂාව).

කුකීස් පූරණය කරන්න

  • විකල්ප - මනාප - ජාල සැකසීම - කුකීස් - පූරණය...
  • බ්‍රවුසර දිගු වලින් නිර්යාත කරන ලද කුකීස් පූරණය කළ හැක. (Netscape HTTP කුකී ගොනුව)
  • මෙම කුකීස් භාවිතා කරමින්, Hitomi ownloader පිවිසීමට අවශ්‍ය පිටු වෙත ප්‍රවේශ විය හැක.
  • Chrome දිගුව: Get cookies.txt LOCALLY
  • Firefox දිගුව: cookies.txt ලබාගන්න
  • Edge දිගුව: cookies.txt ලබාගන්න
  • කල් ඉකුත් වූ කුකීස් අළු පැහැයෙන් දැක්වේ.

පෙරනිමි වෙබ් බ්‍රව්සරය

  • විකල්ප - මනාප - ජාල සැකසීම - පෙරනිමි වෙබ් බ්‍රව්සරය - බලන්න
  • JS විදැහුම්කරණය අවශ්‍ය පිටු කියවීමට භාවිතා කරයි.
  • කුකීස් යාවත්කාලීන කිරීමට ඔබට මෙය භාවිතා කළ හැක.

Chrome දිගුව

  • Hitomi Downloader
  • කාර්යයන්:
    දිගුව අවශ්‍ය අඩවි බාගන්න
    කුකීස් යාවත්කාලීන කරන්න

සුරකින්න

  • සුරකින්න සහ ඉවත් වන්න :
    සුරැකුම් සැකසීම් සහ දැනට එකතු කරන ලද ලැයිස්තු සමඟින් ඉවත් වන්න
  • ඉවත් වන්න :
    සුරැකීමෙන් තොරව ඉවත් වන්න
  • යෙදුම දියත් කරන විට, එය වඩාත් මෑත සුරැකි තත්වයෙන් ආරම්භ වේ.

කෙටිමං

  • Alt + D : ලිපින තීරුව ↔ කාර්ය ලැයිස්තුව ටොගල් කරන්න
  • Ctrl + 1 ~ 7 : කාර්යයන් තුළ ටැග් සකසන්න
  • Ctrl + Tab: මෙවලම් තීරුව පෙන්වන්න/සඟවන්න
  • Ctrl + - / + : සිඟිති රූ ප්‍රමාණය ගැලපීම
  • Ctrl + Scroll: සිඟිති රූ ප්‍රමාණය ගැලපීම
  • ඉඩ : පුළුල් කරන්න/හකුළන්න කණ්ඩායම(ම්)

ප්‍රතිපෝෂණ

වෙනත්.

  • කරුණාකර බාගත කළ ගොනු පුද්ගලික භාවිතය සඳහා පමණක් භාවිතා කරන්න.
  • කරුණාකර වැඩිදුර යාවත්කාලීන සඳහා උදවු - ගැන - පහළ බොත්තම බලන්න.
================================================ FILE: translation/help_zh.html ================================================ {head}


使用方法

{date}


支持的网站

地址栏

  • 在地址栏输入一些URL,然后点击下载按钮进行下载
  • 示例:
    https://hitomi.la/galleries/123.html
    https://hitomi.la/reader/123.html
    https://e-hentai.org/g/123/356dfa74ce/
    https://e-hentai.org/s/600e752112/123-4
    https://hiyobi.me/reader/123
    123

    https://www.pixiv.net/users/11
    https://www.pixiv.net/member_illust.php?id=11
    https://pixiv.me/pixiv
    pixiv_11

    https://twitter.com/TensorFlow
    @TensorFlow

    https://www.instagram.com/user_name
    insta_user_name

    https://username.deviantart.com
    deviant_username
  • 多个URL的示例:
    123, 125, 126
    123 125 126
  • 不在Hitomi.la中的数字会自动转换为E(x)Hentai URL。

保存

  • 保存当前添加的偏好与任务。
  • 文件 - 保存
  • [Ctrl + S] 键

搜索器

  • 搜索画廊
  • 菜单 - 搜索器...
  • [Ctrl + F] 键

下载任务

  • 打开第一个文件:
    鼠标右击 → [打开第一个文件]
    点击缩略图
    双击
    [Enter] 键
  • 移除多个任务:
    选择多个任务 → [Del] 键
  • 删除多个文件:
    选择多个任务 → 鼠标右击 → [删除文件]
    选择多个任务 → [Shift] + [Del] 键
  • 移除所有完成的任务:
    鼠标右击 → [移除所有完成的任务]
    移除所有未加锁的完成任务。

任务颜色

  • 浅灰色:等待或阅读
  • 深灰色:正在下载
  • 绿色:完全下载完成
  • 橙色:部分下载完成
  •    红色:失败或无效

改变任务顺序

  • 使用鼠标滚轮拖放来改变顺序。
  • 以下命令也有效:[Ctrl + ↑],[Ctrl + ↓],[Ctrl + Home],[Ctrl + End]。

过滤任务列表

  • 点击下载窗口左下角的过滤图标并输入。
  • 只显示标题包含该词的任务。
  • 您还可以按类型进行过滤,例如 "type:youtube"。
  • 输入 "dup:",只会看到重复的任务。
  • 输入 "rem:",只会看到从物理存储中删除的任务。
  • 您可以按标签进行过滤,例如 "tag:glasses"。
  • 你可以通过评论进行过滤,例如 "comment:xxxx"。
  • 输入 "bad:",只显示不完整的任务。

过滤搜索器搜索列表

  • 点击搜索器左下角的过滤图标,并输入一些内容
  • 您只会看到标题、作者、小组、标签和语言包含这些字符的画廊。
  • 如果你输入 "title:A",你只会看到含有字母A的标题的画廊。
  • 你也可以通过 "artist:A", "group:A", "tag:A", "lang:A" 等进行过滤。
  • 输入 "p<100" 可以只查看少于100页的画廊。
  • 输入 "p>100" 可以只查看超过100页的画廊。
  • 输入 "done:o",只能查看已经下载过的画廊。
  • 输入 "done:x",只能查看你还没有下载过的画廊。

选择页面&下载

  • 只下载你指定的页面。
  • 示例:
    ~ 100    →  前100页
    -100 ~    →  最后100页
    1, 10 ~ 20, -1    →  第一页,第10页到20页,最后一页

选择章节&下载

  • 只下载选择的剧集。

偏好设置

  • 选项 → 偏好设置

简单搜索 - 搜索关键词

  • 像Google一样搜索。
  • 例子 :
    女仆
    眼镜的韩国女仆
    女仆 -学生妹
    女仆 n/a
    女仆 (韩国 + n/a)

高级检索 - 标题

  • 例子 :
    女仆
    女仆 -学生妹
    戴眼镜的女仆

高级搜索 - 艺术家

  • 例子 :
    关谷麻美
    关谷麻美 + 雨泽鸦鹉

高级搜索 - 角色

  • 例子 :
    千石抚子
    千石抚子 + 心叶理惠
    日野香草, 心叶理惠

高级搜索 - 标签

  • 例子 :
    女性:女仆
    女性:女仆, -女性:校服

搜索器列表

  • 下载多个画廊 :
    选择多个 → 右键 → [下载]
    选择多个 → [Enter] 键
  • 浏览画廊信息 :
    右键 → 画廊信息...
    点击缩略图

停止搜索

  • 再次点击搜索按钮

更新搜索器搜索数据

  • 搜索器 - 菜单 - 下载数据...
  • 每次重新下载数据时,会从服务器获取最新数据。

脚本

绕过 DPI

  • 选项 - 偏好设置 - 网络设置 - 绕过 DPI
  • 使用 GoodbyeDPI 来阻止/绕过 DPI (深度数据包检查)。

加载 cookies

  • 选项 - 偏好设置 - 网络设置 - Cookies - 加载...
  • 可以加载从浏览器扩展程序导出的 Cookies。(Netscape HTTP Cookie 文件)
  • 使用这些 Cookies,Hitomi Downloader 可以访问需要登录的页面。
  • Chrome 扩展:Get cookies.txt LOCALLY
  • Firefox 扩展:cookies.txt
  • Edge 扩展:Get cookies.txt
  • 过期的 Cookies 显示为灰色。

内置网络浏览器

  • 选项 - 偏好设置 - 网络设置 - 内置网络浏览器 - 查看
  • 用于阅读需要 JS 渲染的页面。
  • 你可以用它来更新 cookies。

Chrome 扩展

保存

  • 保存 & 退出:
    保存设置与当前添加的列表后退出
  • 退出:
    不保存退出
  • 启动应用程序时,会以最近保存的状态开始。

快捷键

  • Alt + D :地址栏 ↔ 切换任务列表
  • Ctrl + 1 ~ 7 :在任务中设置标签
  • Ctrl + Tab :显示/隐藏工具栏
  • Ctrl + - / + :调整缩略图大小
  • Ctrl + 滚轮 :调整缩略图大小
  • 空格键 : 展开/折叠群组

反馈

其他

  • 请仅将下载的文件用于个人使用。
  • 请在帮助 - 关于 - 底部按钮 中查找后续更新。
================================================ FILE: translation/qt_ar.json ================================================ { "QShortcut": { "+": "+", "CD": "أسطوانة", "Go": "انطلاق", "No": "لا", "Up": "الأعلى", "Alt": "Alt", "F%1": "F%1", "Del": "Del", "Cut": "قصّ", "End": "End", "Esc": "Esc", "Ins": "Ins", "Tab": "Tab", "WWW": "WWW", "Yes": "نعم", "Back": "عودة", "Copy": "نسخ", "Ctrl": "Ctrl", "Down": "الأسفل", "Flip": "قلب", "Help": "المساعدة", "Home": "Home", "Left": "اليسار", "Menu": "القائمة", "Meta": "Meta", "PgUp": "PgUp", "Save": "حفظ", "Send": "إرسال", "Stop": "إيقاف", "Time": "الوقت", "View": "المنظور", "Split Screen": "تقسيم الشّاشة", "Clear": "مسح", "Close": "إغلاق", "Eject": "إخراج", "Enter": "Enter", "Kanji": "الكانجي", "Music": "الموسيقى", "Paste": "لصق", "Pause": "Pause", "Right": "اليمين", "Shift": "Shift", "Sleep": "نوم", "Tools": "الأدوات", "Video": "الفيديو", "Hiragana": "الهيراغانا", "Zenkaku": "الزّينكاكو", "Print Screen": "طباعة الشّاشة", "Zoom In": "تقريب", "Hangul Special": "الهانغول خاصّ", "Scroll Lock": "قُفل التّمرير", "Media Pause": "إلباث الوسيط", "Volume Down": "خفض الصّوت", "Volume Mute": "كتم الصّوت", "Kana Shift": "‏Shift الكانا", "Media Previous": "الوسيط السّابق", "Home Page": "الصّفحة الرّئيسيّة", "Volume Up": "رفع الصّوت", "Menu PB": "قائمة PB", "Hangul PostHanja": "الهانغول ما بعد الهانجا", "Kana Lock": "قُفل الكانا", "Delete": "حذف", "Escape": "هروب", "Hangul": "الهانغول", "Henkan": "الهينكان", "Insert": "إدراج", "Logoff": "الخروج", "Massyo": "الماسيو", "Option": "الخيار", "PgDown": "PgDown", "Reload": "إعادة تحميل", "Return": "Return", "Romaji": "الرّومانجي", "Search": "البحث", "Select": "تحديد", "NumLock": "NumLock", "Hiragana Katakana": "الهيراغانا الكاتاكانا", "Top Menu": "القائمة العلويّة", "ScrollLock": "ScrollLock", "Zoom Out": "إبعاد", "Page Up": "صفحة لأعلى", "Open URL": "فتح عنوان", "Caps Lock": "قُفل حالة الأحرف", "Eisu Shift": "‏Shift الإيسو", "Code input": "دخل الكود", "Eisu toggle": "تبديل الإيسو", "Clear Grab": "مسح الانتزاع", "CapsLock": "CapsLock", "Backtab": "Backtab", "Battery": "البطّاريّة", "Katakana": "الكاتاكانا", "Refresh": "إنعاش", "Browser": "المتصفّح", "Keyboard Menu": "قائمة لوحة المفاتيح", "Back Forward": "للخلف للأمام", "Backspace": "Backspace", "Hangul Banja": "الهانغول البانجا", "Hangul Hanja": "الهانغول الهانجا", "Standby": "تعليق", "Hangul Start": "بداية الهانغول", "Suspend": "تعليق", "Display": "العرض", "Hangul Romaja": "الهانغول الرّوماجا", "Zenkaku Hankaku": "الزّينكاكو الهينكاكو", "Hangul Jeonja": "الهانغول الجيونجا", "Subtitle": "التّرجمات", "Hangul Jamo": "الهانغول الجامو", "Bluetooth": "بلوثوت", "Num Lock": "قُفل الأرقام", "Number Lock": "قُفل لوحة الأرقام", "Hangul PreHanja": "الهانغول ما قبل الهانجا", "Terminal": "الطّرفيّة", "Task Panel": "لوحة المهامّ", "Favorites": "المفضّلة", "Forward": "تقدّم", "Page Down": "صفحة لأسفل", "Wake Up": "إيقاظ", "Power Off": "إطفاء", "Hankaku": "الهانكاكو", "Hangul End": "نهاية الهانغول" }, "QPageSetupWidget": { "Form": "نموذج", "bottom margin": "الهامش السفليّ", "Paper": "الورقة", "Paper source:": "مصدر الورق:", "right margin": "الهامش الأيمن", "Margins": "الهوامش", "Landscape": "عرضيّ", "Width:": "العرض:", "Orientation": "الاتّجاه", "Portrait": "طوليّ", "top margin": "الهامش العلويّ", "left margin": "الهامش الأيسر", "Page size:": "مقاس الورقة:", "Reverse portrait": "طوليّ معكوس", "Millimeters (mm)": "ملّيمتر (مم)", "Points (pt)": "نقطة (نقطة)", "Inches (in)": "بوصة (بوصة)", "Reverse landscape": "عرضيّ معكوس", "Height:": "الارتفاع:" }, "QDialogButtonBox": { "OK": "حسنًا" }, "QErrorMessage": { "&OK": "&حسنًا", "Fatal Error:": "خطأ فادح:", "&Show this message again": "أ&ظهر هذه الرّسالة مجدّدًا", "Debug Message:": "رسالة التّنقيح:", "Warning:": "تحذير:" }, "QFontDatabase": { "Any": "أيّ نظام", "Lao": "نظام اللاو", "Bold": "ثخين", "Demi": "نصف", "N'Ko": "نظام الأنكو", "Thai": "تايلانديّ", "Black": "أسود", "Greek": "يونانيّ", "Khmer": "خميريّ", "Latin": "لاتينيّ", "Light": "خفيف", "Ogham": "أوجهاميّ", "Oriya": "نظام الأوريا", "Runic": "رونيّ", "Tamil": "تاميليّ", "Cyrillic": "سيريليّ", "Kannada": "نظام الكانادا", "Malayalam": "مالايالاميّ", "Simplified Chinese": "صينيّ مبسّط", "Demi Bold": "نصف ثخين", "Arabic": "عربيّ", "Hebrew": "عبريّ", "Myanmar": "ميانماريّ", "Italic": "مائل", "Korean": "كوريّ", "Normal": "طبيعيّ", "Oblique": "مائل", "Telugu": "نظام التّيلوجو", "Thaana": "ثعنيّ", "Symbol": "رموز", "Syriac": "سيريانيّ", "Devanagari": "ديفاناجاريّ", "Japanese": "يابانيّ", "Bengali": "بنغاليّ", "Armenian": "أرمينيّ", "Sinhala": "سنهاليّ", "Tibetan": "تبتيّ", "Vietnamese": "فيتناميّ", "Gujarati": "غوجارتيّ", "Traditional Chinese": "صينيّ تقليديّ", "Georgian": "جورجيّ", "Gurmukhi": "جرمخيّ" }, "QScrollBar": { "Top": "الأعلى", "Scroll down": "مرّر للأسفل", "Scroll here": "مرّر إلى هنا", "Scroll left": "مرّر لليسار", "Bottom": "الأسفل", "Page up": "الصّفحة العليا", "Page right": "الصّفحة اليمنى", "Scroll up": "مرّر للأعلى", "Scroll right": "مرّر لليمين", "Left edge": "الحافّة اليسرى", "Page down": "الصّفحة السّفلى", "Page left": "الصّفحة اليسرى", "Right edge": "الحافّة اليمنى" }, "QFileDialog": { "Back": "ارجع", "File": "ملفّ", "Open": "افتح", "&Open": "ا&فتح", "&Save": "ا&حفظ", "Alias": "اختصار", "Drive": "القرص", "Show ": "أظهر ", "'%1' is write protected.\nDo you want to delete it anyway?": "‏’%1‘ محميّ ضدّ الكتابة.\nأتريد حذفه بأيّ حال؟", "File &name:": "ا&سم الملفّ:", "File Folder": "مجلّد", "New Folder": "مجلّد جديد", "Folder": "مجلّد", "Parent Directory": "الدّليل الأمّ", "&New Folder": "مجلّد &جديد", "Remove": "أزل", "My Computer": "حاسوبي", "Look in:": "اعثر في:", "Create a New Folder": "أنشئ مجلّدًا جديدًا", "Files of type:": "الملفّات من النّوع:", "Find Directory": "اعثر على دليل", "Show &hidden files": "أظهر الملفّات الم&خفيّة", "Save As": "احفظ كَ‍", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\nلم يُعثر على الدّليل.\nرجاءً تحقّق من إعطائك الاسم الصحيح للدّليل.", "List View": "منظور قائميّ", "&Choose": "ا&ختر", "&Delete": "ا&حذف", "All Files (*)": "كلّ الملفّات (*)", "Directories": "الأدّلة", "&Rename": "أ&عد التّسمية", "Could not delete directory.": "تعذّر حذف الدّليل.", "Directory:": "الدّليل:", "Unknown": "مجهول", "%1 already exists.\nDo you want to replace it?": "‏%1 موجود بالفعل.\nأتريد استبداله؟", "Forward": "تقدّم", "Go forward": "اذهب للأمام", "Go to the parent directory": "اذهب إلى الدّليل الأمّ", "Recent Places": "الأماكن الحديثة", "Go back": "اذهب للخلف", "Change to detail view mode": "غيّر إلى وضع المنظور التّفصيليّ", "Create New Folder": "أنشئ مجلّدًا جديدًا", "Shortcut": "اختصار", "Detail View": "منظور تفصيليّ", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\nلم يُعثر على الملفّ.\nرجاءً تحقّق من إعطائك الاسم الصحيح للملفّ.", "Change to list view mode": "غيّر إلى وضع المنظور القائميّ" }, "QLineEdit": { "Cu&t": "&قصّ", "&Copy": "ا&نسخ", "&Redo": "أ&عد", "&Undo": "&تراجع", "&Paste": "أل&صق", "Delete": "احذف", "Select All": "حدّد الكلّ" }, "QWizard": { "Done": "تمّ", "Help": "مساعدة", "&Help": "م&ساعدة", "&Next": "ال&تّالي", "Cancel": "ألغِ", "Commit": "أودع", "Continue": "تابع", "&Finish": "أن&هِ", "&Next >": "ال&تّالي >", "Go Back": "ارجع", "< &Back": "< ال&سّابق" }, "QMdiSubWindow": { "Help": "مساعدة", "Menu": "قائمة", "&Move": "ا&نقل", "&Size": "ال&حجم", "Close": "أغلق", "Minimize": "صغّر", "Shade": "ظلّل", "Stay on &Top": "ابقي في الأ&على", "&Close": "أ&غلق", "- [%1]": "- [%1]", "%1 - [%2]": "%1 - [%2]", "&Restore": "ا&ستعد", "Restore": "استعد", "Maximize": "كبّر", "Unshade": "ألغِ التّظليل", "Mi&nimize": "&صغّر", "Ma&ximize": "&كبّر", "Restore Down": "استعد لأسفل" }, "QDirModel": { "Kind": "النّوع", "Name": "الاسم", "Size": "الحجم", "Type": "النّوع", "Date Modified": "تاريخ التّعديل" }, "QFileSystemModel": { "Kind": "النّوع", "Name": "الاسم", "Size": "الحجم", "Type": "النّوع", "%1 GB": "%1 غ.بايت", "%1 KB": "%1 ك.بايت", "%1 MB": "%1 م.بايت", "%1 TB": "%1 ت.بايت", "The name \"%1\" can not be used.

Try using another name, with fewer characters or no punctuations marks.": "لا يمكن استخدام الاسم ”%1“.

جرّب استخدام اسم آخر بمحارف أقلّ أو بلا علامات ترقيم.", "%1 bytes": "%1 بايت", "My Computer": "حاسوبي", "Computer": "الحاسوب", "Invalid filename": "اسم الملفّ غير صالح", "%1 byte(s)": "%1 بايت", "Date Modified": "تاريخ التّعديل" }, "QUndoGroup": { "Redo": "أعد", "Undo": "تراجع", "Redo %1": "أعد %1", "Undo %1": "تراجع عن %1" }, "QUndoStack": { "Redo": "أعد", "Undo": "تراجع", "Redo %1": "أعد %1", "Undo %1": "تراجع عن %1" }, "QComboBox": { "True": "صحيح", "False": "خطأ" }, "QDockWidget": { "Close": "أغلق", "Float": "أعم" }, "QDialog": { "What's This?": "ما هذا؟" }, "QWhatsThisAction": { "What's This?": "ما هذا؟" }, "QMessageBox": { "Show Details...": "أظهر التّفاصيل...", "Hide Details...": "أخفِ التّفاصيل..." }, "QAbstractSpinBox": { "Step &down": "خطوة لأ&سفل", "&Step up": "خطوة لأ&على", "&Select All": "&حدّد الكلّ" }, "QInputDialog": { "Enter a value:": "أدخل قيمة:" }, "QTabBar": { "Scroll Left": "مرّر لليسار", "Scroll Right": "مرّر لليمين" }, "QUndoModel": { "": "<فارغ>" }, "QProgressDialog": { "Cancel": "ألغِ" }, "MAC_APPLICATION_MENU": { "Hide Others": "أخفِ البقيّة", "Quit %1": "أنهِ %1", "About %1": "عنْ %1", "Preferences...": "تفضيلات...", "Services": "الخدمات", "Hide %1": "أخفِ %1", "Show All": "أظهر الكلّ" }, "CloseButton": { "Close Tab": "أغلق اللسان" }, "QMdiArea": { "(Untitled)": "(غير مسمّى)" } } ================================================ FILE: translation/qt_es.json ================================================ { "QShortcut": { "+": "+", "No": "No", "Up": "Arriba", "Alt": "Alt", "F%1": "F%1", "Del": "Supr", "End": "Fin", "Esc": "Esc", "Ins": "Ins", "Tab": "Tabulador", "Yes": "Sí", "Back": "Anterior (histórico)", "Ctrl": "Ctrl", "Down": "Abajo", "Flip": "Voltear", "Help": "Ayuda", "Home": "Inicio", "Left": "Izquierda", "Menu": "Menú", "Meta": "Meta", "PgUp": "Re Pág", "Stop": "Detener", "Enter": "Intro", "Pause": "Pausa", "Right": "Derecha", "Shift": "May", "Print Screen": "Imprimir pantalla", "Scroll Lock": "Bloqueo del desplazamiento", "Volume Down": "Bajar el volumen", "Volume Mute": "Silenciar", "Media Previous": "Medio anterior", "Home Page": "Página de inicio", "Volume Up": "Subir el volumen", "Delete": "Borrar", "Escape": "Escape", "Insert": "Insertar", "PgDown": "Av Pág", "Return": "Retorno", "Search": "Búsqueda", "Select": "Seleccionar", "NumLock": "Bloq Num", "ScrollLock": "Bloq Despl", "Page Up": "Retroceder página", "Open URL": "Abrir URL", "Caps Lock": "Bloqueo de mayúsculas", "CapsLock": "Bloq Mayús", "Backtab": "Tabulador hacia atrás", "Refresh": "Actualizar", "Backspace": "Borrar", "Standby": "Reposo", "Num Lock": "Bloq num", "Number Lock": "Bloqueo numérico", "Favorites": "Favoritos", "Forward": "Siguiente (histórico)", "Page Down": "Avanzar página" }, "QDialogButtonBox": { "OK": "Aceptar", "&OK": "&Aceptar", "&No": "&No", "&Yes": "&Sí", "Help": "Ayuda", "Open": "Abrir", "Save": "Guardar", "&Save": "&Guardar", "Abort": "Interrumpir", "Apply": "Aplicar", "Close": "Cerrar", "Reset": "Reinicializar", "Retry": "Reintentar", "Restore Defaults": "Restaurar los valores predeterminados", "&Close": "&Cerrar", "Cancel": "Cancelar", "Ignore": "Ignorar", "Close without Saving": "Cerrar sin guardar", "N&o to All": "N&o a todo", "Save All": "Guardar todo", "&Cancel": "&Cancelar", "Discard": "Descartar", "Yes to &All": "Sí a &todo", "Don't Save": "No guardar" }, "QMessageBox": { "OK": "Aceptar", "Help": "Ayuda", "Show Details...": "Mostrar los detalles...", "Hide Details...": "Ocultar los detalles..." }, "QErrorMessage": { "&OK": "&Aceptar", "Fatal Error:": "Error fatal:", "&Show this message again": "Mo&strar este mensaje de nuevo", "Debug Message:": "Mensaje de depuración:", "Warning:": "Aviso:" }, "QScrollBar": { "Top": "Parte superior", "Scroll down": "Desplazar hacia abajo", "Scroll here": "Desplazar hasta aquí", "Scroll left": "Desplazar hacia la izquierda", "Line up": "Alinear", "Line down": "Alinear por abajo", "Bottom": "Parte inferior", "Page up": "Una página hacia arriba", "Position": "Posición", "Page right": "Una página a la derecha", "Scroll up": "Desplazar hacia arriba", "Scroll right": "Desplazar hacia la derecha", "Left edge": "Borde izquierdo", "Page down": "Una página hacia abajo", "Page left": "Una página a la izquierda", "Right edge": "Borde derecho" }, "QFileDialog": { "Back": "Anterior (histórico)", "File": "Fichero", "Open": "Abrir", "&Open": "&Abrir", "&Save": "&Guardar", "Drive": "Unidad", "Show ": "Mostrar ", "'%1' is write protected.\nDo you want to delete it anyway?": "«%1» está protegido contra escritura. \n¿Desea borrarlo de todas formas?", "File &name:": "&Nombre de fichero:", "New Folder": "Nueva carpeta", "Parent Directory": "Directorio superior", "&New Folder": "&Nueva carpeta", "Remove": "Eliminar", "My Computer": "Mi equipo", "Look in:": "Ver en:", "Files of type:": "Ficheros de tipo:", "Find Directory": "Buscar en el directorio", "Show &hidden files": "Mostrar los fic&heros ocultos", "Are sure you want to delete '%1'?": "¿Seguro que desea borrar «%1»?", "Save As": "Guardar como", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\nDirectorio no encontrado.\nVerique que el nombre del directorio es correcto.", "List View": "Vista de lista", "&Choose": "&Seleccionar", "&Delete": "&Borrar", "All Files (*)": "Todos los ficheros (*)", "Directories": "Directorios", "All Files (*.*)": "Todos los ficheros (*.*)", "&Rename": "Cambia&r de nombre", "Could not delete directory.": "No fue posible borrar el directorio.", "Directory:": "Directorio:", "Unknown": "Desconocido", "%1 already exists.\nDo you want to replace it?": "El fichero %1 ya existe.\n¿Desea reemplazarlo?", "Forward": "Siguiente (histórico)", "Create New Folder": "Crear una nueva carpeta", "Detail View": "Vista detallada", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\nFichero no encontrado.\nVerifique que el nombre del fichero es correcto." }, "QLineEdit": { "Cu&t": "Cor&tar", "&Copy": "&Copiar", "&Redo": "&Rehacer", "&Undo": "&Deshacer", "&Paste": "&Pegar", "Delete": "Borrar", "Select All": "Seleccionar todo" }, "QDockWidget": { "Dock": "Anclada", "Close": "Cerrar", "Float": "Flotante" }, "QDialog": { "Done": "Terminar", "What's This?": "¿Qué es esto?" }, "QWizard": { "Done": "Terminar", "Help": "Ayuda", "&Help": "&Ayuda", "Cancel": "Cancelar", "Commit": "Enviar", "Continue": "Siguiente", "&Finish": "&Terminar", "&Next >": "Siguie&nte >", "Go Back": "Precedente", "< &Back": "< &Anterior" }, "QMdiSubWindow": { "Help": "Ayuda", "Menu": "Menú", "&Move": "&Mover", "&Size": "Redimen&sionar", "Close": "Cerrar", "Minimize": "Minimizar", "Stay on &Top": "Permanecer en &primer plano", "&Close": "&Cerrar", "%1 - [%2]": "%1 - [%2]", "&Restore": "&Restaurar", "Maximize": "Maximizar", "Mi&nimize": "Mi&nimizar", "Ma&ximize": "Ma&ximizar", "Restore Down": "Restaurar abajo" }, "QDirModel": { "Kind": "Clase", "Name": "Nombre", "Size": "Tamaño", "Type": "Tipo", "Date Modified": "Última modificación" }, "QFileSystemModel": { "Kind": "Clase", "Name": "Nombre", "Size": "Tamaño", "Type": "Tipo", "%1 GB": "%1 GiB", "%1 KB": "%1 KiB", "%1 MB": "%1 MiB", "%1 TB": "%1 TiB", "The name \"%1\" can not be used.

Try using another name, with fewer characters or no punctuations marks.": "No se puede utilizar el nombre «%1».

Intente usar otro nombre con menos caracteres o sin signos de puntuación.", "%1 bytes": "%1 bytes", "My Computer": "Mi equipo", "Computer": "Equipo", "Invalid filename": "Nombre de fichero no válido", "Date Modified": "Última modificación" }, "QComboBox": { "Open": "Abrir", "True": "Verdadero", "Close": "Cerrar", "False": "Falso" }, "QUndoGroup": { "Redo": "Rehacer", "Undo": "Deshacer" }, "QUndoStack": { "Redo": "Rehacer", "Undo": "Deshacer" }, "QWhatsThisAction": { "What's This?": "¿Qué es esto?" }, "QPageSetupWidget": { "Paper source:": "Fuente del papel:", "Landscape": "Apaisado", "Portrait": "Vertical", "Page size:": "Tamaño de página:" }, "QAbstractSpinBox": { "Step &down": "Re&ducir", "&Step up": "&Aumentar", "&Select All": "&Seleccionar todo" }, "QTabBar": { "Scroll Left": "Desplazar hacia la izquierda", "Scroll Right": "Desplazar hacia la derecha" }, "QUndoModel": { "": "" }, "QProgressDialog": { "Cancel": "Cancelar" }, "MAC_APPLICATION_MENU": { "Hide Others": "Ocultar otros", "Quit %1": "Salir de %1", "About %1": "Acerca de %1", "Preferences...": "Preferencias…", "Services": "Servicios", "Hide %1": "Ocultar %1", "Show All": "Mostrar todo" } } ================================================ FILE: translation/qt_fr.json ================================================ { "QShortcut": { "+": "+", "CD": "CD", "Go": "Aller", "No": "Non", "Up": "Haut", "Alt": "Alt", "F%1": "F%1", "Del": "Suppr", "Cut": "Couper", "End": "Fin", "Esc": "Échap", "Ins": "Inser", "Tab": "Tab", "WWW": "WWW", "Yes": "Oui", "Back": "Précédent", "Copy": "Copier", "Ctrl": "Ctrl", "Down": "Bas", "Flip": "Retourner", "Help": "Aide", "Home": "Début", "Left": "Gauche", "Menu": "Menu", "Meta": "Méta", "PgUp": "Page préc", "Save": "Enregistrer", "Send": "Envoyer", "Stop": "Arrêter", "Time": "Heure", "View": "Affichage", "Split Screen": "Partager l'écran", "Clear": "Effacer", "Close": "Fermer", "Eject": "Éjecter", "Enter": "Entrée", "Kanji": "Kanji", "Music": "Musique", "Paste": "Coller", "Pause": "Pause", "Right": "Droite", "Shift": "Maj", "Sleep": "Veille", "Tools": "Outils", "Video": "Vidéo", "Hiragana": "Hiragana", "Zenkaku": "Zenkaku", "Print Screen": "Imprimer écran", "Zoom In": "Zoom avant", "Hangul Special": "Hangul Special", "Scroll Lock": "Arrêt défilement", "Media Pause": "Média pause", "Volume Down": "Volume bas", "Volume Mute": "Volume muet", "Kana Shift": "Kana Shift", "Media Previous": "Média précédent", "Home Page": "Page d'accueil", "Volume Up": "Volume haut", "Menu PB": "Menu PB", "Hangul PostHanja": "Hangul PostHanja", "Kana Lock": "Kana Lock", "Delete": "Supprimer", "Escape": "Échapement", "Hangul": "Hangul", "Henkan": "Henkan", "Insert": "Insérer", "Logoff": "Fermer session", "Massyo": "Massyo", "Option": "Option", "PgDown": "Page suiv", "Reload": "Recharger", "Return": "Retour", "Romaji": "Romaji", "Search": "Recherche", "Select": "Sélectionner", "NumLock": "Verr num", "Hiragana Katakana": "Hiragana Katakana", "Top Menu": "Haut du menu", "ScrollLock": "Arrêt défil", "Zoom Out": "Zoom arrière", "Page Up": "Page haut", "Open URL": "Ouvrir URL", "Caps Lock": "Verr Maj", "Eisu Shift": "Eisu Shift", "Code input": "Entrée le code", "Eisu toggle": "Eisu toggle", "Clear Grab": "Effacer la poignée", "CapsLock": "Verr maj", "Backtab": "Tab arr", "Battery": "Batterie", "Katakana": "Katakana", "Refresh": "Rafraîchir", "Browser": "Navigateur", "Keyboard Menu": "Menu clavier", "Back Forward": "Retour avant", "Backspace": "Effacement", "Hangul Banja": "Hangul Banja", "Hangul Hanja": "Hangul Hanja", "Standby": "Attente", "Hangul Start": "Hangul début", "Suspend": "Suspendre", "Display": "Affichage", "Hangul Romaja": "Hangul Romaja", "Zenkaku Hankaku": "Zenkaku Hankaku", "Hangul Jeonja": "Hangul Jeonja", "Subtitle": "Sous-titre", "Hangul Jamo": "Hangul Jamo", "Bluetooth": "Bluetooth", "Num Lock": "Verr num", "Number Lock": "Verrouillage numérique", "Hangul PreHanja": "Hangul PreHanja", "Terminal": "Terminal", "Task Panel": "Panneau de tâches", "Favorites": "Favoris", "Forward": "Suivant", "Page Down": "Page bas", "Wake Up": "Réveiller", "Power Off": "Éteindre", "Hankaku": "Hankaku", "Hangul End": "Hangul Fin" }, "QPageSetupWidget": { "Form": "Formulaire", "bottom margin": "marge basse", "Paper": "Papier", "Paper source:": "Source du papier :", "right margin": "marge droite", "Margins": "Marges", "Landscape": "Paysage", "Width:": "Largeur :", "Orientation": "Orientation", "Portrait": "Portrait", "top margin": "marge haute", "left margin": "marge gauche", "Page size:": "Dimensions :", "Reverse portrait": "Portrait inversé", "Millimeters (mm)": "Millimètres (mm)", "Points (pt)": "Points (pts)", "Inches (in)": "Pouces (in)", "Reverse landscape": "Paysage inversé", "Height:": "Hauteur :" }, "QDialogButtonBox": { "OK": "OK" }, "QMessageBox": { "OK": "OK", "Help": "Aide", "Show Details...": "Montrer les détails...", "Hide Details...": "Masquer les détails..." }, "QErrorMessage": { "&OK": "&OK", "Fatal Error:": "Erreur fatale :", "&Show this message again": "&Afficher ce message de nouveau", "Debug Message:": "Message de débogage :", "Warning:": "Avertissement :" }, "QFontDatabase": { "Any": "Tous", "Lao": "Lao", "Bold": "Gras", "Demi": "Demi", "N'Ko": "N'Ko", "Thai": "Thaï", "Black": "Extra-gras", "Greek": "Grec", "Khmer": "Khmer", "Latin": "Latin", "Light": "Maigre", "Ogham": "Ogham", "Oriya": "Oriya", "Runic": "Runique", "Tamil": "Tamoul", "Cyrillic": "Cyrillique", "Kannada": "Kannada", "Normal": "Normal", "Malayalam": "Malayalam", "Simplified Chinese": "Chinois simplifié", "Demi Bold": "Demi-gras", "Arabic": "Arabe", "Hebrew": "Hébreu", "Myanmar": "Myanmar", "Italic": "Italique", "Korean": "Coréen", "Oblique": "Oblique", "Telugu": "Telugu", "Thaana": "Thâna", "Symbol": "Symbole", "Syriac": "Syriaque", "Devanagari": "Dévanagari", "Japanese": "Japonais", "Bengali": "Bengali", "Armenian": "Arménien", "Sinhala": "Sinhala", "Tibetan": "Tibétain", "Vietnamese": "Vietnamien", "Gujarati": "Gujarati", "Traditional Chinese": "Chinois traditionnel", "Georgian": "Géorgien", "Gurmukhi": "Gurmukhi" }, "QScrollBar": { "Top": "Haut", "Scroll down": "Défiler vers le bas", "Scroll here": "Défiler jusqu'ici", "Scroll left": "Défiler vers la gauche", "Bottom": "Bas", "Page up": "Page précédente", "Page right": "Page suivante", "Scroll up": "Défiler vers le haut", "Scroll right": "Défiler vers la droite", "Left edge": "Bord gauche", "Page down": "Page suivante", "Page left": "Page précédente", "Right edge": "Bord droit" }, "QFileDialog": { "Back": "Précédent", "File": "Fichier", "Open": "Ouvrir", "&Open": "&Ouvrir", "&Save": "&Enregistrer", "Alias": "Alias", "Drive": "Disque", "Show ": "Afficher ", "'%1' is write protected.\nDo you want to delete it anyway?": "\"%1\" est protégé en écriture.\nVoulez-vous quand même le supprimer ?", "File &name:": "&Nom de fichier :", "File Folder": "Dossier", "New Folder": "Nouveau dossier", "Folder": "Dossier", "Parent Directory": "Dossier parent", "&New Folder": "&Nouveau dossier", "Remove": "Supprimer", "My Computer": "Poste de travail", "Look in:": "Voir dans :", "Create a New Folder": "Crée un nouveau dossier", "Files of type:": "Fichiers de type :", "Find Directory": "Chercher dans le dossier", "Show &hidden files": "Afficher les fic&hiers cachés", "Save As": "Enregistrer sous", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\nDossier introuvable.\nVeuillez vérifier que le nom du dossier est correct.", "List View": "Vue en liste", "&Choose": "&Choisir", "&Delete": "Suppri&mer", "All Files (*)": "Tous les fichiers (*)", "Directories": "Dossiers", "&Rename": "&Renommer", "Could not delete directory.": "Impossible de supprimer le dossier.", "Directory:": "Dossier :", "Unknown": "Inconnu", "%1 already exists.\nDo you want to replace it?": "Le fichier %1 existe déjà\nVoulez-vous l'écraser ?", "Forward": "Suivant", "Go forward": "Va à l'élément suivant", "Go to the parent directory": "Va au dossier parent", "Recent Places": "Emplacements récents", "Go back": "Aller à l'élément précédent", "Change to detail view mode": "Affichage la vue sous forme détaillée", "Create New Folder": "Créer un nouveau dossier", "Shortcut": "Raccourci", "Detail View": "Vue détaillée", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\nFichier introuvable.\nVeuillez vérifier que le nom du fichier est correct.", "Change to list view mode": "Affiche la vue sous forme de liste" }, "QLineEdit": { "Cu&t": "Co&uper", "&Copy": "Cop&ier", "&Redo": "&Rétablir", "&Undo": "&Annuler", "&Paste": "Co&ller", "Delete": "Supprimer", "Select All": "Tout sélectionner" }, "QWizard": { "Done": "Terminer", "Help": "Aide", "&Help": "&Aide", "&Next": "&Suivant >", "Cancel": "Annuler", "Commit": "Soumettre", "Continue": "Continuer", "&Finish": "&Terminer", "&Next >": "&Suivant >", "Go Back": "Aller au précédent", "< &Back": "< &Précédent" }, "QMdiSubWindow": { "Help": "Aide", "Menu": "Menu", "&Move": "&Déplacer", "&Size": "&Taille", "Close": "Fermer", "Minimize": "Réduire", "Shade": "Ombrer", "Stay on &Top": "&Laisser au premier plan", "&Close": "&Fermer", "- [%1]": "- [%1]", "%1 - [%2]": "%1 - [%2]", "&Restore": "&Restaurer", "Restore": "Restaurer", "Maximize": "Agrandir", "Unshade": "Restaurer", "Mi&nimize": "Réd&uire", "Ma&ximize": "A&grandir", "Restore Down": "Restaurer en bas" }, "QDirModel": { "Kind": "Type", "Name": "Nom", "Size": "Taille", "Type": "Type", "Date Modified": "Dernière modification" }, "QFileSystemModel": { "Kind": "Type", "Name": "Nom", "Size": "Taille", "Type": "Type", "%1 GB": "%1 Go", "%1 KB": "%1 Ko", "%1 MB": "%1 Mo", "%1 TB": "%1 To", "The name \"%1\" can not be used.

Try using another name, with fewer characters or no punctuations marks.": "Le nom \"%1\" ne peut pas être utilisé.

Essayez un autre nom avec moins de caractères ou sans ponctuation.", "%1 bytes": "%1 octets", "My Computer": "Poste de travail", "Computer": "Ordinateur", "Invalid filename": "Nom de fichier invalide", "%1 byte(s)": "%1 octet(s)", "Date Modified": "Dernière modification" }, "QComboBox": { "True": "Vrai", "False": "Faux" }, "QDockWidget": { "Close": "Fermer", "Float": "Détacher" }, "QDialog": { "What's This?": "Qu'est-ce que c'est ?" }, "QWhatsThisAction": { "What's This?": "Qu'est-ce que c'est ?" }, "QAbstractSpinBox": { "Step &down": "&Diminuer", "&Step up": "&Augmenter", "&Select All": "Tout &sélectionner" }, "QInputDialog": { "Enter a value:": "Entrer une valeur :" }, "QTabBar": { "Scroll Left": "Défiler vers la gauche", "Scroll Right": "Défiler vers la droite" }, "QUndoModel": { "": "" }, "QUndoGroup": { "Undo": "Annuler", "Redo %1": "Rétablir %1", "Undo %1": "Annuler %1", "Redo": "Rétablir" }, "QUndoStack": { "Undo": "Annuler", "Redo %1": "Rétablir %1", "Undo %1": "Annuler %1", "Redo": "Rétablir" }, "QProgressDialog": { "Cancel": "Annuler" }, "MAC_APPLICATION_MENU": { "Hide Others": "Masquer les autres", "Quit %1": "Quitter %1", "About %1": "À propos de %1", "Preferences...": "Préférences...", "Services": "Services", "Hide %1": "Masquer %1", "Show All": "Tout afficher" }, "CloseButton": { "Close Tab": "Fermer l'onglet" }, "QMdiArea": { "(Untitled)": "(Sans titre)" } } ================================================ FILE: translation/qt_ja.json ================================================ { "QShortcut": { "+": "+", "CD": "CD", "Go": "確定", "No": "いいえ", "Up": "↑", "Alt": "Alt", "F%1": "F%1", "Del": "Del", "Cut": "切り取り", "End": "End", "Esc": "Esc", "Ins": "Ins", "Tab": "Tab", "WWW": "WWW", "Yes": "はい", "Back": "戻る", "Copy": "コピー", "Ctrl": "Ctrl", "Down": "↓", "Flip": "反転", "Help": "Help", "Home": "Home", "Left": "←", "Menu": "Menu", "Meta": "Meta", "PgUp": "PgUp", "Save": "保存", "Send": "送信", "Stop": "停止", "Time": "時間", "View": "表示", "Split Screen": "画面の分割", "Clear": "クリア", "Close": "閉じる", "Eject": "取り出し", "Enter": "Enter", "Kanji": "漢字", "Music": "音楽", "Paste": "貼り付け", "Pause": "Pause", "Right": "→", "Shift": "Shift", "Sleep": "スリープ", "Tools": "ツール", "Video": "動画", "Hiragana": "ひらがな", "Zenkaku": "全角", "Print Screen": "プリントスクリーン", "Zoom In": "拡大", "Hangul Special": "ハングル 特殊", "Scroll Lock": "スクロールロック", "Media Pause": "メディアの停止", "Volume Down": "音量を下げる", "Volume Mute": "消音", "Kana Shift": "カナシフト", "Media Previous": "前のメディア", "Home Page": "ホームページ", "Volume Up": "音量を上げる", "Menu PB": "PB メニュー", "Hangul PostHanja": "ハングル 漢字後変換", "Kana Lock": "カナロック", "Delete": "削除", "Escape": "エスケープ", "Hangul": "ハングル", "Henkan": "変換", "Insert": "挿入", "Logoff": "ログオフ", "Massyo": "単語抹消", "Option": "オプション", "PgDown": "PgDown", "Reload": "リロード", "Return": "Return", "Romaji": "ローマ字", "Search": "検索", "Select": "選択", "NumLock": "NumLock", "Hiragana Katakana": "ひらがな/カタカナ", "Top Menu": "トップメニュー", "ScrollLock": "ScrollLock", "Zoom Out": "縮小", "Page Up": "ページアップ", "Open URL": "URL を開く", "Caps Lock": "キャプスロック", "Eisu Shift": "英数シフト", "Code input": "コード入力", "Eisu toggle": "英数", "Clear Grab": "グラブのクリア", "CapsLock": "CapsLock", "Backtab": "Backtab", "Battery": "バッテリ", "Katakana": "カタカナ", "Refresh": "更新", "Browser": "ブラウザ", "Keyboard Menu": "キーボードメニュー", "Back Forward": "戻る", "Backspace": "Backspae", "Hangul Banja": "ハングル Banja モード", "Hangul Hanja": "ハングル 漢字", "Standby": "スタンバイ", "Hangul Start": "ハングル 入力開始", "Suspend": "サスペンド", "Display": "ディスプレイ", "Hangul Romaja": "ハングル ローマ字入力", "Zenkaku Hankaku": "全角/半角", "Hangul Jeonja": "ハングル Jeonja モード", "Subtitle": "字幕", "Hangul Jamo": "ハングル 字母", "Bluetooth": "ブルートゥース", "Num Lock": "ナムロック", "Number Lock": "ナンバーロック", "Hangul PreHanja": "ハングル 漢字前変換", "Terminal": "端末", "Task Panel": "タスクパネル", "Favorites": "お気に入り", "Forward": "進む", "Page Down": "ページダウン", "Wake Up": "起動", "Power Off": "電源オフ", "Hankaku": "半角", "Hangul End": "ハングル 入力終了" }, "QPageSetupWidget": { "Form": "書式設定", "bottom margin": "下端余白", "Paper": "用紙", "Paper source:": "給紙装置:", "right margin": "右端余白", "Margins": "余白", "Landscape": "横", "Width:": "幅:", "Orientation": "印刷の向き", "Portrait": "縦", "top margin": "上端余白", "left margin": "左端余白", "Page size:": "用紙サイズ:", "Reverse portrait": "縦 反転", "Millimeters (mm)": "ミリメートル (mm)", "Points (pt)": "ポイント (pt)", "Inches (in)": "インチ (in)", "Reverse landscape": "横 反転", "Height:": "高さ:" }, "QDialogButtonBox": { "OK": "OK" }, "QMessageBox": { "OK": "OK", "Help": "ヘルプ", "Show Details...": "詳細を表示...", "Hide Details...": "詳細を隠す..." }, "QErrorMessage": { "&OK": "&OK", "Fatal Error:": "致命的なエラー:", "&Show this message again": "次回もこのメッセージを表示する(&S)", "Debug Message:": "デバッグメッセージ:", "Warning:": "警告:" }, "QFontDatabase": { "Any": "すべて", "Lao": "ラーオ", "Bold": "太字", "Demi": "中", "N'Ko": "ンコ", "Thai": "タイ", "Black": "超極太", "Greek": "ギリシャ", "Khmer": "クメール", "Latin": "ラテン", "Light": "細字", "Ogham": "オガム", "Oriya": "オリヤー", "Runic": "ルーン", "Tamil": "タミル", "Cyrillic": "キリル", "Kannada": "カンナダ", "Malayalam": "マラヤーラム", "Simplified Chinese": "簡体中国", "Demi Bold": "中太", "Arabic": "アラビア", "Hebrew": "ヘブライ", "Myanmar": "ビルマ", "Italic": "斜体", "Korean": "ハングル", "Normal": "標準", "Oblique": "斜体", "Telugu": "テルグ", "Thaana": "ターナ", "Symbol": "記号", "Syriac": "シリア", "Devanagari": "デーヴァナーガリー", "Japanese": "日本", "Bengali": "ベンガル", "Armenian": "アルメニア", "Sinhala": "シンハラ", "Tibetan": "チベット", "Vietnamese": "ベトナム", "Gujarati": "グジャラート", "Traditional Chinese": "繁体中国", "Georgian": "グルジア", "Gurmukhi": "グルムキー" }, "QScrollBar": { "Top": "上端にスクロール", "Scroll down": "下へスクロール", "Scroll here": "ここにスクロール", "Scroll left": "左へスクロール", "Bottom": "下端にスクロール", "Page up": "1ページ戻る", "Page right": "1ページ右へスクロール", "Scroll up": "上へスクロール", "Scroll right": "右へスクロール", "Left edge": "左端にスクロール", "Page down": "1ページ進む", "Page left": "1ページ左へスクロール", "Right edge": "右端にスクロール" }, "QFileDialog": { "Back": "戻る", "File": "ファイル", "Open": "開く", "&Open": "開く(&O)", "&Save": "保存(&S)", "Alias": "エイリアス", "Drive": "ドライブ", "Show ": "表示", "'%1' is write protected.\nDo you want to delete it anyway?": "'%1' は書き込みが禁止されています。\n本当に削除しますか?", "File &name:": "ファイル名(&N):", "File Folder": "ファイルフォルダ", "New Folder": "新しいフォルダ", "Folder": "フォルダ", "Parent Directory": "親ディレクトリ", "&New Folder": "新しいフォルダ(&N)", "Remove": "削除", "My Computer": "マイコンピュータ", "Look in:": "アドレス:", "Create a New Folder": "新しいフォルダの作成", "Files of type:": "ファイルの種類:", "Find Directory": "ディレクトリの検索", "Show &hidden files": "隠しファイルの表示(&H)", "Save As": "名前を付けて保存", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\nディレクトリが見つかりません。\n正しいディレクトリ名が入力されているかを確認してください。", "List View": "一覧表示", "&Choose": "選択(&C)", "&Delete": "削除(&D)", "All Files (*)": "すべてのファイル(*)", "Directories": "ディレクトリ", "&Rename": "名前の変更(&R)", "Could not delete directory.": "ディレクトリを削除できませんでした。", "Directory:": "ディレクトリ:", "Unknown": "不明", "%1 already exists.\nDo you want to replace it?": "%1 は既に存在します。\n置き換えますか?", "Forward": "進む", "Go forward": "進む", "Go to the parent directory": "親ディレクトリへ移動", "Recent Places": "履歴", "Go back": "戻る", "Change to detail view mode": "詳細表示モードへ変更", "Create New Folder": "新しいフォルダの作成", "Shortcut": "ショートカット", "Detail View": "詳細表示", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\nファイルが見つかりません。\n正しいファイル名が入力されているかを確認してください。", "Change to list view mode": "リスト表示モードへ変更" }, "QLineEdit": { "Cu&t": "切り取り(&T)", "&Copy": "コピー(&C)", "&Redo": "やり直す(&R)", "&Undo": "元に戻す(&U)", "&Paste": "貼り付け(&P)", "Delete": "削除", "Select All": "すべて選択" }, "QWizard": { "Done": "終了", "Help": "ヘルプ", "&Help": "ヘルプ(&H)", "&Next": "次へ(&N)", "Cancel": "キャンセル", "Commit": "適用", "Continue": "続行", "&Finish": "完了(&F)", "&Next >": "次へ(&N) >", "Go Back": "戻る", "< &Back": "< 戻る(&B)" }, "QMdiSubWindow": { "Help": "ヘルプ", "Menu": "メニュー", "&Move": "移動(&M)", "&Size": "サイズ(&S)", "Close": "閉じる", "Minimize": "最小化", "Shade": "折りたたむ", "Stay on &Top": "常に手前に表示(&T)", "&Close": "閉じる(&C)", "- [%1]": "- [%1]", "%1 - [%2]": "%1 - [%2]", "&Restore": "元に戻す(&R)", "Restore": "元に戻す", "Maximize": "最大化", "Unshade": "展開", "Mi&nimize": "最小化(&N)", "Ma&ximize": "最大化(&X)", "Restore Down": "元に戻す" }, "QDirModel": { "Kind": "種類", "Name": "名前", "Size": "サイズ", "Type": "種類", "Date Modified": "更新日" }, "QFileSystemModel": { "Kind": "種類", "Name": "名前", "Size": "サイズ", "Type": "種類", "%1 GB": "%1 GB", "%1 KB": "%1 KB", "%1 MB": "%1 MB", "%1 TB": "%1 TB", "The name \"%1\" can not be used.

Try using another name, with fewer characters or no punctuations marks.": "ファイル名 \"%1\" は使用できません。

名前を短くしたり、アクセント記号などを削除して再度試してください。", "%1 bytes": "%1 バイト", "My Computer": "マイコンピュータ", "Computer": "コンピュータ", "Invalid filename": "無効なファイル名", "%1 byte(s)": "%1 バイト", "Date Modified": "更新日" }, "QUndoGroup": { "Redo": "やり直す", "Undo": "元に戻す", "Redo %1": "%1 をやり直す", "Undo %1": "%1 を元に戻す" }, "QUndoStack": { "Redo": "やり直す", "Undo": "元に戻す", "Redo %1": "%1 をやり直す", "Undo %1": "%1 を元に戻す" }, "QComboBox": { "True": "真", "False": "偽" }, "QDockWidget": { "Close": "閉じる", "Float": "フロート" }, "QDialog": { "What's This?": "ヒント" }, "QWhatsThisAction": { "What's This?": "ヒント" }, "QAbstractSpinBox": { "Step &down": "下(&D)", "&Step up": "上(&S)", "&Select All": "すべて選択(&S)" }, "QInputDialog": { "Enter a value:": "値を入力:" }, "QTabBar": { "Scroll Left": "左へスクロール", "Scroll Right": "右へスクロール" }, "QUndoModel": { "": "<空>" }, "QProgressDialog": { "Cancel": "キャンセル" }, "MAC_APPLICATION_MENU": { "Hide Others": "ほかを隠す", "Quit %1": "%1 を終了", "About %1": "%1 について", "Preferences...": "設定...", "Services": "サービス", "Hide %1": "%1 を隠す", "Show All": "すべて表示" }, "CloseButton": { "Close Tab": "タブを閉じる" }, "QMdiArea": { "(Untitled)": "(タイトルなし)" } } ================================================ FILE: translation/qt_ko.json ================================================ { "QShortcut": { "+": "+", "CD": "CD", "Go": "이동", "No": "아니오", "Up": "위", "Alt": "Alt", "F%1": "F%1", "Del": "Del", "Cut": "잘라내기", "End": "End", "Esc": "Esc", "Ins": "Ins", "Tab": "Tab", "WWW": "WWW", "Yes": "예", "Back": "뒤로", "Copy": "복사", "Ctrl": "Ctrl", "Down": "아래", "Flip": "뒤집기", "Help": "도움말", "Home": "Home", "Left": "왼쪽", "Menu": "메뉴", "Meta": "Meta", "PgUp": "PgUp", "Save": "저장", "Send": "보내기", "Stop": "정지", "Time": "시간", "View": "보기", "Split Screen": "화면 나누기", "Clear": "지우기", "Close": "닫기", "Eject": "꺼내기", "Enter": "Enter", "Kanji": "한자", "Music": "음악", "Paste": "붙여넣기", "Pause": "일시 정지", "Right": "오른쪽", "Shift": "Shift", "Sleep": "대기 모드", "Tools": "도구", "Video": "비디오", "Hiragana": "히라가나", "Zenkaku": "전각", "Print Screen": "Print Screen", "Zoom In": "확대", "Hangul Special": "한글 특수 기호", "Scroll Lock": "Scroll Lock", "Media Pause": "미디어 일시 정지", "Volume Down": "음량 감소", "Volume Mute": "음소거", "Kana Shift": "가나 Shift", "Media Previous": "미디어 이전", "Home Page": "홈 페이지", "Volume Up": "음량 증가", "Menu PB": "메뉴 PB", "Hangul PostHanja": "한글 한자 끝", "Kana Lock": "가나 Lock", "Delete": "Delete", "Escape": "Escape", "Hangul": "한글", "Henkan": "변환", "Insert": "Insert", "Logoff": "로그오프", "Massyo": "단어 지움", "Option": "옵션", "PgDown": "PgDown", "Reload": "새로 고침", "Return": "Return", "Romaji": "로마자", "Search": "검색", "Select": "선택", "NumLock": "NumLock", "Hiragana Katakana": "히라가나 가타가나", "Top Menu": "최상위 메뉴", "ScrollLock": "ScrollLock", "Zoom Out": "축소", "Page Up": "Page Up", "Open URL": "URL 열기", "Caps Lock": "Caps Lock", "Eisu Shift": "한자 Shift", "Code input": "코드 입력", "Eisu toggle": "한자 반전", "Clear Grab": "선택 지우기", "CapsLock": "CapsLock", "Backtab": "Backtab", "Battery": "배터리", "Katakana": "가타가나", "Refresh": "새로 고침", "Browser": "브라우저", "Keyboard Menu": "키보드 메뉴", "Back Forward": "뒤로 앞으로", "Backspace": "Backspace", "Hangul Banja": "한글 반자", "Hangul Hanja": "한글 한자", "Standby": "대기 모드", "Hangul Start": "한글 시작", "Suspend": "대기 모드", "Display": "디스플레이", "Hangul Romaja": "한글 로마자", "Zenkaku Hankaku": "전각 반각", "Hangul Jeonja": "한글 전자", "Subtitle": "자막", "Hangul Jamo": "한글 자모", "Bluetooth": "블루투스", "Num Lock": "Num Lock", "Number Lock": "Number Lock", "Hangul PreHanja": "한글 한자 시작", "Terminal": "터미널", "Task Panel": "작업 패널", "Favorites": "즐겨찾기", "Forward": "앞으로", "Page Down": "Page Down", "Wake Up": "깨어나기", "Power Off": "전원 끄기", "Hankaku": "반각", "Hangul End": "한글 끝" }, "QDialogButtonBox": { "OK": "확인", "&OK": "확인(&O)", "&No": "아니오(&N)", "&Yes": "예(&Y)", "Help": "도움말", "Open": "열기", "Save": "저장", "&Save": "저장(&S)", "Abort": "중단", "Apply": "적용", "Close": "닫기", "Reset": "초기화", "Retry": "다시 시도", "Restore Defaults": "기본값 복원", "&Close": "닫기(&C)", "Cancel": "취소", "Ignore": "무시", "Close without Saving": "저장하지 않고 닫기", "N&o to All": "모두 아니오(&O)", "Save All": "모두 저장", "&Cancel": "취소(&C)", "Discard": "무시", "Yes to &All": "모두 예(&A)", "Don't Save": "저장하지 않음" }, "QMessageBox": { "OK": "확인", "Help": "도움말", "Show Details...": "자세한 정보 보기...", "Hide Details...": "자세한 정보 숨기기..." }, "QErrorMessage": { "&OK": "확인(&O)", "Fatal Error:": "치명적 오류:", "&Show this message again": "이 메시지를 다시 보이기(&S)", "Debug Message:": "디버그 메시지:", "Warning:": "경고:" }, "QFontDatabase": { "Any": "임의", "Lao": "라오", "Bold": "굵게", "Demi": "데미", "N'Ko": "은코", "Thai": "타이", "Black": "블랙", "Greek": "그리스", "Khmer": "크메르", "Latin": "라틴", "Light": "라이트", "Ogham": "오검", "Oriya": "오리야", "Runic": "룬", "Tamil": "타밀", "Cyrillic": "키릴", "Kannada": "칸나다", "Malayalam": "말라얄람", "Simplified Chinese": "중국어 간체", "Demi Bold": "데미볼드", "Arabic": "아랍", "Hebrew": "히브리", "Myanmar": "미얀마", "Italic": "이탤릭", "Korean": "한글", "Normal": "일반", "Oblique": "기울임꼴", "Telugu": "텔루구", "Thaana": "타나", "Symbol": "기호", "Syriac": "시리아", "Devanagari": "데바나가리", "Japanese": "가나", "Bengali": "벵골", "Armenian": "아르메니아", "Sinhala": "신할라", "Tibetan": "티베트", "Vietnamese": "베트남", "Gujarati": "구자라트", "Traditional Chinese": "중국어 번체", "Georgian": "조지아", "Gurmukhi": "굴묵키" }, "QScrollBar": { "Top": "맨 위", "Scroll down": "아래로 스크롤", "Scroll here": "여기로 스크롤", "Scroll left": "왼쪽으로 스크롤", "Line up": "한 줄 위로", "Line down": "한 줄 아래로", "Bottom": "맨 아래", "Page up": "위쪽 페이지", "Position": "위치", "Page right": "오른쪽 페이지", "Scroll up": "위로 스크롤", "Scroll right": "오른쪽으로 스크롤", "Left edge": "왼쪽 경계", "Page down": "아래쪽 페이지", "Page left": "왼쪽 페이지", "Right edge": "오른쪽 경계" }, "QFileDialog": { "Back": "뒤로", "File": "파일", "Open": "열기", "&Open": "열기(&O)", "&Save": "저장(&S)", "Drive": "드라이브", "Show ": "보이기 ", "'%1' is write protected.\nDo you want to delete it anyway?": "'%1'이(가) 쓰기 금지되어 있습니다.\n그래도 삭제하시겠습니까?", "File &name:": "파일 이름(&N):", "Alias": "별명", "File Folder": "파일 폴더", "New Folder": "새 폴더", "Parent Directory": "부모 디렉터리", "&New Folder": "새 폴더(&N)", "Remove": "삭제", "My Computer": "내 컴퓨터", "Look in:": "다음에서 찾기:", "Create a New Folder": "새 폴더 만들기", "Files of type:": "파일 형식:", "Find Directory": "디렉터리 찾기", "Show &hidden files": "숨김 파일 보이기(&H)", "Are sure you want to delete '%1'?": "'%1'을(를) 삭제하시겠습니까?", "Save As": "다른 이름으로 저장", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\n디렉터리를 찾을 수 없습니다.\n경로와 파일 이름을 확인하십시오.", "List View": "목록으로 보기", "&Choose": "선택(&C)", "&Delete": "삭제(&D)", "All Files (*)": "모든 파일 (*)", "Directories": "디렉터리", "All Files (*.*)": "모든 파일 (*)", "&Rename": "이름 바꾸기(&R)", "Could not delete directory.": "디렉터리를 삭제할 수 없습니다.", "Directory:": "디렉터리:", "Unknown": "알 수 없음", "%1 already exists.\nDo you want to replace it?": "%1이(가) 이미 존재합니다.\n바꾸시겠습니까?", "Folder": "폴더", "Forward": "앞으로", "Go forward": "앞으로 가기", "Go to the parent directory": "부모 디렉터리로 가기", "Recent Places": "최근 장소", "Go back": "뒤로 가기", "Change to detail view mode": "자세히 보기 모드로 전환", "Create New Folder": "새 폴더 만들기", "Shortcut": "바로 가기", "Detail View": "자세히 보기", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\n파일을 찾을 수 없습니다.\n경로와 파일 이름을 확인하십시오.", "Change to list view mode": "목록 보기 모드로 전환" }, "QLineEdit": { "Cu&t": "잘라내기(&T)", "&Copy": "복사(&C)", "&Redo": "다시 실행(&R)", "&Undo": "실행 취소(&U)", "&Paste": "붙여넣기(&P)", "Delete": "삭제", "Select All": "모두 선택" }, "QDockWidget": { "Dock": "붙이기", "Close": "닫기", "Float": "띄우기" }, "QDialog": { "Done": "완료", "What's This?": "이건 무엇?" }, "QWizard": { "Done": "완료", "Help": "도움말", "&Help": "도움말(&H)", "&Next": "다음(&N)", "Cancel": "취소", "Commit": "커밋", "Continue": "계속", "&Finish": "완료(&F)", "&Next >": "다음 (&N) >", "Go Back": "뒤로 가기", "< &Back": "< 뒤로(&B)" }, "QPageSetupWidget": { "Form": "폼", "bottom margin": "아래쪽 여백", "Paper": "종이", "Paper source:": "종이 공급:", "Centimeters (cm)": "센티미터 (cm)", "right margin": "오른쪽 여백", "Margins": "여백", "Landscape": "가로", "Width:": "너비:", "Orientation": "방향", "Portrait": "세로", "top margin": "위쪽 여백", "left margin": "왼쪽 여백", "Page size:": "쪽 크기:", "Reverse portrait": "뒤집은 세로", "Millimeters (mm)": "밀리미터 (mm)", "Points (pt)": "포인트 (pt)", "Inches (in)": "인치 (in)", "Reverse landscape": "뒤집은 가로", "Height:": "높이:" }, "QMdiSubWindow": { "Help": "도움말", "Menu": "메뉴", "&Move": "이동(&M)", "&Size": "크기(&S)", "Close": "닫기", "Minimize": "최소화", "Shade": "말아 올리기", "Stay on &Top": "항상 위(&T)", "&Close": "닫기(&C)", "- [%1]": "- [%1]", "%1 - [%2]": "%1 - [%2]", "&Restore": "복원(&R)", "Restore": "복원", "Maximize": "최대화", "Unshade": "풀어 내리기", "Mi&nimize": "최소화(&N)", "Ma&ximize": "최대화(&X)", "Restore Down": "복원" }, "QDirModel": { "Kind": "형식", "Name": "이름", "Size": "크기", "Type": "형식", "Date Modified": "수정한 날짜" }, "QFileSystemModel": { "Kind": "형식", "Name": "이름", "Size": "크기", "%1 GB": "%1 GB", "%1 KB": "%1 KB", "%1 MB": "%1 MB", "%1 TB": "%1 TB", "The name \"%1\" can not be used.

Try using another name, with fewer characters or no punctuations marks.": "\"%1\" 이름을 사용할 수 없습니다.

다른 이름을 사용하거나, 글자 수를 줄이거나, 구두점을 사용하지 마십시오.", "%1 bytes": "%1바이트", "My Computer": "내 컴퓨터", "Computer": "컴퓨터", "Invalid filename": "잘못된 파일 이름", "%1 byte(s)": "%1바이트", "Type": "형식", "Date Modified": "수정한 날짜" }, "QComboBox": { "Open": "열기", "True": "참", "Close": "닫기", "False": "거짓" }, "QWhatsThisAction": { "What's This?": "이건 무엇?" }, "QAbstractSpinBox": { "Step &down": "한 단계 아래로(&D)", "&Step up": "한 단계 위로(&S)", "&Select All": "모두 선택(&S)" }, "QInputDialog": { "Enter a value:": "값을 입력하십시오:" }, "QTabBar": { "Scroll Left": "왼쪽으로 스크롤", "Scroll Right": "오른쪽으로 스크롤" }, "QUndoModel": { "": "<비어 있음>" }, "QUndoGroup": { "Undo": "실행 취소", "Redo %1": "%1 다시 실행", "Undo %1": "%1 실행 취소", "Redo": "다시 실행" }, "QUndoStack": { "Undo": "실행 취소", "Redo %1": "%1 다시 실행", "Undo %1": "%1 실행 취소", "Redo": "다시 실행" }, "QProgressDialog": { "Cancel": "취소" }, "MAC_APPLICATION_MENU": { "Hide Others": "다른 항목 숨기기", "Quit %1": "%1 끝내기", "About %1": "%1 정보", "Preferences...": "설정...", "Services": "서비스", "Hide %1": "%1 숨기기", "Show All": "모두 보이기" }, "CloseButton": { "Close Tab": "탭 닫기" }, "QMdiArea": { "(Untitled)": "(제목 없음)" } } ================================================ FILE: translation/qt_pl.json ================================================ { "QShortcut": { "+": "+", "CD": "CD", "Go": "Przejdź", "No": "Nie", "Up": "Góra", "Alt": "Alt", "F%1": "F%1", "Del": "Del", "Cut": "Wytnij", "End": "End", "Esc": "Esc", "Ins": "Ins", "Tab": "Tabulator", "WWW": "WWW", "Yes": "Tak", "Back": "Back", "Copy": "Skopiuj", "Ctrl": "Ctrl", "Down": "Dół", "Flip": "Odwróć", "Help": "Pomoc", "Home": "Katalog domowy", "Left": "Lewo", "Menu": "Menu", "Meta": "Meta", "PgUp": "PgUp", "Save": "Zachowaj", "Send": "Wyślij", "Stop": "Zatrzymaj", "Time": "Czas", "View": "Widok", "Split Screen": "Podziel ekran", "Clear": "Wyczyść", "Close": "Zamknij", "Eject": "Wysuń", "Enter": "Enter", "Kanji": "Kanji", "Music": "Muzyka", "Paste": "Wklej", "Pause": "Pauza", "Right": "Prawo", "Shift": "Shift", "Sleep": "Uśpienie", "Tools": "Narzędzia", "Video": "Wideo", "Hiragana": "Hiragana", "Zenkaku": "Zenkaku", "Print Screen": "Wydrukuj zawartość ekranu", "Zoom In": "Powiększ", "Hangul Special": "Hangul Special", "Scroll Lock": "Scroll Lock", "Media Pause": "Media pauza", "Volume Down": "Zmniejsz siłę głosu", "Volume Mute": "Wycisz głos", "Kana Shift": "Kana Shift", "Media Previous": "Poprzednia ścieżka", "Home Page": "Strona startowa", "Volume Up": "Zwiększ siłę głosu", "Menu PB": "Menu PB", "Hangul PostHanja": "Hangul PostHanja", "Kana Lock": "Kana Lock", "Delete": "Delete", "Escape": "Escape", "Hangul": "Hangul", "Henkan": "Henkan", "Insert": "Insert", "Logoff": "Wyloguj", "Massyo": "Massyo", "Option": "Opcje", "PgDown": "PgDown", "Reload": "Przeładuj", "Return": "Return", "Romaji": "Romaji", "Search": "Szukaj", "Select": "Wybierz", "NumLock": "NumLock", "Hiragana Katakana": "Hiragana Katakana", "Top Menu": "Menu główne", "ScrollLock": "ScrollLock", "Zoom Out": "Pomniejsz", "Page Up": "Strona w dół", "Open URL": "Otwórz URL", "Caps Lock": "Caps Lock", "Eisu Shift": "Eisu Shift", "Code input": "Wprowadzanie kodu", "Eisu toggle": "Eisu toggle", "CapsLock": "CapsLock", "Backtab": "Backtab", "Battery": "Bateria", "Katakana": "Katakana", "Refresh": "Odśwież", "Browser": "Przeglądarka", "Keyboard Menu": "Menu klawiatury", "Backspace": "Backspace", "Hangul Banja": "Hangul Banja", "Hangul Hanja": "Hangul Hanja", "Standby": "Tryb oczekiwania", "Hangul Start": "Hangul Start", "Suspend": "Wstrzymanie", "Display": "Wyświetlacz", "Hangul Romaja": "Hangul Romaja", "Zenkaku Hankaku": "Zenkaku Hankaku", "Hangul Jeonja": "Hangul Jeonja", "Subtitle": "Napisy", "Hangul Jamo": "Hangul Jamo", "Bluetooth": "Bluetooth", "Num Lock": "Num Lock", "Number Lock": "Number Lock", "Hangul PreHanja": "Hangul PreHanja", "Terminal": "Terminal", "Task Panel": "Panel zadań", "Favorites": "Ulubione", "Forward": "Do przodu", "Page Down": "Strona do góry", "Wake Up": "Przebudzenie", "Power Off": "Wyłącz zasilanie", "Hankaku": "Hankaku", "Hangul End": "Hangul End" }, "QPageSetupWidget": { "Form": "Formularz", "bottom margin": "Dolny margines", "Paper": "Papier", "Paper source:": "Źródło papieru:", "right margin": "Prawy margines", "Margins": "Marginesy", "Landscape": "Pejzaż", "Width:": "Szerokość:", "Orientation": "Położenie", "Portrait": "Portret", "top margin": "Górny margines", "left margin": "Lewy margines", "Page size:": "Rozmiar strony:", "Reverse portrait": "Odwrócony portret", "Millimeters (mm)": "Milimetry (mm)", "Points (pt)": "Punkty (pt)", "Inches (in)": "Cale (in)", "Reverse landscape": "Odwrócony pejzaż", "Height:": "Wysokość:" }, "QDialogButtonBox": { "OK": "OK" }, "QMessageBox": { "OK": "OK", "Help": "Pomoc", "Show Details...": "Pokaż szczegóły...", "Hide Details...": "Ukryj szczegóły..." }, "QErrorMessage": { "&OK": "&OK", "Fatal Error:": "Błąd krytyczny:", "&Show this message again": "&Pokaż ten komunikat ponownie", "Debug Message:": "Komunikat debugowy:", "Warning:": "Ostrzeżenie:" }, "QFontDatabase": { "Any": "Każdy", "Lao": "Laotański", "Bold": "Pogrubiony", "Demi": "Na wpół", "N'Ko": "N'Ko", "Thai": "Tajski", "Black": "Bardzo gruby", "Greek": "Grecki", "Khmer": "Khmerski", "Latin": "Łaciński", "Light": "Cienki", "Ogham": "Ogamiczny", "Oriya": "Orija", "Runic": "Runiczny", "Tamil": "Tamilski", "Cyrillic": "Cyrylica", "Kannada": "Kannada", "Normal": "Normalny", "Malayalam": "Malajalam", "Simplified Chinese": "Uproszczony chiński", "Demi Bold": "Na wpół pogrubiony", "Arabic": "Arabski", "Hebrew": "Hebrajski", "Myanmar": "Birmański", "Italic": "Kursywa", "Korean": "Koreański", "Oblique": "Pochyły", "Telugu": "Telugu", "Thaana": "Thaana", "Symbol": "Symboliczny", "Syriac": "Syryjski", "Devanagari": "Devanagari", "Japanese": "Japoński", "Bengali": "Bengalski", "Armenian": "Ormiański", "Sinhala": "Syngaleski", "Tibetan": "Tybetański", "Vietnamese": "Wietnamski", "Gujarati": "Gudżaracki", "Traditional Chinese": "Tradycyjny chiński", "Georgian": "Gruziński", "Gurmukhi": "Gurmukhi" }, "QScrollBar": { "Top": "Do góry", "Scroll down": "Przewiń w dół", "Scroll here": "Przewiń tutaj", "Scroll left": "Przewiń w lewo", "Bottom": "W dół", "Page up": "Strona do góry", "Page right": "Strona w prawo", "Scroll up": "Przewiń do góry", "Scroll right": "Przewiń w prawo", "Left edge": "Lewa krawędź", "Page down": "Strona w dół", "Page left": "Strona w lewo", "Right edge": "Prawa krawędź" }, "QFileDialog": { "Back": "Powrót", "File": "Plik", "Open": "Otwórz", "&Open": "&Otwórz", "&Save": "&Zachowaj", "Alias": "Alias", "Drive": "Napęd", "Show ": "Pokaż ", "'%1' is write protected.\nDo you want to delete it anyway?": "'%1' jest zabezpieczony przed zapisem.\nCzy na pewno chcesz go usunąć?", "File &name:": "Nazwa &pliku:", "File Folder": "Katalog", "New Folder": "Nowy katalog", "Folder": "Katalog", "Parent Directory": "Katalog wyżej", "&New Folder": "&Nowy katalog", "Remove": "Usuń", "My Computer": "Mój komputer", "Look in:": "Szukaj w:", "Create a New Folder": "Utwórz nowy katalog", "Files of type:": "Pliki rodzaju:", "Find Directory": "Znajdź katalog", "Show &hidden files": "Pokaż &ukryte pliki", "Save As": "Zachowaj jako", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\nBrak katalogu.\nSprawdź podaną nazwę katalogu.", "List View": "Lista", "&Choose": "&Wybierz", "&Delete": "&Usuń", "All Files (*)": "Wszystkie pliki (*)", "Directories": "Katalogi", "&Rename": "&Zmień nazwę", "Could not delete directory.": "Nie można usunąć katalogu.", "Directory:": "Katalog:", "Unknown": "Nieznany", "%1 already exists.\nDo you want to replace it?": "%1 już istnieje.\nCzy chcesz go zastąpić?", "Forward": "Do przodu", "Go forward": "Przejdź dalej", "Go to the parent directory": "Przejdź do katalogu wyżej", "Recent Places": "Ostatnie miejsca", "Go back": "Wróć", "Change to detail view mode": "Pokaż szczegóły", "Create New Folder": "Utwórz nowy katalog", "Shortcut": "Skrót", "Detail View": "Szczegóły", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\nBrak pliku.\nSprawdź podaną nazwę pliku.", "Change to list view mode": "Pokaż listę" }, "QLineEdit": { "Cu&t": "W&ytnij", "&Copy": "S&kopiuj", "&Redo": "&Przywróć", "&Undo": "&Cofnij", "&Paste": "&Wklej", "Delete": "Usuń", "Select All": "Zaznacz wszystko" }, "QWizard": { "Done": "Zrobione", "Help": "Pomoc", "&Help": "&Pomoc", "&Next": "&Dalej", "Cancel": "Anuluj", "Commit": "Dokonaj", "Continue": "Kontynuuj", "&Finish": "&Zakończ", "&Next >": "&Dalej >", "Go Back": "Wróć", "< &Back": "< &Wstecz" }, "QMdiSubWindow": { "Help": "Pomoc", "Menu": "Menu", "&Move": "Prze&nieś", "&Size": "&Rozmiar", "Close": "Zamknij", "Minimize": "Zminimalizuj", "Shade": "Zwiń", "Stay on &Top": "Pozostaw na &wierzchu", "&Close": "&Zamknij", "- [%1]": "- [%1]", "%1 - [%2]": "%1 - [%2]", "&Restore": "&Przywróć", "Restore": "Przywróć", "Maximize": "Zmaksymalizuj", "Unshade": "Rozwiń", "Mi&nimize": "Zmi&nimalizuj", "Ma&ximize": "Zma&ksymalizuj", "Restore Down": "Przywróć pod spód" }, "QDirModel": { "Kind": "Typ", "Name": "Nazwa", "Size": "Rozmiar", "Type": "Rodzaj", "Date Modified": "Data modyfikacji" }, "QFileSystemModel": { "Kind": "Typ", "Name": "Nazwa", "Size": "Rozmiar", "Type": "Rodzaj", "%1 GB": "%1 GB", "%1 KB": "%1 KB", "%1 MB": "%1 MB", "%1 TB": "%1 TB", "The name \"%1\" can not be used.

Try using another name, with fewer characters or no punctuations marks.": "Nazwa \"%1\" nie może zostać użyta.

Spróbuj użyć nowej nazwy z mniejszą liczbą znaków lub bez znaków przystankowych.", "%1 bytes": "%1 bajtów", "My Computer": "Mój komputer", "Computer": "Komputer", "Invalid filename": "Niepoprawna nazwa pliku", "%1 byte(s)": "%1 bajt(ów)", "Date Modified": "Data modyfikacji" }, "QComboBox": { "True": "Prawda", "False": "Fałsz" }, "QDockWidget": { "Close": "Zamknij", "Float": "Uwolnij" }, "QDialog": { "What's This?": "Co to jest?" }, "QWhatsThisAction": { "What's This?": "Co to jest?" }, "QAbstractSpinBox": { "Step &down": "Krok w &dół", "&Step up": "Krok do &góry", "&Select All": "&Zaznacz wszystko" }, "QInputDialog": { "Enter a value:": "Podaj wartość:" }, "QTabBar": { "Scroll Left": "Przewiń w lewo", "Scroll Right": "Przewiń w prawo" }, "QUndoModel": { "": "" }, "QUndoGroup": { "Undo": "Cofnij", "Redo %1": "Przywróć %1", "Undo %1": "Cofnij %1", "Redo": "Przywróć" }, "QUndoStack": { "Undo": "Cofnij", "Redo %1": "Przywróć %1", "Undo %1": "Cofnij %1", "Redo": "Przywróć" }, "QProgressDialog": { "Cancel": "Anuluj" }, "MAC_APPLICATION_MENU": { "Hide Others": "Ukryj pozostałe", "Quit %1": "Zakończ %1", "About %1": "Informacje o %1", "Preferences...": "Preferencje…", "Services": "Usługi", "Hide %1": "Ukryj %1", "Show All": "Pokaż wszystko" }, "CloseButton": { "Close Tab": "Zamknij kartę" }, "QMdiArea": { "(Untitled)": "(Nienazwany)" } } ================================================ FILE: translation/qt_pt.json ================================================ { "QShortcut": { "+": "+", "No": "Não", "Up": "Cima", "Alt": "Alt", "F%1": "F%1", "Del": "Delete", "End": "End", "Esc": "Esc", "Ins": "Insert", "Tab": "Tab", "Yes": "Sim", "Back": "Anterior", "Ctrl": "Ctrl", "Down": "Baixo", "Flip": "Inverter", "Help": "Ajuda", "Home": "Home", "Left": "Esquerda", "Menu": "Menu", "Meta": "Meta", "PgUp": "PgUp", "Stop": "Parar", "Enter": "Enter", "Pause": "Pause", "Right": "Direita", "Shift": "Shift", "Print Screen": "Print Screen", "Scroll Lock": "Scroll Lock", "Volume Down": "Volume Cima", "Volume Mute": "Volume Mute", "Media Previous": "Média Anterior", "Home Page": "Página Principal", "Volume Up": "Volume Baixo", "Delete": "Delete", "Escape": "Escape", "Insert": "Insert", "PgDown": "PgDown", "Return": "Return", "Search": "Procurar", "Select": "Select", "NumLock": "Num Lock", "ScrollLock": "ScrollLock", "Page Up": "Page Up", "Open URL": "Abrir Endereço", "Caps Lock": "Caps Lock", "CapsLock": "CapsLock", "Backtab": "Backtab", "Refresh": "Refrescar", "Backspace": "Backspace", "Standby": "Hibernação", "Num Lock": "Num Lock", "Number Lock": "Number Lock", "Favorites": "Favoritos", "Forward": "Seguinte", "Page Down": "Page Down" }, "QDialogButtonBox": { "OK": "OK", "&OK": "&OK", "&No": "&Não", "&Yes": "&Sim", "Help": "Ajuda", "Open": "Abrir", "Save": "Gravar", "&Save": "&Gravar", "Abort": "Abortar", "Apply": "Aplicar", "Close": "Fechar", "Reset": "Restaurar", "Retry": "Tentar Novamente", "Restore Defaults": "Restaurar Predefinições", "&Close": "&Fechar", "Cancel": "Cancelar", "Ignore": "Ignorar", "Close without Saving": "Fechar sem Gravar", "N&o to All": "N&ão para Todos", "Save All": "Gravar Todos", "&Cancel": "&Cancelar", "Discard": "Descartar", "Yes to &All": "Sim para &Todos", "Don't Save": "Não Gravar" }, "QMessageBox": { "OK": "OK", "Help": "Ajuda", "Show Details...": "Mostrar Detalhes...", "Hide Details...": "Não Mostrar Detalhes..." }, "QErrorMessage": { "&OK": "&OK", "Fatal Error:": "Erro Fatal:", "&Show this message again": "&Mostrar esta mensagem novamente", "Debug Message:": "Mensagem Depuração:", "Warning:": "Aviso:" }, "QScrollBar": { "Top": "Topo", "Scroll down": "Deslizar para baixo", "Scroll here": "Deslizar aqui", "Scroll left": "Deslizar para esquerda", "Line up": "Linha acima", "Line down": "Linha abaixo", "Bottom": "Fundo", "Page up": "Página para cima", "Position": "Posição", "Page right": "Página para direita", "Scroll up": "Deslizar para cima", "Scroll right": "Deslizar para a direita", "Left edge": "Borda esquerda", "Page down": "Página para baixo", "Page left": "Página para esquerda", "Right edge": "Borda direita" }, "QFileDialog": { "Back": "Recuar", "File": "Ficheiro", "Open": "Abrir", "&Open": "&Abrir", "&Save": "&Gravar", "Drive": "Unidade", "'%1' is write protected.\nDo you want to delete it anyway?": "'%1' está protegido contra escrita.\nDeseja apagar de qualquer forma?", "File &name:": "&Nome do Ficheiro:", "New Folder": "Nova Pasta", "Parent Directory": "Pasta Mãe", "My Computer": "O Meu Computador", "Files of type:": "FIcheiros do tipo:", "Find Directory": "Procurar Pasta", "Show &hidden files": "Mostrar ficheiros &escondidos", "Are sure you want to delete '%1'?": "Deseja mesmo apagar '%1'?", "Save As": "Gravar Como", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\nPasta não encontrada.\nPor favor verifique o nome da pasta.", "List View": "Vista Abreviada", "&Delete": "&Apagar", "All Files (*)": "Todos os Ficheiros (*)", "Directories": "Pastas", "All Files (*.*)": "Todos os Ficheiros (*.*)", "&Rename": "&Mudar o Nome", "Could not delete directory.": "Não foi possível apagar a pasta.", "Directory:": "Pasta:", "Unknown": "Desconhecido", "%1 already exists.\nDo you want to replace it?": "%1 já existe.\nDeseja substituir?", "Forward": "Seguinte", "Create New Folder": "Criar Nova Pasta", "Detail View": "Vista Detalhada", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\nFicheiro não encontrado.\nPor favor verifique o nome do ficheiro." }, "QLineEdit": { "Cu&t": "Cor&tar", "&Copy": "&Copiar", "&Redo": "&Refazer", "&Undo": "&Desfazer", "&Paste": "Co&lar", "Delete": "Apagar", "Select All": "Seleccionar Tudo" }, "QMdiSubWindow": { "Help": "Ajuda", "Menu": "Menu", "&Move": "&Mover", "&Size": "&Tamanho", "Close": "Fechar", "Minimize": "Minimizar", "Stay on &Top": "Permanecer no &Topo", "&Close": "&Fechar", "%1 - [%2]": "%1 - [%2]", "&Restore": "&Restaurar", "Maximize": "Maximizar", "Mi&nimize": "Mi&nimizar", "Ma&ximize": "Ma&ximizar", "Restore Down": "Restaurar Baixo" }, "QWizard": { "Help": "Ajuda", "&Help": "&Ajuda", "Cancel": "Cancelar", "&Finish": "&Terminar", "&Next >": "&Avançar >", "< &Back": "< &Recuar" }, "QDirModel": { "Kind": "Tipo", "Name": "Nome", "Size": "Tamanho", "Type": "Tipo", "Date Modified": "Data de Modificação" }, "QFileSystemModel": { "Kind": "Tipo", "Name": "Nome", "Size": "Tamanho", "Type": "Tipo", "My Computer": "O Meu Computador", "Date Modified": "Data de Modificação" }, "QComboBox": { "Open": "Abrir", "True": "Verdadeiro", "Close": "Fechar", "False": "Falso" }, "QUndoGroup": { "Redo": "Refazer", "Undo": "Desfazer" }, "QUndoStack": { "Redo": "Refazer", "Undo": "Desfazer" }, "QDockWidget": { "Close": "Fechar" }, "QDialog": { "What's This?": "O Que é Isto?" }, "QWhatsThisAction": { "What's This?": "O Que é Isto?" }, "QPageSetupWidget": { "Paper source:": "Fonte papel:", "Landscape": "Paisagem", "Portrait": "Retrato", "Page size:": "Tamanho página:" }, "QAbstractSpinBox": { "Step &down": "Passo &abaixo", "&Step up": "&Passo acima" }, "QTabBar": { "Scroll Left": "Deslizar para Esquerda", "Scroll Right": "Deslizar para Direita" }, "QUndoModel": { "": "" }, "QProgressDialog": { "Cancel": "Cancelar" }, "MAC_APPLICATION_MENU": { "Hide Others": "Ocultar Outros", "Quit %1": "Encerrar %1", "About %1": "Sobre o %1", "Preferences...": "Preferências…", "Services": "Serviços", "Hide %1": "Ocultar %1", "Show All": "Mostrar Tudo" } } ================================================ FILE: translation/qt_ru.json ================================================ { "QShortcut": { "Space": "Пробел" "+": "+", "CD": "CD", "Go": "Перейти", "No": "Нет", "Up": "Вверх", "Alt": "Alt", "F%1": "F%1", "Del": "Del", "Cut": "Вырезать", "End": "End", "Esc": "Esc", "Ins": "Ins", "Tab": "Tab", "WWW": "WWW", "Yes": "Да", "Back": "Назад", "Copy": "Копировать", "Ctrl": "Ctrl", "Down": "Вниз", "Flip": "Крышка", "Help": "Help", "Home": "Home", "Left": "Влево", "Menu": "Menu", "Meta": "Meta", "PgUp": "PgUp", "Save": "Сохранить", "Send": "Отправить", "Stop": "Остановить", "Time": "Время", "View": "Вид", "Split Screen": "Разделить экран", "Clear": "Очистить", "Close": "Закрыть", "Eject": "Извлечь", "Enter": "Enter", "Kanji": "Кандзи", "Music": "Музыка", "Paste": "Вставить", "Pause": "Pause", "Right": "Вправо", "Shift": "Shift", "Sleep": "Спящий режим", "Tools": "Инструменты", "Video": "Видео", "Hiragana": "Хирагана", "Zenkaku": "Дзенкаку", "Print Screen": "Print Screen", "Zoom In": "Увеличить", "Hangul Special": "Хангыль специальный", "Scroll Lock": "Scroll Lock", "Media Pause": "Media Pause", "Volume Down": "Тише", "Volume Mute": "Отключить звук", "Kana Shift": "Shift Кана", "Media Previous": "Media Previous", "Home Page": "Домашняя страница", "Volume Up": "Громче", "Menu PB": "Кнопка меню", "Hangul PostHanja": "Хангыль постханча", "Kana Lock": "Lock Кана", "Delete": "Delete", "Escape": "Escape", "Hangul": "Хангыль", "Henkan": "Хенкан", "Insert": "Insert", "Logoff": "Выйти из системы", "Massyo": "Масё", "Option": "Опция", "PgDown": "PgDown", "Reload": "Перезагрузить", "Return": "Return", "Romaji": "Ромадзи", "Search": "Поиск", "Select": "Выбрать", "NumLock": "NumLock", "Hiragana Katakana": "Хирагана-катакана", "Top Menu": "Главное меню", "ScrollLock": "ScrollLock", "Zoom Out": "Уменьшить", "Page Up": "Page Up", "Open URL": "Открыть URL", "Caps Lock": "Верхний регистр", "Eisu Shift": "Shift Эйсу", "Code input": "Ввод кода", "Eisu toggle": "Включить/отключить Эйсу", "Clear Grab": "Очистить захват", "CapsLock": "CapsLock", "Backtab": "Backtab", "Battery": "Батарея", "Katakana": "Катакана", "Refresh": "Обновить", "Browser": "Браузер", "Keyboard Menu": "Клавиатурное меню", "Back Forward": "Назад/вперёд", "Backspace": "Backspace", "Hangul Banja": "Хангыль банча", "Hangul Hanja": "Хангыль ханча", "Standby": "Режим ожидания", "Hangul Start": "Хангыль начало", "Suspend": "Приостановить", "Display": "Показать", "Hangul Romaja": "Хангыль ромажи", "Zenkaku Hankaku": "Дзенкаку Ханкаку", "Hangul Jeonja": "Хангыль чонча", "Subtitle": "Субтитры", "Hangul Jamo": "Хангыль чамо", "Bluetooth": "Bluetooth", "Num Lock": "Цифровые клавиши", "Number Lock": "Цифровые клавиши", "Hangul PreHanja": "Хангыль преханча", "Terminal": "Терминал", "Task Panel": "Панель задач", "Favorites": "Избранное", "Forward": "Вперёд", "Page Down": "Page Down", "Wake Up": "Пробуждение", "Power Off": "Отключение питания", "Hankaku": "Ханкаку", "Hangul End": "Хангыль конец", "Space": "Пробел" }, "QPageSetupWidget": { "Form": "Форма", "bottom margin": "нижнее поле", "Paper": "Бумага", "Paper source:": "Источник бумаги:", "right margin": "правое поле", "Margins": "Поля", "Landscape": "Альбомная", "Width:": "Ширина:", "Orientation": "Ориентация", "Portrait": "Книжная", "top margin": "верхнее поле", "left margin": "левое поле", "Page size:": "Размер страницы:", "Reverse portrait": "Перевёрнутая книжная", "Millimeters (mm)": "Миллиметры (мм)", "Points (pt)": "Пункты (пт)", "Inches (in)": "Дюймы (дм)", "Reverse landscape": "Перевёрнутая альбомная", "Height:": "Высота:" }, "QDialogButtonBox": { "OK": "OK" }, "QErrorMessage": { "&OK": "Закрыть (&O)", "Fatal Error:": "Неустранимая ошибка:", "&Show this message again": "Показывать это сообщение в дальнейшем (&S)", "Debug Message:": "Отладочное сообщение:", "Warning:": "Предупреждение:" }, "QFontDatabase": { "Any": "Любая", "Lao": "Лаосская", "Bold": "Полужирный", "Demi": "Средний", "N'Ko": "Нко", "Thai": "Тайская", "Black": "Чёрный", "Greek": "Греческая", "Khmer": "Кхмерская", "Latin": "Латиница", "Light": "Светлый", "Ogham": "Огамическая", "Oriya": "Ория", "Runic": "Руническая", "Tamil": "Тамильская", "Cyrillic": "Кириллица", "Kannada": "Каннада", "Malayalam": "Малайялам", "Simplified Chinese": "Китайская упрощённая", "Demi Bold": "Плотный", "Arabic": "Арабская", "Hebrew": "Иврит", "Myanmar": "Мьянма", "Italic": "Курсив", "Korean": "Корейская", "Normal": "Обычный", "Oblique": "Наклонный", "Telugu": "Телугу", "Thaana": "Таана", "Symbol": "Символьная", "Syriac": "Сирийская", "Devanagari": "Деванагири", "Japanese": "Японская", "Bengali": "Бенгальская", "Armenian": "Армянская", "Sinhala": "Сингальская", "Tibetan": "Тибетская", "Vietnamese": "Вьетнамская", "Gujarati": "Гуджарати", "Traditional Chinese": "Китайская традиционная", "Georgian": "Грузинская", "Gurmukhi": "Гурмукхи" }, "QScrollBar": { "Top": "Вверх", "Scroll down": "Прокрутить вниз", "Scroll here": "Прокрутить сюда", "Scroll left": "Прокрутить влево", "Bottom": "Вниз", "Page up": "На страницу вверх", "Page right": "На страницу вправо", "Scroll up": "Прокрутить вверх", "Scroll right": "Прокрутить вправо", "Left edge": "К левой границе", "Page down": "На страницу вниз", "Page left": "На страницу влево", "Right edge": "К правой границе" }, "QFileDialog": { "Back": "Назад", "File": "Файл", "Open": "Открыть", "&Open": "Открыть (&O)", "&Save": "Сохранить (&S)", "Alias": "Псевдоним", "Drive": "Диск", "Show ": "Показать ", "'%1' is write protected.\nDo you want to delete it anyway?": "«%1» защищён от записи.\nДействительно удалить?", "File &name:": "Имя файла (&n):", "File Folder": "Папка с файлами", "New Folder": "Новая папка", "Folder": "Папка", "Parent Directory": "Родительский каталог", "&New Folder": "Новая папка (&N)", "Remove": "Удалить", "My Computer": "Мой компьютер", "Look in:": "Перейти к:", "Create a New Folder": "Создать новую папку", "Files of type:": "Типы файлов:", "Find Directory": "Найти каталог", "Show &hidden files": "Показать скрытые файлы (&h)", "Save As": "Сохранить как", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\nКаталог не найден.\nПроверьте правильность указанного имени каталога.", "List View": "Список", "&Choose": "Выбрать (&C)", "&Delete": "Удалить (&D)", "All Files (*)": "Все файлы (*)", "Directories": "Каталоги", "&Rename": "Переименовать (&R)", "Could not delete directory.": "Не удалось удалить каталог.", "Directory:": "Каталог:", "Unknown": "Неизвестный", "%1 already exists.\nDo you want to replace it?": "%1 уже существует.\nЗаменить его?", "Forward": "Вперёд", "Go forward": "Вперёд", "Go to the parent directory": "Перейти в родительский каталог", "Recent Places": "Недавние документы", "Go back": "Назад", "Change to detail view mode": "Переключить в подробный режим", "Create New Folder": "Создать папку", "Shortcut": "Ярлык", "Detail View": "Подробный режим", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\nФайл не найден.\nПроверьте правильность указанного имени файла.", "Change to list view mode": "Переключить в режим списка" }, "QLineEdit": { "Cu&t": "Вырезать (&t)", "&Copy": "Копировать (&C)", "&Redo": "Повторить действие (&R)", "&Undo": "Отменить действие (&U)", "&Paste": "Вставить (&P)", "Delete": "Удалить", "Select All": "Выделить всё" }, "QWizard": { "Done": "Готово", "Help": "Справка", "&Help": "Справка (&H)", "&Next": "Далее (&N)", "Cancel": "Отмена", "Commit": "Подтвердить", "Continue": "Продолжить", "&Finish": "Завершить (&F)", "&Next >": "Далее (&N) >", "Go Back": "Назад", "< &Back": "< Назад (&B)" }, "QMdiSubWindow": { "Help": "Справка", "Menu": "Меню", "&Move": "Переместить (&M)", "&Size": "Размер (&S)", "Close": "Закрыть", "Minimize": "Свернуть", "Shade": "Свернуть в заголовок", "Stay on &Top": "Оставаться сверху (&T)", "&Close": "Закрыть (&C)", "- [%1]": "- [%1]", "%1 - [%2]": "%1 - [%2]", "&Restore": "Восстановить (&R)", "Restore": "Восстановить", "Maximize": "Развернуть", "Unshade": "Восстановить из заголовка", "Mi&nimize": "Свернуть (&n)", "Ma&ximize": "Развернуть (&x)", "Restore Down": "Восстановить" }, "QDirModel": { "Kind": "Вид", "Name": "Имя", "Size": "Размер", "Type": "Тип", "Date Modified": "Дата изменения" }, "QFileSystemModel": { "Kind": "Вид", "Name": "Имя", "Size": "Размер", "Type": "Тип", "My Computer": "Мой компьютер", "Computer": "Компьютер", "Invalid filename": "Некорректное имя файла", "Date Modified": "Дата изменения" }, "QUndoGroup": { "Redo": "Повторить действие", "Undo": "Отменить действие", "Redo %1": "Повторить: %1", "Undo %1": "Отменить: %1" }, "QUndoStack": { "Redo": "Повторить действие", "Undo": "Отменить действие", "Redo %1": "Повторить: %1", "Undo %1": "Отменить: %1" }, "QComboBox": { "True": "Да", "False": "Нет" }, "QDockWidget": { "Close": "Закрыть", "Float": "Плавающее" }, "QDialog": { "What's This?": "Что это?" }, "QWhatsThisAction": { "What's This?": "Что это?" }, "QMessageBox": { "Show Details...": "Показать подробности...", "Hide Details...": "Скрыть подробности..." }, "QAbstractSpinBox": { "Step &down": "Шаг вниз (&d)", "&Step up": "Шаг вверх (&S)", "&Select All": "Выделить всё (&S)" }, "QInputDialog": { "Enter a value:": "Укажите значение:" }, "QTabBar": { "Scroll Left": "Прокрутить влево", "Scroll Right": "Прокрутить вправо" }, "QUndoModel": { "": "<пусто>" }, "QProgressDialog": { "Cancel": "Отменить" }, "MAC_APPLICATION_MENU": { "Hide Others": "Скрыть другое", "Quit %1": "Выйти из %1", "About %1": "О %1", "Preferences...": "Настройки...", "Services": "Службы", "Hide %1": "Скрыть: %1", "Show All": "Показать всё" }, "CloseButton": { "Close Tab": "Закрыть вкладку" }, "QMdiArea": { "(Untitled)": "(Неозаглавлено)" } } ================================================ FILE: translation/qt_si.json ================================================ { "QShortcut": { "+": "+", "CD": "CD", "Go": "යන්න", "No": "නෑ", "Up": "ඉහළට", "Alt": "Alt", "F%1": "F%1", "Del": "Del", "Cut": "කපානු කරන්න", "End": "End", "Esc": "Esc", "Ins": "Ins", "Tab": "Tab", "WWW": "WWW", "Yes": "ඔව්", "Back": "ආපසු", "Copy": "පිටපත් කරන්න", "Ctrl": "Ctrl", "Down": "පහතට", "Flip": "සැකසුම්", "Help": "උදවු", "Home": "Home", "Left": "වම", "Menu": "මෙනුව", "Meta": "Meta", "PgUp": "PgUp", "Save": "සුරකින්න", "Send": "යවන්න", "Stop": "වසන්න", "Time": "වේලාව", "View": "දර්ශනය", "Split Screen": "වෙනස් තීරුව", "Clear": "හිස් කරන්න", "Close": "වසන්න", "Eject": "නිෂ්ප්‍රභාණය කරන්න", "Enter": "Enter", "Kanji": "කණ්ජි", "Music": "සංගීත", "Paste": "අලවන්න", "Pause": "ප්‍රාථමිකයි", "Right": "දකුණ", "Shift": "Shift", "Sleep": "නිබන්ධන", "Tools": "මෙවලම්", "Video": "වීඩියෝ", "Hiragana": "Hiragana", "Zenkaku": "වරාය", "Print Screen": "Print Screen", "Zoom In": "බිහිවූ", "Hangul Special": "හංගුල් විශේෂ", "Scroll Lock": "Scroll Lock", "Media Pause": "මාදිලිය ප්‍රාථමිකයි", "Volume Down": "හඩක් අඩු කරන්න", "Volume Mute": "හඩක් හිස් කරන්න", "Kana Shift": "Kana Shift", "Media Previous": "මීඩියා පෙර", "Home Page": "මුල් පිටුව", "Volume Up": "හඩක් වැඩි කරන්න", "Menu PB": "මෙනු PB", "Hangul PostHanja": "හංගුල් පස්හන්ජ", "Kana Lock": "Kana Lock", "Delete": "Delete", "Escape": "Escape", "Hangul": "හංගුල්", "Henkan": "වනුවෙන්", "Insert": "Insert", "Logoff": "ලොග් ඉවත් වන්න", "Massyo": "පදනම්", "Option": "විකල්ප", "PgDown": "PgDown", "Reload": "නැවත පූරන්න", "Return": "Return", "Romaji": "රෝමජි", "Search": "සොයන්න", "Select": "තෝරන්න", "NumLock": "NumLock", "Hiragana Katakana": "හිරගන කටකන", "Top Menu": "මුල් මෙනුව", "ScrollLock": "ScrollLock", "Zoom Out": "විශාල කරන්න", "Page Up": "Page Up", "Open URL": "URL විවෘත කරන්න", "Caps Lock": "Caps Lock", "Eisu Shift": "Eisu Shift", "Code input": "කේතය ආදායම්", "Eisu toggle": "එයිසු පරිවර්තනය", "Clear Grab": "තේරුම් පිරවීම කිරීම", "CapsLock": "CapsLock", "Backtab": "Backtab", "Battery": "බැටරි", "Katakana": "කටකන", "Refresh": "නැවත ලියාපදිංචි කරන්න", "Browser": "බ්‍රව්සරය", "Keyboard Menu": "යතුරු මෙනුව", "Back Forward": "ආපසු අනුලා පෙන්වන්න", "Backspace": "Backspace", "Hangul Banja": "හංගුල් බන්ජ", "Hangul Hanja": "හංගුල් හන්ජ", "Standby": "නිබන්ධන", "Hangul Start": "හංගුල් ආරම්භය", "Suspend": "නිබන්ධන", "Display": "ප්‍රදේශය", "Hangul Romaja": "හංගුල් රොමජා", "Zenkaku Hankaku": "මුල් මහළකුරු හන්කකුරු", "Hangul Jeonja": "හංගුල් ජෙන්ජ", "Subtitle": "උද්‍යානය", "Hangul Jamo": "හංගුල් ජාමෝ", "Bluetooth": "බ්ලුටූත්", "Num Lock": "Num Lock", "Number Lock": "Number Lock", "Hangul PreHanja": "හංගුල් පෙරහන්ජ", "Terminal": "තැරැල්", "Task Panel": "කාර්ය පැනලය", "Favorites": "ප්‍රියතම", "Forward": "ඉදිරිපස", "Page Down": "Page Down", "Wake Up": "ප්‍රාථමිකයි", "Power Off": "විදුලි අපහසු කරන්න", "Hankaku": "අඟුරු", "Hangul End": "හංගුල් අවසානය" }, "QDialogButtonBox": { "OK": "හරි", "&OK": "හරි(&O)", "&No": "නෑ(&N)", "&Yes": "ඔව්(&Y)", "Help": "උදවු", "Open": "විවෘත", "Save": "සුරකින්න", "&Save": "සුරකින්න(&S)", "Abort": "අභියෝගය", "Apply": "අදාරම්", "Close": "වසන්න", "Reset": "නැවත සකසන්න", "Retry": "නැවත උත්සාහ කරන්න", "Restore Defaults": "ප්‍රදර්ශන ප්‍රතිශයක් ආපසු ලබාදීම", "&Close": "වසන්න(&C)", "Cancel": "අවලංගු කරන්න", "Ignore": "නොසැලකිලිම", "Close without Saving": "සුරකින්නේ නොනියම් වසන්න", "N&o to All": "සෑමවිටම නෑ(&O)", "Save All": "සෑමවිටම සුරකින්න", "&Cancel": "අවලංගු කරන්න(&C)", "Discard": "අවලංගු කිරීම", "Yes to &All": "සෑමවිටම ඔව්(&A)", "Don't Save": "සුරකින්නේ නොකරන්න" }, "QMessageBox": { "OK": "හරි", "Help": "උදවු", "Show Details...": "විස්තර පෙන්වන්න...", "Hide Details...": "විස්තර සඟවන්න..." }, "QErrorMessage": { "&OK": "හරි(&O)", "Fatal Error:": "විශ්වාසීම් දෝෂය:", "&Show this message again": "මෙම පණිවුඩය නැවත පෙන්වන්න(&S)", "Debug Message:": "ඩිබුග් පණිවුඩය:", "Warning:": "අනතුරුදහන්:" }, "QFontDatabase": { "Any": "කිසිදු", "Lao": "ලාඕ", "Bold": "බෝල්ඩ්", "Demi": "ඩෙමි", "N'Ko": "නේකෝ", "Thai": "තායි", "Black": "ළඟ", "Greek": "ග්‍රීක", "Khmer": "ඛ්මීර", "Latin": "ලතින්", "Light": "ලයිට්", "Ogham": "ඔඝම්", "Oriya": "ඔරියා", "Runic": "රුනික්", "Tamil": "දේමළ", "Cyrillic": "සිරිලික්", "Kannada": "කන්නඩ", "Malayalam": "මාලයාම්", "Simplified Chinese": "සරල චීන", "Demi Bold": "ඩෙමි බෝල්ඩ්", "Arabic": "අරාබි", "Hebrew": "හීබෲ", "Myanmar": "මියනාර", "Italic": "ඉටාලික්", "Korean": "කොරියානු", "Normal": "සාමාන්‍ය", "Oblique": "ඇදහස්", "Telugu": "තෙළිඟු", "Thaana": "තානා", "Symbol": "සංඛ්‍යාත්මක", "Syriac": "සිරියාක්", "Devanagari": "දේවනාගරි", "Japanese": "ජපන්", "Bengali": "බෙංගාලි", "Armenian": "ආර්මේනියානු", "Sinhala": "සිංහල", "Tibetan": "ටිබෙට්", "Vietnamese": "වියට්නාමි", "Gujarati": "ගුජරාටි", "Traditional Chinese": "සාමාන්‍ය චීන", "Georgian": "ජෝර්ජියානු", "Gurmukhi": "ගුර්මුකි" }, "QScrollBar": { "Top": "මුල් පිටුව", "Scroll down": "පහළට ස්ක්‍රෝල් කරන්න", "Scroll here": "මෙමේ ස්ක්‍රෝල් කරන්න", "Scroll left": "වමට ස්ක්‍රෝල් කරන්න", "Line up": "ප්‍රේම ඉහළට", "Line down": "ප්‍රේම පහළට", "Bottom": "පහළට", "Page up": "පිටු ඉහළට", "Position": "ස්ථානය", "Page right": "පිටු දකුණට", "Scroll up": "ඉහළට ස්ක්‍රෝල් කරන්න", "Scroll right": "දකුණට ස්ක්‍රෝල් කරන්න", "Left edge": "වමේ අස්වන්න", "Page down": "පිටු පහළට", "Page left": "පිටු වමට", "Right edge": "දකුණු අස්වන්න" }, "QFileDialog": { "Back": "ආපසු", "File": "ගොනුව", "Open": "විවෘත", "&Open": "විවෘත(&O)", "&Save": "සුරකින්න(&S)", "Drive": "ඩ්‍රයිව්", "Show ": "පෙන්වන්න ", "'%1' is write protected.\nDo you want to delete it anyway?": "'%1' ප්‍රකාශීමේ අතරමං සියලුම ගබඩාවන්දීමේ දර්ශනයක් පවතී.\nඑය ඉවත් කිරීමට අවශ්‍යද?", "File &name:": "ගොනුවේ නම(&N):", "Alias": "අලෙවිය", "File Folder": "ගොනු ෆෝල්ඩරය", "New Folder": "නව ෆෝල්ඩරය", "Parent Directory": "මව් ඩිරෙක්ටරිය", "&New Folder": "නව ෆෝල්ඩරය(&N)", "Remove": "ඉවත් කරන්න", "My Computer": "මගේ පරිගණකය", "Look in:": "පෙන්වන්න:", "Create a New Folder": "නව ෆෝල්ඩරය තනන්න", "Files of type:": "වර්ගයේ ගොනු:", "Find Directory": "ඩිරෙක්ටරි සොයන්න", "Show &hidden files": "සැඟවුණු ගොනු පෙන්වන්න(&H)", "Are sure you want to delete '%1'?": "'%1' ඉවත් කිරීමට ඔබට තීරණයක් තිබේද?", "Save As": "වෙනස් කරන්න", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\nඩිරෙක්ටරිය සොයා නොමැත.\nවලංගු ඩිරෙක්ටරියේ නමක් දී තහවුරු කරන්න.", "List View": "ලැයිස්තුවෙහි දැක්ම", "&Choose": "තෝරන්න(&C)", "&Delete": "මකන්න(&D)", "All Files (*)": "සියලුම ගොනුව (*)", "Directories": "ඩිරෙක්ටරි", "All Files (*.*)": "සියලුම ගොනුව (*.*)", "&Rename": "නැවත නම් කරන්න(&R)", "Could not delete directory.": "ඩිරෙක්ටරිය මෙහෙයුම් කළ නොහැක.", "Directory:": "ඩිරෙක්ටරිය:", "Unknown": "නොදන්නා", "%1 already exists.\nDo you want to replace it?": "%1 දැනටමත් පවතී.\nඑය නැවත ආරම්භකරන්නද?", "Folder": "ෆෝල්ඩරය", "Forward": "ඉදිරි", "Go forward": "ඉදිරියට යන්න", "Go to the parent directory": "මව් ඩිරෙක්ටරියට යන්න", "Recent Places": "නවතම ස්ථාන", "Go back": "ආපසු යන්න", "Change to detail view mode": "විස්තර දැක්ම ප්‍රකාශනයට වෙනස් කිරීම", "Create New Folder": "නව ෆෝල්ඩරය සාදන්න", "Shortcut": "විරහිතය", "Detail View": "විස්තර දැක්ම", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\nගොනුව සොයා නොමැත.\nවලංගු ගොනුවේ නමක් දී තහවුරු කරන්න.", "Change to list view mode": "ලැයිස්තුවෙහි දැක්ම ප්‍රකාශනයට වෙනස් කිරීම" }, "QLineEdit": { "Cu&t": "කප්පා කරන්න(&T)", "&Copy": "පිටවන්න(&C)", "&Redo": "නැවත කරන්න(&R)", "&Undo": "නැවත කිරීම(&U)", "&Paste": "තොරාගන්න(&P)", "Delete": "මකන්න", "Select All": "සියලුම තෝරන්න" }, "QDockWidget": { "Dock": "අතුරුදු ගෙවන්න", "Close": "වසන්න", "Float": "ප්‍රඥාවක් ලබන්න" }, "QDialog": { "Done": "අවසන්", "What's This?": "මේක කුමක්ද?" }, "QWizard": { "Done": "අවසන්", "Help": "උදවු", "&Help": "උදවු(&H)", "&Next": "ඊළඟ(&N)", "Cancel": "අවලංගු කරන්න", "Commit": "අරින්න", "Continue": "ඉදිරිපත් කරන්න", "&Finish": "අවසන්(&F)", "&Next >": "ඊළඟ (&N) >", "Go Back": "ආපසු යන්න", "< &Back": "< ආපසු(&B)" }, "QPageSetupWidget": { "Form": "සූදානම්", "bottom margin": "පහළ අවුරුද්ද", "Paper": "කඩදාසි", "Paper source:": "කඩදාසි මුද්‍රණය:", "Centimeters (cm)": "සෙන්ටිමීටර් (cm)", "right margin": "දකුණු අවුරුද්ද", "Margins": "අවුරුද්ද", "Landscape": "කලාපය", "Width:": "පළල:", "Orientation": "දේශීයය", "Portrait": "වර්ගී", "top margin": "ඉහළ අවුරුද්ද", "left margin": "වම් අවුරුද්ද", "Page size:": "පිටු ප්‍රමාණය:", "Reverse portrait": "ප්‍රකාශ වර්ගය", "Millimeters (mm)": "මිලිමීටර් (mm)", "Points (pt)": "පොයින්ට් (pt)", "Inches (in)": "අඟහරුවාදාය (in)", "Reverse landscape": "ප්‍රකාශ කලාපය", "Height:": "උස:" }, "QMdiSubWindow": { "Help": "උදවු", "Menu": "මෙනුව", "&Move": "ගෙන යන්න(&M)", "&Size": "ප්‍රමාණය(&S)", "Close": "වසන්න", "Minimize": "අවම කරන්න", "Shade": "සංරාජ කරන්න", "Stay on &Top": "මෙමෙය මේවාත්කාලීනවන්න(&T)", "&Close": "වසන්න(&C)", "- [%1]": "- [%1]", "%1 - [%2]": "%1 - [%2]", "&Restore": "නැවත ආපසු ලබාදෙන්න(&R)", "Restore": "නැවත ආපසු ලබාදෙන්න", "Maximize": "උපරිම කරන්න", "Unshade": "අසංරාජ කරන්න", "Mi&nimize": "අවම කරන්න(&N)", "Ma&ximize": "උපරිම කරන්න(&X)", "Restore Down": "නැවත ආපසු ලබාදෙන්න" }, "QDirModel": { "Kind": "ස්ථානය", "Name": "නම", "Size": "ප්‍රමාණය", "Type": "ස්ථානය", "Date Modified": "සංවාද කළ දිනය" }, "QFileSystemModel": { "Kind": "ස්ථානය", "Name": "නම", "Size": "ප්‍රමාණය", "%1 GB": "%1 GB", "%1 KB": "%1 KB", "%1 MB": "%1 MB", "%1 TB": "%1 TB", "The name \"%1\" can not be used.

Try using another name, with fewer characters or no punctuations marks.": "\"%1\" නම භාවිත කළ නොහැක.

වැඩි අකුරු හෝ සමඟ නැති නම භාවිතා කරන්න.", "%1 bytes": "%1 බයිට්", "My Computer": "මගේ පරිගණකය", "Computer": "පරිගණකය", "Invalid filename": "අවලංගු ගොනුවේ නාමය", "%1 byte(s)": "%1 බයිට්", "Type": "ස්ථානය", "Date Modified": "සංවාද කළ දිනය" }, "QComboBox": { "Open": "විවෘත", "True": "සත්‍ය", "Close": "වසන්න", "False": "ව්‍යාක" }, "QWhatsThisAction": { "What's This?": "මේ කුමක්ද?" }, "QAbstractSpinBox": { "Step &down": "අහෝසි පරිමාව පහතට(&D)", "&Step up": "පරිමාව ඉහළට(&S)", "&Select All": "සියලුම තෝරන්න(&S)" }, "QInputDialog": { "Enter a value:": "අගයක් ඇතුළත් කරන්න:" }, "QTabBar": { "Scroll Left": "වමේ දිගට යන්න", "Scroll Right": "දකුණට යන්න" }, "QUndoModel": { "": "<හිස්>" }, "QUndoGroup": { "Undo": "අවලංගු කරන්න", "Redo %1": "%1 නැවත කිරීම", "Undo %1": "%1 අවලංගු කරන්න", "Redo": "නැවත කිරීම" }, "QUndoStack": { "Undo": "අවලංගු කරන්න", "Redo %1": "%1 නැවත කිරීම", "Undo %1": "%1 අවලංගු කරන්න", "Redo": "නැවත කිරීම" }, "QProgressDialog": { "Cancel": "අවලංගු කරන්න" }, "MAC_APPLICATION_MENU": { "Hide Others": "වෙනත් සියල්ල සඟවන්න", "Quit %1": "%1 ඉවත් වන්න", "About %1": "%1 ගැන...", "Preferences...": "සූදානම්...", "Services": "සේවා", "Hide %1": "%1 සඟවන්න", "Show All": "සියල්ල පෙන්වන්න" }, "CloseButton": { "Close Tab": "වගුව වසන්න" }, "QMdiArea": { "(Untitled)": "(අන්තර්ගතය නොමැත)" } } ================================================ FILE: translation/qt_tr.json ================================================ { "QShortcut": { "+": "+", "CD": "CD", "Go": "Git", "No": "Hayır", "Up": "Yukarı", "Alt": "Alt", "F%1": "F%1", "Del": "Sil", "Cut": "Kes", "End": "Son", "Esc": "Çıkış", "Ins": "Ekle", "Tab": "Sekme", "WWW": "WWW", "Yes": "Evet", "Back": "Geri", "Copy": "Kopyala", "Ctrl": "Ctrl", "Down": "Aşağı", "Flip": "Çevir", "Help": "Yardım", "Home": "Ana Sayfa", "Left": "Sola", "Menu": "Menü", "Meta": "Meta", "PgUp": "Sayfa yukarı", "Save": "Kaydet", "Send": "Gönder", "Stop": "Dur", "Time": "Zaman", "View": "Görünüm", "Split Screen": "Bölünmüş Ekran", "Clear": "Temizle", "Close": "Kapat", "Eject": "Çıkar", "Enter": "Giriş", "Kanji": "Kanji", "Music": "Müzik", "Paste": "Yapıştır", "Pause": "Duraklat", "Right": "Sağa", "Shift": "Shift", "Sleep": "Uyku", "Tools": "Araçlar", "Video": "Vidyo", "Hiragana": "Hiragana", "Zenkaku": "Zenkaku", "Print Screen": "Ekran Görüntüsü", "Zoom In": "Yakınlaştır", "Hangul Special": "Hangul Special", "Scroll Lock": "Kaydırma Kilidi", "Media Pause": "Medyayı Duraklat", "Volume Down": "Sesi Düşür", "Volume Mute": "Sesi Kes", "Kana Shift": "Kana Shift", "Media Previous": "Önceki Medya", "Home Page": "Ana Sayfa", "Volume Up": "Sesi Yükselt", "Menu PB": "PB Menüsü", "Hangul PostHanja": "Hangul PostHanja", "Kana Lock": "Kana Lock", "Delete": "Sil", "Escape": "Çıkış", "Hangul": "Hangul", "Henkan": "Henkan", "Insert": "Ekle", "Logoff": "Oturumu Kapat", "Massyo": "Massyo", "Option": "Seçenek", "PgDown": "Sayfa aşağı", "Reload": "Yeniden Yükle", "Return": "Dönüş", "Romaji": "Romaji", "Search": "Ara", "Select": "Seç", "NumLock": "Sayı Kilidi", "Hiragana Katakana": "Hiragana Katakana", "Top Menu": "Üst Menü", "ScrollLock": "Kaydırma kilidi", "Zoom Out": "Uzaklaştır", "Page Up": "Sayfa Yukarı", "Open URL": "URL Aç", "Caps Lock": "Büyük Harf", "Eisu Shift": "Eisu Shift", "Code input": "Kod girişi", "Eisu toggle": "Eisu toggle", "Clear Grab": "Açık Tut", "CapsLock": "Büyük harf", "Backtab": "Geri sekmesi", "Battery": "Pil", "Katakana": "Katakana", "Refresh": "Yenile", "Browser": "Tarayıcı", "Keyboard Menu": "Klavye Menüsü", "Back Forward": "İleri geri", "Backspace": "Geri sil", "Hangul Banja": "Hangul Banja", "Hangul Hanja": "Hangul Hanja", "Standby": "Hazırda bekle", "Hangul Start": "Hangul Başlat", "Suspend": "Askıya Al", "Display": "Ekran", "Hangul Romaja": "Hangul Romaja", "Zenkaku Hankaku": "Zenkaku Hankaku", "Hangul Jeonja": "Hangul Jeonja", "Subtitle": "Alt yazı", "Hangul Jamo": "Hangul Jamo", "Bluetooth": "Bluetooth", "Num Lock": "Sayı Kilidi", "Number Lock": "Sayı Kilidi", "Hangul PreHanja": "Hangul PreHanja", "Terminal": "Terminal", "Task Panel": "Görev Paneli", "Favorites": "Sık Kullanılanlar", "Forward": "İleri", "Page Down": "Sayfa Aşağı", "Wake Up": "Uyandır", "Power Off": "Gücü Kapat", "Hankaku": "Hankaku", "Hangul End": "Hangul Bitir" }, "QPageSetupWidget": { "Form": "Form", "bottom margin": "alt kenar boşluğu", "Paper": "Kağıt", "Paper source:": "Kağıt kaynağı:", "right margin": "sağ kenar boşluğu", "Margins": "Kenar boşlukları", "Landscape": "Manzara", "Width:": "Genişlik:", "Orientation": "Yönlendirme", "Portrait": "Portre", "top margin": "üst kenar boşluğu", "left margin": "sol kenar boşluğu", "Page size:": "Sayfa boyutu:", "Reverse portrait": "Ters portre", "Millimeters (mm)": "Milimetre (mm)", "Points (pt)": "Nokta (pt)", "Inches (in)": "İnç (in)", "Reverse landscape": "Ters manzara", "Height:": "Yükseklik:" }, "QDialogButtonBox": { "OK": "Tamam" }, "QErrorMessage": { "&OK": "&Tamam", "Fatal Error:": "Ölümcül Hata:", "&Show this message again": "Bu iletiyi yeniden gö&ster", "Debug Message:": "Hata Ayıklama İletisi:", "Warning:": "Uyarı:" }, "QFontDatabase": { "Any": "Herhangi", "Lao": "Lao", "Bold": "Kalın", "Demi": "Yarı", "N'Ko": "N'Ko", "Thai": "Taylandca", "Black": "Siyah", "Greek": "Yunanca", "Khmer": "Khmer", "Latin": "Latince", "Light": "Açık", "Ogham": "Ogham", "Oriya": "Oriya", "Runic": "Rünik", "Tamil": "Tamilce", "Cyrillic": "Kiril", "Kannada": "Kannada", "Malayalam": "Malayalam", "Simplified Chinese": "Basitleştirilmiş Çince", "Demi Bold": "Yarı Kalın", "Arabic": "Arapça", "Hebrew": "İbranice", "Myanmar": "Myanmar", "Italic": "Eğik", "Korean": "Korece", "Normal": "Normal", "Oblique": "Eğik", "Telugu": "Telugu", "Thaana": "Thaana", "Symbol": "Sembol", "Syriac": "Süryanice", "Devanagari": "Devanagari", "Japanese": "Japonca", "Bengali": "Bengali", "Armenian": "Ermenice", "Sinhala": "Sinhala", "Tibetan": "Tibetçe", "Vietnamese": "Vietnamca", "Gujarati": "Gujarati", "Traditional Chinese": "Geleneksel Çince", "Georgian": "Gürcü", "Gurmukhi": "Gurmuki" }, "QScrollBar": { "Top": "Üst", "Scroll down": "Aşağı kaydır", "Scroll here": "Buraya kaydır", "Scroll left": "Sola kaydır", "Bottom": "Alt", "Page up": "Sayfa yukarı", "Page right": "Sayfa sağa", "Scroll up": "Yukarı kaydır", "Scroll right": "Sağa kaydır", "Left edge": "Sol kenar", "Page down": "Sayfa aşağı", "Page left": "Sayfa sola", "Right edge": "Sağ kenar" }, "QFileDialog": { "Back": "Geri", "File": "Dosya", "Open": "Aç", "&Open": "&Aç", "&Save": "&Kaydet", "Alias": "Takma Ad", "Drive": "Sürücü", "Show ": "Göster ", "'%1' is write protected.\nDo you want to delete it anyway?": "'%1' yazma korumalı.\nYine de silmek istiyor musunuz?", "File &name:": "Dosya a&dı:", "File Folder": "Dosya Klasörü", "New Folder": "Yeni Klasör", "Folder": "Klasör", "Parent Directory": "Üst Dizin", "&New Folder": "Ye&ni Klasör", "Remove": "Kaldır", "My Computer": "Bilgisayarım", "Look in:": "Arama konumu:", "Create a New Folder": "Yeni bir Klasör Oluştur", "Files of type:": "Dosyaların türü:", "Find Directory": "Dizin Bul", "Show &hidden files": "&Gizli dosyaları göster", "Save As": "Farklı Kaydet", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\nDizin bulunamadı.\nLütfen doğru dizin adının verildiğini doğrulayın.", "List View": "Liste Görünümü", "&Choose": "&Seç", "&Delete": "&Sil", "All Files (*)": "Tüm Dosyalar (*)", "Directories": "Dizinler", "&Rename": "Yeniden Adlandı&r", "Could not delete directory.": "Dizin silinemedi.", "Directory:": "Dizin:", "Unknown": "Bilinmeyen", "%1 already exists.\nDo you want to replace it?": "%1 zaten var.\nDeğiştirmek istiyor musunuz?", "Forward": "İleri", "Go forward": "İleri git", "Go to the parent directory": "Üst dizine git", "Recent Places": "Son Yerler", "Go back": "Geri git", "Change to detail view mode": "Ayrıntılı görüntüleme moduna geç", "Create New Folder": "Yeni Klasör Oluştur", "Shortcut": "Kısayol", "Detail View": "Ayrıntılı Görünüm", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\nDosya bulunamadı.\nLütfen doğru dosya adının verildiğini doğrulayın.", "Change to list view mode": "Liste görünümü moduna geç" }, "QLineEdit": { "Cu&t": "Ke&s", "&Copy": "&Kopyala", "&Redo": "&Yinele", "&Undo": "&Geri al", "&Paste": "Ya&pıştır", "Delete": "Sil", "Select All": "Tümünü Seç" }, "QWizard": { "Done": "Bitti", "Help": "Yardım", "&Help": "&Yardım", "&Next": "So&nraki", "Cancel": "İptal", "Commit": "İşleme", "Continue": "Devam et", "&Finish": "&Bitiş", "&Next >": "So&nraki >", "Go Back": "Geri Git", "< &Back": "< &Geri" }, "QMdiSubWindow": { "Help": "Yardım", "Menu": "Menü", "&Move": "&Taşı", "&Size": "&Boyut", "Close": "Kapat", "Minimize": "Küçült", "Shade": "Gölgele", "Stay on &Top": "&Üstte Kal", "&Close": "&Kapat", "- [%1]": "- [%1]", "%1 - [%2]": "%1 - [%2]", "&Restore": "Ge&ri Yükle", "Restore": "Geri Yükle", "Maximize": "Büyüt", "Unshade": "Gölgeleme", "Mi&nimize": "Küçü<", "Ma&ximize": "&Büyüt", "Restore Down": "Aşağı Geri Yükle" }, "QDirModel": { "Kind": "Çeşit", "Name": "Ad", "Size": "Boyut", "Type": "Tür", "Date Modified": "Değiştirilme Tarihi" }, "QFileSystemModel": { "Kind": "Çeşit", "Name": "Ad", "Size": "Boyut", "Type": "Tür", "My Computer": "Bilgisayarım", "Computer": "Bilgisayar", "Invalid filename": "Geçersiz dosya adı", "Date Modified": "Değiştirilme Tarihi" }, "QUndoGroup": { "Redo": "Yinele", "Undo": "Geri al", "Redo %1": "Yinele %1", "Undo %1": "Geri al %1" }, "QUndoStack": { "Redo": "Yinele", "Undo": "Geri al", "Redo %1": "Yinele %1", "Undo %1": "Geri al %1" }, "QComboBox": { "True": "Doğru", "False": "Yanlış" }, "QDockWidget": { "Close": "Kapat", "Float": "Yüzen düğme" }, "QDialog": { "What's This?": "Bu Nedir?" }, "QWhatsThisAction": { "What's This?": "Bu Nedir?" }, "QMessageBox": { "Show Details...": "Ayrıntıları Göster...", "Hide Details...": "Ayrıntıları Gizle..." }, "QAbstractSpinBox": { "Step &down": "&Aşağı in", "&Step up": "&Yukarı çık", "&Select All": "Tümünü &Seç" }, "QInputDialog": { "Enter a value:": "Bir değer girin:" }, "QTabBar": { "Scroll Left": "Sola Kaydır", "Scroll Right": "Sağa Kaydır" }, "QUndoModel": { "": "" }, "QProgressDialog": { "Cancel": "İptal" }, "MAC_APPLICATION_MENU": { "Hide Others": "Diğerlerini Gizle", "Quit %1": "%1'den Çık", "About %1": "%1 Hakkında", "Preferences...": "Tercihler...", "Services": "Hizmetler", "Hide %1": "%1'i Gizle", "Show All": "Tümünü Göster" }, "CloseButton": { "Close Tab": "Sekmeyi Kapat" }, "QMdiArea": { "(Untitled)": "(Başlıksız)" } } ================================================ FILE: translation/qt_vi.json ================================================ { "QMessageBox": { "OK": "Đồng ý", "Help": "Trợ giúp", "Show Details...": "Hiện chi tiết...", "Hide Details...": "Ẩn chi tiết..." }, "QErrorMessage": { "&OK": "Đồ&ng ý", "Fatal Error:": "Lỗi nghiêm trọng:", "&Show this message again": "&Hiện thông điệp này lần nữa", "Debug Message:": "Thông điệp gỡ rối:", "Warning:": "Chú ý:" }, "QFontDatabase": { "Any": "Tùy", "Lao": "Lao", "Bold": "Đậm", "Demi": "Vừa", "Thai": "Thai", "Black": "Đen", "Greek": "Greek", "Khmer": "Khmer", "Latin": "Latin", "Light": "Sáng", "Ogham": "Ogham", "Oriya": "Oriya", "Runic": "Runic", "Tamil": "Tamil", "Cyrillic": "Cyrillic", "Kannada": "Kannada", "Malayalam": "Malayalam", "Simplified Chinese": "Simplified Chinese", "Demi Bold": "Đậm vừa", "Arabic": "Arabic", "Hebrew": "Hebrew", "Myanmar": "Myanmar", "Italic": "Nghiêng", "Korean": "Korean", "Normal": "Bình thường", "Oblique": "Lệch", "Telugu": "Telugu", "Thaana": "Thaana", "Symbol": "Ký hiệu", "Syriac": "Syriac", "Devanagari": "Devanagari", "Japanese": "Japanese", "Bengali": "Bengali", "Armenian": "Armenian", "Sinhala": "Sinhala", "Tibetan": "Tibetan", "Vietnamese": "Vietnamese", "Gujarati": "Gujarati", "Traditional Chinese": "Traditional Chinese", "Georgian": "Georgian", "Gurmukhi": "Gurmukhi" }, "QScrollBar": { "Top": "Trên", "Scroll down": "Cuộn xuống", "Scroll here": "Cuộn ở đây", "Scroll left": "Cuộn trái", "Line up": "Dòng trên", "Line down": "Dòng dưới", "Bottom": "Dưới", "Page up": "Trang trên", "Position": "Vị trí", "Page right": "Trang phải", "Scroll up": "Cuộn lên", "Scroll right": "Cuộn phải", "Left edge": "Cạnh trái", "Page down": "Trang dưới", "Page left": "Trang trái", "Right edge": "Cạnh phải" }, "QFileDialog": { "Back": "Quay lại", "File": "Tập tin", "Open": "Mở", "&Open": "&Mở", "&Save": "&Lưu trữ", "Drive": "Ổ đĩa", "Show ": "Hiển thị ", "'%1' is write protected.\nDo you want to delete it anyway?": "'%1' được viết bảo vệ.\nBạn muốn xóa nó bằng mọi cách?", "File &name:": "&Tên tập tin", "New Folder": "Thư mục mới", "Parent Directory": "Thư mục cha", "&New Folder": "&Thư mục mới", "Remove": "Loại bỏ", "My Computer": "My Computer", "Look in:": "Xem qua:", "Files of type:": "Các tập tin kiểu:", "Find Directory": "Tìm Thư mục", "Show &hidden files": "Hiện tập tin ẩ&n", "Are sure you want to delete '%1'?": "Bạn có chắc muốn xóa '%1'?", "Save As": "Lưu với tên", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\nThư mục không tìm thấy.\nVui lòng kiểm lại chính xác tên thư mục đã nhập.", "List View": "Xem dạng danh sách", "&Choose": "&Chọn", "&Delete": "&Xóa", "All Files (*)": "Mọi tập tin (*)", "Directories": "Các thư mục", "&Rename": "Đổi &tên", "Could not delete directory.": "Không thể xóa thư mục này.", "Directory:": "Thư mục:", "Unknown": "Không biết", "%1 already exists.\nDo you want to replace it?": "%1 đã tồn tại.\nBạn có muốn thay thế nó không?", "Forward": "Chuyển tiếp", "Create New Folder": "Tạo thư mục mới", "Detail View": "Xem dạng chi tiết", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\nTập tin không tìm thấy.\nVui lòng kiểm lại chính xác tên tập tin đã nhập." }, "QLineEdit": { "Cu&t": "&Cắt ra", "&Copy": "&Sao chép", "&Redo": "&Làm lại", "&Undo": "&Hoàn tác", "&Paste": "&Dán vào", "Delete": "Xóa", "Select All": "Chọn tất cả" }, "QDockWidget": { "Dock": "Sáp nhập", "Close": "Đóng", "Float": "Tách rời" }, "QDialog": { "Done": "Hoàn tất", "What's This?": "Đây là gì?" }, "QWizard": { "Done": "Hoàn thành", "Help": "Trợ giúp", "&Help": "&Trợ giúp", "&Next": "&Tiếp theo", "Cancel": "Hủy bỏ", "Commit": "Xác nhận", "Continue": "Tiếp tục", "&Finish": "&Hoàn thành", "&Next >": "&Tiếp theo >", "Go Back": "Trở lại", "< &Back": "< &Quay lại" }, "QPageSetupWidget": { "Form": "Dạng", "bottom margin": "lề dưới", "Paper": "Giấy", "Paper source:": "Nguồn giấy", "Centimeters (cm)": "Xen-ti-met (cm)", "right margin": "lề phải", "Margins": "Canh lề", "Landscape": "Để Ngang", "Width:": "Rộng", "Orientation": "Hướng", "Portrait": "Để dọc", "top margin": "lề trên", "left margin": "lề trái", "Page size:": "Cỡ giấy", "Reverse portrait": "Đảo chiều dọc", "Millimeters (mm)": "Mi-li-met (mm)", "Points (pt)": "Điểm (pt)", "Inches (in)": "Inch (in)", "Reverse landscape": "Đảo chiều ngang", "Height:": "Cao" }, "QMdiSubWindow": { "Help": "Trợ giúp", "Menu": "Trình đơn", "&Move": "&Di chuyển", "&Size": "&Cỡ", "Close": "Đóng", "Minimize": "Thật nhỏ", "Shade": "Đổ bóng", "Stay on &Top": "Đặt trên &cùng", "&Close": "Đó&ng", "- [%1]": "- [%1]", "%1 - [%2]": "%1 - [%2]", "&Restore": "&Trả lại", "Restore": "Trả lại", "Maximize": "Thật lớn", "Unshade": "Không đổ bóng", "Mi&nimize": "Thật &nhỏ", "Ma&ximize": "Thật &lớn", "Restore Down": "Cho nhỏ lại" }, "QDirModel": { "Kind": "Dạng", "Name": "Tên", "Size": "Kích cỡ", "Type": "Kiểu", "Date Modified": "Ngày giờ sửa đổi" }, "QFileSystemModel": { "Kind": "Dạng", "Name": "Tên", "Size": "Kích cỡ", "Type": "Kiểu", "%1 GB": "%1 GB", "%1 KB": "%1 KB", "%1 MB": "%1 MB", "%1 TB": "%1 TB", "The name \"%1\" can not be used.

Try using another name, with fewer characters or no punctuations marks.": "Cái tên \"%1\" không dùng được.

Thử một tên khác với một vài ký tự hoặc các dấu chấm câu.", "%1 bytes": "%1 bytes", "My Computer": "My Computer", "Computer": "Computer", "Invalid filename": "Tên tập tin không hợp lệ", "Date Modified": "Ngày giờ sửa đổi" }, "QComboBox": { "Open": "Mở", "True": "True", "Close": "Đóng", "False": "False" }, "QUndoGroup": { "Redo": "Làm lại", "Undo": "Hoàn tác" }, "QUndoStack": { "Redo": "Làm lại", "Undo": "Hoàn tác" }, "QWhatsThisAction": { "What's This?": "Đây là gì?" }, "QAbstractSpinBox": { "Step &down": "&Giảm", "&Step up": "&Tăng", "&Select All": "Chọn &tất cả" }, "QTabBar": { "Scroll Left": "Cuộn trái", "Scroll Right": "Cuộn phải" }, "QUndoModel": { "": "" }, "QProgressDialog": { "Cancel": "Hủy bỏ" }, "QShortcut": { "Open URL": "Mở URL" }, "QMdiArea": { "(Untitled)": "(Không tên)" } } ================================================ FILE: translation/qt_zh-TW.json ================================================ { "QShortcut": { "+": "+", "CD": "CD 光碟", "Go": "前往", "No": "否", "Up": "上鍵", "Alt": "Alt", "F%1": "F%1", "Del": "刪除鍵 (Del)", "Cut": "剪下", "End": "End", "Esc": "Esc", "Ins": "插入鍵 (Ins)", "Tab": "Tab", "WWW": "網際網路", "Yes": "是", "Back": "返回", "Copy": "複製", "Ctrl": "Ctrl", "Down": "下鍵", "Flip": "反轉", "Help": "說明", "Home": "Home", "Left": "左鍵", "Menu": "選單", "Meta": "Meta", "PgUp": "PgUp", "Save": "儲存", "Send": "傳送", "Stop": "停止", "Time": "時間", "View": "檢視", "Split Screen": "切割螢幕", "Clear": "清除", "Close": "關閉", "Eject": "退出", "Enter": "Enter", "Music": "音樂", "Paste": "貼上", "Pause": "暫停鍵 (Pause)", "Right": "右鍵", "Shift": "Shift", "Sleep": "睡眠", "Tools": "工具", "Video": "影片", "Print Screen": "擷取螢幕 PrtSc", "Zoom In": "放大", "Scroll Lock": "捲動鎖定", "Media Pause": "暫停媒體", "Volume Down": "音量降低", "Volume Mute": "靜音", "Media Previous": "上一個媒體", "Home Page": "首頁", "Volume Up": "音量加大", "Menu PB": "選單 PB", "Delete": "刪除", "Escape": "Esc 鍵", "Insert": "插入", "Logoff": "登出", "Option": "選項", "PgDown": "PgDown", "Reload": "重新載入", "Return": "Return", "Search": "搜尋", "Select": "選擇", "NumLock": "數字鎖定", "Top Menu": "頂層選單", "ScrollLock": "捲動鎖定", "Zoom Out": "縮小", "Page Up": "往上一頁", "Open URL": "開啟網址", "Caps Lock": "大寫鎖定", "Code input": "輸入代碼", "Clear Grab": "清除痕跡", "CapsLock": "大寫鎖定", "Backtab": "Backtab", "Battery": "電池", "Refresh": "重新整理", "Browser": "瀏覽器", "Keyboard Menu": "鍵盤目錄", "Back Forward": "向後向前", "Backspace": "Backspace", "Standby": "待命", "Suspend": "暫停", "Display": "顯示器", "Subtitle": "字幕", "Bluetooth": "藍牙", "Num Lock": "數字鎖定", "Number Lock": "數字鎖定", "Terminal": "終端器", "Task Panel": "工作面板", "Favorites": "最愛", "Forward": "往前", "Page Down": "往下一頁", "Wake Up": "喚醒", "Power Off": "電源關閉" }, "QPageSetupWidget": { "Form": "表單", "bottom margin": "下邊緣", "Paper": "紙張", "Paper source:": "紙張來源:", "right margin": "右邊緣", "Margins": "邊緣", "Landscape": "橫印", "Width:": "寬度:", "Orientation": "方向", "Portrait": "直印", "top margin": "上邊緣", "left margin": "左邊緣", "Page size:": "頁面大小:", "Reverse portrait": "反向直印", "Millimeters (mm)": "毫米 (mm)", "Points (pt)": "點 (pt)", "Inches (in)": "英吋 (in)", "Reverse landscape": "反向橫印", "Height:": "高度:" }, "QDialogButtonBox": { "OK": "確定" }, "QErrorMessage": { "&OK": "確定(&O)", "Fatal Error:": "嚴重錯誤:", "&Show this message again": "再次顯示此訊息(&S)", "Debug Message:": "除錯訊息:", "Warning:": "警告:" }, "QFontDatabase": { "Any": "不指定", "Lao": "寮國", "Bold": "粗體", "Demi": "半體", "N'Ko": "西非書面語", "Thai": "泰語", "Black": "黑體", "Greek": "希臘", "Khmer": "高棉", "Latin": "拉丁", "Light": "細體", "Ogham": "歐甘文", "Oriya": "奧里亞語", "Runic": "盧恩文", "Tamil": "坦米爾", "Cyrillic": "斯拉夫", "Kannada": "坎達那", "Malayalam": "馬來語", "Simplified Chinese": "簡體中文", "Demi Bold": "半粗體", "Arabic": "阿拉伯", "Hebrew": "希伯來", "Myanmar": "緬甸", "Italic": "斜體", "Korean": "韓語", "Normal": "正常", "Oblique": "傾斜體", "Telugu": "泰盧固語", "Thaana": "塔納文", "Symbol": "符號", "Syriac": "敘利亞", "Devanagari": "梵文", "Japanese": "日語", "Bengali": "孟加拉", "Armenian": "亞美尼亞", "Sinhala": "錫蘭", "Tibetan": "西藏", "Vietnamese": "越南", "Gujarati": "古吉拉特語", "Traditional Chinese": "繁體中文", "Georgian": "喬治亞", "Gurmukhi": "古爾穆基字" }, "QScrollBar": { "Top": "頂端", "Scroll down": "往下捲動", "Scroll here": "在此捲動", "Scroll left": "往左捲動", "Bottom": "底端", "Page up": "頁面上方", "Page right": "頁面右方", "Scroll up": "往上捲動", "Scroll right": "往右捲動", "Left edge": "左邊緣", "Page down": "頁面下方", "Page left": "頁面左方", "Right edge": "右邊緣" }, "QFileDialog": { "Back": "返回", "File": "檔案", "Open": "開啟", "&Open": "開啟(&O)", "&Save": "儲存(&S)", "Alias": "別名", "Drive": "硬碟", "Show ": "顯示 ", "'%1' is write protected.\nDo you want to delete it anyway?": "「%1」有寫入保護。\n仍然刪除?", "File &name:": "檔名(&N):", "File Folder": "檔案資料夾", "New Folder": "新資料夾", "Folder": "資料夾", "Parent Directory": "父目錄", "&New Folder": "新增資料夾(&N)", "Remove": "移除", "My Computer": "我的電腦", "Look in:": "尋找於:", "Create a New Folder": "建立新資料夾", "Files of type:": "檔案型態:", "Find Directory": "尋找資料夾", "Show &hidden files": "顯示隱藏檔案(&H)", "Save As": "另存新檔", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "%1\n找不到目錄。\n請檢查提供的目錄名稱是否正確。", "List View": "列表檢視", "&Choose": "選擇(&C)", "&Delete": "刪除(&D)", "All Files (*)": "所有檔案 (*)", "Directories": "資料夾", "&Rename": "重新命名(&R)", "Could not delete directory.": "無法刪除資料夾。", "Directory:": "目錄:", "Unknown": "未知", "%1 already exists.\nDo you want to replace it?": "%1 已存在。\n是否取代?", "Forward": "往前", "Go forward": "往前", "Go to the parent directory": "前往父目錄", "Recent Places": "最近開啟位置", "Go back": "返回", "Change to detail view mode": "切換到詳細檢視模式", "Create New Folder": "建立新資料夾", "Shortcut": "捷徑", "Detail View": "詳細檢視", "%1\nFile not found.\nPlease verify the correct file name was given.": "%1\n找不到檔案。\n請檢查提供的檔名是否正確。", "Change to list view mode": "切換到列表檢視模式" }, "QLineEdit": { "Cu&t": "剪下(&T)", "&Copy": "複製(&C)", "&Redo": "重做(&R)", "&Undo": "復原(&U)", "&Paste": "貼上(&P)", "Delete": "刪除", "Select All": "全部選擇" }, "QWizard": { "Done": "完成", "Help": "說明", "&Help": "說明(&H)", "&Next": "下一個(&N)", "Cancel": "取消", "Commit": "提交", "Continue": "繼續", "&Finish": "完成(&F)", "&Next >": "下一個(&N) >", "Go Back": "往回", "< &Back": "<返回(&B)" }, "QMdiSubWindow": { "Help": "說明", "Menu": "選單", "&Move": "移動(&M)", "&Size": "大小(&S)", "Close": "關閉", "Minimize": "最小化", "Shade": "遮蔽", "Stay on &Top": "留在頂端(&T)", "&Close": "關閉(&C)", "- [%1]": "- [%1]", "%1 - [%2]": "%1 - [%2]", "&Restore": "還原(&R)", "Restore": "回復", "Maximize": "最大化", "Unshade": "取消遮蔽", "Mi&nimize": "最小化(&N)", "Ma&ximize": "最大化(&X)", "Restore Down": "向下恢復" }, "QDirModel": { "Kind": "種類", "Name": "名稱", "Size": "大小", "Type": "型態", "Date Modified": "變更日期" }, "QFileSystemModel": { "Kind": "種類", "Name": "名稱", "Size": "大小", "Type": "型態", "My Computer": "我的電腦", "Computer": "電腦", "Invalid filename": "檔名無效", "Date Modified": "修改日期" }, "QUndoGroup": { "Redo": "重做", "Undo": "復原", "Redo %1": "重做 %1", "Undo %1": "復原 %1" }, "QUndoStack": { "Redo": "重做", "Undo": "復原", "Redo %1": "重做 %1", "Undo %1": "復原 %1" }, "QComboBox": { "True": "真 (True)", "False": "假 (False)" }, "QDockWidget": { "Close": "關閉", "Float": "浮動" }, "QDialog": { "What's This?": "這是什麼?" }, "QWhatsThisAction": { "What's This?": "這是什麼?" }, "QMessageBox": { "Show Details...": "顯示詳情...", "Hide Details...": "隱藏詳情..." }, "QAbstractSpinBox": { "Step &down": "單步向下(&D)", "&Step up": "單步向上(&S)", "&Select All": "全部選擇(&S)" }, "QInputDialog": { "Enter a value:": "請輸入一個值:" }, "QTabBar": { "Scroll Left": "往左捲動", "Scroll Right": "往右捲動" }, "QUndoModel": { "": "<空白>" }, "QProgressDialog": { "Cancel": "取消" }, "MAC_APPLICATION_MENU": { "Hide Others": "隱藏其他", "Quit %1": "結束 %1", "About %1": "關於 %1", "Preferences...": "偏好設定…", "Services": "服務", "Hide %1": "隱藏 %1", "Show All": "顯示全部" }, "CloseButton": { "Close Tab": "關閉分頁" }, "QMdiArea": { "(Untitled)": "(未命名)" } } ================================================ FILE: translation/qt_zh.json ================================================ { "QShortcut": { "+": "+", "No": "否", "Up": "Up", "Alt": "Alt", "F%1": "F%1", "Del": "Del", "End": "End", "Esc": "Esc", "Ins": "Ins", "Tab": "Tab", "Yes": "是", "Back": "后退", "Ctrl": "Ctrl", "Down": "Down", "Flip": "翻转", "Help": "Help", "Home": "Home", "Left": "Left", "Menu": "Menu", "Meta": "Meta", "PgUp": "PgUp", "Stop": "停止", "Enter": "Enter", "Pause": "Pause", "Right": "Right", "Shift": "Shift", "Print Screen": "Print Screen", "Scroll Lock": "Scroll Lock", "Volume Down": "调小音量", "Volume Mute": "静音", "Media Previous": "上一个多媒体", "Home Page": "主页", "Volume Up": "调大音量", "Delete": "Delete", "Escape": "Escape", "Insert": "Insert", "PgDown": "PgDown", "Return": "Return", "Search": "搜索", "Select": "选择", "NumLock": "NumLock", "ScrollLock": "ScrollLock", "Page Up": "Page Up", "Open URL": "打开URL", "Caps Lock": "Caps Lock", "CapsLock": "CapsLock", "Backtab": "Backtab", "Refresh": "刷新", "Backspace": "Backspace", "Standby": "等待", "Num Lock": "Num Lock", "Number Lock": "Number Lock", "Favorites": "最喜爱的", "Forward": "前进", "Page Down": "Page Down" }, "QDialogButtonBox": { "OK": "确定", "&OK": "确定(&O)", "&No": "否(&N)", "&Yes": "是(&Y)", "Help": "帮助", "Open": "打开", "Save": "保存", "&Save": "保存(&S)", "Abort": "放弃", "Apply": "应用", "Close": "关闭", "Reset": "重置", "Retry": "重试", "Restore Defaults": "恢复默认", "&Close": "关闭(&C)", "Cancel": "取消", "Ignore": "忽略", "Close without Saving": "不保存关闭", "N&o to All": "全部否(&O)", "Save All": "保存全部", "&Cancel": "取消(&C)", "Discard": "抛弃", "Yes to &All": "全部是(&A)", "Don't Save": "不保存" }, "QMessageBox": { "OK": "确定", "Help": "帮助", "Show Details...": "显示细节……", "Hide Details...": "隐藏细节……" }, "QErrorMessage": { "&OK": "确定(&O)", "Fatal Error:": "致命错误:", "&Show this message again": "再次显示这个消息(&S)", "Debug Message:": "调试消息:", "Warning:": "警告:" }, "QFontDatabase": { "Any": "任意", "Lao": "老挝文", "Bold": "粗体", "Demi": "半体", "Thai": "泰国文", "Black": "黑体", "Greek": "希腊文", "Khmer": "谷美尔文", "Latin": "拉丁文", "Light": "轻体", "Ogham": "欧甘文", "Oriya": "奥里雅文", "Runic": "古北欧文", "Tamil": "泰米尔文", "Cyrillic": "西里尔文", "Kannada": "埃纳德文", "Malayalam": "马拉亚拉姆文", "Simplified Chinese": "简体中文", "Demi Bold": "半粗体", "Arabic": "阿拉伯文", "Hebrew": "希伯来文", "Myanmar": "缅甸文", "Italic": "意大利体", "Korean": "韩文", "Normal": "普通", "Oblique": "斜体", "Telugu": "泰卢固文", "Thaana": "马尔代夫文", "Symbol": "符号", "Syriac": "叙利亚文", "Devanagari": "梵文", "Japanese": "日文", "Bengali": "孟加拉文", "Armenian": "亚美尼亚文", "Sinhala": "僧伽罗文", "Tibetan": "藏文", "Vietnamese": "越南文", "Gujarati": "古吉拉特文", "Traditional Chinese": "繁体中文", "Georgian": "格鲁吉亚文", "Gurmukhi": "旁遮普文" }, "QScrollBar": { "Top": "顶部", "Scroll down": "向下滚动", "Scroll here": "滚动到这里", "Scroll left": "向左滚动", "Line up": "向上排列", "Line down": "向下排列", "Bottom": "底部", "Page up": "上一页", "Position": "位置", "Page right": "右一页", "Scroll up": "向上滚动", "Scroll right": "向右滚动", "Left edge": "左边缘", "Page down": "下一页", "Page left": "左一页", "Right edge": "右边缘" }, "QFileDialog": { "Back": "后退", "File": "文件", "Open": "打开", "&Open": "打开(&O)", "&Save": "保存(&S)", "Drive": "驱动器", "Show ": "显示 ", "'%1' is write protected.\nDo you want to delete it anyway?": "“%1“是写保护的。\n你还是想删除它么?", "File &name:": "文件名称(&N):", "New Folder": "新建文件夹", "Parent Directory": "父目录", "&New Folder": "新建文件夹(&N)", "Remove": "移除", "My Computer": "我的计算机", "Look in:": "查看:", "Files of type:": "文件类型:", "Find Directory": "查找目录", "Show &hidden files": "显示隐藏文件(&H)", "Are sure you want to delete '%1'?": "你确认你想删除“%1“?", "Save As": "另存为", "%1\nDirectory not found.\nPlease verify the correct directory name was given.": "目录%1\n没有找到。\n请核实已给定正确目录名。", "List View": "列表视图", "&Choose": "选择(&C)", "&Delete": "删除(&D)", "All Files (*)": "所有文件 (*)", "Directories": "目录", "All Files (*.*)": "所有文件 (*.*)", "&Rename": "重命名(&R)", "Could not delete directory.": "不能删除目录。", "Directory:": "目录:", "Unknown": "未知的", "%1 already exists.\nDo you want to replace it?": "%1已经存在。\n你想要替换它么?", "Forward": "前进", "Recent Places": "最近的地方", "Create New Folder": "创建新文件夹", "Detail View": "详细视图", "%1\nFile not found.\nPlease verify the correct file name was given.": "文件%1\n没有找到。\n请核实已给定正确文件名。" }, "QLineEdit": { "Cu&t": "剪切(&T)", "&Copy": "复制(&C)", "&Redo": "恢复(&R)", "&Undo": "撤消(&U)", "&Paste": "粘贴(&P)", "Delete": "删除", "Select All": "选择全部" }, "QDockWidget": { "Dock": "锚接", "Close": "关闭", "Float": "浮动" }, "QDialog": { "Done": "完成", "What's This?": "这是什么?" }, "QWizard": { "Done": "完成", "Help": "帮助", "&Help": "帮助(&H)", "&Next": "下一步(&N)", "Cancel": "取消", "Commit": "提交", "Continue": "继续", "&Finish": "完成(&F)", "&Next >": "下一步(&N) >", "Go Back": "返回", "< &Back": "< 上一步(&B)" }, "QPageSetupWidget": { "Form": "窗体", "bottom margin": "下边距", "Paper": "纸张", "Paper source:": "纸张源:", "Centimeters (cm)": "厘米 (cm)", "right margin": "右边距", "Margins": "边距", "Landscape": "横向", "Width:": "宽度:", "Orientation": "方向", "Portrait": "纵向", "top margin": "上边距", "left margin": "左边距", "Page size:": "纸张大小:", "Reverse portrait": "反向纵向", "Millimeters (mm)": "毫米 (mm)", "Points (pt)": "点 (pt)", "Inches (in)": "英寸 (in)", "Reverse landscape": "反向横向", "Height:": "高度:" }, "QMdiSubWindow": { "Help": "帮助", "Menu": "菜单", "&Move": "移动(&M)", "&Size": "大小(&S)", "Close": "关闭", "Minimize": "最小化", "Shade": "遮蔽", "Stay on &Top": "总在最前(&T)", "&Close": "关闭(&C)", "- [%1]": "- [%1]", "%1 - [%2]": "%1 - [%2]", "&Restore": "恢复(&R)", "Restore": "恢复", "Maximize": "最大化", "Unshade": "取消遮蔽", "Mi&nimize": "最小化(&N)", "Ma&ximize": "最大化(&X)", "Restore Down": "向下恢复" }, "QDirModel": { "Kind": "类型", "Name": "名称", "Size": "大小", "Type": "类型", "Date Modified": "日期被修改" }, "QFileSystemModel": { "Kind": "类型", "Name": "名称", "Size": "大小", "Type": "类型", "%1 GB": "%1 GB", "%1 KB": "%1千字节", "%1 MB": "%1 MB", "%1 TB": "%1 TB", "The name \"%1\" can not be used.

Try using another name, with fewer characters or no punctuations marks.": "名称“%1“不能被使用。

请使用另外一个包含更少字符或者不含有标点符号的名称。", "%1 bytes": "%1字节", "My Computer": "我的计算机", "Computer": "计算机", "Invalid filename": "无效文件名", "Date Modified": "日期被修改" }, "QComboBox": { "Open": "打开", "True": "真", "Close": "关闭", "False": "假" }, "QUndoGroup": { "Redo": "恢复", "Undo": "撤销" }, "QUndoStack": { "Redo": "恢复", "Undo": "撤销" }, "QWhatsThisAction": { "What's This?": "这是什么?" }, "QAbstractSpinBox": { "Step &down": "减少(&D)", "&Step up": "增加(&S)", "&Select All": "选择全部(&S)" }, "QInputDialog": { "Enter a value:": "输入一个值:" }, "QTabBar": { "Scroll Left": "向左滚动", "Scroll Right": "向右滚动" }, "QUndoModel": { "": "<空白>" }, "QProgressDialog": { "Cancel": "撤消" }, "MAC_APPLICATION_MENU": { "Hide Others": "隐藏其他", "Quit %1": "退出 %1", "About %1": "关于 %1", "Preferences...": "偏好设置…", "Services": "服务", "Hide %1": "隐藏%1", "Show All": "全部显示" }, "CloseButton": { "Close Tab": "关闭标签页" }, "QMdiArea": { "(Untitled)": "(未命名的)" } } ================================================ FILE: translation/tr_ar.hdl ================================================ { "lang": "ar", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "Folders must be more than one if \"Exclude same sources\" is turned on", "#Cancel#": "Cancel", "#EB#": "{} EB", "#EMPTY#": "Empty (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "OK", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "Appearance", "#boss_invalid_pw#": "Invalid password!", "#boss_pw#": "Password:", "#byte#": "{} byte", "#bytes#": "{} bytes", "#click#": "Click", "#combo_hour#": "{} Hour", "#combo_hours#": "{} Hours", "#combo_min#": "{} Min", "#combo_mins#": "{} Mins", "#combo_sec#": "{} Sec", "#combo_secs#": "{} Secs", "#date01#": "Jan {d}", "#date01y#": "Jan {d}, {y}", "#date02#": "Feb {d}", "#date02y#": "Feb {d}, {y}", "#date03#": "Mar {d}", "#date03y#": "Mar {d}, {y}", "#date04#": "Apr {d}", "#date04y#": "Apr {d}, {y}", "#date05#": "May {d}", "#date05y#": "May {d}, {y}", "#date06#": "Jun {d}", "#date06y#": "Jun {d}, {y}", "#date07#": "Jul {d}", "#date07y#": "Jul {d}, {y}", "#date08#": "Aug {d}", "#date08y#": "Aug {d}, {y}", "#date09#": "Sep {d}", "#date09y#": "Sep {d}, {y}", "#date10#": "Oct {d}", "#date10y#": "Oct {d}, {y}", "#date11#": "Nov {d}", "#date11y#": "Nov {d}, {y}", "#date12#": "Dec {d}", "#date12y#": "Dec {d}, {y}", "#developed_by#": "Developed by Kurt Bestor", "#dirformat_artist#": "Some artist", "#dirformat_group#": "Some group", "#dirformat_lang#": "English", "#dirformat_series#": "Some series", "#dirformat_title#": "Some title", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "All Files {}", "#filter_bmk#": "Bookmark Files {}", "#filter_cookie#": "Netscape HTTP Cookie Files (*.txt)", "#filter_hdfb#": "Hitomi Downloader Filter bookmarks {}", "#filter_hdk#": "Hitomi Downloader Shortcuts {}", "#filter_hdl#": "Hitomi Downloader Linguist {}", "#filter_hds#": "Hitomi Downloader Scripts {}", "#filter_hdt#": "Hitomi Downloader Tasks {}", "#filter_image#": "Images {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "Browser required; Use --safemode", "#invalid_loginRequired#": "Login required; Update your cookies", "#invalid_loginRequired2#": "Login required; Please login", "#invalid_outdatedExtension#": "Extension is outdated; Update the extension", "#invalid_unknownSite#": "Unknown site", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "Loading: {}", "#new_group#": "New group", "#new_item#": "New Item", "#p#": "{}p", "#recomm_all_langs#": "All languages", "#recomm_artist#": "Artist", "#recomm_main#": "It analyzes the galleries in the download folder and recommends artists.\n\nThe accuracy shown in the results is within the given galleries.\nThe more galleries you have, the better (100+ is recommended).\n\nYou currently have {item} galleries:", "#recomm_score#": "Score", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "Every", "#setting_autosaveR#": "", "#setting_incompleteL#": "After", "#setting_incompleteR#": "", "#t_etc#": "Etc", "#t_file#": "File", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "Blue", "#tag_gray#": "Gray", "#tag_green#": "Green", "#tag_orange#": "Orange", "#tag_purple#": "Purple", "#tag_red#": "Red", "#tag_yellow#": "Yellow", "#task_artist#": "Artist", "#task_date#": "Date", "#task_done#": "Done", "#task_folder#": "Folder", "#task_incomplete#": "Incomplete", "#task_input#": "Input", "#task_invalid#": "Invalid", "#task_multiple#": "Multiple", "#task_range#": "Range", "#task_single#": "Single", "#task_site#": "Site", "#task_status#": "Status", "#task_title#": "Title", "#task_type#": "Type", "#task_url#": "URL", "#task_zipfile#": "ZipFile", "#torrent_anon#": "A generic user-agent will be used for trackers (except for private torrents).
Your local IPv4 and IPv6 address won't be sent as query string parameters to private trackers.
If announce_ip is configured, it will not be sent to trackers.
The client version will not be sent to peers in the extension handshake.
The DHT node will be disabled.", "#translation#": "Translation", "50개씩 끊어서 검색": "ابحث في تقسيمات عن 50 لكل منهما", "DPI 우회": "تجاوز DPI", "DPI 우회 제외 도메인": "Domains excluded from DPI bypass", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "تم إيقاف تشغيل \"Bypass DPI\". قد لا يعمل في بعض المواقع.", "E(x)Hentai 로그인 쿠키 필요": "E (x) مطلوب ملفات تعريف ارتباط تسجيل دخول Hentai", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "عنوان IP الخاص بك مغلق مؤقتًا. يرجى المحاولة مرة أخرى في لحظة", "PDF 생성": "إنشاء قوات الدفاع الشعبي", "UI 스케일 ({}%)": "مقياس واجهة المستخدم ({}٪)", "URL을 입력하세요": "الرجاء كتابة بعض عناوين المواقع", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "اضغط [تنزيل] للتنزيل. اضغط [موافق] للخروج.", "reCAPTCHA 풀기": "حل reCAPTCHA", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {day}d {hour}h {min}m {sec}s: {id}", "{hour}시간 {min}분 {sec}초": "{hour}h {min}m {sec}s", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "أعد التشغيل بعد {hour}h {min}m {sec}s: {id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "أعد التشغيل خلال {min}m {sec}s: {id}", "{sec}초 뒤 다시 시작: {id}": "أعد التشغيل خلال {sec}s: {id}", "{} 개 선택": "تم تحديد {} عنصر", "{} 개 찾음": "{} تأسست", "{} 개의 작업들이 있습니다": "هناك {} مهمة", "{} 개의 진행 중인 작업이 있습니다.": "هناك {} مهمة قيد التقدم.", "{} 를 제외 태그에 추가했습니다": "Added {} to the exclusion tag list", "{} 설정": "{} التفضيلات", "{} 시간 뒤 다시 시작": "Restart in {} hours", "{} 시간 전 데이터": "بيانات؛ {} منذ ساعات", "{} 일 뒤 다시 시작": "Restart in {} days", "{} 일 전 데이터": "بيانات؛ {} أيام مضت", "{}개 작업의 첫 번째 파일을 엽니다.": "Open first files for each {} tasks.", "{}개의 불완전한 작업을 다시 시작합니다.": "أعد تشغيل {} مهمة غير مكتملة.", "{}개의 완료된 작업을 목록에서 제거합니다.": "إزالة {} المهام الكاملة من القائمة.", "{}개의 완료된 작업을 제거합니다.": "إزالة {} المهام المكتملة.", "{}개의 작업을 다시 시작합니다.": "أعد تشغيل {} المهام.", "『 {} 』는 이미 북마크되어 있습니다": "『 {} 』 تم وضع إشارة عليه بالفعل", "『 {} 』를 복사했습니다": "『 {} 』 نُسخ", "『 {} 』를 북마크로부터 불러왔습니다": "『 {} 』 تم تحميله من الإشارات المرجعية", "『 {} 』를 북마크에서 불러왔습니다": "『 {} 』 تم تحميله من الإشارات المرجعية", "『 {} 』를 북마크했습니다": "『 {} 』 إشارة مرجعية", "『 {} 』를 저장 폴더에서 불러왔습니다": "『 {} 』 تم تحميله من مجلد التنزيل", "가능하면 일본어 제목 사용": "استخدم العنوان الياباني إذا كان متاحًا", "가능한 경우 챕터 마커 추가": "Add chapter markers if available", "가져오기": "يستورد", "가져오기 실패": "فشل الاستيراد", "간단 검색": "بحث بسيط", "같은 소스 제외": "Exclude same sources", "개": "العناصر", "개별 다운로드는 지원하지 않습니다": "لا يتم دعم تنزيل منشور واحد", "갤러리 넘버": "معرف المعرض", "갤러리 넘버 복사": "نسخ معرف المعرض", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "حدث خطأ أثناء نسخ معرفات المعرض.", "갤러리 작업 정보... (&I)": "معلومات المعرض ... (&I)", "갤러리 정보": "معلومات المعرض", "갤러리 정보 파일 (info.txt) 생성": "إنشاء ملف معلومات المعرض (info.txt)", "갯수": "عدد", "갱신 간격": "Refresh interval", "거꾸로": "عكس", "검색": "يبحث", "검색 데이터": "بيانات البحث", "검색 도중에 사용할 수 없는 기능입니다.": "هذه الوظيفة مقفلة أثناء البحث.", "검색 범위": "نطاق البحث", "검색 순서": "ترتيب البحث", "검색 필터": "تصفية البحث", "검색기": "باحث", "검색어": "كلمات البحث", "검색어 자동 완성": "الكلمات الرئيسية الإكمال التلقائي", "결과": "نتيجة", "결과 저장": "احفظ النتيجة", "경고 없이 삭제": "حذف بدون تنبيه", "경로를 선택하세요": "اختر مسارًا", "계속 검색": "ابحث بعد ذلك", "계정": "اسم المستخدم", "계정 / 패스워드": "اسم المستخدم كلمة المرور", "고급": "متقدم", "고급 검색": "البحث المتقدم", "고급 옵션": "Advanced options", "고정": "دبوس", "고정 해제": "فك", "공식 스크립트 && 플러그인": "Official scripts && plugins", "공인 IP: {}": "Public IP: {}", "관리자 권한 없이 실행": "تشغيل بدون امتيازات المسؤول", "관리자 권한 필요": "امتيازات المسؤول المطلوبة", "광고 스킵": "Skip ads", "그대로": "طبيعي", "그룹": "مجموعات", "그룹 (Groups)": "مجموعات", "그룹 안의 모든 작업 다시 시작": "أعد تشغيل جميع المهام في هذه المجموعة", "그룹 이름": "أسم المجموعة", "그룹 펼치기 / 접기": "Expand / Collapse groups", "그룹 합쳐서 불러오기": "قم بتحميل كل المجموعات معًا", "그룹명 복사 (&G)": "نسخ أسماء المجموعة (&G)", "그룹으로 이동": "انتقل إلى المجموعة", "그룹을 포함하는 그룹은 만들 수 없습니다.": "لا يمكن أن تحتوي المجموعات على مجموعات.", "그룹이 없습니다": "لا مجموعات", "기본": "تقصير", "기본 데이터": "البيانات الافتراضية", "기본 데이터 다운로드": "تنزيل البيانات الافتراضية", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "يمكنك إنشاء مجموعة في وضع الفرز الافتراضي فقط.", "기본값": "القيمة الافتراضية", "기타": "إلخ.", "깊은 모델": "نموذج عميق", "끝내기": "يترك", "날짜": "تاريخ", "낮음": "قليل", "내보내기": "يصدّر", "내보내기 실패": "فشل التصدير", "내용 보기": "عرض البرنامج النصي", "내장 웹브라우저": "متصفح الويب المدمج", "내장 이미지 뷰어": "عارض الصور المدمج", "네트워크": "شبكة الاتصال", "녹화": "Recording", "녹화 중...": "تسجيل...", "녹화 중지": "إيقاف التسجيل", "높음": "عالٍ", "다른 동영상 사이트에도 적용됩니다.": "ينطبق أيضًا على مواقع الفيديو الأخرى.", "다시 시작 (&S)": "إعادة (&S)", "다시 시작 실패; 복구됨": "فشل في إعادة المحاولة ؛ التراجع", "다운로드": "تحميل", "다운로드 & 제거": "تنزيل & إزالة", "다운로드 && 제거": "تنزيل && إزالة", "다운로드 (&D)": "تنزيل (&D)", "다운로드 날짜 표시": "إظهار التواريخ التي تم تنزيلها", "다운로드 속도": "سرعة التنزيل", "다운로드 완료": "تم التحميل", "다운로드 완료 후 자동 제거": "إزالة تلقائيا بعد التحميل الكامل", "다운로드 일시 정지 / 재개": "تنزيل Pause / Resume", "다운로드 중": "Downloading", "다운로드가 완료되면 알림": "إظهار الإخطار عند انتهاء التنزيل", "다운로드가 완료될 때까지 절전모드 방지": "Prevent system sleep until downloads are finished", "다운로드하기 전에 파일 고르기": "حدد الملفات قبل التنزيل", "다운로드하지 않음": "لا تقم بالتحميل", "다운로드한 작품만": "المعارض التي تم تنزيلها فقط", "다음 검색시 더 빠르게 검색": "تحسين الأداء في المرة القادمة", "다음 작업들이 목록에서 제거됩니다:": "The following tasks will be removed from the list:", "다음 파일들이 삭제됩니다:": "The following files will be deleted:", "다크 모드": "الوضع المظلم", "단일 파일": "ملف واحد", "단축키": "الاختصارات", "단축키 내보내기": "Export Shortcuts", "단축키 내보내기 성공": "تم تصدير الاختصارات بنجاح", "단축키 불러오기": "Import Shortcuts", "단축키 불러오기 성공": "تم استيراد الاختصارات بنجاح", "단축키 수정": "تحرير الاختصارات", "단축키 초기화 성공": "تم إعادة تعيين الاختصارات بنجاح", "닫기 버튼으로 트레이로 최소화": "زر الإغلاق يقلل من علبة النظام", "대기 중": "Waiting", "대기 중...": "منتظر...", "데이터 다운로더": "Data Downloader", "데이터 분류 중...": "تصنيف البيانات ...", "데이터 분석 중...": "تحليل البيانات...", "데이터 없음": "No Data", "데이터 읽는 중...": "قراءة البيانات ...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "لا توجد بيانات. \n الرجاء تحميل البيانات من القائمة.", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "لا توجد بيانات. \n الرجاء تحميل البيانات من الباحث", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "بياناتك قديمة خلال أسبوع. \n الرجاء تحديث البيانات.", "데이터를 다운로드하는 도중에 실패했습니다.": "فشل تحميل البيانات", "데이터를 모두 받았습니다!": "تم تنزيل جميع البيانات!", "도구": "أدوات", "도구창": "نافذة الأداة", "도움말": "يساعد", "동영상": "فيديو", "동영상 변환...": "تحويل الفيديو...", "뒤 100 페이지": "آخر 100 صفحة", "드래그 & 드랍해서 바꾸세요:": "استخدم السحب والإفلات للتغيير:", "디더링": "ثبات", "디버그": "تصحيح", "디스코드": "الخلاف", "라이선스": "رخصة", "랜덤으로 하나 선택": "اختر واحدة بشكل عشوائي", "로그...": "سجل...", "로그인": "تسجيل الدخول", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "فشل تسجيل الدخول: {} {} \n يرجى الاطلاع على [الخيارات - التفضيلات - إعداد Pixiv - تسجيل الدخول].", "로그인 중...": "تسجيل الدخول...", "로그인 테스트": "اختبار تسجيل الدخول", "로드 중: {}": "Loading: {}", "로컬 파일 감지": "كشف الملفات المحلية", "로컬 파일로부터 새 작업 만들기": "قم بإنشاء مهمة جديدة من الملفات المحلية", "를 북마크에서 지웠습니다": "تمت إزالته من الإشارات المرجعية", "리트윗 제외": "Exclude retweets", "리트윗 포함": "ضمّن إعادة التغريد", "릴리즈 노트": "أصدر مذكرة", "링크 열기": "افتح الرابط", "링크 주소 복사": "انسخ الرابط", "링크 주소 복사 (&C)": "نسخ الرابط (&C)", "마무리 중...": "إنهاء...", "멈춤": "Stopped", "메뉴": "قائمة", "메모리 사용량": "استخدام الذاكرة", "메모리 사용량 표시": "إظهار استخدام الذاكرة", "메시지 상자": "Message box", "모델": "نموذج", "모델 생성 중...": "إنشاء نموذج ...", "모델: {}": "نموذج: {}", "모두": "الجميع", "모두 삭제": "حذف الكل", "모두 선택": "اختر الكل", "모든 갤러리 넘버를 복사했습니다.": "نسخ جميع معرفات المعرض.", "모든 언어": "كل اللغات", "모든 작업 완료": "All tasks complete", "모든 작업 완료 후": "When all tasks are complete", "모든 작업이 완료되면 알림 보이기": "Show notifications when all tasks are complete", "목록": "قائمة", "목록 주소를 입력해주세요": "الرجاء كتابة عنوان URL للقائمة", "목록 지우기": "لائحة خالية", "목록에서 제거": "إزالة من القائمة", "목록에서 폴더 제거": "قم بإزالة المجلد من القائمة", "목록을 모두 지울까요?": "هل أنت متأكد أنك تريد مسح القائمة؟", "미리보기": "معاينة", "미리보기 크기": "معاينة الحجم", "배경 이미지": "Background image", "배경 이미지 변경": "Change background image", "배경 이미지 초기화": "Reset background image", "버전 확인": "تفقد التحديث", "번역": "ترجمة", "베타 버전 설치": "Install beta versions", "변경할 최대 크기": "أكبر مقاس", "변경할 최소 크기": "الحد الأدنى لحجم", "변환 중...": "جاري التحويل ...", "보기": "رأي", "보통": "طبيعي", "부팅 시 실행": "ابدأ من التمهيد", "북마크": "إشارات مرجعية", "북마크 가져오기": "استيراد الإشارات المرجعية", "북마크 가져오기 실패": "فشل استيراد الإشارات المرجعية", "북마크 내보내기": "تصدير الإشارات المرجعية", "북마크 내보내기 실패": "فشل تصدير الإشارات المرجعية", "북마크를 가져왔습니다": "يتم استيراد الإشارات المرجعية", "북마크를 내보냈습니다": "يتم تصدير الإشارات المرجعية", "북마크를 모두 삭제합니다.": "إزالة كافة الإشارات المرجعية.", "북마크를 모두 삭제했습니다.": "تمت إزالة كافة الإشارات المرجعية.", "불러오기": "حمل", "불완전한 작업 모두 다시 시작": "أعد تشغيل جميع المهام غير المكتملة", "불완전한 작업 자동으로 다시 시작": "أعد تشغيل المهام غير المكتملة تلقائيًا", "붙여넣고 다운로드": "لصق وتنزيل", "뷰어... (&V)": "&Viewer...", "브라우저로 보기": "إظهار في المتصفح", "브라우저로 보기 (&B)": "إظهار في المستعرض (&B)", "비디오 코덱 우선순위": "Video codec priority", "비슷한 이미지 포함 (느림)": "تضمين صور متشابهة (بطيئة)", "비율 유지": "ابعاد متزنة", "비율 유지 - 꽉 차게": "نسبة العرض إلى الارتفاع - ملء", "비정상적인 로그인 시도": "محاولة تسجيل دخول غير طبيعية", "빠른 시작을 위한 작업 레이지 로딩": "مهام التحميل الكسول للبدء السريع", "빠른 실행 도구 모음 사용자 지정": "تخصيص شريط أدوات الوصول السريع", "뽑기": "عشوائي", "뽑을 갯수": "عدد المعارض", "사용법": "كيف تستعمل", "사용법...": "كيف تستعمل...", "사용자 지정 테마 색": "لون المظهر المخصص", "사이드바": "Sidebar", "사이트": "موقع", "사이트 추가": "دعم الموقع", "사이트를 추가했습니다": "تمت إضافة دعم الموقع", "삭제된 데이터": "البيانات المحذوفة", "삭제된 데이터 다운로드": "تنزيل البيانات المحذوفة", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "لا توجد بيانات محذوفة. \n الرجاء تحميل البيانات من القائمة.", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "فشل تنزيل البيانات المحذوفة", "삭제된 데이터를 모두 받았습니다!": "اكتمل التنزيل: البيانات المحذوفة", "삭제시 휴지통으로 보냄": "استخدم سلة المهملات", "상태": "حالة", "새 그룹 만들기": "أنشئ مجموعة جديدة", "새 버전이 있습니다. 업데이트 하실래요?": "هناك نسخة جديدة. هل ترغب في تحديث؟", "새로고침": "تحديث", "샘플": "Sample", "서명": "شهادة", "서버": "الخادم", "선택 화 다운로드": "حدد الفصول وتنزيلها", "선택된 작업들 내보내기": "تصدير المهام المحددة", "선택된 작업이 없습니다": "لا توجد مهام محددة", "선택하세요:": "Select:", "선택한 항목 중에서 자동 선택": "تحديد تلقائي ضمن العناصر المحددة", "선호 언어": "Preferred language", "설명": "تعليق", "설정": "التفضيلات", "설정 (Preferences)": "التفضيلات", "설정을 따름": "اتبع التفضيلات", "성공: {}\n실패: {}": "نجاح: {} \n فشل: {}", "소리": "Sound", "수동": "كتيب", "수동 업데이트": "كتيب", "수정...": "تعديل...", "순서 변경": "إعادة ترتيب", "숨김 키": "مفتاح بوس", "숫자": "رقم", "스레드": "الخيوط", "스레드 생성 중...": "بدء المواضيع ...", "스크롤 속도 ({}x)": "سرعة التمرير ({}x)", "스크립트": "النصي", "스크립트 가져오기": "نص استيراد", "스크립트 작성법": "How to write a script", "스크립트를 실행하시겠습니까?": "هل أنت متأكد أنك تريد تشغيل هذا البرنامج النصي؟", "스크립트를 읽는 중 오류가 발생했습니다": "حدث خطأ أثناء قراءة البرنامج النصي", "스토리 읽는 중...": "قراءة القصص ...", "스토리 포함": "قم بتضمين القصص", "시딩": "البذر", "시딩 중지": "توقف عن البذر", "시딩 하지 않음": "لا بذر", "시리즈": "مسلسل", "시리즈 (Series)": "مسلسل", "시리즈가 없습니다": "ليس هناك سلسلة", "시리즈명 복사 (&S)": "نسخ أسماء السلاسل (&S)", "시스템": "نظام", "시스템 설정 사용": "Use system setting", "시스템 종료": "Shutdown System", "시스템 트레이": "علبة النظام", "시작 후 다운로드": "تنزيل هذا المدى", "시작 후 지난 시간": "الوقت المنقضي في هذا المدى", "실패": "يفشل", "실험 기능": "تجريبي", "썸네일": "ظفري", "썸네일 고정": "إصلاح الصورة المصغرة", "썸네일 다운로드": "Download thumbnails", "썸네일 숨기기": "إخفاء الصور المصغرة", "썸네일 크기": "حجم الصورة المصغرة", "썸네일을 선택하세요": "اختر صورة مصغرة", "아니오(&N)": "&رقم", "아무것도 안 함": "Do nothing", "아이콘": "أيقونة", "압축": "ضغط", "압축 형식": "شكل", "압축파일 연결 프로그램": "افتح الملفات المضغوطة بواسطة", "앞 100 페이지": "أول 100 صفحة", "얕은 모델": "نموذج ضحل", "언어": "لغة", "언어 (Language)": "لغة", "언어 (Languages)": "اللغات", "업데이트": "تحديث", "업데이트 중...": "جارٍ التحديث ...", "업데이트 체크 중...": "البحث عن تحديثات...", "업로드": "رفع", "연결 프로그램 변경": "اختر البرنامج الذي تريد فتحه", "열기": "يفتح", "예(&Y)": "&نعم", "예상치 못한 오류로 다운로드에 실패했습니다.": "فشل التنزيل بسبب خطأ غير متوقع.", "예시": "مثال", "오디오 코덱 우선순위": "Audio codec priority", "오디오 트랙": "Audio track", "오류": "خطأ", "올바르지 않은 범위입니다": "نطاق غير صالح", "올바르지 않은 주소입니다": "URL غير صالح", "올바르지 않은 형식의 검색 필터입니다": "خطأ في بناء الجملة غير صالح مع عامل التصفية", "올바르지 않은 형식의 스크립트입니다": "نص برمجي بتنسيق غير صالح", "옵션": "خيارات", "옵션 (JSON 포맷)": "Options (JSON format)", "옵션 (Options)": "خيارات", "완료": "تم الانتهاء من", "완료된 작업 모두 제거": "قم بإزالة جميع المهام الكاملة", "완료됨으로 표시": "وضع علامة كمكتمل", "완전 삭제": "الحذف بشكل نهائي", "우선순위": "أولوية", "우선순위 변경": "Change priority", "움짤": "أوغويرا", "움짤 변환...": "تحويل Ugoira ...", "원본": "أصلي", "원본 이미지 다운로드": "تنزيل الصور الأصلية", "원본 크기보다 크게 바뀌지는 않습니다": "الحجم لن يكون أكبر من الحجم الأصلي", "원본 파일 삭제": "احذف الملفات التي تم تنزيلها", "원하는 인공신경망 모델을 고르세요:": "اختر نموذج الشبكة العصبية الاصطناعية الذي تريده:", "웹브라우저": "WebBrowser", "웹툰 제외": "استبعاد Webtoons", "유사도": "تشابه", "유튜브": "موقع YouTube", "유효하지 않은 계정 / 패스워드입니다": "الحساب / كلمة المرور غير صحيحة", "유효한 계정입니다": "حساب صالح", "음소거": "صامت", "음악 파일에 앨범아트 삽입": "أضف غلاف الألبوم إلى ملفات الصوت", "음원": "صوتي", "음질": "جودة الصوت", "이동": "يتحرك", "이동할 수 없습니다: {}": "لا يمكن التحريك: {}", "이름": "اسم", "이름 변경": "إعادة تسمية", "이름을 얻는 도중 실패했습니다": "فشلت قراءة الاسم", "이미 다운로드한 작품 제외": "استبعاد المعارض التي تم تنزيلها بالفعل", "이미 모든 그룹이 추가되어 있습니다": "All groups have already been added", "이미 모든 시리즈가 추가되어 있습니다": "All series have already been added", "이미 모든 작가가 추가되어 있습니다": "All artists have already been added", "이미 모든 캐릭터가 추가되어 있습니다": "All characters have already been added", "이미 추가한 작업 다시 시작할지 물어봄": "اطلب إعادة محاولة المهام الموجودة بالفعل في القائمة", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "هذه المهمة موجودة بالفعل في القائمة. هل تريد تنزيله مرة أخرى؟", "이미 추가한 플러그인입니다": "هذا البرنامج المساعد موجود بالفعل في القائمة", "이미 포함하는 그룹이 있습니다.": "توجد بالفعل مجموعة تتضمن المهام.", "이미지": "صورة", "이미지 정보 캐시": "معلومات ذاكرة التخزين المؤقت للصور", "이미지 포맷 변환": "تغيير تنسيق الصورة", "이미지를 읽는 중 실패": "فشل في قراءة الصور", "익명 모드": "وضع مجهول", "인코딩": "التشفير", "일반": "عام", "일시 정지": "Pause", "읽기 중지": "التوقف عن القراءة", "읽는 중...": "قراءة...", "자동": "آلي", "자동 녹화": "Auto recording", "자동 새로고침 & 스크롤": "التحديث التلقائي والتمرير", "자동 생성 자막 포함": "Include automatic captions", "자동 선택": "اختيار آلي", "자동 업데이트": "تلقائي", "자동 저장": "الحفظ التلقائي", "자막": "العنوان الفرعي", "자세한 정보": "Details", "자세한 정보 보기": "اظهر التفاصيل", "작가": "الفنانين", "작가 (Artists)": "الفنانين", "작가 이름": "اسم فنان", "작가 추천": "يوصي الفنانين", "작가 합쳐서 불러오기": "قم بتحميل كل الفنانين معًا", "작가가 없습니다": "لا يوجد فنانين", "작가명 복사 (&A)": "نسخ أسماء الفنانين (&A)", "작게": "صغير", "작성자": "مؤلف", "작업": "مهام", "작업 개수": "عدد المهام", "작업 기록": "Task history", "작업 기록 초기화 성공": "Task history cleared successfully", "작업 기록이 없습니다": "No task history", "작업 당 최대 연결": "Maximum connections per task", "작업 만들기 실패": "Failed to create tasks", "작업 목록 폭": "Task list width", "작업 수정": "تحرير المهمة", "작업 수정...": "تحرير المهمة ...", "작업 완료": "Task complete", "작업 완료 후": "After task complete", "작업 왼쪽에서 순서 변경": "أعد الترتيب على الجانب الأيسر", "작업 용량": "حجم ملف المهام", "작업 정보": "معلومات", "작업 정보... (&I)": "معلومات ... (&I)", "작업 타입?": "نوع المهمة؟", "작업들 가져오기": "استيراد المهام", "작업들 내보내기": "تصدير المهام", "작업들을 가져올까요?": "هل تريد استيراد المهام؟", "작업들을 가져왔습니다": "تم استيراد المهام", "작업들을 내보냈습니다": "تصدير المهام", "작업이 아직 완료되지 않았습니다": "المهمة لم تنته بعد", "작업이 완료되면 알림 보이기": "Show notifications when tasks are complete", "작품 목록 가져오기": "قائمة معرض الاستيراد", "작품 목록 내보내기": "قائمة معرض التصدير", "잠금": "قفل", "잠금 해제": "الغاء القفل", "장": "الصفحات", "재개": "Resume", "재시작 후 적용됩니다": "يسري بعد إعادة التشغيل", "저사양 모드": "وضع المواصفات المنخفضة", "저장": "يحفظ", "저장 && 종료": "حفظ && إنهاء", "저장 실패": "فشلت في انقاذ", "저장 완료": "أنقذ", "저장 중...": "إنقاذ...", "저장 폴더": "مجلد التحميل", "저장 폴더 변경...": "تغيير مجلد التنزيل ...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "انسخ جميع معرفات المعرض في مجلد التنزيل", "저장 폴더에 있는 모든 작가 불러오기": "قم بتحميل كل الفنانين في مجلد التنزيل", "저장... (&S)": "&يحفظ...", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "لا يوجد ملف تكوين ؛ اضغط على [F1] لقراءة \"كيفية الاستخدام \"", "적어도 {} 개의 작품이 필요합니다.": "مطلوب على الأقل {} من المعارض.", "점수": "نتيجة", "정규식 문법": "بناء جملة Regex", "정규식으로 찾기": "البحث عن طريق Regex", "정렬 기준": "ترتيب حسب", "정말 단축키를 초기화하시겠습니까?": "هل أنت متأكد أنك تريد إعادة تعيين الاختصارات؟", "정말 목록에서 제거하시겠습니까?": "هل أنت متأكد أنك تريد إزالة من القائمة؟", "정말 삭제하시겠습니까?": "هل أنت متأكد أنك تريد حذف؟", "정말 설정을 초기화하시겠습니까?": "Are you sure you want to reset the preferences?", "정말 작업 기록을 초기화하시겠습니까?": "Are you sure you want to clear task history?", "정말 종료하시겠습니까?": "هل أنت متأكد من أنك تريد الخروج؟", "정말 중지하시겠습니까?": "هل أنت متأكد أنك تريد التوقف؟", "정말 쿠키를 초기화하시겠습니까?": "هل أنت متأكد أنك تريد مسح ملفات تعريف الارتباط؟", "정보": "عن", "정보...": "عن...", "정확도": "صحة", "제거": "يزيل", "제목": "لقب", "제목 (Title)": "لقب", "제목 복사 (&T)": "عنوان النسخ (&T)", "제외 태그": "العلامات المراد استبعادها", "제외 태그 목록에 그룹 추가": "Add groups to the exclusion tag list", "제외 태그 목록에 시리즈 추가": "Add series to the exclusion tag list", "제외 태그 목록에 작가 추가": "Add artists to the exclusion tag list", "제외 태그 목록에 캐릭터 추가": "Add characters to the exclusion tag list", "조각 표시": "اعرض القطع", "종료": "يترك", "종료 중...": "يترك...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "اسحب أفقيًا: ±1 \n اسحب رأسيًا: ±100", "주소": "تبوك", "주소 or 갤러리 넘버": "URL أو معرف المعرض", "주소를 입력해주세요": "الرجاء كتابة بعض عناوين المواقع", "중간": "متوسط", "중단": "إحباط", "중복 이미지 찾기": "مكتشف الصور المكررة", "중복 이미지 찾는 중": "البحث عن صور مكررة", "중복 제거": "تقليم التكرارات", "지원하는 사이트:": "المواقع المدعومة:", "지원하는 토큰": "Supported tokens", "지정한 페이지만 다운로드합니다.": "تنزيل الصفحات المحددة فقط.", "직접 다운로드": "تحميل مباشر", "진행도": "تقدم", "참고 작품: {} 개": "المرجع: {} المعارض", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "يرجى الاطلاع على: تعليمات - كيفية استخدام (F1) - تحميل ملفات تعريف الارتباط", "창 보이기 / 숨기기": "إظهار / إخفاء النوافذ", "창 위치 크기 기억": "تذكر موضع النافذة وحجمها", "찾기...": "الباحث ...", "채널 영상 역순으로 다운로드": "Download channel videos in reverse order", "첫 번째 파일 열기": "افتح الملف الأول", "첫 번째 파일 열기 (&O)": "افتح الملف الأول (&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "الصفحة الأولى ، 10 ~ الصفحات العشرون ، الصفحة الأخيرة", "체인지로그": "التغيير", "초기화": "إعادة ضبط", "최대 다운로드 속도": "سرعة التنزيل القصوى", "최대 동시 작업": "الحد الأقصى من المهام المتوازية", "최대 페이지 제한": "الحد الأقصى للصفحة", "최소화 버튼으로 트레이로 최소화": "تصغير الزر يصغر إلى علبة النظام", "최신 버전:": "Latest:", "추가한 날짜": "تم إضافة التاريخ", "취소": "يلغي", "캐릭터": "الشخصيات", "캐릭터 (Characters)": "الشخصيات", "캐릭터 이름": "اسم الشخصية", "캐릭터가 없습니다": "لا أحرف", "캐릭터명 복사 (&C)": "نسخ أسماء الأحرف (&C)", "코멘트": "تعليق", "코멘트 수정": "تعديل التعليق", "쿠키": "بسكويت", "쿠키 내보내기": "تصدير ملفات تعريف الارتباط", "쿠키 내보내기 성공": "تم تصدير ملفات تعريف الارتباط بنجاح", "쿠키 불러오기": "تحميل ملفات تعريف الارتباط", "쿠키 불러오기 성공": "تم استيراد ملفات تعريف الارتباط بنجاح", "쿠키 초기화 성공": "تم مسح ملفات تعريف الارتباط بنجاح", "쿠키가 없습니다": "لا كعك محلاة", "쿠키를 업데이트하세요": "قم بتحديث ملفات تعريف الارتباط الخاصة بك", "크게": "كبير", "크기": "بحجم", "크기 조절": "تغيير الحجم", "크기 조절...": "تغيير الحجم ...", "크롬 확장프로그램 연동에 실패했습니다.": "فشل رابط إضافة Chrome.", "클라이언트": "كلينت", "클래식": "كلاسيك", "클립보드에서 자동 추가": "شاشة الحافظة", "타입": "أنواع", "타입 (Types)": "أنواع", "태그": "العلامات", "태그 \"{}\" 제거": "إزالة العلامة \"{} \"", "태그 \"{}\" 추가": "إضافة علامة \"{}\"", "태그 (Tags)": "العلامات", "태그 :": "بطاقة شعار :", "태그 설정": "إعداد العلامة", "태그 수정": "تعديل العلامات", "태그 없음": "بدون علامات", "테마": "سمة", "토렌트 고급 옵션 초기화": "Reset torrent advanced options", "토렌트 추가": "أضف تورنت", "토렌트 파일 연결": "الاقتران بملفات التورنت", "토큰": "Tokens", "통계": "إحصائيات", "통과": "يمر", "투명도": "التعتيم", "트래커 수정": "تحرير المتعقبات", "트래커 추가": "أضف أدوات تعقب", "트레이로 전환되었습니다": "تصغير إلى علبة النظام", "트레이로 최소화": "يخفض الى قاع النظام", "트레이로 최소화 알림 보이기": "Show minimize notifications in the tray", "트레이에서 알림 보이기": "إظهار الإخطارات في الدرج", "파일": "ملف", "파일 목록": "قائمة الملفات", "파일 삭제": "حذف الملفات", "파일 삭제 (&X)": "حذف الملفات (&X)", "파일 수": "عدد الملفات", "파일 스캔 중": "فحص الملفات", "파일 유형 제외": "استبعاد أنواع الملفات", "파일 체크 중...": "جاري فحص الملفات ...", "파일 크기": "حجم الملف", "파일 형식": "شكل", "파일 형식 물어보기": "اسأل التنسيق", "파일명": "اسم الملف", "파일명 형식": "تنسيق اسم الملف", "파일을 고르세요:": "اختر الملفات:", "파일을 선택하세요": "حدد ملف", "파일의 수정한 날짜를 업로드 날짜로 변경": "Change the file's modified date to the upload date", "파일이 없습니다": "لا ملفات", "패스워드": "كلمة المرور", "퍼지로 찾기": "البحث عن طريق ضبابي", "페이지 읽는 중...": "قراءة الصفحات ...", "페이지 지정": "حدد الصفحات", "페이지 지정 다운로드": "حدد الصفحات وتنزيلها", "페이지 지정 다운로드 기본값": "القيمة الافتراضية لـ \"تحديد الصفحات وتنزيلها \"", "페이지를 선택해주세요": "الرجاء تحديد الصفحات", "페이지를 읽는 중에 오류가 발생했습니다": "حدث خطأ أثناء محاولة قراءة الصفحات", "평범하게 찾기": "البحث افتراضيا", "포트": "ميناء", "포함 태그": "العلامات المراد تضمينها", "폭 맞춤": "يصلح للعرض", "폰트": "Font", "폰트 변경...": "تغيير الخط...", "폰트 선택": "Select Font", "폰트 초기화": "إعادة تعيين الخط", "폴더": "مجلد", "폴더 && 압축파일": "مجلد && ملفات مضغوطة", "폴더 바로가기": "Folder shortcuts", "폴더 열기": "افتح المجلد", "폴더 이동": "انقل المجلد", "폴더 추가": "أضف المجلد", "폴더가 없습니다": "No folder", "폴더들": "الدلائل", "폴더들을 선택하세요": "Select folders", "폴더를 선택하세요": "حدد مجلدًا", "폴더를 추가해주세요": "الرجاء إضافة بعض المجلدات", "폴더명 형식": "تنسيق المجلد", "표지 검색 실패": "فشل البحث عن الغلاف", "표지 검색...": "غلاف البحث ...", "프로그램 끝내기": "Quit the program", "프로그램 패스워드": "كلمة مرور البرنامج", "프록시": "الوكيل", "플러그인": "الإضافات", "플러그인을 추가하시겠습니까?": "هل أنت متأكد أنك تريد إضافة هذا البرنامج المساعد؟", "플레이리스트": "Playlist", "플레이리스트 파일에 번호 매기기": "ترقيم الملفات في قوائم التشغيل", "플레이리스트 한 폴더에 다운로드": "قم بتنزيل قائمة التشغيل في مجلد واحد", "플로팅 미리보기": "معاينة عائمة", "피드백": "ردود الفعل", "필터": "منقي", "필터창": "منقي", "하나 이상의 타입을 선택해주세요.": "اختر نوعًا واحدًا على الأقل.", "하위폴더 포함": "وتشمل المجلدات الفرعية", "학습 중...": "التعلم...", "한 줄 당 한 트래커 URL": "عنوان URL متتبع واحد في كل سطر", "항상 위": "دائما في القمة", "항상 위 OFF": "Always on top OFF", "항상 위 ON": "Always on top ON", "해당 링크로 이동합니다": "افتح الرابط...", "해상도": "الدقة", "현재 버전: v{}\n최신 버전: v{}": "الإصدار الحالي: v{} \n أحدث إصدار: v{}", "현재 작업 없음": "There are no current tasks", "호스트": "مضيف", "화 선택": "اختر الحلقات", "화질": "جودة", "확인": "نعم", "후원": "الدعم", "휴지통으로 이동": "انتقل إلى سلة المحذوفات" } } ================================================ FILE: translation/tr_en.hdl ================================================ { "lang": "en", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "Folders must be more than one if \"Exclude same sources\" is turned on", "#Cancel#": "Cancel", "#EB#": "{} EB", "#EMPTY#": "Empty (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "OK", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "Appearance", "#boss_invalid_pw#": "Invalid password!", "#boss_pw#": "Password:", "#byte#": "{} byte", "#bytes#": "{} bytes", "#click#": "Click", "#combo_hour#": "{} Hour", "#combo_hours#": "{} Hours", "#combo_min#": "{} Min", "#combo_mins#": "{} Mins", "#combo_sec#": "{} Sec", "#combo_secs#": "{} Secs", "#date01#": "Jan {d}", "#date01y#": "Jan {d}, {y}", "#date02#": "Feb {d}", "#date02y#": "Feb {d}, {y}", "#date03#": "Mar {d}", "#date03y#": "Mar {d}, {y}", "#date04#": "Apr {d}", "#date04y#": "Apr {d}, {y}", "#date05#": "May {d}", "#date05y#": "May {d}, {y}", "#date06#": "Jun {d}", "#date06y#": "Jun {d}, {y}", "#date07#": "Jul {d}", "#date07y#": "Jul {d}, {y}", "#date08#": "Aug {d}", "#date08y#": "Aug {d}, {y}", "#date09#": "Sep {d}", "#date09y#": "Sep {d}, {y}", "#date10#": "Oct {d}", "#date10y#": "Oct {d}, {y}", "#date11#": "Nov {d}", "#date11y#": "Nov {d}, {y}", "#date12#": "Dec {d}", "#date12y#": "Dec {d}, {y}", "#developed_by#": "Developed by Kurt Bestor", "#dirformat_artist#": "Some artist", "#dirformat_group#": "Some group", "#dirformat_lang#": "English", "#dirformat_series#": "Some series", "#dirformat_title#": "Some title", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "All Files {}", "#filter_bmk#": "Bookmark Files {}", "#filter_cookie#": "Netscape HTTP Cookie Files (*.txt)", "#filter_hdfb#": "Hitomi Downloader Filter bookmarks {}", "#filter_hdk#": "Hitomi Downloader Shortcuts {}", "#filter_hdl#": "Hitomi Downloader Linguist {}", "#filter_hds#": "Hitomi Downloader Scripts {}", "#filter_hdt#": "Hitomi Downloader Tasks {}", "#filter_image#": "Images {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "Browser required; Use --safemode", "#invalid_loginRequired#": "Login required; Update your cookies", "#invalid_loginRequired2#": "Login required; Please login", "#invalid_outdatedExtension#": "Extension is outdated; Update the extension", "#invalid_unknownSite#": "Unknown site", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "Loading: {}", "#new_group#": "New group", "#new_item#": "New Item", "#p#": "{}p", "#recomm_all_langs#": "All languages", "#recomm_artist#": "Artist", "#recomm_main#": "It analyzes the galleries in the download folder and recommends artists.\n\nThe accuracy shown in the results is within the given galleries.\nThe more galleries you have, the better (100+ is recommended).\n\nYou currently have {item} galleries:", "#recomm_score#": "Score", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "Every", "#setting_autosaveR#": "", "#setting_incompleteL#": "After", "#setting_incompleteR#": "", "#t_etc#": "Etc", "#t_file#": "File", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "Blue", "#tag_gray#": "Gray", "#tag_green#": "Green", "#tag_orange#": "Orange", "#tag_purple#": "Purple", "#tag_red#": "Red", "#tag_yellow#": "Yellow", "#task_artist#": "Artist", "#task_date#": "Date", "#task_done#": "Done", "#task_folder#": "Folder", "#task_incomplete#": "Incomplete", "#task_input#": "Input", "#task_invalid#": "Invalid", "#task_multiple#": "Multiple", "#task_range#": "Range", "#task_single#": "Single", "#task_site#": "Site", "#task_status#": "Status", "#task_title#": "Title", "#task_type#": "Type", "#task_url#": "URL", "#task_zipfile#": "ZipFile", "#torrent_anon#": "A generic user-agent will be used for trackers (except for private torrents).
Your local IPv4 and IPv6 address won't be sent as query string parameters to private trackers.
If announce_ip is configured, it will not be sent to trackers.
The client version will not be sent to peers in the extension handshake.
The DHT node will be disabled.", "#translation#": "Translation", "50개씩 끊어서 검색": "Search in splits for 50 each", "DPI 우회": "Bypass DPI", "DPI 우회 제외 도메인": "Domains excluded from DPI bypass", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "\"Bypass DPI\" is turned off. It might not work on some sites.", "E(x)Hentai 로그인 쿠키 필요": "E(x)Hentai login cookies required", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "Your IP is temporarily locked. Please try again in a moment", "PDF 생성": "Create PDF", "UI 스케일 ({}%)": "UI scale ({}%)", "URL을 입력하세요": "Please type some URLs", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "Press [Download] to download. Press [OK] to exit.", "reCAPTCHA 풀기": "Solve reCAPTCHA", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {day}d {hour}h {min}m {sec}s: {id}", "{hour}시간 {min}분 {sec}초": "{hour}h {min}m {sec}s", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {hour}h {min}m {sec}s: {id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {min}m {sec}s: {id}", "{sec}초 뒤 다시 시작: {id}": "Restart in {sec}s: {id}", "{} 개 선택": "{} items selected", "{} 개 찾음": "{} founded", "{} 개의 작업들이 있습니다": "There are {} tasks", "{} 개의 진행 중인 작업이 있습니다.": "There are {} tasks in progress.", "{} 를 제외 태그에 추가했습니다": "Added {} to the exclusion tag list", "{} 설정": "{} Preferences", "{} 시간 뒤 다시 시작": "Restart in {} hours", "{} 시간 전 데이터": "Data; {} hours ago", "{} 일 뒤 다시 시작": "Restart in {} days", "{} 일 전 데이터": "Data; {} days ago", "{}개 작업의 첫 번째 파일을 엽니다.": "Open first files for each {} tasks.", "{}개의 불완전한 작업을 다시 시작합니다.": "Restart {} incomplete tasks.", "{}개의 완료된 작업을 목록에서 제거합니다.": "Remove {} complete tasks from the list.", "{}개의 완료된 작업을 제거합니다.": "Remove {} completed tasks.", "{}개의 작업을 다시 시작합니다.": "Restart {} tasks.", "『 {} 』는 이미 북마크되어 있습니다": "『 {} 』is already bookmarked", "『 {} 』를 복사했습니다": "『 {} 』Copied", "『 {} 』를 북마크로부터 불러왔습니다": "『 {} 』is loaded from bookmarks", "『 {} 』를 북마크에서 불러왔습니다": "『 {} 』is loaded from bookmarks", "『 {} 』를 북마크했습니다": "『 {} 』is bookmarked", "『 {} 』를 저장 폴더에서 불러왔습니다": "『 {} 』is loaded from the download folder", "가능하면 일본어 제목 사용": "Use Japanese title if available", "가능한 경우 챕터 마커 추가": "Add chapter markers if available", "가져오기": "Import", "가져오기 실패": "Failed to import", "간단 검색": "Simple search", "같은 소스 제외": "Exclude same sources", "개": "items", "개별 다운로드는 지원하지 않습니다": "Download a single post is not supported", "갤러리 넘버": "Gallery ID", "갤러리 넘버 복사": "Copy gallery ID", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "Error occurred during copying gallery IDs.", "갤러리 작업 정보... (&I)": "Gallery info... (&I)", "갤러리 정보": "Gallery info", "갤러리 정보 파일 (info.txt) 생성": "Create gallery info file (info.txt)", "갯수": "Count", "갱신 간격": "Refresh interval", "거꾸로": "Reversed", "검색": "Search", "검색 데이터": "Search data", "검색 도중에 사용할 수 없는 기능입니다.": "This function is locked during search.", "검색 범위": "Search Range", "검색 순서": "Search order", "검색 필터": "Search filter", "검색기": "Searcher", "검색어": "Search Keywords", "검색어 자동 완성": "Autocomplete keywords", "결과": "Result", "결과 저장": "Save the result", "경고 없이 삭제": "Delete without alert", "경로를 선택하세요": "Choose a path", "계속 검색": "Search next", "계정": "Username", "계정 / 패스워드": "Username / Password", "고급": "Advanced", "고급 검색": "Advanced search", "고급 옵션": "Advanced options", "고정": "Pin", "고정 해제": "Unpin", "공식 스크립트 && 플러그인": "Official scripts && plugins", "공인 IP: {}": "Public IP: {}", "관리자 권한 없이 실행": "Run without administrator privileges", "관리자 권한 필요": "Administrator privileges required", "광고 스킵": "Skip ads", "그대로": "Normal", "그룹": "Groups", "그룹 (Groups)": "Groups", "그룹 안의 모든 작업 다시 시작": "Restart all tasks in this group", "그룹 이름": "Group name", "그룹 펼치기 / 접기": "Expand / Collapse groups", "그룹 합쳐서 불러오기": "Load all groups together", "그룹명 복사 (&G)": "Copy group names (&G)", "그룹으로 이동": "Move to group", "그룹을 포함하는 그룹은 만들 수 없습니다.": "Groups can't contain groups.", "그룹이 없습니다": "No groups", "기본": "Default", "기본 데이터": "Default data", "기본 데이터 다운로드": "Download Default data", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "You can create a group in default sort mode only.", "기본값": "Default value", "기타": "Etc.", "깊은 모델": "Deep model", "끝내기": "Quit", "날짜": "Date", "낮음": "Low", "내보내기": "Export", "내보내기 실패": "Failed to export", "내용 보기": "View script", "내장 웹브라우저": "Built-in web browser", "내장 이미지 뷰어": "Built-in image viewer", "네트워크": "Network", "녹화": "Recording", "녹화 중...": "Recording...", "녹화 중지": "Stop recording", "높음": "High", "다른 동영상 사이트에도 적용됩니다.": "Applies to other video sites also.", "다시 시작 (&S)": "Restart (&S)", "다시 시작 실패; 복구됨": "Failed to retry; Reverted", "다운로드": "Download", "다운로드 & 제거": "Download & Remove", "다운로드 && 제거": "Download && Remove", "다운로드 (&D)": "Download (&D)", "다운로드 날짜 표시": "Show dates downloaded", "다운로드 속도": "Download speed", "다운로드 완료": "Download complete", "다운로드 완료 후 자동 제거": "Remove automatically after complete download", "다운로드 일시 정지 / 재개": "Download Pause / Resume", "다운로드 중": "Downloading", "다운로드가 완료되면 알림": "Show notifications when downloading is complete", "다운로드가 완료될 때까지 절전모드 방지": "Prevent system sleep until downloads are complete", "다운로드하기 전에 파일 고르기": "Select files before downloading", "다운로드하지 않음": "Don't download", "다운로드한 작품만": "Only downloaded galleries", "다음 검색시 더 빠르게 검색": "Improve performance the next time", "다음 작업들이 목록에서 제거됩니다:": "The following tasks will be removed from the list:", "다음 파일들이 삭제됩니다:": "The following files will be deleted:", "다크 모드": "Dark mode", "단일 파일": "Single file", "단축키": "Shortcuts", "단축키 내보내기": "Export Shortcuts", "단축키 내보내기 성공": "Shortcuts are successfully exported", "단축키 불러오기": "Import Shortcuts", "단축키 불러오기 성공": "Shortcuts are successfully imported", "단축키 수정": "Edit shortcuts", "단축키 초기화 성공": "Shortcuts are successfully reseted", "닫기 버튼으로 트레이로 최소화": "Minimize to tray with the close button", "대기 중": "Waiting", "대기 중...": "Waiting...", "데이터 다운로더": "Data Downloader", "데이터 분류 중...": "Classifying data...", "데이터 분석 중...": "Analyzing data...", "데이터 없음": "No Data", "데이터 읽는 중...": "Reading data...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "There is no data.\nPlease download data from the Menu.", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "There is no data.\nPlease download data from the Searcher", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "Your data is out of date over a week.\nPlease update the data.", "데이터를 다운로드하는 도중에 실패했습니다.": "Failed to download data", "데이터를 모두 받았습니다!": "All data downloaded!", "도구": "Tools", "도구창": "Tool window", "도움말": "Help", "동영상": "Video", "동영상 변환...": "Convert video...", "뒤 100 페이지": "Last 100 pages", "드래그 & 드랍해서 바꾸세요:": "Use Drag & Drop to change:", "디더링": "Dither", "디버그": "Debug", "디스코드": "Discord", "라이선스": "License", "랜덤으로 하나 선택": "Randomly select one", "로그...": "Log...", "로그인": "Login", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "Failed to login: {}{}\nPlease see [Options - Preferences - Pixiv Setting - Login].", "로그인 중...": "Logging in...", "로그인 테스트": "Test Login", "로드 중: {}": "Loading: {}", "로컬 파일 감지": "Detect local files", "로컬 파일로부터 새 작업 만들기": "Create a new task from the local files", "를 북마크에서 지웠습니다": "is removed from bookmarks", "리트윗 제외": "Exclude retweets", "리트윗 포함": "Include retweets", "릴리즈 노트": "Release note", "링크 열기": "Open link", "링크 주소 복사": "Copy link", "링크 주소 복사 (&C)": "Copy link (&C)", "마무리 중...": "Finish...", "멈춤": "Stopped", "메뉴": "Menu", "메모리 사용량": "Memory usage", "메모리 사용량 표시": "Show memory usage", "메시지 상자": "Message box", "모델": "Model", "모델 생성 중...": "Creating model...", "모델: {}": "Model: {}", "모두": "All", "모두 삭제": "Delete all", "모두 선택": "Select all", "모든 갤러리 넘버를 복사했습니다.": "Copied all gallery IDs.", "모든 언어": "All languages", "모든 작업 완료": "All tasks complete", "모든 작업 완료 후": "When all tasks are complete", "모든 작업이 완료되면 알림 보이기": "Show notifications when all tasks are complete", "목록": "List", "목록 주소를 입력해주세요": "Please type a list URL", "목록 지우기": "Clear list", "목록에서 제거": "Remove from the list", "목록에서 폴더 제거": "Remove folder from the list", "목록을 모두 지울까요?": "Are you sure you want to clear the list?", "미리보기": "Preview", "미리보기 크기": "Preview size", "배경 이미지": "Background image", "배경 이미지 변경": "Change background image", "배경 이미지 초기화": "Reset background image", "버전 확인": "Check updates", "번역": "Translate", "베타 버전 설치": "Install beta versions", "변경할 최대 크기": "Maximum size", "변경할 최소 크기": "Minimum size", "변환 중...": "Converting...", "보기": "View", "보통": "Normal", "부팅 시 실행": "Start at boot", "북마크": "Bookmarks", "북마크 가져오기": "Import Bookmarks", "북마크 가져오기 실패": "Failed to import bookmarks", "북마크 내보내기": "Export Bookmarks", "북마크 내보내기 실패": "Failed to export bookmarks", "북마크를 가져왔습니다": "Bookmarks are imported", "북마크를 내보냈습니다": "Bookmarks are exported", "북마크를 모두 삭제합니다.": "Remove all bookmarks.", "북마크를 모두 삭제했습니다.": "Removed all bookmarks.", "불러오기": "Load", "불완전한 작업 모두 다시 시작": "Restart all incomplete tasks", "불완전한 작업 자동으로 다시 시작": "Restart incomplete tasks automatically", "붙여넣고 다운로드": "Paste and Download", "뷰어... (&V)": "&Viewer...", "브라우저로 보기": "Show in browser", "브라우저로 보기 (&B)": "Show in browser (&B)", "비디오 코덱 우선순위": "Video codec priority", "비슷한 이미지 포함 (느림)": "Include similar images (Slow)", "비율 유지": "Aspect ratio", "비율 유지 - 꽉 차게": "Aspect ratio - fill", "비정상적인 로그인 시도": "Abnormal login attempt", "빠른 시작을 위한 작업 레이지 로딩": "Lazy load tasks for quick start", "빠른 실행 도구 모음 사용자 지정": "Customize Quick Access Toolbar", "뽑기": "Random", "뽑을 갯수": "Number of galleries", "사용법": "How to use", "사용법...": "How to use...", "사용자 지정 테마 색": "Custom theme color", "사이드바": "Sidebar", "사이트": "Site", "사이트 추가": "Site support", "사이트를 추가했습니다": "Site support added", "삭제된 데이터": "Deleted data", "삭제된 데이터 다운로드": "Download Deleted data", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "There is no Deleted data.\nPlease download data from the Menu.", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "Failed to download Deleted data", "삭제된 데이터를 모두 받았습니다!": "Download complete: Deleted data", "삭제시 휴지통으로 보냄": "Use recycle bin", "상태": "Status", "새 그룹 만들기": "Create a new group", "새 버전이 있습니다. 업데이트 하실래요?": "There is a new version. Would you like to update?", "새로고침": "Refresh", "샘플": "Sample", "서명": "Certificate", "서버": "Server", "선택 화 다운로드": "Select chapters && Download", "선택된 작업들 내보내기": "Export selected tasks", "선택된 작업이 없습니다": "No selected tasks", "선택하세요:": "Select:", "선택한 항목 중에서 자동 선택": "Auto select within selected items", "선호 언어": "Preferred language", "설명": "Comment", "설정": "Preferences", "설정 (Preferences)": "Preferences", "설정을 따름": "Follow preferences", "성공: {}\n실패: {}": "Success: {}\nFailed: {}", "소리": "Sound", "수동": "Manual", "수동 업데이트": "Manual", "수정...": "Edit...", "순서 변경": "Reorder", "숨김 키": "Boss-Key", "숫자": "Number", "스레드": "Threads", "스레드 생성 중...": "Starting threads...", "스크롤 속도 ({}x)": "Scroll speed ({}x)", "스크립트": "Script", "스크립트 가져오기": "Import script", "스크립트 작성법": "How to write a script", "스크립트를 실행하시겠습니까?": "Are you sure you want to run this script?", "스크립트를 읽는 중 오류가 발생했습니다": "Error occurred while reading the script", "스토리 읽는 중...": "Reading stories...", "스토리 포함": "Include stories", "시딩": "Seeding", "시딩 중지": "Stop seeding", "시딩 하지 않음": "No seeding", "시리즈": "Series", "시리즈 (Series)": "Series", "시리즈가 없습니다": "No series", "시리즈명 복사 (&S)": "Copy series names (&S)", "시스템": "System", "시스템 설정 사용": "Use system setting", "시스템 종료": "Shutdown System", "시스템 트레이": "System tray", "시작 후 다운로드": "Downloaded this run", "시작 후 지난 시간": "Elapsed time this run", "실패": "Fail", "실험 기능": "Experimental", "썸네일": "Thumbnail", "썸네일 고정": "Fix thumbnail", "썸네일 다운로드": "Download thumbnails", "썸네일 숨기기": "Hide thumbnails", "썸네일 크기": "Thumbnail size", "썸네일을 선택하세요": "Choose a thumbnail", "아니오(&N)": "&No", "아무것도 안 함": "Do nothing", "아이콘": "Icon", "압축": "Compression", "압축 형식": "Format", "압축파일 연결 프로그램": "Open compressed files by", "앞 100 페이지": "First 100 pages", "얕은 모델": "Shallow model", "언어": "Language", "언어 (Language)": "Language", "언어 (Languages)": "Languages", "업데이트": "Update", "업데이트 중...": "Updating...", "업데이트 체크 중...": "Checking for updates...", "업로드": "Upload", "연결 프로그램 변경": "Choose the program to use to open", "열기": "Open", "예(&Y)": "&Yes", "예상치 못한 오류로 다운로드에 실패했습니다.": "Failed to download by unexpected error.", "예시": "Example", "오디오 코덱 우선순위": "Audio codec priority", "오디오 트랙": "Audio track", "오류": "Error", "올바르지 않은 범위입니다": "Invalid range", "올바르지 않은 주소입니다": "Invalid URL", "올바르지 않은 형식의 검색 필터입니다": "Invalid syntax error with filter", "올바르지 않은 형식의 스크립트입니다": "Invalid format script", "옵션": "Options", "옵션 (JSON 포맷)": "Options (JSON format)", "옵션 (Options)": "Options", "완료": "Complete", "완료된 작업 모두 제거": "Remove all complete tasks", "완료됨으로 표시": "Mark as complete", "완전 삭제": "Delete permanently", "우선순위": "Priority", "우선순위 변경": "Change priority", "움짤": "Ugoira", "움짤 변환...": "Convert Ugoira...", "원본": "Original", "원본 이미지 다운로드": "Download original images", "원본 크기보다 크게 바뀌지는 않습니다": "The size will not be larger than original size", "원본 파일 삭제": "Delete downloaded files", "원하는 인공신경망 모델을 고르세요:": "Choose the artificial neural network model you want:", "웹브라우저": "WebBrowser", "웹툰 제외": "Exclude Webtoons", "유사도": "Similarity", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "Invalid Account / Password", "유효한 계정입니다": "Valid account", "음소거": "Mute", "음악 파일에 앨범아트 삽입": "Add album cover to audio files", "음원": "Audio", "음질": "Sound quality", "이동": "Move", "이동할 수 없습니다: {}": "Can not move: {}", "이름": "Name", "이름 변경": "Rename", "이름을 얻는 도중 실패했습니다": "Failed to read name", "이미 다운로드한 작품 제외": "Exclude already downloaded galleries", "이미 모든 그룹이 추가되어 있습니다": "All groups have already been added", "이미 모든 시리즈가 추가되어 있습니다": "All series have already been added", "이미 모든 작가가 추가되어 있습니다": "All artists have already been added", "이미 모든 캐릭터가 추가되어 있습니다": "All characters have already been added", "이미 추가한 작업 다시 시작할지 물어봄": "Ask to retry tasks already in the list", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "This task already in the list. Do you want to download it again?", "이미 추가한 플러그인입니다": "This plugin already in the list", "이미 포함하는 그룹이 있습니다.": "There is already a group that includes tasks.", "이미지": "Image", "이미지 정보 캐시": "Cache image infos", "이미지 포맷 변환": "Change image format", "이미지를 읽는 중 실패": "Failed to read images", "익명 모드": "Anonymous mode", "인코딩": "Encoding", "일반": "General", "일시 정지": "Pause", "읽기 중지": "Stop reading", "읽는 중...": "Reading...", "자동": "Auto", "자동 녹화": "Auto recording", "자동 새로고침 & 스크롤": "Auto Refresh & Scroll", "자동 생성 자막 포함": "Include automatic captions", "자동 선택": "Auto select", "자동 업데이트": "Automatic", "자동 저장": "Autosave", "자막": "Subtitle", "자세한 정보": "Details", "자세한 정보 보기": "Show Details", "작가": "Artists", "작가 (Artists)": "Artists", "작가 이름": "Artist name", "작가 추천": "Recommend artists", "작가 합쳐서 불러오기": "Load all artists together", "작가가 없습니다": "No artists", "작가명 복사 (&A)": "Copy artist names (&A)", "작게": "Small", "작성자": "Author", "작업": "Tasks", "작업 개수": "Number of tasks", "작업 기록": "Task history", "작업 기록 초기화 성공": "Task history cleared successfully", "작업 기록이 없습니다": "No task history", "작업 당 최대 연결": "Maximum connections per task", "작업 만들기 실패": "Failed to create tasks", "작업 목록 폭": "Task list width", "작업 수정": "Edit task", "작업 수정...": "Edit task...", "작업 완료": "Task complete", "작업 완료 후": "After task complete", "작업 왼쪽에서 순서 변경": "Reorder on the left side", "작업 용량": "File size of tasks", "작업 정보": "Task info", "작업 정보... (&I)": "Info... (&I)", "작업 타입?": "Task type?", "작업들 가져오기": "Import tasks", "작업들 내보내기": "Export tasks", "작업들을 가져올까요?": "Do you want to import tasks?", "작업들을 가져왔습니다": "Tasks imported", "작업들을 내보냈습니다": "Tasks exported", "작업이 아직 완료되지 않았습니다": "Task is not finished yet", "작업이 완료되면 알림 보이기": "Show notifications when tasks are complete", "작품 목록 가져오기": "Import gallery list", "작품 목록 내보내기": "Export gallery list", "잠금": "Lock", "잠금 해제": "Unlock", "장": "pages", "재개": "Resume", "재시작 후 적용됩니다": "Applies after restart", "저사양 모드": "Low spec mode", "저장": "Save", "저장 && 종료": "Save && Quit", "저장 실패": "Failed to save", "저장 완료": "Saved", "저장 중...": "Saving...", "저장 폴더": "Download folder", "저장 폴더 변경...": "Change Download folder...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "Copy all gallery IDs in download folder", "저장 폴더에 있는 모든 작가 불러오기": "Load all artists in the download folder", "저장... (&S)": "&Save...", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "No config file; Press [F1] to read \"How to use\"", "적어도 {} 개의 작품이 필요합니다.": "At least {} galleries are required.", "점수": "Score", "정규식 문법": "Regex syntax", "정규식으로 찾기": "Search by Regex", "정렬 기준": "Sort by", "정말 단축키를 초기화하시겠습니까?": "Are you sure you want to reset shortcuts?", "정말 목록에서 제거하시겠습니까?": "Are you sure you want to remove from the list?", "정말 삭제하시겠습니까?": "Are you sure you want to delete?", "정말 설정을 초기화하시겠습니까?": "Are you sure you want to reset the preferences?", "정말 작업 기록을 초기화하시겠습니까?": "Are you sure you want to clear task history?", "정말 종료하시겠습니까?": "Are you sure you want to quit?", "정말 중지하시겠습니까?": "Are you sure you want to stop?", "정말 쿠키를 초기화하시겠습니까?": "Are you sure you want to clear cookies?", "정보": "About", "정보...": "About...", "정확도": "Accuracy", "제거": "Remove", "제목": "Title", "제목 (Title)": "Title", "제목 복사 (&T)": "Copy title (&T)", "제외 태그": "Tags to exclude", "제외 태그 목록에 그룹 추가": "Add groups to the exclusion tag list", "제외 태그 목록에 시리즈 추가": "Add series to the exclusion tag list", "제외 태그 목록에 작가 추가": "Add artists to the exclusion tag list", "제외 태그 목록에 캐릭터 추가": "Add characters to the exclusion tag list", "조각 표시": "Show pieces", "종료": "Quit", "종료 중...": "Quit...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "Drag horizontally: ±1\nDrag vertically: ±100", "주소": "Address", "주소 or 갤러리 넘버": "URL or gallery id", "주소를 입력해주세요": "Please type some URLs", "중간": "Medium", "중단": "Abort", "중복 이미지 찾기": "Duplicate image finder", "중복 이미지 찾는 중": "Finding duplicate images", "중복 제거": "Trim duplicates", "지원하는 사이트:": "Supported sites:", "지원하는 토큰": "Supported tokens", "지정한 페이지만 다운로드합니다.": "Download selected pages only.", "직접 다운로드": "Direct download", "진행도": "Progress", "참고 작품: {} 개": "Reference: {} galleries", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "Please see: Help - How to use (F1) - Load cookies", "창 보이기 / 숨기기": "Show / Hide windows", "창 위치 크기 기억": "Remember window position and size", "찾기...": "Finder...", "채널 영상 역순으로 다운로드": "Download channel videos in reverse order", "첫 번째 파일 열기": "Open the first file", "첫 번째 파일 열기 (&O)": "Open the first file (&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "First page, 10 ~ 20th pages, Last page", "체인지로그": "Changelog", "초기화": "Reset", "최대 다운로드 속도": "Maximum download speed", "최대 동시 작업": "Maximum concurrent tasks", "최대 페이지 제한": "Maximum page limit", "최소화 버튼으로 트레이로 최소화": "Minimize to tray with the minimize button", "최신 버전:": "Latest:", "추가한 날짜": "Date added", "취소": "Cancel", "캐릭터": "Characters", "캐릭터 (Characters)": "Characters", "캐릭터 이름": "Character name", "캐릭터가 없습니다": "No characters", "캐릭터명 복사 (&C)": "Copy character names (&C)", "코멘트": "Comment", "코멘트 수정": "Edit comment", "쿠키": "Cookies", "쿠키 내보내기": "Export cookies", "쿠키 내보내기 성공": "Cookies are successfully exported", "쿠키 불러오기": "Load cookies", "쿠키 불러오기 성공": "Cookies are successfully imported", "쿠키 초기화 성공": "Cookies are successfully cleared", "쿠키가 없습니다": "No cookies", "쿠키를 업데이트하세요": "Update your cookies", "크게": "Large", "크기": "Size", "크기 조절": "Resize", "크기 조절...": "Resizing...", "크롬 확장프로그램 연동에 실패했습니다.": "Chrome extension link failed.", "클라이언트": "Clilent", "클래식": "Classic", "클립보드에서 자동 추가": "Clipboard monitor", "타입": "Types", "타입 (Types)": "Types", "태그": "Tags", "태그 \"{}\" 제거": "Remove Tag \"{}\"", "태그 \"{}\" 추가": "Add Tag \"{}\"", "태그 (Tags)": "Tags", "태그 :": "Tag :", "태그 설정": "Tag setting", "태그 수정": "Edit tags", "태그 없음": "No tags", "테마": "Theme", "토렌트 고급 옵션 초기화": "Reset torrent advanced options", "토렌트 추가": "Add Torrent", "토렌트 파일 연결": "Associate with torrent files", "토큰": "Tokens", "통계": "Statistics", "통과": "Pass", "투명도": "Opacity", "트래커 수정": "Edit trackers", "트래커 추가": "Add trackers", "트레이로 전환되었습니다": "Minimized to system tray", "트레이로 최소화": "Minimize to system tray", "트레이로 최소화 알림 보이기": "Show minimize notifications in the tray", "트레이에서 알림 보이기": "Show notifications in system tray", "파일": "File", "파일 목록": "File list", "파일 삭제": "Delete files", "파일 삭제 (&X)": "Delete files (&X)", "파일 수": "Number of files", "파일 스캔 중": "Scanning files", "파일 유형 제외": "Exclude file types", "파일 체크 중...": "Checking files...", "파일 크기": "Filesize", "파일 형식": "Format", "파일 형식 물어보기": "Ask the format", "파일명": "Filename", "파일명 형식": "Filename format", "파일을 고르세요:": "Select files:", "파일을 선택하세요": "Select a file", "파일의 수정한 날짜를 업로드 날짜로 변경": "Change the file's modified date to the upload date", "파일이 없습니다": "No files", "패스워드": "Password", "퍼지로 찾기": "Search by Fuzzy", "페이지 읽는 중...": "Reading pages...", "페이지 지정": "Select pages", "페이지 지정 다운로드": "Select pages && Download", "페이지 지정 다운로드 기본값": "Default value for \"Select pages && Download\"", "페이지를 선택해주세요": "Please select pages", "페이지를 읽는 중에 오류가 발생했습니다": "An error occured when trying to read pages", "평범하게 찾기": "Search by Default", "포트": "Port", "포함 태그": "Tags to include", "폭 맞춤": "Fit to width", "폰트": "Font", "폰트 변경...": "Change font...", "폰트 선택": "Select Font", "폰트 초기화": "Reset font", "폴더": "Folder", "폴더 && 압축파일": "Folder && Zip Files", "폴더 바로가기": "Folder shortcuts", "폴더 열기": "Open Folder", "폴더 이동": "Move folder", "폴더 추가": "Add folder", "폴더가 없습니다": "No folder", "폴더들": "Directories", "폴더들을 선택하세요": "Select folders", "폴더를 선택하세요": "Select a folder", "폴더를 추가해주세요": "Please add some folders", "폴더명 형식": "Folder format", "표지 검색 실패": "Failed to search cover", "표지 검색...": "Search cover...", "프로그램 끝내기": "Quit the program", "프로그램 패스워드": "Program password", "프록시": "Proxy", "플러그인": "Plugins", "플러그인을 추가하시겠습니까?": "Are you sure you want to add this plugin?", "플레이리스트": "Playlist", "플레이리스트 파일에 번호 매기기": "Numerate files in playlists", "플레이리스트 한 폴더에 다운로드": "Download playlist to one folder", "플로팅 미리보기": "Floating preview", "피드백": "Feedback", "필터": "Filter", "필터창": "Filter", "하나 이상의 타입을 선택해주세요.": "Choose at least one type.", "하위폴더 포함": "Include subfolders", "학습 중...": "Learning...", "한 줄 당 한 트래커 URL": "One tracker URL per line", "항상 위": "Always on top", "항상 위 OFF": "Always on top OFF", "항상 위 ON": "Always on top ON", "해당 링크로 이동합니다": "Open link...", "해상도": "Resolution", "현재 버전: v{}\n최신 버전: v{}": "Current version: v{}\nLatest version: v{}", "현재 작업 없음": "There are no current tasks", "호스트": "Host", "화 선택": "Choose the episodes", "화질": "Quality", "확인": "OK", "후원": "Support", "휴지통으로 이동": "Move to Recycle Bin" } } ================================================ FILE: translation/tr_es.hdl ================================================ { "lang": "es", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "Folders must be more than one if \"Exclude same sources\" is turned on", "#Cancel#": "Cancelar", "#EB#": "{} EB", "#EMPTY#": "Empty (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "Aceptar", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "Appearance", "#boss_invalid_pw#": "Invalid password!", "#boss_pw#": "Password:", "#byte#": "{} byte", "#bytes#": "{} bytes", "#click#": "Click", "#combo_hour#": "{} Hour", "#combo_hours#": "{} Hours", "#combo_min#": "{} Min", "#combo_mins#": "{} Mins", "#combo_sec#": "{} Sec", "#combo_secs#": "{} Secs", "#date01#": "{d} Jan", "#date01y#": "{d} Jan, {y}", "#date02#": "{d} Feb", "#date02y#": "{d} Feb, {y}", "#date03#": "{d} Mar", "#date03y#": "{d} Mar, {y}", "#date04#": "{d} Apr", "#date04y#": "{d} Apr, {y}", "#date05#": "{d} May", "#date05y#": "{d} May, {y}", "#date06#": "{d} Jun", "#date06y#": "{d} Jun, {y}", "#date07#": "{d} Jul", "#date07y#": "{d} Jul, {y}", "#date08#": "{d} Aug", "#date08y#": "{d} Aug, {y}", "#date09#": "{d} Sep", "#date09y#": "{d} Sep, {y}", "#date10#": "{d} Oct", "#date10y#": "{d} Oct, {y}", "#date11#": "{d} Nov", "#date11y#": "{d} Nov, {y}", "#date12#": "{d} Dec", "#date12y#": "{d} Dec, {y}", "#developed_by#": "Developed by Kurt Bestor", "#dirformat_artist#": "Some artist", "#dirformat_group#": "Some group", "#dirformat_lang#": "English", "#dirformat_series#": "Some series", "#dirformat_title#": "Some title", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "All Files {}", "#filter_bmk#": "Bookmark Files {}", "#filter_cookie#": "Netscape HTTP Cookie Files (*.txt)", "#filter_hdfb#": "Hitomi Downloader Filter bookmarks {}", "#filter_hdk#": "Hitomi Downloader Shortcuts {}", "#filter_hdl#": "Hitomi Downloader Linguist {}", "#filter_hds#": "Hitomi Downloader Scripts {}", "#filter_hdt#": "Hitomi Downloader Tasks {}", "#filter_image#": "Images {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "Browser required; Use --safemode", "#invalid_loginRequired#": "Login required; Update your cookies", "#invalid_loginRequired2#": "Login required; Please login", "#invalid_outdatedExtension#": "Extension is outdated; Update the extension", "#invalid_unknownSite#": "Unknown site", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "Loading: {}", "#new_group#": "New group", "#new_item#": "New Item", "#p#": "{}p", "#recomm_all_langs#": "All languages", "#recomm_artist#": "Artist", "#recomm_main#": "It analyzes the galleries in the download folder and recommends artists.\n\nThe accuracy shown in the results is within the given galleries.\nThe more galleries you have, the better (100+ is recommended).\n\nYou currently have {item} galleries:", "#recomm_score#": "Score", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "Every", "#setting_autosaveR#": "", "#setting_incompleteL#": "After", "#setting_incompleteR#": "", "#t_etc#": "Etc", "#t_file#": "File", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "Blue", "#tag_gray#": "Gray", "#tag_green#": "Green", "#tag_orange#": "Orange", "#tag_purple#": "Purple", "#tag_red#": "Red", "#tag_yellow#": "Yellow", "#task_artist#": "Artist", "#task_date#": "Date", "#task_done#": "Done", "#task_folder#": "Folder", "#task_incomplete#": "Incomplete", "#task_input#": "Input", "#task_invalid#": "Invalid", "#task_multiple#": "Multiple", "#task_range#": "Range", "#task_single#": "Single", "#task_site#": "Site", "#task_status#": "Status", "#task_title#": "Title", "#task_type#": "Type", "#task_url#": "URL", "#task_zipfile#": "ZipFile", "#torrent_anon#": "A generic user-agent will be used for trackers (except for private torrents).
Your local IPv4 and IPv6 address won't be sent as query string parameters to private trackers.
If announce_ip is configured, it will not be sent to trackers.
The client version will not be sent to peers in the extension handshake.
The DHT node will be disabled.", "#translation#": "Translation", "50개씩 끊어서 검색": "Búsqueda por lotes de 50", "DPI 우회": "Omitir el DPI", "DPI 우회 제외 도메인": "Domains excluded from DPI bypass", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "\"Ignorar DPI\" está deshabilitado. Esto podría no funcionar en algunos sitios.", "E(x)Hentai 로그인 쿠키 필요": "E(x)Hentai login cookies required", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "Su dirección IP está bloqueada temporalmente. Inténtelo de nuevo en un rato", "PDF 생성": "Crea un PDF", "UI 스케일 ({}%)": "UI scale ({}%)", "URL을 입력하세요": "Por favor, introduzca algunas URL", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "Toque [Descargar] para descargar. Presione [OK] para salir.", "reCAPTCHA 풀기": "Resolver reCAPTCHA", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {day}d {hour}h {min}m {sec}s: {id}", "{hour}시간 {min}분 {sec}초": "{hour}h {min}m {sec}s", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {hour}h {min}m {sec}s: {id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "Reiniciar en {min}m {sec}s: {id}", "{sec}초 뒤 다시 시작: {id}": "Restart in {sec}s: {id}", "{} 개 선택": "{} elementos seleccionados", "{} 개 찾음": "{} se encuentra", "{} 개의 작업들이 있습니다": "Hay {} tareas", "{} 개의 진행 중인 작업이 있습니다.": "There are {} tasks in progress.", "{} 를 제외 태그에 추가했습니다": "Added {} to the exclusion tag list", "{} 설정": "Opciones - {}", "{} 시간 뒤 다시 시작": "Restart in {} hours", "{} 시간 전 데이터": "datos; fresco de {} horas", "{} 일 뒤 다시 시작": "Restart in {} days", "{} 일 전 데이터": "datos; {} días frescos", "{}개 작업의 첫 번째 파일을 엽니다.": "Open first files for each {} tasks.", "{}개의 불완전한 작업을 다시 시작합니다.": "Reinicie {} tareas incompletas.", "{}개의 완료된 작업을 목록에서 제거합니다.": "Eliminar {} las tareas completas de la lista.", "{}개의 완료된 작업을 제거합니다.": "Eliminar {} tareas completadas.", "{}개의 작업을 다시 시작합니다.": "Restart {} tasks.", "『 {} 』는 이미 북마크되어 있습니다": "『{}』 ya está en la lista de favoritos", "『 {} 』를 복사했습니다": "『 {} 』Copiado", "『 {} 』를 북마크로부터 불러왔습니다": "『{}』 se carga desde favoritos", "『 {} 』를 북마크에서 불러왔습니다": "『{}』 se carga desde favoritos", "『 {} 』를 북마크했습니다": "『{}』 se agrega a favoritos", "『 {} 』를 저장 폴더에서 불러왔습니다": "『{}』 se carga desde la carpeta de descargas", "가능하면 일본어 제목 사용": "Use Japanese title if available", "가능한 경우 챕터 마커 추가": "Add chapter markers if available", "가져오기": "Importación", "가져오기 실패": "Error al importar", "간단 검색": "Búsqueda simple", "같은 소스 제외": "Exclude same sources", "개": "items", "개별 다운로드는 지원하지 않습니다": "Descargar una sola publicación no es compatible", "갤러리 넘버": "ID de la galería", "갤러리 넘버 복사": "Copiar ID de galería", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "Se produjo un error al copiar las ID de la galería.", "갤러리 작업 정보... (&I)": "Información de la galería... (&I)", "갤러리 정보": "Informacion de la galería", "갤러리 정보 파일 (info.txt) 생성": "Crear un archivo de información de la galería (info.txt)", "갯수": "Cuenta", "갱신 간격": "Refresh interval", "거꾸로": "Invertido", "검색": "Buscar", "검색 데이터": "Búsqueda de datos", "검색 도중에 사용할 수 없는 기능입니다.": "Esta función está bloqueada durante la búsqueda.", "검색 범위": "Rango de búsqueda", "검색 순서": "Orden de búsqueda", "검색 필터": "Search filter", "검색기": "Buscar", "검색어": "Buscar palabras clave", "검색어 자동 완성": " Relleno automático de palabras clave", "결과": "Result", "결과 저장": "Save the result", "경고 없이 삭제": "Eliminar sin alerta", "경로를 선택하세요": "Choose a path", "계속 검색": "Buscar siguiente", "계정": "Nombre del usuario", "계정 / 패스워드": "Login / Contraseña", "고급": "Avanzada", "고급 검색": "Búsqueda avanzada", "고급 옵션": "Advanced options", "고정": "Pin", "고정 해제": "Unpin", "공식 스크립트 && 플러그인": "Official scripts && plugins", "공인 IP: {}": "Public IP: {}", "관리자 권한 없이 실행": "Run without administrator privileges", "관리자 권한 필요": "Administrator privileges required", "광고 스킵": "Skip ads", "그대로": "Normal", "그룹": "Grupos", "그룹 (Groups)": "Grupos", "그룹 안의 모든 작업 다시 시작": "Reinicie todas las tareas en este grupo.", "그룹 이름": "Nombre del grupo", "그룹 펼치기 / 접기": "Expand / Collapse groups", "그룹 합쳐서 불러오기": "Load all groups together", "그룹명 복사 (&G)": "Copiar nombres de grupos (&G)", "그룹으로 이동": "Move to group", "그룹을 포함하는 그룹은 만들 수 없습니다.": "Groups can't contain groups.", "그룹이 없습니다": "No grupos", "기본": "Por defecto", "기본 데이터": "Datos predeterminados", "기본 데이터 다운로드": "Descargar datos predeterminados", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "Puede crear un grupo solo en el orden predeterminado.", "기본값": "Default value", "기타": "Etcétera", "깊은 모델": "Deep model", "끝내기": "Salir", "날짜": "Fecha", "낮음": "Low", "내보내기": "Exportación", "내보내기 실패": "Error al exportar", "내용 보기": "Ver el script", "내장 웹브라우저": "Built-in web browser", "내장 이미지 뷰어": "Visor de imagen integrado", "네트워크": "Network", "녹화": "Recording", "녹화 중...": "Recording...", "녹화 중지": "Stop recording", "높음": "High", "다른 동영상 사이트에도 적용됩니다.": "También se aplica a otros sitios de video.", "다시 시작 (&S)": "Reiniciar (&S)", "다시 시작 실패; 복구됨": "Failed to retry; Reverted", "다운로드": "Descargar", "다운로드 & 제거": "Descargar && Eliminar", "다운로드 && 제거": "Descargar && Eliminar", "다운로드 (&D)": "Descargar (&D)", "다운로드 날짜 표시": "Ver la fecha de descarga", "다운로드 속도": "Velocidad de descarga", "다운로드 완료": "Descarga terminada", "다운로드 완료 후 자동 제거": "Eliminar automáticamente después de completar la descarga", "다운로드 일시 정지 / 재개": "Descargar Pausa / Retomar", "다운로드 중": "Downloading", "다운로드가 완료되면 알림": "Visualizar notificación cuando se complete la descarga", "다운로드가 완료될 때까지 절전모드 방지": "Prevent system sleep until downloads are finished", "다운로드하기 전에 파일 고르기": "Select files before download", "다운로드하지 않음": "Don't download", "다운로드한 작품만": "Only downloaded galleries", "다음 검색시 더 빠르게 검색": "Improve performance the next time", "다음 작업들이 목록에서 제거됩니다:": "The following tasks will be removed from the list:", "다음 파일들이 삭제됩니다:": "The following files will be deleted:", "다크 모드": "Dark mode", "단일 파일": "Single file", "단축키": "Shortcuts", "단축키 내보내기": "Export Shortcuts", "단축키 내보내기 성공": "Shortcuts are successfully exported", "단축키 불러오기": "Import Shortcuts", "단축키 불러오기 성공": "Shortcuts are successfully imported", "단축키 수정": "Edit shortcuts", "단축키 초기화 성공": "Shortcuts are successfully reseted", "닫기 버튼으로 트레이로 최소화": "El botón Cerrar se minimiza en la barra de tareas", "대기 중": "Waiting", "대기 중...": "Pendiente...", "데이터 다운로더": "Data Downloader", "데이터 분류 중...": "Classifying data...", "데이터 분석 중...": "Analyzing data...", "데이터 없음": "No Data", "데이터 읽는 중...": "Reading data...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "No hay datos.\nDescargue los datos del menú.", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "There is no data.\nPlease download data from the Searcher", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "Sus datos han estado desactualizados durante una semana.\nActualice los datos.", "데이터를 다운로드하는 도중에 실패했습니다.": "Error al descargar datos eliminados", "데이터를 모두 받았습니다!": "Todos los datos se descargan!", "도구": "Tools", "도구창": "Tool window", "도움말": "Ayuda", "동영상": "Vídeo", "동영상 변환...": "Convertir video...", "뒤 100 페이지": "Últimas 100 páginas", "드래그 & 드랍해서 바꾸세요:": "Usa le Drag & Drop para cambiar las prioridades:", "디더링": "Vibración", "디버그": "Debug", "디스코드": "Discord", "라이선스": "License", "랜덤으로 하나 선택": "Randomly select one", "로그...": "Log...", "로그인": "Identificador", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "Error de inicio de sesión: {}{}\n Consulte [Opciones - Preferencias - Configuración de Pixiv - Inicio de sesión].", "로그인 중...": "Iniciar sesión", "로그인 테스트": "Probar el inicio de sesión", "로드 중: {}": "Loading: {}", "로컬 파일 감지": "Detect local files", "로컬 파일로부터 새 작업 만들기": "Create a new task from the local files", "를 북마크에서 지웠습니다": "se elimina de favoritos", "리트윗 제외": "Exclude retweets", "리트윗 포함": "Include retweets", "릴리즈 노트": "Notes de la versió", "링크 열기": "Abrir enlace", "링크 주소 복사": "Copia la URL", "링크 주소 복사 (&C)": "Copie el enlace (&C)", "마무리 중...": "Finalización...", "멈춤": "Stopped", "메뉴": "Menú", "메모리 사용량": "Utilización de memoria", "메모리 사용량 표시": "Utilización de memoria", "메시지 상자": "Message box", "모델": "Model", "모델 생성 중...": "Creating model...", "모델: {}": "Model: {}", "모두": "All", "모두 삭제": "Remover todo", "모두 선택": "Seleccionar todo", "모든 갤러리 넘버를 복사했습니다.": "ID de galerías copiadas.", "모든 언어": "Todos los idiomas", "모든 작업 완료": "All tasks complete", "모든 작업 완료 후": "When all tasks are complete", "모든 작업이 완료되면 알림 보이기": "Show notifications when all tasks are complete", "목록": "Lista", "목록 주소를 입력해주세요": "Por favor, introduzca una lista de URL", "목록 지우기": "Borrar la lista", "목록에서 제거": "Eliminar de la lista", "목록에서 폴더 제거": "Eliminar la carpeta de la lista", "목록을 모두 지울까요?": "Are you sure you want to clear the list?", "미리보기": "Resumen", "미리보기 크기": "Tamaño de vista previa", "배경 이미지": "Background image", "배경 이미지 변경": "Change background image", "배경 이미지 초기화": "Reset background image", "버전 확인": "Buscar actualizaciones", "번역": "Traducir", "베타 버전 설치": "Install beta versions", "변경할 최대 크기": "Tamaño máximo", "변경할 최소 크기": "Tamaño mínimo", "변환 중...": "Converting...", "보기": "Visualizar", "보통": "Normal", "부팅 시 실행": "Iniciar automáticamente al inicio", "북마크": "Favoritos", "북마크 가져오기": "Importar favoritos", "북마크 가져오기 실패": "Error al importar favoritos", "북마크 내보내기": "Exportar favoritos", "북마크 내보내기 실패": "Error al exportar favoritos", "북마크를 가져왔습니다": "Favoritos importados", "북마크를 내보냈습니다": "Favoritos exportados", "북마크를 모두 삭제합니다.": "Remove all bookmarks.", "북마크를 모두 삭제했습니다.": "Removed all bookmarks.", "불러오기": "Load", "불완전한 작업 모두 다시 시작": "Reiniciar todas las tareas incompletas", "불완전한 작업 자동으로 다시 시작": "Reiniciar automáticamente tareas incompletas", "붙여넣고 다운로드": "Paste and Download", "뷰어... (&V)": "&Viewer...", "브라우저로 보기": "Show in browser", "브라우저로 보기 (&B)": "Ver en el navegador (&B)", "비디오 코덱 우선순위": "Video codec priority", "비슷한 이미지 포함 (느림)": "Incluir imágenes similares (lento)", "비율 유지": "Mantener relación de aspecto", "비율 유지 - 꽉 차게": "Aspect ratio - fill", "비정상적인 로그인 시도": "Intento de conexión anormal", "빠른 시작을 위한 작업 레이지 로딩": "Lazy load tasks for quick start", "빠른 실행 도구 모음 사용자 지정": "Customize Quick Access Toolbar", "뽑기": "Aleatorio", "뽑을 갯수": "Numero de galerias", "사용법": "Modo de empleo", "사용법...": "Cómo usar...", "사용자 지정 테마 색": "Color de tema personalizado", "사이드바": "Sidebar", "사이트": "Sitio", "사이트 추가": "Asistencia", "사이트를 추가했습니다": "Asistencia agregado", "삭제된 데이터": "Datos eliminados", "삭제된 데이터 다운로드": "Descargar datos eliminados", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "No hay datos eliminados.\nDescargue los datos del menú.", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "Error al descargar datos eliminados", "삭제된 데이터를 모두 받았습니다!": "Descarga completada : datos eliminados", "삭제시 휴지통으로 보냄": "Usa papelera de reciclaje", "상태": "Estado", "새 그룹 만들기": "Crear un grupo nuevo", "새 버전이 있습니다. 업데이트 하실래요?": "Hay una nueva versión ¿Quiere actualizar?", "새로고침": "Refresh", "샘플": "Sample", "서명": "Certificate", "서버": "Servidor", "선택 화 다운로드": "Seleccionar capítulos && Descargar", "선택된 작업들 내보내기": "Exportar tareas seleccionadas", "선택된 작업이 없습니다": "No hay tareas seleccionadas.", "선택하세요:": "Select:", "선택한 항목 중에서 자동 선택": "Auto select within selected items", "선호 언어": "Preferred language", "설명": "Comentario", "설정": "Preferencias", "설정 (Preferences)": "Opciones", "설정을 따름": "Follow preferences", "성공: {}\n실패: {}": "Éxito:{}\nFracaso:{}", "소리": "Sound", "수동": "Manual", "수동 업데이트": "Manual", "수정...": "Edit...", "순서 변경": "Reorder", "숨김 키": "Boss-Key", "숫자": "Número", "스레드": "Threads", "스레드 생성 중...": "Inicio de las threads...", "스크롤 속도 ({}x)": "Scroll speed ({}x)", "스크립트": "Guion", "스크립트 가져오기": "Importar script", "스크립트 작성법": "How to write a script", "스크립트를 실행하시겠습니까?": "¿Seguro que quieres ejecutar este script?", "스크립트를 읽는 중 오류가 발생했습니다": "Error occurred while reading the script", "스토리 읽는 중...": "Reading stories...", "스토리 포함": "Include stories", "시딩": "Seeding", "시딩 중지": "Stop seeding", "시딩 하지 않음": "No seeding", "시리즈": "Serie", "시리즈 (Series)": "Serie", "시리즈가 없습니다": "No series", "시리즈명 복사 (&S)": "Copiar nombres de series (&S)", "시스템": "System", "시스템 설정 사용": "Use system setting", "시스템 종료": "Shutdown System", "시스템 트레이": "Barra de tareas", "시작 후 다운로드": "Descargar esta run", "시작 후 지난 시간": "Elapsed time this run", "실패": "Fracaso", "실험 기능": "Experimentales", "썸네일": "Thumbnail", "썸네일 고정": "Fix thumbnail", "썸네일 다운로드": "Download thumbnails", "썸네일 숨기기": "Hide thumbnails", "썸네일 크기": "Thumbnail size", "썸네일을 선택하세요": "Choose a thumbnail", "아니오(&N)": "&No", "아무것도 안 함": "Do nothing", "아이콘": "Icono", "압축": "Compresión", "압축 형식": "El formato", "압축파일 연결 프로그램": "Abrir archivos comprimidos por", "앞 100 페이지": "Primeras 100 páginas", "얕은 모델": "Shallow model", "언어": "Idioma", "언어 (Language)": "Idioma", "언어 (Languages)": "Idiomas", "업데이트": "Actualizado", "업데이트 중...": "Actualización...", "업데이트 체크 중...": "Buscar actualizaciones...", "업로드": "Upload", "연결 프로그램 변경": "Elegir el programa a usar para abrir", "열기": "Open", "예(&Y)": "&Sí", "예상치 못한 오류로 다운로드에 실패했습니다.": "Error al descargar con un error inesperado.", "예시": "Ejemplo", "오디오 코덱 우선순위": "Audio codec priority", "오디오 트랙": "Audio track", "오류": "Error", "올바르지 않은 범위입니다": "Rango inválido", "올바르지 않은 주소입니다": "URL no válida", "올바르지 않은 형식의 검색 필터입니다": "Error de sintaxis no válido con filtro", "올바르지 않은 형식의 스크립트입니다": "Invalid format script", "옵션": "Opciones", "옵션 (JSON 포맷)": "Options (JSON format)", "옵션 (Options)": "Opciones", "완료": "Terminado", "완료된 작업 모두 제거": "Eliminar todas las tareas completadas", "완료됨으로 표시": "Marcar como completado", "완전 삭제": "Delete permanently", "우선순위": "prioridad", "우선순위 변경": "Change priority", "움짤": "Ugoira", "움짤 변환...": "Convertir Ugoira...", "원본": "Original", "원본 이미지 다운로드": "Download original images", "원본 크기보다 크게 바뀌지는 않습니다": "El tamaño no será mayor que el tamaño original", "원본 파일 삭제": "Eliminar archivos descargados", "원하는 인공신경망 모델을 고르세요:": "Choose the artificial neural network model you want:", "웹브라우저": "WebBrowser", "웹툰 제외": "Excluir Webtoons", "유사도": "Similarity", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "Cuenta / contraseña inválida", "유효한 계정입니다": "Cuenta válida", "음소거": "Mute", "음악 파일에 앨범아트 삽입": "Agregue la carátula del álbum para archivos de audio", "음원": "Audio", "음질": "Calidad de sonido", "이동": "Mover", "이동할 수 없습니다: {}": "Can not move: {}", "이름": "Apellido", "이름 변경": "Cambiar nombre", "이름을 얻는 도중 실패했습니다": "No se pudo leer el nombre", "이미 다운로드한 작품 제외": "Exclude already downloaded galleries", "이미 모든 그룹이 추가되어 있습니다": "All groups have already been added", "이미 모든 시리즈가 추가되어 있습니다": "All series have already been added", "이미 모든 작가가 추가되어 있습니다": "All artists have already been added", "이미 모든 캐릭터가 추가되어 있습니다": "All characters have already been added", "이미 추가한 작업 다시 시작할지 물어봄": "Ask to retry tasks already in the list", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "This task already in the list. Do you want to download it again?", "이미 추가한 플러그인입니다": "This plugin already in the list", "이미 포함하는 그룹이 있습니다.": "There is already a group that includes tasks.", "이미지": "Imagen", "이미지 정보 캐시": "Cache image infos", "이미지 포맷 변환": "Cambiar el formato de la imagen.", "이미지를 읽는 중 실패": "Error al leer las imágenes", "익명 모드": "Anonymous mode", "인코딩": "Codificación", "일반": "General", "일시 정지": "Pause", "읽기 중지": "Stop reading", "읽는 중...": "Lectura...", "자동": "Auto", "자동 녹화": "Auto recording", "자동 새로고침 & 스크롤": "Auto Refresh & Scroll", "자동 생성 자막 포함": "Include automatic captions", "자동 선택": "Auto select", "자동 업데이트": "Automático", "자동 저장": "Autoguardar", "자막": "Subtítulo", "자세한 정보": "Details", "자세한 정보 보기": "Show Details", "작가": "Artistas", "작가 (Artists)": "Artistas", "작가 이름": "Nombre del artista", "작가 추천": "Recomendación del artista", "작가 합쳐서 불러오기": "Cargue todos los artistas juntos", "작가가 없습니다": "No artistas", "작가명 복사 (&A)": "Copiar nombres de artistas (&A)", "작게": "Small", "작성자": "Autor", "작업": "Tareas", "작업 개수": "Número de tareas", "작업 기록": "Task history", "작업 기록 초기화 성공": "Task history cleared successfully", "작업 기록이 없습니다": "No task history", "작업 당 최대 연결": "Maximum connections per task", "작업 만들기 실패": "Failed to create tasks", "작업 목록 폭": "Task list width", "작업 수정": "Edit task", "작업 수정...": "Edit task...", "작업 완료": "Task complete", "작업 완료 후": "After task complete", "작업 왼쪽에서 순서 변경": "Reorder on the left side", "작업 용량": "Tamaño de archivo de tarea", "작업 정보": "Información del trabajo", "작업 정보... (&I)": "Info... (&I)", "작업 타입?": "Task type?", "작업들 가져오기": "Tareas de importación", "작업들 내보내기": "Exportar tareas", "작업들을 가져올까요?": "¿Quieres importar tareas?", "작업들을 가져왔습니다": "Tareas importadas", "작업들을 내보냈습니다": "Tareas exportadas", "작업이 아직 완료되지 않았습니다": "La tarea no ha sido finalizada", "작업이 완료되면 알림 보이기": "Show notifications when tasks are complete", "작품 목록 가져오기": "Import gallery list", "작품 목록 내보내기": "Export gallery list", "잠금": "Bloquear", "잠금 해제": "Desbloquear", "장": "páginas", "재개": "Resume", "재시작 후 적용됩니다": "Applies after restart", "저사양 모드": "Low spec mode", "저장": "Guardar", "저장 && 종료": "Guardar && Salir", "저장 실패": "Error al guardar", "저장 완료": "Guardado", "저장 중...": "Guardando...", "저장 폴더": "Carpeta de descarga", "저장 폴더 변경...": "Cambiar la carpeta de descarga...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "Copie todos los ID de la galería en la carpeta de descargas", "저장 폴더에 있는 모든 작가 불러오기": "Cargue todos los artistas en la carpeta de descargas", "저장... (&S)": "&Guardar", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "Sin archivo de configuración; Presione [F1] para leer \"Cómo usar\"", "적어도 {} 개의 작품이 필요합니다.": "At least {} galleries are required.", "점수": "Puntuación", "정규식 문법": "Sintaxis de regex", "정규식으로 찾기": "Buscar por regex", "정렬 기준": "Ordenar por", "정말 단축키를 초기화하시겠습니까?": "Are you sure you want to reset shortcuts?", "정말 목록에서 제거하시겠습니까?": "¿Estás seguro que quieres eliminar la lista?", "정말 삭제하시겠습니까?": "¿Estás seguro de que deseas eliminarlo?", "정말 설정을 초기화하시겠습니까?": "Are you sure you want to reset the preferences?", "정말 작업 기록을 초기화하시겠습니까?": "Are you sure you want to clear task history?", "정말 종료하시겠습니까?": "¿Está seguro que desea salir?", "정말 중지하시겠습니까?": "Are you sure you want to stop?", "정말 쿠키를 초기화하시겠습니까?": "Are you sure you want to clear cookies?", "정보": "Acerca de nosotros", "정보...": "Acerca de...", "정확도": "Accuracy", "제거": "Eliminar", "제목": "Título", "제목 (Title)": "Título", "제목 복사 (&T)": "Copiar título (&T)", "제외 태그": "Excluir tags", "제외 태그 목록에 그룹 추가": "Add groups to the exclusion tag list", "제외 태그 목록에 시리즈 추가": "Add series to the exclusion tag list", "제외 태그 목록에 작가 추가": "Add artists to the exclusion tag list", "제외 태그 목록에 캐릭터 추가": "Add characters to the exclusion tag list", "조각 표시": "Show pieces", "종료": "Salir", "종료 중...": "Salir...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "Deslizar horizontalmente: ±1\nDeslizar verticalmente: ±100", "주소": "Address", "주소 or 갤러리 넘버": "URL o ID de la galería", "주소를 입력해주세요": "Por favor, introduzca algunas URL", "중간": "Medium", "중단": "Abortar", "중복 이미지 찾기": "Herramienta de búsqueda de imágenes duplicadas", "중복 이미지 찾는 중": "Buscar imágenes duplicadas", "중복 제거": "Quitar duplicados", "지원하는 사이트:": "Sitios soportados:", "지원하는 토큰": "Supported tokens", "지정한 페이지만 다운로드합니다.": "Descargar solo las páginas seleccionadas.", "직접 다운로드": "Direct download", "진행도": "Progress", "참고 작품: {} 개": "Reference: {} galleries", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "Please see: Help - How to use (F1) - Load cookies", "창 보이기 / 숨기기": "Show / Hide windows", "창 위치 크기 기억": "Remember window position and size", "찾기...": "Buscar...", "채널 영상 역순으로 다운로드": "Download channel videos in reverse order", "첫 번째 파일 열기": "Open the first file", "첫 번째 파일 열기 (&O)": "Abra el primer archivo (&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "Primera página, 10 ~ 20e páginas, última página", "체인지로그": "Changelog", "초기화": "Reset", "최대 다운로드 속도": "Velocidad máxima de descarga", "최대 동시 작업": "Maximum parallel tasks", "최대 페이지 제한": "Maximum page limit", "최소화 버튼으로 트레이로 최소화": "El botón Minimizar minimiza en la barra de tareas", "최신 버전:": "Latest:", "추가한 날짜": "Fecha de adición", "취소": "Cancelar", "캐릭터": "Personajes", "캐릭터 (Characters)": "Personajes", "캐릭터 이름": "Nombre del personaje", "캐릭터가 없습니다": "No personajes", "캐릭터명 복사 (&C)": "Copiar nombres de personajes (&C)", "코멘트": "Comentario", "코멘트 수정": "Modificar el comentario", "쿠키": "Cookies", "쿠키 내보내기": "Export cookies", "쿠키 내보내기 성공": "Cookies successfully exported", "쿠키 불러오기": "Load cookies", "쿠키 불러오기 성공": "Cookies successfully imported", "쿠키 초기화 성공": "Cookies successfully cleared", "쿠키가 없습니다": "No cookies", "쿠키를 업데이트하세요": "Update your cookies", "크게": "Large", "크기": "Tamaño", "크기 조절": "Redimensionar", "크기 조절...": "Redimensionando...", "크롬 확장프로그램 연동에 실패했습니다.": "Chrome extension link failed.", "클라이언트": "Clilent", "클래식": "Classic", "클립보드에서 자동 추가": "Portapapeles", "타입": "Tipos", "타입 (Types)": "Tipos", "태그": "Tags", "태그 \"{}\" 제거": "Eliminar Tag \"{}\"", "태그 \"{}\" 추가": "Añadir Tag \"{}\"", "태그 (Tags)": "Tags", "태그 :": "Tag :", "태그 설정": "Parámetro Tag", "태그 수정": "Edit tags", "태그 없음": "No tags", "테마": "Theme", "토렌트 고급 옵션 초기화": "Reset torrent advanced options", "토렌트 추가": "Add Torrent", "토렌트 파일 연결": "Associate with torrent files", "토큰": "Tokens", "통계": "Estadísticas", "통과": "Pasar", "투명도": "Opacidad", "트래커 수정": "Edit trackers", "트래커 추가": "Add trackers", "트레이로 전환되었습니다": "Minimizar en la barra de tareas", "트레이로 최소화": "Reducir en la barra de tareas", "트레이로 최소화 알림 보이기": "Show minimize notifications in the tray", "트레이에서 알림 보이기": "Visualizar las notificaciones", "파일": "Archivo", "파일 목록": "File list", "파일 삭제": "Eliminar archivos", "파일 삭제 (&X)": "Eliminar archivos (&X)", "파일 수": "Número de archivos", "파일 스캔 중": "Análisis de archivos", "파일 유형 제외": "Excluir tipos de archivo", "파일 체크 중...": "Checking files...", "파일 크기": "Tamaño en disco", "파일 형식": "El formato", "파일 형식 물어보기": "Ask the format", "파일명": "Nombre del fichero", "파일명 형식": "Formato del archivo", "파일을 고르세요:": "Select files:", "파일을 선택하세요": "Select a file", "파일의 수정한 날짜를 업로드 날짜로 변경": "Change the file's modified date to the upload date", "파일이 없습니다": "No files", "패스워드": "Contraseña", "퍼지로 찾기": "Buscar por fuzzy", "페이지 읽는 중...": "Leyendo páginas...", "페이지 지정": "Selecciona las paginas", "페이지 지정 다운로드": "Seleccionar páginas && Descargar", "페이지 지정 다운로드 기본값": "Default value for \"Select pages && Download\"", "페이지를 선택해주세요": "Por favor seleccione páginas", "페이지를 읽는 중에 오류가 발생했습니다": "Ha ocurrido un error al intentar leer las páginas.", "평범하게 찾기": "Modo de búsqueda predeterminado", "포트": "Puerto", "포함 태그": "Incluir Tags", "폭 맞춤": "Ajustar al ancho", "폰트": "Font", "폰트 변경...": "Change font...", "폰트 선택": "Select Font", "폰트 초기화": "Reset font", "폴더": "Carpeta", "폴더 && 압축파일": "Carpeta && Archivos Zip", "폴더 바로가기": "Folder shortcuts", "폴더 열기": "Obrir la carpeta", "폴더 이동": "Move folder", "폴더 추가": "Agrega la carpeta", "폴더가 없습니다": "No folder", "폴더들": "Directories", "폴더들을 선택하세요": "Select folders", "폴더를 선택하세요": "Selecciona una carpeta", "폴더를 추가해주세요": "Por favor, agregar carpetas", "폴더명 형식": "Formato de archivo", "표지 검색 실패": "Error al buscar la cubierta", "표지 검색...": "Busque cubierta...", "프로그램 끝내기": "Quit the program", "프로그램 패스워드": "Program password", "프록시": "Proxy", "플러그인": "Plugins", "플러그인을 추가하시겠습니까?": "Are you sure you want to add this plugin?", "플레이리스트": "Playlist", "플레이리스트 파일에 번호 매기기": "Numerate files in playlists", "플레이리스트 한 폴더에 다운로드": "Download playlist to one folder", "플로팅 미리보기": "Vista previa flotante", "피드백": "Feedback", "필터": "Filtro", "필터창": "Filtro", "하나 이상의 타입을 선택해주세요.": "Elige al menos un tipo.", "하위폴더 포함": "Incluir sub-carpetas", "학습 중...": "Learning...", "한 줄 당 한 트래커 URL": "One tracker URL per line", "항상 위": "Sempre a sobre", "항상 위 OFF": "Always on top OFF", "항상 위 ON": "Always on top ON", "해당 링크로 이동합니다": "Abrir enlace", "해상도": "Resolución", "현재 버전: v{}\n최신 버전: v{}": "Versión actual: v{}\nLa versión más reciente: v{}", "현재 작업 없음": "There are no current tasks", "호스트": "Host", "화 선택": "Choose the episodes", "화질": "Calidad", "확인": "OK", "후원": "Asistencia", "휴지통으로 이동": "Move to Recycle Bin" } } ================================================ FILE: translation/tr_fr.hdl ================================================ { "lang": "fr", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "Folders must be more than one if \"Exclude same sources\" is turned on", "#Cancel#": "Cancel", "#EB#": "{} EB", "#EMPTY#": "Empty (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "OK", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "Appearance", "#boss_invalid_pw#": "Invalid password!", "#boss_pw#": "Password:", "#byte#": "{} byte", "#bytes#": "{} bytes", "#click#": "Click", "#combo_hour#": "{} Hour", "#combo_hours#": "{} Hours", "#combo_min#": "{} Min", "#combo_mins#": "{} Mins", "#combo_sec#": "{} Sec", "#combo_secs#": "{} Secs", "#date01#": "{d} Jan", "#date01y#": "{d} Jan, {y}", "#date02#": "{d} Feb", "#date02y#": "{d} Feb, {y}", "#date03#": "{d} Mar", "#date03y#": "{d} Mar, {y}", "#date04#": "{d} Apr", "#date04y#": "{d} Apr, {y}", "#date05#": "{d} May", "#date05y#": "{d} May, {y}", "#date06#": "{d} Jun", "#date06y#": "{d} Jun, {y}", "#date07#": "{d} Jul", "#date07y#": "{d} Jul, {y}", "#date08#": "{d} Aug", "#date08y#": "{d} Aug, {y}", "#date09#": "{d} Sep", "#date09y#": "{d} Sep, {y}", "#date10#": "{d} Oct", "#date10y#": "{d} Oct, {y}", "#date11#": "{d} Nov", "#date11y#": "{d} Nov, {y}", "#date12#": "{d} Dec", "#date12y#": "{d} Dec, {y}", "#developed_by#": "Developed by Kurt Bestor", "#dirformat_artist#": "Some artist", "#dirformat_group#": "Some group", "#dirformat_lang#": "English", "#dirformat_series#": "Some series", "#dirformat_title#": "Some title", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "All Files {}", "#filter_bmk#": "Bookmark Files {}", "#filter_cookie#": "Netscape HTTP Cookie Files (*.txt)", "#filter_hdfb#": "Hitomi Downloader Filter bookmarks {}", "#filter_hdk#": "Hitomi Downloader Shortcuts {}", "#filter_hdl#": "Hitomi Downloader Linguist {}", "#filter_hds#": "Hitomi Downloader Scripts {}", "#filter_hdt#": "Hitomi Downloader Tasks {}", "#filter_image#": "Images {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "Browser required; Use --safemode", "#invalid_loginRequired#": "Login required; Update your cookies", "#invalid_loginRequired2#": "Login required; Please login", "#invalid_outdatedExtension#": "Extension is outdated; Update the extension", "#invalid_unknownSite#": "Unknown site", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "Loading: {}", "#new_group#": "New group", "#new_item#": "New Item", "#p#": "{}p", "#recomm_all_langs#": "All languages", "#recomm_artist#": "Artist", "#recomm_main#": "It analyzes the galleries in the download folder and recommends artists.\n\nThe accuracy shown in the results is within the given galleries.\nThe more galleries you have, the better (100+ is recommended).\n\nYou currently have {item} galleries:", "#recomm_score#": "Score", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "Every", "#setting_autosaveR#": "", "#setting_incompleteL#": "After", "#setting_incompleteR#": "", "#t_etc#": "Etc", "#t_file#": "File", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "Blue", "#tag_gray#": "Gray", "#tag_green#": "Green", "#tag_orange#": "Orange", "#tag_purple#": "Purple", "#tag_red#": "Red", "#tag_yellow#": "Yellow", "#task_artist#": "Artist", "#task_date#": "Date", "#task_done#": "Done", "#task_folder#": "Folder", "#task_incomplete#": "Incomplete", "#task_input#": "Input", "#task_invalid#": "Invalid", "#task_multiple#": "Multiple", "#task_range#": "Range", "#task_single#": "Single", "#task_site#": "Site", "#task_status#": "Status", "#task_title#": "Title", "#task_type#": "Type", "#task_url#": "URL", "#task_zipfile#": "ZipFile", "#torrent_anon#": "A generic user-agent will be used for trackers (except for private torrents).
Your local IPv4 and IPv6 address won't be sent as query string parameters to private trackers.
If announce_ip is configured, it will not be sent to trackers.
The client version will not be sent to peers in the extension handshake.
The DHT node will be disabled.", "#translation#": "Translation", "50개씩 끊어서 검색": "Recherche par batch de 50", "DPI 우회": "Contourner le DPI", "DPI 우회 제외 도메인": "Domains excluded from DPI bypass", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "\"Ignorer DPI\" est désactivé. Cela pourrait ne pas fonctionner sur certains sites.", "E(x)Hentai 로그인 쿠키 필요": "Cookie de connexion d'E(x)Hentai requis", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "Votre adresse IP est temporairement bloquée. Veuillez réessayer dans un instant", "PDF 생성": "Créer un PDF", "UI 스케일 ({}%)": "UI scale ({}%)", "URL을 입력하세요": "Veuillez saisir l'URL", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "Appuyez sur [Télécharger] pour télécharger. Appuyez sur [OK] pour quitter.", "reCAPTCHA 풀기": "Résoudre reCAPTCHA", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {day}d {hour}h {min}m {sec}s: {id}", "{hour}시간 {min}분 {sec}초": "{hour}h {min}m {sec}s", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {hour}h {min}m {sec}s: {id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "Redémarrer dans {min}m {sec}s : {id}", "{sec}초 뒤 다시 시작: {id}": "Restart in {sec}s: {id}", "{} 개 선택": "{} éléments sélectionnés", "{} 개 찾음": "{} est trouvé(e)", "{} 개의 작업들이 있습니다": "Il y a {} tâches", "{} 개의 진행 중인 작업이 있습니다.": "Il y a {} tâches en cours.", "{} 를 제외 태그에 추가했습니다": "Added {} to the exclusion tag list", "{} 설정": "Paramètres - {}", "{} 시간 뒤 다시 시작": "Restart in {} hours", "{} 시간 전 데이터": "Données; il y {} heures", "{} 일 뒤 다시 시작": "Restart in {} days", "{} 일 전 데이터": "Données; il y {} jours", "{}개 작업의 첫 번째 파일을 엽니다.": "Open first files for each {} tasks.", "{}개의 불완전한 작업을 다시 시작합니다.": "Redémarrez {} les tâches incomplètes.", "{}개의 완료된 작업을 목록에서 제거합니다.": "Supprimer {} les tâches complètes de la liste.", "{}개의 완료된 작업을 제거합니다.": "Supprimer les {} tâches terminées.", "{}개의 작업을 다시 시작합니다.": "Restart {} tasks.", "『 {} 』는 이미 북마크되어 있습니다": "『{}』 est déjà dans la liste des favoris", "『 {} 』를 복사했습니다": "『 {} 』copié", "『 {} 』를 북마크로부터 불러왔습니다": "『{}』 est chargé à partir des favoris", "『 {} 』를 북마크에서 불러왔습니다": "『{}』 est chargé à partir des favoris", "『 {} 』를 북마크했습니다": "『{}』 est ajouté aux favoris", "『 {} 』를 저장 폴더에서 불러왔습니다": "『{}』 est chargé à partir du dossier de téléchargements", "가능하면 일본어 제목 사용": "Utiliser le titre en japonais si disponible", "가능한 경우 챕터 마커 추가": "Add chapter markers if available", "가져오기": "Importation", "가져오기 실패": "Échec de l'importation", "간단 검색": "Recherche simple", "같은 소스 제외": "Exclude same sources", "개": "Items", "개별 다운로드는 지원하지 않습니다": "Télécharger un seul post n'est pas pris en charge", "갤러리 넘버": "ID de la galerie", "갤러리 넘버 복사": "Copier l'ID de la galerie", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "Une erreur s'est produite lors de la copie des ID des galeries.", "갤러리 작업 정보... (&I)": "Information de la gallerie... (&I)", "갤러리 정보": "Information de la gallerie", "갤러리 정보 파일 (info.txt) 생성": "Créer un fichier d'informations de la galerie (info.txt)", "갯수": "Compte", "갱신 간격": "Refresh interval", "거꾸로": "Inversé", "검색": "Recherche", "검색 데이터": "Recherche de données", "검색 도중에 사용할 수 없는 기능입니다.": "Cette fonction est verrouillée pendant la recherche.", "검색 범위": "Plage de recherche", "검색 순서": "Ordre de recherche", "검색 필터": "Filtre de recherche", "검색기": "Recherche", "검색어": "Recherche de mots-clés", "검색어 자동 완성": "Remplissage automatique de mots-clés", "결과": "Result", "결과 저장": "Save the result", "경고 없이 삭제": "Supprimer sans alerte", "경로를 선택하세요": "Choisir un chemin", "계속 검색": "Rechercher le suivant", "계정": "Nom d'utilisateur", "계정 / 패스워드": "Identifiant / Mot de passe", "고급": "Avancée", "고급 검색": "Recherche avancée", "고급 옵션": "Advanced options", "고정": "Épingler", "고정 해제": "Désépingler", "공식 스크립트 && 플러그인": "Official scripts && plugins", "공인 IP: {}": "Public IP: {}", "관리자 권한 없이 실행": "Run without administrator privileges", "관리자 권한 필요": "Administrator privileges required", "광고 스킵": "Skip ads", "그대로": "Normal", "그룹": "Groupes", "그룹 (Groups)": "Groupes", "그룹 안의 모든 작업 다시 시작": "Redémarrez toutes les tâches de ce groupe", "그룹 이름": "Nom du groupe", "그룹 펼치기 / 접기": "Expand / Collapse groups", "그룹 합쳐서 불러오기": "Load all groups together", "그룹명 복사 (&G)": "Copier les noms des groupes (&G)", "그룹으로 이동": "Move to group", "그룹을 포함하는 그룹은 만들 수 없습니다.": "Groups can't contain groups.", "그룹이 없습니다": "Aucun groupe", "기본": "Défaut", "기본 데이터": "Données par défaut", "기본 데이터 다운로드": "Télécharger les données par défaut", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "Vous pouvez créer un groupe dans le tri par défaut uniquement.", "기본값": "Valeur par défaut", "기타": "Etc.", "깊은 모델": "Deep model", "끝내기": "Quitter", "날짜": "Date", "낮음": "Low", "내보내기": "Exportation", "내보내기 실패": "Échec de l'exportation", "내용 보기": "Voir le script", "내장 웹브라우저": "Navigateur web intégré", "내장 이미지 뷰어": "Visionneuse d'images intégrée", "네트워크": "Network", "녹화": "Recording", "녹화 중...": "Recording...", "녹화 중지": "Stop recording", "높음": "High", "다른 동영상 사이트에도 적용됩니다.": "S'applique également à d'autres sites vidéos.", "다시 시작 (&S)": "Redémarrer (&S)", "다시 시작 실패; 복구됨": "Erreur lors du redémarrage; Retour à l'état précédent", "다운로드": "Télécharger", "다운로드 & 제거": "Télécharger & Supprimer", "다운로드 && 제거": "Télécharger && Supprimer", "다운로드 (&D)": "Télécharger (&D)", "다운로드 날짜 표시": "Afficher la date de téléchargement", "다운로드 속도": "Vitesse de téléchargement", "다운로드 완료": "Téléchargement terminé", "다운로드 완료 후 자동 제거": "Supprimer automatiquement après la complétion du téléchargement", "다운로드 일시 정지 / 재개": "Télécharger Pause / Reprendre", "다운로드 중": "Downloading", "다운로드가 완료되면 알림": "Afficher la notification lorsque le téléchargement est terminé", "다운로드가 완료될 때까지 절전모드 방지": "Prevent system sleep until downloads are finished", "다운로드하기 전에 파일 고르기": "Select files before download", "다운로드하지 않음": "Don't download", "다운로드한 작품만": "Télécharger uniquement les galeries", "다음 검색시 더 빠르게 검색": "Améliore la performance la prochaine fois", "다음 작업들이 목록에서 제거됩니다:": "The following tasks will be removed from the list:", "다음 파일들이 삭제됩니다:": "The following files will be deleted:", "다크 모드": "Mode sombre", "단일 파일": "Fichier unique", "단축키": "Shortcuts", "단축키 내보내기": "Export Shortcuts", "단축키 내보내기 성공": "Shortcuts are successfully exported", "단축키 불러오기": "Import Shortcuts", "단축키 불러오기 성공": "Shortcuts are successfully imported", "단축키 수정": "Edit shortcuts", "단축키 초기화 성공": "Shortcuts are successfully reseted", "닫기 버튼으로 트레이로 최소화": "Le bouton Fermer minimise dans la barre des tâches", "대기 중": "Waiting", "대기 중...": "En attente...", "데이터 다운로더": "Data Downloader", "데이터 분류 중...": "Classifying data...", "데이터 분석 중...": "Analyzing data...", "데이터 없음": "No Data", "데이터 읽는 중...": "Reading data...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "Il n'y a pas de données.\nVeuillez télécharger les données à partir du menu.", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "There is no data.\nPlease download data from the Searcher", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "Vos données sont obsolètes depuis une semaine.\nVeuillez mettre à jour les données.", "데이터를 다운로드하는 도중에 실패했습니다.": "Échec lors du téléchargement des données", "데이터를 모두 받았습니다!": "Toutes les données sont téléchargées !", "도구": "Outils", "도구창": "Tool window", "도움말": "Aide", "동영상": "Vidéo", "동영상 변환...": "Convertir la vidéo...", "뒤 100 페이지": "100 dernières pages", "드래그 & 드랍해서 바꾸세요:": "Utilisez le Drag & Drop pour changer l'ordre :", "디더링": "Vibration", "디버그": "Débugger", "디스코드": "Discord", "라이선스": "License", "랜덤으로 하나 선택": "Sélection aléatoire", "로그...": "Connexion...", "로그인": "Identifiant", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "Échec de la connexion : {}{}\nVeuillez consulter [Options - Paramètres - Paramètres Pixiv - Connexion].", "로그인 중...": "Se connecter...", "로그인 테스트": "Tester le Login", "로드 중: {}": "Loading: {}", "로컬 파일 감지": "Detect local files", "로컬 파일로부터 새 작업 만들기": "Créer une nouvelle tâche depuis les fichiers locaux", "를 북마크에서 지웠습니다": "est supprimé des favoris", "리트윗 제외": "Exclude retweets", "리트윗 포함": "Include retweets", "릴리즈 노트": "Notes de version", "링크 열기": "Ouvrir le lien", "링크 주소 복사": "Copier le lien", "링크 주소 복사 (&C)": "Copier le lien (&C)", "마무리 중...": "Finalisation...", "멈춤": "Stopped", "메뉴": "Menu", "메모리 사용량": "Utilisation de la mémoire", "메모리 사용량 표시": "Afficher l'utilisation de la mémoire", "메시지 상자": "Message box", "모델": "Model", "모델 생성 중...": "Creating model...", "모델: {}": "Model: {}", "모두": "Tout", "모두 삭제": "Tout supprimer", "모두 선택": "Tout sélectionner", "모든 갤러리 넘버를 복사했습니다.": "ID des galleries copiés.", "모든 언어": "Toutes les langues", "모든 작업 완료": "All tasks complete", "모든 작업 완료 후": "When all tasks are complete", "모든 작업이 완료되면 알림 보이기": "Show notifications when all tasks are complete", "목록": "Liste", "목록 주소를 입력해주세요": "Veuillez taper une liste d'URLs", "목록 지우기": "Effacer la liste", "목록에서 제거": "Supprimer de la liste", "목록에서 폴더 제거": "Supprimer le dossier de la liste", "목록을 모두 지울까요?": "Are you sure you want to clear the list?", "미리보기": "Aperçu", "미리보기 크기": "Taille de l'aperçu", "배경 이미지": "Background image", "배경 이미지 변경": "Change background image", "배경 이미지 초기화": "Reset background image", "버전 확인": "Vérifier les mises à jour", "번역": "Traduire", "베타 버전 설치": "Install beta versions", "변경할 최대 크기": "Taille maximum", "변경할 최소 크기": "Taille minimum", "변환 중...": "Conversion...", "보기": "Visualiser", "보통": "Normal", "부팅 시 실행": "Démarrer automatiquement au démarrage", "북마크": "Favoris", "북마크 가져오기": "Importer des favoris", "북마크 가져오기 실패": "Échec de l'importation des favoris", "북마크 내보내기": "Exporter les favoris", "북마크 내보내기 실패": "Échec de l'exportation des favoris", "북마크를 가져왔습니다": "Favoris importé", "북마크를 내보냈습니다": "Favoris exporté", "북마크를 모두 삭제합니다.": "Remove all bookmarks.", "북마크를 모두 삭제했습니다.": "Removed all bookmarks.", "불러오기": "Chargement", "불완전한 작업 모두 다시 시작": "Redémarrer toutes les tâches incomplètes", "불완전한 작업 자동으로 다시 시작": "Redémarrer automatiquement les tâches incomplètes", "붙여넣고 다운로드": "Coller et télécharger", "뷰어... (&V)": "&Visualisateur...", "브라우저로 보기": "Show in browser", "브라우저로 보기 (&B)": "Afficher dans le navigateur (&B)", "비디오 코덱 우선순위": "Video codec priority", "비슷한 이미지 포함 (느림)": "Inclure les images similaires (lent)", "비율 유지": "Conserver les proportions", "비율 유지 - 꽉 차게": "Aspect ratio - fill", "비정상적인 로그인 시도": "Tentative de connexion anormale", "빠른 시작을 위한 작업 레이지 로딩": "Lazy load tasks for quick start", "빠른 실행 도구 모음 사용자 지정": "Personnaliser la barre d'accès rapide", "뽑기": "Au hasard", "뽑을 갯수": "Nombre de galeries", "사용법": "Mode d’emploi", "사용법...": "Comment utiliser...", "사용자 지정 테마 색": "Couleur de thème personnalisée", "사이드바": "Sidebar", "사이트": "Site", "사이트 추가": "Assistance", "사이트를 추가했습니다": "Support ajouté", "삭제된 데이터": "Données supprimées", "삭제된 데이터 다운로드": "Télécharger les données supprimées", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "Il n'y a pas de données supprimées.\nVeuillez télécharger les données à partir du menu.", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "Échec lors du téléchargement des données supprimées", "삭제된 데이터를 모두 받았습니다!": "Téléchargement terminé : données supprimées", "삭제시 휴지통으로 보냄": "Utiliser la corbeille", "상태": "Statut", "새 그룹 만들기": "Créer un nouveau groupe", "새 버전이 있습니다. 업데이트 하실래요?": "Il y a une nouvelle version. Voulez-vous mettre à jour ?", "새로고침": "Refresh", "샘플": "Sample", "서명": "Certificate", "서버": "Serveur", "선택 화 다운로드": "Sélectionnez les chapitres && Télécharger", "선택된 작업들 내보내기": "Exporter les tâches sélectionnées", "선택된 작업이 없습니다": "Aucune tâches sélectionnées", "선택하세요:": "Select:", "선택한 항목 중에서 자동 선택": "Sélectionner automatique dans les items sélectionné", "선호 언어": "Preferred language", "설명": "Commentaire", "설정": "Paramètres", "설정 (Preferences)": "Paramètres", "설정을 따름": "Follow preferences", "성공: {}\n실패: {}": "Succès : {}\nÉchec : {}", "소리": "Sound", "수동": "Manuel", "수동 업데이트": "Manuel", "수정...": "Edit...", "순서 변경": "Reorder", "숨김 키": "Boss-Key", "숫자": "Nombre", "스레드": "Threads", "스레드 생성 중...": "Démarrage des threads...", "스크롤 속도 ({}x)": "Vitsse du scroll ({}x)", "스크립트": "Script", "스크립트 가져오기": "Script d'importation", "스크립트 작성법": "How to write a script", "스크립트를 실행하시겠습니까?": "Êtes-vous certain de vouloir exécuter ce script ?", "스크립트를 읽는 중 오류가 발생했습니다": "Error occurred while reading the script", "스토리 읽는 중...": "Lecture des stories...", "스토리 포함": "Inclure les stories", "시딩": "Seeding", "시딩 중지": "Stop seeding", "시딩 하지 않음": "No seeding", "시리즈": "Séries", "시리즈 (Series)": "Séries", "시리즈가 없습니다": "Aucune séries", "시리즈명 복사 (&S)": "Copier les noms de séries (&S)", "시스템": "System", "시스템 설정 사용": "Use system setting", "시스템 종료": "Shutdown System", "시스템 트레이": "Barre des tâches", "시작 후 다운로드": "Télécharger durant cette session", "시작 후 지난 시간": "Elapsed time this run", "실패": "Échec", "실험 기능": "Expérimental", "썸네일": "Thumbnail", "썸네일 고정": "Fix thumbnail", "썸네일 다운로드": "Download thumbnails", "썸네일 숨기기": "Hide thumbnails", "썸네일 크기": "Thumbnail size", "썸네일을 선택하세요": "Choose a thumbnail", "아니오(&N)": "&Non", "아무것도 안 함": "Do nothing", "아이콘": "Icône", "압축": "Compression", "압축 형식": "Format", "압축파일 연결 프로그램": "Ouvrir les fichiers compressés par", "앞 100 페이지": "100 premières pages", "얕은 모델": "Shallow model", "언어": "Langue", "언어 (Language)": "Langue", "언어 (Languages)": "Langues", "업데이트": "Mise à jour", "업데이트 중...": "Mise à jour...", "업데이트 체크 중...": "Vérification des mises à jour...", "업로드": "Upload", "연결 프로그램 변경": "Choisir le programme à utiliser pour ouvrir", "열기": "Open", "예(&Y)": "&Oui", "예상치 못한 오류로 다운로드에 실패했습니다.": "Échec du téléchargement par une erreur inattendue.", "예시": "Exemple", "오디오 코덱 우선순위": "Audio codec priority", "오디오 트랙": "Audio track", "오류": "Erreur", "올바르지 않은 범위입니다": "Plage invalide", "올바르지 않은 주소입니다": "URL invalide", "올바르지 않은 형식의 검색 필터입니다": "Erreur de syntaxe non valide avec le filtre", "올바르지 않은 형식의 스크립트입니다": "Invalid format script", "옵션": "Options", "옵션 (JSON 포맷)": "Options (JSON format)", "옵션 (Options)": "Options", "완료": "Terminé", "완료된 작업 모두 제거": "Supprimer toutes les tâches complétées", "완료됨으로 표시": "Marquer comme terminé", "완전 삭제": "Supprimer définitivement", "우선순위": "priorité", "우선순위 변경": "Change priority", "움짤": "Ugoira", "움짤 변환...": "Convertir Ugoira...", "원본": "Originel", "원본 이미지 다운로드": "Download original images", "원본 크기보다 크게 바뀌지는 않습니다": "La taille ne sera pas plus grande que la taille originelle", "원본 파일 삭제": "Supprimer les fichiers téléchargés", "원하는 인공신경망 모델을 고르세요:": "Choose the artificial neural network model you want:", "웹브라우저": "WebBrowser", "웹툰 제외": "Exclure les Webtoons", "유사도": "Similarity", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "Compte / mot de passe invalide", "유효한 계정입니다": "Compte valide", "음소거": "Mute", "음악 파일에 앨범아트 삽입": "Ajouter la pochette d'album des fichiers audio", "음원": "Audio", "음질": "Qualité sonore", "이동": "Déplacer", "이동할 수 없습니다: {}": "Ne peut déplacer : {}", "이름": "Nom", "이름 변경": "Renommer", "이름을 얻는 도중 실패했습니다": "Impossible de lire le nom", "이미 다운로드한 작품 제외": "Exclude already downloaded galleries", "이미 모든 그룹이 추가되어 있습니다": "All groups have already been added", "이미 모든 시리즈가 추가되어 있습니다": "All series have already been added", "이미 모든 작가가 추가되어 있습니다": "All artists have already been added", "이미 모든 캐릭터가 추가되어 있습니다": "All characters have already been added", "이미 추가한 작업 다시 시작할지 물어봄": "Ask to retry tasks already in the list", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "This task already in the list. Do you want to download it again?", "이미 추가한 플러그인입니다": "This plugin already in the list", "이미 포함하는 그룹이 있습니다.": "There is already a group that includes tasks.", "이미지": "Image", "이미지 정보 캐시": "Cache image infos", "이미지 포맷 변환": "Changer le format de l'image", "이미지를 읽는 중 실패": "Échec de lecture des images", "익명 모드": "Anonymous mode", "인코딩": "Encodage", "일반": "Général", "일시 정지": "Pause", "읽기 중지": "Stop reading", "읽는 중...": "Lecture...", "자동": "Auto", "자동 녹화": "Auto recording", "자동 새로고침 & 스크롤": "Auto Refresh & Scroll", "자동 생성 자막 포함": "Include automatic captions", "자동 선택": "Auto select", "자동 업데이트": "Automatique", "자동 저장": "Enregistrement automatique", "자막": "Sous-titre", "자세한 정보": "Details", "자세한 정보 보기": "Show Details", "작가": "Artistes", "작가 (Artists)": "Artistes", "작가 이름": "Nom de l'artiste", "작가 추천": "Recommendation d'artistes", "작가 합쳐서 불러오기": "Charger tous les artistes ensemble", "작가가 없습니다": "Aucun artistes", "작가명 복사 (&A)": "Copier les noms d’artistes (&A)", "작게": "Small", "작성자": "Auteur", "작업": "Tâches", "작업 개수": "Nombre de tâches", "작업 기록": "Task history", "작업 기록 초기화 성공": "Task history cleared successfully", "작업 기록이 없습니다": "No task history", "작업 당 최대 연결": "Maximum connections per task", "작업 만들기 실패": "Failed to create tasks", "작업 목록 폭": "Task list width", "작업 수정": "Modifier la tâche", "작업 수정...": "Edit task...", "작업 완료": "Task complete", "작업 완료 후": "After task complete", "작업 왼쪽에서 순서 변경": "Reorder on the left side", "작업 용량": "Taille des fichiers", "작업 정보": "Informations de la tâche", "작업 정보... (&I)": "Info... (&I)", "작업 타입?": "Type de la tâche ?", "작업들 가져오기": "Tâches d'importation", "작업들 내보내기": "Exporter les tâches", "작업들을 가져올까요?": "Voulez-vous importer des tâches ?", "작업들을 가져왔습니다": "Tâches importées", "작업들을 내보냈습니다": "Tâches exportées", "작업이 아직 완료되지 않았습니다": "La tâche n'est pas encore terminée", "작업이 완료되면 알림 보이기": "Show notifications when tasks are complete", "작품 목록 가져오기": "Import gallery list", "작품 목록 내보내기": "Export gallery list", "잠금": "Verrouiller", "잠금 해제": "Déverrouiller", "장": "pages", "재개": "Resume", "재시작 후 적용됩니다": "Applies after restart", "저사양 모드": "Low spec mode", "저장": "Sauvegarder", "저장 && 종료": "Sauvegarder && Quitter", "저장 실패": "Échec de la sauvegarde", "저장 완료": "Enregistré", "저장 중...": "Enregistrement en cours...", "저장 폴더": "Dossier de téléchargement", "저장 폴더 변경...": "Changer le dossier de téléchargemet...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "Copier tous les ID des galeries dans le dossier de téléchargements", "저장 폴더에 있는 모든 작가 불러오기": "Charger tous les artistes dans le dossier de téléchargements", "저장... (&S)": "&Sauvegarder", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "Pas de fichier de configuration; Appuyez sur [F1] pour lire \"Comment utiliser\"", "적어도 {} 개의 작품이 필요합니다.": "At least {} galleries are required.", "점수": "Score", "정규식 문법": "Syntaxe du regex", "정규식으로 찾기": "Recherche par regex", "정렬 기준": "Trier par", "정말 단축키를 초기화하시겠습니까?": "Are you sure you want to reset shortcuts?", "정말 목록에서 제거하시겠습니까?": "Êtes-vous sûr de vouloir supprimer cela de la liste ?", "정말 삭제하시겠습니까?": "Etes-vous sûr de vouloir supprimer ?", "정말 설정을 초기화하시겠습니까?": "Are you sure you want to reset the preferences?", "정말 작업 기록을 초기화하시겠습니까?": "Are you sure you want to clear task history?", "정말 종료하시겠습니까?": "Êtes-vous sûr de vouloir quitter ?", "정말 중지하시겠습니까?": "Are you sure you want to stop?", "정말 쿠키를 초기화하시겠습니까?": "Are you sure you want to clear cookies?", "정보": "À propos", "정보...": "À propos...", "정확도": "Accuracy", "제거": "Supprimer", "제목": "Titre", "제목 (Title)": "Titre", "제목 복사 (&T)": "Copier le titre (&T)", "제외 태그": "Tags à exclure", "제외 태그 목록에 그룹 추가": "Add groups to the exclusion tag list", "제외 태그 목록에 시리즈 추가": "Add series to the exclusion tag list", "제외 태그 목록에 작가 추가": "Add artists to the exclusion tag list", "제외 태그 목록에 캐릭터 추가": "Add characters to the exclusion tag list", "조각 표시": "Show pieces", "종료": "Quitter", "종료 중...": "Quitter...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "Glissez horizontalement : ±1\nGlissez verticalement : ±100", "주소": "Address", "주소 or 갤러리 넘버": "URL ou ID de la galerie", "주소를 입력해주세요": "Veuillez saisir quelques URLs", "중간": "Medium", "중단": "Interrompre", "중복 이미지 찾기": "Outil de recherche d'images en doublon", "중복 이미지 찾는 중": "Recherche des images en doublons", "중복 제거": "Supprimer les doublons", "지원하는 사이트:": "Sites pris en charge :", "지원하는 토큰": "Supported tokens", "지정한 페이지만 다운로드합니다.": "Télécharger les pages sélectionnées uniquement.", "직접 다운로드": "Direct download", "진행도": "Progress", "참고 작품: {} 개": "Reference: {} galleries", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "Merci de lire :Aide - Comment utiliser (F1) - Charger les cookies", "창 보이기 / 숨기기": "Afficher / Cacher la fenêtre", "창 위치 크기 기억": "Remember window position and size", "찾기...": "Rechercher...", "채널 영상 역순으로 다운로드": "Download channel videos in reverse order", "첫 번째 파일 열기": "Open the first file", "첫 번째 파일 열기 (&O)": "Ouvrez le premier fichier (&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "Première page, 10 ~ 20e pages, dernière page", "체인지로그": "Changelog", "초기화": "Reset", "최대 다운로드 속도": "Vitesse maximale de téléchargement", "최대 동시 작업": "Maximum parallel tasks", "최대 페이지 제한": "Maximum page limit", "최소화 버튼으로 트레이로 최소화": "Le bouton Réduire minimise dans la barre des tâches", "최신 버전:": "Latest:", "추가한 날짜": "Date d'ajout", "취소": "Annuler", "캐릭터": "Personnages", "캐릭터 (Characters)": "Personnages", "캐릭터 이름": "Le nom du personnage", "캐릭터가 없습니다": "Aucun personnages", "캐릭터명 복사 (&C)": "Copier les noms de personnages (&C)", "코멘트": "Commentaire", "코멘트 수정": "Modifier le commentaire", "쿠키": "Cookies", "쿠키 내보내기": "Exporter les cookies", "쿠키 내보내기 성공": "Cookies successfully exported", "쿠키 불러오기": "Charger les cookies", "쿠키 불러오기 성공": "Cookies successfully imported", "쿠키 초기화 성공": "Cookies successfully cleared", "쿠키가 없습니다": "Pas de cookies", "쿠키를 업데이트하세요": "Mettez à jour vos cookies", "크게": "Large", "크기": "Taille", "크기 조절": "Redimensionner", "크기 조절...": "Redimensionnement...", "크롬 확장프로그램 연동에 실패했습니다.": "Erreur du lien vers l'extension Chrome.", "클라이언트": "Clilent", "클래식": "Classic", "클립보드에서 자동 추가": "Presse-papiers", "타입": "Types", "타입 (Types)": "Types", "태그": "Tags", "태그 \"{}\" 제거": "Enlever le tag \"{}\"", "태그 \"{}\" 추가": "Ajouter un tag \"{}\"", "태그 (Tags)": "Tags", "태그 :": "Tag :", "태그 설정": "Paramètres des tags", "태그 수정": "Edit tags", "태그 없음": "No tags", "테마": "Theme", "토렌트 고급 옵션 초기화": "Reset torrent advanced options", "토렌트 추가": "Ajout un torrent", "토렌트 파일 연결": "Associate with torrent files", "토큰": "Tokens", "통계": "Statistiques", "통과": "Passer", "투명도": "Opacité", "트래커 수정": "Edit trackers", "트래커 추가": "Add trackers", "트레이로 전환되었습니다": "Minimiser dans la barre des tâches", "트레이로 최소화": "Réduire dans la barre des tâches", "트레이로 최소화 알림 보이기": "Show minimize notifications in the tray", "트레이에서 알림 보이기": "Afficher les notifications", "파일": "Fichier", "파일 목록": "File list", "파일 삭제": "Supprimer les fichiers", "파일 삭제 (&X)": "Supprimer les fichiers (&X)", "파일 수": "Nombre de fichiers", "파일 스캔 중": "Analyse des fichiers", "파일 유형 제외": "Exclure des types de fichiers", "파일 체크 중...": "Checking files...", "파일 크기": "Taille du fichier", "파일 형식": "Format", "파일 형식 물어보기": "Demander le format", "파일명": "Nom du fichier", "파일명 형식": "Format de fichier", "파일을 고르세요:": "Select files:", "파일을 선택하세요": "Sélectionner un fichier", "파일의 수정한 날짜를 업로드 날짜로 변경": "Change the file's modified date to the upload date", "파일이 없습니다": "No files", "패스워드": "Mot de passe", "퍼지로 찾기": "Recherche par fuzzy", "페이지 읽는 중...": "Lecture des pages...", "페이지 지정": "Sélectionnez les pages", "페이지 지정 다운로드": "Sélectionnez les pages && Télécharger", "페이지 지정 다운로드 기본값": "Default value for \"Select pages && Download\"", "페이지를 선택해주세요": "Veuillez sélectionner des pages", "페이지를 읽는 중에 오류가 발생했습니다": "Une erreur est survenue lors de la tentative de lecture des pages", "평범하게 찾기": "Recherche par défaut", "포트": "Port", "포함 태그": "Tags à inclure", "폭 맞춤": "Adapter à la largeur", "폰트": "Font", "폰트 변경...": "Changer la police...", "폰트 선택": "Select Font", "폰트 초기화": "Revenir à la police par défaut", "폴더": "Dossier", "폴더 && 압축파일": "Dossier && Fichiers Zip", "폴더 바로가기": "Folder shortcuts", "폴더 열기": "Ouvrir le dossier", "폴더 이동": "Déplacer le dossier", "폴더 추가": "Ajouter le dossier", "폴더가 없습니다": "No folder", "폴더들": "Directories", "폴더들을 선택하세요": "Select folders", "폴더를 선택하세요": "Sélectionnez un dossier", "폴더를 추가해주세요": "Merci d'ajouter des dossiers", "폴더명 형식": "Format du dossier", "표지 검색 실패": "Erreur lors de la recherche de la couverture", "표지 검색...": "Rechercher une couverture...", "프로그램 끝내기": "Quit the program", "프로그램 패스워드": "Mot de passe du programme", "프록시": "Proxy", "플러그인": "Plugins", "플러그인을 추가하시겠습니까?": "Are you sure you want to add this plugin?", "플레이리스트": "Playlist", "플레이리스트 파일에 번호 매기기": "Numerate files in playlists", "플레이리스트 한 폴더에 다운로드": "Télécharger la playlist dans un dossier", "플로팅 미리보기": "Aperçu flottant", "피드백": "Feedback", "필터": "Filtre", "필터창": "Filtre", "하나 이상의 타입을 선택해주세요.": "Choisissez au moins un type.", "하위폴더 포함": "Inclure les sous-dossiers", "학습 중...": "Learning...", "한 줄 당 한 트래커 URL": "One tracker URL per line", "항상 위": "Toujours au premier plan", "항상 위 OFF": "Always on top OFF", "항상 위 ON": "Always on top ON", "해당 링크로 이동합니다": "Ouvrir le lien...", "해상도": "Résolution", "현재 버전: v{}\n최신 버전: v{}": "Version actuelle : v{}\nVersion la plus récente : v{}", "현재 작업 없음": "There are no current tasks", "호스트": "Hôte", "화 선택": "Choose the episodes", "화질": "Qualité", "확인": "OK", "후원": "Sponsor", "휴지통으로 이동": "Déplacer dans la corbeille" } } ================================================ FILE: translation/tr_ja.hdl ================================================ { "lang": "ja", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "「一部の提供元を除外」が有効なら、フォルダは複数必要です", "#Cancel#": "キャンセル", "#EB#": "{} EB", "#EMPTY#": "ないよ (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/秒", "#MB#": "{} MB", "#MB/s#": "{} MB/秒", "#OK#": "OK", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "外観", "#boss_invalid_pw#": "無効なパスワード!", "#boss_pw#": "パスワード:", "#byte#": "{} byte", "#bytes#": "{} byte", "#click#": "クリック", "#combo_hour#": "{} 時間", "#combo_hours#": "{} 時間", "#combo_min#": "{} 分", "#combo_mins#": "{} 分", "#combo_sec#": "{} 秒", "#combo_secs#": "{} 秒", "#date01#": "1月 {d}日", "#date01y#": "1月 {d}日, {y}", "#date02#": "2月 {d}日", "#date02y#": "2月 {d}日, {y}", "#date03#": "3月 {d}日", "#date03y#": "3月 {d}日, {y}", "#date04#": "4月 {d}日", "#date04y#": "4月 {d}日, {y}", "#date05#": "5月 {d}日", "#date05y#": "5月 {d}日, {y}", "#date06#": "6月 {d}日", "#date06y#": "6月 {d}日, {y}", "#date07#": "7月 {d}日", "#date07y#": "7月 {d}日, {y}", "#date08#": "8月 {d}日", "#date08y#": "8月 {d}日, {y}", "#date09#": "9月 {d}日", "#date09y#": "9月 {d}日, {y}", "#date10#": "10月 {d}日", "#date10y#": "10月 {d}日, {y}", "#date11#": "11月 {d}日", "#date11y#": "11月 {d}日, {y}", "#date12#": "12月 {d}日", "#date12y#": "12月 {d}日, {y}", "#developed_by#": "開発者 Kurt Bestor", "#dirformat_artist#": "アーティスト名", "#dirformat_group#": "グループ名", "#dirformat_lang#": "英語", "#dirformat_series#": "シリーズ", "#dirformat_title#": "題名", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "すべてのファイル {}", "#filter_bmk#": "ブックマークファイル {}", "#filter_cookie#": "Netscape HTTP Cookie ファイル (*.txt)", "#filter_hdfb#": "Hitomi Downloader 絞り込みブックマーク {}", "#filter_hdk#": "Hitomi Downloader ショートカット {}", "#filter_hdl#": "Hitomi Downloader Linguist {}", "#filter_hds#": "Hitomi Downloader スクリプト {}", "#filter_hdt#": "Hitomi Downloader タスク {}", "#filter_image#": "画像 {}", "#filter_torrent#": "トレント {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "ブラウザが必要です: --safemode を使用してください", "#invalid_loginRequired#": "要ログイン: Cookieを更新してください", "#invalid_loginRequired2#": "要ログイン: ログインしてください", "#invalid_outdatedExtension#": "拡張機能は古くなっています: 拡張機能を更新してください", "#invalid_unknownSite#": "不明なサイト", "#lang_afrikaans#": "アフリカーンス語", "#lang_albanian#": "アルバニア語", "#lang_amharic#": "アムハラ語", "#lang_arabic#": "アラビア語", "#lang_arabic_(algeria)#": "アラビア語 (アルジェリア)", "#lang_arabic_(bahrain)#": "アラビア語 (バーレーン)", "#lang_arabic_(egypt)#": "アラビア語 (エジプト)", "#lang_arabic_(iraq)#": "アラビア語 (イラク)", "#lang_arabic_(jordan)#": "アラビア語 (ヨルダン)", "#lang_arabic_(kuwait)#": "アラビア語 (クウェート)", "#lang_arabic_(lebanon)#": "アラビア語 (レバノン)", "#lang_arabic_(libya)#": "アラビア語 (リビア)", "#lang_arabic_(morocco)#": "アラビア語 (モロッコ)", "#lang_arabic_(oman)#": "アラビア語 (オマーン)", "#lang_arabic_(qatar)#": "アラビア語 (カタール)", "#lang_arabic_(saudi_arabia)#": "アラビア語 (サウジアラビア)", "#lang_arabic_(sudan)#": "アラビア語 (スーダン)", "#lang_arabic_(syrian_arab_republic)#": "アラビア語 (シリアアラブ共和国)", "#lang_arabic_(tunisia)#": "アラビア語 (チュニジア)", "#lang_arabic_(united_arab_emirates)#": "アラビア語 (アラブ首長国連邦)", "#lang_arabic_(yemen)#": "アラビア語 (イエメン)", "#lang_armenian#": "アルメニア人語", "#lang_assamese#": "アッサム語", "#lang_azerbaijani#": "アゼルバイジャン語", "#lang_bashkir#": "バシキール語", "#lang_basque#": "バスク語", "#lang_belarusian#": "ベラルーシ語", "#lang_bengali_(bangladesh)#": "ベンガル語 (バングラデシュ)", "#lang_bengali_(india)#": "ベンガル語 (インド)", "#lang_breton#": "ブルトン語", "#lang_bulgarian#": "ブルガリア語", "#lang_burmese#": "ビルマ語", "#lang_catalan#": "カタルーニャ語", "#lang_central_khmer#": "中央クメール語", "#lang_chinese_(china)#": "中国語 (中国)", "#lang_chinese_(hong_kong)#": "中国語 (香港)", "#lang_chinese_(macao)#": "中国語 (マカオ)", "#lang_chinese_(simplified)#": "中国語 (簡体)", "#lang_chinese_(singapore)#": "中国語 (シンガポール)", "#lang_chinese_(taiwan)#": "中国語 (台湾)", "#lang_chinese_(traditional)#": "中国語 (繁体)", "#lang_corsican#": "コルシカ語", "#lang_croatian_(bosnia_and_herzegovina)#": "クロアチア語 (ボスニア・ヘルツェゴビナ)", "#lang_croatian_(croatia)#": "クロアチア語 (クロアチア)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "ケチュア語 (ボリビア)", "#lang_cusco_quechua_(ecuador)#": "ケチュア語 (エクアドル)", "#lang_cusco_quechua_(peru)#": "ケチュア語 (ペルー)", "#lang_czech#": "チェコ語", "#lang_danish#": "デンマーク語", "#lang_dari#": "ダリー語", "#lang_dhivehi#": "ディベヒ語", "#lang_dutch_(belgium)#": "オランダ語 (ベルギー)", "#lang_dutch_(netherlands)#": "オランダ語 (オランダ)", "#lang_english#": "英語", "#lang_english_(australia)#": "英語 (オーストラリア)", "#lang_english_(belize)#": "英語 (ベリーズ)", "#lang_english_(canada)#": "英語 (カナダ)", "#lang_english_(india)#": "英語 (インド)", "#lang_english_(ireland)#": "英語 (アイルランド)", "#lang_english_(jamaica)#": "英語 (ジャマイカ)", "#lang_english_(malaysia)#": "英語 (マレーシア)", "#lang_english_(malta)#": "英語 (Malta)", "#lang_english_(new_zealand)#": "英語 (ニュージーランド)", "#lang_english_(philippines)#": "英語 (フィリピン)", "#lang_english_(singapore)#": "英語 (シンガポール)", "#lang_english_(south_africa)#": "英語 (南アフリカ)", "#lang_english_(trinidad_and_tobago)#": "英語 (トリニダード・トバゴ)", "#lang_english_(united_kingdom)#": "英語 (イギリス)", "#lang_english_(united_states)#": "英語 (アメリカ)", "#lang_english_(zimbabwe)#": "英語 (ジンバブエ)", "#lang_estonian#": "エストニア語", "#lang_faroese#": "フェロー語", "#lang_filipino#": "フィリピン語", "#lang_finnish#": "フィンランド語", "#lang_french#": "フランス語", "#lang_french_(belgium)#": "フランス語 (ベルギー)", "#lang_french_(canada)#": "フランス語 (カナダ)", "#lang_french_(france)#": "フランス語 (フランス)", "#lang_french_(luxembourg)#": "フランス語 (ルクセンブルグ)", "#lang_french_(monaco)#": "フランス語 (モナコ)", "#lang_french_(switzerland)#": "フランス語 (スイス)", "#lang_galician#": "ガリシア語", "#lang_georgian#": "グルジア語", "#lang_german_(austria)#": "ドイツ語 (オーストリア)", "#lang_german_(germany)#": "ドイツ語 (ドイツ)", "#lang_german_(liechtenstein)#": "ドイツ語 (リヒテンシュタイン)", "#lang_german_(luxembourg)#": "ドイツ語 (ルクセンブルグ)", "#lang_german_(switzerland)#": "ドイツ語 (スイス)", "#lang_gujarati#": "グジャラート語", "#lang_hebrew#": "ヘブライ語", "#lang_hindi#": "ヒンディー語", "#lang_hungarian#": "ハンガリー語", "#lang_icelandic#": "アイスランド語", "#lang_igbo#": "イボ語", "#lang_inari_sami#": "イナリ・サーミ語", "#lang_indonesian#": "インドネシア語", "#lang_irish#": "アイルランド語", "#lang_italian_(italy)#": "イタリア語 (イタリア)", "#lang_italian_(switzerland)#": "イタリア語 (スイス)", "#lang_japanese#": "日本語", "#lang_kalaallisut#": "カラーリット語", "#lang_kannada#": "カンナダ語", "#lang_kazakh#": "カザフ語", "#lang_kinyarwanda#": "ルワンダ語", "#lang_kirghiz#": "キルギス語", "#lang_korean#": "韓国語", "#lang_lao#": "ラーオ語", "#lang_latvian#": "ラトビア語", "#lang_lithuanian#": "リトアニア語", "#lang_lower_sorbian#": "低地ソルブ語", "#lang_lule_sami_(norway)#": "ルレ・サーミ語 (ノルウェー)", "#lang_lule_sami_(sweden)#": "ルレ・サーミ語 (スウェーデン)", "#lang_luxembourgish#": "ルクセンブルグ語", "#lang_macedonian#": "マケドニア語", "#lang_malayalam#": "マラヤーラム語", "#lang_maltese#": "マルタ語", "#lang_maori#": "マオリ語", "#lang_mapudungun#": "マプチェ語", "#lang_marathi#": "マラーティー語", "#lang_modern_greek#": "現代ギリシャ語", "#lang_mohawk#": "モホーク語", "#lang_mongolian#": "モンゴル語", "#lang_nepali#": "ネパール語", "#lang_northern_sami_(finland)#": "北部サーミ語 (フィンランド)", "#lang_northern_sami_(norway)#": "北部サーミ語 (ノルウェー)", "#lang_northern_sami_(sweden)#": "北部サーミ語 (スウェーデン)", "#lang_norwegian#": "ノルウェー語", "#lang_norwegian_bokmål#": "ノルウェー語 ブークモール", "#lang_norwegian_nynorsk#": "ノルウェー語 ニーノシュク", "#lang_odia#": "オリヤー語", "#lang_panjabi#": "パンジャーブ語", "#lang_pedi#": "ペディ語", "#lang_persian#": "ペルシャ語", "#lang_polish#": "ポーランド語", "#lang_portuguese#": "ポルトガル語", "#lang_portuguese_(brazil)#": "ポルトガル語 (ブラジル)", "#lang_portuguese_(portugal)#": "ポルトガル語 (ポルトガル)", "#lang_pushto#": "パシュトー語", "#lang_romanian_(macao)#": "ルーマニア語 (マカオ)", "#lang_romanian_(romania)#": "ルーマニア語 (ルーマニア)", "#lang_romansh#": "ロマンシュ語", "#lang_russian#": "ロシア語", "#lang_russian_(macao)#": "ロシア語 (マカオ)", "#lang_russian_(russian_federation)#": "ロシア語 (ロシア連邦)", "#lang_sanskrit#": "サンスクリット語", "#lang_scottish_gaelic_(ireland)#": "スコットランド・ゲール語 (アイルランド)", "#lang_scottish_gaelic_(united_kingdom)#": "スコットランド・ゲール語 (イギリス)", "#lang_serbian_(bosnia_and_herzegovina)#": "セルビア語 (ボスニア・ヘルツェゴビナ)", "#lang_serbian_(cyrillic)#": "セルビア語 (キリル)", "#lang_serbian_(latin)#": "セルビア語 (ラテン)", "#lang_serbian_(montenegro)#": "セルビア語 (モンテネグロ)", "#lang_serbian_(serbia)#": "セルビア語 (セルビア)", "#lang_sichuan_yi#": "四川彝語", "#lang_sinhala#": "シンハラ語", "#lang_skolt_sami#": "スコルト・サーミ語", "#lang_slovak#": "スロバキア語", "#lang_slovenian#": "スロベニア語", "#lang_southern_sami_(norway)#": "南部サーミ語 (ノルウェー)", "#lang_southern_sami_(sweden)#": "南部サーミ語 (スウェーデン)", "#lang_spanish#": "スペイン語", "#lang_spanish_(argentina)#": "スペイン語 (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "スペイン語 (ボリビア)", "#lang_spanish_(chile)#": "スペイン語 (チリ)", "#lang_spanish_(colombia)#": "スペイン語 (コロンビア)", "#lang_spanish_(costa_rica)#": "スペイン語 (コスタリカ)", "#lang_spanish_(dominican_republic)#": "スペイン語 (ドミニカ共和国)", "#lang_spanish_(ecuador)#": "スペイン語 (エクアドル)", "#lang_spanish_(el_salvador)#": "スペイン語 (エルサルバドル)", "#lang_spanish_(guatemala)#": "スペイン語 (グアテマラ)", "#lang_spanish_(honduras)#": "スペイン語 (ホンジュラス)", "#lang_spanish_(mexico)#": "スペイン語 (メキシコ)", "#lang_spanish_(nicaragua)#": "スペイン語 (ニカラグア)", "#lang_spanish_(panama)#": "スペイン語 (パナマ)", "#lang_spanish_(paraguay)#": "スペイン語 (パラグアイ)", "#lang_spanish_(peru)#": "スペイン語 (ペルー)", "#lang_spanish_(puerto_rico)#": "スペイン語 (プエルトリコ)", "#lang_spanish_(spain)#": "スペイン語 (スペイン)", "#lang_spanish_(united_states)#": "スペイン語 (アメリカ合衆国)", "#lang_spanish_(uruguay)#": "スペイン語 (ウルグアイ)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "スペイン語 (ベネズエラ・ボリバル共和国)", "#lang_swahili#": "スワヒリ語", "#lang_swedish_(finland)#": "スウェーデン語 (フィンランド)", "#lang_swedish_(sweden)#": "スウェーデン語 (スウェーデン)", "#lang_swiss_german#": "スイスドイツ語", "#lang_syriac#": "シリア語", "#lang_tamil#": "タミル語", "#lang_tatar#": "タタール語", "#lang_telugu#": "テルグ語", "#lang_thai#": "タイ語", "#lang_tibetan#": "チベット語", "#lang_tswana#": "ツワナ語", "#lang_turkish#": "トルコ語", "#lang_turkmen#": "トルクメン語", "#lang_uighur#": "ウイグル語", "#lang_ukrainian#": "ウクライナ語", "#lang_upper_sorbian#": "高地ソルブ語", "#lang_urdu#": "ウルドゥー語", "#lang_uzbek#": "ウズベク語", "#lang_vietnamese#": "ベトナム語", "#lang_welsh#": "ウェールズ語", "#lang_western_frisian#": "西フリジア語", "#lang_wolof#": "ウォロフ語", "#lang_xhosa#": "コサ語", "#lang_yakut#": "サハ語", "#lang_yoruba#": "ヨルバ語", "#lang_zulu#": "ズールー語", "#loading_lib#": "読込中: {}", "#new_group#": "新しいグループ", "#new_item#": "新しいアイテム", "#p#": "{} ページ", "#recomm_all_langs#": "すべての言語", "#recomm_artist#": "作者", "#recomm_main#": "保存フォルダ内の作品を分析して作者をお勧めします。\n\nその精度は提供された情報によります。\n作品数が多いほど良くなります。(100以上を推奨)\n\n{item} 個の作品があります。", "#recomm_score#": "スコア", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/秒", "#setting_autosaveL#": "", "#setting_autosaveR#": "ごと", "#setting_incompleteL#": "", "#setting_incompleteR#": "後", "#t_etc#": "その他", "#t_file#": "ファイル", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "トレント", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "青", "#tag_gray#": "灰", "#tag_green#": "緑", "#tag_orange#": "橙", "#tag_purple#": "紫", "#tag_red#": "赤", "#tag_yellow#": "黄", "#task_artist#": "作者", "#task_date#": "日時", "#task_done#": "完了", "#task_folder#": "フォルダ", "#task_incomplete#": "未完了", "#task_input#": "入力文字列", "#task_invalid#": "無効", "#task_multiple#": "複数", "#task_range#": "範囲", "#task_single#": "単一", "#task_site#": "サイト", "#task_status#": "状態", "#task_title#": "タイトル", "#task_type#": "種類", "#task_url#": "URL", "#task_zipfile#": "zipファイル", "#torrent_anon#": "トラッカーには一般的なユーザー エージェントが使用されます (非公開のトレントを除く)。
非公開のトラッカーに対し、あなたのローカル IPv4 および IPv6 アドレスがクエリ文字列の引数として送信されることはありません。
announce_ip が設定されている場合、トラッカーに送信されません。
クライアントのバージョンは、拡張ハンドシェイクでピアに送信されません。
DHTノードは無効になります。", "#translation#": "翻訳", "50개씩 끊어서 검색": "50個ずつ検索", "DPI 우회": "DPIをバイパスする", "DPI 우회 제외 도메인": "DPI バイパスに含めないドメイン", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "\"DPIのバイパス\" がオフになっています。一部のサイトでは機能しない場合があります。", "E(x)Hentai 로그인 쿠키 필요": "E(x)Hentai ログインにはCookieが必要です", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "IPは一時的にロックされています。 しばらくしてからもう一度お試しください", "PDF 생성": "PDFを作成する", "UI 스케일 ({}%)": "UIの拡大 ({}%)", "URL을 입력하세요": "URLを入力してください", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "[ダウンロード]を押してダウンロードします。 [OK]を押して終了します。", "reCAPTCHA 풀기": "reCAPTCHAを解決する", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "再起動まで {day}日 {hour}時間 {min}分 {sec}秒: {id}", "{hour}시간 {min}분 {sec}초": "{hour}時間 {min}分 {sec}秒", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "{hour}時間 {min}分 {sec}秒後に再試行: {id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "{min}分 {sec}秒後に再試行: {id}", "{sec}초 뒤 다시 시작: {id}": "{sec}秒後に再試行: {id}", "{} 개 선택": "{} 項目を選択", "{} 개 찾음": "{} 個の作品を発見", "{} 개의 작업들이 있습니다": "{}個タスクがあります", "{} 개의 진행 중인 작업이 있습니다.": "{}個のタスクが進行中です。", "{} 를 제외 태그에 추가했습니다": "除外するタグに {} を追加しました", "{} 설정": "設定 {}", "{} 시간 뒤 다시 시작": "{} 時間で再起動", "{} 시간 전 데이터": "データ; {} 時間前", "{} 일 뒤 다시 시작": "{} 日で再起動", "{} 일 전 데이터": "データ; {} 日前", "{}개 작업의 첫 번째 파일을 엽니다.": "{}タスクの最初のファイルを開く", "{}개의 불완전한 작업을 다시 시작합니다.": "{}個の未完了タスクを再試行します。", "{}개의 완료된 작업을 목록에서 제거합니다.": "{}個の完了タスクを一覧から削除します。", "{}개의 완료된 작업을 제거합니다.": "{}個の完了タスクを削除します。", "{}개의 작업을 다시 시작합니다.": "{}個のタスクを再試行します。", "『 {} 』는 이미 북마크되어 있습니다": "『 {} 』はすでにブックマークにあります", "『 {} 』를 복사했습니다": "『 {} 』をコピーしました", "『 {} 』를 북마크로부터 불러왔습니다": "『 {} 』がブックマークから読み込まれました", "『 {} 』를 북마크에서 불러왔습니다": "『 {} 』がブックマークから読み込まれました", "『 {} 』를 북마크했습니다": "『 {} 』をブックマークしました", "『 {} 』를 저장 폴더에서 불러왔습니다": "『 {} 』がダウンロードフォルダから読み込まれました", "가능하면 일본어 제목 사용": "利用可能なら日本語のタイトルを使用", "가능한 경우 챕터 마커 추가": "チャプターがあれば区切りを追加", "가져오기": "インポート", "가져오기 실패": "インポートに失敗しました", "간단 검색": "簡易検索", "같은 소스 제외": "一部の提供元を除外", "개": "項目", "개별 다운로드는 지원하지 않습니다": "単一の投稿のダウンロードには対応していません", "갤러리 넘버": "ギャラリーID", "갤러리 넘버 복사": "ギャラリーIDをコピー", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "ギャラリーIDのコピー中にエラーが発生しました。", "갤러리 작업 정보... (&I)": "ギャラリーの情報... (&I)", "갤러리 정보": "ギャラリーの情報", "갤러리 정보 파일 (info.txt) 생성": "ギャラリー情報のファイルを作成 (info.txt)", "갯수": "合計", "갱신 간격": "更新間隔", "거꾸로": "逆", "검색": "検索", "검색 데이터": "検索データ", "검색 도중에 사용할 수 없는 기능입니다.": "検索中にこの機能は使えません。", "검색 범위": "検索範囲", "검색 순서": "検索順序", "검색 필터": "検索フィルタ", "검색기": "検索ツール", "검색어": "検索語句", "검색어 자동 완성": "語句の自動補完", "결과": "結果", "결과 저장": "結果を保存する", "경고 없이 삭제": "削除時に警告しない", "경로를 선택하세요": "パスを選択する", "계속 검색": "次を検索", "계정": "ユーザー名", "계정 / 패스워드": "ユーザー名/パスワード", "고급": "高度", "고급 검색": "詳細検索", "고급 옵션": "詳細オプション", "고정": "固定", "고정 해제": "固定解除", "공식 스크립트 && 플러그인": "公式のスクリプトとプラグイン", "공인 IP: {}": "パブリックIP: {}", "관리자 권한 없이 실행": "管理者権限なしで実行", "관리자 권한 필요": "管理者権限が必要", "광고 스킵": "広告を省略", "그대로": "通常", "그룹": "グループ", "그룹 (Groups)": "グループ", "그룹 안의 모든 작업 다시 시작": "このグループのすべてのタスクを再試行", "그룹 이름": "グループ名", "그룹 펼치기 / 접기": "グループの展開/折りたたみ", "그룹 합쳐서 불러오기": "すべてのグループをまとめて読み込む", "그룹명 복사 (&G)": "グループ名をコピー (&G)", "그룹으로 이동": "グループに移動", "그룹을 포함하는 그룹은 만들 수 없습니다.": "グループにグループを含めることはできません。", "그룹이 없습니다": "グループなし", "기본": "標準", "기본 데이터": "標準データ", "기본 데이터 다운로드": "標準データのダウンロード", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "通常の並び替え状態でのみグループを作成できます。", "기본값": "初期値", "기타": "その他", "깊은 모델": "深層モデル", "끝내기": "終了", "날짜": "日付", "낮음": "低", "내보내기": "エクスポート", "내보내기 실패": "エクスポートに失敗しました", "내용 보기": "スクリプトの表示", "내장 웹브라우저": "内蔵のウェブブラウザ", "내장 이미지 뷰어": "内蔵の画像ビューア", "네트워크": "ネットワーク", "녹화": "録画", "녹화 중...": "レコーディング...", "녹화 중지": "レコーディングを停止する", "높음": "高", "다른 동영상 사이트에도 적용됩니다.": "他の動画サイトにも適用されます。", "다시 시작 (&S)": "再試行 (&S)", "다시 시작 실패; 복구됨": "再試行に失敗したため、元に戻しました。", "다운로드": "ダウンロード", "다운로드 & 제거": "ダウンロードして削除", "다운로드 && 제거": "ダウンロード&&削除", "다운로드 (&D)": "ダウンロード (&D)", "다운로드 날짜 표시": "ダウンロードされた日を表示", "다운로드 속도": "ダウンロード速度", "다운로드 완료": "ダウンロード完了", "다운로드 완료 후 자동 제거": "ダウンロードが完了時に自動削除", "다운로드 일시 정지 / 재개": "ダウンロード一時停止/再開", "다운로드 중": "ダウンロード中", "다운로드가 완료되면 알림": "ダウンロード完了時に通知を表示", "다운로드가 완료될 때까지 절전모드 방지": "ダウンロード完了までシステムのスリープを抑制", "다운로드하기 전에 파일 고르기": "ダウンロード前にファイルを選択", "다운로드하지 않음": "ダウンロードしない", "다운로드한 작품만": "ダウンロード済みのギャラリーのみ", "다음 검색시 더 빠르게 검색": "次回の検索でより早く検索", "다음 작업들이 목록에서 제거됩니다:": "以下のタスクが一覧から削除されます:", "다음 파일들이 삭제됩니다:": "以下のファイルが削除されます:", "다크 모드": "ダークモード", "단일 파일": "ファイル", "단축키": "ショートカットキー", "단축키 내보내기": "ショートカットキーのエクスポート", "단축키 내보내기 성공": "ショートカットキーが正常にエクスポートされました", "단축키 불러오기": "ショートカットキーのインポート", "단축키 불러오기 성공": "ショートカットキーが正常にインポートされました", "단축키 수정": "ショートカットキーの編集", "단축키 초기화 성공": "ショートカットキーが正常に初期化されました", "닫기 버튼으로 트레이로 최소화": "閉じるボタンでシステムトレイに最小化", "대기 중": "待機中", "대기 중...": "待機中...", "데이터 다운로더": "データダウンロードツール", "데이터 분류 중...": "データ分類中...", "데이터 분석 중...": "データ分析中...", "데이터 없음": "データなし", "데이터 읽는 중...": "データの読み込み中...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "データがありません。\nメニューからデータをダウンロードしてください。", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "データがありません。\n検索ツールからデータをダウンロードしてください", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "前回のデータの更新は1週間以上前です。\n更新してください。", "데이터를 다운로드하는 도중에 실패했습니다.": "データのダウンロードに失敗しました", "데이터를 모두 받았습니다!": "すべてのデータをダウンロードしました!", "도구": "ツール", "도구창": "メニューバー", "도움말": "ヘルプ", "동영상": "動画", "동영상 변환...": "動画の変換...", "뒤 100 페이지": "最後の100ページ", "드래그 & 드랍해서 바꾸세요:": "ドラッグ&ドロップで変更:", "디더링": "ディザ", "디버그": "デバッグ", "디스코드": "Discord", "라이선스": "ライセンス", "랜덤으로 하나 선택": "ランダムに選択", "로그...": "ログ...", "로그인": "ログイン", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "ログインに失敗しました: {}{}\n[オプション-環境設定-Pixiv設定-ログイン]をご覧ください。", "로그인 중...": "ログイン中...", "로그인 테스트": "テストログイン", "로드 중: {}": "読込中: {}", "로컬 파일 감지": "ローカルファイルの検出", "로컬 파일로부터 새 작업 만들기": "ローカルファイルから新規タスクを作成", "를 북마크에서 지웠습니다": "をブックマークから消去しました", "리트윗 제외": "リツイートを除外", "리트윗 포함": "リツイートを含める", "릴리즈 노트": "リリースノート", "링크 열기": "リンクを開く", "링크 주소 복사": "リンクをコピー", "링크 주소 복사 (&C)": "リンクをコピー (&C)", "마무리 중...": "終了...", "멈춤": "停止", "메뉴": "メニュー", "메모리 사용량": "メモリ使用量", "메모리 사용량 표시": "メモリー使用量を表示", "메시지 상자": "メッセージボックス", "모델": "モデル", "모델 생성 중...": "モデルの作成...", "모델: {}": "モデル: {}", "모두": "すべて", "모두 삭제": "すべて削除", "모두 선택": "すべて選択", "모든 갤러리 넘버를 복사했습니다.": "すべてのギャラリーIDをコピーしました。", "모든 언어": "すべての言語", "모든 작업 완료": "すべてのタスクが完了", "모든 작업 완료 후": "すべてのタスク完了時に", "모든 작업이 완료되면 알림 보이기": "すべてのタスク完了時に通知を表示", "목록": "一覧", "목록 주소를 입력해주세요": "リストのURLを入力してください。", "목록 지우기": "一覧の消去", "목록에서 제거": "一覧から削除", "목록에서 폴더 제거": "一覧からフォルダを削除", "목록을 모두 지울까요?": "一覧を消去しますか?", "미리보기": "プレビュー", "미리보기 크기": "プレビューのサイズ", "배경 이미지": "背景画像", "배경 이미지 변경": "背景画像の変更", "배경 이미지 초기화": "背景画像の初期化", "버전 확인": "更新の確認", "번역": "翻訳する", "베타 버전 설치": "ベータ版をインストール", "변경할 최대 크기": "最大サイズ", "변경할 최소 크기": "最小サイズ", "변환 중...": "変換...", "보기": "表示", "보통": "普通", "부팅 시 실행": "起動時に開始", "북마크": "ブックマーク", "북마크 가져오기": "ブックマークのインポート", "북마크 가져오기 실패": "ブックマークのインポートに失敗しました", "북마크 내보내기": "ブックマークのエクスポート", "북마크 내보내기 실패": "ブックマークのエクスポートに失敗しました", "북마크를 가져왔습니다": "ブックマークをインポートしました", "북마크를 내보냈습니다": "ブックマークのエクスポートしました", "북마크를 모두 삭제합니다.": "すべてのブックマークを削除", "북마크를 모두 삭제했습니다.": "すべてのブックマークを削除しました。", "불러오기": "読み込み", "불완전한 작업 모두 다시 시작": "すべての未完了タスクを再試行", "불완전한 작업 자동으로 다시 시작": "未完了のタスクを自動的に再試行", "붙여넣고 다운로드": "貼り付けてダウンロード", "뷰어... (&V)": "ビューア... (&V)", "브라우저로 보기": "ブラウザで表示", "브라우저로 보기 (&B)": "ブラウザで表示 (&B)", "비디오 코덱 우선순위": "映像コーデックの優先順位", "비슷한 이미지 포함 (느림)": "類似画像を含める (遅い)", "비율 유지": "アスペクト比", "비율 유지 - 꽉 차게": "アスペクト比 - 塗りつぶし", "비정상적인 로그인 시도": "異常なログイン試行", "빠른 시작을 위한 작업 레이지 로딩": "クイックスタートのための遅延読み込みタスク", "빠른 실행 도구 모음 사용자 지정": "クイックアクセスツールバーのカスタマイズ", "뽑기": "ランダム", "뽑을 갯수": "ギャラリー数", "사용법": "使い方", "사용법...": "使い方...", "사용자 지정 테마 색": "テーマの色を指定", "사이드바": "サイドバー", "사이트": "サイト", "사이트 추가": "サイト追加", "사이트를 추가했습니다": "サイトを追加しました", "삭제된 데이터": "削除されたデータ", "삭제된 데이터 다운로드": "削除されたデータをダウンロード", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "削除されたデータがありません。\nメニューからデータをダウンロードしてください。", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "削除されたデータのダウンロードに失敗しました", "삭제된 데이터를 모두 받았습니다!": "ダウンロード完了:削除されたデータ", "삭제시 휴지통으로 보냄": "ごみ箱を使用する", "상태": "状態", "새 그룹 만들기": "新しいグループの作成", "새 버전이 있습니다. 업데이트 하실래요?": "最新版があります。更新しますか?", "새로고침": "更新", "샘플": "例", "서명": "証明書", "서버": "サーバ", "선택 화 다운로드": "チャプターを選択してダウンロード", "선택된 작업들 내보내기": "選択したタスクをエクスポート", "선택된 작업이 없습니다": "タスクが選択されていません", "선택하세요:": "選択:", "선택한 항목 중에서 자동 선택": "選択項目内で自動選択", "선호 언어": "優先する言語", "설명": "コメント", "설정": "設定", "설정 (Preferences)": "設定 (Preferences)", "설정을 따름": "設定に従う", "성공: {}\n실패: {}": "成功: {}\n失敗: {}", "소리": "音", "수동": "手動", "수동 업데이트": "手動で更新", "수정...": "編集...", "순서 변경": "順番変更", "숨김 키": "非表示キー", "숫자": "番号", "스레드": "スレッド", "스레드 생성 중...": "スレッド作成中...", "스크롤 속도 ({}x)": "スクロール速度 ({}x)", "스크립트": "スクリプト", "스크립트 가져오기": "スクリプトのインポート", "스크립트 작성법": "スクリプトの書き方", "스크립트를 실행하시겠습니까?": "このスクリプトを実行しますか?", "스크립트를 읽는 중 오류가 발생했습니다": "スクリプトの読み込み中にエラーが発生しました", "스토리 읽는 중...": "ストーリーを読む...", "스토리 포함": "ストーリーを含める", "시딩": "シード", "시딩 중지": "シードを停止", "시딩 하지 않음": "シードしない", "시리즈": "シリーズ", "시리즈 (Series)": "シリーズ", "시리즈가 없습니다": "シリーズなし", "시리즈명 복사 (&S)": "シリーズ名をコピー (&S)", "시스템": "システム", "시스템 설정 사용": "システムの設定に従う", "시스템 종료": "システムを終了", "시스템 트레이": "システムトレイ", "시작 후 다운로드": "ダウンロード数", "시작 후 지난 시간": "経過時間", "실패": "失敗", "실험 기능": "実験", "썸네일": "サムネイル", "썸네일 고정": "サムネイルの修正", "썸네일 다운로드": "サムネイルをダウンロード", "썸네일 숨기기": "サムネイルを隠す", "썸네일 크기": "サムネイルのサイズ", "썸네일을 선택하세요": "サムネイルの選択", "아니오(&N)": "いいえ(&N)", "아무것도 안 함": "何もしない", "아이콘": "アイコン", "압축": "圧縮", "압축 형식": "圧縮形式", "압축파일 연결 프로그램": "圧縮ファイルを開くプログラム", "앞 100 페이지": "最初の100ページ", "얕은 모델": "表層モデル", "언어": "言語", "언어 (Language)": "言語 (Language)", "언어 (Languages)": "言語 (Language)", "업데이트": "更新", "업데이트 중...": "更新中...", "업데이트 체크 중...": "更新を確認中...", "업로드": "アップロード", "연결 프로그램 변경": "開くために使用するプログラムを選択", "열기": "開く", "예(&Y)": "はい(&Y)", "예상치 못한 오류로 다운로드에 실패했습니다.": "予期しないエラーによりダウンロードに失敗しました。", "예시": "例", "오디오 코덱 우선순위": "音声コーデックの優先順位", "오디오 트랙": "音声トラック", "오류": "エラー", "올바르지 않은 범위입니다": "無効な範囲", "올바르지 않은 주소입니다": "無効なURL", "올바르지 않은 형식의 검색 필터입니다": "絞り込みでの無効な構文エラー", "올바르지 않은 형식의 스크립트입니다": "無効な形式のスクリプト", "옵션": "オプション", "옵션 (JSON 포맷)": "オプション (JSON 形式)", "옵션 (Options)": "オプション", "완료": "終了したタスク", "완료된 작업 모두 제거": "完了したタスクをすべて削除", "완료됨으로 표시": "完了としてマーク", "완전 삭제": "完全に削除", "우선순위": "優先度", "우선순위 변경": "優先度を変更", "움짤": "うごイラ", "움짤 변환...": "うごイラの変換...", "원본": "そのまま", "원본 이미지 다운로드": "元の画像をダウンロード", "원본 크기보다 크게 바뀌지는 않습니다": "サイズは元のサイズより大きくなりません", "원본 파일 삭제": "ダウンロードしたファイルを削除", "원하는 인공신경망 모델을 고르세요:": "人工ニューラルネットワークモデルを選択:", "웹브라우저": "ウェブブラウザ", "웹툰 제외": "Webtoonを除外", "유사도": "類似性", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "無効なアカウント/パスワード", "유효한 계정입니다": "有効なアカウント", "음소거": "ミュート", "음악 파일에 앨범아트 삽입": "音声ファイルにアルバムカバーを追加", "음원": "音声", "음질": "音質", "이동": "移動", "이동할 수 없습니다: {}": "移動できません: {}", "이름": "名前", "이름 변경": "名前を変更", "이름을 얻는 도중 실패했습니다": "名前の読み取りに失敗しました", "이미 다운로드한 작품 제외": "ダウンロード済みのギャラリーを除外", "이미 모든 그룹이 추가되어 있습니다": "すべてのグループはすでに追加済みです", "이미 모든 시리즈가 추가되어 있습니다": "すべてのシリーズはすでに追加済みです", "이미 모든 작가가 추가되어 있습니다": "すべての作者はすでに追加済みです", "이미 모든 캐릭터가 추가되어 있습니다": "すべてのキャラクターはすでに追加済みです", "이미 추가한 작업 다시 시작할지 물어봄": "すでに一覧にあるタスクを再試行するか尋ねる", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "このタスクはすでに一覧にあります。 もう一度ダウンロードしますか?", "이미 추가한 플러그인입니다": "このプラグインはすでに一覧にあります", "이미 포함하는 그룹이 있습니다.": "タスクを含むグループはすでに存在します。", "이미지": "画像", "이미지 정보 캐시": "画像情報のキャッシュ", "이미지 포맷 변환": "画像形式の変更", "이미지를 읽는 중 실패": "画像の読み込みに失敗しました", "익명 모드": "匿名モード", "인코딩": "エンコード", "일반": "一般", "일시 정지": "一時停止", "읽기 중지": "読み込み停止", "읽는 중...": "読込中...", "자동": "自動", "자동 녹화": "自動録画", "자동 새로고침 & 스크롤": "自動更新しスクロール", "자동 생성 자막 포함": "自動の字幕を含める", "자동 선택": "自動選択", "자동 업데이트": "自動更新", "자동 저장": "自動保存", "자막": "字幕", "자세한 정보": "詳細", "자세한 정보 보기": "詳細表示", "작가": "作者", "작가 (Artists)": "作者", "작가 이름": "作者名", "작가 추천": "おすすめの作者", "작가 합쳐서 불러오기": "すべての作者をまとめて読み込む", "작가가 없습니다": "作者なし", "작가명 복사 (&A)": "作者名をコピー(&A)", "작게": "小", "작성자": "作者", "작업": "タスク", "작업 개수": "タスクの数", "작업 기록": "タスクの履歴", "작업 기록 초기화 성공": "タスクの履歴の削除に成功しました", "작업 기록이 없습니다": "タスクの履歴なし", "작업 당 최대 연결": "タスクごとの最大接続数", "작업 만들기 실패": "タスクの作成に失敗", "작업 목록 폭": "タスク一覧の幅", "작업 수정": "タスクの編集", "작업 수정...": "タスクの編集...", "작업 완료": "タスク完了", "작업 완료 후": "タスク完了後", "작업 왼쪽에서 순서 변경": "左側で並び替え", "작업 용량": "タスクのファイルサイズ", "작업 정보": "タスクの情報", "작업 정보... (&I)": "情報... (&I)", "작업 타입?": "タスクの種類", "작업들 가져오기": "タスクのインポート", "작업들 내보내기": "タスクのエクスポート", "작업들을 가져올까요?": "タスクをインポートしますか?", "작업들을 가져왔습니다": "タスクをインポートしました", "작업들을 내보냈습니다": "タスクをエクスポートしました", "작업이 아직 완료되지 않았습니다": "タスクはまだ終了していません", "작업이 완료되면 알림 보이기": "タスク完了時に通知を表示", "작품 목록 가져오기": "ギャラリーのリストをインポート", "작품 목록 내보내기": "ギャラリーのリストをエクスポート", "잠금": "ロック", "잠금 해제": "ロック解除", "장": "ページ", "재개": "再開", "재시작 후 적용됩니다": "再起動後に適用", "저사양 모드": "低スペックモード", "저장": "保存", "저장 && 종료": "保存して終了", "저장 실패": "保存に失敗しました", "저장 완료": "保存しました", "저장 중...": "保存中...", "저장 폴더": "ダウンロードフォルダ", "저장 폴더 변경...": "ダウンロードフォルダの変更...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "ダウンロードフォルダのギャラリーIDをすべてコピー", "저장 폴더에 있는 모든 작가 불러오기": "ダウンロードフォルダ内のすべての作者を読み込む", "저장... (&S)": "&保存...", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "設定ファイルなし。 [F1]を押し「使い方」をご覧ください", "적어도 {} 개의 작품이 필요합니다.": "最低でも{}個のギャラリーが必要です。", "점수": "スコア", "정규식 문법": "正規表現の構文", "정규식으로 찾기": "正規表現で検索", "정렬 기준": "並び替え", "정말 단축키를 초기화하시겠습니까?": "ショートカットキーを初期化しますか?", "정말 목록에서 제거하시겠습니까?": "一覧から削除してよろしいですか?", "정말 삭제하시겠습니까?": "削除してよろしいですか?", "정말 설정을 초기화하시겠습니까?": "本当に設定を初期化しますか?", "정말 작업 기록을 초기화하시겠습니까?": "タスクの履歴を削除しますか?", "정말 종료하시겠습니까?": "終了してよろしいですか?", "정말 중지하시겠습니까?": "停止してよろしいですか?", "정말 쿠키를 초기화하시겠습니까?": "Cookieを消去しますか?", "정보": "アプリの情報", "정보...": "アプリの情報...", "정확도": "精度", "제거": "削除", "제목": "タイトル", "제목 (Title)": "タイトル", "제목 복사 (&T)": "タイトルをコピー(&T)", "제외 태그": "除外するタグ", "제외 태그 목록에 그룹 추가": "グループを除外するタグに追加", "제외 태그 목록에 시리즈 추가": "シリーズを除外するタグに追加", "제외 태그 목록에 작가 추가": "作者を除外するタグに追加", "제외 태그 목록에 캐릭터 추가": "キャラクターを除外するタグに追加", "조각 표시": "ピースを表示", "종료": "終了", "종료 중...": "終了中...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "水平方向へのドラッグ: ±1\n垂直方向へのドラッグ: ±100", "주소": "アドレス", "주소 or 갤러리 넘버": "URLまたはギャラリーID", "주소를 입력해주세요": "URLを入力してください", "중간": "中", "중단": "中断", "중복 이미지 찾기": "重複画像検索", "중복 이미지 찾는 중": "重複画像を調査中", "중복 제거": "重複画像の削除", "지원하는 사이트:": "対応サイト:", "지원하는 토큰": "対応するトークン", "지정한 페이지만 다운로드합니다.": "選択したページのみをダウンロード", "직접 다운로드": "直接ダウンロード", "진행도": "進行度", "참고 작품: {} 개": "参照: {} ギャラリー", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "ヘルプ - 使い方 (F1) - Cookieの読み込みをご覧ください。", "창 보이기 / 숨기기": "ウィンドウの表示/非表示", "창 위치 크기 기억": "ウィンドウの位置とサイズを記憶", "찾기...": "検索...", "채널 영상 역순으로 다운로드": "チャンネルの動画を逆順にダウンロード", "첫 번째 파일 열기": "最初のファイルを開く", "첫 번째 파일 열기 (&O)": "最初のファイルを開く(&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "最初のページ、10〜20ページ、最後のページ", "체인지로그": "更新履歴", "초기화": "初期化", "최대 다운로드 속도": "最大ダウンロード速度", "최대 동시 작업": "最大並列タスク数", "최대 페이지 제한": "最大ページ制限", "최소화 버튼으로 트레이로 최소화": "最小化ボタンでシステムトレイに最小化", "최신 버전:": "最新版:", "추가한 날짜": "追加された日", "취소": "キャンセル", "캐릭터": "キャラクター", "캐릭터 (Characters)": "キャラクター", "캐릭터 이름": "キャラクター名", "캐릭터가 없습니다": "キャラクターなし", "캐릭터명 복사 (&C)": "キャラクター名をコピー(&C)", "코멘트": "コメント", "코멘트 수정": "コメントの編集", "쿠키": "Cookie", "쿠키 내보내기": "Cookieのエクスポート", "쿠키 내보내기 성공": "Cookieのエクスポートに成功しました", "쿠키 불러오기": "Cookieの読み込み", "쿠키 불러오기 성공": "Cookieの読み込みに成功しました", "쿠키 초기화 성공": "Cookieの消去に成功しました", "쿠키가 없습니다": "Cookieがありません", "쿠키를 업데이트하세요": "Cookieの更新", "크게": "大", "크기": "サイズ", "크기 조절": "サイズ変更", "크기 조절...": "サイズ変更...", "크롬 확장프로그램 연동에 실패했습니다.": "Chrome拡張機能の接続に失敗しました。", "클라이언트": "クライアント", "클래식": "クラシック", "클립보드에서 자동 추가": "クリップボードを監視", "타입": "種類", "타입 (Types)": "種類", "태그": "タグ", "태그 \"{}\" 제거": "タグ削除 \"{}\"", "태그 \"{}\" 추가": "タグ追加 \"{}\"", "태그 (Tags)": "タグ", "태그 :": "タグ :", "태그 설정": "タグの設定", "태그 수정": "タグを編集", "태그 없음": "タグなし", "테마": "テーマ", "토렌트 고급 옵션 초기화": "トレントの詳細オプションを初期化", "토렌트 추가": "トレントの追加", "토렌트 파일 연결": "トレントファイルの関連付け", "토큰": "トークン", "통계": "統計情報", "통과": "パス", "투명도": "不透明度", "트래커 수정": "トラッカーを編集する", "트래커 추가": "トラッカーを追加する", "트레이로 전환되었습니다": "システムトレイに最小化", "트레이로 최소화": "システムトレイに最小化", "트레이로 최소화 알림 보이기": "通知をトレイに最小化", "트레이에서 알림 보이기": "トレイに通知を表示", "파일": "ファイル", "파일 목록": "ファイル一覧", "파일 삭제": "ファイルの削除", "파일 삭제 (&X)": "ファイルの削除(&X)", "파일 수": "ファイル数", "파일 스캔 중": "ファイルのスキャン", "파일 유형 제외": "除外するファイルの種類", "파일 체크 중...": "ファイルの確認中...", "파일 크기": "ファイルサイズ", "파일 형식": "ファイル形式", "파일 형식 물어보기": "ファイル形式を問いあわせる", "파일명": "ファイル名", "파일명 형식": "ファイル名の形式", "파일을 고르세요:": "ファイルの選択:", "파일을 선택하세요": "ファイルの選択", "파일의 수정한 날짜를 업로드 날짜로 변경": "ファイルの更新日時を動画公開日に変更", "파일이 없습니다": "ファイルがありません", "패스워드": "パスワード", "퍼지로 찾기": "あいまい検索", "페이지 읽는 중...": "ページを読む...", "페이지 지정": "ページを選択", "페이지 지정 다운로드": "ページを選択してダウンロード", "페이지 지정 다운로드 기본값": "「ページを選択してダウンロード」の初期値", "페이지를 선택해주세요": "ページを選択してください。", "페이지를 읽는 중에 오류가 발생했습니다": "ページを読み込もうとしたときにエラーが発生しました", "평범하게 찾기": "普通の検索", "포트": "ポート", "포함 태그": "タグを含める", "폭 맞춤": "幅に合わせる", "폰트": "フォント", "폰트 변경...": "フォントを変更...", "폰트 선택": "フォントを選択", "폰트 초기화": "フォントを初期化", "폴더": "フォルダ", "폴더 && 압축파일": "フォルダ&&Zipファイル", "폴더 바로가기": "フォルダのショートカット", "폴더 열기": "フォルダを開く", "폴더 이동": "フォルダを移動", "폴더 추가": "フォルダを追加", "폴더가 없습니다": "フォルダなし", "폴더들": "フォルダ", "폴더들을 선택하세요": "フォルダの選択", "폴더를 선택하세요": "フォルダの選択", "폴더를 추가해주세요": "フォルダを追加してください", "폴더명 형식": "フォルダの形式", "표지 검색 실패": "カバーの検索に失敗しました", "표지 검색...": "カバーを検索...", "프로그램 끝내기": "プログラムを終了", "프로그램 패스워드": "プログラムのパスワード", "프록시": "プロキシ", "플러그인": "プラグイン", "플러그인을 추가하시겠습니까?": "プラグインを追加しますか?", "플레이리스트": "再生リスト", "플레이리스트 파일에 번호 매기기": "再生リストのファイルに番号を付ける", "플레이리스트 한 폴더에 다운로드": "再生リストを1つのフォルダにダウンロード", "플로팅 미리보기": "フローティングプレビュー", "피드백": "意見を寄せる", "필터": "絞り込み", "필터창": "絞り込み", "하나 이상의 타입을 선택해주세요.": "少なくとも1つの種類を選択してください。", "하위폴더 포함": "サブフォルダーを含める", "학습 중...": "学習...", "한 줄 당 한 트래커 URL": "1行に1つのトラッカーURL", "항상 위": "常に最前面に表示", "항상 위 OFF": "常に最前面に表示 無効", "항상 위 ON": "常に最前面に表示 有効", "해당 링크로 이동합니다": "リンクを開く...", "해상도": "解像度", "현재 버전: v{}\n최신 버전: v{}": "現在のバージョン: v{}\n最新のバージョン: v{}", "현재 작업 없음": "タスクなし", "호스트": "ホスト", "화 선택": "エピソードを選択してください", "화질": "品質", "확인": "OK", "후원": "寄付して支援", "휴지통으로 이동": "ごみ箱への移動" } } ================================================ FILE: translation/tr_ko.hdl ================================================ { "lang": "ko", "items": { "#Cancel#": "취소", "#EB#": "{} EB", "#EMPTY#": "Empty (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "확인", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "디스플레이", "#boss_invalid_pw#": "Invalid password!", "#boss_pw#": "Password:", "#byte#": "{} byte", "#bytes#": "{} bytes", "#click#": "Click", "#combo_hour#": "{} 시간", "#combo_hours#": "{} 시간", "#combo_min#": "{} 분", "#combo_mins#": "{} 분", "#combo_sec#": "{} 초", "#combo_secs#": "{} 초", "#date01#": "1월 {d}일", "#date01y#": "1월 {d}일, {y}", "#date02#": "2월 {d}일", "#date02y#": "2월 {d}일, {y}", "#date03#": "3월 {d}일", "#date03y#": "3월 {d}일, {y}", "#date04#": "4월 {d}일", "#date04y#": "4월 {d}일, {y}", "#date05#": "5월 {d}일", "#date05y#": "5월 {d}일, {y}", "#date06#": "6월 {d}일", "#date06y#": "6월 {d}일, {y}", "#date07#": "7월 {d}일", "#date07y#": "7월 {d}일, {y}", "#date08#": "8월 {d}일", "#date08y#": "8월 {d}일, {y}", "#date09#": "9월 {d}일", "#date09y#": "9월 {d}일, {y}", "#date10#": "10월 {d}일", "#date10y#": "10월 {d}일, {y}", "#date11#": "11월 {d}일", "#date11y#": "11월 {d}일, {y}", "#date12#": "12월 {d}일", "#date12y#": "12월 {d}일, {y}", "#developed_by#": "Developed by Kurt Bestor", "#dirformat_artist#": "어떤 작가", "#dirformat_group#": "어떤 그룹", "#dirformat_lang#": "Korean", "#dirformat_series#": "어떤 시리즈", "#dirformat_title#": "어떤 제목", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "All Files {}", "#filter_bmk#": "Bookmark Files {}", "#filter_cookie#": "Netscape HTTP Cookie Files (*.txt)", "#filter_hdfb#": "Hitomi Downloader Filter bookmarks {}", "#filter_hdk#": "Hitomi Downloader Shortcuts {}", "#filter_hdl#": "Hitomi Downloader Linguist {}", "#filter_hds#": "Hitomi Downloader Scripts {}", "#filter_hdt#": "Hitomi Downloader Tasks {}", "#filter_image#": "Images {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "Browser required; Use --safemode", "#invalid_loginRequired#": "Login required; Update your cookies", "#invalid_loginRequired2#": "Login required; Please login", "#invalid_outdatedExtension#": "Extension is outdated; Update the extension", "#invalid_unknownSite#": "Unknown site", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "Loading: {}", "#new_group#": "새 그룹", "#new_item#": "New Item", "#p#": "{}p", "#recomm_all_langs#": "모든 언어", "#recomm_artist#": "작가", "#recomm_main#": "저장 폴더에 있는 작품들을 분석해서 작가를 추천합니다.\n\n결과에 나오는 정확도는 주어진 작품 내에서의 정확도입니다.\n작품은 많으면 많을수록 좋습니다. (100 개 이상 권장)\n\n{item} 개의 작품이 있습니다:", "#recomm_score#": "점수", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "", "#setting_autosaveR#": "마다", "#setting_incompleteL#": "", "#setting_incompleteR#": "후", "#t_etc#": "Etc", "#t_file#": "File", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "파랑", "#tag_gray#": "회색", "#tag_green#": "초록", "#tag_orange#": "주황", "#tag_purple#": "보라", "#tag_red#": "빨강", "#tag_yellow#": "노랑", "#task_artist#": "Artist", "#task_date#": "Date", "#task_done#": "Done", "#task_folder#": "Folder", "#task_incomplete#": "Incomplete", "#task_input#": "Input", "#task_invalid#": "Invalid", "#task_multiple#": "Multiple", "#task_range#": "Range", "#task_single#": "Single", "#task_site#": "Site", "#task_status#": "Status", "#task_title#": "Title", "#task_type#": "Type", "#task_url#": "URL", "#task_zipfile#": "ZipFile", "#torrent_anon#": "A generic user-agent will be used for trackers (except for private torrents).
Your local IPv4 and IPv6 address won't be sent as query string parameters to private trackers.
If announce_ip is configured, it will not be sent to trackers.
The client version will not be sent to peers in the extension handshake.
The DHT node will be disabled.", "#translation#": "Translation" } } ================================================ FILE: translation/tr_pl.hdl ================================================ { "lang": "pl", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "Folders must be more than one if \"Exclude same sources\" is turned on", "#Cancel#": "Anuluj", "#EB#": "{} EB", "#EMPTY#": "Empty (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "OK", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "Appearance", "#boss_invalid_pw#": "Nieprawidłowe hasło!", "#boss_pw#": "Hasło:", "#byte#": "{} bajt", "#bytes#": "{} bajty", "#click#": "Kliknij", "#combo_hour#": "{} Godz.", "#combo_hours#": "{} Godziny", "#combo_min#": "{} Min", "#combo_mins#": "{} Minut", "#combo_sec#": "{} Sec", "#combo_secs#": "{} Secs", "#date01#": "Sty {d}", "#date01y#": "Sty {d}, {y}", "#date02#": "Lut {d}", "#date02y#": "Lut {d}, {y}", "#date03#": "Mar {d}", "#date03y#": "Mar {d}, {y}", "#date04#": "Kwi {d}", "#date04y#": "Kwi {d}, {y}", "#date05#": "Maj {d}", "#date05y#": "Maj {d}, {y}", "#date06#": "Cze {d}", "#date06y#": "Cze {d}, {y}", "#date07#": "Lip {d}", "#date07y#": "Lip {d}, {y}", "#date08#": "Sie {d}", "#date08y#": "Sie {d}, {y}", "#date09#": "Wrz {d}", "#date09y#": "Wrz {d}, {y}", "#date10#": "Paź {d}", "#date10y#": "Paź {d}, {y}", "#date11#": "Lis {d}", "#date11y#": "Lis {d}, {y}", "#date12#": "Gru {d}", "#date12y#": "Gru {d}, {y}", "#developed_by#": "Developed by Kurt Bestor", "#dirformat_artist#": "Some artist", "#dirformat_group#": "Some group", "#dirformat_lang#": "English", "#dirformat_series#": "Some series", "#dirformat_title#": "Some title", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "All Files {}", "#filter_bmk#": "Bookmark Files {}", "#filter_cookie#": "Pliki cookie Netscape HTTP (*.txt)", "#filter_hdfb#": "Hitomi Downloader Filter bookmarks {}", "#filter_hdk#": "Hitomi Downloader Shortcuts {}", "#filter_hdl#": "Hitomi Downloader Linguist {}", "#filter_hds#": "Hitomi Downloader Scripts {}", "#filter_hdt#": "Hitomi Downloader Tasks {}", "#filter_image#": "Images {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "Przeglądarka wymagana; Użyj --safemode", "#invalid_loginRequired#": "Wymagane zalogowanie; Zaktualizuj swoje ciasteczka", "#invalid_loginRequired2#": "Login required; Please login", "#invalid_outdatedExtension#": "Rozszerzenie jest nieaktualne; Zaktualizuj rozszerzenie", "#invalid_unknownSite#": "Nieznana witryna", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "Ładowanie: {}", "#new_group#": "New group", "#new_item#": "Nowy przedmiot", "#p#": "{}p", "#recomm_all_langs#": "Wszystkie języki", "#recomm_artist#": "Artysta", "#recomm_main#": "It analyzes the galleries in the download folder and recommends artists.\n\nThe accuracy shown in the results is within the given galleries.\nThe more galleries you have, the better (100+ is recommended).\n\nYou currently have {item} galleries:", "#recomm_score#": "Wynik", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "Co", "#setting_autosaveR#": "", "#setting_incompleteL#": "Po", "#setting_incompleteR#": "", "#t_etc#": "Etc", "#t_file#": "File", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "Blue", "#tag_gray#": "Gray", "#tag_green#": "Green", "#tag_orange#": "Orange", "#tag_purple#": "Purple", "#tag_red#": "Red", "#tag_yellow#": "Yellow", "#task_artist#": "Artysta", "#task_date#": "Data", "#task_done#": "Gotowe", "#task_folder#": "Folder", "#task_incomplete#": "Nieukończone", "#task_input#": "Wejście", "#task_invalid#": "Niewłaściwy", "#task_multiple#": "Wielokrotny", "#task_range#": "Range", "#task_single#": "Pojedynczy", "#task_site#": "Strona", "#task_status#": "Status", "#task_title#": "Tytuł", "#task_type#": "Typ", "#task_url#": "URL", "#task_zipfile#": "Plik zip", "#torrent_anon#": "A generic user-agent will be used for trackers (except for private torrents).
Your local IPv4 and IPv6 address won't be sent as query string parameters to private trackers.
If announce_ip is configured, it will not be sent to trackers.
The client version will not be sent to peers in the extension handshake.
The DHT node will be disabled.", "#translation#": "Translation", "50개씩 끊어서 검색": "Wyświetl tylko 50 wyników wyszukiwania na raz", "DPI 우회": "Pomiń DPI", "DPI 우회 제외 도메인": "Domains excluded from DPI bypass", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "\"Pomiń DPI\" jest wyłączone. To morze nie działać w niektórych stronach internetowych.", "E(x)Hentai 로그인 쿠키 필요": "Ciasteczka zalogowania E(x)Hentai są wymagane.", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "Twoje IP jest tymczasowo zablokowane. Proszę spróbuj później.", "PDF 생성": "Utwórz PDF", "UI 스케일 ({}%)": "UI scale ({}%)", "URL을 입력하세요": "Proszę wpisz jakieś linki", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "Wciśnij [Download] aby pobrać. Wciśnij [OK] aby wyjść.", "reCAPTCHA 풀기": "Rozwiąż reCAPTCHA", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {day}d {hour}h {min}m {sec}s: {id}", "{hour}시간 {min}분 {sec}초": "{hour}h {min}m {sec}s", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {hour}h {min}m {sec}s: {id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "Restart za {min}m {sec}s: {id}", "{sec}초 뒤 다시 시작: {id}": "Restart in {sec}s: {id}", "{} 개 선택": "{} wybrane przedmioty", "{} 개 찾음": "{} znaleziony", "{} 개의 작업들이 있습니다": "Są {} zadania", "{} 개의 진행 중인 작업이 있습니다.": "Trwają {} zadania.", "{} 를 제외 태그에 추가했습니다": "Added {} to the exclusion tag list", "{} 설정": "{} Preferencje", "{} 시간 뒤 다시 시작": "Restart in {} hours", "{} 시간 전 데이터": "Data; {} godzin temu", "{} 일 뒤 다시 시작": "Restart in {} days", "{} 일 전 데이터": "Data; {} dni temu", "{}개 작업의 첫 번째 파일을 엽니다.": "Open first files for each {} tasks.", "{}개의 불완전한 작업을 다시 시작합니다.": "Zrestartuj {} nieukończonych zadań.", "{}개의 완료된 작업을 목록에서 제거합니다.": "Usuń {} zakonczonych zadań z listy.", "{}개의 완료된 작업을 제거합니다.": "Usuń {} wykonanych zadań.", "{}개의 작업을 다시 시작합니다.": "Restart {} tasks.", "『 {} 』는 이미 북마크되어 있습니다": "『 {} 』jest już dodany do zakładek", "『 {} 』를 복사했습니다": "『 {} 』Skopiowane", "『 {} 』를 북마크로부터 불러왔습니다": "『 {} 』jest załadowane z zakładek", "『 {} 』를 북마크에서 불러왔습니다": "『 {} 』jest załadowane z zakładek", "『 {} 』를 북마크했습니다": "『 {} 』jest dodany do zakładek", "『 {} 』를 저장 폴더에서 불러왔습니다": "『 {} 』jest załadowany z folderu pobierania", "가능하면 일본어 제목 사용": "Użyj japońskiego tytułu. jeśli jest dostępne", "가능한 경우 챕터 마커 추가": "Add chapter markers if available", "가져오기": "Zaimportuj", "가져오기 실패": "Nie udało się zaimportować", "간단 검색": "Proste wyszukiwanie", "같은 소스 제외": "Exclude same sources", "개": "przedmioty", "개별 다운로드는 지원하지 않습니다": "Pobieranie pojedynczego posta nie jest obsługiwane", "갤러리 넘버": "ID galerii", "갤러리 넘버 복사": "Skopiuj ID galerii", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "Wystąpił błąd podczas kopiowania ID galerii.", "갤러리 작업 정보... (&I)": "Informacja o galerii... (&I)", "갤러리 정보": "Informacja galerii", "갤러리 정보 파일 (info.txt) 생성": "Utwórz plik o informacjach galerii (info.txt)", "갯수": "Count", "갱신 간격": "Refresh interval", "거꾸로": "Odwrócony", "검색": "Szukaj", "검색 데이터": "Szukaj dane", "검색 도중에 사용할 수 없는 기능입니다.": "Ta funkcja jest zablokowana podczas szukania.", "검색 범위": "Szukaj Zakres", "검색 순서": "Szukaj kolejność", "검색 필터": "Szukaj filtry", "검색기": "Wyszukiwarka", "검색어": "Szukaj słów kluczowych", "검색어 자동 완성": "Auto uzupełniaj słowa kluczowa", "결과": "Wynik", "결과 저장": "Zapisz wynik", "경고 없이 삭제": "Usuń bez ostrzeżenia", "경로를 선택하세요": "Wybierz ścieżkę", "계속 검색": "Szukaj następny", "계정": "Nazwa użytkownika", "계정 / 패스워드": "Nazwa użytkownika / Hasło", "고급": "Zaawansowane", "고급 검색": "Zaawansowane wyszukiwanie", "고급 옵션": "Advanced options", "고정": "Przypnij", "고정 해제": "Odepnij", "공식 스크립트 && 플러그인": "Official scripts && plugins", "공인 IP: {}": "Public IP: {}", "관리자 권한 없이 실행": "Run without administrator privileges", "관리자 권한 필요": "Administrator privileges required", "광고 스킵": "Skip ads", "그대로": "Normalny", "그룹": "Grupy", "그룹 (Groups)": "Grupy", "그룹 안의 모든 작업 다시 시작": "Zrestartuj wszystkie zadania w tej grupie", "그룹 이름": "Nazwa Grupy", "그룹 펼치기 / 접기": "Expand / Collapse groups", "그룹 합쳐서 불러오기": "Wczytaj wszystkie grupy razem", "그룹명 복사 (&G)": "Skopiuj nazwy grup (&G)", "그룹으로 이동": "Przenieś do grupy", "그룹을 포함하는 그룹은 만들 수 없습니다.": "Grupy nie mogą zawierać grup.", "그룹이 없습니다": "Brak grup", "기본": "Domyślne", "기본 데이터": "Dane domyślne", "기본 데이터 다운로드": "Pobierz dane domyślne", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "Grupę można utworzyć tylko w domyślnym trybie sortowania.", "기본값": "Wartość domyślna", "기타": "Itp.", "깊은 모델": "Deep model", "끝내기": "Wyjście", "날짜": "Data", "낮음": "Low", "내보내기": "Eksport", "내보내기 실패": "Nie udało się wyeksportować", "내용 보기": "Zobacz skrypt", "내장 웹브라우저": "Wbudowana przeglądarka internetowa", "내장 이미지 뷰어": "Wbudowana przeglądarka obrazów", "네트워크": "Network", "녹화": "Recording", "녹화 중...": "Nagrywanie...", "녹화 중지": "Zatrzymaj nagrywanie", "높음": "High", "다른 동영상 사이트에도 적용됩니다.": "Dotyczy również innych serwisów wideo.", "다시 시작 (&S)": "Uruchom ponownie (&S)", "다시 시작 실패; 복구됨": "Nie udało się ponowić próby; Cofnięto", "다운로드": "Pobierz", "다운로드 & 제거": "Pobierz & Usuń", "다운로드 && 제거": "Pobierz && Usuń", "다운로드 (&D)": "Pobierz (&D)", "다운로드 날짜 표시": "Pokaż pobrane daty", "다운로드 속도": "Prędkość pobierania", "다운로드 완료": "Pobieranie zakończone", "다운로드 완료 후 자동 제거": "Usuń automatycznie po zakończeniu pobierania", "다운로드 일시 정지 / 재개": "Wstrzymaj pobieranie / Wznów", "다운로드 중": "Downloading", "다운로드가 완료되면 알림": "Pokaż powiadomienie po zakończeniu pobierania", "다운로드가 완료될 때까지 절전모드 방지": "Prevent system sleep until downloads are finished", "다운로드하기 전에 파일 고르기": "Select files before download", "다운로드하지 않음": "Don't download", "다운로드한 작품만": "Tylko pobrane galerie", "다음 검색시 더 빠르게 검색": "Popraw wydajność następnym razem", "다음 작업들이 목록에서 제거됩니다:": "The following tasks will be removed from the list:", "다음 파일들이 삭제됩니다:": "The following files will be deleted:", "다크 모드": "Tryb ciemny", "단일 파일": "Pojedynczy plik", "단축키": "Skróty", "단축키 내보내기": "Export Shortcuts", "단축키 내보내기 성공": "Skróty zostały pomyślnie wyeksportowane", "단축키 불러오기": "Import Shortcuts", "단축키 불러오기 성공": "Skróty zostały pomyślnie zaimportowane", "단축키 수정": "Edytuj skróty", "단축키 초기화 성공": "Skróty zostały pomyślnie zresetowane", "닫기 버튼으로 트레이로 최소화": "Przycisk Zamknij minimalizuje do zasobnika systemowego", "대기 중": "Waiting", "대기 중...": "Czekanie...", "데이터 다운로더": "Data Downloader", "데이터 분류 중...": "Klasyfikowanie danych...", "데이터 분석 중...": "Analizowanie danych...", "데이터 없음": "No Data", "데이터 읽는 중...": "Odczytywanie danych...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "Brak danych.\nProszę pobrać dane z menu.", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "Nie ma danych. Proszę pobrać dane z wyszukiwarki.", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "Twoje dane są nieaktualne od ponad tygodnia.\nProszę zaktualizować dane.", "데이터를 다운로드하는 도중에 실패했습니다.": "Nie udało się pobrać danych", "데이터를 모두 받았습니다!": "Wszystkie dane zostały pobrane!", "도구": "Narzędzia", "도구창": "Tool window", "도움말": "Pomoc", "동영상": "Wideo", "동영상 변환...": "Konwertuj wideo...", "뒤 100 페이지": "Ostatnie 100 stron", "드래그 & 드랍해서 바꾸세요:": "Przeciągnij i upusć, aby zmienić:", "디더링": "Dither", "디버그": "Debug", "디스코드": "Discord", "라이선스": "Licencja", "랜덤으로 하나 선택": "Wybierz losowo jedną z nich", "로그...": "Log...", "로그인": "Zaloguj się", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "Nie udało się zalogować: {}{}\nProszę zobaczyć [Opcje - Preferencje - Ustawienia Pixiv - Zaloguj się].", "로그인 중...": "Logowanie...", "로그인 테스트": "Test Login", "로드 중: {}": "Loading: {}", "로컬 파일 감지": "Wykryj lokalne pliki", "로컬 파일로부터 새 작업 만들기": "Utwórz nowe zadanie z lokalnych plików", "를 북마크에서 지웠습니다": "jest usunięty z zakładek", "리트윗 제외": "Exclude retweets", "리트윗 포함": "Include retweets", "릴리즈 노트": "Informacja o wydaniu", "링크 열기": "Otwórz link", "링크 주소 복사": "Skopiuj link", "링크 주소 복사 (&C)": "Skopiuj link (&C)", "마무리 중...": "Koniec...", "멈춤": "Stopped", "메뉴": "Menu", "메모리 사용량": "Wykorzystanie pamięci", "메모리 사용량 표시": "Pokaż użycie pamięci", "메시지 상자": "Message box", "모델": "Model", "모델 생성 중...": "Tworzenie modelu...", "모델: {}": "Model: {}", "모두": "Wszystkie", "모두 삭제": "Usuń wszystko", "모두 선택": "Zaznacz wszystko", "모든 갤러리 넘버를 복사했습니다.": "Skopiowano wszystkie ID galerii.", "모든 언어": "Wszystkie języki", "모든 작업 완료": "All tasks complete", "모든 작업 완료 후": "When all tasks are complete", "모든 작업이 완료되면 알림 보이기": "Show notifications when all tasks are complete", "목록": "Lista", "목록 주소를 입력해주세요": "Proszę podaj adres listy", "목록 지우기": "Wyczyść listę", "목록에서 제거": "Usuń z listy", "목록에서 폴더 제거": "Usuń folder z listy", "목록을 모두 지울까요?": "Czy na pewno chcesz wyczyścić listę?", "미리보기": "Podgląd", "미리보기 크기": "Rozmiar podglądu", "배경 이미지": "Background image", "배경 이미지 변경": "Change background image", "배경 이미지 초기화": "Reset background image", "버전 확인": "Sprawdź aktualizacje", "번역": "Tłumaczenie", "베타 버전 설치": "Install beta versions", "변경할 최대 크기": "Maksymalny rozmiar", "변경할 최소 크기": "Minimalny rozmiar", "변환 중...": "Konwersja...", "보기": "Zobacz", "보통": "Normal", "부팅 시 실행": "Uruchom od startu systemu", "북마크": "Zakładki", "북마크 가져오기": "Importuj zakładki", "북마크 가져오기 실패": "Nie udało się zaimportować zakładek", "북마크 내보내기": "Eksportuj zakładki", "북마크 내보내기 실패": "Nie udało się wyeksportować zakładek", "북마크를 가져왔습니다": "Zakładki są importowane", "북마크를 내보냈습니다": "Zakładki są eksportowane", "북마크를 모두 삭제합니다.": "Usuń wszystkie zakładki.", "북마크를 모두 삭제했습니다.": "Usunięto wszystkie zakładki.", "불러오기": "Wczytaj", "불완전한 작업 모두 다시 시작": "Zrestartuj wszystkie niekompletne zadania", "불완전한 작업 자동으로 다시 시작": "Automatycznie uruchamiaj ponownie niekompletne zadania", "붙여넣고 다운로드": "Wklej i pobierz", "뷰어... (&V)": "&Przeglądarka...", "브라우저로 보기": "Wyświetl w przeglądarce", "브라우저로 보기 (&B)": "Wyświetl w przeglądarce (&B)", "비디오 코덱 우선순위": "Video codec priority", "비슷한 이미지 포함 (느림)": "Uwzględnij podobne obrazy (Wolne)", "비율 유지": "Proporcja obrazu", "비율 유지 - 꽉 차게": "Aspect ratio - fill", "비정상적인 로그인 시도": "Nieprawidłowa próba logowania", "빠른 시작을 위한 작업 레이지 로딩": "Leniwe ładowanie zadań w celu szybkiego uruchomienia", "빠른 실행 도구 모음 사용자 지정": "Dostosuj pasek narzędzi szybkiego dostępu", "뽑기": "Losowe", "뽑을 갯수": "Liczba galerii", "사용법": "Jak używać", "사용법...": "Jak używać...", "사용자 지정 테마 색": "Niestandardowy kolor motywu", "사이드바": "Sidebar", "사이트": "Strona", "사이트 추가": "Obsługa witryny", "사이트를 추가했습니다": "Dodano obsługę witryny", "삭제된 데이터": "Usunięte dane", "삭제된 데이터 다운로드": "Pobierz usunięte dane", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "Nie ma Usuniętych danych.\nProszę pobrać dane z Menu.", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "Nie udało się pobrać usuniętych danych", "삭제된 데이터를 모두 받았습니다!": "Pobieranie zakończone: Usunięte dane", "삭제시 휴지통으로 보냄": "Użyj kosza", "상태": "Status", "새 그룹 만들기": "Utwórz nową grupę", "새 버전이 있습니다. 업데이트 하실래요?": "Pojawiła się nowa wersja. Czy chcesz ją zaktualizować?", "새로고침": "Odśwież", "샘플": "Sample", "서명": "Certyfikat", "서버": "Serwer", "선택 화 다운로드": "Wybierz rozdziały && Pobierz", "선택된 작업들 내보내기": "Eksportuj wybrane zadania", "선택된 작업이 없습니다": "Brak wybranych zadań", "선택하세요:": "Select:", "선택한 항목 중에서 자동 선택": "Automatyczny wybór w obrębie wybranych elementów", "선호 언어": "Preferred language", "설명": "Komentarz", "설정": "Preferencje", "설정 (Preferences)": "Preferencje", "설정을 따름": "Follow preferences", "성공: {}\n실패: {}": "Sukces: {}\nNiepowodzenie: {}", "소리": "Sound", "수동": "Manualne", "수동 업데이트": "Manualne", "수정...": "Edytuj...", "순서 변경": "Zmień kolejność", "숨김 키": "Boss-Key", "숫자": "Liczba", "스레드": "Wątki", "스레드 생성 중...": "Rozpoczynanie wątków...", "스크롤 속도 ({}x)": "Prędkość przewijania ({}x)", "스크립트": "Skrypt", "스크립트 가져오기": "Importuj skrypt", "스크립트 작성법": "How to write a script", "스크립트를 실행하시겠습니까?": "Czy na pewno chcesz uruchomić ten skrypt?", "스크립트를 읽는 중 오류가 발생했습니다": "Error occurred while reading the script", "스토리 읽는 중...": "Czytanie historii...", "스토리 포함": "Dołącz relacje", "시딩": "Seeding", "시딩 중지": "Stop seeding", "시딩 하지 않음": "No seeding", "시리즈": "Seria", "시리즈 (Series)": "Seria", "시리즈가 없습니다": "Brak serii", "시리즈명 복사 (&S)": "Kopiuj nazwy serii (&S)", "시스템": "System", "시스템 설정 사용": "Use system setting", "시스템 종료": "Shutdown System", "시스템 트레이": "Zasobnik systemowy", "시작 후 다운로드": "Pobrano od włączenia aplikacji", "시작 후 지난 시간": "Czas, który upłynął od włączenia aplikacji", "실패": "Porażka", "실험 기능": "Eksperymentalny", "썸네일": "Miniaturka", "썸네일 고정": "Napraw miniaturę", "썸네일 다운로드": "Download thumbnails", "썸네일 숨기기": "Ukryj miniatury", "썸네일 크기": "Wielkość miniaturki", "썸네일을 선택하세요": "Wybierz miniaturę", "아니오(&N)": "&Nie", "아무것도 안 함": "Do nothing", "아이콘": "Ikona", "압축": "Kompresja", "압축 형식": "Format", "압축파일 연결 프로그램": "Otwórz skompresowane pliki używając", "앞 100 페이지": "Pierwsze 100 stron", "얕은 모델": "Shallow model", "언어": "Język", "언어 (Language)": "Język", "언어 (Languages)": "Języki", "업데이트": "Aktualizacja", "업데이트 중...": "Aktualizacja...", "업데이트 체크 중...": "Sprawdzanie dostępności aktualizacji...", "업로드": "Upload", "연결 프로그램 변경": "Wybierz program, którego chcesz użyć do otwarcia", "열기": "Otwórz", "예(&Y)": "&Tak", "예상치 못한 오류로 다운로드에 실패했습니다.": "Nie udało się pobrać z powodu nieoczekiwanego błędu.", "예시": "Przykład", "오디오 코덱 우선순위": "Audio codec priority", "오디오 트랙": "Audio track", "오류": "Błąd", "올바르지 않은 범위입니다": "Nieprawidłowy zakres", "올바르지 않은 주소입니다": "Nieprawidłowy link", "올바르지 않은 형식의 검색 필터입니다": "Nieprawidłowo sformatowany filtr wyszukiwania", "올바르지 않은 형식의 스크립트입니다": "Invalid format script", "옵션": "Opcje", "옵션 (JSON 포맷)": "Options (JSON format)", "옵션 (Options)": "Opcje", "완료": "Gotowe", "완료된 작업 모두 제거": "Usuń wszystkie zakończone zadania", "완료됨으로 표시": "Oznacz jako zakończone", "완전 삭제": "Usuń na stałe", "우선순위": "priorytet", "우선순위 변경": "Change priority", "움짤": "Ugoira", "움짤 변환...": "Konwertuj Ugoira...", "원본": "Oryginał", "원본 이미지 다운로드": "Pobierz oryginalne obrazy", "원본 크기보다 크게 바뀌지는 않습니다": "Rozmiar nie będzie większy niż rozmiar oryginalny", "원본 파일 삭제": "Usuń pobrane pliki", "원하는 인공신경망 모델을 고르세요:": "Wybierz żądany model sztucznej sieci neuronowej:", "웹브라우저": "WebBrowser", "웹툰 제외": "Wyklucz Webtoons", "유사도": "Podobieństwo", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "Nieprawidłowe konto / hasło", "유효한 계정입니다": "Ważne konto", "음소거": "Wycisz", "음악 파일에 앨범아트 삽입": "Dodaj okładkę albumu do plików audio", "음원": "Dźwięk", "음질": "Jakość dźwięku", "이동": "Przesuń", "이동할 수 없습니다: {}": "Nie można przesunąć: {}", "이름": "Nazwa", "이름 변경": "Zmień nazwę", "이름을 얻는 도중 실패했습니다": "Nie udało się odczytać nazwy", "이미 다운로드한 작품 제외": "Wyklucz już pobrane galerie", "이미 모든 그룹이 추가되어 있습니다": "All groups have already been added", "이미 모든 시리즈가 추가되어 있습니다": "All series have already been added", "이미 모든 작가가 추가되어 있습니다": "All artists have already been added", "이미 모든 캐릭터가 추가되어 있습니다": "All characters have already been added", "이미 추가한 작업 다시 시작할지 물어봄": "Ask to retry tasks already in the list", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "This task already in the list. Do you want to download it again?", "이미 추가한 플러그인입니다": "This plugin already in the list", "이미 포함하는 그룹이 있습니다.": "Istnieje już grupa, która zawiera zadania.", "이미지": "Obraz", "이미지 정보 캐시": "Informacje o pamięci podręcznej obrazu", "이미지 포맷 변환": "Zmień format obrazu", "이미지를 읽는 중 실패": "Nie udało się odczytać obrazów", "익명 모드": "Tryb anonimowy", "인코딩": "Kodowanie", "일반": "Ogólne", "일시 정지": "Pause", "읽기 중지": "Stop reading", "읽는 중...": "Czytanie...", "자동": "Automatyczny", "자동 녹화": "Auto recording", "자동 새로고침 & 스크롤": "Automatyczne odświeżanie i przewijanie", "자동 생성 자막 포함": "Include automatic captions", "자동 선택": "Wybór automatyczny", "자동 업데이트": "Automatyczny", "자동 저장": "Autozapis", "자막": "Podtytuł", "자세한 정보": "Details", "자세한 정보 보기": "Pokaż szczegóły", "작가": "Artyści", "작가 (Artists)": "Artyści", "작가 이름": "Imię artysty", "작가 추천": "Poleć artystów", "작가 합쳐서 불러오기": "Wczytaj wszystkich artystów razem", "작가가 없습니다": "Brak artystów", "작가명 복사 (&A)": "Skopiuj nazwy artystów (&A)", "작게": "Mała", "작성자": "Autor", "작업": "Zadania", "작업 개수": "Ilość zadań", "작업 기록": "Task history", "작업 기록 초기화 성공": "Task history cleared successfully", "작업 기록이 없습니다": "No task history", "작업 당 최대 연결": "Maximum connections per task", "작업 만들기 실패": "Failed to create tasks", "작업 목록 폭": "Task list width", "작업 수정": "Edytuj zadanie", "작업 수정...": "Edit task...", "작업 완료": "Task complete", "작업 완료 후": "After task complete", "작업 왼쪽에서 순서 변경": "Zmień kolejność po lewej stronie", "작업 용량": "Rozmiar pliku zadań", "작업 정보": "Informacje o zadaniu", "작업 정보... (&I)": "Informacje... (&I)", "작업 타입?": "Typ zadania?", "작업들 가져오기": "Importuj zadania", "작업들 내보내기": "Eksportuj zadania", "작업들을 가져올까요?": "Czy chcesz zaimportować zadania?", "작업들을 가져왔습니다": "Zadania zaimportowane", "작업들을 내보냈습니다": "Zadania wyeksportowane", "작업이 아직 완료되지 않았습니다": "Zadanie nie zostało jeszcze zakończone", "작업이 완료되면 알림 보이기": "Show notifications when tasks are complete", "작품 목록 가져오기": "Importuj listę galerii", "작품 목록 내보내기": "Eksportuj listę galerii", "잠금": "Zablokuj", "잠금 해제": "Odblokuj", "장": "strony", "재개": "Resume", "재시작 후 적용됩니다": "Applies after restart", "저사양 모드": "Tryb niskiej wydajności", "저장": "Zapisz", "저장 && 종료": "Zapisz && Wyjdź", "저장 실패": "Nie udało się zapisać", "저장 완료": "Zapisane", "저장 중...": "Zapisywanie...", "저장 폴더": "Folder pobierania", "저장 폴더 변경...": "Zmień folder pobierania...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "Skopiuj wszystkie ID galerii w folderze pobierania", "저장 폴더에 있는 모든 작가 불러오기": "Wczytaj wszystkich artystów z folderu pobierania", "저장... (&S)": "&Zapisz...", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "Brak pliku konfiguracyjnego; Naciśnij [F1], aby przeczytać \"Jak używać\"", "적어도 {} 개의 작품이 필요합니다.": "Wymagane są co najmniej {} galerie.", "점수": "Wynik", "정규식 문법": "Składnia Regex", "정규식으로 찾기": "Szukaj używając Regex", "정렬 기준": "Sortuj według", "정말 단축키를 초기화하시겠습니까?": "Czy na pewno chcesz zresetować skróty?", "정말 목록에서 제거하시겠습니까?": "Czy na pewno chcesz usunąć z listy?", "정말 삭제하시겠습니까?": "Czy na pewno chcesz usunąć?", "정말 설정을 초기화하시겠습니까?": "Are you sure you want to reset the preferences?", "정말 작업 기록을 초기화하시겠습니까?": "Are you sure you want to clear task history?", "정말 종료하시겠습니까?": "Czy na pewno chcesz wyjść?", "정말 중지하시겠습니까?": "Czy na pewno chcesz przestać działanie?", "정말 쿠키를 초기화하시겠습니까?": "Czy na pewno chcesz wyczyścić pliki cookie?", "정보": "Informacje", "정보...": "Informacje...", "정확도": "Dokładność", "제거": "Usuń", "제목": "Tytuł", "제목 (Title)": "Tytuł", "제목 복사 (&T)": "Kopiuj tytuł (&T)", "제외 태그": "Znaczniki do wykluczenia", "제외 태그 목록에 그룹 추가": "Add groups to the exclusion tag list", "제외 태그 목록에 시리즈 추가": "Add series to the exclusion tag list", "제외 태그 목록에 작가 추가": "Add artists to the exclusion tag list", "제외 태그 목록에 캐릭터 추가": "Add characters to the exclusion tag list", "조각 표시": "Pokaż części", "종료": "Wyjście", "종료 중...": "Wychodzenie...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "Przeciągnij poziomo: ±1\nPrzeciągnij pionowo: ±100", "주소": "Address", "주소 or 갤러리 넘버": "Adres URL albo ID galerii", "주소를 입력해주세요": "Proszę wpisz jakieś adresy URL", "중간": "Średnia", "중단": "Przerwij działanie", "중복 이미지 찾기": "Wyszukiwarka zduplikowanych zdjęć", "중복 이미지 찾는 중": "Znajdowanie zduplikowanych zdjęć", "중복 제거": "Wytnij duplikaty", "지원하는 사이트:": "Obsługiwane witryny:", "지원하는 토큰": "Supported tokens", "지정한 페이지만 다운로드합니다.": "Pobieraj tylko wybrane strony.", "직접 다운로드": "Bezpośrednie pobieranie", "진행도": "Progress", "참고 작품: {} 개": "Odniesienie: {} galerie", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "Proszę zobaczyć: Pomoc - Jak używać (F1) - Załaduj pliki cookie", "창 보이기 / 숨기기": "Pokaż / Ukryj okna", "창 위치 크기 기억": "Remember window position and size", "찾기...": "Szukaj...", "채널 영상 역순으로 다운로드": "Download channel videos in reverse order", "첫 번째 파일 열기": "Otwórz pierwszy plik", "첫 번째 파일 열기 (&O)": "Otwórz pierwszy plik (&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "Pierwsza strona, 10 ~ 20 stron, Ostatnia strona", "체인지로그": "Lista zmian", "초기화": "Resetuj", "최대 다운로드 속도": "Maksymalna prędkość pobierania", "최대 동시 작업": "Maksymalna liczba zadań równoległych", "최대 페이지 제한": "Maximum page limit", "최소화 버튼으로 트레이로 최소화": "Przycisk minimalizuj minimalizuje do zasobnika systemowego", "최신 버전:": "Latest:", "추가한 날짜": "Data dodania", "취소": "Anuluj", "캐릭터": "Postacie", "캐릭터 (Characters)": "Postacie", "캐릭터 이름": "Imię postaci", "캐릭터가 없습니다": "Brak postaci", "캐릭터명 복사 (&C)": "Kopiuj imię postaci (&C)", "코멘트": "Komentarz", "코멘트 수정": "Edytuj komentarz", "쿠키": "Pliki Cookie", "쿠키 내보내기": "Eksportuj pliki cookie", "쿠키 내보내기 성공": "Pliki cookie zostały pomyślnie wyeksportowane", "쿠키 불러오기": "Załaduj pliki cookie", "쿠키 불러오기 성공": "Pliki cookie zostały pomyślnie zaimportowane", "쿠키 초기화 성공": "Pliki cookie zostały pomyślnie wyczyszczone", "쿠키가 없습니다": "Brak plików cookie", "쿠키를 업데이트하세요": "Zaktualizuj swoje pliki cookie", "크게": "Duża", "크기": "Rozmiar", "크기 조절": "Zmień rozmiar", "크기 조절...": "Zmiana rozmiaru...", "크롬 확장프로그램 연동에 실패했습니다.": "Połączenie z rozszerzeniem Chrome nie powiodło się.", "클라이언트": "Clilent", "클래식": "Klasyczna", "클립보드에서 자동 추가": "Monitor schowka", "타입": "Typy", "타입 (Types)": "Typy", "태그": "Znaczniki", "태그 \"{}\" 제거": "Usuń Znacznik \"{}\"", "태그 \"{}\" 추가": "Dodaj Znacznik \"{}\"", "태그 (Tags)": "Znaczniki", "태그 :": "Znacznik :", "태그 설정": "Ustawienia znacznika", "태그 수정": "Edit tags", "태그 없음": "Brak znaczników", "테마": "Motyw", "토렌트 고급 옵션 초기화": "Reset torrent advanced options", "토렌트 추가": "Dodaj torrent", "토렌트 파일 연결": "Powiąż z plikami torrent", "토큰": "Tokens", "통계": "Statystyka", "통과": "Pomiń", "투명도": "Przezroczystość", "트래커 수정": "Edytuj trackery", "트래커 추가": "Add trackers", "트레이로 전환되었습니다": "Zminimalizowany do zasobnika systemowego", "트레이로 최소화": "Minimalizuj do zasobnika systemowego", "트레이로 최소화 알림 보이기": "Show minimize notifications in the tray", "트레이에서 알림 보이기": "Wyświetl powiadomienia w zasobniku", "파일": "Plik", "파일 목록": "File list", "파일 삭제": "Usuń pliki", "파일 삭제 (&X)": "Usuń pliki (&X)", "파일 수": "Liczba plików", "파일 스캔 중": "Skanowanie plików", "파일 유형 제외": "Wyklucz typy plików", "파일 체크 중...": "Checking files...", "파일 크기": "Rozmiar pliku", "파일 형식": "Format", "파일 형식 물어보기": "Zapytaj o typ pliku", "파일명": "Nazwa pliku", "파일명 형식": "Format nazwy pliku", "파일을 고르세요:": "Select files:", "파일을 선택하세요": "Wybierz plik", "파일의 수정한 날짜를 업로드 날짜로 변경": "Change the file's modified date to the upload date", "파일이 없습니다": "Brak plików", "패스워드": "Hasło", "퍼지로 찾기": "Szukaj używając Fuzzy", "페이지 읽는 중...": "Czytanie stron...", "페이지 지정": "Wybierz strony", "페이지 지정 다운로드": "Wybierz strony && Pobierz", "페이지 지정 다운로드 기본값": "Wartość domyślna dla opcji \"Wybierz strony && Pobierz\"", "페이지를 선택해주세요": "Proszę wybrać strony", "페이지를 읽는 중에 오류가 발생했습니다": "Wystąpił błąd podczas próby odczytania stron", "평범하게 찾기": "Domyślny tryb wyszukiwania", "포트": "Port", "포함 태그": "Znaczniki do uwzględnienia", "폭 맞춤": "Dopasuj do szerokości", "폰트": "Font", "폰트 변경...": "Zmień czcionkę...", "폰트 선택": "Select Font", "폰트 초기화": "Resetuj czcionkę", "폴더": "Folder", "폴더 && 압축파일": "Folder && Pliki zip", "폴더 바로가기": "Folder shortcuts", "폴더 열기": "Otwórz folder", "폴더 이동": "Przenieś folder", "폴더 추가": "Dodaj folder", "폴더가 없습니다": "No folder", "폴더들": "Katalogi", "폴더들을 선택하세요": "Select folders", "폴더를 선택하세요": "Wybierz folder", "폴더를 추가해주세요": "Proszę dodać kilka folderów", "폴더명 형식": "Format folderów", "표지 검색 실패": "Nie udało się wyszukać okładki", "표지 검색...": "Szukanie okładki...", "프로그램 끝내기": "Quit the program", "프로그램 패스워드": "Hasło programu", "프록시": "Proxy", "플러그인": "Plugins", "플러그인을 추가하시겠습니까?": "Are you sure you want to add this plugin?", "플레이리스트": "Playlist", "플레이리스트 파일에 번호 매기기": "Numeruj pliki w playlistach", "플레이리스트 한 폴더에 다운로드": "Pobierz playlistę do jednego folderu", "플로팅 미리보기": "Pływający podgląd", "피드백": "Feedback", "필터": "Filtr", "필터창": "Filtr", "하나 이상의 타입을 선택해주세요.": "Wybierz co najmniej jeden typ.", "하위폴더 포함": "Uwzględnij podfoldery", "학습 중...": "Uczenie się...", "한 줄 당 한 트래커 URL": "Jeden adres URL trackera w każdym wierszu", "항상 위": "Zawsze na wierzchu", "항상 위 OFF": "Always on top OFF", "항상 위 ON": "Always on top ON", "해당 링크로 이동합니다": "Otwórz link...", "해상도": "Rozdzielczość", "현재 버전: v{}\n최신 버전: v{}": "Bieżąca wersja: v{}\nNajnowsza wersja: v{}", "현재 작업 없음": "There are no current tasks", "호스트": "Host", "화 선택": "Wybierz odcinki", "화질": "Jakość", "확인": "OK", "후원": "Wspomóż", "휴지통으로 이동": "Przenieś do Kosza" } } ================================================ FILE: translation/tr_pt.hdl ================================================ { "lang": "pt", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "Folders must be more than one if \"Exclude same sources\" is turned on", "#Cancel#": "Cancelar", "#EB#": "{} EB", "#EMPTY#": "Vazio (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "OK", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "Aparência", "#boss_invalid_pw#": "Senha Inválida!", "#boss_pw#": "Senha:", "#byte#": "{} byte", "#bytes#": "{} bytes", "#click#": "Clique", "#combo_hour#": "{} Hora", "#combo_hours#": "{} Horas", "#combo_min#": "{} Min", "#combo_mins#": "{} Mins", "#combo_sec#": "{} Seg", "#combo_secs#": "{} Segs", "#date01#": "{d} Jan", "#date01y#": "{d} Jan, {y}", "#date02#": "{d} Fev", "#date02y#": "{d} Fev, {y}", "#date03#": "{d} Mar", "#date03y#": "{d} Mar, {y}", "#date04#": "{d} Abr", "#date04y#": "{d} Abr, {y}", "#date05#": "{d} Mai", "#date05y#": "{d} Mai, {y}", "#date06#": "{d} Jun", "#date06y#": "{d} Jun, {y}", "#date07#": "{d} Jul", "#date07y#": "{d} Jul, {y}", "#date08#": "{d} Ago", "#date08y#": "{d} Ago, {y}", "#date09#": "{d} Set", "#date09y#": "{d} Set, {y}", "#date10#": "{d} Out", "#date10y#": "{d} Out, {y}", "#date11#": "{d} Nov", "#date11y#": "{d} Nov, {y}", "#date12#": "{d} Dez", "#date12y#": "{d} Dez, {y}", "#developed_by#": "Desenvolvido por Kurt Bestor", "#dirformat_artist#": "Algum artista", "#dirformat_group#": "Algum grupo", "#dirformat_lang#": "Inglês", "#dirformat_series#": "Algumas séries", "#dirformat_title#": "Algum título", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "Todos os Arquivos {}", "#filter_bmk#": "Arquivos de favoritos {}", "#filter_cookie#": "Arquivos de Cookies HTTP do Netscape (*.txt)", "#filter_hdfb#": "Hitomi Downloader Filtrar favoritos {}", "#filter_hdk#": "Hitomi Downloader Atalhos {}", "#filter_hdl#": "Hitomi Downloader Linguista {}", "#filter_hds#": "Hitomi Downloader Scripts {}", "#filter_hdt#": "Hitomi Downloader Tarefas {}", "#filter_image#": "Images {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "Precisa de navegador; Use --safemode", "#invalid_loginRequired#": "Necessário logar; Atualize seus Cookies", "#invalid_loginRequired2#": "Login required; Please login", "#invalid_outdatedExtension#": "A extensão está desatualizada; Atualize a extensão", "#invalid_unknownSite#": "Site desconhecido", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "Carregando: {}", "#new_group#": "New group", "#new_item#": "Novo Item", "#p#": "{}p", "#recomm_all_langs#": "Todos os idiomas", "#recomm_artist#": "Artista", "#recomm_main#": "Ele analisa as galerias na pasta de downloads e recomenda artistas.\n\nA precisão mostrada nos resultados se refere apenas às galerias disponíveis.\nQuanto mais galerias você tiver, melhor (recomenda-se 100 ou mais).\n\nAtualmente, você tem {item} galerias:", "#recomm_score#": "Pontuação", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "Todos", "#setting_autosaveR#": "", "#setting_incompleteL#": "Após", "#setting_incompleteR#": "", "#t_etc#": "Etc", "#t_file#": "File", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "Blue", "#tag_gray#": "Gray", "#tag_green#": "Green", "#tag_orange#": "Orange", "#tag_purple#": "Purple", "#tag_red#": "Red", "#tag_yellow#": "Yellow", "#task_artist#": "Artista", "#task_date#": "Data", "#task_done#": "Finalizado", "#task_folder#": "Pasta", "#task_incomplete#": "Incompleto", "#task_input#": "Entrada", "#task_invalid#": "Inválido", "#task_multiple#": "Múltiplos", "#task_range#": "Range", "#task_single#": "Singular", "#task_site#": "Site", "#task_status#": "Status", "#task_title#": "Título", "#task_type#": "Tipo", "#task_url#": "URL", "#task_zipfile#": "ZipFile", "#torrent_anon#": "Um user-agent genérico será usado para os trackers (exceto para torrents privados).
Seu endereço IP local (IPv4 e IPv6) não será enviado como parâmetro de consulta para trackers privados.
Se o announce_ip estiver configurado, ele não será enviado aos trackers.
A versão do cliente não será enviada aos pares no handshake de extensão.
O nó DHT será desativado.", "#translation#": "Translation", "50개씩 끊어서 검색": "Pesquisa dividida em partes de 50", "DPI 우회": "Desvio de DPI", "DPI 우회 제외 도메인": "Domínios excluídos do bypass DPI", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "\"Desvio de DPI\" está desativado. Pode não funcionar em alguns sites.", "E(x)Hentai 로그인 쿠키 필요": "Cookies de login E(x)Hentai necessários", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "Seu IP está bloqueado temporariamente. Por favor tente novamente mais tarde", "PDF 생성": "Criar um PDF", "UI 스케일 ({}%)": "UI scale ({}%)", "URL을 입력하세요": "Por favor digite algumas URLs", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "Aperte [Download] para baixar. Aperte [OK] para sair.", "reCAPTCHA 풀기": "Conclua o reCAPTCHA", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Reinício em {day}d {hour}h {min}m {sec}s: {id}", "{hour}시간 {min}분 {sec}초": "{hour}h {min}m {sec}s", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Reinício em {hour}h {min}m {sec}s: {id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "Reinicilização em {min}m {sec}s: {id}", "{sec}초 뒤 다시 시작: {id}": "Reinício em {sec}s: {id}", "{} 개 선택": "{} items selecionados", "{} 개 찾음": "{} encontrados", "{} 개의 작업들이 있습니다": "Existem {} tarefas", "{} 개의 진행 중인 작업이 있습니다.": "Existem {} tarefas em progresso.", "{} 를 제외 태그에 추가했습니다": "Adicionado {} à lista de tags de exclusão", "{} 설정": "{} Preferências", "{} 시간 뒤 다시 시작": "Reinício em {} horas", "{} 시간 전 데이터": "Data; {} horas atrás", "{} 일 뒤 다시 시작": "Reinício em {} dias", "{} 일 전 데이터": "Data; {} dias atrás", "{}개 작업의 첫 번째 파일을 엽니다.": "Abrir os primeiros arquivos de cada uma das {} tarefas.", "{}개의 불완전한 작업을 다시 시작합니다.": "Reiniciar {} tarefas incompletas.", "{}개의 완료된 작업을 목록에서 제거합니다.": "Remover {} tarefas completas da lista.", "{}개의 완료된 작업을 제거합니다.": "Remover {} tarefas completas.", "{}개의 작업을 다시 시작합니다.": "Reiniciar {} tarefas.", "『 {} 』는 이미 북마크되어 있습니다": "『 {} 』já está favoritado", "『 {} 』를 복사했습니다": "『 {} Copiado", "『 {} 』를 북마크로부터 불러왔습니다": "『 {} 』foi carregado dos favoritos", "『 {} 』를 북마크에서 불러왔습니다": "『 {} 』foi carregado dos favoritos", "『 {} 』를 북마크했습니다": "『 {} 』foi favoritado", "『 {} 』를 저장 폴더에서 불러왔습니다": "『 {} 』foi carregado da pasta de downloads", "가능하면 일본어 제목 사용": "Usar título em Japonês se disponível", "가능한 경우 챕터 마커 추가": "Adicionar marcadores de capítulo, se disponíveis", "가져오기": "Importar", "가져오기 실패": "Falha na importação", "간단 검색": "Pesquisa simples", "같은 소스 제외": "Exclude same sources", "개": "items", "개별 다운로드는 지원하지 않습니다": "Download de um post individual não é suportado", "갤러리 넘버": "ID da galeria", "갤러리 넘버 복사": "Copiar ID da galeria", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "Um erro aconteceu ao copiar a ID da galeria.", "갤러리 작업 정보... (&I)": "SObre os trabalhos da galeria... (&I)", "갤러리 정보": "Informações da galeria", "갤러리 정보 파일 (info.txt) 생성": "Criar um arquivo de informações da galeria (info.txt)", "갯수": "Contagem", "갱신 간격": "Refresh interval", "거꾸로": "Reversa", "검색": "Busca", "검색 데이터": "Dados de busca", "검색 도중에 사용할 수 없는 기능입니다.": "Esta função fica bloqueada durante a busca.", "검색 범위": "Tamanho da busca", "검색 순서": "Ordem da busca", "검색 필터": "Filtro de busca", "검색기": "Buscador", "검색어": "Termos de busca", "검색어 자동 완성": "Autocompletar termos", "결과": "Resultado", "결과 저장": "Salvar o resultado", "경고 없이 삭제": "Deletar sem aviso", "경로를 선택하세요": "Escolha um caminho", "계속 검색": "Continuar busca", "계정": "Usuário", "계정 / 패스워드": "Usuário / Senha", "고급": "Avançado", "고급 검색": "Busca avançada", "고급 옵션": "Advanced options", "고정": "Fixar", "고정 해제": "Desfixar", "공식 스크립트 && 플러그인": "Official scripts && plugins", "공인 IP: {}": "Public IP: {}", "관리자 권한 없이 실행": "Executar sem privilégios de administrador", "관리자 권한 필요": "Administrator privileges required", "광고 스킵": "Pulas ads", "그대로": "Normal", "그룹": "Grupos", "그룹 (Groups)": "Grupos", "그룹 안의 모든 작업 다시 시작": "Reiniciar todas as tarefas neste grupo", "그룹 이름": "Nome do grupo", "그룹 펼치기 / 접기": "Expandir / Recolher grupos", "그룹 합쳐서 불러오기": "Carregar todos os grupos juntos", "그룹명 복사 (&G)": "Copiar nome do grupo (&G)", "그룹으로 이동": "Move to group", "그룹을 포함하는 그룹은 만들 수 없습니다.": "Você não pode criar grupos que contenham grupos.", "그룹이 없습니다": "Nenhum grupo", "기본": "Padrão", "기본 데이터": "Dados padrão", "기본 데이터 다운로드": "Baixar de dados padrão", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "Você pode criar grupos apenas no estado de classificação padrão.", "기본값": "Valor padrão", "기타": "Etc.", "깊은 모델": "Deep model", "끝내기": "Sair", "날짜": "Data", "낮음": "Low", "내보내기": "Exportar", "내보내기 실패": "Falha na exportação", "내용 보기": "Ver script", "내장 웹브라우저": "Navegador web acoplado", "내장 이미지 뷰어": "Visualizador de imagem acoplado", "네트워크": "Internet", "녹화": "Gravando", "녹화 중...": "Gravando...", "녹화 중지": "Parar gravação", "높음": "High", "다른 동영상 사이트에도 적용됩니다.": "Isso também se aplica para outros sites de vídeo.", "다시 시작 (&S)": "Reinicialização em (&S)", "다시 시작 실패; 복구됨": "Falha ao tentar novamente; Revertido", "다운로드": "Baixar", "다운로드 & 제거": "Baixar & Remover", "다운로드 && 제거": "Baixar && Remover", "다운로드 (&D)": "Baixar (&D)", "다운로드 날짜 표시": "Exibir datas de download", "다운로드 속도": "Velocidade de download", "다운로드 완료": "Download completo", "다운로드 완료 후 자동 제거": "Remover automaticamente após completar o download", "다운로드 일시 정지 / 재개": "Pausar / Resumir Download", "다운로드 중": "Baixando", "다운로드가 완료되면 알림": "Exibir notificação ao terminar o download", "다운로드가 완료될 때까지 절전모드 방지": "Prevent system sleep until downloads are finished", "다운로드하기 전에 파일 고르기": "Select files before download", "다운로드하지 않음": "Não baixar", "다운로드한 작품만": "Apenas galerias baixadas", "다음 검색시 더 빠르게 검색": "Melhora desempenho da próxima vez", "다음 작업들이 목록에서 제거됩니다:": "As seguintes tarefas serão removidas da lista:", "다음 파일들이 삭제됩니다:": "Os seguintes arquivos serão excluídos:", "다크 모드": "Modo noturno", "단일 파일": "Arquivo único", "단축키": "Shortcuts", "단축키 내보내기": "Exportar atalhos", "단축키 내보내기 성공": "Exportado com sucesso os atalhos", "단축키 불러오기": "Importar atalhos", "단축키 불러오기 성공": "Importado com sucesso os atalhos", "단축키 수정": "Editar atalhos", "단축키 초기화 성공": "Atalhos redefinidos com sucesso", "닫기 버튼으로 트레이로 최소화": "O botão de fechar minimiza para a bandeja", "대기 중": "Esperando", "대기 중...": "Aguardando...", "데이터 다운로더": "Data Downloader", "데이터 분류 중...": "Classificando dados...", "데이터 분석 중...": "Analisando dados...", "데이터 없음": "Sem Data", "데이터 읽는 중...": "Lendo dados...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "Não existem dados.\nPor favor faça o download através do Menu.", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "Não existem dados.\nPor favor faça o download através do Buscador", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "Seus dados são mais antigos que uma semana.\nPor favor os atualize.", "데이터를 다운로드하는 도중에 실패했습니다.": "Falha ao baixar dados", "데이터를 모두 받았습니다!": "Todos os dados baixados!", "도구": "Ferramentas", "도구창": "Tool window", "도움말": "Ajuda", "동영상": "Videos", "동영상 변환...": "Converter video...", "뒤 100 페이지": "últimas 100 páginas", "드래그 & 드랍해서 바꾸세요:": "Use Arrastar & Soltar para alterar:", "디더링": "Estremecer", "디버그": "Debug", "디스코드": "Discord", "라이선스": "Licença", "랜덤으로 하나 선택": "Escolher um aleatoriamente", "로그...": "Log...", "로그인": "Login", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "Falha no login: {}{}\nPor favor veja [Opções - Preferências - Configurações Pixiv - Login].", "로그인 중...": "Realizando login...", "로그인 테스트": "Testar login", "로드 중: {}": "Carregando: {}", "로컬 파일 감지": "Detectar arquivos locais", "로컬 파일로부터 새 작업 만들기": "Criar uma nova tarefa a partir de arquivo local", "를 북마크에서 지웠습니다": "removido dos favoritos", "리트윗 제외": "Exclude retweets", "리트윗 포함": "Include retweets", "릴리즈 노트": "Nota de atualização", "링크 열기": "Abrir link", "링크 주소 복사": "Copiar link", "링크 주소 복사 (&C)": "Copiar link (&C)", "마무리 중...": "Finalizando...", "멈춤": "Parado", "메뉴": "Menu", "메모리 사용량": "Uso de memória", "메모리 사용량 표시": "Exibit uso de memória", "메시지 상자": "Message box", "모델": "Modelo", "모델 생성 중...": "Criando modelo...", "모델: {}": "Modelo: {}", "모두": "Todos", "모두 삭제": "Deletar todos", "모두 선택": "Selecionar todos", "모든 갤러리 넘버를 복사했습니다.": "Todas as IDs copiadas", "모든 언어": "Todos os idiomas", "모든 작업 완료": "Todas as tarefas foram conclúidas", "모든 작업 완료 후": "Quando todas as tarefas forem concluídas", "모든 작업이 완료되면 알림 보이기": "Mostrar notificações quando todas as tarefas forem concluídas", "목록": "Lista", "목록 주소를 입력해주세요": "Por favor faça uma lista de URLs", "목록 지우기": "Limpar lista", "목록에서 제거": "Remover da lista", "목록에서 폴더 제거": "Remover pasta da lista", "목록을 모두 지울까요?": "Você tem certeza que você quer limpar a lista?", "미리보기": "Prévia", "미리보기 크기": "Tamanho da prévia", "배경 이미지": "Imagem de fundo", "배경 이미지 변경": "Mudar imagem de fundo", "배경 이미지 초기화": "Redefinir imagem de fundo", "버전 확인": "Procurar por atualizações", "번역": "Traduzir", "베타 버전 설치": "Instalar versões betas", "변경할 최대 크기": "Tamanho máximo", "변경할 최소 크기": "Tamanho mínimo", "변환 중...": "Convertendo...", "보기": "Visualizar", "보통": "Normal", "부팅 시 실행": "Iniciar ao ligar a máquina", "북마크": "Favoritos", "북마크 가져오기": "Importar favoritos", "북마크 가져오기 실패": "Falha ao importar favoritos", "북마크 내보내기": "Exportar favoritos", "북마크 내보내기 실패": "Falha ao exportar favoritos", "북마크를 가져왔습니다": "Favoritos importados", "북마크를 내보냈습니다": "Favoritos exportados", "북마크를 모두 삭제합니다.": "Remover todos os favoritos.", "북마크를 모두 삭제했습니다.": "Todos os favoritos foram removidos.", "불러오기": "Carregar", "불완전한 작업 모두 다시 시작": "Reiniciar todas as tarefas incompletas", "불완전한 작업 자동으로 다시 시작": "Reiniciar todas as tarefas incompletas automaticamente", "붙여넣고 다운로드": "Colar e baixar", "뷰어... (&V)": "&Visualizador...", "브라우저로 보기": "Mostrar no navegador", "브라우저로 보기 (&B)": "Mostrar no navegador (&B)", "비디오 코덱 우선순위": "Prioridade do codec de vídeo", "비슷한 이미지 포함 (느림)": "Incluir imagens similares (Lento)", "비율 유지": "Proporção de tela", "비율 유지 - 꽉 차게": "Aspect ratio - fill", "비정상적인 로그인 시도": "Tentativa de login anormal", "빠른 시작을 위한 작업 레이지 로딩": "Carregamento lento de tarefas para rápida inicialização", "빠른 실행 도구 모음 사용자 지정": "Customizar barra de acesso rápido", "뽑기": "Aleatório", "뽑을 갯수": "Númerio de galerias", "사용법": "Como usar", "사용법...": "Como usar...", "사용자 지정 테마 색": "Tema de cor personalizado", "사이드바": "Sidebar", "사이트": "Site", "사이트 추가": "Adicionar suporte para site", "사이트를 추가했습니다": "Suporte para site adicionado", "삭제된 데이터": "Dados deletados", "삭제된 데이터 다운로드": "Baixar dados deletados", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "Não existem dados deletados.\nPpor favor delete dados pelo Menu.", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "Falha ao baixar dados Deletados.", "삭제된 데이터를 모두 받았습니다!": "Download completo: Dados Deletados", "삭제시 휴지통으로 보냄": "Enviar para a lixeira", "상태": "Status", "새 그룹 만들기": "Crie um grupo novo", "새 버전이 있습니다. 업데이트 하실래요?": "Existe uma versão nova. Você gostaria de atualizar?", "새로고침": "Atualizar", "샘플": "Sample", "서명": "Certificado", "서버": "Servidor", "선택 화 다운로드": "Selecionar Capítulos && Baixar", "선택된 작업들 내보내기": "Exportar tarefas selecionadas", "선택된 작업이 없습니다": "Nenhuma tarefa selecionada", "선택하세요:": "Select:", "선택한 항목 중에서 자동 선택": "Escolher automaticamente dentre os items selecionados", "선호 언어": "Idioma Preferêncial", "설명": "Comentário", "설정": "Preferências", "설정 (Preferences)": "Preferências", "설정을 따름": "Follow preferences", "성공: {}\n실패: {}": "Sucesso: {}\nFalho: {}", "소리": "Som", "수동": "Manual", "수동 업데이트": "Atualização Manual", "수정...": "Edit...", "순서 변경": "Alterar a ordem", "숨김 키": "Boss-Key", "숫자": "Número", "스레드": "Threads", "스레드 생성 중...": "Inicializando threads...", "스크롤 속도 ({}x)": "Velocidade de rolagem ({}x)", "스크립트": "Script", "스크립트 가져오기": "Importar script", "스크립트 작성법": "How to write a script", "스크립트를 실행하시겠습니까?": "Você tem certeza que você quer executar esse script?", "스크립트를 읽는 중 오류가 발생했습니다": "Error occurred while reading the script", "스토리 읽는 중...": "Lendo stories...", "스토리 포함": "Incluir stories", "시딩": "Semeando", "시딩 중지": "Parar de semear", "시딩 하지 않음": "Não semeando", "시리즈": "Série", "시리즈 (Series)": "Série", "시리즈가 없습니다": "Nenhuma série", "시리즈명 복사 (&S)": "Copiar nome da série (&S)", "시스템": "Sistema", "시스템 설정 사용": "Usar configurações do sistema", "시스템 종료": "Shutdown System", "시스템 트레이": "Bandeja do sistema", "시작 후 다운로드": "Baixados nessa execução", "시작 후 지난 시간": "Tempo gasto nessa execução", "실패": "Falha", "실험 기능": "Função experimental", "썸네일": "Miniatura", "썸네일 고정": "Corrigir miniatura", "썸네일 다운로드": "Download thumbnails", "썸네일 숨기기": "Esconder miniaturas", "썸네일 크기": "Tamanho da miniatura", "썸네일을 선택하세요": "Escolha uma miniatura", "아니오(&N)": "&Não", "아무것도 안 함": "Não fazer nada", "아이콘": "Ícone", "압축": "Compressão", "압축 형식": "Formato", "압축파일 연결 프로그램": "Programa para arquivos compactados", "앞 100 페이지": "Primeiras 100 páginas", "얕은 모델": "Modelo raso", "언어": "Idioma", "언어 (Language)": "Idioma", "언어 (Languages)": "Idiomas", "업데이트": "Atualizar", "업데이트 중...": "Atualizando...", "업데이트 체크 중...": "Buscando Atualizações...", "업로드": "Upload", "연결 프로그램 변경": "Escolha o programa para usar para abrir", "열기": "Abrir", "예(&Y)": "&Sim", "예상치 못한 오류로 다운로드에 실패했습니다.": "O download falhou por um erro inesperado.", "예시": "Exemplo", "오디오 코덱 우선순위": "Audio codec priority", "오디오 트랙": "Audio track", "오류": "Erro desconhecido", "올바르지 않은 범위입니다": "Intervalo inválido", "올바르지 않은 주소입니다": "URL Inválida", "올바르지 않은 형식의 검색 필터입니다": "Filtro de pesquisa formatado de forma inválida", "올바르지 않은 형식의 스크립트입니다": "Invalid format script", "옵션": "Opções", "옵션 (JSON 포맷)": "Opções (JSON format)", "옵션 (Options)": "Opções", "완료": "Finalizado", "완료된 작업 모두 제거": "Remover todas as tarefas concluídas", "완료됨으로 표시": "Marcar como concluída", "완전 삭제": "Deletar permanentemente", "우선순위": "Prioridade", "우선순위 변경": "Mudar prioridade", "움짤": "GIF", "움짤 변환...": "Converter GIF...", "원본": "Original", "원본 이미지 다운로드": "Baixar imagens originais", "원본 크기보다 크게 바뀌지는 않습니다": "O tamanho não será maior que o tamanho original", "원본 파일 삭제": "Deletar arquivos baixados", "원하는 인공신경망 모델을 고르세요:": "Escolha o modelo de rede neural artificial que você deseja:", "웹브라우저": "WebBrowser", "웹툰 제외": "Exceto para Webtoons", "유사도": "Semelhança", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "Conta / Senha inválida", "유효한 계정입니다": "Conta válida", "음소거": "Silenciado", "음악 파일에 앨범아트 삽입": "Adicionar capa de álbum para arquivos de aúdio", "음원": "Aúdio", "음질": "Qualidade do som", "이동": "Mover", "이동할 수 없습니다: {}": "Não foi possível mover: {}", "이름": "Nome", "이름 변경": "Renomear", "이름을 얻는 도중 실패했습니다": "Falha ao obter o nome", "이미 다운로드한 작품 제외": "Ignorando os trabalhos que já foram baixados", "이미 모든 그룹이 추가되어 있습니다": "Todos os grupos já foram adicionados", "이미 모든 시리즈가 추가되어 있습니다": "Todas as series já foram adicionadas", "이미 모든 작가가 추가되어 있습니다": "Todos os artistas já foram adicionados", "이미 모든 캐릭터가 추가되어 있습니다": "Todos os personagens já foram adicionados", "이미 추가한 작업 다시 시작할지 물어봄": "Perguntar se deseja tentar novamente as tarefas que já estão na lista", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "Esta tarefa já está na lista. Deseja baixá-la novamente?", "이미 추가한 플러그인입니다": "Este plugin já está na lista", "이미 포함하는 그룹이 있습니다.": "Já existe um grupo que contém estas tarefas.", "이미지": "Imagem", "이미지 정보 캐시": "Cache de informações de imagem", "이미지 포맷 변환": "Alterar formato de imagem", "이미지를 읽는 중 실패": "Falha ao ler a imagem", "익명 모드": "Modo anônimo", "인코딩": "Codificando", "일반": "Geral", "일시 정지": "Pause", "읽기 중지": "Parar de ler", "읽는 중...": "Lendo...", "자동": "Automático", "자동 녹화": "Gravar Automáticamente", "자동 새로고침 & 스크롤": "Atualização Automática & Rolagem", "자동 생성 자막 포함": "Include automatic captions", "자동 선택": "Auto seleção", "자동 업데이트": "Atualização Automática", "자동 저장": "Salvar automaticamente", "자막": "Legenda", "자세한 정보": "Detalhes", "자세한 정보 보기": "Exibir detalhes", "작가": "Artistas", "작가 (Artists)": "Artistas", "작가 이름": "Nome do Artista", "작가 추천": "Recomendação de Artista", "작가 합쳐서 불러오기": "Carregar todos os Artistas", "작가가 없습니다": "Nenhum Artista", "작가명 복사 (&A)": "Copiar nomes de Artista (&A)", "작게": "Pequena", "작성자": "Autor", "작업": "Tarefas", "작업 개수": "Número de tarefas", "작업 기록": "Histório de tarefas", "작업 기록 초기화 성공": "Histórico de tarefas limpo com sucesso", "작업 기록이 없습니다": "Sem tarefas no histórico", "작업 당 최대 연결": "Conexões máximas por tarefa", "작업 만들기 실패": "Falha ao criar a tarefa", "작업 목록 폭": "Largura da lista de tarefas", "작업 수정": "Editar tarefa", "작업 수정...": "Editar tarefa...", "작업 완료": "Tarefa conclúida", "작업 완료 후": "Após a conclusão da tarefa", "작업 왼쪽에서 순서 변경": "Reorganizar à esquerda", "작업 용량": "Tamanho de arquivo das tarefas", "작업 정보": "Informações da Tarefa", "작업 정보... (&I)": "Informações... (&I)", "작업 타입?": "Tipo de tarefa?", "작업들 가져오기": "Importar tarefas", "작업들 내보내기": "Exportar tarefas", "작업들을 가져올까요?": "Você deseja importar tarefas?", "작업들을 가져왔습니다": "Tarefas importadas", "작업들을 내보냈습니다": "Tarefas exportadas", "작업이 아직 완료되지 않았습니다": "A tarefa ainda não foi finalizada", "작업이 완료되면 알림 보이기": "Mostrar notificações quando as tarefas forem concluídas", "작품 목록 가져오기": "Importar lista de galerias", "작품 목록 내보내기": "Exportar lista de galerias", "잠금": "Bloquear", "잠금 해제": "Desbloquear", "장": "páginas", "재개": "Resume", "재시작 후 적용됩니다": "Applies after restart", "저사양 모드": "Modo de baixo desempenho", "저장": "Salvar", "저장 && 종료": "Salvar && Sair", "저장 실패": "Falha ao salvar", "저장 완료": "Salvo", "저장 중...": "Salvando...", "저장 폴더": "Baixar pasta", "저장 폴더 변경...": "Alterar pasta de downloads...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "Copiar todas as IDs de galeria da pasta de downloads", "저장 폴더에 있는 모든 작가 불러오기": "Carregar todos os Artistas na pasta de downloads", "저장... (&S)": "&Salvar...", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "Nenhum arquivo de configuração; Pressione [F1] para ler \"Como Usar\"", "적어도 {} 개의 작품이 필요합니다.": "Pelo menos {} gallerias são necessárias.", "점수": "Pontuação", "정규식 문법": "Síntaxe do Regex", "정규식으로 찾기": "Busca por Regex", "정렬 기준": "Ordenar por", "정말 단축키를 초기화하시겠습니까?": "Você tem certeza de que deseja redefinir os atalhos?", "정말 목록에서 제거하시겠습니까?": "Você tem certeza que deseja remover da lista?", "정말 삭제하시겠습니까?": "Você tem certeza que deseja deletar?", "정말 설정을 초기화하시겠습니까?": "Você tem certeza de que deseja redefinir as preferências?", "정말 작업 기록을 초기화하시겠습니까?": "Você tem certeza de que deseja limpar o histórico de tarefas?", "정말 종료하시겠습니까?": "Você tem certeza que deseja sair?", "정말 중지하시겠습니까?": "Você tem certeza de que deseja parar?", "정말 쿠키를 초기화하시겠습니까?": "Você tem certeza que deseja limpar os Cookies?", "정보": "Sobre", "정보...": "Sobre...", "정확도": "Precisão", "제거": "Remover", "제목": "Título", "제목 (Title)": "Título", "제목 복사 (&T)": "Copiar título (&T)", "제외 태그": "Tags para excluir", "제외 태그 목록에 그룹 추가": "Adicionar grupos à lista de tags de exclusão", "제외 태그 목록에 시리즈 추가": "Adicionar série à lista de tags de exclusão", "제외 태그 목록에 작가 추가": "Adicionar artistas à lista de exclusão", "제외 태그 목록에 캐릭터 추가": Adicionar personagens à lista de tags de exclusão", "조각 표시": "Mostrar partes", "종료": "Sair", "종료 중...": "Sair...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "Arraste para a esquerda para diminuir ou para a direita para aumentar em 1\nArraste para cima para aumentar ou para baixo para diminuir em 100", "주소": "Endereço", "주소 or 갤러리 넘버": "URL ou ID de Galeria", "주소를 입력해주세요": "Por favor insira algumas URLs", "중간": "Meio", "중단": "Parar", "중복 이미지 찾기": "Encontrar imagens duplicadas", "중복 이미지 찾는 중": "Procurando imagens duplicadas", "중복 제거": "Eliminar duplicatas", "지원하는 사이트:": "Sites suportados:", "지원하는 토큰": "Supported tokens", "지정한 페이지만 다운로드합니다.": "Baixar apenas págians selecionadas.", "직접 다운로드": "Download Direto", "진행도": "Progresso", "참고 작품: {} 개": "Referenciar: {} galerias", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "Por favor veja: Ajuda - Como Usar (F1) - Carregar Cookies", "창 보이기 / 숨기기": "Exibir / Ocultar Janelas", "창 위치 크기 기억": "Lembrar a posição e o tamanho da janela", "찾기...": "Buscador...", "채널 영상 역순으로 다운로드": "Download channel videos in reverse order", "첫 번째 파일 열기": "Open the first file", "첫 번째 파일 열기 (&O)": "Abrir o primeiro arquivo (&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "Primeira página, 10 ~ 20 páginas, Última página", "체인지로그": "Alterações", "초기화": "Resetar", "최대 다운로드 속도": "Velocidade de download máxima", "최대 동시 작업": "QUantidade máxima de tarefas paralelas", "최대 페이지 제한": "Maximum page limit", "최소화 버튼으로 트레이로 최소화": "Botão de minimizar envia para a bandeja do sistema", "최신 버전:": "Latest:", "추가한 날짜": "Data adicionado", "취소": "Cancelar", "캐릭터": "Personagens", "캐릭터 (Characters)": "Personagens", "캐릭터 이름": "Nome do personagem", "캐릭터가 없습니다": "Nenhum personagem", "캐릭터명 복사 (&C)": "Copiar nomes de personagem (&C)", "코멘트": "Comentar", "코멘트 수정": "Editar comentário", "쿠키": "Cookies", "쿠키 내보내기": "Exportar cookies", "쿠키 내보내기 성공": "Cookies exportados com sucesso", "쿠키 불러오기": "Carregar cookies", "쿠키 불러오기 성공": "Cookies importados com sucesso", "쿠키 초기화 성공": "Cookies limpos com sucesso", "쿠키가 없습니다": "Sem cookies", "쿠키를 업데이트하세요": "Atualize seus cookies", "크게": "Grande", "크기": "Tamanho", "크기 조절": "Redimensionar", "크기 조절...": "Redimensionando...", "크롬 확장프로그램 연동에 실패했습니다.": "Vínculo com a extensão do Chrome falhou.", "클라이언트": "Clilent", "클래식": "Clássico", "클립보드에서 자동 추가": "Adicionar automaticamente da área de transferência", "타입": "Tipos", "타입 (Types)": "Tipos", "태그": "Tags", "태그 \"{}\" 제거": "Remover Tag \"{}\"", "태그 \"{}\" 추가": "Adicionar Tag \"{}\"", "태그 (Tags)": "Tags", "태그 :": "Tag :", "태그 설정": "Configurações de Tag", "태그 수정": "Edit tags", "태그 없음": "Nenhuma tag", "테마": "Tema", "토렌트 고급 옵션 초기화": "Redefinir opções avançadas do torrent", "토렌트 추가": "Adicionar Torrent", "토렌트 파일 연결": "Associar com arquivos Torrent", "토큰": "Tokens", "통계": "Estatísticas", "통과": "Ignorar", "투명도": "Opacidade", "트래커 수정": "Editar trackers", "트래커 추가": "Adicionar trackers", "트레이로 전환되었습니다": "Minimizado para a bandeja do sistema", "트레이로 최소화": "Minimizar para a bandeja do sistema", "트레이로 최소화 알림 보이기": "Mostrar notificações minimizadas na bandeja", "트레이에서 알림 보이기": "Mostrar notificações na bandeja", "파일": "Arquivo", "파일 목록": "Lista de arquivos", "파일 삭제": "Deletar arquivos", "파일 삭제 (&X)": "Deletar arquivos (&X)", "파일 수": "Númeror de arquivos", "파일 스캔 중": "Escaneando arquivos", "파일 유형 제외": "Ignorar tipos de arquivos", "파일 체크 중...": "Verificando arquivos...", "파일 크기": "Tamanho do arquivo", "파일 형식": "Formato", "파일 형식 물어보기": "Perguntar tipo de arquivo", "파일명": "Nome do arquivo", "파일명 형식": "Formatação de nome de arquivo", "파일을 고르세요:": "Selecione os arquivos:", "파일을 선택하세요": "Selecione um arquivo", "파일의 수정한 날짜를 업로드 날짜로 변경": "Altere a data de modificação do arquivo para a data de upload.", "파일이 없습니다": "Nenhum arquivo", "패스워드": "Senha", "퍼지로 찾기": "Busca imprecisa", "페이지 읽는 중...": "Lendo páginas...", "페이지 지정": "Selecionar páginas", "페이지 지정 다운로드": "Selecionar Páginas && Baixar", "페이지 지정 다운로드 기본값": "Valor padrão para \"Selecionar Páginas && Baixar\"", "페이지를 선택해주세요": "Por favor selecione Páginas", "페이지를 읽는 중에 오류가 발생했습니다": "Um erro ocorreu ao tentar ler páginas", "평범하게 찾기": "Busca padrão", "포트": "Porta", "포함 태그": "Tags para incluir", "폭 맞춤": "Ajustar para a largura", "폰트": "Font", "폰트 변경...": "Alterar fonte...", "폰트 선택": "Selecionar fonte", "폰트 초기화": "Resetar fonte", "폴더": "Pasta", "폴더 && 압축파일": "Pasta && Arquivos Compactados", "폴더 바로가기": "Folder shortcuts", "폴더 열기": "Abrir pasta", "폴더 이동": "Mover pasta", "폴더 추가": "Adicionar pasta", "폴더가 없습니다": "No folder", "폴더들": "Diretórios", "폴더들을 선택하세요": "Select folders", "폴더를 선택하세요": "Selecione uma pasta", "폴더를 추가해주세요": "Por favor adicione uma pasta", "폴더명 형식": "Formato de nome da pastat", "표지 검색 실패": "Falha ao encontrar a capa", "표지 검색...": "Buscar capa...", "프로그램 끝내기": "Sair do programa", "프로그램 패스워드": "Senha do programa", "프록시": "Proxy", "플러그인": "Plugins", "플러그인을 추가하시겠습니까?": "Você tem certeza de que deseja adicionar este plugin?", "플레이리스트": "Playlist", "플레이리스트 파일에 번호 매기기": "Enumerar arquivos na playlist", "플레이리스트 한 폴더에 다운로드": "Baixar a playlist para uma pasta", "플로팅 미리보기": "Prévia flutuante", "피드백": "Feedback", "필터": "Filtro", "필터창": "Filtro", "하나 이상의 타입을 선택해주세요.": "Escolha pelo menos um tipo.", "하위폴더 포함": "Incluir subpastas", "학습 중...": "Aprendendo...", "한 줄 당 한 트래커 URL": "Um URL de rastreamento por linha", "항상 위": "Sempre visível", "항상 위 OFF": "Sempre no topo NÃO", "항상 위 ON": "Sempre no topo SIM", "해당 링크로 이동합니다": "Abrir o link...", "해상도": "Resolução", "현재 버전: v{}\n최신 버전: v{}": "Versão Atual: v{}\nùltima Versão: v{}", "현재 작업 없음": "Não há tarefas atuais", "호스트": "Servidor", "화 선택": "Escolha os episódios", "화질": "Qualidade", "확인": "OK", "후원": "Apoiar", "휴지통으로 이동": "Mover para a lixeira" } } ================================================ FILE: translation/tr_ru.hdl ================================================ { "lang": "ru", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "Папок должно быть больше, чем одна, если «Исключить одинаковые источники» включён", "#Cancel#": "Отмена", "#EB#": "{} ЭБ", "#EMPTY#": "Пусто (´・ω・`)", "#GB#": "{} ГБ", "#GIFs#": "GIF / WebP", "#KB#": "{} КБ", "#KB/s#": "{} КБ/сек.", "#MB#": "{} МБ", "#MB/s#": "{} МБ/сек.", "#OK#": "OK", "#PB#": "{} ПБ", "#TB#": "{} ТБ", "#appearance#": "Внешний вид", "#boss_invalid_pw#": "Неверный пароль!", "#boss_pw#": "Пароль:", "#byte#": "{} байт", "#bytes#": "{} байт", "#click#": "Нажмите", "#combo_hour#": "{} ч.", "#combo_hours#": "{} ч.", "#combo_min#": "{} мин.", "#combo_mins#": "{} мин.", "#combo_sec#": "{} сек.", "#combo_secs#": "{} сек.", "#date01#": "{d} янв.", "#date01y#": "{d} янв. {y}", "#date02#": "{d} фев.", "#date02y#": "{d} фев. {y}", "#date03#": "{d} марта", "#date03y#": "{d} марта {y}", "#date04#": "{d} апр.", "#date04y#": "{d} апр. {y}", "#date05#": "{d} мая", "#date05y#": "{d} мая {y}", "#date06#": "{d} июня", "#date06y#": "{d} июня {y}", "#date07#": "{d} июля.", "#date07y#": "{d} июля. {y}", "#date08#": "{d} авг.", "#date08y#": "{d} авг. {y}", "#date09#": "{d} сент.", "#date09y#": "{d} сент. {y}", "#date10#": "{d} окт.", "#date10y#": "{d} окт. {y}", "#date11#": "{d} нояб.", "#date11y#": "{d} нояб. {y}", "#date12#": "{d} дек.", "#date12y#": "{d} дек. {y}", "#developed_by#": "Разработано Kurt Bestor", "#dirformat_artist#": "Какой-то автор", "#dirformat_group#": "Какая-то группа", "#dirformat_lang#": "Английский", "#dirformat_series#": "Какая-то серия", "#dirformat_title#": "Какое-то название", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "Все файлы {}", "#filter_bmk#": "Файлы закладок {}", "#filter_cookie#": "Файлы cookie HTTP-файлов Netscape (*.txt)", "#filter_hdfb#": "Фильтр закладок Hitomi Downloader {}", "#filter_hdk#": "Горячие клавиши Hitomi Downloader {}", "#filter_hdl#": "Лингвист Hitomi Downloader {}", "#filter_hds#": "Скрипты Hitomi Downloader {}", "#filter_hdt#": "Задачи Hitomi Downloader {}", "#filter_image#": "Изображения {}", "#filter_torrent#": "Торренты {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "Требуется браузер; Используйте --safemode", "#invalid_loginRequired#": "Требуется вход; Обновите файлы cookie", "#invalid_loginRequired2#": "Требуется вход; Пожалуйста, войдите", "#invalid_outdatedExtension#": "Расширение устарело; обновите его", "#invalid_unknownSite#": "Неизвестный сайт", "#lang_afrikaans#": "Африканский", "#lang_albanian#": "Албанский", "#lang_amharic#": "Амхарский", "#lang_arabic#": "Арабский", "#lang_arabic_(algeria)#": "Арабский (Алжир)", "#lang_arabic_(bahrain)#": "Арабский (Бахрейн)", "#lang_arabic_(egypt)#": "Арабский (Египет)", "#lang_arabic_(iraq)#": "Арабский (Ирак)", "#lang_arabic_(jordan)#": "Арабский (Иордания)", "#lang_arabic_(kuwait)#": "Арабский (Кувейт)", "#lang_arabic_(lebanon)#": "Арабский (Ливан)", "#lang_arabic_(libya)#": "Арабский (Ливия)", "#lang_arabic_(morocco)#": "Арабский (Марокко)", "#lang_arabic_(oman)#": "Арабский (Оман)", "#lang_arabic_(qatar)#": "Арабский (Катар)", "#lang_arabic_(saudi_arabia)#": "Арабский (Саудовская Аравия)", "#lang_arabic_(sudan)#": "Арабский (Судан)", "#lang_arabic_(syrian_arab_republic)#": "Арабский (Сирийская Арабская Республика)", "#lang_arabic_(tunisia)#": "Арабский (Тунис)", "#lang_arabic_(united_arab_emirates)#": "Арабский (ОАЭ)", "#lang_arabic_(yemen)#": "Арабский (Йемен)", "#lang_armenian#": "Армянский", "#lang_assamese#": "Ассамский", "#lang_azerbaijani#": "Азербайджанский", "#lang_bashkir#": "Башкирский", "#lang_basque#": "Баскский", "#lang_belarusian#": "Белорусский", "#lang_bengali_(bangladesh)#": "Бенгальский (Бангладеш)", "#lang_bengali_(india)#": "Бенгальский (Индия)", "#lang_breton#": "Бретонский", "#lang_bulgarian#": "Болгарский", "#lang_burmese#": "Бирманский", "#lang_catalan#": "Каталонский", "#lang_central_khmer#": "Центральный кхмерский", "#lang_chinese_(china)#": "Китайский (Китай)", "#lang_chinese_(hong_kong)#": "Китайский (Гонконг)", "#lang_chinese_(macao)#": "Китайский (Макао)", "#lang_chinese_(simplified)#": "Китайский (Упрощённый)", "#lang_chinese_(singapore)#": "Китайский (Сингапур)", "#lang_chinese_(taiwan)#": "Китайский (Тайвань)", "#lang_chinese_(traditional)#": "Китайский (Традиционный)", "#lang_corsican#": "Корсиканский", "#lang_croatian_(bosnia_and_herzegovina)#": "Хорватский (Босния и Герцеговина)", "#lang_croatian_(croatia)#": "Хорватский (Хорватия)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Кусканский кечуа (Боливия, Многонациональное Государство)", "#lang_cusco_quechua_(ecuador)#": "Кусканский кечуа (Эквадор)", "#lang_cusco_quechua_(peru)#": "Кусканский кечуа (Перу)", "#lang_czech#": "Чешский", "#lang_danish#": "Датский", "#lang_dari#": "Дари", "#lang_dhivehi#": "Дхивехи", "#lang_dutch_(belgium)#": "Голландский (Бельгия)", "#lang_dutch_(netherlands)#": "Голландский (Нидерланды)", "#lang_english#": "Английский", "#lang_english_(australia)#": "Английский (Австралия)", "#lang_english_(belize)#": "Английский (Белиз)", "#lang_english_(canada)#": "Английский (Канада)", "#lang_english_(india)#": "Английский (Индия)", "#lang_english_(ireland)#": "Английский (Ирландия)", "#lang_english_(jamaica)#": "Английский (Ямайка)", "#lang_english_(malaysia)#": "Английский (Малайзия)", "#lang_english_(malta)#": "Английский (Мальта)", "#lang_english_(new_zealand)#": "Английский (Новая Зеландия)", "#lang_english_(philippines)#": "Английский (Филиппины)", "#lang_english_(singapore)#": "Английский (Сингапур)", "#lang_english_(south_africa)#": "Английский (ЮАР)", "#lang_english_(trinidad_and_tobago)#": "Английский (Тринидад и Тобаго)", "#lang_english_(united_kingdom)#": "Английский (Великобритания)", "#lang_english_(united_states)#": "Английский (США)", "#lang_english_(zimbabwe)#": "Английский (Зимбабве)", "#lang_estonian#": "Эстонский", "#lang_faroese#": "Фарерский", "#lang_filipino#": "Филиппинский", "#lang_finnish#": "Финский", "#lang_french#": "Французский", "#lang_french_(belgium)#": "Французский (Бельгия)", "#lang_french_(canada)#": "Французский (Канада)", "#lang_french_(france)#": "Французский (Франция)", "#lang_french_(luxembourg)#": "Французский (Люксембург)", "#lang_french_(monaco)#": "Французский (Монако)", "#lang_french_(switzerland)#": "Французский (Швейцария)", "#lang_galician#": "Галисийский", "#lang_georgian#": "Грузинский", "#lang_german_(austria)#": "Немецкий (Австрия)", "#lang_german_(germany)#": "Немецкий (Германия)", "#lang_german_(liechtenstein)#": "Немецкий (Лихтенштейн)", "#lang_german_(luxembourg)#": "Немецкий (Люксембург)", "#lang_german_(switzerland)#": "Немецкий (Швейцария)", "#lang_gujarati#": "Гуджарати", "#lang_hebrew#": "Иврит", "#lang_hindi#": "Хинди", "#lang_hungarian#": "Венгерский", "#lang_icelandic#": "Исландский", "#lang_igbo#": "Игбо", "#lang_inari_sami#": "Инари Сами", "#lang_indonesian#": "Индонезийский", "#lang_irish#": "Ирландский", "#lang_italian_(italy)#": "Итальянский (Италия)", "#lang_italian_(switzerland)#": "Итальянский (Швейцария)", "#lang_japanese#": "Японский", "#lang_kalaallisut#": "Калааллисут", "#lang_kannada#": "Каннада", "#lang_kazakh#": "Казахский", "#lang_kinyarwanda#": "Киньярванда", "#lang_kirghiz#": "Киргизский", "#lang_korean#": "Корейский", "#lang_lao#": "Лао", "#lang_latvian#": "Латвийский", "#lang_lithuanian#": "Литовский", "#lang_lower_sorbian#": "Нижнелужицкий", "#lang_lule_sami_(norway)#": "Луле Сами (Норвегия)", "#lang_lule_sami_(sweden)#": "Луле Сами (Швеция)", "#lang_luxembourgish#": "Люксембургский", "#lang_macedonian#": "Македонский", "#lang_malayalam#": "Малаялам", "#lang_maltese#": "Мальтийский", "#lang_maori#": "Маори", "#lang_mapudungun#": "Мапудунгун", "#lang_marathi#": "Маратхи", "#lang_modern_greek#": "Новогреческий", "#lang_mohawk#": "Мохаук", "#lang_mongolian#": "Монгольский", "#lang_nepali#": "Непальский", "#lang_northern_sami_(finland)#": "Северносаамский (Финляндия)", "#lang_northern_sami_(norway)#": "Северносаамский (Норвегия)", "#lang_northern_sami_(sweden)#": "Северносаамский (Швеция)", "#lang_norwegian#": "Норвежский", "#lang_norwegian_bokmål#": "Норвежский Букмол", "#lang_norwegian_nynorsk#": "Новонорвежский", "#lang_odia#": "Одия", "#lang_panjabi#": "Панджаби", "#lang_pedi#": "Педи", "#lang_persian#": "Персидский", "#lang_polish#": "Польский", "#lang_portuguese#": "Португальский", "#lang_portuguese_(brazil)#": "Португальский (Бразилия)", "#lang_portuguese_(portugal)#": "Португальский (Португалия)", "#lang_pushto#": "Пушту", "#lang_romanian_(macao)#": "Румынский (Макао)", "#lang_romanian_(romania)#": "Румынский (Румыния)", "#lang_romansh#": "Румынский", "#lang_russian#": "Русский", "#lang_russian_(macao)#": "Русский (Макао)", "#lang_russian_(russian_federation)#": "Русский (Российская Федерация)", "#lang_sanskrit#": "Санскрит", "#lang_scottish_gaelic_(ireland)#": "Шотландский гэльский (Ирландия)", "#lang_scottish_gaelic_(united_kingdom)#": "Шотландский гэльский (Великобритания)", "#lang_serbian_(bosnia_and_herzegovina)#": "Сербский (Босния и Герцеговина)", "#lang_serbian_(cyrillic)#": "Сербский (кириллица)", "#lang_serbian_(latin)#": "Сербский (латиница)", "#lang_serbian_(montenegro)#": "Сербский (Черногория)", "#lang_serbian_(serbia)#": "Сербский (Сербия)", "#lang_sichuan_yi#": "Сычуаньский И", "#lang_sinhala#": "Сингальский", "#lang_skolt_sami#": "Скольт Сами", "#lang_slovak#": "Словацкий", "#lang_slovenian#": "Словенский", "#lang_southern_sami_(norway)#": "Южносаамский (Норвегия)", "#lang_southern_sami_(sweden)#": "Южносаамский (Швеция)", "#lang_spanish#": "Испанский", "#lang_spanish_(argentina)#": "Испанский (Аргентина)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Испанский (Боливия, Многонациональное Государство)", "#lang_spanish_(chile)#": "Испанский (Чили)", "#lang_spanish_(colombia)#": "Испанский (Колумбия)", "#lang_spanish_(costa_rica)#": "Испанский (Коста-Рика)", "#lang_spanish_(dominican_republic)#": "Испанский (Доминиканская Республика)", "#lang_spanish_(ecuador)#": "Испанский (Эквадор)", "#lang_spanish_(el_salvador)#": "Испанский (Сальвадор)", "#lang_spanish_(guatemala)#": "Испанский (Гватемала)", "#lang_spanish_(honduras)#": "Испанский (Гондурас)", "#lang_spanish_(mexico)#": "Испанский (Мексика)", "#lang_spanish_(nicaragua)#": "Испанский (Никарагуа)", "#lang_spanish_(panama)#": "Испанский (Панама)", "#lang_spanish_(paraguay)#": "Испанский (Парагвай)", "#lang_spanish_(peru)#": "Испанский (Перу)", "#lang_spanish_(puerto_rico)#": "Испанский (Пуэрто-Рико)", "#lang_spanish_(spain)#": "Испанский (Испания)", "#lang_spanish_(united_states)#": "Испанский (США)", "#lang_spanish_(uruguay)#": "Испанский (Уругвай)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Испанский (Венесуэла, Боливарианская Республика)", "#lang_swahili#": "Суахили", "#lang_swedish_(finland)#": "Шведский (Финляндия)", "#lang_swedish_(sweden)#": "Шведский (Швеция)", "#lang_swiss_german#": "Швейцарско-немецкий", "#lang_syriac#": "Сирийский", "#lang_tamil#": "Тамильский", "#lang_tatar#": "Татарский", "#lang_telugu#": "Телугу", "#lang_thai#": "Тайский", "#lang_tibetan#": "Тибетский", "#lang_tswana#": "Тсвана", "#lang_turkish#": "Турецкий", "#lang_turkmen#": "Туркменский", "#lang_uighur#": "Уйгурский", "#lang_ukrainian#": "Украинский", "#lang_upper_sorbian#": "Верхнелужицкий", "#lang_urdu#": "Урду", "#lang_uzbek#": "Узбекский", "#lang_vietnamese#": "Вьетнамский", "#lang_welsh#": "Валлийский", "#lang_western_frisian#": "Западнофризский", "#lang_wolof#": "Волоф", "#lang_xhosa#": "Коса", "#lang_yakut#": "Якутский", "#lang_yoruba#": "Йоруба", "#lang_zulu#": "Зулусский", "#loading_lib#": "Загрузка: {}", "#new_group#": "Новая группа", "#new_item#": "Новый элемент", "#p#": "{} пикс.", "#recomm_all_langs#": "Все языки", "#recomm_artist#": "Автор", "#recomm_main#": "Она анализирует галереи в папке скачиваний и рекомендует авторов.\n\nТочность, показанная в результатах, находится в пределах заданных галерей.\nЧем больше у вас галерей, тем лучше (рекомендуется 100+).\n\nСейчас у вас {item} галерей:", "#recomm_score#": "Оценка", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "МБ/сек.", "#setting_autosaveL#": "Каждые", "#setting_autosaveR#": "", "#setting_incompleteL#": "После", "#setting_incompleteR#": "", "#t_etc#": "Другое", "#t_file#": "Файл", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Торрент", "#t_twitch#": "Twitch", "#t_twitter#": "Твиттер", "#t_youtube#": "YouTube", "#tag_blue#": "Синий", "#tag_gray#": "Серый", "#tag_green#": "Зелёный", "#tag_orange#": "Оранжевый", "#tag_purple#": "Фиолетовый", "#tag_red#": "Красный", "#tag_yellow#": "Жёлтый", "#task_artist#": "Автор", "#task_date#": "Дата", "#task_done#": "Готово", "#task_folder#": "Папка", "#task_incomplete#": "Не завершено", "#task_input#": "Ввод", "#task_invalid#": "Ошибка", "#task_multiple#": "Множество", "#task_range#": "Диапазон", "#task_single#": "Одно", "#task_site#": "Сайт", "#task_status#": "Состояние", "#task_title#": "Название", "#task_type#": "Тип", "#task_url#": "Ссылка", "#task_zipfile#": "Zip-файл", "#torrent_anon#": "Для трекеров (за исключением частных торрентов) будет использоваться общий агент пользователя.
Ваши локальные IPv4 и IPv6-адреса не будут передаваться в качестве параметров строки запроса частным трекерам.
Если настроен announce_ip, то он не будет отправляться на трекеры.
Клиентская версия не будет передаваться аналогам в процессе рукопожатия расширения.
Узел DHT будет отключён.", "#translation#": "Перевод", "50개씩 끊어서 검색": "Поиск по частям по 50 за каждую", "DPI 우회": "Обход DPI", "DPI 우회 제외 도메인": "Домены, исключаемые из обхода DPI", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "«Обход DPI» отключён. Он может не работать на некоторых сайтах.", "E(x)Hentai 로그인 쿠키 필요": "Требуются файлы cookie входа E(x)Hentai", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "Ваш IP-адрес временно заблокирован. Пожалуйста, повторите попытку через некоторое время", "PDF 생성": "Создать PDF", "UI 스케일 ({}%)": "Размер меню ({}%)", "URL을 입력하세요": "Пожалуйста, введите URL-адрес", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "Нажмите [Скачать] для загрузки. Нажмите [OK] для выхода.", "reCAPTCHA 풀기": "Решить задачу reCAPTCHA", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Перезагрузка через {day} д. {hour} ч. {min} мин. {sec} сек.: {id}", "{hour}시간 {min}분 {sec}초": "{hour} ч. {min} мин. {sec} сек.", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Перезагрузка через {hour} ч. {min} мин. {sec} сек.: {id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "Перезагрузка через {min} мин. {sec} сек.: {id}", "{sec}초 뒤 다시 시작: {id}": "Перезагрузка через {sec} сек.: {id}", "{} 개 선택": "{} элем. выбрано", "{} 개 찾음": "{} найдено", "{} 개의 작업들이 있습니다": "Имеется {} задач", "{} 개의 진행 중인 작업이 있습니다.": "Выполняются {} задач.", "{} 를 제외 태그에 추가했습니다": "В список меток исключения добавлено: {}", "{} 설정": "Параметры: {}", "{} 시간 뒤 다시 시작": "Перезагрузка через {} ч.", "{} 시간 전 데이터": "Данные; {} ч. назад", "{} 일 뒤 다시 시작": "Перезагрузка через {} дн.", "{} 일 전 데이터": "Данные; {} дн. назад", "{}개 작업의 첫 번째 파일을 엽니다.": "Открыть первые файлы для каждой из {} задач.", "{}개의 불완전한 작업을 다시 시작합니다.": "Перезапустить {} незавершённых задач.", "{}개의 완료된 작업을 목록에서 제거합니다.": "Удалить из списка {} завершённых задач.", "{}개의 완료된 작업을 제거합니다.": "Удалить {} завершённых задач.", "{}개의 작업을 다시 시작합니다.": "Перезапустить {} задач.", "『 {} 』는 이미 북마크되어 있습니다": "『 {} 』 уже в закладках", "『 {} 』를 복사했습니다": "『 {} 』 скопировано", "『 {} 』를 북마크로부터 불러왔습니다": "『 {} 』 загружена из закладок", "『 {} 』를 북마크에서 불러왔습니다": "『 {} 』 загружена из закладок", "『 {} 』를 북마크했습니다": "『 {} 』 в закладках", "『 {} 』를 저장 폴더에서 불러왔습니다": "『 {} 』 загружена из папки загрузок", "가능하면 일본어 제목 사용": "Использовать японское название, если доступно", "가능한 경우 챕터 마커 추가": "Добавить маркеры глав, если они есть", "가져오기": "Импорт", "가져오기 실패": "Не удалось импортировать", "간단 검색": "Простой поиск", "같은 소스 제외": "Исключить одинаковые источники", "개": "элем.", "개별 다운로드는 지원하지 않습니다": "Загрузка одного сообщения не поддерживается", "갤러리 넘버": "ИД галереи", "갤러리 넘버 복사": "Копировать ИД галереи", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "При копировании идентификаторов галерей возникла ошибка.", "갤러리 작업 정보... (&I)": "Информация о галерее... (&I)", "갤러리 정보": "Информация о галерее", "갤러리 정보 파일 (info.txt) 생성": "Создать информационный файл галереи (info.txt)", "갯수": "Кол-во", "갱신 간격": "Интервал обновления", "거꾸로": "Обратный", "검색": "Поиск", "검색 데이터": "Данные поиска", "검색 도중에 사용할 수 없는 기능입니다.": "Во время поиска эта функция заблокирована.", "검색 범위": "Диапазон поиска", "검색 순서": "Порядок поиска", "검색 필터": "Фильтр поиска", "검색기": "Поисковик", "검색어": "Ключевые слова поиска", "검색어 자동 완성": "Ключевые слова автозаполнения", "결과": "Результат", "결과 저장": "Сохранить результат", "경고 없이 삭제": "Удалить без предупреждения", "경로를 선택하세요": "Выбрать путь", "계속 검색": "Поиск далее", "계정": "Имя пользователя", "계정 / 패스워드": "Имя пользователя / Пароль", "고급": "Расширенные", "고급 검색": "Расширенный поиск", "고급 옵션": "Расширенные настройки", "고정": "Прикрепить", "고정 해제": "Открепить", "공식 스크립트 && 플러그인": "Официальные скрипты и плагины", "공인 IP: {}": "Публичный IP-адрес: {}", "관리자 권한 없이 실행": "Запуск без прав администратора", "관리자 권한 필요": "Требуются права администратора", "광고 스킵": "Пропустить рекламу", "그대로": "Обычная", "그룹": "Группы", "그룹 (Groups)": "Группы", "그룹 안의 모든 작업 다시 시작": "Перезапустить все задачи в этой группе", "그룹 이름": "Название группы", "그룹 펼치기 / 접기": "Развернуть / Свернуть группы", "그룹 합쳐서 불러오기": "Загрузить все группы вместе", "그룹명 복사 (&G)": "Копировать названия групп (&G)", "그룹으로 이동": "Переместить в группу", "그룹을 포함하는 그룹은 만들 수 없습니다.": "Группы не могут содержать группы.", "그룹이 없습니다": "Нет групп", "기본": "По умолчанию", "기본 데이터": "Данные по умолчанию", "기본 데이터 다운로드": "Скачать данные по умолчанию", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "Создать группу можно только в режиме сортировки по умолчанию.", "기본값": "Стандартное значение", "기타": "Другое...", "깊은 모델": "Модель глубины", "끝내기": "Выход", "날짜": "Дата", "낮음": "Низк.", "내보내기": "Экспорт", "내보내기 실패": "Не удалось экспортировать", "내용 보기": "Просмотр скрипта", "내장 웹브라우저": "Встроенный веб-браузер", "내장 이미지 뷰어": "Встроенный просмотрщик изображений", "네트워크": "Сеть", "녹화": "Запись", "녹화 중...": "Запись...", "녹화 중지": "Остановка записи", "높음": "Высок.", "다른 동영상 사이트에도 적용됩니다.": "Применимо и к другим видеосайтам.", "다시 시작 (&S)": "Перезагрузка (&S)", "다시 시작 실패; 복구됨": "Не удалось повторить; Отменено", "다운로드": "Скачать", "다운로드 & 제거": "Скачать и удалить", "다운로드 && 제거": "Скачать и удалить", "다운로드 (&D)": "Скачать (&D)", "다운로드 날짜 표시": "Отображение даты загрузки", "다운로드 속도": "Скорость скачивания", "다운로드 완료": "Скачивание завершено", "다운로드 완료 후 자동 제거": "Автоматическое удаление после скачивания", "다운로드 일시 정지 / 재개": "Пауза / Возобновление скачивания", "다운로드 중": "Скачивание", "다운로드가 완료되면 알림": "Отображение уведомлений о завершении скачивания", "다운로드가 완료될 때까지 절전모드 방지": "Предотвращение перехода системы в спящий режим до завершения скачивания", "다운로드하기 전에 파일 고르기": "Выбор файлов перед скачиванием", "다운로드하지 않음": "Не скачивать", "다운로드한 작품만": "Только скачанные галереи", "다음 검색시 더 빠르게 검색": "Повышение скорости в следующий раз", "다음 작업들이 목록에서 제거됩니다:": "Следующие задачи будут удалены из списка:", "다음 파일들이 삭제됩니다:": "Следующие файлы будут удалены:", "다크 모드": "Тёмный режим", "단일 파일": "Один файл", "단축키": "Горячие клавиши", "단축키 내보내기": "Экспорт горячих клавиш", "단축키 내보내기 성공": "Экспорт горячих клавиш выполнен успешно", "단축키 불러오기": "Импорт горячих клавиш", "단축키 불러오기 성공": "Импорт горячих клавиш выполнен успешно", "단축키 수정": "Изменение горячих клавиш", "단축키 초기화 성공": "Горячие клавиши успешно сброшены", "닫기 버튼으로 트레이로 최소화": "Свернуть в трей с помощью кнопки закрытия", "대기 중": "Ожидание", "대기 중...": "Ожидание...", "데이터 다운로더": "Загрузчик данных", "데이터 분류 중...": "Классифицирование данных...", "데이터 분석 중...": "Анализ данных...", "데이터 없음": "Нет данных", "데이터 읽는 중...": "Считывание данных...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "Нет данных.\nПожалуйста, загрузите данные из меню.", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "Нет данных.\nПожалуйста, загрузите данные из поисковика", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "Ваши данные устарели более чем на неделю.\nПожалуйста, обновите данные.", "데이터를 다운로드하는 도중에 실패했습니다.": "Не удалось скачать данные", "데이터를 모두 받았습니다!": "Все данные скачаны!", "도구": "Инструменты", "도구창": "Окно инструментов", "도움말": "Справка", "동영상": "Видео", "동영상 변환...": "Преобразование видео...", "뒤 100 페이지": "Последние 100 стр.", "드래그 & 드랍해서 바꾸세요:": "Для изменения перетащите сюда:", "디더링": "Дифер", "디버그": "Отладка", "디스코드": "Discord", "라이선스": "Лицензия", "랜덤으로 하나 선택": "Случайный выбор одного", "로그...": "Журнал...", "로그인": "Вход", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "Не удалось войти: {}{}\nПожалуйста, см. [Настройки - Параметры - Параметры: Pixiv - Вход].", "로그인 중...": "Вход...", "로그인 테스트": "Проверочный вход", "로드 중: {}": "Загрузка: {}", "로컬 파일 감지": "Обнаружение локальных файлов", "로컬 파일로부터 새 작업 만들기": "Создание новой задачи из локальных файлов", "를 북마크에서 지웠습니다": "удалена из закладок", "리트윗 제외": "Исключить ретвиты", "리트윗 포함": "Включить ретвиты", "릴리즈 노트": "Описание выпуска", "링크 열기": "Открыть ссылку", "링크 주소 복사": "Скопировать ссылку", "링크 주소 복사 (&C)": "Скопировать ссылку (&C)", "마무리 중...": "Завершение...", "멈춤": "Остановлено", "메뉴": "Меню", "메모리 사용량": "Использ. памяти", "메모리 사용량 표시": "Отображение использования памяти", "메시지 상자": "Окно сообщения", "모델": "Модель", "모델 생성 중...": "Создание модели...", "모델: {}": "Модель: {}", "모두": "Все", "모두 삭제": "Удалить все", "모두 선택": "Выбрать все", "모든 갤러리 넘버를 복사했습니다.": "Скопированы все идентификаторы галереи.", "모든 언어": "Все языки", "모든 작업 완료": "Все задачи выполнены", "모든 작업 완료 후": "Когда все задачи выполнены", "모든 작업이 완료되면 알림 보이기": "Отображение уведомления о завершении всех задач", "목록": "Список", "목록 주소를 입력해주세요": "Пожалуйста, введите URL-адрес списка", "목록 지우기": "Очистить список", "목록에서 제거": "Удалить из списка", "목록에서 폴더 제거": "Удалить папку из списка", "목록을 모두 지울까요?": "Вы уверены, что хотите очистить список?", "미리보기": "Предпросмотр", "미리보기 크기": "Размер предпросмотра", "배경 이미지": "Фоновое изображение", "배경 이미지 변경": "Изменение фонового изображения", "배경 이미지 초기화": "Сброс фонового изображения", "버전 확인": "Проверка обновлений", "번역": "Перевод", "베타 버전 설치": "Установка бета-версий", "변경할 최대 크기": "Максимальный размер", "변경할 최소 크기": "Минимальный размер", "변환 중...": "Преобразование...", "보기": "Вид", "보통": "Обычн.", "부팅 시 실행": "Запуск при загрузке системы", "북마크": "Закладки", "북마크 가져오기": "Импорт закладок", "북마크 가져오기 실패": "Не удалось импортировать закладки", "북마크 내보내기": "Экспорт закладок", "북마크 내보내기 실패": "Не удалось экспортировать закладки", "북마크를 가져왔습니다": "Закладки импортированы", "북마크를 내보냈습니다": "Закладки экспортированы", "북마크를 모두 삭제합니다.": "Удалить все закладки.", "북마크를 모두 삭제했습니다.": "Удалены все закладки.", "불러오기": "Загрузка", "불완전한 작업 모두 다시 시작": "Перезапуск всех незавершённых задач", "불완전한 작업 자동으로 다시 시작": "Автоматический перезапуск незавершённых задач", "붙여넣고 다운로드": "Вставить и скачать", "뷰어... (&V)": "Средство просмотра... (&V)", "브라우저로 보기": "Открыть в браузере", "브라우저로 보기 (&B)": "Открыть в браузере (&B)", "비디오 코덱 우선순위": "Приоритет видеокодека", "비슷한 이미지 포함 (느림)": "Вкл. похожие изобр. (медленно)", "비율 유지": "Соотношение сторон", "비율 유지 - 꽉 차게": "Соотношение сторон - заполнение", "비정상적인 로그인 시도": "Нестандартная попытка входа", "빠른 시작을 위한 작업 레이지 로딩": "Ленивая загрузка задач для быстрого запуска", "빠른 실행 도구 모음 사용자 지정": "Настройка панели инструментов быстрого доступа", "뽑기": "Случайно", "뽑을 갯수": "Число галерей", "사용법": "Как пользоваться", "사용법...": "Как пользоваться...", "사용자 지정 테마 색": "Свой цвет темы", "사이드바": "Боковая панель", "사이트": "Сайт", "사이트 추가": "Поддержка сайта", "사이트를 추가했습니다": "Добавленные поддержки сайта", "삭제된 데이터": "Удалённые данные", "삭제된 데이터 다운로드": "Скачать удалённые данные", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "Нет удалённых данных.\nПожалуйста, загрузите данные из меню.", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "Не удалось скачать удалённые данные", "삭제된 데이터를 모두 받았습니다!": "Скачивание завершено: Удалённые данные", "삭제시 휴지통으로 보냄": "Использовать корзину", "상태": "Состояние", "새 그룹 만들기": "Создать новую группу", "새 버전이 있습니다. 업데이트 하실래요?": "Появилась новая версия. Не хотите ли вы обновиться?", "새로고침": "Обновить", "샘플": "Образец", "서명": "Сертификат", "서버": "Сервер", "선택 화 다운로드": "Выбор глав и скачивание", "선택된 작업들 내보내기": "Экспорт выбранных задач", "선택된 작업이 없습니다": "Нет выбранных задач", "선택하세요:": "Выбрать:", "선택한 항목 중에서 자동 선택": "Автовыбор в пределах выбранных элементов", "선호 언어": "Предпочитаемый язык", "설명": "Комментарий", "설정": "Параметры", "설정 (Preferences)": "Параметры", "설정을 따름": "Соблюдать параметры", "성공: {}\n실패: {}": "Выполнено: {}\nНе удалось: {}", "소리": "Звук", "수동": "Руководство", "수동 업데이트": "Руководство", "수정...": "Редактировать...", "순서 변경": "Переупорядочить", "숨김 키": "Скрытый ключ", "숫자": "Номер", "스레드": "Потоки", "스레드 생성 중...": "Запуск потоков...", "스크롤 속도 ({}x)": "Скорость прокрутки ({}x)", "스크립트": "Скрипт", "스크립트 가져오기": "Импорт скрипта", "스크립트 작성법": "Как написать скрипт", "스크립트를 실행하시겠습니까?": "Вы уверены, что хотите выполнить этот скрипт?", "스크립트를 읽는 중 오류가 발생했습니다": "Возникла ошибка при чтении скрипта", "스토리 읽는 중...": "Чтение историй...", "스토리 포함": "Включить истории", "시딩": "Зерно", "시딩 중지": "Остановить зерно", "시딩 하지 않음": "Нет зерна", "시리즈": "Серия", "시리즈 (Series)": "Серия", "시리즈가 없습니다": "Нет серии", "시리즈명 복사 (&S)": "Скопировать название серий (&S)", "시스템": "Система", "시스템 설정 사용": "Использовать системные параметры", "시스템 종료": "Отключение системы", "시스템 트레이": "Системная панель", "시작 후 다운로드": "Скачано за сессию", "시작 후 지난 시간": "Время сессии", "실패": "Сбой", "실험 기능": "Экспериментальный", "썸네일": "Миниатюра", "썸네일 고정": "Исправить миниатюру", "썸네일 다운로드": "Скачать миниатюры", "썸네일 숨기기": "Скрыть миниатюру", "썸네일 크기": "Размер миниатюры", "썸네일을 선택하세요": "Выбор миниатюры", "아니오(&N)": "Нет(&N)", "아무것도 안 함": "Ничего не делать", "아이콘": "Значок", "압축": "Сжатие", "압축 형식": "Формат", "압축파일 연결 프로그램": "Открыть сжатые файлы с помощью", "앞 100 페이지": "Первые 100 стр.", "얕은 모델": "Поверхностная модель", "언어": "Язык", "언어 (Language)": "Язык", "언어 (Languages)": "Языки", "업데이트": "Обновление", "업데이트 중...": "Обновление...", "업데이트 체크 중...": "Проверка наличия обновлений...", "업로드": "Загрузить", "연결 프로그램 변경": "Выберите программу для открытия", "열기": "Открыть", "예(&Y)": "Да(&Y)", "예상치 못한 오류로 다운로드에 실패했습니다.": "Не удалось скачать из-за непредвиденной ошибки.", "예시": "Пример", "오디오 코덱 우선순위": "Приоритет аудиокодека", "오디오 트랙": "Аудиодорожка", "오류": "Ошибка", "올바르지 않은 범위입니다": "Недопустимый диапазон", "올바르지 않은 주소입니다": "Недопустимый URL-адрес", "올바르지 않은 형식의 검색 필터입니다": "Недопустимая синтаксическая ошибка в фильтре", "올바르지 않은 형식의 스크립트입니다": "Недопустимый формат скрипта", "옵션": "Настройки", "옵션 (JSON 포맷)": "Настройки (формат JSON)", "옵션 (Options)": "Настройки", "완료": "Завершено", "완료된 작업 모두 제거": "Удалить все завершённые задачи", "완료됨으로 표시": "Отметить как завершённую", "완전 삭제": "Удалить навсегда", "우선순위": "Приоритет", "우선순위 변경": "Изменить приоритет", "움짤": "GIF", "움짤 변환...": "Преобразование GIF...", "원본": "Исходное", "원본 이미지 다운로드": "Скачать исходные изображения", "원본 크기보다 크게 바뀌지는 않습니다": "Размер не будет превышать исходный", "원본 파일 삭제": "Удаление скачанных файлов", "원하는 인공신경망 모델을 고르세요:": "Выберите нужную модель искусственной нейронной сети:", "웹브라우저": "Веб-браузер", "웹툰 제외": "Исключить Webtoon", "유사도": "Сходство", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "Неверный аккаунт / пароль", "유효한 계정입니다": "Действительный аккаунт", "음소거": "Заглушить", "음악 파일에 앨범아트 삽입": "Добавление обложки альбома к аудиофайлам", "음원": "Аудио", "음질": "Качество звучания", "이동": "Переместить", "이동할 수 없습니다: {}": "Невозможно переместить: {}", "이름": "Имя", "이름 변경": "Переименовать", "이름을 얻는 도중 실패했습니다": "Не удалось прочитать имя", "이미 다운로드한 작품 제외": "Исключение уже скачанных галерей", "이미 모든 그룹이 추가되어 있습니다": "Все группы уже добавлены", "이미 모든 시리즈가 추가되어 있습니다": "Все серии уже добавлены", "이미 모든 작가가 추가되어 있습니다": "Все авторы уже добавлены", "이미 모든 캐릭터가 추가되어 있습니다": "Все персонажи уже добавлены", "이미 추가한 작업 다시 시작할지 물어봄": "Попросить повторно выполнить задания, уже находящиеся в списке", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "Эта задача уже есть в списке. Вы хотите скачать её снова?", "이미 추가한 플러그인입니다": "Этот плагин уже есть в списке", "이미 포함하는 그룹이 있습니다.": "Уже есть группа, в которую входят задачи.", "이미지": "Изображение", "이미지 정보 캐시": "Кэшировать информацию изображения", "이미지 포맷 변환": "Изменение формата изображения", "이미지를 읽는 중 실패": "Не удалось прочитать изображения", "익명 모드": "Анонимный режим", "인코딩": "Шифрование", "일반": "Общее", "일시 정지": "Пауза", "읽기 중지": "Остановить чтение", "읽는 중...": "Чтение...", "자동": "Авто", "자동 녹화": "Автозапись", "자동 새로고침 & 스크롤": "Автообновление и прокрутка", "자동 생성 자막 포함": "Включить автоматические подписи", "자동 선택": "Автовыбор", "자동 업데이트": "Автоматически", "자동 저장": "Автосохранение", "자막": "Субтитры", "자세한 정보": "Подробности", "자세한 정보 보기": "Отображение подробностей", "작가": "Авторы", "작가 (Artists)": "Авторы", "작가 이름": "Имя автора", "작가 추천": "Рекомендуемые авторы", "작가 합쳐서 불러오기": "Загрузить всех авторов вместе", "작가가 없습니다": "Нет авторов", "작가명 복사 (&A)": "Скопировать имена авторов (&A)", "작게": "Малый", "작성자": "Автор", "작업": "Задачи", "작업 개수": "Число задач", "작업 기록": "История задач", "작업 기록 초기화 성공": "История задач успешно очищена", "작업 기록이 없습니다": "Нет истории задач", "작업 당 최대 연결": "Макс. кол-во соединений в одной задаче", "작업 만들기 실패": "Не удалось создать задачи", "작업 목록 폭": "Ширина списка задач", "작업 수정": "Редактирование задачи", "작업 수정...": "Редактирование задачи...", "작업 완료": "Задача выполнена", "작업 완료 후": "После выполнения задачи", "작업 왼쪽에서 순서 변경": "Упорядочивание в левой части", "작업 용량": "Размер файлов задач", "작업 정보": "О задаче", "작업 정보... (&I)": "Информация... (&I)", "작업 타입?": "Тип задачи?", "작업들 가져오기": "Импорт задач", "작업들 내보내기": "Экспорт задач", "작업들을 가져올까요?": "Хотите ли вы импортировать задачи?", "작업들을 가져왔습니다": "Импортированные задачи", "작업들을 내보냈습니다": "Экспортированные задачи", "작업이 아직 완료되지 않았습니다": "Задача ещё не завершена", "작업이 완료되면 알림 보이기": "Отображение уведомлений о завершении задач", "작품 목록 가져오기": "Импорт списка галерей", "작품 목록 내보내기": "Экспорт списка галерей", "잠금": "Заблокировать", "잠금 해제": "Снять блокировку", "장": "стр.", "재개": "Возобновить", "재시작 후 적용됩니다": "Действует после перезапуска", "저사양 모드": "Режим низкой производительности", "저장": "Сохранить", "저장 && 종료": "Сохранить и выйти", "저장 실패": "Не удалось сохранить", "저장 완료": "Сохранено", "저장 중...": "Сохранение...", "저장 폴더": "Папка скачивания", "저장 폴더 변경...": "Изменить папку скачивания...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "Скопировать все идентификаторы галерей в папку скачивания", "저장 폴더에 있는 모든 작가 불러오기": "Загрузить всех авторов в папку скачивания", "저장... (&S)": "Сохранить... (&S)", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "Нет файла конфигурации; нажмите [F1], чтобы прочитать «Как пользоваться»", "적어도 {} 개의 작품이 필요합니다.": "Требуется не менее {} галерей.", "점수": "Оценка", "정규식 문법": "Синтаксис регулярн. выраж.", "정규식으로 찾기": "Поиск по регулярн. выраж.", "정렬 기준": "Сортировать по", "정말 단축키를 초기화하시겠습니까?": "Вы уверены, что хотите сбросить горячие клавиши?", "정말 목록에서 제거하시겠습니까?": "Вы уверены, что хотите удалить из списка?", "정말 삭제하시겠습니까?": "Вы уверены, что хотите удалить?", "정말 설정을 초기화하시겠습니까?": "Вы уверены, что хотите сбросить настройки?", "정말 작업 기록을 초기화하시겠습니까?": "Вы уверены, что хотите очистить историю задач?", "정말 종료하시겠습니까?": "Вы уверены, что хотите выйти?", "정말 중지하시겠습니까?": "Вы уверены, что хотите остановить?", "정말 쿠키를 초기화하시겠습니까?": "Вы уверены, что хотите очистить файлы cookie?", "정보": "О программе", "정보...": "О программе...", "정확도": "Точность", "제거": "Удалить", "제목": "Название", "제목 (Title)": "Название", "제목 복사 (&T)": "Скопировать название (&T)", "제외 태그": "Метки для исключения", "제외 태그 목록에 그룹 추가": "Добавить группы в список исключаемых меток", "제외 태그 목록에 시리즈 추가": "Добавить серии в список исключаемых меток", "제외 태그 목록에 작가 추가": "Добавить авторов в список исключаемых меток", "제외 태그 목록에 캐릭터 추가": "Добавить персонажей в список исключаемых меток", "조각 표시": "Отображение фрагментов", "종료": "Выход", "종료 중...": "Выход...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "Перетаскивание по горизонтали: ±1\nПеретаскивание по вертикали: ±100", "주소": "Адрес", "주소 or 갤러리 넘버": "URL-адрес или идентификатор галереи", "주소를 입력해주세요": "Пожалуйста, введите URL-адрес", "중간": "Среднее", "중단": "Прервать", "중복 이미지 찾기": "Поисковик идент. изобр.", "중복 이미지 찾는 중": "Поиск идентичных изображений", "중복 제거": "Удаление копий", "지원하는 사이트:": "Поддерживаемые сайты:", "지원하는 토큰": "Поддерживаемые токены", "지정한 페이지만 다운로드합니다.": "Скачать только выбранные страницы.", "직접 다운로드": "Прямое скачивание", "진행도": "Выполнение", "참고 작품: {} 개": "Ссылка: {} галерей", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "Пожалуйста, посмотрите: Справка - Как пользоваться (F1) - Загрузить файлы cookie", "창 보이기 / 숨기기": "Отобразить / скрыть окна", "창 위치 크기 기억": "Запомнить положение и размер окна", "찾기...": "Поисковик...", "채널 영상 역순으로 다운로드": "Скачивание видеоматериалов канала в обратном порядке", "첫 번째 파일 열기": "Открыть первый файл", "첫 번째 파일 열기 (&O)": "Открыть первый файл (&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "Первая страница, 10 ~ 20-я страницы, последняя страница", "체인지로그": "Список изменений", "초기화": "Сброс", "최대 다운로드 속도": "Максимальная скорость скачивания", "최대 동시 작업": "Максимум одновременных задач", "최대 페이지 제한": "Максимальное ограничение страниц", "최소화 버튼으로 트레이로 최소화": "Свернуть в трей с помощью кнопки сворачивания", "최신 버전:": "Последняя:", "추가한 날짜": "Дата добавления", "취소": "Отмена", "캐릭터": "Персонажи", "캐릭터 (Characters)": "Персонажи", "캐릭터 이름": "Имя персонажа", "캐릭터가 없습니다": "Нет персонажей", "캐릭터명 복사 (&C)": "Скопировать имена персонажей (&C)", "코멘트": "Комментарий", "코멘트 수정": "Редактировать комментарий", "쿠키": "Файлы cookie", "쿠키 내보내기": "Экспорт файлов cookie", "쿠키 내보내기 성공": "Файлы cookie успешно экспортированы", "쿠키 불러오기": "Загрузка файлов cookie", "쿠키 불러오기 성공": "Файлы cookie успешно импортированы", "쿠키 초기화 성공": "Файлы cookie успешно очищены", "쿠키가 없습니다": "Нет файлов cookie", "쿠키를 업데이트하세요": "Обновите файлы cookie", "크게": "Больш.", "크기": "Размер", "크기 조절": "Изменить размер", "크기 조절...": "Изменение размера...", "크롬 확장프로그램 연동에 실패했습니다.": "Ссылка на расширение Chrome не работает.", "클라이언트": "Клиент", "클래식": "Классика", "클립보드에서 자동 추가": "Монитор буфера обмена", "타입": "Типы", "타입 (Types)": "Типы", "태그": "Метки", "태그 \"{}\" 제거": "Удалить метку «{}»", "태그 \"{}\" 추가": "Добавить метку «{}»", "태그 (Tags)": "Метки", "태그 :": "Метка :", "태그 설정": "Настройка меток", "태그 수정": "Редактирование меток", "태그 없음": "Нет меток", "테마": "Тема", "토렌트 고급 옵션 초기화": "Сброс расширенных настроек торрента", "토렌트 추가": "Добавить торрент", "토렌트 파일 연결": "Связать с торрент-файлами", "토큰": "Токены", "통계": "Статистика", "통과": "Пропуск", "투명도": "Прозрачность", "트래커 수정": "Редактирование трекеров", "트래커 추가": "Добавить трекеры", "트레이로 전환되었습니다": "Свернуто в системный трей", "트레이로 최소화": "Свернуть в системный трей", "트레이로 최소화 알림 보이기": "Отображение уведомлений о сворачивании в трее", "트레이에서 알림 보이기": "Отображение уведомлений в системном трее", "파일": "Файл", "파일 목록": "Список файлов", "파일 삭제": "Удаление файлов", "파일 삭제 (&X)": "Удаление файлов (&X)", "파일 수": "Число файлов", "파일 스캔 중": "Сканирование файлов", "파일 유형 제외": "Исключение типов файлов", "파일 체크 중...": "Проверка файлов...", "파일 크기": "Размер файла", "파일 형식": "Формат", "파일 형식 물어보기": "Спрашивать формат", "파일명": "Имя файла", "파일명 형식": "Формат имени файла", "파일을 고르세요:": "Выберите файлы:", "파일을 선택하세요": "Выберите файл", "파일의 수정한 날짜를 업로드 날짜로 변경": "Изменить дату изменения файла на дату загрузки", "파일이 없습니다": "Нет файлов", "패스워드": "Пароль", "퍼지로 찾기": "Нечёткий поиск", "페이지 읽는 중...": "Чтение страниц...", "페이지 지정": "Выбор страниц", "페이지 지정 다운로드": "Выбор страниц и скачивание", "페이지 지정 다운로드 기본값": "Значение по умолчанию для «Выбор страниц и скачивание»", "페이지를 선택해주세요": "Пожалуйста, выберите страницы", "페이지를 읽는 중에 오류가 발생했습니다": "При попытке чтения страниц возникла ошибка", "평범하게 찾기": "Поиск по умолчанию", "포트": "Порт", "포함 태그": "Метки, которые необходимо включить", "폭 맞춤": "Соответствие ширине", "폰트": "Шрифт", "폰트 변경...": "Изменить шрифт...", "폰트 선택": "Выбор шрифта", "폰트 초기화": "Сброс шрифта", "폴더": "Папка", "폴더 && 압축파일": "Папки и Zip-файлы", "폴더 바로가기": "Горячие клавиши папок", "폴더 열기": "Открыть папку", "폴더 이동": "Переместить папку", "폴더 추가": "Добавить папку", "폴더가 없습니다": "Нет папки", "폴더들": "Папки", "폴더들을 선택하세요": "Выберите папки", "폴더를 선택하세요": "Выберите папку", "폴더를 추가해주세요": "Пожалуйста, добавьте папку", "폴더명 형식": "Формат папки", "표지 검색 실패": "Поиск обложки не удался", "표지 검색...": "Поиск обложки...", "프로그램 끝내기": "Выход из программы", "프로그램 패스워드": "Пароль программы", "프록시": "Прокси-сервер", "플러그인": "Плагины", "플러그인을 추가하시겠습니까?": "Вы уверены, что хотите добавить этот плагин?", "플레이리스트": "Плейлист", "플레이리스트 파일에 번호 매기기": "Нумерация файлов в плейлистах", "플레이리스트 한 폴더에 다운로드": "Скачивание плейлиста в одну папку", "플로팅 미리보기": "Всплывающий предпросмотр", "피드백": "Отзыв", "필터": "Фильтр", "필터창": "Фильтр", "하나 이상의 타입을 선택해주세요.": "Выберите хотя бы один тип.", "하위폴더 포함": "Включить подпапки", "학습 중...": "Изучение...", "한 줄 당 한 트래커 URL": "Один URL-адрес трекера в строке", "항상 위": "Всегда сверху", "항상 위 OFF": "Всегда сверху: ОТКЛЮЧЕНО", "항상 위 ON": "Всегда сверху: ВКЛЮЧЕНО", "해당 링크로 이동합니다": "Открыть ссылку...", "해상도": "Разрешение", "현재 버전: v{}\n최신 버전: v{}": "Текущая версия: {}\nПоследняя версия: {}", "현재 작업 없음": "Нет текущих задач", "호스트": "Сервер", "화 선택": "Выбор серий", "화질": "Качество", "확인": "OK", "후원": "Поддержка", "휴지통으로 이동": "Переместить в корзину" } } ================================================ FILE: translation/tr_si.hdl ================================================ { "lang": "si", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "Folders must be more than one if \"Exclude same sources\" is turned on", "#Cancel#": "අවලංගු කරන්න", "#EB#": "{} EB", "#EMPTY#": "Empty (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "OK", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "Appearance", "#boss_invalid_pw#": "වලංගු නොවන මුරපදයක්!", "#boss_pw#": "මුරපදය:", "#byte#": "{} byte", "#bytes#": "{} bytes", "#click#": "ක්ලික් කරන්න", "#combo_hour#": "{} පැය", "#combo_hours#": "{} පැය", "#combo_min#": "{} මිනිත්තු", "#combo_mins#": "{} මිනිත්තු", "#combo_sec#": "{} Sec", "#combo_secs#": "{} Secs", "#date01#": "ජන {d}", "#date01y#": "ජන {d}, {y}", "#date02#": "පෙබ {d}", "#date02y#": "පෙබ {d}, {y}", "#date03#": "මාර්තු {d}", "#date03y#": "මාර්තු {d}, {y}", "#date04#": "අප්‍රි {d}", "#date04y#": "අප්‍රි {d}, {y}", "#date05#": "මැයි {d}", "#date05y#": "මැයි {d}, {y}", "#date06#": "ජූනි {d}", "#date06y#": "ජූනි {d}, {y}", "#date07#": "ජූලි {d}", "#date07y#": "ජූලි {d}, {y}", "#date08#": "අගෝ {d}", "#date08y#": "අගෝ {d}, {y}", "#date09#": "සැප් {d}", "#date09y#": "සැප් {d}, {y}", "#date10#": "ඔක් {d}", "#date10y#": "ඔක් {d}, {y}", "#date11#": "නොවැ {d}", "#date11y#": "නොවැ {d}, {y}", "#date12#": "දෙසැ {d}", "#date12y#": "දෙසැ {d}, {y}", "#developed_by#": "Developed by Kurt Bestor", "#dirformat_artist#": "Some artist", "#dirformat_group#": "Some group", "#dirformat_lang#": "English", "#dirformat_series#": "Some series", "#dirformat_title#": "Some title", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "All Files {}", "#filter_bmk#": "Bookmark Files {}", "#filter_cookie#": "Netscape HTTP කුකී ගොනු (*.txt)", "#filter_hdfb#": "Hitomi Downloader Filter bookmarks {}", "#filter_hdk#": "Hitomi Downloader Shortcuts {}", "#filter_hdl#": "Hitomi Downloader Linguist {}", "#filter_hds#": "Hitomi Downloader Scripts {}", "#filter_hdt#": "Hitomi Downloader Tasks {}", "#filter_image#": "Images {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "බ්‍රව්සරය අවශ්‍යයි; --safemode භාවිතා කරන්න", "#invalid_loginRequired#": "පුරනය වීම අවශ්‍යය වේ; ඔබේ කුකීස් යාවත්කාලීන කරන්න", "#invalid_loginRequired2#": "Login required; Please login", "#invalid_outdatedExtension#": "දිගුව යල්පැන ඇත; දිගුව යාවත්කාලීන කරන්න", "#invalid_unknownSite#": "නොදන්නා වෙබ් අඩවිය", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "ප්‍රවේශනය: {}", "#new_group#": "New group", "#new_item#": "නව අයිතමය", "#p#": "{}p", "#recomm_all_langs#": "සියලුම භාෂා", "#recomm_artist#": "කලාකරු", "#recomm_main#": "සුරැකීමේ ෆෝල්ඩරය තුළ ඇති කෘතීන් විශ්ලේෂණය කිරීමෙන් අපි කතුවරුන් නිර්දේශ කරමු.\n\nප්‍රතිඵලයේ නිරවද්‍යතාවය යනු දී ඇති කාර්යයක් තුළ ඇති නිරවද්‍යතාවයයි.\nවැඩි වැඩ කරන තරමට වඩා හොඳය. (100+ නිර්දේශිත)\n\n {item} වැඩ ඇත:", "#recomm_score#": "එදිරිය", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "සෑම", "#setting_autosaveR#": "", "#setting_incompleteL#": "අනතුරුව", "#setting_incompleteR#": "", "#t_etc#": "Etc", "#t_file#": "File", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "Blue", "#tag_gray#": "Gray", "#tag_green#": "Green", "#tag_orange#": "Orange", "#tag_purple#": "Purple", "#tag_red#": "Red", "#tag_yellow#": "Yellow", "#task_artist#": "කලාකරු", "#task_date#": "දිනය", "#task_done#": "අවසන්", "#task_folder#": "ෆෝල්ඩරය", "#task_incomplete#": "අසම්පූර්ණයි", "#task_input#": "ආදානය", "#task_invalid#": "වලංගු නැත", "#task_multiple#": "බහු", "#task_range#": "Range", "#task_single#": "තනි", "#task_site#": "අඩවිය", "#task_status#": "තත්ත්වය", "#task_title#": "ශීර්ෂය", "#task_type#": "ටයිප් කරන්න", "#task_url#": "URL", "#task_zipfile#": "ZipFile", "#torrent_anon#": "ට්‍රැකර් සඳහා සාමාන්‍ය පරිශීලක නියෝජිතයෙකු භාවිතා කරනු ඇත (පුද්ගලික ටොරන්ට් සඳහා හැර).
ඔබගේ දේශීය IPv4 සහ IPv6 ලිපිනය පුද්ගලික ට්‍රැකර් වෙත විමසුම් තන්තු පරාමිති ලෙස යවනු නොලැබේ.
announce_ip වින්‍යාස කර ඇත්නම්, එය එසේ නොවේ. ට්‍රැකර් වෙත යවනු ලැබේ.
ග්‍රාහක අනුවාදය දිගු අතට අත දීම තුළ සිටින මිතුරන් වෙත යවනු නොලැබේ.
DHT පුරුක අක්‍රිය වනු ඇත.", "#translation#": "Translation", "50개씩 끊어서 검색": "50 බැගින් බෙදීම් වලින් සොයන්න", "DPI 우회": "විපථ DPI", "DPI 우회 제외 도메인": "Domains excluded from DPI bypass", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "\"Bypass DPI\" ක්‍රියාවිරහිත කර ඇත. එය සමහර අඩවි වල ක්‍රියා නොකරනු ඇත.", "E(x)Hentai 로그인 쿠키 필요": "E(x)Hentai පිවිසුම් කුකීස් අවශ්‍යයි", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "ඔබගේ IP එක තාවකාලිකව අගුලු දමා ඇත. කරුණාකර මොහොතකින් නැවත උත්සාහ කරන්න", "PDF 생성": "PDF සාදන්න", "UI 스케일 ({}%)": "UI පරිමාණය ({}%)", "URL을 입력하세요": "කරුණාකර URL කිහිපයක් ටයිප් කරන්න", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "බාගැනීමට [Download] ඔබන්න. පිටවීමට [OK] ඔබන්න.", "reCAPTCHA 풀기": "reCAPTCHA විසඳන්න", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {day}d {hour}h {min}m {sec}s: {id}", "{hour}시간 {min}분 {sec}초": "{hour}පැය {min}මි {sec}තත්", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "නැවත ආරම්භ කරන්න {hour}පැය {min}මි {sec}තත්: {id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "නැවත ආරම්භ කරන්න {min}මි {sec}තත්: {id}", "{sec}초 뒤 다시 시작: {id}": "නැවත ආරම්භ කරන්න {sec}තත්: {id}", "{} 개 선택": "{} තෝරාගත් අයිතම", "{} 개 찾음": "{} පිහිටුවන ලදී", "{} 개의 작업들이 있습니다": "කාර්යයන් {} ක් ඇත", "{} 개의 진행 중인 작업이 있습니다.": "වැඩ {} ක් ක්‍රියාත්මක වෙමින් පවතී.", "{} 를 제외 태그에 추가했습니다": "Added {} to the exclusion tag list", "{} 설정": "{} මනාප", "{} 시간 뒤 다시 시작": "Restart in {} hours", "{} 시간 전 데이터": "දත්ත; පැය {} කට පෙර", "{} 일 뒤 다시 시작": "Restart in {} days", "{} 일 전 데이터": "දත්ත; දින {} කට පෙර", "{}개 작업의 첫 번째 파일을 엽니다.": "Open first files for each {} tasks.", "{}개의 불완전한 작업을 다시 시작합니다.": "අසම්පූර්ණ කාර්යයන් {} නැවත ආරම්භ කරන්න.", "{}개의 완료된 작업을 목록에서 제거합니다.": "ලැයිස්තුවෙන් සම්පූර්ණ කාර්යයන් {} ඉවත් කරන්න.", "{}개의 완료된 작업을 제거합니다.": "සම්පූර්ණ කළ කාර්යයන් {} ඉවත් කරන්න.", "{}개의 작업을 다시 시작합니다.": "කාර්යයන් {} නැවත ආරම්භ කරන්න.", "『 {} 』는 이미 북마크되어 있습니다": "『 {} 』දැනටමත් පිටු සලකුණු කර ඇත", "『 {} 』를 복사했습니다": "『 {} 』පිටපත් කර ඇත", "『 {} 』를 북마크로부터 불러왔습니다": "『 {} 』පිටු සලකුණු වලින් පූරණය වේ", "『 {} 』를 북마크에서 불러왔습니다": "『 {} 』පිටු සලකුණු වලින් පූරණය වේ", "『 {} 』를 북마크했습니다": "『 {} 』පිටු සලකුණු කර ඇත", "『 {} 』를 저장 폴더에서 불러왔습니다": "『 {} 』බාගැනීම් ෆෝල්ඩරයෙන් අවපතනය කරනු ලැබේ", "가능하면 일본어 제목 사용": "තිබේ නම් ජපන් මාතෘකාව භාවිතා කරන්න", "가능한 경우 챕터 마커 추가": "Add chapter markers if available", "가져오기": "ආයාත", "가져오기 실패": "ආයාත කිරීමට අසමත් විය", "간단 검색": "සරල සෙවීම", "같은 소스 제외": "Exclude same sources", "개": "අයිතම", "개별 다운로드는 지원하지 않습니다": "එක පෝස්ට් එකක් බාගැනීමට සහය නොදක්වයි", "갤러리 넘버": "ගැලරි හැඳුනුම්පත", "갤러리 넘버 복사": "ගැලරි හැඳුනුම්පත පිටපත් කරන්න", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "ගැලරි හැඳුනුම්පත් පිටපත් කිරීමේදී දෝෂයක් සිදු විය.", "갤러리 작업 정보... (&I)": "ගැලරි තොරතුරු... (&I)", "갤러리 정보": "ගැලරි තොරතුරු", "갤러리 정보 파일 (info.txt) 생성": "ගැලරි තොරතුරු ගොනුවක් සාදන්න (info.txt)", "갯수": "ගණන", "갱신 간격": "Refresh interval", "거꾸로": "ආපසු හැරවිය", "검색": "සෙවීම", "검색 데이터": "දත්ත සොයන්න", "검색 도중에 사용할 수 없는 기능입니다.": "සෙවීමේදී මෙම කාර්යය අගුලු දමා ඇත.", "검색 범위": "සෙවුම් පරාසය", "검색 순서": "සෙවුම් අනුක්‍රමය", "검색 필터": "සෙවුම් පෙරහන", "검색기": "සොයන්නා", "검색어": "මූල පද සොයන්න", "검색어 자동 완성": "ස්වයං සම්පූර්ණ මූල පද", "결과": "ප්‍රතිපල", "결과 저장": "ප්‍රතිපල සුරකින්න", "경고 없이 삭제": "අනතුරු ඇඟවීමකින් තොරව මකන්න", "경로를 선택하세요": "මාර්ගයක් තෝරන්න", "계속 검색": "ඊළඟට සොයන්න", "계정": "පරිශීලක නාමය", "계정 / 패스워드": "පරිශීලක නාමය / මුරපදය", "고급": "උසස්", "고급 검색": "උසස් සෙවුම්", "고급 옵션": "Advanced options", "고정": "අමුණන්න", "고정 해제": "ඇමුණුම ඉවත් කරන්න", "공식 스크립트 && 플러그인": "Official scripts && plugins", "공인 IP: {}": "Public IP: {}", "관리자 권한 없이 실행": "පරිපාලක වරප්‍රසාද නොමැතිව ධාවනය කරන්න", "관리자 권한 필요": "පරිපාලක වරප්‍රසාද අවශ්‍යයි", "광고 스킵": "Skip ads", "그대로": "සාමාන්‍යයි", "그룹": "කණ්ඩායම්", "그룹 (Groups)": "කණ්ඩායම්", "그룹 안의 모든 작업 다시 시작": "මෙම කණ්ඩායමේ සියලුම කාර්යයන් නැවත ආරම්භ කරන්න", "그룹 이름": "කණ්ඩායමේ නම", "그룹 펼치기 / 접기": "Expand / Collapse groups", "그룹 합쳐서 불러오기": "සියලුම කණ්ඩායම් එකට පූරණය කරන්න", "그룹명 복사 (&G)": "කණ්ඩායම් නම් පිටපත් කරන්න (&G)", "그룹으로 이동": "කණ්ඩායමට යවන්න", "그룹을 포함하는 그룹은 만들 수 없습니다.": "කණ්ඩායම්වලට කණ්ඩායම් අඩංගු විය නොහැක.", "그룹이 없습니다": "කණ්ඩායම් නැත", "기본": "පෙරනිමිය", "기본 데이터": "පෙරනිමි දත්ත", "기본 데이터 다운로드": "පෙරනිමි දත්ත බාගන්න", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "ඔබට කණ්ඩායම් සෑදිය හැක්කේ පෙරනිමි අනුපිළිවෙලින් පමණි.", "기본값": "පෙරනිමි අගය", "기타": "ආදිය.", "깊은 모델": "ගැඹුරු ආකෘතිය", "끝내기": "ඉවත්වන්න", "날짜": "දිනය", "낮음": "අඩු", "내보내기": "නිර්යාත", "내보내기 실패": "නිර්යාත කිරීමට අසමත් විය", "내용 보기": "සිද්ධි මාලා රාමුව පෙන්වන්න", "내장 웹브라우저": "තිළෑලි වෙබ් බ්‍රව්සරය", "내장 이미지 뷰어": "තිළෑලි පිළිරු නරඹන්නා", "네트워크": "ජාල", "녹화": "Recording", "녹화 중...": "පටිගත කිරීම...", "녹화 중지": "පටිගත කිරීම නවත්වන්න", "높음": "අධි", "다른 동영상 사이트에도 적용됩니다.": "වෙනත් වීඩියෝ අඩවි සඳහාද අදාළ වේ.", "다시 시작 (&S)": "යළි අරඹන්න (&S)", "다시 시작 실패; 복구됨": "නැවත උත්සාහ කිරීමට අසමත් විය; ආපසු හැරවිය", "다운로드": "බාගත කරන්න", "다운로드 & 제거": "බාගත කර ඉවත් කරන්න", "다운로드 && 제거": "බාගන්න && ඉවත් කරන්න", "다운로드 (&D)": "බාගත කරන්න (&D)", "다운로드 날짜 표시": "බාගත කළ දින පෙන්වන්න", "다운로드 속도": "බාගත කිරීමේ වේගය", "다운로드 완료": "බාගත කිරීම සම්පූර්ණයි", "다운로드 완료 후 자동 제거": "සම්පූර්ණ බාගත කිරීමෙන් පසු ස්වයංක්‍රීයව ඉවත් කරන්න", "다운로드 일시 정지 / 재개": "බාගන්න විරාමය / පුනරාරම්භ කරන්න", "다운로드 중": "Downloading", "다운로드가 완료되면 알림": "බාගැනීම අවසන් වූ විට දැනුම්දීම පෙන්වන්න", "다운로드가 완료될 때까지 절전모드 방지": "Prevent system sleep until downloads are finished", "다운로드하기 전에 파일 고르기": "බාගත කිරීමට පෙර ගොනු තෝරන්න", "다운로드하지 않음": "බාගන්න එපා", "다운로드한 작품만": "බාගත කළ ගැලරි පමණි", "다음 검색시 더 빠르게 검색": "ඊළඟ වතාවේ කාර්ය සාධනය වැඩි දියුණු කරන්න", "다음 작업들이 목록에서 제거됩니다:": "The following tasks will be removed from the list:", "다음 파일들이 삭제됩니다:": "The following files will be deleted:", "다크 모드": "අඳුරු මාදිලිය", "단일 파일": "තනි ගොනුව", "단축키": "කෙටිමං", "단축키 내보내기": "Export Shortcuts", "단축키 내보내기 성공": "කෙටිමං සාර්ථකව නිර්යාත කෙරේ", "단축키 불러오기": "Import Shortcuts", "단축키 불러오기 성공": "කෙටිමං සාර්ථකව ආයාත කර ඇත", "단축키 수정": "කෙටිමං සංස්කරණය කරන්න", "단축키 초기화 성공": "කෙටිමං සාර්ථකව නැවත සකස් කර ඇත", "닫기 버튼으로 트레이로 최소화": "වසන්න බොත්තම පද්ධති තැටියට අවම කරන්න", "대기 중": "Waiting", "대기 중...": "පොරොත්තුව...", "데이터 다운로더": "Data Downloader", "데이터 분류 중...": "දත්ත වර්ගීකරණය...", "데이터 분석 중...": "දත්ත විශ්ලේෂණය කිරීම...", "데이터 없음": "No Data", "데이터 읽는 중...": "දත්ත කියවීම...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "දත්ත නොමැත.\nකරුණාකර මෙනුවෙන් දත්ත බාගන්න.", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "දත්ත නොමැත.\nකරුණාකර සෙවුම්කරු වෙතින් දත්ත බාගන්න", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "ඔබගේ දත්ත සතියකට වඩා කල් ඉකුත් වී ඇත.\nකරුණාකර දත්ත යාවත්කාලීන කරන්න.", "데이터를 다운로드하는 도중에 실패했습니다.": "දත්ත බාගත කිරීම අසාර්ථක විය", "데이터를 모두 받았습니다!": "සියලුම දත්ත බාගත කර ඇත!", "도구": "මෙවලම්", "도구창": "මෙවලම් කවුළුව", "도움말": "උදව්", "동영상": "වීඩියෝ", "동영상 변환...": "වීඩියෝව පරිවර්තනය කරන්න...", "뒤 100 페이지": "අවසාන පිටු 100", "드래그 & 드랍해서 바꾸세요:": "වෙනස් කිරීමට Drag & Drop භාවිතා කරන්න:", "디더링": "Dither", "디버그": "දෝෂහරණය කරන්න", "디스코드": "Discord", "라이선스": "බලපත්‍රය", "랜덤으로 하나 선택": "අහඹු ලෙස එකක් තෝරන්න", "로그...": "ලොගය...", "로그인": "පුරනය", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "පුරනය වීමට අපොහොසත් විය: {}{}\nකරුණාකර බලන්න [විකල්ප - මනාප - Pixiv සැකසීම - පුරනය වන්න].", "로그인 중...": "පුරනය වෙමින්...", "로그인 테스트": "පරීක්ෂණ පිවිසුම", "로드 중: {}": "Loading: {}", "로컬 파일 감지": "දේශීය ගොනු හඳුනා ගන්න", "로컬 파일로부터 새 작업 만들기": "දේශීය ගොනු වලින් නව කාර්යයක් සාදන්න", "를 북마크에서 지웠습니다": "පිටු සලකුණු වලින් ඉවත් කරනු ලැබේ", "리트윗 제외": "Exclude retweets", "리트윗 포함": "Retweets ඇතුළත් කරන්න", "릴리즈 노트": "නිකුත් කිරීමේ සටහන", "링크 열기": "විවෘත සබැඳිය", "링크 주소 복사": "සබැඳිය පිටපත් කරන්න", "링크 주소 복사 (&C)": "සබැඳිය පිටපත් කරන්න (&C)", "마무리 중...": "අවසන් කරන්න...", "멈춤": "Stopped", "메뉴": "මෙනුව", "메모리 사용량": "මතක භාවිතය", "메모리 사용량 표시": "මතක භාවිතය පෙන්වන්න", "메시지 상자": "Message box", "모델": "ආකෘතිය", "모델 생성 중...": "ආකෘතිය නිර්මාණය කිරීම...", "모델: {}": "ආකෘතිය: {}", "모두": "සියල්ල", "모두 삭제": "සියල්ල මකන්න", "모두 선택": "සියල්ල තෝරන්න", "모든 갤러리 넘버를 복사했습니다.": "සියලුම ගැලරි හැඳුනුම්පත් පිටපත් කරන ලදී.", "모든 언어": "සියලුම භාෂා", "모든 작업 완료": "All tasks complete", "모든 작업 완료 후": "When all tasks are complete", "모든 작업이 완료되면 알림 보이기": "Show notifications when all tasks are complete", "목록": "ලැයිස්තුව", "목록 주소를 입력해주세요": "කරුණාකර ලැයිස්තු URL එකක් ටයිප් කරන්න", "목록 지우기": "ලැයිස්තුව හිස් කරන්න", "목록에서 제거": "ලැයිස්තුවෙන් ඉවත් කරන්න", "목록에서 폴더 제거": "ලැයිස්තුවෙන් ෆෝල්ඩරය ඉවත් කරන්න", "목록을 모두 지울까요?": "ඔබට ලැයිස්තුව හිස් කිරීමට අවශ්‍ය බව විශ්වාසද?", "미리보기": "පෙරදසුන", "미리보기 크기": "පෙරදසුන් ප්‍රමාණය", "배경 이미지": "Background image", "배경 이미지 변경": "Change background image", "배경 이미지 초기화": "Reset background image", "버전 확인": "යාවත්කාලීන පරීක්ෂා කරන්න", "번역": "පරිවර්තනය කරන්න", "베타 버전 설치": "Install beta versions", "변경할 최대 크기": "උපරිම ප්‍රමාණය", "변경할 최소 크기": "අවම ප්‍රමාණය", "변환 중...": "පරිවර්තනය කරනවා...", "보기": "දැක්ම", "보통": "සාමාන්‍යය", "부팅 시 실행": "ආරම්භයේදී ආරම්භ කරන්න", "북마크": "පිටු සලකුණු", "북마크 가져오기": "පිටු සලකුණු ආයාත කරන්න", "북마크 가져오기 실패": "පිටු සලකුණු ආයාත කිරීමට අසමත් විය", "북마크 내보내기": "පිටු සලකුණු නිර්යාත කරන්න", "북마크 내보내기 실패": "පිටුසන් නිර්යාත කිරීමට අසමත් විය", "북마크를 가져왔습니다": "පිටු සලකුණු ආයාත කර ඇත", "북마크를 내보냈습니다": "පිටු සලකුණු නිර්යාත කර ඇත", "북마크를 모두 삭제합니다.": "සියලුම පිටු සලකුණු ඉවත් කරන්න.", "북마크를 모두 삭제했습니다.": "සියලුම පිටු සලකුණු ඉවත් කරන ලදී.", "불러오기": "ප්‍රවේශනය", "불완전한 작업 모두 다시 시작": "සියලුම අසම්පූර්ණ කාර්යයන් නැවත ආරම්භ කරන්න", "불완전한 작업 자동으로 다시 시작": "අසම්පූර්ණ කාර්යයන් ස්වයංක්‍රීයව නැවත ආරම්භ කරන්න", "붙여넣고 다운로드": "ඇලවීම සහ බාගත කිරීම", "뷰어... (&V)": "&නරඹන්නා...", "브라우저로 보기": "බ්‍රවුසරයේ පෙන්වන්න", "브라우저로 보기 (&B)": "බ්‍රවුසරයේ පෙන්වන්න (&B)", "비디오 코덱 우선순위": "Video codec priority", "비슷한 이미지 포함 (느림)": "සමාන රූප ඇතුළත් කරන්න (මන්දගාමී)", "비율 유지": "දර්ශන අනුපාතය", "비율 유지 - 꽉 차게": "දර්ශන අනුපාතය - පිරවීම", "비정상적인 로그인 시도": "අසාමාන්‍ය පුරනය වීමේ උත්සාහය", "빠른 시작을 위한 작업 레이지 로딩": "ඉක්මන් ආරම්භය සඳහා කම්මැලි ප්‍රවේශන කාර්යයන්", "빠른 실행 도구 모음 사용자 지정": "ඉක්මන් ප්‍රවේශ මෙවලම් තීරුව අභිරුචිකරණය කරන්න", "뽑기": "අහඹු", "뽑을 갯수": "ගැලරි ගණන", "사용법": "භාවිතා කරන ආකාරය", "사용법...": "භාවිතා කරන ආකාරය...", "사용자 지정 테마 색": "අභිරුචි තේමා වර්ණය", "사이드바": "Sidebar", "사이트": "අඩවිය", "사이트 추가": "අඩවි සහාය", "사이트를 추가했습니다": "අඩවි සහාය එකතු කරන ලදී", "삭제된 데이터": "මකා දැමූ දත්ත", "삭제된 데이터 다운로드": "මකා දැමූ දත්ත බාගන්න", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "මකා දැමූ දත්ත නොමැත.\nකරුණාකර මෙනුවෙන් දත්ත බාගන්න.", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "මකා දැමූ දත්ත බාගත කිරීම අසාර්ථක විය", "삭제된 데이터를 모두 받았습니다!": "බාගත කිරීම සම්පූර්ණයි: මකා දැමූ දත්ත", "삭제시 휴지통으로 보냄": "ප්‍රතිචක්‍රීකරණ බඳුනක් භාවිතා කරන්න", "상태": "තත්ත්වය", "새 그룹 만들기": "නව කණ්ඩායමක් සාදන්න", "새 버전이 있습니다. 업데이트 하실래요?": "නව අනුවාදයක් තිබේ. ඔබ යාවත්කාලීන කිරීමට කැමතිද?", "새로고침": "නැවුම් කරන්න", "샘플": "Sample", "서명": "සහතිකය", "서버": "සේවාදායකය", "선택 화 다운로드": "පරිච්ඡේද තෝරන්න && බාගත කරන්න", "선택된 작업들 내보내기": "තෝරාගත් කාර්යයන් නිර්යාත කරන්න", "선택된 작업이 없습니다": "තෝරාගත් කාර්යයන් නැත", "선택하세요:": "Select:", "선택한 항목 중에서 자동 선택": "තෝරාගත් අයිතම තුළ ස්වයංක්‍රීයව තෝරන්න", "선호 언어": "Preferred language", "설명": "අදහස් දක්වන්න", "설정": "මනාප", "설정 (Preferences)": "මනාප", "설정을 따름": "මනාපයන් අනුගමනය කරන්න", "성공: {}\n실패: {}": "සාර්ථකයි: {}\nඅසාර්ථකයි: {}", "소리": "Sound", "수동": "අත්පොත", "수동 업데이트": "අත්පොත", "수정...": "සංස්කරණය...", "순서 변경": "නැවත අනුපිළිවෙල සකසන්න", "숨김 키": "Boss-යතුර", "숫자": "අංකය", "스레드": "නූල්", "스레드 생성 중...": "නූල් ආරම්භ කිරීම...", "스크롤 속도 ({}x)": "අනුචලන වේගය ({}x)", "스크립트": "සිද්ධි මාලා රාමුව", "스크립트 가져오기": "සිද්ධි මාලා රාමුව ආයාත කරන්න", "스크립트 작성법": "How to write a script", "스크립트를 실행하시겠습니까?": "ඔබට මෙම සිද්ධි මාලා රාමුව ධාවනය කිරීමට අවශ්‍ය බව විශ්වාසද?", "스크립트를 읽는 중 오류가 발생했습니다": "සිද්ධි මාලා රාමුව කියවීමේදී දෝෂයක් ඇති විය", "스토리 읽는 중...": "කතන්දර කියවීම...", "스토리 포함": "කතන්දර ඇතුළත් කරන්න", "시딩": "බීජායනය", "시딩 중지": "බීජායනය නවත්වන්න", "시딩 하지 않음": "බීජායනයක් නැත", "시리즈": "මාලාව", "시리즈 (Series)": "මාලාව", "시리즈가 없습니다": "මාලාවක් නැත", "시리즈명 복사 (&S)": "මාලා නම් පිටපත් කරන්න (&S)", "시스템": "පද්ධති", "시스템 설정 사용": "Use system setting", "시스템 종료": "Shutdown System", "시스템 트레이": "පද්ධතිය තැටි", "시작 후 다운로드": "මෙම ධාවනය බාගත කර ඇත", "시작 후 지난 시간": "මෙම ධාවන කාලය ගෙවී ගියේය", "실패": "අසාර්ථකයි", "실험 기능": "පර්යේෂණාත්මක", "썸네일": "සිඟිති රුව", "썸네일 고정": "සිඟිති රුව නිවැරදි කරන්න", "썸네일 다운로드": "Download thumbnails", "썸네일 숨기기": "සිඟිති රූ සඟවන්න", "썸네일 크기": "සිඟිති රූ ප්‍රමාණය", "썸네일을 선택하세요": "සිඟිති රූපයක් තෝරන්න", "아니오(&N)": "&නැත", "아무것도 안 함": "Do nothing", "아이콘": "නිරූපකය", "압축": "සම්පීඩනය", "압축 형식": "ආකෘතිය", "압축파일 연결 프로그램": "සම්පීඩිත ගොනු විවෘත කරන්න", "앞 100 페이지": "පළමු පිටු 100", "얕은 모델": "නොගැඹුරු ආකෘතිය", "언어": "භාෂාව", "언어 (Language)": "භාෂාව", "언어 (Languages)": "භාෂා", "업데이트": "යාවත්කාලීනය", "업데이트 중...": "යාවත්කාලීන කිරීම...", "업데이트 체크 중...": "යාවත්කාලීන සඳහා පරීක්ෂා කරමින්...", "업로드": "උඩුගත කරන්න", "연결 프로그램 변경": "විවෘත කිරීමට භාවිතා කළ යුතු වැඩසටහන තෝරන්න", "열기": "විවෘත", "예(&Y)": "&ඔව්", "예상치 못한 오류로 다운로드에 실패했습니다.": "අනපේක්ෂිත දෝෂයකින් බාගත කිරීම අසාර්ථක විය.", "예시": "උදාහරණය", "오디오 코덱 우선순위": "Audio codec priority", "오디오 트랙": "Audio track", "오류": "දෝෂයකි", "올바르지 않은 범위입니다": "වලංගු නොවන පරාසය", "올바르지 않은 주소입니다": "වලංගු නැතිURL", "올바르지 않은 형식의 검색 필터입니다": "පෙරහන සමඟ වලංගු නොවන වාක්‍ය ඛණ්ඩ දෝෂයකි", "올바르지 않은 형식의 스크립트입니다": "වලංගු නොවන ආකෘති සිද්ධි මාලා රාමුව", "옵션": "විකල්ප", "옵션 (JSON 포맷)": "Options (JSON format)", "옵션 (Options)": "විකල්ප", "완료": "අවසන්", "완료된 작업 모두 제거": "සියලුම සම්පූර්ණ කල කාර්යයන් ඉවත් කරන්න", "완료됨으로 표시": "සම්පූර්ණ ලෙස ලකුණු කරන්න", "완전 삭제": "ස්ථිරවම මකන්න", "우선순위": "ප්‍රමුඛතාව", "우선순위 변경": "Change priority", "움짤": "GIF", "움짤 변환...": "GIF පරිවර්තනය කරන්න...", "원본": "මුල්", "원본 이미지 다운로드": "මුල් පින්තූර බාගන්න", "원본 크기보다 크게 바뀌지는 않습니다": "ප්‍රමාණය මුල් ප්‍රමාණයට වඩා විශාල නොවේ", "원본 파일 삭제": "බාගත කළ ගොනු මකන්න", "원하는 인공신경망 모델을 고르세요:": "ඔබට අවශ්‍යය කෘතිම ස්නායු ජාල ආකෘතිය තෝරන්න:", "웹브라우저": "WebBrowser", "웹툰 제외": "Webtoons බැහැර කරන්න", "유사도": "සමානකම", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "වලංගු නොවන ගිණුමක් / මුරපදයක්", "유효한 계정입니다": "වලංගු ගිණුමක්", "음소거": "නිශ්ශබ්ද කරන්න", "음악 파일에 앨범아트 삽입": "ශ්‍රව්‍ය ගොනු වෙත ඇල්බම කවරය එක් කරන්න", "음원": "ශ්‍රව්‍ය", "음질": "ශබ්ද ගුණාත්මකභාවය", "이동": "චලනය කරන්න", "이동할 수 없습니다: {}": "චලනය කළ නොහැක: {}", "이름": "නම", "이름 변경": "නැවත නම් කරන්න", "이름을 얻는 도중 실패했습니다": "නම කියවීමට අසමත් විය", "이미 다운로드한 작품 제외": "දැනටමත් බාගත කර ඇති ගැලරි බැහැර කරන්න", "이미 모든 그룹이 추가되어 있습니다": "All groups have already been added", "이미 모든 시리즈가 추가되어 있습니다": "All series have already been added", "이미 모든 작가가 추가되어 있습니다": "All artists have already been added", "이미 모든 캐릭터가 추가되어 있습니다": "All characters have already been added", "이미 추가한 작업 다시 시작할지 물어봄": "දැනටමත් ලැයිස්තුවේ ඇති කාර්යයන් නැවත උත්සාහ කිරීමට අසන්න", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "මෙම කාර්යය දැනටමත් ලැයිස්තුවේ ඇත. ඔබට එය නැවත බාගත කිරීමට අවශ්‍යද?", "이미 추가한 플러그인입니다": "මෙම ප්ලගිනය දැනටමත් ලැයිස්තුවේ ඇත", "이미 포함하는 그룹이 있습니다.": "කාර්යයන් ඇතුළත් කණ්ඩායමක් දැනටමත් ඇත.", "이미지": "රූප", "이미지 정보 캐시": "හැඹිලි රූප තොරතුරු", "이미지 포맷 변환": "රූප ආකෘතිය වෙනස් කරන්න", "이미지를 읽는 중 실패": "පින්තූර කියවීමට අසමත් විය", "익명 모드": "නිර්නාමික මාදිලිය", "인코딩": "කේතනය කිරීම", "일반": "පොදු", "일시 정지": "Pause", "읽기 중지": "කියවීම නවත්වන්න", "읽는 중...": "කියවීම...", "자동": "ස්වයංක්‍රිය", "자동 녹화": "Auto recording", "자동 새로고침 & 스크롤": "ස්වයංක්‍රීය නැවුම් කිරීම සහ අනුචලනය කිරීම", "자동 생성 자막 포함": "Include automatic captions", "자동 선택": "ස්වයංක්‍රීය තේරීම", "자동 업데이트": "ස්වයංක්‍රිය", "자동 저장": "ස්වයංක්‍රීයව සුරකින්න", "자막": "උපසිරැසි", "자세한 정보": "Details", "자세한 정보 보기": "විස්තර පෙන්වන්න", "작가": "කලාකරුවන්", "작가 (Artists)": "කලාකරුවන්", "작가 이름": "කලාකරුවාගේ නම", "작가 추천": "කලාකරුවන් නිර්දේශ කරන්න", "작가 합쳐서 불러오기": "සියලුම කලාකරුවන් එකට පූරණය කරන්න", "작가가 없습니다": "කලාකරුවන් නැත", "작가명 복사 (&A)": "කලාකරුවන්ගේ නම් පිටපත් කරන්න (&A)", "작게": "කුඩා", "작성자": "කර්තෘ", "작업": "කාර්යයන්", "작업 개수": "කාර්යයන් ගණන", "작업 기록": "Task history", "작업 기록 초기화 성공": "Task history cleared successfully", "작업 기록이 없습니다": "No task history", "작업 당 최대 연결": "Maximum connections per task", "작업 만들기 실패": "Failed to create tasks", "작업 목록 폭": "Task list width", "작업 수정": "කාර්යය සංස්කරණය කරන්න", "작업 수정...": "කාර්යය සංස්කරණය කරන්න...", "작업 완료": "Task complete", "작업 완료 후": "After task complete", "작업 왼쪽에서 순서 변경": "වම් පැත්තේ නැවත සකස් කරන්න", "작업 용량": "කාර්යයන් ගොනු ප්‍රමාණය", "작업 정보": "කාර්ය තොරතුරු", "작업 정보... (&I)": "තොරතුරු... (&I)", "작업 타입?": "කාර්ය වර්ගය?", "작업들 가져오기": "ආයාත කාර්යයන්", "작업들 내보내기": "නිර්යාත කාර්යයන්", "작업들을 가져올까요?": "ඔබට කාර්යයන් ආයාත කිරීමට අවශ්‍යද?", "작업들을 가져왔습니다": "කාර්යයන් ආයාත කරන ලදී", "작업들을 내보냈습니다": "කාර්යයන් නිර්යාත කරන ලදී", "작업이 아직 완료되지 않았습니다": "කාර්යය තවමත් අවසන් නැත", "작업이 완료되면 알림 보이기": "Show notifications when tasks are complete", "작품 목록 가져오기": "ගැලරි ලැයිස්තුව ආයාත කරන්න", "작품 목록 내보내기": "ගැලරි ලැයිස්තුව නිර්යාත කරන්න", "잠금": "අගුළු දමන්න", "잠금 해제": "අගුළු හරින්න", "장": "පිටු", "재개": "Resume", "재시작 후 적용됩니다": "නැවත ආරම්භ කිරීමෙන් පසුව අදාළ වේ", "저사양 모드": "අඩු පිරිවිතර මාදිලිය", "저장": "සුරකින්න", "저장 && 종료": "සුරකින්න && ඉවත් වන්න", "저장 실패": "සුරැකීමට අසමත් විය", "저장 완료": "සුරකින ලදී", "저장 중...": "සුරැකීම...", "저장 폴더": "ෆෝල්ඩරය බාගන්න", "저장 폴더 변경...": "බාගැනීම් ෆෝල්ඩරය වෙනස් කරන්න...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "සියලුම ගැලරි හැඳුනුම්පත් බාගැනීම් ෆෝල්ඩරයේ පිටපත් කරන්න", "저장 폴더에 있는 모든 작가 불러오기": "බාගැනීම් ෆෝල්ඩරයේ සියලුම කලාකරුවන් පූරණය කරන්න", "저장... (&S)": "&සුරකින්න...", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "වින්‍යාස ගොනුවක් නොමැත; \"භාවිතා කරන්නේ කෙසේද\" කියවීමට [F1] ඔබන්න", "적어도 {} 개의 작품이 필요합니다.": "අවම වශයෙන් ගැලරි {} ක් අවශ්‍ය වේ.", "점수": "එදිරිය", "정규식 문법": "Regex කාරක රීති", "정규식으로 찾기": "Regex මගින් සොයන්න", "정렬 기준": "අනුව තෝරන්න", "정말 단축키를 초기화하시겠습니까?": "ඔබට කෙටිමං යළි පිහිටුවීමට අවශ්‍ය බව විශ්වාසද?", "정말 목록에서 제거하시겠습니까?": "ඔබට ලැයිස්තුවෙන් ඉවත් කිරීමට අවශ්‍ය බව විශ්වාසද?", "정말 삭제하시겠습니까?": "ඔබට මැකීමට අවශ්‍ය බව ඔබට විශ්වාසද?", "정말 설정을 초기화하시겠습니까?": "Are you sure you want to reset the preferences?", "정말 작업 기록을 초기화하시겠습니까?": "Are you sure you want to clear task history?", "정말 종료하시겠습니까?": "ඔබට ඉවත් වීමට අවශ්‍ය බව විශ්වාසද?", "정말 중지하시겠습니까?": "ඔබට නතර කිරීමට අවශ්‍ය බව විශ්වාසද?", "정말 쿠키를 초기화하시겠습니까?": "ඔබට කුකීස් ඉවත් කිරීමට අවශ්‍ය බව විශ්වාසද?", "정보": "ගැන", "정보...": "ගැන...", "정확도": "නිරවද්‍යතාව", "제거": "ඉවත් කරන්න", "제목": "ශීර්ෂය", "제목 (Title)": "ශීර්ෂය", "제목 복사 (&T)": "මාතෘකාව පිටපත් කරන්න (&T)", "제외 태그": "බැහැර කිරීමට සම්බන්ධක කරන්න", "제외 태그 목록에 그룹 추가": "Add groups to the exclusion tag list", "제외 태그 목록에 시리즈 추가": "Add series to the exclusion tag list", "제외 태그 목록에 작가 추가": "Add artists to the exclusion tag list", "제외 태그 목록에 캐릭터 추가": "Add characters to the exclusion tag list", "조각 표시": "කෑලි පෙන්වන්න", "종료": "නිදහස් කරනවා", "종료 중...": "නිදහස් කරනවා...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "තිරස් අතට අදින්න: ±1\nසිරස් අතට අදින්න: ±100", "주소": "ලිපිනය", "주소 or 갤러리 넘버": "URL හෝ ගැලරි හැඳුනුම්පත", "주소를 입력해주세요": "කරුණාකර URL කිහිපයක් ටයිප් කරන්න", "중간": "මාධ්‍යය", "중단": "රෝධනය කරන්න", "중복 이미지 찾기": "අනුපිටපත් රූප සොයන්නා", "중복 이미지 찾는 중": "අනුපිටපත් පින්තූර සොයා ගැනීම", "중복 제거": "අනුපිටපත් කපා දමන්න", "지원하는 사이트:": "සහාය දක්වන අඩවි:", "지원하는 토큰": "Supported tokens", "지정한 페이지만 다운로드합니다.": "තෝරාගත් පිටු පමණක් බාගන්න.", "직접 다운로드": "සෘජු බාගත කිරීම", "진행도": "ප්‍රගතිය", "참고 작품: {} 개": "යොමුව: {} ගැලරි", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "කරුණාකර බලන්න: උදව් - භාවිතා කරන්නේ කෙසේද (F1) - කුකීස් පූරණය කරන්න", "창 보이기 / 숨기기": "කවුළු පෙන්වන්න / සඟවන්න", "창 위치 크기 기억": "කවුළුවේ පිහිටීම සහ ප්‍රමාණය මතක තබා ගන්න", "찾기...": "සොයන්නා...", "채널 영상 역순으로 다운로드": "Download channel videos in reverse order", "첫 번째 파일 열기": "පළමු ගොනුව විවෘත කරන්න", "첫 번째 파일 열기 (&O)": "පළමු ගොනුව විවෘත කරන්න (&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "පළමු පිටුව, 10 ~ 20 වැනි පිටු, අවසාන පිටුව", "체인지로그": "වෙනස්වීම් ලොගය", "초기화": "යළි පිහිටුවන්න", "최대 다운로드 속도": "උපරිම බාගත කිරීමේ වේගය", "최대 동시 작업": "උපරිම සමාන්තර කාර්යයන්", "최대 페이지 제한": "උපරිම පිටු සීමාව", "최소화 버튼으로 트레이로 최소화": "අවම බොත්තම පද්ධති තැටියට අවම කරයි", "최신 버전:": "Latest:", "추가한 날짜": "එකතු කළ දිනය", "취소": "අවලංගු කරන්න", "캐릭터": "චරිත ", "캐릭터 (Characters)": "චරිත ", "캐릭터 이름": "චරිත නම", "캐릭터가 없습니다": "චරිත නැත", "캐릭터명 복사 (&C)": "චරිත නම් පිටපත් කරන්න (&C)", "코멘트": "අදහස් දක්වන්න", "코멘트 수정": "අදහස සංස්කරණය කරන්න", "쿠키": "කුකීස්", "쿠키 내보내기": "කුකීස් ආයත කරන්න", "쿠키 내보내기 성공": "කුකීස් සාර්ථකව ආයත කෙරේ", "쿠키 불러오기": "කුකීස් පූරණය කරන්න", "쿠키 불러오기 성공": "කුකීස් සාර්ථකව නිර්යාත කර ඇත", "쿠키 초기화 성공": "කුකීස් සාර්ථකව ඉවත් කර ඇත", "쿠키가 없습니다": "කුකීස් නැත", "쿠키를 업데이트하세요": "ඔබේ කුකීස් යාවත්කාලීන කරන්න", "크게": "විශාල", "크기": "ප්‍රමාණය", "크기 조절": "ප්‍රමාණය වෙනස් කරන්න", "크기 조절...": "ප්‍රමාණය වෙනස් කිරීම...", "크롬 확장프로그램 연동에 실패했습니다.": "Chrome දිගු සබැඳිය අසාර්ථක විය.", "클라이언트": "සේවාදායකයා", "클래식": "සම්භාව්‍ය", "클립보드에서 자동 추가": "ක්ලිප්බෝඩ් මොනිටරය", "타입": "වර්ග", "타입 (Types)": "වර්ග", "태그": "සම්බන්ධක", "태그 \"{}\" 제거": "සම්බන්ධක ඉවත් කරන්න \"{}\"", "태그 \"{}\" 추가": "සම්බන්ධක එක් කරන්න \"{}\"", "태그 (Tags)": "සම්බන්ධක", "태그 :": "සම්බන්ධක :", "태그 설정": "සම්බන්ධක සැකසීම", "태그 수정": "සම්බන්ධක සංස්කරණය කරන්න", "태그 없음": "සම්බන්ධක නැත", "테마": "තේමාව", "토렌트 고급 옵션 초기화": "Reset torrent advanced options", "토렌트 추가": "ටොරන්ට් එකතු කරන්න", "토렌트 파일 연결": "ටොරන්ට් ගොනු සමඟ සම්බන්ධ කරන්න", "토큰": "Tokens", "통계": "සංඛ්‍යාලේඛන", "통과": "සමත්", "투명도": "පාරාන්ධතාව", "트래커 수정": "ට්රැකර් සංස්කරණය කරන්න", "트래커 추가": "ට්රැකර් එකතු කරන්න", "트레이로 전환되었습니다": "පද්ධති තැටියට අවම කර ඇත", "트레이로 최소화": "පද්ධති තැටියට අවම කර ඇත", "트레이로 최소화 알림 보이기": "Show minimize notifications in the tray", "트레이에서 알림 보이기": "තැටියේ දැනුම්දීම් පෙන්වන්න", "파일": "ගොනුව", "파일 목록": "ගොනු ලැයිස්තුව", "파일 삭제": "ගොනු මකන්න", "파일 삭제 (&X)": "ගොනු මකන්න (&X)", "파일 수": "ගොනු ගණන", "파일 스캔 중": "ගොනු පරිලෝකනය", "파일 유형 제외": "ගොනු වර්ග බැහැර කරන්න", "파일 체크 중...": "ගොනු පරීක්ෂා කිරීම...", "파일 크기": "ගොනු තරම", "파일 형식": "ආකෘතිය", "파일 형식 물어보기": "ආකෘතිය විමසන්න", "파일명": "ගොනු නාමය", "파일명 형식": "ගොනු නාම ආකෘතිය", "파일을 고르세요:": "ගොනු තෝරන්න:", "파일을 선택하세요": "ගොනුවක් තෝරන්න", "파일의 수정한 날짜를 업로드 날짜로 변경": "Change the file's modified date to the upload date", "파일이 없습니다": "ගොනු නැත", "패스워드": "මුරපදය", "퍼지로 찾기": "Fuzzy විසින් සොයන්න", "페이지 읽는 중...": "පිටු කියවීම...", "페이지 지정": "පිටු තෝරන්න", "페이지 지정 다운로드": "පිටු තෝරන්න && බාගන්න", "페이지 지정 다운로드 기본값": "\"පිටු තෝරන්න && බාගන්න\" සඳහා පෙරනිමි අගය", "페이지를 선택해주세요": "කරුණාකර පිටු තෝරන්න", "페이지를 읽는 중에 오류가 발생했습니다": "පිටු කියවීමට උත්සාහ කිරීමේදී දෝෂයක් ඇති විය", "평범하게 찾기": "පෙරනිමියෙන් සොයන්න", "포트": "කවුළුව", "포함 태그": "සම්බන්ධක ඇතුළත් කිරීමට", "폭 맞춤": "පළලට ගැලපේ", "폰트": "Font", "폰트 변경...": "අකුරු වෙනස් කරන්න...", "폰트 선택": "Select Font", "폰트 초기화": "අකුරු නැවත සකසන්න", "폴더": "ෆෝල්ඩරය", "폴더 && 압축파일": "ෆෝල්ඩරය && සිප් ගොනු", "폴더 바로가기": "Folder shortcuts", "폴더 열기": "ෆෝල්ඩරය විවෘත කරන්න", "폴더 이동": "ෆෝල්ඩරය ගෙන යන්න", "폴더 추가": "ගොනුවක් එක් කරන්න", "폴더가 없습니다": "No folder", "폴더들": "නාමාවලි", "폴더들을 선택하세요": "Select folders", "폴더를 선택하세요": "ෆෝල්ඩරයක් තෝරන්න", "폴더를 추가해주세요": "කරුණාකර ෆෝල්ඩර කිහිපයක් එක් කරන්න", "폴더명 형식": "ෆෝල්ඩර ආකෘතිය", "표지 검색 실패": "කවරය සෙවීමට අසමත් විය", "표지 검색...": "කවරය සොයමින්...", "프로그램 끝내기": "Quit the program", "프로그램 패스워드": "වැඩසටහන් මුරපදය", "프록시": "ප්‍රතියුක්තය", "플러그인": "ප්ලගීන", "플러그인을 추가하시겠습니까?": "ඔබට මෙම ප්ලගිනය එක් කිරීමට අවශ්‍ය බව විශ්වාසද?", "플레이리스트": "Playlist", "플레이리스트 파일에 번호 매기기": "ධාවන ලැයිස්තු තුළ ගොනු ගණන් කරන්න", "플레이리스트 한 폴더에 다운로드": "ධාවන ලැයිස්තුව එක් ෆෝල්ඩරයකට බාගන්න", "플로팅 미리보기": "පාවෙන පෙරදසුන", "피드백": "ප්‍රතිචාරය", "필터": "පෙරහන", "필터창": "පෙරහන", "하나 이상의 타입을 선택해주세요.": "අවම වශයෙන් එක් වර්ගයක් තෝරන්න.", "하위폴더 포함": "උප ෆෝල්ඩර ඇතුළත් කරන්න", "학습 중...": "ඉගෙන ගන්නවා...", "한 줄 당 한 트래커 URL": "පේළියකට එක් ට්රැකර් URL එකක්", "항상 위": "සෑම විටම ඉහළින්", "항상 위 OFF": "Always on top OFF", "항상 위 ON": "Always on top ON", "해당 링크로 이동합니다": "විවෘත සබැඳිය...", "해상도": "විභේදනය", "현재 버전: v{}\n최신 버전: v{}": "වත්මන් අනුවාදය: v{}\nනවතම අනුවාදය: v{}", "현재 작업 없음": "There are no current tasks", "호스트": "සත්කාරක", "화 선택": "කථාංග තෝරන්න", "화질": "ගුණාත්මක", "확인": "OK", "후원": "සහාය", "휴지통으로 이동": "ප්‍රතිචක්‍රීකරණ බඳුනට යන්න" } } ================================================ FILE: translation/tr_tr.hdl ================================================ { "lang": "tr", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "Folders must be more than one if \"Exclude same sources\" is turned on", "#Cancel#": "İptal", "#EB#": "{} EB", "#EMPTY#": "Empty (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "OK", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "Appearance", "#boss_invalid_pw#": "Geçersiz Parola!", "#boss_pw#": "Parola:", "#byte#": "{} byte", "#bytes#": "{} bytes", "#click#": "Tıkla", "#combo_hour#": "{} Saat", "#combo_hours#": "{} Saat", "#combo_min#": "{} Dakika", "#combo_mins#": "{} Dakika", "#combo_sec#": "{} Sec", "#combo_secs#": "{} Secs", "#date01#": "Ocak {d}", "#date01y#": "Ocak {d}, {y}", "#date02#": "Şubat {d}", "#date02y#": "Şubat {d}, {y}", "#date03#": "Mart {d}", "#date03y#": "Mart {d}, {y}", "#date04#": "Nisan {d}", "#date04y#": "Nisan {d}, {y}", "#date05#": "Mayıs {d}", "#date05y#": "Mayıs {d}, {y}", "#date06#": "Haziran {d}", "#date06y#": "Haziran {d}, {y}", "#date07#": "Temmuz {d}", "#date07y#": "Temmuz {d}, {y}", "#date08#": "Ağustos {d}", "#date08y#": "Ağustos {d}, {y}", "#date09#": "Eylül {d}", "#date09y#": "Eylül {d}, {y}", "#date10#": "Ekim {d}", "#date10y#": "Ekim {d}, {y}", "#date11#": "Kasım {d}", "#date11y#": "Kasım {d}, {y}", "#date12#": "Aralık {d}", "#date12y#": "Aralık {d}, {y}", "#developed_by#": "Developed by Kurt Bestor", "#dirformat_artist#": "Some artist", "#dirformat_group#": "Some group", "#dirformat_lang#": "English", "#dirformat_series#": "Some series", "#dirformat_title#": "Some title", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "All Files {}", "#filter_bmk#": "Bookmark Files {}", "#filter_cookie#": "Netscape HTTP Çerez Dosyaları (*.txt)", "#filter_hdfb#": "Hitomi Downloader Filter bookmarks {}", "#filter_hdk#": "Hitomi Downloader Shortcuts {}", "#filter_hdl#": "Hitomi Downloader Linguist {}", "#filter_hds#": "Hitomi Downloader Scripts {}", "#filter_hdt#": "Hitomi Downloader Tasks {}", "#filter_image#": "Images {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "Tarayıcı gerekiyor;--safemode Kullanın", "#invalid_loginRequired#": "Giriş Gerekiyor; Çerezlerinizi Güncelleyin", "#invalid_loginRequired2#": "Giriş Gerekiyor; Lütfen Giriş Yapın", "#invalid_outdatedExtension#": "Eklenti eski; Eklentiyi Güncelleyin", "#invalid_unknownSite#": "Bilinmeyen Site", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "Yüklüyor: {}", "#new_group#": "New group", "#new_item#": "Yeni", "#p#": "{}p", "#recomm_all_langs#": "Tüm diller", "#recomm_artist#": "Yapımcı", "#recomm_main#": "It analyzes the galleries in the download folder and recommends artists.\n\nThe accuracy shown in the results is within the given galleries.\nThe more galleries you have, the better (100+ is recommended).\n\nYou currently have {item} galleries:", "#recomm_score#": "Puan", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "Her", "#setting_autosaveR#": "", "#setting_incompleteL#": "Ardından", "#setting_incompleteR#": "", "#t_etc#": "Etc", "#t_file#": "File", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "Blue", "#tag_gray#": "Gray", "#tag_green#": "Green", "#tag_orange#": "Orange", "#tag_purple#": "Purple", "#tag_red#": "Red", "#tag_yellow#": "Yellow", "#task_artist#": "Yapımcı", "#task_date#": "Tarih", "#task_done#": "Bitti", "#task_folder#": "Klasör", "#task_incomplete#": "Tamamlanmadı", "#task_input#": "Girdi", "#task_invalid#": "Geçersiz", "#task_multiple#": "Çoklu", "#task_range#": "Range", "#task_single#": "Tekli", "#task_site#": "Site", "#task_status#": "Durum", "#task_title#": "Başlık", "#task_type#": "Tür", "#task_url#": "URL", "#task_zipfile#": "ZipFile", "#torrent_anon#": "Tracker'lar için genel bir user-agent kullanılacaktır. (Gizli Torrent'ler Haric).
Yerel IPv4 ve IPv6 adresiniz gizli tracker'lara sorgu için gönderilmez.
Announce_ip yapılandırılırsa, izleyicilere gönderilmeyecektir.
DHT modu devre dışı bırakılacaktır.", "#translation#": "Translation", "50개씩 끊어서 검색": "50'li paraçalar halinde ara", "DPI 우회": "DPI Baypas", "DPI 우회 제외 도메인": "Domains excluded from DPI bypass", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "\"DPI Baypas\" kapalı. Bazı sitelerde çalışmayabilir.", "E(x)Hentai 로그인 쿠키 필요": "E(x)Hentai giriş çerezleri gerekiyor", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "IP adresiniz geçici olarak kilitlendi. Lütfen biraz sonra tekrar deneyin.", "PDF 생성": "PDF Oluştur", "UI 스케일 ({}%)": "Arayüz Boyutu ({}%)", "URL을 입력하세요": "Lütfen birkaç URL girin", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "[İndir]'e basarak indirin. [Tamam]'a basarak çıkış yapın.", "reCAPTCHA 풀기": "reCAPTCHA'yı çöz", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {day}d {hour}h {min}m {sec}s: {id}", "{hour}시간 {min}분 {sec}초": "{hour}sa {min}dk {sec}sn", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "{hour}sa {min}dk {sec}sn içinde {id}'ı yeniden başlat", "{min}분 {sec}초 뒤 다시 시작: {id}": "{min}dk {sec}sn içinde {id}'ı yeniden başlat", "{sec}초 뒤 다시 시작: {id}": "{sec}sn içinde {id}'ı yeniden başlat", "{} 개 선택": "{} iş seçili", "{} 개 찾음": "{} bulundu", "{} 개의 작업들이 있습니다": "{} iş var", "{} 개의 진행 중인 작업이 있습니다.": "{} çalışan iş var", "{} 를 제외 태그에 추가했습니다": "Added {} to the exclusion tag list", "{} 설정": "{} Ayarları", "{} 시간 뒤 다시 시작": "Restart in {} hours", "{} 시간 전 데이터": "Data; {} hours ago", "{} 일 뒤 다시 시작": "Restart in {} days", "{} 일 전 데이터": "Data; {} days ago", "{}개 작업의 첫 번째 파일을 엽니다.": "Open first files for each {} tasks.", "{}개의 불완전한 작업을 다시 시작합니다.": "Restart {} incomplete tasks.", "{}개의 완료된 작업을 목록에서 제거합니다.": "Remove {} complete tasks from the list.", "{}개의 완료된 작업을 제거합니다.": "Remove {} completed tasks.", "{}개의 작업을 다시 시작합니다.": "Restart {} tasks.", "『 {} 』는 이미 북마크되어 있습니다": "『 {} 』is already bookMartked", "『 {} 』를 복사했습니다": "『 {} 』Copied", "『 {} 』를 북마크로부터 불러왔습니다": "『 {} 』is loaded from bookMartks", "『 {} 』를 북마크에서 불러왔습니다": "『 {} 』is loaded from bookMartks", "『 {} 』를 북마크했습니다": "『 {} 』is bookMartked", "『 {} 』를 저장 폴더에서 불러왔습니다": "『 {} 』is loaded from the download folder", "가능하면 일본어 제목 사용": "Use Japanese title if available", "가능한 경우 챕터 마커 추가": "Add chapter markers if available", "가져오기": "Import", "가져오기 실패": "Failed to import", "간단 검색": "Simple search", "같은 소스 제외": "Exclude same sources", "개": "items", "개별 다운로드는 지원하지 않습니다": "Download a single post is not supported", "갤러리 넘버": "Gallery ID", "갤러리 넘버 복사": "Copy gallery ID", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "Error occurred during copying gallery IDs.", "갤러리 작업 정보... (&I)": "Gallery info... (&I)", "갤러리 정보": "Gallery info", "갤러리 정보 파일 (info.txt) 생성": "Create gallery info file (info.txt)", "갯수": "Count", "갱신 간격": "Refresh interval", "거꾸로": "Reversed", "검색": "Search", "검색 데이터": "Search data", "검색 도중에 사용할 수 없는 기능입니다.": "This function is locked during search.", "검색 범위": "Search Range", "검색 순서": "Search order", "검색 필터": "Search filter", "검색기": "Searcher", "검색어": "Search Keywords", "검색어 자동 완성": "Autocomplete keywords", "결과": "Result", "결과 저장": "Save the result", "경고 없이 삭제": "Delete without alert", "경로를 선택하세요": "Choose a path", "계속 검색": "Search next", "계정": "Username", "계정 / 패스워드": "Username / Password", "고급": "Advanced", "고급 검색": "Advanced search", "고급 옵션": "Advanced options", "고정": "Pin", "고정 해제": "Unpin", "공식 스크립트 && 플러그인": "Official scripts && plugins", "공인 IP: {}": "Public IP: {}", "관리자 권한 없이 실행": "Run without administrator privileges", "관리자 권한 필요": "Administrator privileges required", "광고 스킵": "Skip ads", "그대로": "Normal", "그룹": "Groups", "그룹 (Groups)": "Groups", "그룹 안의 모든 작업 다시 시작": "Restart all tasks in this group", "그룹 이름": "Group name", "그룹 펼치기 / 접기": "Expand / Collapse groups", "그룹 합쳐서 불러오기": "Load all groups together", "그룹명 복사 (&G)": "Copy group names (&G)", "그룹으로 이동": "Move to group", "그룹을 포함하는 그룹은 만들 수 없습니다.": "Groups can't contain groups.", "그룹이 없습니다": "No groups", "기본": "Default", "기본 데이터": "Default data", "기본 데이터 다운로드": "Download Default data", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "You can create a group in default sort mode only.", "기본값": "Default value", "기타": "Etc.", "깊은 모델": "Deep model", "끝내기": "Quit", "날짜": "Date", "낮음": "Low", "내보내기": "Export", "내보내기 실패": "Failed to export", "내용 보기": "View script", "내장 웹브라우저": "Built-in web browser", "내장 이미지 뷰어": "Built-in image viewer", "네트워크": "Network", "녹화": "Recording", "녹화 중...": "Recording...", "녹화 중지": "Stop recording", "높음": "High", "다른 동영상 사이트에도 적용됩니다.": "Applies to other video sites also.", "다시 시작 (&S)": "Restart (&S)", "다시 시작 실패; 복구됨": "Failed to retry; Reverted", "다운로드": "Download", "다운로드 & 제거": "Download & Remove", "다운로드 && 제거": "Download && Remove", "다운로드 (&D)": "Download (&D)", "다운로드 날짜 표시": "Show dates downloaded", "다운로드 속도": "Download speed", "다운로드 완료": "Download complete", "다운로드 완료 후 자동 제거": "Remove automatically after complete download", "다운로드 일시 정지 / 재개": "Download Pause / Resume", "다운로드 중": "Downloading", "다운로드가 완료되면 알림": "Show notification when downloading is finished", "다운로드가 완료될 때까지 절전모드 방지": "Prevent system sleep until downloads are finished", "다운로드하기 전에 파일 고르기": "Select files before download", "다운로드하지 않음": "Don't download", "다운로드한 작품만": "Only downloaded galleries", "다음 검색시 더 빠르게 검색": "Improve performance the next time", "다음 작업들이 목록에서 제거됩니다:": "The following tasks will be removed from the list:", "다음 파일들이 삭제됩니다:": "The following files will be deleted:", "다크 모드": "Dark mode", "단일 파일": "Single file", "단축키": "Shortcuts", "단축키 내보내기": "Export Shortcuts", "단축키 내보내기 성공": "Shortcuts are successfully exported", "단축키 불러오기": "Import Shortcuts", "단축키 불러오기 성공": "Shortcuts are successfully imported", "단축키 수정": "Edit shortcuts", "단축키 초기화 성공": "Shortcuts are successfully reseted", "닫기 버튼으로 트레이로 최소화": "Close button minimizes to system tray", "대기 중": "Waiting", "대기 중...": "Waiting...", "데이터 다운로더": "Data Downloader", "데이터 분류 중...": "Classifying data...", "데이터 분석 중...": "Analyzing data...", "데이터 없음": "No Data", "데이터 읽는 중...": "Reading data...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "There is no data.\nPlease download data from the Menu.", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "There is no data.\nPlease download data from the Searcher", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "Your data is out of date over a week.\nPlease update the data.", "데이터를 다운로드하는 도중에 실패했습니다.": "Failed to download data", "데이터를 모두 받았습니다!": "All data downloaded!", "도구": "Tools", "도구창": "Tool window", "도움말": "Help", "동영상": "Video", "동영상 변환...": "Convert video...", "뒤 100 페이지": "Last 100 pages", "드래그 & 드랍해서 바꾸세요:": "Use Drag & Drop to change:", "디더링": "Dither", "디버그": "Debug", "디스코드": "Discord", "라이선스": "License", "랜덤으로 하나 선택": "Randomly select one", "로그...": "Log...", "로그인": "Login", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "Failed to login: {}{}\nPlease see [Options - Preferences - Pixiv Setting - Login].", "로그인 중...": "Logging in...", "로그인 테스트": "Test Login", "로드 중: {}": "Loading: {}", "로컬 파일 감지": "Detect local files", "로컬 파일로부터 새 작업 만들기": "Create a new task from the local files", "를 북마크에서 지웠습니다": "is removed from bookMartks", "리트윗 제외": "Exclude retweets", "리트윗 포함": "Include retweets", "릴리즈 노트": "Release note", "링크 열기": "Open link", "링크 주소 복사": "Copy link", "링크 주소 복사 (&C)": "Copy link (&C)", "마무리 중...": "Finish...", "멈춤": "Stopped", "메뉴": "Menu", "메모리 사용량": "Memory usage", "메모리 사용량 표시": "Show memory usage", "메시지 상자": "Message box", "모델": "Model", "모델 생성 중...": "Creating model...", "모델: {}": "Model: {}", "모두": "All", "모두 삭제": "Delete all", "모두 선택": "Select all", "모든 갤러리 넘버를 복사했습니다.": "Copied all gallery IDs.", "모든 언어": "All languages", "모든 작업 완료": "All tasks complete", "모든 작업 완료 후": "When all tasks are complete", "모든 작업이 완료되면 알림 보이기": "Show notifications when all tasks are complete", "목록": "List", "목록 주소를 입력해주세요": "Please type a list URL", "목록 지우기": "Clear list", "목록에서 제거": "Remove from the list", "목록에서 폴더 제거": "Remove folder from the list", "목록을 모두 지울까요?": "Are you sure you want to clear the list?", "미리보기": "Preview", "미리보기 크기": "Preview size", "배경 이미지": "Background image", "배경 이미지 변경": "Change background image", "배경 이미지 초기화": "Reset background image", "버전 확인": "Check updates", "번역": "Translate", "베타 버전 설치": "Install beta versions", "변경할 최대 크기": "Maximum size", "변경할 최소 크기": "Minimum size", "변환 중...": "Converting...", "보기": "View", "보통": "Normal", "부팅 시 실행": "Start at boot", "북마크": "BookMartks", "북마크 가져오기": "Import BookMartks", "북마크 가져오기 실패": "Failed to import bookMartks", "북마크 내보내기": "Export BookMartks", "북마크 내보내기 실패": "Failed to export bookMartks", "북마크를 가져왔습니다": "BookMartks are imported", "북마크를 내보냈습니다": "BookMartks are exported", "북마크를 모두 삭제합니다.": "Remove all bookMartks.", "북마크를 모두 삭제했습니다.": "Removed all bookMartks.", "불러오기": "Load", "불완전한 작업 모두 다시 시작": "Restart all incomplete tasks", "불완전한 작업 자동으로 다시 시작": "Restart incomplete tasks automatically", "붙여넣고 다운로드": "Paste and Download", "뷰어... (&V)": "&Viewer...", "브라우저로 보기": "Show in browser", "브라우저로 보기 (&B)": "Show in browser (&B)", "비디오 코덱 우선순위": "Video codec priority", "비슷한 이미지 포함 (느림)": "Include similar images (Slow)", "비율 유지": "Aspect ratio", "비율 유지 - 꽉 차게": "Aspect ratio - fill", "비정상적인 로그인 시도": "Abnormal login attempt", "빠른 시작을 위한 작업 레이지 로딩": "Lazy load tasks for quick start", "빠른 실행 도구 모음 사용자 지정": "Customize Quick Access Toolbar", "뽑기": "Random", "뽑을 갯수": "Number of galleries", "사용법": "How to use", "사용법...": "How to use...", "사용자 지정 테마 색": "Custom theme color", "사이드바": "Sidebar", "사이트": "Site", "사이트 추가": "Site support", "사이트를 추가했습니다": "Site support added", "삭제된 데이터": "Deleted data", "삭제된 데이터 다운로드": "Download Deleted data", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "There is no Deleted data.\nPlease download data from the Menu.", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "Failed to download Deleted data", "삭제된 데이터를 모두 받았습니다!": "Download complete: Deleted data", "삭제시 휴지통으로 보냄": "Use recycle bin", "상태": "Status", "새 그룹 만들기": "Create a new group", "새 버전이 있습니다. 업데이트 하실래요?": "There is a new version. Would you like to update?", "새로고침": "Refresh", "샘플": "Sample", "서명": "Certificate", "서버": "Server", "선택 화 다운로드": "Select chapters && Download", "선택된 작업들 내보내기": "Export selected tasks", "선택된 작업이 없습니다": "No selected tasks", "선택하세요:": "Select:", "선택한 항목 중에서 자동 선택": "Auto select within selected items", "선호 언어": "Preferred language", "설명": "Comment", "설정": "Preferences", "설정 (Preferences)": "Preferences", "설정을 따름": "Follow preferences", "성공: {}\n실패: {}": "Success: {}\nFailed: {}", "소리": "Sound", "수동": "Manual", "수동 업데이트": "Manual", "수정...": "Edit...", "순서 변경": "Reorder", "숨김 키": "Boss-Key", "숫자": "Number", "스레드": "Threads", "스레드 생성 중...": "Starting threads...", "스크롤 속도 ({}x)": "Scroll speed ({}x)", "스크립트": "Script", "스크립트 가져오기": "Import script", "스크립트 작성법": "How to write a script", "스크립트를 실행하시겠습니까?": "Are you sure you want to run this script?", "스크립트를 읽는 중 오류가 발생했습니다": "Error occurred while reading the script", "스토리 읽는 중...": "Reading stories...", "스토리 포함": "Include stories", "시딩": "Seeding", "시딩 중지": "Stop seeding", "시딩 하지 않음": "No seeding", "시리즈": "Series", "시리즈 (Series)": "Series", "시리즈가 없습니다": "No series", "시리즈명 복사 (&S)": "Copy series names (&S)", "시스템": "System", "시스템 설정 사용": "Use system setting", "시스템 종료": "Shutdown System", "시스템 트레이": "System tray", "시작 후 다운로드": "Downloaded this run", "시작 후 지난 시간": "Elapsed time this run", "실패": "Fail", "실험 기능": "Experimental", "썸네일": "Thumbnail", "썸네일 고정": "Fix thumbnail", "썸네일 다운로드": "Download thumbnails", "썸네일 숨기기": "Hide thumbnails", "썸네일 크기": "Thumbnail size", "썸네일을 선택하세요": "Choose a thumbnail", "아니오(&N)": "&No", "아무것도 안 함": "Do nothing", "아이콘": "Icon", "압축": "Compression", "압축 형식": "Format", "압축파일 연결 프로그램": "Open compressed files by", "앞 100 페이지": "First 100 pages", "얕은 모델": "Shallow model", "언어": "Language", "언어 (Language)": "Language", "언어 (Languages)": "Languages", "업데이트": "Update", "업데이트 중...": "Updating...", "업데이트 체크 중...": "Checking for updates...", "업로드": "Upload", "연결 프로그램 변경": "Choose the program to use to open", "열기": "Open", "예(&Y)": "&Yes", "예상치 못한 오류로 다운로드에 실패했습니다.": "Failed to download by unexpected error.", "예시": "Example", "오디오 코덱 우선순위": "Audio codec priority", "오디오 트랙": "Audio track", "오류": "Error", "올바르지 않은 범위입니다": "Invalid range", "올바르지 않은 주소입니다": "Invalid URL", "올바르지 않은 형식의 검색 필터입니다": "Invalid syntax error with filter", "올바르지 않은 형식의 스크립트입니다": "Invalid format script", "옵션": "Options", "옵션 (JSON 포맷)": "Options (JSON format)", "옵션 (Options)": "Options", "완료": "Finished", "완료된 작업 모두 제거": "Remove all complete tasks", "완료됨으로 표시": "Martk as complete", "완전 삭제": "Delete permanently", "우선순위": "Priority", "우선순위 변경": "Change priority", "움짤": "Ugoira", "움짤 변환...": "Convert Ugoira...", "원본": "Original", "원본 이미지 다운로드": "Download original images", "원본 크기보다 크게 바뀌지는 않습니다": "The size will not be larger than original size", "원본 파일 삭제": "Delete downloaded files", "원하는 인공신경망 모델을 고르세요:": "Choose the artificial neural network model you want:", "웹브라우저": "WebBrowser", "웹툰 제외": "Exclude Webtoons", "유사도": "Similarity", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "Invalid Account / Password", "유효한 계정입니다": "Valid account", "음소거": "Mute", "음악 파일에 앨범아트 삽입": "Add album cover to audio files", "음원": "Audio", "음질": "Sound quality", "이동": "Move", "이동할 수 없습니다: {}": "Can not move: {}", "이름": "Name", "이름 변경": "Rename", "이름을 얻는 도중 실패했습니다": "Failed to read name", "이미 다운로드한 작품 제외": "Exclude already downloaded galleries", "이미 모든 그룹이 추가되어 있습니다": "All groups have already been added", "이미 모든 시리즈가 추가되어 있습니다": "All series have already been added", "이미 모든 작가가 추가되어 있습니다": "All artists have already been added", "이미 모든 캐릭터가 추가되어 있습니다": "All characters have already been added", "이미 추가한 작업 다시 시작할지 물어봄": "Ask to retry tasks already in the list", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "This task already in the list. Do you want to download it again?", "이미 추가한 플러그인입니다": "This plugin already in the list", "이미 포함하는 그룹이 있습니다.": "There is already a group that includes tasks.", "이미지": "Image", "이미지 정보 캐시": "Cache image infos", "이미지 포맷 변환": "Change image format", "이미지를 읽는 중 실패": "Failed to read images", "익명 모드": "Anonymous mode", "인코딩": "Encoding", "일반": "General", "일시 정지": "Pause", "읽기 중지": "Stop reading", "읽는 중...": "Reading...", "자동": "Auto", "자동 녹화": "Auto recording", "자동 새로고침 & 스크롤": "Auto Refresh & Scroll", "자동 생성 자막 포함": "Include automatic captions", "자동 선택": "Auto select", "자동 업데이트": "Automatic", "자동 저장": "Autosave", "자막": "Subtitle", "자세한 정보": "Details", "자세한 정보 보기": "Show Details", "작가": "Artists", "작가 (Artists)": "Artists", "작가 이름": "Artist name", "작가 추천": "Recommend artists", "작가 합쳐서 불러오기": "Load all artists together", "작가가 없습니다": "No artists", "작가명 복사 (&A)": "Copy artist names (&A)", "작게": "Small", "작성자": "Author", "작업": "Tasks", "작업 개수": "Number of tasks", "작업 기록": "Task history", "작업 기록 초기화 성공": "Task history cleared successfully", "작업 기록이 없습니다": "No task history", "작업 당 최대 연결": "Maximum connections per task", "작업 만들기 실패": "Failed to create tasks", "작업 목록 폭": "Task list width", "작업 수정": "Edit task", "작업 수정...": "Edit task...", "작업 완료": "Task complete", "작업 완료 후": "After task complete", "작업 왼쪽에서 순서 변경": "Reorder on the left side", "작업 용량": "File size of tasks", "작업 정보": "Task info", "작업 정보... (&I)": "Info... (&I)", "작업 타입?": "Task type?", "작업들 가져오기": "Import tasks", "작업들 내보내기": "Export tasks", "작업들을 가져올까요?": "Do you want to import tasks?", "작업들을 가져왔습니다": "Tasks imported", "작업들을 내보냈습니다": "Tasks exported", "작업이 아직 완료되지 않았습니다": "Task is not finished yet", "작업이 완료되면 알림 보이기": "Show notifications when tasks are complete", "작품 목록 가져오기": "Import gallery list", "작품 목록 내보내기": "Export gallery list", "잠금": "Lock", "잠금 해제": "Unlock", "장": "pages", "재개": "Resume", "재시작 후 적용됩니다": "Applies after restart", "저사양 모드": "Low spec mode", "저장": "Save", "저장 && 종료": "Save && Quit", "저장 실패": "Failed to save", "저장 완료": "Saved", "저장 중...": "Saving...", "저장 폴더": "Download folder", "저장 폴더 변경...": "Change Download folder...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "Copy all gallery IDs in download folder", "저장 폴더에 있는 모든 작가 불러오기": "Load all artists in the download folder", "저장... (&S)": "&Save...", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "No config file; Press [F1] to read \"How to use\"", "적어도 {} 개의 작품이 필요합니다.": "At least {} galleries are required.", "점수": "Score", "정규식 문법": "Regex syntax", "정규식으로 찾기": "Search by Regex", "정렬 기준": "Sort by", "정말 단축키를 초기화하시겠습니까?": "Are you sure you want to reset shortcuts?", "정말 목록에서 제거하시겠습니까?": "Are you sure you want to remove from the list?", "정말 삭제하시겠습니까?": "Are you sure you want to delete?", "정말 설정을 초기화하시겠습니까?": "Are you sure you want to reset the preferences?", "정말 작업 기록을 초기화하시겠습니까?": "Are you sure you want to clear task history?", "정말 종료하시겠습니까?": "Are you sure you want to quit?", "정말 중지하시겠습니까?": "Are you sure you want to stop?", "정말 쿠키를 초기화하시겠습니까?": "Are you sure you want to clear cookies?", "정보": "About", "정보...": "About...", "정확도": "Accuracy", "제거": "Remove", "제목": "Title", "제목 (Title)": "Title", "제목 복사 (&T)": "Copy title (&T)", "제외 태그": "Tags to exclude", "제외 태그 목록에 그룹 추가": "Add groups to the exclusion tag list", "제외 태그 목록에 시리즈 추가": "Add series to the exclusion tag list", "제외 태그 목록에 작가 추가": "Add artists to the exclusion tag list", "제외 태그 목록에 캐릭터 추가": "Add characters to the exclusion tag list", "조각 표시": "Show pieces", "종료": "Quit", "종료 중...": "Quit...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "Drag horizontally: ±1\nDrag vertically: ±100", "주소": "Address", "주소 or 갤러리 넘버": "URL or gallery id", "주소를 입력해주세요": "Please type some URLs", "중간": "Medium", "중단": "Abort", "중복 이미지 찾기": "Duplicate image finder", "중복 이미지 찾는 중": "Finding duplicate images", "중복 제거": "Trim duplicates", "지원하는 사이트:": "Supported sites:", "지원하는 토큰": "Supported tokens", "지정한 페이지만 다운로드합니다.": "Download selected pages only.", "직접 다운로드": "Direct download", "진행도": "Progress", "참고 작품: {} 개": "Reference: {} galleries", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "Please see: Help - How to use (F1) - Load cookies", "창 보이기 / 숨기기": "Show / Hide windows", "창 위치 크기 기억": "Remember window position and size", "찾기...": "Finder...", "채널 영상 역순으로 다운로드": "Download channel videos in reverse order", "첫 번째 파일 열기": "Open the first file", "첫 번째 파일 열기 (&O)": "Open the first file (&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "First page, 10 ~ 20th pages, Last page", "체인지로그": "Changelog", "초기화": "Reset", "최대 다운로드 속도": "Maximum download speed", "최대 동시 작업": "Maximum concurrent tasks", "최대 페이지 제한": "Maximum page limit", "최소화 버튼으로 트레이로 최소화": "Minimize button minimizes to system tray", "최신 버전:": "Latest:", "추가한 날짜": "Date added", "취소": "Cancel", "캐릭터": "Characters", "캐릭터 (Characters)": "Characters", "캐릭터 이름": "Character name", "캐릭터가 없습니다": "No characters", "캐릭터명 복사 (&C)": "Copy character names (&C)", "코멘트": "Comment", "코멘트 수정": "Edit comment", "쿠키": "Cookies", "쿠키 내보내기": "Export cookies", "쿠키 내보내기 성공": "Cookies are successfully exported", "쿠키 불러오기": "Load cookies", "쿠키 불러오기 성공": "Cookies are successfully imported", "쿠키 초기화 성공": "Cookies are successfully cleared", "쿠키가 없습니다": "No cookies", "쿠키를 업데이트하세요": "Update your cookies", "크게": "Large", "크기": "Size", "크기 조절": "Resize", "크기 조절...": "Resizing...", "크롬 확장프로그램 연동에 실패했습니다.": "Chrome extension link failed.", "클라이언트": "Clilent", "클래식": "Classic", "클립보드에서 자동 추가": "Clipboard monitor", "타입": "Types", "타입 (Types)": "Types", "태그": "Tags", "태그 \"{}\" 제거": "Remove Tag \"{}\"", "태그 \"{}\" 추가": "Add Tag \"{}\"", "태그 (Tags)": "Tags", "태그 :": "Tag :", "태그 설정": "Tag setting", "태그 수정": "Edit tags", "태그 없음": "No tags", "테마": "Theme", "토렌트 고급 옵션 초기화": "Reset torrent advanced options", "토렌트 추가": "Add Torrent", "토렌트 파일 연결": "Associate with torrent files", "토큰": "Tokens", "통계": "Statistics", "통과": "Pass", "투명도": "Opacity", "트래커 수정": "Edit trackers", "트래커 추가": "Add trackers", "트레이로 전환되었습니다": "Minimized to system tray", "트레이로 최소화": "Minimize to system tray", "트레이로 최소화 알림 보이기": "Show minimize notifications in the tray", "트레이에서 알림 보이기": "Show notifications in tray", "파일": "File", "파일 목록": "File list", "파일 삭제": "Delete files", "파일 삭제 (&X)": "Delete files (&X)", "파일 수": "Number of files", "파일 스캔 중": "Scanning files", "파일 유형 제외": "Exclude file types", "파일 체크 중...": "Checking files...", "파일 크기": "Filesize", "파일 형식": "Format", "파일 형식 물어보기": "Ask the format", "파일명": "Filename", "파일명 형식": "Filename format", "파일을 고르세요:": "Select files:", "파일을 선택하세요": "Select a file", "파일의 수정한 날짜를 업로드 날짜로 변경": "Change the file's modified date to the upload date", "파일이 없습니다": "No files", "패스워드": "Password", "퍼지로 찾기": "Search by Fuzzy", "페이지 읽는 중...": "Reading pages...", "페이지 지정": "Select pages", "페이지 지정 다운로드": "Select pages && Download", "페이지 지정 다운로드 기본값": "Default value for \"Select pages && Download\"", "페이지를 선택해주세요": "Please select pages", "페이지를 읽는 중에 오류가 발생했습니다": "An error occured when trying to read pages", "평범하게 찾기": "Search by Default", "포트": "Port", "포함 태그": "Tags to include", "폭 맞춤": "Fit to width", "폰트": "Font", "폰트 변경...": "Change font...", "폰트 선택": "Select Font", "폰트 초기화": "Reset font", "폴더": "Folder", "폴더 && 압축파일": "Folder && Zip Files", "폴더 바로가기": "Folder shortcuts", "폴더 열기": "Open Folder", "폴더 이동": "Move folder", "폴더 추가": "Add folder", "폴더가 없습니다": "No folder", "폴더들": "Directories", "폴더들을 선택하세요": "Select folders", "폴더를 선택하세요": "Select a folder", "폴더를 추가해주세요": "Please add some folders", "폴더명 형식": "Folder format", "표지 검색 실패": "Failed to search cover", "표지 검색...": "Search cover...", "프로그램 끝내기": "Quit the program", "프로그램 패스워드": "Program password", "프록시": "Proxy", "플러그인": "Plugins", "플러그인을 추가하시겠습니까?": "Are you sure you want to add this plugin?", "플레이리스트": "Playlist", "플레이리스트 파일에 번호 매기기": "Numerate files in playlists", "플레이리스트 한 폴더에 다운로드": "Download playlist to one folder", "플로팅 미리보기": "Floating preview", "피드백": "Feedback", "필터": "Filter", "필터창": "Filter", "하나 이상의 타입을 선택해주세요.": "Choose at least one type.", "하위폴더 포함": "Include subfolders", "학습 중...": "Learning...", "한 줄 당 한 트래커 URL": "One tracker URL per line", "항상 위": "Always on top", "항상 위 OFF": "Always on top OFF", "항상 위 ON": "Always on top ON", "해당 링크로 이동합니다": "Open link...", "해상도": "Resolution", "현재 버전: v{}\n최신 버전: v{}": "Current version: v{}\nLatest version: v{}", "현재 작업 없음": "There are no current tasks", "호스트": "Host", "화 선택": "Choose the episodes", "화질": "Quality", "확인": "OK", "후원": "Support", "휴지통으로 이동": "Move to Recycle Bin" } } ================================================ FILE: translation/tr_vi.hdl ================================================ { "lang": "vi", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "Folders must be more than one if \"Exclude same sources\" is turned on", "#Cancel#": "Hủy", "#EB#": "{} EB", "#EMPTY#": "Empty (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "OK", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "Appearance", "#boss_invalid_pw#": "Mật khẩu không hợp lệ!", "#boss_pw#": "Mật khẩu:", "#byte#": "{} byte", "#bytes#": "{} bytes", "#click#": "Click", "#combo_hour#": "{} Giờ`", "#combo_hours#": "{} Giờ", "#combo_min#": "{} Phút", "#combo_mins#": "{} Phút", "#combo_sec#": "{} Sec", "#combo_secs#": "{} Secs", "#date01#": "{d} Tháng 1", "#date01y#": "{d} Th.1, {y}", "#date02#": "{d} Tháng 2", "#date02y#": "{d} Th.2, {y}", "#date03#": "{d} Tháng 3", "#date03y#": "{d} Th.3, {y}", "#date04#": "{d} Tháng 4", "#date04y#": "{d} Th.4, {y}", "#date05#": "{d} Tháng 5", "#date05y#": "{d} Th.5, {y}", "#date06#": "{d} Tháng 6", "#date06y#": "{d} Th.6, {y}", "#date07#": "{d} Tháng 7", "#date07y#": "{d} Th.7, {y}", "#date08#": "{d} Tháng 8", "#date08y#": "{d} Th.8, {y}", "#date09#": "{d} Tháng 9", "#date09y#": "{d} Th.9, {y}", "#date10#": "{d} Tháng 10", "#date10y#": "{d} Th.10, {y}", "#date11#": "{d} Tháng 11", "#date11y#": "N{d} Th.11, {y}", "#date12#": "{d} Tháng 12", "#date12y#": "{d} Th.12, {y}", "#developed_by#": "Developed by Kurt Bestor", "#dirformat_artist#": "Some artist", "#dirformat_group#": "Some group", "#dirformat_lang#": "English", "#dirformat_series#": "Some series", "#dirformat_title#": "Some title", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "All Files {}", "#filter_bmk#": "Bookmark Files {}", "#filter_cookie#": "Tệp Netscape HTTP Cookie (*.txt)", "#filter_hdfb#": "Hitomi Downloader Filter bookmarks {}", "#filter_hdk#": "Hitomi Downloader Shortcuts {}", "#filter_hdl#": "Hitomi Downloader Linguist {}", "#filter_hds#": "Hitomi Downloader Scripts {}", "#filter_hdt#": "Hitomi Downloader Tasks {}", "#filter_image#": "Images {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "Hãy dùng --safemode vì trình duyệt yêu cầu", "#invalid_loginRequired#": "Đề nghị đăng nhập; Cập nhập cookies của bạn", "#invalid_loginRequired2#": "Login required; Please login", "#invalid_outdatedExtension#": "Tiện ích mở rộng đã hết hạn; Vui lòng cập nhập lại", "#invalid_unknownSite#": "Trang web không biết", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "Đang tải: {}", "#new_group#": "New group", "#new_item#": "Mục mới", "#p#": "{}p", "#recomm_all_langs#": "Tất cả ngôn ngữ", "#recomm_artist#": "Tác giả", "#recomm_main#": "It analyzes the galleries in the download folder and recommends artists.\n\nThe accuracy shown in the results is within the given galleries.\nThe more galleries you have, the better (100+ is recommended).\n\nYou currently have {item} galleries:", "#recomm_score#": "Điểm", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "Tất cả", "#setting_autosaveR#": "", "#setting_incompleteL#": "Sau", "#setting_incompleteR#": "", "#t_etc#": "Etc", "#t_file#": "File", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "Blue", "#tag_gray#": "Gray", "#tag_green#": "Green", "#tag_orange#": "Orange", "#tag_purple#": "Purple", "#tag_red#": "Red", "#tag_yellow#": "Yellow", "#task_artist#": "Tác giả", "#task_date#": "Ngày", "#task_done#": "Hoàn thành", "#task_folder#": "Tập tin", "#task_incomplete#": "Chưa hoàn thành", "#task_input#": "Nhập", "#task_invalid#": "Không phù hợp", "#task_multiple#": "Đa", "#task_range#": "Range", "#task_single#": "Một", "#task_site#": "Trang", "#task_status#": "Tình trạng", "#task_title#": "Tiêu đề", "#task_type#": "Loại", "#task_url#": "Đường dẫn", "#task_zipfile#": "Tệp zip", "#torrent_anon#": "A generic user-agent will be used for trackers (except for private torrents).
Your local IPv4 and IPv6 address won't be sent as query string parameters to private trackers.
If announce_ip is configured, it will not be sent to trackers.
The client version will not be sent to peers in the extension handshake.
The DHT node will be disabled.", "#translation#": "Translation", "50개씩 끊어서 검색": "Search in splits for 50 each", "DPI 우회": "Bỏ qua DPI", "DPI 우회 제외 도메인": "Domains excluded from DPI bypass", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "\"Bỏ qua DPI\" đã được tắt. Nên có thể sẽ không hoạt động ở một số trang.", "E(x)Hentai 로그인 쿠키 필요": "Cần có cookies đăng nhập của E(x)Hentai", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "Địa chỉ IP hiện tại của bạn tạm thời bị khóa. Hãy thử lại sau", "PDF 생성": "Tạo PDF", "UI 스케일 ({}%)": "UI scale ({}%)", "URL을 입력하세요": "Hãy nhập vào một vài đường dẫn", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "Nhấn [Tải xuống] để tải. Nhấn [OK] để thoát.", "reCAPTCHA 풀기": "giải reCAPTCHA", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {day}d {hour}h {min}m {sec}s: {id}", "{hour}시간 {min}분 {sec}초": "{hour} giờ {min} phút {sec} giây", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {hour}h {min}m {sec}s: {id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "Khởi động lại sau {min} phút {sec} giây: {id}", "{sec}초 뒤 다시 시작: {id}": "Restart in {sec}s: {id}", "{} 개 선택": "{} mục đã được chọn", "{} 개 찾음": "Đã tìm thấy {}", "{} 개의 작업들이 있습니다": "Có {} nhiệm vụ", "{} 개의 진행 중인 작업이 있습니다.": "Có {} nhiệm vụ đang được thực thi.", "{} 를 제외 태그에 추가했습니다": "Added {} to the exclusion tag list", "{} 설정": "{} Tùy chỉnh", "{} 시간 뒤 다시 시작": "Restart in {} hours", "{} 시간 전 데이터": "Dữ liệu; {} Tiếng trước", "{} 일 뒤 다시 시작": "Restart in {} days", "{} 일 전 데이터": "Dữ liệu; {} Ngày trước", "{}개 작업의 첫 번째 파일을 엽니다.": "Open first files for each {} tasks.", "{}개의 불완전한 작업을 다시 시작합니다.": "Khởi động lại {} nhiệm vụ chưa hoàn thành.", "{}개의 완료된 작업을 목록에서 제거합니다.": "Xóa {} nhiệm vụ đã hoàn thành khỏi danh sách.", "{}개의 완료된 작업을 제거합니다.": "Xóa {} nhiệm vụ đã hoàn thành.", "{}개의 작업을 다시 시작합니다.": "Restart {} tasks.", "『 {} 』는 이미 북마크되어 있습니다": "『 {} 』đã được thêm vào danh sách yêu thích", "『 {} 』를 복사했습니다": "『 {} 』 Đã sao chép", "『 {} 』를 북마크로부터 불러왔습니다": "『 {} 』 được tải lên từ danh sách yêu thích", "『 {} 』를 북마크에서 불러왔습니다": "『 {} 』được tải lên từ danh sách yêu thích", "『 {} 』를 북마크했습니다": "『 {} 』 là mục trong danh sách yêu thích", "『 {} 』를 저장 폴더에서 불러왔습니다": "『 {} 』được tải lên từ tệp tải xuống", "가능하면 일본어 제목 사용": "Dùng nhãn tiếng Nhật nếu có thể", "가능한 경우 챕터 마커 추가": "Add chapter markers if available", "가져오기": "Nhập vào", "가져오기 실패": "Nhập vào thất bại", "간단 검색": "Tìm đơn giản", "같은 소스 제외": "Exclude same sources", "개": "các mục", "개별 다운로드는 지원하지 않습니다": "Tải một bài đăng không được hỗ trợ", "갤러리 넘버": "ID Thư viện", "갤러리 넘버 복사": "Sao chép ID Thư viện", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "Lỗi xảy ra khi sao chép các ID Thư viện.", "갤러리 작업 정보... (&I)": "Thông tin thư viện... (&I)", "갤러리 정보": "Thông tin thư viện", "갤러리 정보 파일 (info.txt) 생성": "Tạo tệp thông tin thư viện (info.txt)", "갯수": "Đếm", "갱신 간격": "Refresh interval", "거꾸로": "Đảo ngược", "검색": "Tìm kiếm", "검색 데이터": "Dữ liệu tìm kiếm", "검색 도중에 사용할 수 없는 기능입니다.": "Chức năng này được khóa trong lúc tìm kiếm.", "검색 범위": "Phạm vi tìm kiếm", "검색 순서": "Trật tự tìm kiếm", "검색 필터": "Bộ lọc tìm kiếm", "검색기": "Tìm kiếm", "검색어": "Từ khóa tìm kiếm", "검색어 자동 완성": "Từ khóa tự sinh", "결과": "Kết quả", "결과 저장": "Lưu lại kết quả", "경고 없이 삭제": "Xóa mà không cần thông báo", "경로를 선택하세요": "Chọn đường dẫn", "계속 검색": "Tìm kiếm tiếp theo", "계정": "Tên đăng nhập", "계정 / 패스워드": "Tên đăng nhập / Mật khẩu", "고급": "Nâng cao", "고급 검색": "Tìm kiếm nâng cao", "고급 옵션": "Advanced options", "고정": "Ghim", "고정 해제": "Bỏ ghim", "공식 스크립트 && 플러그인": "Official scripts && plugins", "공인 IP: {}": "Public IP: {}", "관리자 권한 없이 실행": "Run without administrator privileges", "관리자 권한 필요": "Administrator privileges required", "광고 스킵": "Skip ads", "그대로": "Bình thường", "그룹": "Nhóm", "그룹 (Groups)": "Nhóm", "그룹 안의 모든 작업 다시 시작": "Khởi động lại các nhiệm vụ trong nhóm", "그룹 이름": "Tên nhóm", "그룹 펼치기 / 접기": "Expand / Collapse groups", "그룹 합쳐서 불러오기": "Load all groups together", "그룹명 복사 (&G)": "Sao chép tên nhóm (&G)", "그룹으로 이동": "Move to group", "그룹을 포함하는 그룹은 만들 수 없습니다.": "Không thể chứa nhóm trong nhóm.", "그룹이 없습니다": "Không có nhóm", "기본": "Mặc định", "기본 데이터": "Dữ liệu mặc định", "기본 데이터 다운로드": "Tải xuống dữ liệu mặc định", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "Bạn chỉ có thể tạo nhóm ở chế độ lọc mặc định.", "기본값": "Giá trị mặc định", "기타": "Vân vân.", "깊은 모델": "Deep model", "끝내기": "Thoát", "날짜": "Ngày", "낮음": "Low", "내보내기": "Xuất", "내보내기 실패": "Xuất thất bại", "내용 보기": "Xem tập lệnh", "내장 웹브라우저": "Trình duyệt đính kèm", "내장 이미지 뷰어": "Trình xem ảnh đính kèm", "네트워크": "Network", "녹화": "Recording", "녹화 중...": "Recording...", "녹화 중지": "Dừng ghi", "높음": "High", "다른 동영상 사이트에도 적용됩니다.": "Áp dụng với các trang video khác.", "다시 시작 (&S)": "Khởi động lại (&S)", "다시 시작 실패; 복구됨": "Thử lại thất bại; Hoàn trả hiện trạng", "다운로드": "Tải xuống", "다운로드 & 제거": "Tải xuống & Gỡ bỏ", "다운로드 && 제거": "Tải xuống && Gỡ bỏ", "다운로드 (&D)": "Tải xuống (&D)", "다운로드 날짜 표시": "Xem ngày tải", "다운로드 속도": "Tốc độ tải xuống", "다운로드 완료": "Tải xuống hoàn tất", "다운로드 완료 후 자동 제거": "Tự động gỡ bỏ sau khi hoàn tất tải xuống", "다운로드 일시 정지 / 재개": "Tạm dừng tại xuống / Tiếp tục", "다운로드 중": "Downloading", "다운로드가 완료되면 알림": "Thông báo khi tải xuống thành công", "다운로드가 완료될 때까지 절전모드 방지": "Prevent system sleep until downloads are finished", "다운로드하기 전에 파일 고르기": "Select files before download", "다운로드하지 않음": "Don't download", "다운로드한 작품만": "Chỉ tải xuống thư viện", "다음 검색시 더 빠르게 검색": "Cải thiện hiệu năng trong lần tới", "다음 작업들이 목록에서 제거됩니다:": "The following tasks will be removed from the list:", "다음 파일들이 삭제됩니다:": "The following files will be deleted:", "다크 모드": "Chế độ tối", "단일 파일": "Tệp đơn", "단축키": "Shortcuts", "단축키 내보내기": "Export Shortcuts", "단축키 내보내기 성공": "Shortcuts are successfully exported", "단축키 불러오기": "Import Shortcuts", "단축키 불러오기 성공": "Shortcuts are successfully imported", "단축키 수정": "Edit shortcuts", "단축키 초기화 성공": "Shortcuts are successfully reseted", "닫기 버튼으로 트레이로 최소화": "Nút đóng sẽ thu nhỏ ứng dụng xuống khay hệ thống", "대기 중": "Waiting", "대기 중...": "Xin đợi...", "데이터 다운로더": "Data Downloader", "데이터 분류 중...": "Phân loại dữ liệu...", "데이터 분석 중...": "Phân tích dữ liệu...", "데이터 없음": "No Data", "데이터 읽는 중...": "Đang đọc dữ liệu...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "Dữ liệu không tồn tại.\nXin tải dữ liệu từ Menu.", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "Dữ liệu không tồn tại.\nXin tải dữ liệu từ Tìm kiếm", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "Dữ liệu của bạn đã quá hạn một tuần.\nXin hãy cập nhập lại.", "데이터를 다운로드하는 도중에 실패했습니다.": "Tải về dữ liệu thất bại", "데이터를 모두 받았습니다!": "Tất cả dữ liệu đã được tải về!", "도구": "Công cụ", "도구창": "Tool window", "도움말": "Hỗ trợ", "동영상": "Video", "동영상 변환...": "Chuyển đổi video...", "뒤 100 페이지": "100 trang cuối", "드래그 & 드랍해서 바꾸세요:": "Dùng Kéo & Thả để thay đổi:", "디더링": "Dither", "디버그": "Bắt lỗi", "디스코드": "Discord", "라이선스": "Giấy phép", "랜덤으로 하나 선택": "Lựa chọn ngẫu nhiên một", "로그...": "Nhật ký...", "로그인": "Đăng nhập", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "Đăng nhập thất bại: {}{}\nVui lòng xem [Lựa chọn - Tùy chỉnh - Pixiv - Đăng nhập].", "로그인 중...": "Đang đăng nhập...", "로그인 테스트": "Kiểm tra đăng nhập", "로드 중: {}": "Loading: {}", "로컬 파일 감지": "Detect local files", "로컬 파일로부터 새 작업 만들기": "Tạo nhiệm vụ mới từ tệp cục bộ", "를 북마크에서 지웠습니다": "Được gỡ bỏ khỏi danh sách yêu thích", "리트윗 제외": "Exclude retweets", "리트윗 포함": "Include retweets", "릴리즈 노트": "Ghi chú khi phát hành", "링크 열기": "Mở link", "링크 주소 복사": "Sao chép link", "링크 주소 복사 (&C)": "Sao chép link (&C)", "마무리 중...": "Hoàn thành...", "멈춤": "Stopped", "메뉴": "Menu", "메모리 사용량": "Bộ nhớ sử dụng", "메모리 사용량 표시": "Xem bộ nhớ sử dụng", "메시지 상자": "Message box", "모델": "Model", "모델 생성 중...": "Tạo model...", "모델: {}": "Model: {}", "모두": "Tất cả", "모두 삭제": "Xóa all", "모두 선택": "Chọn all", "모든 갤러리 넘버를 복사했습니다.": "Sao chép tất cả ID Thư viện.", "모든 언어": "Tất cả ngôn ngữ", "모든 작업 완료": "All tasks complete", "모든 작업 완료 후": "When all tasks are complete", "모든 작업이 완료되면 알림 보이기": "Show notifications when all tasks are complete", "목록": "Danh sách", "목록 주소를 입력해주세요": "Xin hãy nhập vào danh sách đường dẫn", "목록 지우기": "Xóa danh sách", "목록에서 제거": "Xóa khỏi danh sách", "목록에서 폴더 제거": "Xóa tệp khỏi danh sách", "목록을 모두 지울까요?": "Bạn có chắc bạn muốn xóa sạch danh sách?", "미리보기": "Xem trước", "미리보기 크기": "Kích thước xem trước", "배경 이미지": "Background image", "배경 이미지 변경": "Change background image", "배경 이미지 초기화": "Reset background image", "버전 확인": "Kiểm tra cập nhập", "번역": "Dịch", "베타 버전 설치": "Install beta versions", "변경할 최대 크기": "Kích thước tối đa", "변경할 최소 크기": "Kích thước tối thiểu", "변환 중...": "Đang chuyển đổi...", "보기": "Xem", "보통": "Normal", "부팅 시 실행": "Bắt đầu khi máy khởi động", "북마크": "Danh sách yêu thích", "북마크 가져오기": "Nhập danh sách yêu thích", "북마크 가져오기 실패": "Nhập danh sách yêu thích thất bại", "북마크 내보내기": "Xuất danh sách yêu thích", "북마크 내보내기 실패": "Xuất danh sách yêu thích thất bại", "북마크를 가져왔습니다": "Danh sách yêu thích đã được nhập", "북마크를 내보냈습니다": "Danh sách yêu thích đã được xuất", "북마크를 모두 삭제합니다.": "Xóa tất cả danh sách yêu thích.", "북마크를 모두 삭제했습니다.": "Tất cả danh sách yêu thích đã được xóa.", "불러오기": "Tải", "불완전한 작업 모두 다시 시작": "Khởi động lại tất cả nhiệm vụ chưa hoàn thành", "불완전한 작업 자동으로 다시 시작": "Khởi động lại các nhiệm vụ chưa hoàn thành tự động", "붙여넣고 다운로드": "Dán vào và Tải xuống", "뷰어... (&V)": "&Trình xem...", "브라우저로 보기": "Show in browser", "브라우저로 보기 (&B)": "Xem trong trình duyệt (&B)", "비디오 코덱 우선순위": "Video codec priority", "비슷한 이미지 포함 (느림)": "Bao gồm các bức ảnh tương tự (Chậm)", "비율 유지": "Tỉ lệ", "비율 유지 - 꽉 차게": "Aspect ratio - fill", "비정상적인 로그인 시도": "Nỗ lực đăng nhập bất thường", "빠른 시작을 위한 작업 레이지 로딩": "Tải nhiệm vụ dạng lười để khởi động nhanh", "빠른 실행 도구 모음 사용자 지정": "Tùy chỉnh thanh truy cập nhanh", "뽑기": "Ngẫu nhiên", "뽑을 갯수": "Số lượng thư viện", "사용법": "Hướng dẫn sử dụng", "사용법...": "Hướng dẫn sử dụng...", "사용자 지정 테마 색": "Màu chủ đề tùy chỉnh", "사이드바": "Sidebar", "사이트": "Trang", "사이트 추가": "Trang hỗ trợ", "사이트를 추가했습니다": "Trang hỗ trợ được thêm vào", "삭제된 데이터": "Xóa dữ liệu", "삭제된 데이터 다운로드": "Tải về dữ liệu đã Xóa", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "Dữ liệu đã xóa không tồn tại.\nXin hãy tải xuống dữ liệu từ Menu.", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "Tải xuống dữ liệu đã xóa thất bại.", "삭제된 데이터를 모두 받았습니다!": "Tải xuống thành công: Dữ liệu đã xóa", "삭제시 휴지통으로 보냄": "sử dụng thùng rác", "상태": "Tình trạng", "새 그룹 만들기": "Tạo nhóm mới", "새 버전이 있습니다. 업데이트 하실래요?": "Đã có một phiên bản mới. Bạn có muốn cập nhập?", "새로고침": "Làm mới", "샘플": "Sample", "서명": "Chứng thực", "서버": "Máy chủ", "선택 화 다운로드": "Chọn chương && Tải xuống", "선택된 작업들 내보내기": "Xuất các nhiệm vụ được chọn", "선택된 작업이 없습니다": "Không có nhiệm vụ được chọn", "선택하세요:": "Select:", "선택한 항목 중에서 자동 선택": "Tự động chọn trong các mục đã chọn", "선호 언어": "Preferred language", "설명": "Bình luận", "설정": "Tùy chỉnh", "설정 (Preferences)": "Tùy chỉnh", "설정을 따름": "Follow preferences", "성공: {}\n실패: {}": "Thành công: {}\nThất bại: {}", "소리": "Sound", "수동": "Thủ công", "수동 업데이트": "Thủ công", "수정...": "Edit...", "순서 변경": "Sắp xếp lại", "숨김 키": "Boss-Key", "숫자": "Số", "스레드": "Threads", "스레드 생성 중...": "Bắt đầu threads...", "스크롤 속도 ({}x)": "Tốc độ cuộn ({}x)", "스크립트": "Tập lệnh", "스크립트 가져오기": "Nạp tập lệnh", "스크립트 작성법": "How to write a script", "스크립트를 실행하시겠습니까?": "Bạn có chắc bạn muốn chạy tập lệnh này?", "스크립트를 읽는 중 오류가 발생했습니다": "Error occurred while reading the script", "스토리 읽는 중...": "Xem stories...", "스토리 포함": "Bao gồm cả stories", "시딩": "Seeding", "시딩 중지": "Stop seeding", "시딩 하지 않음": "No seeding", "시리즈": "Series", "시리즈 (Series)": "Series", "시리즈가 없습니다": "Không có series", "시리즈명 복사 (&S)": "Sao chép tên series (&S)", "시스템": "Hệ thống", "시스템 설정 사용": "Use system setting", "시스템 종료": "Shutdown System", "시스템 트레이": "Khay hệ thống", "시작 후 다운로드": "Tải xuống lần chạy này", "시작 후 지난 시간": "Thời gian lần chạy này", "실패": "Thất bại", "실험 기능": "Thí nghiệm", "썸네일": "Thumbnail", "썸네일 고정": "Sửa thumbnail", "썸네일 다운로드": "Download thumbnails", "썸네일 숨기기": "Ẩn thumbnails", "썸네일 크기": "Kích thước Thumbnail", "썸네일을 선택하세요": "Chọn thumbnail", "아니오(&N)": "&Không", "아무것도 안 함": "Do nothing", "아이콘": "Icon", "압축": "Nén", "압축 형식": "Định dạng", "압축파일 연결 프로그램": "Mở tệp nén bằng", "앞 100 페이지": "100 trang đầu", "얕은 모델": "Model nông", "언어": "Ngôn ngữ", "언어 (Language)": "Ngôn ngữ", "언어 (Languages)": "Ngôn ngữ", "업데이트": "Cập nhập", "업데이트 중...": "Đang cập nhập...", "업데이트 체크 중...": "Kiểm tra bản cập nhập...", "업로드": "Upload", "연결 프로그램 변경": "Chọn một phần mềm sử dụng đê mở", "열기": "Mở", "예(&Y)": "&Đúng", "예상치 못한 오류로 다운로드에 실패했습니다.": "Tải xuống thất bại vì gặp lỗi ngoài dự đoán.", "예시": "Mẫu", "오디오 코덱 우선순위": "Audio codec priority", "오디오 트랙": "Audio track", "오류": "Lỗi", "올바르지 않은 범위입니다": "Phạm vi không hợp lệ", "올바르지 않은 주소입니다": "Đường dẫn không hợp lệ", "올바르지 않은 형식의 검색 필터입니다": "Lỗi cú pháp với bộ lọc", "올바르지 않은 형식의 스크립트입니다": "Invalid format script", "옵션": "Lựa chọn", "옵션 (JSON 포맷)": "Options (JSON format)", "옵션 (Options)": "Lựa chọn", "완료": "Hoàn tất", "완료된 작업 모두 제거": "Xóa các nhiệm vụ đã hoàn thành", "완료됨으로 표시": "Đánh dấu đã hoàn thành", "완전 삭제": "Xóa vĩnh viễn", "우선순위": "Ưu tiên", "우선순위 변경": "Change priority", "움짤": "GIF", "움짤 변환...": "Chuyển đổi GIF...", "원본": "Bản gốc", "원본 이미지 다운로드": "Tải xuống ảnh gốc", "원본 크기보다 크게 바뀌지는 않습니다": "Kích thước sẽ không lớn hơn ảnh bản gốc", "원본 파일 삭제": "Xóa các tệp đã tải xuống", "원하는 인공신경망 모델을 고르세요:": "Chọn một mô hình Artificial Neural Network bạn muốn:", "웹브라우저": "WebBrowser", "웹툰 제외": "Loại bỏ Webtoons", "유사도": "Giống", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "Tài khoản / Mật khẩu Không hợp lệ", "유효한 계정입니다": "Tài khoản hợp lệ", "음소거": "Im lặng", "음악 파일에 앨범아트 삽입": "Thêm ảnh bìa cho tệp âm thanh", "음원": "Âm thanh", "음질": "Chất lượng âm thanh", "이동": "Di chuyển", "이동할 수 없습니다: {}": "Không thể di chuyển: {}", "이름": "Tên", "이름 변경": "Đổi tên", "이름을 얻는 도중 실패했습니다": "Đọc tên thất bại", "이미 다운로드한 작품 제외": "Loại trừ đã tải xuống thư viện", "이미 모든 그룹이 추가되어 있습니다": "All groups have already been added", "이미 모든 시리즈가 추가되어 있습니다": "All series have already been added", "이미 모든 작가가 추가되어 있습니다": "All artists have already been added", "이미 모든 캐릭터가 추가되어 있습니다": "All characters have already been added", "이미 추가한 작업 다시 시작할지 물어봄": "Ask to retry tasks already in the list", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "This task already in the list. Do you want to download it again?", "이미 추가한 플러그인입니다": "This plugin already in the list", "이미 포함하는 그룹이 있습니다.": "Có một nhóm đã bao gồm nhiệm vụ.", "이미지": "Ảnh", "이미지 정보 캐시": "Bộ nhớ đệm thông tin ảnh", "이미지 포맷 변환": "Đổi định dạng ảnh", "이미지를 읽는 중 실패": "Đọc ảnh thất bại", "익명 모드": "Chế độ ẩn danh", "인코딩": "Mã hóa", "일반": "Tổng quan", "일시 정지": "Pause", "읽기 중지": "Stop reading", "읽는 중...": "Đang đọc...", "자동": "Tự động", "자동 녹화": "Auto recording", "자동 새로고침 & 스크롤": "Tự động làm mới & Cuộn", "자동 생성 자막 포함": "Include automatic captions", "자동 선택": "Chọn tự động", "자동 업데이트": "Tự động hóa", "자동 저장": "Lưu tự động", "자막": "Thuyết minh", "자세한 정보": "Details", "자세한 정보 보기": "Xem chi tiết", "작가": "Họa sĩ", "작가 (Artists)": "Họa sĩ", "작가 이름": "Tên họa sĩ", "작가 추천": "Họa sĩ đề xuất", "작가 합쳐서 불러오기": "Tải tất cả họa sĩ cùng lúc", "작가가 없습니다": "Họa sĩ không tồn tại", "작가명 복사 (&A)": "Sao chép tên họa sĩ (&A)", "작게": "Nhỏ", "작성자": "Tác giả", "작업": "Nhiệm vụ", "작업 개수": "Số lượng nhiệm vụ", "작업 기록": "Task history", "작업 기록 초기화 성공": "Task history cleared successfully", "작업 기록이 없습니다": "No task history", "작업 당 최대 연결": "Maximum connections per task", "작업 만들기 실패": "Failed to create tasks", "작업 목록 폭": "Task list width", "작업 수정": "Chỉnh sửa nhiệm vụ", "작업 수정...": "Edit task...", "작업 완료": "Task complete", "작업 완료 후": "After task complete", "작업 왼쪽에서 순서 변경": "Sắp xếp lại phía bên trái", "작업 용량": "Kích thước tệp nhiệm vụ", "작업 정보": "Thông tin nhiệm vụ", "작업 정보... (&I)": "Thông tin... (&I)", "작업 타입?": "Loại nhiệm vụ?", "작업들 가져오기": "Nhập nhiệm vụ", "작업들 내보내기": "Xuất nhiệm vụ", "작업들을 가져올까요?": "Bạn có muốn nhập vào nhiệm vụ này?", "작업들을 가져왔습니다": "Nhiệm vụ đã nhập", "작업들을 내보냈습니다": "Nhiệm vụ đã xuất", "작업이 아직 완료되지 않았습니다": "Nhiệm vụ vẫn chưa được hoàn thành", "작업이 완료되면 알림 보이기": "Show notifications when tasks are complete", "작품 목록 가져오기": "Nhập vào danh sách thư viện", "작품 목록 내보내기": "Xuất ra danh sách thư viện", "잠금": "Khóa", "잠금 해제": "Mở khóa", "장": "Trang", "재개": "Resume", "재시작 후 적용됩니다": "Applies after restart", "저사양 모드": "Chế độ hiệu năng thấp", "저장": "Lưu", "저장 && 종료": "Lưu && Thoát", "저장 실패": "Lưu thất bại", "저장 완료": "Đã lưu", "저장 중...": "Đang lưu...", "저장 폴더": "Tải xuống tệp", "저장 폴더 변경...": "Thay đổi đường dẫn tải xuống...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "Sao chép tất cả ID thư viện trong tệp tải xuống", "저장 폴더에 있는 모든 작가 불러오기": "Tải tất cả ID thư viện trong tệp tải xuống", "저장... (&S)": "&Lưu...", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "Tệp config không tồn tại; Nhấn [F1] để đọc \"Hướng dẫn sử dụng\"", "적어도 {} 개의 작품이 필요합니다.": "Tối thiểu cần có {} thư viện.", "점수": "Điểm", "정규식 문법": "Cú pháp Regex", "정규식으로 찾기": "Tìm kiếm bằng Regex", "정렬 기준": "Sắp xếp theo", "정말 단축키를 초기화하시겠습니까?": "Are you sure you want to reset shortcuts?", "정말 목록에서 제거하시겠습니까?": "Bạn có chắc bạn muốn xóa khỏi danh sách?", "정말 삭제하시겠습니까?": "Bạn có chắc bạn muốn xóa?", "정말 설정을 초기화하시겠습니까?": "Are you sure you want to reset the preferences?", "정말 작업 기록을 초기화하시겠습니까?": "Are you sure you want to clear task history?", "정말 종료하시겠습니까?": "Bạn có chắc bạn muốn thoát?", "정말 중지하시겠습니까?": "Are you sure you want to stop?", "정말 쿠키를 초기화하시겠습니까?": "Bạn có chắc bạn muốn dọn sách Cookies?", "정보": "Thông tin", "정보...": "Thông tin...", "정확도": "Sự chính xác", "제거": "Gỡ bỏ", "제목": "Tiêu đề", "제목 (Title)": "Tiêu đề", "제목 복사 (&T)": "Sao chép tiêu đề (&T)", "제외 태그": "Gắn nhãn cần loại trừ", "제외 태그 목록에 그룹 추가": "Add groups to the exclusion tag list", "제외 태그 목록에 시리즈 추가": "Add series to the exclusion tag list", "제외 태그 목록에 작가 추가": "Add artists to the exclusion tag list", "제외 태그 목록에 캐릭터 추가": "Add characters to the exclusion tag list", "조각 표시": "Chương trình", "종료": "Thoát", "종료 중...": "Thoát...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "Kéo theo chiều ngang: ±1\nKéo theo chiều dọc: ±100", "주소": "Address", "주소 or 갤러리 넘버": "Đường dẫn hoặc ID thư viện", "주소를 입력해주세요": "Hãy nhập vào vài đường dẫn", "중간": "Ở giữa", "중단": "Hủy bỏ", "중복 이미지 찾기": "Công cụ tìm ảnh trùng lặp", "중복 이미지 찾는 중": "Tìm ảnh trùng lặp", "중복 제거": "Cắt bớt ảnh trùng lặp", "지원하는 사이트:": "Các trang hỗ trợ:", "지원하는 토큰": "Supported tokens", "지정한 페이지만 다운로드합니다.": "Chỉ tải xuống những trang được chọn.", "직접 다운로드": "Tải xuống trực tiếp", "진행도": "Progress", "참고 작품: {} 개": "Tham khảo: {} thư viện", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "Hãy xem qua: Hỗ trợ - Hướng dẫn sử dụng (F1) - Tải cookies", "창 보이기 / 숨기기": "Xem / Ẩn cửa sổ", "창 위치 크기 기억": "Remember window position and size", "찾기...": "Công cụ tìm kiếm...", "채널 영상 역순으로 다운로드": "Download channel videos in reverse order", "첫 번째 파일 열기": "Open the first file", "첫 번째 파일 열기 (&O)": "Mở tệp đầu tiên (&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "Trang đầu tiên, Trang thứ 10 ~ 20, Trang cuối cùng", "체인지로그": "Changelog", "초기화": "Khởi động lại", "최대 다운로드 속도": "Tốc độ tải xuống tối đa", "최대 동시 작업": "Tối đa các nhiệm vụ chạy song song", "최대 페이지 제한": "Maximum page limit", "최소화 버튼으로 트레이로 최소화": "Nút ẩn sẽ ẩn xuống khay hệ thống", "최신 버전:": "Latest:", "추가한 날짜": "Ngày đã được thêm vào", "취소": "Hủy", "캐릭터": "Nhân vật", "캐릭터 (Characters)": "Nhân vật", "캐릭터 이름": "Tên nhân vật", "캐릭터가 없습니다": "Nhân vật không tồn tại", "캐릭터명 복사 (&C)": "Sao chép tên nhân vật (&C)", "코멘트": "Bình luận", "코멘트 수정": "Sửa bình luận", "쿠키": "Cookies", "쿠키 내보내기": "Xuất cookies", "쿠키 내보내기 성공": "Xuất cookies thành công", "쿠키 불러오기": "Tải cookies", "쿠키 불러오기 성공": "Nhập vào cookies thành công", "쿠키 초기화 성공": "Dọn dẹp cookies thành công", "쿠키가 없습니다": "Cookies không tồn tại", "쿠키를 업데이트하세요": "Cập nhập cookies của bạn", "크게": "Lớn", "크기": "Kích thước", "크기 조절": "Sửa kích thước", "크기 조절...": "Sửa kích thước...", "크롬 확장프로그램 연동에 실패했습니다.": "Kết nối tới tiện ích Chrome thất bại.", "클라이언트": "Clilent", "클래식": "Cổ điển", "클립보드에서 자동 추가": "Giám sát bản tạm", "타입": "Loại", "타입 (Types)": "Loại", "태그": "Thẻ", "태그 \"{}\" 제거": "Xóa thẻ \"{}\"", "태그 \"{}\" 추가": "Gắn thẻ \"{}\"", "태그 (Tags)": "Thẻ", "태그 :": "Thẻ :", "태그 설정": "Cài đặt thẻ", "태그 수정": "Edit tags", "태그 없음": "Thẻ không tồn tại", "테마": "Chủ đề", "토렌트 고급 옵션 초기화": "Reset torrent advanced options", "토렌트 추가": "Thêm Torrrent", "토렌트 파일 연결": "Kết hợp với tệp torrent", "토큰": "Tokens", "통계": "Số liệu", "통과": "Qua", "투명도": "Độ trong suốt", "트래커 수정": "Edit trackers", "트래커 추가": "Add trackers", "트레이로 전환되었습니다": "Đã ẩn xuống khay hệ thống", "트레이로 최소화": "Ẩn xuống khay hệ thống", "트레이로 최소화 알림 보이기": "Show minimize notifications in the tray", "트레이에서 알림 보이기": "Xem thông báo trong khay", "파일": "Tệp", "파일 목록": "File list", "파일 삭제": "Xóa tệp", "파일 삭제 (&X)": "Xóa các tệp (&X)", "파일 수": "Số lượng tệp", "파일 스캔 중": "Quét tệp", "파일 유형 제외": "Loại trừ các loại tệp", "파일 체크 중...": "Checking files...", "파일 크기": "Kích thước tệp", "파일 형식": "Định dạng", "파일 형식 물어보기": "Hỏi định dạng", "파일명": "Tên tệp", "파일명 형식": "Định dạng tên tệp", "파일을 고르세요:": "Select files:", "파일을 선택하세요": "Chọn tệp", "파일의 수정한 날짜를 업로드 날짜로 변경": "Change the file's modified date to the upload date", "파일이 없습니다": "Tệp không tồn tại", "패스워드": "Mật khẩu", "퍼지로 찾기": "Tìm kiếm mờ", "페이지 읽는 중...": "Đang đọc trang...", "페이지 지정": "Chọn trang", "페이지 지정 다운로드": "Chọn trang && Tải xuống", "페이지 지정 다운로드 기본값": "Giá trị mặc định cho \"Chọn trang && Tải xuống\"", "페이지를 선택해주세요": "Xin hãy chọn trang", "페이지를 읽는 중에 오류가 발생했습니다": "Lỗi đã xảy ra khi đang cố đọc trang", "평범하게 찾기": "Tìm kiếm mặc định", "포트": "Cổng", "포함 태그": "Gắn nhãn cần thêm vào", "폭 맞춤": "Vừa với chiều ngang", "폰트": "Font", "폰트 변경...": "Đổi font chữ...", "폰트 선택": "Select Font", "폰트 초기화": "Reset font", "폴더": "Tệp", "폴더 && 압축파일": "Tệp && Tệp zip", "폴더 바로가기": "Folder shortcuts", "폴더 열기": "Mở tệp", "폴더 이동": "Di chuyển tệp", "폴더 추가": "Thêm tệp", "폴더가 없습니다": "No folder", "폴더들": "Thư mục", "폴더들을 선택하세요": "Select folders", "폴더를 선택하세요": "Chọn một thư mục", "폴더를 추가해주세요": "Xin hãy thêm vài thư mục", "폴더명 형식": "Định dạng thư mục", "표지 검색 실패": "Tìm ảnh bìa thất bại", "표지 검색...": "Tìm ảnh bìa...", "프로그램 끝내기": "Quit the program", "프로그램 패스워드": "Mật khẩu phần mềm", "프록시": "Proxy", "플러그인": "Plugins", "플러그인을 추가하시겠습니까?": "Are you sure you want to add this plugin?", "플레이리스트": "Playlist", "플레이리스트 파일에 번호 매기기": "Đánh số tệp trong danh sách phát ", "플레이리스트 한 폴더에 다운로드": "Tải xuống danh sách phát vào một tệp", "플로팅 미리보기": "Xem trước nổi", "피드백": "Phản hồi", "필터": "Bộ lọc", "필터창": "Bộ lọc", "하나 이상의 타입을 선택해주세요.": "Chọn ít nhất một loại.", "하위폴더 포함": "Bao gồm thư mục con", "학습 중...": "Đang học...", "한 줄 당 한 트래커 URL": "One tracker URL per line", "항상 위": "Luôn ở trên cùng", "항상 위 OFF": "Always on top OFF", "항상 위 ON": "Always on top ON", "해당 링크로 이동합니다": "Mở đường dẫn...", "해상도": "Độ phân giải", "현재 버전: v{}\n최신 버전: v{}": "Phiên bản hiện tại: v{}\nPhiên bản mới nhất: v{}", "현재 작업 없음": "There are no current tasks", "호스트": "Máy chủ", "화 선택": "Choose the episodes", "화질": "Chất lượng", "확인": "Ok", "후원": "Ủng hộ", "휴지통으로 이동": "Chuyển tới thùng rác" } } ================================================ FILE: translation/tr_zh-TW.hdl ================================================ { "lang": "zh-tw", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "Folders must be more than one if \"Exclude same sources\" is turned on", "#Cancel#": "取消", "#EB#": "{} EB", "#EMPTY#": "Empty (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "確定", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "外觀", "#boss_invalid_pw#": "密碼無效!", "#boss_pw#": "密碼:", "#byte#": "{} byte", "#bytes#": "{} bytes", "#click#": "點擊", "#combo_hour#": "{} 小時", "#combo_hours#": "{} 小時", "#combo_min#": "{} 分鐘", "#combo_mins#": "{} 分鐘", "#combo_sec#": "{} Sec", "#combo_secs#": "{} Secs", "#date01#": "一月 {d}", "#date01y#": "一月 {d}, {y}", "#date02#": "二月 {d}", "#date02y#": "二月 {d}, {y}", "#date03#": "三月 {d}", "#date03y#": "三月 {d}, {y}", "#date04#": "四月 {d}", "#date04y#": "四月 {d}, {y}", "#date05#": "五月 {d}", "#date05y#": "五月 {d}, {y}", "#date06#": "六月 {d}", "#date06y#": "六月 {d}, {y}", "#date07#": "七月 {d}", "#date07y#": "七月 {d}, {y}", "#date08#": "八月 {d}", "#date08y#": "八月 {d}, {y}", "#date09#": "九月 {d}", "#date09y#": "九月 {d}, {y}", "#date10#": "十月 {d}", "#date10y#": "十月 {d}, {y}", "#date11#": "十一月 {d}", "#date11y#": "十一月 {d}, {y}", "#date12#": "十二月 {d}", "#date12y#": "十二月 {d}, {y}", "#developed_by#": "Developed by Kurt Bestor", "#dirformat_artist#": "Some artist", "#dirformat_group#": "Some group", "#dirformat_lang#": "English", "#dirformat_series#": "Some series", "#dirformat_title#": "Some title", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "All Files {}", "#filter_bmk#": "Bookmark Files {}", "#filter_cookie#": "Netscape HTTP Cookie Files (*.txt)", "#filter_hdfb#": "Hitomi Downloader Filter bookmarks {}", "#filter_hdk#": "Hitomi Downloader Shortcuts {}", "#filter_hdl#": "Hitomi Downloader Linguist {}", "#filter_hds#": "Hitomi Downloader Scripts {}", "#filter_hdt#": "Hitomi Downloader Tasks {}", "#filter_image#": "Images {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "需要瀏覽器;請使用 --safemode", "#invalid_loginRequired#": "需要登入;請更新您的 Cookies", "#invalid_loginRequired2#": "需要登入;請登入", "#invalid_outdatedExtension#": "擴展已過期;請更新擴展", "#invalid_unknownSite#": "未知的網站", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "載入中:{}", "#new_group#": "New group", "#new_item#": "新項目", "#p#": "{}p", "#recomm_all_langs#": "所有語言", "#recomm_artist#": "作者", "#recomm_main#": "根據存儲資料夾中的作品分析作者並進行推薦。\n\n結果的精確性取決於所提供作品的範圍。\n建議作品越多越好(建議超過 100 件作品)。\n\n共有 {item} 件作品:", "#recomm_score#": "分數", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "每", "#setting_autosaveR#": "", "#setting_incompleteL#": "後", "#setting_incompleteR#": "", "#t_etc#": "Etc", "#t_file#": "File", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "Blue", "#tag_gray#": "Gray", "#tag_green#": "Green", "#tag_orange#": "Orange", "#tag_purple#": "Purple", "#tag_red#": "Red", "#tag_yellow#": "Yellow", "#task_artist#": "作者", "#task_date#": "日期", "#task_done#": "完成", "#task_folder#": "資料夾", "#task_incomplete#": "未完成", "#task_input#": "輸入", "#task_invalid#": "無效", "#task_multiple#": "多個", "#task_range#": "Range", "#task_single#": "單個", "#task_site#": "網站", "#task_status#": "狀態", "#task_title#": "標題", "#task_type#": "類型", "#task_url#": "URL", "#task_zipfile#": "Zip 檔案", "#torrent_anon#": "一般用戶代理程序將用於跟踪器(私有種子除外)。
您的本地 IPv4 和 IPv6 地址將不會作為查詢字符串參數發送到私有跟踪器。
如果配置了 announce_ip,它將不會發送到跟踪器。
客戶端版本不會在擴展握手中發送給對等方。
DHT 節點將被禁用。", "#translation#": "Translation", "50개씩 끊어서 검색": "每50個分割進行搜索", "DPI 우회": "繞過 DPI", "DPI 우회 제외 도메인": "Domains excluded from DPI bypass", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "“繞過 DPI”已關閉,某些網站可能無法運行。", "E(x)Hentai 로그인 쿠키 필요": "需要E(x)Hentai登錄 Cookie", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "您的IP已暫時被鎖定,請稍後再試。", "PDF 생성": "產生 PDF", "UI 스케일 ({}%)": "介面縮放 ({}%)", "URL을 입력하세요": "請輸入網址", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "請按下[下載]按鈕進行下載。按下[確定]按鈕以退出。", "reCAPTCHA 풀기": "解決驗證碼", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "Restart in {day}d {hour}h {min}m {sec}s: {id}", "{hour}시간 {min}분 {sec}초": "{hour}小時{min}分{sec}秒", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "重新啟動倒數計時:{hour}小時 {min}分 {sec}秒:{id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "剩餘 {min} 分 {sec} 秒後重新啟動:{id}", "{sec}초 뒤 다시 시작: {id}": "剩餘 {sec} 秒後重新啟動:{id}", "{} 개 선택": "已選擇{}個項目", "{} 개 찾음": "{} 個項目", "{} 개의 작업들이 있습니다": "有 {} 個任務", "{} 개의 진행 중인 작업이 있습니다.": "有 {} 個任務正在進行中。", "{} 를 제외 태그에 추가했습니다": "已將 {} 新增至排除標籤清單中", "{} 설정": "{} 偏好設定", "{} 시간 뒤 다시 시작": "Restart in {} hours", "{} 시간 전 데이터": "數據;{} 小時前", "{} 일 뒤 다시 시작": "Restart in {} days", "{} 일 전 데이터": "數據;{} 天前", "{}개 작업의 첫 번째 파일을 엽니다.": "為每個 {} 任務打開第一個檔案。", "{}개의 불완전한 작업을 다시 시작합니다.": "重新開始 {} 個不完整的任務。", "{}개의 완료된 작업을 목록에서 제거합니다.": "從列表中刪除 {} 個完成的任務。", "{}개의 완료된 작업을 제거합니다.": "刪除 {} 個已完成的任務。", "{}개의 작업을 다시 시작합니다.": "重新開始 {} 個任務。", "『 {} 』는 이미 북마크되어 있습니다": "『 {} 』已經被收藏了", "『 {} 』를 복사했습니다": "已複製『 {} 』", "『 {} 』를 북마크로부터 불러왔습니다": "已從收藏夾載入『 {} 』", "『 {} 』를 북마크에서 불러왔습니다": "已從收藏夾載入『 {} 』", "『 {} 』를 북마크했습니다": "已將『 {} 』加入收藏夾", "『 {} 』를 저장 폴더에서 불러왔습니다": "已從下載資料夾載入『 {} 』", "가능하면 일본어 제목 사용": "如有可能,使用日文標題", "가능한 경우 챕터 마커 추가": "Add chapter markers if available", "가져오기": "匯入", "가져오기 실패": "匯入失敗", "간단 검색": "簡單搜尋", "같은 소스 제외": "Exclude same sources", "개": "項目", "개별 다운로드는 지원하지 않습니다": "不支援單個下載", "갤러리 넘버": "相簿 ID", "갤러리 넘버 복사": "複製相簿 ID", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "複製相簿 ID 發生錯誤。", "갤러리 작업 정보... (&I)": "相簿資訊... (&I)", "갤러리 정보": "相簿資訊", "갤러리 정보 파일 (info.txt) 생성": "建立相簿資訊檔案 (info.txt)", "갯수": "數量", "갱신 간격": "Refresh interval", "거꾸로": "反向", "검색": "搜尋", "검색 데이터": "搜尋資料", "검색 도중에 사용할 수 없는 기능입니다.": "搜尋期間無法使用此功能。", "검색 범위": "搜尋範圍", "검색 순서": "搜尋順序", "검색 필터": "搜尋篩選", "검색기": "搜尋器", "검색어": "搜尋關鍵字", "검색어 자동 완성": "自動完成搜尋關鍵字", "결과": "結果", "결과 저장": "儲存結果", "경고 없이 삭제": "刪除時不警告", "경로를 선택하세요": "請選擇路徑", "계속 검색": "繼續搜尋", "계정": "帳號", "계정 / 패스워드": "帳號 / 密碼", "고급": "進階", "고급 검색": "高級搜尋", "고급 옵션": "Advanced options", "고정": "固定", "고정 해제": "解除固定", "공식 스크립트 && 플러그인": "Official scripts && plugins", "공인 IP: {}": "Public IP: {}", "관리자 권한 없이 실행": "不需要管理員權限執行", "관리자 권한 필요": "需要管理員權限", "광고 스킵": "Skip ads", "그대로": "原樣", "그룹": "群組", "그룹 (Groups)": "群組", "그룹 안의 모든 작업 다시 시작": "重新啟動此群組中的所有任務", "그룹 이름": "群組名稱", "그룹 펼치기 / 접기": "展開 / 折疊群組", "그룹 합쳐서 불러오기": "一起載入所有群組", "그룹명 복사 (&G)": "複製群組名稱 (&G)", "그룹으로 이동": "移動到群組", "그룹을 포함하는 그룹은 만들 수 없습니다.": "無法建立包含群組的群組。", "그룹이 없습니다": "沒有群組", "기본": "預設", "기본 데이터": "預設資料", "기본 데이터 다운로드": "下載預設資料", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "只能在預設排序狀態下創建分組。", "기본값": "預設值", "기타": "其他", "깊은 모델": "深層模型", "끝내기": "結束", "날짜": "日期", "낮음": "低", "내보내기": "匯出", "내보내기 실패": "匯出失敗", "내용 보기": "查看腳本", "내장 웹브라우저": "內建瀏覽器", "내장 이미지 뷰어": "內建圖像查看器", "네트워크": "網絡", "녹화": "Recording", "녹화 중...": "錄製中……", "녹화 중지": "停止錄製", "높음": "高", "다른 동영상 사이트에도 적용됩니다.": "適用於其他影片網站。", "다시 시작 (&S)": "重新開始 (&S)", "다시 시작 실패; 복구됨": "重新啟動失敗,已還原", "다운로드": "下載", "다운로드 & 제거": "下載和刪除", "다운로드 && 제거": "下載和刪除", "다운로드 (&D)": "下載 (&D)", "다운로드 날짜 표시": "顯示下載日期", "다운로드 속도": "下載速度", "다운로드 완료": "下載完成", "다운로드 완료 후 자동 제거": "下載完成後自動刪除", "다운로드 일시 정지 / 재개": "下載暫停/繼續", "다운로드 중": "下載中", "다운로드가 완료되면 알림": "下載完成時顯示通知", "다운로드가 완료될 때까지 절전모드 방지": "下載完成前防止系統進入睡眠狀態", "다운로드하기 전에 파일 고르기": "在下載之前選擇文件", "다운로드하지 않음": "不下載", "다운로드한 작품만": "僅下載的相簿", "다음 검색시 더 빠르게 검색": "提高下一次搜索的性能", "다음 작업들이 목록에서 제거됩니다:": "The following tasks will be removed from the list:", "다음 파일들이 삭제됩니다:": "The following files will be deleted:", "다크 모드": "深色模式", "단일 파일": "單個檔案", "단축키": "快速鍵", "단축키 내보내기": "Export Shortcuts", "단축키 내보내기 성공": "成功匯出快速鍵", "단축키 불러오기": "Import Shortcuts", "단축키 불러오기 성공": "成功匯入快速鍵", "단축키 수정": "編輯快速鍵", "단축키 초기화 성공": "成功重設快速鍵", "닫기 버튼으로 트레이로 최소화": "按下關閉按鈕將程式最小化到系統列", "대기 중": "等待中", "대기 중...": "等待中……", "데이터 다운로더": "Data Downloader", "데이터 분류 중...": "資料分類中……", "데이터 분석 중...": "資料分析中……", "데이터 없음": "No Data", "데이터 읽는 중...": "讀取資料中……", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "沒有資料。\n請從選單中下載資料。", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "沒有資料。\n請從搜尋器中下載資料。", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "您的資料已過期超過一週。\n請更新資料。", "데이터를 다운로드하는 도중에 실패했습니다.": "下載資料失敗", "데이터를 모두 받았습니다!": "所有資料下載完成!", "도구": "工具", "도구창": "工具視窗", "도움말": "說明", "동영상": "影片", "동영상 변환...": "轉換影片……", "뒤 100 페이지": "最後100頁", "드래그 & 드랍해서 바꾸세요:": "拖曳來更改:", "디더링": "抖動", "디버그": "除錯", "디스코드": "Discord", "라이선스": "授權", "랜덤으로 하나 선택": "隨機選擇一個", "로그...": "日誌……", "로그인": "登入", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "登入失敗: {}{}\n請前往 [選項-偏好設定-Pixiv 設定-登入] 設定。", "로그인 중...": "正在登入……", "로그인 테스트": "登入測試", "로드 중: {}": "Loading: {}", "로컬 파일 감지": "偵測本地文件", "로컬 파일로부터 새 작업 만들기": "從本地文件創建新任務", "를 북마크에서 지웠습니다": "已從書籤中刪除", "리트윗 제외": "Exclude retweets", "리트윗 포함": "包括轉推", "릴리즈 노트": "版本公告", "링크 열기": "開啟連結", "링크 주소 복사": "複製連結", "링크 주소 복사 (&C)": "複製連結 (&C)", "마무리 중...": "結束中……", "멈춤": "已停止", "메뉴": "選單", "메모리 사용량": "記憶體使用量", "메모리 사용량 표시": "顯示記憶體使用量", "메시지 상자": "Message box", "모델": "模型", "모델 생성 중...": "正在建立模型……", "모델: {}": "模型: {}", "모두": "全部", "모두 삭제": "全部刪除", "모두 선택": "全選", "모든 갤러리 넘버를 복사했습니다.": "已複製所有相簿 ID。", "모든 언어": "所有語言", "모든 작업 완료": "All tasks complete", "모든 작업 완료 후": "When all tasks are complete", "모든 작업이 완료되면 알림 보이기": "Show notifications when all tasks are complete", "목록": "清單", "목록 주소를 입력해주세요": "請輸入清單網址", "목록 지우기": "清空清單", "목록에서 제거": "從清單中移除", "목록에서 폴더 제거": "從清單中移除資料夾", "목록을 모두 지울까요?": "確定要清空清單嗎?", "미리보기": "預覽", "미리보기 크기": "預覽大小", "배경 이미지": "背景圖片", "배경 이미지 변경": "變更背景圖片", "배경 이미지 초기화": "重設背景圖片", "버전 확인": "檢查更新", "번역": "翻譯", "베타 버전 설치": "安裝測試版", "변경할 최대 크기": "最大尺寸", "변경할 최소 크기": "最小尺寸", "변환 중...": "轉換中……", "보기": "查看", "보통": "普通", "부팅 시 실행": "開機啟動", "북마크": "書籤", "북마크 가져오기": "導入書籤", "북마크 가져오기 실패": "導入書籤失敗", "북마크 내보내기": "導出書籤", "북마크 내보내기 실패": "導出書籤失敗", "북마크를 가져왔습니다": "書籤已導入", "북마크를 내보냈습니다": "書籤已導出", "북마크를 모두 삭제합니다.": "刪除所有書籤", "북마크를 모두 삭제했습니다.": "已刪除所有書籤", "불러오기": "加載", "불완전한 작업 모두 다시 시작": "重新啟動所有未完成的任務", "불완전한 작업 자동으로 다시 시작": "自動重新啟動未完成的任務", "붙여넣고 다운로드": "貼上並下載", "뷰어... (&V)": "檢視器(&V)……", "브라우저로 보기": "在瀏覽器中檢視", "브라우저로 보기 (&B)": "在瀏覽器中檢視(&B)", "비디오 코덱 우선순위": "Video codec priority", "비슷한 이미지 포함 (느림)": "包含相似的圖片(較慢)", "비율 유지": "保持比例", "비율 유지 - 꽉 차게": "保持比例-填滿", "비정상적인 로그인 시도": "非正常的登錄嘗試", "빠른 시작을 위한 작업 레이지 로딩": "為快速啟動進行的任務延遲加載", "빠른 실행 도구 모음 사용자 지정": "自定義快速訪問工具欄", "뽑기": "隨機選擇", "뽑을 갯수": "選擇的數量", "사용법": "使用方法", "사용법...": "使用方法……", "사용자 지정 테마 색": "自定義主題顏色", "사이드바": "Sidebar", "사이트": "網站", "사이트 추가": "添加支援的網站", "사이트를 추가했습니다": "添加支援的網站", "삭제된 데이터": "已刪除的數據", "삭제된 데이터 다운로드": "下載已刪除的數據", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "沒有已刪除的數據。\n請從菜單下載數據。", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "下載已刪除的數據時出錯。", "삭제된 데이터를 모두 받았습니다!": "下載完成:已刪除的數據", "삭제시 휴지통으로 보냄": "放入資源回收筒刪除", "상태": "狀態", "새 그룹 만들기": "建立新的群組", "새 버전이 있습니다. 업데이트 하실래요?": "有新版本,是否要更新?", "새로고침": "重新整理", "샘플": "Sample", "서명": "簽名", "서버": "伺服器", "선택 화 다운로드": "下載所選話數", "선택된 작업들 내보내기": "匯出所選任務", "선택된 작업이 없습니다": "沒有選定的任務", "선택하세요:": "Select:", "선택한 항목 중에서 자동 선택": "自動選擇已選項目", "선호 언어": "Preferred language", "설명": "說明", "설정": "設定", "설정 (Preferences)": "設定 (Preferences)", "설정을 따름": "遵循設定", "성공: {}\n실패: {}": "成功: {}\n失敗: {}", "소리": "Sound", "수동": "手動", "수동 업데이트": "手動更新", "수정...": "修改……", "순서 변경": "重新排序", "숨김 키": "隱藏按鍵", "숫자": "數字", "스레드": "執行緒", "스레드 생성 중...": "正在建立執行緒……", "스크롤 속도 ({}x)": "捲動速度 ({}x)", "스크립트": "腳本", "스크립트 가져오기": "導入腳本", "스크립트 작성법": "How to write a script", "스크립트를 실행하시겠습니까?": "您確定要執行此腳本嗎?", "스크립트를 읽는 중 오류가 발생했습니다": "讀取腳本時發生錯誤", "스토리 읽는 중...": "正在讀取故事……", "스토리 포함": "包含故事", "시딩": "做種", "시딩 중지": "停止做種", "시딩 하지 않음": "不做種", "시리즈": "系列", "시리즈 (Series)": "系列", "시리즈가 없습니다": "沒有系列", "시리즈명 복사 (&S)": "複製系列名稱 (&S)", "시스템": "系統", "시스템 설정 사용": "Use system setting", "시스템 종료": "Shutdown System", "시스템 트레이": "系統列", "시작 후 다운로드": "本次運行下載", "시작 후 지난 시간": "本次運行已用時間", "실패": "失敗", "실험 기능": "實驗性功能", "썸네일": "縮略圖", "썸네일 고정": "固定縮略圖", "썸네일 다운로드": "Download thumbnails", "썸네일 숨기기": "隱藏縮略圖", "썸네일 크기": "縮略圖大小", "썸네일을 선택하세요": "選擇縮略圖", "아니오(&N)": "&No", "아무것도 안 함": "Do nothing", "아이콘": "圖標", "압축": "壓縮", "압축 형식": "格式", "압축파일 연결 프로그램": "打開壓縮檔案的程式", "앞 100 페이지": "前100頁", "얕은 모델": "淺層模型", "언어": "語言", "언어 (Language)": "語言", "언어 (Languages)": "語言", "업데이트": "更新", "업데이트 중...": "正在更新……", "업데이트 체크 중...": "正在檢查更新……", "업로드": "上傳", "연결 프로그램 변경": "選擇開啟程式", "열기": "開啟", "예(&Y)": "是(&Y)", "예상치 못한 오류로 다운로드에 실패했습니다.": "意外的錯誤導致下載失敗。", "예시": "範例", "오디오 코덱 우선순위": "Audio codec priority", "오디오 트랙": "Audio track", "오류": "未知錯誤", "올바르지 않은 범위입니다": "範圍無效", "올바르지 않은 주소입니다": "無效的URL", "올바르지 않은 형식의 검색 필터입니다": "搜尋過濾器格式無效", "올바르지 않은 형식의 스크립트입니다": "無效的腳本格式", "옵션": "選項", "옵션 (JSON 포맷)": "Options (JSON format)", "옵션 (Options)": "選項", "완료": "完成", "완료된 작업 모두 제거": "刪除所有已完成的任務", "완료됨으로 표시": "標記為已完成", "완전 삭제": "永久刪除", "우선순위": "優先順序", "우선순위 변경": "Change priority", "움짤": "動圖", "움짤 변환...": "轉換動圖……", "원본": "原始", "원본 이미지 다운로드": "下載原始圖片", "원본 크기보다 크게 바뀌지는 않습니다": "大小不會超過原始大小", "원본 파일 삭제": "刪除下載的文件", "원하는 인공신경망 모델을 고르세요:": "選擇您想要的人工神經網絡模型:", "웹브라우저": "WebBrowser", "웹툰 제외": "排除網路漫畫", "유사도": "相似度", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "無效的帳號/密碼", "유효한 계정입니다": "有效的帳號", "음소거": "靜音", "음악 파일에 앨범아트 삽입": "將專輯封面插入音訊檔", "음원": "音訊", "음질": "音質", "이동": "移動", "이동할 수 없습니다: {}": "無法移動:{}", "이름": "名稱", "이름 변경": "更改名稱", "이름을 얻는 도중 실패했습니다": "讀取名稱失敗", "이미 다운로드한 작품 제외": "排除已下載的畫集", "이미 모든 그룹이 추가되어 있습니다": "所有群組已經全部添加完畢", "이미 모든 시리즈가 추가되어 있습니다": "All series have already been added", "이미 모든 작가가 추가되어 있습니다": "所有藝術家已經全部添加完畢", "이미 모든 캐릭터가 추가되어 있습니다": "All characters have already been added", "이미 추가한 작업 다시 시작할지 물어봄": "詢問是否要重試已經在任務列表中的任務", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "該任務已經在列表中。您是否要重新下載?", "이미 추가한 플러그인입니다": "該插件已經在列表中", "이미 포함하는 그룹이 있습니다.": "已經有一個包含任務的組。", "이미지": "圖像", "이미지 정보 캐시": "緩存圖像信息", "이미지 포맷 변환": "更改圖像格式", "이미지를 읽는 중 실패": "讀取圖像失敗", "익명 모드": "匿名模式", "인코딩": "編碼", "일반": "一般", "일시 정지": "Pause", "읽기 중지": "停止閱讀", "읽는 중...": "閱讀中……", "자동": "自動", "자동 녹화": "Auto recording", "자동 새로고침 & 스크롤": "自動刷新和滾動", "자동 생성 자막 포함": "包含自動字幕", "자동 선택": "自動選擇", "자동 업데이트": "自動更新", "자동 저장": "自動保存", "자막": "字幕", "자세한 정보": "Details", "자세한 정보 보기": "顯示詳細資訊", "작가": "作者", "작가 (Artists)": "作者", "작가 이름": "作者名稱", "작가 추천": "推薦作者", "작가 합쳐서 불러오기": "合併載入所有作者", "작가가 없습니다": "無作者", "작가명 복사 (&A)": "複製作者名稱 (&A)", "작게": "小", "작성자": "編輯者", "작업": "任務", "작업 개수": "任務數量", "작업 기록": "Task history", "작업 기록 초기화 성공": "Task history cleared successfully", "작업 기록이 없습니다": "No task history", "작업 당 최대 연결": "每個任務的最大連接數", "작업 만들기 실패": "Failed to create tasks", "작업 목록 폭": "任務列表寬度", "작업 수정": "修改任務", "작업 수정...": "修改任務……", "작업 완료": "Task complete", "작업 완료 후": "After task complete", "작업 왼쪽에서 순서 변경": "在左側重新排列", "작업 용량": "任務檔案大小", "작업 정보": "任務資訊", "작업 정보... (&I)": "資訊... (&I)", "작업 타입?": "任務類型?", "작업들 가져오기": "匯入任務", "작업들 내보내기": "匯出任務", "작업들을 가져올까요?": "是否要匯入任務?", "작업들을 가져왔습니다": "已匯入任務", "작업들을 내보냈습니다": "已匯出任務", "작업이 아직 완료되지 않았습니다": "任務還未完成", "작업이 완료되면 알림 보이기": "Show notifications when tasks are complete", "작품 목록 가져오기": "匯入作品列表", "작품 목록 내보내기": "匯出作品列表", "잠금": "鎖定", "잠금 해제": "解鎖", "장": "頁", "재개": "Resume", "재시작 후 적용됩니다": "重啟後生效", "저사양 모드": "低規格模式", "저장": "儲存", "저장 && 종료": "儲存並退出", "저장 실패": "儲存失敗", "저장 완료": "儲存完成", "저장 중...": "正在儲存……", "저장 폴더": "下載資料夾", "저장 폴더 변경...": "更改下載資料夾……", "저장 폴더에 있는 모든 갤러리 넘버 복사": "複製下載資料夾中的所有相簿 ID", "저장 폴더에 있는 모든 작가 불러오기": "載入下載資料夾中的所有作者", "저장... (&S)": "儲存(&S)……", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "沒有儲存的設定檔案。\n按[F1]查看使用說明。", "적어도 {} 개의 작품이 필요합니다.": "需要至少 {} 個相簿。", "점수": "評分", "정규식 문법": "正則表達式語法", "정규식으로 찾기": "正則表達式搜尋", "정렬 기준": "排序方式", "정말 단축키를 초기화하시겠습니까?": "確定要重設快捷鍵嗎?", "정말 목록에서 제거하시겠습니까?": "確定要從列表中刪除嗎?", "정말 삭제하시겠습니까?": "確定要刪除嗎?", "정말 설정을 초기화하시겠습니까?": "Are you sure you want to reset the preferences?", "정말 작업 기록을 초기화하시겠습니까?": "Are you sure you want to clear task history?", "정말 종료하시겠습니까?": "確定要退出嗎?", "정말 중지하시겠습니까?": "確定要停止嗎?", "정말 쿠키를 초기화하시겠습니까?": "確定要清除 cookies 嗎?", "정보": "關於", "정보...": "關於……", "정확도": "準確度", "제거": "刪除", "제목": "標題", "제목 (Title)": "標題", "제목 복사 (&T)": "複製標題(&T)", "제외 태그": "排除標籤", "제외 태그 목록에 그룹 추가": "新增群組至排除標籤清單", "제외 태그 목록에 시리즈 추가": "Add series to the exclusion tag list", "제외 태그 목록에 작가 추가": "新增藝術家至排除標籤清單", "제외 태그 목록에 캐릭터 추가": "Add characters to the exclusion tag list", "조각 표시": "顯示碎片", "종료": "結束", "종료 중...": "結束中……", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "水平拖曳:±1\n垂直拖曳:±100", "주소": "網址", "주소 or 갤러리 넘버": "網址或相簿編號", "주소를 입력해주세요": "請輸入網址", "중간": "中等", "중단": "中斷", "중복 이미지 찾기": "搜尋重複圖片", "중복 이미지 찾는 중": "正在搜尋重複圖片", "중복 제거": "刪除重複", "지원하는 사이트:": "支援的網站:", "지원하는 토큰": "Supported tokens", "지정한 페이지만 다운로드합니다.": "僅下載選定的頁面。", "직접 다운로드": "直接下載", "진행도": "進度", "참고 작품: {} 개": "參考作品: {} 個", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "請參考:説明 - 使用方法(F1)- 載入 Cookie", "창 보이기 / 숨기기": "顯示/隱藏窗口", "창 위치 크기 기억": "記住視窗位置和大小", "찾기...": "搜尋……", "채널 영상 역순으로 다운로드": "以相反順序下載頻道影片", "첫 번째 파일 열기": "打開第一個文件", "첫 번째 파일 열기 (&O)": "打開第一個文件 (&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "第一頁,10-20頁,最後一頁", "체인지로그": "更新日誌", "초기화": "重置", "최대 다운로드 속도": "最大下載速度", "최대 동시 작업": "最大並行任務數", "최대 페이지 제한": "最大頁數限制", "최소화 버튼으로 트레이로 최소화": "最小化按鈕最小化到系統列", "최신 버전:": "Latest:", "추가한 날짜": "加入日期", "취소": "取消", "캐릭터": "角色", "캐릭터 (Characters)": "角色", "캐릭터 이름": "角色名稱", "캐릭터가 없습니다": "沒有角色", "캐릭터명 복사 (&C)": "複製角色名稱 (&C)", "코멘트": "評論", "코멘트 수정": "修改評論", "쿠키": " Cookie", "쿠키 내보내기": "匯出 Cookie", "쿠키 내보내기 성공": "成功匯出 Cookie", "쿠키 불러오기": "載入 Cookie", "쿠키 불러오기 성공": "成功載入 Cookie", "쿠키 초기화 성공": "成功清除 Cookie", "쿠키가 없습니다": "沒有 Cookie", "쿠키를 업데이트하세요": "請更新您的 Cookie", "크게": "大", "크기": "大小", "크기 조절": "調整大小", "크기 조절...": "調整大小……", "크롬 확장프로그램 연동에 실패했습니다.": "Chrome 擴充套件連結失敗。", "클라이언트": "用戶端", "클래식": "Classic", "클립보드에서 자동 추가": "自動監控剪貼簿", "타입": "類型", "타입 (Types)": "類型", "태그": "標籤", "태그 \"{}\" 제거": "移除標籤 \"{}\"", "태그 \"{}\" 추가": "新增標籤 \"{}\"", "태그 (Tags)": "標籤", "태그 :": "標籤 :", "태그 설정": "標籤設定", "태그 수정": "編輯標籤", "태그 없음": "無標籤", "테마": "主題", "토렌트 고급 옵션 초기화": "Reset torrent advanced options", "토렌트 추가": "新增 Torrent", "토렌트 파일 연결": "關聯 Torrent 檔案", "토큰": "Tokens", "통계": "統計", "통과": "通過", "투명도": "透明度", "트래커 수정": "編輯 Tracker", "트래커 추가": "新增 Tracker", "트레이로 전환되었습니다": "最小化到系統列", "트레이로 최소화": "最小化到系統列", "트레이로 최소화 알림 보이기": "Show minimize notifications in the tray", "트레이에서 알림 보이기": "在系統列中顯示通知", "파일": "檔案", "파일 목록": "檔案清單", "파일 삭제": "刪除檔案", "파일 삭제 (&X)": "刪除檔案 (&X)", "파일 수": "檔案數量", "파일 스캔 중": "正在掃描檔案", "파일 유형 제외": "排除檔案類型", "파일 체크 중...": "正在檢查檔案……", "파일 크기": "檔案大小", "파일 형식": "檔案格式", "파일 형식 물어보기": "詢問檔案格式", "파일명": "檔名", "파일명 형식": "檔名格式", "파일을 고르세요:": "選擇檔案:", "파일을 선택하세요": "選擇檔案", "파일의 수정한 날짜를 업로드 날짜로 변경": "Change the file's modified date to the upload date", "파일이 없습니다": "沒有檔案", "패스워드": "密碼", "퍼지로 찾기": "模糊搜尋", "페이지 읽는 중...": "正在讀取頁面……", "페이지 지정": "選擇頁面", "페이지 지정 다운로드": "選擇頁面並下載", "페이지 지정 다운로드 기본값": "「選擇頁面並下載」的預設值", "페이지를 선택해주세요": "請選擇頁面", "페이지를 읽는 중에 오류가 발생했습니다": "讀取頁面時出現錯誤", "평범하게 찾기": "標準搜尋", "포트": "連接埠", "포함 태그": "包含標籤", "폭 맞춤": "自適應寬度", "폰트": "Font", "폰트 변경...": "更改字型……", "폰트 선택": "Select Font", "폰트 초기화": "重置字型", "폴더": "資料夾", "폴더 && 압축파일": "資料夾 && 壓縮檔案", "폴더 바로가기": "Folder shortcuts", "폴더 열기": "開啟資料夾", "폴더 이동": "移動資料夾", "폴더 추가": "新增資料夾", "폴더가 없습니다": "No folder", "폴더들": "資料夾列表", "폴더들을 선택하세요": "Select folders", "폴더를 선택하세요": "選擇一個資料夾", "폴더를 추가해주세요": "請添加一些資料夾", "폴더명 형식": "資料夾名稱格式", "표지 검색 실패": "搜尋封面失敗", "표지 검색...": "搜尋封面……", "프로그램 끝내기": "Quit the program", "프로그램 패스워드": "程式密碼", "프록시": "代理伺服器", "플러그인": "外掛程式", "플러그인을 추가하시겠습니까?": "您確定要添加此外掛程式嗎?", "플레이리스트": "Playlist", "플레이리스트 파일에 번호 매기기": "為播放清單文件編號", "플레이리스트 한 폴더에 다운로드": "下載播放清單到一個資料夾中", "플로팅 미리보기": "浮動預覽", "피드백": "回饋意見", "필터": "過濾器", "필터창": "過濾器視窗", "하나 이상의 타입을 선택해주세요.": "請至少選擇一種類型。", "하위폴더 포함": "包括子資料夾", "학습 중...": "正在學習……", "한 줄 당 한 트래커 URL": "每行一個Tracker URL", "항상 위": "總在最上層", "항상 위 OFF": "Always on top OFF", "항상 위 ON": "Always on top ON", "해당 링크로 이동합니다": "前往該連結……", "해상도": "解析度", "현재 버전: v{}\n최신 버전: v{}": "當前版本:v{}\n最新版本:v{}", "현재 작업 없음": "There are no current tasks", "호스트": "主機", "화 선택": "選擇集數", "화질": "畫質", "확인": "確定", "후원": "贊助", "휴지통으로 이동": "移動到資源回收桶" } } ================================================ FILE: translation/tr_zh.hdl ================================================ { "lang": "zh", "items": { "\"같은 소스 제외\" 를 켠 경우 폴더는 두 개 이상이어야 합니다": "如果开启了“排除相同来源”选项,文件夹的数量必须要超过一个。", "#Cancel#": "取消", "#EB#": "{} EB", "#EMPTY#": "空 (´・ω・`)", "#GB#": "{} GB", "#GIFs#": "GIF / WebP", "#KB#": "{} KB", "#KB/s#": "{} KB/s", "#MB#": "{} MB", "#MB/s#": "{} MB/s", "#OK#": "确定", "#PB#": "{} PB", "#TB#": "{} TB", "#appearance#": "外观", "#boss_invalid_pw#": "密码无效!", "#boss_pw#": "密码:", "#byte#": "{} 字节", "#bytes#": "{} 字节", "#click#": "点击", "#combo_hour#": "{} 小时", "#combo_hours#": "{} 小时", "#combo_min#": "{} 分钟", "#combo_mins#": "{} 分钟", "#combo_sec#": "{} Sec", "#combo_secs#": "{} Secs", "#date01#": "一月 {d}", "#date01y#": "一月 {d}, {y}", "#date02#": "二月 {d}", "#date02y#": "二月 {d}, {y}", "#date03#": "三月 {d}", "#date03y#": "三月 {d}, {y}", "#date04#": "四月 {d}", "#date04y#": "四月 {d}, {y}", "#date05#": "五月 {d}", "#date05y#": "五月 {d}, {y}", "#date06#": "六月 {d}", "#date06y#": "六月 {d}, {y}", "#date07#": "七月 {d}", "#date07y#": "七月 {d}, {y}", "#date08#": "八月 {d}", "#date08y#": "八月 {d}, {y}", "#date09#": "九月 {d}", "#date09y#": "九月 {d}, {y}", "#date10#": "十月 {d}", "#date10y#": "十月 {d}, {y}", "#date11#": "十一月 {d}", "#date11y#": "十一月 {d}, {y}", "#date12#": "十二月 {d}", "#date12y#": "十二月 {d}, {y}", "#developed_by#": "由 Kurt Bestor 开发", "#dirformat_artist#": "一些艺术家", "#dirformat_group#": "一些分组", "#dirformat_lang#": "Simplified Chinese", "#dirformat_series#": "一些系列", "#dirformat_title#": "一些标题", "#eta#": "{h:02}:{m:02}:{s:02}", "#filter_all#": "所有文件 {}", "#filter_bmk#": "书签文件 {}", "#filter_cookie#": "Netscape HTTP Cookie 文件 (*.txt)", "#filter_hdfb#": "Hitomi 下载器过滤书签 {}", "#filter_hdk#": "Hitomi 下载器 快捷方式 {}", "#filter_hdl#": "Hitomi 下载器 Linguist {}", "#filter_hds#": "Hitomi 下载器 脚本 {}", "#filter_hdt#": "Hitomi 下载器 任务 {}", "#filter_image#": "图像 {}", "#filter_torrent#": "Torrents {}", "#http_api#": "HTTP API", "#invalid_browserRequired#": "需要浏览器; 使用 --safemode", "#invalid_loginRequired#": "需要登录; 更新您的 cookie", "#invalid_loginRequired2#": "需要登录:请登录", "#invalid_outdatedExtension#": "扩展已过时; 更新扩展", "#invalid_unknownSite#": "未知站点", "#lang_afrikaans#": "Afrikaans", "#lang_albanian#": "Albanian", "#lang_amharic#": "Amharic", "#lang_arabic#": "Arabic", "#lang_arabic_(algeria)#": "Arabic (Algeria)", "#lang_arabic_(bahrain)#": "Arabic (Bahrain)", "#lang_arabic_(egypt)#": "Arabic (Egypt)", "#lang_arabic_(iraq)#": "Arabic (Iraq)", "#lang_arabic_(jordan)#": "Arabic (Jordan)", "#lang_arabic_(kuwait)#": "Arabic (Kuwait)", "#lang_arabic_(lebanon)#": "Arabic (Lebanon)", "#lang_arabic_(libya)#": "Arabic (Libya)", "#lang_arabic_(morocco)#": "Arabic (Morocco)", "#lang_arabic_(oman)#": "Arabic (Oman)", "#lang_arabic_(qatar)#": "Arabic (Qatar)", "#lang_arabic_(saudi_arabia)#": "Arabic (Saudi Arabia)", "#lang_arabic_(sudan)#": "Arabic (Sudan)", "#lang_arabic_(syrian_arab_republic)#": "Arabic (Syrian Arab Republic)", "#lang_arabic_(tunisia)#": "Arabic (Tunisia)", "#lang_arabic_(united_arab_emirates)#": "Arabic (United Arab Emirates)", "#lang_arabic_(yemen)#": "Arabic (Yemen)", "#lang_armenian#": "Armenian", "#lang_assamese#": "Assamese", "#lang_azerbaijani#": "Azerbaijani", "#lang_bashkir#": "Bashkir", "#lang_basque#": "Basque", "#lang_belarusian#": "Belarusian", "#lang_bengali_(bangladesh)#": "Bengali (Bangladesh)", "#lang_bengali_(india)#": "Bengali (India)", "#lang_breton#": "Breton", "#lang_bulgarian#": "Bulgarian", "#lang_burmese#": "Burmese", "#lang_catalan#": "Catalan", "#lang_central_khmer#": "Central Khmer", "#lang_chinese_(china)#": "Chinese (China)", "#lang_chinese_(hong_kong)#": "Chinese (Hong Kong)", "#lang_chinese_(macao)#": "Chinese (Macao)", "#lang_chinese_(simplified)#": "Chinese (Simplified)", "#lang_chinese_(singapore)#": "Chinese (Singapore)", "#lang_chinese_(taiwan)#": "Chinese (Taiwan)", "#lang_chinese_(traditional)#": "Chinese (Traditional)", "#lang_corsican#": "Corsican", "#lang_croatian_(bosnia_and_herzegovina)#": "Croatian (Bosnia and Herzegovina)", "#lang_croatian_(croatia)#": "Croatian (Croatia)", "#lang_cusco_quechua_(bolivia,_plurinational_state_of)#": "Cusco Quechua (Bolivia, Plurinational State of)", "#lang_cusco_quechua_(ecuador)#": "Cusco Quechua (Ecuador)", "#lang_cusco_quechua_(peru)#": "Cusco Quechua (Peru)", "#lang_czech#": "Czech", "#lang_danish#": "Danish", "#lang_dari#": "Dari", "#lang_dhivehi#": "Dhivehi", "#lang_dutch_(belgium)#": "Dutch (Belgium)", "#lang_dutch_(netherlands)#": "Dutch (Netherlands)", "#lang_english#": "English", "#lang_english_(australia)#": "English (Australia)", "#lang_english_(belize)#": "English (Belize)", "#lang_english_(canada)#": "English (Canada)", "#lang_english_(india)#": "English (India)", "#lang_english_(ireland)#": "English (Ireland)", "#lang_english_(jamaica)#": "English (Jamaica)", "#lang_english_(malaysia)#": "English (Malaysia)", "#lang_english_(malta)#": "English (Malta)", "#lang_english_(new_zealand)#": "English (New Zealand)", "#lang_english_(philippines)#": "English (Philippines)", "#lang_english_(singapore)#": "English (Singapore)", "#lang_english_(south_africa)#": "English (South Africa)", "#lang_english_(trinidad_and_tobago)#": "English (Trinidad and Tobago)", "#lang_english_(united_kingdom)#": "English (United Kingdom)", "#lang_english_(united_states)#": "English (United States)", "#lang_english_(zimbabwe)#": "English (Zimbabwe)", "#lang_estonian#": "Estonian", "#lang_faroese#": "Faroese", "#lang_filipino#": "Filipino", "#lang_finnish#": "Finnish", "#lang_french#": "French", "#lang_french_(belgium)#": "French (Belgium)", "#lang_french_(canada)#": "French (Canada)", "#lang_french_(france)#": "French (France)", "#lang_french_(luxembourg)#": "French (Luxembourg)", "#lang_french_(monaco)#": "French (Monaco)", "#lang_french_(switzerland)#": "French (Switzerland)", "#lang_galician#": "Galician", "#lang_georgian#": "Georgian", "#lang_german_(austria)#": "German (Austria)", "#lang_german_(germany)#": "German (Germany)", "#lang_german_(liechtenstein)#": "German (Liechtenstein)", "#lang_german_(luxembourg)#": "German (Luxembourg)", "#lang_german_(switzerland)#": "German (Switzerland)", "#lang_gujarati#": "Gujarati", "#lang_hebrew#": "Hebrew", "#lang_hindi#": "Hindi", "#lang_hungarian#": "Hungarian", "#lang_icelandic#": "Icelandic", "#lang_igbo#": "Igbo", "#lang_inari_sami#": "Inari Sami", "#lang_indonesian#": "Indonesian", "#lang_irish#": "Irish", "#lang_italian_(italy)#": "Italian (Italy)", "#lang_italian_(switzerland)#": "Italian (Switzerland)", "#lang_japanese#": "Japanese", "#lang_kalaallisut#": "Kalaallisut", "#lang_kannada#": "Kannada", "#lang_kazakh#": "Kazakh", "#lang_kinyarwanda#": "Kinyarwanda", "#lang_kirghiz#": "Kirghiz", "#lang_korean#": "Korean", "#lang_lao#": "Lao", "#lang_latvian#": "Latvian", "#lang_lithuanian#": "Lithuanian", "#lang_lower_sorbian#": "Lower Sorbian", "#lang_lule_sami_(norway)#": "Lule Sami (Norway)", "#lang_lule_sami_(sweden)#": "Lule Sami (Sweden)", "#lang_luxembourgish#": "Luxembourgish", "#lang_macedonian#": "Macedonian", "#lang_malayalam#": "Malayalam", "#lang_maltese#": "Maltese", "#lang_maori#": "Maori", "#lang_mapudungun#": "Mapudungun", "#lang_marathi#": "Marathi", "#lang_modern_greek#": "Modern Greek", "#lang_mohawk#": "Mohawk", "#lang_mongolian#": "Mongolian", "#lang_nepali#": "Nepali", "#lang_northern_sami_(finland)#": "Northern Sami (Finland)", "#lang_northern_sami_(norway)#": "Northern Sami (Norway)", "#lang_northern_sami_(sweden)#": "Northern Sami (Sweden)", "#lang_norwegian#": "Norwegian", "#lang_norwegian_bokmål#": "Norwegian Bokmål", "#lang_norwegian_nynorsk#": "Norwegian Nynorsk", "#lang_odia#": "Odia", "#lang_panjabi#": "Panjabi", "#lang_pedi#": "Pedi", "#lang_persian#": "Persian", "#lang_polish#": "Polish", "#lang_portuguese#": "Portuguese", "#lang_portuguese_(brazil)#": "Portuguese (Brazil)", "#lang_portuguese_(portugal)#": "Portuguese (Portugal)", "#lang_pushto#": "Pushto", "#lang_romanian_(macao)#": "Romanian (Macao)", "#lang_romanian_(romania)#": "Romanian (Romania)", "#lang_romansh#": "Romansh", "#lang_russian#": "Russian", "#lang_russian_(macao)#": "Russian (Macao)", "#lang_russian_(russian_federation)#": "Russian (Russian Federation)", "#lang_sanskrit#": "Sanskrit", "#lang_scottish_gaelic_(ireland)#": "Scottish Gaelic (Ireland)", "#lang_scottish_gaelic_(united_kingdom)#": "Scottish Gaelic (United Kingdom)", "#lang_serbian_(bosnia_and_herzegovina)#": "Serbian (Bosnia and Herzegovina)", "#lang_serbian_(cyrillic)#": "Serbian (Cyrillic)", "#lang_serbian_(latin)#": "Serbian (Latin)", "#lang_serbian_(montenegro)#": "Serbian (Montenegro)", "#lang_serbian_(serbia)#": "Serbian (Serbia)", "#lang_sichuan_yi#": "Sichuan Yi", "#lang_sinhala#": "Sinhala", "#lang_skolt_sami#": "Skolt Sami", "#lang_slovak#": "Slovak", "#lang_slovenian#": "Slovenian", "#lang_southern_sami_(norway)#": "Southern Sami (Norway)", "#lang_southern_sami_(sweden)#": "Southern Sami (Sweden)", "#lang_spanish#": "Spanish", "#lang_spanish_(argentina)#": "Spanish (Argentina)", "#lang_spanish_(bolivia,_plurinational_state_of)#": "Spanish (Bolivia, Plurinational State of)", "#lang_spanish_(chile)#": "Spanish (Chile)", "#lang_spanish_(colombia)#": "Spanish (Colombia)", "#lang_spanish_(costa_rica)#": "Spanish (Costa Rica)", "#lang_spanish_(dominican_republic)#": "Spanish (Dominican Republic)", "#lang_spanish_(ecuador)#": "Spanish (Ecuador)", "#lang_spanish_(el_salvador)#": "Spanish (El Salvador)", "#lang_spanish_(guatemala)#": "Spanish (Guatemala)", "#lang_spanish_(honduras)#": "Spanish (Honduras)", "#lang_spanish_(mexico)#": "Spanish (Mexico)", "#lang_spanish_(nicaragua)#": "Spanish (Nicaragua)", "#lang_spanish_(panama)#": "Spanish (Panama)", "#lang_spanish_(paraguay)#": "Spanish (Paraguay)", "#lang_spanish_(peru)#": "Spanish (Peru)", "#lang_spanish_(puerto_rico)#": "Spanish (Puerto Rico)", "#lang_spanish_(spain)#": "Spanish (Spain)", "#lang_spanish_(united_states)#": "Spanish (United States)", "#lang_spanish_(uruguay)#": "Spanish (Uruguay)", "#lang_spanish_(venezuela,_bolivarian_republic_of)#": "Spanish (Venezuela, Bolivarian Republic of)", "#lang_swahili#": "Swahili", "#lang_swedish_(finland)#": "Swedish (Finland)", "#lang_swedish_(sweden)#": "Swedish (Sweden)", "#lang_swiss_german#": "Swiss German", "#lang_syriac#": "Syriac", "#lang_tamil#": "Tamil", "#lang_tatar#": "Tatar", "#lang_telugu#": "Telugu", "#lang_thai#": "Thai", "#lang_tibetan#": "Tibetan", "#lang_tswana#": "Tswana", "#lang_turkish#": "Turkish", "#lang_turkmen#": "Turkmen", "#lang_uighur#": "Uighur", "#lang_ukrainian#": "Ukrainian", "#lang_upper_sorbian#": "Upper Sorbian", "#lang_urdu#": "Urdu", "#lang_uzbek#": "Uzbek", "#lang_vietnamese#": "Vietnamese", "#lang_welsh#": "Welsh", "#lang_western_frisian#": "Western Frisian", "#lang_wolof#": "Wolof", "#lang_xhosa#": "Xhosa", "#lang_yakut#": "Yakut", "#lang_yoruba#": "Yoruba", "#lang_zulu#": "Zulu", "#loading_lib#": "正在加载:{}", "#new_group#": "New group", "#new_item#": "新建项目", "#p#": "{}p", "#recomm_all_langs#": "所有语言", "#recomm_artist#": "艺术家", "#recomm_main#": "通过分析存储文件夹中的作品推荐作者。\n\n结果的准确性是给定作品内的准确性。\n作品越多越好。(推荐 100 或更多)\n\n有 {item} 个作品:", "#recomm_score#": "评分", "#server_t_ehen#": "E(x)Hentai", "#server_t_hitomi#": "Hitomi.la", "#setting_MB/s#": "MB/s", "#setting_autosaveL#": "每个", "#setting_autosaveR#": "", "#setting_incompleteL#": "之后", "#setting_incompleteR#": "", "#t_etc#": "Etc", "#t_file#": "文件", "#t_insta#": "Instagram", "#t_pixiv#": "Pixiv", "#t_torrent#": "Torrent", "#t_twitch#": "Twitch", "#t_twitter#": "Twitter", "#t_youtube#": "YouTube", "#tag_blue#": "蓝", "#tag_gray#": "Gray", "#tag_green#": "绿", "#tag_orange#": "橙", "#tag_purple#": "紫", "#tag_red#": "红", "#tag_yellow#": "黄", "#task_artist#": "艺术家", "#task_date#": "日期", "#task_done#": "完成", "#task_folder#": "文件夹", "#task_incomplete#": "未完成", "#task_input#": "输入", "#task_invalid#": "无效", "#task_multiple#": "多个", "#task_range#": "范围", "#task_single#": "单个", "#task_site#": "网站", "#task_status#": "状态", "#task_title#": "标题", "#task_type#": "类型", "#task_url#": "URL", "#task_zipfile#": "Zip 文件", "#torrent_anon#": "对于跟踪器(除私有种子外),会采用一种通用的用户代理。
您的本地IPv4和IPv6地址不会作为查询的字符串参数发送给私有跟踪器。
如果配置了announce_ip,它将不会被发送给跟踪器。
客户端版本不会在扩展握手中发送给对方节点。
DHT节点将被禁用。", "#translation#": "翻译", "50개씩 끊어서 검색": "仅显示 50 个搜索条目", "DPI 우회": "绕过 DPI", "DPI 우회 제외 도메인": "Domains excluded from DPI bypass", "DPI 우회가 꺼져있습니다. 일부 사이트에서 작동하지 않을 수 있습니다.": "绕过 DPI 已关闭。在某些网站可能无法使用。", "E(x)Hentai 로그인 쿠키 필요": "需要 E Hentai 登录 cookie", "IP가 일시적으로 잠겼습니다. 잠시 후에 다시 시도해주세요": "您的 IP 被暂时锁定,请稍后再试。", "PDF 생성": "创建 PDF", "UI 스케일 ({}%)": "界面缩放 ({}%)", "URL을 입력하세요": "请输入网址", "[다운로드]를 눌러 다운받아주세요. [OK]를 누르면 종료됩니다": "按[下载]进行下载。按[确定]退出.", "reCAPTCHA 풀기": "解决验证码", "{day}일 {hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "{day}日 {hour}小时 {min}分 {sec}秒 后重新启动: {id}", "{hour}시간 {min}분 {sec}초": "{hour} 小时 {min} 分钟 {sec} 秒", "{hour}시간 {min}분 {sec}초 뒤 다시 시작: {id}": "{hour}小时 {min}分钟 {sec}秒 后重新启动:{id}", "{min}분 {sec}초 뒤 다시 시작: {id}": "在 {min} 分钟 {sec} 秒重新启动:{id}", "{sec}초 뒤 다시 시작: {id}": "{sec} 秒后重新启动:{id}", "{} 개 선택": "{} 个已选中任务", "{} 개 찾음": "{} 条目", "{} 개의 작업들이 있습니다": "有 {} 任务", "{} 개의 진행 중인 작업이 있습니다.": "有 {} 个任务正在进行中。", "{} 를 제외 태그에 추가했습니다": "将 {} 添加到排除标记列表", "{} 설정": "{} 设置", "{} 시간 뒤 다시 시작": "{} 小时后重新启动", "{} 시간 전 데이터": "数据; {} 小时前", "{} 일 뒤 다시 시작": "{} 日后重新启动", "{} 일 전 데이터": "数据; {} 几天前", "{}개 작업의 첫 번째 파일을 엽니다.": "打开每个 {} 任务的第一个文件。", "{}개의 불완전한 작업을 다시 시작합니다.": "重新启动 {}个未完成的任务。", "{}개의 완료된 작업을 목록에서 제거합니다.": "删除 {} 列表中已完成的任务。", "{}개의 완료된 작업을 제거합니다.": "删除 {} 已完成的任务。", "{}개의 작업을 다시 시작합니다.": "重新启动 {} 任务。", "『 {} 』는 이미 북마크되어 있습니다": "『 {} 』已加入书签", "『 {} 』를 복사했습니다": "『 {} 』已复制", "『 {} 』를 북마크로부터 불러왔습니다": "『 {} 』从书签加载", "『 {} 』를 북마크에서 불러왔습니다": "『 {} 』从书签加载", "『 {} 』를 북마크했습니다": "『 {} 』书签有", "『 {} 』를 저장 폴더에서 불러왔습니다": "『 {} 』从下载文件夹加载", "가능하면 일본어 제목 사용": "使用日语标题(如果可用)", "가능한 경우 챕터 마커 추가": "添加章节标记(如果有)", "가져오기": "导入", "가져오기 실패": "导入失败", "간단 검색": "简单搜索", "같은 소스 제외": "排除相同来源", "개": "线程", "개별 다운로드는 지원하지 않습니다": "不支持单独下载", "갤러리 넘버": "图库 ID", "갤러리 넘버 복사": "复制图库编号", "갤러리 넘버를 복사하는 중에 오류가 발생했습니다.": "复制图库 ID 时出错.", "갤러리 작업 정보... (&I)": "图库信息(&I)...", "갤러리 정보": "图库信息", "갤러리 정보 파일 (info.txt) 생성": "创建图库信息文件(info.txt)", "갯수": "计数", "갱신 간격": "Refresh interval", "거꾸로": "反序", "검색": "搜索", "검색 데이터": "搜索数据", "검색 도중에 사용할 수 없는 기능입니다.": "搜索过程中无法使用此功能。", "검색 범위": "搜索范围", "검색 순서": "搜索排序", "검색 필터": "搜索过滤", "검색기": "搜索", "검색어": "搜索关键词", "검색어 자동 완성": "自动填充关键字", "결과": "结果", "결과 저장": "保存结果", "경고 없이 삭제": "删除无需确认", "경로를 선택하세요": "选择路径", "계속 검색": "搜索下一个", "계정": "帐户", "계정 / 패스워드": "帐户/密码", "고급": "高级", "고급 검색": "高级搜索", "고급 옵션": "高级设置", "고정": "固定", "고정 해제": "取消固定", "공식 스크립트 && 플러그인": "官方脚本 && 插件", "공인 IP: {}": "公共 IP: {}", "관리자 권한 없이 실행": "在没有管理员权限的情况下运行", "관리자 권한 필요": "需要管理员权限", "광고 스킵": "跳过广告", "그대로": "正序", "그룹": "分组", "그룹 (Groups)": "分组", "그룹 안의 모든 작업 다시 시작": "重新下载本组所有任务", "그룹 이름": "组名", "그룹 펼치기 / 접기": "展开/折叠组", "그룹 합쳐서 불러오기": "一起加载所有组", "그룹명 복사 (&G)": "复制组名(&G)", "그룹으로 이동": "移动到组", "그룹을 포함하는 그룹은 만들 수 없습니다.": "组不能包含组。", "그룹이 없습니다": "没有分组", "기본": "默认", "기본 데이터": "基本数据", "기본 데이터 다운로드": "下载基本数据", "기본 정렬 상태에서만 그룹을 만들 수 있습니다.": "只能以默认排序创建分组。", "기본값": "默认值", "기타": "等等。", "깊은 모델": "深度模型", "끝내기": "关闭", "날짜": "日期", "낮음": "低", "내보내기": "导出", "내보내기 실패": "导出失败", "내용 보기": "查看脚本", "내장 웹브라우저": "内置 Web 浏览器", "내장 이미지 뷰어": "内置图像查看器", "네트워크": "网络", "녹화": "录制", "녹화 중...": "正在录制中...", "녹화 중지": "停止录制", "높음": "高", "다른 동영상 사이트에도 적용됩니다.": "也适用于其他视频网站。", "다시 시작 (&S)": "重新开始(&S)", "다시 시작 실패; 복구됨": "重试失败; 已恢复", "다운로드": "下载", "다운로드 & 제거": "下载 & 删除", "다운로드 && 제거": "下载 & 删除", "다운로드 (&D)": "下载(&D)", "다운로드 날짜 표시": "显示下载日期", "다운로드 속도": "下载速度", "다운로드 완료": "下载完成", "다운로드 완료 후 자동 제거": "完成下载后自动删除", "다운로드 일시 정지 / 재개": "下载暂停/恢复", "다운로드 중": "下载中", "다운로드가 완료되면 알림": "下载完成后显示通知", "다운로드가 완료될 때까지 절전모드 방지": "在下载完成前阻止系统休眠", "다운로드하기 전에 파일 고르기": "在下载前选择文件。", "다운로드하지 않음": "不要下载", "다운로드한 작품만": "仅下载画廊", "다음 검색시 더 빠르게 검색": "下一次搜索时更快搜索", "다음 작업들이 목록에서 제거됩니다:": "以下任务将会从列表中移除:", "다음 파일들이 삭제됩니다:": "以下文件将会被删除:", "다크 모드": "深色模式", "단일 파일": "单个文件", "단축키": "快捷键", "단축키 내보내기": "导出快捷键", "단축키 내보내기 성공": "已导出快捷键设置", "단축키 불러오기": "导入快捷键", "단축키 불러오기 성공": "已导入快捷键设置", "단축키 수정": "编辑快捷键", "단축키 초기화 성공": "重置快捷键", "닫기 버튼으로 트레이로 최소화": "点击关闭时最小化到系统托盘", "대기 중": "等待...", "대기 중...": "等待...", "데이터 다운로더": "数据下载器", "데이터 분류 중...": "分类数据...", "데이터 분석 중...": "分析数据...", "데이터 없음": "无数据", "데이터 읽는 중...": "读取数据...", "데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "没有数据。\n请从菜单下载数据。", "데이터가 없습니다. 검색기에서 데이터를 다운로드 해주세요": "没有数据。\n请从搜索器下载数据。", "데이터가 일주일 이상 경과했습니다.\n데이터를 업데이트 해주세요.": "您的数据已过期一周。\n请更新数据。", "데이터를 다운로드하는 도중에 실패했습니다.": "下载数据失败", "데이터를 모두 받았습니다!": "下载完成所有数据!", "도구": "工具", "도구창": "工具窗口", "도움말": "帮助", "동영상": "视频", "동영상 변환...": "转换视频...", "뒤 100 페이지": "最后 100 页", "드래그 & 드랍해서 바꾸세요:": "拖拽排序服务器:", "디더링": "调节", "디버그": "调试", "디스코드": "Discord", "라이선스": "许可证", "랜덤으로 하나 선택": "随机选择一个", "로그...": "日志...", "로그인": "登录", "로그인 실패: {}{}\n[옵션 - 설정 - Pixiv 설정 - 로그인] 에서 설정해주세요.": "登录失败: {}{}\n请查看 [选项 - 偏好 - Pixiv 设置 - 登录]。", "로그인 중...": "登录...", "로그인 테스트": "登录测试", "로드 중: {}": "正在加载:{}", "로컬 파일 감지": "检测本地文件", "로컬 파일로부터 새 작업 만들기": "从本地文件创建新任务", "를 북마크에서 지웠습니다": "已从书签中删除", "리트윗 제외": "排除转发", "리트윗 포함": "包含转发推文", "릴리즈 노트": "版本说明", "링크 열기": "打开链接", "링크 주소 복사": "复制链接地址", "링크 주소 복사 (&C)": "复制链接地址(&C)", "마무리 중...": "完成...", "멈춤": "已停止", "메뉴": "菜单", "메모리 사용량": "内存使用情况", "메모리 사용량 표시": "显示内存使用情况", "메시지 상자": "留言框", "모델": "模型", "모델 생성 중...": "创建模型...", "모델: {}": "模型: {}", "모두": "All", "모두 삭제": "全部删除", "모두 선택": "全选", "모든 갤러리 넘버를 복사했습니다.": "复制所有图库 ID。", "모든 언어": "所有语言", "모든 작업 완료": "所有任务完成", "모든 작업 완료 후": "当所有任务完成后", "모든 작업이 완료되면 알림 보이기": "所有任务完成时显示通知", "목록": "列表", "목록 주소를 입력해주세요": "请输入列表地址", "목록 지우기": "删除列表", "목록에서 제거": "从列表中删除", "목록에서 폴더 제거": "从列表中删除文件夹", "목록을 모두 지울까요?": "您确定要清除列表吗?", "미리보기": "预览", "미리보기 크기": "预览尺寸", "배경 이미지": "背景图片", "배경 이미지 변경": "替换背景图片", "배경 이미지 초기화": "重置背景图片", "버전 확인": "检查版本", "번역": "翻译", "베타 버전 설치": "安装测试版", "변경할 최대 크기": "最大尺寸", "변경할 최소 크기": "最小尺寸", "변환 중...": "转换中...", "보기": "查看", "보통": "正常", "부팅 시 실행": "随Windows启动运行", "북마크": "书签", "북마크 가져오기": "导入书签", "북마크 가져오기 실패": "无法导入书签", "북마크 내보내기": "导出书签", "북마크 내보내기 실패": "无法导出书签", "북마크를 가져왔습니다": "已导入书签", "북마크를 내보냈습니다": "已导出书签", "북마크를 모두 삭제합니다.": "删除所有书签。", "북마크를 모두 삭제했습니다.": "删除所有书签。", "불러오기": "导入", "불완전한 작업 모두 다시 시작": "重新开始所有未完成的任务", "불완전한 작업 자동으로 다시 시작": "启动后自动开始未完成任务", "붙여넣고 다운로드": "粘贴并下载", "뷰어... (&V)": "查看器(&V)...", "브라우저로 보기": "在浏览器中显示", "브라우저로 보기 (&B)": "在浏览器中查看(&B)", "비디오 코덱 우선순위": "视频编解码器优先级", "비슷한 이미지 포함 (느림)": "包括相似的图像(慢)", "비율 유지": "宽高比", "비율 유지 - 꽉 차게": "纵横比 - 填充", "비정상적인 로그인 시도": "登录异常", "빠른 시작을 위한 작업 레이지 로딩": "延迟加载任务以快速启动", "빠른 실행 도구 모음 사용자 지정": "自定义快速访问工具栏", "뽑기": "随机", "뽑을 갯수": "画廊数量", "사용법": "如何使用", "사용법...": "使用方法...", "사용자 지정 테마 색": "自定义主题颜色", "사이드바": "侧边栏", "사이트": "网站", "사이트 추가": "网站支持", "사이트를 추가했습니다": "支持网站添加", "삭제된 데이터": "删除数据", "삭제된 데이터 다운로드": "下载已删除的数据", "삭제된 데이터가 없습니다.\n메뉴에서 데이터를 다운로드해주세요.": "没有删除的数据。\n请从菜单下载数据。", "삭제된 데이터를 다운로드하는 도중에 실패했습니다.": "无法下载已删除的数据", "삭제된 데이터를 모두 받았습니다!": "下载完成: 删除数据", "삭제시 휴지통으로 보냄": "删除到回收站", "상태": "状态", "새 그룹 만들기": "创建新组", "새 버전이 있습니다. 업데이트 하실래요?": "发现新版本现在更新么?", "새로고침": "刷新", "샘플": "Sample", "서명": "证书", "서버": "服务器", "선택 화 다운로드": "选择章节 && 下载", "선택된 작업들 내보내기": "导出所选任务", "선택된 작업이 없습니다": "未选择任何任务", "선택하세요:": "选择:", "선택한 항목 중에서 자동 선택": "自动选择所选项目", "선호 언어": "Preferred language", "설명": "注释", "설정": "首选项", "설정 (Preferences)": "设置", "설정을 따름": "遵循设置", "성공: {}\n실패: {}": "成功: {}\n失败: {}", "소리": "声音", "수동": "手动", "수동 업데이트": "手动更新", "수정...": "编辑...", "순서 변경": "重新排序", "숨김 키": "老板键", "숫자": "重新编号", "스레드": "最大连接", "스레드 생성 중...": "开始线程...", "스크롤 속도 ({}x)": "滚动速度 ({}x)", "스크립트": "脚本", "스크립트 가져오기": "导入脚本", "스크립트 작성법": "如何编写脚本", "스크립트를 실행하시겠습니까?": "您确定要运行此脚本吗?", "스크립트를 읽는 중 오류가 발생했습니다": "读取脚本时出错", "스토리 읽는 중...": "阅读故事...", "스토리 포함": "包括故事", "시딩": "做种中", "시딩 중지": "停止做种", "시딩 하지 않음": "无种子", "시리즈": "系列", "시리즈 (Series)": "系列", "시리즈가 없습니다": "没有系列", "시리즈명 복사 (&S)": "复制系列名称(&S)", "시스템": "系统", "시스템 설정 사용": "使用系统设置", "시스템 종료": "关机", "시스템 트레이": "系统托盘", "시작 후 다운로드": "启动后下载", "시작 후 지난 시간": "已运行", "실패": "失败", "실험 기능": "实验功能", "썸네일": "缩略图", "썸네일 고정": "修复缩略图", "썸네일 다운로드": "下载缩略图", "썸네일 숨기기": "隐藏缩略图", "썸네일 크기": "缩略图大小", "썸네일을 선택하세요": "选择缩略图", "아니오(&N)": "否(&N)", "아무것도 안 함": "无动作", "아이콘": "图标", "압축": "压缩", "압축 형식": "压缩格式", "압축파일 연결 프로그램": "选择解压工具(默认留空)", "앞 100 페이지": "前 100 页", "얕은 모델": "浅式模型", "언어": "语言", "언어 (Language)": "语言 (Language)", "언어 (Languages)": "语言 (Languages)", "업데이트": "更新", "업데이트 중...": "更新...", "업데이트 체크 중...": "检查更新...", "업로드": "上传", "연결 프로그램 변경": "选择用于解压压缩包的工具", "열기": "打开", "예(&Y)": "是(&Y)", "예상치 못한 오류로 다운로드에 실패했습니다.": "下载失败,出现意外错误。", "예시": "示例", "오디오 코덱 우선순위": "音频编解码器优先级", "오디오 트랙": "音轨", "오류": "Error", "올바르지 않은 범위입니다": "无效的范围", "올바르지 않은 주소입니다": "无效的网址", "올바르지 않은 형식의 검색 필터입니다": "搜索过滤器格式不正确", "올바르지 않은 형식의 스크립트입니다": "格式脚本无效", "옵션": "选项", "옵션 (JSON 포맷)": "选项 (JSON format)", "옵션 (Options)": "选项", "완료": "完成", "완료된 작업 모두 제거": "删除所有已完成的任务", "완료됨으로 표시": "标记为已完成", "완전 삭제": "永久删除", "우선순위": "排序", "우선순위 변경": "更改优先级", "움짤": "其他设置", "움짤 변환...": "转换 Ugoira...", "원본": "原始", "원본 이미지 다운로드": "下载原始图片", "원본 크기보다 크게 바뀌지는 않습니다": "它的变化不会超过原始尺寸", "원본 파일 삭제": "删除下载的文件", "원하는 인공신경망 모델을 고르세요:": "选择您想要的人工神经网络模型:", "웹브라우저": "WebBrowser", "웹툰 제외": "排除网络漫画", "유사도": "相似", "유튜브": "YouTube", "유효하지 않은 계정 / 패스워드입니다": "无效的帐户/密码", "유효한 계정입니다": "登录测试成功", "음소거": "静音", "음악 파일에 앨범아트 삽입": "将专辑封面添加到音频文件", "음원": "音频", "음질": "音质", "이동": "移动", "이동할 수 없습니다: {}": "无法移动: {}", "이름": "名称", "이름 변경": "重命名分组", "이름을 얻는 도중 실패했습니다": "获取名称时失败", "이미 다운로드한 작품 제외": "排除已经下载的图库", "이미 모든 그룹이 추가되어 있습니다": "所有群组均已添加", "이미 모든 시리즈가 추가되어 있습니다": "所有系列均已添加", "이미 모든 작가가 추가되어 있습니다": "所有艺术家均已添加", "이미 모든 캐릭터가 추가되어 있습니다": "所有人物均已添加", "이미 추가한 작업 다시 시작할지 물어봄": "请求重试列表中的任务", "이미 추가한 작업입니다. 다시 다운로드하시겠습니까?": "任务已在列表中,是否重新下载?", "이미 추가한 플러그인입니다": "插件已在列表中", "이미 포함하는 그룹이 있습니다.": "已经有一个包含任务的组。", "이미지": "图像", "이미지 정보 캐시": "缓存图像信息", "이미지 포맷 변환": "更改图像格式", "이미지를 읽는 중 실패": "无法读取图像", "익명 모드": "匿名模式", "인코딩": "编码", "일반": "一般", "일시 정지": "Pause", "읽기 중지": "停止读取", "읽는 중...": "读取中...", "자동": "自动", "자동 녹화": "自动读取", "자동 새로고침 & 스크롤": "自动刷新和滚动", "자동 생성 자막 포함": "包括自动生成的字幕", "자동 선택": "自动检查", "자동 업데이트": "自动更新", "자동 저장": "自动保存", "자막": "字幕", "자세한 정보": "Details", "자세한 정보 보기": "显示详细信息", "작가": "艺术家", "작가 (Artists)": "艺术家", "작가 이름": "艺术家名", "작가 추천": "推荐艺术家", "작가 합쳐서 불러오기": "从书签加载所有艺术家", "작가가 없습니다": "没有艺术家", "작가명 복사 (&A)": "复制艺术家名(&A)", "작게": "小", "작성자": "作者", "작업": "任务", "작업 개수": "完成任务数量", "작업 기록": "Task history", "작업 기록 초기화 성공": "Task history cleared successfully", "작업 기록이 없습니다": "No task history", "작업 당 최대 연결": "每个任务的最大线程数", "작업 만들기 실패": "创建任务失败", "작업 목록 폭": "任务列表宽度", "작업 수정": "编辑任务", "작업 수정...": "编辑任务...", "작업 완료": "任务完成", "작업 완료 후": "任务完成后", "작업 왼쪽에서 순서 변경": "在左侧重新排序", "작업 용량": "完成文件大小", "작업 정보": "任务信息", "작업 정보... (&I)": "信息(&I)...", "작업 타입?": "任务类型?", "작업들 가져오기": "导入任务", "작업들 내보내기": "导出任务", "작업들을 가져올까요?": "是否要导入任务?", "작업들을 가져왔습니다": "已导入任务", "작업들을 내보냈습니다": "已导出任务", "작업이 아직 완료되지 않았습니다": "任务尚未完成", "작업이 완료되면 알림 보이기": "任务完成时显示通知", "작품 목록 가져오기": "导入图库列表", "작품 목록 내보내기": "导出图库列表", "잠금": "锁定", "잠금 해제": "解锁", "장": "页面", "재개": "Resume", "재시작 후 적용됩니다": "重启后应用", "저사양 모드": "低性能模式", "저장": "保存", "저장 && 종료": "保存 && 关闭", "저장 실패": "保存失败", "저장 완료": "保存完毕", "저장 중...": "保存...", "저장 폴더": "保存文件夹", "저장 폴더 변경...": "更改保存路径...", "저장 폴더에 있는 모든 갤러리 넘버 복사": "复制下载文件夹中的所有所有图库编号", "저장 폴더에 있는 모든 작가 불러오기": "从下载文件夹中加载所有艺术家", "저장... (&S)": "保存(&S)...", "저장된 설정 파일이 없습니다.\n[F1] 을 눌러서 사용법을 보세요.": "没有配置文件 [F1] 键阅读 \"如何使用\"", "적어도 {} 개의 작품이 필요합니다.": "至少需要 {} 个库。", "점수": "评分", "정규식 문법": "正则表达式", "정규식으로 찾기": "用正则查找", "정렬 기준": "排序方式", "정말 단축키를 초기화하시겠습니까?": "您确定要重置设置的快捷键吗?", "정말 목록에서 제거하시겠습니까?": "确定要从列表中删除吗?", "정말 삭제하시겠습니까?": "确实要删除吗?", "정말 설정을 초기화하시겠습니까?": "Are you sure you want to reset the preferences?", "정말 작업 기록을 초기화하시겠습니까?": "Are you sure you want to clear task history?", "정말 종료하시겠습니까?": "你确定你要关闭吗?", "정말 중지하시겠습니까?": "你确定要停止吗?", "정말 쿠키를 초기화하시겠습니까?": "您确定要清除 cookie 吗?", "정보": "信息", "정보...": "关于...", "정확도": "准确", "제거": "移除", "제목": "标题", "제목 (Title)": "标题", "제목 복사 (&T)": "复制标题(&T)", "제외 태그": "要排除的标签", "제외 태그 목록에 그룹 추가": "将组添加到排除标签列表", "제외 태그 목록에 시리즈 추가": "将系列添加到排除标签列表", "제외 태그 목록에 작가 추가": "将艺术家添加到排除标签列表", "제외 태그 목록에 캐릭터 추가": "将人物添加到排除标签列表", "조각 표시": "显示示作品", "종료": "关闭", "종료 중...": "关闭...", "좌우로 끌어서 1 씩 증감\n상하로 끌어서 100 씩 증감": "向左或向右拖动增加或减少: ±1\n向上或向下拖动增加或减少: ±100", "주소": "地址", "주소 or 갤러리 넘버": "网址或图库 ID", "주소를 입력해주세요": "请输入一些网址", "중간": "中等", "중단": "停止搜索", "중복 이미지 찾기": "重复图像查找器", "중복 이미지 찾는 중": "正在查找重复的图片", "중복 제거": "去除重复", "지원하는 사이트:": "支持的网站:", "지원하는 토큰": "支持的 tokens", "지정한 페이지만 다운로드합니다.": "仅下载所选页面。", "직접 다운로드": "直接下载", "진행도": "进程", "참고 작품: {} 개": "引用:{} 个画廊", "참고해주세요: 도움말 - 사용법 (F1) - 쿠키 불러오기": "请参阅:帮助-手册 (F1) - 加载 cookie", "창 보이기 / 숨기기": "显示/隐藏窗口", "창 위치 크기 기억": "记住窗口位置大小", "찾기...": "搜索...", "채널 영상 역순으로 다운로드": "倒序下载频道视频", "첫 번째 파일 열기": "打开第一个文件", "첫 번째 파일 열기 (&O)": "打开第一个文件(&O)", "첫 페이지, 10 ~ 20 페이지, 마지막 페이지": "第一页, 10 ~ 20th 页, 最后一页", "체인지로그": "更改日志", "초기화": "重置", "최대 다운로드 속도": "下载限速", "최대 동시 작업": "同时下载的最大任务数", "최대 페이지 제한": "最大页面限制", "최소화 버튼으로 트레이로 최소화": "点击最小化时最小化到托盘", "최신 버전:": "最新版本:", "추가한 날짜": "添加日期", "취소": "取消", "캐릭터": "人物", "캐릭터 (Characters)": "人物", "캐릭터 이름": "角色名称", "캐릭터가 없습니다": "没有人物", "캐릭터명 복사 (&C)": "复制角色名(&C)", "코멘트": "注释", "코멘트 수정": "编辑注释", "쿠키": "Cookies", "쿠키 내보내기": "导出 cookies", "쿠키 내보내기 성공": "Cookie 已成功导出", "쿠키 불러오기": "导入 cookies", "쿠키 불러오기 성공": "Cookies 已成功导入", "쿠키 초기화 성공": "Cookies 已成功清除", "쿠키가 없습니다": "无 cookies", "쿠키를 업데이트하세요": "更新您的 cookie", "크게": "大", "크기": "大小", "크기 조절": "缩放", "크기 조절...": "调整大小...", "크롬 확장프로그램 연동에 실패했습니다.": "Chrome 扩展链接失败。", "클라이언트": "客户", "클래식": "经典", "클립보드에서 자동 추가": "监视剪贴板", "타입": "类型", "타입 (Types)": "类型", "태그": "标签", "태그 \"{}\" 제거": "删除标签 \"{}\"", "태그 \"{}\" 추가": "添加标签 \"{}\"", "태그 (Tags)": "标签", "태그 :": "标签:", "태그 설정": "标签设置", "태그 수정": "编辑标签", "태그 없음": "无标签", "테마": "主题", "토렌트 고급 옵션 초기화": "重置 torrent 高级选项", "토렌트 추가": "打开种子文件", "토렌트 파일 연결": "与 torrent 文件关联", "토큰": "Tokens", "통계": "统计", "통과": "不压缩打包", "투명도": "透明度", "트래커 수정": "编辑 trackers", "트래커 추가": "添加 trackers", "트레이로 전환되었습니다": "最小化到系统托盘", "트레이로 최소화": "最小化到系统托盘", "트레이로 최소화 알림 보이기": "在托盘中显示最小化通知", "트레이에서 알림 보이기": "在托盘中显示通知", "파일": "文件", "파일 목록": "文件列表", "파일 삭제": "删除文件", "파일 삭제 (&X)": "删除文件(&X)", "파일 수": "文件数", "파일 스캔 중": "扫描文件", "파일 유형 제외": "排除文件类型", "파일 체크 중...": "检查文件...", "파일 크기": "文件大小", "파일 형식": "文件类型", "파일 형식 물어보기": "询问文件类型", "파일명": "文件名", "파일명 형식": "文件名格式", "파일을 고르세요:": "选择文件:", "파일을 선택하세요": "选择一个文件", "파일의 수정한 날짜를 업로드 날짜로 변경": "将文件的修改日期更改为上传日期", "파일이 없습니다": "无文件", "패스워드": "密码", "퍼지로 찾기": "模糊搜索", "페이지 읽는 중...": "读取页面...", "페이지 지정": "选择页面", "페이지 지정 다운로드": "选择页面 && 下载", "페이지 지정 다운로드 기본값": "默认值 \"选择页面 && 下载\"", "페이지를 선택해주세요": "请选择页面", "페이지를 읽는 중에 오류가 발생했습니다": "尝试读取页面时发生错误", "평범하게 찾기": "默认搜索", "포트": "端口", "포함 태그": "要包含的标签", "폭 맞춤": "适合宽度", "폰트": "字体", "폰트 변경...": "更改字体...", "폰트 선택": "选择字体", "폰트 초기화": "重置字体", "폴더": "文件夹", "폴더 && 압축파일": "文件夹 && 压缩文件", "폴더 바로가기": "文件夹快捷方式", "폴더 열기": "打开文件夹", "폴더 이동": "移动文件夹", "폴더 추가": "添加文件夹", "폴더가 없습니다": "无文件夹", "폴더들": "目录", "폴더들을 선택하세요": "选择文件夹", "폴더를 선택하세요": "选择一个文件夹", "폴더를 추가해주세요": "请输入一个文件夹", "폴더명 형식": "文件夹名格式", "표지 검색 실패": "封面搜索失败", "표지 검색...": "搜索封面...", "프로그램 끝내기": "退出程序", "프로그램 패스워드": "设置启动密码", "프록시": "代理", "플러그인": "插件", "플러그인을 추가하시겠습니까?": "确定增加此插件?", "플레이리스트": "播放列表", "플레이리스트 파일에 번호 매기기": "计算播放列表中的文件", "플레이리스트 한 폴더에 다운로드": "全部下载到一个文件夹", "플로팅 미리보기": "浮动预览", "피드백": "反馈", "필터": "过滤器", "필터창": "过滤器", "하나 이상의 타입을 선택해주세요.": "至少选择一种类型。", "하위폴더 포함": "包含子文件夹", "학습 중...": "学习...", "한 줄 당 한 트래커 URL": "每行一个 tracker URL ", "항상 위": "总是可见", "항상 위 OFF": "总是关闭", "항상 위 ON": "总是开启", "해당 링크로 이동합니다": "转到该链接...", "해상도": "分辨率", "현재 버전: v{}\n최신 버전: v{}": "当前版本:v{}\n最新版本:v{}", "현재 작업 없음": "当前没有任务", "호스트": "主机", "화 선택": "选择剧集", "화질": "质量", "확인": "确定", "후원": "捐赠", "휴지통으로 이동": "移动到回收站" } }