Multilingualized

Now there're English, Russian and Japanese languages
This commit is contained in:
Masahiko AMANO 2020-08-24 16:56:41 +03:00
parent 5a622f53cd
commit fe7d0c178a
14 changed files with 575 additions and 41 deletions

3
.gitignore vendored
View File

@ -1,3 +1,4 @@
__pycache__
build*
*.spec
*.spec
/config.json

View File

@ -47,15 +47,15 @@
</property>
<property name="font">
<font>
<family>Century Gothic</family>
<pointsize>20</pointsize>
<family>Comic Sans MS</family>
<pointsize>22</pointsize>
</font>
</property>
<property name="text">
<string>Newgrounds Audio Downloader by H1K0</string>
<string>&lt;strong&gt;Newgrounds Audio Downloader&lt;/strong&gt; by &lt;em&gt;H1K0&lt;/em&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignBottom|Qt::AlignHCenter</set>
</property>
</widget>
<widget class="QLineEdit" name="input">
@ -69,7 +69,7 @@
</property>
<property name="font">
<font>
<family>Courier New</family>
<family>Maiandra GD</family>
<pointsize>12</pointsize>
</font>
</property>
@ -83,7 +83,7 @@
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton" name="dlbtn">
<widget class="QPushButton" name="btn">
<property name="geometry">
<rect>
<x>20</x>
@ -101,11 +101,14 @@
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="toolTip">
<string>(Enter)</string>
</property>
<property name="text">
<string>Download!</string>
</property>
<property name="shortcut">
<string>Return</string>
<string>Ctrl+S</string>
</property>
</widget>
</widget>
@ -115,9 +118,33 @@
<x>0</x>
<y>0</y>
<width>600</width>
<height>21</height>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Century Gothic</family>
<pointsize>10</pointsize>
</font>
</property>
<widget class="QMenu" name="menu">
<property name="font">
<font>
<family>Century Gothic</family>
<pointsize>9</pointsize>
</font>
</property>
<property name="cursor">
<cursorShape>ArrowCursor</cursorShape>
</property>
<property name="title">
<string>MENU</string>
</property>
<addaction name="actionSettings"/>
<addaction name="separator"/>
<addaction name="actionHelp"/>
</widget>
<addaction name="menu"/>
</widget>
<action name="settings">
<property name="text">
@ -135,6 +162,36 @@
<string>F1</string>
</property>
</action>
<action name="actionSettings">
<property name="icon">
<iconset>
<normaloff>../settings.ico</normaloff>../settings.ico</iconset>
</property>
<property name="text">
<string>Settings</string>
</property>
<property name="font">
<font>
<family>Century Gothic</family>
<pointsize>10</pointsize>
</font>
</property>
<property name="shortcut">
<string>Alt+S</string>
</property>
</action>
<action name="actionHelp">
<property name="icon">
<iconset>
<normaloff>../help.ico</normaloff>../help.ico</iconset>
</property>
<property name="text">
<string>Help</string>
</property>
<property name="shortcut">
<string>F1</string>
</property>
</action>
</widget>
<resources/>
<connections/>

View File

@ -10,6 +10,24 @@
<height>150</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>400</width>
<height>150</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>150</height>
</size>
</property>
<property name="windowTitle">
<string>ACHTUNG!</string>
</property>
@ -28,12 +46,12 @@
</property>
<property name="font">
<font>
<family>Century Gothic</family>
<family>Maiandra GD</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="text">
<string>TextLabel</string>
<string>ACHTUNG!</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>

View File

@ -39,20 +39,23 @@
<property name="geometry">
<rect>
<x>20</x>
<y>30</y>
<y>20</y>
<width>451</width>
<height>21</height>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>Courier New</family>
<family>Maiandra GD</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>Downloading...</string>
</property>
<property name="alignment">
<set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
</property>
</widget>
<widget class="QProgressBar" name="bar">
<property name="geometry">
@ -70,7 +73,7 @@
<number>100</number>
</property>
<property name="value">
<number>0</number>
<number>54</number>
</property>
<property name="textVisible">
<bool>true</bool>

230
GUI/SettingsDialog.ui Normal file
View File

