Compare commits

..

4 Commits

Author SHA1 Message Date
achiez 0130737789 chore(ver): bump version to 1.8.3 and clean solution
- Bump version to 1.8.3
- Add 1.8.3 changelog
- Migrate to .slnx
- Cleanup solution
2026-03-13 15:35:38 +02:00
achiez 1ab2f99783 chore: perform resharper cleanup 2026-03-13 14:54:33 +02:00
achiez da00fa5c96 loc: add es, tr, kk locales and split localization files 2026-03-13 14:51:03 +02:00
Achies 0a46950ca9 Merge pull request #19 from achiez/feature/updates-v2
feat(update): introduce modern update system

- Replace legacy AutoUpdater dialog with a custom update UI integrated into the application theme
- Add support for JSON-based changelog with HTML fallback for backward compatibility
- Implement "Remind later" and "Skip version" options to reduce intrusive update prompts
- Add visual update indicator and manual "Check for updates" action in the links menu
- Persist user update preferences (skipped versions and reminder delays)
- Introduce checksum validation (SHA256) for downloaded update packages
- Migrate changelog source format from HTML to JSON
- Automatically generate HTML changelog and GitHub release notes from JSON via CI
- Consolidate release automation into a single GitHub Actions workflow
- Remove obsolete legacy update dialog and related code
- Expand localization coverage for update-related UI
2026-03-13 00:25:04 +02:00
43 changed files with 3782 additions and 2613 deletions
-56
View File
@@ -1,56 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18
VisualStudioVersion = 18.3.11520.95 d18.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "changelog", "changelog", "{161BFADE-FCF3-45D1-82EA-8A1B187529F7}"
ProjectSection(SolutionItems) = preProject
changelog\1.3.4.html = changelog\1.3.4.html
changelog\1.4.4.html = changelog\1.4.4.html
changelog\1.4.5.html = changelog\1.4.5.html
changelog\1.4.6.html = changelog\1.4.6.html
changelog\1.4.7.html = changelog\1.4.7.html
changelog\1.4.8.html = changelog\1.4.8.html
changelog\1.4.9.html = changelog\1.4.9.html
changelog\1.5.0.html = changelog\1.5.0.html
changelog\1.5.1.html = changelog\1.5.1.html
changelog\1.5.2.html = changelog\1.5.2.html
changelog\1.5.3.html = changelog\1.5.3.html
changelog\1.5.4.html = changelog\1.5.4.html
changelog\1.5.5.html = changelog\1.5.5.html
changelog\1.5.6.html = changelog\1.5.6.html
changelog\1.7.1.html = changelog\1.7.1.html
changelog\1.7.2.html = changelog\1.7.2.html
changelog\1.7.3.html = changelog\1.7.3.html
changelog\1.7.4.html = changelog\1.7.4.html
changelog\1.8.0.html = changelog\1.8.0.html
changelog\1.8.1.html = changelog\1.8.1.html
changelog\1.8.2.html = changelog\1.8.2.html
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SteamLibForked", "src\SteamLibForked\SteamLibForked.csproj", "{224F9DB0-3D20-A614-BA2A-12F22B13A2C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NebulaAuth", "src\NebulaAuth\NebulaAuth.csproj", "{C42F63B6-32F7-ED08-5B86-CD51989761AD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{224F9DB0-3D20-A614-BA2A-12F22B13A2C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{224F9DB0-3D20-A614-BA2A-12F22B13A2C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{224F9DB0-3D20-A614-BA2A-12F22B13A2C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{224F9DB0-3D20-A614-BA2A-12F22B13A2C6}.Release|Any CPU.Build.0 = Release|Any CPU
{C42F63B6-32F7-ED08-5B86-CD51989761AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C42F63B6-32F7-ED08-5B86-CD51989761AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C42F63B6-32F7-ED08-5B86-CD51989761AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C42F63B6-32F7-ED08-5B86-CD51989761AD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FA34DDD5-BDC0-4C0A-B347-4ECDBF446900}
EndGlobalSection
EndGlobal
+28
View File
@@ -0,0 +1,28 @@
<Solution>
<Folder Name="/changelog/">
<File Path="changelog/1.3.4.html" />
<File Path="changelog/1.4.4.html" />
<File Path="changelog/1.4.5.html" />
<File Path="changelog/1.4.6.html" />
<File Path="changelog/1.4.7.html" />
<File Path="changelog/1.4.8.html" />
<File Path="changelog/1.4.9.html" />
<File Path="changelog/1.5.0.html" />
<File Path="changelog/1.5.1.html" />
<File Path="changelog/1.5.2.html" />
<File Path="changelog/1.5.3.html" />
<File Path="changelog/1.5.4.html" />
<File Path="changelog/1.5.5.html" />
<File Path="changelog/1.5.6.html" />
<File Path="changelog/1.7.1.html" />
<File Path="changelog/1.7.2.html" />
<File Path="changelog/1.7.3.html" />
<File Path="changelog/1.7.4.html" />
<File Path="changelog/1.8.0.html" />
<File Path="changelog/1.8.1.html" />
<File Path="changelog/1.8.2.html" />
<File Path="changelog/1.8.3.json" />
</Folder>
<Project Path="src/NebulaAuth/NebulaAuth.csproj" />
<Project Path="src/SteamLibForked/SteamLibForked.csproj" />
</Solution>
+46
View File
@@ -0,0 +1,46 @@
{
"version": "1.8.3",
"date": "2026-03-13",
"changes": [
{
"type": "NEW",
"text": "Introduced a redesigned update system with a custom update dialog and integrated changelog viewer",
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/19"
},
{
"type": "NEW",
"text": "Added support for importing SDA-encrypted mafiles with automatic manifest detection",
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/17"
},
{
"type": "NEW",
"text": "Grouped market confirmations can now be expanded to reveal individual items",
"link": "https://github.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/pull/18"
},
{
"type": "SECURITY",
"text": "Added SHA256 checksum verification for downloaded update packages"
},
{
"type": "IMPROVEMENT",
"text": "Export feature now trims input automatically to prevent issues caused by invisible characters or extra spaces"
},
{
"type": "IMPROVEMENT",
"text": "Improved update experience with 'Remind later' and 'Skip version' options"
},
{
"type": "IMPROVEMENT",
"text": "Added visual update indicator and manual 'Check for updates' action"
},
{
"type": "IMPROVEMENT",
"text": "Expanded localization support with Spanish, Turkish and Kazakh languages"
},
{
"type": "INFO",
"text": "Read the full release notes for NebulaAuth 1.8.3",
"link": "https://teletype.in/@achies_raw/o-RDwZKZkAU"
}
]
}
+3 -3
View File
@@ -2,7 +2,6 @@ using System.Collections.Generic;
using System.Threading.Tasks;
using AutoUpdaterDotNET;
using MaterialDesignThemes.Wpf;
using Microsoft.Win32;
using NebulaAuth.Model;
using NebulaAuth.Model.Entities;
using NebulaAuth.Model.Update;
@@ -55,7 +54,7 @@ public static class DialogsController
}
/// <summary>
/// Shows the SDA encryption password dialog for unlocking SDA-encrypted mafiles.
/// Shows the SDA encryption password dialog for unlocking SDA-encrypted mafiles.
/// </summary>
/// <returns>The entered password if user clicked OK, otherwise null.</returns>
public static async Task<string?> ShowSdaPasswordDialog()
@@ -73,6 +72,7 @@ public static class DialogsController
return null;
}
public static async Task<bool> ShowProxyManager()
{
var vm = new ProxyManagerVM();
@@ -163,7 +163,7 @@ public static class DialogsController
var content = msg == null ? new ConfirmCancelDialog() : new ConfirmCancelDialog(msg);
var result = await DialogHost.Show(content);
return result != null && (bool)result;
return result != null && (bool) result;
}
public static async Task<string?> ShowTextFieldDialog(string? title = null, string? msg = null)
+12 -6
View File
@@ -11,6 +11,7 @@ public static class LocManager
{
public const string CODE_BEHIND_PATH_PART = "CodeBehind";
public const string COMMON_PATH_PART = "Common";
private const string LOC_DIR = "Localization";
public static void SetApplicationLocalization(LocalizationLanguage language)
{
@@ -30,9 +31,12 @@ public static class LocManager
{
LocalizationLanguage.English => "en",
LocalizationLanguage.Russian => "ru",
LocalizationLanguage.Ukrainian => "ua",
LocalizationLanguage.Ukrainian => "uk",
LocalizationLanguage.ChineseSimplified => "zh",
LocalizationLanguage.French => "fr",
LocalizationLanguage.Spanish => "es",
LocalizationLanguage.Turkish => "tr",
LocalizationLanguage.Kazakh => "kk",
_ => throw new ArgumentOutOfRangeException(nameof(language), language, null)
};
}
@@ -49,10 +53,9 @@ public static class LocManager
public static void ReloadFiles()
{
var exampleFileFileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!,
"localization.loc.json");
LocalizationLoader.Instance.ClearAllTranslations();
LocalizationLoader.Instance.AddFile(exampleFileFileName);
var baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!;
var path = Path.Combine(baseDir, LOC_DIR);
LocalizationLoader.Instance.AddDirectory(path);
}
public static string? GetCodeBehind(params string[] path)
@@ -111,5 +114,8 @@ public enum LocalizationLanguage
Russian,
Ukrainian,
ChineseSimplified,
French
French,
Spanish,
Turkish,
Kazakh
}
+11 -8
View File
@@ -1,11 +1,11 @@
using AutoUpdaterDotNET;
using NebulaAuth.Model;
using NebulaAuth.Model.Update;
using Newtonsoft.Json;
using System;
using System;
using System.IO;
using System.Net.Http;
using System.Windows;
using AutoUpdaterDotNET;
using NebulaAuth.Model;
using NebulaAuth.Model.Update;
using Newtonsoft.Json;
namespace NebulaAuth.Core;
@@ -13,6 +13,7 @@ public static class UpdateManager
{
private const string BASE_URL =
"https://raw.githubusercontent.com/achiez/NebulaAuth-Steam-Desktop-Authenticator-by-Achies/master/";
private const string UPDATE_URL = BASE_URL + "NebulaAuth/update.xml";
private const string CHANGELOG_BASE_URL = BASE_URL + "changelog/";
@@ -21,13 +22,14 @@ public static class UpdateManager
private static bool _isManualCheck;
public static bool HasPendingUpdate { get; private set; }
public static event Action? PendingUpdateDetected;
static UpdateManager()
{
AutoUpdater.CheckForUpdateEvent += HandleCheckForUpdateEvent;
}
public static event Action? PendingUpdateDetected;
public static void CheckForUpdates(bool manual = false)
{
_isManualCheck = manual;
@@ -62,7 +64,8 @@ public static class UpdateManager
if (isManual)
{
Application.Current.Dispatcher.Invoke(() =>
SnackbarController.SendSnackbar(LocManager.GetCommonOrDefault("Request error", "RequestError")));
SnackbarController.SendSnackbar(LocManager.GetCommonOrDefault("Request error",
"RequestError")));
}
return;
@@ -81,7 +84,7 @@ public static class UpdateManager
return;
}
var version = args.CurrentVersion.ToString();
var version = args.CurrentVersion;
var settings = UpdateSettings.Load();
if (!isManual && !settings.ShouldShow(version))
@@ -0,0 +1,628 @@
{
"CodeBehind": {
"ErrorTranslator": {
"Login": {
"CaptchaRequired": {
"en": "Captcha",
"ru": "Капча",
"zh": "验证码",
"uk": "Капча",
"fr": "Captcha",
"es": "Captcha",
"tr": "Captcha",
"kk": "Капча"
},
"InvalidCredentials": {
"en": "Invalid password",
"ru": "Неверный пароль",
"zh": "密码无效",
"uk": "Невірний пароль",
"fr": "Mot de passe invalide",
"es": "Contraseña inválida",
"tr": "Geçersiz şifre",
"kk": "Қате құпиясөз"
},
"EmailAuthRequired": {
"en": "Email code required",
"ru": "Требуется код с почты",
"zh": "需要电子邮件验证码",
"uk": "Потрібен код з пошти",
"fr": "Code email requis",
"es": "Se requiere código de correo electrónico",
"tr": "E-posta kodu gerekli",
"kk": "Электрондық пошта коды қажет"
},
"InvalidEmailAuthCode": {
"en": "Invalid email code",
"ru": "Неверный код с почты",
"zh": "无效的电子邮件验证码",
"uk": "Невірний код з пошти",
"fr": "Code email invalide",
"es": "Código de correo electrónico inválido",
"tr": "Geçersiz e-posta kodu",
"kk": "Қате электрондық пошта коды"
},
"InvalidTwoFactorCode": {
"en": "Invalid two factor code",
"ru": "Неверный двухфакторный код",
"zh": "无效的两步验证码",
"uk": "Невірний двофакторний код",
"fr": "Code 2FA invalide",
"es": "Código de verificación en dos pasos inválido",
"tr": "Geçersiz iki faktörlü kod",
"kk": "Қате екі факторлы код"
},
"UndefinedError": {
"en": "Undefined error",
"ru": "Неизвестная ошибка",
"zh": "未定义的错误",
"uk": "Невідома помилка",
"fr": "Erreur inconnue",
"es": "Error desconocido",
"tr": "Bilinmeyen hata",
"kk": "Белгісіз қате"
}
},
"EResult": {
"InvalidPassword": {
"ru": "Неверный пароль",
"en": "Invalid password",
"zh": "密码错误",
"uk": "Невірний пароль",
"fr": "Mot de passe invalide",
"es": "Contraseña inválida",
"tr": "Geçersiz şifre",
"kk": "Қате құпиясөз"
},
"InvalidState": {
"ru": "Неверное состояние (11)",
"en": "Invalid state (11)",
"zh": "无效状态 (11)",
"uk": "Невірний стан (11)",
"fr": "État invalide (11)",
"es": "Estado inválido (11)",
"tr": "Geçersiz durum (11)",
"kk": "Жарамсыз күй (11)"
},
"Timeout": {
"ru": "Таймаут (16)",
"en": "Timeout (16)",
"zh": "超时 (16)",
"uk": "Таймаут (16)",
"fr": "Timeout (16)",
"es": "Tiempo de espera agotado (16)",
"tr": "Zaman aşımı (16)",
"kk": "Уақыт аяқталды (16)"
},
"Banned": {
"ru": "Забанен (17)",
"en": "Banned (17)",
"zh": "被封禁 (17)",
"uk": "Забанений (17)",
"fr": "Banni (17)",
"es": "Prohibido (17)",
"tr": "Yasaklandı (17)",
"kk": "Бұғатталған (17)"
},
"AccountNotFound": {
"ru": "Аккаунт не найден (18)",
"en": "Account not found (18)",
"zh": "未找到账户 (18)",
"uk": "Акаунт не знайдено (18)",
"fr": "Compte non trouvé (18)",
"es": "Cuenta no encontrada (18)",
"tr": "Hesap bulunamadı (18)",
"kk": "Аккаунт табылмады (18)"
},
"InvalidSteamID": {
"ru": "Неправильный SteamID (19)",
"en": "Invalid SteamID (19)",
"zh": "无效的 SteamID (19)",
"uk": "Неправильний SteamID (19)",
"fr": "SteamID invalide (19)",
"es": "SteamID inválido (19)",
"tr": "Geçersiz SteamID (19)",
"kk": "Жарамсыз SteamID (19)"
},
"ServiceUnavailable": {
"ru": "Сервер не отвечает (20)",
"en": "Service unavailable (20)",
"zh": "服务器无响应 (20)",
"uk": "Сервер не відповідає (20)",
"fr": "Service indisponible (20)",
"es": "Servicio no disponible (20)",
"tr": "Servis kullanılamıyor (20)",
"kk": "Қызмет қолжетімсіз (20)"
},
"Pending": {
"ru": "Ожидание (21)",
"en": "Pending (21)",
"zh": "等待 (21)",
"uk": "Очікування (21)",
"fr": "En attente (21)",
"es": "Pendiente (21)",
"tr": "Beklemede (21)",
"kk": "Күту (21)"
},
"LimitExceeded": {
"ru": "Лимит превышен (25)",
"en": "Limit exceeded (25)",
"zh": "超出限制 (25)",
"uk": "Ліміт перевищено (25)",
"fr": "Limite dépassée (25)",
"es": "Límite excedido (25)",
"tr": "Limit aşıldı (25)",
"kk": "Лимит асылды (25)"
},
"Expired": {
"ru": "Истекло (27)",
"en": "Expired (27)",
"zh": "有效期已过 (27)",
"uk": "Термін дії закінчився (27)",
"fr": "Expiré (27)",
"es": "Expirado (27)",
"tr": "Süresi doldu (27)",
"kk": "Мерзімі аяқталды (27)"
},
"Blocked": {
"ru": "Заблокировано (40)",
"en": "Blocked (40)",
"zh": "已封锁 (40)",
"uk": "Заблоковано (40)",
"fr": "Bloqué (40)",
"es": "Bloqueado (40)",
"tr": "Engellendi (40)",
"kk": "Блокталған (40)"
},
"AccountDisabled": {
"ru": "Аккаунт отключен (43)",
"en": "Account disabled (43)",
"zh": "账户已被禁用 (43)",
"uk": "Акаунт відключено (43)",
"fr": "Compte désactivé (43)",
"es": "Cuenta deshabilitada (43)",
"tr": "Hesap devre dışı (43)",
"kk": "Аккаунт өшірілген (43)"
},
"Suspended": {
"ru": "Отключено (Suspended 51)",
"en": "Suspended (51)",
"zh": "已停用(暂停 51",
"uk": "Відключено (Suspended 51)",
"fr": "Suspendu (51)",
"es": "Suspendido (51)",
"tr": "Askıya alındı (51)",
"kk": "Тоқтатылған (51)"
},
"Cancelled": {
"ru": "Отмена (52)",
"en": "Cancelled (52)",
"zh": "已取消 (52)",
"uk": "Скасовано (52)",
"fr": "Annulé (52)",
"es": "Cancelado (52)",
"tr": "İptal edildi (52)",
"kk": "Бас тартылды (52)"
},
"InvalidLoginAuthCode": {
"ru": "Неверный код авторизации (65)",
"en": "Invalid login auth code (65)",
"zh": "无效的授权码 (65)",
"uk": "Невірний код авторизації (65)",
"fr": "Code d'authentification invalide (65)",
"es": "Código de autenticación inválido (65)",
"tr": "Geçersiz giriş doğrulama kodu (65)",
"kk": "Жарамсыз авторизация коды (65)"
},
"ExpiredLoginAuthCode": {
"ru": "Истекло время кода (71)",
"en": "Expired login auth code (71)",
"zh": "验证码已过期 (71)",
"uk": "Термін дії коду закінчився (71)",
"fr": "Code d'authentification expiré (71)",
"es": "Código de autenticación expirado (71)",
"tr": "Giriş doğrulama kodunun süresi doldu (71)",
"kk": "Авторизация кодының мерзімі аяқталды (71)"
},
"AccountLockedDown": {
"ru": "Аккаунт заблокирован (КТ 73)",
"en": "Account locked down (73)",
"zh": "账户被封锁 (КТ 73)",
"uk": "Акаунт заблоковано (КТ 73)",
"fr": "Compte verrouillé (73)",
"es": "Cuenta bloqueada (73)",
"tr": "Hesap kilitlendi (73)",
"kk": "Аккаунт бұғатталған (73)"
},
"UnexpectedError": {
"ru": "Неожиданная ошибка (79)",
"en": "Unexpected error (79)",
"zh": "不可预料的错误 (79)",
"uk": "Непередбачувана помилка (79)",
"fr": "Erreur inattendue (79)",
"es": "Error inesperado (79)",
"tr": "Beklenmeyen hata (79)",
"kk": "Күтпеген қате (79)"
},
"Disabled": {
"ru": "Отключено (80)",
"en": "Disabled (80)",
"zh": "已关闭 (80)",
"uk": "Відключено (80)",
"fr": "Désactivé (80)",
"es": "Deshabilitado (80)",
"tr": "Devre dışı (80)",
"kk": "Өшірілген (80)"
},
"RegionLocked": {
"ru": "Регион заблокирован (83)",
"en": "Region locked (83)",
"zh": "该地区已被封锁 (83)",
"uk": "Регіон заблоковано (83)",
"fr": "Région bloquée (83)",
"es": "Región bloqueada (83)",
"tr": "Bölge kilitli (83)",
"kk": "Аймақ бұғатталған (83)"
},
"RateLimitExceeded": {
"ru": "Слишком много запросов (84)",
"en": "Rate limit exceeded (84)",
"zh": "请求过多 (84)",
"uk": "Забагато запитів (84)",
"fr": "Limite de connexion dépassée (84)",
"es": "Límite de solicitudes excedido (84)",
"tr": "İstek limiti aşıldı (84)",
"kk": "Сұраныс лимиті асты (84)"
},
"TwoFactorCodeMismatch": {
"ru": "2FA код не подошел (88)",
"en": "2FA code mismatch (88)",
"zh": "双因素代码不正确 (88)",
"uk": "2FA код не підійшов (88)",
"fr": "Code 2FA invalide (88)",
"es": "Código 2FA incorrecto (88)",
"tr": "2FA kodu eşleşmedi (88)",
"kk": "2FA коды сәйкес келмеді (88)"
},
"TwoFactorActivationCodeMismatch": {
"ru": "2FA код не прошел проверку (89)",
"en": "2FA activation code mismatch (89)",
"zh": "双因素认证代码未通过验证 (89)",
"uk": "2FA код не пройшов перевірку (89)",
"fr": "Code d'activation 2FA invalide (89)",
"es": "Código de activación 2FA incorrecto (89)",
"tr": "2FA aktivasyon kodu eşleşmedi (89)",
"kk": "2FA активация коды сәйкес келмеді (89)"
},
"TimeNotSynced": {
"ru": "Время не синхронизировано (93)",
"en": "Time not synced (93)",
"zh": "时间未同步 (93)",
"uk": "Час не синхронізовано (93)",
"fr": "Heure non synchronisée (93)",
"es": "Hora no sincronizada (93)",
"tr": "Saat senkronize değil (93)",
"kk": "Уақыт синхрондалмаған (93)"
},
"SMSCodeFailed": {
"ru": "Ошибка SMS-кода (94)",
"en": "SMS code failed (94)",
"zh": "短信验证码错误 (94)",
"uk": "Помилка SMS-коду (94)",
"fr": "Code SMS échoué (94)",
"es": "Código SMS incorrecto (94)",
"tr": "SMS kodu hatalı (94)",
"kk": "SMS коды қате (94)"
},
"AccountLimitExceeded": {
"ru": "Лимит аккаунта превышен (95)",
"en": "Account limit exceeded (95)",
"zh": "账户已超出限制 (95)",
"uk": "Ліміт акаунта перевищено (95)",
"fr": "Limite de compte dépassée (95)",
"es": "Límite de cuenta excedido (95)",
"tr": "Hesap limiti aşıldı (95)",
"kk": "Аккаунт лимиті асты (95)"
},
"EmailSendFailure": {
"ru": "Не удалось отправить письмо (99)",
"en": "Email send failure (99)",
"zh": "无法发送邮件 (99)",
"uk": "Не вдалося відправити лист (99)",
"fr": "Échec de l'envoi de l'email (99)",
"es": "Error al enviar el correo (99)",
"tr": "E-posta gönderilemedi (99)",
"kk": "Электрондық хат жіберілмеді (99)"
},
"NeedCaptcha": {
"ru": "Капча (101)",
"en": "Need captcha (101)",
"zh": "验证码 (101)",
"uk": "Капча (101)",
"fr": "Captcha requis (101)",
"es": "Captcha requerido (101)",
"tr": "Captcha gerekli (101)",
"kk": "Капча қажет (101)"
},
"IPBanned": {
"ru": "IP заблокирован (105)",
"en": "IP banned (105)",
"zh": "IP被阻止 (105)",
"uk": "IP заблоковано (105)",
"fr": "IP bloquée (105)",
"es": "IP bloqueada (105)",
"tr": "IP yasaklandı (105)",
"kk": "IP бұғатталған (105)"
},
"LimitedUserAccount": {
"ru": "Аккаунт с лимитом (112)",
"en": "Limited user account (112)",
"zh": "限额账户 (112)",
"uk": "Акаунт з лімітом (112)",
"fr": "Compte utilisateur limité (112)",
"es": "Cuenta limitada (112)",
"tr": "Sınırlı kullanıcı hesabı (112)",
"kk": "Шектеулі аккаунт (112)"
},
"AccountDeleted": {
"ru": "Аккаунт удален (114)",
"en": "Account deleted (114)",
"zh": "账户已删除 (114)",
"uk": "Акаунт видалено (114)",
"fr": "Compte supprimé (114)",
"es": "Cuenta eliminada (114)",
"tr": "Hesap silindi (114)",
"kk": "Аккаунт жойылған (114)"
},
"PhoneNumberIsVOIP": {
"ru": "Номера VOIP запрещены (127)",
"en": "Phone number is VOIP (127)",
"zh": "VOIP 号码被禁止 (127)",
"uk": "Номера VOIP заборонені (127)",
"fr": "Numéros VOIP interdits (127)",
"es": "Los números VOIP no están permitidos (127)",
"tr": "VOIP numaralar yasaklı (127)",
"kk": "VOIP нөмірлеріне тыйым салынған (127)"
}
},
"AuthenticatorLinkerError": {
"PhoneAlreadyAttached": {
"ru": "Телефон привязан, попробуйте через 20 минут",
"en": "Phone already attached, try again in 20 minutes",
"zh": "手机已绑定,请在20分钟后重试",
"uk": "Телефон прив'язано, спробуйте через 20 хвилин",
"fr": "Téléphone déjà attaché, réessayer dans 20 minutes",
"es": "El teléfono ya está vinculado, inténtalo de nuevo en 20 minutos",
"tr": "Telefon zaten bağlı, 20 dakika sonra tekrar deneyin",
"kk": "Телефон бұрыннан тіркелген, 20 минуттан кейін қайта көріңіз"
},
"InvalidPhoneNumber": {
"ru": "Неверный номер телефона",
"en": "Invalid phone number",
"zh": "无效的电话号码",
"uk": "Невірний номер телефону",
"fr": "Numéro de téléphone invalide",
"es": "Número de teléfono inválido",
"tr": "Geçersiz telefon numarası",
"kk": "Жарамсыз телефон нөмірі"
},
"CantAttachPhone": {
"ru": "Не удается привязать телефон",
"en": "Can't attach phone",
"zh": "无法绑定手机",
"uk": "Не вдається прив'язати телефон",
"fr": "Impossible d'attacher le téléphone",
"es": "No se puede vincular el teléfono",
"tr": "Telefon bağlanamıyor",
"kk": "Телефонды тіркеу мүмкін емес"
},
"CantConfirmAttachingEmail": {
"ru": "Не удалось подтвердить письмо",
"en": "Can't confirm attaching email",
"zh": "无法确认邮件",
"uk": "Не вдалося підтвердити лист",
"fr": "Impossible de confirmer l'attachement de l'email",
"es": "No se pudo confirmar el correo electrónico",
"tr": "E-posta doğrulanamadı",
"kk": "Электрондық поштаны растау мүмкін болмады"
},
"CantSendSms": {
"ru": "Не удалось отправить SMS",
"en": "Can't send SMS",
"zh": "无法发送短信",
"uk": "Не вдалося відправити SMS",
"fr": "Impossible d'envoyer SMS",
"es": "No se pudo enviar el SMS",
"tr": "SMS gönderilemedi",
"kk": "SMS жіберу мүмкін болмады"
},
"AuthenticatorPresent": {
"ru": "Аутентификатор привязан",
"en": "Authenticator present",
"zh": "身份验证器已绑定",
"uk": "Аутентифікатор прив'язано",
"fr": "Authenticateur présent",
"es": "Autenticador ya vinculado",
"tr": "Kimlik doğrulayıcı zaten bağlı",
"kk": "Аутентификатор бұрыннан тіркелген"
},
"BadConfirmationCode": {
"ru": "Код не подошел",
"en": "Bad confirmation code",
"zh": "代码不正确",
"uk": "Код не підійшов",
"fr": "Code de confirmation invalide",
"es": "Código de confirmación incorrecto",
"tr": "Doğrulama kodu hatalı",
"kk": "Растау коды қате"
},
"UnableToGenerateCorrectCodes": {
"ru": "Не удается сгенерировать коды",
"en": "Unable to generate correct codes",
"zh": "无法生成代码",
"uk": "Не вдається згенерувати коди",
"fr": "Impossible de générer des codes corrects",
"es": "No se pueden generar códigos correctos",
"tr": "Doğru kodlar oluşturulamıyor",
"kk": "Дұрыс кодтарды генерациялау мүмкін емес"
},
"InvalidStateWithStatus2": {
"ru": "Неверное состояние (InvalidState) со статусом 2. Откройте ссылку на руководство сверху этого окна.",
"en": "Invalid state (InvalidState) with status 2. Open link to the troubleshooting guide at the top of this window.",
"zh": "状态无效(InvalidState),状态码为 2. 请打开本窗口顶部的故障排除指南链接。",
"uk": "Невірний стан (InvalidState) зі статусом 2. Відкрийте посилання на посібник з усунення несправностей у верхній частині цього вікна.",
"fr": "État invalide (InvalidState) avec le statut 2. Ouvrez le lien vers le guide de dépannage en haut de cette fenêtre.",
"es": "Estado inválido (InvalidState) con estado 2. Abre el enlace a la guía de solución de problemas en la parte superior de esta ventana.",
"tr": "Geçersiz durum (InvalidState) durum 2 ile. Bu pencerenin üst kısmındaki sorun giderme kılavuzu bağlantısını açın.",
"kk": "Жарамсыз күй (InvalidState), статус 2. Осы терезенің жоғарғы жағындағы ақауларды жою нұсқаулығының сілтемесін ашыңыз."
},
"GeneralFailure": {
"ru": "Общая ошибка",
"en": "General Failure",
"zh": "一般故障",
"uk": "Загальна помилка",
"fr": "Échec général",
"es": "Fallo general",
"tr": "Genel hata",
"kk": "Жалпы қате"
}
}
},
"ExceptionHandler": {
"SessionInvalidException": {
"ru": "Сессия истекла. Попробуйте обновить ее или залогиниться заново (Аккаунт → войти)",
"en": "Session expired. Try to refresh it or login again (Account → Login)",
"zh": "会话已过期。请通过菜单尝试刷新,或重新登录(账户 → 登录)",
"uk": "Сесія прострочена. Спробуйте оновити її через меню або залогінитися знову (Акаунт → Увійти)",
"fr": "Session expirée. Essayez de la rafraîchir ou de vous reconnecter à nouveau (Compte → Se connecter)",
"es": "La sesión ha expirado. Intenta actualizarla o iniciar sesión nuevamente (Cuenta → Iniciar sesión)",
"tr": "Oturum süresi doldu. Yenilemeyi deneyin veya tekrar giriş yapın (Hesap → Giriş)",
"kk": "Сессия мерзімі аяқталды. Оны жаңартып көріңіз немесе қайта кіріңіз (Аккаунт → Кіру)"
},
"SessionExpiredException": {
"ru": "Сессия полностью истекла. Нужно залогиниться заново (Аккаунт → Войти)",
"en": "Session fully expired. Need to login again (Account → Login)",
"zh": "会话已完全过期。需要重新登录(账户 → 登录)",
"uk": "Сесія повніст'ю прострочена'. Потрібно залогінитися знову (Акаунт → Увійти)",
"fr": "Session entièrement expirée. Vous devez vous reconnecter à nouveau (Compte → Se connecter)",
"es": "La sesión ha expirado completamente. Debes iniciar sesión nuevamente (Cuenta → Iniciar sesión)",
"tr": "Oturum tamamen sona erdi. Tekrar giriş yapmanız gerekiyor (Hesap → Giriş)",
"kk": "Сессия толық аяқталды. Қайта кіру қажет (Аккаунт → Кіру)"
},
"TaskCanceledException": {
"ru": "Произошла отмена операции",
"en": "Operation canceled",
"zh": "操作已取消",
"uk": "Операція скасована",
"fr": "Opération annulée",
"es": "Operación cancelada",
"tr": "İşlem iptal edildi",
"kk": "Операция тоқтатылды"
},
"TimeoutException": {
"ru": "Таймаут подключения. Проверьте ваше соединение с Proxy или интернетом",
"en": "Connection timeout. Check your connection with Proxy or internet",
"zh": "连接超时。请检查您的代理或互联网连接。",
"uk": "Таймаут підключення. Перевірте ваше з'єднання з Proxy або інтернетом",
"fr": "Timeout de connexion. Vérifiez votre connexion avec Proxy ou internet",
"es": "Tiempo de espera de conexión agotado. Verifica tu conexión con el proxy o Internet",
"tr": "Bağlantı zaman aşımına uğradı. Proxy veya internet bağlantınızı kontrol edin",
"kk": "Қосылу уақыты аяқталды. Proxy немесе интернет қосылымыңызды тексеріңіз"
},
"UnsupportedResponseException": {
"ru": "Получен неожиданный ответ от Steam. Результат сохранен в log.log. Свяжитесь с разработчиком",
"en": "Unexpected response from Steam. Result saved in log.log. Contact developer",
"zh": "从 Steam 收到意外响应。结果已保存到 log.log。请联系开发者",
"uk": "Отримано неочікувану відповідь від Steam. Результат збережено в log.log. Зв'яжіться з розробником",
"fr": "Réponse inattendue de Steam. Résultat enregistré dans log.log. Contactez le développeur",
"es": "Respuesta inesperada de Steam. El resultado se guardó en log.log. Contacta al desarrollador",
"tr": "Steam'den beklenmeyen bir yanıt alındı. Sonuç log.log dosyasına kaydedildi. Geliştiriciyle iletişime geçin",
"kk": "Steam-нан күтпеген жауап алынды. Нәтиже log.log файлына сақталды. Әзірлеушімен байланысыңыз"
},
"LoginException": {
"ru": "Ошибка входа: ",
"en": "Login error: ",
"zh": "登录错误:",
"uk": "Помилка входу: ",
"fr": "Erreur de connexion: ",
"es": "Error de inicio de sesión: ",
"tr": "Giriş hatası: ",
"kk": "Кіру қатесі: "
},
"UnsupportedAuthTypeException": {
"Mail": {
"ru": "Ошибка: Был запрошен код с почты. Steam Guard не активирован",
"en": "Error: Email code was requested. Steam Guard is not activated",
"zh": "错误:已请求电子邮件验证码。令牌未激活",
"uk": "Помилка: Був запрошений код з пошти. Steam Guard не активовано",
"fr": "Erreur: Code email était demandé. Steam Guard non activé",
"es": "Error: Se solicitó un código por correo electrónico. Steam Guard no está activado",
"tr": "Hata: E-posta kodu istendi. Steam Guard etkin değil",
"kk": "Қате: Электрондық пошта коды сұралды. Steam Guard белсендірілмеген"
},
"Guard": {
"ru": "Ошибка: Был запрошен вход с помощью Steam Guard. На аккаунте уже активирован мобильный аутентификатор",
"en": "Error: Login with Steam Guard was requested. Mobile authenticator is already activated on the account",
"zh": "错误:请求使用令牌登录。该账户已激活移动验证器",
"uk": "Помилка: Був запрошений вхід за допомогою Steam Guard. На акаунті вже активовано мобільний автентифікатор",
"fr": "Erreur: Connexion avec Steam Guard demandée. Authenticateur mobile est déjà activé sur le compte",
"es": "Error: Se solicitó iniciar sesión con Steam Guard. El autenticador móvil ya está activado en la cuenta",
"tr": "Hata: Steam Guard ile giriş istendi. Hesapta mobil doğrulayıcı zaten etkin",
"kk": "Қате: Steam Guard арқылы кіру сұралды. Аккаунтта мобильді аутентификатор әлдеқашан қосылған"
},
"Unknown": {
"ru": "Ошибка: Неизвестный тип аутентификации",
"en": "Error: Unknown authentication type",
"zh": "错误:未知的身份验证类型",
"uk": "Помилка: Невідомий тип автентифікації",
"fr": "Erreur: Type d'authentification inconnu",
"es": "Error: Tipo de autenticación desconocido",
"tr": "Hata: Bilinmeyen kimlik doğrulama türü",
"kk": "Қате: Белгісіз аутентификация түрі"
}
},
"UnknownException": {
"ru": "Неизвестная ошибка: ",
"en": "Unknown error: ",
"zh": "未知错误:",
"uk": "Невідома помилка: ",
"fr": "Erreur inconnue: ",
"es": "Error desconocido: ",
"tr": "Bilinmeyen hata: ",
"kk": "Белгісіз қате: "
},
"CantLoadConfirmationsException": {
"Common": {
"ru": "Не удалось загрузить потверждения из-за ошибки Steam: ",
"en": "Can't load confirmations due to Steam error: ",
"zh": "由于 Steam 错误,无法下载确认信息:",
"uk": "Не вдалося завантажити підтвердження через помилку Steam: ",
"fr": "Impossible de charger les confirmations en raison de l'erreur Steam: ",
"es": "No se pueden cargar las confirmaciones debido a un error de Steam: ",
"tr": "Steam hatası nedeniyle onaylar yüklenemedi: ",
"kk": "Steam қатесіне байланысты растауларды жүктеу мүмкін емес: "
},
"TryAgainLater": {
"ru": "Попробуйте позже",
"en": "Try again later",
"zh": "稍后再试",
"uk": "Спробуйте пізніше",
"fr": "Réessayer plus tard",
"es": "Inténtalo más tarde",
"tr": "Daha sonra tekrar deneyin",
"kk": "Кейінірек қайта көріңіз"
},
"NotSetupToReceiveConfirmations": {
"ru": "Аккаунт не настроен на получение подтверждений",
"en": "Account is not set up to receive confirmations",
"zh": "帐户未设置为接收确认",
"uk": "Акаунт не налаштований на отримання підтверджень",
"fr": "Le compte n'est pas configuré pour recevoir des confirmations",
"es": "La cuenta no está configurada para recibir confirmaciones",
"tr": "Hesap onayları almak için ayarlanmamış",
"kk": "Аккаунт растауларды алу үшін бапталмаған"
}
}
}
}
}
@@ -0,0 +1,168 @@
{
"CodeBehind": {
"SessionHandler": {
"SessionWasRefreshedAutomatically": {
"ru": "Сессия была обновлена автоматически",
"en": "Session was refreshed automatically",
"zh": "会话已自动更新",
"uk": "Сесія була оновлена автоматично",
"fr": "La session a été rafraîchie automatiquement",
"es": "La sesión se actualizó automáticamente",
"tr": "Oturum otomatik olarak yenilendi",
"kk": "Сессия автоматты түрде жаңартылды"
}
},
"MAAC": {
"TimerConfirmed": {
"ru": "Авто: подтверждено ",
"en": "Auto: confirmed ",
"zh": "自动:已确认 ",
"uk": "Авто: підтверджено ",
"fr": "Auto: confirmé ",
"es": "Auto: confirmado ",
"tr": "Otomatik: onaylandı ",
"kk": "Авто: расталды "
},
"TimerNotConfirmed": {
"ru": "Авто: подтверждение не сработало",
"en": "Auto: confirmation was unsuccessful",
"zh": "自动:确认失败",
"uk": "Авто: підтвердження не спрацювало",
"fr": "Auto: la confirmation n'a pas fonctionné",
"es": "Auto: la confirmación falló",
"tr": "Otomatik: doğrulama başarısız oldu",
"kk": "Авто: растау сәтсіз болды"
},
"TimerSessionError": {
"ru": "необходимо обновить сессию или перелогиниться",
"en": "need to refresh session or relogin",
"zh": "需要刷新会话或重新登录",
"uk": "необхідно оновити сесію або перелогінитися",
"fr": "il faut rafraîchir la session ou se reconnecter",
"es": "es necesario actualizar la sesión o volver a iniciar sesión",
"tr": "oturumu yenilemek veya tekrar giriş yapmak gerekiyor",
"kk": "сессияны жаңарту немесе қайта кіру қажет"
},
"TimerPrefix": {
"ru": "Авто ",
"en": "Auto ",
"zh": "自动 ",
"uk": "Авто ",
"fr": "Auto ",
"es": "Auto ",
"tr": "Otomatik ",
"kk": "Авто "
},
"TimerPreventedOverlap": {
"ru": "Авто: таймер подтверждений пытался начать новый цикл, когда предыдущий еще не завершился. Советуем увеличить задержку",
"en": "Auto: confirmation timer tried to start new cycle when previous one was not finished yet. We recommend to increase delay",
"zh": "自动: 确认计时器在前一个周期尚未完成时尝试启动新周期。我们建议增加延迟。",
"uk": "Авто: таймер підтверджень намагався запустити новий цикл, коли попередній ще не закінчився. Рекомендуємо збільшити затримку",
"fr": "Auto: le timer de confirmation a tenté de démarrer un nouveau cycle alors que le précédent n'était pas encore terminé. Nous recommandons d'augmenter le délai",
"es": "Auto: el temporizador de confirmación intentó iniciar un nuevo ciclo cuando el anterior aún no había terminado. Recomendamos aumentar el retraso",
"tr": "Otomatik: onay zamanlayıcısı önceki döngü bitmeden yeni bir döngü başlatmaya çalıştı. Gecikmeyi artırmanızı öneririz",
"kk": "Авто: растау таймері алдыңғы цикл аяқталмай тұрып жаңасын бастауға тырысты. Кідірісті арттыруды ұсынамыз"
},
"FailedToLoadStorage": {
"en": "Failed to load auto-confirm timers. File seems to be corrupted",
"ru": "Не удалось загрузить таймеры авто-подтверждений. Файл, похоже, поврежден",
"zh": "无法加载自动确认计时器。文件似乎已损坏",
"uk": "Не вдалося завантажити таймери авто-підтверджень. Файл, схоже, пошкоджено",
"fr": "Impossible de charger les timers d'auto-confirmation. Le fichier semble être corrompu",
"es": "No se pudieron cargar los temporizadores de auto-confirmación. El archivo parece estar dañado",
"tr": "Otomatik onay zamanlayıcıları yüklenemedi. Dosya bozulmuş görünüyor",
"kk": "Авто-растау таймерлерін жүктеу мүмкін болмады. Файл бүлінген сияқты"
},
"PortableMaClientStatus": {
"SessionError": {
"ru": "Ошибка сессии. Нужно обновить сессию или перелогиниться",
"en": "Session error. Need to refresh session or relogin",
"zh": "会话错误。需要刷新会话或重新登录",
"uk": "Помилка сесії. Потрібно оновити сесію або перелогінитися",
"fr": "Erreur de session. Il faut rafraîchir la session ou se reconnecter",
"es": "Error de sesión. Es necesario actualizar la sesión o volver a iniciar sesión",
"tr": "Oturum hatası. Oturumu yenilemek veya tekrar giriş yapmak gerekiyor",
"kk": "Сессия қатесі. Сессияны жаңарту немесе қайта кіру қажет"
}
}
},
"ProxyStorage": {
"ErrorWhileLoadingProxies": {
"en": "Error while loading proxies",
"ru": "Ошибка при загрузке прокси",
"zh": "加载代理时出错",
"uk": "Помилка при завантаженні проксі",
"fr": "Erreur lors du chargement des proxies",
"es": "Error al cargar los proxies",
"tr": "Proxy yüklenirken hata oluştu",
"kk": "Proxy жүктеу кезінде қате"
}
},
"Settings": {
"ErrorWhileLoadingSettings": {
"en": "Error while loading settings. Settings were reset",
"ru": "Ошибка при загрузке настроек. Настройки были сброшены",
"zh": "加载设置时出错。设置已重置",
"uk": "Помилка при завантаженні налаштувань. Налаштування були скинуті",
"fr": "Erreur lors du chargement des paramètres. Les paramètres ont été réinitialisés",
"es": "Error al cargar la configuración. Los ajustes fueron restablecidos",
"tr": "Ayarlar yüklenirken hata oluştu. Ayarlar sıfırlandı",
"kk": "Баптауларды жүктеу кезінде қате. Баптаулар қалпына келтірілді"
}
},
"MafileExporter": {
"InvalidPath": {
"ru": "Указан некорректный путь для экспорта.",
"en": "The specified export path is invalid.",
"uk": "Вказано некоректний шлях для експорту.",
"fr": "Le chemin dexportation spécifié est invalide.",
"zh": "指定的导出路径无效。",
"es": "La ruta de exportación especificada no es válida.",
"tr": "Belirtilen dışa aktarma yolu geçersiz.",
"kk": "Көрсетілген экспорт жолы жарамсыз."
},
"NebulaUtilizedDirectory": {
"ru": "Невозможно выполнить экспорт в папку, которая используется приложением. Рекомендуется выбрать отдельную директорию.",
"en": "Cannot export to a directory that is currently used by the application. Please choose a separate folder.",
"uk": "Неможливо виконати експорт у папку, яка використовується застосунком. Рекомендується вибрати окрему директорію.",
"fr": "Impossible dexporter vers un dossier utilisé par lapplication. Veuillez choisir un dossier distinct.",
"zh": "无法导出到应用程序正在使用的文件夹。请选择一个单独的目录。",
"es": "No se puede exportar a una carpeta que está siendo usada por la aplicación. Elija una carpeta diferente.",
"tr": "Uygulama tarafından kullanılan bir klasöre dışa aktarma yapılamaz. Lütfen ayrı bir klasör seçin.",
"kk": "Қолданба пайдаланып жатқан қалтаға экспорт жасау мүмкін емес. Басқа қалтаны таңдаңыз."
},
"AccessDenied": {
"ru": "Недостаточно прав для записи в указанную папку. Проверьте права доступа или выберите другой путь.",
"en": "Insufficient permissions to write to the specified directory. Please check access rights or choose another path.",
"uk": "Недостатньо прав для запису в указану папку. Перевірте права доступу або виберіть інший шлях.",
"fr": "Autorisation insuffisante pour écrire dans le dossier spécifié. Vérifiez les droits daccès ou choisissez un autre chemin.",
"zh": "没有权限写入指定的文件夹。请检查访问权限或选择其他路径。",
"es": "Permisos insuficientes para escribir en la carpeta especificada. Verifique los permisos o elija otra ruta.",
"tr": "Belirtilen klasöre yazmak için yeterli izin yok. Lütfen erişim haklarını kontrol edin veya başka bir yol seçin.",
"kk": "Көрсетілген қалтаға жазуға рұқсат жеткіліксіз. Қолжетімділік құқықтарын тексеріңіз немесе басқа жол таңдаңыз."
}
},
"UpdateService": {
"LatestVersion": {
"en": "You are using the latest version",
"ru": "У вас установлена последняя версия",
"zh": "您正在使用最新版本",
"uk": "У вас встановлена остання версія",
"fr": "Vous utilisez la dernière version",
"es": "Estás usando la última versión",
"tr": "En son sürümü kullanıyorsunuz",
"kk": "Сіз соңғы нұсқаны пайдаланып отырсыз"
},
"UpdateIndicatorHint": {
"en": "Update available. Click 'by achies' to check",
"ru": "Доступно обновление. Нажмите 'by achies' для проверки",
"zh": "有可用更新。点击 'by achies' 进行检查",
"uk": "Доступне оновлення. Натисніть 'by achies', щоб перевірити",
"fr": "Une mise à jour est disponible. Cliquez sur 'by achies' pour vérifier",
"es": "Actualización disponible. Haz clic en 'by achies' para comprobar",
"tr": "Güncelleme mevcut. Kontrol etmek için 'by achies' tıklayın",
"kk": "Жаңарту қолжетімді. Тексеру үшін 'by achies' басыңыз"
}
}
}
}
@@ -0,0 +1,54 @@
{
"SetEncryptionPasswordDialog": {
"Title": {
"en": "Encryption password",
"ru": "Пароль шифрования",
"zh": "加密密码",
"uk": "Пароль шифрування",
"fr": "Mot de passe de chiffrement",
"es": "Contraseña de cifrado",
"tr": "Şifreleme parolası",
"kk": "Шифрлау құпиясөзі"
},
"DialogText": {
"en": "You have previously set an encryption password for passwords in mafiles, specify it so that the application can automatically log in in case of problems with the session.\r\n(Optional)",
"ru": "Ранее вы устанавливали пароль шифрования для паролей в мафайлах, укажите его, чтобы приложение могло автоматически авторизоваться в случае проблем с сессией.\r\n(Не обязательно)",
"zh": "之前您为密码文件设置了加密密码,请输入它,以便应用程序在会话出现问题时可以自动登录。\r\n(非必填)",
"uk": "Раніше ви встановлювали пароль шифрування для паролів в мафайлах, вкажіть його, щоб додаток міг автоматично авторизуватися у випадку проблем з сесією.\r\n(Не обов'язково)",
"fr": "Vous avez déjà défini un mot de passe de chiffrement pour les mots de passe des mafiles, spécifiez-le pour que l'application puisse se connecter automatiquement en cas de problème avec la session.\r\n(Facultatif)",
"es": "Anteriormente estableciste una contraseña de cifrado para las contraseñas en los mafiles. Introdúcela para que la aplicación pueda iniciar sesión automáticamente si hay problemas con la sesión.\r\n(Opcional)",
"tr": "Daha önce mafile içindeki parolalar için bir şifreleme parolası ayarladınız. Oturumla ilgili sorunlar oluştuğunda uygulamanın otomatik giriş yapabilmesi için bunu belirtin.\r\n(İsteğe bağlı)",
"kk": "Бұрын mafile ішіндегі құпиясөздер үшін шифрлау құпиясөзін орнатқансыз. Сессияда мәселе туындаған жағдайда қолданба автоматты түрде кіруі үшін оны енгізіңіз.\r\n(Міндетті емес)"
},
"Ok": {
"en": "Ok",
"ru": "Ок",
"zh": "确定",
"uk": "Ок",
"fr": "Ok",
"es": "Aceptar",
"tr": "Tamam",
"kk": "Жарайды"
},
"Cancel": {
"en": "Cancel",
"ru": "Отмена",
"zh": "取消",
"uk": "Відміна",
"fr": "Annuler",
"es": "Cancelar",
"tr": "İptal",
"kk": "Бас тарту"
},
"Password": {
"en": "Password",
"ru": "Пароль",
"zh": "密码",
"uk": "Пароль",
"fr": "Mot de passe",
"es": "Contraseña",
"tr": "Şifre",
"kk": "Құпиясөз"
}
}
}
@@ -0,0 +1,304 @@
{
"CodeBehind": {
"MafileExporterVM": {
"Result": {
"Exported": {
"ru": "Экспортировано: {0}",
"en": "Exported: {0}",
"uk": "Експортовано: {0}",
"fr": "Exporté : {0}",
"zh": "已导出:{0}",
"es": "Exportados: {0}",
"tr": "Dışa aktarıldı: {0}",
"kk": "Экспортталды: {0}"
},
"NotFound": {
"ru": ". Не найдено: {0}",
"en": ". Not found: {0}",
"uk": ". Не знайдено: {0}",
"fr": ". Introuvable : {0}",
"zh": "。未找到:{0}",
"es": ". No encontrados: {0}",
"tr": ". Bulunamadı: {0}",
"kk": ". Табылмады: {0}"
},
"Conflict": {
"ru": ". Конфликты: {0}",
"en": ". Conflicts: {0}",
"uk": ". Конфлікти: {0}",
"fr": ". Conflits : {0}",
"zh": "。冲突:{0}",
"es": ". Conflictos: {0}",
"tr": ". Çakışmalar: {0}",
"kk": ". Қайшылықтар: {0}"
}
}
}
},
"ExportDialog": {
"ExportTitle": {
"ru": "Экспорт",
"en": "Export",
"uk": "Експорт",
"fr": "Exportation",
"zh": "导出",
"es": "Exportar",
"tr": "Dışa aktar",
"kk": "Экспорт"
},
"ExportButton": {
"ru": "Экспорт",
"en": "Export",
"uk": "Експорт",
"fr": "Exporter",
"zh": "导出",
"es": "Exportar",
"tr": "Dışa aktar",
"kk": "Экспорт"
},
"TemplateHint": {
"ru": "Шаблон",
"en": "Template",
"uk": "Шаблон",
"fr": "Modèle",
"zh": "模板",
"es": "Plantilla",
"tr": "Şablon",
"kk": "Үлгі"
},
"SelectPathHint": {
"ru": "Выберите путь",
"en": "Select path",
"uk": "Виберіть шлях",
"fr": "Sélectionner le chemin",
"zh": "选择路径",
"es": "Seleccionar ruta",
"tr": "Yol seç",
"kk": "Жолды таңдаңыз"
},
"ExportSettingsHeader": {
"ru": "Настройки экспорта",
"en": "Export settings",
"uk": "Налаштування експорту",
"fr": "Paramètres dexportation",
"zh": "导出设置",
"es": "Configuración de exportación",
"tr": "Dışa aktarma ayarları",
"kk": "Экспорт параметрлері"
},
"ExportSettingsCommon": {
"ru": "Основные:",
"en": "General:",
"uk": "Основні:",
"fr": "Général :",
"zh": "常规:",
"es": "General:",
"tr": "Genel:",
"kk": "Негізгі:"
},
"ExportSettingsNebula": {
"ru": "Nebula:",
"en": "Nebula:",
"uk": "Nebula:",
"fr": "Nebula :",
"zh": "Nebula",
"es": "Nebula:",
"tr": "Nebula:",
"kk": "Nebula:"
},
"ExportOptions": {
"UseLoginAsMafileName": {
"ru": "Использовать логин как имя mafile",
"en": "Use login as mafile name",
"uk": "Використовувати логін як ім’я mafile",
"fr": "Utiliser le login comme nom de mafile",
"zh": "使用登录名作为 mafile 名称",
"es": "Usar login como nombre del mafile",
"tr": "Giriş adını mafile adı olarak kullan",
"kk": "Логинді mafile атауы ретінде қолдану"
},
"IncludeSharedSecret": {
"ru": "Включать shared secret",
"en": "Include shared secret",
"uk": "Включати shared secret",
"fr": "Inclure le secret partagé",
"zh": "包含 shared secret",
"es": "Incluir shared secret",
"tr": "Shared secret dahil et",
"kk": "Shared secret қосу"
},
"IncludeIdentitySecret": {
"ru": "Включать identity secret",
"en": "Include identity secret",
"uk": "Включати identity secret",
"fr": "Inclure le secret didentité",
"zh": "包含 identity secret",
"es": "Incluir identity secret",
"tr": "Identity secret dahil et",
"kk": "Identity secret қосу"
},
"IncludeRCode": {
"ru": "Включать RCode",
"en": "Include RCode",
"uk": "Включати RCode",
"fr": "Inclure RCode",
"zh": "包含 RCode",
"es": "Incluir RCode",
"tr": "RCode dahil et",
"kk": "RCode қосу"
},
"IncludeSessionData": {
"ru": "Включать данные сессии",
"en": "Include session data",
"uk": "Включати дані сесії",
"fr": "Inclure les données de session",
"zh": "包含会话数据",
"es": "Incluir datos de sesión",
"tr": "Oturum verilerini dahil et",
"kk": "Сессия деректерін қосу"
},
"IncludeOtherInfo": {
"ru": "Включать прочую информацию",
"en": "Include other info",
"uk": "Включати іншу інформацію",
"fr": "Inclure dautres informations",
"zh": "包含其他信息",
"es": "Incluir otra información",
"tr": "Diğer bilgileri dahil et",
"kk": "Басқа ақпаратты қосу"
},
"NebulaProxy": {
"ru": "Прокси",
"en": "Proxy",
"uk": "Проксі",
"fr": "Proxy",
"zh": "代理",
"es": "Proxy",
"tr": "Proxy",
"kk": "Прокси"
},
"NebulaPassword": {
"ru": "Пароль",
"en": "Password",
"uk": "Пароль",
"fr": "Mot de passe",
"zh": "密码",
"es": "Contraseña",
"tr": "Şifre",
"kk": "Құпиясөз"
},
"NebulaGroup": {
"ru": "Группа",
"en": "Group",
"uk": "Група",
"fr": "Groupe",
"zh": "组",
"es": "Grupo",
"tr": "Grup",
"kk": "Топ"
}
},
"Tooltips": {
"UseLoginAsMafileName": {
"ru": "Использовать логин аккаунта в качестве имени mafile.",
"en": "Use the account login as the mafile name.",
"uk": "Використовувати логін акаунта як ім’я mafile.",
"fr": "Utiliser le login du compte comme nom du mafile.",
"zh": "使用账户登录名作为 mafile 的名称。",
"es": "Usar el login de la cuenta como nombre del mafile.",
"tr": "Hesap giriş adını mafile adı olarak kullan.",
"kk": "Аккаунт логинін mafile атауы ретінде қолдану."
},
"IncludeSharedSecret": {
"ru": "Позволяет генерировать коды подтверждения и входить в аккаунт при наличии пароля или активной сессии.",
"en": "Allows generating confirmation codes and logging into the account if a password or active session is available.",
"uk": "Дозволяє генерувати коди підтвердження та входити в акаунт за наявності пароля або активної сесії.",
"fr": "Permet de générer des codes de confirmation et de se connecter au compte si un mot de passe ou une session active est disponible.",
"zh": "允许生成确认代码,并在有密码或活动会话的情况下登录账户。",
"es": "Permite generar códigos de confirmación e iniciar sesión si hay contraseña o una sesión activa.",
"tr": "Parola veya aktif bir oturum varsa onay kodları üretmeye ve hesaba giriş yapmaya izin verir.",
"kk": "Құпиясөз немесе белсенді сессия болса, растау кодтарын жасауға және аккаунтқа кіруге мүмкіндік береді."
},
"IncludeIdentitySecret": {
"ru": "Включает identity_secret и device_id. Необходимы для отправки подтверждений и дают доступ к трейдам и торговой площадке.",
"en": "Includes identity_secret and device_id. Required for confirmations and provides access to trades and the market.",
"uk": "Включає identity_secret і device_id. Потрібні для надсилання підтверджень і надають доступ до трейдів та торгового майданчика.",
"fr": "Inclut identity_secret et device_id. Nécessaires pour les confirmations et donnent accès aux échanges et au marché.",
"zh": "包含 identity_secret 和 device_id。用于发送确认,并可访问交易和市场。",
"es": "Incluye identity_secret y device_id. Necesarios para confirmaciones y acceso a intercambios y mercado.",
"tr": "identity_secret ve device_id içerir. Onaylar için gereklidir ve takaslara ile pazara erişim sağlar.",
"kk": "identity_secret және device_id қосады. Растаулар үшін қажет және трейдтер мен нарыққа қолжетімділік береді."
},
"IncludeRCode": {
"ru": "Код восстановления. Позволяет отвязать Steam Guard от аккаунта в случае потери доступа.",
"en": "Recovery code. Allows removing Steam Guard from the account if access is lost.",
"uk": "Код відновлення. Дозволяє відв’язати Steam Guard від акаунта у разі втрати доступу.",
"fr": "Code de récupération. Permet de supprimer Steam Guard du compte en cas de perte daccès.",
"zh": "恢复代码。在失去访问权限时可将 Steam Guard 与账户解绑。",
"es": "Código de recuperación. Permite eliminar Steam Guard si se pierde el acceso.",
"tr": "Kurtarma kodu. Erişim kaybedilirse Steam Guard’ı hesaptan kaldırmayı sağlar.",
"kk": "Қалпына келтіру коды. Қолжетімділік жоғалған жағдайда Steam Guard-ты аккаунттан алып тастауға мүмкіндік береді."
},
"IncludeSessionData": {
"ru": "Включает данные текущей сессии. Если сессия активна и не истекла, позволяет получить доступ к аккаунту без ввода пароля с помощью mafile.",
"en": "Includes current session data. If the session is active and valid, allows accessing the account without entering a password using the mafile.",
"uk": "Включає дані поточної сесії. Якщо сесія активна й не прострочена, дозволяє отримати доступ до акаунта без введення пароля за допомогою mafile.",
"fr": "Inclut les données de la session actuelle. Si la session est active et valide, permet daccéder au compte sans saisir de mot de passe via le mafile.",
"zh": "包含当前会话数据。如果会话处于活动状态且未过期,可通过 mafile 在无需输入密码的情况下访问账户。",
"es": "Incluye datos de la sesión actual. Si la sesión está activa, permite acceder a la cuenta sin introducir contraseña.",
"tr": "Mevcut oturum verilerini içerir. Oturum aktifse mafile ile parola girmeden erişim sağlar.",
"kk": "Ағымдағы сессия деректерін қосады. Егер сессия белсенді болса, mafile арқылы құпиясөзсіз кіруге мүмкіндік береді."
},
"IncludeOtherInfo": {
"ru": "Включает дополнительные необязательные поля, которые в данный момент не используются Steam, но могут применяться в будущем и содержать чувствительную информацию.",
"en": "Includes additional optional fields not currently used by Steam, but potentially usable in the future and may contain sensitive information.",
"uk": "Включає додаткові необов’язкові поля, які наразі не використовуються Steam, але можуть бути задіяні в майбутньому та містити чутливу інформацію.",
"fr": "Inclut des champs supplémentaires optionnels actuellement non utilisés par Steam, mais susceptibles d’être exploités à lavenir et de contenir des informations sensibles.",
"zh": "包含目前未被 Steam 使用的可选附加字段,这些字段将来可能会被使用,并可能包含敏感信息。",
"es": "Incluye campos opcionales adicionales que Steam no usa actualmente pero podrían usarse en el futuro.",
"tr": "Steam tarafından şu anda kullanılmayan ancak gelecekte kullanılabilecek ek alanları içerir.",
"kk": "Қазіргі уақытта Steam қолданбайтын, бірақ болашақта қолданылуы мүмкін қосымша өрістерді қосады."
},
"NebulaProxy": {
"ru": "Включить Nebula-совместимые данные прокси.",
"en": "Include Nebula-compatible proxy data.",
"uk": "Увімкнути Nebula-сумісні дані проксі.",
"fr": "Inclure les données de proxy compatibles avec Nebula.",
"zh": "包含与 Nebula 兼容的代理数据。",
"es": "Incluir datos de proxy compatibles con Nebula.",
"tr": "Nebula uyumlu proxy verilerini dahil et.",
"kk": "Nebula үйлесімді прокси деректерін қосу."
},
"NebulaPassword": {
"ru": "Включить Nebula-совместимые данные пароля.",
"en": "Include Nebula-compatible password data.",
"uk": "Увімкнути Nebula-сумісні дані пароля.",
"fr": "Inclure les données de mot de passe compatibles avec Nebula.",
"zh": "包含与 Nebula 兼容的密码数据。",
"es": "Incluir datos de contraseña compatibles con Nebula.",
"tr": "Nebula uyumlu parola verilerini dahil et.",
"kk": "Nebula үйлесімді құпиясөз деректерін қосу."
},
"NebulaGroup": {
"ru": "Включить Nebula-совместимые данные группы.",
"en": "Include Nebula-compatible group data.",
"uk": "Увімкнути Nebula-сумісні дані групи.",
"fr": "Inclure les données de groupe compatibles avec Nebula.",
"zh": "包含与 Nebula 兼容的组数据。",
"es": "Incluir datos de grupo compatibles con Nebula.",
"tr": "Nebula uyumlu grup verilerini dahil et.",
"kk": "Nebula үйлесімді топ деректерін қосу."
}
},
"ExportAccountsPlaceholder": {
"ru": "Введите логины аккаунтов или SteamID (по одному на строку) для экспорта в выбранную директорию.",
"en": "Enter account logins or SteamIDs (one per line) to export to the selected directory.",
"uk": "Введіть логіни акаунтів або SteamID (по одному на рядок) для експорту у вибрану директорію.",
"fr": "Entrez les identifiants de compte ou les SteamID (un par ligne) pour exporter vers le répertoire sélectionné.",
"zh": "输入要导出到所选目录的账户登录名或 SteamID(每行一个)。",
"es": "Introduce los logins de las cuentas o SteamID (uno por línea) para exportarlos al directorio seleccionado.",
"tr": "Seçilen dizine dışa aktarmak için hesap girişlerini veya SteamIDleri (her satıra bir tane) girin.",
"kk": "Таңдалған каталогқа экспорттау үшін аккаунт логиндерін немесе SteamID (әр жолға біреуден) енгізіңіз."
}
}
}
@@ -0,0 +1,308 @@
{
"CodeBehind": {
"LinkVM": {
"EnterLoginAndPassword": {
"ru": "Введите логин и пароль",
"en": "Enter login and password",
"zh": "请输入用户名和密码",
"uk": "Введіть логін і пароль",
"fr": "Entrez le login et le mot de passe",
"es": "Introduce el usuario y la contraseña",
"tr": "Giriş adı ve şifre girin",
"kk": "Логин мен құпиясөзді енгізіңіз"
},
"CantLogin": {
"ru": "Не удалось залогиниться: ",
"en": "Can't login: ",
"zh": "无法登录:",
"uk": "Не вдалося залогінитися: ",
"fr": "Impossible de se connecter: ",
"es": "No se pudo iniciar sesión: ",
"tr": "Giriş yapılamadı: ",
"kk": "Кіру мүмкін болмады: "
},
"UnsupportedGuardType": {
"ru": "Steam Guard уже активирован. Был запрошен код с мобильного устройства",
"en": "Steam Guard already activated. Mobile device code was requested",
"zh": "令牌已激活。已从移动设备请求验证码",
"uk": "Steam Guard вже активовано. Був запрошений код з мобільного пристрою",
"fr": "Steam Guard déjà activé. Code de l'appareil mobile demandé",
"es": "Steam Guard ya está activado. Se solicitó un código del dispositivo móvil",
"tr": "Steam Guard zaten etkin. Mobil cihaz kodu istendi",
"kk": "Steam Guard бұрыннан белсенді. Мобильді құрылғы коды сұралды"
},
"MafileLinked": {
"ru": "RCode: {0}\r\nИмя файла: {1}.mafile",
"en": "RCode: {0}\r\nFile name: {1}.mafile",
"zh": "响应代码: {0}\r\n文件名: {1}.mafile",
"uk": "RCode: {0}\r\nІм'я файлу: {1}.mafile",
"fr": "RCode: {0}\r\nNom du fichier: {1}.mafile",
"es": "RCode: {0}\r\nNombre del archivo: {1}.mafile",
"tr": "RCode: {0}\r\nDosya adı: {1}.mafile",
"kk": "RCode: {0}\r\nФайл атауы: {1}.mafile"
},
"ErrorWithCode": {
"ru": "Ошибка с кодом: ",
"en": "Error with code: ",
"zh": "错误代码:",
"uk": "Помилка з кодом: ",
"fr": "Erreur avec le code: ",
"es": "Error con código: ",
"tr": "Kodlu hata: ",
"kk": "Кодпен қате: "
},
"UnknownError": {
"ru": "Неизвестная ошибка: ",
"en": "Unknown error: ",
"zh": "未知错误:",
"uk": "Невідома помилка: ",
"fr": "Erreur inconnue: ",
"es": "Error desconocido: ",
"tr": "Bilinmeyen hata: ",
"kk": "Белгісіз қате: "
},
"EnterEmailCode": {
"ru": "Введите код, отправленный на вашу почту",
"en": "Enter the code sent to your email",
"zh": "请输入发送到您邮箱的验证码",
"uk": "Введіть код, надісланий на вашу пошту",
"fr": "Entrez le code envoyé à votre email",
"es": "Introduce el código enviado a tu correo",
"tr": "E-postanıza gönderilen kodu girin",
"kk": "Поштаңызға жіберілген кодты енгізіңіз"
},
"ClickOnEmailLink": {
"ru": "На почту было отправлено письмо, откройте ссылку из письма, а затем нажмите — 'Продолжить'",
"en": "An email has been sent. Open the link from the email, then click 'Proceed'",
"zh": "电子邮件已发送。请打开邮件中的链接,然后点击——“继续”",
"uk": "На пошту надіслано лист. Відкрийте посилання з листа, а потім натисніть — 'Продовжити'",
"fr": "Un email a été envoyé. Ouvrez le lien de l'email, puis cliquez sur 'Continuer'",
"es": "Se envió un correo. Abre el enlace del correo y luego haz clic en 'Continuar'",
"tr": "Bir e-posta gönderildi. E-postadaki bağlantıyı açın ve ardından 'Devam et' düğmesine basın",
"kk": "Электрондық хат жіберілді. Хаттағы сілтемені ашып, кейін 'Жалғастыру' түймесін басыңыз"
},
"ClickOnEmailLinkRetry": {
"ru": "Не удалось подтвердить переход по ссылке. Убедитесь, что вы открыли ссылку из письма, затем нажмите — 'Продолжить'",
"en": "We couldnt verify that you clicked the link. Make sure you opened the link from the email, then click 'Proceed'",
"zh": "无法确认通过链接的跳转。请确保您是从邮件中打开的链接,然后点击——“继续”",
"uk": "Не вдалося підтвердити перехід за посиланням. Переконайтесь, що ви відкрили посилання з листа, а потім натисніть — 'Продовжити'",
"fr": "Nous n'avons pas pu vérifier que vous avez cliqué sur le lien. Assurez-vous d'avoir ouvert le lien de l'email, puis cliquez sur 'Continuer'",
"es": "No pudimos verificar que abriste el enlace. Asegúrate de abrirlo desde el correo y luego haz clic en 'Continuar'",
"tr": "Bağlantıya tıkladığınızı doğrulayamadık. E-postadaki bağlantıyı açtığınızdan emin olun ve ardından 'Devam et' düğmesine basın",
"kk": "Сілтемеге өткеніңізді тексере алмадық. Хаттағы сілтемені ашқаныңызға көз жеткізіп, кейін 'Жалғастыру' түймесін басыңыз"
},
"PhoneHint": {
"ru": "На телефон {0} была отправлена СМС",
"en": "SMS was sent to phone {0}",
"zh": "短信已发送到手机 {0}",
"uk": "На телефон {0} було відправлено СМС",
"fr": "SMS envoyé au téléphone {0}",
"es": "Se envió un SMS al teléfono {0}",
"tr": "{0} numaralı telefona SMS gönderildi",
"kk": "{0} телефонына SMS жіберілді"
},
"EnterPhoneNumber": {
"ru": "Введите номер в международном формате, только цифры (без '+', пробелов и скобок), или оставьте поле пустым, чтобы привязать без номера",
"en": "Enter number in international format, digits only (no '+', spaces or brackets), or leave the field empty to link without a number",
"zh": "请输入国际格式的号码,仅数字(不含空格和括号),或留空以绑定无号码",
"uk": "Введіть номер у міжнародному форматі, лише цифри (без '+', пробілів і дужок), або залиште поле порожнім, щоб прив’язати без номера",
"fr": "Entrez un numéro au format international, uniquement des chiffres (sans '+', espaces ou parenthèses), ou laissez le champ vide pour lier sans numéro",
"es": "Introduce el número en formato internacional, solo dígitos (sin '+', espacios ni paréntesis), o deja el campo vacío para vincular sin número",
"tr": "Numarayı uluslararası formatta girin, yalnızca rakamlar ( '+', boşluk veya parantez yok ) veya numarasız bağlamak için alanı boş bırakın",
"kk": "Нөмірді халықаралық форматта енгізіңіз, тек сандар ('+', бос орын және жақша жоқ) немесе нөмірсіз байланыстыру үшін өрісті бос қалдырыңыз"
}
}
},
"LinkerDialog": {
"Title": {
"en": "Linker",
"ru": "Привязка",
"zh": "绑定",
"uk": "Прив'язка",
"fr": "Liaison",
"es": "Vinculación",
"tr": "Bağlayıcı",
"kk": "Байланыстыру"
},
"GotErrorHyperlinkText": {
"en": "(getting error?)",
"ru": "(возникает ошибка?)",
"zh": "(出现错误?)",
"uk": "(виникає помилка?)",
"fr": "(erreur ?)",
"es": "(¿ocurre un error?)",
"tr": "(hata mı alıyorsunuz?)",
"kk": "(қате шығып жатыр ма?)"
},
"Proxy": {
"en": "Proxy",
"ru": "Прокси",
"zh": "代理",
"uk": "Проксі",
"fr": "Proxy",
"es": "Proxy",
"tr": "Proxy",
"kk": "Прокси"
},
"Authorization": {
"en": "Authorization",
"ru": "Вход в аккаунт",
"zh": "账户登录",
"uk": "Вхід в акаунт",
"fr": "Connexion au compte",
"es": "Inicio de sesión",
"tr": "Hesaba giriş",
"kk": "Аккаунтқа кіру"
},
"EmailCode": {
"en": "Email code",
"ru": "Код из письма",
"zh": "来自邮件的代码",
"uk": "Код з листа",
"fr": "Code email",
"es": "Código del correo",
"tr": "E-posta kodu",
"kk": "Email коды"
},
"PhoneNumber": {
"en": "Phone number",
"ru": "Номер телефона",
"zh": "电话号码",
"uk": "Номер телефону",
"fr": "Numéro de téléphone",
"es": "Número de teléfono",
"tr": "Telefon numarası",
"kk": "Телефон нөмірі"
},
"EmailLink": {
"en": "Email link",
"ru": "Ссылка из email",
"zh": "电子邮件中的链接",
"uk": "Посилання з email",
"fr": "Lien email",
"es": "Enlace del correo",
"tr": "E-posta bağlantısı",
"kk": "Email сілтемесі"
},
"SmsOrCode": {
"en": "SMS or code",
"ru": "СМС или код",
"zh": "短信验证码",
"uk": "СМС або код",
"fr": "SMS ou code",
"es": "SMS o código",
"tr": "SMS veya kod",
"kk": "SMS немесе код"
},
"Completed": {
"en": "Completed",
"ru": "Завершено",
"zh": "已完成",
"uk": "Завершено",
"fr": "Terminé",
"es": "Completado",
"tr": "Tamamlandı",
"kk": "Аяқталды"
},
"Message": {
"en": "Message:",
"ru": "Сообщение:",
"zh": "消息:",
"uk": "Повідомлення:",
"fr": "Message:",
"es": "Mensaje:",
"tr": "Mesaj:",
"kk": "Хабар:"
},
"ProceedButton": {
"en": "Proceed",
"ru": "Продолжить",
"zh": "继续",
"uk": "Продовжити",
"fr": "Continuer",
"es": "Continuar",
"tr": "Devam et",
"kk": "Жалғастыру"
},
"CancelButton": {
"en": "Cancel",
"ru": "Отмена",
"zh": "取消",
"uk": "Відміна",
"fr": "Annuler",
"es": "Cancelar",
"tr": "İptal",
"kk": "Бас тарту"
},
"MafileLinked": {
"en": "Mafile successfully linked",
"ru": "Мафайл успешно привязан",
"zh": "文件已成功绑定",
"uk": "Мафайл успішно прив'язано",
"fr": "Mafile lié avec succès",
"es": "Mafile vinculado correctamente",
"tr": "Mafile başarıyla bağlandı",
"kk": "Mafile сәтті байланыстырылды"
},
"FinishButton": {
"en": "Finish",
"ru": "Завершить",
"zh": "完成",
"uk": "Завершити",
"fr": "Terminer",
"es": "Finalizar",
"tr": "Bitir",
"kk": "Аяқтау"
},
"CopyRCodeButton": {
"en": "Copy RCode",
"ru": "Скопировать RCode",
"zh": "复制响应代码",
"uk": "Скопіювати RCode",
"fr": "Copier RCode",
"es": "Copiar RCode",
"tr": "RCode kopyala",
"kk": "RCode көшіру"
},
"Login": {
"en": "Login",
"ru": "Логин",
"zh": "登录",
"uk": "Логін",
"fr": "Identifiant",
"es": "Usuario",
"tr": "Giriş",
"kk": "Логин"
},
"Password": {
"en": "Password",
"ru": "Пароль",
"zh": "密码",
"uk": "Пароль",
"fr": "Mot de passe",
"es": "Contraseña",
"tr": "Şifre",
"kk": "Құпиясөз"
},
"Code": {
"en": "Code",
"ru": "Код",
"zh": "验证码",
"uk": "Код",
"fr": "Code",
"es": "Código",
"tr": "Kod",
"kk": "Код"
},
"SmsCode": {
"en": "SMS code",
"ru": "СМС код",
"zh": "短信验证码",
"uk": "СМС код",
"fr": "Code SMS",
"es": "Código SMS",
"tr": "SMS kodu",
"kk": "SMS коды"
}
}
}
@@ -0,0 +1,39 @@
{
"WaitLoginDialog": {
"Text": {
"en": "Login in progress. Please wait",
"ru": "Производится логин. Ожидайте",
"zh": "正在登录。请稍候...",
"uk": "Виконується вхід. Зачекайте",
"fr": "Connexion en cours. Veuillez patienter",
"es": "Inicio de sesión en curso. Por favor espere",
"tr": "Giriş yapılıyor. Lütfen bekleyin",
"kk": "Кіру орындалуда. Күте тұрыңыз"
}
},
"ConfirmCancelDialog": {
"Title": {
"ru": "Подтвердите действие",
"en": "Confirm action",
"zh": "确认操作",
"uk": "Підтвердіть дію",
"fr": "Confirmer l'action",
"es": "Confirmar acción",
"tr": "İşlemi onayla",
"kk": "Әрекетті растаңыз"
}
},
"TextFieldDialog": {
"Title": {
"ru": "Введите значение",
"en": "Enter value",
"zh": "请输入数值",
"uk": "Введіть значення",
"fr": "Entrer la valeur",
"es": "Introducir valor",
"tr": "Değer girin",
"kk": "Мән енгізіңіз"
}
}
}
@@ -0,0 +1,84 @@
{
"LoginAgainDialog": {
"Title": {
"en": "Login",
"ru": "Вход",
"zh": "登录",
"uk": "Вхід",
"fr": "Connexion",
"es": "Inicio de sesión",
"tr": "Giriş",
"kk": "Кіру"
},
"LoginFor": {
"en": "Login for",
"ru": "Войти в",
"zh": "登录为",
"uk": "Увійти в",
"fr": "Se connecter à",
"es": "Iniciar sesión en",
"tr": "Şunun için giriş",
"kk": "Мынаға кіру"
},
"LoginButton": {
"en": "Login",
"ru": "Войти",
"zh": "登录",
"uk": "Увійти",
"fr": "Se connecter",
"es": "Iniciar sesión",
"tr": "Giriş yap",
"kk": "Кіру"
},
"CancelButton": {
"en": "Cancel",
"ru": "Отмена",
"zh": "取消",
"uk": "Відміна",
"fr": "Annuler",
"es": "Cancelar",
"tr": "İptal",
"kk": "Болдырмау"
},
"PasswordBox": {
"en": "Password",
"ru": "Пароль",
"zh": "密码",
"uk": "Пароль",
"fr": "Mot de passe",
"es": "Contraseña",
"tr": "Parola",
"kk": "Құпиясөз"
},
"SaveEncryptedPassword": {
"en": "Save encrypted password to mafile",
"ru": "Сохранить зашифрованный пароль в мафайл",
"zh": "将加密密码保存到 mafile",
"uk": "Зберегти зашифрований пароль в мафайлі",
"fr": "Enregistrer le mot de passe chiffré dans le mafile",
"es": "Guardar contraseña cifrada en el mafile",
"tr": "Şifrelenmiş parolayı mafile içine kaydet",
"kk": "Шифрланған құпиясөзді mafile ішіне сақтау"
},
"UseMafileProxy": {
"en": "Use mafile proxy",
"ru": "Использовать прокси из мафайла",
"zh": "使用 mafile 代理",
"uk": "Використовувати проксі з мафайла",
"fr": "Utiliser le proxy du mafile",
"es": "Usar proxy del mafile",
"tr": "Mafile proxy kullan",
"kk": "Mafile проксиді қолдану"
},
"ProxyToolTip": {
"en": "Press 'DEL' to remove",
"ru": "Нажмите 'DEL' для удаления",
"zh": "按 'DEL' 键删除",
"uk": "Натисніть 'DEL' для видалення",
"fr": "Appuyez sur 'DEL' pour supprimer",
"es": "Pulsa 'DEL' para eliminar",
"tr": "Silmek için 'DEL' tuşuna bas",
"kk": "Жою үшін 'DEL' пернесін басыңыз"
}
}
}
@@ -0,0 +1,98 @@
{
"CodeBehind": {
"MafileMoverVM": {
"EnterGuardCode": {
"en": "Enter Steam Guard code or confirm login and click 'Proceed'",
"ru": "Введите код Steam Guard либо подтвердите вход и нажмите \"Продолжить\"",
"zh": "请输入令牌代码或确认登录,然后点击“继续”",
"uk": "Введіть код Steam Guard або підтвердіть вхід і натисніть 'Продовжити'",
"fr": "Entrez le code Steam Guard ou confirmez la connexion et cliquez sur 'Continuer'",
"es": "Introduce el código de Steam Guard o confirma el inicio de sesión y haz clic en 'Continuar'",
"tr": "Steam Guard kodunu girin veya girişi onaylayıp 'Devam' butonuna tıklayın",
"kk": "Steam Guard кодын енгізіңіз немесе кіруді растаңыз да 'Жалғастыру' түймесін басыңыз"
},
"EnterGuardCodeRetrying": {
"en": "Failed to confirm login. Enter Steam Guard code or try again",
"ru": "Не удалось подтвердить вход. Введите код Steam Guard или попробуйте еще раз",
"zh": "无法登录。请输入Steam令牌代码或重试",
"uk": "Не вдалося підтвердити вхід. Введіть код Steam Guard або спробуйте ще раз",
"fr": "Impossible de confirmer la connexion. Entrez le code Steam Guard ou réessayez",
"es": "No se pudo confirmar el inicio de sesión. Introduce el código de Steam Guard o inténtalo de nuevo",
"tr": "Giriş doğrulanamadı. Steam Guard kodunu girin veya tekrar deneyin",
"kk": "Кіруді растау мүмкін болмады. Steam Guard кодын енгізіңіз немесе қайтадан көріңіз"
},
"SmsCodeStepTip": {
"en": "Enter the code from the SMS sent to your phone number",
"ru": "Введите код из СМС, отправленный на ваш номер телефона",
"zh": "请输入发送到您手机号码的短信验证码",
"uk": "Введіть код з СМС, надісланий на ваш номер телефону",
"fr": "Entrez le code du SMS envoyé à votre numéro de téléphone",
"es": "Introduce el código del SMS enviado a tu número de teléfono",
"tr": "Telefon numaranıza gönderilen SMS kodunu girin",
"kk": "Телефон нөміріңізге жіберілген SMS кодын енгізіңіз"
},
"DoneStepTip": {
"ru": "RCode: {0}\r\nИмя файла: {1}.mafile",
"en": "RCode: {0}\r\nFile name: {1}.mafile",
"zh": "响应代码: {0}\r\n文件名: {1}.mafile",
"uk": "RCode: {0}\r\nІм'я файлу: {1}.mafile",
"fr": "RCode: {0}\r\nNom du fichier: {1}.mafile",
"es": "RCode: {0}\r\nNombre del archivo: {1}.mafile",
"tr": "RCode: {0}\r\nDosya adı: {1}.mafile",
"kk": "RCode: {0}\r\nФайл атауы: {1}.mafile"
},
"GuardIsNotActive": {
"ru": "Steam Guard установлен на данном аккаунте. Чтобы привязать mafile к аккаунту, воспользуйтесь окном \"Привязать\"",
"en": "Steam Guard is set on this account. To link mafile to the account, use the 'Link' window",
"zh": "此账户已启用令牌。要将 mafile 绑定到此账户,请使用“绑定”窗口。",
"uk": "Steam Guard встановлено на цьому акаунті. Щоб прив'язати mafile до акаунту, скористайтеся вікном 'Прив'язати'",
"fr": "Steam Guard est configuré sur ce compte. Pour lier mafile au compte, utilisez la fenêtre 'Lien'",
"es": "Steam Guard está activado en esta cuenta. Para vincular el mafile a la cuenta, usa la ventana 'Vincular'",
"tr": "Steam Guard bu hesapta zaten etkin. Mafile'ı hesaba bağlamak için 'Bağla' penceresini kullanın",
"kk": "Бұл аккаунтта Steam Guard орнатылған. Mafile-ды аккаунтқа байланыстыру үшін 'Байланыстыру' терезесін пайдаланыңыз"
},
"SeemsNoPhoneNumber": {
"en": "The account has no phone number linked, returned Fail code (2)",
"ru": "На аккаунте не привязан номер телефона, был возвращен код Fail (2)",
"zh": "账户未绑定电话号码,返回代码失败 (2)",
"uk": "На акаунті не прив'язано номер телефону, повернуто код Fail (2)",
"fr": "Le compte n'a pas de numéro de téléphone lié, code Fail (2) retourné",
"es": "La cuenta no tiene número de teléfono vinculado, se devolvió el código Fail (2)",
"tr": "Hesaba bağlı telefon numarası yok, Fail kodu (2) döndü",
"kk": "Аккаунтқа телефон нөмірі байланыстырылмаған, Fail коды (2) қайтарылды"
},
"SmsCodeFailed": {
"en": "SMS code failed, try again",
"ru": "Ошибка SMS-кода, попробуйте еще раз",
"zh": "短信验证码错误,请再试一次",
"uk": "Помилка SMS-коду, спробуйте ще раз",
"fr": "Code SMS échoué, veuillez réessayer",
"es": "El código SMS falló, inténtalo de nuevo",
"tr": "SMS kodu başarısız, tekrar deneyin",
"kk": "SMS коды қате, қайтадан көріңіз"
}
}
},
"MafileMoverView": {
"Title": {
"en": "Move Steam Guard",
"ru": "Перенести Steam Guard",
"zh": "转移Steam手机令牌",
"uk": "Перенести Steam Guard",
"fr": "Déplacer Steam Guard",
"es": "Mover Steam Guard",
"tr": "Steam Guard'ı taşı",
"kk": "Steam Guard-ты көшіру"
},
"Done": {
"en": "Steam Guard moved",
"ru": "Steam Guard перенесен",
"zh": "Steam手机令牌已迁移",
"uk": "Steam Guard перенесено",
"fr": "Steam Guard déplacé",
"es": "Steam Guard movido",
"tr": "Steam Guard taşındı",
"kk": "Steam Guard көшірілді"
}
}
}
@@ -0,0 +1,98 @@
{
"CodeBehind": {
"ProxyManagerVM": {
"WrongFormatSomeIdsMissing": {
"ru": "Неверный формат. Некоторые прокси не имеют ID",
"en": "Wrong format. Some proxies have no ID",
"zh": "格式不正确。某些代理没有ID",
"uk": "Невірний формат. Деякі проксі не мають ID",
"fr": "Format incorrect. Certains proxies n'ont pas d'ID",
"es": "Formato incorrecto. Algunos proxies no tienen ID",
"tr": "Yanlış format. Bazı proxylerin ID'si yok",
"kk": "Қате формат. Кейбір проксилерде ID жоқ"
},
"DuplicateId": {
"ru": "Прокси с ID {0} добавлен несколько раз",
"en": "Proxy with ID {0} added multiple times",
"zh": "具有 ID {0} 的代理已被多次添加",
"uk": "Проксі з ID {0} додано декілька разів",
"fr": "Proxy avec ID {0} ajouté plusieurs fois",
"es": "El proxy con ID {0} fue añadido varias veces",
"tr": "ID {0} olan proxy birden fazla kez eklendi",
"kk": "{0} ID бар прокси бірнеше рет қосылды"
},
"WrongFormatOnLine": {
"ru": "Прокси на строке {0} имеет неверный формат.",
"en": "Proxy on line {0} has wrong format.",
"zh": "第 {0} 行的代理格式不正确。",
"uk": "Проксі на строці {0} має невірний формат.",
"fr": "Proxy sur la ligne {0} a un format incorrect.",
"es": "El proxy en la línea {0} tiene un formato incorrecto",
"tr": "{0}. satırdaki proxy yanlış formatta",
"kk": "{0} жолындағы прокси қате форматта"
},
"WrongFormat": {
"ru": "Прокси имеет неверный формат.",
"en": "Proxy has wrong format.",
"zh": "代理格式不正确。",
"uk": "Проксі має невірний формат.",
"fr": "Format incorrect du proxy.",
"es": "El proxy tiene un formato incorrecto",
"tr": "Proxy yanlış formatta",
"kk": "Прокси қате форматта"
}
}
},
"ProxyManagerDialog": {
"Title": {
"en": "Proxy manager",
"ru": "Менеджер прокси",
"zh": "代理管理器",
"uk": "Менеджер проксі",
"fr": "Gestionnaire de proxy",
"es": "Administrador de proxy",
"tr": "Proxy yöneticisi",
"kk": "Прокси менеджері"
},
"DefaultProxy": {
"en": "Default proxy:",
"ru": "Прокси по умолчанию:",
"zh": "默认代理:",
"uk": "Проксі за замовчуванням:",
"fr": "Proxy par défaut:",
"es": "Proxy predeterminado:",
"tr": "Varsayılan proxy:",
"kk": "Әдепкі прокси:"
},
"UseRandomDefaultProxy": {
"en": "Use random default proxy",
"ru": "Cлучайный прокси по умолчанию",
"zh": "默认随机代理",
"uk": "Випадковий проксі за замовчуванням",
"fr": "Proxy aléatoire par défaut",
"es": "Usar proxy predeterminado aleatorio",
"tr": "Rastgele varsayılan proxy kullan",
"kk": "Кездейсоқ әдепкі проксиді қолдану"
},
"DisplayProxyProtocol": {
"en": "Display protocol",
"ru": "Отображать протокол",
"zh": "显示协议",
"uk": "Відображати протокол",
"fr": "Afficher le protocole",
"es": "Mostrar protocolo",
"tr": "Protokolü göster",
"kk": "Протоколды көрсету"
},
"DisplayProxyCredentials": {
"en": "Display credentials",
"ru": "Отображать логин и пароль",
"zh": "显示凭证",
"uk": "Відображати логін та пароль",
"fr": "Afficher le login et le mot de passe",
"es": "Mostrar credenciales",
"tr": "Kimlik bilgilerini göster",
"kk": "Тіркелгі деректерін көрсету"
}
}
}
@@ -0,0 +1,64 @@
{
"SdaPasswordDialog": {
"Title": {
"en": "SDA encryption password",
"ru": "Пароль шифрования SDA",
"zh": "SDA 加密密码",
"uk": "Пароль шифрування SDA",
"fr": "Mot de passe de chiffrement SDA",
"es": "Contraseña de cifrado SDA",
"tr": "SDA şifreleme parolası",
"kk": "SDA шифрлау құпиясөзі"
},
"Message": {
"en": "This mafile is encrypted with Steam Desktop Authenticator. Enter your SDA encryption password to import it.",
"ru": "Этот mafile зашифрован Steam Desktop Authenticator. Введите пароль шифрования SDA для импорта.",
"zh": "此 mafile 由 Steam Desktop Authenticator 加密。请输入 SDA 加密密码以导入。",
"uk": "Цей mafile зашифровано Steam Desktop Authenticator. Введіть пароль шифрування SDA для імпорту.",
"fr": "Ce mafile est chiffré avec Steam Desktop Authenticator. Entrez votre mot de passe SDA pour l'importer.",
"es": "Este mafile está cifrado con Steam Desktop Authenticator. Introduce tu contraseña SDA para importarlo.",
"tr": "Bu mafile Steam Desktop Authenticator ile şifrelenmiştir. İçe aktarmak için SDA şifreleme parolanızı girin.",
"kk": "Бұл mafile Steam Desktop Authenticator арқылы шифрланған. Импорттау үшін SDA шифрлау құпиясөзін енгізіңіз."
},
"PasswordHint": {
"en": "SDA encryption password",
"ru": "Пароль шифрования SDA",
"zh": "SDA 加密密码",
"uk": "Пароль шифрування SDA",
"fr": "Mot de passe de chiffrement SDA",
"es": "Contraseña de cifrado SDA",
"tr": "SDA şifreleme parolası",
"kk": "SDA шифрлау құпиясөзі"
},
"WrongPassword": {
"en": "Wrong SDA password. Please try again.",
"ru": "Неверный пароль SDA. Попробуйте снова.",
"zh": "SDA 密码错误。请重试。",
"uk": "Невірний пароль SDA. Спробуйте ще раз.",
"fr": "Mauvais mot de passe SDA. Veuillez réessayer.",
"es": "Contraseña SDA incorrecta. Inténtalo de nuevo.",
"tr": "Yanlış SDA parolası. Lütfen tekrar deneyin.",
"kk": "SDA құпиясөзі қате. Қайтадан көріңіз."
},
"ManifestMissing": {
"en": "This mafile looks like it was encrypted by SDA, but manifest.json was not found. Please select your SDA manifest.json to continue.",
"ru": "Похоже, этот mafile зашифрован SDA, но manifest.json не найден. Выберите manifest.json от SDA, чтобы продолжить.",
"zh": "此 mafile 看起来由 SDA 加密,但未找到 manifest.json。请选择 SDA 的 manifest.json 以继续。",
"uk": "Схоже, цей mafile зашифровано SDA, але manifest.json не знайдено. Виберіть manifest.json від SDA, щоб продовжити.",
"fr": "Ce mafile semble chiffré par SDA, mais manifest.json est introuvable. Sélectionnez manifest.json de SDA pour continuer.",
"es": "Este mafile parece estar cifrado por SDA, pero no se encontró manifest.json. Selecciona tu manifest.json de SDA para continuar.",
"tr": "Bu mafile SDA tarafından şifrelenmiş gibi görünüyor ancak manifest.json bulunamadı. Devam etmek için SDA manifest.json dosyanızı seçin.",
"kk": "Бұл mafile SDA арқылы шифрланған сияқты, бірақ manifest.json табылмады. Жалғастыру үшін SDA manifest.json файлын таңдаңыз."
},
"ManifestEntryNotFound": {
"en": "Selected manifest.json does not contain an entry for this mafile.",
"ru": "Выбранный manifest.json не содержит запись для этого mafile.",
"zh": "所选的 manifest.json 不包含此 mafile 的条目。",
"uk": "Вибраний manifest.json не містить запису для цього mafile.",
"fr": "Le manifest.json sélectionné ne contient pas d'entrée pour ce mafile.",
"es": "El manifest.json seleccionado no contiene una entrada para este mafile.",
"tr": "Seçilen manifest.json bu mafile için bir kayıt içermiyor.",
"kk": "Таңдалған manifest.json бұл mafile үшін жазба қамтымайды."
}
}
}
@@ -0,0 +1,88 @@
{
"CodeBehind": {
"SetAccountPasswordsVM": {
"Success": {
"en": "Passwords successfully set for {0} mafiles",
"ru": "Пароли успешно установлены для {0} мафайлов",
"zh": "已成功为 {0} 个文件设置密码",
"uk": "Паролі успішно встановлені для {0} мафайлів",
"fr": "Les mots de passe ont été définis avec succès pour {0} mafiles",
"es": "Contraseñas establecidas correctamente para {0} mafiles",
"tr": "{0} mafile için parolalar başarıyla ayarlandı",
"kk": "{0} mafile үшін құпиясөздер сәтті орнатылды"
},
"PartialSuccess": {
"en": "Success: {0}, Not found: {1}, Errors: {2}",
"ru": "Успешно: {0}, Не найдено: {1}, Ошибки: {2}",
"zh": "成功:{0},未找到:{1},错误:{2}",
"uk": "Успішно: {0}, Не знайдено: {1}, Помилки: {2}",
"fr": "Succès: {0}, Non trouvé: {1}, Erreurs: {2}",
"es": "Éxito: {0}, No encontrado: {1}, Errores: {2}",
"tr": "Başarılı: {0}, Bulunamadı: {1}, Hatalar: {2}",
"kk": "Сәтті: {0}, Табылмады: {1}, Қателер: {2}"
}
}
},
"SetAccountPasswordsView": {
"Title": {
"en": "Set passwords",
"ru": "Назначить пароли",
"zh": "设置密码",
"uk": "Призначити паролі",
"fr": "Définir les mots de passe",
"es": "Establecer contraseñas",
"tr": "Parolaları ayarla",
"kk": "Құпиясөздерді орнату"
},
"EncryptionPassword": {
"en": "Encryption password:",
"ru": "Пароль шифрования:",
"zh": "加密密码:",
"uk": "Пароль шифрування:",
"fr": "Mot de passe de chiffrement:",
"es": "Contraseña de cifrado:",
"tr": "Şifreleme parolası:",
"kk": "Шифрлау құпиясөзі:"
},
"EnterPassword": {
"en": "Enter password",
"ru": "Введите пароль",
"zh": "输入密码",
"uk": "Введіть пароль",
"fr": "Entrer le mot de passe",
"es": "Introducir contraseña",
"tr": "Parolayı gir",
"kk": "Құпиясөзді енгізіңіз"
},
"Status": {
"en": "Status:",
"ru": "Статус:",
"zh": "状态:",
"uk": "Статус:",
"fr": "Statut:",
"es": "Estado:",
"tr": "Durum:",
"kk": "Күйі:"
},
"EncryptionHint": {
"en": "All passwords in mafiles will be encrypted using the encryption password.",
"ru": "Все пароли в мафайлах будут зашифрованы с помощью пароля шифрования.",
"zh": "mafiles 中的所有密码都将使用加密密码加密。",
"uk": "Всі паролі в мафайлах будуть зашифровані за допомогою пароля шифрування.",
"fr": "Tous les mots de passe dans les mafiles seront chiffrés à l'aide du mot de passe de chiffrement.",
"es": "Todas las contraseñas en los mafiles serán cifradas usando la contraseña de cifrado.",
"tr": "Mafile içindeki tüm parolalar şifreleme parolası kullanılarak şifrelenecektir.",
"kk": "Mafile ішіндегі барлық құпиясөздер шифрлау құпиясөзі арқылы шифрланады."
},
"InputFormat": {
"en": "Supported formats:\r\n\r\nlogin:password\r\nsteamid:password",
"ru": "Поддерживаемые форматы:\r\n\r\nlogin:password\r\nsteamid:password",
"zh": "支持的格式:\r\n\r\n登录名:密码\r\nSteamID:密码",
"uk": "Підтримувані формати:\r\n\r\nlogin:password\r\nsteamid:password",
"fr": "Formats pris en charge:\r\n\r\nlogin:password\r\nsteamid:password",
"es": "Formatos compatibles:\r\n\r\nlogin:password\r\nsteamid:password",
"tr": "Desteklenen formatlar:\r\n\r\nlogin:password\r\nsteamid:password",
"kk": "Қолдау көрсетілетін форматтар:\r\n\r\nlogin:password\r\nsteamid:password"
}
}
}
@@ -0,0 +1,336 @@
{
"CodeBehind": {
"SettingsVM": {
"MafileRenaming": {
"Error": {
"en": "Error while renaming mafiles. It was saved in log",
"ru": "Ошибка при переименовании мафайлов. Она была сохранена в log",
"zh": "重命名 mafiles 时出错。已记录在日志中",
"uk": "Помилка при перейменуванні мафайлів. Вона була збережена в log",
"fr": "Erreur lors du renommage des mafiles. Détails enregistrés dans le fichier log",
"es": "Error al renombrar los mafiles. Se guardó en el log",
"tr": "Mafile yeniden adlandırılırken hata oluştu. Log dosyasına kaydedildi",
"kk": "Mafile атауын өзгерту кезінде қате болды. Ол log файлына сақталды"
},
"AllRenamed": {
"ru": "Все мафайлы успешно переименованы ({0}).\r\nБыла создана резервная копия: {1}",
"en": "All mafiles successfully renamed ({0}).\r\nBackup was created: {1}",
"zh": "所有文件已成功重命名({0})。\r\n备份已创建:{1}",
"uk": "Всі мафайли успішно перейменовані ({0}).\r\nБуло створено резервну копію: {1}",
"fr": "Tous les mafiles ont été renommés avec succès ({0}).\r\nUn backup a été créé: {1}",
"es": "Todos los mafiles se renombraron correctamente ({0}).\r\nSe creó una copia de seguridad: {1}",
"tr": "Tüm mafile'lar başarıyla yeniden adlandırıldı ({0}).\r\nYedek oluşturuldu: {1}",
"kk": "Барлық mafile сәтті қайта аталды ({0}).\r\nРезервтік көшірме жасалды: {1}"
},
"PartialSuccess": {
"en": "Total mafiles: {0}\r\nRenamed: {1}\r\nConflicts: {2}\r\nErrors: {3}\r\n\r\nBackup of mafiles saved in file: {4}",
"ru": "Всего мафайлов: {0}\r\nПереименовано: {1}\r\nКонфликты: {2}\r\nОшибок: {3}\r\n\r\nРезервная копия мафайлов сохранена в файле: {4}",
"zh": "总文件数: {0}\r\n重命名: {1}\r\n冲突: {2}\r\n错误: {3}\r\n\r\n文件备份已保存至: {4}",
"uk": "Всього мафайлів: {0}\r\nПерейменовано: {1}\r\nКонфлікти: {2}\r\nПомилок: {3}\r\n\r\nРезервна копія мафайлів збережена у файлі: {4}",
"fr": "Total des mafiles: {0}\r\nRenommés: {1}\r\nConflits: {2}\r\nErreurs: {3}\r\n\r\nBackup des mafiles enregistré dans le fichier: {4}",
"es": "Total de mafiles: {0}\r\nRenombrados: {1}\r\nConflictos: {2}\r\nErrores: {3}\r\n\r\nCopia de seguridad guardada en el archivo: {4}",
"tr": "Toplam mafile: {0}\r\nYeniden adlandırıldı: {1}\r\nÇakışmalar: {2}\r\nHatalar: {3}\r\n\r\nMafile yedeği dosyaya kaydedildi: {4}",
"kk": "Барлық mafile саны: {0}\r\nҚайта аталғаны: {1}\r\nҚайшылықтар: {2}\r\nҚателер: {3}\r\n\r\nMafile резервтік көшірмесі файлға сақталды: {4}"
}
}
}
},
"SettingsDialog": {
"Title": {
"en": "Settings",
"ru": "Настройки",
"zh": "设置",
"uk": "Налаштування",
"fr": "Paramètres",
"es": "Configuración",
"tr": "Ayarlar",
"kk": "Баптаулар"
},
"MainSettings": {
"en": "Main",
"ru": "Основные",
"zh": "主要",
"uk": "Основні",
"fr": "Général",
"es": "Principal",
"tr": "Genel",
"kk": "Негізгі"
},
"ThemeSettings": {
"en": "Theme",
"ru": "Тема",
"zh": "主题",
"uk": "Тема",
"fr": "Thème",
"es": "Tema",
"tr": "Tema",
"kk": "Тақырып"
},
"Theme": {
"BackgroundBlur": {
"en": "Background Blur",
"ru": "Размытие фона",
"zh": "背景模糊",
"uk": "Розмиття фону",
"fr": "Flou de l'arrière-plan",
"es": "Desenfoque de fondo",
"tr": "Arka plan bulanıklığı",
"kk": "Артқы фон бұлыңғырлығы"
},
"BackgroundOpacity": {
"en": "Background Opacity",
"ru": "Непрозрачность фона",
"zh": "背景不透明度",
"uk": "Непрозорість фону",
"fr": "Opacité de l'arrière-plan",
"es": "Opacidad del fondo",
"tr": "Arka plan opaklığı",
"kk": "Артқы фон мөлдірлігі"
},
"Gamma": {
"en": "Gamma",
"ru": "Гамма",
"zh": "伽马",
"uk": "Гама",
"fr": "Gamma",
"es": "Gamma",
"tr": "Gamma",
"kk": "Гамма"
},
"LeftOpacity": {
"en": "Left Opacity",
"ru": "Непрозрачность слева",
"zh": "左透明度",
"uk": "Непрозорість зліва",
"fr": "Opacité à gauche",
"es": "Opacidad izquierda",
"tr": "Sol opaklık",
"kk": "Сол жақ мөлдірлігі"
},
"RightOpacity": {
"en": "Right Opacity",
"ru": "Непрозрачность справа",
"zh": "右透明度",
"uk": "Непрозорість справа",
"fr": "Opacité à droite",
"es": "Opacidad derecha",
"tr": "Sağ opaklık",
"kk": "Оң жақ мөлдірлігі"
},
"CurrentTheme": {
"en": "Current Theme",
"ru": "Текущая тема",
"zh": "当前主题",
"uk": "Поточна тема",
"fr": "Thème actuel",
"es": "Tema actual",
"tr": "Geçerli tema",
"kk": "Ағымдағы тақырып"
},
"DialogBlur": {
"en": "Blur on Dialog",
"ru": "Размытие при открытии диалог. окна",
"zh": "打开对话窗口时的模糊效果",
"uk": "Розмиття при відкритті діалог. вікна",
"fr": "Flou derrière la boîte de dialogue",
"es": "Desenfoque en diálogo",
"tr": "Diyalog açıldığında bulanıklık",
"kk": "Диалог ашылғанда бұлыңғырлау"
},
"RippleDisabled": {
"en": "Disable ripple animations",
"ru": "Отключить анимации «ripple»",
"zh": "禁用波纹动画",
"uk": "Вимкнути анімації «ripple»",
"fr": "Désactiver les animations ripple",
"es": "Desactivar animaciones ripple",
"tr": "Ripple animasyonlarını kapat",
"kk": "Ripple анимацияларын өшіру"
},
"Reset": {
"en": "Reset",
"ru": "Сбросить",
"zh": "重置",
"uk": "Скинути",
"fr": "Réinitialiser",
"es": "Restablecer",
"tr": "Sıfırla",
"kk": "Қалпына келтіру"
}
},
"BackgroundHint": {
"en": "Background",
"ru": "Фон",
"zh": "背景",
"uk": "Фон",
"fr": "Arrière-plan",
"es": "Fondo",
"tr": "Arka plan",
"kk": "Фон"
},
"BackgroundMode": {
"Default": {
"en": "Default",
"ru": "По умолчанию",
"zh": "默认",
"uk": "За замовчуванням",
"fr": "Par défaut",
"es": "Predeterminado",
"tr": "Varsayılan",
"kk": "Әдепкі"
},
"Custom": {
"en": "Custom",
"ru": "Свой",
"zh": "自定义",
"uk": "Свій",
"fr": "Personnalisé",
"es": "Personalizado",
"tr": "Özel",
"kk": "Жеке"
},
"NoBackground": {
"en": "No background",
"ru": "Без фона",
"zh": "无背景",
"uk": "Без фону",
"fr": "Aucun fond",
"es": "Sin fondo",
"tr": "Arka plan yok",
"kk": "Фон жоқ"
}
},
"MinimizeToTray": {
"en": "Minimize to tray",
"ru": "Сворачивать в трей",
"zh": "最小化到托盘",
"uk": "Згортати в трей",
"fr": "Minimiser dans la barre des tâches",
"es": "Minimizar a la bandeja",
"tr": "Tepsiye küçült",
"kk": "Трейге кішірейту"
},
"UseIndicator": {
"en": "Use color indicator in taskbar",
"ru": "Цветной индикатор в панели задач",
"zh": "在任务栏中使用颜色指示器",
"uk": "Кольоровий індикатор в панелі завдань",
"fr": "Utiliser un indicateur de couleur dans la barre des tâches",
"es": "Usar indicador de color en la barra de tareas",
"tr": "Görev çubuğunda renk göstergesi kullan",
"kk": "Тапсырмалар жолағында түс индикаторын қолдану"
},
"UseIndicatorHint": {
"en": "Small color indicator in windows toolbar to identify program instance",
"ru": "Маленький цветной индикатор в панели задач для идентификации экземпляра программы",
"zh": "Windows 工具栏中的小颜色指示器,用于识别程序实例",
"uk": "Малий кольоровий індикатор в панелі завдань для ідентифікації екземпляра програми",
"fr": "Petit indicateur de couleur dans la barre des tâches pour identifier l'instance du programme",
"es": "Pequeño indicador de color en la barra de tareas para identificar la instancia del programa",
"tr": "Program örneğini tanımlamak için görev çubuğunda küçük renk göstergesi",
"kk": "Бағдарлама данасын анықтау үшін тапсырмалар жолағындағы шағын түс индикаторы"
},
"UseCustomColor": {
"en": "Custom window color",
"ru": "Свой цвет окна",
"zh": "自定义窗口颜色",
"uk": "Свій колір вікна",
"fr": "Couleur personnalisée de la fenêtre",
"es": "Color de ventana personalizado",
"tr": "Özel pencere rengi",
"kk": "Терезенің жеке түсі"
},
"PasswordBox": {
"CurrentCryptPassword": {
"en": "Current encryption password",
"ru": "Текущий пароль шифрования",
"zh": "当前加密密码",
"uk": "Поточний пароль шифрування",
"fr": "Mot de passe de chiffrement actuel",
"es": "Contraseña de cifrado actual",
"tr": "Geçerli şifreleme parolası",
"kk": "Ағымдағы шифрлау құпиясөзі"
},
"Hint": {
"en": "Not saved to disk",
"ru": "Не сохраняется в системе",
"zh": "未保存到磁盘",
"uk": "Не зберігається у системі",
"fr": "Non sauvegardé sur le disque",
"es": "No se guarda en el disco",
"tr": "Diske kaydedilmez",
"kk": "Дискке сақталмайды"
}
},
"LegacyMafileMode": {
"en": "Common mafiles format",
"ru": "Общепринятый формат мафайлов",
"zh": "常见的邮件文件格式",
"uk": "Загальноприйнятий формат мафайлів",
"fr": "Format de mafiles commun",
"es": "Formato común de mafiles",
"tr": "Ortak mafile formatı",
"kk": "Жалпы mafile форматы"
},
"LegacyMafileModeHint": {
"en": "Save mafiles in compatibility format with Steam Desktop Authenticator and other applications",
"ru": "Сохранять мафайлы в старом формате для совместимости со Steam Desktop Authenticator и другими приложениями",
"zh": "以与 Steam 桌面认证器及其他应用程序兼容的格式保存 mafiles",
"uk": "Зберігати мафайли у старому форматі для сумісності зі Steam Desktop Authenticator та іншими додатками",
"fr": "Enregistrer les mafiles dans un format compatible avec Steam Desktop Authenticator et d'autres applications",
"es": "Guardar mafiles en formato compatible con Steam Desktop Authenticator y otras aplicaciones",
"tr": "Mafile'ları Steam Desktop Authenticator ve diğer uygulamalarla uyumlu formatta kaydet",
"kk": "Mafile файлдарын Steam Desktop Authenticator және басқа қолданбалармен үйлесімді форматта сақтау"
},
"AllowAutoUpdate": {
"en": "Allow auto update",
"ru": "Разрешить автообновление",
"zh": "允许自动更新",
"uk": "Дозволити автооновлення",
"fr": "Autoriser la mise à jour auto",
"es": "Permitir actualización automática",
"tr": "Otomatik güncellemeye izin ver",
"kk": "Авто жаңартуға рұқсат беру"
},
"MafileNamingMode": {
"en": "Mafile naming mode",
"ru": "Режим именования мафайлов",
"zh": "Mafile 命名模式",
"uk": "Режим іменування мафайлів",
"fr": "Format du nommage des mafiles",
"es": "Modo de nombre de mafile",
"tr": "Mafile adlandırma modu",
"kk": "Mafile атау режимі"
},
"ApplyNamingMode": {
"en": "Apply and rename",
"ru": "Применить и переименовать",
"zh": "应用并重命名",
"uk": "Застосувати та перейменувати",
"fr": "Appliquer et renommer",
"es": "Aplicar y renombrar",
"tr": "Uygula ve yeniden adlandır",
"kk": "Қолдану және қайта атау"
},
"IgnorePatchTuesdayErrors": {
"en": "Ignore Patch Tuesday errors in timer (exp.)",
"ru": "Игнорировать ошибки Patch Tuesday в таймере (эксп.)",
"zh": "忽略 Patch Tuesday 中计时器的错误(实验性",
"uk": "Ігнорувати помилки Patch Tuesday у таймері (експ.)",
"fr": "Ignorer les erreurs dues à la maintenance Steam du mardi soir dans le timer (exp.)",
"es": "Ignorar errores de Patch Tuesday en el temporizador (exp.)",
"tr": "Patch Tuesday zamanlayıcı hatalarını yok say (deneysel)",
"kk": "Patch Tuesday таймер қателерін елемеу (эксп.)"
},
"IgnorePatchTuesdayErrorsHint": {
"en": "Ignore errors that occur every Tuesday (Wednesday night in GMT) when Steam doing technical works and auto-confirm timers turns off unnecessarily",
"ru": "Игнорировать ошибки, которые возникают каждый вторник (ночь среды по GMT) когда Steam проводит технические работы и автоподтверждения отключаются без надобности",
"zh": "忽略每周三(格林尼治标准时间周三夜间)发生的错误,因为 Steam 进行技术维护时自动确认功能会被无故关闭",
"uk": "Ігнорувати помилки, які виникають щосереди (ніч середи за GMT) коли Steam проводить технічні роботи і автопідтвердження вимикаються без потреби",
"fr": "Ignorer les erreurs dues à la maintenance Steam du mardi soir (Mercredi à minuit en GMT)",
"es": "Ignorar errores que ocurren cada martes (miércoles por la noche GMT) cuando Steam realiza mantenimiento técnico y los temporizadores de auto-confirmación se desactivan innecesariamente",
"tr": "Steam teknik bakım yaparken her Salı (GMT Çarşamba gecesi) oluşan ve otomatik onay zamanlayıcılarını gereksiz kapatan hataları yok say",
"kk": "Steam техникалық жұмыстар жүргізген кезде әр сейсенбіде (GMT бойынша сәрсенбі түні) пайда болатын және авторастау таймерлерін қажетсіз өшіретін қателерді елемеу"
}
}
}
@@ -0,0 +1,116 @@
{
"UpdateDialog": {
"Title": {
"en": "New version available:",
"ru": "Доступна новая версия:",
"zh": "有新版本可用:",
"uk": "Доступна нова версія:",
"fr": "Nouvelle version disponible :",
"es": "Nueva versión disponible:",
"tr": "Yeni sürüm mevcut:",
"kk": "Жаңа нұсқа қолжетімді:"
},
"Changelog": {
"en": "What's new",
"ru": "Что нового",
"zh": "更新内容",
"uk": "Що нового",
"fr": "Quoi de neuf",
"es": "Novedades",
"tr": "Yenilikler",
"kk": "Не жаңалық"
},
"NoChangelog": {
"en": "No changelog available",
"ru": "Нет информации об изменениях",
"zh": "暂无更新日志",
"uk": "Немає інформації про зміни",
"fr": "Aucun journal des modifications disponible",
"es": "No hay registro de cambios disponible",
"tr": "Değişiklik listesi mevcut değil",
"kk": "Өзгерістер тізімі жоқ"
},
"UpdateNow": {
"en": "Update now",
"ru": "Обновить сейчас",
"zh": "立即更新",
"uk": "Оновити зараз",
"fr": "Mettre à jour maintenant",
"es": "Actualizar ahora",
"tr": "Şimdi güncelle",
"kk": "Қазір жаңарту"
},
"RemindLater": {
"en": "Remind later",
"ru": "Напомнить позже",
"zh": "稍后提醒",
"uk": "Нагадати пізніше",
"fr": "Rappeler plus tard",
"es": "Recordar más tarde",
"tr": "Daha sonra hatırlat",
"kk": "Кейін еске салу"
},
"SkipVersion": {
"en": "Skip version",
"ru": "Пропустить версию",
"zh": "跳过此版本",
"uk": "Пропустити версію",
"fr": "Ignorer cette version",
"es": "Omitir versión",
"tr": "Sürümü atla",
"kk": "Бұл нұсқаны өткізіп жіберу"
},
"RemindAfter": {
"en": "Remind after:",
"ru": "Напомнить через:",
"zh": "提醒时间:",
"uk": "Нагадати через:",
"fr": "Rappeler après :",
"es": "Recordar después de:",
"tr": "Şu süreden sonra hatırlat:",
"kk": "Кейін еске салу:"
},
"RemindOptions": {
"1Hour": {
"en": "1 hour",
"ru": "1 час",
"zh": "1 小时",
"uk": "1 година",
"fr": "1 heure",
"es": "1 hora",
"tr": "1 saat",
"kk": "1 сағат"
},
"1Day": {
"en": "1 day",
"ru": "1 день",
"zh": "1 天",
"uk": "1 день",
"fr": "1 jour",
"es": "1 día",
"tr": "1 gün",
"kk": "1 күн"
},
"3Days": {
"en": "3 days",
"ru": "3 дня",
"zh": "3 天",
"uk": "3 дні",
"fr": "3 jours",
"es": "3 días",
"tr": "3 gün",
"kk": "3 күн"
},
"7Days": {
"en": "7 days",
"ru": "7 дней",
"zh": "7 天",
"uk": "7 днів",
"fr": "7 jours",
"es": "7 días",
"tr": "7 gün",
"kk": "7 күн"
}
}
}
}
+160
View File
@@ -0,0 +1,160 @@
{
"LanguageName": {
"en": "English",
"ru": "Русский",
"zh": "简体中文",
"uk": "Українська",
"fr": "Français",
"es": "Español",
"tr": "Türkçe",
"kk": "Қазақша"
},
"LanguageWord": {
"en": "Language/语言",
"ru": "Language/语言",
"zh": "Language/语言",
"uk": "Language/语言",
"fr": "Language/语言",
"es": "Language/语言",
"tr": "Language/语言",
"kk": "Language/语言"
},
"Common": {
"No": {
"en": "No",
"ru": "Нет",
"zh": "否",
"uk": "Ні",
"fr": "Non",
"es": "No",
"tr": "Hayır",
"kk": "Жоқ"
},
"Yes": {
"en": "Yes",
"ru": "Да",
"zh": "是",
"uk": "Так",
"fr": "Oui",
"es": "Sí",
"tr": "Evet",
"kk": "Иә"
},
"Error": {
"en": "Error",
"ru": "Ошибка",
"zh": "错误",
"uk": "Помилка",
"fr": "Erreur",
"es": "Error",
"tr": "Hata",
"kk": "Қате"
},
"RequestError": {
"en": "Request error",
"ru": "Ошибка запроса",
"zh": "请求错误",
"uk": "Помилка запиту",
"fr": "Erreur de requête",
"es": "Error de solicitud",
"tr": "İstek hatası",
"kk": "Сұраныс қатесі"
},
"Canceled": {
"en": "Canceled",
"ru": "Отменено",
"zh": "已取消",
"uk": "Скасовано",
"fr": "Annulé",
"es": "Cancelado",
"tr": "İptal edildi",
"kk": "Болдырылмады"
},
"Proxy": {
"en": "Proxy",
"ru": "Прокси",
"zh": "代理",
"uk": "Проксі",
"fr": "Proxy",
"es": "Proxy",
"tr": "Proxy",
"kk": "Прокси"
},
"Delete": {
"en": "Delete",
"ru": "Удалить",
"zh": "删除",
"uk": "Видалити",
"fr": "Supprimer",
"es": "Eliminar",
"tr": "Sil",
"kk": "Жою"
},
"Cancel": {
"en": "Cancel",
"ru": "Отмена",
"zh": "取消",
"uk": "Скасувати",
"fr": "Annuler",
"es": "Cancelar",
"tr": "İptal",
"kk": "Болдырмау"
},
"OK": {
"en": "OK",
"ru": "ОК",
"zh": "确定",
"uk": "ОК",
"fr": "OK",
"es": "OK",
"tr": "Tamam",
"kk": "OK"
},
"Save": {
"en": "Save",
"ru": "Сохранить",
"zh": "保存",
"uk": "Зберегти",
"fr": "Enregistrer",
"es": "Guardar",
"tr": "Kaydet",
"kk": "Сақтау"
},
"Abbreviations": {
"Time": {
"Seconds": {
"en": "sec",
"ru": "сек",
"zh": "秒",
"uk": "сек",
"fr": "sec",
"es": "seg",
"tr": "sn",
"kk": "сек"
}
},
"Count": {
"Items": {
"en": "pcs",
"ru": "шт",
"zh": "物品",
"uk": "шт",
"fr": "élém",
"es": "uds",
"tr": "adet",
"kk": "дана"
}
}
}
},
"CantAlignTimeError": {
"ru": "Не удается синхронизировать время со Steam. Возможно отсутствует подключение к интернету или Steam недоступен. Подробная ошибка сохранена в log.log",
"en": "Can't align time with Steam. Maybe no internet connection or Steam is unavailable. Detailed error saved in log.log",
"zh": "无法与 Steam 对齐时间。可能没有互联网连接或 Steam 不可用。详细错误已保存到 log.log 中",
"uk": "Не вдається синхронізувати час з Steam. Можливо відсутнє підключення до інтернету або Steam недоступний. Детальна помилка збережена в log.log",
"fr": "Impossible de synchroniser l'heure avec Steam. Peut-être qu'il n'y a pas de connexion internet ou Steam est indisponible. Détails de l'erreur enregistrés dans log.log",
"es": "No se puede sincronizar la hora con Steam. Puede que no haya conexión a Internet o que Steam no esté disponible. El error detallado se guardó en log.log",
"tr": "Steam ile zaman senkronize edilemiyor. İnternet bağlantısı olmayabilir veya Steam kullanılamıyor olabilir. Ayrıntılı hata log.log dosyasına kaydedildi",
"kk": "Уақытты Steam-мен синхрондау мүмкін емес. Интернет байланысы жоқ болуы мүмкін немесе Steam қолжетімсіз. Толық қате log.log файлына сақталды"
}
}
@@ -0,0 +1,933 @@
{
"CodeBehind": {
"MainVM": {
"SuccessfulLogin": {
"en": "Successful login",
"ru": "Успешный вход",
"zh": "登录成功",
"uk": "Успішний вхід",
"fr": "Connexion réussie",
"es": "Inicio de sesión exitoso",
"tr": "Giriş başarılı",
"kk": "Сәтті кіру"
},
"SessionRefreshed": {
"en": "Session refreshed",
"ru": "Сессия обновлена",
"zh": "会话已更新",
"uk": "Сесія оновлена",
"fr": "Session actualisée",
"es": "Sesión actualizada",
"tr": "Oturum yenilendi",
"kk": "Сессия жаңартылды"
},
"MissingRCode": {
"en": "Missing RCode",
"ru": "Отсутствует RCode",
"zh": "缺少响应代码",
"uk": "Відсутній RCode",
"fr": "RCode manquant",
"es": "Falta RCode",
"tr": "RCode eksik",
"kk": "RCode жоқ"
},
"ConfirmRemovingAuthenticator": {
"ru": "Вы точно уверены, что хотите удалить аутентификатор?\r\nПосле этого вы не сможете обмениваться, использовать торговую площадку 15 дней. Мафайл будет удалён навсегда",
"en": "Are you sure you want to remove the authenticator?\r\nAfter that, you will not be able to trade or use the marketplace for 15 days. Mafile will be deleted permanently",
"zh": "您确定要移除身份验证器吗?\r\n之后,您将在15天内无法进行交易或使用市场。Mafile 将被永久删除。",
"uk": "Ви точно впевнені, що хочете видалити автентифікатор?\r\nПісля цього ви не зможете обмінюватися, використовувати торгову площадку 15 днів. Мафайл буде видалено назавжди",
"fr": "Êtes-vous sûr de vouloir supprimer l'authenticateur?\r\nAprès cela, vous ne pourrez pas échanger ou utiliser le marché pendant 15 jours. Le mafile sera supprimé définitivement",
"es": "¿Seguro que quieres eliminar el autenticador?\r\nDespués no podrás comerciar ni usar el mercado durante 15 días. El mafile se eliminará permanentemente",
"tr": "Kimlik doğrulayıcıyı kaldırmak istediğinizden emin misiniz?\r\nBundan sonra 15 gün boyunca ticaret yapamaz veya pazarı kullanamazsınız. Mafile kalıcı olarak silinecek",
"kk": "Аутентификаторды жойғыңыз келетініне сенімдісіз бе?\r\nОсыдан кейін 15 күн бойы сауда жасай алмайсыз және нарықты пайдалана алмайсыз. Mafile біржола жойылады"
},
"AuthenticatorRemoved": {
"ru": "Аутентификатор удален",
"en": "Authenticator removed",
"zh": "身份验证器已删除",
"uk": "Аутентифікатор видалено",
"fr": "Authentificateur supprimé",
"es": "Autenticador eliminado",
"tr": "Kimlik doğrulayıcı kaldırıldı",
"kk": "Аутентификатор жойылды"
},
"AuthenticatorNotRemoved": {
"ru": "Что-то пошло не так",
"en": "Something went wrong",
"zh": "出了点问题",
"uk": "Щось пішло не так",
"fr": "Quelque chose s'est mal passé",
"es": "Algo salió mal",
"tr": "Bir şeyler ters gitti",
"kk": "Бірдеңе дұрыс болмады"
},
"ConfirmLoginSuccess": {
"ru": "Вход осуществлен:",
"en": "Login success:",
"zh": "已登录:",
"uk": "Вхід здійснено:",
"fr": "Connexion réussie:",
"es": "Inicio de sesión correcto:",
"tr": "Giriş başarılı:",
"kk": "Кіру сәтті:"
},
"ConfirmLoginFailedNoRequests": {
"ru": "Запросов на вход не обнаружено",
"en": "No login requests found",
"zh": "未检测到输入请求",
"uk": "Запитів на вхід не виявлено",
"fr": "Aucune demande de connexion trouvée",
"es": "No se encontraron solicitudes de inicio de sesión",
"tr": "Giriş isteği bulunamadı",
"kk": "Кіру сұраныстары табылмады"
},
"ConfirmLoginFailedMoreThanOneRequest": {
"ru": "Обнаружено несколько запросов на вход. В целях безопасности операция отменена",
"en": "Multiple login requests found. For security reasons, the operation is canceled",
"zh": "检测到多个输入请求。出于安全考虑,操作已取消",
"uk": "Виявлено декілька запитів на вхід. З метою безпеки операція скасована",
"fr": "Plusieurs demandes de connexion trouvées. Pour des raisons de sécurité, l'opération est annulée",
"es": "Se encontraron múltiples solicitudes de inicio de sesión. Por razones de seguridad, la operación fue cancelada",
"tr": "Birden fazla giriş isteği bulundu. Güvenlik nedeniyle işlem iptal edildi",
"kk": "Бірнеше кіру сұранысы табылды. Қауіпсіздік мақсатында операция тоқтатылды"
},
"ConfirmationError": {
"ru": "Ошибка подтверждения",
"en": "Confirmation error",
"zh": "确认错误",
"uk": "Помилка підтвердження",
"fr": "Erreur de confirmation",
"es": "Error de confirmación",
"tr": "Onay hatası",
"kk": "Растау қатесі"
},
"ConfirmMafileOverwrite": {
"ru": "Внимание, мафайл(-ы) уже присутствует в папке mafiles.\r\nПерезаписать мафайлы, которые конфликтуют?",
"en": "Attention, mafile(-s) already exists in mafiles folder.\r\nOverwrite conflicting mafiles?",
"zh": "注意,mafile 已经存在于 mafiles 文件夹中。\r\n覆盖冲突的 mafiles 吗?",
"uk": "Увага, мафайл(-и) вже присутній у папці mafiles.\r\nПерезаписати мафайли, які конфліктують?",
"fr": "Attention, mafiles déjà présents dans le dossier mafiles.\r\nRemplacer les mafiles en conflit?",
"es": "Atención, los mafiles ya existen en la carpeta mafiles.\r\n¿Sobrescribir los mafiles en conflicto?",
"tr": "Dikkat, mafile(ler) zaten mafiles klasöründe mevcut.\r\nÇakışan mafile'lar üzerine yazılsın mı?",
"kk": "Назар аударыңыз, mafile(дер) mafiles қалтасында бар.\r\nҚайшылық тудырған mafile файлдарының үстінен жазу керек пе?"
},
"MafileImportError": {
"ru": "Ошибка при импорте мафайла",
"en": "Mafile import error",
"zh": "导入文件错误",
"uk": "Помилка імпорту мафайла",
"fr": "Erreur d'importation du mafile",
"es": "Error al importar el mafile",
"tr": "Mafile içe aktarma hatası",
"kk": "Mafile импорттау қатесі"
},
"SdaManifestEntryNotFound": {
"en": "The selected manifest.json does not contain an entry for this .mafile.",
"ru": "Выбранный manifest.json не содержит запись для этого .mafile.",
"zh": "所选的 manifest.json 不包含此 .mafile 的条目。",
"uk": "Вибраний manifest.json не містить запису для цього .mafile.",
"fr": "Le manifest.json sélectionné ne contient pas d'entrée pour ce .mafile.",
"es": "El manifest.json seleccionado no contiene una entrada para este .mafile.",
"tr": "Seçilen manifest.json bu .mafile için bir kayıt içermiyor.",
"kk": "Таңдалған manifest.json бұл .mafile үшін жазба қамтымайды."
},
"SdaWrongPassword": {
"en": "Wrong SDA password. Please try again.",
"ru": "Неверный пароль SDA. Попробуйте снова.",
"zh": "SDA 密码错误。请重试。",
"uk": "Невірний пароль SDA. Спробуйте ще раз.",
"fr": "Mauvais mot de passe SDA. Veuillez réessayer.",
"es": "Contraseña SDA incorrecta. Inténtalo de nuevo.",
"tr": "Yanlış SDA parolası. Lütfen tekrar deneyin.",
"kk": "SDA құпиясөзі қате. Қайтадан көріңіз."
},
"MissingSessionInMafile": {
"ru": ". У него отсутствует сессия. Добавьте этот файл отдельно от остальных",
"en": ". It has no session. Add this file separately from the others",
"zh": ". 他没有会话。请将此文件与其他文件分开添加",
"uk": ". В нього відсутня сесія. Додайте цей файл окремо від інших",
"fr": ". Pas de session dans le mafile. Ajoutez ce fichier séparément des autres",
"es": ". No tiene sesión. Añada este archivo por separado de los demás",
"tr": ". Oturumu yok. Bu dosyayı diğerlerinden ayrı ekleyin",
"kk": ". Бұл файлда сессия жоқ. Оны басқа файлдардан бөлек қосыңыз"
},
"Import": {
"ru": "Импорт",
"en": "Import",
"zh": "导入",
"uk": "Імпорт",
"fr": "Importer",
"es": "Importar",
"tr": "İçe aktar",
"kk": "Импорт"
},
"ImportAdded": {
"ru": "добавлено:",
"en": "added:",
"zh": "已添加:",
"uk": "додано:",
"fr": "ajouté:",
"es": "añadido:",
"tr": "eklendi:",
"kk": "қосылды:"
},
"ImportSkipped": {
"ru": "пропущено:",
"en": "skipped:",
"zh": "跳过:",
"uk": "пропущено:",
"fr": "passé:",
"es": "omitido:",
"tr": "atlandı:",
"kk": "өткізілді:"
},
"ImportErrors": {
"ru": "ошибки:",
"en": "errors:",
"zh": "错误:",
"uk": "помилки:",
"fr": "erreurs:",
"es": "errores:",
"tr": "hatalar:",
"kk": "қателер:"
},
"RemoveMafileConfirmation": {
"ru": "Удалить mafile?\r\nМафайл будет перемещен в папку 'mafiles_removed'\r\nЭто действие НЕ удаляет Steam Guard с аккаунта",
"en": "Remove mafile?\r\nMafile will be moved to 'mafiles_removed' directory\r\nThis action will NOT remove the Steam Guard from the account",
"zh": "是否删除mafile\r\nMafile将被移动到“mafiles_removed”目录\r\n此操作不会从账户中移除令牌",
"uk": "Видалити mafile?\r\nМафайл буде переміщено у каталог 'mafiles_removed'\r\nЦя дія НЕ видаляє автентифікатор з облікового запису",
"fr": "Supprimer le mafile?\r\nLe mafile sera déplacé dans le dossier 'mafiles_removed'\r\nCette action NE SUPPRIME PAS le Steam Guard du compte",
"es": "¿Eliminar mafile?\r\nEl mafile se moverá a la carpeta 'mafiles_removed'\r\nEsta acción NO elimina Steam Guard de la cuenta",
"tr": "Mafile silinsin mi?\r\nMafile 'mafiles_removed' klasörüne taşınacak\r\nBu işlem Steam Guard'ı hesaptan kaldırmaz",
"kk": "Mafile жойылсын ба?\r\nMafile 'mafiles_removed' қалтасына көшіріледі\r\nБұл әрекет Steam Guard-ты аккаунттан алып тастамайды"
},
"CantRemoveAlreadyExist": {
"ru": "Не удалось переместить mafile, возможно в папке уже существует мафайл с таким именем.",
"en": "Can't move mafile, maybe mafile with same name already exists in mafiles_removed folder.",
"zh": "无法移动 mafile,可能 mafiles_removed 文件夹中已存在同名的 mafile。",
"uk": "Не вдалося перемістити mafile, можливо в папці вже існує мафайл з таким іменем.",
"fr": "Impossible de déplacer le mafile, probablement déjà existant dans le dossier mafiles_removed.",
"es": "No se pudo mover el mafile, quizá ya existe un mafile con el mismo nombre en mafiles_removed.",
"tr": "Mafile taşınamadı, aynı isimde bir mafile zaten mafiles_removed klasöründe olabilir.",
"kk": "Mafile жылжыту мүмкін болмады, mafiles_removed қалтасында дәл осындай атаумен файл болуы мүмкін."
},
"CantRemoveMafile": {
"ru": "Не удалось удалить (переместить) мафайл:",
"en": "Can't remove mafile:",
"zh": "无法删除(移动)我的文件:",
"uk": "Не вдалося видалити (перемістити) мафайл:",
"fr": "Impossible de supprimer (déplacer) le mafile:",
"es": "No se pudo eliminar (mover) el mafile:",
"tr": "Mafile silinemedi (taşınamadı):",
"kk": "Mafile жою (көшіру) мүмкін болмады:"
},
"TimerTooFast": {
"ru": "Слишком быстрый таймер.",
"en": "Too fast timer.",
"zh": "计时器太快。",
"uk": "Занадто швидкий таймер.",
"fr": "Timer trop rapide.",
"es": "Temporizador demasiado rápido.",
"tr": "Zamanlayıcı çok hızlı.",
"kk": "Таймер тым жылдам."
},
"TimerChanged": {
"en": "Timer changed",
"ru": "Таймер изменен",
"zh": "计时器已更改",
"uk": "Таймер змінено",
"fr": "Timer modifié",
"es": "Temporizador cambiado",
"tr": "Zamanlayıcı değiştirildi",
"kk": "Таймер өзгертілді"
},
"CantRetrieveSteamIDToUpdate": {
"ru": "Не удалось получить SteamID из мафайла и сохранить изменения. Необходимо сделать релогин. Отменено",
"en": "Can't retrieve SteamID from mafile to save changes. Need to relogin. Canceled",
"zh": "无法从配置文件获取 SteamID 并保存更改。需要重新登录。已取消",
"uk": "Не вдалося отримати SteamID з мафайла та зберегти зміни. Потрібно зробити релогін. Скасовано",
"fr": "Impossible de récupérer le SteamID du mafile pour sauvegarder les modifications. Reconnexion nécessaire. Annulé",
"es": "No se pudo obtener el SteamID del mafile para guardar cambios. Se requiere volver a iniciar sesión. Cancelado",
"tr": "Değişiklikleri kaydetmek için mafile'dan SteamID alınamadı. Yeniden giriş yapılmalı. İptal edildi",
"kk": "Өзгерістерді сақтау үшін mafile-дан SteamID алу мүмкін болмады. Қайта кіру қажет. Болдырылды"
},
"LoginCopied": {
"en": "Login copied",
"ru": "Логин скопирован",
"zh": "登录已复制",
"uk": "Логін скопійовано",
"fr": "Login copié",
"es": "Login copiado",
"tr": "Giriş kopyalandı",
"kk": "Логин көшірілді"
},
"SteamIdCopied": {
"en": "SteamID copied",
"ru": "SteamID скопирован",
"zh": "SteamID 已复制",
"uk": "SteamID скопійовано",
"fr": "SteamID copié",
"es": "SteamID copiado",
"tr": "SteamID kopyalandı",
"kk": "SteamID көшірілді"
},
"MafileCopied": {
"en": "Mafile copied",
"ru": "Мафайл скопирован",
"zh": "文件已复制",
"uk": "Мафайл скопійовано",
"fr": "Mafile copié",
"es": "Mafile copiado",
"tr": "Mafile kopyalandı",
"kk": "Mafile көшірілді"
},
"MafileNotCopied": {
"en": "Mafile not copied",
"ru": "Мафайл не скопирован",
"zh": "文件未被复制",
"uk": "Мафайл не скопійовано",
"fr": "Mafile non copié",
"es": "Mafile no copiado",
"tr": "Mafile kopyalanamadı",
"kk": "Mafile көшірілмеді"
},
"PasswordCopied": {
"en": "Password copied",
"ru": "Пароль скопирован",
"zh": "密码已复制",
"uk": "Пароль скопійовано",
"fr": "Mot de passe copié",
"es": "Contraseña copiada",
"tr": "Parola kopyalandı",
"kk": "Құпиясөз көшірілді"
},
"CantDecryptPassword": {
"en": "Can't decrypt password. Maybe password from this mafile was encrypted with another encryption password",
"ru": "Не удалось расшифровать пароль. Возможно пароль из этого мафайла был зашифрован другим паролем шифрования",
"zh": "无法解密密码。可能此文件中的密码是用其他加密密码加密的。",
"uk": "Не вдалося розшифрувати пароль. Можливо пароль з цього мафайла був зашифрований іншим паролем шифрування",
"fr": "Impossible de déchiffrer le mot de passe. Le mot de passe de chiffrement est peut-être différent",
"es": "No se pudo descifrar la contraseña. Quizás fue cifrada con otra contraseña de cifrado",
"tr": "Parola çözülemedi. Bu mafile'daki parola farklı bir şifreleme parolasıyla şifrelenmiş olabilir",
"kk": "Құпиясөзді шифрдан шығару мүмкін болмады. Бұл mafile-дегі құпиясөз басқа шифрлау құпиясөзімен шифрланған болуы мүмкін"
},
"CreateGroupTitle": {
"en": "New group",
"ru": "Новая группа",
"zh": "新群组",
"uk": "Нова група",
"fr": "Nouveau groupe",
"es": "Nuevo grupo",
"tr": "Yeni grup",
"kk": "Жаңа топ"
},
"CreateGroupInput": {
"en": "Enter group name",
"ru": "Введите имя группы",
"zh": "输入群组名称",
"uk": "Введіть назву групи",
"fr": "Entrer le nom du groupe",
"es": "Ingrese el nombre del grupo",
"tr": "Grup adını girin",
"kk": "Топ атауын енгізіңіз"
},
"CreateGroupSuccess": {
"en": "Group created",
"ru": "Группа создана",
"zh": "群组已创建",
"uk": "Групу створено",
"fr": "Groupe créé",
"es": "Grupo creado",
"tr": "Grup oluşturuldu",
"kk": "Топ құрылды"
}
}
},
"MainWindow": {
"Global": {
"DragNDropHint": {
"en": "Release to import mafiles",
"ru": "Отпустите для импорта мафайлов",
"zh": "允许导入文件",
"uk": "Відпустіть для імпорту мафайлів",
"fr": "Lâchez pour importer les mafiles",
"es": "Suelta para importar mafiles",
"tr": "Mafile içe aktarmak için bırakın",
"kk": "Mafile импорттау үшін жіберіңіз"
},
"LoadingHint": {
"en": "Loading...",
"ru": "Загрузка...",
"zh": "加载中...",
"uk": "Завантаження...",
"fr": "Chargement...",
"es": "Cargando...",
"tr": "Yükleniyor...",
"kk": "Жүктелуде..."
}
},
"Menu": {
"File": {
"Caption": {
"en": "Menu",
"ru": "Меню",
"zh": "菜单",
"uk": "Меню",
"fr": "Menu",
"es": "Menú",
"tr": "Menü",
"kk": "Мәзір"
},
"Import": {
"en": "Import",
"ru": "Импорт",
"zh": "导入",
"uk": "Імпорт",
"fr": "Importer",
"es": "Importar",
"tr": "İçe aktar",
"kk": "Импорттау"
},
"Remove": {
"en": "Remove",
"ru": "Удалить",
"zh": "删除",
"uk": "Видалити",
"fr": "Supprimer",
"es": "Eliminar",
"tr": "Kaldır",
"kk": "Жою"
},
"OpenFolder": {
"en": "Open folder",
"ru": "Открыть папку",
"zh": "打开文件夹",
"uk": "Відкрити папку",
"fr": "Ouvrir le dossier",
"es": "Abrir carpeta",
"tr": "Klasörü aç",
"kk": "Қалтаны ашу"
},
"Settings": {
"en": "Settings",
"ru": "Настройки",
"zh": "设置",
"uk": "Налаштування",
"fr": "Paramètres",
"es": "Configuración",
"tr": "Ayarlar",
"kk": "Баптаулар"
},
"ProxyManager": {
"en": "Proxy manager",
"ru": "Менеджер прокси",
"zh": "代理管理器",
"uk": "Менеджер проксі",
"fr": "Gestionnaire de proxy",
"es": "Administrador de proxy",
"tr": "Proxy yöneticisi",
"kk": "Прокси менеджері"
},
"Other": {
"Title": {
"en": "Other",
"ru": "Прочее",
"zh": "其他",
"uk": "Інше",
"fr": "Divers",
"es": "Otros",
"tr": "Diğer",
"kk": "Басқа"
},
"SetPasswords": {
"en": "Set passwords",
"ru": "Назначить пароли",
"zh": "设置密码",
"uk": "Призначити паролі",
"fr": "Définir les mots de passe",
"es": "Establecer contraseñas",
"tr": "Parolaları ayarla",
"kk": "Құпиясөздерді орнату"
},
"OpenExport": {
"ru": "Экспорт",
"en": "Export",
"uk": "Експорт",
"fr": "Exporter",
"zh": "导出",
"es": "Exportar",
"tr": "Dışa aktar",
"kk": "Экспорт"
}
}
},
"Account": {
"Caption": {
"en": "Account",
"ru": "Аккаунт",
"zh": "账户",
"uk": "Акаунт",
"fr": "Compte",
"es": "Cuenta",
"tr": "Hesap",
"kk": "Тіркелгі"
},
"Link": {
"en": "Link",
"ru": "Привязать",
"zh": "绑定",
"uk": "Прив'язати",
"fr": "Lier",
"es": "Vincular",
"tr": "Bağla",
"kk": "Байлау"
},
"MoveSteamGuard": {
"en": "Move Steam Guard",
"ru": "Перенести Steam Guard",
"zh": "令牌",
"uk": "Перенести Steam Guard",
"fr": "Déplacer Steam Guard",
"es": "Mover Steam Guard",
"tr": "Steam Guard'ı taşı",
"kk": "Steam Guard-ты көшіру"
},
"Unlink": {
"en": "Unlink",
"ru": "Отвязать",
"zh": "解绑",
"uk": "Відв'язати",
"fr": "Délier",
"es": "Desvincular",
"tr": "Bağlantıyı kaldır",
"kk": "Байланысты үзу"
},
"RefreshSession": {
"en": "Refresh session",
"ru": "Обновить сессию",
"zh": "刷新",
"uk": "Оновити сесію",
"fr": "Actualiser la session",
"es": "Actualizar sesión",
"tr": "Oturumu yenile",
"kk": "Сессияны жаңарту"
},
"LoginAgain": {
"en": "Login",
"ru": "Войти",
"zh": "登录",
"uk": "Увійти",
"fr": "Se connecter",
"es": "Iniciar sesión",
"tr": "Giriş yap",
"kk": "Кіру"
}
}
},
"AppBar": {
"GroupsHint": {
"en": "Groups",
"ru": "Группы",
"zh": "群组",
"uk": "Групи",
"fr": "Groupes",
"es": "Grupos",
"tr": "Gruplar",
"kk": "Топтар"
},
"GroupToolTip": {
"ru": "Введите новую группу и нажмите Enter. Управление группой - ПКМ на аккаунте",
"en": "Enter new group and press Enter. Group management - RMB on account",
"zh": "输入新组并按回车键。管理组 - 在账户上右键点击",
"uk": "Введіть нову групу і натисніть Enter. Управління групою - ПКМ на акаунті",
"fr": "Entrez un nouveau groupe et appuyez sur Entrée. Gestion du groupe - clic droit sur le compte",
"es": "Introduce un nuevo grupo y pulsa Enter. Gestión del grupo: clic derecho en la cuenta",
"tr": "Yeni bir grup girin ve Enter'a basın. Grup yönetimi - hesap üzerinde sağ tık",
"kk": "Жаңа топ енгізіп, Enter басыңыз. Топты басқару — аккаунтта оң жақ батырма"
},
"Proxy": {
"ProxyHint": {
"en": "Proxy",
"ru": "Прокси",
"zh": "代理",
"uk": "Проксі",
"fr": "Proxy",
"es": "Proxy",
"tr": "Proxy",
"kk": "Прокси"
},
"ProxyOpenManagerHint": {
"en": "Open proxy manager",
"ru": "Открыть менеджер прокси",
"zh": "打开代理管理器",
"uk": "Відкрити менеджер проксі",
"fr": "Ouvrir le gestionnaire de proxy",
"es": "Abrir administrador de proxy",
"tr": "Proxy yöneticisini aç",
"kk": "Прокси менеджерін ашу"
},
"ProxyManipulateToolTip": {
"en": "Right-click to open menu. DEL to remove",
"ru": "Правый клик для открытия меню. DEL для удаления",
"zh": "右键点击以打开菜单。按 DEL 删除",
"uk": "Правий клік для відкриття меню. DEL для видалення",
"fr": "Clic droit pour ouvrir le menu. Touche Suppr pour supprimer",
"es": "Clic derecho para abrir el menú. DEL para eliminar",
"tr": "Menüyü açmak için sağ tık. Silmek için DEL",
"kk": "Мәзірді ашу үшін оң жақ батырма. Жою үшін DEL"
},
"ProxyAlert": {
"DefaultInUse": {
"en": "Default proxy is in use",
"ru": "Используется прокси по умолчанию",
"zh": "使用默认代理",
"uk": "Використовується проксі за замовчуванням",
"fr": "Proxy par défaut en cours d'utilisation",
"es": "Proxy predeterminado en uso",
"tr": "Varsayılan proxy kullanılıyor",
"kk": "Әдепкі прокси қолданылуда"
},
"MafileProxyInUse": {
"en": "Mafile proxy is in use",
"ru": "Используется прокси из мафайла",
"zh": "使用来自 mafile 的代理",
"uk": "Використовується проксі з мафайла",
"fr": "Proxy du mafile en cours d'utilisation",
"es": "Proxy del mafile en uso",
"tr": "Mafile proxy kullanılıyor",
"kk": "Mafile прокси қолданылуда"
}
}
},
"TradeTimerHint": {
"en": "Auto-confirm trades. RMC for mass control",
"ru": "Автоподтверждение трейдов. ПКМ для массового управления",
"zh": "自动确认交易。右键进行批量管理",
"uk": "Автопідтвердження трейдів. ПКМ для масового управління",
"fr": "Confirmation auto des échanges. Clic droit pour le contrôle en masse",
"es": "Confirmación automática de intercambios. Clic derecho para control masivo",
"tr": "Takasları otomatik onayla. Toplu kontrol için sağ tık",
"kk": "Саудаларды авторастау. Жаппай басқару үшін оң жақ батырма"
},
"MarketTimerHint": {
"en": "Auto-confirm market listings. RMC for mass control",
"ru": "Автоподтверждение лотов на маркете. ПКМ для массового управления",
"zh": "市场上拍品的自动确认。右键进行批量管理",
"uk": "Автопідтвердження лотів на маркеті. ПКМ для масового управління",
"fr": "Confirmation auto des offres du marché. Clic droit pour le contrôle en masse",
"es": "Confirmación automática de anuncios del mercado. Clic derecho para control masivo",
"tr": "Pazar ilanlarını otomatik onayla. Toplu kontrol için sağ tık",
"kk": "Маркет лоттарын авторастау. Жаппай басқару үшін оң жақ батырма"
},
"TimersContextMenu": {
"SwitchMAACGroup": {
"en": "Switch in group",
"ru": "Переключить в группе",
"zh": "切换到组",
"uk": "Перемкнути в групі",
"fr": "Basculer dans le groupe",
"es": "Cambiar en el grupo",
"tr": "Grup içinde değiştir",
"kk": "Топ ішінде ауыстыру"
},
"SwitchMAACAll": {
"en": "Switch all",
"ru": "Переключить все",
"zh": "切换全部",
"uk": "Перемкнути всі",
"fr": "Basculer tous",
"es": "Cambiar todo",
"tr": "Hepsini değiştir",
"kk": "Барлығын ауыстыру"
}
},
"ShowAutoConfirmAccountsHint": {
"en": "Show accounts with auto-confirmation enabled.",
"ru": "Показать аккаунты с включенным автоподтверждением.",
"zh": "显示已启用自动确认的账户。",
"uk": "Показати акаунти з включеним автопідтвердженням.",
"fr": "Afficher les comptes avec la confirmation auto activée.",
"es": "Mostrar cuentas con confirmación automática activada.",
"tr": "Otomatik onay etkin olan hesapları göster.",
"kk": "Авторастау қосылған аккаунттарды көрсету."
}
},
"LeftPart": {
"SearchBoxHint": {
"en": "Search",
"ru": "Поиск",
"zh": "搜索",
"uk": "Пошук",
"fr": "Rechercher",
"es": "Buscar",
"tr": "Ara",
"kk": "Іздеу"
},
"NoMafiles": {
"en": "No mafiles found..",
"ru": "Мафайлы не найдены..",
"zh": "未找到文件..",
"uk": "Мафайли не знайдено..",
"fr": "Aucun mafile trouvé..",
"es": "No se encontraron mafiles..",
"tr": "Mafile bulunamadı..",
"kk": "Mafile табылмады.."
}
},
"RightPart": {
"LoadConfirmations": {
"en": "Load confirmations",
"ru": "Загрузить подтверждения",
"zh": "下载确认",
"uk": "Завантажити підтвердження",
"fr": "Charger les confirmations",
"es": "Cargar confirmaciones",
"tr": "Onayları yükle",
"kk": "Растауларды жүктеу"
},
"ConfirmLogin": {
"en": "Confirm login",
"ru": "Подтвердить вход",
"zh": "确认登录",
"uk": "Підтвердити вхід",
"fr": "Confirmer la connexion",
"es": "Confirmar inicio de sesión",
"tr": "Girişi onayla",
"kk": "Кіруді растау"
}
},
"Footer": {
"AccountsCount": {
"en": "Accounts: ",
"ru": "Аккаунты: ",
"zh": "账户:",
"uk": "Акаунти: ",
"fr": "Comptes: ",
"es": "Cuentas: ",
"tr": "Hesaplar: ",
"kk": "Аккаунттар: "
},
"SelectedAccount": {
"en": "Current: ",
"ru": "Текущий: ",
"zh": "群组:",
"uk": "Поточний: ",
"fr": "Actuel: ",
"es": "Actual: ",
"tr": "Geçerli: ",
"kk": "Ағымдағы: "
}
},
"ConfirmationTemplates": {
"TradeWith": {
"en": "Trade with",
"ru": "Трейд с",
"zh": "交易与",
"uk": "Трейд з",
"fr": "Échanger avec",
"es": "Intercambiar con",
"tr": "Şununla takas",
"kk": "Мынамен сауда"
},
"Recovery": {
"en": "Recovery",
"ru": "Восстановление",
"zh": "恢复",
"uk": "Відновлення",
"fr": "Récupération",
"es": "Recuperación",
"tr": "Kurtarma",
"kk": "Қалпына келтіру"
},
"ApiKey": {
"en": "Api key",
"ru": "Api ключ",
"zh": "API 密钥",
"uk": "Api ключ",
"fr": "Clé API",
"es": "Clave API",
"tr": "API anahtarı",
"kk": "API кілті"
},
"Market": {
"en": "Sell",
"ru": "Продажа",
"zh": "售卖",
"uk": "Продаж",
"fr": "Vendre",
"es": "Vender",
"tr": "Sat",
"kk": "Сату"
},
"Purchase": {
"en": "Purchase",
"ru": "Покупка",
"zh": "购买",
"uk": "Покупка",
"fr": "Acheter",
"es": "Comprar",
"tr": "Satın al",
"kk": "Сатып алу"
},
"ConfirmAll": {
"en": "Confirm all",
"ru": "Подтвердить все",
"zh": "全部确认",
"uk": "Підтвердити все",
"fr": "Tout confirmer",
"es": "Confirmar todo",
"tr": "Hepsini onayla",
"kk": "Барлығын растау"
},
"CancelAll": {
"en": "Cancel all",
"ru": "Отклонить все",
"zh": "全部取消",
"uk": "Відхилити все",
"fr": "Tout annuler",
"es": "Cancelar todo",
"tr": "Hepsini iptal et",
"kk": "Барлығын болдырмау"
},
"ConfirmOne": {
"en": "Confirm this item",
"ru": "Подтвердить этот предмет",
"zh": "确认此物品",
"uk": "Підтвердити цей предмет",
"fr": "Confirmer cet objet",
"es": "Confirmar este objeto",
"tr": "Bu öğeyi onayla",
"kk": "Бұл затты растау"
},
"CancelOne": {
"en": "Cancel this item",
"ru": "Отклонить этот предмет",
"zh": "取消此物品",
"uk": "Відхилити цей предмет",
"fr": "Annuler cet objet",
"es": "Cancelar este objeto",
"tr": "Bu öğeyi iptal et",
"kk": "Бұл затты болдырмау"
}
},
"CodeCopied": {
"ru": "Скопировано",
"en": "Copied",
"zh": "已复制",
"uk": "Скопійовано",
"fr": "Copié",
"es": "Copiado",
"tr": "Kopyalandı",
"kk": "Көшірілді"
},
"ContextMenus": {
"Mafile": {
"CopyLogin": {
"en": "Copy login",
"ru": "Скопировать логин",
"zh": "复制登录名",
"uk": "Скопіювати логін",
"fr": "Copier le login",
"es": "Copiar login",
"tr": "Girişi kopyala",
"kk": "Логинді көшіру"
},
"CopyMafile": {
"en": "Copy mafile",
"ru": "Скопировать мафайл",
"zh": "复制我的文件",
"uk": "Скопіювати мафайл",
"fr": "Copier le mafile",
"es": "Copiar mafile",
"tr": "Mafile'ı kopyala",
"kk": "Mafile көшіру"
},
"CopySteamId": {
"en": "Copy SteamID",
"ru": "Скопировать SteamID",
"zh": "复制 Steam ID",
"uk": "Скопіювати SteamID",
"fr": "Copier SteamID",
"es": "Copiar SteamID",
"tr": "SteamID kopyala",
"kk": "SteamID көшіру"
},
"CreateGroup": {
"en": "Create group",
"ru": "Создать группу",
"zh": "创建群组",
"uk": "Створити групу",
"fr": "Créer un groupe",
"es": "Crear grupo",
"tr": "Grup oluştur",
"kk": "Топ құру"
},
"AddToGroup": {
"en": "Add to group",
"ru": "Добавить в группу",
"zh": "添加到群组",
"uk": "Додати в групу",
"fr": "Ajouter au groupe",
"es": "Agregar al grupo",
"tr": "Gruba ekle",
"kk": "Топқа қосу"
},
"RemoveFromGroup": {
"en": "Remove from group",
"ru": "Удалить из группы",
"zh": "从群组中删除",
"uk": "Видалити з групи",
"fr": "Supprimer du groupe",
"es": "Eliminar del grupo",
"tr": "Gruptan kaldır",
"kk": "Топтан шығару"
},
"CopyPassword": {
"en": "Copy password",
"ru": "Скопировать пароль",
"zh": "复制密码",
"uk": "Скопіювати пароль",
"fr": "Copier le mot de passe",
"es": "Copiar contraseña",
"tr": "Parolayı kopyala",
"kk": "Құпиясөзді көшіру"
},
"UnattachProxy": {
"en": "Unattach proxy",
"ru": "Открепить прокси",
"zh": "取消代理绑定",
"uk": "Відкріпити проксі",
"fr": "Détacher le proxy",
"es": "Desvincular proxy",
"tr": "Proxy bağlantısını kaldır",
"kk": "Проксиді ажырату"
}
},
"Proxy": {
"Copy": {
"en": "Copy",
"ru": "Скопировать",
"zh": "复制",
"uk": "Скопіювати",
"fr": "Copier",
"es": "Copiar",
"tr": "Kopyala",
"kk": "Көшіру"
},
"CopyAddress": {
"en": "Copy address",
"ru": "Скопировать адрес",
"zh": "复制地址",
"uk": "Скопіювати адресу",
"fr": "Copier l'adresse",
"es": "Copiar dirección",
"tr": "Adresi kopyala",
"kk": "Мекенжайды көшіру"
}
}
}
}
}
@@ -0,0 +1,34 @@
{
"LinksView": {
"UsefulLinks": {
"en": "Useful links",
"ru": "Полезные ссылки",
"zh": "相关链接",
"uk": "Корисні посилання",
"fr": "Liens utiles",
"es": "Enlaces útiles",
"tr": "Faydalı bağlantılar",
"kk": "Пайдалы сілтемелер"
},
"Documentation": {
"en": "Documentation",
"ru": "Документация",
"zh": "文档",
"uk": "Документація",
"fr": "Documentation",
"es": "Documentación",
"tr": "Dokümantasyon",
"kk": "Құжаттама"
},
"CheckForUpdates": {
"en": "Check for updates",
"ru": "Проверить обновления",
"zh": "检查更新",
"uk": "Перевірити оновлення",
"fr": "Vérifier les mises à jour",
"es": "Buscar actualizaciones",
"tr": "Güncellemeleri kontrol et",
"kk": "Жаңартуларды тексеру"
}
}
}
+9 -8
View File
@@ -1,10 +1,4 @@
using MaterialDesignThemes.Wpf;
using NebulaAuth.Core;
using NebulaAuth.Model;
using NebulaAuth.View.Dialogs;
using NebulaAuth.ViewModel;
using NebulaAuth.ViewModel.Other;
using System;
using System;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows;
@@ -13,6 +7,12 @@ using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Threading;
using MaterialDesignThemes.Wpf;
using NebulaAuth.Core;
using NebulaAuth.Model;
using NebulaAuth.View.Dialogs;
using NebulaAuth.ViewModel;
using NebulaAuth.ViewModel.Other;
namespace NebulaAuth;
@@ -55,12 +55,13 @@ public partial class MainWindow
private static ColorAnimationUsingKeyFrames BuildBlinkAnimation(Duration duration, string targetName)
{
var anim = new ColorAnimationUsingKeyFrames { Duration = duration };
var anim = new ColorAnimationUsingKeyFrames {Duration = duration};
for (var i = 0; i <= 6; i++)
{
var color = i % 2 == 0 ? Colors.DodgerBlue : Colors.OrangeRed;
anim.KeyFrames.Add(new DiscreteColorKeyFrame(color, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(i))));
}
Storyboard.SetTargetName(anim, targetName);
Storyboard.SetTargetProperty(anim, new PropertyPath(SolidColorBrush.ColorProperty));
return anim;
+2 -2
View File
@@ -51,7 +51,7 @@ public static class Storage
await Task.Run(() =>
{
return Parallel.ForEachAsync(files,
new ParallelOptions { CancellationToken = token, MaxDegreeOfParallelism = threadCount },
new ParallelOptions {CancellationToken = token, MaxDegreeOfParallelism = threadCount},
async (file, ct) =>
{
try
@@ -241,7 +241,7 @@ public static class Storage
if (counter % 5 == 0)
{
progress?.Report(counter / (double)files.Count);
progress?.Report(counter / (double) files.Count);
await Task.Delay(10);
}
}
@@ -54,7 +54,8 @@ public static class SDAEncryptionHelper
if (string.IsNullOrWhiteSpace(fileName))
return null;
var entries = sdaManifest.Entries.ToDictionary(x => Path.GetFileName(x.Filename), StringComparer.OrdinalIgnoreCase);
var entries =
sdaManifest.Entries.ToDictionary(x => Path.GetFileName(x.Filename), StringComparer.OrdinalIgnoreCase);
return new Context(sdaManifest, entries, null);
}
@@ -86,7 +86,8 @@ public static class SDAEncryptor
}
}
public static bool TryDecryptData(string password, string passwordSalt, string IV, string encryptedData, [NotNullWhen(true)] out string? plaintext)
public static bool TryDecryptData(string password, string passwordSalt, string IV, string encryptedData,
[NotNullWhen(true)] out string? plaintext)
{
plaintext = null;
try
+12 -18
View File
@@ -3,26 +3,20 @@ using Newtonsoft.Json;
namespace NebulaAuth.Model.Update;
public class ChangelogEntry
{
[JsonProperty("version")]
public string Version { get; set; } = string.Empty;
public class ChangelogEntry
{
[JsonProperty("version")] public string Version { get; set; } = string.Empty;
[JsonProperty("date")]
public string Date { get; set; } = string.Empty;
[JsonProperty("date")] public string Date { get; set; } = string.Empty;
[JsonProperty("changes")]
public List<ChangeItem> Changes { get; set; } = new();
}
[JsonProperty("changes")] public List<ChangeItem> Changes { get; set; } = new();
}
public class ChangeItem
{
[JsonProperty("type")]
public string Type { get; set; } = string.Empty;
public class ChangeItem
{
[JsonProperty("type")] public string Type { get; set; } = string.Empty;
[JsonProperty("text")]
public string Text { get; set; } = string.Empty;
[JsonProperty("text")] public string Text { get; set; } = string.Empty;
[JsonProperty("link")]
public string? Link { get; set; }
}
[JsonProperty("link")] public string? Link { get; set; }
}
@@ -8,11 +8,9 @@ public class UpdateSettings
{
private static readonly string FilePath = Path.Combine("settings", "update.json");
[JsonProperty("skippedVersion")]
public string? SkippedVersion { get; set; }
[JsonProperty("skippedVersion")] public string? SkippedVersion { get; set; }
[JsonProperty("remindAfter")]
public DateTime? RemindAfter { get; set; }
[JsonProperty("remindAfter")] public DateTime? RemindAfter { get; set; }
public static UpdateSettings Load()
{
@@ -56,4 +54,4 @@ public class UpdateSettings
if (RemindAfter.HasValue && DateTime.Now < RemindAfter.Value) return false;
return true;
}
}
}
+5 -5
View File
@@ -5,11 +5,11 @@
throwExceptions="true">
<targets>
<target xsi:type="File"
name="File"
fileName="${basedir}/logs/log-${shortdate}.log"
concurrentWrites="true"
keepFileOpen="false">
<target xsi:type="File"
name="File"
fileName="${basedir}/logs/log-${shortdate}.log"
concurrentWrites="true"
keepFileOpen="false">
<layout xsi:type='CompoundLayout'>
<layout xsi:type="JsonLayout" includeEventProperties="true" IncludeScopeProperties="true">
<attribute name="time" layout="${longdate}" />
+49 -4
View File
@@ -10,7 +10,7 @@
<SatelliteResourceLanguages>en;ru;ua</SatelliteResourceLanguages>
<ApplicationIcon>Theme\lock.ico</ApplicationIcon>
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>
<AssemblyVersion>1.8.2</AssemblyVersion>
<AssemblyVersion>1.8.3</AssemblyVersion>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
@@ -60,10 +60,55 @@
<ItemGroup>
<None Update="NLog.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<None Update="Localization\codebehind.errors.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="localization.loc.json">
<None Update="Localization\codebehind.other.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\dialogs.setpasswords.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\dialogs.mafilemover.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\dialogs.export.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\dialogs.update.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\dialogs.sdapassword.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\dialogs.encryptionpassword.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\dialogs.linker.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\dialogs.proxymanager.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\dialogs.loginagain.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\dialogs.settings.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\dialogs.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\global.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\mainwindow.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Localization\views.loc.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="NLog.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
@@ -174,7 +174,8 @@
</Grid>
</DataTemplate>
<DataTemplate DataType="{x:Type entities:MarketMultiConfirmation}">
<Expander Padding="0" Background="Transparent" materialDesign:ExpanderAssist.ExpanderButtonPosition="Start" materialDesign:ExpanderAssist.HorizontalHeaderPadding="0" HorizontalAlignment="Stretch">
<Expander Padding="0" Background="Transparent" materialDesign:ExpanderAssist.ExpanderButtonPosition="Start"
materialDesign:ExpanderAssist.HorizontalHeaderPadding="0" HorizontalAlignment="Stretch">
<Expander.Header>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
@@ -236,7 +237,7 @@
<StackPanel Grid.Column="1" VerticalAlignment="Center">
<TextBlock TextWrapping="WrapWithOverflow" Text="{Binding ItemName}" />
</StackPanel>
<TextBlock VerticalAlignment="Center" Grid.Column="2" HorizontalAlignment="Left"
@@ -68,4 +68,4 @@
</Grid>
</Grid>
</Grid>
</UserControl>
</UserControl>
@@ -6,4 +6,4 @@ public partial class SdaPasswordDialog
{
InitializeComponent();
}
}
}
+60 -53
View File
@@ -57,57 +57,62 @@
<!-- JSON changelog items -->
<materialDesign:Card Grid.Row="1" Padding="10">
<ScrollViewer MaxHeight="350" VerticalScrollBarVisibility="Auto"
Visibility="{Binding HasJsonChangelog, Converter={StaticResource BooleanToVisibilityConverter}}">
<ItemsControl ItemsSource="{Binding Changelog.Changes}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,6,0,6">
<Border CornerRadius="3" Padding="4,2,4,2" Margin="0,0,8,0"
VerticalAlignment="Center">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Type}" Value="NEW">
<Setter Property="Background" Value="{DynamicResource SuccessBrush}" />
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="FIX">
<Setter Property="Background" Value="{DynamicResource WarningBrush}" />
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="IMPROVEMENT">
<Setter Property="Background" Value="{DynamicResource AccentBrush}" />
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="SECURITY">
<Setter Property="Background" Value="{DynamicResource ErrorBrush}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBlock Text="{Binding Type}" FontSize="11" FontWeight="Bold"
Foreground="White" />
</Border>
<TextBlock Text="{Binding Text}" TextWrapping="Wrap"
VerticalAlignment="Center" FontSize="14" MaxWidth="420" />
<Button Style="{StaticResource MaterialDesignIconForegroundButton}"
Width="20" Height="20"
Padding="2"
Margin="4,0,0,0"
VerticalAlignment="Center"
Command="{Binding DataContext.OpenLinkCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"
CommandParameter="{Binding Link}"
ToolTip="Open Link"
Visibility="{Binding Link, Converter={StaticResource NullableToVisibilityConverter}}">
<materialDesign:PackIcon Kind="OpenInNew" Width="14" Height="14" />
</Button>
</StackPanel>
<Separator Opacity="0.2" Margin="0,2,0,2"/>
</StackPanel>
<ScrollViewer MaxHeight="350" VerticalScrollBarVisibility="Auto"
Visibility="{Binding HasJsonChangelog, Converter={StaticResource BooleanToVisibilityConverter}}">
<ItemsControl ItemsSource="{Binding Changelog.Changes}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,6,0,6">
<Border CornerRadius="3" Padding="4,2,4,2" Margin="0,0,8,0"
VerticalAlignment="Center">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background"
Value="{DynamicResource MaterialDesign.Brush.Primary}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Type}" Value="NEW">
<Setter Property="Background"
Value="{DynamicResource SuccessBrush}" />
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="FIX">
<Setter Property="Background"
Value="{DynamicResource WarningBrush}" />
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="IMPROVEMENT">
<Setter Property="Background"
Value="{DynamicResource AccentBrush}" />
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="SECURITY">
<Setter Property="Background"
Value="{DynamicResource ErrorBrush}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBlock Text="{Binding Type}" FontSize="11" FontWeight="Bold"
Foreground="White" />
</Border>
<TextBlock Text="{Binding Text}" TextWrapping="Wrap"
VerticalAlignment="Center" FontSize="14" MaxWidth="420" />
<Button Style="{StaticResource MaterialDesignIconForegroundButton}"
Width="20" Height="20"
Padding="2"
Margin="4,0,0,0"
VerticalAlignment="Center"
Command="{Binding DataContext.OpenLinkCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"
CommandParameter="{Binding Link}"
ToolTip="Open Link"
Visibility="{Binding Link, Converter={StaticResource NullableToVisibilityConverter}}">
<materialDesign:PackIcon Kind="OpenInNew" Width="14" Height="14" />
</Button>
</StackPanel>
<Separator Opacity="0.2" Margin="0,2,0,2" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</materialDesign:Card>
<!-- No changelog fallback -->
<TextBlock Grid.Row="1" Text="{Tr UpdateDialog.NoChangelog}" FontSize="13" Opacity="0.6"
@@ -118,7 +123,8 @@
<Grid Grid.Row="3" Margin="12,6,12,14">
<!-- Normal buttons -->
<StackPanel Visibility="{Binding ShowRemindOptions, Converter={StaticResource InverseBooleanToVisibilityConverter}}">
<StackPanel
Visibility="{Binding ShowRemindOptions, Converter={StaticResource InverseBooleanToVisibilityConverter}}">
<Button Style="{StaticResource MaterialDesignRaisedButton}"
Command="{Binding UpdateNowCommand}"
HorizontalAlignment="Stretch"
@@ -141,7 +147,8 @@
</StackPanel>
<!-- Remind later options -->
<StackPanel Visibility="{Binding ShowRemindOptions, Converter={StaticResource BooleanToVisibilityConverter}}">
<StackPanel
Visibility="{Binding ShowRemindOptions, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock Text="{Tr UpdateDialog.RemindAfter}" Margin="0,0,0,8" FontSize="14" />
<WrapPanel>
<Button Style="{StaticResource MaterialDesignOutlinedButton}" Margin="0,0,4,4"
@@ -169,4 +176,4 @@
</Grid>
</Grid>
</UserControl>
</UserControl>
@@ -6,4 +6,4 @@ public partial class UpdateDialog
{
InitializeComponent();
}
}
}
+4 -4
View File
@@ -1,8 +1,8 @@
using MaterialDesignThemes.Wpf;
using NebulaAuth.Core;
using System.Diagnostics;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using MaterialDesignThemes.Wpf;
using NebulaAuth.Core;
namespace NebulaAuth.View;
@@ -37,6 +37,6 @@ public partial class LinksView : UserControl
private void CheckForUpdates_Click(object sender, RoutedEventArgs e)
{
DialogHost.Close(null);
UpdateManager.CheckForUpdates(manual: true);
UpdateManager.CheckForUpdates(true);
}
}
+1 -2
View File
@@ -42,7 +42,7 @@ public partial class MainVM : ObservableObject
new MaProxy(kvp.Key, kvp.Value)));
Storage.MaFiles.CollectionChanged += MaFilesOnCollectionChanged;
QueryGroups();
UpdateManager.CheckForUpdates(manual: false);
UpdateManager.CheckForUpdates(false);
}
[RelayCommand]
@@ -70,7 +70,6 @@ public partial class MainVM : ObservableObject
ConfirmLoginCommand.NotifyCanExecuteChanged();
RemoveProxyCommand.NotifyCanExecuteChanged();
}
}
@@ -77,7 +77,6 @@ public partial class MainVM //Confirmations
}
private async Task SendConfirmation(Mafile mafile, Confirmation confirmation, bool confirm)
{
bool result;
+1 -1
View File
@@ -82,7 +82,7 @@ public partial class MainVM
private bool RemoveProxyCanExecute(Mafile? mafile)
{
mafile ??= SelectedMafile;
return mafile is { Proxy: not null };
return mafile is {Proxy: not null};
}
private void CheckProxyExist()
@@ -4,9 +4,8 @@ namespace NebulaAuth.ViewModel.Other;
public partial class SdaPasswordDialogVM : ObservableObject
{
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsFormValid))]
private string _password = string.Empty;
public bool IsFormValid => !string.IsNullOrWhiteSpace(Password);
}
[ObservableProperty] [NotifyPropertyChangedFor(nameof(IsFormValid))]
private string _password = string.Empty;
}
+4 -1
View File
@@ -130,7 +130,10 @@ public partial class SettingsVM : ObservableObject
{LocalizationLanguage.Russian, "Русский"},
{LocalizationLanguage.Ukrainian, "Українська"},
{LocalizationLanguage.ChineseSimplified, "简体中文"},
{LocalizationLanguage.French, "Français"}
{LocalizationLanguage.French, "Français"},
{LocalizationLanguage.Spanish, "Español"},
{LocalizationLanguage.Turkish, "Türkçe"},
{LocalizationLanguage.Kazakh, "Қазақша"}
};
public Color? IconColor
@@ -5,6 +5,7 @@ using AutoUpdaterDotNET;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using MaterialDesignThemes.Wpf;
using NebulaAuth.Core;
using NebulaAuth.Model.Update;
namespace NebulaAuth.ViewModel.Other;
@@ -14,7 +15,7 @@ public partial class UpdateDialogVM : ObservableObject
public UpdateInfoEventArgs Args { get; }
public ChangelogEntry? Changelog { get; }
public string? HtmlFallbackUrl { get; }
public string Version => Args.CurrentVersion.ToString();
public string Version => Args.CurrentVersion;
public bool HasJsonChangelog => Changelog?.Changes?.Count > 0;
[ObservableProperty] private bool _showRemindOptions;
@@ -53,14 +54,14 @@ public partial class UpdateDialogVM : ObservableObject
"7D" => TimeSpan.FromDays(7),
_ => TimeSpan.FromDays(1)
};
Core.UpdateManager.SetRemindAfter(delay);
UpdateManager.SetRemindAfter(delay);
DialogHost.Close(null);
}
[RelayCommand]
private void SkipVersion()
{
Core.UpdateManager.SkipVersion(Version);
UpdateManager.SkipVersion(Version);
DialogHost.Close(null);
}
@@ -68,6 +69,6 @@ public partial class UpdateDialogVM : ObservableObject
private void OpenLink(string url)
{
if (string.IsNullOrEmpty(url)) return;
Process.Start(new ProcessStartInfo(url) { UseShellExecute = true });
Process.Start(new ProcessStartInfo(url) {UseShellExecute = true});
}
}
}
File diff suppressed because it is too large Load Diff