hiddifypanel 10.30.0.dev0__py3-none-any.whl → 10.30.0.dev2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. hiddifypanel/VERSION +1 -1
  2. hiddifypanel/VERSION.py +2 -2
  3. hiddifypanel/base.py +15 -14
  4. hiddifypanel/models/config.py +5 -12
  5. hiddifypanel/panel/admin/templates/model/proxydetail_list.html +6 -0
  6. hiddifypanel/panel/commercial/ProxyDetailsAdmin.py +13 -1
  7. hiddifypanel/panel/init_db.py +10 -11
  8. hiddifypanel/translations/en/LC_MESSAGES/messages.mo +0 -0
  9. hiddifypanel/translations/en/LC_MESSAGES/messages.po +41 -34
  10. hiddifypanel/translations/fa/LC_MESSAGES/messages.mo +0 -0
  11. hiddifypanel/translations/fa/LC_MESSAGES/messages.po +37 -25
  12. hiddifypanel/translations/pt/LC_MESSAGES/messages.mo +0 -0
  13. hiddifypanel/translations/pt/LC_MESSAGES/messages.po +4 -1
  14. hiddifypanel/translations/ru/LC_MESSAGES/messages.mo +0 -0
  15. hiddifypanel/translations/ru/LC_MESSAGES/messages.po +4 -1
  16. hiddifypanel/translations/zh/LC_MESSAGES/messages.mo +0 -0
  17. hiddifypanel/translations/zh/LC_MESSAGES/messages.po +3 -0
  18. hiddifypanel/translations.i18n/en.json +35 -34
  19. hiddifypanel/translations.i18n/fa.json +26 -25
  20. hiddifypanel/translations.i18n/pt.json +2 -1
  21. hiddifypanel/translations.i18n/ru.json +2 -1
  22. hiddifypanel/translations.i18n/zh.json +1 -0
  23. {hiddifypanel-10.30.0.dev0.dist-info → hiddifypanel-10.30.0.dev2.dist-info}/METADATA +1 -1
  24. {hiddifypanel-10.30.0.dev0.dist-info → hiddifypanel-10.30.0.dev2.dist-info}/RECORD +28 -27
  25. {hiddifypanel-10.30.0.dev0.dist-info → hiddifypanel-10.30.0.dev2.dist-info}/WHEEL +1 -1
  26. {hiddifypanel-10.30.0.dev0.dist-info → hiddifypanel-10.30.0.dev2.dist-info}/LICENSE.md +0 -0
  27. {hiddifypanel-10.30.0.dev0.dist-info → hiddifypanel-10.30.0.dev2.dist-info}/entry_points.txt +0 -0
  28. {hiddifypanel-10.30.0.dev0.dist-info → hiddifypanel-10.30.0.dev2.dist-info}/top_level.txt +0 -0
hiddifypanel/VERSION CHANGED
@@ -1 +1 @@
1
- 10.30.0.dev0
1
+ 10.30.0.dev2
hiddifypanel/VERSION.py CHANGED
@@ -1,3 +1,3 @@
1
- __version__='10.30.0.dev0'
1
+ __version__='10.30.0.dev2'
2
2
  from datetime import datetime
3
- __release_date__= datetime.strptime('2024-06-24','%Y-%m-%d')
3
+ __release_date__= datetime.strptime('2024-06-30','%Y-%m-%d')
hiddifypanel/base.py CHANGED
@@ -18,18 +18,19 @@ from loguru import logger
18
18
  from hiddifypanel.panel.init_db import init_db
19
19
 
20
20
 
21
- def init_logger():
22
- def dynamic_formatter(record) -> str:
23
- fmt = '<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>'
24
- if record['extra']:
25
- fmt += ' | <level>{extra}</level>'
26
- return fmt + '\n'
21
+ def logger_dynamic_formatter(record) -> str:
22
+ fmt = '<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>'
23
+ if record['extra']:
24
+ fmt += ' | <level>{extra}</level>'
25
+ return fmt + '\n'
27
26
 
27
+
28
+ def init_logger(app, cli):
28
29
  # configure logger
29
- from hiddifypanel.models import ConfigEnum, hconfig
30
30
  logger.remove()
31
- logger.add(sys.stderr, format=dynamic_formatter, level=hconfig(ConfigEnum.log_level), colorize=True, catch=True, enqueue=True, diagnose=False, backtrace=True)
32
- # logger.trace('Logger initiated :)')
31
+ logger.add(sys.stderr if cli else sys.stdout, format=logger_dynamic_formatter, level=app.config['STDOUT_LOG_LEVEL'],
32
+ colorize=True, catch=True, enqueue=True, diagnose=False, backtrace=True)
33
+ logger.trace('Logger initiated :)')
33
34
 
34
35
 
35
36
  # TODO: refactor this function
@@ -86,20 +87,20 @@ def create_app(*args, cli=False, **config):
86
87
  v = True if v.lower() == "true" else (False if v.lower() == "false" else v)
87
88
 
88
89
  app.config[c] = v
89
-
90
+ init_logger(app, cli)
90
91
  hiddifypanel.database.init_app(app)
91
92
  with app.app_context():
92
93
  init_db()
93
-
94
- init_logger()
94
+ logger.add(app.config['HIDDIFY_CONFIG_PATH'] + "/log/system/panel.log", format=logger_dynamic_formatter, level=hconfig(ConfigEnum.log_level),
95
+ colorize=True, catch=True, enqueue=True, diagnose=False, backtrace=True)
95
96
 
96
97
  def get_locale():
97
98
  # Put your logic here. Application can store locale in
98
99
  # user profile, cookie, session, etc.
99
100
  if "admin" in request.base_url:
100
- g.locale = auth.current_account.lang or hconfig(ConfigEnum.admin_lang) or 'fa'
101
+ g.locale = hconfig(ConfigEnum.admin_lang) or 'en'
101
102
  else:
102
- g.locale = auth.current_account.lang or hconfig(ConfigEnum.lang) or 'fa'
103
+ g.locale = auth.current_account.lang or hconfig(ConfigEnum.lang) or 'en'
103
104
  return g.locale
104
105
  app.jinja_env.globals['get_locale'] = get_locale
105
106
  babel = Babel(app, locale_selector=get_locale)
@@ -9,11 +9,7 @@ from hiddifypanel.models.child import Child, ChildMode
9
9
  from sqlalchemy import Column, String, Boolean, Enum, ForeignKey, Integer
10
10
  from strenum import StrEnum
11
11
  from sqlalchemy_serializer import SerializerMixin
12
-
13
-
14
- def error(st):
15
- from hiddifypanel.hutils.utils import error as err
16
- err(st)
12
+ from loguru import logger
17
13
 
18
14
 
19
15
  class BoolConfig(db.Model, SerializerMixin):
@@ -74,15 +70,15 @@ def hconfig(key: ConfigEnum, child_id: Optional[int] = None): # -> str | int |
74
70
  if bool_conf:
75
71
  value = bool_conf.value
76
72
  else:
77
- error(f'bool {key} not found ')
73
+ logger.warning(f'bool {key} not found ')
78
74
  else:
79
75
  str_conf = StrConfig.query.filter(StrConfig.key == key, StrConfig.child_id == child_id).first()
80
76
  if str_conf:
81
77
  value = str_conf.value
82
78
  else:
83
- error(f'str {key} not found ')
79
+ logger.warning(f'str {key} not found ')
84
80
  except BaseException:
85
- error(f'{key} error!')
81
+ logger.exception(f'{key} error!')
86
82
  raise
87
83
  if value != None:
88
84
  if key.type == int:
@@ -97,7 +93,6 @@ def set_hconfig(key: ConfigEnum, value: str | int | bool, child_id: int | None =
97
93
  if child_id is None:
98
94
  child_id = Child.current().id
99
95
 
100
- print(f"chainging .... {key}---{value}---{child_id}---{commit}")
101
96
  if key.type == int and value != None:
102
97
  int(value) # for testing int
103
98
 
@@ -127,7 +122,7 @@ def set_hconfig(key: ConfigEnum, value: str | int | bool, child_id: int | None =
127
122
  else:
128
123
  old_v = dbconf.value
129
124
  dbconf.value = value
130
- error(f"changing {key} from {old_v} to {value}")
125
+ logger.trace(f"changing {key} from {old_v} to {value}")
131
126
  Events.config_changed.notify(conf=dbconf, old_value=old_v)
132
127
 
133
128
  if child_id == 0 and key.hide_in_virtual_child:
@@ -171,11 +166,9 @@ def add_or_update_config(commit: bool = True, child_id: int | None = None, overr
171
166
  def bulk_register_configs(hconfigs, commit: bool = True, froce_child_unique_id: str | None = None, override_unique_id: bool = True):
172
167
  from hiddifypanel.panel import hiddify
173
168
  for conf in hconfigs:
174
- # print(conf)
175
169
  if conf['key'] == ConfigEnum.unique_id and not override_unique_id:
176
170
  continue
177
171
  child_id = hiddify.get_child(unique_id=froce_child_unique_id)
178
- # print(conf, child_id, conf.get('child_unique_id', None), override_child_unique_id)
179
172
  add_or_update_config(commit=False, child_id=child_id, **conf)
180
173
  if commit:
181
174
  db.session.commit()
@@ -0,0 +1,6 @@
1
+ {% extends 'hiddify-flask-admin/list.html' %}
2
+
3
+ {% block model_menu_bar %}
4
+ {{ super() }}
5
+ <a href="{{ url_for('flask.proxy.reset_proxies') }}" class="btn btn-primary">{{_('Reset Proxies')}}</a>
6
+ {% endblock %}
@@ -7,12 +7,15 @@ from markupsafe import Markup
7
7
  from hiddifypanel.auth import login_required
8
8
  from flask_admin.actions import action
9
9
  from flask_admin.contrib.sqla import form, filters as sqla_filters, tools
10
+ from flask_admin import expose
11
+
12
+
10
13
  # Define a custom field type for the related domains
11
14
  from hiddifypanel import hutils
12
15
 
13
16
 
14
17
  class ProxyDetailsAdmin(AdminLTEModelView):
15
-
18
+ list_template = 'model/proxydetail_list.html'
16
19
  column_hide_backrefs = True
17
20
  can_create = False
18
21
  form_excluded_columns = ['child', 'proto', 'transport', 'cdn']
@@ -20,6 +23,15 @@ class ProxyDetailsAdmin(AdminLTEModelView):
20
23
  column_searchable_list = ['name', 'proto', 'transport', 'l3', 'cdn']
21
24
  column_editable_list = ['name']
22
25
 
26
+ @expose('reset_proxies')
27
+ def reset_proxies(self):
28
+ from hiddifypanel.panel.init_db import get_proxy_rows_v1
29
+ from hiddifypanel.database import db
30
+ db.session.bulk_save_objects(get_proxy_rows_v1())
31
+ db.session.commit()
32
+ hutils.flask.flash((_('config.validation-success-no-reset')), 'success') # type: ignore
33
+ return redirect("./")
34
+
23
35
  @action('disable', 'Disable', 'Are you sure you want to disable selected proxies?')
24
36
  def action_disable(self, ids):
25
37
  query = tools.get_query_for_ids(self.get_query(), self.model, ids)
@@ -13,7 +13,7 @@ from hiddifypanel.panel import hiddify
13
13
  from hiddifypanel.database import db, db_execute
14
14
  from flask import g
15
15
  from sqlalchemy import text
16
-
16
+ from loguru import logger
17
17
  MAX_DB_VERSION = 90
18
18
 
19
19
 
@@ -564,7 +564,6 @@ def add_config_if_not_exist(key: ConfigEnum, val: str | int, child_id: int | Non
564
564
  child_id = Child.current().id
565
565
 
566
566
  old_val = hconfig(key, child_id)
567
- hutils.utils.error(f'{key}, {val}, {child_id}, {old_val}')
568
567
  if old_val is None:
569
568
  set_hconfig(key, val)
570
569
 
@@ -583,7 +582,7 @@ def execute(query: str):
583
582
 
584
583
  db_execute(query)
585
584
  except BaseException as e:
586
- hutils.utils.error(e)
585
+ logger.debug(e)
587
586
  pass
588
587
 
589
588
 
@@ -599,7 +598,7 @@ def add_new_enum_values():
599
598
 
600
599
  # Get the existing values in the enum
601
600
  existing_values = [f'{e}' if isinstance(e, ConfigEnum) else e.value for e in enum_class]
602
- # print("existing_values--------------", existing_values)
601
+
603
602
  # Get the values in the enum column in the database
604
603
  # result = db.engine.execute(f"SELECT DISTINCT `{column_name}` FROM {table_name}")
605
604
  # db_values = {row[0] for row in result}
@@ -616,7 +615,7 @@ def add_new_enum_values():
616
615
  # Find the new values that need to be added to the enum column in the database
617
616
  new_values = set(existing_values) - set(db_values)
618
617
  old_values = set(db_values) - set(existing_values)
619
- # print('new_values-=-----------------', new_values)
618
+
620
619
  if len(new_values) == 0 and len(old_values) == 0:
621
620
  continue
622
621
 
@@ -642,14 +641,14 @@ def upgrade_database():
642
641
  if not os.path.isdir(backup_root) or len(os.listdir(backup_root)) == 0:
643
642
  if os.path.isfile(sqlite_db):
644
643
  os.rename(sqlite_db, sqlite_db + ".old")
645
- hutils.utils.error("no backup found...")
644
+ logger.info("no backup found...")
646
645
  return
647
646
  if os.path.isfile(sqlite_db):
648
- hutils.utils.error("Finding Old Version Database... importing configs from latest backup")
647
+ logger.info("Finding Old Version Database... importing configs from latest backup")
649
648
  newest_file = max([(f, os.path.getmtime(os.path.join(backup_root, f)))
650
649
  for f in os.listdir(backup_root) if os.path.isfile(os.path.join(backup_root, f))], key=lambda x: x[1])[0]
651
650
  with open(f'{backup_root}{newest_file}', 'r') as f:
652
- hutils.utils.error(f"importing configs from {newest_file}")
651
+ logger.info(f"importing configs from {newest_file}")
653
652
  json_data = json.load(f)
654
653
  hiddify.set_db_from_json(json_data,
655
654
  set_users=True,
@@ -667,7 +666,7 @@ def upgrade_database():
667
666
  os.rename(sqlite_db, sqlite_db + ".old")
668
667
  set_hconfig(ConfigEnum.db_version, db_version, commit=True)
669
668
 
670
- hutils.utils.error("Upgrading to the new dataset succuess.")
669
+ logger.info("Upgrading to the new dataset succuess.")
671
670
 
672
671
 
673
672
  def init_db():
@@ -700,7 +699,7 @@ def init_db():
700
699
  if not db_action or (start_version == 0 and ver == 10):
701
700
  continue
702
701
 
703
- hutils.utils.error(f"Updating db from version {db_version} for node {child.id}")
702
+ logger.info(f"Updating db from version {db_version} for node {child.id}")
704
703
 
705
704
  if ver < 70:
706
705
  if child.id != 0:
@@ -710,7 +709,7 @@ def init_db():
710
709
  db_action(child.id)
711
710
 
712
711
  Events.db_init_event.notify(db_version=db_version)
713
- hutils.utils.error(f"Updated successfuly db from version {db_version} to {ver}")
712
+ logger.info(f"Updated successfuly db from version {db_version} to {ver}")
714
713
 
715
714
  db_version = ver
716
715
  db.session.commit()
@@ -674,6 +674,9 @@ msgstr "Rename File"
674
674
  msgid "Reset Filters"
675
675
  msgstr "Reset Filters"
676
676
 
677
+ msgid "Reset Proxies"
678
+ msgstr "Reset Proxies"
679
+
677
680
  msgid "Reset Usage Time:"
678
681
  msgstr "Traffic usage reset time:"
679
682
 
@@ -1344,7 +1347,7 @@ msgstr ""
1344
1347
  "<a href='https://github.com/hiddify/hiddify-config/wiki/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AF%D8%A7%D9%85%DB%8C%D9%86-%D9%81%D8%B1%D8%A7%D9%86%D8%AA%DB%8C%D9%86%DA%AF'>Guide</a>. ⚠️CloudFlare does not support Domain Fronting."
1345
1348
 
1346
1349
  msgid "config.domain_fronting.label"
1347
- msgstr "🔒 Enable TLS Domain Fronting"
1350
+ msgstr "🔒 TLS Domain Fronting"
1348
1351
 
1349
1352
  msgid "config.domain_fronting_domain.description"
1350
1353
  msgstr ""
@@ -1358,7 +1361,7 @@ msgid "config.domain_fronting_http_enable.description"
1358
1361
  msgstr "Enabling HTTP Domain Fronting causes your domain to be block quickly."
1359
1362
 
1360
1363
  msgid "config.domain_fronting_http_enable.label"
1361
- msgstr "Enable HTTP Domain Fronting"
1364
+ msgstr "HTTP Domain Fronting"
1362
1365
 
1363
1366
  msgid "config.domain_fronting_tls_enable.description"
1364
1367
  msgstr ""
@@ -1366,7 +1369,7 @@ msgstr ""
1366
1369
  " connect to CDN"
1367
1370
 
1368
1371
  msgid "config.domain_fronting_tls_enable.label"
1369
- msgstr "🔒 Enable TLS Domain Fronting"
1372
+ msgstr "🔒 TLS Domain Fronting"
1370
1373
 
1371
1374
  msgid "config.firewall.description"
1372
1375
  msgstr ""
@@ -1394,13 +1397,13 @@ msgstr ""
1394
1397
  "framework. It can be used in supported CDNs"
1395
1398
 
1396
1399
  msgid "config.grpc_enable.label"
1397
- msgstr "➿ Enable gRPC"
1400
+ msgstr "➿ gRPC"
1398
1401
 
1399
1402
  msgid "config.h2_enable.description"
1400
1403
  msgstr "Enable HTTP/2 Protocol"
1401
1404
 
1402
1405
  msgid "config.h2_enable.label"
1403
- msgstr "🔵 Enable h2"
1406
+ msgstr "🔵 h2"
1404
1407
 
1405
1408
  msgid "config.hidden.description"
1406
1409
  msgstr "config.hidden.description"
@@ -1442,7 +1445,7 @@ msgstr ""
1442
1445
  "⚠️ <strong>Not Available in Xray based Clients. Only HiddifyNext, Singbox, and V2fly clients are supported.</strong>&nbsp;<a href=\"https://hiddify.com/manager/basic-concepts-and-troubleshooting/Basic-Concepts/#http-upgrade\" target=\"_blank\"><strong>(Read More)</strong></a></p>"
1443
1446
 
1444
1447
  msgid "config.httpupgrade_enable.label"
1445
- msgstr "🆙 Enable HTTPUpgrade Method"
1448
+ msgstr "🆙 HTTPUpgrade Method"
1446
1449
 
1447
1450
  msgid "config.hysteria.description"
1448
1451
  msgstr ""
@@ -1463,7 +1466,7 @@ msgid "config.hysteria_enable.description"
1463
1466
  msgstr "To Enable UDP based Hysteria Protocol"
1464
1467
 
1465
1468
  msgid "config.hysteria_enable.label"
1466
- msgstr "⚫️ Enable Hysteria2"
1469
+ msgstr "⚫️ Hysteria2"
1467
1470
 
1468
1471
  msgid "config.hysteria_obfs_enable.description"
1469
1472
  msgstr " Enables Hysteria Obfuscation (Salamander)"
@@ -1503,7 +1506,7 @@ msgid "config.kcp_enable.description"
1503
1506
  msgstr "It is a UDP Based Protocol "
1504
1507
 
1505
1508
  msgid "config.kcp_enable.label"
1506
- msgstr "Enable KCP"
1509
+ msgstr "KCP"
1507
1510
 
1508
1511
  msgid "config.kcp_ports.description"
1509
1512
  msgstr ""
@@ -1574,7 +1577,7 @@ msgstr ""
1574
1577
  "target=\"_blank\">(Read More)</a></p>"
1575
1578
 
1576
1579
  msgid "config.mux_enable.label"
1577
- msgstr "Ⓜ️ MUX Enable (⚠️ Incompatible With Some Clients)"
1580
+ msgstr "Ⓜ️ MUX (⚠️ Incompatible With Some Clients)"
1578
1581
 
1579
1582
  msgid "config.mux_max_connections.description"
1580
1583
  msgstr "Maximum Connections. Conflict with Max Streams"
@@ -1749,7 +1752,7 @@ msgid "config.quic_enable.description"
1749
1752
  msgstr "Enable QUIC Protocol"
1750
1753
 
1751
1754
  msgid "config.quic_enable.label"
1752
- msgstr "🟡 Enable QUIC"
1755
+ msgstr "🟡 QUIC"
1753
1756
 
1754
1757
  msgid "config.reality.description"
1755
1758
  msgstr "REALITY eliminate the Server-Side TLS Fingerprint Feature"
@@ -1761,7 +1764,7 @@ msgid "config.reality_enable.description"
1761
1764
  msgstr "Enable Reality Protocol"
1762
1765
 
1763
1766
  msgid "config.reality_enable.label"
1764
- msgstr "🔴 Enable Reality"
1767
+ msgstr "🔴 Reality"
1765
1768
 
1766
1769
  msgid "config.reality_fallback_domain.description"
1767
1770
  msgstr ""
@@ -1835,7 +1838,7 @@ msgstr ""
1835
1838
  "Inspection)"
1836
1839
 
1837
1840
  msgid "config.shadowsocks2022_enable.label"
1838
- msgstr "⭕️ Enable Shadowsocks 2022"
1841
+ msgstr "⭕️ Shadowsocks 2022"
1839
1842
 
1840
1843
  msgid "config.shadowsocks2022_method.description"
1841
1844
  msgstr "This method also used in ShadowTLS and SSFakeTLS"
@@ -1934,7 +1937,7 @@ msgid "config.ssh_server_enable.description"
1934
1937
  msgstr "SSH Proxy is completely different than original SSH Server"
1935
1938
 
1936
1939
  msgid "config.ssh_server_enable.label"
1937
- msgstr "✔️ Enable SSH Proxy"
1940
+ msgstr "✔️ SSH Proxy"
1938
1941
 
1939
1942
  msgid "config.ssh_server_port.description"
1940
1943
  msgstr ""
@@ -1965,7 +1968,7 @@ msgstr ""
1965
1968
  "accounting."
1966
1969
 
1967
1970
  msgid "config.ssr_enable.label"
1968
- msgstr "Enable SSR"
1971
+ msgstr "SSR"
1969
1972
 
1970
1973
  msgid "config.ssr_fakedomain.description"
1971
1974
  msgstr ""
@@ -2006,10 +2009,14 @@ msgid "config.sub_full_singbox_enable.label"
2006
2009
  msgstr "config.sub_full_singbox_enable.label"
2007
2010
 
2008
2011
  msgid "config.sub_full_xray_json_enable.description"
2009
- msgstr "config.sub_full_xray_json_enable.description"
2012
+ msgstr ""
2013
+ "XRay full link provides comprehensive configuration options for XRay-"
2014
+ "specific settings. This includes custom fragmentation and multiplexing (mux)"
2015
+ " in applications such as v2rayNG that support XRay protocols for fine-tuned "
2016
+ "control over XRay proxy setup."
2010
2017
 
2011
2018
  msgid "config.sub_full_xray_json_enable.label"
2012
- msgstr "config.sub_full_xray_json_enable.label"
2019
+ msgstr "XRay Full Config Link"
2013
2020
 
2014
2021
  msgid "config.sub_singbox_ssh_enable.description"
2015
2022
  msgstr "config.sub_singbox_ssh_enable.description"
@@ -2021,13 +2028,13 @@ msgid "config.tcp_enable.description"
2021
2028
  msgstr "Enable TCP Protocol"
2022
2029
 
2023
2030
  msgid "config.tcp_enable.label"
2024
- msgstr "🟠 Enable TCP"
2031
+ msgstr "🟠 TCP"
2025
2032
 
2026
2033
  msgid "config.telegram.description"
2027
2034
  msgstr "A proxy designed for Telegram to bypass Telegram filtering"
2028
2035
 
2029
2036
  msgid "config.telegram.label"
2030
- msgstr "Telegram Proxy "
2037
+ msgstr "Telegram Configs"
2031
2038
 
2032
2039
  msgid "config.telegram_adtag.description"
2033
2040
  msgstr ""
@@ -2054,7 +2061,7 @@ msgstr ""
2054
2061
  "Domain</strong></span></p>"
2055
2062
 
2056
2063
  msgid "config.telegram_enable.label"
2057
- msgstr "✔️ Enable Telegram MTProto"
2064
+ msgstr "✔️ Telegram MTProto"
2058
2065
 
2059
2066
  msgid "config.telegram_fakedomain.description"
2060
2067
  msgstr ""
@@ -2086,7 +2093,7 @@ msgstr ""
2086
2093
  "the-TLS-Trick-works-and-its-usage/\" target=\"_blank\">(Read More)</a></p>"
2087
2094
 
2088
2095
  msgid "config.tls_fragment_enable.label"
2089
- msgstr "⏯ Enable TLS Fragment"
2096
+ msgstr "⏯ TLS Fragment"
2090
2097
 
2091
2098
  msgid "config.tls_fragment_size.description"
2092
2099
  msgstr "The Size of each Packet"
@@ -2104,7 +2111,7 @@ msgid "config.tls_mixed_case.description"
2104
2111
  msgstr "Enables TLS Mixed SNI Case Fragmentation"
2105
2112
 
2106
2113
  msgid "config.tls_mixed_case.label"
2107
- msgstr "🔠 Enable TLS Mixed SNI Case"
2114
+ msgstr "🔠 TLS Mixed SNI Case"
2108
2115
 
2109
2116
  msgid "config.tls_padding_enable.description"
2110
2117
  msgstr ""
@@ -2114,7 +2121,7 @@ msgstr ""
2114
2121
  "More)</a></p>"
2115
2122
 
2116
2123
  msgid "config.tls_padding_enable.label"
2117
- msgstr "♒️ Enable TLS Padding"
2124
+ msgstr "♒️ TLS Padding"
2118
2125
 
2119
2126
  msgid "config.tls_padding_length.description"
2120
2127
  msgstr "The length of the Padding for TLS Fragmentation"
@@ -2154,7 +2161,7 @@ msgid "config.trojan_enable.description"
2154
2161
  msgstr "Enable Trojan Protocol"
2155
2162
 
2156
2163
  msgid "config.trojan_enable.label"
2157
- msgstr "🟤 Enable Trojan"
2164
+ msgstr "🟤 Trojan"
2158
2165
 
2159
2166
  msgid "config.tuic.description"
2160
2167
  msgstr ""
@@ -2169,7 +2176,7 @@ msgid "config.tuic_enable.description"
2169
2176
  msgstr "It is a UDP based protocol similar to QUIC"
2170
2177
 
2171
2178
  msgid "config.tuic_enable.label"
2172
- msgstr "⚫️ Enable TUIC"
2179
+ msgstr "⚫️ TUIC"
2173
2180
 
2174
2181
  msgid "config.tuic_port.description"
2175
2182
  msgstr "Use comma to separate ports like ( 63000,60000 )"
@@ -2195,7 +2202,7 @@ msgid "config.v2ray_enable.description"
2195
2202
  msgstr "V2ray does not support accounting and not suggested"
2196
2203
 
2197
2204
  msgid "config.v2ray_enable.label"
2198
- msgstr "♈️ Enable V2Ray "
2205
+ msgstr "♈️ V2Ray "
2199
2206
 
2200
2207
  msgid "config.validation-error"
2201
2208
  msgstr "There is an error in one of the fields."
@@ -2212,13 +2219,13 @@ msgid "config.vless_enable.description"
2212
2219
  msgstr "Enable VLess Protocol"
2213
2220
 
2214
2221
  msgid "config.vless_enable.label"
2215
- msgstr "⚫️ Enable VLess"
2222
+ msgstr "⚫️ VLess"
2216
2223
 
2217
2224
  msgid "config.vmess_enable.description"
2218
2225
  msgstr "Active VMess Protocol"
2219
2226
 
2220
2227
  msgid "config.vmess_enable.label"
2221
- msgstr "🟣 Enable VMess"
2228
+ msgstr "🟣 VMess"
2222
2229
 
2223
2230
  msgid "config.warp-https-domain-for-warp-site"
2224
2231
  msgstr "config.warp-https-domain-for-warp-site"
@@ -2238,7 +2245,7 @@ msgstr ""
2238
2245
  "server IP "
2239
2246
 
2240
2247
  msgid "config.warp_enable.label"
2241
- msgstr "Enable WARP+"
2248
+ msgstr "WARP+"
2242
2249
 
2243
2250
  msgid "config.warp_mode.description"
2244
2251
  msgstr ""
@@ -2283,7 +2290,7 @@ msgstr ""
2283
2290
  "Next</a>)</p>"
2284
2291
 
2285
2292
  msgid "config.wireguard_enable.label"
2286
- msgstr "🐉 Enable WireGuard"
2293
+ msgstr "🐉 WireGuard"
2287
2294
 
2288
2295
  msgid "config.wireguard_ipv4.description"
2289
2296
  msgstr "-"
@@ -2327,13 +2334,13 @@ msgid "config.ws_enable.description"
2327
2334
  msgstr "Websocket creates a tunnel over HTTP that is useful to be used in CDN"
2328
2335
 
2329
2336
  msgid "config.ws_enable.label"
2330
- msgstr "🔰 Enable Websocket"
2337
+ msgstr "🔰 Websocket"
2331
2338
 
2332
2339
  msgid "config.xtls_enable.description"
2333
2340
  msgstr "Enable XTLS Protocol"
2334
2341
 
2335
2342
  msgid "config.xtls_enable.label"
2336
- msgstr "🟢 Enable XTLS"
2343
+ msgstr "🟢 XTLS"
2337
2344
 
2338
2345
  msgid "config.invalid uuid"
2339
2346
  msgstr ""
@@ -2374,7 +2381,7 @@ msgstr ""
2374
2381
  "<a href='https://github.com/hiddify/hiddify-config/wiki/Guide-for-domain-fronting'>Guide</a>. ⚠️CloudFlare does not support Domain Fronting."
2375
2382
 
2376
2383
  msgid "domain.domain_fronting.label"
2377
- msgstr "🔒 Enable TLS Domain Fronting"
2384
+ msgstr "🔒 TLS Domain Fronting"
2378
2385
 
2379
2386
  msgid "domain.ip"
2380
2387
  msgstr "IP"
@@ -2407,13 +2414,13 @@ msgid "items"
2407
2414
  msgstr "items"
2408
2415
 
2409
2416
  msgid "lang.en"
2410
- msgstr "🇺🇸 English - Английский"
2417
+ msgstr "🇺🇸 English - انگلیسی"
2411
2418
 
2412
2419
  msgid "lang.fa"
2413
2420
  msgstr "🇮🇷 Persian - فارسی"
2414
2421
 
2415
2422
  msgid "lang.pt"
2416
- msgstr "🇵🇹 Portuguese - پرتغالی"
2423
+ msgstr "🇵🇹 Portuguese"
2417
2424
 
2418
2425
  msgid "lang.ru"
2419
2426
  msgstr "🇷🇺 Russian - Русский"