@ -0,0 +1,230 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>240</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>400</width>
<height>240</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>240</height>
</size>
</property>
<property name="windowTitle">
<string>Settings</string>
</property>
<property name="windowIcon">
<iconset>
<normaloff>../settings.ico</normaloff>../settings.ico</iconset>
</property>
<widget class="QDialogButtonBox" name="btnx">
<property name="geometry">
<rect>
<x>30</x>
<y>190</y>
<width>341</width>
<height>32</height>
</rect>
</property>
<property name="font">
<font>
<family>Cooper Black</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
<widget class="QLabel" name="title">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>351</width>
<height>41</height>
</rect>
</property>
<property name="font">
<font>
<family>851MkPOP</family>
<pointsize>22</pointsize>
</font>
</property>
<property name="text">
<string>Settings</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="Line" name="hr">
<property name="geometry">
<rect>
<x>10</x>
<y>50</y>
<width>371</width>
<height>20</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QLabel" name="label_lang">
<property name="geometry">
<rect>
<x>20</x>
<y>90</y>
<width>351</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>Century Gothic</family>
<pointsize>14</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string>Language</string>
</property>
<property name="alignment">
<set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
</property>
</widget>
<widget class="QWidget" name="horizontalLayoutWidget">
<property name="geometry">
<rect>
<x>20</x>
<y>120</y>
<width>351</width>
<height>51</height>
</rect>
</property>
<layout class="QHBoxLayout" name="lang_select">
<item>
<widget class="QRadioButton" name="rbtn_en">
<property name="font">
<font>
<family>Courier New</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="toolTip">
<string>(E)</string>
</property>
<property name="text">
<string>English</string>
</property>
<property name="shortcut">
<string>E</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbtn_ru">
<property name="font">
<font>
<family>Century Gothic</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="toolTip">
<string>(R)</string>
</property>
<property name="text">
<string>Русский</string>
</property>
<property name="shortcut">
<string>R</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbtn_jp">
<property name="enabled">
<bool>true</bool>
</property>
<property name="font">
<font>
<family>Rounded Mplus 1c</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="toolTip">
<string>(N)</string>
</property>
<property name="text">
<string>日本語</string>
</property>
<property name="shortcut">
<string>N</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>btnx</sender>
<signal>accepted()</signal>
<receiver>Dialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>btnx</sender>
<signal>rejected()</signal>
<receiver>Dialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

Binary file not shown.

View File

