From 45bec6a5756f97bac0d0e19e818c197b35d99291 Mon Sep 17 00:00:00 2001 From: Risen Date: Fri, 9 Jun 2023 22:16:49 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=20=D0=B2=D0=B0=D0=BB?= =?UTF-8?q?=D1=8E=D1=82=D1=8B,=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D0=BB=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Calc3D.py | 19 +++++--------- lists.py | 2 ++ setts.py | 48 +++++++++++++++++++++++++--------- texts.py | 78 ++++++++++++++++++++++++++----------------------------- update.py | 11 +++----- 5 files changed, 84 insertions(+), 74 deletions(-) diff --git a/Calc3D.py b/Calc3D.py index 83fd836..e1e3340 100644 --- a/Calc3D.py +++ b/Calc3D.py @@ -6,21 +6,14 @@ import gettext import requests from calculating import calculating, amortization, cost_prise -from setts import window_setts +from setts import window_setts, language, currency_setts from texts import calc, about, new_marge, ver, not_connect from update import upd_check now = datetime.datetime.now() -with open('setts.json') as file: - old_data = json.load(file) - if old_data['settings']["locale"] == 'English': - locale = 'en_US' - else: - locale = 'ru_RU' - -lang = gettext.translation('locale', localedir='locale', languages=[locale]) +lang = gettext.translation('locale', localedir='locale', languages=[language()]) lang.install() _ = lang.gettext @@ -39,11 +32,11 @@ def create_window(): [Sgi.Txt('_' * 46)], [Sgi.Text('0', size=(7, 1), font=('Consolas', 32), text_color='white', key='result', auto_size_text=True, justification='right', expand_x=True), - Sgi.Text(_('руб.'), font=('Consolas', 32), text_color='white', key='result')], + Sgi.Text(currency_setts(), font=('Consolas', 32), text_color='white', key='result')], [Sgi.Text(_('Себестоимость:'), font=12, text_color='white'), Sgi.Text('0', size=(7, 1), font=12, text_color='white', key='cost', auto_size_text=True, justification='right', expand_x=True), - Sgi.Text(_('руб.'), font=('Consolas', 12), text_color='white', key='cost')], + Sgi.Text(currency_setts(), font=('Consolas', 12), text_color='white', key='cost')], [Sgi.Txt('_' * 46, pad=(10, 5))], [Sgi.Text(_('Время печати')), Sgi.Push(), Sgi.InputText('0', size=(5, 20)), Sgi.Text(_('ч.')), Sgi.InputText('0', size=(5, 0)), Sgi.Text(_('мин. '))], @@ -53,9 +46,9 @@ def create_window(): Sgi.Text(_('шт. '))], [Sgi.Txt('_' * 46)], [Sgi.Text(_('Моделирование')), Sgi.Push(), Sgi.InputText('0', size=(10, 20), justification='right', ), - Sgi.Text(_('руб. '))], + Sgi.Text(f'{currency_setts()} ')], [Sgi.Text(_('Постобработка')), Sgi.Push(), Sgi.InputText('0', size=(10, 20), justification='right', ), - Sgi.Text(_('руб. '))], + Sgi.Text(f'{currency_setts()} ')], [Sgi.Txt('_' * 46)], [Sgi.Txt(' ' * 15), Sgi.ReadFormButton(_('Рассчитать'), size=(10, 2)), Sgi.Cancel(_('Выход'), size=(10, 2))] diff --git a/lists.py b/lists.py index 3d09a4e..868fe5c 100644 --- a/lists.py +++ b/lists.py @@ -22,3 +22,5 @@ themes_list = ['Black', 'BlueMono', 'BluePurple', 'BrightColors', 'BrownBlue', ' 'SandyBeach', 'SystemDefault', 'SystemDefault1', 'SystemDefaultForReal', 'Tan', 'TanBlue', 'TealMono', 'Topanga'] lang_list = ['Русский', 'English'] + +currency_list = ['руб.', '$', '€'] diff --git a/setts.py b/setts.py index 842f469..5f87d9a 100644 --- a/setts.py +++ b/setts.py @@ -1,23 +1,39 @@ import json import PySimpleGUI as Sgi import gettext +import os from texts import amortization_calc, new_sets -from lists import themes_list, lang_list +from lists import themes_list, lang_list, currency_list -with open('setts.json') as file: - old_data = json.load(file) - if old_data['settings']["locale"] == 'English': - locale = 'en_US' - else: - locale = 'ru_RU' +def language(): + with open(os.path.expanduser('setts.json')) as file: + old_data = json.load(file) + if old_data['settings']["locale"] == 'English': + locale = 'en_US' + else: + locale = 'ru_RU' + return locale -lang = gettext.translation('locale', localedir='locale', languages=[locale]) + +lang = gettext.translation('locale', localedir='locale', languages=[language()]) lang.install() _ = lang.gettext +def currency_setts(): + with open('setts.json') as file: + old_data = json.load(file) + if old_data['settings']["currency"] == 'руб.': + currency = 'руб.' + elif old_data['settings']["currency"] == '$': + currency = '$' + else: + currency = '€' + return currency + + def window_setts(): with open('setts.json') as file: old_data = json.load(file) @@ -29,6 +45,7 @@ def window_setts(): mk = old_data["settings"]["mk"] a = old_data["settings"]["a"] locale = old_data['settings']["locale"] + currency = old_data['settings']["currency"] try: spi = old_data["settings"]["spi"] except KeyError: @@ -46,7 +63,8 @@ def window_setts(): [Sgi.Text(_('Тариф электроэнергии, кВт/ч')), Sgi.Push(), Sgi.InputText(h, size=(10, 10), justification='right')], [Sgi.Text(_('Коэффициент выбраковки')), Sgi.Push(), Sgi.InputText(d, size=(10, 10), justification='right')], - [Sgi.Text(_('Стоимость катушки, руб.')), Sgi.Push(), Sgi.InputText(st, size=(10, 10), justification='right')], + [Sgi.Text(_('Стоимость катушки, ')+f'{currency_setts()}'), Sgi.Push(), + Sgi.InputText(st, size=(10, 10), justification='right')], [Sgi.Text(_('Вес катушки, гр.')), Sgi.Push(), Sgi.Combo(['225', '250', '450', '500', '750', '850', '1000', '2250', '2500'], size=(8, 20), default_value=mk)], @@ -54,8 +72,8 @@ def window_setts(): [Sgi.Text('')] ] layout2 = [ - [Sgi.Text(_('Стоимость вашего принтера, руб.')), Sgi.Push(), Sgi.InputText(a, size=(10, 10), - justification='right')], + [Sgi.Text(_('Стоимость вашего принтера, ')+f'{currency_setts()}'), Sgi.Push(), Sgi.InputText(a, size=(10, 10), + justification='right')], [Sgi.Text(_('Срок полезного использования, лет.')), Sgi.Push(), Sgi.InputText(spi, size=(10, 10), justification='right')], [Sgi.Text('_' * 45)], [Sgi.Text(amortization_calc)], @@ -65,6 +83,7 @@ def window_setts(): [Sgi.Text(_('Оформление'))], [Sgi.Text(_("Выбор темы")), Sgi.Push(), Sgi.Combo(themes_list, size=(20, 20), default_value=theme)], [Sgi.Text(_("Язык")), Sgi.Push(), Sgi.Combo(lang_list, size=(20, 20), default_value=locale)], + [Sgi.Text(_("Валюта")), Sgi.Push(), Sgi.Combo(currency_list, size=(20, 20), default_value=currency_setts())], ] tab_group = [ @@ -85,6 +104,10 @@ def window_setts(): new_locale = locale else: new_locale = values[9] + if values[10] == currency: + new_currency = currency + else: + new_currency = values[10] if values[0] == p: new_p = p else: @@ -128,7 +151,8 @@ def window_setts(): "a": new_a, "spi": new_spi, "marge": new_marg, - "locale": new_locale + "locale": new_locale, + "currency": new_currency } } diff --git a/texts.py b/texts.py index c1fce74..5354874 100644 --- a/texts.py +++ b/texts.py @@ -2,7 +2,6 @@ import gettext import json import os - if not os.path.isfile('setts.json'): with open('setts.json', 'w') as file: data = {"settings": {"theme": "Dark", @@ -14,7 +13,8 @@ if not os.path.isfile('setts.json'): "a": "0", "spi": "3", "marg": "0", - "locale": "Ru"}} + "locale": "Ru", + "currency": "руб."}} json.dump(data, file, indent=2) with open('setts.json') as file: @@ -28,53 +28,49 @@ lang = gettext.translation('locale', localedir='locale', languages=[locale]) lang.install() _ = lang.gettext - calc = (_("Формула расчета стоимости печати выглядит так:\n\n" - "S = ((p/1000*t/60*h)+(md*d*st/mk)+am+post))*x+mod\n\n" - "где:\n" - "S - стоимость печати, руб.\n" - "p - мощность принтера, Вт\n" - "t - время печати, мин.\n" - "h - тариф на электроэнергию, кВт/ч\n" - "md - вес детали, гр.\n" - "st - стоимость катушки пластика, руб.\n" - "mk - вес пластика в катушке, гр.\n" - "d - коэффициент выбраковки\n" - "am - амортизация, руб.\n" - "post - стоимость постобработки, руб.\n" - "х - количество печатаемых дубликатов, шт.\n" - "mod - стоимость моделирования, руб.\n\n" - "При этом в расчете вес детали, умножается на 1.5,\n" - "это сделано для выбраковки и тестовой печати," - "т.е. при калькуляции вес одной детали для печати\n" - "считается как 1,5 детали " - "Можете изменить этот пункт в настройках.\n\n")) + "S = ((p/1000*t/60*h)+(md*d*st/mk)+am+post))*x+mod\n\n" + "где:\n" + "S - стоимость печати, руб.\n" + "p - мощность принтера, Вт\n" + "t - время печати, мин.\n" + "h - тариф на электроэнергию, кВт/ч\n" + "md - вес детали, гр.\n" + "st - стоимость катушки пластика, руб.\n" + "mk - вес пластика в катушке, гр.\n" + "d - коэффициент выбраковки\n" + "am - амортизация, руб.\n" + "post - стоимость постобработки, руб.\n" + "х - количество печатаемых дубликатов, шт.\n" + "mod - стоимость моделирования, руб.\n\n" + "При этом в расчете вес детали, умножается на 1.5,\n" + "это сделано для выбраковки и тестовой печати," + "т.е. при калькуляции вес одной детали для печати\n" + "считается как 1,5 детали " + "Можете изменить этот пункт в настройках.\n\n")) -about = (_("Программа написана потому, что мне было скучно\n" - "Использовать её или нет дело ваше, мне все равно\n" - "Распространяется по принципу 'как есть'\n" - "По вопросам и предложениям писать в телеграм на @RisenYT\n\n")) +about = (_("По вопросам и предложениям писать в телеграм на @RisenYT\n\n")) amortization_calc = (_('Как считается амортизация:\n\n' - 'Отчисления записываются \n' - 'частями в зависимости от времени \n' - 'печати конкретного изделия\n' - 'Рекомендую задавать СПИ (это время\n' - 'окупаемости принтера) 3 года.\n' - 'Калькулятор считает амортизацию в\n' - 'минуту и умножает на количество минут,\n' - 'которые принтер будет печатать.')) + 'Отчисления записываются \n' + 'частями в зависимости от времени \n' + 'печати конкретного изделия\n' + 'Рекомендую задавать СПИ (это время\n' + 'окупаемости принтера) 3 года.\n' + 'Калькулятор считает амортизацию в\n' + 'минуту и умножает на количество минут,\n' + 'которые принтер будет печатать.')) not_connect = (_('Невозможно проверить обновление.\n\n' - 'Отсутствует подключение к интернету\n' - 'или программа заблокирована фаерволом.\n\n' - 'Для продолжения работы нажмите "Ok"')) + 'Отсутствует подключение к интернету\n' + 'или программа заблокирована фаерволом.\n\n' + 'Для продолжения работы нажмите "Ok"')) new_sets = (_('Задайте стоимость принтера, \n' - 'срок полезного использования\n' - 'в настройках амортизации\n')) + 'срок полезного использования\n' + 'в настройках амортизации\n')) new_marge = (_('Задайте процент желаемой наценки\n' - 'в настройках (можно просто проставить ноль)')) + 'в настройках (можно просто проставить ноль)')) -ver = '0.6.0' +ver = '0.6.1' diff --git a/update.py b/update.py index 663db17..d74355d 100644 --- a/update.py +++ b/update.py @@ -6,15 +6,10 @@ import os import gettext from texts import ver +from setts import language -with open(os.path.expanduser('setts.json')) as file: - old_data = json.load(file) - if old_data['settings']["locale"] == 'English': - locale = 'en_US' - else: - locale = 'ru_RU' -lang = gettext.translation('locale', localedir='locale', languages=[locale]) +lang = gettext.translation('locale', localedir='locale', languages=[language()]) lang.install() _ = lang.gettext @@ -50,7 +45,7 @@ def upd_check(): else: Sgi.theme(set_theme) layout = [ - [Sgi.Text(_(f"Последняя версия: {version_new}\nВаша версия: {version_old}\n\nОбновление не требуется"))], + [Sgi.Text(_('Последняя версия: ')+f'{version_new}'+_('\nВаша версия: ')+f'{version_old}'+_('\n\nОбновление не требуется'))], [Sgi.Button(_(' Закрыть '))] ] From c971378136bc60256bf8a340895f23d4f661f53b Mon Sep 17 00:00:00 2001 From: Risen Date: Fri, 9 Jun 2023 22:17:40 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=20=D0=B2=D0=B0=D0=BB?= =?UTF-8?q?=D1=8E=D1=82=D1=8B,=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D0=BB=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 --- locale/en_US/LC_MESSAGES/locale.mo | Bin 6743 -> 0 bytes 2 files changed, 3 deletions(-) delete mode 100644 .gitignore delete mode 100644 locale/en_US/LC_MESSAGES/locale.mo diff --git a/ .gitignore b/ .gitignore deleted file mode 100644 index a095fff..0000000 --- a/ .gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/venv/ -/.idea/ -/build/ \ No newline at end of file diff --git a/locale/en_US/LC_MESSAGES/locale.mo b/locale/en_US/LC_MESSAGES/locale.mo deleted file mode 100644 index c9fdd60d7333cc7d5e300724bce6966370c788a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6743 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 Date: Fri, 9 Jun 2023 22:18:54 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=20=D0=B2=D0=B0=D0=BB?= =?UTF-8?q?=D1=8E=D1=82=D1=8B,=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D0=BB=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locale/en_US/LC_MESSAGES/locale.mo | Bin 0 -> 6542 bytes locale/ru_RU/LC_MESSAGES/locale.mo | Bin 0 -> 8344 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 locale/en_US/LC_MESSAGES/locale.mo create mode 100644 locale/ru_RU/LC_MESSAGES/locale.mo diff --git a/locale/en_US/LC_MESSAGES/locale.mo b/locale/en_US/LC_MESSAGES/locale.mo new file mode 100644 index 0000000000000000000000000000000000000000..2e8bc0aaf097587121e58658d9f33b496557d783 GIT binary patch literal 6542 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 rv@uRm%giPY literal 0 HcmV?d00001 diff --git a/locale/ru_RU/LC_MESSAGES/locale.mo b/locale/ru_RU/LC_MESSAGES/locale.mo new file mode 100644 index 0000000000000000000000000000000000000000..17151045c24bb51352fd0d03372dd1cd89b82216 GIT binary patch literal 8344 zcmeI0U5K338OKl6N`0fnMr*B>_Dv*YzntAw5+Nd5O3{KMR10mdx-~12WRuk$BtkD{ zHy<0_O|~tj4XH_uNNjKFWHOVT%xpFwv>>JS9Ew;dZ7*6V6$J4{@Iw6kpYzVlyW=KJ z#gbmk!p?u*^Pcm3{h#MK=gi;MUUk^j}L)2gFgbV2M>dv z2Tx|tHSi{$e+PQ-ui&-dZ?1CgOJEbc0sIq~fd2x&1HK2|20rjv=MI89z+ZqLfSbXe zUG3a8S2*_vaFFM>J{R%IYogp?@T-j958eVk4sHae!L{J8Gh71K;M*U;8yWu#MqCHJ z3rhcopvKp)aqfrUU7+kg3a$fR0VV%+P;&nXO3(Y?2JmZ4*7|RPw}RgX?**R*?*Pw$ z((~`^`8t&2in|ZoO$@%3J-_w^{AK+28NLY;O858d`5)i_&+mZZL7R*C|-UGikGo3MqZA9 zgFL^4FyR}Z7D{2-*Tce=)TRFCzU&)}%rSLd1INRRUowehJ)ZClmd^5T@BNQ?xy<|- z6fQElUy>a1kNG411zrmeuS@+er3g9IH0;5M8T3SR8yI~y_2*e!Vh~+saXH!Ok0SbD z*c`z)XMu1Sl&%F1T)!1#{Ip)^dVEIQA$ zX){4mmr_*Vg1v87H5Du~B!1ewF>_Ou zP|VG!Qwe8c5=$~gX92_OWKEo_=u*6`*y+u3ED_64G0a$!Pt(+@25ObWc%oE{QEXL8 zjNFSXR(-|duTr&#qE00e5ylpnIzeF{N&6^MW46s8RMoU1uB*os<0^?_L)z@YwmqZ;t%eafct&O@Fr;=2Koc)j z-y*Z3Bx)}mO5}G`4Gpx>6*i~VN@*z)*C~ICM?smO^js-B97N)x#o;_%WWiFoVskIC zzd3qo8C&UDsoELV(T~(~a^vdEI8Ha9Y=;Od=Dc8`Rejf^R@T|(V6VcnijHEiYSqzO zW*i+{nme_RQVm)AKoixu0Y%4fk2vC{nn=DYFs#;}wSi6#YwuHqtQw|`I3on&viK@9 z8rFJYE1C|0klSt#Y;tltVF)iHTck89Rpd*Gn9AxDZ^_9OaVV?tD>F)FyCy8jn&-t* zOH!55CLWn~hE1^AJdME;igzRrl+@Do4{u-ZR@;l?prsl1@&uJi%nEK;j;ZH%MfrGZ zS3-T}x})3>qCjU&R!%C_?V0V>ylfk*ciCPSIj+R5NdmJ7#hSS9+fPi5@BH4Q2|W-M zA~8H0=IsGfHNT3f3tc-FX9i7|Yf zYj1v8G&Ji)i(0!q$VW#{;<$r?XjHp7hWRbLGqL~WHbO0-Gt7|YC(O~DOp&3p6!C0r zeVx>#HdbBIRjJOugbbC)-jrS;{~EYL0C-Y*mk?gJnr^5jhr_J%FT?y<-_)1((Sw*JAs ziLC=$2d0X{6WjX-$0i0RcTE-h`v-OpPVCxB-JC{9Z3|0p|CnNHFdfAl#7Y$TsX{Wz z36iad=0RFtJ`$**?ly?Upl^WWwfwqD9H{qw7#g{ZYxR& z+Za~4fv5*#L96SiLvxbOCn&D^T7fYorV)*>&QV7f9MxmAReo!KKt?VN+Xm$1>S)}$ z^=KnBKgc;Y$O?yU-gSL zkA~x*k=mcjN-#}bm@PPCS1;T*cI_;V?=0T_=rfb!ThikA?&9#|jW*aGBTRYbk?<$-9=);kQt7z{k%L%b} zmF-<+dso@sRhGka?<)IgUS Date: Fri, 9 Jun 2023 22:42:29 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=20=D0=B2=D0=B0=D0=BB?= =?UTF-8?q?=D1=8E=D1=82=D1=8B,=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D0=BB=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Calc3D.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Calc3D.py b/Calc3D.py index e1e3340..21b5816 100644 --- a/Calc3D.py +++ b/Calc3D.py @@ -8,7 +8,7 @@ import requests from calculating import calculating, amortization, cost_prise from setts import window_setts, language, currency_setts from texts import calc, about, new_marge, ver, not_connect -from update import upd_check +from update import upd_check, upd_start now = datetime.datetime.now() @@ -57,6 +57,7 @@ def create_window(): def main(): + upd_start() window = create_window() while True: