ImportSubscription no longer requires only http(s): paste awg://, AWG .conf/JSON, or naive links; subscription parser also reads hosted AWG and Clash wireguard/naive. Site lists support emails and FAQ; Store listing texts/tools updated. Co-authored-by: Cursor <cursoragent@cursor.com>
219 lines
10 KiB
Python
219 lines
10 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""Fill Microsoft Store listing CSV text fields (default=RU, en=EN)."""
|
||
import csv
|
||
from pathlib import Path
|
||
|
||
path = Path(__file__).resolve().parents[1] / "store.csv"
|
||
|
||
ru = {
|
||
"Description": (
|
||
"EvilFox — приложение для безопасного доступа в интернет на Windows.\n"
|
||
"\n"
|
||
"Защитите данные в публичных Wi‑Fi сетях: EvilFox шифрует трафик, "
|
||
"скрывает ваш реальный IP-адрес и помогает предотвратить утечки DNS. "
|
||
"Современный интерфейс на русском и английском, светлая и тёмная темы, "
|
||
"удобный выбор серверов и понятный статус подключения.\n"
|
||
"\n"
|
||
"Возможности:\n"
|
||
"• Шифрование трафика с поддержкой современных протоколов\n"
|
||
"• Режим прокси и полный режим защиты (TUN) для всего трафика приложений\n"
|
||
"• Защита от утечек (Kill Switch) при обрыве соединения\n"
|
||
"• Автовыбор сервера с наименьшим пингом\n"
|
||
"• Список серверов с флагами стран и группировкой по хосту\n"
|
||
"• Добавление собственной конфигурации по URL\n"
|
||
"• Мониторинг использования трафика и статистика сессий\n"
|
||
"• Интерфейс на русском и английском языках\n"
|
||
"\n"
|
||
"EvilFox подходит для повседневной работы, путешествий и защиты приватности. "
|
||
"Конфигурацию подключения вы добавляете самостоятельно; "
|
||
"покупки внутри приложения не требуются.\n"
|
||
"\n"
|
||
"Сайт: https://evilfox.win/\n"
|
||
"Поддержка: https://t.me/evilfox100Bot"
|
||
),
|
||
"ReleaseNotes": (
|
||
"Обновление 4.2: улучшенный интерфейс для Microsoft Store, "
|
||
"переключатель языка RU/EN, светлая тема по умолчанию, "
|
||
"группировка серверов по IP с отображением доступных протоколов, "
|
||
"исправления переключателей темы и языка, реальные флаги стран (SVG), "
|
||
"Kill Switch и статистика."
|
||
),
|
||
"Title": "EvilFox",
|
||
"ShortTitle": "EvilFox",
|
||
"SortTitle": "EvilFox",
|
||
"VoiceTitle": "Evil Fox",
|
||
"ShortDescription": (
|
||
"Безопасный доступ в интернет: шифрование трафика, скрытие IP, "
|
||
"защита от утечек DNS. Русский и английский. Современные протоколы, "
|
||
"Kill Switch, удобный выбор серверов."
|
||
),
|
||
"DevStudio": "EvilFox",
|
||
"CopyrightTrademarkInformation": (
|
||
"© EvilFox. All rights reserved. EvilFox and the EvilFox logo "
|
||
"are trademarks of their respective owners."
|
||
),
|
||
"AdditionalLicenseTerms": (
|
||
"Proprietary software. By installing EvilFox you agree to use the "
|
||
"application in accordance with applicable laws. The app provides a "
|
||
"client for encrypted network connections; server configurations are "
|
||
"supplied by the user. See https://evilfox.win/ for support and terms."
|
||
),
|
||
"Feature1": "Шифрование трафика и скрытие IP-адреса",
|
||
"Feature2": "Режим прокси и полный режим защиты (TUN)",
|
||
"Feature3": "Kill Switch — блокировка трафика при обрыве VPN",
|
||
"Feature4": "Автовыбор сервера с лучшим пингом",
|
||
"Feature5": "Серверы с флагами стран и группировкой протоколов",
|
||
"Feature6": "Добавление конфигурации по URL",
|
||
"Feature7": "Статистика трафика и сессий",
|
||
"Feature8": "Интерфейс на русском и английском",
|
||
"Feature9": "Светлая и тёмная темы оформления",
|
||
"Feature10": "Защита от утечек DNS",
|
||
"MinimumHardwareReq1": "Windows 10 version 1809 or later (x64)",
|
||
"MinimumHardwareReq2": "Internet connection",
|
||
"MinimumHardwareReq3": "100 MB free disk space",
|
||
"RecommendedHardwareReq1": "Windows 11 (x64)",
|
||
"RecommendedHardwareReq2": "Stable broadband connection",
|
||
"SearchTerm1": "VPN",
|
||
"SearchTerm2": "privacy",
|
||
"SearchTerm3": "secure internet",
|
||
"SearchTerm4": "encrypt traffic",
|
||
"SearchTerm5": "EvilFox",
|
||
"SearchTerm6": "proxy client",
|
||
"SearchTerm7": "kill switch",
|
||
"DesktopScreenshotCaption1": "Главный экран: подключение и статус защиты",
|
||
"DesktopScreenshotCaption2": "Список серверов с флагами и пингом",
|
||
"DesktopScreenshotCaption3": "Настройки: тема, язык, Kill Switch",
|
||
"DesktopScreenshotCaption4": "Статистика использования",
|
||
}
|
||
|
||
en = {
|
||
"Description": (
|
||
"EvilFox is a Windows app for private, secure internet access.\n"
|
||
"\n"
|
||
"Protect your data on public Wi‑Fi: EvilFox encrypts your traffic, "
|
||
"hides your real IP address, and helps prevent DNS leaks. "
|
||
"A modern interface in English and Russian, light and dark themes, "
|
||
"an easy server list, and a clear connection status.\n"
|
||
"\n"
|
||
"Features:\n"
|
||
"• Traffic encryption with modern protocol support\n"
|
||
"• Proxy mode and full protection mode (TUN) for all app traffic\n"
|
||
"• Leak protection (Kill Switch) if the connection drops\n"
|
||
"• Auto-select the server with the lowest ping\n"
|
||
"• Server list with country flags and host grouping\n"
|
||
"• Add your own configuration via URL\n"
|
||
"• Traffic usage monitoring and session stats\n"
|
||
"• English and Russian interface\n"
|
||
"\n"
|
||
"EvilFox is built for everyday browsing, travel, and privacy. "
|
||
"You add your own connection configuration; no in-app purchases are required.\n"
|
||
"\n"
|
||
"Website: https://evilfox.win/\n"
|
||
"Support: https://t.me/evilfox100Bot"
|
||
),
|
||
"ReleaseNotes": (
|
||
"Version 4.2: Microsoft Store–ready UI polish, RU/EN language switch, "
|
||
"light theme by default, servers grouped by IP with available protocols, "
|
||
"theme/language toggle fixes, real country flags (SVG), Kill Switch, "
|
||
"and usage statistics."
|
||
),
|
||
"Title": "EvilFox",
|
||
"ShortTitle": "EvilFox",
|
||
"SortTitle": "EvilFox",
|
||
"VoiceTitle": "Evil Fox",
|
||
"ShortDescription": (
|
||
"Secure internet access: encrypt traffic, hide your IP, help prevent "
|
||
"DNS leaks. English & Russian. Modern protocols, Kill Switch, "
|
||
"easy server selection."
|
||
),
|
||
"DevStudio": "EvilFox",
|
||
"CopyrightTrademarkInformation": (
|
||
"© EvilFox. All rights reserved. EvilFox and the EvilFox logo "
|
||
"are trademarks of their respective owners."
|
||
),
|
||
"AdditionalLicenseTerms": (
|
||
"Proprietary software. By installing EvilFox you agree to use the "
|
||
"application in accordance with applicable laws. The app provides a "
|
||
"client for encrypted network connections; server configurations are "
|
||
"supplied by the user. See https://evilfox.win/ for support and terms."
|
||
),
|
||
"Feature1": "Encrypt traffic and hide your IP address",
|
||
"Feature2": "Proxy mode and full protection mode (TUN)",
|
||
"Feature3": "Kill Switch blocks traffic if VPN drops",
|
||
"Feature4": "Auto-select the lowest-ping server",
|
||
"Feature5": "Servers with country flags and protocol grouping",
|
||
"Feature6": "Add configuration via URL",
|
||
"Feature7": "Traffic and session statistics",
|
||
"Feature8": "English and Russian interface",
|
||
"Feature9": "Light and dark themes",
|
||
"Feature10": "DNS leak protection",
|
||
"MinimumHardwareReq1": "Windows 10 version 1809 or later (x64)",
|
||
"MinimumHardwareReq2": "Internet connection",
|
||
"MinimumHardwareReq3": "100 MB free disk space",
|
||
"RecommendedHardwareReq1": "Windows 11 (x64)",
|
||
"RecommendedHardwareReq2": "Stable broadband connection",
|
||
"SearchTerm1": "VPN",
|
||
"SearchTerm2": "privacy",
|
||
"SearchTerm3": "secure internet",
|
||
"SearchTerm4": "encrypt traffic",
|
||
"SearchTerm5": "EvilFox",
|
||
"SearchTerm6": "proxy client",
|
||
"SearchTerm7": "kill switch",
|
||
"DesktopScreenshotCaption1": "Home: connect and protection status",
|
||
"DesktopScreenshotCaption2": "Server list with flags and ping",
|
||
"DesktopScreenshotCaption3": "Settings: theme, language, Kill Switch",
|
||
"DesktopScreenshotCaption4": "Usage statistics",
|
||
}
|
||
|
||
|
||
def main() -> None:
|
||
with path.open("r", encoding="utf-8-sig", newline="") as f:
|
||
reader = csv.reader(f)
|
||
header = next(reader)
|
||
rows = []
|
||
for r in reader:
|
||
while len(r) < len(header):
|
||
r.append("")
|
||
rows.append(r)
|
||
|
||
# Field, ID, Type, default, en
|
||
default_idx = header.index("default")
|
||
en_idx = header.index("en")
|
||
|
||
for r in rows:
|
||
if not r or not r[0]:
|
||
continue
|
||
field = r[0]
|
||
if field in ru:
|
||
r[default_idx] = ru[field]
|
||
if field in en:
|
||
r[en_idx] = en[field]
|
||
|
||
with path.open("w", encoding="utf-8-sig", newline="") as f:
|
||
w = csv.writer(f, lineterminator="\n")
|
||
w.writerow(header)
|
||
w.writerows(rows)
|
||
|
||
with path.open("r", encoding="utf-8-sig", newline="") as f:
|
||
for row in csv.DictReader(f):
|
||
if row["Field"] in (
|
||
"Description",
|
||
"Title",
|
||
"ShortDescription",
|
||
"Feature1",
|
||
"AdditionalLicenseTerms",
|
||
"SearchTerm1",
|
||
):
|
||
print(
|
||
row["Field"],
|
||
"default_len=",
|
||
len(row.get("default") or ""),
|
||
"en_len=",
|
||
len(row.get("en") or ""),
|
||
)
|
||
print("wrote", path)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|