@ -8,21 +8,46 @@ from PyQt5.Qt import QThread, pyqtSignal
from PyQt5 import QtCore
from requests import get as load
from bs4 import BeautifulSoup as parse
from time import sleep
from langswitch import switch
import webbrowser as web
from configer import config
class GUI(QMainWindow):
def __init__(self):
super().__init__()
loadUi('GUI/MainWindow.ui',self)
self.dlbtn.clicked.connect(self.download)
self.applylang()
self.btn.clicked.connect(self.download)
self.actionSettings.triggered.connect(self.show_settings)
self.actionHelp.triggered.connect(self.show_help)
def applylang(self):
self.title.setText(switch['title'][config["lang"]])
chfont(self.title,switch['title'][f'font_{config["lang"]}'])
self.input.setPlaceholderText(switch['placeholder'][config["lang"]])
chfont(self.input,switch['placeholder'][f'font_{config["lang"]}'])
self.btn.setText(switch['btn'][config["lang"]])
chfont(self.btn,switch['btn'][f'font_{config["lang"]}'])
self.menu.setTitle(switch['menu'][config["lang"]])
chfont(self.menubar,switch['menu'][f'font_{config["lang"]}'])
self.actionSettings.setText(switch['settings'][config["lang"]])
self.actionHelp.setText(switch['helpbtn'][config["lang"]])
def download(self):
# Validating input
songID=self.input.text()
if not songID:
self.notification=NotificationDialog(switch['empinp'][config["lang"]])
self.notification.exec()
return
elif not songID.isdigit():
self.notification=NotificationDialog(switch['typerr'][config["lang"]])
self.notification.exec()
return
page=parse(load(f'https://www.newgrounds.com/audio/listen/{songID}').text,'html.parser')
if page.find(id='pageerror') is not None:
self.notification=NotificationDialog('Incorrect input or the song doesn\'t exist!')
self.notification=NotificationDialog(switch['404'][config["lang"]])
self.notification.exec()
return
self.songTitle=page.find('title').text
@ -34,27 +59,36 @@ class GUI(QMainWindow):
if page[i]!='\\': link+=page[i]
i+=1
# Locating file
self.dist=QFileDialog.getSaveFileName(self,'Save File',
link.split('/')[-1],
'MP3 Audio File (*.mp3)')[0]
self.dist=QFileDialog.getSaveFileName(self,switch['savefile'][config["lang"]],
link.split('/')[-1],
'MP3 Audio File (*.mp3)')[0]
if not self.dist: return
# Downloading
self.file=load(link,stream=True)
self.progress=ProgressDialog()
self.progress.label.setText(f'Downloading "{self.songTitle}"...')
self.progress.setWindowTitle(f'Downloading "{self.songTitle}"...')
self.progress.label.setText(switch['downloading'][config["lang"]](self.songTitle))
self.progress.setWindowTitle(switch['downloading'][config["lang"]](self.songTitle))
self.progress.bar.setValue(0)
self.progress.exec()
def show_settings(self):
self.settings=SettingsDialog()
self.settings.exec()
def show_help(self):
if config["lang"]=='en': web.open('https://github.com/H1K0/NGAudioDownloader/blob/master/README.md#newgrounds-audio-downloader--',new=2)
else: web.open(f'https://github.com/H1K0/NGAudioDownloader/blob/master/README-{config["lang"].upper()}.md#newgrounds-audio-downloader--',new=2)
def keyPressEvent(self,event):
if event.key()==16777216:
self.close()
if event.key()==16777216: self.close()
elif event.key()==16777220: self.download()
class ProgressDialog(QDialog):
def __init__(self):
super().__init__()
loadUi('GUI/ProgressDialog.ui',self)
chfont(self.label,switch['downloading'][f'font_{config["lang"]}'])
self.setWindowFlags(self.windowFlags()&~QtCore.Qt.WindowCloseButtonHint)
self.thread=DownloadThread()
self.thread.got_chunk.connect(lambda done:self.bar.setValue(done))
@ -81,7 +115,7 @@ class DownloadThread(QThread):
def finish(self):
global ngad
ngad.progress.hide()
ngad.notification=NotificationDialog(f'"{ngad.songTitle}" has been downloaded successfully!')
ngad.notification=NotificationDialog(switch['success'][config["lang"]](ngad.songTitle))
ngad.notification.exec()
self.deleteLater()
@ -91,14 +125,47 @@ class NotificationDialog(QDialog):
super().__init__()
loadUi('GUI/NotificationDialog.ui',self)
self.label.setText(msg)
chfont(self.label,switch['ntf'][f'font_{config["lang"]}'])
self.setWindowFlags(self.windowFlags()&~QtCore.Qt.WindowCloseButtonHint)
ngad.input.clear()
self.btn.clicked.connect(self.accept)
def accept(self):
ngad.input.clear()
self.close()
class SettingsDialog(QDialog):
def __init__(self):
super().__init__()
loadUi('GUI/SettingsDialog.ui',self)
self.setWindowTitle(switch['settings'][config["lang"]])
self.title.setText(switch['settings'][config["lang"]])
self.label_lang.setText(switch['lang'][config["lang"]])
chfont(self.label_lang,switch['lang'][f'font_{config["lang"]}'])
if config["lang"]=='en':
self.rbtn_en.setChecked(True)
elif config["lang"]=='ru':
self.rbtn_ru.setChecked(True)
elif config["lang"]=='jp':
self.rbtn_jp.setChecked(True)
self.newlang=config["lang"]
self.rbtn_en.toggled.connect(lambda:self.chlang('en'))
self.rbtn_ru.toggled.connect(lambda:self.chlang('ru'))
self.rbtn_jp.toggled.connect(lambda:self.chlang('jp'))
self.accepted.connect(self.updlang)
def chlang(self,newlang):
if newlang!=config["lang"]:
self.newlang=newlang
def updlang(self):
config["lang"]=self.newlang
ngad.applylang()
def chfont(unit,font): unit.setStyleSheet(f'font-family:{font}')
if __name__ == '__main__':
from sys import argv
app=QApplication(argv)

33
README-JP.md Normal file
View File

@ -0,0 +1,33 @@
# [Newgrounds](https://newgrounds.com) Audio Downloader ![(Python 3+)](https://img.shields.io/badge/Python-3+-blue.svg) ![Windows XP+](https://img.shields.io/badge/Windows-XP+-brightgreen.svg)
ま、Newgroundsと言えば、普通はオーディオページに結構見付かりやすいダウンロードボタンがあるけど、そのボタンのない奴もある。それも時々、素晴らしくて絶対にダウンロードしたいってゆ奴も出てくるんだ。そうなったらどうしろってんだ
**これ**を使うんだ。
[英語](README.md)と[ロシア語](README-RU.md)のREADMEもある。
## 要求仕様
- ![(Python 3+)](https://img.shields.io/badge/Python-3+-blue.svg)
- `PyQt5`ライブラリ
- `requests`ライブラリ
- `bs4`ライブラリ
- `click`ライブラリ
それともただ![Windows XP+](https://img.shields.io/badge/Windows-XP+-brightgreen.svg)だけを持ってこの[exeちゃん](NGAudioDownloader.exe)を使う。
## 使用法
簡単なもんだ。コイツを実行して、NSI(*Newgrounds song ID*)を入力して、Enterボタン押して、ダウンロード開始だ
### ショートカットキー
- `Enter`でダウンロード開始
- `Alt + S`で設定画面を開く
- `F1`でヘルプを読む
### スクショ
![スタート画面](https://i.ibb.co/pJpVMRS/2020-08-24-16-45-40-Newgrounds-Audio-Downloader.png)
![設定画面](https://i.ibb.co/DzbvPz0/2020-08-24-16-45-48.png)

View File

@ -1,4 +1,4 @@
# Newgrounds Audio Downloader ![(Python 3+)](https://img.shields.io/badge/Python-3+-blue.svg) ![Windows XP+](https://img.shields.io/badge/Windows-XP+-brightgreen.svg)
# [Newgrounds](https://newgrounds.com) Audio Downloader ![(Python 3+)](https://img.shields.io/badge/Python-3+-blue.svg) ![Windows XP+](https://img.shields.io/badge/Windows-XP+-brightgreen.svg)
_Или по-славянски: качалка музлишка с ньюграундс._
@ -6,7 +6,7 @@ _Или по-славянски: качалка музлишка с ньюгра
Однако времена меняются, и теперь даже забаненные песенки можно скачать с помощью **этой самой проги**.
При желании можно почитать [редмишку для ~~пендосов~~ инглишменов](README.md).
При желании можно почитать [ридмишку для пендосов и инглишменов](README.md) или [ридмишку для япошек](README-JP.md).
## Требования
@ -22,12 +22,14 @@ _Или по-славянски: качалка музлишка с ньюгра
Проще пареной репы. Тупо запускаешь код, вбиваешь айдишник трека и — вуаля! — скачивание пошло!
## Скрины
### Горячие клавиши
![Стартовый экран](https://i.ibb.co/rFGPM8x/2020-08-23-23-10-48-Newgrounds-Audio-Downloader.png)
- `Enter` запускает скачивание
- `Alt + S` вызывает диалог настроек
- `F1` вызывает ~~скорую~~ помощь
![Диалог с прогрессбаром](https://i.ibb.co/6tV9cjH/2020-08-23-23-12-03-Downloading-Mysterious-Planet.png)
### Скрины
![Уведомление о завершении скачивания](https://i.ibb.co/bbsTVDH/2020-08-23-23-59-51-ACHTUNG.png)
![Стартовый экран](https://i.ibb.co/8Y4FMDP/2020-08-24-16-43-16-Newgrounds-Audio-Downloader.png)
![Уведомление о некорректном вводе / ERROR 404](https://i.ibb.co/LzygXPd/2020-08-24-00-01-48-ACHTUNG.png)
![Диалог настроек](https://i.ibb.co/RSXvxDh/2020-08-24-16-43-28.png)

View File

@ -1,10 +1,10 @@
# Newgrounds Audio Downloader ![(Python 3+)](https://img.shields.io/badge/Python-3+-blue.svg) ![Windows XP+](https://img.shields.io/badge/Windows-XP+-brightgreen.svg)
# [Newgrounds](https://newgrounds.com) Audio Downloader ![(Python 3+)](https://img.shields.io/badge/Python-3+-blue.svg) ![Windows XP+](https://img.shields.io/badge/Windows-XP+-brightgreen.svg)
Well, usually there's a download button on the audio page, but what to do if direct downloads are not allowed by the creator even though you love this song too much?
You just use **this**.
You can also read the [Russian README](README-RU.md).
You can also read the [Russian README](README-RU.md) or [Japanese README](README-JP.md).
## Requirements
@ -20,12 +20,14 @@ Or you just use the [`NGAudioDownloader.exe`](NGAudioDownloader.exe) so all you
It's easy as pie. You just run the downloader, enter your song ID and your file is being downloaded!
## Screenshots
### Shortcuts
![Start screen shot](https://i.ibb.co/rFGPM8x/2020-08-23-23-10-48-Newgrounds-Audio-Downloader.png)
- `Enter` starts download
- `Alt + S` calls settings dialog
- `F1` calls help
![ProgressBar dialog](https://i.ibb.co/6tV9cjH/2020-08-23-23-12-03-Downloading-Mysterious-Planet.png)
### Screenshots
![Download completion notification](https://i.ibb.co/bbsTVDH/2020-08-23-23-59-51-ACHTUNG.png)
![Start screen shot](https://i.ibb.co/qr366Xb/2020-08-24-16-41-06-Newgrounds-Audio-Downloader.png)
![Incorrect input / ERROR 404 notification](https://i.ibb.co/LzygXPd/2020-08-24-00-01-48-ACHTUNG.png)
![Settings dialog](https://i.ibb.co/dkzb5jN/2020-08-24-16-41-14-Settings.png)

31
configer.py Normal file
View File

@ -0,0 +1,31 @@
from json import load,dump
from os import access,F_OK
default={
"lang":"en"
}
class Config:
def __init__(self):
if access('config.json',F_OK):
with open('config.json',encoding='utf-8') as file:
self.data=load(file)
else:
self.data=default
self.update()
def __getitem__(self,key):
return self.data[key]
def __setitem__(self,key,value):
self.data[key]=value
self.update()
def update(self):
with open('config.json','w',encoding='utf-8') as file:
dump(self.data,file)
config=Config()

BIN
help.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

90
langswitch.py Normal file
View File

@ -0,0 +1,90 @@
switch={
"title":{
"en":"<strong>Newgrounds Audio Downloader</strong> by <em>H1K0</em>",
"ru":"<strong>Newgrounds Audio Downloader</strong> от <em>H1K0</em>",
"jp":"<em>H1K0</em> の <strong>Newgrounds Audio Downloader</strong>",
"font_en":"Comic Sans MS",
"font_ru":"Comic Sans MS",
"font_jp":"UD Digi Kyokasho N-R"
},
"placeholder":{
"en":"Enter Newgrounds song ID.",
"ru":"Введи айдишник трека на Newgrounds.",
"jp":"NSIを入力しよう",
"font_en":"Maiandra GD",
"font_ru":"Courier New",
"font_jp":"Rounded Mplus 1c"
},
"btn":{
"en":"Download!",
"ru":"Скачать!",
"jp":"ダウンロード!",
"font_en":"Cooper Black",
"font_ru":"851CHIKARA-DZUYOKU-KANA-A",
"font_jp":"Nagurigaki Crayon"
},
"ntf":{
"font_en":"Maiandra GD",
"font_ru":"Courier New",
"font_jp":"Rounded Mplus 1c"
},
"empinp":{
"en":"Hey-hey, don't leave the input empty!",
"ru":"Эй, ну хоть что-нибудь напиши!",
"jp":"おいおい、何も入力してねえんじゃねえかよ!"
},
"typerr":{
"en":"Newgrounds song ID consists of digits only!",
"ru":"Айдишник трека состоит только из цифр!",
"jp":"NSIは数字だけだ"
},
"404":{
"en":"And there's no song with this ID!",
"ru":"А нет песенки с таким айдишником!",
"jp":"そのNSIの曲は存在してないな"
},
"savefile":{
"en":"Save file",
"ru":"Сохранить файл",
"jp":"ファイル保存"
},
"downloading":{
"en":lambda songTitle:f'Downloading «{songTitle}»...',
"ru":lambda songTitle:f'Скачивание трека «{songTitle}»...',
"jp":lambda songTitle:f'{songTitle}」ダウンロード中・・・',
"font_en":"Maiandra GD",
"font_ru":"Courier New",
"font_jp":"Rounded Mplus 1c"
},
"success":{
"en":lambda songTitle:f'«{songTitle}» has been downloaded successfully!',
"ru":lambda songTitle:f'«{songTitle}»: скачано!',
"jp":lambda songTitle:f'{songTitle}」ダウンロード完了!'
},
"menu":{
"en":"MENU",
"ru":"МЕНЮ",
"jp":"メニュー",
"font_en":"Century Gothic",
"font_ru":"Century Gothic",
"font_jp":"Rounded Mplus 1c"
},
"settings":{
"en":"Settings",
"ru":"Настройки",
"jp":"設定"
},
"helpbtn":{
"en":"Help",
"ru":"Помощь",
"jp":"ヘルプ"
},
"lang":{
"en":"Language",
"ru":"Язык",
"jp":"言語",
"font_en":"Century Gothic",
"font_ru":"Century Gothic",
"font_jp":"Rounded Mplus 1c"
}
}

BIN
settings.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB