diff --git a/src/Titanium.Cli/Titanium.Cli.csproj b/src/Titanium.Cli/Titanium.Cli.csproj
index ade877cb6..c75225d3c 100644
--- a/src/Titanium.Cli/Titanium.Cli.csproj
+++ b/src/Titanium.Cli/Titanium.Cli.csproj
@@ -7,7 +7,7 @@
latest
enable
false
- 7.0.21
+ 7.0.22
Jehonathan Thomas
Titanium Web Proxy CLI (titanium / twp).
MIT
diff --git a/src/Titanium.Inspector/App.axaml b/src/Titanium.Inspector/App.axaml
index b3966d80a..bc0cdf297 100644
--- a/src/Titanium.Inspector/App.axaml
+++ b/src/Titanium.Inspector/App.axaml
@@ -1,5 +1,6 @@
-
+
diff --git a/src/Titanium.Inspector/App.axaml.cs b/src/Titanium.Inspector/App.axaml.cs
index a06005d44..dc5abfd96 100644
--- a/src/Titanium.Inspector/App.axaml.cs
+++ b/src/Titanium.Inspector/App.axaml.cs
@@ -2,6 +2,7 @@
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
+using Titanium.Inspector.Localization;
using Titanium.Inspector.Services;
using Titanium.Inspector.ViewModels;
using Titanium.Inspector.Views;
@@ -15,6 +16,7 @@ public partial class App : Application
public override void OnFrameworkInitializationCompleted()
{
var settings = SettingsService.Load();
+ LanguageService.Apply(settings.Current.UiLanguage);
ThemeService.ApplyThemeMode(settings.Current.ThemeMode);
var sessions = new SessionRegistry(SessionStoreOptions.FromSettings(settings.Current));
var buffer = new SessionStreamBuffer();
diff --git a/src/Titanium.Inspector/Converters/LanguageMatchConverter.cs b/src/Titanium.Inspector/Converters/LanguageMatchConverter.cs
new file mode 100644
index 000000000..cab5a1c29
--- /dev/null
+++ b/src/Titanium.Inspector/Converters/LanguageMatchConverter.cs
@@ -0,0 +1,17 @@
+using System.Globalization;
+using Avalonia.Data;
+using Avalonia.Data.Converters;
+
+namespace Titanium.Inspector.Converters;
+
+/// Radio check for a language setting value (auto or a culture name).
+public sealed class LanguageMatchConverter : IValueConverter
+{
+ public static LanguageMatchConverter Instance { get; } = new();
+
+ public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) =>
+ string.Equals(value?.ToString(), parameter?.ToString(), StringComparison.OrdinalIgnoreCase);
+
+ public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) =>
+ BindingOperations.DoNothing;
+}
diff --git a/src/Titanium.Inspector/InspectorAppFactory.cs b/src/Titanium.Inspector/InspectorAppFactory.cs
index bc02fba56..d069783ac 100644
--- a/src/Titanium.Inspector/InspectorAppFactory.cs
+++ b/src/Titanium.Inspector/InspectorAppFactory.cs
@@ -1,3 +1,4 @@
+using Titanium.Inspector.Localization;
using Titanium.Inspector.Services;
using Titanium.Inspector.ViewModels;
using Titanium.Inspector.Views;
@@ -13,6 +14,7 @@ public static MainWindowViewModel CreateViewModel(InspectorViewModelServices ser
public static (MainWindowViewModel ViewModel, MainWindow Window) CreateMainWindow(
InspectorViewModelServices services)
{
+ LanguageService.Apply(services.Settings.Current.UiLanguage);
ThemeService.ApplyThemeMode(services.Settings.Current.ThemeMode);
var vm = CreateViewModel(services);
var window = new MainWindow { DataContext = vm };
diff --git a/src/Titanium.Inspector/Localization/LanguageService.cs b/src/Titanium.Inspector/Localization/LanguageService.cs
new file mode 100644
index 000000000..3393fd1ee
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/LanguageService.cs
@@ -0,0 +1,281 @@
+using System.ComponentModel;
+using System.Globalization;
+using System.Text.Json;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Media;
+
+namespace Titanium.Inspector.Localization;
+
+///
+/// UI string catalog. Does not change or
+/// . Automatic mode reads the OS UI language
+/// (), not the process locale alone.
+///
+public sealed class LanguageService : INotifyPropertyChanged
+{
+ public const string AutomaticSetting = "auto";
+ public const string English = "en";
+
+ private static readonly string[] Cultures =
+ [
+ "en", "ar", "zh-Hans", "zh-Hant", "cs", "da", "nl", "fi", "fr", "de",
+ "el", "he", "hi", "hu", "id", "it", "ja", "ko", "nb", "pl",
+ "pt-BR", "pt-PT", "ru", "es", "sv", "th", "tr", "uk", "vi", "fa",
+ ];
+
+ /// Options menu rows: setting value, then the name shown in the menu.
+ public static readonly (string Setting, string Endonym)[] MenuLanguages =
+ [
+ (AutomaticSetting, ""),
+ ("en", "English"),
+ ("ar", "العربية"),
+ ("zh-Hans", "简体中文"),
+ ("zh-Hant", "繁體中文"),
+ ("cs", "Čeština"),
+ ("da", "Dansk"),
+ ("nl", "Nederlands"),
+ ("fi", "Suomi"),
+ ("fr", "Français"),
+ ("de", "Deutsch"),
+ ("el", "Ελληνικά"),
+ ("he", "עברית"),
+ ("hi", "हिन्दी"),
+ ("hu", "Magyar"),
+ ("id", "Bahasa Indonesia"),
+ ("it", "Italiano"),
+ ("ja", "日本語"),
+ ("ko", "한국어"),
+ ("nb", "Norsk bokmål"),
+ ("pl", "Polski"),
+ ("pt-BR", "Português (Brasil)"),
+ ("pt-PT", "Português (Portugal)"),
+ ("ru", "Русский"),
+ ("es", "Español"),
+ ("sv", "Svenska"),
+ ("th", "ไทย"),
+ ("tr", "Türkçe"),
+ ("uk", "Українська"),
+ ("vi", "Tiếng Việt"),
+ ("fa", "فارسی"),
+ ];
+
+ private static readonly Dictionary Aliases = new(StringComparer.OrdinalIgnoreCase)
+ {
+ ["pt"] = "pt-BR",
+ ["nn"] = "nb",
+ ["no"] = "nb",
+ ["zh"] = "zh-Hans",
+ ["iw"] = "he",
+ ["in"] = "id",
+ };
+
+ private readonly List _targets = new();
+ private Dictionary _active = new(StringComparer.Ordinal);
+ private Dictionary _english = new(StringComparer.Ordinal);
+
+ static LanguageService()
+ {
+ Instance.Load(English);
+ }
+
+ private LanguageService()
+ {
+ }
+
+ public static LanguageService Instance { get; } = new();
+
+ public static IReadOnlyList ShippedCultures => Cultures;
+
+ /// When set, always loads this culture (test host).
+ public static string? PinnedCulture { get; private set; }
+
+ public string ActiveCulture { get; private set; } = English;
+
+ public FlowDirection FlowDirection { get; private set; } = FlowDirection.LeftToRight;
+
+ public event PropertyChangedEventHandler? PropertyChanged;
+
+ public event EventHandler? LanguageChanged;
+
+ public string this[string key] => Get(key);
+
+ public static void PinForTests(string culture)
+ {
+ PinnedCulture = culture;
+ Instance.Load(culture);
+ }
+
+ public static void Apply(string? uiLanguageSetting)
+ {
+ var culture = PinnedCulture ?? ResolveCultureName(uiLanguageSetting);
+ Instance.Load(culture);
+ }
+
+ public static string Get(string key) => Instance.Lookup(key);
+
+ public static string Format(string key, params object?[] args) =>
+ string.Format(CultureInfo.InvariantCulture, Get(key), args);
+
+ ///
+ /// Map a settings value or OS UI culture onto a shipped catalog. Does not assign the thread culture.
+ ///
+ public static string ResolveCultureName(string? setting)
+ {
+ if (string.IsNullOrWhiteSpace(setting)
+ || setting.Equals(AutomaticSetting, StringComparison.OrdinalIgnoreCase))
+ {
+ return MatchCulture(OsUiLanguage.Detect());
+ }
+
+ if (TryCatalog(setting, out var direct))
+ {
+ return direct;
+ }
+
+ try
+ {
+ return MatchCulture(CultureInfo.GetCultureInfo(setting));
+ }
+ catch (CultureNotFoundException)
+ {
+ return English;
+ }
+ }
+
+ public static bool IsRightToLeft(string cultureName)
+ {
+ try
+ {
+ return CultureInfo.GetCultureInfo(cultureName).TextInfo.IsRightToLeft;
+ }
+ catch (CultureNotFoundException)
+ {
+ return false;
+ }
+ }
+
+ public void Load(string cultureName)
+ {
+ var culture = TryCatalog(cultureName, out var matched) ? matched : English;
+ _english = ReadCatalog(English);
+ _active = culture == English
+ ? _english
+ : ReadCatalog(culture);
+ ActiveCulture = culture;
+ FlowDirection = IsRightToLeft(culture) ? FlowDirection.RightToLeft : FlowDirection.LeftToRight;
+ RefreshTargets();
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ActiveCulture)));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(FlowDirection)));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Item[]"));
+ LanguageChanged?.Invoke(this, EventArgs.Empty);
+ }
+
+ /// Keep a window's flow direction aligned with the active culture.
+ public static void AttachWindow(Window window)
+ {
+ window.FlowDirection = Instance.FlowDirection;
+ void OnLanguageChanged(object? sender, EventArgs e) =>
+ window.FlowDirection = Instance.FlowDirection;
+ Instance.LanguageChanged += OnLanguageChanged;
+ window.Closed += (_, _) => Instance.LanguageChanged -= OnLanguageChanged;
+ }
+
+ internal void Track(AvaloniaObject target, AvaloniaProperty property, string key)
+ {
+ _targets.Add(new TargetBinding(new WeakReference(target), property, key));
+ }
+
+ internal static Dictionary ReadCatalog(string culture)
+ {
+ var stream = OpenCatalog(culture);
+ if (stream is null)
+ {
+ return new Dictionary(StringComparer.Ordinal);
+ }
+
+ using (stream)
+ {
+ var map = JsonSerializer.Deserialize>(stream);
+ return map is null
+ ? new Dictionary(StringComparer.Ordinal)
+ : new Dictionary(map, StringComparer.Ordinal);
+ }
+ }
+
+ internal static Stream? OpenCatalog(string culture)
+ {
+ var assembly = typeof(LanguageService).Assembly;
+ var name = assembly.GetManifestResourceNames()
+ .FirstOrDefault(n => n.EndsWith($"strings.{culture}.json", StringComparison.OrdinalIgnoreCase));
+ return name is null ? null : assembly.GetManifestResourceStream(name);
+ }
+
+ private string Lookup(string key)
+ {
+ if (_active.TryGetValue(key, out var value) && value.Length > 0)
+ {
+ return value;
+ }
+
+ if (_english.TryGetValue(key, out var english) && english.Length > 0)
+ {
+ return english;
+ }
+
+ return key;
+ }
+
+ private void RefreshTargets()
+ {
+ for (var i = _targets.Count - 1; i >= 0; i--)
+ {
+ var binding = _targets[i];
+ if (!binding.Target.TryGetTarget(out var target))
+ {
+ _targets.RemoveAt(i);
+ continue;
+ }
+
+ target.SetCurrentValue(binding.Property, Lookup(binding.Key));
+ }
+ }
+
+ private static string MatchCulture(CultureInfo culture)
+ {
+ for (var current = culture; !string.IsNullOrEmpty(current.Name); current = current.Parent)
+ {
+ if (TryCatalog(current.Name, out var name))
+ {
+ return name;
+ }
+ }
+
+ return English;
+ }
+
+ private static bool TryCatalog(string name, out string canonical)
+ {
+ if (Aliases.TryGetValue(name, out var alias))
+ {
+ canonical = alias;
+ return true;
+ }
+
+ var match = Cultures.FirstOrDefault(culture =>
+ culture.Equals(name, StringComparison.OrdinalIgnoreCase));
+ if (match is not null)
+ {
+ canonical = match;
+ return true;
+ }
+
+ canonical = English;
+ return false;
+ }
+
+ private readonly record struct TargetBinding(
+ WeakReference Target,
+ AvaloniaProperty Property,
+ string Key);
+}
diff --git a/src/Titanium.Inspector/Localization/LocExtension.cs b/src/Titanium.Inspector/Localization/LocExtension.cs
new file mode 100644
index 000000000..cff0e3700
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/LocExtension.cs
@@ -0,0 +1,31 @@
+using Avalonia;
+using Avalonia.Markup.Xaml;
+using Avalonia.Metadata;
+
+namespace Titanium.Inspector.Localization;
+
+/// Looks up a catalog id and refreshes the target when the language changes.
+public sealed class LocExtension : MarkupExtension
+{
+ public LocExtension()
+ {
+ }
+
+ public LocExtension(string key) => Key = key;
+
+ [ConstructorArgument("key")]
+ public string Key { get; set; } = "";
+
+ public override object ProvideValue(IServiceProvider serviceProvider)
+ {
+ var text = LanguageService.Get(Key);
+ if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget provide
+ && provide.TargetObject is AvaloniaObject target
+ && provide.TargetProperty is AvaloniaProperty property)
+ {
+ LanguageService.Instance.Track(target, property, Key);
+ }
+
+ return text;
+ }
+}
diff --git a/src/Titanium.Inspector/Localization/MacPreferredLanguage.cs b/src/Titanium.Inspector/Localization/MacPreferredLanguage.cs
new file mode 100644
index 000000000..cb9eea60c
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/MacPreferredLanguage.cs
@@ -0,0 +1,77 @@
+using System.Runtime.InteropServices;
+
+namespace Titanium.Inspector.Localization;
+
+/// First entry of the macOS preferred-language list (CFLocaleCopyPreferredLanguages).
+internal static partial class MacPreferredLanguage
+{
+ private const uint Utf8 = 0x08000100;
+
+ public static string? TryGetFirst()
+ {
+ if (!OperatingSystem.IsMacOS())
+ {
+ return null;
+ }
+
+ var languages = CFLocaleCopyPreferredLanguages();
+ if (languages == IntPtr.Zero)
+ {
+ return null;
+ }
+
+ try
+ {
+ if (CFArrayGetCount(languages) < 1)
+ {
+ return null;
+ }
+
+ var value = CFArrayGetValueAtIndex(languages, 0);
+ return value == IntPtr.Zero ? null : ReadUtf8(value);
+ }
+ finally
+ {
+ CFRelease(languages);
+ }
+ }
+
+ private static string? ReadUtf8(IntPtr cfString)
+ {
+ var buffer = new byte[128];
+ unsafe // NOSONAR S6640 - CFStringGetCString needs a pinned writable buffer
+ {
+ fixed (byte* pointer = buffer)
+ {
+ if (!CFStringGetCString(cfString, pointer, buffer.Length, Utf8))
+ {
+ return null;
+ }
+ }
+ }
+
+ var length = Array.IndexOf(buffer, (byte)0);
+ if (length < 0)
+ {
+ length = buffer.Length;
+ }
+
+ return System.Text.Encoding.UTF8.GetString(buffer, 0, length);
+ }
+
+ [LibraryImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
+ private static partial IntPtr CFLocaleCopyPreferredLanguages();
+
+ [LibraryImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
+ private static partial nint CFArrayGetCount(IntPtr array);
+
+ [LibraryImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
+ private static partial IntPtr CFArrayGetValueAtIndex(IntPtr array, nint index);
+
+ [LibraryImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
+ private static partial void CFRelease(IntPtr cf);
+
+ [LibraryImport("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation")]
+ [return: MarshalAs(UnmanagedType.U1)]
+ private static unsafe partial bool CFStringGetCString(IntPtr theString, byte* buffer, nint bufferSize, uint encoding); // NOSONAR S6640
+}
diff --git a/src/Titanium.Inspector/Localization/OsUiLanguage.cs b/src/Titanium.Inspector/Localization/OsUiLanguage.cs
new file mode 100644
index 000000000..aee8eccd4
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/OsUiLanguage.cs
@@ -0,0 +1,215 @@
+using System.Globalization;
+
+namespace Titanium.Inspector.Localization;
+
+///
+/// Operating-system UI language for Automatic mode. Does not change the thread culture.
+/// Windows uses (the user display language).
+/// macOS uses the preferred-language list, which a terminal LANG would otherwise hide.
+/// Linux uses gettext's LANGUAGE first, then the process locale, then locale.conf.
+///
+internal static class OsUiLanguage
+{
+ internal readonly record struct Probe(
+ bool IsWindows,
+ bool IsMac,
+ bool IsLinux,
+ string? CurrentUiCultureName,
+ string? LanguageVariable,
+ string? MacPreferred,
+ string? LocaleConfLang);
+
+ public static CultureInfo Detect()
+ {
+ foreach (var tag in CandidateTags(Capture()))
+ {
+ if (TryGetCulture(tag, out var culture))
+ {
+ return culture;
+ }
+ }
+
+ return CultureInfo.CurrentUICulture;
+ }
+
+ internal static Probe Capture()
+ {
+ var current = CultureInfo.CurrentUICulture.Name;
+ string? mac = null;
+ string? localeConf = null;
+ if (OperatingSystem.IsMacOS())
+ {
+ mac = MacPreferredLanguage.TryGetFirst();
+ }
+ else if (OperatingSystem.IsLinux() && NormalizeTag(current) is null)
+ {
+ localeConf = ReadLocaleConfLang();
+ }
+
+ return new Probe(
+ OperatingSystem.IsWindows(),
+ OperatingSystem.IsMacOS(),
+ OperatingSystem.IsLinux(),
+ current,
+ Environment.GetEnvironmentVariable("LANGUAGE"),
+ mac,
+ localeConf);
+ }
+
+ internal static IEnumerable CandidateTags(Probe probe)
+ {
+ if (probe.IsMac)
+ {
+ var mac = NormalizeTag(probe.MacPreferred);
+ if (mac is not null)
+ {
+ yield return mac;
+ }
+ }
+ else if (probe.IsLinux)
+ {
+ var language = NormalizeTag(FirstListEntry(probe.LanguageVariable));
+ if (language is not null)
+ {
+ yield return language;
+ }
+ }
+
+ var current = NormalizeTag(probe.CurrentUiCultureName);
+ if (current is not null)
+ {
+ yield return current;
+ }
+
+ if (probe.IsLinux)
+ {
+ var file = NormalizeTag(probe.LocaleConfLang);
+ if (file is not null)
+ {
+ yield return file;
+ }
+ }
+ }
+
+ /// First gettext list entry, without encoding or modifier (pt_BR.UTF-8@euro → pt_BR).
+ internal static string? FirstListEntry(string? value)
+ {
+ if (string.IsNullOrWhiteSpace(value))
+ {
+ return null;
+ }
+
+ var entry = value.Split(':', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
+ return entry.Length == 0 ? null : entry[0];
+ }
+
+ /// de_DE.UTF-8 → de-DE. C and POSIX are not languages.
+ internal static string? NormalizeTag(string? raw)
+ {
+ if (string.IsNullOrWhiteSpace(raw))
+ {
+ return null;
+ }
+
+ var token = raw.Trim().Trim('"');
+ var at = token.IndexOf('@');
+ if (at >= 0)
+ {
+ token = token[..at];
+ }
+
+ var dot = token.IndexOf('.');
+ if (dot >= 0)
+ {
+ token = token[..dot];
+ }
+
+ token = token.Replace('_', '-').Trim();
+ if (token.Length == 0
+ || token.Equals("C", StringComparison.OrdinalIgnoreCase)
+ || token.Equals("POSIX", StringComparison.OrdinalIgnoreCase))
+ {
+ return null;
+ }
+
+ return token;
+ }
+
+ internal static string? ReadLangAssignment(string? text)
+ {
+ if (string.IsNullOrEmpty(text))
+ {
+ return null;
+ }
+
+ string? lang = null;
+ foreach (var raw in text.Split('\n'))
+ {
+ var line = raw.Trim();
+ if (line.Length == 0 || line[0] == '#')
+ {
+ continue;
+ }
+
+ var value = Assignment(line, "LANG")
+ ?? Assignment(line, "LC_ALL")
+ ?? Assignment(line, "LC_MESSAGES");
+ if (value is not null)
+ {
+ lang = value;
+ if (line.StartsWith("LANG=", StringComparison.Ordinal))
+ {
+ return lang;
+ }
+ }
+ }
+
+ return lang;
+ }
+
+ private static string? ReadLocaleConfLang()
+ {
+ try
+ {
+ var xdg = Environment.GetEnvironmentVariable("XDG_CONFIG_HOME");
+ var dir = string.IsNullOrWhiteSpace(xdg)
+ ? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".config")
+ : xdg;
+ var path = Path.Combine(dir, "locale.conf");
+ return File.Exists(path) ? ReadLangAssignment(File.ReadAllText(path)) : null;
+ }
+ catch (IOException)
+ {
+ return null;
+ }
+ catch (UnauthorizedAccessException)
+ {
+ return null;
+ }
+ }
+
+ private static string? Assignment(string line, string key)
+ {
+ var prefix = key + "=";
+ if (!line.StartsWith(prefix, StringComparison.Ordinal))
+ {
+ return null;
+ }
+
+ return line[prefix.Length..].Trim().Trim('"');
+ }
+
+ private static bool TryGetCulture(string tag, out CultureInfo culture)
+ {
+ try
+ {
+ culture = CultureInfo.GetCultureInfo(tag);
+ return true;
+ }
+ catch (CultureNotFoundException)
+ {
+ culture = CultureInfo.InvariantCulture;
+ return false;
+ }
+ }
+}
diff --git a/src/Titanium.Inspector/Localization/strings.ar.json b/src/Titanium.Inspector/Localization/strings.ar.json
new file mode 100644
index 000000000..76dbb6653
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.ar.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "ملف",
+ "menu.exportAllHar": "تصدير كل HAR…",
+ "menu.exportSelectedHar": "تصدير HAR المحدد…",
+ "menu.importHar": "استيراد HAR…",
+ "menu.exportAllArchive": "تصدير الأرشيف بالكامل…",
+ "menu.exportSelectedArchive": "تصدير الأرشيف المحدد…",
+ "menu.importArchive": "استيراد أرشيف…",
+ "menu.exit": "خروج",
+ "menu.capture": "الالتقاط",
+ "menu.startProxy": "بدء الوكيل",
+ "menu.stopProxy": "إيقاف الوكيل",
+ "menu.capturing": "جارٍ الالتقاط",
+ "menu.clearSessions": "مسح الجلسات",
+ "menu.removeSelected": "إزالة المحدد",
+ "menu.autoStartCapture": "بدء الالتقاط تلقائيًا",
+ "menu.autoSystemProxy": "وكيل النظام عند البدء",
+ "menu.decryptHttps": "فك تشفير HTTPS",
+ "menu.systemProxy": "وكيل النظام",
+ "menu.captureLocal": "التقاط الحركة المحلية",
+ "menu.allowStoreApps": "السماح لتطبيقات المتجر…",
+ "menu.installCa": "تثبيت CA الجذر (المستخدم الحالي)",
+ "menu.removeCa": "إزالة CA الجذر (المستخدم الحالي)",
+ "menu.rotateCa": "مسح CA الجذر وإعادة تثبيته…",
+ "menu.removeOldCas": "إزالة شهادات CA الجذر القديمة…",
+ "menu.exportCa": "تصدير CA الجذر…",
+ "menu.trustFirefox": "الثقة بـ CA في Firefox…",
+ "menu.deviceCa": "إعداد CA لجهاز خارجي",
+ "menu.tools": "أدوات",
+ "menu.composer": "المنشئ…",
+ "menu.breakpoints": "نقاط التوقف…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "النصوص البرمجية…",
+ "menu.mapRemote": "التعيين البعيد…",
+ "menu.options": "خيارات",
+ "menu.theme": "السمة",
+ "menu.themeLight": "فاتح",
+ "menu.themeDark": "داكن",
+ "menu.themeAutomatic": "تلقائي",
+ "menu.language": "اللغة",
+ "menu.languageAutomatic": "تلقائي",
+ "menu.columns": "الأعمدة",
+ "menu.col.id": "المعرف",
+ "menu.col.method": "الأسلوب",
+ "menu.col.status": "الحالة",
+ "menu.col.host": "المضيف",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "البروتوكول",
+ "menu.col.duration": "المدة",
+ "menu.col.ttfb": "الانتظار (TTFB)",
+ "menu.col.size": "الحجم",
+ "menu.col.process": "العملية",
+ "menu.col.started": "البدء",
+ "menu.col.scheme": "المخطط",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "إعادة تعيين الأعمدة",
+ "menu.sessionRetention": "الاحتفاظ بالجلسات…",
+ "menu.excludedHosts": "المضيفون المستثنون…",
+ "menu.excludedHostsTip": "قوائم تخطي فك تشفير HTTPS وقواعد تجاوز نظام التشغيل",
+ "menu.ignoreCerts": "تجاهل شهادات الخادم غير الآمنة",
+ "menu.addVia": "إضافة ترويسة Via",
+ "menu.addViaTip": "إلحاق Via: … titanium-web-proxy بالحركة المعترضة (RFC 9110). إيقاف التشغيل يعطل الإضافة واكتشاف حلقات Via.",
+ "menu.logging": "التسجيل…",
+ "menu.resetSettings": "إعادة تعيين إعدادات Inspector…",
+ "menu.help": "تعليمات",
+ "menu.checkUpdates": "التحقق من التحديثات…",
+ "menu.checkUpdatesStartup": "التحقق من التحديثات عند البدء",
+ "menu.updateChannel": "قناة التحديث",
+ "menu.channelStable": "مستقر",
+ "menu.channelBeta": "تجريبي",
+ "menu.about": "حول Titanium Inspector…",
+ "toolbar.searchWatermark": "ابحث في URL والمضيف والعملية… (أو method:GET status:4xx)",
+ "toolbar.searchTip": "النص المجرد يبحث في URL والمضيف واسم العملية ومعرف العملية الدقيق والأسلوب والحالة. البادئات تحصر البحث في حقل واحد: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. يبحث body: أيضًا في الأجسام المكتوبة على القرص. ضع - قبل حقل أو كلمة لاستبعاده (مثل -host:cursor.sh أو -cursor). تفتح عوامل التصفية تحرير المضيفين والعمليات المخفية بمساحة أكبر.",
+ "toolbar.filters": "عوامل التصفية",
+ "toolbar.filtersTip": "تحرير البحث والمضيفين أو العمليات المخفية في نافذة أكبر",
+ "toolbar.hideConnect": "إخفاء CONNECT",
+ "toolbar.hideConnectTip": "إخفاء أنفاق HTTPS المعتمة عندما يكون فك تشفير HTTPS متوقفًا",
+ "toolbar.hideImages": "إخفاء الصور",
+ "toolbar.errorsOnly": "الأخطاء فقط",
+ "toolbar.clearFilters": "مسح عوامل التصفية",
+ "toolbar.hidden": "مخفي",
+ "ctx.replay": "إعادة الإرسال",
+ "ctx.loadComposer": "تحميل إلى المنشئ",
+ "ctx.saveRequest": "حفظ جسم الطلب…",
+ "ctx.saveResponse": "حفظ جسم الاستجابة…",
+ "ctx.copyUrl": "نسخ URL",
+ "ctx.copyCurl": "نسخ كـ curl",
+ "ctx.copyFetch": "نسخ كـ fetch",
+ "ctx.diff": "مقارنة المحدد…",
+ "ctx.filterHost": "تصفية حسب المضيف",
+ "ctx.hideHost": "إخفاء المضيف",
+ "ctx.filterProcess": "تصفية حسب العملية",
+ "ctx.hideProcess": "إخفاء العملية",
+ "ctx.excludeHost": "استثناء المضيف…",
+ "ctx.excludeHostTip": "إيقاف فك تشفير HTTPS لهذا المضيف. تبقى الصفوف في القائمة؛ لإزالتها من العرض استخدم «إخفاء المضيف».",
+ "grid.duration": "المدة (مللي ثانية)",
+ "grid.wait": "الانتظار (مللي ثانية)",
+ "pane.inspect": "فحص",
+ "pane.composer": "المنشئ",
+ "pane.breakpoints": "نقاط التوقف",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "النصوص البرمجية",
+ "pane.mapRemote": "التعيين البعيد",
+ "pane.closeTip": "إغلاق الجزء",
+ "inspect.empty": "حدد جلسة في الشبكة لفحص ترويسات وأجسام الطلب والاستجابة.",
+ "common.ok": "موافق",
+ "common.cancel": "إلغاء",
+ "common.save": "حفظ",
+ "common.apply": "تطبيق",
+ "common.remove": "إزالة",
+ "common.browse": "استعراض…",
+ "common.openFolder": "فتح المجلد",
+ "common.forget": "نسيان",
+ "common.close": "إغلاق",
+ "loopback.window": "السماح لتطبيقات المتجر باستخدام هذا الوكيل",
+ "loopback.checkAll": "تحديد الكل",
+ "loopback.uncheckAll": "إلغاء تحديد الكل",
+ "loopback.filterWatermark": "تصفية حسب اسم التطبيق…",
+ "loopback.clearAll": "مسح الكل",
+ "trust.macWindow": "أكّد الثقة في Keychain Access",
+ "trust.openKeychain": "فتح Keychain Access",
+ "trust.notNow": "ليس الآن",
+ "trust.recoveryTitle": "الثقة في CA الجذر",
+ "trust.macWaitPlaceholder": "بانتظار ثقة SSL…",
+ "window.about": "حول Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "حقوق النشر © Jehonathan Thomas",
+ "about.license": "مرخّص بموجب PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "تفاصيل الترخيص",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "عوامل التصفية",
+ "filters.search": "بحث",
+ "filters.searchHelp": "البحث نفسه الموجود في شريط الأدوات، بمساحة أكبر. المضيفون والعمليات المخفية مذكورون أدناه وليس في هذا المربع.",
+ "filters.searchWatermark": "URL، مضيف، عملية، method:GET، status:4xx…",
+ "filters.hideHeading": "إخفاء من القائمة",
+ "filters.hideHelp": "تبقى الصفوف ملتقطة. هذا يخفيها في القائمة فقط. لإيقاف فك تشفير HTTPS استخدم «استثناء المضيف…».",
+ "filters.hosts": "المضيفون",
+ "filters.addHostWatermark": "أضف مضيفًا لإخفائه",
+ "filters.addHost": "إضافة مضيف",
+ "filters.processes": "العمليات",
+ "filters.addProcessWatermark": "أضف عملية لإخفائها",
+ "filters.addProcess": "إضافة عملية",
+ "filters.processSpace": "يُقصَر الاسم الذي يحتوي على مسافة عند الكلمة الأولى، وقد يخفي ذلك أسماء أخرى تحتوي على تلك الكلمة.",
+ "window.confirm": "تأكيد",
+ "window.excludeHost": "استثناء المضيف",
+ "exclude.action": "استثناء",
+ "exclude.help": "سيظل هذا المضيف ظاهرًا في قائمة الجلسات. لن يحاول Inspector قراءة HTTPS الخاص به.",
+ "window.logging": "التسجيل",
+ "logging.help": "اكتب رسائل تشخيص لاستكشاف الأخطاء. تُطبَّق التغييرات فورًا.",
+ "logging.enable": "تمكين التسجيل",
+ "logging.writeFile": "كتابة السجل إلى ملف",
+ "logging.detail": "مقدار التفصيل",
+ "logging.detailHelp": "Error = المشكلات فقط. Warning / Information = مزيد من السياق. Debug = تفصيل شديد.",
+ "logging.path": "مسار ملف السجل",
+ "window.excludedHosts": "المضيفون المستثنون",
+ "excluded.reset": "إعادة التعيين إلى الافتراضي",
+ "excluded.bypass": "تجاوز الوكيل (نظام التشغيل)",
+ "excluded.bypassHelp": "لا تصل الحركة إلى Inspector عندما يكون وكيل النظام قيد التشغيل. تُزرَع القائمة في البداية بمضيفين لـ Microsoft identity / SSO / RDP. إزالتهم قد تعطل تسجيل الدخول عبر RDP ما دام وكيل النظام ممكنًا.",
+ "excluded.notDecrypted": "مضيفون بلا فك تشفير",
+ "excluded.notDecryptedHelp": "يبقى CONNECT ظاهرًا؛ ويبقى TLS معتمًا عندما يكون فك تشفير HTTPS قيد التشغيل. تُزرَع القائمة في البداية بمضيفين يثبتون الشهادة (Dropbox، Webex).",
+ "excluded.learnHeading": "عدم فك التشفير تلقائيًا عند فشل فك التشفير",
+ "excluded.learn": "تعلّم المضيفين الذين يفشل TLS الأصل لديهم تحت فك التشفير",
+ "excluded.learnHelp": "عندما يفشل TLS الأصل مرارًا تحت فك التشفير، أو يعيد خادم الأصل 403/429، يتوقف Inspector عن فك تشفير ذلك المضيف للاتصالات اللاحقة في هذه الجلسة. القائمة محدودة وتُنسى عند إعادة التشغيل ما لم ترقِّ الإدخال.",
+ "excluded.learnPaused": "التعلّم متوقف مؤقتًا — تُحفَظ الإدخالات الحالية إلى أن تُنسى.",
+ "excluded.noneLearned": "لم يُتعلَّم أي مضيف بعد.",
+ "excluded.promote": "ترقية إلى مضيفين بلا فك تشفير",
+ "excluded.clearLearned": "مسح كل ما تم تعلّمه",
+ "window.retention": "الاحتفاظ بالجلسات",
+ "retention.max": "الحد الأقصى للجلسات المحتفَظ بها",
+ "retention.maxHelp": "كم طلبًا يبقى في قائمة الجلسات. عند التجاوز تغادر أقدم الصفوف القائمة لكنها تبقى على القرص إلى أن يزيلها «مسح الجلسات» أو حد مساحة القرص.",
+ "retention.cache": "مجلد ذاكرة التخزين المؤقت",
+ "retention.openCache": "فتح مجلد ذاكرة التخزين المؤقت",
+ "retention.clearCache": "مسح ذاكرة التخزين المؤقت للجلسات المحفوظة…",
+ "retention.advanced": "متقدم",
+ "retention.disk": "مساحة القرص للجلسات المحفوظة (MB)",
+ "retention.diskHelp": "الحد الأقصى لمساحة كل الجلسات المحفوظة على القرص (كل تشغيلات Inspector). يستخدم كل تشغيل مجلدًا فرعيًا بطابع زمني؛ وعند التجاوز تُحذف أقدم ملفات HAR أولًا. تُزال مجلدات التشغيل الفارغة.",
+ "loopback.intro": "تُمنع تطبيقات Windows Store وUWP من الوصول إلى localhost افتراضيًا. حدد التطبيقات التي يجب أن تستخدم Inspector ثم اضغط «تطبيق». أعد تشغيل كل تطبيق (أغلقه تمامًا) بعد «تطبيق». يجب أن يكون Inspector قيد التشغيل مع تفعيل وكيل النظام. يزيل «مسح الكل» كل إدخالات السماح.",
+ "loopback.closedUnchanged": "تطبيقات المتجر لم تتغير.",
+ "loopback.proxyStopped": "ابدأ الوكيل وفعّل وكيل النظام. لا يمكن التقاط تطبيقات المتجر إلا بعد تشغيل الاثنين.",
+ "loopback.systemProxyOff": "فعّل وكيل النظام (قائمة الالتقاط). قائمة السماح تتيح لتطبيقات المتجر الوصول إلى localhost فقط؛ وهي ما زالت تتبع وكيل النظام.",
+ "loopback.refreshing": "تحديث وكيل النظام حتى تعيد التطبيقات قيد التشغيل الاتصال…",
+ "loopback.unchangedCount": "قائمة السماح مطابقة بالفعل: {0}.",
+ "loopback.allowed": "تم السماح: {0}.",
+ "loopback.allowedRefreshed": " تم تحديث وكيل النظام حتى تعيد التطبيقات قيد التشغيل الاتصال. إذا لم تظهر الحركة بعد، أغلق التطبيق تمامًا ثم أعد فتحه.",
+ "loopback.allowedProxyStopped": " ابدأ الوكيل وفعّل وكيل النظام، ثم أغلق التطبيق تمامًا وأعد فتحه.",
+ "loopback.allowedSystemProxyOff": " فعّل وكيل النظام، ثم أغلق التطبيق تمامًا وأعد فتحه.",
+ "loopback.allowedReady": " أغلق التطبيق تمامًا وأعد فتحه لالتقاط الحركة.",
+ "loopback.clearedRefreshed": "تم مسح كل استثناءات الاسترجاع. تم تحديث وكيل النظام حتى تعيد التطبيقات قيد التشغيل الاتصال.",
+ "loopback.clearedReady": "تم مسح كل استثناءات الاسترجاع. أغلق تمامًا وأعد فتح أي تطبيق كان يستخدم Inspector.",
+ "loopback.cleared": "تم مسح كل استثناءات الاسترجاع.",
+ "trust.macWaitBody": "قد تعرض نافذة إحضار المعلومات في Keychain Access «الثقة دائمًا» حتى عندما لا تكون سياسات SSL محفوظة (ما زال Chrome وInspector يعدّان CA غير موثوق).\n\nأجبِر الحفظ:\n1. Keychain Access → login → الشهادات → انقر نقرًا مزدوجًا على Titanium Root Certificate Authority\n2. وسّع الثقة\n3. اضبط «عند استخدام هذه الشهادة» على «استخدام الإعدادات الافتراضية للنظام»، ثم غيّره مجددًا إلى «الثقة دائمًا»\n4. أغلق إحضار المعلومات — يجب أن يظهر طلب كلمة المرور؛ فهو الذي يكتب سياسات ثقة SSL الحقيقية\n\nتُغلق هذه النافذة تلقائيًا عند اكتشاف تلك السياسات. إذا كنت قد حفظت بالفعل، فانقر «لقد حفظت الثقة دائمًا».",
+ "trust.macWaitStatus": "بانتظار الشهادة في Keychain…",
+ "trust.macWaitInKeychain": "بانتظار سياسات SSL المحفوظة (بدّل الثقة دائمًا، أغلق إحضار المعلومات، أدخل كلمة المرور)…",
+ "trust.macNotSaved": "عرض «الثقة دائمًا» لا يكفي — بدّل «استخدام الإعدادات الافتراضية للنظام» → «الثقة دائمًا»، أغلق إحضار المعلومات، أدخل كلمة المرور، ثم أعد محاولة «تثبيت CA الجذر» / «فك تشفير HTTPS»",
+ "trust.macConfirmSaved": "لقد حفظت الثقة دائمًا",
+ "trust.exportCa": "تصدير CA",
+ "trust.install.mac": "يتطلب فك تشفير HTTPS الثقة في CA الجذر لـ Titanium Inspector في Keychain Access (سلسلة مفاتيح login). هل يُثبَّت الآن؟",
+ "trust.install.linux": "يتطلب فك تشفير HTTPS الثقة في CA الجذر لـ Titanium Inspector في مخزن شهادات المستخدم (NSS). هل يُثبَّت الآن؟",
+ "trust.install.windows": "يتطلب فك تشفير HTTPS الثقة في CA الجذر لـ Titanium Inspector في مخزن الجذر الموثوق للمستخدم الحالي. هل يُثبَّت الآن؟\n\nقد يعرض Windows مربع حوار أمان نعم/لا للجذر الموثوق (ليس UAC) — اختر نعم للثقة في CA.",
+ "trust.install.other": "يتطلب فك تشفير HTTPS الثقة في CA الجذر لـ Titanium Inspector على هذا الكمبيوتر. هل يُثبَّت الآن؟",
+ "trust.remove.mac": "هل تُزال CA الجذر لـ Titanium Inspector من Keychain؟ سيُوقف فك تشفير HTTPS.",
+ "trust.remove.linux": "هل تُزال CA الجذر لـ Titanium Inspector من مخزن شهادات المستخدم (NSS)؟ سيُوقف فك تشفير HTTPS.",
+ "trust.remove.windows": "هل تُزال CA الجذر لـ Titanium Inspector من مخزن الجذر الموثوق للمستخدم الحالي؟ سيُوقف فك تشفير HTTPS.",
+ "trust.remove.other": "هل تُزال CA الجذر لـ Titanium Inspector؟ سيُوقف فك تشفير HTTPS.",
+ "trust.elevate.mac": "فشلت الثقة على مستوى المستخدم أو لم تكن كافية. هل يُتابَع لعرض طلب كلمة مرور مسؤول macOS؟ الإلغاء يترك إعدادات الشهادات بلا تغيير.",
+ "trust.elevate.linux": "فشلت الثقة على مستوى المستخدم أو لم تكن كافية. هل يُتابَع لعرض طلب مسؤول polkit؟ الإلغاء يترك إعدادات الشهادات بلا تغيير.",
+ "trust.elevate.windows": "فشلت الثقة على مستوى المستخدم أو لم تكن كافية. هل يُتابَع لعرض UAC؟ الإلغاء يترك إعدادات الشهادات بلا تغيير.",
+ "trust.elevate.other": "فشلت الثقة على مستوى المستخدم أو لم تكن كافية. هل يُتابَع مع طلب مسؤول؟ الإلغاء يترك إعدادات الشهادات بلا تغيير.",
+ "trust.recovery.mac": "\n\nهل يُتابَع لعرض طلب كلمة مرور مسؤول macOS؟ «ليس الآن» يترك إعدادات الشهادات بلا تغيير.",
+ "trust.recovery.linux": "\n\nهل يُتابَع لعرض طلب مسؤول polkit؟ «ليس الآن» يترك إعدادات الشهادات بلا تغيير.",
+ "trust.recovery.windows": "\n\nهل يُتابَع لعرض UAC؟ «ليس الآن» يترك إعدادات الشهادات بلا تغيير.",
+ "trust.recovery.other": "\n\nهل يُتابَع مع طلب مسؤول؟ «ليس الآن» يترك إعدادات الشهادات بلا تغيير.",
+ "trust.hosts.mac": "يحتاج تجاوز نظام التشغيل إلى الالتقاط → وكيل النظام (يستخدم إعدادات وكيل شبكة macOS). تنطبق قواعد النفق فقط على كل عميل يصل إلى Inspector. زُرعت الإعدادات الافتراضية للمصنع في القوائم أدناه — عدّلها بحرية أو أعد تعيينها.",
+ "trust.hosts.linux": "يحتاج تجاوز نظام التشغيل إلى الالتقاط → وكيل النظام (يستخدم إعدادات وكيل سطح المكتب / البيئة). تنطبق قواعد النفق فقط على كل عميل يصل إلى Inspector. زُرعت الإعدادات الافتراضية للمصنع في القوائم أدناه — عدّلها بحرية أو أعد تعيينها.",
+ "trust.hosts.windows": "يحتاج تجاوز نظام التشغيل إلى الالتقاط → وكيل النظام (يستخدم WinINET). تنطبق قواعد النفق فقط على كل عميل يصل إلى Inspector. زُرعت الإعدادات الافتراضية للمصنع في القوائم أدناه — عدّلها بحرية أو أعد تعيينها.",
+ "trust.hosts.other": "يحتاج تجاوز نظام التشغيل إلى الالتقاط → وكيل النظام. تنطبق قواعد النفق فقط على كل عميل يصل إلى Inspector. زُرعت الإعدادات الافتراضية للمصنع في القوائم أدناه — عدّلها بحرية أو أعد تعيينها.",
+ "trust.localhost.mac": "عندما يكون وكيل النظام قيد التشغيل، أرسل localhost عبر Inspector. إيقاف التشغيل يضيف localhost إلى قائمة تجاوز وكيل macOS.",
+ "trust.localhost.linux": "عندما يكون وكيل النظام قيد التشغيل، أرسل localhost عبر Inspector. إيقاف التشغيل يضيف localhost إلى NO_PROXY.",
+ "trust.localhost.windows": "عندما يكون وكيل النظام قيد التشغيل، أرسل localhost عبر Inspector (WinINET <-loopback>). إيقاف التشغيل يتيح للاسترجاع تجاوز الوكيل.",
+ "trust.localhost.other": "عندما يكون وكيل النظام قيد التشغيل، أرسل localhost عبر Inspector.",
+ "trust.status.missing": "CA الجذر غير موثوق بعد — أعد المحاولة أو صدّر CA",
+ "trust.status.cancelled": "أُلغي تثبيت CA الجذر",
+ "trust.status.certutil": "أدوات شهادات المستعرض مفقودة — ثبّتها أو أعد المحاولة أو صدّر CA",
+ "trust.status.homebrew": "يلزم Homebrew لتثبيت أدوات الشهادات — صدّر CA للثقة يدويًا",
+ "trust.status.macConfirm": "اضبط «الثقة دائمًا» لـ CA الجذر الخاص بـ Titanium Inspector في Keychain Access",
+ "trust.status.keychain": "فشلت الثقة في Keychain — أعد المحاولة أو صدّر CA وثق به يدويًا",
+ "trust.fail.keychainTitle": "أكّد الثقة في Keychain",
+ "trust.fail.continueKeychain": "المتابعة في Keychain Access",
+ "trust.fail.toolsTitle": "أدوات الشهادات مطلوبة",
+ "trust.fail.toolsLinux": "يحتاج Inspector إلى certutil (أدوات NSS) لإتمام الثقة في CA الجذر.",
+ "trust.fail.toolsOther": "يحتاج Inspector إلى أدوات شهادات المستعرض لإتمام الثقة في CA الجذر.",
+ "trust.fail.tryAgain": "إعادة المحاولة",
+ "trust.fail.homebrewBody": "يلزم Homebrew لتثبيت أدوات الشهادات. صدّر CA للثقة به يدويًا.",
+ "trust.fail.title": "لا يمكن فك تشفير HTTPS بعد",
+ "trust.fail.body": "CA الجذر لـ Titanium Inspector غير موثوق على هذا الكمبيوتر بعد.",
+ "toolbar.throttle": "تقييد السرعة",
+ "toolbar.throttleTip": "أضف زمن الاستجابة وتشكيل عرض النطاق أثناء الالتقاط (كتابات الجسم / إطارات WebSocket). متوقف افتراضيًا.",
+ "toolbar.bindWatermark": "* أو localhost أو IP",
+ "toolbar.bindTip": "127.0.0.1 أو localhost = هذا الكمبيوتر فقط. 0.0.0.0 أو * = كل محولات الشبكة (بما في ذلك localhost).",
+ "toolbar.portWatermark": "* أو منفذ",
+ "toolbar.portTip": "* أو فارغ = منفذ يختاره نظام التشغيل (يظهر المنفذ الفعلي بعد البدء). خلاف ذلك 1–65535.",
+ "toolbar.listeningTip": "الوكيل يستمع",
+ "toolbar.trustHealthTip": "حالة ثقة CA الجذر لفك تشفير HTTPS. ثبّت CA أو امنحه الثقة إذا ظهرت عبارة غير موثوق.",
+ "chip.process": "عملية",
+ "inspect.request": "الطلب",
+ "inspect.requestTip": "ترويسات الطلب وجسمه",
+ "inspect.copyHeaders": "نسخ الترويسات",
+ "inspect.resizeTip": "اسحب لتغيير الحجم. انقر نقرًا مزدوجًا لإعادة التعيين.",
+ "inspect.pretty": "منسّق",
+ "inspect.hex": "ست عشري",
+ "inspect.hexTip": "إظهار الجسم كتفريغ ست عشري",
+ "inspect.saveRequest": "حفظ الطلب…",
+ "inspect.response": "الاستجابة",
+ "inspect.responseTip": "ترويسات الاستجابة وجسمها",
+ "inspect.saveResponse": "حفظ الاستجابة…",
+ "inspect.diff": "مقارنة",
+ "inspect.frames": "إطارات WS",
+ "inspect.framesHelp": "إطارات WebSocket المباشرة لهذه الجلسة (الاتجاه، ورمز العملية، ومعاينة الحمولة).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "أحداث مُرسلة من الخادم، محلَّلة من جسم الاستجابة.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "إظهار الترويسات",
+ "inspect.hideHeaders": "إخفاء الترويسات",
+ "inspect.headers": "الترويسات ({0})",
+ "inspect.prettyTip": "إزاحة JSON وXML وHTML",
+ "inspect.prettyHexTip": "لا ينطبق في عرض الست عشري",
+ "inspect.emptyBody": "(فارغ)",
+ "inspect.noRequestBody": "لا يوجد جسم للطلب",
+ "inspect.waiting": "في انتظار الاستجابة…",
+ "composer.help": "أنشئ طلبًا وأرسله عبر الوكيل. تحميل من المحدد ينسخ الجلسة الحالية.",
+ "composer.method": "الأسلوب",
+ "composer.url": "URL",
+ "composer.headers": "الترويسات (الاسم: القيمة في كل سطر)",
+ "composer.body": "الجسم",
+ "composer.loadSelected": "تحميل من المحدد",
+ "composer.loadBody": "تحميل الجسم من ملف…",
+ "composer.send": "إرسال",
+ "bp.help": "أوقف مؤقتًا طلبات العميل المطابقة لتحرير الجسم، أو المتابعة، أو الإحباط. إيقاف واحد في كل مرة؛ وتُستأنف تلقائيًا بعد 120s. إلغاء تحديد مُفعّل يتابع الطلب المتوقف مؤقتًا.",
+ "bp.enabled": "مُفعّل",
+ "bp.breakOnResponse": "التوقف عند الاستجابة",
+ "bp.match": "مطابقة",
+ "bp.urlWatermark": "تصفية URL (* = الكل، مثل *api*/users*)",
+ "bp.graphqlWatermark": "عملية GraphQL هذه فقط (اختياري)",
+ "bp.graphqlTip": "عامل تصفية إضافي على جسم طلب العميل. يطابق operationName في JSON أو استعلامًا مسمّى. اتركه فارغًا لمطابقة كل عملية على URL.",
+ "bp.fromSelected": "من الجلسة المحددة",
+ "bp.fromSelectedTip": "انسخ اسم عملية GraphQL من طلب الجلسة المحددة.",
+ "bp.graphqlHelp": "اترك مربع GraphQL فارغًا لمطابقة كل عملية. املأه (مثل GetUser) لإيقاف طلب العميل ذلك فقط مؤقتًا على URL أعلاه. ما زال التوقف عند الاستجابة يستخدم عامل تصفية URL.",
+ "bp.editWatermark": "تحرير الجسم (تطبيق تحرير الجسم، ثم متابعة)",
+ "bp.applyEdit": "تطبيق تحرير الجسم",
+ "bp.continue": "متابعة",
+ "bp.abort": "إحباط",
+ "ar.help": "أعد استجابة مزيفة قبل الخادم الحقيقي. تحدد المطابقة طلبات العميل التي تنطبق عليها القاعدة؛ والحقول أسفل ذلك هي ما ترسله في الرد.",
+ "ar.enabled": "مُفعّل (قبل نقاط التوقف)",
+ "ar.urlWatermark": "مطابقة URL (رموز * البدل)",
+ "ar.graphqlHelp": "يمكن لعمليات GraphQL المختلفة على URL نفسه أن تستخدم قواعد مختلفة. اتركه فارغًا لمطابقة كل عملية.",
+ "ar.respondWith": "الرد بواسطة",
+ "ar.statusTip": "حالة HTTP. الفارغ = 200. استخدم 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "ملف Map Local (اختياري)",
+ "ar.bodyWatermark": "جسم الاستجابة (يُستخدم عندما يكون Map Local فارغًا)",
+ "ar.add": "إضافة قاعدة",
+ "ar.update": "تحديث القاعدة",
+ "ar.delete": "حذف القاعدة",
+ "script.intro": "أمر واحد في كل سطر، على كل جلسة مُلتقَطة. هذا ليس JavaScript ولا C# — اكتب الأوامر أدناه فقط.",
+ "script.what": "ما يمكنك كتابته",
+ "script.setHeaderHelp": "أضف ترويسة أو استبدلها. تستمر الحركة نحو الخادم.",
+ "script.setStatusHelp": "عند الطلب: أجب الآن وتجاوز الخادم. عند الاستجابة: غيّر الحالة التي يراها العميل.",
+ "script.abortHelp": "احجب باستخدام 403 Forbidden. أضف سطر set-status لاختيار رمز مختلف.",
+ "script.comment": "ابدأ السطر بـ # أو // لتعليق. يمكنك الجمع بين الأوامر؛ ضع كل أمر في سطره.",
+ "script.onRequest": "عند الطلب",
+ "script.onResponse": "عند الاستجابة",
+ "script.requestSkips": "abort أو set-status هنا يتجاوز AutoResponder ونقاط التوقف والأصل.",
+ "map.help": "أعد كتابة طلبات العميل المطابقة إلى أصل آخر قبل الخادم الحقيقي. استخدم علامة * واحدة في المطابقة والهدف للإبقاء على لاحقة المسار/الاستعلام. يعمل بعد AutoResponder / Map Local.",
+ "map.graphqlHelp": "اتركه فارغًا لإعادة كتابة كل عملية على URL. املأه لإعادة كتابة عملية GraphQL تلك فقط.",
+ "map.rewriteTo": "إعادة الكتابة إلى",
+ "map.targetWatermark": "URL الهدف (مطلق، و* اختياري)",
+ "loopback.allow": "سماح",
+ "loopback.appName": "اسم التطبيق",
+ "loopback.packageId": "معرّف الحزمة",
+ "status.ready": "جاهز",
+ "status.searchingBodies": "جارٍ البحث في الأجسام…",
+ "status.proxyStopped": "توقف الوكيل",
+ "status.proxyRunning": "الوكيل يعمل على {0}",
+ "trust.health.trusted": "CA موثوق",
+ "trust.health.untrusted": "CA غير موثوق"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.cs.json b/src/Titanium.Inspector/Localization/strings.cs.json
new file mode 100644
index 000000000..341bc63d9
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.cs.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Soubor",
+ "menu.exportAllHar": "Exportovat celý HAR…",
+ "menu.exportSelectedHar": "Exportovat vybraný HAR…",
+ "menu.importHar": "Importovat HAR…",
+ "menu.exportAllArchive": "Exportovat celý archiv…",
+ "menu.exportSelectedArchive": "Exportovat vybraný archiv…",
+ "menu.importArchive": "Importovat archiv…",
+ "menu.exit": "Ukončit",
+ "menu.capture": "Zachytávání",
+ "menu.startProxy": "Spustit proxy",
+ "menu.stopProxy": "Zastavit proxy",
+ "menu.capturing": "Zachytávat",
+ "menu.clearSessions": "Vymazat relace",
+ "menu.removeSelected": "Odebrat vybrané",
+ "menu.autoStartCapture": "Automaticky spustit zachytávání",
+ "menu.autoSystemProxy": "Automaticky zapnout systémové proxy při startu",
+ "menu.decryptHttps": "Dešifrovat HTTPS",
+ "menu.systemProxy": "Systémové proxy",
+ "menu.captureLocal": "Zachytávat místní provoz",
+ "menu.allowStoreApps": "Povolit aplikace Store…",
+ "menu.installCa": "Nainstalovat kořenovou CA (aktuální uživatel)",
+ "menu.removeCa": "Odebrat kořenovou CA (aktuální uživatel)",
+ "menu.rotateCa": "Vymazat a znovu nainstalovat kořenovou CA…",
+ "menu.removeOldCas": "Odebrat staré kořenové CA…",
+ "menu.exportCa": "Exportovat kořenovou CA…",
+ "menu.trustFirefox": "Důvěřovat CA ve Firefoxu…",
+ "menu.deviceCa": "Nastavit CA externího zařízení",
+ "menu.tools": "Nástroje",
+ "menu.composer": "Sestavovač…",
+ "menu.breakpoints": "Zarážky…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Skripty…",
+ "menu.mapRemote": "Vzdálené mapování…",
+ "menu.options": "Možnosti",
+ "menu.theme": "Motiv",
+ "menu.themeLight": "Světlý",
+ "menu.themeDark": "Tmavý",
+ "menu.themeAutomatic": "Automatický",
+ "menu.language": "Jazyk",
+ "menu.languageAutomatic": "Automaticky",
+ "menu.columns": "Sloupce",
+ "menu.col.id": "ID",
+ "menu.col.method": "Metoda",
+ "menu.col.status": "Stav",
+ "menu.col.host": "Hostitel",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protokol",
+ "menu.col.duration": "Trvání",
+ "menu.col.ttfb": "Čekání (TTFB)",
+ "menu.col.size": "Velikost",
+ "menu.col.process": "Proces",
+ "menu.col.started": "Zahájeno",
+ "menu.col.scheme": "Schéma",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Obnovit sloupce",
+ "menu.sessionRetention": "Uchovávání relací…",
+ "menu.excludedHosts": "Vyloučení hostitelé…",
+ "menu.excludedHostsTip": "Seznamy přeskakování dešifrování HTTPS a pravidla obejití systému",
+ "menu.ignoreCerts": "Ignorovat nezabezpečené certifikáty serverů",
+ "menu.addVia": "Přidat hlavičku Via",
+ "menu.addViaTip": "Připojit Via: … titanium-web-proxy k zachycenému provozu (RFC 9110). Vypnutí zakáže vkládání i detekci smyčky Via.",
+ "menu.logging": "Protokolování…",
+ "menu.resetSettings": "Obnovit nastavení Inspector…",
+ "menu.help": "Nápověda",
+ "menu.checkUpdates": "Zkontrolovat aktualizace…",
+ "menu.checkUpdatesStartup": "Kontrolovat aktualizace při spuštění",
+ "menu.updateChannel": "Kanál aktualizací",
+ "menu.channelStable": "Stabilní",
+ "menu.channelBeta": "Beta",
+ "menu.about": "O aplikaci Titanium Inspector…",
+ "toolbar.searchWatermark": "Hledat URL, hostitele, proces… (nebo method:GET status:4xx)",
+ "toolbar.searchTip": "Holý text prohledává URL, hostitele, název procesu, přesné ID procesu, metodu a stav. Předpony omezí hledání na jedno pole: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: prohledává i těla odložená na disk. Před polem nebo slovem uveďte -, chcete-li je vyloučit (např. -host:cursor.sh nebo -cursor). Filtry upravují skryté hostitele a procesy ve větším okně.",
+ "toolbar.filters": "Filtry",
+ "toolbar.filtersTip": "Upravit hledání a skryté hostitele nebo procesy ve větším okně",
+ "toolbar.hideConnect": "Skrýt CONNECT",
+ "toolbar.hideConnectTip": "Skrýt neprůhledné tunely HTTPS, když je Dešifrovat HTTPS vypnuté",
+ "toolbar.hideImages": "Skrýt obrázky",
+ "toolbar.errorsOnly": "Jen chyby",
+ "toolbar.clearFilters": "Vymazat filtry",
+ "toolbar.hidden": "Skryté",
+ "ctx.replay": "Znovu odeslat",
+ "ctx.loadComposer": "Načíst do sestavovače",
+ "ctx.saveRequest": "Uložit tělo požadavku…",
+ "ctx.saveResponse": "Uložit tělo odpovědi…",
+ "ctx.copyUrl": "Kopírovat URL",
+ "ctx.copyCurl": "Kopírovat jako curl",
+ "ctx.copyFetch": "Kopírovat jako fetch",
+ "ctx.diff": "Porovnat vybrané…",
+ "ctx.filterHost": "Filtrovat podle hostitele",
+ "ctx.hideHost": "Skrýt hostitele",
+ "ctx.filterProcess": "Filtrovat podle procesu",
+ "ctx.hideProcess": "Skrýt proces",
+ "ctx.excludeHost": "Vyloučit hostitele…",
+ "ctx.excludeHostTip": "Přestat dešifrovat HTTPS tohoto hostitele. Řádky zůstanou v seznamu; použijte Skrýt hostitele, chcete-li je odebrat ze zobrazení.",
+ "grid.duration": "Trvání (ms)",
+ "grid.wait": "Čekání (ms)",
+ "pane.inspect": "Kontrola",
+ "pane.composer": "Sestavovač",
+ "pane.breakpoints": "Zarážky",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Skripty",
+ "pane.mapRemote": "Vzdálené mapování",
+ "pane.closeTip": "Zavřít panel",
+ "inspect.empty": "Vyberte relaci v mřížce a prohlédněte si hlavičky a těla požadavku a odpovědi.",
+ "common.ok": "OK",
+ "common.cancel": "Zrušit",
+ "common.save": "Uložit",
+ "common.apply": "Použít",
+ "common.remove": "Odebrat",
+ "common.browse": "Procházet…",
+ "common.openFolder": "Otevřít složku",
+ "common.forget": "Zapomenout",
+ "common.close": "Zavřít",
+ "loopback.window": "Povolit aplikacím Store používat toto proxy",
+ "loopback.checkAll": "Zaškrtnout vše",
+ "loopback.uncheckAll": "Zrušit zaškrtnutí všech",
+ "loopback.filterWatermark": "Filtrovat podle názvu aplikace…",
+ "loopback.clearAll": "Vymazat vše",
+ "trust.macWindow": "Potvrďte důvěru v Keychain Access",
+ "trust.openKeychain": "Otevřít Keychain Access",
+ "trust.notNow": "Teď ne",
+ "trust.recoveryTitle": "Důvěra ke kořenové CA",
+ "trust.macWaitPlaceholder": "Čekání na důvěru SSL…",
+ "window.about": "O aplikaci Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Autorská práva © Jehonathan Thomas",
+ "about.license": "Licencováno pod licencí PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Podrobnosti licence",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filtry",
+ "filters.search": "Hledání",
+ "filters.searchHelp": "Stejné hledání jako na panelu nástrojů, s více místem. Skrytí hostitelé a procesy jsou uvedeni níže, ne v tomto poli.",
+ "filters.searchWatermark": "URL, hostitel, proces, method:GET, status:4xx…",
+ "filters.hideHeading": "Skrýt ze seznamu",
+ "filters.hideHelp": "Řádky zůstávají zachycené. Tím je jen skryjete v seznamu. Chcete-li přestat dešifrovat HTTPS, použijte Vyloučit hostitele…",
+ "filters.hosts": "Hostitelé",
+ "filters.addHostWatermark": "Přidat hostitele ke skrytí",
+ "filters.addHost": "Přidat hostitele",
+ "filters.processes": "Procesy",
+ "filters.addProcessWatermark": "Přidat proces ke skrytí",
+ "filters.addProcess": "Přidat proces",
+ "filters.processSpace": "Název s mezerou se zkrátí u prvního slova, což může skrýt i jiné názvy obsahující toto slovo.",
+ "window.confirm": "Potvrzení",
+ "window.excludeHost": "Vyloučit hostitele",
+ "exclude.action": "Vyloučit",
+ "exclude.help": "Tento hostitel se dál zobrazí v seznamu relací. Inspector se nepokusí číst jeho HTTPS.",
+ "window.logging": "Protokolování",
+ "logging.help": "Zapisovat diagnostické zprávy pro řešení problémů. Změny se projeví okamžitě.",
+ "logging.enable": "Povolit protokolování",
+ "logging.writeFile": "Zapisovat protokol do souboru",
+ "logging.detail": "Míra podrobností",
+ "logging.detailHelp": "Error = pouze problémy. Warning / Information = více souvislostí. Debug = velmi podrobné.",
+ "logging.path": "Cesta k souboru protokolu",
+ "window.excludedHosts": "Vyloučení hostitelé",
+ "excluded.reset": "Obnovit výchozí",
+ "excluded.bypass": "Obejít proxy (systém)",
+ "excluded.bypassHelp": "Provoz se k Inspector nedostane, když je systémové proxy zapnuté. Předvyplněno hostiteli identity Microsoft / SSO / RDP. Jejich odebrání může narušit přihlášení RDP, dokud je systémové proxy zapnuté.",
+ "excluded.notDecrypted": "Nedešifrovaní hostitelé",
+ "excluded.notDecryptedHelp": "CONNECT zůstává viditelný; TLS zůstává neprůhledné, když je Dešifrovat HTTPS zapnuté. Předvyplněno hostiteli s připnutím certifikátu (Dropbox, Webex).",
+ "excluded.learnHeading": "Automaticky nedešifrovat při selhání dešifrování",
+ "excluded.learn": "Učit se hostitele, jejichž původní TLS selže při dešifrování",
+ "excluded.learnHelp": "Když původní TLS opakovaně selže při dešifrování nebo původní server vrátí 403/429, Inspector přestane tohoto hostitele dešifrovat u pozdějších spojení v této relaci. Seznam je omezený a po restartu se zapomene, pokud ho nepovýšíte.",
+ "excluded.learnPaused": "Učení pozastaveno — stávající položky zůstanou, dokud je nezapomenete.",
+ "excluded.noneLearned": "Zatím nebyli naučeni žádní hostitelé.",
+ "excluded.promote": "Povýšit mezi nedešifrované hostitele",
+ "excluded.clearLearned": "Vymazat všechny naučené",
+ "window.retention": "Uchovávání relací",
+ "retention.max": "Maximální počet uchovávaných relací",
+ "retention.maxHelp": "Kolik požadavků zůstane v seznamu relací. Při překročení nejstarší řádky opustí seznam, ale zůstanou na disku, dokud je neodebere Vymazat relace nebo limit místa na disku.",
+ "retention.cache": "Složka mezipaměti",
+ "retention.openCache": "Otevřít složku mezipaměti",
+ "retention.clearCache": "Vymazat uloženou mezipaměť relací…",
+ "retention.advanced": "Upřesnit",
+ "retention.disk": "Místo na disku pro uložené relace (MB)",
+ "retention.diskHelp": "Maximální místo na disku pro všechny uložené relace (všechna spuštění Inspector). Každé spuštění používá podsložku s časovým razítkem; při překročení se nejdříve mažou nejstarší soubory HAR. Prázdné složky spuštění se odstraní.",
+ "loopback.intro": "Aplikace Windows Store / UWP mají ve výchozím stavu zablokovaný přístup k localhost. Zaškrtněte aplikace, které mají používat Inspector, a pak Použít. Po Použít každou aplikaci restartujte (úplně ji ukončete). Inspector musí běžet se zapnutým systémovým proxy. Vymazat vše odebere všechny položky povolení.",
+ "loopback.closedUnchanged": "Aplikace Store beze změny.",
+ "loopback.proxyStopped": "Spusťte proxy a zapněte systémové proxy. Aplikace Store nelze zachytit, dokud nejsou obě zapnuté.",
+ "loopback.systemProxyOff": "Zapněte systémové proxy (nabídka Zachytávání). Seznam povolení jen umožní aplikacím Store dosáhnout localhost; dál se řídí systémovým proxy.",
+ "loopback.refreshing": "Obnovování systémového proxy, aby se spuštěné aplikace znovu připojily…",
+ "loopback.unchangedCount": "Seznam povolení už odpovídá: {0}.",
+ "loopback.allowed": "Povoleno: {0}.",
+ "loopback.allowedRefreshed": " Systémové proxy bylo obnoveno, aby se spuštěné aplikace znovu připojily. Pokud se provoz stále nezobrazuje, aplikaci úplně ukončete a znovu otevřete.",
+ "loopback.allowedProxyStopped": " Spusťte proxy a zapněte systémové proxy, potom aplikaci úplně ukončete a znovu otevřete.",
+ "loopback.allowedSystemProxyOff": " Zapněte systémové proxy, potom aplikaci úplně ukončete a znovu otevřete.",
+ "loopback.allowedReady": " Aplikaci úplně ukončete a znovu otevřete, aby se provoz zachytil.",
+ "loopback.clearedRefreshed": "Všechny výjimky loopback byly vymazány. Systémové proxy bylo obnoveno, aby se spuštěné aplikace znovu připojily.",
+ "loopback.clearedReady": "Všechny výjimky loopback byly vymazány. Úplně ukončete a znovu otevřete každou aplikaci, která používala Inspector.",
+ "loopback.cleared": "Všechny výjimky loopback byly vymazány.",
+ "trust.macWaitBody": "Informace ve Keychain už mohou ukazovat Vždy důvěřovat, i když zásady SSL nebyly uloženy (Chrome a Inspector dál považují CA za nedůvěryhodnou).\n\nVynuťte uložení:\n1. Keychain Access → login → Certifikáty → poklepejte na Titanium Root Certificate Authority\n2. Rozbalte Důvěra\n3. Nastavte Při použití tohoto certifikátu na Použít výchozí nastavení systému a pak to znovu změňte na Vždy důvěřovat\n4. Zavřete Informace — musí se zobrazit výzva k heslu; ta zapíše skutečné zásady důvěry SSL\n\nToto okno se zavře automaticky, jakmile se tyto zásady zjistí. Pokud jste už uložili, klikněte na Uložil jsem Vždy důvěřovat.",
+ "trust.macWaitStatus": "Čekání na certifikát ve Keychain…",
+ "trust.macWaitInKeychain": "Čekání na uložené zásady SSL (přepněte Vždy důvěřovat, zavřete Informace, zadejte heslo)…",
+ "trust.macNotSaved": "Samotné zobrazení Vždy důvěřovat nestačí — přepněte Použít výchozí nastavení systému → Vždy důvěřovat, zavřete Informace, zadejte heslo a zkuste znovu Nainstalovat kořenovou CA / Dešifrovat HTTPS",
+ "trust.macConfirmSaved": "Uložil jsem Vždy důvěřovat",
+ "trust.exportCa": "Exportovat CA",
+ "trust.install.mac": "Dešifrování HTTPS vyžaduje důvěru ke kořenové CA Titanium Inspector v Keychain Access (svazek klíčů login). Nainstalovat teď?",
+ "trust.install.linux": "Dešifrování HTTPS vyžaduje důvěru ke kořenové CA Titanium Inspector v uživatelském úložišti certifikátů (NSS). Nainstalovat teď?",
+ "trust.install.windows": "Dešifrování HTTPS vyžaduje důvěru ke kořenové CA Titanium Inspector v úložišti důvěryhodných kořenových certifikačních autorit aktuálního uživatele. Nainstalovat teď?\n\nWindows může zobrazit zabezpečovací dialog Ano/Ne pro důvěryhodný kořen (nejde o UAC) — zvolte Ano, abyste CA důvěřovali.",
+ "trust.install.other": "Dešifrování HTTPS vyžaduje důvěru ke kořenové CA Titanium Inspector na tomto počítači. Nainstalovat teď?",
+ "trust.remove.mac": "Odebrat kořenovou CA Titanium Inspector z Keychain? Dešifrování HTTPS se vypne.",
+ "trust.remove.linux": "Odebrat kořenovou CA Titanium Inspector z uživatelského úložiště certifikátů (NSS)? Dešifrování HTTPS se vypne.",
+ "trust.remove.windows": "Odebrat kořenovou CA Titanium Inspector z úložiště důvěryhodných kořenových certifikačních autorit aktuálního uživatele? Dešifrování HTTPS se vypne.",
+ "trust.remove.other": "Odebrat kořenovou CA Titanium Inspector? Dešifrování HTTPS se vypne.",
+ "trust.elevate.mac": "Důvěra na úrovni uživatele selhala nebo nestačila. Pokračovat a zobrazit výzvu k heslu správce macOS? Zrušit ponechá nastavení certifikátů beze změny.",
+ "trust.elevate.linux": "Důvěra na úrovni uživatele selhala nebo nestačila. Pokračovat a zobrazit výzvu správce polkit? Zrušit ponechá nastavení certifikátů beze změny.",
+ "trust.elevate.windows": "Důvěra na úrovni uživatele selhala nebo nestačila. Pokračovat a zobrazit UAC? Zrušit ponechá nastavení certifikátů beze změny.",
+ "trust.elevate.other": "Důvěra na úrovni uživatele selhala nebo nestačila. Pokračovat s výzvou správce? Zrušit ponechá nastavení certifikátů beze změny.",
+ "trust.recovery.mac": "\n\nPokračovat a zobrazit výzvu k heslu správce macOS? Teď ne ponechá nastavení certifikátů beze změny.",
+ "trust.recovery.linux": "\n\nPokračovat a zobrazit výzvu správce polkit? Teď ne ponechá nastavení certifikátů beze změny.",
+ "trust.recovery.windows": "\n\nPokračovat a zobrazit UAC? Teď ne ponechá nastavení certifikátů beze změny.",
+ "trust.recovery.other": "\n\nPokračovat s výzvou správce? Teď ne ponechá nastavení certifikátů beze změny.",
+ "trust.hosts.mac": "Obejítí systému vyžaduje Zachytávání → Systémové proxy (používá nastavení síťového proxy macOS). Pravidla jen pro tunel platí pro každého klienta, který se dostane k Inspector. Tovární výchozí hodnoty jsou předvyplněny v seznamech níže — upravujte volně nebo obnovte.",
+ "trust.hosts.linux": "Obejítí systému vyžaduje Zachytávání → Systémové proxy (používá nastavení proxy plochy nebo prostředí). Pravidla jen pro tunel platí pro každého klienta, který se dostane k Inspector. Tovární výchozí hodnoty jsou předvyplněny v seznamech níže — upravujte volně nebo obnovte.",
+ "trust.hosts.windows": "Obejítí systému vyžaduje Zachytávání → Systémové proxy (používá WinINET). Pravidla jen pro tunel platí pro každého klienta, který se dostane k Inspector. Tovární výchozí hodnoty jsou předvyplněny v seznamech níže — upravujte volně nebo obnovte.",
+ "trust.hosts.other": "Obejítí systému vyžaduje Zachytávání → Systémové proxy. Pravidla jen pro tunel platí pro každého klienta, který se dostane k Inspector. Tovární výchozí hodnoty jsou předvyplněny v seznamech níže — upravujte volně nebo obnovte.",
+ "trust.localhost.mac": "Když je systémové proxy zapnuté, posílejte localhost přes Inspector. Vypnutí přidá localhost do seznamu obejití proxy macOS.",
+ "trust.localhost.linux": "Když je systémové proxy zapnuté, posílejte localhost přes Inspector. Vypnutí přidá localhost do NO_PROXY.",
+ "trust.localhost.windows": "Když je systémové proxy zapnuté, posílejte localhost přes Inspector (WinINET <-loopback>). Vypnutí nechá loopback obejít proxy.",
+ "trust.localhost.other": "Když je systémové proxy zapnuté, posílejte localhost přes Inspector.",
+ "trust.status.missing": "Kořenová CA ještě není důvěryhodná — zkuste to znovu, nebo Exportovat CA",
+ "trust.status.cancelled": "Instalace kořenové CA zrušena",
+ "trust.status.certutil": "Chybí nástroje certifikátů prohlížeče — nainstalujte je, zkuste to znovu, nebo Exportovat CA",
+ "trust.status.homebrew": "Homebrew je nutný k instalaci nástrojů certifikátů — Exportovat CA a důvěřovat ručně",
+ "trust.status.macConfirm": "Nastavte Vždy důvěřovat pro kořenovou CA Titanium Inspector v Keychain Access",
+ "trust.status.keychain": "Důvěra Keychain selhala — zkuste to znovu, nebo Exportovat CA a důvěřovat ručně",
+ "trust.fail.keychainTitle": "Potvrďte důvěru ve Keychain",
+ "trust.fail.continueKeychain": "Pokračovat v Keychain Access",
+ "trust.fail.toolsTitle": "Jsou potřeba nástroje certifikátů",
+ "trust.fail.toolsLinux": "Inspector potřebuje certutil (nástroje NSS), aby dokončil důvěru ke kořenové CA.",
+ "trust.fail.toolsOther": "Inspector potřebuje nástroje certifikátů prohlížeče, aby dokončil důvěru ke kořenové CA.",
+ "trust.fail.tryAgain": "Zkusit znovu",
+ "trust.fail.homebrewBody": "Homebrew je nutný k instalaci nástrojů certifikátů. Exportujte CA a důvěřujte ručně.",
+ "trust.fail.title": "HTTPS zatím nelze dešifrovat",
+ "trust.fail.body": "Kořenová CA Titanium Inspector ještě není důvěryhodná na tomto počítači.",
+ "toolbar.throttle": "Omezení",
+ "toolbar.throttleTip": "Přidá zpoždění a tvarování šířky pásma během zachytávání (zápisy těla / rámce WebSocket). Ve výchozím stavu vypnuto.",
+ "toolbar.bindWatermark": "*, localhost nebo IP",
+ "toolbar.bindTip": "127.0.0.1 nebo localhost = jen tento počítač. 0.0.0.0 nebo * = všechny síťové adaptéry (včetně localhost).",
+ "toolbar.portWatermark": "*, nebo port",
+ "toolbar.portTip": "* nebo prázdné = port zvolený systémem (skutečný port se zobrazí po spuštění). Jinak 1–65535.",
+ "toolbar.listeningTip": "Proxy naslouchá",
+ "toolbar.trustHealthTip": "Stav důvěry kořenové CA pro Dešifrovat HTTPS. Nainstalujte CA nebo jí důvěřujte, pokud je zde uvedeno, že CA není důvěryhodná.",
+ "chip.process": "proces",
+ "inspect.request": "Požadavek",
+ "inspect.requestTip": "Hlavičky a tělo požadavku",
+ "inspect.copyHeaders": "Kopírovat hlavičky",
+ "inspect.resizeTip": "Tažením změňte velikost. Dvojitým kliknutím obnovíte výchozí velikost.",
+ "inspect.pretty": "Formátovaně",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Zobrazit tělo jako výpis Hex",
+ "inspect.saveRequest": "Uložit požadavek…",
+ "inspect.response": "Odpověď",
+ "inspect.responseTip": "Hlavičky a tělo odpovědi",
+ "inspect.saveResponse": "Uložit odpověď…",
+ "inspect.diff": "Rozdíl",
+ "inspect.frames": "Rámce WS",
+ "inspect.framesHelp": "Živé rámce WebSocket této relace (směr, opcode, náhled dat).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events načtené z těla odpovědi.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Zobrazit hlavičky",
+ "inspect.hideHeaders": "Skrýt hlavičky",
+ "inspect.headers": "Hlavičky ({0})",
+ "inspect.prettyTip": "Odsadit JSON, XML a HTML",
+ "inspect.prettyHexTip": "V zobrazení Hex nelze použít",
+ "inspect.emptyBody": "(prázdné)",
+ "inspect.noRequestBody": "Žádné tělo požadavku",
+ "inspect.waiting": "Čekání na odpověď…",
+ "composer.help": "Sestavte a odešlete požadavek přes proxy. Načíst z vybrané zkopíruje aktuální relaci.",
+ "composer.method": "Metoda",
+ "composer.url": "URL",
+ "composer.headers": "Hlavičky (Název: Hodnota na řádek)",
+ "composer.body": "Tělo",
+ "composer.loadSelected": "Načíst z vybrané",
+ "composer.loadBody": "Načíst tělo ze souboru…",
+ "composer.send": "Odeslat",
+ "bp.help": "Pozastaví odpovídající požadavky klienta, abyste mohli upravit tělo, pokračovat nebo je přerušit. Najednou jen jedna pauza; po 120s se automaticky pokračuje. Zrušení zaškrtnutí Povoleno pokračuje v pozastaveném požadavku.",
+ "bp.enabled": "Povoleno",
+ "bp.breakOnResponse": "Zastavit u odpovědi",
+ "bp.match": "Shoda",
+ "bp.urlWatermark": "Filtr URL (* = vše, např. *api*/users*)",
+ "bp.graphqlWatermark": "Jen tato operace GraphQL (volitelné)",
+ "bp.graphqlTip": "Další filtr těla požadavku klienta. Odpovídá poli JSON operationName nebo pojmenovanému dotazu. Nechte prázdné, chcete-li odpovídat každé operaci na daném URL.",
+ "bp.fromSelected": "Z vybrané relace",
+ "bp.fromSelectedTip": "Zkopíruje název operace GraphQL z požadavku vybrané relace.",
+ "bp.graphqlHelp": "Nechte pole GraphQL prázdné, chcete-li odpovídat každé operaci. Vyplňte je (např. GetUser), chcete-li pozastavit jen tento požadavek klienta na URL výše. Zastavit u odpovědi dál používá filtr URL.",
+ "bp.editWatermark": "Upravit tělo (Použít úpravu těla, potom Pokračovat)",
+ "bp.applyEdit": "Použít úpravu těla",
+ "bp.continue": "Pokračovat",
+ "bp.abort": "Přerušit",
+ "ar.help": "Vrátí falešnou odpověď ještě před skutečným serverem. Shoda určuje, na které požadavky klienta se pravidlo vztahuje; pole pod ní jsou to, co odešlete zpět.",
+ "ar.enabled": "Povoleno (před zarážkami)",
+ "ar.urlWatermark": "Shoda URL (zástupné znaky *)",
+ "ar.graphqlHelp": "Stejné URL a různé operace GraphQL mohou používat různá pravidla. Nechte prázdné, chcete-li odpovídat každé operaci.",
+ "ar.respondWith": "Odpovědět takto",
+ "ar.statusTip": "Stav HTTP. Prázdné = 200. Použijte 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Soubor Map Local (volitelné)",
+ "ar.bodyWatermark": "Tělo odpovědi (použije se, když je Map Local prázdné)",
+ "ar.add": "Přidat pravidlo",
+ "ar.update": "Aktualizovat pravidlo",
+ "ar.delete": "Odstranit pravidlo",
+ "script.intro": "Jeden příkaz na řádek, u každé zachycené relace. Toto není JavaScript ani C# — pište jen příkazy níže.",
+ "script.what": "Co můžete napsat",
+ "script.setHeaderHelp": "Přidá nebo nahradí hlavičku. Provoz dál pokračuje na server.",
+ "script.setStatusHelp": "U požadavku: odpovědět hned a přeskočit server. U odpovědi: změnit stav, který uvidí klient.",
+ "script.abortHelp": "Zablokovat stavem 403 Zakázáno. Přidejte řádek set-status, chcete-li jiný kód.",
+ "script.comment": "Řádek začínající # nebo // je komentář. Příkazy můžete kombinovat; každý dejte na vlastní řádek.",
+ "script.onRequest": "U požadavku",
+ "script.onResponse": "U odpovědi",
+ "script.requestSkips": "abort nebo set-status zde přeskočí AutoResponder, zarážky a původní server.",
+ "map.help": "Přepíše odpovídající požadavky klienta na jiný původ před skutečným serverem. Použijte jedno * ve shodě i v cíli, aby se zachovala přípona cesty nebo dotazu. Běží po AutoResponder / Map Local.",
+ "map.graphqlHelp": "Nechte prázdné, chcete-li přepsat každou operaci na URL. Vyplňte, chcete-li přepsat jen tuto operaci GraphQL.",
+ "map.rewriteTo": "Přepsat na",
+ "map.targetWatermark": "Cílové URL (absolutní, volitelně *)",
+ "loopback.allow": "Povolit",
+ "loopback.appName": "Název aplikace",
+ "loopback.packageId": "ID balíčku",
+ "status.ready": "Připraveno",
+ "status.searchingBodies": "Prohledávání těl…",
+ "status.proxyStopped": "Proxy zastaveno",
+ "status.proxyRunning": "Proxy běží na {0}",
+ "trust.health.trusted": "CA důvěryhodná",
+ "trust.health.untrusted": "CA není důvěryhodná"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.da.json b/src/Titanium.Inspector/Localization/strings.da.json
new file mode 100644
index 000000000..30b06b1dc
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.da.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Filer",
+ "menu.exportAllHar": "Eksportér al HAR…",
+ "menu.exportSelectedHar": "Eksportér valgt HAR…",
+ "menu.importHar": "Importér HAR…",
+ "menu.exportAllArchive": "Eksportér hele arkivet…",
+ "menu.exportSelectedArchive": "Eksportér valgt arkiv…",
+ "menu.importArchive": "Importér arkiv…",
+ "menu.exit": "Afslut",
+ "menu.capture": "Optagelse",
+ "menu.startProxy": "Start proxyen",
+ "menu.stopProxy": "Stop proxyen",
+ "menu.capturing": "Optager",
+ "menu.clearSessions": "Ryd sessioner",
+ "menu.removeSelected": "Fjern valgte",
+ "menu.autoStartCapture": "Start optagelse automatisk",
+ "menu.autoSystemProxy": "Slå systemproxy til automatisk ved start",
+ "menu.decryptHttps": "Dekrypter HTTPS",
+ "menu.systemProxy": "Systemproxy",
+ "menu.captureLocal": "Optag lokal trafik",
+ "menu.allowStoreApps": "Tillad Store-apps…",
+ "menu.installCa": "Installer rod-CA (aktuel bruger)",
+ "menu.removeCa": "Fjern rod-CA (aktuel bruger)",
+ "menu.rotateCa": "Ryd og geninstaller rod-CA…",
+ "menu.removeOldCas": "Fjern gamle rod-CA'er…",
+ "menu.exportCa": "Eksportér rod-CA…",
+ "menu.trustFirefox": "Hav tillid til CA i Firefox…",
+ "menu.deviceCa": "Konfigurer CA til ekstern enhed",
+ "menu.tools": "Værktøjer",
+ "menu.composer": "Komponist…",
+ "menu.breakpoints": "Brydepunkter…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Skript…",
+ "menu.mapRemote": "Fjernkortlægning…",
+ "menu.options": "Indstillinger",
+ "menu.theme": "Tema",
+ "menu.themeLight": "Lys",
+ "menu.themeDark": "Mørk",
+ "menu.themeAutomatic": "Automatisk",
+ "menu.language": "Sprog",
+ "menu.languageAutomatic": "Automatisk",
+ "menu.columns": "Kolonner",
+ "menu.col.id": "ID",
+ "menu.col.method": "Metode",
+ "menu.col.status": "Status",
+ "menu.col.host": "Vært",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protokol",
+ "menu.col.duration": "Varighed",
+ "menu.col.ttfb": "Ventetid (TTFB)",
+ "menu.col.size": "Størrelse",
+ "menu.col.process": "Proces",
+ "menu.col.started": "Startet",
+ "menu.col.scheme": "Skema",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Nulstil kolonner",
+ "menu.sessionRetention": "Sessionsopbevaring…",
+ "menu.excludedHosts": "Udeladte værter…",
+ "menu.excludedHostsTip": "Spring-over-lister for HTTPS-dekryptering og regler for omgåelse af systemet",
+ "menu.ignoreCerts": "Ignorer usikre servercertifikater",
+ "menu.addVia": "Tilføj Via-header",
+ "menu.addViaTip": "Tilføj Via: … titanium-web-proxy på opfanget trafik (RFC 9110). Fra slår indsættelse og registrering af Via-løkker fra.",
+ "menu.logging": "Logning…",
+ "menu.resetSettings": "Nulstil Inspector-indstillinger…",
+ "menu.help": "Hjælp",
+ "menu.checkUpdates": "Søg efter opdateringer…",
+ "menu.checkUpdatesStartup": "Søg efter opdateringer ved start",
+ "menu.updateChannel": "Opdateringskanal",
+ "menu.channelStable": "Stabil",
+ "menu.channelBeta": "Beta",
+ "menu.about": "Om Titanium Inspector…",
+ "toolbar.searchWatermark": "Søg i URL, vært, proces… (eller method:GET status:4xx)",
+ "toolbar.searchTip": "Ren tekst søger i URL, vært, procesnavn, nøjagtigt proces-id, metode og status. Præfikser begrænser til ét felt: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: søger også i brødtekster, der er skrevet til disk. Sæt - foran et felt eller et ord for at udelade det (f.eks. -host:cursor.sh eller -cursor). Filtre redigerer skjulte værter og processer med mere plads.",
+ "toolbar.filters": "Filtre",
+ "toolbar.filtersTip": "Rediger søgningen og skjulte værter eller processer i et større vindue",
+ "toolbar.hideConnect": "Skjul CONNECT",
+ "toolbar.hideConnectTip": "Skjul uigennemsigtige HTTPS-tunneler, når Dekrypter HTTPS er slået fra",
+ "toolbar.hideImages": "Skjul billeder",
+ "toolbar.errorsOnly": "Kun fejl",
+ "toolbar.clearFilters": "Ryd filtre",
+ "toolbar.hidden": "Skjult",
+ "ctx.replay": "Send igen",
+ "ctx.loadComposer": "Indlæs i komponisten",
+ "ctx.saveRequest": "Gem anmodningsbrødtekst…",
+ "ctx.saveResponse": "Gem svarbrødtekst…",
+ "ctx.copyUrl": "Kopiér URL",
+ "ctx.copyCurl": "Kopiér som curl",
+ "ctx.copyFetch": "Kopiér som fetch",
+ "ctx.diff": "Sammenlign valgte…",
+ "ctx.filterHost": "Filtrér efter vært",
+ "ctx.hideHost": "Skjul vært",
+ "ctx.filterProcess": "Filtrér efter proces",
+ "ctx.hideProcess": "Skjul proces",
+ "ctx.excludeHost": "Udelad vært…",
+ "ctx.excludeHostTip": "Stop med at dekryptere denne værts HTTPS. Rækkerne bliver på listen; brug Skjul vært for at fjerne dem fra visningen.",
+ "grid.duration": "Varighed (ms)",
+ "grid.wait": "Ventetid (ms)",
+ "pane.inspect": "Inspektion",
+ "pane.composer": "Komponist",
+ "pane.breakpoints": "Brydepunkter",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Skript",
+ "pane.mapRemote": "Fjernkortlægning",
+ "pane.closeTip": "Luk rude",
+ "inspect.empty": "Vælg en session i gitteret for at se anmodningens og svarets headere og brødtekster.",
+ "common.ok": "OK",
+ "common.cancel": "Annuller",
+ "common.save": "Gem",
+ "common.apply": "Anvend",
+ "common.remove": "Fjern",
+ "common.browse": "Gennemse…",
+ "common.openFolder": "Åbn mappe",
+ "common.forget": "Glem",
+ "common.close": "Luk",
+ "loopback.window": "Tillad Store-apps at bruge denne proxy",
+ "loopback.checkAll": "Markér alle",
+ "loopback.uncheckAll": "Fjern markering af alle",
+ "loopback.filterWatermark": "Filtrér efter appnavn…",
+ "loopback.clearAll": "Ryd alle",
+ "trust.macWindow": "Bekræft tillid i Keychain Access",
+ "trust.openKeychain": "Åbn Keychain Access",
+ "trust.notNow": "Ikke nu",
+ "trust.recoveryTitle": "Tillid til rod-CA",
+ "trust.macWaitPlaceholder": "Venter på SSL-tillid…",
+ "window.about": "Om Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Ophavsret © Jehonathan Thomas",
+ "about.license": "Licenseret under PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Licensoplysninger",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filtre",
+ "filters.search": "Søgning",
+ "filters.searchHelp": "Samme søgning som på værktøjslinjen, med mere plads. Skjulte værter og processer står nedenfor, ikke i dette felt.",
+ "filters.searchWatermark": "URL, vært, proces, method:GET, status:4xx…",
+ "filters.hideHeading": "Skjul fra listen",
+ "filters.hideHelp": "Rækkerne forbliver opfanget. Dette skjuler dem kun på listen. For at stoppe dekryptering af HTTPS skal du bruge Udelad vært…",
+ "filters.hosts": "Værter",
+ "filters.addHostWatermark": "Tilføj en vært, der skal skjules",
+ "filters.addHost": "Tilføj vært",
+ "filters.processes": "Processer",
+ "filters.addProcessWatermark": "Tilføj en proces, der skal skjules",
+ "filters.addProcess": "Tilføj proces",
+ "filters.processSpace": "Et navn med et mellemrum forkortes ved det første ord, hvilket også kan skjule andre navne, der indeholder det ord.",
+ "window.confirm": "Bekræft",
+ "window.excludeHost": "Udelad vært",
+ "exclude.action": "Udelad",
+ "exclude.help": "Denne vært vises stadig på sessionslisten. Inspector forsøger ikke at læse dens HTTPS.",
+ "window.logging": "Logning",
+ "logging.help": "Skriv diagnosticeringsmeddelelser til fejlfinding. Ændringer træder i kraft med det samme.",
+ "logging.enable": "Aktivér logning",
+ "logging.writeFile": "Skriv log til en fil",
+ "logging.detail": "Hvor mange detaljer",
+ "logging.detailHelp": "Error = kun problemer. Warning / Information = mere kontekst. Debug = meget udførlig.",
+ "logging.path": "Sti til logfil",
+ "window.excludedHosts": "Udeladte værter",
+ "excluded.reset": "Nulstil til standard",
+ "excluded.bypass": "Omgå proxy (system)",
+ "excluded.bypassHelp": "Trafik når aldrig Inspector, når systemproxy er slået til. Forudfyldt med værter for Microsoft-identitet / SSO / RDP. Hvis du fjerner dem, kan RDP-logon gå i stykker, mens systemproxy er aktiveret.",
+ "excluded.notDecrypted": "Værter, der ikke dekrypteres",
+ "excluded.notDecryptedHelp": "CONNECT forbliver synlig; TLS forbliver uigennemsigtig, når Dekrypter HTTPS er slået til. Forudfyldt med værter med certifikatfastgørelse (Dropbox, Webex).",
+ "excluded.learnHeading": "Dekrypter automatisk ikke ved dekrypteringsfejl",
+ "excluded.learn": "Lær værter, hvis oprindelses-TLS fejler under dekryptering",
+ "excluded.learnHelp": "Når oprindelsens TLS fejler gentagne gange under dekryptering, eller oprindelsesserveren returnerer 403/429, stopper Inspector med at dekryptere den vært for senere forbindelser i denne session. Listen har et loft og glemmes ved genstart, medmindre du rykker den op.",
+ "excluded.learnPaused": "Læring sat på pause — eksisterende poster beholdes, indtil de glemmes.",
+ "excluded.noneLearned": "Ingen værter er lært endnu.",
+ "excluded.promote": "Ryk op til værter, der ikke dekrypteres",
+ "excluded.clearLearned": "Ryd alle lærte",
+ "window.retention": "Sessionsopbevaring",
+ "retention.max": "Maksimalt antal sessioner, der beholdes",
+ "retention.maxHelp": "Hvor mange anmodninger der bliver på sessionslisten. Når grænsen overskrides, forlader de ældste rækker listen, men bliver på disken, indtil Ryd sessioner eller grænsen for diskplads fjerner dem.",
+ "retention.cache": "Cachemappe",
+ "retention.openCache": "Åbn cachemappe",
+ "retention.clearCache": "Ryd gemt sessionscache…",
+ "retention.advanced": "Avanceret",
+ "retention.disk": "Diskplads til gemte sessioner (MB)",
+ "retention.diskHelp": "Maksimal plads til alle gemte sessioner på disken (alle kørsler af Inspector). Hver kørsel bruger en undermappe med tidsstempel; de ældste HAR-filer slettes først, når grænsen overskrides. Tomme kørselsmapper fjernes.",
+ "loopback.intro": "Windows Store- / UWP-apps er som standard blokeret fra localhost. Markér apps, der skal bruge Inspector, og vælg derefter Anvend. Genstart hver app (afslut den helt) efter Anvend. Inspector skal køre med systemproxy slået til. Ryd alle fjerner alle tilladelsesposter.",
+ "loopback.closedUnchanged": "Store-apps uændret.",
+ "loopback.proxyStopped": "Start proxyen, og slå systemproxy til. Store-apps kan ikke opfanges, før begge er slået til.",
+ "loopback.systemProxyOff": "Slå systemproxy til (menuen Optagelse). Tilladelseslisten lader kun Store-apps nå localhost; de følger stadig systemproxyen.",
+ "loopback.refreshing": "Opdaterer systemproxy, så kørende apps genopretter forbindelsen…",
+ "loopback.unchangedCount": "Tilladelseslisten matcher allerede: {0}.",
+ "loopback.allowed": "Tilladt: {0}.",
+ "loopback.allowedRefreshed": " Systemproxy blev opdateret, så kørende apps genopretter forbindelsen. Hvis trafikken stadig ikke vises, skal du afslutte appen helt og åbne den igen.",
+ "loopback.allowedProxyStopped": " Start proxyen, og slå systemproxy til, og afslut derefter appen helt og åbn den igen.",
+ "loopback.allowedSystemProxyOff": " Slå systemproxy til, og afslut derefter appen helt og åbn den igen.",
+ "loopback.allowedReady": " Afslut appen helt, og åbn den igen for at opfange trafik.",
+ "loopback.clearedRefreshed": "Alle loopback-undtagelser er ryddet. Systemproxy blev opdateret, så kørende apps genopretter forbindelsen.",
+ "loopback.clearedReady": "Alle loopback-undtagelser er ryddet. Afslut helt og genåbn enhver app, der brugte Inspector.",
+ "loopback.cleared": "Alle loopback-undtagelser er ryddet.",
+ "trust.macWaitBody": "Vis info i Keychain kan allerede vise Altid betro, selv når SSL-politikker ikke blev gemt (Chrome og Inspector behandler stadig CA'en som upålidelig).\n\nGennemtving en gemning:\n1. Keychain Access → login → Certifikater → dobbeltklik på Titanium Root Certificate Authority\n2. Udvid Tillid\n3. Sæt Ved brug af dette certifikat til Brug systemstandarder, og skift det derefter til Altid betro igen\n4. Luk Vis info — du skal få en adgangskodeprompt; den skriver de rigtige SSL-tillidspolitikker\n\nDette vindue lukkes automatisk, når disse politikker registreres. Hvis du allerede har gemt, skal du klikke på Jeg har gemt Altid betro.",
+ "trust.macWaitStatus": "Venter på certifikatet i Keychain…",
+ "trust.macWaitInKeychain": "Venter på gemte SSL-politikker (skift Altid betro, luk Vis info, indtast adgangskode)…",
+ "trust.macNotSaved": "Visningen Altid betro er ikke nok — skift Brug systemstandarder → Altid betro, luk Vis info, indtast din adgangskode, og prøv derefter Installer rod-CA / Dekrypter HTTPS igen",
+ "trust.macConfirmSaved": "Jeg har gemt Altid betro",
+ "trust.exportCa": "Eksportér CA",
+ "trust.install.mac": "Dekryptering af HTTPS kræver tillid til rod-CA'en for Titanium Inspector i Keychain Access (login-nøgleringen). Installer nu?",
+ "trust.install.linux": "Dekryptering af HTTPS kræver tillid til rod-CA'en for Titanium Inspector i dit brugercertifikatlager (NSS). Installer nu?",
+ "trust.install.windows": "Dekryptering af HTTPS kræver tillid til rod-CA'en for Titanium Inspector i den aktuelle brugers lager af betroede rodcertifikater. Installer nu?\n\nWindows kan vise en Ja/Nej-sikkerhedsdialog for betroet rod (ikke UAC) — vælg Ja for at have tillid til CA'en.",
+ "trust.install.other": "Dekryptering af HTTPS kræver tillid til rod-CA'en for Titanium Inspector på denne computer. Installer nu?",
+ "trust.remove.mac": "Fjern rod-CA'en for Titanium Inspector fra Keychain? HTTPS-dekryptering slås fra.",
+ "trust.remove.linux": "Fjern rod-CA'en for Titanium Inspector fra dit brugercertifikatlager (NSS)? HTTPS-dekryptering slås fra.",
+ "trust.remove.windows": "Fjern rod-CA'en for Titanium Inspector fra den aktuelle brugers lager af betroede rodcertifikater? HTTPS-dekryptering slås fra.",
+ "trust.remove.other": "Fjern rod-CA'en for Titanium Inspector? HTTPS-dekryptering slås fra.",
+ "trust.elevate.mac": "Tillid på brugerniveau mislykkedes eller var utilstrækkelig. Fortsæt for at vise en macOS-prompt til administratoradgangskode? Annuller lader certifikatindstillingerne være uændrede.",
+ "trust.elevate.linux": "Tillid på brugerniveau mislykkedes eller var utilstrækkelig. Fortsæt for at vise en polkit-administratorprompt? Annuller lader certifikatindstillingerne være uændrede.",
+ "trust.elevate.windows": "Tillid på brugerniveau mislykkedes eller var utilstrækkelig. Fortsæt for at vise UAC? Annuller lader certifikatindstillingerne være uændrede.",
+ "trust.elevate.other": "Tillid på brugerniveau mislykkedes eller var utilstrækkelig. Fortsæt med en administratorprompt? Annuller lader certifikatindstillingerne være uændrede.",
+ "trust.recovery.mac": "\n\nFortsæt for at vise en macOS-prompt til administratoradgangskode? Ikke nu lader certifikatindstillingerne være uændrede.",
+ "trust.recovery.linux": "\n\nFortsæt for at vise en polkit-administratorprompt? Ikke nu lader certifikatindstillingerne være uændrede.",
+ "trust.recovery.windows": "\n\nFortsæt for at vise UAC? Ikke nu lader certifikatindstillingerne være uændrede.",
+ "trust.recovery.other": "\n\nFortsæt med en administratorprompt? Ikke nu lader certifikatindstillingerne være uændrede.",
+ "trust.hosts.mac": "Omgåelse af systemet kræver Optagelse → Systemproxy (bruger proxyindstillinger for macOS-netværk). Regler kun for tunnel gælder for alle klienter, der rammer Inspector. Fabriksstandarder er forudfyldt på listerne nedenfor — rediger frit eller nulstil.",
+ "trust.hosts.linux": "Omgåelse af systemet kræver Optagelse → Systemproxy (bruger proxyindstillinger for skrivebord eller miljø). Regler kun for tunnel gælder for alle klienter, der rammer Inspector. Fabriksstandarder er forudfyldt på listerne nedenfor — rediger frit eller nulstil.",
+ "trust.hosts.windows": "Omgåelse af systemet kræver Optagelse → Systemproxy (bruger WinINET). Regler kun for tunnel gælder for alle klienter, der rammer Inspector. Fabriksstandarder er forudfyldt på listerne nedenfor — rediger frit eller nulstil.",
+ "trust.hosts.other": "Omgåelse af systemet kræver Optagelse → Systemproxy. Regler kun for tunnel gælder for alle klienter, der rammer Inspector. Fabriksstandarder er forudfyldt på listerne nedenfor — rediger frit eller nulstil.",
+ "trust.localhost.mac": "Når systemproxy er slået til, send localhost gennem Inspector. Fra føjer localhost til omgåelseslisten for macOS-proxyen.",
+ "trust.localhost.linux": "Når systemproxy er slået til, send localhost gennem Inspector. Fra føjer localhost til NO_PROXY.",
+ "trust.localhost.windows": "Når systemproxy er slået til, send localhost gennem Inspector (WinINET <-loopback>). Fra lader loopback springe proxyen over.",
+ "trust.localhost.other": "Når systemproxy er slået til, send localhost gennem Inspector.",
+ "trust.status.missing": "Rod-CA er ikke betroet endnu — prøv igen, eller Eksportér CA",
+ "trust.status.cancelled": "Installation af rod-CA annulleret",
+ "trust.status.certutil": "Browserens certifikatværktøjer mangler — installer dem, prøv igen, eller Eksportér CA",
+ "trust.status.homebrew": "Homebrew kræves for at installere certifikatværktøjer — Eksportér CA for at have tillid manuelt",
+ "trust.status.macConfirm": "Sæt Altid betro for rod-CA'en for Titanium Inspector i Keychain Access",
+ "trust.status.keychain": "Keychain-tillid mislykkedes — prøv igen, eller Eksportér CA og hav tillid manuelt",
+ "trust.fail.keychainTitle": "Bekræft tillid i Keychain",
+ "trust.fail.continueKeychain": "Fortsæt i Keychain Access",
+ "trust.fail.toolsTitle": "Certifikatværktøjer er nødvendige",
+ "trust.fail.toolsLinux": "Inspector har brug for certutil (NSS-værktøjer) for at gøre tilliden til rod-CA færdig.",
+ "trust.fail.toolsOther": "Inspector har brug for browserens certifikatværktøjer for at gøre tilliden til rod-CA færdig.",
+ "trust.fail.tryAgain": "Prøv igen",
+ "trust.fail.homebrewBody": "Homebrew kræves for at installere certifikatværktøjer. Eksportér CA'en for at have tillid manuelt.",
+ "trust.fail.title": "Kan ikke dekryptere HTTPS endnu",
+ "trust.fail.body": "Rod-CA'en for Titanium Inspector er ikke betroet på denne computer endnu.",
+ "toolbar.throttle": "Begrænsning",
+ "toolbar.throttleTip": "Tilføj ventetid og båndbreddeformning under optagelse (skrivning af brødtekst / WebSocket-rammer). Slået fra som standard.",
+ "toolbar.bindWatermark": "*, localhost eller IP",
+ "toolbar.bindTip": "127.0.0.1 eller localhost = kun denne pc. 0.0.0.0 eller * = alle netværkskort (omfatter localhost).",
+ "toolbar.portWatermark": "*, eller port",
+ "toolbar.portTip": "* eller tom = port valgt af styresystemet (den rigtige port vises efter start). Ellers 1–65535.",
+ "toolbar.listeningTip": "Proxyen lytter",
+ "toolbar.trustHealthTip": "Tillidsstatus for rod-CA til Dekrypter HTTPS. Installer eller hav tillid til CA, hvis her står CA ikke betroet.",
+ "chip.process": "proces",
+ "inspect.request": "Anmodning",
+ "inspect.requestTip": "Anmodningens headere og brødtekst",
+ "inspect.copyHeaders": "Kopiér headere",
+ "inspect.resizeTip": "Træk for at ændre størrelse. Dobbeltklik for at nulstille.",
+ "inspect.pretty": "Formateret",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Vis brødteksten som et Hex-udtræk",
+ "inspect.saveRequest": "Gem anmodning…",
+ "inspect.response": "Svar",
+ "inspect.responseTip": "Svarets headere og brødtekst",
+ "inspect.saveResponse": "Gem svar…",
+ "inspect.diff": "Forskel",
+ "inspect.frames": "WS-rammer",
+ "inspect.framesHelp": "Live WebSocket-rammer for denne session (retning, opcode, forhåndsvisning af data).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events læst fra svarets brødtekst.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Vis headere",
+ "inspect.hideHeaders": "Skjul headere",
+ "inspect.headers": "Headere ({0})",
+ "inspect.prettyTip": "Indryk JSON, XML og HTML",
+ "inspect.prettyHexTip": "Gælder ikke i visningen Hex",
+ "inspect.emptyBody": "(tom)",
+ "inspect.noRequestBody": "Ingen brødtekst i anmodningen",
+ "inspect.waiting": "Venter på svar…",
+ "composer.help": "Byg og send en anmodning gennem proxyen. Indlæs fra valgte kopierer den aktuelle session.",
+ "composer.method": "Metode",
+ "composer.url": "URL",
+ "composer.headers": "Headere (Navn: Værdi pr. linje)",
+ "composer.body": "Brødtekst",
+ "composer.loadSelected": "Indlæs fra valgte",
+ "composer.loadBody": "Indlæs brødtekst fra fil…",
+ "composer.send": "Send",
+ "bp.help": "Sæt matchende klientanmodninger på pause, så du kan redigere brødteksten, fortsætte eller afbryde. Én pause ad gangen; fortsætter automatisk efter 120s. Fjern markeringen af Aktiveret for at fortsætte en anmodning på pause.",
+ "bp.enabled": "Aktiveret",
+ "bp.breakOnResponse": "Bryd ved svar",
+ "bp.match": "Match",
+ "bp.urlWatermark": "URL-filter (* = alle, f.eks. *api*/users*)",
+ "bp.graphqlWatermark": "Kun denne GraphQL-operation (valgfri)",
+ "bp.graphqlTip": "Ekstra filter på klientanmodningens brødtekst. Matcher JSON operationName eller en navngiven forespørgsel. Lad feltet være tomt for at matche alle operationer på den URL.",
+ "bp.fromSelected": "Fra valgte session",
+ "bp.fromSelectedTip": "Kopiér navnet på GraphQL-operationen fra den valgte sessions anmodning.",
+ "bp.graphqlHelp": "Lad feltet GraphQL være tomt for at matche alle operationer. Udfyld det (f.eks. GetUser) for kun at sætte den klientanmodning på pause på den URL ovenfor. Bryd ved svar bruger stadig URL-filteret.",
+ "bp.editWatermark": "Rediger brødtekst (Anvend redigeret brødtekst, derefter Fortsæt)",
+ "bp.applyEdit": "Anvend redigeret brødtekst",
+ "bp.continue": "Fortsæt",
+ "bp.abort": "Afbryd",
+ "ar.help": "Returner et falsk svar før den rigtige server. Match afgør, hvilke klientanmodninger en regel gælder for; felterne nedenfor er det, du sender tilbage.",
+ "ar.enabled": "Aktiveret (før brydepunkter)",
+ "ar.urlWatermark": "Match URL (jokertegn *)",
+ "ar.graphqlHelp": "Samme URL og forskellige GraphQL-operationer kan bruge forskellige regler. Lad feltet være tomt for at matche alle operationer.",
+ "ar.respondWith": "Svar med",
+ "ar.statusTip": "HTTP-status. Tom = 200. Brug 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local-fil (valgfri)",
+ "ar.bodyWatermark": "Svarbrødtekst (bruges, når Map Local er tom)",
+ "ar.add": "Tilføj regel",
+ "ar.update": "Opdater regel",
+ "ar.delete": "Slet regel",
+ "script.intro": "Én kommando pr. linje på hver optaget session. Dette er ikke JavaScript eller C# — skriv kun kommandoerne nedenfor.",
+ "script.what": "Det kan du skrive",
+ "script.setHeaderHelp": "Tilføj eller erstat en header. Trafikken fortsætter stadig til serveren.",
+ "script.setStatusHelp": "Ved anmodning: svar nu og spring serveren over. Ved svar: skift den status, klienten ser.",
+ "script.abortHelp": "Bloker med 403 Forbudt. Tilføj en linje med set-status for at vælge en anden kode.",
+ "script.comment": "Start en linje med # eller // for en kommentar. Du kan kombinere kommandoer; sæt hver på sin egen linje.",
+ "script.onRequest": "Ved anmodning",
+ "script.onResponse": "Ved svar",
+ "script.requestSkips": "abort eller set-status her springer AutoResponder, brydepunkter og oprindelsen over.",
+ "map.help": "Omskriv matchende klientanmodninger til en anden oprindelse før den rigtige server. Brug en enkelt * i match og mål for at bevare et sti- eller forespørgselssuffiks. Kører efter AutoResponder / Map Local.",
+ "map.graphqlHelp": "Lad feltet være tomt for at omskrive alle operationer på den URL. Udfyld det for kun at omskrive den GraphQL-operation.",
+ "map.rewriteTo": "Omskriv til",
+ "map.targetWatermark": "Mål-URL (absolut, valgfri *)",
+ "loopback.allow": "Tillad",
+ "loopback.appName": "Appnavn",
+ "loopback.packageId": "Pakke-id",
+ "status.ready": "Klar",
+ "status.searchingBodies": "Søger i brødtekster…",
+ "status.proxyStopped": "Proxyen er stoppet",
+ "status.proxyRunning": "Proxyen kører på {0}",
+ "trust.health.trusted": "CA betroet",
+ "trust.health.untrusted": "CA ikke betroet"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.de.json b/src/Titanium.Inspector/Localization/strings.de.json
new file mode 100644
index 000000000..2b5465717
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.de.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Datei",
+ "menu.exportAllHar": "Alle als HAR exportieren…",
+ "menu.exportSelectedHar": "Auswahl als HAR exportieren…",
+ "menu.importHar": "HAR importieren…",
+ "menu.exportAllArchive": "Alles als Archiv exportieren…",
+ "menu.exportSelectedArchive": "Auswahl als Archiv exportieren…",
+ "menu.importArchive": "Archiv importieren…",
+ "menu.exit": "Beenden",
+ "menu.capture": "Erfassen",
+ "menu.startProxy": "Proxy starten",
+ "menu.stopProxy": "Proxy beenden",
+ "menu.capturing": "Aufzeichnung",
+ "menu.clearSessions": "Sitzungen löschen",
+ "menu.removeSelected": "Auswahl entfernen",
+ "menu.autoStartCapture": "Aufzeichnung automatisch starten",
+ "menu.autoSystemProxy": "Systemproxy beim Start automatisch",
+ "menu.decryptHttps": "HTTPS entschlüsseln",
+ "menu.systemProxy": "Systemproxy",
+ "menu.captureLocal": "Lokalen Datenverkehr erfassen",
+ "menu.allowStoreApps": "Store-Apps zulassen…",
+ "menu.installCa": "Stamm-CA installieren (aktueller Benutzer)",
+ "menu.removeCa": "Stamm-CA entfernen (aktueller Benutzer)",
+ "menu.rotateCa": "Stamm-CA löschen und neu installieren…",
+ "menu.removeOldCas": "Alte Stamm-CAs entfernen…",
+ "menu.exportCa": "Stamm-CA exportieren…",
+ "menu.trustFirefox": "CA in Firefox vertrauen…",
+ "menu.deviceCa": "CA für externes Gerät einrichten",
+ "menu.tools": "Extras",
+ "menu.composer": "Verfassen…",
+ "menu.breakpoints": "Haltepunkte…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Skripte…",
+ "menu.mapRemote": "Remote zuordnen…",
+ "menu.options": "Optionen",
+ "menu.theme": "Design",
+ "menu.themeLight": "Hell",
+ "menu.themeDark": "Dunkel",
+ "menu.themeAutomatic": "Automatisch",
+ "menu.language": "Sprache",
+ "menu.languageAutomatic": "Automatisch",
+ "menu.columns": "Spalten",
+ "menu.col.id": "Id",
+ "menu.col.method": "Methode",
+ "menu.col.status": "Status",
+ "menu.col.host": "Host",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protokoll",
+ "menu.col.duration": "Dauer",
+ "menu.col.ttfb": "Wartezeit (TTFB)",
+ "menu.col.size": "Größe",
+ "menu.col.process": "Prozess",
+ "menu.col.started": "Gestartet",
+ "menu.col.scheme": "Schema",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Spalten zurücksetzen",
+ "menu.sessionRetention": "Sitzungsaufbewahrung…",
+ "menu.excludedHosts": "Ausgeschlossene Hosts…",
+ "menu.excludedHostsTip": "Listen zum Überspringen der HTTPS-Entschlüsselung und Umgehungsregeln des Betriebssystems",
+ "menu.ignoreCerts": "Unsichere Serverzertifikate ignorieren",
+ "menu.addVia": "Via-Header hinzufügen",
+ "menu.addViaTip": "Fügt bei abgefangenem Datenverkehr Via: … titanium-web-proxy an (RFC 9110). Aus schaltet das Einfügen und die Erkennung von Via-Schleifen ab.",
+ "menu.logging": "Protokollierung…",
+ "menu.resetSettings": "Inspector-Einstellungen zurücksetzen…",
+ "menu.help": "Hilfe",
+ "menu.checkUpdates": "Nach Updates suchen…",
+ "menu.checkUpdatesStartup": "Beim Start nach Updates suchen",
+ "menu.updateChannel": "Updatekanal",
+ "menu.channelStable": "Stabil",
+ "menu.channelBeta": "Beta",
+ "menu.about": "Über Titanium Inspector…",
+ "toolbar.searchWatermark": "URL, Host, Prozess suchen… (oder method:GET status:4xx)",
+ "toolbar.searchTip": "Freitext durchsucht URL, Host, Prozessname, genaue Prozess-ID, Methode und Status. Präfixe beschränken die Suche auf ein Feld: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: durchsucht auch Inhalte, die auf den Datenträger ausgelagert wurden. Setzen Sie - vor ein Feld oder ein Wort, um es auszuschließen (z. B. -host:cursor.sh oder -cursor). Unter Filter bearbeiten Sie ausgeblendete Hosts und Prozesse mit mehr Platz.",
+ "toolbar.filters": "Filter",
+ "toolbar.filtersTip": "Suche sowie ausgeblendete Hosts oder Prozesse in einem größeren Fenster bearbeiten",
+ "toolbar.hideConnect": "CONNECT ausblenden",
+ "toolbar.hideConnectTip": "Undurchsichtige HTTPS-Tunnel ausblenden, wenn HTTPS entschlüsseln aus ist",
+ "toolbar.hideImages": "Bilder ausblenden",
+ "toolbar.errorsOnly": "Nur Fehler",
+ "toolbar.clearFilters": "Filter zurücksetzen",
+ "toolbar.hidden": "Ausgeblendet",
+ "ctx.replay": "Wiederholen",
+ "ctx.loadComposer": "In Verfassen laden",
+ "ctx.saveRequest": "Anfrageinhalt speichern…",
+ "ctx.saveResponse": "Antwortinhalt speichern…",
+ "ctx.copyUrl": "URL kopieren",
+ "ctx.copyCurl": "Als curl kopieren",
+ "ctx.copyFetch": "Als fetch kopieren",
+ "ctx.diff": "Auswahl vergleichen…",
+ "ctx.filterHost": "Nach Host filtern",
+ "ctx.hideHost": "Host ausblenden",
+ "ctx.filterProcess": "Nach Prozess filtern",
+ "ctx.hideProcess": "Prozess ausblenden",
+ "ctx.excludeHost": "Host ausschließen…",
+ "ctx.excludeHostTip": "Die HTTPS-Entschlüsselung für diesen Host beenden. Die Zeilen bleiben in der Liste; mit Host ausblenden verschwinden sie aus der Ansicht.",
+ "grid.duration": "Dauer (ms)",
+ "grid.wait": "Wartezeit (ms)",
+ "pane.inspect": "Untersuchen",
+ "pane.composer": "Verfassen",
+ "pane.breakpoints": "Haltepunkte",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Skripte",
+ "pane.mapRemote": "Remote zuordnen",
+ "pane.closeTip": "Bereich schließen",
+ "inspect.empty": "Wählen Sie eine Sitzung in der Tabelle, um Header und Inhalte von Anfrage und Antwort zu untersuchen.",
+ "common.ok": "OK",
+ "common.cancel": "Abbrechen",
+ "common.save": "Speichern",
+ "common.apply": "Übernehmen",
+ "common.remove": "Entfernen",
+ "common.browse": "Durchsuchen…",
+ "common.openFolder": "Ordner öffnen",
+ "common.forget": "Vergessen",
+ "common.close": "Schließen",
+ "loopback.window": "Store-Apps die Nutzung dieses Proxys erlauben",
+ "loopback.checkAll": "Alle aktivieren",
+ "loopback.uncheckAll": "Alle deaktivieren",
+ "loopback.filterWatermark": "Nach App-Name filtern…",
+ "loopback.clearAll": "Alle entfernen",
+ "trust.macWindow": "Vertrauen in Keychain Access bestätigen",
+ "trust.openKeychain": "Keychain Access öffnen",
+ "trust.notNow": "Nicht jetzt",
+ "trust.recoveryTitle": "Vertrauen der Stamm-CA",
+ "trust.macWaitPlaceholder": "Warten auf SSL-Vertrauen…",
+ "window.about": "Über Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Copyright © Jehonathan Thomas",
+ "about.license": "Lizenziert unter der PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Lizenzdetails",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filter",
+ "filters.search": "Suche",
+ "filters.searchHelp": "Dieselbe Suche wie in der Symbolleiste, mit mehr Platz. Ausgeblendete Hosts und Prozesse stehen unten, nicht in diesem Feld.",
+ "filters.searchWatermark": "URL, Host, Prozess, method:GET, status:4xx…",
+ "filters.hideHeading": "Aus der Liste ausblenden",
+ "filters.hideHelp": "Die Zeilen bleiben erfasst. Hier werden sie nur in der Liste ausgeblendet. Um die HTTPS-Entschlüsselung zu beenden, verwenden Sie Host ausschließen…",
+ "filters.hosts": "Hosts",
+ "filters.addHostWatermark": "Host zum Ausblenden hinzufügen",
+ "filters.addHost": "Host hinzufügen",
+ "filters.processes": "Prozesse",
+ "filters.addProcessWatermark": "Prozess zum Ausblenden hinzufügen",
+ "filters.addProcess": "Prozess hinzufügen",
+ "filters.processSpace": "Ein Name mit Leerzeichen wird beim ersten Wort abgeschnitten. Dadurch können auch andere Namen ausgeblendet werden, die dieses Wort enthalten.",
+ "window.confirm": "Bestätigen",
+ "window.excludeHost": "Host ausschließen",
+ "exclude.action": "Ausschließen",
+ "exclude.help": "Dieser Host erscheint weiterhin in der Sitzungsliste. Inspector versucht nicht, dessen HTTPS zu lesen.",
+ "window.logging": "Protokollierung",
+ "logging.help": "Diagnosemeldungen zur Fehlersuche schreiben. Änderungen gelten sofort.",
+ "logging.enable": "Protokollierung aktivieren",
+ "logging.writeFile": "Protokoll in eine Datei schreiben",
+ "logging.detail": "Detailgrad",
+ "logging.detailHelp": "Error = nur Probleme. Warning / Information = mehr Kontext. Debug = sehr ausführlich.",
+ "logging.path": "Pfad der Protokolldatei",
+ "window.excludedHosts": "Ausgeschlossene Hosts",
+ "excluded.reset": "Auf Standard zurücksetzen",
+ "excluded.bypass": "Proxy umgehen (Betriebssystem)",
+ "excluded.bypassHelp": "Der Datenverkehr erreicht Inspector nicht, solange der Systemproxy aktiv ist. Vorbelegt mit Hosts für Microsoft-Identität, SSO und RDP. Werden sie entfernt, kann die RDP-Anmeldung fehlschlagen, während der Systemproxy aktiv ist.",
+ "excluded.notDecrypted": "Nicht entschlüsselte Hosts",
+ "excluded.notDecryptedHelp": "CONNECT bleibt sichtbar; TLS bleibt undurchsichtig, wenn HTTPS entschlüsseln aktiv ist. Vorbelegt mit Hosts, die Zertifikate anheften (Dropbox, Webex).",
+ "excluded.learnHeading": "Bei Entschlüsselungsfehler automatisch nicht entschlüsseln",
+ "excluded.learn": "Hosts lernen, deren Ursprungs-TLS unter Entschlüsselung fehlschlägt",
+ "excluded.learnHelp": "Wenn die Ursprungs-TLS unter Entschlüsselung wiederholt fehlschlägt oder der Ursprungsserver 403/429 zurückgibt, beendet Inspector die Entschlüsselung dieses Hosts für spätere Verbindungen in dieser Sitzung. Die Liste ist begrenzt und wird beim Neustart vergessen, sofern Sie die Einträge nicht übernehmen.",
+ "excluded.learnPaused": "Lernen angehalten — vorhandene Einträge bleiben, bis sie vergessen werden.",
+ "excluded.noneLearned": "Noch keine Hosts gelernt.",
+ "excluded.promote": "Zu nicht entschlüsselten Hosts übernehmen",
+ "excluded.clearLearned": "Alle gelernten löschen",
+ "window.retention": "Sitzungsaufbewahrung",
+ "retention.max": "Maximal zu behaltende Sitzungen",
+ "retention.maxHelp": "Wie viele Anforderungen in der Sitzungsliste bleiben. Darüber hinaus verlassen die ältesten Zeilen die Liste, bleiben aber auf dem Datenträger, bis Sitzungen löschen oder das Speicherlimit sie entfernt.",
+ "retention.cache": "Cacheordner",
+ "retention.openCache": "Cacheordner öffnen",
+ "retention.clearCache": "Gespeicherten Sitzungscache löschen…",
+ "retention.advanced": "Erweitert",
+ "retention.disk": "Speicherplatz für gespeicherte Sitzungen (MB)",
+ "retention.diskHelp": "Maximaler Speicherplatz für alle gespeicherten Sitzungen (alle Inspector-Läufe). Jeder Lauf verwendet einen Unterordner mit Zeitstempel; wird das Limit überschritten, werden die ältesten HAR-Dateien zuerst gelöscht. Leere Laufordner werden entfernt.",
+ "loopback.intro": "Windows-Store- und UWP-Apps dürfen localhost standardmäßig nicht erreichen. Aktivieren Sie die Apps, die Inspector verwenden sollen, und wählen Sie dann Übernehmen. Starten Sie jede App danach neu (vollständig beenden). Inspector muss laufen und der Systemproxy muss aktiv sein. Alle entfernen löscht sämtliche Zulassungen.",
+ "loopback.closedUnchanged": "Store-Apps unverändert.",
+ "loopback.proxyStopped": "Starten Sie den Proxy und aktivieren Sie den Systemproxy. Store-Apps können erst erfasst werden, wenn beides aktiv ist.",
+ "loopback.systemProxyOff": "Aktivieren Sie den Systemproxy (Menü Erfassen). Die Zulassungsliste lässt Store-Apps nur localhost erreichen; sie folgen weiterhin dem Systemproxy.",
+ "loopback.refreshing": "Systemproxy wird aktualisiert, damit laufende Apps die Verbindung neu aufbauen…",
+ "loopback.unchangedCount": "Zulassungsliste stimmt bereits überein: {0}.",
+ "loopback.allowed": "Zugelassen: {0}.",
+ "loopback.allowedRefreshed": " Der Systemproxy wurde aktualisiert, damit laufende Apps die Verbindung neu aufbauen. Wenn weiterhin kein Datenverkehr erscheint, beenden Sie die App vollständig und öffnen Sie sie erneut.",
+ "loopback.allowedProxyStopped": " Starten Sie den Proxy und aktivieren Sie den Systemproxy, beenden Sie die App dann vollständig und öffnen Sie sie erneut.",
+ "loopback.allowedSystemProxyOff": " Aktivieren Sie den Systemproxy, beenden Sie die App dann vollständig und öffnen Sie sie erneut.",
+ "loopback.allowedReady": " Beenden Sie die App vollständig und öffnen Sie sie erneut, um den Datenverkehr zu erfassen.",
+ "loopback.clearedRefreshed": "Alle Loopback-Ausnahmen wurden entfernt. Der Systemproxy wurde aktualisiert, damit laufende Apps die Verbindung neu aufbauen.",
+ "loopback.clearedReady": "Alle Loopback-Ausnahmen wurden entfernt. Beenden Sie jede App, die Inspector verwendet hat, vollständig und öffnen Sie sie erneut.",
+ "loopback.cleared": "Alle Loopback-Ausnahmen wurden entfernt.",
+ "trust.macWaitBody": "Der Befehl Informationen in Keychain Access kann bereits „Immer vertrauen“ anzeigen, obwohl die SSL-Richtlinien nicht gespeichert wurden (Chrome und Inspector behandeln die CA weiterhin als nicht vertrauenswürdig).\n\nSpeichern erzwingen:\n1. Keychain Access → Anmeldung → Zertifikate → Titanium Root Certificate Authority doppelklicken\n2. Vertrauen aufklappen\n3. „Beim Verwenden dieses Zertifikats“ auf „Systemstandard verwenden“ setzen und danach wieder auf „Immer vertrauen“ stellen\n4. Informationen schließen — es muss eine Kennwortabfrage erscheinen; sie schreibt die echten SSL-Vertrauensrichtlinien\n\nDieses Fenster schließt sich automatisch, sobald diese Richtlinien erkannt werden. Wenn Sie bereits gespeichert haben, klicken Sie auf „Immer vertrauen ist gespeichert“.",
+ "trust.macWaitStatus": "Warten auf das Zertifikat im Schlüsselbund…",
+ "trust.macWaitInKeychain": "Warten auf gespeicherte SSL-Richtlinien (Immer vertrauen umschalten, Informationen schließen, Kennwort eingeben)…",
+ "trust.macNotSaved": "Die Anzeige „Immer vertrauen“ reicht nicht — auf Systemstandard verwenden und wieder auf Immer vertrauen schalten, Informationen schließen, Kennwort eingeben und danach Stamm-CA installieren bzw. HTTPS entschlüsseln erneut versuchen",
+ "trust.macConfirmSaved": "Immer vertrauen ist gespeichert",
+ "trust.exportCa": "CA exportieren",
+ "trust.install.mac": "Zum Entschlüsseln von HTTPS muss der Stamm-CA von Titanium Inspector in Keychain Access (Schlüsselbund Anmeldung) vertraut werden. Jetzt installieren?",
+ "trust.install.linux": "Zum Entschlüsseln von HTTPS muss der Stamm-CA von Titanium Inspector in Ihrem Benutzerzertifikatspeicher (NSS) vertraut werden. Jetzt installieren?",
+ "trust.install.windows": "Zum Entschlüsseln von HTTPS muss der Stamm-CA von Titanium Inspector im Speicher für vertrauenswürdige Stammzertifizierungsstellen des aktuellen Benutzers vertraut werden. Jetzt installieren?\n\nWindows kann einen Sicherheitsdialog Ja/Nein für vertrauenswürdige Stammzertifikate anzeigen (kein UAC). Wählen Sie Ja, damit der CA vertraut wird.",
+ "trust.install.other": "Zum Entschlüsseln von HTTPS muss der Stamm-CA von Titanium Inspector auf diesem Computer vertraut werden. Jetzt installieren?",
+ "trust.remove.mac": "Die Stamm-CA von Titanium Inspector aus dem Schlüsselbund entfernen? Die HTTPS-Entschlüsselung wird deaktiviert.",
+ "trust.remove.linux": "Die Stamm-CA von Titanium Inspector aus Ihrem Benutzerzertifikatspeicher (NSS) entfernen? Die HTTPS-Entschlüsselung wird deaktiviert.",
+ "trust.remove.windows": "Die Stamm-CA von Titanium Inspector aus dem Speicher für vertrauenswürdige Stammzertifizierungsstellen des aktuellen Benutzers entfernen? Die HTTPS-Entschlüsselung wird deaktiviert.",
+ "trust.remove.other": "Die Stamm-CA von Titanium Inspector entfernen? Die HTTPS-Entschlüsselung wird deaktiviert.",
+ "trust.elevate.mac": "Das Vertrauen auf Benutzerebene ist fehlgeschlagen oder war unzureichend. Fortfahren und eine macOS-Administratorkennwortabfrage anzeigen? Abbrechen lässt die Zertifikateinstellungen unverändert.",
+ "trust.elevate.linux": "Das Vertrauen auf Benutzerebene ist fehlgeschlagen oder war unzureichend. Fortfahren und eine polkit-Administratorabfrage anzeigen? Abbrechen lässt die Zertifikateinstellungen unverändert.",
+ "trust.elevate.windows": "Das Vertrauen auf Benutzerebene ist fehlgeschlagen oder war unzureichend. Fortfahren und UAC anzeigen? Abbrechen lässt die Zertifikateinstellungen unverändert.",
+ "trust.elevate.other": "Das Vertrauen auf Benutzerebene ist fehlgeschlagen oder war unzureichend. Mit einer Administratorabfrage fortfahren? Abbrechen lässt die Zertifikateinstellungen unverändert.",
+ "trust.recovery.mac": "\n\nFortfahren und eine macOS-Administratorkennwortabfrage anzeigen? Nicht jetzt lässt die Zertifikateinstellungen unverändert.",
+ "trust.recovery.linux": "\n\nFortfahren und eine polkit-Administratorabfrage anzeigen? Nicht jetzt lässt die Zertifikateinstellungen unverändert.",
+ "trust.recovery.windows": "\n\nFortfahren und UAC anzeigen? Nicht jetzt lässt die Zertifikateinstellungen unverändert.",
+ "trust.recovery.other": "\n\nMit einer Administratorabfrage fortfahren? Nicht jetzt lässt die Zertifikateinstellungen unverändert.",
+ "trust.hosts.mac": "Die Umgehung durch das Betriebssystem braucht Erfassen → Systemproxy (verwendet die Netzwerkproxy-Einstellungen von macOS). Regeln nur für den Tunnel gelten für jeden Client, der Inspector erreicht. Die Werkseinstellungen sind in den Listen unten vorausgefüllt — frei bearbeiten oder zurücksetzen.",
+ "trust.hosts.linux": "Die Umgehung durch das Betriebssystem braucht Erfassen → Systemproxy (verwendet die Proxy-Einstellungen der Arbeitsumgebung). Regeln nur für den Tunnel gelten für jeden Client, der Inspector erreicht. Die Werkseinstellungen sind in den Listen unten vorausgefüllt — frei bearbeiten oder zurücksetzen.",
+ "trust.hosts.windows": "Die Umgehung durch das Betriebssystem braucht Erfassen → Systemproxy (verwendet WinINET). Regeln nur für den Tunnel gelten für jeden Client, der Inspector erreicht. Die Werkseinstellungen sind in den Listen unten vorausgefüllt — frei bearbeiten oder zurücksetzen.",
+ "trust.hosts.other": "Die Umgehung durch das Betriebssystem braucht Erfassen → Systemproxy. Regeln nur für den Tunnel gelten für jeden Client, der Inspector erreicht. Die Werkseinstellungen sind in den Listen unten vorausgefüllt — frei bearbeiten oder zurücksetzen.",
+ "trust.localhost.mac": "Wenn der Systemproxy aktiv ist, localhost über Inspector leiten. Aus fügt localhost der Proxy-Umgehungsliste von macOS hinzu.",
+ "trust.localhost.linux": "Wenn der Systemproxy aktiv ist, localhost über Inspector leiten. Aus fügt localhost zu NO_PROXY hinzu.",
+ "trust.localhost.windows": "Wenn der Systemproxy aktiv ist, localhost über Inspector leiten (WinINET <-loopback>). Aus lässt Loopback den Proxy überspringen.",
+ "trust.localhost.other": "Wenn der Systemproxy aktiv ist, localhost über Inspector leiten.",
+ "trust.status.missing": "Die Stamm-CA ist noch nicht vertrauenswürdig — erneut versuchen oder CA exportieren",
+ "trust.status.cancelled": "Installation der Stamm-CA abgebrochen",
+ "trust.status.certutil": "Browser-Zertifikatwerkzeuge fehlen — installieren, erneut versuchen oder CA exportieren",
+ "trust.status.homebrew": "Homebrew wird benötigt, um Zertifikatwerkzeuge zu installieren — CA exportieren und manuell vertrauen",
+ "trust.status.macConfirm": "Legen Sie für die Stamm-CA von Titanium Inspector in Keychain Access „Immer vertrauen“ fest",
+ "trust.status.keychain": "Vertrauen im Schlüsselbund fehlgeschlagen — erneut versuchen oder CA exportieren und manuell vertrauen",
+ "trust.fail.keychainTitle": "Vertrauen im Schlüsselbund bestätigen",
+ "trust.fail.continueKeychain": "In Keychain Access fortfahren",
+ "trust.fail.toolsTitle": "Zertifikatwerkzeuge erforderlich",
+ "trust.fail.toolsLinux": "Inspector benötigt certutil (NSS-Werkzeuge), um das Vertrauen der Stamm-CA abzuschließen.",
+ "trust.fail.toolsOther": "Inspector benötigt Browser-Zertifikatwerkzeuge, um das Vertrauen der Stamm-CA abzuschließen.",
+ "trust.fail.tryAgain": "Erneut versuchen",
+ "trust.fail.homebrewBody": "Homebrew wird benötigt, um Zertifikatwerkzeuge zu installieren. Exportieren Sie die CA, um ihr manuell zu vertrauen.",
+ "trust.fail.title": "HTTPS kann noch nicht entschlüsselt werden",
+ "trust.fail.body": "Der Stamm-CA von Titanium Inspector wird auf diesem Computer noch nicht vertraut.",
+ "toolbar.throttle": "Drosseln",
+ "toolbar.throttleTip": "Fügt während der Erfassung Latenz und Bandbreitendrosselung hinzu (Schreibvorgänge des Inhalts / WebSocket-Frames). Standardmäßig aus.",
+ "toolbar.bindWatermark": "*, localhost oder IP",
+ "toolbar.bindTip": "127.0.0.1 oder localhost = nur dieser PC. 0.0.0.0 oder * = alle Netzwerkadapter (einschließlich localhost).",
+ "toolbar.portWatermark": "* oder Port",
+ "toolbar.portTip": "* oder leer = vom Betriebssystem gewählter Port (der tatsächliche Port erscheint nach dem Start). Sonst 1–65535.",
+ "toolbar.listeningTip": "Proxy lauscht",
+ "toolbar.trustHealthTip": "Vertrauensstatus der Stamm-CA für HTTPS entschlüsseln. Installieren Sie die CA oder vertrauen Sie ihr, wenn hier nicht vertrauenswürdig steht.",
+ "chip.process": "Prozess",
+ "inspect.request": "Anfrage",
+ "inspect.requestTip": "Header und Inhalt der Anfrage",
+ "inspect.copyHeaders": "Header kopieren",
+ "inspect.resizeTip": "Ziehen, um die Größe zu ändern. Doppelklicken, um zurückzusetzen.",
+ "inspect.pretty": "Formatiert",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Inhalt als Hexdump anzeigen",
+ "inspect.saveRequest": "Anfrage speichern…",
+ "inspect.response": "Antwort",
+ "inspect.responseTip": "Header und Inhalt der Antwort",
+ "inspect.saveResponse": "Antwort speichern…",
+ "inspect.diff": "Vergleich",
+ "inspect.frames": "WS-Frames",
+ "inspect.framesHelp": "Live-WebSocket-Frames dieser Sitzung (Richtung, opcode, Vorschau der Nutzdaten).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events, aus dem Antwortinhalt gelesen.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Header anzeigen",
+ "inspect.hideHeaders": "Header ausblenden",
+ "inspect.headers": "Header ({0})",
+ "inspect.prettyTip": "JSON, XML und HTML einrücken",
+ "inspect.prettyHexTip": "In der Hex-Ansicht nicht verfügbar",
+ "inspect.emptyBody": "(leer)",
+ "inspect.noRequestBody": "Kein Anfrageinhalt",
+ "inspect.waiting": "Warten auf Antwort…",
+ "composer.help": "Erstellen und senden Sie eine Anfrage über den Proxy. Aus Auswahl laden kopiert die aktuelle Sitzung.",
+ "composer.method": "Methode",
+ "composer.url": "URL",
+ "composer.headers": "Header (Name: Wert je Zeile)",
+ "composer.body": "Inhalt",
+ "composer.loadSelected": "Aus Auswahl laden",
+ "composer.loadBody": "Inhalt aus Datei laden…",
+ "composer.send": "Senden",
+ "bp.help": "Passende Clientanfragen anhalten, um den Inhalt zu bearbeiten, fortzusetzen oder abzubrechen. Nur eine Pause gleichzeitig; nach 120s wird automatisch fortgesetzt. Wenn Aktiviert abgewählt wird, wird eine angehaltene Anfrage fortgesetzt.",
+ "bp.enabled": "Aktiviert",
+ "bp.breakOnResponse": "Bei Antwort anhalten",
+ "bp.match": "Übereinstimmung",
+ "bp.urlWatermark": "URL-Filter (* = alle, z. B. *api*/users*)",
+ "bp.graphqlWatermark": "Nur diese GraphQL-Operation (optional)",
+ "bp.graphqlTip": "Zusätzlicher Filter für den Inhalt der Clientanfrage. Trifft auf JSON operationName oder eine benannte Abfrage zu. Leer lassen, um jede Operation der URL zu treffen.",
+ "bp.fromSelected": "Aus gewählter Sitzung",
+ "bp.fromSelectedTip": "Kopiert den Namen der GraphQL-Operation aus der Anfrage der gewählten Sitzung.",
+ "bp.graphqlHelp": "Lassen Sie das GraphQL-Feld leer, um jede Operation zu treffen. Füllen Sie es aus (z. B. GetUser), um nur diese Clientanfrage für die URL oben anzuhalten. Bei Antwort anhalten verwendet weiterhin den URL-Filter.",
+ "bp.editWatermark": "Inhalt bearbeiten (Inhaltsänderung übernehmen, dann Fortsetzen)",
+ "bp.applyEdit": "Inhaltsänderung übernehmen",
+ "bp.continue": "Fortsetzen",
+ "bp.abort": "Abbrechen",
+ "ar.help": "Gibt vor dem echten Server eine künstliche Antwort zurück. Übereinstimmung legt fest, für welche Clientanfragen eine Regel gilt; die Felder darunter sind das, was Sie zurücksenden.",
+ "ar.enabled": "Aktiviert (vor Haltepunkten)",
+ "ar.urlWatermark": "URL-Übereinstimmung (*-Platzhalter)",
+ "ar.graphqlHelp": "Dieselbe URL, verschiedene GraphQL-Operationen können verschiedene Regeln verwenden. Leer lassen, um jede Operation zu treffen.",
+ "ar.respondWith": "Antworten mit",
+ "ar.statusTip": "HTTP-Status. Leer = 200. Verwenden Sie 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local-Datei (optional)",
+ "ar.bodyWatermark": "Antwortinhalt (verwendet, wenn Map Local leer ist)",
+ "ar.add": "Regel hinzufügen",
+ "ar.update": "Regel aktualisieren",
+ "ar.delete": "Regel löschen",
+ "script.intro": "Ein Befehl je Zeile, für jede erfasste Sitzung. Das ist kein JavaScript und kein C# — geben Sie nur die Befehle unten ein.",
+ "script.what": "Was Sie eingeben können",
+ "script.setHeaderHelp": "Einen Header hinzufügen oder ersetzen. Der Datenverkehr geht weiter zum Server.",
+ "script.setStatusHelp": "Bei der Anfrage: sofort antworten und den Server überspringen. Bei der Antwort: den Status ändern, den der Client sieht.",
+ "script.abortHelp": "Mit 403 Forbidden blockieren. Fügen Sie eine set-status-Zeile hinzu, um einen anderen Code zu wählen.",
+ "script.comment": "Beginnen Sie eine Zeile mit # oder // für einen Kommentar. Sie können Befehle kombinieren; setzen Sie jeden in eine eigene Zeile.",
+ "script.onRequest": "Bei Anfrage",
+ "script.onResponse": "Bei Antwort",
+ "script.requestSkips": "abort oder set-status hier überspringt AutoResponder, Haltepunkte und den Ursprung.",
+ "map.help": "Schreibt passende Clientanfragen vor dem echten Server auf einen anderen Ursprung um. Verwenden Sie ein einzelnes * in Übereinstimmung und Ziel, um ein Pfad- oder Abfrage-Suffix zu erhalten. Läuft nach AutoResponder / Map Local.",
+ "map.graphqlHelp": "Leer lassen, um jede Operation der URL umzuschreiben. Ausfüllen, um nur diese GraphQL-Operation umzuschreiben.",
+ "map.rewriteTo": "Umschreiben nach",
+ "map.targetWatermark": "Ziel-URL (absolut, optionales *)",
+ "loopback.allow": "Zulassen",
+ "loopback.appName": "App-Name",
+ "loopback.packageId": "Paket-ID",
+ "status.ready": "Bereit",
+ "status.searchingBodies": "Inhalte werden durchsucht…",
+ "status.proxyStopped": "Proxy beendet",
+ "status.proxyRunning": "Proxy läuft auf {0}",
+ "trust.health.trusted": "CA vertrauenswürdig",
+ "trust.health.untrusted": "CA nicht vertrauenswürdig"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.el.json b/src/Titanium.Inspector/Localization/strings.el.json
new file mode 100644
index 000000000..b70feddbd
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.el.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Αρχείο",
+ "menu.exportAllHar": "Εξαγωγή όλων των HAR…",
+ "menu.exportSelectedHar": "Εξαγωγή επιλεγμένων HAR…",
+ "menu.importHar": "Εισαγωγή HAR…",
+ "menu.exportAllArchive": "Εξαγωγή όλης της αρχειοθήκης…",
+ "menu.exportSelectedArchive": "Εξαγωγή επιλεγμένης αρχειοθήκης…",
+ "menu.importArchive": "Εισαγωγή αρχειοθήκης…",
+ "menu.exit": "Έξοδος",
+ "menu.capture": "Καταγραφή",
+ "menu.startProxy": "Εκκίνηση διαμεσολαβητή",
+ "menu.stopProxy": "Διακοπή διαμεσολαβητή",
+ "menu.capturing": "Καταγραφή σε εξέλιξη",
+ "menu.clearSessions": "Εκκαθάριση συνεδριών",
+ "menu.removeSelected": "Αφαίρεση επιλεγμένων",
+ "menu.autoStartCapture": "Αυτόματη έναρξη καταγραφής",
+ "menu.autoSystemProxy": "Διαμεσολαβητής συστήματος κατά την εκκίνηση",
+ "menu.decryptHttps": "Αποκρυπτογράφηση HTTPS",
+ "menu.systemProxy": "Διαμεσολαβητής συστήματος",
+ "menu.captureLocal": "Καταγραφή τοπικής κίνησης",
+ "menu.allowStoreApps": "Να επιτρέπονται οι εφαρμογές καταστήματος…",
+ "menu.installCa": "Εγκατάσταση ριζικού CA (τρέχων χρήστης)",
+ "menu.removeCa": "Αφαίρεση ριζικού CA (τρέχων χρήστης)",
+ "menu.rotateCa": "Εκκαθάριση και επανεγκατάσταση ριζικού CA…",
+ "menu.removeOldCas": "Αφαίρεση παλιών ριζικών CA…",
+ "menu.exportCa": "Εξαγωγή ριζικού CA…",
+ "menu.trustFirefox": "Εμπιστοσύνη στο CA στο Firefox…",
+ "menu.deviceCa": "Ρύθμιση CA εξωτερικής συσκευής",
+ "menu.tools": "Εργαλεία",
+ "menu.composer": "Συνθέτης…",
+ "menu.breakpoints": "Σημεία διακοπής…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Σενάρια…",
+ "menu.mapRemote": "Απομακρυσμένη αντιστοίχιση…",
+ "menu.options": "Επιλογές",
+ "menu.theme": "Θέμα",
+ "menu.themeLight": "Ανοιχτό",
+ "menu.themeDark": "Σκούρο",
+ "menu.themeAutomatic": "Αυτόματα",
+ "menu.language": "Γλώσσα",
+ "menu.languageAutomatic": "Αυτόματα",
+ "menu.columns": "Στήλες",
+ "menu.col.id": "Αναγνωριστικό",
+ "menu.col.method": "Μέθοδος",
+ "menu.col.status": "Κατάσταση",
+ "menu.col.host": "Κόμβος",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Πρωτόκολλο",
+ "menu.col.duration": "Διάρκεια",
+ "menu.col.ttfb": "Αναμονή (TTFB)",
+ "menu.col.size": "Μέγεθος",
+ "menu.col.process": "Διεργασία",
+ "menu.col.started": "Έναρξη",
+ "menu.col.scheme": "Σχήμα",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Επαναφορά στηλών",
+ "menu.sessionRetention": "Διατήρηση συνεδριών…",
+ "menu.excludedHosts": "Εξαιρούμενοι κόμβοι…",
+ "menu.excludedHostsTip": "Λίστες παράλειψης αποκρυπτογράφησης HTTPS και κανόνες παράκαμψης λειτουργικού",
+ "menu.ignoreCerts": "Παράβλεψη μη ασφαλών πιστοποιητικών διακομιστή",
+ "menu.addVia": "Προσθήκη κεφαλίδας Via",
+ "menu.addViaTip": "Προσάρτηση Via: … titanium-web-proxy στην κίνηση που παρεμποδίζεται (RFC 9110). Η απενεργοποίηση σταματά την προσθήκη και τον εντοπισμό βρόχων Via.",
+ "menu.logging": "Ημερολόγιο…",
+ "menu.resetSettings": "Επαναφορά ρυθμίσεων Inspector…",
+ "menu.help": "Βοήθεια",
+ "menu.checkUpdates": "Έλεγχος ενημερώσεων…",
+ "menu.checkUpdatesStartup": "Έλεγχος ενημερώσεων κατά την εκκίνηση",
+ "menu.updateChannel": "Κανάλι ενημερώσεων",
+ "menu.channelStable": "Σταθερό",
+ "menu.channelBeta": "Βήτα",
+ "menu.about": "Πληροφορίες για το Titanium Inspector…",
+ "toolbar.searchWatermark": "Αναζήτηση URL, κόμβου, διεργασίας… (ή method:GET status:4xx)",
+ "toolbar.searchTip": "Το απλό κείμενο αναζητά URL, κόμβο, όνομα διεργασίας, ακριβές αναγνωριστικό διεργασίας, μέθοδο και κατάσταση. Τα προθέματα περιορίζουν την αναζήτηση σε ένα πεδίο: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. Το body: αναζητά και σώματα που γράφτηκαν στον δίσκο. Βάλτε - πριν από ένα πεδίο ή μια λέξη για να το εξαιρέσετε (π.χ. -host:cursor.sh ή -cursor). Τα Φίλτρα επεξεργάζονται κρυφούς κόμβους και διεργασίες με περισσότερο χώρο.",
+ "toolbar.filters": "Φίλτρα",
+ "toolbar.filtersTip": "Επεξεργασία της αναζήτησης και των κρυφών κόμβων ή διεργασιών σε μεγαλύτερο παράθυρο",
+ "toolbar.hideConnect": "Απόκρυψη CONNECT",
+ "toolbar.hideConnectTip": "Απόκρυψη αδιαφανών σηράγγων HTTPS όταν η αποκρυπτογράφηση HTTPS είναι ανενεργή",
+ "toolbar.hideImages": "Απόκρυψη εικόνων",
+ "toolbar.errorsOnly": "Μόνο σφάλματα",
+ "toolbar.clearFilters": "Εκκαθάριση φίλτρων",
+ "toolbar.hidden": "Κρυφά",
+ "ctx.replay": "Επανάληψη",
+ "ctx.loadComposer": "Φόρτωση στον Συνθέτη",
+ "ctx.saveRequest": "Αποθήκευση σώματος αιτήματος…",
+ "ctx.saveResponse": "Αποθήκευση σώματος απόκρισης…",
+ "ctx.copyUrl": "Αντιγραφή URL",
+ "ctx.copyCurl": "Αντιγραφή ως curl",
+ "ctx.copyFetch": "Αντιγραφή ως fetch",
+ "ctx.diff": "Σύγκριση επιλεγμένων…",
+ "ctx.filterHost": "Φιλτράρισμα κατά κόμβο",
+ "ctx.hideHost": "Απόκρυψη κόμβου",
+ "ctx.filterProcess": "Φιλτράρισμα κατά διεργασία",
+ "ctx.hideProcess": "Απόκρυψη διεργασίας",
+ "ctx.excludeHost": "Εξαίρεση κόμβου…",
+ "ctx.excludeHostTip": "Διακοπή της αποκρυπτογράφησης HTTPS αυτού του κόμβου. Οι γραμμές μένουν στη λίστα· για να τις αφαιρέσετε από την προβολή, χρησιμοποιήστε «Απόκρυψη κόμβου».",
+ "grid.duration": "Διάρκεια (ms)",
+ "grid.wait": "Αναμονή (ms)",
+ "pane.inspect": "Επιθεώρηση",
+ "pane.composer": "Συνθέτης",
+ "pane.breakpoints": "Σημεία διακοπής",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Σενάρια",
+ "pane.mapRemote": "Απομακρυσμένη αντιστοίχιση",
+ "pane.closeTip": "Κλείσιμο πλαισίου",
+ "inspect.empty": "Επιλέξτε μια συνεδρία στο πλέγμα για να επιθεωρήσετε κεφαλίδες και σώματα αιτήματος και απόκρισης.",
+ "common.ok": "Εντάξει",
+ "common.cancel": "Ακύρωση",
+ "common.save": "Αποθήκευση",
+ "common.apply": "Εφαρμογή",
+ "common.remove": "Αφαίρεση",
+ "common.browse": "Επισκόπηση…",
+ "common.openFolder": "Άνοιγμα φακέλου",
+ "common.forget": "Να ξεχαστεί",
+ "common.close": "Κλείσιμο",
+ "loopback.window": "Να επιτρέπεται στις εφαρμογές καταστήματος να χρησιμοποιούν αυτόν τον διαμεσολαβητή",
+ "loopback.checkAll": "Επιλογή όλων",
+ "loopback.uncheckAll": "Αποεπιλογή όλων",
+ "loopback.filterWatermark": "Φιλτράρισμα κατά όνομα εφαρμογής…",
+ "loopback.clearAll": "Εκκαθάριση όλων",
+ "trust.macWindow": "Επιβεβαιώστε την εμπιστοσύνη στο Keychain Access",
+ "trust.openKeychain": "Άνοιγμα Keychain Access",
+ "trust.notNow": "Όχι τώρα",
+ "trust.recoveryTitle": "Εμπιστοσύνη ριζικού CA",
+ "trust.macWaitPlaceholder": "Αναμονή για εμπιστοσύνη SSL…",
+ "window.about": "Πληροφορίες για το Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Πνευματικά δικαιώματα © Jehonathan Thomas",
+ "about.license": "Αδειοδοτημένο με την PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Λεπτομέρειες άδειας",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Φίλτρα",
+ "filters.search": "Αναζήτηση",
+ "filters.searchHelp": "Η ίδια αναζήτηση με τη γραμμή εργαλείων, με περισσότερο χώρο. Οι κρυφοί κόμβοι και οι διεργασίες παρατίθενται παρακάτω, όχι σε αυτό το πλαίσιο.",
+ "filters.searchWatermark": "URL, κόμβος, διεργασία, method:GET, status:4xx…",
+ "filters.hideHeading": "Απόκρυψη από τη λίστα",
+ "filters.hideHelp": "Οι γραμμές παραμένουν καταγεγραμμένες. Αυτό μόνο τις κρύβει στη λίστα. Για να σταματήσει η αποκρυπτογράφηση HTTPS, χρησιμοποιήστε «Εξαίρεση κόμβου…».",
+ "filters.hosts": "Κόμβοι",
+ "filters.addHostWatermark": "Προσθήκη κόμβου για απόκρυψη",
+ "filters.addHost": "Προσθήκη κόμβου",
+ "filters.processes": "Διεργασίες",
+ "filters.addProcessWatermark": "Προσθήκη διεργασίας για απόκρυψη",
+ "filters.addProcess": "Προσθήκη διεργασίας",
+ "filters.processSpace": "Ένα όνομα με κενό συντομεύεται στην πρώτη λέξη, οπότε μπορεί να κρυφτούν και άλλα ονόματα που περιέχουν αυτή τη λέξη.",
+ "window.confirm": "Επιβεβαίωση",
+ "window.excludeHost": "Εξαίρεση κόμβου",
+ "exclude.action": "Εξαίρεση",
+ "exclude.help": "Αυτός ο κόμβος θα συνεχίσει να εμφανίζεται στη λίστα συνεδριών. Το Inspector δεν θα προσπαθήσει να διαβάσει το HTTPS του.",
+ "window.logging": "Ημερολόγιο",
+ "logging.help": "Εγγραφή διαγνωστικών μηνυμάτων για αντιμετώπιση προβλημάτων. Οι αλλαγές εφαρμόζονται αμέσως.",
+ "logging.enable": "Ενεργοποίηση ημερολογίου",
+ "logging.writeFile": "Εγγραφή ημερολογίου σε αρχείο",
+ "logging.detail": "Πόση λεπτομέρεια",
+ "logging.detailHelp": "Error = μόνο προβλήματα. Warning / Information = περισσότερο πλαίσιο. Debug = πολύ αναλυτικά.",
+ "logging.path": "Διαδρομή αρχείου ημερολογίου",
+ "window.excludedHosts": "Εξαιρούμενοι κόμβοι",
+ "excluded.reset": "Επαναφορά προεπιλογών",
+ "excluded.bypass": "Παράκαμψη διαμεσολαβητή (ΛΣ)",
+ "excluded.bypassHelp": "Η κίνηση δεν φτάνει ποτέ στο Inspector όταν ο διαμεσολαβητής συστήματος είναι ενεργός. Αρχικά έχουν προστεθεί κόμβοι Microsoft identity / SSO / RDP. Η αφαίρεσή τους μπορεί να χαλάσει τη σύνδεση RDP όσο ο διαμεσολαβητής συστήματος είναι ενεργός.",
+ "excluded.notDecrypted": "Κόμβοι χωρίς αποκρυπτογράφηση",
+ "excluded.notDecryptedHelp": "Το CONNECT μένει ορατό· το TLS μένει αδιαφανές όταν η αποκρυπτογράφηση HTTPS είναι ενεργή. Αρχικά έχουν προστεθεί κόμβοι με καρφίτσωμα πιστοποιητικού (Dropbox, Webex).",
+ "excluded.learnHeading": "Αυτόματη μη αποκρυπτογράφηση σε αποτυχία αποκρυπτογράφησης",
+ "excluded.learn": "Απομνημόνευση κόμβων των οποίων το TLS προέλευσης αποτυγχάνει υπό αποκρυπτογράφηση",
+ "excluded.learnHelp": "Όταν το TLS προέλευσης αποτυγχάνει επανειλημμένα υπό αποκρυπτογράφηση ή ο διακομιστής προέλευσης επιστρέφει 403/429, το Inspector σταματά την αποκρυπτογράφηση αυτού του κόμβου για μεταγενέστερες συνδέσεις σε αυτή τη συνεδρία. Η λίστα έχει όριο και ξεχνιέται κατά την επανεκκίνηση, εκτός αν προαγάγετε την καταχώριση.",
+ "excluded.learnPaused": "Η εκμάθηση παύθηκε — οι υπάρχουσες καταχωρίσεις διατηρούνται μέχρι να ξεχαστούν.",
+ "excluded.noneLearned": "Δεν έχουν απομνημονευτεί κόμβοι ακόμη.",
+ "excluded.promote": "Προαγωγή σε κόμβους χωρίς αποκρυπτογράφηση",
+ "excluded.clearLearned": "Εκκαθάριση όλων των απομνημονευμένων",
+ "window.retention": "Διατήρηση συνεδριών",
+ "retention.max": "Μέγιστος αριθμός συνεδριών προς διατήρηση",
+ "retention.maxHelp": "Πόσα αιτήματα μένουν στη λίστα συνεδριών. Όταν ξεπεραστεί, οι παλαιότερες γραμμές φεύγουν από τη λίστα αλλά μένουν στον δίσκο μέχρι να τις αφαιρέσει η «Εκκαθάριση συνεδριών» ή το όριο χώρου δίσκου.",
+ "retention.cache": "Φάκελος προσωρινής μνήμης",
+ "retention.openCache": "Άνοιγμα φακέλου προσωρινής μνήμης",
+ "retention.clearCache": "Εκκαθάριση αποθηκευμένης προσωρινής μνήμης συνεδριών…",
+ "retention.advanced": "Για προχωρημένους",
+ "retention.disk": "Χώρος δίσκου για αποθηκευμένες συνεδρίες (MB)",
+ "retention.diskHelp": "Μέγιστος χώρος για όλες τις αποθηκευμένες συνεδρίες στον δίσκο (όλες οι εκτελέσεις του Inspector). Κάθε εκτέλεση χρησιμοποιεί υποφάκελο με χρονοσήμανση· όταν ξεπεραστεί το όριο, διαγράφονται πρώτα τα παλαιότερα αρχεία HAR. Οι κενοί φάκελοι εκτελέσεων αφαιρούνται.",
+ "loopback.intro": "Οι εφαρμογές Windows Store / UWP αποκλείονται από το localhost από προεπιλογή. Επιλέξτε τις εφαρμογές που πρέπει να χρησιμοποιούν το Inspector και πατήστε Εφαρμογή. Επανεκκινήστε κάθε εφαρμογή (κλείστε την πλήρως) μετά την Εφαρμογή. Το Inspector πρέπει να εκτελείται με ενεργό τον διαμεσολαβητή συστήματος. Η «Εκκαθάριση όλων» αφαιρεί κάθε καταχώριση άδειας.",
+ "loopback.closedUnchanged": "Οι εφαρμογές καταστήματος δεν άλλαξαν.",
+ "loopback.proxyStopped": "Εκκινήστε τον διαμεσολαβητή και ενεργοποιήστε τον διαμεσολαβητή συστήματος. Οι εφαρμογές καταστήματος δεν καταγράφονται μέχρι να είναι ενεργά και τα δύο.",
+ "loopback.systemProxyOff": "Ενεργοποιήστε τον διαμεσολαβητή συστήματος (μενού Καταγραφή). Η λίστα αδειών επιτρέπει μόνο στις εφαρμογές καταστήματος να φτάνουν στο localhost· εξακολουθούν να ακολουθούν τον διαμεσολαβητή συστήματος.",
+ "loopback.refreshing": "Ανανέωση του διαμεσολαβητή συστήματος ώστε οι εκτελούμενες εφαρμογές να επανασυνδεθούν…",
+ "loopback.unchangedCount": "Η λίστα αδειών ήδη ταιριάζει: {0}.",
+ "loopback.allowed": "Επιτράπηκαν: {0}.",
+ "loopback.allowedRefreshed": " Ο διαμεσολαβητής συστήματος ανανεώθηκε ώστε οι εκτελούμενες εφαρμογές να επανασυνδεθούν. Αν η κίνηση εξακολουθεί να μην εμφανίζεται, κλείστε πλήρως την εφαρμογή και ανοίξτε την ξανά.",
+ "loopback.allowedProxyStopped": " Εκκινήστε τον διαμεσολαβητή και ενεργοποιήστε τον διαμεσολαβητή συστήματος, έπειτα κλείστε πλήρως την εφαρμογή και ανοίξτε την ξανά.",
+ "loopback.allowedSystemProxyOff": " Ενεργοποιήστε τον διαμεσολαβητή συστήματος, έπειτα κλείστε πλήρως την εφαρμογή και ανοίξτε την ξανά.",
+ "loopback.allowedReady": " Κλείστε πλήρως την εφαρμογή και ανοίξτε την ξανά για να καταγραφεί η κίνηση.",
+ "loopback.clearedRefreshed": "Όλες οι εξαιρέσεις τοπικού βρόχου εκκαθαρίστηκαν. Ο διαμεσολαβητής συστήματος ανανεώθηκε ώστε οι εκτελούμενες εφαρμογές να επανασυνδεθούν.",
+ "loopback.clearedReady": "Όλες οι εξαιρέσεις τοπικού βρόχου εκκαθαρίστηκαν. Κλείστε πλήρως και ανοίξτε ξανά κάθε εφαρμογή που χρησιμοποιούσε το Inspector.",
+ "loopback.cleared": "Όλες οι εξαιρέσεις τοπικού βρόχου εκκαθαρίστηκαν.",
+ "trust.macWaitBody": "Το παράθυρο πληροφοριών του Keychain Access μπορεί ήδη να δείχνει «Πάντα εμπιστοσύνη» ακόμη κι αν οι πολιτικές SSL δεν αποθηκεύτηκαν (το Chrome και το Inspector εξακολουθούν να θεωρούν το CA μη αξιόπιστο).\n\nΕπιβάλετε αποθήκευση:\n1. Keychain Access → login → Πιστοποιητικά → διπλό κλικ στο Titanium Root Certificate Authority\n2. Αναπτύξτε την Εμπιστοσύνη\n3. Ορίστε το «Κατά τη χρήση αυτού του πιστοποιητικού» σε «Χρήση προεπιλογών συστήματος» και έπειτα αλλάξτε το ξανά σε «Πάντα εμπιστοσύνη»\n4. Κλείστε τις πληροφορίες — πρέπει να εμφανιστεί προτροπή κωδικού· αυτή γράφει τις πραγματικές πολιτικές εμπιστοσύνης SSL\n\nΑυτό το παράθυρο κλείνει αυτόματα όταν εντοπιστούν αυτές οι πολιτικές. Αν έχετε ήδη αποθηκεύσει, πατήστε «Έχω αποθηκεύσει την Πάντα εμπιστοσύνη».",
+ "trust.macWaitStatus": "Αναμονή για το πιστοποιητικό στο Keychain…",
+ "trust.macWaitInKeychain": "Αναμονή για αποθηκευμένες πολιτικές SSL (εναλλάξτε την Πάντα εμπιστοσύνη, κλείστε τις πληροφορίες, εισαγάγετε τον κωδικό)…",
+ "trust.macNotSaved": "Η ένδειξη «Πάντα εμπιστοσύνη» δεν αρκεί — εναλλάξτε «Χρήση προεπιλογών συστήματος» → «Πάντα εμπιστοσύνη», κλείστε τις πληροφορίες, εισαγάγετε τον κωδικό και δοκιμάστε ξανά «Εγκατάσταση ριζικού CA» / «Αποκρυπτογράφηση HTTPS»",
+ "trust.macConfirmSaved": "Έχω αποθηκεύσει την Πάντα εμπιστοσύνη",
+ "trust.exportCa": "Εξαγωγή CA",
+ "trust.install.mac": "Η αποκρυπτογράφηση HTTPS απαιτεί εμπιστοσύνη στο ριζικό CA του Titanium Inspector στο Keychain Access (κλειδοθήκη login). Εγκατάσταση τώρα;",
+ "trust.install.linux": "Η αποκρυπτογράφηση HTTPS απαιτεί εμπιστοσύνη στο ριζικό CA του Titanium Inspector στο χώρο πιστοποιητικών χρήστη (NSS). Εγκατάσταση τώρα;",
+ "trust.install.windows": "Η αποκρυπτογράφηση HTTPS απαιτεί εμπιστοσύνη στο ριζικό CA του Titanium Inspector στο χώρο αξιόπιστων ριζικών του τρέχοντος χρήστη. Εγκατάσταση τώρα;\n\nΤα Windows μπορεί να εμφανίσουν διάλογο ασφαλείας Ναι/Όχι για αξιόπιστη ρίζα (όχι UAC) — επιλέξτε Ναι για να εμπιστευτείτε το CA.",
+ "trust.install.other": "Η αποκρυπτογράφηση HTTPS απαιτεί εμπιστοσύνη στο ριζικό CA του Titanium Inspector σε αυτόν τον υπολογιστή. Εγκατάσταση τώρα;",
+ "trust.remove.mac": "Αφαίρεση του ριζικού CA του Titanium Inspector από το Keychain; Η αποκρυπτογράφηση HTTPS θα απενεργοποιηθεί.",
+ "trust.remove.linux": "Αφαίρεση του ριζικού CA του Titanium Inspector από το χώρο πιστοποιητικών χρήστη (NSS); Η αποκρυπτογράφηση HTTPS θα απενεργοποιηθεί.",
+ "trust.remove.windows": "Αφαίρεση του ριζικού CA του Titanium Inspector από το χώρο αξιόπιστων ριζικών του τρέχοντος χρήστη; Η αποκρυπτογράφηση HTTPS θα απενεργοποιηθεί.",
+ "trust.remove.other": "Αφαίρεση του ριζικού CA του Titanium Inspector; Η αποκρυπτογράφηση HTTPS θα απενεργοποιηθεί.",
+ "trust.elevate.mac": "Η εμπιστοσύνη σε επίπεδο χρήστη απέτυχε ή δεν ήταν αρκετή. Συνέχεια για εμφάνιση προτροπής κωδικού διαχειριστή macOS; Η Ακύρωση αφήνει τις ρυθμίσεις πιστοποιητικών αμετάβλητες.",
+ "trust.elevate.linux": "Η εμπιστοσύνη σε επίπεδο χρήστη απέτυχε ή δεν ήταν αρκετή. Συνέχεια για εμφάνιση προτροπής διαχειριστή polkit; Η Ακύρωση αφήνει τις ρυθμίσεις πιστοποιητικών αμετάβλητες.",
+ "trust.elevate.windows": "Η εμπιστοσύνη σε επίπεδο χρήστη απέτυχε ή δεν ήταν αρκετή. Συνέχεια για εμφάνιση UAC; Η Ακύρωση αφήνει τις ρυθμίσεις πιστοποιητικών αμετάβλητες.",
+ "trust.elevate.other": "Η εμπιστοσύνη σε επίπεδο χρήστη απέτυχε ή δεν ήταν αρκετή. Συνέχεια με προτροπή διαχειριστή; Η Ακύρωση αφήνει τις ρυθμίσεις πιστοποιητικών αμετάβλητες.",
+ "trust.recovery.mac": "\n\nΣυνέχεια για εμφάνιση προτροπής κωδικού διαχειριστή macOS; Το «Όχι τώρα» αφήνει τις ρυθμίσεις πιστοποιητικών αμετάβλητες.",
+ "trust.recovery.linux": "\n\nΣυνέχεια για εμφάνιση προτροπής διαχειριστή polkit; Το «Όχι τώρα» αφήνει τις ρυθμίσεις πιστοποιητικών αμετάβλητες.",
+ "trust.recovery.windows": "\n\nΣυνέχεια για εμφάνιση UAC; Το «Όχι τώρα» αφήνει τις ρυθμίσεις πιστοποιητικών αμετάβλητες.",
+ "trust.recovery.other": "\n\nΣυνέχεια με προτροπή διαχειριστή; Το «Όχι τώρα» αφήνει τις ρυθμίσεις πιστοποιητικών αμετάβλητες.",
+ "trust.hosts.mac": "Η παράκαμψη λειτουργικού χρειάζεται Καταγραφή → Διαμεσολαβητής συστήματος (χρησιμοποιεί τις ρυθμίσεις διαμεσολαβητή δικτύου του macOS). Οι κανόνες μόνο για σήραγγα ισχύουν για κάθε πελάτη που φτάνει στο Inspector. Οι εργοστασιακές προεπιλογές έχουν ήδη μπει στις παρακάτω λίστες — επεξεργαστείτε τις ελεύθερα ή επαναφέρετε.",
+ "trust.hosts.linux": "Η παράκαμψη λειτουργικού χρειάζεται Καταγραφή → Διαμεσολαβητής συστήματος (χρησιμοποιεί ρυθμίσεις διαμεσολαβητή επιφάνειας εργασίας / περιβάλλοντος). Οι κανόνες μόνο για σήραγγα ισχύουν για κάθε πελάτη που φτάνει στο Inspector. Οι εργοστασιακές προεπιλογές έχουν ήδη μπει στις παρακάτω λίστες — επεξεργαστείτε τις ελεύθερα ή επαναφέρετε.",
+ "trust.hosts.windows": "Η παράκαμψη λειτουργικού χρειάζεται Καταγραφή → Διαμεσολαβητής συστήματος (χρησιμοποιεί το WinINET). Οι κανόνες μόνο για σήραγγα ισχύουν για κάθε πελάτη που φτάνει στο Inspector. Οι εργοστασιακές προεπιλογές έχουν ήδη μπει στις παρακάτω λίστες — επεξεργαστείτε τις ελεύθερα ή επαναφέρετε.",
+ "trust.hosts.other": "Η παράκαμψη λειτουργικού χρειάζεται Καταγραφή → Διαμεσολαβητής συστήματος. Οι κανόνες μόνο για σήραγγα ισχύουν για κάθε πελάτη που φτάνει στο Inspector. Οι εργοστασιακές προεπιλογές έχουν ήδη μπει στις παρακάτω λίστες — επεξεργαστείτε τις ελεύθερα ή επαναφέρετε.",
+ "trust.localhost.mac": "Όταν ο διαμεσολαβητής συστήματος είναι ενεργός, στέλνετε το localhost μέσω του Inspector. Η απενεργοποίηση προσθέτει το localhost στη λίστα παράκαμψης διαμεσολαβητή του macOS.",
+ "trust.localhost.linux": "Όταν ο διαμεσολαβητής συστήματος είναι ενεργός, στέλνετε το localhost μέσω του Inspector. Η απενεργοποίηση προσθέτει το localhost στο NO_PROXY.",
+ "trust.localhost.windows": "Όταν ο διαμεσολαβητής συστήματος είναι ενεργός, στέλνετε το localhost μέσω του Inspector (WinINET <-loopback>). Η απενεργοποίηση επιτρέπει στον τοπικό βρόχο να παρακάμπτει τον διαμεσολαβητή.",
+ "trust.localhost.other": "Όταν ο διαμεσολαβητής συστήματος είναι ενεργός, στέλνετε το localhost μέσω του Inspector.",
+ "trust.status.missing": "Το ριζικό CA δεν είναι ακόμη αξιόπιστο — δοκιμάστε ξανά ή εξαγάγετε το CA",
+ "trust.status.cancelled": "Η εγκατάσταση ριζικού CA ακυρώθηκε",
+ "trust.status.certutil": "Λείπουν τα εργαλεία πιστοποιητικών του προγράμματος περιήγησης — εγκαταστήστε τα, δοκιμάστε ξανά ή εξαγάγετε το CA",
+ "trust.status.homebrew": "Απαιτείται το Homebrew για την εγκατάσταση εργαλείων πιστοποιητικών — εξαγάγετε το CA για μη αυτόματη εμπιστοσύνη",
+ "trust.status.macConfirm": "Ορίστε «Πάντα εμπιστοσύνη» για το ριζικό CA του Titanium Inspector στο Keychain Access",
+ "trust.status.keychain": "Η εμπιστοσύνη στο Keychain απέτυχε — δοκιμάστε ξανά ή εξαγάγετε το CA και εμπιστευτείτε το μη αυτόματα",
+ "trust.fail.keychainTitle": "Επιβεβαιώστε την εμπιστοσύνη στο Keychain",
+ "trust.fail.continueKeychain": "Συνέχεια στο Keychain Access",
+ "trust.fail.toolsTitle": "Απαιτούνται εργαλεία πιστοποιητικών",
+ "trust.fail.toolsLinux": "Το Inspector χρειάζεται το certutil (εργαλεία NSS) για να ολοκληρώσει την εμπιστοσύνη στο ριζικό CA.",
+ "trust.fail.toolsOther": "Το Inspector χρειάζεται εργαλεία πιστοποιητικών προγράμματος περιήγησης για να ολοκληρώσει την εμπιστοσύνη στο ριζικό CA.",
+ "trust.fail.tryAgain": "Προσπάθεια ξανά",
+ "trust.fail.homebrewBody": "Απαιτείται το Homebrew για την εγκατάσταση εργαλείων πιστοποιητικών. Εξαγάγετε το CA για να το εμπιστευτείτε μη αυτόματα.",
+ "trust.fail.title": "Δεν είναι ακόμη δυνατή η αποκρυπτογράφηση HTTPS",
+ "trust.fail.body": "Το ριζικό CA του Titanium Inspector δεν είναι ακόμη αξιόπιστο σε αυτόν τον υπολογιστή.",
+ "toolbar.throttle": "Περιορισμός",
+ "toolbar.throttleTip": "Προσθήκη καθυστέρησης και διαμόρφωσης εύρους ζώνης κατά την καταγραφή (εγγραφές σώματος / πλαίσια WebSocket). Ανενεργό από προεπιλογή.",
+ "toolbar.bindWatermark": "*, localhost ή IP",
+ "toolbar.bindTip": "127.0.0.1 ή localhost = μόνο αυτός ο υπολογιστής. 0.0.0.0 ή * = όλοι οι προσαρμογείς δικτύου (συμπεριλαμβάνεται το localhost).",
+ "toolbar.portWatermark": "*, ή θύρα",
+ "toolbar.portTip": "* ή κενό = θύρα που επιλέγει το λειτουργικό (η πραγματική θύρα εμφανίζεται μετά την εκκίνηση). Διαφορετικά 1–65535.",
+ "toolbar.listeningTip": "Ο διαμεσολαβητής ακούει",
+ "toolbar.trustHealthTip": "Κατάσταση εμπιστοσύνης ριζικού CA για την Αποκρυπτογράφηση HTTPS. Εγκαταστήστε ή εμπιστευτείτε το CA, αν εδώ λέει ότι το CA δεν είναι αξιόπιστο.",
+ "chip.process": "διεργασία",
+ "inspect.request": "Αίτημα",
+ "inspect.requestTip": "Κεφαλίδες και σώμα αιτήματος",
+ "inspect.copyHeaders": "Αντιγραφή κεφαλίδων",
+ "inspect.resizeTip": "Σύρετε για αλλαγή μεγέθους. Διπλό κλικ για επαναφορά.",
+ "inspect.pretty": "Ευανάγνωστα",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Εμφάνιση του σώματος ως αποτύπωση Hex",
+ "inspect.saveRequest": "Αποθήκευση αιτήματος…",
+ "inspect.response": "Απόκριση",
+ "inspect.responseTip": "Κεφαλίδες και σώμα απόκρισης",
+ "inspect.saveResponse": "Αποθήκευση απόκρισης…",
+ "inspect.diff": "Διαφορά",
+ "inspect.frames": "Πλαίσια WS",
+ "inspect.framesHelp": "Ζωντανά πλαίσια WebSocket για αυτήν τη συνεδρία (κατεύθυνση, opcode, προεπισκόπηση δεδομένων).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events αναλυμένα από το σώμα της απόκρισης.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Εμφάνιση κεφαλίδων",
+ "inspect.hideHeaders": "Απόκρυψη κεφαλίδων",
+ "inspect.headers": "Κεφαλίδες ({0})",
+ "inspect.prettyTip": "Εσοχή σε JSON, XML και HTML",
+ "inspect.prettyHexTip": "Δεν ισχύει στην προβολή Hex",
+ "inspect.emptyBody": "(κενό)",
+ "inspect.noRequestBody": "Χωρίς σώμα αιτήματος",
+ "inspect.waiting": "Αναμονή για απόκριση…",
+ "composer.help": "Δημιουργήστε και στείλτε ένα αίτημα μέσω του διαμεσολαβητή. Η Φόρτωση από το επιλεγμένο αντιγράφει την τρέχουσα συνεδρία.",
+ "composer.method": "Μέθοδος",
+ "composer.url": "URL",
+ "composer.headers": "Κεφαλίδες (Όνομα: Τιμή ανά γραμμή)",
+ "composer.body": "Σώμα",
+ "composer.loadSelected": "Φόρτωση από το επιλεγμένο",
+ "composer.loadBody": "Φόρτωση σώματος από αρχείο…",
+ "composer.send": "Αποστολή",
+ "bp.help": "Παύση των αντίστοιχων αιτημάτων πελάτη για επεξεργασία του σώματος, συνέχεια ή ματαίωση. Μία παύση τη φορά· αυτόματη συνέχεια μετά από 120s. Αν καταργήσετε την επιλογή Ενεργό, ένα αίτημα σε παύση συνεχίζει.",
+ "bp.enabled": "Ενεργό",
+ "bp.breakOnResponse": "Διακοπή στην απόκριση",
+ "bp.match": "Ταίριασμα",
+ "bp.urlWatermark": "Φίλτρο URL (* = όλα, π.χ. *api*/users*)",
+ "bp.graphqlWatermark": "Μόνο αυτή η λειτουργία GraphQL (προαιρετικό)",
+ "bp.graphqlTip": "Επιπλέον φίλτρο στο σώμα αιτήματος πελάτη. Ταιριάζει με το JSON operationName ή ένα επώνυμο ερώτημα. Αφήστε το κενό για ταίριασμα κάθε λειτουργίας στο URL.",
+ "bp.fromSelected": "Από την επιλεγμένη συνεδρία",
+ "bp.fromSelectedTip": "Αντιγραφή του ονόματος λειτουργίας GraphQL από το αίτημα της επιλεγμένης συνεδρίας.",
+ "bp.graphqlHelp": "Αφήστε το πλαίσιο GraphQL κενό για ταίριασμα κάθε λειτουργίας. Συμπληρώστε το (π.χ. GetUser) για παύση μόνο αυτού του αιτήματος πελάτη στο URL παραπάνω. Η Διακοπή στην απόκριση εξακολουθεί να χρησιμοποιεί το φίλτρο URL.",
+ "bp.editWatermark": "Επεξεργασία σώματος (Εφαρμογή επεξεργασίας σώματος, έπειτα Συνέχεια)",
+ "bp.applyEdit": "Εφαρμογή επεξεργασίας σώματος",
+ "bp.continue": "Συνέχεια",
+ "bp.abort": "Ματαίωση",
+ "ar.help": "Επιστροφή πλαστής απόκρισης πριν από τον πραγματικό διακομιστή. Το Ταίριασμα αποφασίζει σε ποια αιτήματα πελάτη ισχύει ένας κανόνας· τα πεδία από κάτω είναι αυτό που στέλνετε πίσω.",
+ "ar.enabled": "Ενεργό (πριν από τα σημεία διακοπής)",
+ "ar.urlWatermark": "Ταίριασμα URL (μπαλαντέρ *)",
+ "ar.graphqlHelp": "Στο ίδιο URL, διαφορετικές λειτουργίες GraphQL μπορούν να χρησιμοποιούν διαφορετικούς κανόνες. Αφήστε το κενό για ταίριασμα κάθε λειτουργίας.",
+ "ar.respondWith": "Απόκριση με",
+ "ar.statusTip": "Κατάσταση HTTP. Κενό = 200. Χρησιμοποιήστε 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Αρχείο Map Local (προαιρετικό)",
+ "ar.bodyWatermark": "Σώμα απόκρισης (χρησιμοποιείται όταν το Map Local είναι κενό)",
+ "ar.add": "Προσθήκη κανόνα",
+ "ar.update": "Ενημέρωση κανόνα",
+ "ar.delete": "Διαγραφή κανόνα",
+ "script.intro": "Μία εντολή ανά γραμμή, σε κάθε καταγεγραμμένη συνεδρία. Αυτό δεν είναι JavaScript ούτε C# — πληκτρολογήστε μόνο τις εντολές παρακάτω.",
+ "script.what": "Τι μπορείτε να πληκτρολογήσετε",
+ "script.setHeaderHelp": "Προσθήκη ή αντικατάσταση κεφαλίδας. Η κίνηση συνεχίζει προς τον διακομιστή.",
+ "script.setStatusHelp": "Στο αίτημα: απάντηση τώρα και παράλειψη του διακομιστή. Στην απόκριση: αλλαγή της κατάστασης που βλέπει ο πελάτης.",
+ "script.abortHelp": "Φραγή με 403 Απαγορεύεται. Προσθέστε μια γραμμή set-status για διαφορετικό κωδικό.",
+ "script.comment": "Ξεκινήστε μια γραμμή με # ή // για σχόλιο. Μπορείτε να συνδυάσετε εντολές· βάλτε καθεμία στη δική της γραμμή.",
+ "script.onRequest": "Στο αίτημα",
+ "script.onResponse": "Στην απόκριση",
+ "script.requestSkips": "Τα abort ή set-status εδώ παραλείπουν τα εξής: AutoResponder, σημεία διακοπής και την προέλευση.",
+ "map.help": "Επανεγγραφή των αντίστοιχων αιτημάτων πελάτη σε άλλη προέλευση πριν από τον πραγματικό διακομιστή. Χρησιμοποιήστε ένα μόνο * στην αντιστοίχιση και στον στόχο για να διατηρηθεί η κατάληξη διαδρομής ή ερωτήματος. Εκτελείται μετά από τα AutoResponder / Map Local.",
+ "map.graphqlHelp": "Αφήστε το κενό για επανεγγραφή κάθε λειτουργίας στο URL. Συμπληρώστε το για επανεγγραφή μόνο αυτής της λειτουργίας GraphQL.",
+ "map.rewriteTo": "Επανεγγραφή σε",
+ "map.targetWatermark": "URL προορισμού (απόλυτο, προαιρετικό *)",
+ "loopback.allow": "Επιτρέπεται",
+ "loopback.appName": "Όνομα εφαρμογής",
+ "loopback.packageId": "Αναγνωριστικό πακέτου",
+ "status.ready": "Έτοιμο",
+ "status.searchingBodies": "Αναζήτηση σε σώματα…",
+ "status.proxyStopped": "Ο διαμεσολαβητής σταμάτησε",
+ "status.proxyRunning": "Ο διαμεσολαβητής εκτελείται στο {0}",
+ "trust.health.trusted": "Το CA είναι αξιόπιστο",
+ "trust.health.untrusted": "Το CA δεν είναι αξιόπιστο"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.en.json b/src/Titanium.Inspector/Localization/strings.en.json
new file mode 100644
index 000000000..06cd4106e
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.en.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "_File",
+ "menu.exportAllHar": "Export all HAR…",
+ "menu.exportSelectedHar": "Export selected HAR…",
+ "menu.importHar": "Import HAR…",
+ "menu.exportAllArchive": "Export all archive…",
+ "menu.exportSelectedArchive": "Export selected archive…",
+ "menu.importArchive": "Import archive…",
+ "menu.exit": "E_xit",
+ "menu.capture": "_Capture",
+ "menu.startProxy": "Start proxy",
+ "menu.stopProxy": "Stop proxy",
+ "menu.capturing": "Capturing",
+ "menu.clearSessions": "Clear sessions",
+ "menu.removeSelected": "Remove selected",
+ "menu.autoStartCapture": "Auto-start capture",
+ "menu.autoSystemProxy": "Auto system proxy on start",
+ "menu.decryptHttps": "Decrypt HTTPS",
+ "menu.systemProxy": "System proxy",
+ "menu.captureLocal": "Capture local traffic",
+ "menu.allowStoreApps": "Allow Store apps…",
+ "menu.installCa": "Install root CA (current user)",
+ "menu.removeCa": "Remove root CA (current user)",
+ "menu.rotateCa": "Clear and reinstall root CA…",
+ "menu.removeOldCas": "Remove old root CAs…",
+ "menu.exportCa": "Export root CA…",
+ "menu.trustFirefox": "Trust CA in Firefox…",
+ "menu.deviceCa": "Setup external device CA",
+ "menu.tools": "_Tools",
+ "menu.composer": "Composer…",
+ "menu.breakpoints": "Breakpoints…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Scripts…",
+ "menu.mapRemote": "Map Remote…",
+ "menu.options": "_Options",
+ "menu.theme": "_Theme",
+ "menu.themeLight": "Light",
+ "menu.themeDark": "Dark",
+ "menu.themeAutomatic": "Automatic",
+ "menu.language": "_Language",
+ "menu.languageAutomatic": "Automatic",
+ "menu.columns": "_Columns",
+ "menu.col.id": "Id",
+ "menu.col.method": "Method",
+ "menu.col.status": "Status",
+ "menu.col.host": "Host",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protocol",
+ "menu.col.duration": "Duration",
+ "menu.col.ttfb": "Wait (TTFB)",
+ "menu.col.size": "Size",
+ "menu.col.process": "Process",
+ "menu.col.started": "Started",
+ "menu.col.scheme": "Scheme",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Reset columns",
+ "menu.sessionRetention": "Session retention…",
+ "menu.excludedHosts": "Excluded hosts…",
+ "menu.excludedHostsTip": "HTTPS decrypt skip lists and OS bypass rules",
+ "menu.ignoreCerts": "Ignore insecure server certificates",
+ "menu.addVia": "Add Via header",
+ "menu.addViaTip": "Append Via: … titanium-web-proxy on intercepted traffic (RFC 9110). Off disables injection and Via loop detection.",
+ "menu.logging": "Logging…",
+ "menu.resetSettings": "Reset Inspector settings…",
+ "menu.help": "_Help",
+ "menu.checkUpdates": "Check for updates…",
+ "menu.checkUpdatesStartup": "Check for updates on startup",
+ "menu.updateChannel": "Update channel",
+ "menu.channelStable": "Stable",
+ "menu.channelBeta": "Beta",
+ "menu.about": "About Titanium Inspector…",
+ "toolbar.searchWatermark": "Search URL, host, process… (or method:GET status:4xx)",
+ "toolbar.searchTip": "Bare text searches URL, host, process name, exact process ID, method, and status. Prefixes limit to one field: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: also searches bodies spilled to disk. Prefix a field or a word with - to exclude it (e.g. -host:cursor.sh or -cursor). Filters edits hidden hosts and processes with more room.",
+ "toolbar.filters": "Filters",
+ "toolbar.filtersTip": "Edit the search and hidden hosts or processes in a larger window",
+ "toolbar.hideConnect": "Hide CONNECT",
+ "toolbar.hideConnectTip": "Hide opaque HTTPS tunnels when Decrypt HTTPS is off",
+ "toolbar.hideImages": "Hide images",
+ "toolbar.errorsOnly": "Errors only",
+ "toolbar.clearFilters": "Clear filters",
+ "toolbar.hidden": "Hidden",
+ "ctx.replay": "Replay",
+ "ctx.loadComposer": "Load into Composer",
+ "ctx.saveRequest": "Save request body…",
+ "ctx.saveResponse": "Save response body…",
+ "ctx.copyUrl": "Copy URL",
+ "ctx.copyCurl": "Copy as curl",
+ "ctx.copyFetch": "Copy as fetch",
+ "ctx.diff": "Diff selected…",
+ "ctx.filterHost": "Filter by host",
+ "ctx.hideHost": "Hide host",
+ "ctx.filterProcess": "Filter by process",
+ "ctx.hideProcess": "Hide process",
+ "ctx.excludeHost": "Exclude host…",
+ "ctx.excludeHostTip": "Stop decrypting this host's HTTPS. The rows stay in the list; use Hide host to remove them from view.",
+ "grid.duration": "Duration (ms)",
+ "grid.wait": "Wait (ms)",
+ "pane.inspect": "Inspect",
+ "pane.composer": "Composer",
+ "pane.breakpoints": "Breakpoints",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Scripts",
+ "pane.mapRemote": "Map Remote",
+ "pane.closeTip": "Close pane",
+ "inspect.empty": "Select a session in the grid to inspect request and response headers and bodies.",
+ "common.ok": "OK",
+ "common.cancel": "Cancel",
+ "common.save": "Save",
+ "common.apply": "Apply",
+ "common.remove": "Remove",
+ "common.browse": "Browse…",
+ "common.openFolder": "Open folder",
+ "common.forget": "Forget",
+ "common.close": "Close",
+ "loopback.window": "Allow Store apps to use this proxy",
+ "loopback.checkAll": "Check all",
+ "loopback.uncheckAll": "Uncheck all",
+ "loopback.filterWatermark": "Filter by app name…",
+ "loopback.clearAll": "Clear all",
+ "trust.macWindow": "Confirm trust in Keychain Access",
+ "trust.openKeychain": "Open Keychain Access",
+ "trust.notNow": "Not now",
+ "trust.recoveryTitle": "Root CA trust",
+ "trust.macWaitPlaceholder": "Waiting for SSL trust…",
+ "window.about": "About Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Copyright © Jehonathan Thomas",
+ "about.license": "Licensed under the PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "License details",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filters",
+ "filters.search": "Search",
+ "filters.searchHelp": "Same search as the toolbar, with more room. Hidden hosts and processes are listed below, not in this box.",
+ "filters.searchWatermark": "URL, host, process, method:GET, status:4xx…",
+ "filters.hideHeading": "Hide from the list",
+ "filters.hideHelp": "Rows stay captured. This only hides them in the list. To stop decrypting HTTPS, use Exclude host…",
+ "filters.hosts": "Hosts",
+ "filters.addHostWatermark": "Add a host to hide",
+ "filters.addHost": "Add host",
+ "filters.processes": "Processes",
+ "filters.addProcessWatermark": "Add a process to hide",
+ "filters.addProcess": "Add process",
+ "filters.processSpace": "A name with a space is shortened at the first word, which can also hide other names containing that word.",
+ "window.confirm": "Confirm",
+ "window.excludeHost": "Exclude host",
+ "exclude.action": "Exclude",
+ "exclude.help": "This host will still appear in the session list. Inspector will not try to read its HTTPS.",
+ "window.logging": "Logging",
+ "logging.help": "Write diagnostic messages for troubleshooting. Changes apply immediately.",
+ "logging.enable": "Enable logging",
+ "logging.writeFile": "Write log to a file",
+ "logging.detail": "How much detail",
+ "logging.detailHelp": "Error = problems only. Warning / Information = more context. Debug = very verbose.",
+ "logging.path": "Log file path",
+ "window.excludedHosts": "Excluded hosts",
+ "excluded.reset": "Reset to defaults",
+ "excluded.bypass": "Bypass proxy (OS)",
+ "excluded.bypassHelp": "Traffic never reaches Inspector when System proxy is on. Seeded with Microsoft identity / SSO / RDP hosts. Removing them can break RDP sign-in while System proxy is enabled.",
+ "excluded.notDecrypted": "Not decrypted hosts",
+ "excluded.notDecryptedHelp": "CONNECT stays visible; TLS stays opaque when Decrypt HTTPS is on. Seeded with certificate-pinning hosts (Dropbox, Webex).",
+ "excluded.learnHeading": "Automatically not decrypt on decrypt failure",
+ "excluded.learn": "Learn hosts that fail origin TLS under decrypt",
+ "excluded.learnHelp": "When origin TLS fails repeatedly under decrypt, or the origin server returns 403/429, Inspector stops decrypting that host for later connections in this session. List is capped and forgotten on restart unless you promote.",
+ "excluded.learnPaused": "Learning paused — existing entries kept until forgotten.",
+ "excluded.noneLearned": "No hosts learned yet.",
+ "excluded.promote": "Promote to not decrypted hosts",
+ "excluded.clearLearned": "Clear all learned",
+ "window.retention": "Session retention",
+ "retention.max": "Maximum sessions to keep",
+ "retention.maxHelp": "How many requests stay in the session list. When over this, the oldest rows leave the list but remain on disk until Clear sessions or the disk space limit removes them.",
+ "retention.cache": "Cache folder",
+ "retention.openCache": "Open cache folder",
+ "retention.clearCache": "Clear saved session cache…",
+ "retention.advanced": "Advanced",
+ "retention.disk": "Disk space for saved sessions (MB)",
+ "retention.diskHelp": "Maximum space for all saved sessions on disk (all Inspector runs). Each run uses a timestamped subfolder; oldest HAR files are deleted first when over this. Empty run folders are removed.",
+ "loopback.intro": "Windows Store / UWP apps are blocked from localhost by default. Check apps that should use Inspector, then Apply. Restart each app (fully quit it) after Apply. Inspector must be running with System proxy on. Clear all removes every allow entry.",
+ "loopback.closedUnchanged": "Store apps unchanged.",
+ "loopback.proxyStopped": "Start the proxy and turn on System proxy. Store apps cannot be captured until both are on.",
+ "loopback.systemProxyOff": "Turn on System proxy (Capture menu). The allow list only lets Store apps reach localhost; they still follow the system proxy.",
+ "loopback.refreshing": "Refreshing system proxy so running apps reconnect…",
+ "loopback.unchangedCount": "Allow list already matches: {0}.",
+ "loopback.allowed": "Allowed: {0}.",
+ "loopback.allowedRefreshed": " System proxy was refreshed so running apps reconnect. If traffic still does not appear, fully quit and reopen the app.",
+ "loopback.allowedProxyStopped": " Start the proxy and turn on System proxy, then fully quit and reopen the app.",
+ "loopback.allowedSystemProxyOff": " Turn on System proxy, then fully quit and reopen the app.",
+ "loopback.allowedReady": " Fully quit and reopen the app to capture traffic.",
+ "loopback.clearedRefreshed": "All loopback exemptions cleared. System proxy was refreshed so running apps reconnect.",
+ "loopback.clearedReady": "All loopback exemptions cleared. Fully quit and reopen any app that was using Inspector.",
+ "loopback.cleared": "All loopback exemptions cleared.",
+ "trust.macWaitBody": "Keychain Get Info can already show Always Trust even when SSL policies were not saved (Chrome and Inspector still treat the CA as untrusted).\n\nForce a save:\n1. Keychain Access → login → Certificates → double-click Titanium Root Certificate Authority\n2. Expand Trust\n3. Set When using this certificate to Use System Defaults, then change it to Always Trust again\n4. Close Get Info — you must get a password prompt; that writes the real SSL trust policies\n\nThis window closes automatically when those policies are detected. If you already saved, click I’ve saved Always Trust.",
+ "trust.macWaitStatus": "Waiting for the certificate in Keychain…",
+ "trust.macWaitInKeychain": "Waiting for saved SSL policies (toggle Always Trust, close Get Info, enter password)…",
+ "trust.macNotSaved": "Always Trust display is not enough — toggle Use System Defaults → Always Trust, close Get Info, enter your password, then try Install root CA / Decrypt HTTPS again",
+ "trust.macConfirmSaved": "I’ve saved Always Trust",
+ "trust.exportCa": "Export CA",
+ "trust.install.mac": "Decrypt HTTPS requires trusting the Titanium Inspector root CA in Keychain Access (login keychain). Install now?",
+ "trust.install.linux": "Decrypt HTTPS requires trusting the Titanium Inspector root CA in your user certificate store (NSS). Install now?",
+ "trust.install.windows": "Decrypt HTTPS requires trusting the Titanium Inspector root CA in your current-user Trusted Root store. Install now?\n\nWindows may show a Trusted Root Yes/No security dialog (not UAC) — choose Yes to trust the CA.",
+ "trust.install.other": "Decrypt HTTPS requires trusting the Titanium Inspector root CA on this computer. Install now?",
+ "trust.remove.mac": "Remove the Titanium Inspector root CA from Keychain? HTTPS decrypt will be turned off.",
+ "trust.remove.linux": "Remove the Titanium Inspector root CA from your user certificate store (NSS)? HTTPS decrypt will be turned off.",
+ "trust.remove.windows": "Remove the Titanium Inspector root CA from the current-user Trusted Root store? HTTPS decrypt will be turned off.",
+ "trust.remove.other": "Remove the Titanium Inspector root CA? HTTPS decrypt will be turned off.",
+ "trust.elevate.mac": "User-level trust failed or was insufficient. Continue to show a macOS admin password prompt? Cancel leaves certificate settings unchanged.",
+ "trust.elevate.linux": "User-level trust failed or was insufficient. Continue to show a polkit admin prompt? Cancel leaves certificate settings unchanged.",
+ "trust.elevate.windows": "User-level trust failed or was insufficient. Continue to show UAC? Cancel leaves certificate settings unchanged.",
+ "trust.elevate.other": "User-level trust failed or was insufficient. Continue with an admin prompt? Cancel leaves certificate settings unchanged.",
+ "trust.recovery.mac": "\n\nContinue to show a macOS admin password prompt? Not now leaves certificate settings unchanged.",
+ "trust.recovery.linux": "\n\nContinue to show a polkit admin prompt? Not now leaves certificate settings unchanged.",
+ "trust.recovery.windows": "\n\nContinue to show UAC? Not now leaves certificate settings unchanged.",
+ "trust.recovery.other": "\n\nContinue with an admin prompt? Not now leaves certificate settings unchanged.",
+ "trust.hosts.mac": "OS bypass needs Capture → System proxy (uses macOS network proxy settings). Tunnel-only rules apply to every client that hits Inspector. Factory defaults are seeded into the lists below — edit freely or reset.",
+ "trust.hosts.linux": "OS bypass needs Capture → System proxy (uses desktop / environment proxy settings). Tunnel-only rules apply to every client that hits Inspector. Factory defaults are seeded into the lists below — edit freely or reset.",
+ "trust.hosts.windows": "OS bypass needs Capture → System proxy (uses WinINET). Tunnel-only rules apply to every client that hits Inspector. Factory defaults are seeded into the lists below — edit freely or reset.",
+ "trust.hosts.other": "OS bypass needs Capture → System proxy. Tunnel-only rules apply to every client that hits Inspector. Factory defaults are seeded into the lists below — edit freely or reset.",
+ "trust.localhost.mac": "When System proxy is on, send localhost through Inspector. Off adds localhost to the macOS proxy bypass list.",
+ "trust.localhost.linux": "When System proxy is on, send localhost through Inspector. Off adds localhost to NO_PROXY.",
+ "trust.localhost.windows": "When System proxy is on, send localhost through Inspector (WinINET <-loopback>). Off lets loopback skip the proxy.",
+ "trust.localhost.other": "When System proxy is on, send localhost through Inspector.",
+ "trust.status.missing": "Root CA is not trusted yet — try again, or Export CA",
+ "trust.status.cancelled": "Root CA install cancelled",
+ "trust.status.certutil": "Browser certificate tools are missing — install them, try again, or Export CA",
+ "trust.status.homebrew": "Homebrew is required to install certificate tools — Export CA to trust manually",
+ "trust.status.macConfirm": "Set Always Trust for the Titanium Inspector root CA in Keychain Access",
+ "trust.status.keychain": "Keychain trust failed — try again, or Export CA and trust it manually",
+ "trust.fail.keychainTitle": "Confirm trust in Keychain",
+ "trust.fail.continueKeychain": "Continue in Keychain Access",
+ "trust.fail.toolsTitle": "Certificate tools needed",
+ "trust.fail.toolsLinux": "Inspector needs certutil (NSS tools) to finish trusting the root CA.",
+ "trust.fail.toolsOther": "Inspector needs browser certificate tools to finish trusting the root CA.",
+ "trust.fail.tryAgain": "Try again",
+ "trust.fail.homebrewBody": "Homebrew is required to install certificate tools. Export the CA to trust it manually.",
+ "trust.fail.title": "Can't decrypt HTTPS yet",
+ "trust.fail.body": "The Titanium Inspector root CA is not trusted on this computer yet.",
+ "toolbar.throttle": "Throttle",
+ "toolbar.throttleTip": "Add latency and bandwidth shaping during capture (body writes / WebSocket frames). Off by default.",
+ "toolbar.bindWatermark": "*, localhost, or IP",
+ "toolbar.bindTip": "127.0.0.1 or localhost = this PC only. 0.0.0.0 or * = all network adapters (includes localhost).",
+ "toolbar.portWatermark": "*, or port",
+ "toolbar.portTip": "* or empty = OS-chosen port (the real port appears after start). Otherwise 1–65535.",
+ "toolbar.listeningTip": "Proxy is listening",
+ "toolbar.trustHealthTip": "Root CA trust state for Decrypt HTTPS. Install or trust the CA if this says not trusted.",
+ "chip.process": "process",
+ "inspect.request": "Request",
+ "inspect.requestTip": "Request headers and body",
+ "inspect.copyHeaders": "Copy headers",
+ "inspect.resizeTip": "Drag to resize. Double-click to reset.",
+ "inspect.pretty": "Pretty",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Show the body as a hex dump",
+ "inspect.saveRequest": "Save request…",
+ "inspect.response": "Response",
+ "inspect.responseTip": "Response headers and body",
+ "inspect.saveResponse": "Save response…",
+ "inspect.diff": "Diff",
+ "inspect.frames": "WS Frames",
+ "inspect.framesHelp": "Live WebSocket frames for this session (direction, opcode, payload preview).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events parsed from the response body.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Show headers",
+ "inspect.hideHeaders": "Hide headers",
+ "inspect.headers": "Headers ({0})",
+ "inspect.prettyTip": "Indent JSON, XML, and HTML",
+ "inspect.prettyHexTip": "Not applicable in hex view",
+ "inspect.emptyBody": "(empty)",
+ "inspect.noRequestBody": "No request body",
+ "inspect.waiting": "Waiting for response…",
+ "composer.help": "Build and send a request through the proxy. Load from selected copies the current session.",
+ "composer.method": "Method",
+ "composer.url": "URL",
+ "composer.headers": "Headers (Name: Value per line)",
+ "composer.body": "Body",
+ "composer.loadSelected": "Load from selected",
+ "composer.loadBody": "Load body from file…",
+ "composer.send": "Send",
+ "bp.help": "Pause matching client requests to edit the body, continue, or abort. One pause at a time; auto-continues after 120s. Unchecking Enabled continues a paused request.",
+ "bp.enabled": "Enabled",
+ "bp.breakOnResponse": "Break on response",
+ "bp.match": "Match",
+ "bp.urlWatermark": "URL filter (* = all, e.g. *api*/users*)",
+ "bp.graphqlWatermark": "Only this GraphQL operation (optional)",
+ "bp.graphqlTip": "Extra filter on the client request body. Matches JSON operationName or a named query. Leave blank to match every operation on the URL.",
+ "bp.fromSelected": "From selected session",
+ "bp.fromSelectedTip": "Copy the GraphQL operation name from the selected session's request.",
+ "bp.graphqlHelp": "Leave the GraphQL box empty to match every operation. Fill it (e.g. GetUser) to pause only that client request on the URL above. Break on response still uses the URL filter.",
+ "bp.editWatermark": "Edit body (Apply edit body, then Continue)",
+ "bp.applyEdit": "Apply edit body",
+ "bp.continue": "Continue",
+ "bp.abort": "Abort",
+ "ar.help": "Return a fake response before the real server. Match decides which client requests a rule applies to; the fields below that are what you send back.",
+ "ar.enabled": "Enabled (before breakpoints)",
+ "ar.urlWatermark": "Match URL (* wildcards)",
+ "ar.graphqlHelp": "Same URL, different GraphQL operations can use different rules. Leave blank to match every operation.",
+ "ar.respondWith": "Respond with",
+ "ar.statusTip": "HTTP status. Empty = 200. Use 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local file (optional)",
+ "ar.bodyWatermark": "Response body (used when Map Local is empty)",
+ "ar.add": "Add rule",
+ "ar.update": "Update rule",
+ "ar.delete": "Delete rule",
+ "script.intro": "One command per line, on every captured session. This is not JavaScript or C# — type only the commands below.",
+ "script.what": "What you can type",
+ "script.setHeaderHelp": "Add or replace a header. Traffic still continues to the server.",
+ "script.setStatusHelp": "On request: answer now and skip the server. On response: change the status the client sees.",
+ "script.abortHelp": "Block with 403 Forbidden. Add a set-status line to choose a different code.",
+ "script.comment": "Start a line with # or // for a comment. You can combine commands; put each on its own line.",
+ "script.onRequest": "On request",
+ "script.onResponse": "On response",
+ "script.requestSkips": "abort or set-status here skips AutoResponder, breakpoints, and the origin.",
+ "map.help": "Rewrite matching client requests to another origin before the real server. Use a single * in match and target to preserve a path/query suffix. Runs after AutoResponder / Map Local.",
+ "map.graphqlHelp": "Leave blank to rewrite every operation on the URL. Fill it to rewrite only that GraphQL operation.",
+ "map.rewriteTo": "Rewrite to",
+ "map.targetWatermark": "Target URL (absolute, optional *)",
+ "loopback.allow": "Allow",
+ "loopback.appName": "App name",
+ "loopback.packageId": "Package ID",
+ "status.ready": "Ready",
+ "status.searchingBodies": "Searching bodies…",
+ "status.proxyStopped": "Proxy stopped",
+ "status.proxyRunning": "Proxy running on {0}",
+ "trust.health.trusted": "CA trusted",
+ "trust.health.untrusted": "CA not trusted"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.es.json b/src/Titanium.Inspector/Localization/strings.es.json
new file mode 100644
index 000000000..c0fe3f498
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.es.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Archivo",
+ "menu.exportAllHar": "Exportar todo como HAR…",
+ "menu.exportSelectedHar": "Exportar la selección como HAR…",
+ "menu.importHar": "Importar HAR…",
+ "menu.exportAllArchive": "Exportar todo como archivo…",
+ "menu.exportSelectedArchive": "Exportar la selección como archivo…",
+ "menu.importArchive": "Importar archivo…",
+ "menu.exit": "Salir",
+ "menu.capture": "Captura",
+ "menu.startProxy": "Iniciar proxy",
+ "menu.stopProxy": "Detener proxy",
+ "menu.capturing": "Capturando",
+ "menu.clearSessions": "Borrar sesiones",
+ "menu.removeSelected": "Quitar selección",
+ "menu.autoStartCapture": "Iniciar la captura automáticamente",
+ "menu.autoSystemProxy": "Proxy del sistema automático al iniciar",
+ "menu.decryptHttps": "Descifrar HTTPS",
+ "menu.systemProxy": "Proxy del sistema",
+ "menu.captureLocal": "Capturar tráfico local",
+ "menu.allowStoreApps": "Permitir aplicaciones de Store…",
+ "menu.installCa": "Instalar CA raíz (usuario actual)",
+ "menu.removeCa": "Quitar CA raíz (usuario actual)",
+ "menu.rotateCa": "Borrar y reinstalar la CA raíz…",
+ "menu.removeOldCas": "Quitar CA raíz antiguas…",
+ "menu.exportCa": "Exportar CA raíz…",
+ "menu.trustFirefox": "Confiar en la CA en Firefox…",
+ "menu.deviceCa": "Configurar la CA de un dispositivo externo",
+ "menu.tools": "Herramientas",
+ "menu.composer": "Redactar…",
+ "menu.breakpoints": "Puntos de interrupción…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Scripts…",
+ "menu.mapRemote": "Asignación remota…",
+ "menu.options": "Opciones",
+ "menu.theme": "Tema",
+ "menu.themeLight": "Claro",
+ "menu.themeDark": "Oscuro",
+ "menu.themeAutomatic": "Automático",
+ "menu.language": "Idioma",
+ "menu.languageAutomatic": "Automático",
+ "menu.columns": "Columnas",
+ "menu.col.id": "Id",
+ "menu.col.method": "Método",
+ "menu.col.status": "Estado",
+ "menu.col.host": "Host",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protocolo",
+ "menu.col.duration": "Duración",
+ "menu.col.ttfb": "Espera (TTFB)",
+ "menu.col.size": "Tamaño",
+ "menu.col.process": "Proceso",
+ "menu.col.started": "Iniciado",
+ "menu.col.scheme": "Esquema",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Restablecer columnas",
+ "menu.sessionRetention": "Conservación de sesiones…",
+ "menu.excludedHosts": "Hosts excluidos…",
+ "menu.excludedHostsTip": "Listas para omitir el descifrado HTTPS y reglas de omisión del sistema",
+ "menu.ignoreCerts": "Ignorar certificados de servidor no seguros",
+ "menu.addVia": "Añadir encabezado Via",
+ "menu.addViaTip": "Añade Via: … titanium-web-proxy al tráfico interceptado (RFC 9110). Desactivado, se desactivan la inserción y la detección de bucles Via.",
+ "menu.logging": "Registro…",
+ "menu.resetSettings": "Restablecer la configuración de Inspector…",
+ "menu.help": "Ayuda",
+ "menu.checkUpdates": "Buscar actualizaciones…",
+ "menu.checkUpdatesStartup": "Buscar actualizaciones al iniciar",
+ "menu.updateChannel": "Canal de actualización",
+ "menu.channelStable": "Estable",
+ "menu.channelBeta": "Beta",
+ "menu.about": "Acerca de Titanium Inspector…",
+ "toolbar.searchWatermark": "Buscar URL, host, proceso… (o method:GET status:4xx)",
+ "toolbar.searchTip": "El texto libre busca en la URL, el host, el nombre del proceso, el ID exacto del proceso, el método y el estado. Los prefijos limitan a un campo: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: también busca cuerpos volcados al disco. Anteponer - a un campo o una palabra lo excluye (p. ej. -host:cursor.sh o -cursor). Filtros edita los hosts y procesos ocultos con más espacio.",
+ "toolbar.filters": "Filtros",
+ "toolbar.filtersTip": "Editar la búsqueda y los hosts o procesos ocultos en una ventana más grande",
+ "toolbar.hideConnect": "Ocultar CONNECT",
+ "toolbar.hideConnectTip": "Ocultar túneles HTTPS opacos cuando Descifrar HTTPS está desactivado",
+ "toolbar.hideImages": "Ocultar imágenes",
+ "toolbar.errorsOnly": "Solo errores",
+ "toolbar.clearFilters": "Borrar filtros",
+ "toolbar.hidden": "Ocultos",
+ "ctx.replay": "Reproducir",
+ "ctx.loadComposer": "Cargar en Redactar",
+ "ctx.saveRequest": "Guardar el cuerpo de la solicitud…",
+ "ctx.saveResponse": "Guardar el cuerpo de la respuesta…",
+ "ctx.copyUrl": "Copiar URL",
+ "ctx.copyCurl": "Copiar como curl",
+ "ctx.copyFetch": "Copiar como fetch",
+ "ctx.diff": "Comparar selección…",
+ "ctx.filterHost": "Filtrar por host",
+ "ctx.hideHost": "Ocultar host",
+ "ctx.filterProcess": "Filtrar por proceso",
+ "ctx.hideProcess": "Ocultar proceso",
+ "ctx.excludeHost": "Excluir host…",
+ "ctx.excludeHostTip": "Dejar de descifrar el HTTPS de este host. Las filas siguen en la lista; use Ocultar host para quitarlas de la vista.",
+ "grid.duration": "Duración (ms)",
+ "grid.wait": "Espera (ms)",
+ "pane.inspect": "Inspeccionar",
+ "pane.composer": "Redactar",
+ "pane.breakpoints": "Puntos de interrupción",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Scripts",
+ "pane.mapRemote": "Asignación remota",
+ "pane.closeTip": "Cerrar panel",
+ "inspect.empty": "Seleccione una sesión en la cuadrícula para inspeccionar los encabezados y los cuerpos de la solicitud y la respuesta.",
+ "common.ok": "Aceptar",
+ "common.cancel": "Cancelar",
+ "common.save": "Guardar",
+ "common.apply": "Aplicar",
+ "common.remove": "Quitar",
+ "common.browse": "Examinar…",
+ "common.openFolder": "Abrir carpeta",
+ "common.forget": "Olvidar",
+ "common.close": "Cerrar",
+ "loopback.window": "Permitir que las aplicaciones de Store usen este proxy",
+ "loopback.checkAll": "Marcar todo",
+ "loopback.uncheckAll": "Desmarcar todo",
+ "loopback.filterWatermark": "Filtrar por nombre de aplicación…",
+ "loopback.clearAll": "Borrar todo",
+ "trust.macWindow": "Confirmar la confianza en Keychain Access",
+ "trust.openKeychain": "Abrir Keychain Access",
+ "trust.notNow": "Ahora no",
+ "trust.recoveryTitle": "Confianza de la CA raíz",
+ "trust.macWaitPlaceholder": "Esperando la confianza SSL…",
+ "window.about": "Acerca de Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Copyright © Jehonathan Thomas",
+ "about.license": "Con licencia PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Detalles de la licencia",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filtros",
+ "filters.search": "Búsqueda",
+ "filters.searchHelp": "La misma búsqueda que en la barra de herramientas, con más espacio. Los hosts y procesos ocultos aparecen abajo, no en este cuadro.",
+ "filters.searchWatermark": "URL, host, proceso, method:GET, status:4xx…",
+ "filters.hideHeading": "Ocultar de la lista",
+ "filters.hideHelp": "Las filas siguen capturadas. Esto solo las oculta en la lista. Para dejar de descifrar HTTPS, use Excluir host…",
+ "filters.hosts": "Hosts",
+ "filters.addHostWatermark": "Añadir un host para ocultar",
+ "filters.addHost": "Añadir host",
+ "filters.processes": "Procesos",
+ "filters.addProcessWatermark": "Añadir un proceso para ocultar",
+ "filters.addProcess": "Añadir proceso",
+ "filters.processSpace": "Un nombre con un espacio se acorta en la primera palabra, lo que también puede ocultar otros nombres que contengan esa palabra.",
+ "window.confirm": "Confirmar",
+ "window.excludeHost": "Excluir host",
+ "exclude.action": "Excluir",
+ "exclude.help": "Este host seguirá apareciendo en la lista de sesiones. Inspector no intentará leer su HTTPS.",
+ "window.logging": "Registro",
+ "logging.help": "Escribir mensajes de diagnóstico para la resolución de problemas. Los cambios se aplican de inmediato.",
+ "logging.enable": "Activar el registro",
+ "logging.writeFile": "Escribir el registro en un archivo",
+ "logging.detail": "Nivel de detalle",
+ "logging.detailHelp": "Error = solo problemas. Warning / Information = más contexto. Debug = muy detallado.",
+ "logging.path": "Ruta del archivo de registro",
+ "window.excludedHosts": "Hosts excluidos",
+ "excluded.reset": "Restablecer valores predeterminados",
+ "excluded.bypass": "Omitir proxy (sistema)",
+ "excluded.bypassHelp": "El tráfico nunca llega a Inspector cuando el proxy del sistema está activado. Incluye de inicio hosts de identidad de Microsoft, SSO y RDP. Quitarlos puede impedir el inicio de sesión RDP mientras el proxy del sistema esté activado.",
+ "excluded.notDecrypted": "Hosts no descifrados",
+ "excluded.notDecryptedHelp": "CONNECT sigue visible; TLS permanece opaco cuando Descifrar HTTPS está activado. Incluye de inicio hosts con fijación de certificados (Dropbox, Webex).",
+ "excluded.learnHeading": "No descifrar automáticamente si falla el descifrado",
+ "excluded.learn": "Aprender hosts cuyo TLS de origen falla al descifrar",
+ "excluded.learnHelp": "Cuando el TLS de origen falla repetidamente al descifrar, o el servidor de origen devuelve 403/429, Inspector deja de descifrar ese host para las conexiones posteriores de esta sesión. La lista tiene un límite y se olvida al reiniciar, salvo que pase esos hosts a hosts no descifrados.",
+ "excluded.learnPaused": "Aprendizaje en pausa: las entradas existentes se conservan hasta que se olviden.",
+ "excluded.noneLearned": "Aún no se ha aprendido ningún host.",
+ "excluded.promote": "Pasar a hosts no descifrados",
+ "excluded.clearLearned": "Borrar todos los aprendidos",
+ "window.retention": "Conservación de sesiones",
+ "retention.max": "Máximo de sesiones que conservar",
+ "retention.maxHelp": "Cuántas solicitudes permanecen en la lista de sesiones. Al superarlo, las filas más antiguas salen de la lista, pero siguen en el disco hasta que Borrar sesiones o el límite de espacio en disco las elimine.",
+ "retention.cache": "Carpeta de caché",
+ "retention.openCache": "Abrir carpeta de caché",
+ "retention.clearCache": "Borrar la caché de sesiones guardadas…",
+ "retention.advanced": "Avanzado",
+ "retention.disk": "Espacio en disco para sesiones guardadas (MB)",
+ "retention.diskHelp": "Espacio máximo para todas las sesiones guardadas en el disco (todas las ejecuciones de Inspector). Cada ejecución usa una subcarpeta con marca de tiempo; al superarlo, se eliminan primero los archivos HAR más antiguos. Las carpetas de ejecución vacías se quitan.",
+ "loopback.intro": "Las aplicaciones de Windows Store y UWP no pueden acceder a localhost de forma predeterminada. Marque las aplicaciones que deben usar Inspector y pulse Aplicar. Reinicie cada aplicación (ciérrela por completo) después de Aplicar. Inspector debe estar en ejecución con el proxy del sistema activado. Borrar todo quita cada permiso.",
+ "loopback.closedUnchanged": "Aplicaciones de Store sin cambios.",
+ "loopback.proxyStopped": "Inicie el proxy y active el proxy del sistema. Las aplicaciones de Store no se pueden capturar hasta que ambos estén activados.",
+ "loopback.systemProxyOff": "Active el proxy del sistema (menú Captura). La lista de permisos solo permite que las aplicaciones de Store lleguen a localhost; siguen usando el proxy del sistema.",
+ "loopback.refreshing": "Actualizando el proxy del sistema para que las aplicaciones en ejecución se vuelvan a conectar…",
+ "loopback.unchangedCount": "La lista de permisos ya coincide: {0}.",
+ "loopback.allowed": "Permitido: {0}.",
+ "loopback.allowedRefreshed": " Se actualizó el proxy del sistema para que las aplicaciones en ejecución se vuelvan a conectar. Si el tráfico sigue sin aparecer, cierre la aplicación por completo y ábrala de nuevo.",
+ "loopback.allowedProxyStopped": " Inicie el proxy y active el proxy del sistema; después cierre la aplicación por completo y ábrala de nuevo.",
+ "loopback.allowedSystemProxyOff": " Active el proxy del sistema; después cierre la aplicación por completo y ábrala de nuevo.",
+ "loopback.allowedReady": " Cierre la aplicación por completo y ábrala de nuevo para capturar el tráfico.",
+ "loopback.clearedRefreshed": "Se quitaron todas las exenciones de loopback. Se actualizó el proxy del sistema para que las aplicaciones en ejecución se vuelvan a conectar.",
+ "loopback.clearedReady": "Se quitaron todas las exenciones de loopback. Cierre por completo cualquier aplicación que usara Inspector y ábrala de nuevo.",
+ "loopback.cleared": "Se quitaron todas las exenciones de loopback.",
+ "trust.macWaitBody": "Obtener información en Keychain Access puede mostrar ya Confiar siempre aunque las políticas SSL no se hayan guardado (Chrome e Inspector siguen tratando la CA como no confiable).\n\nForzar el guardado:\n1. Keychain Access → inicio → Certificados → haga doble clic en Titanium Root Certificate Authority\n2. Expanda Confianza\n3. Ponga Al usar este certificado en Usar los valores por omisión del sistema y vuelva a cambiarlo a Confiar siempre\n4. Cierre Obtener información: debe aparecer una solicitud de contraseña; eso escribe las políticas reales de confianza SSL\n\nEsta ventana se cierra sola cuando se detectan esas políticas. Si ya guardó, haga clic en He guardado Confiar siempre.",
+ "trust.macWaitStatus": "Esperando el certificado en el llavero…",
+ "trust.macWaitInKeychain": "Esperando las políticas SSL guardadas (cambie Confiar siempre, cierre Obtener información, escriba la contraseña)…",
+ "trust.macNotSaved": "Mostrar Confiar siempre no basta: cambie a Usar los valores por omisión del sistema y otra vez a Confiar siempre, cierre Obtener información, escriba su contraseña y vuelva a intentar Instalar CA raíz / Descifrar HTTPS",
+ "trust.macConfirmSaved": "He guardado Confiar siempre",
+ "trust.exportCa": "Exportar CA",
+ "trust.install.mac": "Descifrar HTTPS requiere confiar en la CA raíz de Titanium Inspector en Keychain Access (llavero de inicio). ¿Instalar ahora?",
+ "trust.install.linux": "Descifrar HTTPS requiere confiar en la CA raíz de Titanium Inspector en su almacén de certificados de usuario (NSS). ¿Instalar ahora?",
+ "trust.install.windows": "Descifrar HTTPS requiere confiar en la CA raíz de Titanium Inspector en el almacén de entidades de certificación raíz de confianza del usuario actual. ¿Instalar ahora?\n\nWindows puede mostrar un diálogo de seguridad Sí/No de raíz de confianza (no es UAC). Elija Sí para confiar en la CA.",
+ "trust.install.other": "Descifrar HTTPS requiere confiar en la CA raíz de Titanium Inspector en este equipo. ¿Instalar ahora?",
+ "trust.remove.mac": "¿Quitar la CA raíz de Titanium Inspector del llavero? Se desactivará el descifrado HTTPS.",
+ "trust.remove.linux": "¿Quitar la CA raíz de Titanium Inspector de su almacén de certificados de usuario (NSS)? Se desactivará el descifrado HTTPS.",
+ "trust.remove.windows": "¿Quitar la CA raíz de Titanium Inspector del almacén de entidades de certificación raíz de confianza del usuario actual? Se desactivará el descifrado HTTPS.",
+ "trust.remove.other": "¿Quitar la CA raíz de Titanium Inspector? Se desactivará el descifrado HTTPS.",
+ "trust.elevate.mac": "La confianza a nivel de usuario falló o fue insuficiente. ¿Continuar para mostrar una solicitud de contraseña de administrador de macOS? Cancelar deja la configuración de certificados sin cambios.",
+ "trust.elevate.linux": "La confianza a nivel de usuario falló o fue insuficiente. ¿Continuar para mostrar un aviso de administrador de polkit? Cancelar deja la configuración de certificados sin cambios.",
+ "trust.elevate.windows": "La confianza a nivel de usuario falló o fue insuficiente. ¿Continuar para mostrar UAC? Cancelar deja la configuración de certificados sin cambios.",
+ "trust.elevate.other": "La confianza a nivel de usuario falló o fue insuficiente. ¿Continuar con un aviso de administrador? Cancelar deja la configuración de certificados sin cambios.",
+ "trust.recovery.mac": "\n\n¿Continuar para mostrar una solicitud de contraseña de administrador de macOS? Ahora no deja la configuración de certificados sin cambios.",
+ "trust.recovery.linux": "\n\n¿Continuar para mostrar un aviso de administrador de polkit? Ahora no deja la configuración de certificados sin cambios.",
+ "trust.recovery.windows": "\n\n¿Continuar para mostrar UAC? Ahora no deja la configuración de certificados sin cambios.",
+ "trust.recovery.other": "\n\n¿Continuar con un aviso de administrador? Ahora no deja la configuración de certificados sin cambios.",
+ "trust.hosts.mac": "La omisión del sistema necesita Captura → Proxy del sistema (usa los ajustes de proxy de red de macOS). Las reglas solo de túnel se aplican a cada cliente que llega a Inspector. Los valores de fábrica están incluidos en las listas de abajo: edítelos libremente o restablézcalos.",
+ "trust.hosts.linux": "La omisión del sistema necesita Captura → Proxy del sistema (usa los ajustes de proxy del escritorio o del entorno). Las reglas solo de túnel se aplican a cada cliente que llega a Inspector. Los valores de fábrica están incluidos en las listas de abajo: edítelos libremente o restablézcalos.",
+ "trust.hosts.windows": "La omisión del sistema necesita Captura → Proxy del sistema (usa WinINET). Las reglas solo de túnel se aplican a cada cliente que llega a Inspector. Los valores de fábrica están incluidos en las listas de abajo: edítelos libremente o restablézcalos.",
+ "trust.hosts.other": "La omisión del sistema necesita Captura → Proxy del sistema. Las reglas solo de túnel se aplican a cada cliente que llega a Inspector. Los valores de fábrica están incluidos en las listas de abajo: edítelos libremente o restablézcalos.",
+ "trust.localhost.mac": "Cuando el proxy del sistema está activado, enviar localhost a través de Inspector. Desactivado, se añade localhost a la lista de omisión del proxy de macOS.",
+ "trust.localhost.linux": "Cuando el proxy del sistema está activado, enviar localhost a través de Inspector. Desactivado, se añade localhost a NO_PROXY.",
+ "trust.localhost.windows": "Cuando el proxy del sistema está activado, enviar localhost a través de Inspector (WinINET <-loopback>). Desactivado, el loopback omite el proxy.",
+ "trust.localhost.other": "Cuando el proxy del sistema está activado, enviar localhost a través de Inspector.",
+ "trust.status.missing": "La CA raíz aún no es de confianza: inténtelo de nuevo o exporte la CA",
+ "trust.status.cancelled": "Instalación de la CA raíz cancelada",
+ "trust.status.certutil": "Faltan las herramientas de certificados del navegador: instálelas, inténtelo de nuevo o exporte la CA",
+ "trust.status.homebrew": "Homebrew es necesario para instalar las herramientas de certificados. Exporte la CA para confiar manualmente",
+ "trust.status.macConfirm": "Establezca Confiar siempre para la CA raíz de Titanium Inspector en Keychain Access",
+ "trust.status.keychain": "Error de confianza del llavero: inténtelo de nuevo o exporte la CA y confíe manualmente",
+ "trust.fail.keychainTitle": "Confirmar la confianza en el llavero",
+ "trust.fail.continueKeychain": "Continuar en Keychain Access",
+ "trust.fail.toolsTitle": "Se necesitan herramientas de certificados",
+ "trust.fail.toolsLinux": "Inspector necesita certutil (herramientas NSS) para terminar de confiar en la CA raíz.",
+ "trust.fail.toolsOther": "Inspector necesita las herramientas de certificados del navegador para terminar de confiar en la CA raíz.",
+ "trust.fail.tryAgain": "Intentar de nuevo",
+ "trust.fail.homebrewBody": "Homebrew es necesario para instalar las herramientas de certificados. Exporte la CA para confiar en ella manualmente.",
+ "trust.fail.title": "Aún no se puede descifrar HTTPS",
+ "trust.fail.body": "La CA raíz de Titanium Inspector aún no es de confianza en este equipo.",
+ "toolbar.throttle": "Limitación",
+ "toolbar.throttleTip": "Añade latencia y limitación de ancho de banda durante la captura (escrituras del cuerpo / tramas WebSocket). Desactivado de forma predeterminada.",
+ "toolbar.bindWatermark": "*, localhost o IP",
+ "toolbar.bindTip": "127.0.0.1 o localhost = solo este PC. 0.0.0.0 o * = todos los adaptadores de red (incluye localhost).",
+ "toolbar.portWatermark": "* o puerto",
+ "toolbar.portTip": "* o vacío = puerto elegido por el sistema (el puerto real aparece después de iniciar). En caso contrario, 1–65535.",
+ "toolbar.listeningTip": "El proxy está escuchando",
+ "toolbar.trustHealthTip": "Estado de confianza de la CA raíz para Descifrar HTTPS. Instale la CA o confíe en ella si indica sin confianza.",
+ "chip.process": "Proceso",
+ "inspect.request": "Solicitud",
+ "inspect.requestTip": "Encabezados y cuerpo de la solicitud",
+ "inspect.copyHeaders": "Copiar encabezados",
+ "inspect.resizeTip": "Arrastre para cambiar el tamaño. Haga doble clic para restablecer.",
+ "inspect.pretty": "Legible",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Mostrar el cuerpo como volcado hexadecimal",
+ "inspect.saveRequest": "Guardar solicitud…",
+ "inspect.response": "Respuesta",
+ "inspect.responseTip": "Encabezados y cuerpo de la respuesta",
+ "inspect.saveResponse": "Guardar respuesta…",
+ "inspect.diff": "Comparación",
+ "inspect.frames": "Tramas WS",
+ "inspect.framesHelp": "Tramas WebSocket en directo de esta sesión (dirección, opcode, vista previa de la carga).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events analizados a partir del cuerpo de la respuesta.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Mostrar encabezados",
+ "inspect.hideHeaders": "Ocultar encabezados",
+ "inspect.headers": "Encabezados ({0})",
+ "inspect.prettyTip": "Sangrar JSON, XML y HTML",
+ "inspect.prettyHexTip": "No aplicable en la vista hexadecimal",
+ "inspect.emptyBody": "(vacío)",
+ "inspect.noRequestBody": "Sin cuerpo de solicitud",
+ "inspect.waiting": "Esperando la respuesta…",
+ "composer.help": "Cree y envíe una solicitud a través del proxy. Cargar desde la selección copia la sesión actual.",
+ "composer.method": "Método",
+ "composer.url": "URL",
+ "composer.headers": "Encabezados (Nombre: valor por línea)",
+ "composer.body": "Cuerpo",
+ "composer.loadSelected": "Cargar desde la selección",
+ "composer.loadBody": "Cargar el cuerpo desde un archivo…",
+ "composer.send": "Enviar",
+ "bp.help": "Pausa las solicitudes de cliente coincidentes para editar el cuerpo, continuar o anular. Una pausa a la vez; continúa automáticamente tras 120s. Desmarcar Activado continúa una solicitud en pausa.",
+ "bp.enabled": "Activado",
+ "bp.breakOnResponse": "Interrumpir en la respuesta",
+ "bp.match": "Coincidencia",
+ "bp.urlWatermark": "Filtro de URL (* = todas, p. ej. *api*/users*)",
+ "bp.graphqlWatermark": "Solo esta operación GraphQL (opcional)",
+ "bp.graphqlTip": "Filtro adicional sobre el cuerpo de la solicitud del cliente. Coincide con operationName de JSON o con una consulta con nombre. Déjelo en blanco para coincidir con cada operación de la URL.",
+ "bp.fromSelected": "Desde la sesión seleccionada",
+ "bp.fromSelectedTip": "Copia el nombre de la operación GraphQL de la solicitud de la sesión seleccionada.",
+ "bp.graphqlHelp": "Deje vacío el cuadro de GraphQL para coincidir con cada operación. Rellénelo (p. ej. GetUser) para pausar solo esa solicitud de cliente en la URL de arriba. Interrumpir en la respuesta sigue usando el filtro de URL.",
+ "bp.editWatermark": "Editar el cuerpo (Aplicar la edición del cuerpo y luego Continuar)",
+ "bp.applyEdit": "Aplicar la edición del cuerpo",
+ "bp.continue": "Continuar",
+ "bp.abort": "Anular",
+ "ar.help": "Devuelve una respuesta ficticia antes del servidor real. Coincidencia decide a qué solicitudes de cliente se aplica una regla; los campos de debajo son lo que se devuelve.",
+ "ar.enabled": "Activado (antes de los puntos de interrupción)",
+ "ar.urlWatermark": "URL de coincidencia (comodines *)",
+ "ar.graphqlHelp": "La misma URL y distintas operaciones GraphQL pueden usar reglas distintas. Déjelo en blanco para coincidir con cada operación.",
+ "ar.respondWith": "Responder con",
+ "ar.statusTip": "Estado HTTP. Vacío = 200. Use 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Archivo Map Local (opcional)",
+ "ar.bodyWatermark": "Cuerpo de la respuesta (se usa cuando Map Local está vacío)",
+ "ar.add": "Agregar regla",
+ "ar.update": "Actualizar regla",
+ "ar.delete": "Eliminar regla",
+ "script.intro": "Un comando por línea, en cada sesión capturada. Esto no es JavaScript ni C# — escriba solo los comandos de abajo.",
+ "script.what": "Qué puede escribir",
+ "script.setHeaderHelp": "Añade o sustituye un encabezado. El tráfico sigue hacia el servidor.",
+ "script.setStatusHelp": "En la solicitud: responder ahora y omitir el servidor. En la respuesta: cambiar el estado que ve el cliente.",
+ "script.abortHelp": "Bloquea con 403 Forbidden. Añada una línea set-status para elegir otro código.",
+ "script.comment": "Empiece una línea con # o // para un comentario. Puede combinar comandos; ponga cada uno en su propia línea.",
+ "script.onRequest": "En la solicitud",
+ "script.onResponse": "En la respuesta",
+ "script.requestSkips": "abort o set-status aquí omite AutoResponder, los puntos de interrupción y el origen.",
+ "map.help": "Reescribe las solicitudes de cliente coincidentes hacia otro origen antes del servidor real. Use un solo * en la coincidencia y el destino para conservar un sufijo de ruta o consulta. Se ejecuta después de AutoResponder / Map Local.",
+ "map.graphqlHelp": "Déjelo en blanco para reescribir cada operación de la URL. Rellénelo para reescribir solo esa operación GraphQL.",
+ "map.rewriteTo": "Reescribir a",
+ "map.targetWatermark": "URL de destino (absoluta, * opcional)",
+ "loopback.allow": "Permitir",
+ "loopback.appName": "Nombre de aplicación",
+ "loopback.packageId": "ID de paquete",
+ "status.ready": "Listo",
+ "status.searchingBodies": "Buscando en los cuerpos…",
+ "status.proxyStopped": "Proxy detenido",
+ "status.proxyRunning": "Proxy en ejecución en {0}",
+ "trust.health.trusted": "CA de confianza",
+ "trust.health.untrusted": "CA sin confianza"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.fa.json b/src/Titanium.Inspector/Localization/strings.fa.json
new file mode 100644
index 000000000..a062de9d1
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.fa.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "پرونده",
+ "menu.exportAllHar": "برونبرد همه HAR…",
+ "menu.exportSelectedHar": "برونبرد HAR انتخابشده…",
+ "menu.importHar": "درونبرد HAR…",
+ "menu.exportAllArchive": "برونبرد همه بایگانی…",
+ "menu.exportSelectedArchive": "برونبرد بایگانی انتخابشده…",
+ "menu.importArchive": "درونبرد بایگانی…",
+ "menu.exit": "خروج",
+ "menu.capture": "ضبط",
+ "menu.startProxy": "شروع پروکسی",
+ "menu.stopProxy": "توقف پروکسی",
+ "menu.capturing": "در حال ضبط",
+ "menu.clearSessions": "پاک کردن نشستها",
+ "menu.removeSelected": "حذف موارد انتخابشده",
+ "menu.autoStartCapture": "شروع خودکار ضبط",
+ "menu.autoSystemProxy": "پروکسی سیستم هنگام آغاز",
+ "menu.decryptHttps": "رمزگشایی HTTPS",
+ "menu.systemProxy": "پروکسی سیستم",
+ "menu.captureLocal": "ضبط ترافیک محلی",
+ "menu.allowStoreApps": "اجازه به برنامههای فروشگاه…",
+ "menu.installCa": "نصب CA ریشه (کاربر فعلی)",
+ "menu.removeCa": "حذف CA ریشه (کاربر فعلی)",
+ "menu.rotateCa": "پاک کردن و نصب دوباره CA ریشه…",
+ "menu.removeOldCas": "حذف CAهای ریشه قدیمی…",
+ "menu.exportCa": "برونبرد CA ریشه…",
+ "menu.trustFirefox": "اعتماد به CA در Firefox…",
+ "menu.deviceCa": "راهاندازی CA دستگاه بیرونی",
+ "menu.tools": "ابزارها",
+ "menu.composer": "سازنده…",
+ "menu.breakpoints": "نقاط توقف…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "کدنوشتهها…",
+ "menu.mapRemote": "نگاشت راهدور…",
+ "menu.options": "گزینهها",
+ "menu.theme": "زمینه",
+ "menu.themeLight": "روشن",
+ "menu.themeDark": "تیره",
+ "menu.themeAutomatic": "خودکار",
+ "menu.language": "زبان",
+ "menu.languageAutomatic": "خودکار",
+ "menu.columns": "ستونها",
+ "menu.col.id": "شناسه",
+ "menu.col.method": "روش",
+ "menu.col.status": "وضعیت",
+ "menu.col.host": "میزبان",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "پروتکل",
+ "menu.col.duration": "مدت",
+ "menu.col.ttfb": "انتظار (TTFB)",
+ "menu.col.size": "اندازه",
+ "menu.col.process": "فرایند",
+ "menu.col.started": "آغاز",
+ "menu.col.scheme": "طرح",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "بازنشانی ستونها",
+ "menu.sessionRetention": "نگهداری نشستها…",
+ "menu.excludedHosts": "میزبانهای مستثنا…",
+ "menu.excludedHostsTip": "فهرستهای رد شدن از رمزگشایی HTTPS و قاعدههای دور زدن سیستمعامل",
+ "menu.ignoreCerts": "نادیده گرفتن گواهیهای ناامن کارساز",
+ "menu.addVia": "افزودن سرآیند Via",
+ "menu.addViaTip": "افزودن Via: … titanium-web-proxy به ترافیک رهگیریشده (RFC 9110). خاموش کردن، تزریق و تشخیص حلقه Via را غیرفعال میکند.",
+ "menu.logging": "گزارشگیری…",
+ "menu.resetSettings": "بازنشانی تنظیمات Inspector…",
+ "menu.help": "راهنما",
+ "menu.checkUpdates": "بررسی بهروزرسانیها…",
+ "menu.checkUpdatesStartup": "بررسی بهروزرسانیها هنگام آغاز",
+ "menu.updateChannel": "کانال بهروزرسانی",
+ "menu.channelStable": "پایدار",
+ "menu.channelBeta": "بتا",
+ "menu.about": "درباره Titanium Inspector…",
+ "toolbar.searchWatermark": "جستجوی URL، میزبان، فرایند… (یا method:GET status:4xx)",
+ "toolbar.searchTip": "متن ساده در URL، میزبان، نام فرایند، شناسه دقیق فرایند، روش و وضعیت جستجو میکند. پیشوندها جستجو را به یک فیلد محدود میکنند: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: بدنههایی را هم که روی دیسک ریخته شدهاند جستجو میکند. برای کنار گذاشتن یک فیلد یا واژه، پیش از آن - بگذارید (مثلاً -host:cursor.sh یا -cursor). پالایهها میزبانها و فرایندهای پنهان را با جای بیشتر ویرایش میکنند.",
+ "toolbar.filters": "پالایهها",
+ "toolbar.filtersTip": "ویرایش جستجو و میزبانها یا فرایندهای پنهان در پنجرهای بزرگتر",
+ "toolbar.hideConnect": "پنهان کردن CONNECT",
+ "toolbar.hideConnectTip": "پنهان کردن تونلهای کدر HTTPS وقتی رمزگشایی HTTPS خاموش است",
+ "toolbar.hideImages": "پنهان کردن تصویرها",
+ "toolbar.errorsOnly": "فقط خطاها",
+ "toolbar.clearFilters": "پاک کردن پالایهها",
+ "toolbar.hidden": "پنهان",
+ "ctx.replay": "ارسال دوباره",
+ "ctx.loadComposer": "بارگذاری در سازنده",
+ "ctx.saveRequest": "ذخیره بدنه درخواست…",
+ "ctx.saveResponse": "ذخیره بدنه پاسخ…",
+ "ctx.copyUrl": "رونوشت URL",
+ "ctx.copyCurl": "رونوشت بهصورت curl",
+ "ctx.copyFetch": "رونوشت بهصورت fetch",
+ "ctx.diff": "مقایسه موارد انتخابشده…",
+ "ctx.filterHost": "پالایش بر پایه میزبان",
+ "ctx.hideHost": "پنهان کردن میزبان",
+ "ctx.filterProcess": "پالایش بر پایه فرایند",
+ "ctx.hideProcess": "پنهان کردن فرایند",
+ "ctx.excludeHost": "مستثنا کردن میزبان…",
+ "ctx.excludeHostTip": "رمزگشایی HTTPS این میزبان را متوقف کنید. ردیفها در فهرست میمانند؛ برای برداشتن آنها از نما از «پنهان کردن میزبان» استفاده کنید.",
+ "grid.duration": "مدت (میلیثانیه)",
+ "grid.wait": "انتظار (میلیثانیه)",
+ "pane.inspect": "بررسی",
+ "pane.composer": "سازنده",
+ "pane.breakpoints": "نقاط توقف",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "کدنوشتهها",
+ "pane.mapRemote": "نگاشت راهدور",
+ "pane.closeTip": "بستن قاب",
+ "inspect.empty": "برای بررسی سرآیندها و بدنههای درخواست و پاسخ، یک نشست را در جدول برگزینید.",
+ "common.ok": "تأیید",
+ "common.cancel": "لغو",
+ "common.save": "ذخیره",
+ "common.apply": "اعمال",
+ "common.remove": "حذف",
+ "common.browse": "مرور…",
+ "common.openFolder": "باز کردن پوشه",
+ "common.forget": "فراموش کردن",
+ "common.close": "بستن",
+ "loopback.window": "اجازه به برنامههای فروشگاه برای استفاده از این پروکسی",
+ "loopback.checkAll": "علامت زدن همه",
+ "loopback.uncheckAll": "برداشتن همه علامتها",
+ "loopback.filterWatermark": "پالایش بر پایه نام برنامه…",
+ "loopback.clearAll": "پاک کردن همه",
+ "trust.macWindow": "اعتماد را در Keychain Access تأیید کنید",
+ "trust.openKeychain": "باز کردن Keychain Access",
+ "trust.notNow": "اکنون نه",
+ "trust.recoveryTitle": "اعتماد به CA ریشه",
+ "trust.macWaitPlaceholder": "در انتظار اعتماد SSL…",
+ "window.about": "درباره Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "حق نشر © Jehonathan Thomas",
+ "about.license": "تحت مجوز PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "جزئیات مجوز",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "پالایهها",
+ "filters.search": "جستجو",
+ "filters.searchHelp": "همان جستجوی نوار ابزار، با جای بیشتر. میزبانها و فرایندهای پنهان پایین فهرست شدهاند، نه در این جعبه.",
+ "filters.searchWatermark": "URL، میزبان، فرایند، method:GET، status:4xx…",
+ "filters.hideHeading": "پنهان کردن از فهرست",
+ "filters.hideHelp": "ردیفها ضبطشده میمانند. این کار فقط آنها را در فهرست پنهان میکند. برای توقف رمزگشایی HTTPS از «مستثنا کردن میزبان…» استفاده کنید.",
+ "filters.hosts": "میزبانها",
+ "filters.addHostWatermark": "میزبانی برای پنهان کردن بیفزایید",
+ "filters.addHost": "افزودن میزبان",
+ "filters.processes": "فرایندها",
+ "filters.addProcessWatermark": "فرایندی برای پنهان کردن بیفزایید",
+ "filters.addProcess": "افزودن فرایند",
+ "filters.processSpace": "نامی که فاصله دارد تا واژه نخست کوتاه میشود و ممکن است نامهای دیگری را هم که آن واژه را دارند پنهان کند.",
+ "window.confirm": "تأیید",
+ "window.excludeHost": "مستثنا کردن میزبان",
+ "exclude.action": "مستثنا کردن",
+ "exclude.help": "این میزبان همچنان در فهرست نشستها دیده میشود. Inspector تلاش نمیکند HTTPS آن را بخواند.",
+ "window.logging": "گزارشگیری",
+ "logging.help": "پیامهای تشخیصی را برای عیبیابی بنویسید. تغییرها بیدرنگ اعمال میشوند.",
+ "logging.enable": "فعال کردن گزارشگیری",
+ "logging.writeFile": "نوشتن گزارش در پرونده",
+ "logging.detail": "میزان جزئیات",
+ "logging.detailHelp": "Error = فقط مشکلها. Warning / Information = زمینه بیشتر. Debug = بسیار مفصل.",
+ "logging.path": "مسیر پرونده گزارش",
+ "window.excludedHosts": "میزبانهای مستثنا",
+ "excluded.reset": "بازنشانی به پیشفرض",
+ "excluded.bypass": "دور زدن پروکسی (سیستمعامل)",
+ "excluded.bypassHelp": "وقتی پروکسی سیستم روشن است، ترافیک هرگز به Inspector نمیرسد. در آغاز میزبانهای Microsoft identity / SSO / RDP کاشته شدهاند. حذف آنها میتواند ورود RDP را تا وقتی پروکسی سیستم روشن است خراب کند.",
+ "excluded.notDecrypted": "میزبانهای رمزگشایینشده",
+ "excluded.notDecryptedHelp": "CONNECT دیده میماند؛ وقتی رمزگشایی HTTPS روشن است TLS کدر میماند. در آغاز میزبانهای سنجاق گواهی کاشته شدهاند (Dropbox، Webex).",
+ "excluded.learnHeading": "رمزگشایی نکردن خودکار هنگام شکست رمزگشایی",
+ "excluded.learn": "یادگیری میزبانهایی که TLS مبدأشان زیر رمزگشایی شکست میخورد",
+ "excluded.learnHelp": "اگر TLS مبدأ زیر رمزگشایی بارها شکست بخورد، یا کارساز مبدأ 403/429 برگرداند، Inspector رمزگشایی آن میزبان را برای اتصالهای بعدی این نشست متوقف میکند. فهرست سقف دارد و با راهاندازی دوباره فراموش میشود، مگر اینکه آن را ارتقا دهید.",
+ "excluded.learnPaused": "یادگیری مکث شده — ورودیهای موجود تا وقتی فراموش شوند نگه داشته میشوند.",
+ "excluded.noneLearned": "هنوز میزبانی یاد گرفته نشده است.",
+ "excluded.promote": "ارتقا به میزبانهای رمزگشایینشده",
+ "excluded.clearLearned": "پاک کردن همه آموختهها",
+ "window.retention": "نگهداری نشستها",
+ "retention.max": "بیشینه نشستهایی که نگه داشته شوند",
+ "retention.maxHelp": "چند درخواست در فهرست نشستها بماند. با گذشتن از این حد، کهنهترین ردیفها از فهرست میروند اما روی دیسک میمانند تا «پاک کردن نشستها» یا حد فضای دیسک آنها را بردارد.",
+ "retention.cache": "پوشه حافظه نهان",
+ "retention.openCache": "باز کردن پوشه حافظه نهان",
+ "retention.clearCache": "پاک کردن حافظه نهان نشستهای ذخیرهشده…",
+ "retention.advanced": "پیشرفته",
+ "retention.disk": "فضای دیسک برای نشستهای ذخیرهشده (MB)",
+ "retention.diskHelp": "بیشینه فضا برای همه نشستهای ذخیرهشده روی دیسک (همه اجراهای Inspector). هر اجرا یک زیرپوشه با مُهر زمان دارد؛ با گذشتن از حد، نخست کهنهترین پروندههای HAR حذف میشوند. پوشههای خالی اجرا برداشته میشوند.",
+ "loopback.intro": "برنامههای Windows Store و UWP بهطور پیشفرض از localhost مسدودند. برنامههایی را که باید از Inspector استفاده کنند علامت بزنید، سپس «اعمال» را بزنید. پس از «اعمال» هر برنامه را از نو راه بیندازید (کاملاً ببندید). Inspector باید در حال اجرا باشد و پروکسی سیستم روشن باشد. «پاک کردن همه» همه ورودیهای اجازه را برمیدارد.",
+ "loopback.closedUnchanged": "برنامههای فروشگاه تغییر نکردند.",
+ "loopback.proxyStopped": "پروکسی را شروع کنید و پروکسی سیستم را روشن کنید. تا هر دو روشن نباشند برنامههای فروشگاه ضبط نمیشوند.",
+ "loopback.systemProxyOff": "پروکسی سیستم را روشن کنید (منوی ضبط). فهرست اجازه فقط به برنامههای فروشگاه میرسد که به localhost برسند؛ آنها همچنان پروکسی سیستم را دنبال میکنند.",
+ "loopback.refreshing": "نوسازی پروکسی سیستم تا برنامههای در حال اجرا دوباره وصل شوند…",
+ "loopback.unchangedCount": "فهرست اجازه از پیش همخوان است: {0}.",
+ "loopback.allowed": "اجازه داده شد: {0}.",
+ "loopback.allowedRefreshed": " پروکسی سیستم نوسازی شد تا برنامههای در حال اجرا دوباره وصل شوند. اگر ترافیک هنوز دیده نمیشود، برنامه را کاملاً ببندید و دوباره باز کنید.",
+ "loopback.allowedProxyStopped": " پروکسی را شروع کنید و پروکسی سیستم را روشن کنید، سپس برنامه را کاملاً ببندید و دوباره باز کنید.",
+ "loopback.allowedSystemProxyOff": " پروکسی سیستم را روشن کنید، سپس برنامه را کاملاً ببندید و دوباره باز کنید.",
+ "loopback.allowedReady": " برای ضبط ترافیک، برنامه را کاملاً ببندید و دوباره باز کنید.",
+ "loopback.clearedRefreshed": "همه معافیتهای حلقه محلی پاک شدند. پروکسی سیستم نوسازی شد تا برنامههای در حال اجرا دوباره وصل شوند.",
+ "loopback.clearedReady": "همه معافیتهای حلقه محلی پاک شدند. هر برنامهای را که از Inspector استفاده میکرد کاملاً ببندید و دوباره باز کنید.",
+ "loopback.cleared": "همه معافیتهای حلقه محلی پاک شدند.",
+ "trust.macWaitBody": "پنجره دریافت اطلاعات در Keychain Access ممکن است «همیشه اعتماد» را نشان دهد حتی وقتی سیاستهای SSL ذخیره نشدهاند (Chrome و Inspector همچنان CA را نامعتبر میدانند).\n\nذخیره را اجباری کنید:\n1. Keychain Access → login → گواهیها → روی Titanium Root Certificate Authority دوبار کلیک کنید\n2. اعتماد را باز کنید\n3. «هنگام استفاده از این گواهی» را روی «استفاده از پیشفرضهای سیستم» بگذارید، سپس دوباره آن را به «همیشه اعتماد» تغییر دهید\n4. دریافت اطلاعات را ببندید — باید درخواست گذرواژه بیاید؛ همان سیاستهای واقعی اعتماد SSL را مینویسد\n\nاین پنجره وقتی آن سیاستها دیده شوند خودبهخود بسته میشود. اگر از پیش ذخیره کردهاید، «همیشه اعتماد را ذخیره کردم» را بزنید.",
+ "trust.macWaitStatus": "در انتظار گواهی در Keychain…",
+ "trust.macWaitInKeychain": "در انتظار سیاستهای SSL ذخیرهشده (همیشه اعتماد را عوض کنید، دریافت اطلاعات را ببندید، گذرواژه را وارد کنید)…",
+ "trust.macNotSaved": "نمایش «همیشه اعتماد» کافی نیست — «استفاده از پیشفرضهای سیستم» → «همیشه اعتماد» را عوض کنید، دریافت اطلاعات را ببندید، گذرواژه را وارد کنید، سپس «نصب CA ریشه» / «رمزگشایی HTTPS» را دوباره بیازمایید",
+ "trust.macConfirmSaved": "همیشه اعتماد را ذخیره کردم",
+ "trust.exportCa": "برونبرد CA",
+ "trust.install.mac": "رمزگشایی HTTPS نیاز دارد به CA ریشه Titanium Inspector در Keychain Access (دسته کلید login) اعتماد شود. اکنون نصب شود؟",
+ "trust.install.linux": "رمزگشایی HTTPS نیاز دارد به CA ریشه Titanium Inspector در انبار گواهی کاربر (NSS) اعتماد شود. اکنون نصب شود؟",
+ "trust.install.windows": "رمزگشایی HTTPS نیاز دارد به CA ریشه Titanium Inspector در انبار ریشه مورد اعتماد کاربر فعلی اعتماد شود. اکنون نصب شود؟\n\nWindows ممکن است گفتگوی امنیتی بله/خیر برای ریشه مورد اعتماد نشان دهد (UAC نیست) — برای اعتماد به CA، بله را برگزینید.",
+ "trust.install.other": "رمزگشایی HTTPS نیاز دارد به CA ریشه Titanium Inspector روی این رایانه اعتماد شود. اکنون نصب شود؟",
+ "trust.remove.mac": "CA ریشه Titanium Inspector از Keychain حذف شود؟ رمزگشایی HTTPS خاموش میشود.",
+ "trust.remove.linux": "CA ریشه Titanium Inspector از انبار گواهی کاربر (NSS) حذف شود؟ رمزگشایی HTTPS خاموش میشود.",
+ "trust.remove.windows": "CA ریشه Titanium Inspector از انبار ریشه مورد اعتماد کاربر فعلی حذف شود؟ رمزگشایی HTTPS خاموش میشود.",
+ "trust.remove.other": "CA ریشه Titanium Inspector حذف شود؟ رمزگشایی HTTPS خاموش میشود.",
+ "trust.elevate.mac": "اعتماد در سطح کاربر شکست خورد یا کافی نبود. ادامه داده شود تا درخواست گذرواژه مدیر macOS نشان داده شود؟ لغو تنظیمات گواهی را دستنخورده میگذارد.",
+ "trust.elevate.linux": "اعتماد در سطح کاربر شکست خورد یا کافی نبود. ادامه داده شود تا درخواست مدیر polkit نشان داده شود؟ لغو تنظیمات گواهی را دستنخورده میگذارد.",
+ "trust.elevate.windows": "اعتماد در سطح کاربر شکست خورد یا کافی نبود. ادامه داده شود تا UAC نشان داده شود؟ لغو تنظیمات گواهی را دستنخورده میگذارد.",
+ "trust.elevate.other": "اعتماد در سطح کاربر شکست خورد یا کافی نبود. با درخواست مدیر ادامه داده شود؟ لغو تنظیمات گواهی را دستنخورده میگذارد.",
+ "trust.recovery.mac": "\n\nادامه داده شود تا درخواست گذرواژه مدیر macOS نشان داده شود؟ «اکنون نه» تنظیمات گواهی را دستنخورده میگذارد.",
+ "trust.recovery.linux": "\n\nادامه داده شود تا درخواست مدیر polkit نشان داده شود؟ «اکنون نه» تنظیمات گواهی را دستنخورده میگذارد.",
+ "trust.recovery.windows": "\n\nادامه داده شود تا UAC نشان داده شود؟ «اکنون نه» تنظیمات گواهی را دستنخورده میگذارد.",
+ "trust.recovery.other": "\n\nبا درخواست مدیر ادامه داده شود؟ «اکنون نه» تنظیمات گواهی را دستنخورده میگذارد.",
+ "trust.hosts.mac": "دور زدن سیستمعامل به ضبط → پروکسی سیستم نیاز دارد (از تنظیمات پروکسی شبکه macOS استفاده میکند). قاعدههای فقط تونل برای هر مشتری که به Inspector میرسد اعمال میشوند. پیشفرضهای کارخانه در فهرستهای زیر کاشته شدهاند — آزادانه ویرایش کنید یا بازنشانی کنید.",
+ "trust.hosts.linux": "دور زدن سیستمعامل به ضبط → پروکسی سیستم نیاز دارد (از تنظیمات پروکسی میزکار / محیط استفاده میکند). قاعدههای فقط تونل برای هر مشتری که به Inspector میرسد اعمال میشوند. پیشفرضهای کارخانه در فهرستهای زیر کاشته شدهاند — آزادانه ویرایش کنید یا بازنشانی کنید.",
+ "trust.hosts.windows": "دور زدن سیستمعامل به ضبط → پروکسی سیستم نیاز دارد (از WinINET استفاده میکند). قاعدههای فقط تونل برای هر مشتری که به Inspector میرسد اعمال میشوند. پیشفرضهای کارخانه در فهرستهای زیر کاشته شدهاند — آزادانه ویرایش کنید یا بازنشانی کنید.",
+ "trust.hosts.other": "دور زدن سیستمعامل به ضبط → پروکسی سیستم نیاز دارد. قاعدههای فقط تونل برای هر مشتری که به Inspector میرسد اعمال میشوند. پیشفرضهای کارخانه در فهرستهای زیر کاشته شدهاند — آزادانه ویرایش کنید یا بازنشانی کنید.",
+ "trust.localhost.mac": "وقتی پروکسی سیستم روشن است، localhost را از راه Inspector بفرستید. خاموش کردن، localhost را به فهرست دور زدن پروکسی macOS میافزاید.",
+ "trust.localhost.linux": "وقتی پروکسی سیستم روشن است، localhost را از راه Inspector بفرستید. خاموش کردن، localhost را به NO_PROXY میافزاید.",
+ "trust.localhost.windows": "وقتی پروکسی سیستم روشن است، localhost را از راه Inspector بفرستید (WinINET <-loopback>). خاموش کردن میگذارد حلقه محلی پروکسی را دور بزند.",
+ "trust.localhost.other": "وقتی پروکسی سیستم روشن است، localhost را از راه Inspector بفرستید.",
+ "trust.status.missing": "CA ریشه هنوز مورد اعتماد نیست — دوباره بیازمایید یا CA را برونبرد کنید",
+ "trust.status.cancelled": "نصب CA ریشه لغو شد",
+ "trust.status.certutil": "ابزارهای گواهی مرورگر نیستند — آنها را نصب کنید، دوباره بیازمایید یا CA را برونبرد کنید",
+ "trust.status.homebrew": "برای نصب ابزارهای گواهی Homebrew لازم است — برای اعتماد دستی CA را برونبرد کنید",
+ "trust.status.macConfirm": "در Keychain Access برای CA ریشه Titanium Inspector «همیشه اعتماد» را تنظیم کنید",
+ "trust.status.keychain": "اعتماد Keychain شکست خورد — دوباره بیازمایید یا CA را برونبرد کنید و دستی به آن اعتماد کنید",
+ "trust.fail.keychainTitle": "اعتماد را در Keychain تأیید کنید",
+ "trust.fail.continueKeychain": "ادامه در Keychain Access",
+ "trust.fail.toolsTitle": "ابزارهای گواهی لازم است",
+ "trust.fail.toolsLinux": "Inspector برای تمام کردن اعتماد به CA ریشه به certutil (ابزارهای NSS) نیاز دارد.",
+ "trust.fail.toolsOther": "Inspector برای تمام کردن اعتماد به CA ریشه به ابزارهای گواهی مرورگر نیاز دارد.",
+ "trust.fail.tryAgain": "تلاش دوباره",
+ "trust.fail.homebrewBody": "برای نصب ابزارهای گواهی Homebrew لازم است. CA را برونبرد کنید تا دستی به آن اعتماد کنید.",
+ "trust.fail.title": "هنوز نمیتوان HTTPS را رمزگشایی کرد",
+ "trust.fail.body": "CA ریشه Titanium Inspector روی این رایانه هنوز مورد اعتماد نیست.",
+ "toolbar.throttle": "محدودسازی سرعت",
+ "toolbar.throttleTip": "هنگام ضبط، تأخیر و شکلدهی پهنای باند اضافه کنید (نوشتن بدنه / قابهای WebSocket). بهطور پیشفرض خاموش است.",
+ "toolbar.bindWatermark": "*، localhost یا IP",
+ "toolbar.bindTip": "127.0.0.1 یا localhost = فقط این رایانه. 0.0.0.0 یا * = همه آداپتورهای شبکه (شامل localhost).",
+ "toolbar.portWatermark": "* یا درگاه",
+ "toolbar.portTip": "* یا خالی = درگاه برگزیده سیستمعامل (درگاه واقعی پس از شروع نمایان میشود). در غیر این صورت 1–65535.",
+ "toolbar.listeningTip": "پروکسی در حال گوش دادن است",
+ "toolbar.trustHealthTip": "وضعیت اعتماد به CA ریشه برای رمزگشایی HTTPS. اگر نوشته مورد اعتماد نیست، CA را نصب کنید یا به آن اعتماد کنید.",
+ "chip.process": "فرایند",
+ "inspect.request": "درخواست",
+ "inspect.requestTip": "سرآیندها و بدنه درخواست",
+ "inspect.copyHeaders": "کپی سرآیندها",
+ "inspect.resizeTip": "برای تغییر اندازه بکشید. برای بازنشانی دو بار کلیک کنید.",
+ "inspect.pretty": "زیبا",
+ "inspect.hex": "هگز",
+ "inspect.hexTip": "بدنه را بهصورت دامپ هگز نشان دهید",
+ "inspect.saveRequest": "ذخیره درخواست…",
+ "inspect.response": "پاسخ",
+ "inspect.responseTip": "سرآیندها و بدنه پاسخ",
+ "inspect.saveResponse": "ذخیره پاسخ…",
+ "inspect.diff": "مقایسه",
+ "inspect.frames": "قابهای WS",
+ "inspect.framesHelp": "قابهای زنده WebSocket برای این نشست (جهت، کد عملیات، پیشنمایش محموله).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "رویدادهای فرستادهشده از سرور که از بدنه پاسخ تجزیه شدهاند.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "نمایش سرآیندها",
+ "inspect.hideHeaders": "پنهان کردن سرآیندها",
+ "inspect.headers": "سرآیندها ({0})",
+ "inspect.prettyTip": "تورفتگی JSON و XML و HTML",
+ "inspect.prettyHexTip": "در نمای هگز کاربرد ندارد",
+ "inspect.emptyBody": "(خالی)",
+ "inspect.noRequestBody": "بدنه درخواست نیست",
+ "inspect.waiting": "در انتظار پاسخ…",
+ "composer.help": "یک درخواست بسازید و از راه پروکسی بفرستید. بارگذاری از مورد انتخابشده، نشست کنونی را کپی میکند.",
+ "composer.method": "روش",
+ "composer.url": "URL",
+ "composer.headers": "سرآیندها (نام: مقدار در هر خط)",
+ "composer.body": "بدنه",
+ "composer.loadSelected": "بارگذاری از مورد انتخابشده",
+ "composer.loadBody": "بارگذاری بدنه از پرونده…",
+ "composer.send": "ارسال",
+ "bp.help": "درخواستهای مشتری منطبق را مکث کنید تا بدنه را ویرایش کنید، ادامه دهید، یا لغو کنید. هر بار یک مکث؛ پس از 120s بهطور خودکار ادامه مییابد. برداشتن علامت فعال، درخواست مکثشده را ادامه میدهد.",
+ "bp.enabled": "فعال",
+ "bp.breakOnResponse": "توقف در پاسخ",
+ "bp.match": "تطبیق",
+ "bp.urlWatermark": "پالایه URL (* = همه، مثلاً *api*/users*)",
+ "bp.graphqlWatermark": "فقط این عملیات GraphQL (اختیاری)",
+ "bp.graphqlTip": "پالایه اضافی روی بدنه درخواست مشتری. با operationName در JSON یا یک پرسوجوی نامدار منطبق میشود. برای تطبیق هر عملیات روی URL خالی بگذارید.",
+ "bp.fromSelected": "از نشست انتخابشده",
+ "bp.fromSelectedTip": "نام عملیات GraphQL را از درخواست نشست انتخابشده کپی کنید.",
+ "bp.graphqlHelp": "کادر GraphQL را خالی بگذارید تا با هر عملیات منطبق شود. آن را پر کنید (مثلاً GetUser) تا فقط همان درخواست مشتری روی URL بالا مکث شود. توقف در پاسخ همچنان از پالایه URL استفاده میکند.",
+ "bp.editWatermark": "ویرایش بدنه (اعمال ویرایش بدنه، سپس ادامه)",
+ "bp.applyEdit": "اعمال ویرایش بدنه",
+ "bp.continue": "ادامه",
+ "bp.abort": "لغو",
+ "ar.help": "پیش از سرور واقعی یک پاسخ ساختگی برگردانید. تطبیق مشخص میکند قاعده روی کدام درخواستهای مشتری اعمال میشود؛ فیلدهای زیر آن چیزی است که برمیگردانید.",
+ "ar.enabled": "فعال (پیش از نقاط توقف)",
+ "ar.urlWatermark": "تطبیق URL (نویسههای عام *)",
+ "ar.graphqlHelp": "روی یک URL، عملیات GraphQL متفاوت میتوانند قاعدههای متفاوت داشته باشند. برای تطبیق هر عملیات خالی بگذارید.",
+ "ar.respondWith": "پاسخ با",
+ "ar.statusTip": "وضعیت HTTP. خالی = 200. از 100–599 استفاده کنید.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "پرونده Map Local (اختیاری)",
+ "ar.bodyWatermark": "بدنه پاسخ (وقتی Map Local خالی است بهکار میرود)",
+ "ar.add": "افزودن قاعده",
+ "ar.update": "بهروزرسانی قاعده",
+ "ar.delete": "حذف قاعده",
+ "script.intro": "در هر خط یک فرمان، برای هر نشست ضبطشده. این JavaScript یا C# نیست — فقط فرمانهای زیر را بنویسید.",
+ "script.what": "چه چیزی میتوانید بنویسید",
+ "script.setHeaderHelp": "یک سرآیند اضافه یا جایگزین کنید. ترافیک همچنان به سمت سرور میرود.",
+ "script.setStatusHelp": "روی درخواست: همین حالا پاسخ دهید و سرور را رد کنید. روی پاسخ: وضعیتی را که مشتری میبیند تغییر دهید.",
+ "script.abortHelp": "با 403 Forbidden مسدود کنید. برای انتخاب کد دیگر یک خط set-status اضافه کنید.",
+ "script.comment": "برای توضیح، خط را با # یا // آغاز کنید. میتوانید فرمانها را با هم به کار ببرید؛ هر کدام را در خط خودش بگذارید.",
+ "script.onRequest": "روی درخواست",
+ "script.onResponse": "روی پاسخ",
+ "script.requestSkips": "abort یا set-status در اینجا AutoResponder، نقاط توقف و مبدأ را رد میکند.",
+ "map.help": "درخواستهای مشتری منطبق را پیش از سرور واقعی به مبدأ دیگری بازنویسی کنید. در تطبیق و مقصد یک * بگذارید تا پسوند مسیر/پرسوجو حفظ شود. پس از AutoResponder / Map Local اجرا میشود.",
+ "map.graphqlHelp": "برای بازنویسی هر عملیات روی URL خالی بگذارید. پر کنید تا فقط همان عملیات GraphQL بازنویسی شود.",
+ "map.rewriteTo": "بازنویسی به",
+ "map.targetWatermark": "URL مقصد (مطلق، * اختیاری)",
+ "loopback.allow": "اجازه",
+ "loopback.appName": "نام برنامه",
+ "loopback.packageId": "شناسه بسته",
+ "status.ready": "آماده",
+ "status.searchingBodies": "در حال جستجوی بدنهها…",
+ "status.proxyStopped": "پروکسی متوقف شد",
+ "status.proxyRunning": "پروکسی روی {0} در حال اجراست",
+ "trust.health.trusted": "CA مورد اعتماد است",
+ "trust.health.untrusted": "CA مورد اعتماد نیست"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.fi.json b/src/Titanium.Inspector/Localization/strings.fi.json
new file mode 100644
index 000000000..938cab0cf
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.fi.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Tiedosto",
+ "menu.exportAllHar": "Vie kaikki HAR…",
+ "menu.exportSelectedHar": "Vie valittu HAR…",
+ "menu.importHar": "Tuo HAR…",
+ "menu.exportAllArchive": "Vie koko arkisto…",
+ "menu.exportSelectedArchive": "Vie valittu arkisto…",
+ "menu.importArchive": "Tuo arkisto…",
+ "menu.exit": "Lopeta",
+ "menu.capture": "Kaappaus",
+ "menu.startProxy": "Käynnistä proxy",
+ "menu.stopProxy": "Pysäytä proxy",
+ "menu.capturing": "Kaapataan",
+ "menu.clearSessions": "Tyhjennä istunnot",
+ "menu.removeSelected": "Poista valitut",
+ "menu.autoStartCapture": "Aloita kaappaus automaattisesti",
+ "menu.autoSystemProxy": "Ota järjestelmän proxy käyttöön käynnistyksessä",
+ "menu.decryptHttps": "Pura HTTPS",
+ "menu.systemProxy": "Järjestelmän proxy",
+ "menu.captureLocal": "Kaappaa paikallinen liikenne",
+ "menu.allowStoreApps": "Salli Store-sovellukset…",
+ "menu.installCa": "Asenna juuri-CA (nykyinen käyttäjä)",
+ "menu.removeCa": "Poista juuri-CA (nykyinen käyttäjä)",
+ "menu.rotateCa": "Tyhjennä ja asenna juuri-CA uudelleen…",
+ "menu.removeOldCas": "Poista vanhat juuri-CA:t…",
+ "menu.exportCa": "Vie juuri-CA…",
+ "menu.trustFirefox": "Luota CA:han Firefoxissa…",
+ "menu.deviceCa": "Määritä ulkoisen laitteen CA",
+ "menu.tools": "Työkalut",
+ "menu.composer": "Koostin…",
+ "menu.breakpoints": "Keskeytyskohdat…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Skriptit…",
+ "menu.mapRemote": "Etäkohdistus…",
+ "menu.options": "Asetukset",
+ "menu.theme": "Teema",
+ "menu.themeLight": "Vaalea",
+ "menu.themeDark": "Tumma",
+ "menu.themeAutomatic": "Automaattinen",
+ "menu.language": "Kieli",
+ "menu.languageAutomatic": "Automaattinen",
+ "menu.columns": "Sarakkeet",
+ "menu.col.id": "Tunnus",
+ "menu.col.method": "Menetelmä",
+ "menu.col.status": "Tila",
+ "menu.col.host": "Isäntä",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protokolla",
+ "menu.col.duration": "Kesto",
+ "menu.col.ttfb": "Odotus (TTFB)",
+ "menu.col.size": "Koko",
+ "menu.col.process": "Prosessi",
+ "menu.col.started": "Alkanut",
+ "menu.col.scheme": "Malli",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Palauta sarakkeet",
+ "menu.sessionRetention": "Istuntojen säilytys…",
+ "menu.excludedHosts": "Ohitetut isännät…",
+ "menu.excludedHostsTip": "HTTPS-salauksen purkamisen ohituslistat ja käyttöjärjestelmän ohitussäännöt",
+ "menu.ignoreCerts": "Ohita suojaamattomat palvelinvarmenteet",
+ "menu.addVia": "Lisää Via-otsake",
+ "menu.addViaTip": "Liitä Via: … titanium-web-proxy kaapattuun liikenteeseen (RFC 9110). Pois käytöstä poistaa lisäyksen ja Via-silmukan tunnistuksen.",
+ "menu.logging": "Lokin kirjaus…",
+ "menu.resetSettings": "Palauta Inspector-asetukset…",
+ "menu.help": "Ohje",
+ "menu.checkUpdates": "Tarkista päivitykset…",
+ "menu.checkUpdatesStartup": "Tarkista päivitykset käynnistyksessä",
+ "menu.updateChannel": "Päivityskanava",
+ "menu.channelStable": "Vakaa",
+ "menu.channelBeta": "Beeta",
+ "menu.about": "Tietoja: Titanium Inspector…",
+ "toolbar.searchWatermark": "Hae URL-osoitetta, isäntää, prosessia… (tai method:GET status:4xx)",
+ "toolbar.searchTip": "Pelkkä teksti hakee URL-osoitteesta, isännästä, prosessin nimestä, tarkasta prosessitunnuksesta, menetelmästä ja tilasta. Etuliitteet rajaavat yhteen kenttään: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: hakee myös levylle siirretyistä rungoista. Lisää kentän tai sanan eteen -, jos haluat sulkea sen pois (esim. -host:cursor.sh tai -cursor). Suodattimet muokkaavat piilotettuja isäntiä ja prosesseja isommassa ikkunassa.",
+ "toolbar.filters": "Suodattimet",
+ "toolbar.filtersTip": "Muokkaa hakua sekä piilotettuja isäntiä tai prosesseja isommassa ikkunassa",
+ "toolbar.hideConnect": "Piilota CONNECT",
+ "toolbar.hideConnectTip": "Piilota läpinäkymättömät HTTPS-tunnelit, kun Pura HTTPS on pois käytöstä",
+ "toolbar.hideImages": "Piilota kuvat",
+ "toolbar.errorsOnly": "Vain virheet",
+ "toolbar.clearFilters": "Tyhjennä suodattimet",
+ "toolbar.hidden": "Piilotettu",
+ "ctx.replay": "Lähetä uudelleen",
+ "ctx.loadComposer": "Lataa koostimeen",
+ "ctx.saveRequest": "Tallenna pyynnön runko…",
+ "ctx.saveResponse": "Tallenna vastauksen runko…",
+ "ctx.copyUrl": "Kopioi URL",
+ "ctx.copyCurl": "Kopioi curl-komennoksi",
+ "ctx.copyFetch": "Kopioi fetch-kutsuksi",
+ "ctx.diff": "Vertaa valittuja…",
+ "ctx.filterHost": "Suodata isännän mukaan",
+ "ctx.hideHost": "Piilota isäntä",
+ "ctx.filterProcess": "Suodata prosessin mukaan",
+ "ctx.hideProcess": "Piilota prosessi",
+ "ctx.excludeHost": "Ohita isäntä…",
+ "ctx.excludeHostTip": "Lopeta tämän isännän HTTPS-salauksen purkaminen. Rivit pysyvät luettelossa; poista ne näkymästä komennolla Piilota isäntä.",
+ "grid.duration": "Kesto (ms)",
+ "grid.wait": "Odotus (ms)",
+ "pane.inspect": "Tarkastus",
+ "pane.composer": "Koostin",
+ "pane.breakpoints": "Keskeytyskohdat",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Skriptit",
+ "pane.mapRemote": "Etäkohdistus",
+ "pane.closeTip": "Sulje ruutu",
+ "inspect.empty": "Valitse istunto ruudukosta, niin näet pyynnön ja vastauksen otsakkeet ja rungot.",
+ "common.ok": "OK",
+ "common.cancel": "Peruuta",
+ "common.save": "Tallenna",
+ "common.apply": "Käytä",
+ "common.remove": "Poista",
+ "common.browse": "Selaa…",
+ "common.openFolder": "Avaa kansio",
+ "common.forget": "Unohda",
+ "common.close": "Sulje",
+ "loopback.window": "Salli Store-sovellusten käyttää tätä välityspalvelinta",
+ "loopback.checkAll": "Valitse kaikki",
+ "loopback.uncheckAll": "Poista kaikki valinnat",
+ "loopback.filterWatermark": "Suodata sovelluksen nimen mukaan…",
+ "loopback.clearAll": "Tyhjennä kaikki",
+ "trust.macWindow": "Vahvista luottamus Keychain Accessissa",
+ "trust.openKeychain": "Avaa Keychain Access",
+ "trust.notNow": "Ei nyt",
+ "trust.recoveryTitle": "Juuri-CA:n luottamus",
+ "trust.macWaitPlaceholder": "Odotetaan SSL-luottamusta…",
+ "window.about": "Tietoja: Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Tekijänoikeus © Jehonathan Thomas",
+ "about.license": "Lisensoitu lisenssillä PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Lisenssin tiedot",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Suodattimet",
+ "filters.search": "Haku",
+ "filters.searchHelp": "Sama haku kuin työkalurivillä, enemmän tilaa. Piilotetut isännät ja prosessit ovat alla, eivät tässä kentässä.",
+ "filters.searchWatermark": "URL, isäntä, prosessi, method:GET, status:4xx…",
+ "filters.hideHeading": "Piilota luettelosta",
+ "filters.hideHelp": "Rivit pysyvät kaapattuina. Tämä vain piilottaa ne luettelosta. Jos haluat lopettaa HTTPS-salauksen purkamisen, käytä komentoa Ohita isäntä…",
+ "filters.hosts": "Isännät",
+ "filters.addHostWatermark": "Lisää piilotettava isäntä",
+ "filters.addHost": "Lisää isäntä",
+ "filters.processes": "Prosessit",
+ "filters.addProcessWatermark": "Lisää piilotettava prosessi",
+ "filters.addProcess": "Lisää prosessi",
+ "filters.processSpace": "Nimi, jossa on välilyönti, katkaistaan ensimmäiseen sanaan, mikä voi piilottaa myös muita nimiä, jotka sisältävät tuon sanan.",
+ "window.confirm": "Vahvista",
+ "window.excludeHost": "Ohita isäntä",
+ "exclude.action": "Ohita",
+ "exclude.help": "Tämä isäntä näkyy yhä istuntoluettelossa. Inspector ei yritä lukea sen HTTPS-liikennettä.",
+ "window.logging": "Lokin kirjaus",
+ "logging.help": "Kirjaa diagnostiikkaviestejä vianmääritystä varten. Muutokset tulevat voimaan heti.",
+ "logging.enable": "Ota lokin kirjaus käyttöön",
+ "logging.writeFile": "Kirjoita loki tiedostoon",
+ "logging.detail": "Yksityiskohtien määrä",
+ "logging.detailHelp": "Error = vain ongelmat. Warning / Information = enemmän kontekstia. Debug = hyvin yksityiskohtainen.",
+ "logging.path": "Lokitiedoston polku",
+ "window.excludedHosts": "Ohitetut isännät",
+ "excluded.reset": "Palauta oletukset",
+ "excluded.bypass": "Ohita proxy (käyttöjärjestelmä)",
+ "excluded.bypassHelp": "Liikenne ei koskaan päädy Inspectoriin, kun järjestelmän proxy on käytössä. Esitäytetty Microsoft-käyttäjätietojen / SSO / RDP -isännillä. Niiden poistaminen voi rikkoa RDP-kirjautumisen, kun järjestelmän proxy on käytössä.",
+ "excluded.notDecrypted": "Salaamattomat isännät",
+ "excluded.notDecryptedHelp": "CONNECT pysyy näkyvissä; TLS pysyy läpinäkymättömänä, kun Pura HTTPS on käytössä. Esitäytetty varmenteen kiinnitystä käyttävillä isännillä (Dropbox, Webex).",
+ "excluded.learnHeading": "Älä pura salausta automaattisesti, jos purkaminen epäonnistuu",
+ "excluded.learn": "Opi isännät, joiden alkuperäinen TLS epäonnistuu salauksen purkamisen aikana",
+ "excluded.learnHelp": "Kun alkuperäinen TLS epäonnistuu toistuvasti salauksen purkamisen aikana tai alkuperäinen palvelin palauttaa 403/429, Inspector lopettaa kyseisen isännän salauksen purkamisen myöhemmissä yhteyksissä tässä istunnossa. Luettelo on rajattu ja unohdetaan uudelleenkäynnistyksessä, ellet siirrä sitä.",
+ "excluded.learnPaused": "Oppiminen keskeytetty — nykyiset merkinnät säilyvät, kunnes ne unohdetaan.",
+ "excluded.noneLearned": "Yhtään isäntää ei ole vielä opittu.",
+ "excluded.promote": "Siirrä salaamattomiin isäntiin",
+ "excluded.clearLearned": "Tyhjennä kaikki opitut",
+ "window.retention": "Istuntojen säilytys",
+ "retention.max": "Säilytettävien istuntojen enimmäismäärä",
+ "retention.maxHelp": "Kuinka monta pyyntöä pysyy istuntoluettelossa. Rajan ylittyessä vanhimmat rivit poistuvat luettelosta, mutta jäävät levylle, kunnes Tyhjennä istunnot tai levytilan raja poistaa ne.",
+ "retention.cache": "Välimuistikansio",
+ "retention.openCache": "Avaa välimuistikansio",
+ "retention.clearCache": "Tyhjennä tallennettu istuntovälimuisti…",
+ "retention.advanced": "Lisäasetukset",
+ "retention.disk": "Levytila tallennetuille istunnoille (MB)",
+ "retention.diskHelp": "Enimmäistila kaikille levylle tallennetuille istunnoille (kaikki Inspector-ajot). Jokainen ajo käyttää aikaleimattua alikansiota; vanhimmat HAR-tiedostot poistetaan ensin rajan ylittyessä. Tyhjät ajokansiot poistetaan.",
+ "loopback.intro": "Windows Store- / UWP-sovellukset estetään oletuksena localhost-osoitteesta. Valitse sovellukset, joiden tulee käyttää Inspectoria, ja valitse sitten Käytä. Käynnistä jokainen sovellus uudelleen (sulje se kokonaan) Käytä-valinnan jälkeen. Inspectorin on oltava käynnissä ja järjestelmän proxyn käytössä. Tyhjennä kaikki poistaa jokaisen sallintamerkinnän.",
+ "loopback.closedUnchanged": "Store-sovellukset ennallaan.",
+ "loopback.proxyStopped": "Käynnistä proxy ja ota järjestelmän proxy käyttöön. Store-sovelluksia ei voi kaapata, ennen kuin molemmat ovat käytössä.",
+ "loopback.systemProxyOff": "Ota järjestelmän proxy käyttöön (Kaappaus-valikko). Sallintaluettelo antaa Store-sovellusten vain tavoittaa localhost-osoitteen; ne noudattavat yhä järjestelmän proxya.",
+ "loopback.refreshing": "Päivitetään järjestelmän proxya, jotta käynnissä olevat sovellukset yhdistävät uudelleen…",
+ "loopback.unchangedCount": "Sallintaluettelo vastaa jo: {0}.",
+ "loopback.allowed": "Sallittu: {0}.",
+ "loopback.allowedRefreshed": " Järjestelmän proxy päivitettiin, jotta käynnissä olevat sovellukset yhdistävät uudelleen. Jos liikennettä ei vieläkään näy, sulje sovellus kokonaan ja avaa se uudelleen.",
+ "loopback.allowedProxyStopped": " Käynnistä proxy ja ota järjestelmän proxy käyttöön, sulje sitten sovellus kokonaan ja avaa se uudelleen.",
+ "loopback.allowedSystemProxyOff": " Ota järjestelmän proxy käyttöön, sulje sitten sovellus kokonaan ja avaa se uudelleen.",
+ "loopback.allowedReady": " Sulje sovellus kokonaan ja avaa se uudelleen liikenteen kaappaamiseksi.",
+ "loopback.clearedRefreshed": "Kaikki loopback-poikkeukset tyhjennettiin. Järjestelmän proxy päivitettiin, jotta käynnissä olevat sovellukset yhdistävät uudelleen.",
+ "loopback.clearedReady": "Kaikki loopback-poikkeukset tyhjennettiin. Sulje kokonaan ja avaa uudelleen jokainen sovellus, joka käytti Inspectoria.",
+ "loopback.cleared": "Kaikki loopback-poikkeukset tyhjennettiin.",
+ "trust.macWaitBody": "Keychainin Näytä tiedot voi jo näyttää Luota aina, vaikka SSL-käytäntöjä ei olisi tallennettu (Chrome ja Inspector pitävät CA:ta yhä epäluotettavana).\n\nPakota tallennus:\n1. Keychain Access → login → Varmenteet → kaksoisnapsauta Titanium Root Certificate Authority\n2. Laajenna Luottamus\n3. Aseta Tätä varmennetta käytettäessä arvoon Käytä järjestelmän oletusarvoja ja vaihda se sitten takaisin arvoon Luota aina\n4. Sulje Näytä tiedot — salasanakehote on tultava; se kirjoittaa todelliset SSL-luottamuskäytännöt\n\nTämä ikkuna sulkeutuu automaattisesti, kun nämä käytännöt havaitaan. Jos tallensit jo, napsauta Olen tallentanut Luota aina.",
+ "trust.macWaitStatus": "Odotetaan varmennetta Keychainissa…",
+ "trust.macWaitInKeychain": "Odotetaan tallennettuja SSL-käytäntöjä (vaihda Luota aina, sulje Näytä tiedot, anna salasana)…",
+ "trust.macNotSaved": "Luota aina -näyttö ei riitä — vaihda Käytä järjestelmän oletusarvoja → Luota aina, sulje Näytä tiedot, anna salasana ja yritä sitten uudelleen Asenna juuri-CA / Pura HTTPS",
+ "trust.macConfirmSaved": "Olen tallentanut Luota aina",
+ "trust.exportCa": "Vie CA",
+ "trust.install.mac": "HTTPS-salauksen purkaminen edellyttää, että Titanium Inspectorin juuri-CA:han luotetaan Keychain Accessissa (login-avainnippu). Asennetaanko nyt?",
+ "trust.install.linux": "HTTPS-salauksen purkaminen edellyttää, että Titanium Inspectorin juuri-CA:han luotetaan käyttäjän varmennesäilössä (NSS). Asennetaanko nyt?",
+ "trust.install.windows": "HTTPS-salauksen purkaminen edellyttää, että Titanium Inspectorin juuri-CA:han luotetaan nykyisen käyttäjän luotettujen päämyöntäjien säilössä. Asennetaanko nyt?\n\nWindows voi näyttää luotetun juuren Kyllä/Ei-suojausvalintaikkunan (ei UAC) — valitse Kyllä, jotta luotat CA:han.",
+ "trust.install.other": "HTTPS-salauksen purkaminen edellyttää, että Titanium Inspectorin juuri-CA:han luotetaan tällä tietokoneella. Asennetaanko nyt?",
+ "trust.remove.mac": "Poistetaanko Titanium Inspectorin juuri-CA Keychainista? HTTPS-salauksen purkaminen poistetaan käytöstä.",
+ "trust.remove.linux": "Poistetaanko Titanium Inspectorin juuri-CA käyttäjän varmennesäilöstä (NSS)? HTTPS-salauksen purkaminen poistetaan käytöstä.",
+ "trust.remove.windows": "Poistetaanko Titanium Inspectorin juuri-CA nykyisen käyttäjän luotettujen päämyöntäjien säilöstä? HTTPS-salauksen purkaminen poistetaan käytöstä.",
+ "trust.remove.other": "Poistetaanko Titanium Inspectorin juuri-CA? HTTPS-salauksen purkaminen poistetaan käytöstä.",
+ "trust.elevate.mac": "Käyttäjätason luottamus epäonnistui tai ei riittänyt. Jatketaanko ja näytetäänkö macOS-ylläpitäjän salasanakehote? Peruuta jättää varmenneasetukset ennalleen.",
+ "trust.elevate.linux": "Käyttäjätason luottamus epäonnistui tai ei riittänyt. Jatketaanko ja näytetäänkö polkit-ylläpitäjän kehote? Peruuta jättää varmenneasetukset ennalleen.",
+ "trust.elevate.windows": "Käyttäjätason luottamus epäonnistui tai ei riittänyt. Jatketaanko ja näytetäänkö UAC? Peruuta jättää varmenneasetukset ennalleen.",
+ "trust.elevate.other": "Käyttäjätason luottamus epäonnistui tai ei riittänyt. Jatketaanko ylläpitäjän kehotteella? Peruuta jättää varmenneasetukset ennalleen.",
+ "trust.recovery.mac": "\n\nJatketaanko ja näytetäänkö macOS-ylläpitäjän salasanakehote? Ei nyt jättää varmenneasetukset ennalleen.",
+ "trust.recovery.linux": "\n\nJatketaanko ja näytetäänkö polkit-ylläpitäjän kehote? Ei nyt jättää varmenneasetukset ennalleen.",
+ "trust.recovery.windows": "\n\nJatketaanko ja näytetäänkö UAC? Ei nyt jättää varmenneasetukset ennalleen.",
+ "trust.recovery.other": "\n\nJatketaanko ylläpitäjän kehotteella? Ei nyt jättää varmenneasetukset ennalleen.",
+ "trust.hosts.mac": "Käyttöjärjestelmän ohitus edellyttää Kaappaus → Järjestelmän proxy (käyttää macOS-verkon välityspalvelinasetuksia). Vain tunnelia koskevat säännöt koskevat jokaista asiakasta, joka osuu Inspectoriin. Tehdasoletukset on esitäytetty alla oleviin luetteloihin — muokkaa vapaasti tai palauta.",
+ "trust.hosts.linux": "Käyttöjärjestelmän ohitus edellyttää Kaappaus → Järjestelmän proxy (käyttää työpöydän tai ympäristön välityspalvelinasetuksia). Vain tunnelia koskevat säännöt koskevat jokaista asiakasta, joka osuu Inspectoriin. Tehdasoletukset on esitäytetty alla oleviin luetteloihin — muokkaa vapaasti tai palauta.",
+ "trust.hosts.windows": "Käyttöjärjestelmän ohitus edellyttää Kaappaus → Järjestelmän proxy (käyttää WinINET-rajapintaa). Vain tunnelia koskevat säännöt koskevat jokaista asiakasta, joka osuu Inspectoriin. Tehdasoletukset on esitäytetty alla oleviin luetteloihin — muokkaa vapaasti tai palauta.",
+ "trust.hosts.other": "Käyttöjärjestelmän ohitus edellyttää Kaappaus → Järjestelmän proxy. Vain tunnelia koskevat säännöt koskevat jokaista asiakasta, joka osuu Inspectoriin. Tehdasoletukset on esitäytetty alla oleviin luetteloihin — muokkaa vapaasti tai palauta.",
+ "trust.localhost.mac": "Kun järjestelmän proxy on käytössä, lähetä localhost Inspectorin kautta. Pois käytöstä lisää localhostin macOS-proxyn ohitusluetteloon.",
+ "trust.localhost.linux": "Kun järjestelmän proxy on käytössä, lähetä localhost Inspectorin kautta. Pois käytöstä lisää localhostin kohteeseen NO_PROXY.",
+ "trust.localhost.windows": "Kun järjestelmän proxy on käytössä, lähetä localhost Inspectorin kautta (WinINET <-loopback>). Pois käytöstä antaa loopbackin ohittaa proxyn.",
+ "trust.localhost.other": "Kun järjestelmän proxy on käytössä, lähetä localhost Inspectorin kautta.",
+ "trust.status.missing": "Juuri-CA ei ole vielä luotettu — yritä uudelleen tai Vie CA",
+ "trust.status.cancelled": "Juuri-CA:n asennus peruutettiin",
+ "trust.status.certutil": "Selaimen varmennetyökalut puuttuvat — asenna ne, yritä uudelleen tai Vie CA",
+ "trust.status.homebrew": "Homebrew tarvitaan varmennetyökalujen asentamiseen — Vie CA ja luota siihen manuaalisesti",
+ "trust.status.macConfirm": "Aseta Luota aina Titanium Inspectorin juuri-CA:lle Keychain Accessissa",
+ "trust.status.keychain": "Keychain-luottamus epäonnistui — yritä uudelleen tai Vie CA ja luota siihen manuaalisesti",
+ "trust.fail.keychainTitle": "Vahvista luottamus Keychainissa",
+ "trust.fail.continueKeychain": "Jatka Keychain Accessissa",
+ "trust.fail.toolsTitle": "Varmennetyökaluja tarvitaan",
+ "trust.fail.toolsLinux": "Inspector tarvitsee certutil-työkalun (NSS-työkalut) juuri-CA:n luottamuksen viimeistelyyn.",
+ "trust.fail.toolsOther": "Inspector tarvitsee selaimen varmennetyökalut juuri-CA:n luottamuksen viimeistelyyn.",
+ "trust.fail.tryAgain": "Yritä uudelleen",
+ "trust.fail.homebrewBody": "Homebrew tarvitaan varmennetyökalujen asentamiseen. Vie CA ja luota siihen manuaalisesti.",
+ "trust.fail.title": "HTTPS-salausta ei voi vielä purkaa",
+ "trust.fail.body": "Titanium Inspectorin juuri-CA ei ole vielä luotettu tällä tietokoneella.",
+ "toolbar.throttle": "Rajoitus",
+ "toolbar.throttleTip": "Lisää viivettä ja kaistan muotoilua kaappauksen aikana (rungon kirjoitukset / WebSocket-kehykset). Oletuksena pois käytöstä.",
+ "toolbar.bindWatermark": "*, localhost tai IP",
+ "toolbar.bindTip": "127.0.0.1 tai localhost = vain tämä tietokone. 0.0.0.0 tai * = kaikki verkkosovittimet (sisältää localhost).",
+ "toolbar.portWatermark": "*, tai portti",
+ "toolbar.portTip": "* tai tyhjä = käyttöjärjestelmän valitsema portti (todellinen portti näkyy käynnistyksen jälkeen). Muuten 1–65535.",
+ "toolbar.listeningTip": "Proxy kuuntelee",
+ "toolbar.trustHealthTip": "Luottamustila juuri-CA:lle toiminnossa Pura HTTPS. Asenna CA tai luota siihen, jos tila on CA ei luotettu.",
+ "chip.process": "prosessi",
+ "inspect.request": "Pyyntö",
+ "inspect.requestTip": "Pyynnön otsakkeet ja runko",
+ "inspect.copyHeaders": "Kopioi otsakkeet",
+ "inspect.resizeTip": "Muuta kokoa vetämällä. Palauta kaksoisnapsautuksella.",
+ "inspect.pretty": "Muotoiltu",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Näytä runko Hex-vedoksena",
+ "inspect.saveRequest": "Tallenna pyyntö…",
+ "inspect.response": "Vastaus",
+ "inspect.responseTip": "Vastauksen otsakkeet ja runko",
+ "inspect.saveResponse": "Tallenna vastaus…",
+ "inspect.diff": "Ero",
+ "inspect.frames": "WS-kehykset",
+ "inspect.framesHelp": "Tämän istunnon suorat WebSocket-kehykset (suunta, opcode, tietojen esikatselu).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events jäsennettynä vastauksen rungosta.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Näytä otsakkeet",
+ "inspect.hideHeaders": "Piilota otsakkeet",
+ "inspect.headers": "Otsakkeet ({0})",
+ "inspect.prettyTip": "Sisennä JSON, XML ja HTML",
+ "inspect.prettyHexTip": "Ei käytettävissä näkymässä Hex",
+ "inspect.emptyBody": "(tyhjä)",
+ "inspect.noRequestBody": "Ei pyynnön runkoa",
+ "inspect.waiting": "Odotetaan vastausta…",
+ "composer.help": "Muodosta ja lähetä pyyntö proxyn kautta. Lataa valitusta kopioi nykyisen istunnon.",
+ "composer.method": "Menetelmä",
+ "composer.url": "URL",
+ "composer.headers": "Otsakkeet (Nimi: Arvo riville)",
+ "composer.body": "Runko",
+ "composer.loadSelected": "Lataa valitusta",
+ "composer.loadBody": "Lataa runko tiedostosta…",
+ "composer.send": "Lähetä",
+ "bp.help": "Pysäytä vastaavat asiakaspyynnöt, jotta voit muokata runkoa, jatkaa tai hylätä ne. Yksi tauko kerrallaan; jatkuu automaattisesti 120s jälkeen. Kun poistat valinnan Käytössä, pysäytetty pyyntö jatkuu.",
+ "bp.enabled": "Käytössä",
+ "bp.breakOnResponse": "Keskeytä vastauksessa",
+ "bp.match": "Vastaavuus",
+ "bp.urlWatermark": "URL-suodatin (* = kaikki, esim. *api*/users*)",
+ "bp.graphqlWatermark": "Vain tämä GraphQL-toiminto (valinnainen)",
+ "bp.graphqlTip": "Lisäsuodatin asiakaspyynnön rungolle. Vastaa kenttää JSON operationName tai nimettyä kyselyä. Jätä tyhjäksi, jos haluat vastata jokaista toimintoa kyseisellä URL-osoitteella.",
+ "bp.fromSelected": "Valitusta istunnosta",
+ "bp.fromSelectedTip": "Kopioi GraphQL-toiminnon nimi valitun istunnon pyynnöstä.",
+ "bp.graphqlHelp": "Jätä GraphQL-kenttä tyhjäksi, jos haluat vastata jokaista toimintoa. Täytä se (esim. GetUser), jos haluat pysäyttää vain kyseisen asiakaspyynnön yllä olevalla URL-osoitteella. Keskeytä vastauksessa käyttää yhä URL-suodatinta.",
+ "bp.editWatermark": "Muokkaa runkoa (Käytä rungon muokkausta, sitten Jatka)",
+ "bp.applyEdit": "Käytä rungon muokkausta",
+ "bp.continue": "Jatka",
+ "bp.abort": "Hylkää",
+ "ar.help": "Palauta tekaistu vastaus ennen varsinaista palvelinta. Vastaavuus päättää, mihin asiakaspyyntöihin sääntö pätee; alla olevat kentät ovat se, minkä lähetät takaisin.",
+ "ar.enabled": "Käytössä (ennen keskeytyskohtia)",
+ "ar.urlWatermark": "Vastaa URL-osoitetta (jokerimerkit *)",
+ "ar.graphqlHelp": "Samalla URL-osoitteella eri GraphQL-toiminnot voivat käyttää eri sääntöjä. Jätä tyhjäksi, jos haluat vastata jokaista toimintoa.",
+ "ar.respondWith": "Vastaa näin",
+ "ar.statusTip": "HTTP-tila. Tyhjä = 200. Käytä arvoa 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local -tiedosto (valinnainen)",
+ "ar.bodyWatermark": "Vastauksen runko (käytetään, kun Map Local on tyhjä)",
+ "ar.add": "Lisää sääntö",
+ "ar.update": "Päivitä sääntö",
+ "ar.delete": "Poista sääntö",
+ "script.intro": "Yksi komento riville, jokaisessa kaapatussa istunnossa. Tämä ei ole JavaScript eikä C# — kirjoita vain alla olevat komennot.",
+ "script.what": "Mitä voit kirjoittaa",
+ "script.setHeaderHelp": "Lisää tai korvaa otsake. Liikenne jatkuu silti palvelimelle.",
+ "script.setStatusHelp": "Pyynnössä: vastaa heti ja ohita palvelin. Vastauksessa: muuta tila, jonka asiakas näkee.",
+ "script.abortHelp": "Estä koodilla 403 Kielletty. Lisää rivi set-status, jos haluat toisen koodin.",
+ "script.comment": "Aloita rivi merkeillä # tai // kommenttia varten. Voit yhdistää komentoja; laita kukin omalle rivilleen.",
+ "script.onRequest": "Pyynnössä",
+ "script.onResponse": "Vastauksessa",
+ "script.requestSkips": "abort tai set-status tässä ohittaa seuraavat: AutoResponder, keskeytyskohdat ja alkuperä.",
+ "map.help": "Kirjoita vastaavat asiakaspyynnöt uudelleen toiseen alkuperään ennen varsinaista palvelinta. Käytä yhtä * vastaavuudessa ja kohteessa, jotta polun tai kyselyn pääte säilyy. Tämä ajetaan sen jälkeen, kun AutoResponder / Map Local on käsitelty.",
+ "map.graphqlHelp": "Jätä tyhjäksi, jos haluat kirjoittaa uudelleen jokaisen toiminnon kyseisellä URL-osoitteella. Täytä, jos haluat kirjoittaa uudelleen vain kyseisen GraphQL-toiminnon.",
+ "map.rewriteTo": "Kirjoita uudelleen kohteeseen",
+ "map.targetWatermark": "Kohde-URL (absoluuttinen, valinnainen *)",
+ "loopback.allow": "Salli",
+ "loopback.appName": "Sovelluksen nimi",
+ "loopback.packageId": "Paketin tunnus",
+ "status.ready": "Valmis",
+ "status.searchingBodies": "Etsitään rungoista…",
+ "status.proxyStopped": "Proxy pysäytetty",
+ "status.proxyRunning": "Proxy käynnissä osoitteessa {0}",
+ "trust.health.trusted": "CA luotettu",
+ "trust.health.untrusted": "CA ei luotettu"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.fr.json b/src/Titanium.Inspector/Localization/strings.fr.json
new file mode 100644
index 000000000..824e70f7c
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.fr.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Fichier",
+ "menu.exportAllHar": "Tout exporter en HAR…",
+ "menu.exportSelectedHar": "Exporter la sélection en HAR…",
+ "menu.importHar": "Importer un HAR…",
+ "menu.exportAllArchive": "Tout exporter en archive…",
+ "menu.exportSelectedArchive": "Exporter la sélection en archive…",
+ "menu.importArchive": "Importer une archive…",
+ "menu.exit": "Quitter",
+ "menu.capture": "Capture",
+ "menu.startProxy": "Démarrer le proxy",
+ "menu.stopProxy": "Arrêter le proxy",
+ "menu.capturing": "Capture en cours",
+ "menu.clearSessions": "Effacer les sessions",
+ "menu.removeSelected": "Supprimer la sélection",
+ "menu.autoStartCapture": "Démarrer la capture automatiquement",
+ "menu.autoSystemProxy": "Proxy système automatique au démarrage",
+ "menu.decryptHttps": "Déchiffrer HTTPS",
+ "menu.systemProxy": "Proxy système",
+ "menu.captureLocal": "Capturer le trafic local",
+ "menu.allowStoreApps": "Autoriser les applications du Store…",
+ "menu.installCa": "Installer la CA racine (utilisateur actuel)",
+ "menu.removeCa": "Retirer la CA racine (utilisateur actuel)",
+ "menu.rotateCa": "Effacer et réinstaller la CA racine…",
+ "menu.removeOldCas": "Retirer les anciennes CA racines…",
+ "menu.exportCa": "Exporter la CA racine…",
+ "menu.trustFirefox": "Approuver la CA dans Firefox…",
+ "menu.deviceCa": "Configurer la CA d’un appareil externe",
+ "menu.tools": "Outils",
+ "menu.composer": "Composer…",
+ "menu.breakpoints": "Points d’arrêt…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Scripts…",
+ "menu.mapRemote": "Mappage distant…",
+ "menu.options": "Options",
+ "menu.theme": "Thème",
+ "menu.themeLight": "Clair",
+ "menu.themeDark": "Sombre",
+ "menu.themeAutomatic": "Automatique",
+ "menu.language": "Langue",
+ "menu.languageAutomatic": "Automatique",
+ "menu.columns": "Colonnes",
+ "menu.col.id": "Id",
+ "menu.col.method": "Méthode",
+ "menu.col.status": "Statut",
+ "menu.col.host": "Hôte",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protocole",
+ "menu.col.duration": "Durée",
+ "menu.col.ttfb": "Attente (TTFB)",
+ "menu.col.size": "Taille",
+ "menu.col.process": "Processus",
+ "menu.col.started": "Démarré",
+ "menu.col.scheme": "Schéma",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Réinitialiser les colonnes",
+ "menu.sessionRetention": "Conservation des sessions…",
+ "menu.excludedHosts": "Hôtes exclus…",
+ "menu.excludedHostsTip": "Listes d’exclusion du déchiffrement HTTPS et règles de contournement du système",
+ "menu.ignoreCerts": "Ignorer les certificats de serveur non sécurisés",
+ "menu.addVia": "Ajouter l’en-tête Via",
+ "menu.addViaTip": "Ajoute Via: … titanium-web-proxy au trafic intercepté (RFC 9110). Désactivé, l’injection et la détection de boucle Via sont coupées.",
+ "menu.logging": "Journalisation…",
+ "menu.resetSettings": "Réinitialiser les paramètres d’Inspector…",
+ "menu.help": "Aide",
+ "menu.checkUpdates": "Rechercher des mises à jour…",
+ "menu.checkUpdatesStartup": "Rechercher des mises à jour au démarrage",
+ "menu.updateChannel": "Canal de mise à jour",
+ "menu.channelStable": "Stable",
+ "menu.channelBeta": "Bêta",
+ "menu.about": "À propos de Titanium Inspector…",
+ "toolbar.searchWatermark": "Rechercher une URL, un hôte, un processus… (ou method:GET status:4xx)",
+ "toolbar.searchTip": "Le texte libre recherche l’URL, l’hôte, le nom du processus, l’ID exact du processus, la méthode et le statut. Les préfixes limitent à un champ : method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: recherche aussi les corps écrits sur le disque. Préfixez un champ ou un mot par - pour l’exclure (p. ex. -host:cursor.sh ou -cursor). Filtres modifie les hôtes et processus masqués avec plus de place.",
+ "toolbar.filters": "Filtres",
+ "toolbar.filtersTip": "Modifier la recherche et les hôtes ou processus masqués dans une fenêtre plus grande",
+ "toolbar.hideConnect": "Masquer CONNECT",
+ "toolbar.hideConnectTip": "Masquer les tunnels HTTPS opaques lorsque Déchiffrer HTTPS est désactivé",
+ "toolbar.hideImages": "Masquer les images",
+ "toolbar.errorsOnly": "Erreurs seulement",
+ "toolbar.clearFilters": "Effacer les filtres",
+ "toolbar.hidden": "Masqués",
+ "ctx.replay": "Rejouer",
+ "ctx.loadComposer": "Charger dans Composer",
+ "ctx.saveRequest": "Enregistrer le corps de la requête…",
+ "ctx.saveResponse": "Enregistrer le corps de la réponse…",
+ "ctx.copyUrl": "Copier l’URL",
+ "ctx.copyCurl": "Copier comme curl",
+ "ctx.copyFetch": "Copier comme fetch",
+ "ctx.diff": "Comparer la sélection…",
+ "ctx.filterHost": "Filtrer par hôte",
+ "ctx.hideHost": "Masquer l’hôte",
+ "ctx.filterProcess": "Filtrer par processus",
+ "ctx.hideProcess": "Masquer le processus",
+ "ctx.excludeHost": "Exclure l’hôte…",
+ "ctx.excludeHostTip": "Arrêter de déchiffrer le HTTPS de cet hôte. Les lignes restent dans la liste ; utilisez Masquer l’hôte pour les retirer de la vue.",
+ "grid.duration": "Durée (ms)",
+ "grid.wait": "Attente (ms)",
+ "pane.inspect": "Inspecter",
+ "pane.composer": "Composer",
+ "pane.breakpoints": "Points d’arrêt",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Scripts",
+ "pane.mapRemote": "Mappage distant",
+ "pane.closeTip": "Fermer le volet",
+ "inspect.empty": "Sélectionnez une session dans la grille pour inspecter les en-têtes et les corps de la requête et de la réponse.",
+ "common.ok": "OK",
+ "common.cancel": "Annuler",
+ "common.save": "Enregistrer",
+ "common.apply": "Appliquer",
+ "common.remove": "Supprimer",
+ "common.browse": "Parcourir…",
+ "common.openFolder": "Ouvrir le dossier",
+ "common.forget": "Oublier",
+ "common.close": "Fermer",
+ "loopback.window": "Autoriser les applications du Store à utiliser ce proxy",
+ "loopback.checkAll": "Tout cocher",
+ "loopback.uncheckAll": "Tout décocher",
+ "loopback.filterWatermark": "Filtrer par nom d’application…",
+ "loopback.clearAll": "Tout effacer",
+ "trust.macWindow": "Confirmer l’approbation dans Keychain Access",
+ "trust.openKeychain": "Ouvrir Keychain Access",
+ "trust.notNow": "Pas maintenant",
+ "trust.recoveryTitle": "Approbation de la CA racine",
+ "trust.macWaitPlaceholder": "En attente de l’approbation SSL…",
+ "window.about": "À propos de Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Copyright © Jehonathan Thomas",
+ "about.license": "Sous licence PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Détails de la licence",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filtres",
+ "filters.search": "Recherche",
+ "filters.searchHelp": "La même recherche que dans la barre d’outils, avec plus de place. Les hôtes et processus masqués sont listés ci-dessous, pas dans ce champ.",
+ "filters.searchWatermark": "URL, hôte, processus, method:GET, status:4xx…",
+ "filters.hideHeading": "Masquer dans la liste",
+ "filters.hideHelp": "Les lignes restent capturées. Ceci ne fait que les masquer dans la liste. Pour arrêter de déchiffrer HTTPS, utilisez Exclure l’hôte…",
+ "filters.hosts": "Hôtes",
+ "filters.addHostWatermark": "Ajouter un hôte à masquer",
+ "filters.addHost": "Ajouter un hôte",
+ "filters.processes": "Processus",
+ "filters.addProcessWatermark": "Ajouter un processus à masquer",
+ "filters.addProcess": "Ajouter un processus",
+ "filters.processSpace": "Un nom contenant un espace est raccourci au premier mot, ce qui peut aussi masquer d’autres noms contenant ce mot.",
+ "window.confirm": "Confirmer",
+ "window.excludeHost": "Exclure l’hôte",
+ "exclude.action": "Exclure",
+ "exclude.help": "Cet hôte apparaîtra toujours dans la liste des sessions. Inspector n’essaiera pas de lire son HTTPS.",
+ "window.logging": "Journalisation",
+ "logging.help": "Écrire des messages de diagnostic pour le dépannage. Les modifications s’appliquent immédiatement.",
+ "logging.enable": "Activer la journalisation",
+ "logging.writeFile": "Écrire le journal dans un fichier",
+ "logging.detail": "Niveau de détail",
+ "logging.detailHelp": "Error = problèmes seulement. Warning / Information = plus de contexte. Debug = très détaillé.",
+ "logging.path": "Chemin du fichier journal",
+ "window.excludedHosts": "Hôtes exclus",
+ "excluded.reset": "Rétablir les valeurs par défaut",
+ "excluded.bypass": "Contourner le proxy (système)",
+ "excluded.bypassHelp": "Le trafic n’atteint jamais Inspector lorsque le proxy système est activé. Prérempli avec des hôtes d’identité Microsoft, SSO et RDP. Les retirer peut empêcher la connexion RDP tant que le proxy système est activé.",
+ "excluded.notDecrypted": "Hôtes non déchiffrés",
+ "excluded.notDecryptedHelp": "CONNECT reste visible ; TLS reste opaque lorsque Déchiffrer HTTPS est activé. Prérempli avec des hôtes à épinglage de certificat (Dropbox, Webex).",
+ "excluded.learnHeading": "Ne plus déchiffrer automatiquement en cas d’échec",
+ "excluded.learn": "Mémoriser les hôtes dont le TLS d’origine échoue sous déchiffrement",
+ "excluded.learnHelp": "Lorsque le TLS d’origine échoue de façon répétée sous déchiffrement, ou que le serveur d’origine renvoie 403/429, Inspector cesse de déchiffrer cet hôte pour les connexions suivantes de cette session. La liste est plafonnée et oubliée au redémarrage, sauf si vous ajoutez ces hôtes aux hôtes non déchiffrés.",
+ "excluded.learnPaused": "Apprentissage en pause — les entrées existantes sont conservées jusqu’à ce qu’elles soient oubliées.",
+ "excluded.noneLearned": "Aucun hôte mémorisé pour l’instant.",
+ "excluded.promote": "Ajouter aux hôtes non déchiffrés",
+ "excluded.clearLearned": "Effacer tous les mémorisés",
+ "window.retention": "Conservation des sessions",
+ "retention.max": "Nombre maximal de sessions à conserver",
+ "retention.maxHelp": "Nombre de requêtes qui restent dans la liste des sessions. Au-delà, les lignes les plus anciennes quittent la liste mais restent sur le disque jusqu’à ce qu’Effacer les sessions ou la limite d’espace disque les supprime.",
+ "retention.cache": "Dossier de cache",
+ "retention.openCache": "Ouvrir le dossier de cache",
+ "retention.clearCache": "Effacer le cache des sessions enregistrées…",
+ "retention.advanced": "Avancé",
+ "retention.disk": "Espace disque pour les sessions enregistrées (MB)",
+ "retention.diskHelp": "Espace maximal pour toutes les sessions enregistrées sur le disque (toutes les exécutions d’Inspector). Chaque exécution utilise un sous-dossier horodaté ; au-delà, les fichiers HAR les plus anciens sont supprimés en premier. Les dossiers d’exécution vides sont retirés.",
+ "loopback.intro": "Les applications du Windows Store et UWP sont bloquées de localhost par défaut. Cochez les applications qui doivent utiliser Inspector, puis Appliquer. Redémarrez chaque application (quittez-la complètement) après Appliquer. Inspector doit être en cours d’exécution avec le proxy système activé. Tout effacer retire chaque autorisation.",
+ "loopback.closedUnchanged": "Applications du Store inchangées.",
+ "loopback.proxyStopped": "Démarrez le proxy et activez le proxy système. Les applications du Store ne peuvent pas être capturées tant que les deux ne sont pas activés.",
+ "loopback.systemProxyOff": "Activez le proxy système (menu Capture). La liste d’autorisation permet seulement aux applications du Store d’atteindre localhost ; elles suivent toujours le proxy système.",
+ "loopback.refreshing": "Actualisation du proxy système pour que les applications en cours se reconnectent…",
+ "loopback.unchangedCount": "La liste d’autorisation correspond déjà : {0}.",
+ "loopback.allowed": "Autorisé : {0}.",
+ "loopback.allowedRefreshed": " Le proxy système a été actualisé pour que les applications en cours se reconnectent. Si le trafic n’apparaît toujours pas, quittez complètement l’application et rouvrez-la.",
+ "loopback.allowedProxyStopped": " Démarrez le proxy et activez le proxy système, puis quittez complètement l’application et rouvrez-la.",
+ "loopback.allowedSystemProxyOff": " Activez le proxy système, puis quittez complètement l’application et rouvrez-la.",
+ "loopback.allowedReady": " Quittez complètement l’application et rouvrez-la pour capturer le trafic.",
+ "loopback.clearedRefreshed": "Toutes les exemptions loopback ont été effacées. Le proxy système a été actualisé pour que les applications en cours se reconnectent.",
+ "loopback.clearedReady": "Toutes les exemptions loopback ont été effacées. Quittez complètement toute application qui utilisait Inspector, puis rouvrez-la.",
+ "loopback.cleared": "Toutes les exemptions loopback ont été effacées.",
+ "trust.macWaitBody": "Lire les informations dans Keychain Access peut déjà afficher Toujours approuver même si les politiques SSL n’ont pas été enregistrées (Chrome et Inspector considèrent encore la CA comme non approuvée).\n\nForcer l’enregistrement :\n1. Keychain Access → session → Certificats → double-cliquez sur Titanium Root Certificate Authority\n2. Développez Confiance\n3. Réglez Lors de l’utilisation de ce certificat sur Utiliser les réglages par défaut du système, puis remettez Toujours approuver\n4. Fermez Lire les informations — une invite de mot de passe doit apparaître ; c’est elle qui écrit les vraies politiques d’approbation SSL\n\nCette fenêtre se ferme automatiquement lorsque ces politiques sont détectées. Si vous avez déjà enregistré, cliquez sur J’ai enregistré Toujours approuver.",
+ "trust.macWaitStatus": "En attente du certificat dans le trousseau…",
+ "trust.macWaitInKeychain": "En attente des politiques SSL enregistrées (basculer Toujours approuver, fermer Lire les informations, saisir le mot de passe)…",
+ "trust.macNotSaved": "L’affichage Toujours approuver ne suffit pas — basculez vers Utiliser les réglages par défaut du système, puis de nouveau vers Toujours approuver, fermez Lire les informations, saisissez votre mot de passe, puis réessayez Installer la CA racine / Déchiffrer HTTPS",
+ "trust.macConfirmSaved": "J’ai enregistré Toujours approuver",
+ "trust.exportCa": "Exporter la CA",
+ "trust.install.mac": "Déchiffrer HTTPS exige d’approuver la CA racine de Titanium Inspector dans Keychain Access (trousseau session). Installer maintenant ?",
+ "trust.install.linux": "Déchiffrer HTTPS exige d’approuver la CA racine de Titanium Inspector dans votre magasin de certificats utilisateur (NSS). Installer maintenant ?",
+ "trust.install.windows": "Déchiffrer HTTPS exige d’approuver la CA racine de Titanium Inspector dans le magasin des autorités de certification racines de confiance de l’utilisateur actuel. Installer maintenant ?\n\nWindows peut afficher une boîte de sécurité Oui/Non pour les racines de confiance (pas UAC) — choisissez Oui pour approuver la CA.",
+ "trust.install.other": "Déchiffrer HTTPS exige d’approuver la CA racine de Titanium Inspector sur cet ordinateur. Installer maintenant ?",
+ "trust.remove.mac": "Retirer la CA racine de Titanium Inspector du trousseau ? Le déchiffrement HTTPS sera désactivé.",
+ "trust.remove.linux": "Retirer la CA racine de Titanium Inspector de votre magasin de certificats utilisateur (NSS) ? Le déchiffrement HTTPS sera désactivé.",
+ "trust.remove.windows": "Retirer la CA racine de Titanium Inspector du magasin des autorités de certification racines de confiance de l’utilisateur actuel ? Le déchiffrement HTTPS sera désactivé.",
+ "trust.remove.other": "Retirer la CA racine de Titanium Inspector ? Le déchiffrement HTTPS sera désactivé.",
+ "trust.elevate.mac": "L’approbation au niveau de l’utilisateur a échoué ou était insuffisante. Continuer pour afficher une invite de mot de passe administrateur macOS ? Annuler laisse les réglages de certificat inchangés.",
+ "trust.elevate.linux": "L’approbation au niveau de l’utilisateur a échoué ou était insuffisante. Continuer pour afficher une invite d’administrateur polkit ? Annuler laisse les réglages de certificat inchangés.",
+ "trust.elevate.windows": "L’approbation au niveau de l’utilisateur a échoué ou était insuffisante. Continuer pour afficher UAC ? Annuler laisse les réglages de certificat inchangés.",
+ "trust.elevate.other": "L’approbation au niveau de l’utilisateur a échoué ou était insuffisante. Continuer avec une invite d’administrateur ? Annuler laisse les réglages de certificat inchangés.",
+ "trust.recovery.mac": "\n\nContinuer pour afficher une invite de mot de passe administrateur macOS ? Pas maintenant laisse les réglages de certificat inchangés.",
+ "trust.recovery.linux": "\n\nContinuer pour afficher une invite d’administrateur polkit ? Pas maintenant laisse les réglages de certificat inchangés.",
+ "trust.recovery.windows": "\n\nContinuer pour afficher UAC ? Pas maintenant laisse les réglages de certificat inchangés.",
+ "trust.recovery.other": "\n\nContinuer avec une invite d’administrateur ? Pas maintenant laisse les réglages de certificat inchangés.",
+ "trust.hosts.mac": "Le contournement du système exige Capture → Proxy système (utilise les réglages de proxy réseau de macOS). Les règles limitées au tunnel s’appliquent à chaque client qui atteint Inspector. Les valeurs d’usine sont préremplies dans les listes ci-dessous — modifiez-les librement ou réinitialisez.",
+ "trust.hosts.linux": "Le contournement du système exige Capture → Proxy système (utilise les réglages de proxy du bureau ou de l’environnement). Les règles limitées au tunnel s’appliquent à chaque client qui atteint Inspector. Les valeurs d’usine sont préremplies dans les listes ci-dessous — modifiez-les librement ou réinitialisez.",
+ "trust.hosts.windows": "Le contournement du système exige Capture → Proxy système (utilise WinINET). Les règles limitées au tunnel s’appliquent à chaque client qui atteint Inspector. Les valeurs d’usine sont préremplies dans les listes ci-dessous — modifiez-les librement ou réinitialisez.",
+ "trust.hosts.other": "Le contournement du système exige Capture → Proxy système. Les règles limitées au tunnel s’appliquent à chaque client qui atteint Inspector. Les valeurs d’usine sont préremplies dans les listes ci-dessous — modifiez-les librement ou réinitialisez.",
+ "trust.localhost.mac": "Lorsque le proxy système est activé, envoyer localhost via Inspector. Désactivé, localhost est ajouté à la liste de contournement du proxy macOS.",
+ "trust.localhost.linux": "Lorsque le proxy système est activé, envoyer localhost via Inspector. Désactivé, localhost est ajouté à NO_PROXY.",
+ "trust.localhost.windows": "Lorsque le proxy système est activé, envoyer localhost via Inspector (WinINET <-loopback>). Désactivé, le loopback ignore le proxy.",
+ "trust.localhost.other": "Lorsque le proxy système est activé, envoyer localhost via Inspector.",
+ "trust.status.missing": "La CA racine n’est pas encore approuvée — réessayez, ou exportez la CA",
+ "trust.status.cancelled": "Installation de la CA racine annulée",
+ "trust.status.certutil": "Les outils de certificats du navigateur sont absents — installez-les, réessayez ou exportez la CA",
+ "trust.status.homebrew": "Homebrew est requis pour installer les outils de certificats — exportez la CA pour l’approuver manuellement",
+ "trust.status.macConfirm": "Définissez Toujours approuver pour la CA racine de Titanium Inspector dans Keychain Access",
+ "trust.status.keychain": "L’approbation du trousseau a échoué — réessayez, ou exportez la CA et approuvez-la manuellement",
+ "trust.fail.keychainTitle": "Confirmer l’approbation dans le trousseau",
+ "trust.fail.continueKeychain": "Continuer dans Keychain Access",
+ "trust.fail.toolsTitle": "Outils de certificats requis",
+ "trust.fail.toolsLinux": "Inspector a besoin de certutil (outils NSS) pour terminer l’approbation de la CA racine.",
+ "trust.fail.toolsOther": "Inspector a besoin des outils de certificats du navigateur pour terminer l’approbation de la CA racine.",
+ "trust.fail.tryAgain": "Réessayer",
+ "trust.fail.homebrewBody": "Homebrew est requis pour installer les outils de certificats. Exportez la CA pour l’approuver manuellement.",
+ "trust.fail.title": "Impossible de déchiffrer HTTPS pour l’instant",
+ "trust.fail.body": "La CA racine de Titanium Inspector n’est pas encore approuvée sur cet ordinateur.",
+ "toolbar.throttle": "Limitation",
+ "toolbar.throttleTip": "Ajoute de la latence et une limitation de bande passante pendant la capture (écritures du corps / trames WebSocket). Désactivé par défaut.",
+ "toolbar.bindWatermark": "*, localhost ou IP",
+ "toolbar.bindTip": "127.0.0.1 ou localhost = ce PC uniquement. 0.0.0.0 ou * = toutes les cartes réseau (y compris localhost).",
+ "toolbar.portWatermark": "* ou port",
+ "toolbar.portTip": "* ou vide = port choisi par le système (le port réel apparaît après le démarrage). Sinon 1–65535.",
+ "toolbar.listeningTip": "Le proxy est à l’écoute",
+ "toolbar.trustHealthTip": "État d’approbation de la CA racine pour Déchiffrer HTTPS. Installez ou approuvez la CA si l’indication est non approuvée.",
+ "chip.process": "Processus",
+ "inspect.request": "Requête",
+ "inspect.requestTip": "En-têtes et corps de la requête",
+ "inspect.copyHeaders": "Copier les en-têtes",
+ "inspect.resizeTip": "Faites glisser pour redimensionner. Double-cliquez pour réinitialiser.",
+ "inspect.pretty": "Lisible",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Afficher le corps en hexadécimal",
+ "inspect.saveRequest": "Enregistrer la requête…",
+ "inspect.response": "Réponse",
+ "inspect.responseTip": "En-têtes et corps de la réponse",
+ "inspect.saveResponse": "Enregistrer la réponse…",
+ "inspect.diff": "Comparaison",
+ "inspect.frames": "Trames WS",
+ "inspect.framesHelp": "Trames WebSocket en direct pour cette session (direction, opcode, aperçu de la charge utile).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events analysés à partir du corps de la réponse.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Afficher les en-têtes",
+ "inspect.hideHeaders": "Masquer les en-têtes",
+ "inspect.headers": "En-têtes ({0})",
+ "inspect.prettyTip": "Mettre en retrait JSON, XML et HTML",
+ "inspect.prettyHexTip": "Non applicable en vue hexadécimale",
+ "inspect.emptyBody": "(vide)",
+ "inspect.noRequestBody": "Pas de corps de requête",
+ "inspect.waiting": "En attente de la réponse…",
+ "composer.help": "Créez et envoyez une requête via le proxy. Charger depuis la sélection copie la session actuelle.",
+ "composer.method": "Méthode",
+ "composer.url": "URL",
+ "composer.headers": "En-têtes (Nom : valeur par ligne)",
+ "composer.body": "Corps",
+ "composer.loadSelected": "Charger depuis la sélection",
+ "composer.loadBody": "Charger le corps depuis un fichier…",
+ "composer.send": "Envoyer",
+ "bp.help": "Met en pause les requêtes client correspondantes pour modifier le corps, continuer ou abandonner. Une seule pause à la fois ; reprise automatique après 120s. Décocher Activé reprend une requête en pause.",
+ "bp.enabled": "Activé",
+ "bp.breakOnResponse": "Pause sur la réponse",
+ "bp.match": "Correspondance",
+ "bp.urlWatermark": "Filtre d’URL (* = tout, p. ex. *api*/users*)",
+ "bp.graphqlWatermark": "Uniquement cette opération GraphQL (facultatif)",
+ "bp.graphqlTip": "Filtre supplémentaire sur le corps de la requête client. Correspond à operationName dans le JSON ou à une requête nommée. Laissez vide pour correspondre à chaque opération de l’URL.",
+ "bp.fromSelected": "Depuis la session sélectionnée",
+ "bp.fromSelectedTip": "Copie le nom de l’opération GraphQL depuis la requête de la session sélectionnée.",
+ "bp.graphqlHelp": "Laissez le champ GraphQL vide pour correspondre à chaque opération. Remplissez-le (p. ex. GetUser) pour ne mettre en pause que cette requête client sur l’URL ci-dessus. Pause sur la réponse utilise toujours le filtre d’URL.",
+ "bp.editWatermark": "Modifier le corps (Appliquer la modification du corps, puis Continuer)",
+ "bp.applyEdit": "Appliquer la modification du corps",
+ "bp.continue": "Continuer",
+ "bp.abort": "Abandonner",
+ "ar.help": "Renvoie une réponse fictive avant le vrai serveur. Correspondance décide à quelles requêtes client une règle s’applique ; les champs en dessous sont ce que vous renvoyez.",
+ "ar.enabled": "Activé (avant les points d’arrêt)",
+ "ar.urlWatermark": "URL correspondante (jokers *)",
+ "ar.graphqlHelp": "Même URL, des opérations GraphQL différentes peuvent utiliser des règles différentes. Laissez vide pour correspondre à chaque opération.",
+ "ar.respondWith": "Répondre avec",
+ "ar.statusTip": "Statut HTTP. Vide = 200. Utilisez 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Fichier Map Local (facultatif)",
+ "ar.bodyWatermark": "Corps de la réponse (utilisé lorsque Map Local est vide)",
+ "ar.add": "Ajouter une règle",
+ "ar.update": "Mettre à jour la règle",
+ "ar.delete": "Supprimer la règle",
+ "script.intro": "Une commande par ligne, sur chaque session capturée. Ce n’est ni JavaScript ni C# — saisissez uniquement les commandes ci-dessous.",
+ "script.what": "Ce que vous pouvez saisir",
+ "script.setHeaderHelp": "Ajoute ou remplace un en-tête. Le trafic continue vers le serveur.",
+ "script.setStatusHelp": "Sur la requête : répondre tout de suite et ignorer le serveur. Sur la réponse : changer le statut vu par le client.",
+ "script.abortHelp": "Bloque avec 403 Forbidden. Ajoutez une ligne set-status pour choisir un autre code.",
+ "script.comment": "Commencez une ligne par # ou // pour un commentaire. Vous pouvez combiner des commandes ; placez chacune sur sa propre ligne.",
+ "script.onRequest": "Sur la requête",
+ "script.onResponse": "Sur la réponse",
+ "script.requestSkips": "abort ou set-status ici ignore AutoResponder, les points d’arrêt et l’origine.",
+ "map.help": "Réécrit les requêtes client correspondantes vers une autre origine avant le vrai serveur. Utilisez un seul * dans la correspondance et la cible pour conserver un suffixe de chemin ou de requête. S’exécute après AutoResponder / Map Local.",
+ "map.graphqlHelp": "Laissez vide pour réécrire chaque opération de l’URL. Remplissez le champ pour ne réécrire que cette opération GraphQL.",
+ "map.rewriteTo": "Réécrire vers",
+ "map.targetWatermark": "URL cible (absolue, * facultatif)",
+ "loopback.allow": "Autoriser",
+ "loopback.appName": "Nom de l’application",
+ "loopback.packageId": "ID du package",
+ "status.ready": "Prêt",
+ "status.searchingBodies": "Recherche dans les corps…",
+ "status.proxyStopped": "Proxy arrêté",
+ "status.proxyRunning": "Proxy actif sur {0}",
+ "trust.health.trusted": "CA approuvée",
+ "trust.health.untrusted": "CA non approuvée"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.he.json b/src/Titanium.Inspector/Localization/strings.he.json
new file mode 100644
index 000000000..78e402e62
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.he.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "קובץ",
+ "menu.exportAllHar": "ייצוא כל HAR…",
+ "menu.exportSelectedHar": "ייצוא HAR שנבחר…",
+ "menu.importHar": "ייבוא HAR…",
+ "menu.exportAllArchive": "ייצוא כל הארכיון…",
+ "menu.exportSelectedArchive": "ייצוא הארכיון שנבחר…",
+ "menu.importArchive": "ייבוא ארכיון…",
+ "menu.exit": "יציאה",
+ "menu.capture": "לכידה",
+ "menu.startProxy": "הפעלת המתווך",
+ "menu.stopProxy": "עצירת המתווך",
+ "menu.capturing": "לוכד",
+ "menu.clearSessions": "ניקוי הפעלות",
+ "menu.removeSelected": "הסרת הנבחרים",
+ "menu.autoStartCapture": "הפעלת לכידה אוטומטית",
+ "menu.autoSystemProxy": "מתווך מערכת בעת ההפעלה",
+ "menu.decryptHttps": "פענוח HTTPS",
+ "menu.systemProxy": "מתווך מערכת",
+ "menu.captureLocal": "לכידת תעבורה מקומית",
+ "menu.allowStoreApps": "התרת אפליקציות החנות…",
+ "menu.installCa": "התקנת CA שורש (המשתמש הנוכחי)",
+ "menu.removeCa": "הסרת CA שורש (המשתמש הנוכחי)",
+ "menu.rotateCa": "ניקוי והתקנה מחדש של CA שורש…",
+ "menu.removeOldCas": "הסרת אישורי CA שורש ישנים…",
+ "menu.exportCa": "ייצוא CA שורש…",
+ "menu.trustFirefox": "מתן אמון ב-CA ב-Firefox…",
+ "menu.deviceCa": "הגדרת CA למכשיר חיצוני",
+ "menu.tools": "כלים",
+ "menu.composer": "מחבר…",
+ "menu.breakpoints": "נקודות עצירה…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "תסריטים…",
+ "menu.mapRemote": "מיפוי מרוחק…",
+ "menu.options": "אפשרויות",
+ "menu.theme": "ערכת נושא",
+ "menu.themeLight": "בהיר",
+ "menu.themeDark": "כהה",
+ "menu.themeAutomatic": "אוטומטי",
+ "menu.language": "שפה",
+ "menu.languageAutomatic": "אוטומטי",
+ "menu.columns": "עמודות",
+ "menu.col.id": "מזהה",
+ "menu.col.method": "שיטה",
+ "menu.col.status": "מצב",
+ "menu.col.host": "מארח",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "פרוטוקול",
+ "menu.col.duration": "משך",
+ "menu.col.ttfb": "המתנה (TTFB)",
+ "menu.col.size": "גודל",
+ "menu.col.process": "תהליך",
+ "menu.col.started": "התחלה",
+ "menu.col.scheme": "סכמה",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "איפוס עמודות",
+ "menu.sessionRetention": "שמירת הפעלות…",
+ "menu.excludedHosts": "מארחים מוחרגים…",
+ "menu.excludedHostsTip": "רשימות דילוג על פענוח HTTPS וכללי עקיפה של מערכת ההפעלה",
+ "menu.ignoreCerts": "התעלמות מאישורי שרת לא בטוחים",
+ "menu.addVia": "הוספת כותרת Via",
+ "menu.addViaTip": "הוספת Via: … titanium-web-proxy לתעבורה שיורטה (RFC 9110). כיבוי משבית את ההוספה ואת זיהוי לולאות Via.",
+ "menu.logging": "רישום ביומן…",
+ "menu.resetSettings": "איפוס הגדרות Inspector…",
+ "menu.help": "עזרה",
+ "menu.checkUpdates": "בדיקת עדכונים…",
+ "menu.checkUpdatesStartup": "בדיקת עדכונים בעת ההפעלה",
+ "menu.updateChannel": "ערוץ עדכון",
+ "menu.channelStable": "יציב",
+ "menu.channelBeta": "בטא",
+ "menu.about": "אודות Titanium Inspector…",
+ "toolbar.searchWatermark": "חיפוש URL, מארח, תהליך… (או method:GET status:4xx)",
+ "toolbar.searchTip": "טקסט חופשי מחפש URL, מארח, שם תהליך, מזהה תהליך מדויק, שיטה ומצב. קידומות מגבילות לשדה אחד: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. גם body: מחפש גופים שנשפכו לדיסק. הוסיפו - לפני שדה או מילה כדי להוציא אותם (למשל -host:cursor.sh או -cursor). המסננים עורכים מארחים ותהליכים מוסתרים עם יותר מקום.",
+ "toolbar.filters": "מסננים",
+ "toolbar.filtersTip": "עריכת החיפוש והמארחים או התהליכים המוסתרים בחלון גדול יותר",
+ "toolbar.hideConnect": "הסתרת CONNECT",
+ "toolbar.hideConnectTip": "הסתרת מנהרות HTTPS אטומות כשפענוח HTTPS כבוי",
+ "toolbar.hideImages": "הסתרת תמונות",
+ "toolbar.errorsOnly": "שגיאות בלבד",
+ "toolbar.clearFilters": "ניקוי מסננים",
+ "toolbar.hidden": "מוסתר",
+ "ctx.replay": "שליחה מחדש",
+ "ctx.loadComposer": "טעינה אל המחבר",
+ "ctx.saveRequest": "שמירת גוף הבקשה…",
+ "ctx.saveResponse": "שמירת גוף התשובה…",
+ "ctx.copyUrl": "העתקת URL",
+ "ctx.copyCurl": "העתקה כ-curl",
+ "ctx.copyFetch": "העתקה כ-fetch",
+ "ctx.diff": "השוואת הנבחרים…",
+ "ctx.filterHost": "סינון לפי מארח",
+ "ctx.hideHost": "הסתרת מארח",
+ "ctx.filterProcess": "סינון לפי תהליך",
+ "ctx.hideProcess": "הסתרת תהליך",
+ "ctx.excludeHost": "החרגת מארח…",
+ "ctx.excludeHostTip": "הפסקת פענוח HTTPS של מארח זה. השורות נשארות ברשימה; כדי להסיר אותן מהתצוגה השתמשו ב«הסתרת מארח».",
+ "grid.duration": "משך (מילישניות)",
+ "grid.wait": "המתנה (מילישניות)",
+ "pane.inspect": "בחינה",
+ "pane.composer": "מחבר",
+ "pane.breakpoints": "נקודות עצירה",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "תסריטים",
+ "pane.mapRemote": "מיפוי מרוחק",
+ "pane.closeTip": "סגירת החלונית",
+ "inspect.empty": "בחרו הפעלה ברשת כדי לבחון כותרות וגופים של בקשה ותשובה.",
+ "common.ok": "אישור",
+ "common.cancel": "ביטול",
+ "common.save": "שמירה",
+ "common.apply": "החלה",
+ "common.remove": "הסרה",
+ "common.browse": "עיון…",
+ "common.openFolder": "פתיחת תיקייה",
+ "common.forget": "שכחה",
+ "common.close": "סגירה",
+ "loopback.window": "התרה לאפליקציות החנות להשתמש במתווך זה",
+ "loopback.checkAll": "סימון הכול",
+ "loopback.uncheckAll": "ביטול כל הסימונים",
+ "loopback.filterWatermark": "סינון לפי שם אפליקציה…",
+ "loopback.clearAll": "ניקוי הכול",
+ "trust.macWindow": "אשרו אמון ב-Keychain Access",
+ "trust.openKeychain": "פתיחת Keychain Access",
+ "trust.notNow": "לא עכשיו",
+ "trust.recoveryTitle": "אמון ב-CA שורש",
+ "trust.macWaitPlaceholder": "ממתין לאמון SSL…",
+ "window.about": "אודות Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "זכויות יוצרים © Jehonathan Thomas",
+ "about.license": "ברישיון PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "פרטי הרישיון",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "מסננים",
+ "filters.search": "חיפוש",
+ "filters.searchHelp": "אותו חיפוש כמו בסרגל הכלים, עם יותר מקום. מארחים ותהליכים מוסתרים מופיעים למטה, לא בתיבה זו.",
+ "filters.searchWatermark": "URL, מארח, תהליך, method:GET, status:4xx…",
+ "filters.hideHeading": "הסתרה מהרשימה",
+ "filters.hideHelp": "השורות נשארות לכודות. זה רק מסתיר אותן ברשימה. כדי להפסיק פענוח HTTPS השתמשו ב«החרגת מארח…».",
+ "filters.hosts": "מארחים",
+ "filters.addHostWatermark": "הוספת מארח להסתרה",
+ "filters.addHost": "הוספת מארח",
+ "filters.processes": "תהליכים",
+ "filters.addProcessWatermark": "הוספת תהליך להסתרה",
+ "filters.addProcess": "הוספת תהליך",
+ "filters.processSpace": "שם עם רווח מתקצר במילה הראשונה, וכך עלולים להסתתר גם שמות אחרים שמכילים את המילה.",
+ "window.confirm": "אישור",
+ "window.excludeHost": "החרגת מארח",
+ "exclude.action": "החרגה",
+ "exclude.help": "מארח זה יוסיף להופיע ברשימת ההפעלות. Inspector לא ינסה לקרוא את ה-HTTPS שלו.",
+ "window.logging": "רישום ביומן",
+ "logging.help": "כתיבת הודעות אבחון לפתרון בעיות. השינויים חלים מיד.",
+ "logging.enable": "הפעלת רישום ביומן",
+ "logging.writeFile": "כתיבת היומן לקובץ",
+ "logging.detail": "כמות הפירוט",
+ "logging.detailHelp": "Error = בעיות בלבד. Warning / Information = יותר הקשר. Debug = מפורט מאוד.",
+ "logging.path": "נתיב קובץ היומן",
+ "window.excludedHosts": "מארחים מוחרגים",
+ "excluded.reset": "איפוס לברירת המחדל",
+ "excluded.bypass": "עקיפת המתווך (מערכת ההפעלה)",
+ "excluded.bypassHelp": "התעבורה לא מגיעה אל Inspector כשמתווך המערכת פועל. הרשימה נזרעת במארחי Microsoft identity / SSO / RDP. הסרתם עלולה לשבור כניסה ב-RDP כל עוד מתווך המערכת פעיל.",
+ "excluded.notDecrypted": "מארחים ללא פענוח",
+ "excluded.notDecryptedHelp": "CONNECT נשאר גלוי; TLS נשאר אטום כשפענוח HTTPS פועל. הרשימה נזרעת במארחים עם נעיצת אישור (Dropbox, Webex).",
+ "excluded.learnHeading": "אי-פענוח אוטומטי כשהפענוח נכשל",
+ "excluded.learn": "למידת מארחים ש-TLS המקור שלהם נכשל תחת פענוח",
+ "excluded.learnHelp": "כש-TLS המקור נכשל שוב ושוב תחת פענוח, או ששרת המקור מחזיר 403/429, Inspector מפסיק לפענח את המארח לחיבורים הבאים בהפעלה זו. הרשימה מוגבלת ונשכחת בהפעלה מחדש אלא אם מקדמים את הרשומה.",
+ "excluded.learnPaused": "הלמידה הושהתה — רשומות קיימות נשמרות עד שיישכחו.",
+ "excluded.noneLearned": "עדיין לא נלמדו מארחים.",
+ "excluded.promote": "קידום למארחים ללא פענוח",
+ "excluded.clearLearned": "ניקוי כל מה שנלמד",
+ "window.retention": "שמירת הפעלות",
+ "retention.max": "מספר הפעלות מרבי לשמירה",
+ "retention.maxHelp": "כמה בקשות נשארות ברשימת ההפעלות. כשחורגים, השורות הישנות ביותר יוצאות מהרשימה אבל נשארות בדיסק עד ש«ניקוי הפעלות» או מגבלת המקום בדיסק מסירים אותן.",
+ "retention.cache": "תיקיית מטמון",
+ "retention.openCache": "פתיחת תיקיית המטמון",
+ "retention.clearCache": "ניקוי מטמון ההפעלות השמור…",
+ "retention.advanced": "מתקדם",
+ "retention.disk": "מקום בדיסק להפעלות שמורות (MB)",
+ "retention.diskHelp": "המקום המרבי לכל ההפעלות השמורות בדיסק (כל ההרצות של Inspector). כל הרצה משתמשת בתיקיית משנה עם חותמת זמן; כשחורגים נמחקים קודם קובצי HAR הישנים ביותר. תיקיות הרצה ריקות מוסרות.",
+ "loopback.intro": "אפליקציות Windows Store ו-UWP חסומות מ-localhost כברירת מחדל. סמנו אפליקציות שצריכות להשתמש ב-Inspector ואז לחצו החלה. הפעילו מחדש כל אפליקציה (סגרו אותה לגמרי) אחרי ההחלה. Inspector חייב לרוץ עם מתווך מערכת פעיל. «ניקוי הכול» מסיר כל רשומת היתר.",
+ "loopback.closedUnchanged": "אפליקציות החנות לא השתנו.",
+ "loopback.proxyStopped": "הפעילו את המתווך והפעילו את מתווך המערכת. אי אפשר ללכוד אפליקציות חנות עד ששניהם פועלים.",
+ "loopback.systemProxyOff": "הפעילו את מתווך המערכת (תפריט לכידה). רשימת ההיתרים רק מאפשרת לאפליקציות החנות להגיע אל localhost; הן עדיין עוקבות אחרי מתווך המערכת.",
+ "loopback.refreshing": "רענון מתווך המערכת כדי שאפליקציות שרצות יתחברו מחדש…",
+ "loopback.unchangedCount": "רשימת ההיתרים כבר תואמת: {0}.",
+ "loopback.allowed": "הותר: {0}.",
+ "loopback.allowedRefreshed": " מתווך המערכת רוענן כדי שאפליקציות שרצות יתחברו מחדש. אם התעבורה עדיין לא מופיעה, סגרו את האפליקציה לגמרי ופתחו אותה שוב.",
+ "loopback.allowedProxyStopped": " הפעילו את המתווך ואת מתווך המערכת, ואז סגרו את האפליקציה לגמרי ופתחו אותה שוב.",
+ "loopback.allowedSystemProxyOff": " הפעילו את מתווך המערכת, ואז סגרו את האפליקציה לגמרי ופתחו אותה שוב.",
+ "loopback.allowedReady": " סגרו את האפליקציה לגמרי ופתחו אותה שוב כדי ללכוד תעבורה.",
+ "loopback.clearedRefreshed": "כל פטורי הלולאה המקומית נוקו. מתווך המערכת רוענן כדי שאפליקציות שרצות יתחברו מחדש.",
+ "loopback.clearedReady": "כל פטורי הלולאה המקומית נוקו. סגרו לגמרי ופתחו מחדש כל אפליקציה שהשתמשה ב-Inspector.",
+ "loopback.cleared": "כל פטורי הלולאה המקומית נוקו.",
+ "trust.macWaitBody": "חלון קבלת המידע ב-Keychain Access יכול כבר להציג «תמיד תן אמון» גם כשמדיניות SSL לא נשמרה (Chrome ו-Inspector עדיין רואים את ה-CA כלא מהימן).\n\nכפו שמירה:\n1. Keychain Access → login → אישורים → לחצו פעמיים על Titanium Root Certificate Authority\n2. הרחיבו את אמון\n3. הגדירו את «בעת השימוש באישור זה» ל«השתמש בברירות המחדל של המערכת», ואז שנו אותו שוב ל«תמיד תן אמון»\n4. סגרו את קבלת המידע — חייבת להופיע בקשת סיסמה; היא כותבת את מדיניות אמון SSL האמיתית\n\nחלון זה נסגר אוטומטית כשהמדיניות מזוהה. אם כבר שמרתם, לחצו «שמרתי תמיד תן אמון».",
+ "trust.macWaitStatus": "ממתין לאישור ב-Keychain…",
+ "trust.macWaitInKeychain": "ממתין למדיניות SSL שמורה (החליפו את תמיד תן אמון, סגרו את קבלת המידע, הזינו סיסמה)…",
+ "trust.macNotSaved": "הצגת «תמיד תן אמון» לא מספיקה — החליפו «השתמש בברירות המחדל של המערכת» → «תמיד תן אמון», סגרו את קבלת המידע, הזינו את הסיסמה, ואז נסו שוב «התקנת CA שורש» / «פענוח HTTPS»",
+ "trust.macConfirmSaved": "שמרתי תמיד תן אמון",
+ "trust.exportCa": "ייצוא CA",
+ "trust.install.mac": "פענוח HTTPS דורש אמון ב-CA השורש של Titanium Inspector ב-Keychain Access (צרור login). להתקין עכשיו?",
+ "trust.install.linux": "פענוח HTTPS דורש אמון ב-CA השורש של Titanium Inspector במאגר האישורים של המשתמש (NSS). להתקין עכשיו?",
+ "trust.install.windows": "פענוח HTTPS דורש אמון ב-CA השורש של Titanium Inspector במאגר השורש המהימן של המשתמש הנוכחי. להתקין עכשיו?\n\nWindows עשוי להציג תיבת אבטחה כן/לא לשורש מהימן (לא UAC) — בחרו כן כדי לתת אמון ב-CA.",
+ "trust.install.other": "פענוח HTTPS דורש אמון ב-CA השורש של Titanium Inspector במחשב זה. להתקין עכשיו?",
+ "trust.remove.mac": "להסיר את CA השורש של Titanium Inspector מ-Keychain? פענוח HTTPS יכובה.",
+ "trust.remove.linux": "להסיר את CA השורש של Titanium Inspector ממאגר האישורים של המשתמש (NSS)? פענוח HTTPS יכובה.",
+ "trust.remove.windows": "להסיר את CA השורש של Titanium Inspector ממאגר השורש המהימן של המשתמש הנוכחי? פענוח HTTPS יכובה.",
+ "trust.remove.other": "להסיר את CA השורש של Titanium Inspector? פענוח HTTPS יכובה.",
+ "trust.elevate.mac": "האמון ברמת המשתמש נכשל או לא הספיק. להמשיך ולהציג בקשת סיסמת מנהל של macOS? ביטול משאיר את הגדרות האישורים ללא שינוי.",
+ "trust.elevate.linux": "האמון ברמת המשתמש נכשל או לא הספיק. להמשיך ולהציג בקשת מנהל של polkit? ביטול משאיר את הגדרות האישורים ללא שינוי.",
+ "trust.elevate.windows": "האמון ברמת המשתמש נכשל או לא הספיק. להמשיך ולהציג UAC? ביטול משאיר את הגדרות האישורים ללא שינוי.",
+ "trust.elevate.other": "האמון ברמת המשתמש נכשל או לא הספיק. להמשיך עם בקשת מנהל? ביטול משאיר את הגדרות האישורים ללא שינוי.",
+ "trust.recovery.mac": "\n\nלהמשיך ולהציג בקשת סיסמת מנהל של macOS? «לא עכשיו» משאיר את הגדרות האישורים ללא שינוי.",
+ "trust.recovery.linux": "\n\nלהמשיך ולהציג בקשת מנהל של polkit? «לא עכשיו» משאיר את הגדרות האישורים ללא שינוי.",
+ "trust.recovery.windows": "\n\nלהמשיך ולהציג UAC? «לא עכשיו» משאיר את הגדרות האישורים ללא שינוי.",
+ "trust.recovery.other": "\n\nלהמשיך עם בקשת מנהל? «לא עכשיו» משאיר את הגדרות האישורים ללא שינוי.",
+ "trust.hosts.mac": "עקיפת מערכת ההפעלה צריכה לכידה → מתווך מערכת (משתמשת בהגדרות מתווך הרשת של macOS). כללי מנהרה בלבד חלים על כל לקוח שמגיע אל Inspector. ברירות המחדל של היצרן נזרעו ברשימות למטה — ערכו בחופשיות או אפסו.",
+ "trust.hosts.linux": "עקיפת מערכת ההפעלה צריכה לכידה → מתווך מערכת (משתמשת בהגדרות מתווך שולחן העבודה / הסביבה). כללי מנהרה בלבד חלים על כל לקוח שמגיע אל Inspector. ברירות המחדל של היצרן נזרעו ברשימות למטה — ערכו בחופשיות או אפסו.",
+ "trust.hosts.windows": "עקיפת מערכת ההפעלה צריכה לכידה → מתווך מערכת (משתמשת ב-WinINET). כללי מנהרה בלבד חלים על כל לקוח שמגיע אל Inspector. ברירות המחדל של היצרן נזרעו ברשימות למטה — ערכו בחופשיות או אפסו.",
+ "trust.hosts.other": "עקיפת מערכת ההפעלה צריכה לכידה → מתווך מערכת. כללי מנהרה בלבד חלים על כל לקוח שמגיע אל Inspector. ברירות המחדל של היצרן נזרעו ברשימות למטה — ערכו בחופשיות או אפסו.",
+ "trust.localhost.mac": "כשמתווך המערכת פועל, שלחו את localhost דרך Inspector. כיבוי מוסיף את localhost לרשימת עקיפת המתווך של macOS.",
+ "trust.localhost.linux": "כשמתווך המערכת פועל, שלחו את localhost דרך Inspector. כיבוי מוסיף את localhost אל NO_PROXY.",
+ "trust.localhost.windows": "כשמתווך המערכת פועל, שלחו את localhost דרך Inspector (WinINET <-loopback>). כיבוי מאפשר ללולאה המקומית לדלג על המתווך.",
+ "trust.localhost.other": "כשמתווך המערכת פועל, שלחו את localhost דרך Inspector.",
+ "trust.status.missing": "CA השורש עדיין לא מהימן — נסו שוב, או ייצאו את CA",
+ "trust.status.cancelled": "התקנת CA השורש בוטלה",
+ "trust.status.certutil": "כלי אישורים של הדפדפן חסרים — התקינו אותם, נסו שוב, או ייצאו את CA",
+ "trust.status.homebrew": "נדרש Homebrew כדי להתקין כלי אישורים — ייצאו את CA כדי לתת אמון ידנית",
+ "trust.status.macConfirm": "הגדירו «תמיד תן אמון» ל-CA השורש של Titanium Inspector ב-Keychain Access",
+ "trust.status.keychain": "האמון ב-Keychain נכשל — נסו שוב, או ייצאו את CA ותנו אמון ידנית",
+ "trust.fail.keychainTitle": "אשרו אמון ב-Keychain",
+ "trust.fail.continueKeychain": "המשך ב-Keychain Access",
+ "trust.fail.toolsTitle": "נדרשים כלי אישורים",
+ "trust.fail.toolsLinux": "Inspector צריך את certutil (כלי NSS) כדי לסיים את האמון ב-CA השורש.",
+ "trust.fail.toolsOther": "Inspector צריך כלי אישורים של הדפדפן כדי לסיים את האמון ב-CA השורש.",
+ "trust.fail.tryAgain": "ניסיון חוזר",
+ "trust.fail.homebrewBody": "נדרש Homebrew כדי להתקין כלי אישורים. ייצאו את CA כדי לתת אמון ידנית.",
+ "trust.fail.title": "עדיין אי אפשר לפענח HTTPS",
+ "trust.fail.body": "CA השורש של Titanium Inspector עדיין לא מהימן במחשב זה.",
+ "toolbar.throttle": "הגבלת קצב",
+ "toolbar.throttleTip": "הוסיפו השהיה ועיצוב רוחב פס בזמן הלכידה (כתיבות גוף / מסגרות WebSocket). כבוי כברירת מחדל.",
+ "toolbar.bindWatermark": "*, localhost או IP",
+ "toolbar.bindTip": "127.0.0.1 או localhost = מחשב זה בלבד. 0.0.0.0 או * = כל מתאמי הרשת (כולל localhost).",
+ "toolbar.portWatermark": "* או יציאה",
+ "toolbar.portTip": "* או ריק = יציאה שנבחרה על ידי מערכת ההפעלה (היציאה האמיתית מופיעה אחרי ההפעלה). אחרת 1–65535.",
+ "toolbar.listeningTip": "המתווך מאזין",
+ "toolbar.trustHealthTip": "מצב האמון ב-CA השורש עבור פענוח HTTPS. התקינו או תנו אמון ב-CA אם מוצג לא מהימן.",
+ "chip.process": "תהליך",
+ "inspect.request": "בקשה",
+ "inspect.requestTip": "כותרות וגוף הבקשה",
+ "inspect.copyHeaders": "העתקת כותרות",
+ "inspect.resizeTip": "גררו לשינוי הגודל. לחצו פעמיים לאיפוס.",
+ "inspect.pretty": "יפה",
+ "inspect.hex": "הקס",
+ "inspect.hexTip": "הצגת הגוף כהיטל הקסדצימלי",
+ "inspect.saveRequest": "שמירת בקשה…",
+ "inspect.response": "תשובה",
+ "inspect.responseTip": "כותרות וגוף התשובה",
+ "inspect.saveResponse": "שמירת תשובה…",
+ "inspect.diff": "השוואה",
+ "inspect.frames": "מסגרות WS",
+ "inspect.framesHelp": "מסגרות WebSocket חיות להפעלה זו (כיוון, קוד פעולה, תצוגה מקדימה של המטען).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "אירועים שהשרת שלח, שנותחו מגוף התשובה.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "הצג כותרות",
+ "inspect.hideHeaders": "הסתר כותרות",
+ "inspect.headers": "כותרות ({0})",
+ "inspect.prettyTip": "הזחת JSON, XML ו-HTML",
+ "inspect.prettyHexTip": "לא חל בתצוגת הקס",
+ "inspect.emptyBody": "(ריק)",
+ "inspect.noRequestBody": "אין גוף בקשה",
+ "inspect.waiting": "ממתין לתשובה…",
+ "composer.help": "בנו ושלחו בקשה דרך המתווך. טעינה מהנבחר מעתיקה את ההפעלה הנוכחית.",
+ "composer.method": "שיטה",
+ "composer.url": "URL",
+ "composer.headers": "כותרות (שם: ערך בכל שורה)",
+ "composer.body": "גוף",
+ "composer.loadSelected": "טעינה מהנבחר",
+ "composer.loadBody": "טעינת גוף מקובץ…",
+ "composer.send": "שליחה",
+ "bp.help": "עצרו זמנית בקשות לקוח תואמות כדי לערוך את הגוף, להמשיך או לבטל. עצירה אחת בכל פעם; ממשיך אוטומטית אחרי 120s. ביטול הסימון של מופעל ממשיך בקשה שנעצרה.",
+ "bp.enabled": "מופעל",
+ "bp.breakOnResponse": "עצירה בתשובה",
+ "bp.match": "התאמה",
+ "bp.urlWatermark": "מסנן URL (* = הכול, למשל *api*/users*)",
+ "bp.graphqlWatermark": "רק פעולת GraphQL זו (אופציונלי)",
+ "bp.graphqlTip": "מסנן נוסף על גוף בקשת הלקוח. מתאים ל-operationName ב-JSON או לשאילתה בעלת שם. השאירו ריק כדי להתאים לכל פעולה ב-URL.",
+ "bp.fromSelected": "מההפעלה הנבחרת",
+ "bp.fromSelectedTip": "העתיקו את שם פעולת GraphQL מבקשת ההפעלה הנבחרת.",
+ "bp.graphqlHelp": "השאירו את תיבת GraphQL ריקה כדי להתאים לכל פעולה. מלאו אותה (למשל GetUser) כדי לעצור זמנית רק את בקשת הלקוח הזו ב-URL שלמעלה. עצירה בתשובה עדיין משתמשת במסנן ה-URL.",
+ "bp.editWatermark": "עריכת גוף (החלת עריכת הגוף, ואז המשך)",
+ "bp.applyEdit": "החלת עריכת הגוף",
+ "bp.continue": "המשך",
+ "bp.abort": "ביטול",
+ "ar.help": "החזירו תשובה מזויפת לפני השרת האמיתי. ההתאמה קובעת על אילו בקשות לקוח חל הכלל; השדות שמתחתיה הם מה שאתם מחזירים.",
+ "ar.enabled": "מופעל (לפני נקודות עצירה)",
+ "ar.urlWatermark": "התאמת URL (תווי הכללה *)",
+ "ar.graphqlHelp": "אותו URL, ופעולות GraphQL שונות יכולות להשתמש בכללים שונים. השאירו ריק כדי להתאים לכל פעולה.",
+ "ar.respondWith": "השבה באמצעות",
+ "ar.statusTip": "מצב HTTP. ריק = 200. השתמשו ב-100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "קובץ Map Local (אופציונלי)",
+ "ar.bodyWatermark": "גוף התשובה (בשימוש כאשר Map Local ריק)",
+ "ar.add": "הוספת כלל",
+ "ar.update": "עדכון כלל",
+ "ar.delete": "מחיקת כלל",
+ "script.intro": "פקודה אחת בכל שורה, על כל הפעלה שנלכדה. זה אינו JavaScript או C# — הקלידו רק את הפקודות שלמטה.",
+ "script.what": "מה אפשר להקליד",
+ "script.setHeaderHelp": "הוסיפו כותרת או החליפו אותה. התעבורה עדיין ממשיכה אל השרת.",
+ "script.setStatusHelp": "בבקשה: ענו עכשיו ודלגו על השרת. בתשובה: שנו את המצב שהלקוח רואה.",
+ "script.abortHelp": "חסמו באמצעות 403 Forbidden. הוסיפו שורת set-status כדי לבחור קוד אחר.",
+ "script.comment": "התחילו שורה ב-# או ב-// להערה. אפשר לשלב פקודות; שימו כל אחת בשורה נפרדת.",
+ "script.onRequest": "בבקשה",
+ "script.onResponse": "בתשובה",
+ "script.requestSkips": "abort או set-status כאן מדלגים על AutoResponder, נקודות עצירה והמקור.",
+ "map.help": "כתבו מחדש בקשות לקוח תואמות אל מקור אחר לפני השרת האמיתי. השתמשו ב-* אחד בהתאמה וביעד כדי לשמור את סיומת הנתיב/השאילתה. רץ אחרי AutoResponder / Map Local.",
+ "map.graphqlHelp": "השאירו ריק כדי לכתוב מחדש כל פעולה ב-URL. מלאו כדי לכתוב מחדש רק את פעולת GraphQL הזו.",
+ "map.rewriteTo": "כתיבה מחדש אל",
+ "map.targetWatermark": "URL יעד (מוחלט, * אופציונלי)",
+ "loopback.allow": "התרה",
+ "loopback.appName": "שם אפליקציה",
+ "loopback.packageId": "מזהה חבילה",
+ "status.ready": "מוכן",
+ "status.searchingBodies": "מחפש גופים…",
+ "status.proxyStopped": "המתווך נעצר",
+ "status.proxyRunning": "המתווך פועל על {0}",
+ "trust.health.trusted": "CA מהימן",
+ "trust.health.untrusted": "CA לא מהימן"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.hi.json b/src/Titanium.Inspector/Localization/strings.hi.json
new file mode 100644
index 000000000..3d7ffec05
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.hi.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "फ़ाइल",
+ "menu.exportAllHar": "सभी HAR निर्यात करें…",
+ "menu.exportSelectedHar": "चयनित HAR निर्यात करें…",
+ "menu.importHar": "HAR आयात करें…",
+ "menu.exportAllArchive": "सभी संग्रह निर्यात करें…",
+ "menu.exportSelectedArchive": "चयनित संग्रह निर्यात करें…",
+ "menu.importArchive": "संग्रह आयात करें…",
+ "menu.exit": "बाहर निकलें",
+ "menu.capture": "कैप्चर",
+ "menu.startProxy": "प्रॉक्सी प्रारंभ करें",
+ "menu.stopProxy": "प्रॉक्सी रोकें",
+ "menu.capturing": "कैप्चर हो रहा है",
+ "menu.clearSessions": "सत्र साफ़ करें",
+ "menu.removeSelected": "चयनित हटाएँ",
+ "menu.autoStartCapture": "कैप्चर अपने आप प्रारंभ करें",
+ "menu.autoSystemProxy": "प्रारंभ पर सिस्टम प्रॉक्सी अपने आप चालू करें",
+ "menu.decryptHttps": "HTTPS डिक्रिप्ट करें",
+ "menu.systemProxy": "सिस्टम प्रॉक्सी",
+ "menu.captureLocal": "स्थानीय ट्रैफ़िक कैप्चर करें",
+ "menu.allowStoreApps": "स्टोर ऐप्स को अनुमति दें…",
+ "menu.installCa": "रूट CA स्थापित करें (वर्तमान उपयोगकर्ता)",
+ "menu.removeCa": "रूट CA हटाएँ (वर्तमान उपयोगकर्ता)",
+ "menu.rotateCa": "रूट CA साफ़ करके पुनः स्थापित करें…",
+ "menu.removeOldCas": "पुराने रूट CA हटाएँ…",
+ "menu.exportCa": "रूट CA निर्यात करें…",
+ "menu.trustFirefox": "Firefox में CA पर भरोसा करें…",
+ "menu.deviceCa": "बाहरी डिवाइस CA सेट करें",
+ "menu.tools": "उपकरण",
+ "menu.composer": "कंपोज़र…",
+ "menu.breakpoints": "ब्रेकपॉइंट…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "स्क्रिप्ट…",
+ "menu.mapRemote": "दूरस्थ मैप…",
+ "menu.options": "विकल्प",
+ "menu.theme": "थीम",
+ "menu.themeLight": "हल्का",
+ "menu.themeDark": "गहरा",
+ "menu.themeAutomatic": "स्वचालित",
+ "menu.language": "भाषा",
+ "menu.languageAutomatic": "स्वचालित",
+ "menu.columns": "स्तंभ",
+ "menu.col.id": "क्रमांक",
+ "menu.col.method": "विधि",
+ "menu.col.status": "स्थिति",
+ "menu.col.host": "होस्ट",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "प्रोटोकॉल",
+ "menu.col.duration": "अवधि",
+ "menu.col.ttfb": "प्रतीक्षा (TTFB)",
+ "menu.col.size": "आकार",
+ "menu.col.process": "प्रोसेस",
+ "menu.col.started": "प्रारंभ",
+ "menu.col.scheme": "स्कीम",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "स्तंभ रीसेट करें",
+ "menu.sessionRetention": "सत्र रखना…",
+ "menu.excludedHosts": "बाहर रखे होस्ट…",
+ "menu.excludedHostsTip": "HTTPS डिक्रिप्ट छोड़ने की सूचियाँ और OS बायपास नियम",
+ "menu.ignoreCerts": "असुरक्षित सर्वर प्रमाणपत्र अनदेखा करें",
+ "menu.addVia": "Via हेडर जोड़ें",
+ "menu.addViaTip": "रोके गए ट्रैफ़िक पर Via: … titanium-web-proxy जोड़ें (RFC 9110)। बंद करने पर प्रविष्टि और Via लूप पहचान अक्षम हो जाती है।",
+ "menu.logging": "लॉगिंग…",
+ "menu.resetSettings": "Inspector सेटिंग रीसेट करें…",
+ "menu.help": "सहायता",
+ "menu.checkUpdates": "अपडेट जाँचें…",
+ "menu.checkUpdatesStartup": "प्रारंभ पर अपडेट जाँचें",
+ "menu.updateChannel": "अपडेट चैनल",
+ "menu.channelStable": "स्थिर",
+ "menu.channelBeta": "बीटा",
+ "menu.about": "Titanium Inspector के बारे में…",
+ "toolbar.searchWatermark": "URL, होस्ट, प्रोसेस खोजें… (या method:GET status:4xx)",
+ "toolbar.searchTip": "सादा पाठ URL, होस्ट, प्रोसेस नाम, सटीक प्रोसेस ID, विधि और स्थिति खोजता है। उपसर्ग खोज को एक फ़ील्ड तक सीमित करते हैं: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image। body: डिस्क पर लिखी बॉडी भी खोजता है। किसी फ़ील्ड या शब्द से पहले - लगाकर उसे बाहर रखें (जैसे -host:cursor.sh या -cursor)। फ़िल्टर छिपे होस्ट और प्रोसेस को अधिक जगह में संपादित करता है।",
+ "toolbar.filters": "फ़िल्टर",
+ "toolbar.filtersTip": "बड़ी विंडो में खोज और छिपे होस्ट या प्रोसेस संपादित करें",
+ "toolbar.hideConnect": "CONNECT छिपाएँ",
+ "toolbar.hideConnectTip": "HTTPS डिक्रिप्ट बंद होने पर अपारदर्शी HTTPS टनल छिपाएँ",
+ "toolbar.hideImages": "छवियाँ छिपाएँ",
+ "toolbar.errorsOnly": "केवल त्रुटियाँ",
+ "toolbar.clearFilters": "फ़िल्टर साफ़ करें",
+ "toolbar.hidden": "छिपा",
+ "ctx.replay": "फिर चलाएँ",
+ "ctx.loadComposer": "कंपोज़र में लोड करें",
+ "ctx.saveRequest": "अनुरोध बॉडी सहेजें…",
+ "ctx.saveResponse": "प्रतिक्रिया बॉडी सहेजें…",
+ "ctx.copyUrl": "URL कॉपी करें",
+ "ctx.copyCurl": "curl के रूप में कॉपी करें",
+ "ctx.copyFetch": "fetch के रूप में कॉपी करें",
+ "ctx.diff": "चयनित की तुलना करें…",
+ "ctx.filterHost": "होस्ट के अनुसार फ़िल्टर करें",
+ "ctx.hideHost": "होस्ट छिपाएँ",
+ "ctx.filterProcess": "प्रोसेस के अनुसार फ़िल्टर करें",
+ "ctx.hideProcess": "प्रोसेस छिपाएँ",
+ "ctx.excludeHost": "होस्ट बाहर रखें…",
+ "ctx.excludeHostTip": "इस होस्ट का HTTPS डिक्रिप्ट करना बंद करें। पंक्तियाँ सूची में रहती हैं; दृश्य से हटाने के लिए होस्ट छिपाएँ का उपयोग करें।",
+ "grid.duration": "अवधि (ms)",
+ "grid.wait": "प्रतीक्षा (ms)",
+ "pane.inspect": "निरीक्षण",
+ "pane.composer": "कंपोज़र",
+ "pane.breakpoints": "ब्रेकपॉइंट",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "स्क्रिप्ट",
+ "pane.mapRemote": "दूरस्थ मैप",
+ "pane.closeTip": "फलक बंद करें",
+ "inspect.empty": "अनुरोध और प्रतिक्रिया के हेडर और बॉडी की जाँच करने के लिए ग्रिड में एक सत्र चुनें।",
+ "common.ok": "ठीक",
+ "common.cancel": "रद्द करें",
+ "common.save": "सहेजें",
+ "common.apply": "लागू करें",
+ "common.remove": "हटाएँ",
+ "common.browse": "ब्राउज़ करें…",
+ "common.openFolder": "फ़ोल्डर खोलें",
+ "common.forget": "भूल जाएँ",
+ "common.close": "बंद करें",
+ "loopback.window": "स्टोर ऐप्स को यह प्रॉक्सी उपयोग करने दें",
+ "loopback.checkAll": "सभी चुनें",
+ "loopback.uncheckAll": "सभी का चयन हटाएँ",
+ "loopback.filterWatermark": "ऐप नाम से फ़िल्टर करें…",
+ "loopback.clearAll": "सभी साफ़ करें",
+ "trust.macWindow": "Keychain Access में विश्वास की पुष्टि करें",
+ "trust.openKeychain": "Keychain Access खोलें",
+ "trust.notNow": "अभी नहीं",
+ "trust.recoveryTitle": "रूट CA विश्वास",
+ "trust.macWaitPlaceholder": "SSL विश्वास की प्रतीक्षा…",
+ "window.about": "Titanium Inspector के बारे में",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "कॉपीराइट © Jehonathan Thomas",
+ "about.license": "PolyForm Noncommercial License 1.0.0 के अंतर्गत लाइसेंस प्राप्त।",
+ "about.licenseLink": "लाइसेंस विवरण",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "फ़िल्टर",
+ "filters.search": "खोज",
+ "filters.searchHelp": "टूलबार जैसी ही खोज, अधिक जगह के साथ। छिपे होस्ट और प्रोसेस इस बॉक्स में नहीं, नीचे सूचीबद्ध हैं।",
+ "filters.searchWatermark": "URL, होस्ट, प्रोसेस, method:GET, status:4xx…",
+ "filters.hideHeading": "सूची से छिपाएँ",
+ "filters.hideHelp": "पंक्तियाँ कैप्चर रहती हैं। यह उन्हें केवल सूची में छिपाता है। HTTPS डिक्रिप्ट रोकने के लिए होस्ट बाहर रखें… का उपयोग करें।",
+ "filters.hosts": "होस्ट",
+ "filters.addHostWatermark": "छिपाने के लिए होस्ट जोड़ें",
+ "filters.addHost": "होस्ट जोड़ें",
+ "filters.processes": "प्रोसेस",
+ "filters.addProcessWatermark": "छिपाने के लिए प्रोसेस जोड़ें",
+ "filters.addProcess": "प्रोसेस जोड़ें",
+ "filters.processSpace": "रिक्त स्थान वाले नाम को पहले शब्द पर छोटा किया जाता है, जिससे उस शब्द वाले अन्य नाम भी छिप सकते हैं।",
+ "window.confirm": "पुष्टि करें",
+ "window.excludeHost": "होस्ट बाहर रखें",
+ "exclude.action": "बाहर रखें",
+ "exclude.help": "यह होस्ट सत्र सूची में दिखाई देता रहेगा। Inspector इसके HTTPS को पढ़ने का प्रयास नहीं करेगा।",
+ "window.logging": "लॉगिंग",
+ "logging.help": "समस्या निवारण के लिए निदान संदेश लिखें। परिवर्तन तुरंत लागू होते हैं।",
+ "logging.enable": "लॉगिंग सक्षम करें",
+ "logging.writeFile": "लॉग को फ़ाइल में लिखें",
+ "logging.detail": "कितना विवरण",
+ "logging.detailHelp": "Error = केवल समस्याएँ। Warning / Information = अधिक संदर्भ। Debug = बहुत विस्तृत।",
+ "logging.path": "लॉग फ़ाइल पथ",
+ "window.excludedHosts": "बाहर रखे होस्ट",
+ "excluded.reset": "डिफ़ॉल्ट पर रीसेट करें",
+ "excluded.bypass": "प्रॉक्सी बायपास (OS)",
+ "excluded.bypassHelp": "सिस्टम प्रॉक्सी चालू होने पर ट्रैफ़िक Inspector तक नहीं पहुँचता। Microsoft पहचान / SSO / RDP होस्ट पहले से भरे हैं। सिस्टम प्रॉक्सी चालू रहते इन्हें हटाने से RDP साइन-इन टूट सकता है।",
+ "excluded.notDecrypted": "डिक्रिप्ट न होने वाले होस्ट",
+ "excluded.notDecryptedHelp": "HTTPS डिक्रिप्ट चालू होने पर CONNECT दिखाई देता है; TLS अपारदर्शी रहता है। प्रमाणपत्र पिनिंग होस्ट (Dropbox, Webex) पहले से भरे हैं।",
+ "excluded.learnHeading": "डिक्रिप्ट विफल होने पर अपने आप डिक्रिप्ट न करें",
+ "excluded.learn": "डिक्रिप्ट के अंतर्गत मूल TLS विफल होने वाले होस्ट सीखें",
+ "excluded.learnHelp": "जब मूल TLS डिक्रिप्ट के अंतर्गत बार-बार विफल हो, या मूल सर्वर 403/429 लौटाए, तो Inspector इस सत्र के बाद के कनेक्शन के लिए उस होस्ट का डिक्रिप्ट रोक देता है। सूची की सीमा है और बढ़ावा दिए बिना पुनरारंभ पर भुला दी जाती है।",
+ "excluded.learnPaused": "सीखना रुका है — मौजूदा प्रविष्टियाँ भुलाए जाने तक रहेंगी।",
+ "excluded.noneLearned": "अभी कोई होस्ट नहीं सीखा गया।",
+ "excluded.promote": "डिक्रिप्ट न होने वाले होस्ट में बढ़ावा दें",
+ "excluded.clearLearned": "सभी सीखे हुए साफ़ करें",
+ "window.retention": "सत्र रखना",
+ "retention.max": "रखने के लिए अधिकतम सत्र",
+ "retention.maxHelp": "सत्र सूची में कितने अनुरोध रहते हैं। इससे अधिक होने पर सबसे पुरानी पंक्तियाँ सूची छोड़ देती हैं, पर डिस्क पर तब तक रहती हैं जब तक सत्र साफ़ करें या डिस्क स्थान सीमा उन्हें हटा न दे।",
+ "retention.cache": "कैश फ़ोल्डर",
+ "retention.openCache": "कैश फ़ोल्डर खोलें",
+ "retention.clearCache": "सहेजा गया सत्र कैश साफ़ करें…",
+ "retention.advanced": "उन्नत",
+ "retention.disk": "सहेजे गए सत्रों के लिए डिस्क स्थान (MB)",
+ "retention.diskHelp": "डिस्क पर सभी सहेजे गए सत्रों के लिए अधिकतम स्थान (Inspector के सभी चलान)। प्रत्येक चलान समय-चिह्न वाला सबफ़ोल्डर उपयोग करता है; इससे अधिक होने पर सबसे पुरानी HAR फ़ाइलें पहले हटाई जाती हैं। खाली चलान फ़ोल्डर हटा दिए जाते हैं।",
+ "loopback.intro": "Windows स्टोर / UWP ऐप्स डिफ़ॉल्ट रूप से localhost से अवरुद्ध हैं। Inspector का उपयोग करने वाले ऐप्स चुनें, फिर लागू करें। लागू करने के बाद प्रत्येक ऐप को पुनरारंभ करें (पूरी तरह बंद करें)। Inspector सिस्टम प्रॉक्सी चालू रखकर चलना चाहिए। सभी साफ़ करें हर अनुमति प्रविष्टि हटा देता है।",
+ "loopback.closedUnchanged": "स्टोर ऐप्स अपरिवर्तित हैं।",
+ "loopback.proxyStopped": "प्रॉक्सी प्रारंभ करें और सिस्टम प्रॉक्सी चालू करें। दोनों चालू होने तक स्टोर ऐप्स कैप्चर नहीं हो सकते।",
+ "loopback.systemProxyOff": "सिस्टम प्रॉक्सी चालू करें (कैप्चर मेनू)। अनुमति सूची केवल स्टोर ऐप्स को localhost तक पहुँचने देती है; वे फिर भी सिस्टम प्रॉक्सी का पालन करते हैं।",
+ "loopback.refreshing": "चल रहे ऐप्स फिर से जुड़ें, इसलिए सिस्टम प्रॉक्सी ताज़ा किया जा रहा है…",
+ "loopback.unchangedCount": "अनुमति सूची पहले से मेल खाती है: {0}।",
+ "loopback.allowed": "अनुमति दी गई: {0}।",
+ "loopback.allowedRefreshed": " सिस्टम प्रॉक्सी ताज़ा किया गया ताकि चल रहे ऐप्स फिर से जुड़ें। यदि ट्रैफ़िक अभी भी नहीं दिखता, तो ऐप को पूरी तरह बंद करके फिर खोलें।",
+ "loopback.allowedProxyStopped": " प्रॉक्सी प्रारंभ करें और सिस्टम प्रॉक्सी चालू करें, फिर ऐप को पूरी तरह बंद करके फिर खोलें।",
+ "loopback.allowedSystemProxyOff": " सिस्टम प्रॉक्सी चालू करें, फिर ऐप को पूरी तरह बंद करके फिर खोलें।",
+ "loopback.allowedReady": " ट्रैफ़िक कैप्चर करने के लिए ऐप को पूरी तरह बंद करके फिर खोलें।",
+ "loopback.clearedRefreshed": "सभी लूपबैक छूट साफ़ हो गईं। सिस्टम प्रॉक्सी ताज़ा किया गया ताकि चल रहे ऐप्स फिर से जुड़ें।",
+ "loopback.clearedReady": "सभी लूपबैक छूट साफ़ हो गईं। Inspector का उपयोग कर रहे किसी भी ऐप को पूरी तरह बंद करके फिर खोलें।",
+ "loopback.cleared": "सभी लूपबैक छूट साफ़ हो गईं।",
+ "trust.macWaitBody": "Keychain का जानकारी देखें SSL नीतियाँ सहेजी न गई हों, तब भी हमेशा भरोसा दिखा सकता है (Chrome और Inspector इस CA को अब भी अविश्वसनीय मानते हैं)।\n\nसहेजना बाध्य करें:\n1. Keychain Access → लॉगिन → प्रमाणपत्र → Titanium Root Certificate Authority पर दो बार क्लिक करें\n2. विश्वास को विस्तृत करें\n3. इस प्रमाणपत्र का उपयोग करते समय को सिस्टम डिफ़ॉल्ट का उपयोग करें पर सेट करें, फिर उसे फिर से हमेशा भरोसा पर बदलें\n4. जानकारी देखें बंद करें — पासवर्ड संकेत आना चाहिए; वही वास्तविक SSL विश्वास नीतियाँ लिखता है\n\nये नीतियाँ मिलते ही यह विंडो अपने आप बंद हो जाती है। यदि आप पहले ही सहेज चुके हैं, तो मैंने हमेशा भरोसा सहेज लिया है पर क्लिक करें।",
+ "trust.macWaitStatus": "Keychain में प्रमाणपत्र की प्रतीक्षा…",
+ "trust.macWaitInKeychain": "सहेजी गई SSL नीतियों की प्रतीक्षा (हमेशा भरोसा टॉगल करें, जानकारी देखें बंद करें, पासवर्ड दर्ज करें)…",
+ "trust.macNotSaved": "हमेशा भरोसा का दिखना पर्याप्त नहीं — सिस्टम डिफ़ॉल्ट का उपयोग करें से हमेशा भरोसा पर टॉगल करें, जानकारी देखें बंद करें, पासवर्ड दर्ज करें, फिर रूट CA स्थापित करें / HTTPS डिक्रिप्ट फिर आज़माएँ",
+ "trust.macConfirmSaved": "मैंने हमेशा भरोसा सहेज लिया है",
+ "trust.exportCa": "CA निर्यात करें",
+ "trust.install.mac": "HTTPS डिक्रिप्ट के लिए Keychain Access (लॉगिन कीचेन) में Titanium Inspector रूट CA पर भरोसा करना आवश्यक है। अभी स्थापित करें?",
+ "trust.install.linux": "HTTPS डिक्रिप्ट के लिए आपके उपयोगकर्ता प्रमाणपत्र संग्रह (NSS) में Titanium Inspector रूट CA पर भरोसा करना आवश्यक है। अभी स्थापित करें?",
+ "trust.install.windows": "HTTPS डिक्रिप्ट के लिए आपके वर्तमान-उपयोगकर्ता विश्वसनीय रूट संग्रह में Titanium Inspector रूट CA पर भरोसा करना आवश्यक है। अभी स्थापित करें?\n\nWindows विश्वसनीय रूट का हाँ/नहीं सुरक्षा संवाद (UAC नहीं) दिखा सकता है — CA पर भरोसा करने के लिए हाँ चुनें।",
+ "trust.install.other": "HTTPS डिक्रिप्ट के लिए इस कंप्यूटर पर Titanium Inspector रूट CA पर भरोसा करना आवश्यक है। अभी स्थापित करें?",
+ "trust.remove.mac": "Keychain से Titanium Inspector रूट CA हटाएँ? HTTPS डिक्रिप्ट बंद हो जाएगा।",
+ "trust.remove.linux": "अपने उपयोगकर्ता प्रमाणपत्र संग्रह (NSS) से Titanium Inspector रूट CA हटाएँ? HTTPS डिक्रिप्ट बंद हो जाएगा।",
+ "trust.remove.windows": "वर्तमान-उपयोगकर्ता विश्वसनीय रूट संग्रह से Titanium Inspector रूट CA हटाएँ? HTTPS डिक्रिप्ट बंद हो जाएगा।",
+ "trust.remove.other": "Titanium Inspector रूट CA हटाएँ? HTTPS डिक्रिप्ट बंद हो जाएगा।",
+ "trust.elevate.mac": "उपयोगकर्ता-स्तर का विश्वास विफल रहा या अपर्याप्त था। macOS व्यवस्थापक पासवर्ड संकेत दिखाने के लिए जारी रखें? रद्द करें चुनने पर प्रमाणपत्र सेटिंग अपरिवर्तित रहती हैं।",
+ "trust.elevate.linux": "उपयोगकर्ता-स्तर का विश्वास विफल रहा या अपर्याप्त था। polkit व्यवस्थापक संकेत दिखाने के लिए जारी रखें? रद्द करें चुनने पर प्रमाणपत्र सेटिंग अपरिवर्तित रहती हैं।",
+ "trust.elevate.windows": "उपयोगकर्ता-स्तर का विश्वास विफल रहा या अपर्याप्त था। UAC दिखाने के लिए जारी रखें? रद्द करें चुनने पर प्रमाणपत्र सेटिंग अपरिवर्तित रहती हैं।",
+ "trust.elevate.other": "उपयोगकर्ता-स्तर का विश्वास विफल रहा या अपर्याप्त था। व्यवस्थापक संकेत के साथ जारी रखें? रद्द करें चुनने पर प्रमाणपत्र सेटिंग अपरिवर्तित रहती हैं।",
+ "trust.recovery.mac": "\n\nmacOS व्यवस्थापक पासवर्ड संकेत दिखाने के लिए जारी रखें? अभी नहीं चुनने पर प्रमाणपत्र सेटिंग अपरिवर्तित रहती हैं।",
+ "trust.recovery.linux": "\n\npolkit व्यवस्थापक संकेत दिखाने के लिए जारी रखें? अभी नहीं चुनने पर प्रमाणपत्र सेटिंग अपरिवर्तित रहती हैं।",
+ "trust.recovery.windows": "\n\nUAC दिखाने के लिए जारी रखें? अभी नहीं चुनने पर प्रमाणपत्र सेटिंग अपरिवर्तित रहती हैं।",
+ "trust.recovery.other": "\n\nव्यवस्थापक संकेत के साथ जारी रखें? अभी नहीं चुनने पर प्रमाणपत्र सेटिंग अपरिवर्तित रहती हैं।",
+ "trust.hosts.mac": "OS बायपास के लिए कैप्चर → सिस्टम प्रॉक्सी चाहिए (macOS नेटवर्क प्रॉक्सी सेटिंग का उपयोग करता है)। केवल-टनल नियम Inspector तक पहुँचने वाले हर क्लाइंट पर लागू होते हैं। फ़ैक्टरी डिफ़ॉल्ट नीचे की सूचियों में भरे हैं — स्वतंत्र रूप से संपादित करें या रीसेट करें।",
+ "trust.hosts.linux": "OS बायपास के लिए कैप्चर → सिस्टम प्रॉक्सी चाहिए (डेस्कटॉप / वातावरण प्रॉक्सी सेटिंग का उपयोग करता है)। केवल-टनल नियम Inspector तक पहुँचने वाले हर क्लाइंट पर लागू होते हैं। फ़ैक्टरी डिफ़ॉल्ट नीचे की सूचियों में भरे हैं — स्वतंत्र रूप से संपादित करें या रीसेट करें।",
+ "trust.hosts.windows": "OS बायपास के लिए कैप्चर → सिस्टम प्रॉक्सी चाहिए (WinINET का उपयोग करता है)। केवल-टनल नियम Inspector तक पहुँचने वाले हर क्लाइंट पर लागू होते हैं। फ़ैक्टरी डिफ़ॉल्ट नीचे की सूचियों में भरे हैं — स्वतंत्र रूप से संपादित करें या रीसेट करें।",
+ "trust.hosts.other": "OS बायपास के लिए कैप्चर → सिस्टम प्रॉक्सी चाहिए। केवल-टनल नियम Inspector तक पहुँचने वाले हर क्लाइंट पर लागू होते हैं। फ़ैक्टरी डिफ़ॉल्ट नीचे की सूचियों में भरे हैं — स्वतंत्र रूप से संपादित करें या रीसेट करें।",
+ "trust.localhost.mac": "सिस्टम प्रॉक्सी चालू होने पर localhost को Inspector के माध्यम से भेजें। बंद करने पर localhost macOS प्रॉक्सी बायपास सूची में जुड़ जाता है।",
+ "trust.localhost.linux": "सिस्टम प्रॉक्सी चालू होने पर localhost को Inspector के माध्यम से भेजें। बंद करने पर localhost NO_PROXY में जुड़ जाता है।",
+ "trust.localhost.windows": "सिस्टम प्रॉक्सी चालू होने पर localhost को Inspector के माध्यम से भेजें (WinINET <-loopback>)। बंद करने पर लूपबैक प्रॉक्सी को छोड़ देता है।",
+ "trust.localhost.other": "सिस्टम प्रॉक्सी चालू होने पर localhost को Inspector के माध्यम से भेजें।",
+ "trust.status.missing": "रूट CA अभी विश्वसनीय नहीं — फिर कोशिश करें, या CA निर्यात करें",
+ "trust.status.cancelled": "रूट CA स्थापना रद्द हुई",
+ "trust.status.certutil": "ब्राउज़र प्रमाणपत्र उपकरण नहीं हैं — उन्हें स्थापित करें, फिर कोशिश करें, या CA निर्यात करें",
+ "trust.status.homebrew": "प्रमाणपत्र उपकरण स्थापित करने के लिए Homebrew आवश्यक है — मैन्युअल विश्वास के लिए CA निर्यात करें",
+ "trust.status.macConfirm": "Keychain Access में Titanium Inspector रूट CA के लिए हमेशा भरोसा सेट करें",
+ "trust.status.keychain": "Keychain विश्वास विफल — फिर कोशिश करें, या CA निर्यात करके मैन्युअल रूप से भरोसा करें",
+ "trust.fail.keychainTitle": "Keychain में विश्वास की पुष्टि करें",
+ "trust.fail.continueKeychain": "Keychain Access में जारी रखें",
+ "trust.fail.toolsTitle": "प्रमाणपत्र उपकरण आवश्यक हैं",
+ "trust.fail.toolsLinux": "रूट CA पर भरोसा पूरा करने के लिए Inspector को certutil (NSS उपकरण) चाहिए।",
+ "trust.fail.toolsOther": "रूट CA पर भरोसा पूरा करने के लिए Inspector को ब्राउज़र प्रमाणपत्र उपकरण चाहिए।",
+ "trust.fail.tryAgain": "फिर कोशिश करें",
+ "trust.fail.homebrewBody": "प्रमाणपत्र उपकरण स्थापित करने के लिए Homebrew आवश्यक है। मैन्युअल विश्वास के लिए CA निर्यात करें।",
+ "trust.fail.title": "अभी HTTPS डिक्रिप्ट नहीं हो सकता",
+ "trust.fail.body": "इस कंप्यूटर पर Titanium Inspector रूट CA अभी विश्वसनीय नहीं है।",
+ "toolbar.throttle": "गति सीमा",
+ "toolbar.throttleTip": "कैप्चर के दौरान विलंब और बैंडविड्थ शेपिंग जोड़ें (बॉडी लेखन / WebSocket फ़्रेम)। डिफ़ॉल्ट रूप से बंद।",
+ "toolbar.bindWatermark": "*, localhost या IP",
+ "toolbar.bindTip": "127.0.0.1 या localhost = केवल यह कंप्यूटर। 0.0.0.0 या * = सभी नेटवर्क अडैप्टर (localhost सहित)।",
+ "toolbar.portWatermark": "* या पोर्ट",
+ "toolbar.portTip": "* या खाली = OS द्वारा चुना पोर्ट (वास्तविक पोर्ट प्रारंभ के बाद दिखता है)। अन्यथा 1–65535।",
+ "toolbar.listeningTip": "प्रॉक्सी सुन रही है",
+ "toolbar.trustHealthTip": "HTTPS डिक्रिप्ट के लिए रूट CA की विश्वास स्थिति। यदि यह विश्वसनीय नहीं दिखाए, तो CA स्थापित करें या उस पर भरोसा करें।",
+ "chip.process": "प्रोसेस",
+ "inspect.request": "अनुरोध",
+ "inspect.requestTip": "अनुरोध हेडर और बॉडी",
+ "inspect.copyHeaders": "हेडर कॉपी करें",
+ "inspect.resizeTip": "आकार बदलने के लिए खींचें। रीसेट के लिए डबल-क्लिक करें।",
+ "inspect.pretty": "सुंदर",
+ "inspect.hex": "हेक्स",
+ "inspect.hexTip": "बॉडी को हेक्स डंप के रूप में दिखाएँ",
+ "inspect.saveRequest": "अनुरोध सहेजें…",
+ "inspect.response": "प्रतिक्रिया",
+ "inspect.responseTip": "प्रतिक्रिया हेडर और बॉडी",
+ "inspect.saveResponse": "प्रतिक्रिया सहेजें…",
+ "inspect.diff": "तुलना",
+ "inspect.frames": "WS फ़्रेम",
+ "inspect.framesHelp": "इस सत्र के लाइव WebSocket फ़्रेम (दिशा, ऑपरेशन कोड, पेलोड पूर्वावलोकन)।",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "प्रतिक्रिया बॉडी से पार्स किए सर्वर-प्रेषित इवेंट।",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "हेडर दिखाएँ",
+ "inspect.hideHeaders": "हेडर छिपाएँ",
+ "inspect.headers": "हेडर ({0})",
+ "inspect.prettyTip": "JSON, XML और HTML को इंडेंट करें",
+ "inspect.prettyHexTip": "हेक्स दृश्य में लागू नहीं",
+ "inspect.emptyBody": "(खाली)",
+ "inspect.noRequestBody": "कोई अनुरोध बॉडी नहीं",
+ "inspect.waiting": "प्रतिक्रिया की प्रतीक्षा…",
+ "composer.help": "प्रॉक्सी के माध्यम से अनुरोध बनाएँ और भेजें। चयनित से लोड करें वर्तमान सत्र की प्रति बनाता है।",
+ "composer.method": "विधि",
+ "composer.url": "URL",
+ "composer.headers": "हेडर (प्रति पंक्ति नाम: मान)",
+ "composer.body": "बॉडी",
+ "composer.loadSelected": "चयनित से लोड करें",
+ "composer.loadBody": "फ़ाइल से बॉडी लोड करें…",
+ "composer.send": "भेजें",
+ "bp.help": "मेल खाते क्लाइंट अनुरोधों को रोकें ताकि बॉडी संपादित कर सकें, जारी रख सकें, या निरस्त कर सकें। एक समय में एक विराम; 120s बाद अपने आप जारी रहता है। सक्षम का चयन हटाने पर रुका हुआ अनुरोध जारी रहता है।",
+ "bp.enabled": "सक्षम",
+ "bp.breakOnResponse": "प्रतिक्रिया पर ब्रेक",
+ "bp.match": "मिलान",
+ "bp.urlWatermark": "URL फ़िल्टर (* = सभी, जैसे *api*/users*)",
+ "bp.graphqlWatermark": "केवल यह GraphQL ऑपरेशन (वैकल्पिक)",
+ "bp.graphqlTip": "क्लाइंट अनुरोध बॉडी पर अतिरिक्त फ़िल्टर। JSON operationName या नामित क्वेरी से मेल खाता है। URL पर हर ऑपरेशन से मिलान के लिए खाली छोड़ें।",
+ "bp.fromSelected": "चयनित सत्र से",
+ "bp.fromSelectedTip": "चयनित सत्र के अनुरोध से GraphQL ऑपरेशन का नाम कॉपी करें।",
+ "bp.graphqlHelp": "हर ऑपरेशन से मिलान के लिए GraphQL बॉक्स खाली छोड़ें। इसे भरें (जैसे GetUser) ताकि ऊपर दिए URL पर केवल वही क्लाइंट अनुरोध रुके। प्रतिक्रिया पर ब्रेक फिर भी URL फ़िल्टर का उपयोग करता है।",
+ "bp.editWatermark": "बॉडी संपादित करें (बॉडी संपादन लागू करें, फिर जारी रखें)",
+ "bp.applyEdit": "बॉडी संपादन लागू करें",
+ "bp.continue": "जारी रखें",
+ "bp.abort": "निरस्त करें",
+ "ar.help": "असली सर्वर से पहले एक नकली प्रतिक्रिया लौटाएँ। मिलान तय करता है कि नियम किन क्लाइंट अनुरोधों पर लगता है; उसके नीचे के फ़ील्ड वही हैं जो आप वापस भेजते हैं।",
+ "ar.enabled": "सक्षम (ब्रेकपॉइंट से पहले)",
+ "ar.urlWatermark": "URL मिलान (* वाइल्डकार्ड)",
+ "ar.graphqlHelp": "एक ही URL पर अलग-अलग GraphQL ऑपरेशन अलग नियम उपयोग कर सकते हैं। हर ऑपरेशन से मिलान के लिए खाली छोड़ें।",
+ "ar.respondWith": "इससे प्रतिक्रिया",
+ "ar.statusTip": "HTTP स्थिति। खाली = 200। 100–599 का उपयोग करें।",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local फ़ाइल (वैकल्पिक)",
+ "ar.bodyWatermark": "प्रतिक्रिया बॉडी (Map Local खाली होने पर उपयोग)",
+ "ar.add": "नियम जोड़ें",
+ "ar.update": "नियम अपडेट करें",
+ "ar.delete": "नियम हटाएँ",
+ "script.intro": "हर कैप्चर किए गए सत्र पर प्रति पंक्ति एक आदेश। यह JavaScript या C# नहीं है — केवल नीचे दिए आदेश टाइप करें।",
+ "script.what": "आप क्या टाइप कर सकते हैं",
+ "script.setHeaderHelp": "एक हेडर जोड़ें या बदलें। ट्रैफ़िक फिर भी सर्वर तक जाता रहता है।",
+ "script.setStatusHelp": "अनुरोध पर: अभी उत्तर दें और सर्वर छोड़ें। प्रतिक्रिया पर: क्लाइंट को दिखने वाली स्थिति बदलें।",
+ "script.abortHelp": "403 Forbidden से रोकें। दूसरा कोड चुनने के लिए एक set-status पंक्ति जोड़ें।",
+ "script.comment": "टिप्पणी के लिए पंक्ति को # या // से शुरू करें। आदेश साथ में रखे जा सकते हैं; प्रत्येक को अपनी पंक्ति पर रखें।",
+ "script.onRequest": "अनुरोध पर",
+ "script.onResponse": "प्रतिक्रिया पर",
+ "script.requestSkips": "यहाँ abort या set-status, AutoResponder, ब्रेकपॉइंट और ऑरिजिन को छोड़ देता है।",
+ "map.help": "मेल खाते क्लाइंट अनुरोधों को असली सर्वर से पहले दूसरे ऑरिजिन पर फिर लिखें। पथ/क्वेरी प्रत्यय रखने के लिए मिलान और लक्ष्य में एक * रखें। यह AutoResponder / Map Local के बाद चलता है।",
+ "map.graphqlHelp": "URL के हर ऑपरेशन को फिर लिखने के लिए खाली छोड़ें। केवल उस GraphQL ऑपरेशन को फिर लिखने के लिए भरें।",
+ "map.rewriteTo": "यहाँ फिर लिखें",
+ "map.targetWatermark": "लक्ष्य URL (पूर्ण, * वैकल्पिक)",
+ "loopback.allow": "अनुमति दें",
+ "loopback.appName": "ऐप नाम",
+ "loopback.packageId": "पैकेज ID",
+ "status.ready": "तैयार",
+ "status.searchingBodies": "बॉडी खोजी जा रही हैं…",
+ "status.proxyStopped": "प्रॉक्सी रुक गई",
+ "status.proxyRunning": "प्रॉक्सी {0} पर चल रही है",
+ "trust.health.trusted": "CA विश्वसनीय",
+ "trust.health.untrusted": "CA विश्वसनीय नहीं"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.hu.json b/src/Titanium.Inspector/Localization/strings.hu.json
new file mode 100644
index 000000000..1fcfb4e44
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.hu.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Fájl",
+ "menu.exportAllHar": "Minden HAR exportálása…",
+ "menu.exportSelectedHar": "Kijelölt HAR exportálása…",
+ "menu.importHar": "HAR importálása…",
+ "menu.exportAllArchive": "Minden archívum exportálása…",
+ "menu.exportSelectedArchive": "Kijelölt archívum exportálása…",
+ "menu.importArchive": "Archívum importálása…",
+ "menu.exit": "Kilépés",
+ "menu.capture": "Rögzítés",
+ "menu.startProxy": "Proxy indítása",
+ "menu.stopProxy": "Proxy leállítása",
+ "menu.capturing": "Rögzítés alatt",
+ "menu.clearSessions": "Munkamenetek törlése",
+ "menu.removeSelected": "Kijelöltek eltávolítása",
+ "menu.autoStartCapture": "Rögzítés automatikus indítása",
+ "menu.autoSystemProxy": "Rendszerproxy automatikus bekapcsolása indításkor",
+ "menu.decryptHttps": "HTTPS visszafejtése",
+ "menu.systemProxy": "Rendszerproxy",
+ "menu.captureLocal": "Helyi forgalom rögzítése",
+ "menu.allowStoreApps": "Store-alkalmazások engedélyezése…",
+ "menu.installCa": "Gyökér CA telepítése (aktuális felhasználó)",
+ "menu.removeCa": "Gyökér CA eltávolítása (aktuális felhasználó)",
+ "menu.rotateCa": "Gyökér CA törlése és újratelepítése…",
+ "menu.removeOldCas": "Régi gyökér CA-k eltávolítása…",
+ "menu.exportCa": "Gyökér CA exportálása…",
+ "menu.trustFirefox": "CA megbízhatósága a Firefoxban…",
+ "menu.deviceCa": "Külső eszköz CA beállítása",
+ "menu.tools": "Eszközök",
+ "menu.composer": "Szerkesztő…",
+ "menu.breakpoints": "Töréspontok…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Szkriptek…",
+ "menu.mapRemote": "Távoli leképezés…",
+ "menu.options": "Beállítások",
+ "menu.theme": "Téma",
+ "menu.themeLight": "Világos",
+ "menu.themeDark": "Sötét",
+ "menu.themeAutomatic": "Automatikus",
+ "menu.language": "Nyelv",
+ "menu.languageAutomatic": "Automatikus",
+ "menu.columns": "Oszlopok",
+ "menu.col.id": "Azonosító",
+ "menu.col.method": "Metódus",
+ "menu.col.status": "Állapot",
+ "menu.col.host": "Gazdagép",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protokoll",
+ "menu.col.duration": "Időtartam",
+ "menu.col.ttfb": "Várakozás (TTFB)",
+ "menu.col.size": "Méret",
+ "menu.col.process": "Folyamat",
+ "menu.col.started": "Kezdés",
+ "menu.col.scheme": "Séma",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Oszlopok visszaállítása",
+ "menu.sessionRetention": "Munkamenetek megőrzése…",
+ "menu.excludedHosts": "Kizárt gazdagépek…",
+ "menu.excludedHostsTip": "HTTPS-visszafejtés kihagyási listái és az operációs rendszer megkerülési szabályai",
+ "menu.ignoreCerts": "Nem biztonságos kiszolgálótanúsítványok figyelmen kívül hagyása",
+ "menu.addVia": "Via fejléc hozzáadása",
+ "menu.addViaTip": "Via: … titanium-web-proxy hozzáfűzése az elfogott forgalomhoz (RFC 9110). Kikapcsolva a beszúrás és a Via-hurok észlelése is leáll.",
+ "menu.logging": "Naplózás…",
+ "menu.resetSettings": "Inspector beállításainak visszaállítása…",
+ "menu.help": "Súgó",
+ "menu.checkUpdates": "Frissítések keresése…",
+ "menu.checkUpdatesStartup": "Frissítések keresése indításkor",
+ "menu.updateChannel": "Frissítési csatorna",
+ "menu.channelStable": "Stabil",
+ "menu.channelBeta": "Béta",
+ "menu.about": "A Titanium Inspector névjegye…",
+ "toolbar.searchWatermark": "URL, gazdagép, folyamat keresése… (vagy method:GET status:4xx)",
+ "toolbar.searchTip": "Az egyszerű szöveg az URL-ben, a gazdagépben, a folyamat nevében, a pontos folyamatazonosítóban, a metódusban és az állapotban keres. Az előtagok egy mezőre szűkítenek: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. A body: a lemezre kiírt törzsekben is keres. A kizáráshoz tegyen - jelet a mező vagy a szó elé (pl. -host:cursor.sh vagy -cursor). A szűrők nagyobb ablakban szerkesztik a rejtett gazdagépeket és folyamatokat.",
+ "toolbar.filters": "Szűrők",
+ "toolbar.filtersTip": "A keresés, valamint a rejtett gazdagépek vagy folyamatok szerkesztése nagyobb ablakban",
+ "toolbar.hideConnect": "CONNECT elrejtése",
+ "toolbar.hideConnectTip": "Az átlátszatlan HTTPS-alagutak elrejtése, ha a HTTPS visszafejtése ki van kapcsolva",
+ "toolbar.hideImages": "Képek elrejtése",
+ "toolbar.errorsOnly": "Csak hibák",
+ "toolbar.clearFilters": "Szűrők törlése",
+ "toolbar.hidden": "Rejtett",
+ "ctx.replay": "Újraküldés",
+ "ctx.loadComposer": "Betöltés a szerkesztőbe",
+ "ctx.saveRequest": "Kérés törzsének mentése…",
+ "ctx.saveResponse": "Válasz törzsének mentése…",
+ "ctx.copyUrl": "URL másolása",
+ "ctx.copyCurl": "Másolás curl-ként",
+ "ctx.copyFetch": "Másolás fetch-ként",
+ "ctx.diff": "Kijelöltek összehasonlítása…",
+ "ctx.filterHost": "Szűrés gazdagép szerint",
+ "ctx.hideHost": "Gazdagép elrejtése",
+ "ctx.filterProcess": "Szűrés folyamat szerint",
+ "ctx.hideProcess": "Folyamat elrejtése",
+ "ctx.excludeHost": "Gazdagép kizárása…",
+ "ctx.excludeHostTip": "Ne fejtse vissza ennek a gazdagépnek a HTTPS-forgalmát. A sorok a listában maradnak; a nézetből a Gazdagép elrejtése paranccsal tűnnek el.",
+ "grid.duration": "Időtartam (ms)",
+ "grid.wait": "Várakozás (ms)",
+ "pane.inspect": "Vizsgálat",
+ "pane.composer": "Szerkesztő",
+ "pane.breakpoints": "Töréspontok",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Szkriptek",
+ "pane.mapRemote": "Távoli leképezés",
+ "pane.closeTip": "Panel bezárása",
+ "inspect.empty": "Válasszon egy munkamenetet a rácsban a kérés és a válasz fejléceinek és törzseinek megtekintéséhez.",
+ "common.ok": "OK",
+ "common.cancel": "Mégse",
+ "common.save": "Mentés",
+ "common.apply": "Alkalmaz",
+ "common.remove": "Eltávolítás",
+ "common.browse": "Tallózás…",
+ "common.openFolder": "Mappa megnyitása",
+ "common.forget": "Elfelejt",
+ "common.close": "Bezárás",
+ "loopback.window": "Store-alkalmazások engedélyezése ennek a proxynak a használatára",
+ "loopback.checkAll": "Összes bejelölése",
+ "loopback.uncheckAll": "Összes jelölés törlése",
+ "loopback.filterWatermark": "Szűrés az alkalmazás neve szerint…",
+ "loopback.clearAll": "Összes törlése",
+ "trust.macWindow": "Megbízhatóság megerősítése a Keychain Accessben",
+ "trust.openKeychain": "Keychain Access megnyitása",
+ "trust.notNow": "Most nem",
+ "trust.recoveryTitle": "Gyökér CA megbízhatósága",
+ "trust.macWaitPlaceholder": "Várakozás az SSL-megbízhatóságra…",
+ "window.about": "A Titanium Inspector névjegye",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Szerzői jog © Jehonathan Thomas",
+ "about.license": "A PolyForm Noncommercial License 1.0.0 feltételei szerint.",
+ "about.licenseLink": "Licenc részletei",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Szűrők",
+ "filters.search": "Keresés",
+ "filters.searchHelp": "Ugyanaz a keresés, mint az eszköztáron, több hellyel. A rejtett gazdagépek és folyamatok alább vannak felsorolva, nem ebben a mezőben.",
+ "filters.searchWatermark": "URL, gazdagép, folyamat, method:GET, status:4xx…",
+ "filters.hideHeading": "Elrejtés a listából",
+ "filters.hideHelp": "A sorok rögzítve maradnak. Ez csak elrejti őket a listában. A HTTPS visszafejtésének leállításához használja a Gazdagép kizárása… parancsot.",
+ "filters.hosts": "Gazdagépek",
+ "filters.addHostWatermark": "Rejtendő gazdagép hozzáadása",
+ "filters.addHost": "Gazdagép hozzáadása",
+ "filters.processes": "Folyamatok",
+ "filters.addProcessWatermark": "Rejtendő folyamat hozzáadása",
+ "filters.addProcess": "Folyamat hozzáadása",
+ "filters.processSpace": "A szóközt tartalmazó név az első szónál lerövidül, ami más, azt a szót tartalmazó neveket is elrejthet.",
+ "window.confirm": "Megerősítés",
+ "window.excludeHost": "Gazdagép kizárása",
+ "exclude.action": "Kizárás",
+ "exclude.help": "Ez a gazdagép továbbra is megjelenik a munkamenetlistában. Az Inspector nem próbálja olvasni a HTTPS-forgalmát.",
+ "window.logging": "Naplózás",
+ "logging.help": "Diagnosztikai üzenetek írása a hibaelhárításhoz. A módosítások azonnal érvénybe lépnek.",
+ "logging.enable": "Naplózás engedélyezése",
+ "logging.writeFile": "Napló írása fájlba",
+ "logging.detail": "Részletesség",
+ "logging.detailHelp": "Error = csak problémák. Warning / Information = több összefüggés. Debug = nagyon részletes.",
+ "logging.path": "Naplófájl elérési útja",
+ "window.excludedHosts": "Kizárt gazdagépek",
+ "excluded.reset": "Alapértelmezések visszaállítása",
+ "excluded.bypass": "Proxy megkerülése (rendszer)",
+ "excluded.bypassHelp": "A forgalom nem éri el az Inspectort, ha a rendszerproxy be van kapcsolva. Előre fel van töltve Microsoft-identitás / SSO / RDP gazdagépekkel. Eltávolításuk megszakíthatja az RDP-bejelentkezést, amíg a rendszerproxy engedélyezve van.",
+ "excluded.notDecrypted": "Nem visszafejtett gazdagépek",
+ "excluded.notDecryptedHelp": "A CONNECT látható marad; a TLS átlátszatlan marad, ha a HTTPS visszafejtése be van kapcsolva. Előre fel van töltve tanúsítványrögzítést használó gazdagépekkel (Dropbox, Webex).",
+ "excluded.learnHeading": "Ne fejtsen vissza automatikusan, ha a visszafejtés sikertelen",
+ "excluded.learn": "Tanulja meg azokat a gazdagépeket, amelyek eredeti TLS-e meghiúsul visszafejtés közben",
+ "excluded.learnHelp": "Ha az eredeti TLS ismételten meghiúsul visszafejtés közben, vagy az eredeti kiszolgáló 403/429 választ ad, az Inspector nem fejti vissza azt a gazdagépet a munkamenet későbbi kapcsolataihoz. A lista mérete korlátozott, és újraindításkor elfelejtődik, hacsak nem emeli át.",
+ "excluded.learnPaused": "A tanulás szünetel — a meglévő bejegyzések megmaradnak, amíg el nem felejti őket.",
+ "excluded.noneLearned": "Még nincs megtanult gazdagép.",
+ "excluded.promote": "Áthelyezés a nem visszafejtett gazdagépekhez",
+ "excluded.clearLearned": "Minden megtanult törlése",
+ "window.retention": "Munkamenetek megőrzése",
+ "retention.max": "Megőrzendő munkamenetek legnagyobb száma",
+ "retention.maxHelp": "Hány kérés marad a munkamenetlistában. A határ felett a legrégebbi sorok kikerülnek a listából, de a lemezen maradnak, amíg a Munkamenetek törlése vagy a lemezterületkorlát el nem távolítja őket.",
+ "retention.cache": "Gyorsítótár mappája",
+ "retention.openCache": "Gyorsítótár mappájának megnyitása",
+ "retention.clearCache": "Mentett munkamenet-gyorsítótár törlése…",
+ "retention.advanced": "Speciális",
+ "retention.disk": "Lemezterület a mentett munkameneteknek (MB)",
+ "retention.diskHelp": "A lemezen lévő összes mentett munkamenet legnagyobb helye (az Inspector minden futása). Minden futás időbélyeges almappát használ; a határ felett először a legrégebbi HAR-fájlok törlődnek. Az üres futásmappák eltűnnek.",
+ "loopback.intro": "A Windows Store- / UWP-alkalmazások alapértelmezés szerint nem érik el a localhostot. Jelölje be azokat az alkalmazásokat, amelyeknek az Inspectort kell használniuk, majd válassza az Alkalmaz lehetőséget. Az Alkalmaz után indítsa újra az egyes alkalmazásokat (lépjen ki belőlük teljesen). Az Inspectornak futnia kell bekapcsolt rendszerproxyval. Az Összes törlése minden engedélyezési bejegyzést eltávolít.",
+ "loopback.closedUnchanged": "A Store-alkalmazások változatlanok.",
+ "loopback.proxyStopped": "Indítsa el a proxyt, és kapcsolja be a rendszerproxyt. A Store-alkalmazásokat csak akkor lehet rögzíteni, ha mindkettő be van kapcsolva.",
+ "loopback.systemProxyOff": "Kapcsolja be a rendszerproxyt (Rögzítés menü). Az engedélyezési lista csak a localhost elérését teszi lehetővé a Store-alkalmazásoknak; továbbra is a rendszerproxyt követik.",
+ "loopback.refreshing": "A rendszerproxy frissítése, hogy a futó alkalmazások újracsatlakozzanak…",
+ "loopback.unchangedCount": "Az engedélyezési lista már egyezik: {0}.",
+ "loopback.allowed": "Engedélyezve: {0}.",
+ "loopback.allowedRefreshed": " A rendszerproxy frissült, hogy a futó alkalmazások újracsatlakozzanak. Ha a forgalom továbbra sem jelenik meg, lépjen ki teljesen az alkalmazásból, majd nyissa meg újra.",
+ "loopback.allowedProxyStopped": " Indítsa el a proxyt, kapcsolja be a rendszerproxyt, majd lépjen ki teljesen az alkalmazásból, és nyissa meg újra.",
+ "loopback.allowedSystemProxyOff": " Kapcsolja be a rendszerproxyt, majd lépjen ki teljesen az alkalmazásból, és nyissa meg újra.",
+ "loopback.allowedReady": " Lépjen ki teljesen az alkalmazásból, majd nyissa meg újra a forgalom rögzítéséhez.",
+ "loopback.clearedRefreshed": "Minden loopback-kivétel törölve. A rendszerproxy frissült, hogy a futó alkalmazások újracsatlakozzanak.",
+ "loopback.clearedReady": "Minden loopback-kivétel törölve. Lépjen ki teljesen, majd nyissa meg újra minden olyan alkalmazást, amely az Inspectort használta.",
+ "loopback.cleared": "Minden loopback-kivétel törölve.",
+ "trust.macWaitBody": "A Keychain Infó már mutathatja a Mindig megbízható értéket akkor is, ha az SSL-házirendek nem lettek mentve (a Chrome és az Inspector továbbra is megbízhatatlannak tekinti a CA-t).\n\nKényszerítsen mentést:\n1. Keychain Access → login → Tanúsítványok → kattintson duplán a Titanium Root Certificate Authority elemre\n2. Bontsa ki a Megbízhatóság szakaszt\n3. Állítsa A tanúsítvány használatakor értékét Rendszer alapértelmezéseinek használata értékre, majd állítsa vissza Mindig megbízható értékre\n4. Zárja be az Infót — jelszókérésnek kell megjelennie; az írja a valódi SSL-megbízhatósági házirendeket\n\nEz az ablak automatikusan bezárul, amikor ezeket a házirendeket észleli. Ha már mentette, kattintson a Mentettem a Mindig megbízható beállítást gombra.",
+ "trust.macWaitStatus": "Várakozás a tanúsítványra a Keychainben…",
+ "trust.macWaitInKeychain": "Várakozás a mentett SSL-házirendekre (váltson Mindig megbízható értékre, zárja be az Infót, adja meg a jelszót)…",
+ "trust.macNotSaved": "A Mindig megbízható megjelenítése nem elég — váltson Rendszer alapértelmezéseinek használata → Mindig megbízható értékre, zárja be az Infót, adja meg a jelszavát, majd próbálja újra a Gyökér CA telepítése / HTTPS visszafejtése műveletet",
+ "trust.macConfirmSaved": "Mentettem a Mindig megbízható beállítást",
+ "trust.exportCa": "CA exportálása",
+ "trust.install.mac": "A HTTPS visszafejtése megköveteli, hogy a Titanium Inspector gyökér CA-ja megbízható legyen a Keychain Accessben (login kulcskarika). Telepíti most?",
+ "trust.install.linux": "A HTTPS visszafejtése megköveteli, hogy a Titanium Inspector gyökér CA-ja megbízható legyen a felhasználói tanúsítványtárban (NSS). Telepíti most?",
+ "trust.install.windows": "A HTTPS visszafejtése megköveteli, hogy a Titanium Inspector gyökér CA-ja megbízható legyen az aktuális felhasználó megbízható gyökértanúsítvány-tárában. Telepíti most?\n\nA Windows megjeleníthet egy Igen/Nem biztonsági párbeszédpanelt a megbízható gyökérről (ez nem UAC) — válassza az Igen lehetőséget a CA megbízhatóságához.",
+ "trust.install.other": "A HTTPS visszafejtése megköveteli, hogy a Titanium Inspector gyökér CA-ja megbízható legyen ezen a számítógépen. Telepíti most?",
+ "trust.remove.mac": "Eltávolítja a Titanium Inspector gyökér CA-ját a Keychainből? A HTTPS-visszafejtés kikapcsol.",
+ "trust.remove.linux": "Eltávolítja a Titanium Inspector gyökér CA-ját a felhasználói tanúsítványtárból (NSS)? A HTTPS-visszafejtés kikapcsol.",
+ "trust.remove.windows": "Eltávolítja a Titanium Inspector gyökér CA-ját az aktuális felhasználó megbízható gyökértanúsítvány-tárából? A HTTPS-visszafejtés kikapcsol.",
+ "trust.remove.other": "Eltávolítja a Titanium Inspector gyökér CA-ját? A HTTPS-visszafejtés kikapcsol.",
+ "trust.elevate.mac": "A felhasználói szintű megbízhatóság sikertelen volt, vagy nem volt elegendő. Folytatja, és megjeleníti a macOS rendszergazdai jelszókérését? A Mégse változatlanul hagyja a tanúsítványbeállításokat.",
+ "trust.elevate.linux": "A felhasználói szintű megbízhatóság sikertelen volt, vagy nem volt elegendő. Folytatja, és megjeleníti a polkit rendszergazdai kérését? A Mégse változatlanul hagyja a tanúsítványbeállításokat.",
+ "trust.elevate.windows": "A felhasználói szintű megbízhatóság sikertelen volt, vagy nem volt elegendő. Folytatja, és megjeleníti az UAC-t? A Mégse változatlanul hagyja a tanúsítványbeállításokat.",
+ "trust.elevate.other": "A felhasználói szintű megbízhatóság sikertelen volt, vagy nem volt elegendő. Folytatja egy rendszergazdai kéréssel? A Mégse változatlanul hagyja a tanúsítványbeállításokat.",
+ "trust.recovery.mac": "\n\nFolytatja, és megjeleníti a macOS rendszergazdai jelszókérését? A Most nem változatlanul hagyja a tanúsítványbeállításokat.",
+ "trust.recovery.linux": "\n\nFolytatja, és megjeleníti a polkit rendszergazdai kérését? A Most nem változatlanul hagyja a tanúsítványbeállításokat.",
+ "trust.recovery.windows": "\n\nFolytatja, és megjeleníti az UAC-t? A Most nem változatlanul hagyja a tanúsítványbeállításokat.",
+ "trust.recovery.other": "\n\nFolytatja egy rendszergazdai kéréssel? A Most nem változatlanul hagyja a tanúsítványbeállításokat.",
+ "trust.hosts.mac": "Az operációs rendszer megkerülése a Rögzítés → Rendszerproxy menüt igényli (a macOS hálózati proxybeállításait használja). A csak alagútra vonatkozó szabályok minden olyan ügyfélre vonatkoznak, amely eléri az Inspectort. A gyári alapértékek előre fel vannak töltve az alábbi listákba — szerkessze szabadon, vagy állítsa vissza.",
+ "trust.hosts.linux": "Az operációs rendszer megkerülése a Rögzítés → Rendszerproxy menüt igényli (az asztal vagy a környezet proxybeállításait használja). A csak alagútra vonatkozó szabályok minden olyan ügyfélre vonatkoznak, amely eléri az Inspectort. A gyári alapértékek előre fel vannak töltve az alábbi listákba — szerkessze szabadon, vagy állítsa vissza.",
+ "trust.hosts.windows": "Az operációs rendszer megkerülése a Rögzítés → Rendszerproxy menüt igényli (a WinINET-et használja). A csak alagútra vonatkozó szabályok minden olyan ügyfélre vonatkoznak, amely eléri az Inspectort. A gyári alapértékek előre fel vannak töltve az alábbi listákba — szerkessze szabadon, vagy állítsa vissza.",
+ "trust.hosts.other": "Az operációs rendszer megkerülése a Rögzítés → Rendszerproxy menüt igényli. A csak alagútra vonatkozó szabályok minden olyan ügyfélre vonatkoznak, amely eléri az Inspectort. A gyári alapértékek előre fel vannak töltve az alábbi listákba — szerkessze szabadon, vagy állítsa vissza.",
+ "trust.localhost.mac": "Ha a rendszerproxy be van kapcsolva, a localhost az Inspectoron megy keresztül. Kikapcsolva a localhost felkerül a macOS proxy megkerülési listájára.",
+ "trust.localhost.linux": "Ha a rendszerproxy be van kapcsolva, a localhost az Inspectoron megy keresztül. Kikapcsolva a localhost felkerül a NO_PROXY listára.",
+ "trust.localhost.windows": "Ha a rendszerproxy be van kapcsolva, a localhost az Inspectoron megy keresztül (WinINET <-loopback>). Kikapcsolva a loopback kihagyhatja a proxyt.",
+ "trust.localhost.other": "Ha a rendszerproxy be van kapcsolva, a localhost az Inspectoron megy keresztül.",
+ "trust.status.missing": "A gyökér CA még nem megbízható — próbálja újra, vagy CA exportálása",
+ "trust.status.cancelled": "A gyökér CA telepítése megszakítva",
+ "trust.status.certutil": "Hiányoznak a böngésző tanúsítványeszközei — telepítse őket, próbálja újra, vagy CA exportálása",
+ "trust.status.homebrew": "A Homebrew szükséges a tanúsítványeszközök telepítéséhez — CA exportálása a kézi megbízhatósághoz",
+ "trust.status.macConfirm": "Állítsa a Titanium Inspector gyökér CA-ját Mindig megbízható értékre a Keychain Accessben",
+ "trust.status.keychain": "A Keychain-megbízhatóság sikertelen — próbálja újra, vagy exportálja a CA-t, és állítsa be kézzel",
+ "trust.fail.keychainTitle": "Megbízhatóság megerősítése a Keychainben",
+ "trust.fail.continueKeychain": "Folytatás a Keychain Accessben",
+ "trust.fail.toolsTitle": "Tanúsítványeszközök szükségesek",
+ "trust.fail.toolsLinux": "Az Inspectornak certutil (NSS-eszközök) kell a gyökér CA megbízhatóságának befejezéséhez.",
+ "trust.fail.toolsOther": "Az Inspectornak a böngésző tanúsítványeszközei kellenek a gyökér CA megbízhatóságának befejezéséhez.",
+ "trust.fail.tryAgain": "Újrapróbálkozás",
+ "trust.fail.homebrewBody": "A Homebrew szükséges a tanúsítványeszközök telepítéséhez. Exportálja a CA-t a kézi megbízhatósághoz.",
+ "trust.fail.title": "A HTTPS még nem fejthető vissza",
+ "trust.fail.body": "A Titanium Inspector gyökér CA-ja még nem megbízható ezen a számítógépen.",
+ "toolbar.throttle": "Korlátozás",
+ "toolbar.throttleTip": "Késleltetés és sávszélesség-alakítás hozzáadása rögzítés közben (törzs írása / WebSocket-keretek). Alapértelmezés szerint ki.",
+ "toolbar.bindWatermark": "*, localhost vagy IP",
+ "toolbar.bindTip": "127.0.0.1 vagy localhost = csak ez a számítógép. 0.0.0.0 vagy * = minden hálózati adapter (localhost is).",
+ "toolbar.portWatermark": "*, vagy port",
+ "toolbar.portTip": "* vagy üres = az operációs rendszer által választott port (a tényleges port az indítás után jelenik meg). Egyébként 1–65535.",
+ "toolbar.listeningTip": "A proxy figyel",
+ "toolbar.trustHealthTip": "A gyökér CA megbízhatósági állapota a HTTPS visszafejtése funkcióhoz. Ha az látható, hogy a CA nem megbízható, telepítse, vagy jelölje megbízhatónak.",
+ "chip.process": "folyamat",
+ "inspect.request": "Kérés",
+ "inspect.requestTip": "A kérés fejlécei és törzse",
+ "inspect.copyHeaders": "Fejlécek másolása",
+ "inspect.resizeTip": "Húzással átméretezhető. Dupla kattintással visszaállítható.",
+ "inspect.pretty": "Formázott",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "A törzs megjelenítése Hex-kivonatként",
+ "inspect.saveRequest": "Kérés mentése…",
+ "inspect.response": "Válasz",
+ "inspect.responseTip": "A válasz fejlécei és törzse",
+ "inspect.saveResponse": "Válasz mentése…",
+ "inspect.diff": "Eltérés",
+ "inspect.frames": "WS-keretek",
+ "inspect.framesHelp": "Élő WebSocket-keretek ehhez a munkamenethez (irány, opcode, adatok előnézete).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "A válasz törzséből elemzett Server-Sent Events.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Fejlécek megjelenítése",
+ "inspect.hideHeaders": "Fejlécek elrejtése",
+ "inspect.headers": "Fejlécek ({0})",
+ "inspect.prettyTip": "JSON, XML és HTML behúzása",
+ "inspect.prettyHexTip": "A Hex nézetben nem alkalmazható",
+ "inspect.emptyBody": "(üres)",
+ "inspect.noRequestBody": "Nincs kéréstörzs",
+ "inspect.waiting": "Várakozás a válaszra…",
+ "composer.help": "Kérés összeállítása és küldése a proxyn keresztül. A Betöltés a kijelöltből az aktuális munkamenetet másolja.",
+ "composer.method": "Metódus",
+ "composer.url": "URL",
+ "composer.headers": "Fejlécek (Név: Érték soronként)",
+ "composer.body": "Törzs",
+ "composer.loadSelected": "Betöltés a kijelöltből",
+ "composer.loadBody": "Törzs betöltése fájlból…",
+ "composer.send": "Küldés",
+ "bp.help": "A megfelelő ügyfélkérések szüneteltetése a törzs szerkesztéséhez, folytatáshoz vagy megszakításhoz. Egyszerre egy szünet; 120s után automatikusan folytatódik. Az Engedélyezve jelölés törlése folytatja a szüneteltetett kérést.",
+ "bp.enabled": "Engedélyezve",
+ "bp.breakOnResponse": "Megállás a válasznál",
+ "bp.match": "Egyezés",
+ "bp.urlWatermark": "URL-szűrő (* = mind, pl. *api*/users*)",
+ "bp.graphqlWatermark": "Csak ez a GraphQL-művelet (nem kötelező)",
+ "bp.graphqlTip": "További szűrő az ügyfélkérés törzsén. A JSON operationName mezőre vagy egy nevesített lekérdezésre illeszkedik. Hagyja üresen, ha az adott URL minden műveletére illeszkedjen.",
+ "bp.fromSelected": "A kijelölt munkamenetből",
+ "bp.fromSelectedTip": "A GraphQL-művelet nevének másolása a kijelölt munkamenet kéréséből.",
+ "bp.graphqlHelp": "Hagyja üresen a GraphQL mezőt, ha minden műveletre illeszkedjen. Töltse ki (pl. GetUser), ha csak azt az ügyfélkérést szeretné szüneteltetni a fenti URL címen. A Megállás a válasznál továbbra is az URL-szűrőt használja.",
+ "bp.editWatermark": "Törzs szerkesztése (Törzsszerkesztés alkalmazása, majd Folytatás)",
+ "bp.applyEdit": "Törzsszerkesztés alkalmazása",
+ "bp.continue": "Folytatás",
+ "bp.abort": "Megszakítás",
+ "ar.help": "Hamis válasz visszaadása a valódi kiszolgáló előtt. Az Egyezés dönti el, mely ügyfélkérésekre vonatkozik a szabály; az alatta lévő mezők azt adják meg, amit visszaküld.",
+ "ar.enabled": "Engedélyezve (a töréspontok előtt)",
+ "ar.urlWatermark": "URL egyezése (* helyettesítő karakterek)",
+ "ar.graphqlHelp": "Ugyanazon URL esetén a különböző GraphQL-műveletek különböző szabályokat használhatnak. Hagyja üresen, ha minden műveletre illeszkedjen.",
+ "ar.respondWith": "Válasz ezzel",
+ "ar.statusTip": "HTTP állapot. Üres = 200. Használjon 100–599 értéket.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local fájl (nem kötelező)",
+ "ar.bodyWatermark": "Választörzs (akkor használatos, ha a Map Local üres)",
+ "ar.add": "Szabály hozzáadása",
+ "ar.update": "Szabály frissítése",
+ "ar.delete": "Szabály törlése",
+ "script.intro": "Soronként egy parancs, minden rögzített munkameneten. Ez nem JavaScript és nem C# — csak az alábbi parancsokat írja be.",
+ "script.what": "Amit beírhat",
+ "script.setHeaderHelp": "Fejléc hozzáadása vagy cseréje. A forgalom továbbra is a kiszolgálóra megy.",
+ "script.setStatusHelp": "Kérésnél: azonnali válasz, a kiszolgáló kihagyásával. Válasznál: az ügyfél által látott állapot módosítása.",
+ "script.abortHelp": "Letiltás a 403 Tiltott kóddal. Más kódhoz adjon meg egy set-status sort.",
+ "script.comment": "A # vagy // jellel kezdődő sor megjegyzés. A parancsok kombinálhatók; mindegyik külön sorba kerüljön.",
+ "script.onRequest": "Kérésnél",
+ "script.onResponse": "Válasznál",
+ "script.requestSkips": "Az itteni abort vagy set-status kihagyja ezeket: AutoResponder, a töréspontokat és az eredeti kiszolgálót.",
+ "map.help": "A megfelelő ügyfélkérések átírása egy másik eredetre a valódi kiszolgáló előtt. Egyetlen * az egyezésben és a célban megőrzi az útvonal vagy a lekérdezés utótagját. Ez az AutoResponder / Map Local után fut.",
+ "map.graphqlHelp": "Hagyja üresen, ha az adott URL minden műveletét át szeretné írni. Töltse ki, ha csak azt a GraphQL-műveletet.",
+ "map.rewriteTo": "Átírás ide",
+ "map.targetWatermark": "Cél URL (abszolút, nem kötelező *)",
+ "loopback.allow": "Engedélyezés",
+ "loopback.appName": "Alkalmazás neve",
+ "loopback.packageId": "Csomagazonosító",
+ "status.ready": "Kész",
+ "status.searchingBodies": "Törzsek keresése…",
+ "status.proxyStopped": "A proxy leállt",
+ "status.proxyRunning": "A proxy ezen fut: {0}",
+ "trust.health.trusted": "CA megbízható",
+ "trust.health.untrusted": "CA nem megbízható"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.id.json b/src/Titanium.Inspector/Localization/strings.id.json
new file mode 100644
index 000000000..05fc3bfc0
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.id.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Berkas",
+ "menu.exportAllHar": "Ekspor semua HAR…",
+ "menu.exportSelectedHar": "Ekspor HAR terpilih…",
+ "menu.importHar": "Impor HAR…",
+ "menu.exportAllArchive": "Ekspor semua arsip…",
+ "menu.exportSelectedArchive": "Ekspor arsip terpilih…",
+ "menu.importArchive": "Impor arsip…",
+ "menu.exit": "Keluar",
+ "menu.capture": "Tangkap",
+ "menu.startProxy": "Mulai proksi",
+ "menu.stopProxy": "Hentikan proksi",
+ "menu.capturing": "Sedang menangkap",
+ "menu.clearSessions": "Hapus sesi",
+ "menu.removeSelected": "Hapus yang dipilih",
+ "menu.autoStartCapture": "Mulai tangkap otomatis",
+ "menu.autoSystemProxy": "Proksi sistem otomatis saat mulai",
+ "menu.decryptHttps": "Dekripsi HTTPS",
+ "menu.systemProxy": "Proksi sistem",
+ "menu.captureLocal": "Tangkap lalu lintas lokal",
+ "menu.allowStoreApps": "Izinkan aplikasi toko…",
+ "menu.installCa": "Pasang CA akar (pengguna saat ini)",
+ "menu.removeCa": "Hapus CA akar (pengguna saat ini)",
+ "menu.rotateCa": "Hapus dan pasang ulang CA akar…",
+ "menu.removeOldCas": "Hapus CA akar lama…",
+ "menu.exportCa": "Ekspor CA akar…",
+ "menu.trustFirefox": "Percayai CA di Firefox…",
+ "menu.deviceCa": "Siapkan CA perangkat eksternal",
+ "menu.tools": "Alat",
+ "menu.composer": "Penyusun…",
+ "menu.breakpoints": "Titik henti…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Skrip…",
+ "menu.mapRemote": "Petakan jarak jauh…",
+ "menu.options": "Opsi",
+ "menu.theme": "Tema",
+ "menu.themeLight": "Terang",
+ "menu.themeDark": "Gelap",
+ "menu.themeAutomatic": "Otomatis",
+ "menu.language": "Bahasa",
+ "menu.languageAutomatic": "Otomatis",
+ "menu.columns": "Kolom",
+ "menu.col.id": "Nomor",
+ "menu.col.method": "Metode",
+ "menu.col.status": "Status",
+ "menu.col.host": "Host",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protokol",
+ "menu.col.duration": "Durasi",
+ "menu.col.ttfb": "Tunggu (TTFB)",
+ "menu.col.size": "Ukuran",
+ "menu.col.process": "Proses",
+ "menu.col.started": "Dimulai",
+ "menu.col.scheme": "Skema",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Atur ulang kolom",
+ "menu.sessionRetention": "Retensi sesi…",
+ "menu.excludedHosts": "Host yang dikecualikan…",
+ "menu.excludedHostsTip": "Daftar lewati dekripsi HTTPS dan aturan pintas sistem operasi",
+ "menu.ignoreCerts": "Abaikan sertifikat server yang tidak aman",
+ "menu.addVia": "Tambahkan header Via",
+ "menu.addViaTip": "Tambahkan Via: … titanium-web-proxy pada lalu lintas yang dicegat (RFC 9110). Mematikan menonaktifkan penyisipan dan deteksi loop Via.",
+ "menu.logging": "Pencatatan…",
+ "menu.resetSettings": "Atur ulang pengaturan Inspector…",
+ "menu.help": "Bantuan",
+ "menu.checkUpdates": "Periksa pembaruan…",
+ "menu.checkUpdatesStartup": "Periksa pembaruan saat mulai",
+ "menu.updateChannel": "Kanal pembaruan",
+ "menu.channelStable": "Stabil",
+ "menu.channelBeta": "Uji coba",
+ "menu.about": "Tentang Titanium Inspector…",
+ "toolbar.searchWatermark": "Cari URL, host, proses… (atau method:GET status:4xx)",
+ "toolbar.searchTip": "Teks biasa mencari URL, host, nama proses, ID proses yang tepat, metode, dan status. Awalan membatasi ke satu bidang: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: juga mencari isi yang tertumpah ke disk. Awali bidang atau kata dengan - untuk mengecualikannya (mis. -host:cursor.sh atau -cursor). Filter mengubah host dan proses yang disembunyikan dengan ruang lebih luas.",
+ "toolbar.filters": "Filter",
+ "toolbar.filtersTip": "Ubah pencarian serta host atau proses yang disembunyikan di jendela yang lebih besar",
+ "toolbar.hideConnect": "Sembunyikan CONNECT",
+ "toolbar.hideConnectTip": "Sembunyikan terowongan HTTPS yang tidak tembus saat Dekripsi HTTPS mati",
+ "toolbar.hideImages": "Sembunyikan gambar",
+ "toolbar.errorsOnly": "Hanya kesalahan",
+ "toolbar.clearFilters": "Hapus filter",
+ "toolbar.hidden": "Tersembunyi",
+ "ctx.replay": "Kirim ulang",
+ "ctx.loadComposer": "Muat ke Penyusun",
+ "ctx.saveRequest": "Simpan isi permintaan…",
+ "ctx.saveResponse": "Simpan isi respons…",
+ "ctx.copyUrl": "Salin URL",
+ "ctx.copyCurl": "Salin sebagai curl",
+ "ctx.copyFetch": "Salin sebagai fetch",
+ "ctx.diff": "Bandingkan yang dipilih…",
+ "ctx.filterHost": "Saring menurut host",
+ "ctx.hideHost": "Sembunyikan host",
+ "ctx.filterProcess": "Saring menurut proses",
+ "ctx.hideProcess": "Sembunyikan proses",
+ "ctx.excludeHost": "Kecualikan host…",
+ "ctx.excludeHostTip": "Hentikan dekripsi HTTPS host ini. Baris tetap di daftar; gunakan Sembunyikan host untuk mengeluarkannya dari tampilan.",
+ "grid.duration": "Durasi (ms)",
+ "grid.wait": "Tunggu (ms)",
+ "pane.inspect": "Periksa",
+ "pane.composer": "Penyusun",
+ "pane.breakpoints": "Titik henti",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Skrip",
+ "pane.mapRemote": "Peta jarak jauh",
+ "pane.closeTip": "Tutup panel",
+ "inspect.empty": "Pilih satu sesi di kisi untuk memeriksa header dan isi permintaan serta respons.",
+ "common.ok": "Oke",
+ "common.cancel": "Batal",
+ "common.save": "Simpan",
+ "common.apply": "Terapkan",
+ "common.remove": "Hapus",
+ "common.browse": "Telusuri…",
+ "common.openFolder": "Buka folder",
+ "common.forget": "Lupakan",
+ "common.close": "Tutup",
+ "loopback.window": "Izinkan aplikasi toko memakai proksi ini",
+ "loopback.checkAll": "Centang semua",
+ "loopback.uncheckAll": "Hapus semua centang",
+ "loopback.filterWatermark": "Saring menurut nama aplikasi…",
+ "loopback.clearAll": "Hapus semua",
+ "trust.macWindow": "Konfirmasi kepercayaan di Keychain Access",
+ "trust.openKeychain": "Buka Keychain Access",
+ "trust.notNow": "Jangan sekarang",
+ "trust.recoveryTitle": "Kepercayaan CA akar",
+ "trust.macWaitPlaceholder": "Menunggu kepercayaan SSL…",
+ "window.about": "Tentang Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Hak cipta © Jehonathan Thomas",
+ "about.license": "Dilisensikan di bawah PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Detail lisensi",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filter",
+ "filters.search": "Cari",
+ "filters.searchHelp": "Pencarian yang sama dengan bilah alat, dengan ruang lebih luas. Host dan proses yang disembunyikan tercantum di bawah, bukan di kotak ini.",
+ "filters.searchWatermark": "URL, host, proses, method:GET, status:4xx…",
+ "filters.hideHeading": "Sembunyikan dari daftar",
+ "filters.hideHelp": "Baris tetap tertangkap. Ini hanya menyembunyikannya di daftar. Untuk menghentikan dekripsi HTTPS, gunakan Kecualikan host…",
+ "filters.hosts": "Host",
+ "filters.addHostWatermark": "Tambahkan host untuk disembunyikan",
+ "filters.addHost": "Tambahkan host",
+ "filters.processes": "Proses",
+ "filters.addProcessWatermark": "Tambahkan proses untuk disembunyikan",
+ "filters.addProcess": "Tambahkan proses",
+ "filters.processSpace": "Nama yang berisi spasi dipendekkan pada kata pertama, sehingga nama lain yang mengandung kata itu juga dapat tersembunyi.",
+ "window.confirm": "Konfirmasi",
+ "window.excludeHost": "Kecualikan host",
+ "exclude.action": "Kecualikan",
+ "exclude.help": "Host ini tetap muncul di daftar sesi. Inspector tidak akan mencoba membaca HTTPS-nya.",
+ "window.logging": "Pencatatan",
+ "logging.help": "Tulis pesan diagnostik untuk pemecahan masalah. Perubahan langsung berlaku.",
+ "logging.enable": "Aktifkan pencatatan",
+ "logging.writeFile": "Tulis log ke berkas",
+ "logging.detail": "Tingkat detail",
+ "logging.detailHelp": "Error = hanya masalah. Warning / Information = lebih banyak konteks. Debug = sangat rinci.",
+ "logging.path": "Jalur berkas log",
+ "window.excludedHosts": "Host yang dikecualikan",
+ "excluded.reset": "Atur ulang ke bawaan",
+ "excluded.bypass": "Lewati proksi (sistem operasi)",
+ "excluded.bypassHelp": "Saat proksi sistem aktif, lalu lintas tidak pernah sampai ke Inspector. Diisi awal dengan host identitas Microsoft / SSO / RDP. Menghapusnya saat proksi sistem aktif dapat merusak masuk RDP.",
+ "excluded.notDecrypted": "Host yang tidak didekripsi",
+ "excluded.notDecryptedHelp": "Saat Dekripsi HTTPS aktif, CONNECT tetap terlihat; TLS tetap tidak tembus. Diisi awal dengan host penyematan sertifikat (Dropbox, Webex).",
+ "excluded.learnHeading": "Otomatis tidak mendekripsi saat dekripsi gagal",
+ "excluded.learn": "Pelajari host yang TLS asal gagal saat dekripsi",
+ "excluded.learnHelp": "Saat TLS asal gagal berulang saat dekripsi, atau server asal mengembalikan 403/429, Inspector berhenti mendekripsi host itu untuk koneksi berikutnya dalam sesi ini. Daftar dibatasi dan dilupakan saat mulai ulang kecuali Anda menaikkan.",
+ "excluded.learnPaused": "Pembelajaran dijeda — entri yang ada tetap sampai dilupakan.",
+ "excluded.noneLearned": "Belum ada host yang dipelajari.",
+ "excluded.promote": "Naikkan ke host yang tidak didekripsi",
+ "excluded.clearLearned": "Hapus semua yang dipelajari",
+ "window.retention": "Retensi sesi",
+ "retention.max": "Jumlah maksimum sesi yang disimpan",
+ "retention.maxHelp": "Berapa banyak permintaan yang tetap di daftar sesi. Jika melebihi ini, baris tertua keluar dari daftar tetapi tetap di disk sampai Hapus sesi atau batas ruang disk menghapusnya.",
+ "retention.cache": "Folder cache",
+ "retention.openCache": "Buka folder cache",
+ "retention.clearCache": "Hapus cache sesi tersimpan…",
+ "retention.advanced": "Lanjutan",
+ "retention.disk": "Ruang disk untuk sesi tersimpan (MB)",
+ "retention.diskHelp": "Ruang maksimum untuk semua sesi tersimpan di disk (semua jalankan Inspector). Setiap jalankan memakai subfolder bertanda waktu; jika melebihi ini, berkas HAR tertua dihapus lebih dulu. Folder jalankan yang kosong dihapus.",
+ "loopback.intro": "Aplikasi Windows Store / UWP secara bawaan diblokir dari localhost. Centang aplikasi yang harus memakai Inspector, lalu Terapkan. Setelah Terapkan, mulai ulang setiap aplikasi (keluar sepenuhnya). Inspector harus berjalan dengan proksi sistem aktif. Hapus semua menghapus setiap entri izinkan.",
+ "loopback.closedUnchanged": "Aplikasi toko tidak berubah.",
+ "loopback.proxyStopped": "Mulai proksi dan nyalakan proksi sistem. Aplikasi toko tidak dapat ditangkap sampai keduanya aktif.",
+ "loopback.systemProxyOff": "Nyalakan proksi sistem (menu Tangkap). Daftar izinkan hanya membuat aplikasi toko dapat mencapai localhost; mereka tetap mengikuti proksi sistem.",
+ "loopback.refreshing": "Menyegarkan proksi sistem agar aplikasi yang berjalan tersambung kembali…",
+ "loopback.unchangedCount": "Daftar izinkan sudah cocok: {0}.",
+ "loopback.allowed": "Diizinkan: {0}.",
+ "loopback.allowedRefreshed": " Proksi sistem disegarkan agar aplikasi yang berjalan tersambung kembali. Jika lalu lintas masih tidak muncul, keluar sepenuhnya lalu buka lagi aplikasinya.",
+ "loopback.allowedProxyStopped": " Mulai proksi dan nyalakan proksi sistem, lalu keluar sepenuhnya dan buka lagi aplikasinya.",
+ "loopback.allowedSystemProxyOff": " Nyalakan proksi sistem, lalu keluar sepenuhnya dan buka lagi aplikasinya.",
+ "loopback.allowedReady": " Keluar sepenuhnya lalu buka lagi aplikasi untuk menangkap lalu lintas.",
+ "loopback.clearedRefreshed": "Semua pengecualian loopback dihapus. Proksi sistem disegarkan agar aplikasi yang berjalan tersambung kembali.",
+ "loopback.clearedReady": "Semua pengecualian loopback dihapus. Keluar sepenuhnya lalu buka lagi aplikasi yang memakai Inspector.",
+ "loopback.cleared": "Semua pengecualian loopback dihapus.",
+ "trust.macWaitBody": "Lihat Informasi pada Keychain dapat sudah menampilkan Selalu Percaya walaupun kebijakan SSL belum disimpan (Chrome dan Inspector masih menganggap CA ini tidak tepercaya).\n\nPaksa penyimpanan:\n1. Keychain Access → masuk → Sertifikat → klik dua kali Titanium Root Certificate Authority\n2. Luaskan Kepercayaan\n3. Atur Saat menggunakan sertifikat ini menjadi Gunakan bawaan sistem, lalu ubah lagi menjadi Selalu Percaya\n4. Tutup Lihat Informasi — Anda harus mendapat permintaan kata sandi; itulah yang menulis kebijakan kepercayaan SSL yang sebenarnya\n\nJendela ini tertutup otomatis saat kebijakan itu terdeteksi. Jika sudah disimpan, klik Saya sudah menyimpan Selalu Percaya.",
+ "trust.macWaitStatus": "Menunggu sertifikat di Keychain…",
+ "trust.macWaitInKeychain": "Menunggu kebijakan SSL yang tersimpan (alihkan Selalu Percaya, tutup Lihat Informasi, masukkan kata sandi)…",
+ "trust.macNotSaved": "Tampilan Selalu Percaya belum cukup — alihkan Gunakan bawaan sistem menjadi Selalu Percaya, tutup Lihat Informasi, masukkan kata sandi, lalu coba Pasang CA akar / Dekripsi HTTPS lagi",
+ "trust.macConfirmSaved": "Saya sudah menyimpan Selalu Percaya",
+ "trust.exportCa": "Ekspor CA",
+ "trust.install.mac": "Dekripsi HTTPS memerlukan kepercayaan pada CA akar Titanium Inspector di Keychain Access (rantai kunci masuk). Pasang sekarang?",
+ "trust.install.linux": "Dekripsi HTTPS memerlukan kepercayaan pada CA akar Titanium Inspector di penyimpanan sertifikat pengguna (NSS). Pasang sekarang?",
+ "trust.install.windows": "Dekripsi HTTPS memerlukan kepercayaan pada CA akar Titanium Inspector di penyimpanan Akar Tepercaya pengguna saat ini. Pasang sekarang?\n\nWindows dapat menampilkan dialog keamanan Ya/Tidak Akar Tepercaya (bukan UAC) — pilih Ya untuk memercayai CA.",
+ "trust.install.other": "Dekripsi HTTPS memerlukan kepercayaan pada CA akar Titanium Inspector di komputer ini. Pasang sekarang?",
+ "trust.remove.mac": "Hapus CA akar Titanium Inspector dari Keychain? Dekripsi HTTPS akan dimatikan.",
+ "trust.remove.linux": "Hapus CA akar Titanium Inspector dari penyimpanan sertifikat pengguna (NSS)? Dekripsi HTTPS akan dimatikan.",
+ "trust.remove.windows": "Hapus CA akar Titanium Inspector dari penyimpanan Akar Tepercaya pengguna saat ini? Dekripsi HTTPS akan dimatikan.",
+ "trust.remove.other": "Hapus CA akar Titanium Inspector? Dekripsi HTTPS akan dimatikan.",
+ "trust.elevate.mac": "Kepercayaan tingkat pengguna gagal atau tidak cukup. Lanjutkan untuk menampilkan permintaan kata sandi admin macOS? Batal membiarkan pengaturan sertifikat tidak berubah.",
+ "trust.elevate.linux": "Kepercayaan tingkat pengguna gagal atau tidak cukup. Lanjutkan untuk menampilkan permintaan admin polkit? Batal membiarkan pengaturan sertifikat tidak berubah.",
+ "trust.elevate.windows": "Kepercayaan tingkat pengguna gagal atau tidak cukup. Lanjutkan untuk menampilkan UAC? Batal membiarkan pengaturan sertifikat tidak berubah.",
+ "trust.elevate.other": "Kepercayaan tingkat pengguna gagal atau tidak cukup. Lanjutkan dengan permintaan admin? Batal membiarkan pengaturan sertifikat tidak berubah.",
+ "trust.recovery.mac": "\n\nLanjutkan untuk menampilkan permintaan kata sandi admin macOS? Jangan sekarang membiarkan pengaturan sertifikat tidak berubah.",
+ "trust.recovery.linux": "\n\nLanjutkan untuk menampilkan permintaan admin polkit? Jangan sekarang membiarkan pengaturan sertifikat tidak berubah.",
+ "trust.recovery.windows": "\n\nLanjutkan untuk menampilkan UAC? Jangan sekarang membiarkan pengaturan sertifikat tidak berubah.",
+ "trust.recovery.other": "\n\nLanjutkan dengan permintaan admin? Jangan sekarang membiarkan pengaturan sertifikat tidak berubah.",
+ "trust.hosts.mac": "Pintas sistem operasi memerlukan Tangkap → Proksi sistem (memakai pengaturan proksi jaringan macOS). Aturan hanya terowongan berlaku untuk setiap klien yang mencapai Inspector. Bawaan pabrik diisi ke daftar di bawah — ubah bebas atau atur ulang.",
+ "trust.hosts.linux": "Pintas sistem operasi memerlukan Tangkap → Proksi sistem (memakai pengaturan proksi desktop / lingkungan). Aturan hanya terowongan berlaku untuk setiap klien yang mencapai Inspector. Bawaan pabrik diisi ke daftar di bawah — ubah bebas atau atur ulang.",
+ "trust.hosts.windows": "Pintas sistem operasi memerlukan Tangkap → Proksi sistem (memakai WinINET). Aturan hanya terowongan berlaku untuk setiap klien yang mencapai Inspector. Bawaan pabrik diisi ke daftar di bawah — ubah bebas atau atur ulang.",
+ "trust.hosts.other": "Pintas sistem operasi memerlukan Tangkap → Proksi sistem. Aturan hanya terowongan berlaku untuk setiap klien yang mencapai Inspector. Bawaan pabrik diisi ke daftar di bawah — ubah bebas atau atur ulang.",
+ "trust.localhost.mac": "Saat proksi sistem aktif, kirim localhost melalui Inspector. Mati menambahkan localhost ke daftar pintas proksi macOS.",
+ "trust.localhost.linux": "Saat proksi sistem aktif, kirim localhost melalui Inspector. Mati menambahkan localhost ke NO_PROXY.",
+ "trust.localhost.windows": "Saat proksi sistem aktif, kirim localhost melalui Inspector (WinINET <-loopback>). Mati membuat loopback melewati proksi.",
+ "trust.localhost.other": "Saat proksi sistem aktif, kirim localhost melalui Inspector.",
+ "trust.status.missing": "CA akar belum dipercaya — coba lagi, atau Ekspor CA",
+ "trust.status.cancelled": "Pemasangan CA akar dibatalkan",
+ "trust.status.certutil": "Alat sertifikat peramban tidak ada — pasang, coba lagi, atau Ekspor CA",
+ "trust.status.homebrew": "Homebrew diperlukan untuk memasang alat sertifikat — Ekspor CA untuk memercayai secara manual",
+ "trust.status.macConfirm": "Atur Selalu Percaya untuk CA akar Titanium Inspector di Keychain Access",
+ "trust.status.keychain": "Kepercayaan Keychain gagal — coba lagi, atau Ekspor CA dan percayai secara manual",
+ "trust.fail.keychainTitle": "Konfirmasi kepercayaan di Keychain",
+ "trust.fail.continueKeychain": "Lanjutkan di Keychain Access",
+ "trust.fail.toolsTitle": "Perlu alat sertifikat",
+ "trust.fail.toolsLinux": "Inspector memerlukan certutil (alat NSS) untuk menyelesaikan kepercayaan pada CA akar.",
+ "trust.fail.toolsOther": "Inspector memerlukan alat sertifikat peramban untuk menyelesaikan kepercayaan pada CA akar.",
+ "trust.fail.tryAgain": "Coba lagi",
+ "trust.fail.homebrewBody": "Homebrew diperlukan untuk memasang alat sertifikat. Ekspor CA untuk memercayainya secara manual.",
+ "trust.fail.title": "Belum dapat mendekripsi HTTPS",
+ "trust.fail.body": "Komputer ini belum memercayai CA akar Titanium Inspector.",
+ "toolbar.throttle": "Pembatasan",
+ "toolbar.throttleTip": "Tambahkan latensi dan pembentukan lebar pita saat menangkap (penulisan isi / bingkai WebSocket). Mati secara bawaan.",
+ "toolbar.bindWatermark": "*, localhost, atau IP",
+ "toolbar.bindTip": "127.0.0.1 atau localhost = hanya PC ini. 0.0.0.0 atau * = semua adaptor jaringan (termasuk localhost).",
+ "toolbar.portWatermark": "*, atau port",
+ "toolbar.portTip": "* atau kosong = port yang dipilih OS (port sebenarnya muncul setelah mulai). Selain itu 1–65535.",
+ "toolbar.listeningTip": "Proksi sedang mendengarkan",
+ "toolbar.trustHealthTip": "Status kepercayaan CA akar untuk Dekripsi HTTPS. Pasang atau percayai CA jika statusnya CA tidak dipercaya.",
+ "chip.process": "proses",
+ "inspect.request": "Permintaan",
+ "inspect.requestTip": "Header dan isi permintaan",
+ "inspect.copyHeaders": "Salin header",
+ "inspect.resizeTip": "Seret untuk mengubah ukuran. Klik dua kali untuk mengatur ulang.",
+ "inspect.pretty": "Rapi",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Tampilkan isi dalam bentuk Hex",
+ "inspect.saveRequest": "Simpan permintaan…",
+ "inspect.response": "Respons",
+ "inspect.responseTip": "Header dan isi respons",
+ "inspect.saveResponse": "Simpan respons…",
+ "inspect.diff": "Perbedaan",
+ "inspect.frames": "Bingkai WS",
+ "inspect.framesHelp": "Bingkai WebSocket langsung untuk sesi ini (arah, opcode, pratinjau data).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events yang diurai dari isi respons.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Tampilkan header",
+ "inspect.hideHeaders": "Sembunyikan header",
+ "inspect.headers": "Header ({0})",
+ "inspect.prettyTip": "Inden JSON, XML, dan HTML",
+ "inspect.prettyHexTip": "Tidak berlaku di tampilan Hex",
+ "inspect.emptyBody": "(kosong)",
+ "inspect.noRequestBody": "Tidak ada isi permintaan",
+ "inspect.waiting": "Menunggu respons…",
+ "composer.help": "Susun dan kirim permintaan melalui proksi. Muat dari yang dipilih menyalin sesi saat ini.",
+ "composer.method": "Metode",
+ "composer.url": "URL",
+ "composer.headers": "Header (Nama: Nilai per baris)",
+ "composer.body": "Isi",
+ "composer.loadSelected": "Muat dari yang dipilih",
+ "composer.loadBody": "Muat isi dari file…",
+ "composer.send": "Kirim",
+ "bp.help": "Jeda permintaan klien yang cocok untuk mengedit isi, melanjutkan, atau membatalkan. Satu jeda pada satu waktu; otomatis berlanjut setelah 120s. Menghapus centang Diaktifkan melanjutkan permintaan yang dijeda.",
+ "bp.enabled": "Diaktifkan",
+ "bp.breakOnResponse": "Henti pada respons",
+ "bp.match": "Cocokkan",
+ "bp.urlWatermark": "Filter URL (* = semua, mis. *api*/users*)",
+ "bp.graphqlWatermark": "Hanya operasi GraphQL ini (opsional)",
+ "bp.graphqlTip": "Filter tambahan pada isi permintaan klien. Cocok dengan JSON operationName atau kueri bernama. Kosongkan untuk mencocokkan setiap operasi pada URL.",
+ "bp.fromSelected": "Dari sesi yang dipilih",
+ "bp.fromSelectedTip": "Salin nama operasi GraphQL dari permintaan sesi yang dipilih.",
+ "bp.graphqlHelp": "Kosongkan kotak GraphQL untuk mencocokkan setiap operasi. Isi (mis. GetUser) untuk menjeda hanya permintaan klien itu pada URL di atas. Henti pada respons tetap memakai filter URL.",
+ "bp.editWatermark": "Edit isi (Terapkan edit isi, lalu Lanjutkan)",
+ "bp.applyEdit": "Terapkan edit isi",
+ "bp.continue": "Lanjutkan",
+ "bp.abort": "Batalkan",
+ "ar.help": "Kembalikan respons palsu sebelum server yang sebenarnya. Cocokkan menentukan permintaan klien mana yang kena aturan; bidang di bawahnya adalah yang Anda kirim balik.",
+ "ar.enabled": "Diaktifkan (sebelum titik henti)",
+ "ar.urlWatermark": "Cocokkan URL (karakter pengganti *)",
+ "ar.graphqlHelp": "URL yang sama, operasi GraphQL yang berbeda dapat memakai aturan berbeda. Kosongkan untuk mencocokkan setiap operasi.",
+ "ar.respondWith": "Respons dengan",
+ "ar.statusTip": "Status HTTP. Kosong = 200. Gunakan 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "File Map Local (opsional)",
+ "ar.bodyWatermark": "Isi respons (dipakai saat Map Local kosong)",
+ "ar.add": "Tambah aturan",
+ "ar.update": "Perbarui aturan",
+ "ar.delete": "Hapus aturan",
+ "script.intro": "Satu perintah per baris, pada setiap sesi yang ditangkap. Ini bukan JavaScript atau C# — ketik hanya perintah di bawah.",
+ "script.what": "Yang dapat Anda ketik",
+ "script.setHeaderHelp": "Tambah atau ganti header. Lalu lintas tetap berlanjut ke server.",
+ "script.setStatusHelp": "Pada permintaan: jawab sekarang dan lewati server. Pada respons: ubah status yang dilihat klien.",
+ "script.abortHelp": "Blokir dengan 403 Dilarang. Tambahkan baris set-status untuk memilih kode lain.",
+ "script.comment": "Awali baris dengan # atau // untuk komentar. Perintah dapat digabung; letakkan masing-masing di barisnya sendiri.",
+ "script.onRequest": "Pada permintaan",
+ "script.onResponse": "Pada respons",
+ "script.requestSkips": "abort atau set-status di sini melewati AutoResponder, titik henti, dan asal.",
+ "map.help": "Tulis ulang permintaan klien yang cocok ke asal lain sebelum server yang sebenarnya. Gunakan satu * pada kecocokan dan target untuk mempertahankan akhiran jalur atau kueri. Berjalan setelah AutoResponder / Map Local.",
+ "map.graphqlHelp": "Kosongkan untuk menulis ulang setiap operasi pada URL. Isi untuk menulis ulang hanya operasi GraphQL itu.",
+ "map.rewriteTo": "Tulis ulang ke",
+ "map.targetWatermark": "URL target (absolut, * opsional)",
+ "loopback.allow": "Izinkan",
+ "loopback.appName": "Nama aplikasi",
+ "loopback.packageId": "ID paket",
+ "status.ready": "Siap",
+ "status.searchingBodies": "Mencari isi…",
+ "status.proxyStopped": "Proksi berhenti",
+ "status.proxyRunning": "Proksi berjalan di {0}",
+ "trust.health.trusted": "CA dipercaya",
+ "trust.health.untrusted": "CA tidak dipercaya"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.it.json b/src/Titanium.Inspector/Localization/strings.it.json
new file mode 100644
index 000000000..959dc1454
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.it.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "File",
+ "menu.exportAllHar": "Esporta tutto in HAR…",
+ "menu.exportSelectedHar": "Esporta la selezione in HAR…",
+ "menu.importHar": "Importa HAR…",
+ "menu.exportAllArchive": "Esporta tutto l’archivio…",
+ "menu.exportSelectedArchive": "Esporta l’archivio della selezione…",
+ "menu.importArchive": "Importa archivio…",
+ "menu.exit": "Esci",
+ "menu.capture": "Acquisizione",
+ "menu.startProxy": "Avvia proxy",
+ "menu.stopProxy": "Arresta proxy",
+ "menu.capturing": "Acquisizione in corso",
+ "menu.clearSessions": "Cancella sessioni",
+ "menu.removeSelected": "Rimuovi selezione",
+ "menu.autoStartCapture": "Avvia l’acquisizione automaticamente",
+ "menu.autoSystemProxy": "Proxy di sistema automatico all’avvio",
+ "menu.decryptHttps": "Decifra HTTPS",
+ "menu.systemProxy": "Proxy di sistema",
+ "menu.captureLocal": "Acquisisci il traffico locale",
+ "menu.allowStoreApps": "Consenti alle app dello Store…",
+ "menu.installCa": "Installa CA radice (utente corrente)",
+ "menu.removeCa": "Rimuovi CA radice (utente corrente)",
+ "menu.rotateCa": "Cancella e reinstalla la CA radice…",
+ "menu.removeOldCas": "Rimuovi le vecchie CA radice…",
+ "menu.exportCa": "Esporta CA radice…",
+ "menu.trustFirefox": "Considera attendibile la CA in Firefox…",
+ "menu.deviceCa": "Configura la CA di un dispositivo esterno",
+ "menu.tools": "Strumenti",
+ "menu.composer": "Componi…",
+ "menu.breakpoints": "Punti di interruzione…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Script…",
+ "menu.mapRemote": "Mappa remota…",
+ "menu.options": "Opzioni",
+ "menu.theme": "Tema",
+ "menu.themeLight": "Chiaro",
+ "menu.themeDark": "Scuro",
+ "menu.themeAutomatic": "Automatico",
+ "menu.language": "Lingua",
+ "menu.languageAutomatic": "Automatico",
+ "menu.columns": "Colonne",
+ "menu.col.id": "Id",
+ "menu.col.method": "Metodo",
+ "menu.col.status": "Stato",
+ "menu.col.host": "Host",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protocollo",
+ "menu.col.duration": "Durata",
+ "menu.col.ttfb": "Attesa (TTFB)",
+ "menu.col.size": "Dimensione",
+ "menu.col.process": "Processo",
+ "menu.col.started": "Avviato",
+ "menu.col.scheme": "Schema",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Reimposta colonne",
+ "menu.sessionRetention": "Conservazione sessioni…",
+ "menu.excludedHosts": "Host esclusi…",
+ "menu.excludedHostsTip": "Elenchi di esclusione della decifratura HTTPS e regole per aggirare il sistema",
+ "menu.ignoreCerts": "Ignora i certificati server non sicuri",
+ "menu.addVia": "Aggiungi intestazione Via",
+ "menu.addViaTip": "Aggiunge Via: … titanium-web-proxy al traffico intercettato (RFC 9110). Se disattivato, l’inserimento e il rilevamento dei loop Via sono disabilitati.",
+ "menu.logging": "Registrazione…",
+ "menu.resetSettings": "Reimposta le impostazioni di Inspector…",
+ "menu.help": "Aiuto",
+ "menu.checkUpdates": "Controlla aggiornamenti…",
+ "menu.checkUpdatesStartup": "Controlla aggiornamenti all’avvio",
+ "menu.updateChannel": "Canale di aggiornamento",
+ "menu.channelStable": "Stabile",
+ "menu.channelBeta": "Beta",
+ "menu.about": "Informazioni su Titanium Inspector…",
+ "toolbar.searchWatermark": "Cerca URL, host, processo… (o method:GET status:4xx)",
+ "toolbar.searchTip": "Il testo libero cerca URL, host, nome del processo, ID esatto del processo, metodo e stato. I prefissi limitano a un campo: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: cerca anche i corpi riversati su disco. Anteponi - a un campo o a una parola per escluderlo (ad es. -host:cursor.sh o -cursor). Filtri modifica gli host e i processi nascosti con più spazio.",
+ "toolbar.filters": "Filtri",
+ "toolbar.filtersTip": "Modifica la ricerca e gli host o i processi nascosti in una finestra più grande",
+ "toolbar.hideConnect": "Nascondi CONNECT",
+ "toolbar.hideConnectTip": "Nascondi i tunnel HTTPS opachi quando Decifra HTTPS è disattivato",
+ "toolbar.hideImages": "Nascondi immagini",
+ "toolbar.errorsOnly": "Solo errori",
+ "toolbar.clearFilters": "Cancella filtri",
+ "toolbar.hidden": "Nascosti",
+ "ctx.replay": "Ripeti",
+ "ctx.loadComposer": "Carica in Componi",
+ "ctx.saveRequest": "Salva il corpo della richiesta…",
+ "ctx.saveResponse": "Salva il corpo della risposta…",
+ "ctx.copyUrl": "Copia URL",
+ "ctx.copyCurl": "Copia come curl",
+ "ctx.copyFetch": "Copia come fetch",
+ "ctx.diff": "Confronta selezione…",
+ "ctx.filterHost": "Filtra per host",
+ "ctx.hideHost": "Nascondi host",
+ "ctx.filterProcess": "Filtra per processo",
+ "ctx.hideProcess": "Nascondi processo",
+ "ctx.excludeHost": "Escludi host…",
+ "ctx.excludeHostTip": "Interrompi la decifratura HTTPS di questo host. Le righe restano nell’elenco; usa Nascondi host per toglierle dalla vista.",
+ "grid.duration": "Durata (ms)",
+ "grid.wait": "Attesa (ms)",
+ "pane.inspect": "Ispeziona",
+ "pane.composer": "Componi",
+ "pane.breakpoints": "Punti di interruzione",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Script",
+ "pane.mapRemote": "Mappa remota",
+ "pane.closeTip": "Chiudi riquadro",
+ "inspect.empty": "Seleziona una sessione nella griglia per ispezionare intestazioni e corpi di richiesta e risposta.",
+ "common.ok": "OK",
+ "common.cancel": "Annulla",
+ "common.save": "Salva",
+ "common.apply": "Applica",
+ "common.remove": "Rimuovi",
+ "common.browse": "Sfoglia…",
+ "common.openFolder": "Apri cartella",
+ "common.forget": "Dimentica",
+ "common.close": "Chiudi",
+ "loopback.window": "Consenti alle app dello Store di usare questo proxy",
+ "loopback.checkAll": "Seleziona tutto",
+ "loopback.uncheckAll": "Deseleziona tutto",
+ "loopback.filterWatermark": "Filtra per nome app…",
+ "loopback.clearAll": "Cancella tutto",
+ "trust.macWindow": "Conferma l’attendibilità in Keychain Access",
+ "trust.openKeychain": "Apri Keychain Access",
+ "trust.notNow": "Non ora",
+ "trust.recoveryTitle": "Attendibilità della CA radice",
+ "trust.macWaitPlaceholder": "In attesa dell’attendibilità SSL…",
+ "window.about": "Informazioni su Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Copyright © Jehonathan Thomas",
+ "about.license": "Concesso in licenza secondo la PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Dettagli della licenza",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filtri",
+ "filters.search": "Ricerca",
+ "filters.searchHelp": "La stessa ricerca della barra degli strumenti, con più spazio. Gli host e i processi nascosti sono elencati sotto, non in questa casella.",
+ "filters.searchWatermark": "URL, host, processo, method:GET, status:4xx…",
+ "filters.hideHeading": "Nascondi dall’elenco",
+ "filters.hideHelp": "Le righe restano acquisite. Questo le nasconde solo nell’elenco. Per interrompere la decifratura HTTPS, usa Escludi host…",
+ "filters.hosts": "Host",
+ "filters.addHostWatermark": "Aggiungi un host da nascondere",
+ "filters.addHost": "Aggiungi host",
+ "filters.processes": "Processi",
+ "filters.addProcessWatermark": "Aggiungi un processo da nascondere",
+ "filters.addProcess": "Aggiungi processo",
+ "filters.processSpace": "Un nome con uno spazio viene troncato alla prima parola e può nascondere anche altri nomi che contengono quella parola.",
+ "window.confirm": "Conferma",
+ "window.excludeHost": "Escludi host",
+ "exclude.action": "Escludi",
+ "exclude.help": "Questo host continuerà a comparire nell’elenco delle sessioni. Inspector non tenterà di leggere il suo HTTPS.",
+ "window.logging": "Registrazione",
+ "logging.help": "Scrivi messaggi diagnostici per la risoluzione dei problemi. Le modifiche si applicano subito.",
+ "logging.enable": "Abilita la registrazione",
+ "logging.writeFile": "Scrivi il registro in un file",
+ "logging.detail": "Livello di dettaglio",
+ "logging.detailHelp": "Error = solo problemi. Warning / Information = più contesto. Debug = molto dettagliato.",
+ "logging.path": "Percorso del file di registro",
+ "window.excludedHosts": "Host esclusi",
+ "excluded.reset": "Ripristina predefiniti",
+ "excluded.bypass": "Ignora proxy (sistema)",
+ "excluded.bypassHelp": "Il traffico non raggiunge mai Inspector quando il proxy di sistema è attivo. Precompilato con host di identità Microsoft, SSO e RDP. Rimuoverli può interrompere l’accesso RDP mentre il proxy di sistema è attivo.",
+ "excluded.notDecrypted": "Host non decifrati",
+ "excluded.notDecryptedHelp": "CONNECT resta visibile; TLS resta opaco quando Decifra HTTPS è attivo. Precompilato con host che fissano il certificato (Dropbox, Webex).",
+ "excluded.learnHeading": "Non decifrare automaticamente se la decifratura fallisce",
+ "excluded.learn": "Apprendi gli host il cui TLS di origine fallisce durante la decifratura",
+ "excluded.learnHelp": "Quando il TLS di origine fallisce ripetutamente durante la decifratura, o il server di origine restituisce 403/429, Inspector smette di decifrare quell’host per le connessioni successive di questa sessione. L’elenco ha un limite e viene dimenticato al riavvio, a meno che non sposti quegli host tra gli host non decifrati.",
+ "excluded.learnPaused": "Apprendimento in pausa — le voci esistenti restano finché non vengono dimenticate.",
+ "excluded.noneLearned": "Nessun host appreso finora.",
+ "excluded.promote": "Sposta negli host non decifrati",
+ "excluded.clearLearned": "Cancella tutti gli appresi",
+ "window.retention": "Conservazione sessioni",
+ "retention.max": "Numero massimo di sessioni da conservare",
+ "retention.maxHelp": "Quante richieste restano nell’elenco delle sessioni. Oltre questo limite, le righe più vecchie escono dall’elenco ma restano su disco finché Cancella sessioni o il limite di spazio su disco non le rimuove.",
+ "retention.cache": "Cartella cache",
+ "retention.openCache": "Apri cartella cache",
+ "retention.clearCache": "Cancella la cache delle sessioni salvate…",
+ "retention.advanced": "Avanzate",
+ "retention.disk": "Spazio su disco per le sessioni salvate (MB)",
+ "retention.diskHelp": "Spazio massimo per tutte le sessioni salvate su disco (tutte le esecuzioni di Inspector). Ogni esecuzione usa una sottocartella con data e ora; oltre il limite, i file HAR più vecchi vengono eliminati per primi. Le cartelle di esecuzione vuote vengono rimosse.",
+ "loopback.intro": "Le app di Windows Store e UWP sono bloccate da localhost per impostazione predefinita. Seleziona le app che devono usare Inspector, poi Applica. Riavvia ogni app (chiudila del tutto) dopo Applica. Inspector deve essere in esecuzione con il proxy di sistema attivo. Cancella tutto rimuove ogni autorizzazione.",
+ "loopback.closedUnchanged": "App dello Store invariate.",
+ "loopback.proxyStopped": "Avvia il proxy e attiva il proxy di sistema. Le app dello Store non possono essere acquisite finché entrambi non sono attivi.",
+ "loopback.systemProxyOff": "Attiva il proxy di sistema (menu Acquisizione). L’elenco delle autorizzazioni consente alle app dello Store solo di raggiungere localhost; seguono comunque il proxy di sistema.",
+ "loopback.refreshing": "Aggiornamento del proxy di sistema perché le app in esecuzione si riconnettano…",
+ "loopback.unchangedCount": "L’elenco delle autorizzazioni corrisponde già: {0}.",
+ "loopback.allowed": "Consentito: {0}.",
+ "loopback.allowedRefreshed": " Il proxy di sistema è stato aggiornato perché le app in esecuzione si riconnettano. Se il traffico non compare ancora, chiudi del tutto l’app e riaprila.",
+ "loopback.allowedProxyStopped": " Avvia il proxy e attiva il proxy di sistema, poi chiudi del tutto l’app e riaprila.",
+ "loopback.allowedSystemProxyOff": " Attiva il proxy di sistema, poi chiudi del tutto l’app e riaprila.",
+ "loopback.allowedReady": " Chiudi del tutto l’app e riaprila per acquisire il traffico.",
+ "loopback.clearedRefreshed": "Tutte le esenzioni loopback sono state cancellate. Il proxy di sistema è stato aggiornato perché le app in esecuzione si riconnettano.",
+ "loopback.clearedReady": "Tutte le esenzioni loopback sono state cancellate. Chiudi del tutto ogni app che usava Inspector e riaprila.",
+ "loopback.cleared": "Tutte le esenzioni loopback sono state cancellate.",
+ "trust.macWaitBody": "Ottieni informazioni in Keychain Access può già mostrare Fidati sempre anche se i criteri SSL non sono stati salvati (Chrome e Inspector considerano ancora la CA non attendibile).\n\nForza il salvataggio:\n1. Keychain Access → login → Certificati → fai doppio clic su Titanium Root Certificate Authority\n2. Espandi Attendibilità\n3. Imposta Quando si usa questo certificato su Usa i valori predefiniti di sistema, poi riportalo su Fidati sempre\n4. Chiudi Ottieni informazioni — deve comparire la richiesta della password; è quella che scrive i veri criteri di attendibilità SSL\n\nQuesta finestra si chiude da sola quando quei criteri vengono rilevati. Se hai già salvato, fai clic su Ho salvato Fidati sempre.",
+ "trust.macWaitStatus": "In attesa del certificato nel portachiavi…",
+ "trust.macWaitInKeychain": "In attesa dei criteri SSL salvati (imposta Fidati sempre, chiudi Ottieni informazioni, inserisci la password)…",
+ "trust.macNotSaved": "La visualizzazione Fidati sempre non basta — passa a Usa i valori predefiniti di sistema e di nuovo a Fidati sempre, chiudi Ottieni informazioni, inserisci la password, poi riprova Installa CA radice / Decifra HTTPS",
+ "trust.macConfirmSaved": "Ho salvato Fidati sempre",
+ "trust.exportCa": "Esporta CA",
+ "trust.install.mac": "Decifra HTTPS richiede di considerare attendibile la CA radice di Titanium Inspector in Keychain Access (portachiavi login). Installare adesso?",
+ "trust.install.linux": "Decifra HTTPS richiede di considerare attendibile la CA radice di Titanium Inspector nell’archivio certificati dell’utente (NSS). Installare adesso?",
+ "trust.install.windows": "Decifra HTTPS richiede di considerare attendibile la CA radice di Titanium Inspector nell’archivio Autorità di certificazione radice attendibili dell’utente corrente. Installare adesso?\n\nWindows può mostrare una finestra di sicurezza Sì/No per le radici attendibili (non è UAC). Scegli Sì per considerare attendibile la CA.",
+ "trust.install.other": "Decifra HTTPS richiede di considerare attendibile la CA radice di Titanium Inspector su questo computer. Installare adesso?",
+ "trust.remove.mac": "Rimuovere la CA radice di Titanium Inspector dal portachiavi? La decifratura HTTPS verrà disattivata.",
+ "trust.remove.linux": "Rimuovere la CA radice di Titanium Inspector dall’archivio certificati dell’utente (NSS)? La decifratura HTTPS verrà disattivata.",
+ "trust.remove.windows": "Rimuovere la CA radice di Titanium Inspector dall’archivio Autorità di certificazione radice attendibili dell’utente corrente? La decifratura HTTPS verrà disattivata.",
+ "trust.remove.other": "Rimuovere la CA radice di Titanium Inspector? La decifratura HTTPS verrà disattivata.",
+ "trust.elevate.mac": "L’attendibilità a livello utente non è riuscita o era insufficiente. Continuare per mostrare una richiesta di password amministratore di macOS? Annulla lascia invariate le impostazioni dei certificati.",
+ "trust.elevate.linux": "L’attendibilità a livello utente non è riuscita o era insufficiente. Continuare per mostrare una richiesta di amministratore polkit? Annulla lascia invariate le impostazioni dei certificati.",
+ "trust.elevate.windows": "L’attendibilità a livello utente non è riuscita o era insufficiente. Continuare per mostrare UAC? Annulla lascia invariate le impostazioni dei certificati.",
+ "trust.elevate.other": "L’attendibilità a livello utente non è riuscita o era insufficiente. Continuare con una richiesta di amministratore? Annulla lascia invariate le impostazioni dei certificati.",
+ "trust.recovery.mac": "\n\nContinuare per mostrare una richiesta di password amministratore di macOS? Non ora lascia invariate le impostazioni dei certificati.",
+ "trust.recovery.linux": "\n\nContinuare per mostrare una richiesta di amministratore polkit? Non ora lascia invariate le impostazioni dei certificati.",
+ "trust.recovery.windows": "\n\nContinuare per mostrare UAC? Non ora lascia invariate le impostazioni dei certificati.",
+ "trust.recovery.other": "\n\nContinuare con una richiesta di amministratore? Non ora lascia invariate le impostazioni dei certificati.",
+ "trust.hosts.mac": "L’aggiramento del sistema richiede Acquisizione → Proxy di sistema (usa le impostazioni proxy di rete di macOS). Le regole solo per il tunnel valgono per ogni client che raggiunge Inspector. Le impostazioni di fabbrica sono precompilate negli elenchi sotto — modificale liberamente o ripristina.",
+ "trust.hosts.linux": "L’aggiramento del sistema richiede Acquisizione → Proxy di sistema (usa le impostazioni proxy della scrivania o dell’ambiente). Le regole solo per il tunnel valgono per ogni client che raggiunge Inspector. Le impostazioni di fabbrica sono precompilate negli elenchi sotto — modificale liberamente o ripristina.",
+ "trust.hosts.windows": "L’aggiramento del sistema richiede Acquisizione → Proxy di sistema (usa WinINET). Le regole solo per il tunnel valgono per ogni client che raggiunge Inspector. Le impostazioni di fabbrica sono precompilate negli elenchi sotto — modificale liberamente o ripristina.",
+ "trust.hosts.other": "L’aggiramento del sistema richiede Acquisizione → Proxy di sistema. Le regole solo per il tunnel valgono per ogni client che raggiunge Inspector. Le impostazioni di fabbrica sono precompilate negli elenchi sotto — modificale liberamente o ripristina.",
+ "trust.localhost.mac": "Quando il proxy di sistema è attivo, invia localhost tramite Inspector. Se disattivato, localhost viene aggiunto all’elenco di esclusione del proxy di macOS.",
+ "trust.localhost.linux": "Quando il proxy di sistema è attivo, invia localhost tramite Inspector. Se disattivato, localhost viene aggiunto a NO_PROXY.",
+ "trust.localhost.windows": "Quando il proxy di sistema è attivo, invia localhost tramite Inspector (WinINET <-loopback>). Se disattivato, il loopback ignora il proxy.",
+ "trust.localhost.other": "Quando il proxy di sistema è attivo, invia localhost tramite Inspector.",
+ "trust.status.missing": "La CA radice non è ancora attendibile — riprova oppure esporta la CA",
+ "trust.status.cancelled": "Installazione della CA radice annullata",
+ "trust.status.certutil": "Mancano gli strumenti per i certificati del browser — installali, riprova oppure esporta la CA",
+ "trust.status.homebrew": "Homebrew è necessario per installare gli strumenti dei certificati — esporta la CA per considerarla attendibile manualmente",
+ "trust.status.macConfirm": "Imposta Fidati sempre per la CA radice di Titanium Inspector in Keychain Access",
+ "trust.status.keychain": "Attendibilità del portachiavi non riuscita — riprova oppure esporta la CA e considerala attendibile manualmente",
+ "trust.fail.keychainTitle": "Conferma l’attendibilità nel portachiavi",
+ "trust.fail.continueKeychain": "Continua in Keychain Access",
+ "trust.fail.toolsTitle": "Servono strumenti per i certificati",
+ "trust.fail.toolsLinux": "Inspector ha bisogno di certutil (strumenti NSS) per completare l’attendibilità della CA radice.",
+ "trust.fail.toolsOther": "Inspector ha bisogno degli strumenti per i certificati del browser per completare l’attendibilità della CA radice.",
+ "trust.fail.tryAgain": "Riprova",
+ "trust.fail.homebrewBody": "Homebrew è necessario per installare gli strumenti dei certificati. Esporta la CA per considerarla attendibile manualmente.",
+ "trust.fail.title": "Non è ancora possibile decifrare HTTPS",
+ "trust.fail.body": "La CA radice di Titanium Inspector non è ancora attendibile su questo computer.",
+ "toolbar.throttle": "Limitazione",
+ "toolbar.throttleTip": "Aggiunge latenza e limitazione della larghezza di banda durante l’acquisizione (scritture del corpo / frame WebSocket). Disattivato per impostazione predefinita.",
+ "toolbar.bindWatermark": "*, localhost o IP",
+ "toolbar.bindTip": "127.0.0.1 o localhost = solo questo PC. 0.0.0.0 o * = tutte le schede di rete (include localhost).",
+ "toolbar.portWatermark": "* o porta",
+ "toolbar.portTip": "* o vuoto = porta scelta dal sistema (la porta reale compare dopo l’avvio). Altrimenti 1–65535.",
+ "toolbar.listeningTip": "Il proxy è in ascolto",
+ "toolbar.trustHealthTip": "Stato di attendibilità della CA radice per Decifra HTTPS. Installa la CA o considerala attendibile se indica non attendibile.",
+ "chip.process": "Processo",
+ "inspect.request": "Richiesta",
+ "inspect.requestTip": "Intestazioni e corpo della richiesta",
+ "inspect.copyHeaders": "Copia intestazioni",
+ "inspect.resizeTip": "Trascina per ridimensionare. Doppio clic per reimpostare.",
+ "inspect.pretty": "Leggibile",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Mostra il corpo in esadecimale",
+ "inspect.saveRequest": "Salva richiesta…",
+ "inspect.response": "Risposta",
+ "inspect.responseTip": "Intestazioni e corpo della risposta",
+ "inspect.saveResponse": "Salva risposta…",
+ "inspect.diff": "Confronto",
+ "inspect.frames": "Frame WS",
+ "inspect.framesHelp": "Frame WebSocket in tempo reale per questa sessione (direzione, opcode, anteprima del payload).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events analizzati dal corpo della risposta.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Mostra intestazioni",
+ "inspect.hideHeaders": "Nascondi intestazioni",
+ "inspect.headers": "Intestazioni ({0})",
+ "inspect.prettyTip": "Applica un rientro a JSON, XML e HTML",
+ "inspect.prettyHexTip": "Non applicabile nella vista esadecimale",
+ "inspect.emptyBody": "(vuoto)",
+ "inspect.noRequestBody": "Nessun corpo della richiesta",
+ "inspect.waiting": "In attesa della risposta…",
+ "composer.help": "Crea e invia una richiesta tramite il proxy. Carica dalla selezione copia la sessione corrente.",
+ "composer.method": "Metodo",
+ "composer.url": "URL",
+ "composer.headers": "Intestazioni (Nome: valore per riga)",
+ "composer.body": "Corpo",
+ "composer.loadSelected": "Carica dalla selezione",
+ "composer.loadBody": "Carica il corpo da file…",
+ "composer.send": "Invia",
+ "bp.help": "Metti in pausa le richieste client corrispondenti per modificare il corpo, continuare o interrompere. Una pausa alla volta; ripresa automatica dopo 120s. Deselezionare Attivato fa proseguire una richiesta in pausa.",
+ "bp.enabled": "Attivato",
+ "bp.breakOnResponse": "Interrompi sulla risposta",
+ "bp.match": "Corrispondenza",
+ "bp.urlWatermark": "Filtro URL (* = tutte, es. *api*/users*)",
+ "bp.graphqlWatermark": "Solo questa operazione GraphQL (facoltativo)",
+ "bp.graphqlTip": "Filtro aggiuntivo sul corpo della richiesta client. Corrisponde a operationName nel JSON o a una query con nome. Lascia vuoto per corrispondere a ogni operazione dell’URL.",
+ "bp.fromSelected": "Dalla sessione selezionata",
+ "bp.fromSelectedTip": "Copia il nome dell’operazione GraphQL dalla richiesta della sessione selezionata.",
+ "bp.graphqlHelp": "Lascia vuota la casella GraphQL per corrispondere a ogni operazione. Compilala (es. GetUser) per mettere in pausa solo quella richiesta client sull’URL sopra. Interrompi sulla risposta usa ancora il filtro URL.",
+ "bp.editWatermark": "Modifica il corpo (Applica modifica del corpo, poi Continua)",
+ "bp.applyEdit": "Applica modifica del corpo",
+ "bp.continue": "Continua",
+ "bp.abort": "Interrompi",
+ "ar.help": "Restituisce una risposta fittizia prima del server reale. Corrispondenza decide a quali richieste client si applica una regola; i campi sotto sono ciò che invii indietro.",
+ "ar.enabled": "Attivato (prima dei punti di interruzione)",
+ "ar.urlWatermark": "URL di corrispondenza (caratteri jolly *)",
+ "ar.graphqlHelp": "Stessa URL, operazioni GraphQL diverse possono usare regole diverse. Lascia vuoto per corrispondere a ogni operazione.",
+ "ar.respondWith": "Rispondi con",
+ "ar.statusTip": "Stato HTTP. Vuoto = 200. Usa 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "File Map Local (facoltativo)",
+ "ar.bodyWatermark": "Corpo della risposta (usato quando Map Local è vuoto)",
+ "ar.add": "Aggiungi regola",
+ "ar.update": "Aggiorna regola",
+ "ar.delete": "Elimina regola",
+ "script.intro": "Un comando per riga, su ogni sessione acquisita. Non è JavaScript né C# — digita solo i comandi sotto.",
+ "script.what": "Cosa puoi digitare",
+ "script.setHeaderHelp": "Aggiunge o sostituisce un’intestazione. Il traffico prosegue verso il server.",
+ "script.setStatusHelp": "Sulla richiesta: rispondi subito e salta il server. Sulla risposta: cambia lo stato che vede il client.",
+ "script.abortHelp": "Blocca con 403 Forbidden. Aggiungi una riga set-status per scegliere un altro codice.",
+ "script.comment": "Inizia una riga con # o // per un commento. Puoi combinare i comandi; metti ciascuno sulla propria riga.",
+ "script.onRequest": "Sulla richiesta",
+ "script.onResponse": "Sulla risposta",
+ "script.requestSkips": "abort o set-status qui salta AutoResponder, i punti di interruzione e l’origine.",
+ "map.help": "Riscrive le richieste client corrispondenti verso un’altra origine prima del server reale. Usa un solo * nella corrispondenza e nella destinazione per conservare un suffisso di percorso o query. Viene eseguito dopo AutoResponder / Map Local.",
+ "map.graphqlHelp": "Lascia vuoto per riscrivere ogni operazione dell’URL. Compila il campo per riscrivere solo quell’operazione GraphQL.",
+ "map.rewriteTo": "Riscrivi verso",
+ "map.targetWatermark": "URL di destinazione (assoluta, * facoltativo)",
+ "loopback.allow": "Consenti",
+ "loopback.appName": "Nome app",
+ "loopback.packageId": "ID pacchetto",
+ "status.ready": "Pronto",
+ "status.searchingBodies": "Ricerca nei corpi…",
+ "status.proxyStopped": "Proxy arrestato",
+ "status.proxyRunning": "Proxy in esecuzione su {0}",
+ "trust.health.trusted": "CA attendibile",
+ "trust.health.untrusted": "CA non attendibile"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.ja.json b/src/Titanium.Inspector/Localization/strings.ja.json
new file mode 100644
index 000000000..790da4edc
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.ja.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "ファイル",
+ "menu.exportAllHar": "すべての HAR を書き出す…",
+ "menu.exportSelectedHar": "選択した HAR を書き出す…",
+ "menu.importHar": "HAR を読み込む…",
+ "menu.exportAllArchive": "すべてのアーカイブを書き出す…",
+ "menu.exportSelectedArchive": "選択したアーカイブを書き出す…",
+ "menu.importArchive": "アーカイブを読み込む…",
+ "menu.exit": "終了",
+ "menu.capture": "キャプチャ",
+ "menu.startProxy": "プロキシを開始",
+ "menu.stopProxy": "プロキシを停止",
+ "menu.capturing": "キャプチャ中",
+ "menu.clearSessions": "セッションを消去",
+ "menu.removeSelected": "選択項目を削除",
+ "menu.autoStartCapture": "キャプチャを自動開始",
+ "menu.autoSystemProxy": "起動時にシステムプロキシを自動でオン",
+ "menu.decryptHttps": "HTTPS を復号",
+ "menu.systemProxy": "システムプロキシ",
+ "menu.captureLocal": "ローカル通信をキャプチャ",
+ "menu.allowStoreApps": "ストア アプリを許可…",
+ "menu.installCa": "ルート CA をインストール(現在のユーザー)",
+ "menu.removeCa": "ルート CA を削除(現在のユーザー)",
+ "menu.rotateCa": "ルート CA を消去して再インストール…",
+ "menu.removeOldCas": "古いルート CA を削除…",
+ "menu.exportCa": "ルート CA を書き出す…",
+ "menu.trustFirefox": "Firefox で CA を信頼…",
+ "menu.deviceCa": "外部デバイスの CA を設定",
+ "menu.tools": "ツール",
+ "menu.composer": "コンポーザー…",
+ "menu.breakpoints": "ブレークポイント…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "スクリプト…",
+ "menu.mapRemote": "リモートマップ…",
+ "menu.options": "オプション",
+ "menu.theme": "テーマ",
+ "menu.themeLight": "ライト",
+ "menu.themeDark": "ダーク",
+ "menu.themeAutomatic": "自動",
+ "menu.language": "言語",
+ "menu.languageAutomatic": "自動",
+ "menu.columns": "列",
+ "menu.col.id": "番号",
+ "menu.col.method": "メソッド",
+ "menu.col.status": "ステータス",
+ "menu.col.host": "ホスト",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "プロトコル",
+ "menu.col.duration": "所要時間",
+ "menu.col.ttfb": "待機 (TTFB)",
+ "menu.col.size": "サイズ",
+ "menu.col.process": "プロセス",
+ "menu.col.started": "開始",
+ "menu.col.scheme": "スキーム",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "列をリセット",
+ "menu.sessionRetention": "セッションの保持…",
+ "menu.excludedHosts": "除外ホスト…",
+ "menu.excludedHostsTip": "HTTPS 復号のスキップ一覧と OS のバイパス規則",
+ "menu.ignoreCerts": "安全でないサーバー証明書を無視",
+ "menu.addVia": "Via ヘッダーを追加",
+ "menu.addViaTip": "傍受した通信に Via: … titanium-web-proxy を追加します(RFC 9110)。オフにすると挿入と Via ループ検出が無効になります。",
+ "menu.logging": "ログ…",
+ "menu.resetSettings": "Inspector の設定をリセット…",
+ "menu.help": "ヘルプ",
+ "menu.checkUpdates": "更新を確認…",
+ "menu.checkUpdatesStartup": "起動時に更新を確認",
+ "menu.updateChannel": "更新チャネル",
+ "menu.channelStable": "安定版",
+ "menu.channelBeta": "ベータ",
+ "menu.about": "Titanium Inspector について…",
+ "toolbar.searchWatermark": "URL、ホスト、プロセスを検索…(または method:GET status:4xx)",
+ "toolbar.searchTip": "そのままの文字列は URL、ホスト、プロセス名、正確なプロセス ID、メソッド、ステータスを検索します。接頭辞は 1 つのフィールドに限定します: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image。body: はディスクに退避した本文も検索します。フィールドまたは語句の前に - を付けると除外できます(例: -host:cursor.sh または -cursor)。フィルターでは、非表示のホストとプロセスをより広い画面で編集できます。",
+ "toolbar.filters": "フィルター",
+ "toolbar.filtersTip": "より広いウィンドウで検索と非表示のホストまたはプロセスを編集",
+ "toolbar.hideConnect": "CONNECT を隠す",
+ "toolbar.hideConnectTip": "HTTPS を復号がオフのとき、中身の見えない HTTPS トンネルを隠す",
+ "toolbar.hideImages": "画像を隠す",
+ "toolbar.errorsOnly": "エラーのみ",
+ "toolbar.clearFilters": "フィルターを解除",
+ "toolbar.hidden": "非表示",
+ "ctx.replay": "再実行",
+ "ctx.loadComposer": "コンポーザーに読み込む",
+ "ctx.saveRequest": "リクエスト本文を保存…",
+ "ctx.saveResponse": "レスポンス本文を保存…",
+ "ctx.copyUrl": "URL をコピー",
+ "ctx.copyCurl": "curl としてコピー",
+ "ctx.copyFetch": "fetch としてコピー",
+ "ctx.diff": "選択項目を比較…",
+ "ctx.filterHost": "ホストで絞り込む",
+ "ctx.hideHost": "ホストを隠す",
+ "ctx.filterProcess": "プロセスで絞り込む",
+ "ctx.hideProcess": "プロセスを隠す",
+ "ctx.excludeHost": "ホストを除外…",
+ "ctx.excludeHostTip": "このホストの HTTPS の復号を停止します。行は一覧に残ります。表示から除くにはホストを隠すを使います。",
+ "grid.duration": "所要時間 (ms)",
+ "grid.wait": "待機 (ms)",
+ "pane.inspect": "検査",
+ "pane.composer": "コンポーザー",
+ "pane.breakpoints": "ブレークポイント",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "スクリプト",
+ "pane.mapRemote": "リモートマップ",
+ "pane.closeTip": "ペインを閉じる",
+ "inspect.empty": "グリッドでセッションを選ぶと、リクエストとレスポンスのヘッダーと本文を検査できます。",
+ "common.ok": "了解",
+ "common.cancel": "キャンセル",
+ "common.save": "保存",
+ "common.apply": "適用",
+ "common.remove": "削除",
+ "common.browse": "参照…",
+ "common.openFolder": "フォルダーを開く",
+ "common.forget": "忘れる",
+ "common.close": "閉じる",
+ "loopback.window": "ストア アプリにこのプロキシの使用を許可",
+ "loopback.checkAll": "すべて選択",
+ "loopback.uncheckAll": "すべての選択を解除",
+ "loopback.filterWatermark": "アプリ名で絞り込む…",
+ "loopback.clearAll": "すべて消去",
+ "trust.macWindow": "Keychain Access で信頼を確認",
+ "trust.openKeychain": "Keychain Access を開く",
+ "trust.notNow": "後で",
+ "trust.recoveryTitle": "ルート CA の信頼",
+ "trust.macWaitPlaceholder": "SSL の信頼を待っています…",
+ "window.about": "Titanium Inspector について",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "著作権 © Jehonathan Thomas",
+ "about.license": "PolyForm Noncommercial License 1.0.0 の下でライセンスされています。",
+ "about.licenseLink": "ライセンスの詳細",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "フィルター",
+ "filters.search": "検索",
+ "filters.searchHelp": "ツールバーと同じ検索で、入力欄が広くなっています。非表示のホストとプロセスは下に一覧され、この欄には入りません。",
+ "filters.searchWatermark": "URL、ホスト、プロセス、method:GET、status:4xx…",
+ "filters.hideHeading": "一覧から隠す",
+ "filters.hideHelp": "行はキャプチャされたままです。一覧で隠すだけです。HTTPS の復号を止めるにはホストを除外…を使います。",
+ "filters.hosts": "ホスト",
+ "filters.addHostWatermark": "隠すホストを追加",
+ "filters.addHost": "ホストを追加",
+ "filters.processes": "プロセス",
+ "filters.addProcessWatermark": "隠すプロセスを追加",
+ "filters.addProcess": "プロセスを追加",
+ "filters.processSpace": "空白を含む名前は最初の語で短縮され、その語を含む他の名前も隠れることがあります。",
+ "window.confirm": "確認",
+ "window.excludeHost": "ホストを除外",
+ "exclude.action": "除外",
+ "exclude.help": "このホストはセッション一覧に残ります。Inspector はその HTTPS を読み取ろうとしません。",
+ "window.logging": "ログ",
+ "logging.help": "トラブルシューティング用の診断メッセージを書き込みます。変更はすぐに適用されます。",
+ "logging.enable": "ログを有効にする",
+ "logging.writeFile": "ログをファイルに書き込む",
+ "logging.detail": "詳細度",
+ "logging.detailHelp": "Error = 問題のみ。Warning / Information = より多くの状況。Debug = 非常に詳細。",
+ "logging.path": "ログ ファイルのパス",
+ "window.excludedHosts": "除外ホスト",
+ "excluded.reset": "既定値にリセット",
+ "excluded.bypass": "プロキシをバイパス(OS)",
+ "excluded.bypassHelp": "システムプロキシがオンのとき、この通信は Inspector に届きません。Microsoft の ID / SSO / RDP ホストが初期値として入っています。システムプロキシが有効な間にこれらを削除すると、RDP のサインインが失敗することがあります。",
+ "excluded.notDecrypted": "復号しないホスト",
+ "excluded.notDecryptedHelp": "HTTPS を復号がオンのとき、CONNECT は表示されたまま、TLS は中身が見えないままです。証明書ピン留めのホスト(Dropbox、Webex)が初期値として入っています。",
+ "excluded.learnHeading": "復号に失敗したら自動的に復号しない",
+ "excluded.learn": "復号中にオリジン TLS が失敗するホストを学習",
+ "excluded.learnHelp": "復号中にオリジン TLS が繰り返し失敗するか、オリジン サーバーが 403/429 を返すと、Inspector はこのセッションの以後の接続でそのホストの復号を停止します。一覧には上限があり、昇格しない限り再起動時に破棄されます。",
+ "excluded.learnPaused": "学習は一時停止中です — 既存の項目は破棄されるまで残ります。",
+ "excluded.noneLearned": "まだ学習したホストはありません。",
+ "excluded.promote": "復号しないホストへ昇格",
+ "excluded.clearLearned": "学習済みをすべて消去",
+ "window.retention": "セッションの保持",
+ "retention.max": "保持するセッションの上限",
+ "retention.maxHelp": "セッション一覧に残すリクエスト数です。これを超えると、最も古い行は一覧から外れますが、セッションを消去するかディスク容量の上限で削除されるまでディスクに残ります。",
+ "retention.cache": "キャッシュ フォルダー",
+ "retention.openCache": "キャッシュ フォルダーを開く",
+ "retention.clearCache": "保存済みセッション キャッシュを消去…",
+ "retention.advanced": "詳細設定",
+ "retention.disk": "保存済みセッションのディスク容量(MB)",
+ "retention.diskHelp": "ディスク上の保存済みセッション全体の最大容量です(すべての Inspector の実行)。実行ごとにタイムスタンプ付きのサブフォルダーを使い、これを超えると最も古い HAR ファイルから削除されます。空の実行フォルダーは削除されます。",
+ "loopback.intro": "Windows ストア / UWP アプリは既定で localhost がブロックされます。Inspector を使うアプリにチェックを入れてから適用します。適用後は各アプリを再起動(完全に終了)してください。Inspector はシステムプロキシをオンにして実行している必要があります。すべて消去すると許可項目がすべて削除されます。",
+ "loopback.closedUnchanged": "ストア アプリは変更されていません。",
+ "loopback.proxyStopped": "プロキシを開始し、システムプロキシをオンにしてください。両方がオンになるまでストア アプリはキャプチャできません。",
+ "loopback.systemProxyOff": "システムプロキシをオンにしてください(キャプチャ メニュー)。許可リストはストア アプリが localhost に届くようにするだけです。アプリは引き続きシステムプロキシに従います。",
+ "loopback.refreshing": "実行中のアプリが再接続するようシステムプロキシを更新しています…",
+ "loopback.unchangedCount": "許可リストは既に一致しています: {0}。",
+ "loopback.allowed": "許可しました: {0}。",
+ "loopback.allowedRefreshed": " 実行中のアプリが再接続するようシステムプロキシを更新しました。通信がまだ表示されない場合は、アプリを完全に終了して開き直してください。",
+ "loopback.allowedProxyStopped": " プロキシを開始してシステムプロキシをオンにしてから、アプリを完全に終了して開き直してください。",
+ "loopback.allowedSystemProxyOff": " システムプロキシをオンにしてから、アプリを完全に終了して開き直してください。",
+ "loopback.allowedReady": " 通信をキャプチャするには、アプリを完全に終了して開き直してください。",
+ "loopback.clearedRefreshed": "すべてのループバック除外を消去しました。実行中のアプリが再接続するようシステムプロキシを更新しました。",
+ "loopback.clearedReady": "すべてのループバック除外を消去しました。Inspector を使っていたアプリは完全に終了して開き直してください。",
+ "loopback.cleared": "すべてのループバック除外を消去しました。",
+ "trust.macWaitBody": "キーチェーンの「情報を見る」は、SSL ポリシーが保存されていなくても「常に信頼」と表示されることがあります(Chrome と Inspector はこの CA を引き続き信頼しません)。\n\n保存を強制します:\n1. Keychain Access → ログイン → 証明書 → Titanium Root Certificate Authority をダブルクリック\n2. 信頼を展開\n3. 「この証明書を使用するとき」を「システムデフォルトを使用」にしてから、再び「常に信頼」に変更\n4. 「情報を見る」を閉じる — パスワードの入力が必要です。これで実際の SSL 信頼ポリシーが書き込まれます\n\nこれらのポリシーが検出されると、このウィンドウは自動的に閉じます。すでに保存済みの場合は、「常に信頼を保存しました」をクリックしてください。",
+ "trust.macWaitStatus": "キーチェーン内の証明書を待っています…",
+ "trust.macWaitInKeychain": "保存された SSL ポリシーを待っています(常に信頼を切り替え、「情報を見る」を閉じ、パスワードを入力)…",
+ "trust.macNotSaved": "「常に信頼」の表示だけでは不十分です — 「システムデフォルトを使用」から「常に信頼」へ切り替え、「情報を見る」を閉じ、パスワードを入力してから、ルート CA のインストール / HTTPS の復号を再度試してください",
+ "trust.macConfirmSaved": "常に信頼を保存しました",
+ "trust.exportCa": "CA を書き出す",
+ "trust.install.mac": "HTTPS を復号するには、Keychain Access(ログインキーチェーン)で Titanium Inspector のルート CA を信頼する必要があります。今すぐインストールしますか?",
+ "trust.install.linux": "HTTPS を復号するには、ユーザーの証明書ストア(NSS)で Titanium Inspector のルート CA を信頼する必要があります。今すぐインストールしますか?",
+ "trust.install.windows": "HTTPS を復号するには、現在のユーザーの信頼されたルート ストアで Titanium Inspector のルート CA を信頼する必要があります。今すぐインストールしますか?\n\nWindows が信頼されたルートの「はい/いいえ」セキュリティ ダイアログ(UAC ではありません)を表示することがあります — CA を信頼するには「はい」を選んでください。",
+ "trust.install.other": "HTTPS を復号するには、このコンピューターで Titanium Inspector のルート CA を信頼する必要があります。今すぐインストールしますか?",
+ "trust.remove.mac": "Keychain から Titanium Inspector のルート CA を削除しますか?HTTPS の復号はオフになります。",
+ "trust.remove.linux": "ユーザーの証明書ストア(NSS)から Titanium Inspector のルート CA を削除しますか?HTTPS の復号はオフになります。",
+ "trust.remove.windows": "現在のユーザーの信頼されたルート ストアから Titanium Inspector のルート CA を削除しますか?HTTPS の復号はオフになります。",
+ "trust.remove.other": "Titanium Inspector のルート CA を削除しますか?HTTPS の復号はオフになります。",
+ "trust.elevate.mac": "ユーザー単位の信頼が失敗したか、不十分でした。続行して macOS の管理者パスワードの入力を表示しますか?キャンセルすると証明書の設定は変わりません。",
+ "trust.elevate.linux": "ユーザー単位の信頼が失敗したか、不十分でした。続行して polkit の管理者プロンプトを表示しますか?キャンセルすると証明書の設定は変わりません。",
+ "trust.elevate.windows": "ユーザー単位の信頼が失敗したか、不十分でした。続行して UAC を表示しますか?キャンセルすると証明書の設定は変わりません。",
+ "trust.elevate.other": "ユーザー単位の信頼が失敗したか、不十分でした。続行して管理者プロンプトを表示しますか?キャンセルすると証明書の設定は変わりません。",
+ "trust.recovery.mac": "\n\n続行して macOS の管理者パスワードの入力を表示しますか?後でを選ぶと証明書の設定は変わりません。",
+ "trust.recovery.linux": "\n\n続行して polkit の管理者プロンプトを表示しますか?後でを選ぶと証明書の設定は変わりません。",
+ "trust.recovery.windows": "\n\n続行して UAC を表示しますか?後でを選ぶと証明書の設定は変わりません。",
+ "trust.recovery.other": "\n\n管理者プロンプトで続行しますか?後でを選ぶと証明書の設定は変わりません。",
+ "trust.hosts.mac": "OS のバイパスにはキャプチャ → システムプロキシが必要です(macOS のネットワークプロキシ設定を使います)。トンネルのみの規則は Inspector に届くすべてのクライアントに適用されます。工場出荷時の既定値が下の一覧に入っています — 自由に編集するかリセットできます。",
+ "trust.hosts.linux": "OS のバイパスにはキャプチャ → システムプロキシが必要です(デスクトップ / 環境のプロキシ設定を使います)。トンネルのみの規則は Inspector に届くすべてのクライアントに適用されます。工場出荷時の既定値が下の一覧に入っています — 自由に編集するかリセットできます。",
+ "trust.hosts.windows": "OS のバイパスにはキャプチャ → システムプロキシが必要です(WinINET を使います)。トンネルのみの規則は Inspector に届くすべてのクライアントに適用されます。工場出荷時の既定値が下の一覧に入っています — 自由に編集するかリセットできます。",
+ "trust.hosts.other": "OS のバイパスにはキャプチャ → システムプロキシが必要です。トンネルのみの規則は Inspector に届くすべてのクライアントに適用されます。工場出荷時の既定値が下の一覧に入っています — 自由に編集するかリセットできます。",
+ "trust.localhost.mac": "システムプロキシがオンのとき、localhost を Inspector 経由にします。オフにすると localhost が macOS のプロキシバイパス一覧に追加されます。",
+ "trust.localhost.linux": "システムプロキシがオンのとき、localhost を Inspector 経由にします。オフにすると localhost が NO_PROXY に追加されます。",
+ "trust.localhost.windows": "システムプロキシがオンのとき、localhost を Inspector 経由にします(WinINET <-loopback>)。オフにするとループバックはプロキシをスキップします。",
+ "trust.localhost.other": "システムプロキシがオンのとき、localhost を Inspector 経由にします。",
+ "trust.status.missing": "ルート CA はまだ信頼されていません — 再試行するか、CA を書き出してください",
+ "trust.status.cancelled": "ルート CA のインストールがキャンセルされました",
+ "trust.status.certutil": "ブラウザーの証明書ツールがありません — インストールして再試行するか、CA を書き出してください",
+ "trust.status.homebrew": "証明書ツールのインストールには Homebrew が必要です — 手動で信頼するには CA を書き出してください",
+ "trust.status.macConfirm": "Keychain Access で Titanium Inspector のルート CA を常に信頼に設定してください",
+ "trust.status.keychain": "キーチェーンの信頼に失敗しました — 再試行するか、CA を書き出して手動で信頼してください",
+ "trust.fail.keychainTitle": "キーチェーンで信頼を確認",
+ "trust.fail.continueKeychain": "Keychain Access で続行",
+ "trust.fail.toolsTitle": "証明書ツールが必要です",
+ "trust.fail.toolsLinux": "ルート CA の信頼を完了するには、Inspector に certutil(NSS ツール)が必要です。",
+ "trust.fail.toolsOther": "ルート CA の信頼を完了するには、Inspector にブラウザーの証明書ツールが必要です。",
+ "trust.fail.tryAgain": "再試行",
+ "trust.fail.homebrewBody": "証明書ツールのインストールには Homebrew が必要です。手動で信頼するには CA を書き出してください。",
+ "trust.fail.title": "まだ HTTPS を復号できません",
+ "trust.fail.body": "このコンピューターでは Titanium Inspector のルート CA がまだ信頼されていません。",
+ "toolbar.throttle": "スロットル",
+ "toolbar.throttleTip": "キャプチャ中に遅延と帯域制御を追加します(本文の書き込み / WebSocket フレーム)。既定ではオフです。",
+ "toolbar.bindWatermark": "*、localhost、または IP",
+ "toolbar.bindTip": "127.0.0.1 または localhost = このコンピューターのみ。0.0.0.0 または * = すべてのネットワーク アダプター(localhost を含む)。",
+ "toolbar.portWatermark": "* またはポート",
+ "toolbar.portTip": "* または空 = OS が選ぶポート(実際のポートは開始後に表示されます)。それ以外は 1–65535。",
+ "toolbar.listeningTip": "プロキシは待機中です",
+ "toolbar.trustHealthTip": "HTTPS を復号するためのルート CA の信頼状態です。未信頼と表示されたら、CA をインストールするか信頼してください。",
+ "chip.process": "プロセス",
+ "inspect.request": "リクエスト",
+ "inspect.requestTip": "リクエストのヘッダーと本文",
+ "inspect.copyHeaders": "ヘッダーをコピー",
+ "inspect.resizeTip": "ドラッグしてサイズ変更。ダブルクリックでリセット。",
+ "inspect.pretty": "整形",
+ "inspect.hex": "16進",
+ "inspect.hexTip": "本文を 16 進ダンプとして表示します",
+ "inspect.saveRequest": "リクエストを保存…",
+ "inspect.response": "レスポンス",
+ "inspect.responseTip": "レスポンスのヘッダーと本文",
+ "inspect.saveResponse": "レスポンスを保存…",
+ "inspect.diff": "差分",
+ "inspect.frames": "WS フレーム",
+ "inspect.framesHelp": "このセッションのライブ WebSocket フレーム(方向、オペコード、ペイロードのプレビュー)。",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "レスポンス本文から解析したサーバー送信イベントです。",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "ヘッダーを表示",
+ "inspect.hideHeaders": "ヘッダーを隠す",
+ "inspect.headers": "ヘッダー ({0})",
+ "inspect.prettyTip": "JSON、XML、HTML をインデントします",
+ "inspect.prettyHexTip": "16進表示では使えません",
+ "inspect.emptyBody": "(空)",
+ "inspect.noRequestBody": "リクエスト本文はありません",
+ "inspect.waiting": "レスポンスを待っています…",
+ "composer.help": "プロキシ経由でリクエストを組み立てて送信します。選択項目から読み込むと、現在のセッションがコピーされます。",
+ "composer.method": "メソッド",
+ "composer.url": "URL",
+ "composer.headers": "ヘッダー(1 行に 名前: 値)",
+ "composer.body": "本文",
+ "composer.loadSelected": "選択項目から読み込む",
+ "composer.loadBody": "ファイルから本文を読み込む…",
+ "composer.send": "送信",
+ "bp.help": "一致するクライアント リクエストを一時停止し、本文の編集、続行、中止ができます。一時停止は一度に 1 件です。120s 後に自動で続行します。有効のチェックを外すと、一時停止中のリクエストが続行されます。",
+ "bp.enabled": "有効",
+ "bp.breakOnResponse": "レスポンスで中断",
+ "bp.match": "一致",
+ "bp.urlWatermark": "URL フィルター(* = すべて、例: *api*/users*)",
+ "bp.graphqlWatermark": "この GraphQL 操作のみ(任意)",
+ "bp.graphqlTip": "クライアントのリクエスト本文に対する追加フィルターです。JSON の operationName、または名前付きクエリに一致します。空のままにすると、その URL のすべての操作に一致します。",
+ "bp.fromSelected": "選択したセッションから",
+ "bp.fromSelectedTip": "選択したセッションのリクエストから GraphQL の操作名をコピーします。",
+ "bp.graphqlHelp": "GraphQL の欄を空にすると、すべての操作に一致します。入力すると(例: GetUser)、上の URL にあるそのクライアント リクエストだけを一時停止します。レスポンスで中断は、引き続き URL フィルターを使います。",
+ "bp.editWatermark": "本文を編集(本文の編集を適用してから続行)",
+ "bp.applyEdit": "本文の編集を適用",
+ "bp.continue": "続行",
+ "bp.abort": "中止",
+ "ar.help": "本物のサーバーより前に、偽のレスポンスを返します。一致は、規則がどのクライアント リクエストに適用されるかを決めます。その下のフィールドが、返す内容です。",
+ "ar.enabled": "有効(ブレークポイントより前)",
+ "ar.urlWatermark": "URL の一致(* ワイルドカード)",
+ "ar.graphqlHelp": "同じ URL でも、GraphQL 操作ごとに別の規則を使えます。空にするとすべての操作に一致します。",
+ "ar.respondWith": "応答内容",
+ "ar.statusTip": "HTTP ステータス。空 = 200。100–599 を使ってください。",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local ファイル(任意)",
+ "ar.bodyWatermark": "レスポンス本文(Map Local が空のときに使用)",
+ "ar.add": "規則を追加",
+ "ar.update": "規則を更新",
+ "ar.delete": "規則を削除",
+ "script.intro": "キャプチャしたすべてのセッションで、1 行に 1 つのコマンドです。これは JavaScript や C# ではありません — 下のコマンドだけを入力してください。",
+ "script.what": "入力できる内容",
+ "script.setHeaderHelp": "ヘッダーを追加または置き換えます。トラフィックは引き続きサーバーへ進みます。",
+ "script.setStatusHelp": "リクエスト時: すぐに応答し、サーバーを飛ばします。レスポンス時: クライアントに見えるステータスを変更します。",
+ "script.abortHelp": "403 Forbidden でブロックします。別のコードにするには set-status の行を追加してください。",
+ "script.comment": "行を # または // で始めるとコメントです。コマンドは組み合わせできます。それぞれ別の行にしてください。",
+ "script.onRequest": "リクエスト時",
+ "script.onResponse": "レスポンス時",
+ "script.requestSkips": "ここでの abort または set-status は、AutoResponder、ブレークポイント、オリジンをスキップします。",
+ "map.help": "一致するクライアント リクエストを、本物のサーバーの前に別のオリジンへ書き換えます。一致とターゲットに * を 1 つずつ使い、パス/クエリの接尾辞を残します。AutoResponder / Map Local の後に実行されます。",
+ "map.graphqlHelp": "空にすると、その URL のすべての操作を書き換えます。入力すると、その GraphQL 操作だけを書き換えます。",
+ "map.rewriteTo": "書き換え先",
+ "map.targetWatermark": "ターゲット URL(絶対、* は任意)",
+ "loopback.allow": "許可",
+ "loopback.appName": "アプリ名",
+ "loopback.packageId": "パッケージ ID",
+ "status.ready": "準備完了",
+ "status.searchingBodies": "本文を検索しています…",
+ "status.proxyStopped": "プロキシは停止しています",
+ "status.proxyRunning": "プロキシは {0} で実行中",
+ "trust.health.trusted": "CA は信頼済み",
+ "trust.health.untrusted": "CA は未信頼"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.ko.json b/src/Titanium.Inspector/Localization/strings.ko.json
new file mode 100644
index 000000000..39e4d6a92
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.ko.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "파일",
+ "menu.exportAllHar": "모든 HAR 내보내기…",
+ "menu.exportSelectedHar": "선택한 HAR 내보내기…",
+ "menu.importHar": "HAR 가져오기…",
+ "menu.exportAllArchive": "모든 보관 파일 내보내기…",
+ "menu.exportSelectedArchive": "선택한 보관 파일 내보내기…",
+ "menu.importArchive": "보관 파일 가져오기…",
+ "menu.exit": "종료",
+ "menu.capture": "캡처",
+ "menu.startProxy": "프록시 시작",
+ "menu.stopProxy": "프록시 중지",
+ "menu.capturing": "캡처 중",
+ "menu.clearSessions": "세션 지우기",
+ "menu.removeSelected": "선택 항목 제거",
+ "menu.autoStartCapture": "캡처 자동 시작",
+ "menu.autoSystemProxy": "시작 시 시스템 프록시 자동 설정",
+ "menu.decryptHttps": "HTTPS 복호화",
+ "menu.systemProxy": "시스템 프록시",
+ "menu.captureLocal": "로컬 트래픽 캡처",
+ "menu.allowStoreApps": "스토어 앱 허용…",
+ "menu.installCa": "루트 CA 설치(현재 사용자)",
+ "menu.removeCa": "루트 CA 제거(현재 사용자)",
+ "menu.rotateCa": "루트 CA 지우고 다시 설치…",
+ "menu.removeOldCas": "이전 루트 CA 제거…",
+ "menu.exportCa": "루트 CA 내보내기…",
+ "menu.trustFirefox": "Firefox에서 CA 신뢰…",
+ "menu.deviceCa": "외부 장치 CA 설정",
+ "menu.tools": "도구",
+ "menu.composer": "작성기…",
+ "menu.breakpoints": "중단점…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "스크립트…",
+ "menu.mapRemote": "원격 매핑…",
+ "menu.options": "옵션",
+ "menu.theme": "테마",
+ "menu.themeLight": "밝게",
+ "menu.themeDark": "어둡게",
+ "menu.themeAutomatic": "자동",
+ "menu.language": "언어",
+ "menu.languageAutomatic": "자동",
+ "menu.columns": "열",
+ "menu.col.id": "번호",
+ "menu.col.method": "메서드",
+ "menu.col.status": "상태",
+ "menu.col.host": "호스트",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "프로토콜",
+ "menu.col.duration": "소요 시간",
+ "menu.col.ttfb": "대기 (TTFB)",
+ "menu.col.size": "크기",
+ "menu.col.process": "프로세스",
+ "menu.col.started": "시작",
+ "menu.col.scheme": "스킴",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "열 초기화",
+ "menu.sessionRetention": "세션 보관…",
+ "menu.excludedHosts": "제외된 호스트…",
+ "menu.excludedHostsTip": "HTTPS 복호화 건너뛰기 목록과 OS 우회 규칙",
+ "menu.ignoreCerts": "안전하지 않은 서버 인증서 무시",
+ "menu.addVia": "Via 헤더 추가",
+ "menu.addViaTip": "가로챈 트래픽에 Via: … titanium-web-proxy를 추가합니다(RFC 9110). 끄면 삽입과 Via 루프 감지가 비활성화됩니다.",
+ "menu.logging": "로깅…",
+ "menu.resetSettings": "Inspector 설정 초기화…",
+ "menu.help": "도움말",
+ "menu.checkUpdates": "업데이트 확인…",
+ "menu.checkUpdatesStartup": "시작 시 업데이트 확인",
+ "menu.updateChannel": "업데이트 채널",
+ "menu.channelStable": "안정",
+ "menu.channelBeta": "베타",
+ "menu.about": "Titanium Inspector 정보…",
+ "toolbar.searchWatermark": "URL, 호스트, 프로세스 검색… (또는 method:GET status:4xx)",
+ "toolbar.searchTip": "일반 텍스트는 URL, 호스트, 프로세스 이름, 정확한 프로세스 ID, 메서드, 상태를 검색합니다. 접두사는 한 필드로 제한합니다: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: 는 디스크로 넘긴 본문도 검색합니다. 필드나 단어 앞에 - 를 붙이면 제외합니다(예: -host:cursor.sh 또는 -cursor). 필터에서는 숨긴 호스트와 프로세스를 더 넓은 창에서 편집합니다.",
+ "toolbar.filters": "필터",
+ "toolbar.filtersTip": "더 큰 창에서 검색과 숨긴 호스트 또는 프로세스를 편집",
+ "toolbar.hideConnect": "CONNECT 숨기기",
+ "toolbar.hideConnectTip": "HTTPS 복호화가 꺼져 있을 때 내용이 보이지 않는 HTTPS 터널을 숨깁니다",
+ "toolbar.hideImages": "이미지 숨기기",
+ "toolbar.errorsOnly": "오류만",
+ "toolbar.clearFilters": "필터 지우기",
+ "toolbar.hidden": "숨김",
+ "ctx.replay": "다시 실행",
+ "ctx.loadComposer": "작성기에 불러오기",
+ "ctx.saveRequest": "요청 본문 저장…",
+ "ctx.saveResponse": "응답 본문 저장…",
+ "ctx.copyUrl": "URL 복사",
+ "ctx.copyCurl": "curl로 복사",
+ "ctx.copyFetch": "fetch로 복사",
+ "ctx.diff": "선택 항목 비교…",
+ "ctx.filterHost": "호스트로 필터",
+ "ctx.hideHost": "호스트 숨기기",
+ "ctx.filterProcess": "프로세스로 필터",
+ "ctx.hideProcess": "프로세스 숨기기",
+ "ctx.excludeHost": "호스트 제외…",
+ "ctx.excludeHostTip": "이 호스트의 HTTPS 복호화를 중지합니다. 행은 목록에 남습니다. 보기에서 없애려면 호스트 숨기기를 사용하세요.",
+ "grid.duration": "소요 시간(ms)",
+ "grid.wait": "대기(ms)",
+ "pane.inspect": "검사",
+ "pane.composer": "작성기",
+ "pane.breakpoints": "중단점",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "스크립트",
+ "pane.mapRemote": "원격 매핑",
+ "pane.closeTip": "패널 닫기",
+ "inspect.empty": "표에서 세션을 선택하면 요청과 응답의 헤더와 본문을 검사할 수 있습니다.",
+ "common.ok": "확인",
+ "common.cancel": "취소",
+ "common.save": "저장",
+ "common.apply": "적용",
+ "common.remove": "제거",
+ "common.browse": "찾아보기…",
+ "common.openFolder": "폴더 열기",
+ "common.forget": "잊기",
+ "common.close": "닫기",
+ "loopback.window": "스토어 앱이 이 프록시를 사용하도록 허용",
+ "loopback.checkAll": "모두 선택",
+ "loopback.uncheckAll": "모두 선택 해제",
+ "loopback.filterWatermark": "앱 이름으로 필터…",
+ "loopback.clearAll": "모두 지우기",
+ "trust.macWindow": "Keychain Access에서 신뢰 확인",
+ "trust.openKeychain": "Keychain Access 열기",
+ "trust.notNow": "나중에",
+ "trust.recoveryTitle": "루트 CA 신뢰",
+ "trust.macWaitPlaceholder": "SSL 신뢰 대기 중…",
+ "window.about": "Titanium Inspector 정보",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "저작권 © Jehonathan Thomas",
+ "about.license": "PolyForm Noncommercial License 1.0.0에 따라 사용이 허가됩니다.",
+ "about.licenseLink": "라이선스 세부 정보",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "필터",
+ "filters.search": "검색",
+ "filters.searchHelp": "도구 모음과 같은 검색이며 공간이 더 넓습니다. 숨긴 호스트와 프로세스는 이 상자가 아니라 아래에 나열됩니다.",
+ "filters.searchWatermark": "URL, 호스트, 프로세스, method:GET, status:4xx…",
+ "filters.hideHeading": "목록에서 숨기기",
+ "filters.hideHelp": "행은 계속 캡처됩니다. 목록에서만 숨깁니다. HTTPS 복호화를 중지하려면 호스트 제외…를 사용하세요.",
+ "filters.hosts": "호스트",
+ "filters.addHostWatermark": "숨길 호스트 추가",
+ "filters.addHost": "호스트 추가",
+ "filters.processes": "프로세스",
+ "filters.addProcessWatermark": "숨길 프로세스 추가",
+ "filters.addProcess": "프로세스 추가",
+ "filters.processSpace": "공백이 있는 이름은 첫 단어에서 잘리며, 그 단어를 포함하는 다른 이름도 숨겨질 수 있습니다.",
+ "window.confirm": "확인",
+ "window.excludeHost": "호스트 제외",
+ "exclude.action": "제외",
+ "exclude.help": "이 호스트는 세션 목록에 계속 나타납니다. Inspector는 해당 HTTPS를 읽지 않습니다.",
+ "window.logging": "로깅",
+ "logging.help": "문제 해결용 진단 메시지를 기록합니다. 변경은 즉시 적용됩니다.",
+ "logging.enable": "로깅 사용",
+ "logging.writeFile": "로그를 파일에 쓰기",
+ "logging.detail": "세부 수준",
+ "logging.detailHelp": "Error = 문제만. Warning / Information = 더 많은 맥락. Debug = 매우 자세함.",
+ "logging.path": "로그 파일 경로",
+ "window.excludedHosts": "제외된 호스트",
+ "excluded.reset": "기본값으로 초기화",
+ "excluded.bypass": "프록시 우회(OS)",
+ "excluded.bypassHelp": "시스템 프록시가 켜져 있으면 이 트래픽은 Inspector에 도달하지 않습니다. Microsoft ID / SSO / RDP 호스트가 기본으로 들어 있습니다. 시스템 프록시가 켜진 동안 이들을 제거하면 RDP 로그인이 깨질 수 있습니다.",
+ "excluded.notDecrypted": "복호화하지 않는 호스트",
+ "excluded.notDecryptedHelp": "HTTPS 복호화가 켜져 있으면 CONNECT는 보이고 TLS는 내용이 보이지 않습니다. 인증서 고정 호스트(Dropbox, Webex)가 기본으로 들어 있습니다.",
+ "excluded.learnHeading": "복호화 실패 시 자동으로 복호화하지 않음",
+ "excluded.learn": "복호화 중 원본 TLS가 실패하는 호스트 학습",
+ "excluded.learnHelp": "복호화 중 원본 TLS가 반복 실패하거나 원본 서버가 403/429를 반환하면, Inspector는 이 세션의 이후 연결에서 해당 호스트 복호화를 중지합니다. 목록에는 상한이 있으며, 승격하지 않으면 다시 시작할 때 잊혀집니다.",
+ "excluded.learnPaused": "학습이 일시 중지되었습니다 — 기존 항목은 잊힐 때까지 유지됩니다.",
+ "excluded.noneLearned": "아직 학습한 호스트가 없습니다.",
+ "excluded.promote": "복호화하지 않는 호스트로 승격",
+ "excluded.clearLearned": "학습한 항목 모두 지우기",
+ "window.retention": "세션 보관",
+ "retention.max": "유지할 최대 세션 수",
+ "retention.maxHelp": "세션 목록에 남길 요청 수입니다. 이를 넘으면 가장 오래된 행은 목록에서 빠지지만, 세션 지우기 또는 디스크 공간 한도가 제거할 때까지 디스크에 남습니다.",
+ "retention.cache": "캐시 폴더",
+ "retention.openCache": "캐시 폴더 열기",
+ "retention.clearCache": "저장된 세션 캐시 지우기…",
+ "retention.advanced": "고급",
+ "retention.disk": "저장된 세션의 디스크 공간(MB)",
+ "retention.diskHelp": "디스크에 저장된 모든 세션의 최대 공간입니다(모든 Inspector 실행). 각 실행은 타임스탬프 하위 폴더를 사용하며, 이를 넘으면 가장 오래된 HAR 파일부터 삭제됩니다. 빈 실행 폴더는 제거됩니다.",
+ "loopback.intro": "Windows 스토어 / UWP 앱은 기본적으로 localhost가 차단됩니다. Inspector를 사용할 앱을 선택한 다음 적용하세요. 적용 후 각 앱을 다시 시작(완전히 종료)하세요. Inspector는 시스템 프록시가 켜진 상태로 실행 중이어야 합니다. 모두 지우기는 모든 허용 항목을 제거합니다.",
+ "loopback.closedUnchanged": "스토어 앱은 변경되지 않았습니다.",
+ "loopback.proxyStopped": "프록시를 시작하고 시스템 프록시를 켜세요. 둘 다 켜지기 전에는 스토어 앱을 캡처할 수 없습니다.",
+ "loopback.systemProxyOff": "시스템 프록시를 켜세요(캡처 메뉴). 허용 목록은 스토어 앱이 localhost에 도달하게 할 뿐이며, 앱은 여전히 시스템 프록시를 따릅니다.",
+ "loopback.refreshing": "실행 중인 앱이 다시 연결되도록 시스템 프록시를 새로 고치는 중…",
+ "loopback.unchangedCount": "허용 목록이 이미 일치합니다: {0}.",
+ "loopback.allowed": "허용됨: {0}.",
+ "loopback.allowedRefreshed": " 실행 중인 앱이 다시 연결되도록 시스템 프록시를 새로 고쳤습니다. 트래픽이 여전히 보이지 않으면 앱을 완전히 종료한 뒤 다시 여세요.",
+ "loopback.allowedProxyStopped": " 프록시를 시작하고 시스템 프록시를 켠 다음, 앱을 완전히 종료한 뒤 다시 여세요.",
+ "loopback.allowedSystemProxyOff": " 시스템 프록시를 켠 다음, 앱을 완전히 종료한 뒤 다시 여세요.",
+ "loopback.allowedReady": " 트래픽을 캡처하려면 앱을 완전히 종료한 뒤 다시 여세요.",
+ "loopback.clearedRefreshed": "모든 루프백 예외가 지워졌습니다. 실행 중인 앱이 다시 연결되도록 시스템 프록시를 새로 고쳤습니다.",
+ "loopback.clearedReady": "모든 루프백 예외가 지워졌습니다. Inspector를 사용하던 앱은 완전히 종료한 뒤 다시 여세요.",
+ "loopback.cleared": "모든 루프백 예외가 지워졌습니다.",
+ "trust.macWaitBody": "키체인의 정보 가져오기는 SSL 정책이 저장되지 않았어도 항상 신뢰로 표시될 수 있습니다(Chrome과 Inspector는 여전히 이 CA를 신뢰하지 않습니다).\n\n저장을 강제하세요:\n1. Keychain Access → 로그인 → 인증서 → Titanium Root Certificate Authority를 두 번 클릭\n2. 신뢰 펼치기\n3. 이 인증서를 사용할 때를 시스템 기본값 사용으로 설정한 다음 다시 항상 신뢰로 변경\n4. 정보 가져오기 닫기 — 암호 프롬프트가 반드시 나타나야 하며, 그때 실제 SSL 신뢰 정책이 기록됩니다\n\n해당 정책이 감지되면 이 창은 자동으로 닫힙니다. 이미 저장했다면 항상 신뢰를 저장했습니다를 클릭하세요.",
+ "trust.macWaitStatus": "Keychain의 인증서를 기다리는 중…",
+ "trust.macWaitInKeychain": "저장된 SSL 정책을 기다리는 중(항상 신뢰를 전환하고, 정보 가져오기를 닫고, 암호를 입력)…",
+ "trust.macNotSaved": "항상 신뢰 표시만으로는 부족합니다 — 시스템 기본값 사용에서 항상 신뢰로 전환하고, 정보 가져오기를 닫고, 암호를 입력한 다음 루트 CA 설치 / HTTPS 복호화를 다시 시도하세요",
+ "trust.macConfirmSaved": "항상 신뢰를 저장했습니다",
+ "trust.exportCa": "CA 내보내기",
+ "trust.install.mac": "HTTPS 복호화에는 Keychain Access(로그인 키체인)에서 Titanium Inspector 루트 CA를 신뢰해야 합니다. 지금 설치할까요?",
+ "trust.install.linux": "HTTPS 복호화에는 사용자 인증서 저장소(NSS)에서 Titanium Inspector 루트 CA를 신뢰해야 합니다. 지금 설치할까요?",
+ "trust.install.windows": "HTTPS 복호화에는 현재 사용자의 신뢰할 수 있는 루트 저장소에서 Titanium Inspector 루트 CA를 신뢰해야 합니다. 지금 설치할까요?\n\nWindows가 신뢰할 수 있는 루트의 예/아니요 보안 대화 상자(UAC 아님)를 표시할 수 있습니다 — CA를 신뢰하려면 예를 선택하세요.",
+ "trust.install.other": "HTTPS 복호화에는 이 컴퓨터에서 Titanium Inspector 루트 CA를 신뢰해야 합니다. 지금 설치할까요?",
+ "trust.remove.mac": "Keychain에서 Titanium Inspector 루트 CA를 제거할까요? HTTPS 복호화가 꺼집니다.",
+ "trust.remove.linux": "사용자 인증서 저장소(NSS)에서 Titanium Inspector 루트 CA를 제거할까요? HTTPS 복호화가 꺼집니다.",
+ "trust.remove.windows": "현재 사용자의 신뢰할 수 있는 루트 저장소에서 Titanium Inspector 루트 CA를 제거할까요? HTTPS 복호화가 꺼집니다.",
+ "trust.remove.other": "Titanium Inspector 루트 CA를 제거할까요? HTTPS 복호화가 꺼집니다.",
+ "trust.elevate.mac": "사용자 수준 신뢰가 실패했거나 부족했습니다. 계속하여 macOS 관리자 암호 프롬프트를 표시할까요? 취소하면 인증서 설정은 그대로입니다.",
+ "trust.elevate.linux": "사용자 수준 신뢰가 실패했거나 부족했습니다. 계속하여 polkit 관리자 프롬프트를 표시할까요? 취소하면 인증서 설정은 그대로입니다.",
+ "trust.elevate.windows": "사용자 수준 신뢰가 실패했거나 부족했습니다. 계속하여 UAC를 표시할까요? 취소하면 인증서 설정은 그대로입니다.",
+ "trust.elevate.other": "사용자 수준 신뢰가 실패했거나 부족했습니다. 관리자 프롬프트로 계속할까요? 취소하면 인증서 설정은 그대로입니다.",
+ "trust.recovery.mac": "\n\n계속하여 macOS 관리자 암호 프롬프트를 표시할까요? 나중에를 선택하면 인증서 설정은 그대로입니다.",
+ "trust.recovery.linux": "\n\n계속하여 polkit 관리자 프롬프트를 표시할까요? 나중에를 선택하면 인증서 설정은 그대로입니다.",
+ "trust.recovery.windows": "\n\n계속하여 UAC를 표시할까요? 나중에를 선택하면 인증서 설정은 그대로입니다.",
+ "trust.recovery.other": "\n\n관리자 프롬프트로 계속할까요? 나중에를 선택하면 인증서 설정은 그대로입니다.",
+ "trust.hosts.mac": "OS 우회에는 캡처 → 시스템 프록시가 필요합니다(macOS 네트워크 프록시 설정을 사용). 터널 전용 규칙은 Inspector에 닿는 모든 클라이언트에 적용됩니다. 공장 기본값이 아래 목록에 들어 있습니다 — 자유롭게 편집하거나 초기화하세요.",
+ "trust.hosts.linux": "OS 우회에는 캡처 → 시스템 프록시가 필요합니다(데스크톱 / 환경 프록시 설정을 사용). 터널 전용 규칙은 Inspector에 닿는 모든 클라이언트에 적용됩니다. 공장 기본값이 아래 목록에 들어 있습니다 — 자유롭게 편집하거나 초기화하세요.",
+ "trust.hosts.windows": "OS 우회에는 캡처 → 시스템 프록시가 필요합니다(WinINET 사용). 터널 전용 규칙은 Inspector에 닿는 모든 클라이언트에 적용됩니다. 공장 기본값이 아래 목록에 들어 있습니다 — 자유롭게 편집하거나 초기화하세요.",
+ "trust.hosts.other": "OS 우회에는 캡처 → 시스템 프록시가 필요합니다. 터널 전용 규칙은 Inspector에 닿는 모든 클라이언트에 적용됩니다. 공장 기본값이 아래 목록에 들어 있습니다 — 자유롭게 편집하거나 초기화하세요.",
+ "trust.localhost.mac": "시스템 프록시가 켜져 있으면 localhost를 Inspector로 보냅니다. 끄면 localhost가 macOS 프록시 우회 목록에 추가됩니다.",
+ "trust.localhost.linux": "시스템 프록시가 켜져 있으면 localhost를 Inspector로 보냅니다. 끄면 localhost가 NO_PROXY에 추가됩니다.",
+ "trust.localhost.windows": "시스템 프록시가 켜져 있으면 localhost를 Inspector로 보냅니다(WinINET <-loopback>). 끄면 루프백이 프록시를 건너뜁니다.",
+ "trust.localhost.other": "시스템 프록시가 켜져 있으면 localhost를 Inspector로 보냅니다.",
+ "trust.status.missing": "루트 CA가 아직 신뢰되지 않았습니다 — 다시 시도하거나 CA를 내보내세요",
+ "trust.status.cancelled": "루트 CA 설치가 취소되었습니다",
+ "trust.status.certutil": "브라우저 인증서 도구가 없습니다 — 설치한 뒤 다시 시도하거나 CA를 내보내세요",
+ "trust.status.homebrew": "인증서 도구를 설치하려면 Homebrew가 필요합니다 — 수동으로 신뢰하려면 CA를 내보내세요",
+ "trust.status.macConfirm": "Keychain Access에서 Titanium Inspector 루트 CA를 항상 신뢰로 설정하세요",
+ "trust.status.keychain": "Keychain 신뢰에 실패했습니다 — 다시 시도하거나 CA를 내보내 수동으로 신뢰하세요",
+ "trust.fail.keychainTitle": "Keychain에서 신뢰 확인",
+ "trust.fail.continueKeychain": "Keychain Access에서 계속",
+ "trust.fail.toolsTitle": "인증서 도구가 필요합니다",
+ "trust.fail.toolsLinux": "루트 CA 신뢰를 마치려면 Inspector에 certutil(NSS 도구)이 필요합니다.",
+ "trust.fail.toolsOther": "루트 CA 신뢰를 마치려면 Inspector에 브라우저 인증서 도구가 필요합니다.",
+ "trust.fail.tryAgain": "다시 시도",
+ "trust.fail.homebrewBody": "인증서 도구를 설치하려면 Homebrew가 필요합니다. 수동으로 신뢰하려면 CA를 내보내세요.",
+ "trust.fail.title": "아직 HTTPS를 복호화할 수 없습니다",
+ "trust.fail.body": "이 컴퓨터에서는 Titanium Inspector 루트 CA가 아직 신뢰되지 않았습니다.",
+ "toolbar.throttle": "스로틀",
+ "toolbar.throttleTip": "캡처 중에 지연과 대역폭 조절을 추가합니다(본문 쓰기 / WebSocket 프레임). 기본값은 꺼짐입니다.",
+ "toolbar.bindWatermark": "*, localhost 또는 IP",
+ "toolbar.bindTip": "127.0.0.1 또는 localhost = 이 컴퓨터만. 0.0.0.0 또는 * = 모든 네트워크 어댑터(localhost 포함).",
+ "toolbar.portWatermark": "* 또는 포트",
+ "toolbar.portTip": "* 또는 비어 있음 = OS가 선택한 포트(실제 포트는 시작 후에 나타납니다). 그렇지 않으면 1–65535.",
+ "toolbar.listeningTip": "프록시가 수신 중입니다",
+ "toolbar.trustHealthTip": "HTTPS 복호화를 위한 루트 CA 신뢰 상태입니다. 신뢰되지 않음으로 표시되면 CA를 설치하거나 신뢰하세요.",
+ "chip.process": "프로세스",
+ "inspect.request": "요청",
+ "inspect.requestTip": "요청 헤더와 본문",
+ "inspect.copyHeaders": "헤더 복사",
+ "inspect.resizeTip": "끌어서 크기를 바꿉니다. 두 번 클릭하면 초기화됩니다.",
+ "inspect.pretty": "정리",
+ "inspect.hex": "16진",
+ "inspect.hexTip": "본문을 16진 덤프로 표시합니다",
+ "inspect.saveRequest": "요청 저장…",
+ "inspect.response": "응답",
+ "inspect.responseTip": "응답 헤더와 본문",
+ "inspect.saveResponse": "응답 저장…",
+ "inspect.diff": "비교",
+ "inspect.frames": "WS 프레임",
+ "inspect.framesHelp": "이 세션의 실시간 WebSocket 프레임입니다(방향, 옵코드, 페이로드 미리 보기).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "응답 본문에서 해석한 서버 전송 이벤트입니다.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "헤더 표시",
+ "inspect.hideHeaders": "헤더 숨기기",
+ "inspect.headers": "헤더 ({0})",
+ "inspect.prettyTip": "JSON, XML, HTML을 들여씁니다",
+ "inspect.prettyHexTip": "16진 보기에서는 적용되지 않습니다",
+ "inspect.emptyBody": "(비어 있음)",
+ "inspect.noRequestBody": "요청 본문 없음",
+ "inspect.waiting": "응답을 기다리는 중…",
+ "composer.help": "프록시를 통해 요청을 만들어 보냅니다. 선택 항목에서 불러오기는 현재 세션을 복사합니다.",
+ "composer.method": "메서드",
+ "composer.url": "URL",
+ "composer.headers": "헤더 (한 줄에 이름: 값)",
+ "composer.body": "본문",
+ "composer.loadSelected": "선택 항목에서 불러오기",
+ "composer.loadBody": "파일에서 본문 불러오기…",
+ "composer.send": "보내기",
+ "bp.help": "일치하는 클라이언트 요청을 일시 중지하여 본문을 편집하거나 계속하거나 중단할 수 있습니다. 한 번에 하나만 일시 중지되며 120s 후 자동으로 계속됩니다. 사용을 선택 해제하면 일시 중지된 요청이 계속됩니다.",
+ "bp.enabled": "사용",
+ "bp.breakOnResponse": "응답에서 중단",
+ "bp.match": "일치",
+ "bp.urlWatermark": "URL 필터 (* = 모두, 예: *api*/users*)",
+ "bp.graphqlWatermark": "이 GraphQL 작업만 (선택 사항)",
+ "bp.graphqlTip": "클라이언트 요청 본문에 대한 추가 필터입니다. JSON operationName 또는 이름이 있는 쿼리와 일치합니다. 비워 두면 해당 URL의 모든 작업과 일치합니다.",
+ "bp.fromSelected": "선택한 세션에서",
+ "bp.fromSelectedTip": "선택한 세션의 요청에서 GraphQL 작업 이름을 복사합니다.",
+ "bp.graphqlHelp": "GraphQL 칸을 비워 두면 모든 작업과 일치합니다. 채우면(예: GetUser) 위 URL의 해당 클라이언트 요청만 일시 중지합니다. 응답에서 중단은 여전히 URL 필터를 사용합니다.",
+ "bp.editWatermark": "본문 편집 (본문 편집 적용 후 계속)",
+ "bp.applyEdit": "본문 편집 적용",
+ "bp.continue": "계속",
+ "bp.abort": "중단",
+ "ar.help": "실제 서버보다 먼저 가짜 응답을 반환합니다. 일치는 규칙이 어떤 클라이언트 요청에 적용되는지 정합니다. 그 아래 필드가 돌려보내는 내용입니다.",
+ "ar.enabled": "사용 (중단점보다 먼저)",
+ "ar.urlWatermark": "URL 일치 (* 와일드카드)",
+ "ar.graphqlHelp": "같은 URL에서 GraphQL 작업마다 다른 규칙을 쓸 수 있습니다. 비워 두면 모든 작업과 일치합니다.",
+ "ar.respondWith": "응답 내용",
+ "ar.statusTip": "HTTP 상태. 비움 = 200. 100–599를 사용하세요.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local 파일 (선택 사항)",
+ "ar.bodyWatermark": "응답 본문 (Map Local이 비어 있을 때 사용)",
+ "ar.add": "규칙 추가",
+ "ar.update": "규칙 업데이트",
+ "ar.delete": "규칙 삭제",
+ "script.intro": "캡처된 모든 세션에서 한 줄에 명령 하나입니다. 이것은 JavaScript나 C#이 아닙니다 — 아래 명령만 입력하세요.",
+ "script.what": "입력할 수 있는 것",
+ "script.setHeaderHelp": "헤더를 추가하거나 바꿉니다. 트래픽은 계속 서버로 갑니다.",
+ "script.setStatusHelp": "요청일 때: 지금 응답하고 서버를 건너뜁니다. 응답일 때: 클라이언트가 보는 상태를 바꿉니다.",
+ "script.abortHelp": "403 Forbidden으로 차단합니다. 다른 코드를 고르려면 set-status 줄을 추가하세요.",
+ "script.comment": "줄을 # 또는 //로 시작하면 주석입니다. 명령을 함께 쓸 수 있으며, 각각 한 줄에 두세요.",
+ "script.onRequest": "요청일 때",
+ "script.onResponse": "응답일 때",
+ "script.requestSkips": "여기서 abort 또는 set-status는 AutoResponder, 중단점, 오리진을 건너뜁니다.",
+ "map.help": "일치하는 클라이언트 요청을 실제 서버 전에 다른 오리진으로 다시 씁니다. 일치와 대상에 *를 하나씩 넣어 경로/쿼리 접미사를 유지합니다. AutoResponder / Map Local 다음에 실행됩니다.",
+ "map.graphqlHelp": "비워 두면 해당 URL의 모든 작업을 다시 씁니다. 채우면 그 GraphQL 작업만 다시 씁니다.",
+ "map.rewriteTo": "다시 쓸 대상",
+ "map.targetWatermark": "대상 URL (절대, *는 선택)",
+ "loopback.allow": "허용",
+ "loopback.appName": "앱 이름",
+ "loopback.packageId": "패키지 ID",
+ "status.ready": "준비됨",
+ "status.searchingBodies": "본문 검색 중…",
+ "status.proxyStopped": "프록시 중지됨",
+ "status.proxyRunning": "프록시가 {0}에서 실행 중",
+ "trust.health.trusted": "CA 신뢰됨",
+ "trust.health.untrusted": "CA 신뢰되지 않음"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.nb.json b/src/Titanium.Inspector/Localization/strings.nb.json
new file mode 100644
index 000000000..3e9d4977a
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.nb.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Fil",
+ "menu.exportAllHar": "Eksporter all HAR…",
+ "menu.exportSelectedHar": "Eksporter valgt HAR…",
+ "menu.importHar": "Importer HAR…",
+ "menu.exportAllArchive": "Eksporter hele arkivet…",
+ "menu.exportSelectedArchive": "Eksporter valgt arkiv…",
+ "menu.importArchive": "Importer arkiv…",
+ "menu.exit": "Avslutt",
+ "menu.capture": "Opptak",
+ "menu.startProxy": "Start proxyen",
+ "menu.stopProxy": "Stopp proxy",
+ "menu.capturing": "Tar opp",
+ "menu.clearSessions": "Tøm økter",
+ "menu.removeSelected": "Fjern valgte",
+ "menu.autoStartCapture": "Start opptak automatisk",
+ "menu.autoSystemProxy": "Slå på systemproxy automatisk ved start",
+ "menu.decryptHttps": "Dekrypter HTTPS",
+ "menu.systemProxy": "Systemproxy",
+ "menu.captureLocal": "Ta opp lokal trafikk",
+ "menu.allowStoreApps": "Tillat Store-apper…",
+ "menu.installCa": "Installer rot-CA (gjeldende bruker)",
+ "menu.removeCa": "Fjern rot-CA (gjeldende bruker)",
+ "menu.rotateCa": "Tøm og installer rot-CA på nytt…",
+ "menu.removeOldCas": "Fjern gamle rot-CA-er…",
+ "menu.exportCa": "Eksporter rot-CA…",
+ "menu.trustFirefox": "Stol på CA i Firefox…",
+ "menu.deviceCa": "Sett opp CA for ekstern enhet",
+ "menu.tools": "Verktøy",
+ "menu.composer": "Komponist…",
+ "menu.breakpoints": "Brytepunkter…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Skript…",
+ "menu.mapRemote": "Ekstern tilordning…",
+ "menu.options": "Alternativer",
+ "menu.theme": "Tema",
+ "menu.themeLight": "Lyst",
+ "menu.themeDark": "Mørkt",
+ "menu.themeAutomatic": "Automatisk",
+ "menu.language": "Språk",
+ "menu.languageAutomatic": "Automatisk",
+ "menu.columns": "Kolonner",
+ "menu.col.id": "ID",
+ "menu.col.method": "Metode",
+ "menu.col.status": "Status",
+ "menu.col.host": "Vert",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protokoll",
+ "menu.col.duration": "Varighet",
+ "menu.col.ttfb": "Venting (TTFB)",
+ "menu.col.size": "Størrelse",
+ "menu.col.process": "Prosess",
+ "menu.col.started": "Startet",
+ "menu.col.scheme": "Skjema",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Tilbakestill kolonner",
+ "menu.sessionRetention": "Øktbevaring…",
+ "menu.excludedHosts": "Utelatte verter…",
+ "menu.excludedHostsTip": "Hopp over-lister for HTTPS-dekryptering og regler for å omgå systemet",
+ "menu.ignoreCerts": "Ignorer usikre serversertifikater",
+ "menu.addVia": "Legg til Via-hode",
+ "menu.addViaTip": "Legg til Via: … titanium-web-proxy på oppfanget trafikk (RFC 9110). Av slår av innsetting og gjenkjenning av Via-løkker.",
+ "menu.logging": "Loggføring…",
+ "menu.resetSettings": "Tilbakestill Inspector-innstillinger…",
+ "menu.help": "Hjelp",
+ "menu.checkUpdates": "Se etter oppdateringer…",
+ "menu.checkUpdatesStartup": "Se etter oppdateringer ved oppstart",
+ "menu.updateChannel": "Oppdateringskanal",
+ "menu.channelStable": "Stabil",
+ "menu.channelBeta": "Beta",
+ "menu.about": "Om Titanium Inspector…",
+ "toolbar.searchWatermark": "Søk i URL, vert, prosess… (eller method:GET status:4xx)",
+ "toolbar.searchTip": "Ren tekst søker i URL, vert, prosessnavn, nøyaktig prosess-ID, metode og status. Prefikser begrenser til ett felt: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: søker også i innhold som er skrevet til disk. Sett - foran et felt eller et ord for å utelate det (f.eks. -host:cursor.sh eller -cursor). Filtre redigerer skjulte verter og prosesser med mer plass.",
+ "toolbar.filters": "Filtre",
+ "toolbar.filtersTip": "Rediger søket og skjulte verter eller prosesser i et større vindu",
+ "toolbar.hideConnect": "Skjul CONNECT",
+ "toolbar.hideConnectTip": "Skjul ugjennomsiktige HTTPS-tunneler når Dekrypter HTTPS er av",
+ "toolbar.hideImages": "Skjul bilder",
+ "toolbar.errorsOnly": "Bare feil",
+ "toolbar.clearFilters": "Tøm filtre",
+ "toolbar.hidden": "Skjult",
+ "ctx.replay": "Send på nytt",
+ "ctx.loadComposer": "Last inn i komponisten",
+ "ctx.saveRequest": "Lagre forespørselskropp…",
+ "ctx.saveResponse": "Lagre svarskropp…",
+ "ctx.copyUrl": "Kopier URL",
+ "ctx.copyCurl": "Kopier som curl",
+ "ctx.copyFetch": "Kopier som fetch",
+ "ctx.diff": "Sammenlign valgte…",
+ "ctx.filterHost": "Filtrer etter vert",
+ "ctx.hideHost": "Skjul vert",
+ "ctx.filterProcess": "Filtrer etter prosess",
+ "ctx.hideProcess": "Skjul prosess",
+ "ctx.excludeHost": "Utelat vert…",
+ "ctx.excludeHostTip": "Slutt å dekryptere denne vertens HTTPS. Radene blir i listen; bruk Skjul vert for å fjerne dem fra visningen.",
+ "grid.duration": "Varighet (ms)",
+ "grid.wait": "Venting (ms)",
+ "pane.inspect": "Undersøk",
+ "pane.composer": "Komponist",
+ "pane.breakpoints": "Brytepunkter",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Skript",
+ "pane.mapRemote": "Ekstern tilordning",
+ "pane.closeTip": "Lukk rute",
+ "inspect.empty": "Velg en økt i rutenettet for å se forespørselens og svarets hoder og innhold.",
+ "common.ok": "OK",
+ "common.cancel": "Avbryt",
+ "common.save": "Lagre",
+ "common.apply": "Bruk",
+ "common.remove": "Fjern",
+ "common.browse": "Bla gjennom…",
+ "common.openFolder": "Åpne mappe",
+ "common.forget": "Glem",
+ "common.close": "Lukk",
+ "loopback.window": "Tillat Store-apper å bruke denne proxyen",
+ "loopback.checkAll": "Merk alle",
+ "loopback.uncheckAll": "Fjern merking for alle",
+ "loopback.filterWatermark": "Filtrer etter appnavn…",
+ "loopback.clearAll": "Tøm alle",
+ "trust.macWindow": "Bekreft tillit i Keychain Access",
+ "trust.openKeychain": "Åpne Keychain Access",
+ "trust.notNow": "Ikke nå",
+ "trust.recoveryTitle": "Tillit til rot-CA",
+ "trust.macWaitPlaceholder": "Venter på SSL-tillit…",
+ "window.about": "Om Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Opphavsrett © Jehonathan Thomas",
+ "about.license": "Lisensiert under PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Lisensdetaljer",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filtre",
+ "filters.search": "Søk",
+ "filters.searchHelp": "Samme søk som på verktøylinjen, med mer plass. Skjulte verter og prosesser står nedenfor, ikke i dette feltet.",
+ "filters.searchWatermark": "URL, vert, prosess, method:GET, status:4xx…",
+ "filters.hideHeading": "Skjul fra listen",
+ "filters.hideHelp": "Radene forblir fanget. Dette skjuler dem bare i listen. For å slutte å dekryptere HTTPS, bruk Utelat vert…",
+ "filters.hosts": "Verter",
+ "filters.addHostWatermark": "Legg til en vert som skal skjules",
+ "filters.addHost": "Legg til vert",
+ "filters.processes": "Prosesser",
+ "filters.addProcessWatermark": "Legg til en prosess som skal skjules",
+ "filters.addProcess": "Legg til prosess",
+ "filters.processSpace": "Et navn med mellomrom forkortes ved første ord, noe som også kan skjule andre navn som inneholder det ordet.",
+ "window.confirm": "Bekreft",
+ "window.excludeHost": "Utelat vert",
+ "exclude.action": "Utelat",
+ "exclude.help": "Denne verten vises fortsatt i øktlisten. Inspector prøver ikke å lese dens HTTPS.",
+ "window.logging": "Loggføring",
+ "logging.help": "Skriv diagnosemeldinger for feilsøking. Endringer gjelder med en gang.",
+ "logging.enable": "Slå på loggføring",
+ "logging.writeFile": "Skriv logg til en fil",
+ "logging.detail": "Hvor mye detaljer",
+ "logging.detailHelp": "Error = bare problemer. Warning / Information = mer kontekst. Debug = svært detaljert.",
+ "logging.path": "Sti til loggfil",
+ "window.excludedHosts": "Utelatte verter",
+ "excluded.reset": "Tilbakestill til standard",
+ "excluded.bypass": "Omgå proxy (system)",
+ "excluded.bypassHelp": "Trafikk når aldri Inspector når systemproxy er på. Forhåndsutfylt med verter for Microsoft-identitet / SSO / RDP. Fjerner du dem, kan RDP-pålogging slutte å virke mens systemproxy er aktivert.",
+ "excluded.notDecrypted": "Verter som ikke dekrypteres",
+ "excluded.notDecryptedHelp": "CONNECT forblir synlig; TLS forblir ugjennomsiktig når Dekrypter HTTPS er på. Forhåndsutfylt med verter som bruker sertifikatfesting (Dropbox, Webex).",
+ "excluded.learnHeading": "Ikke dekrypter automatisk ved dekrypteringsfeil",
+ "excluded.learn": "Lær verter der opprinnelsens TLS feiler under dekryptering",
+ "excluded.learnHelp": "Når opprinnelsens TLS feiler gjentatte ganger under dekryptering, eller opprinnelsesserveren returnerer 403/429, slutter Inspector å dekryptere den verten for senere tilkoblinger i denne økten. Listen har et tak og glemmes ved omstart med mindre du flytter den opp.",
+ "excluded.learnPaused": "Læring er satt på pause — eksisterende oppføringer beholdes til de glemmes.",
+ "excluded.noneLearned": "Ingen verter er lært ennå.",
+ "excluded.promote": "Flytt til verter som ikke dekrypteres",
+ "excluded.clearLearned": "Tøm alle lærte",
+ "window.retention": "Øktbevaring",
+ "retention.max": "Maksimalt antall økter som beholdes",
+ "retention.maxHelp": "Hvor mange forespørsler som blir i øktlisten. Når grensen overskrides, forlater de eldste radene listen, men blir på disken til Tøm økter eller diskplassgrensen fjerner dem.",
+ "retention.cache": "Hurtigbuffermappe",
+ "retention.openCache": "Åpne hurtigbuffermappe",
+ "retention.clearCache": "Tøm lagret øktbuffer…",
+ "retention.advanced": "Avansert",
+ "retention.disk": "Diskplass for lagrede økter (MB)",
+ "retention.diskHelp": "Maksimal plass for alle lagrede økter på disk (alle kjøringer av Inspector). Hver kjøring bruker en undermappe med tidsstempel; de eldste HAR-filene slettes først når grensen overskrides. Tomme kjøringsmapper fjernes.",
+ "loopback.intro": "Windows Store- / UWP-apper er blokkert fra localhost som standard. Merk apper som skal bruke Inspector, og velg deretter Bruk. Start hver app på nytt (avslutt den helt) etter Bruk. Inspector må kjøre med systemproxy på. Tøm alle fjerner alle tillatelsesoppføringer.",
+ "loopback.closedUnchanged": "Store-apper uendret.",
+ "loopback.proxyStopped": "Start proxyen og slå på systemproxy. Store-apper kan ikke fanges før begge er på.",
+ "loopback.systemProxyOff": "Slå på systemproxy (menyen Opptak). Tillatelseslisten lar bare Store-apper nå localhost; de følger fortsatt systemproxyen.",
+ "loopback.refreshing": "Oppdaterer systemproxy slik at apper som kjører, kobler til på nytt…",
+ "loopback.unchangedCount": "Tillatelseslisten samsvarer allerede: {0}.",
+ "loopback.allowed": "Tillatt: {0}.",
+ "loopback.allowedRefreshed": " Systemproxyen ble oppdatert slik at apper som kjører, kobler til på nytt. Hvis trafikken fortsatt ikke vises, avslutt appen helt og åpne den igjen.",
+ "loopback.allowedProxyStopped": " Start proxyen og slå på systemproxy, avslutt deretter appen helt og åpne den igjen.",
+ "loopback.allowedSystemProxyOff": " Slå på systemproxy, avslutt deretter appen helt og åpne den igjen.",
+ "loopback.allowedReady": " Avslutt appen helt og åpne den igjen for å fange trafikk.",
+ "loopback.clearedRefreshed": "Alle loopback-unntak er tømt. Systemproxyen ble oppdatert slik at apper som kjører, kobler til på nytt.",
+ "loopback.clearedReady": "Alle loopback-unntak er tømt. Avslutt helt og åpne igjen hver app som brukte Inspector.",
+ "loopback.cleared": "Alle loopback-unntak er tømt.",
+ "trust.macWaitBody": "Vis info i Keychain kan allerede vise Stol alltid på selv når SSL-policyer ikke ble lagret (Chrome og Inspector behandler fortsatt CA-en som ikke klarert).\n\nTving en lagring:\n1. Keychain Access → login → Sertifikater → dobbeltklikk på Titanium Root Certificate Authority\n2. Utvid Tillit\n3. Sett Ved bruk av dette sertifikatet til Bruk systemstandarder, og endre det deretter til Stol alltid på igjen\n4. Lukk Vis info — du må få en passordforespørsel; den skriver de ekte SSL-tillitspolicyene\n\nDette vinduet lukkes automatisk når disse policyene oppdages. Hvis du allerede har lagret, klikk Jeg har lagret Stol alltid på.",
+ "trust.macWaitStatus": "Venter på sertifikatet i Keychain…",
+ "trust.macWaitInKeychain": "Venter på lagrede SSL-policyer (bytt Stol alltid på, lukk Vis info, skriv inn passord)…",
+ "trust.macNotSaved": "Visningen Stol alltid på er ikke nok — bytt Bruk systemstandarder → Stol alltid på, lukk Vis info, skriv inn passordet, og prøv deretter Installer rot-CA / Dekrypter HTTPS igjen",
+ "trust.macConfirmSaved": "Jeg har lagret Stol alltid på",
+ "trust.exportCa": "Eksporter CA",
+ "trust.install.mac": "Dekryptering av HTTPS krever tillit til rot-CA for Titanium Inspector i Keychain Access (login-nøkkelringen). Installere nå?",
+ "trust.install.linux": "Dekryptering av HTTPS krever tillit til rot-CA for Titanium Inspector i brukersertifikatlageret (NSS). Installere nå?",
+ "trust.install.windows": "Dekryptering av HTTPS krever tillit til rot-CA for Titanium Inspector i gjeldende brukers lager for klarerte rotsertifikater. Installere nå?\n\nWindows kan vise en Ja/Nei-sikkerhetsdialog for klarert rot (ikke UAC) — velg Ja for å stole på CA-en.",
+ "trust.install.other": "Dekryptering av HTTPS krever tillit til rot-CA for Titanium Inspector på denne datamaskinen. Installere nå?",
+ "trust.remove.mac": "Fjerne rot-CA for Titanium Inspector fra Keychain? HTTPS-dekryptering slås av.",
+ "trust.remove.linux": "Fjerne rot-CA for Titanium Inspector fra brukersertifikatlageret (NSS)? HTTPS-dekryptering slås av.",
+ "trust.remove.windows": "Fjerne rot-CA for Titanium Inspector fra gjeldende brukers lager for klarerte rotsertifikater? HTTPS-dekryptering slås av.",
+ "trust.remove.other": "Fjerne rot-CA for Titanium Inspector? HTTPS-dekryptering slås av.",
+ "trust.elevate.mac": "Tillit på brukernivå mislyktes eller var utilstrekkelig. Fortsette for å vise en macOS-forespørsel om administratorpassord? Avbryt lar sertifikatinnstillingene være uendret.",
+ "trust.elevate.linux": "Tillit på brukernivå mislyktes eller var utilstrekkelig. Fortsette for å vise en polkit-administratorforespørsel? Avbryt lar sertifikatinnstillingene være uendret.",
+ "trust.elevate.windows": "Tillit på brukernivå mislyktes eller var utilstrekkelig. Fortsette for å vise UAC? Avbryt lar sertifikatinnstillingene være uendret.",
+ "trust.elevate.other": "Tillit på brukernivå mislyktes eller var utilstrekkelig. Fortsette med en administratorforespørsel? Avbryt lar sertifikatinnstillingene være uendret.",
+ "trust.recovery.mac": "\n\nFortsette for å vise en macOS-forespørsel om administratorpassord? Ikke nå lar sertifikatinnstillingene være uendret.",
+ "trust.recovery.linux": "\n\nFortsette for å vise en polkit-administratorforespørsel? Ikke nå lar sertifikatinnstillingene være uendret.",
+ "trust.recovery.windows": "\n\nFortsette for å vise UAC? Ikke nå lar sertifikatinnstillingene være uendret.",
+ "trust.recovery.other": "\n\nFortsette med en administratorforespørsel? Ikke nå lar sertifikatinnstillingene være uendret.",
+ "trust.hosts.mac": "Omgåelse av systemet krever Opptak → Systemproxy (bruker proxyinnstillinger for macOS-nettverk). Regler bare for tunnel gjelder hver klient som treffer Inspector. Fabrikkstandard er forhåndsutfylt i listene nedenfor — rediger fritt eller tilbakestill.",
+ "trust.hosts.linux": "Omgåelse av systemet krever Opptak → Systemproxy (bruker proxyinnstillinger for skrivebord eller miljø). Regler bare for tunnel gjelder hver klient som treffer Inspector. Fabrikkstandard er forhåndsutfylt i listene nedenfor — rediger fritt eller tilbakestill.",
+ "trust.hosts.windows": "Omgåelse av systemet krever Opptak → Systemproxy (bruker WinINET). Regler bare for tunnel gjelder hver klient som treffer Inspector. Fabrikkstandard er forhåndsutfylt i listene nedenfor — rediger fritt eller tilbakestill.",
+ "trust.hosts.other": "Omgåelse av systemet krever Opptak → Systemproxy. Regler bare for tunnel gjelder hver klient som treffer Inspector. Fabrikkstandard er forhåndsutfylt i listene nedenfor — rediger fritt eller tilbakestill.",
+ "trust.localhost.mac": "Når systemproxy er på, send localhost gjennom Inspector. Av legger localhost til i omgåelseslisten for macOS-proxyen.",
+ "trust.localhost.linux": "Når systemproxy er på, send localhost gjennom Inspector. Av legger localhost til i NO_PROXY.",
+ "trust.localhost.windows": "Når systemproxy er på, send localhost gjennom Inspector (WinINET <-loopback>). Av lar loopback hoppe over proxyen.",
+ "trust.localhost.other": "Når systemproxy er på, send localhost gjennom Inspector.",
+ "trust.status.missing": "Rot-CA er ikke klarert ennå — prøv igjen, eller Eksporter CA",
+ "trust.status.cancelled": "Installasjon av rot-CA avbrutt",
+ "trust.status.certutil": "Nettleserens sertifikatverktøy mangler — installer dem, prøv igjen, eller Eksporter CA",
+ "trust.status.homebrew": "Homebrew kreves for å installere sertifikatverktøy — Eksporter CA for å stole på den manuelt",
+ "trust.status.macConfirm": "Sett Stol alltid på for rot-CA for Titanium Inspector i Keychain Access",
+ "trust.status.keychain": "Keychain-tillit mislyktes — prøv igjen, eller Eksporter CA og stol på den manuelt",
+ "trust.fail.keychainTitle": "Bekreft tillit i Keychain",
+ "trust.fail.continueKeychain": "Fortsett i Keychain Access",
+ "trust.fail.toolsTitle": "Sertifikatverktøy trengs",
+ "trust.fail.toolsLinux": "Inspector trenger certutil (NSS-verktøy) for å fullføre tilliten til rot-CA.",
+ "trust.fail.toolsOther": "Inspector trenger nettleserens sertifikatverktøy for å fullføre tilliten til rot-CA.",
+ "trust.fail.tryAgain": "Prøv igjen",
+ "trust.fail.homebrewBody": "Homebrew kreves for å installere sertifikatverktøy. Eksporter CA-en for å stole på den manuelt.",
+ "trust.fail.title": "Kan ikke dekryptere HTTPS ennå",
+ "trust.fail.body": "Rot-CA for Titanium Inspector er ikke klarert på denne datamaskinen ennå.",
+ "toolbar.throttle": "Begrensning",
+ "toolbar.throttleTip": "Legg til forsinkelse og båndbreddeforming under opptak (skriving av kropp / WebSocket-rammer). Av som standard.",
+ "toolbar.bindWatermark": "*, localhost eller IP",
+ "toolbar.bindTip": "127.0.0.1 eller localhost = bare denne PC-en. 0.0.0.0 eller * = alle nettverkskort (inkluderer localhost).",
+ "toolbar.portWatermark": "*, eller port",
+ "toolbar.portTip": "* eller tomt = port valgt av operativsystemet (den virkelige porten vises etter start). Ellers 1–65535.",
+ "toolbar.listeningTip": "Proxyen lytter",
+ "toolbar.trustHealthTip": "Tillitsstatus for rot-CA for Dekrypter HTTPS. Installer eller stol på CA hvis det står CA ikke klarert.",
+ "chip.process": "prosess",
+ "inspect.request": "Forespørsel",
+ "inspect.requestTip": "Forespørselens hoder og kropp",
+ "inspect.copyHeaders": "Kopier hoder",
+ "inspect.resizeTip": "Dra for å endre størrelse. Dobbeltklikk for å tilbakestille.",
+ "inspect.pretty": "Formatert",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Vis kroppen som en Hex-dump",
+ "inspect.saveRequest": "Lagre forespørsel…",
+ "inspect.response": "Svar",
+ "inspect.responseTip": "Svarets hoder og kropp",
+ "inspect.saveResponse": "Lagre svar…",
+ "inspect.diff": "Forskjell",
+ "inspect.frames": "WS-rammer",
+ "inspect.framesHelp": "Direkte WebSocket-rammer for denne økten (retning, opcode, forhåndsvisning av data).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events lest fra svarets kropp.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Vis hoder",
+ "inspect.hideHeaders": "Skjul hoder",
+ "inspect.headers": "Hoder ({0})",
+ "inspect.prettyTip": "Rykk inn JSON, XML og HTML",
+ "inspect.prettyHexTip": "Gjelder ikke i visningen Hex",
+ "inspect.emptyBody": "(tom)",
+ "inspect.noRequestBody": "Ingen forespørselskropp",
+ "inspect.waiting": "Venter på svar…",
+ "composer.help": "Bygg og send en forespørsel gjennom proxyen. Last inn fra valgt kopierer den gjeldende økten.",
+ "composer.method": "Metode",
+ "composer.url": "URL",
+ "composer.headers": "Hoder (Navn: Verdi per linje)",
+ "composer.body": "Kropp",
+ "composer.loadSelected": "Last inn fra valgt",
+ "composer.loadBody": "Last inn kropp fra fil…",
+ "composer.send": "Send",
+ "bp.help": "Sett samsvarende klientforespørsler på pause for å redigere kroppen, fortsette eller avbryte. Én pause om gangen; fortsetter automatisk etter 120s. Fjerner du avmerkingen for Aktivert, fortsetter en pauset forespørsel.",
+ "bp.enabled": "Aktivert",
+ "bp.breakOnResponse": "Bryt ved svar",
+ "bp.match": "Treff",
+ "bp.urlWatermark": "URL-filter (* = alle, f.eks. *api*/users*)",
+ "bp.graphqlWatermark": "Bare denne GraphQL-operasjonen (valgfritt)",
+ "bp.graphqlTip": "Ekstra filter på klientforespørselens kropp. Samsvarer med JSON operationName eller en navngitt spørring. La stå tomt for å treffe alle operasjoner på den URL.",
+ "bp.fromSelected": "Fra valgt økt",
+ "bp.fromSelectedTip": "Kopier navnet på GraphQL-operasjonen fra den valgte øktens forespørsel.",
+ "bp.graphqlHelp": "La feltet GraphQL stå tomt for å treffe alle operasjoner. Fyll det ut (f.eks. GetUser) for bare å pause den klientforespørselen på den URL ovenfor. Bryt ved svar bruker fortsatt URL-filteret.",
+ "bp.editWatermark": "Rediger kropp (Bruk redigert kropp, deretter Fortsett)",
+ "bp.applyEdit": "Bruk redigert kropp",
+ "bp.continue": "Fortsett",
+ "bp.abort": "Avbryt",
+ "ar.help": "Returner et falskt svar før den ekte serveren. Treff avgjør hvilke klientforespørsler en regel gjelder for; feltene under er det du sender tilbake.",
+ "ar.enabled": "Aktivert (før brytepunkter)",
+ "ar.urlWatermark": "Treff på URL (* jokertegn)",
+ "ar.graphqlHelp": "Samme URL og ulike GraphQL-operasjoner kan bruke ulike regler. La stå tomt for å treffe alle operasjoner.",
+ "ar.respondWith": "Svar med",
+ "ar.statusTip": "HTTP-status. Tomt = 200. Bruk 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local-fil (valgfritt)",
+ "ar.bodyWatermark": "Svarskropp (brukes når Map Local er tom)",
+ "ar.add": "Legg til regel",
+ "ar.update": "Oppdater regel",
+ "ar.delete": "Slett regel",
+ "script.intro": "Én kommando per linje, på hver opptatte økt. Dette er ikke JavaScript eller C# — skriv bare kommandoene nedenfor.",
+ "script.what": "Dette kan du skrive",
+ "script.setHeaderHelp": "Legg til eller erstatt et hode. Trafikken fortsetter likevel til serveren.",
+ "script.setStatusHelp": "Ved forespørsel: svar nå og hopp over serveren. Ved svar: endre statusen klienten ser.",
+ "script.abortHelp": "Blokker med 403 Forbudt. Legg til en linje med set-status for å velge en annen kode.",
+ "script.comment": "Start en linje med # eller // for en kommentar. Du kan kombinere kommandoer; sett hver på sin egen linje.",
+ "script.onRequest": "Ved forespørsel",
+ "script.onResponse": "Ved svar",
+ "script.requestSkips": "abort eller set-status her hopper over AutoResponder, brytepunkter og opprinnelsen.",
+ "map.help": "Skriv om samsvarende klientforespørsler til en annen opprinnelse før den ekte serveren. Bruk én enkelt * i treff og mål for å beholde et suffiks for sti eller spørring. Kjører etter AutoResponder / Map Local.",
+ "map.graphqlHelp": "La stå tomt for å skrive om hver operasjon på den URL. Fyll ut for å skrive om bare den GraphQL-operasjonen.",
+ "map.rewriteTo": "Skriv om til",
+ "map.targetWatermark": "Mål-URL (absolutt, valgfri *)",
+ "loopback.allow": "Tillat",
+ "loopback.appName": "Appnavn",
+ "loopback.packageId": "Pakke-ID",
+ "status.ready": "Klar",
+ "status.searchingBodies": "Søker i kropper…",
+ "status.proxyStopped": "Proxyen er stoppet",
+ "status.proxyRunning": "Proxyen kjører på {0}",
+ "trust.health.trusted": "CA klarert",
+ "trust.health.untrusted": "CA ikke klarert"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.nl.json b/src/Titanium.Inspector/Localization/strings.nl.json
new file mode 100644
index 000000000..f8a7afda5
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.nl.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Bestand",
+ "menu.exportAllHar": "Alles exporteren als HAR…",
+ "menu.exportSelectedHar": "Selectie exporteren als HAR…",
+ "menu.importHar": "HAR importeren…",
+ "menu.exportAllArchive": "Alles exporteren als archief…",
+ "menu.exportSelectedArchive": "Selectie exporteren als archief…",
+ "menu.importArchive": "Archief importeren…",
+ "menu.exit": "Afsluiten",
+ "menu.capture": "Vastleggen",
+ "menu.startProxy": "Proxy starten",
+ "menu.stopProxy": "Proxy stoppen",
+ "menu.capturing": "Bezig met vastleggen",
+ "menu.clearSessions": "Sessies wissen",
+ "menu.removeSelected": "Selectie verwijderen",
+ "menu.autoStartCapture": "Vastleggen automatisch starten",
+ "menu.autoSystemProxy": "Systeemproxy automatisch bij starten",
+ "menu.decryptHttps": "HTTPS ontsleutelen",
+ "menu.systemProxy": "Systeemproxy",
+ "menu.captureLocal": "Lokaal verkeer vastleggen",
+ "menu.allowStoreApps": "Store-apps toestaan…",
+ "menu.installCa": "Basis-CA installeren (huidige gebruiker)",
+ "menu.removeCa": "Basis-CA verwijderen (huidige gebruiker)",
+ "menu.rotateCa": "Basis-CA wissen en opnieuw installeren…",
+ "menu.removeOldCas": "Oude basis-CA’s verwijderen…",
+ "menu.exportCa": "Basis-CA exporteren…",
+ "menu.trustFirefox": "CA vertrouwen in Firefox…",
+ "menu.deviceCa": "CA voor extern apparaat instellen",
+ "menu.tools": "Extra",
+ "menu.composer": "Opstellen…",
+ "menu.breakpoints": "Onderbrekingspunten…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Scripts…",
+ "menu.mapRemote": "Externe toewijzing…",
+ "menu.options": "Opties",
+ "menu.theme": "Thema",
+ "menu.themeLight": "Licht",
+ "menu.themeDark": "Donker",
+ "menu.themeAutomatic": "Automatisch",
+ "menu.language": "Taal",
+ "menu.languageAutomatic": "Automatisch",
+ "menu.columns": "Kolommen",
+ "menu.col.id": "Id",
+ "menu.col.method": "Methode",
+ "menu.col.status": "Status",
+ "menu.col.host": "Host",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protocol",
+ "menu.col.duration": "Duur",
+ "menu.col.ttfb": "Wachttijd (TTFB)",
+ "menu.col.size": "Grootte",
+ "menu.col.process": "Proces",
+ "menu.col.started": "Gestart",
+ "menu.col.scheme": "Schema",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Kolommen opnieuw instellen",
+ "menu.sessionRetention": "Sessiebehoud…",
+ "menu.excludedHosts": "Uitgesloten hosts…",
+ "menu.excludedHostsTip": "Lijsten om HTTPS-ontsleuteling over te slaan en omzeilingsregels van het besturingssysteem",
+ "menu.ignoreCerts": "Onveilige servercertificaten negeren",
+ "menu.addVia": "Via-header toevoegen",
+ "menu.addViaTip": "Voegt Via: … titanium-web-proxy toe aan onderschept verkeer (RFC 9110). Uit schakelt invoegen en Via-lusdetectie uit.",
+ "menu.logging": "Logboek…",
+ "menu.resetSettings": "Inspector-instellingen opnieuw instellen…",
+ "menu.help": "Help",
+ "menu.checkUpdates": "Controleren op updates…",
+ "menu.checkUpdatesStartup": "Bij het starten controleren op updates",
+ "menu.updateChannel": "Updatekanaal",
+ "menu.channelStable": "Stabiel",
+ "menu.channelBeta": "Bèta",
+ "menu.about": "Over Titanium Inspector…",
+ "toolbar.searchWatermark": "Zoek URL, host, proces… (of method:GET status:4xx)",
+ "toolbar.searchTip": "Losse tekst zoekt in URL, host, procesnaam, exacte proces-ID, methode en status. Voorvoegsels beperken tot één veld: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: zoekt ook inhoud die naar schijf is weggeschreven. Zet - voor een veld of woord om het uit te sluiten (bijv. -host:cursor.sh of -cursor). Filters bewerkt verborgen hosts en processen met meer ruimte.",
+ "toolbar.filters": "Filters",
+ "toolbar.filtersTip": "Bewerk de zoekopdracht en verborgen hosts of processen in een groter venster",
+ "toolbar.hideConnect": "CONNECT verbergen",
+ "toolbar.hideConnectTip": "Ondoorzichtige HTTPS-tunnels verbergen wanneer HTTPS ontsleutelen uit staat",
+ "toolbar.hideImages": "Afbeeldingen verbergen",
+ "toolbar.errorsOnly": "Alleen fouten",
+ "toolbar.clearFilters": "Filters wissen",
+ "toolbar.hidden": "Verborgen",
+ "ctx.replay": "Opnieuw afspelen",
+ "ctx.loadComposer": "Laden in Opstellen",
+ "ctx.saveRequest": "Aanvraaginhoud opslaan…",
+ "ctx.saveResponse": "Antwoordinhoud opslaan…",
+ "ctx.copyUrl": "URL kopiëren",
+ "ctx.copyCurl": "Kopiëren als curl",
+ "ctx.copyFetch": "Kopiëren als fetch",
+ "ctx.diff": "Selectie vergelijken…",
+ "ctx.filterHost": "Filteren op host",
+ "ctx.hideHost": "Host verbergen",
+ "ctx.filterProcess": "Filteren op proces",
+ "ctx.hideProcess": "Proces verbergen",
+ "ctx.excludeHost": "Host uitsluiten…",
+ "ctx.excludeHostTip": "Stop met het ontsleutelen van HTTPS voor deze host. De rijen blijven in de lijst; gebruik Host verbergen om ze uit beeld te halen.",
+ "grid.duration": "Duur (ms)",
+ "grid.wait": "Wachttijd (ms)",
+ "pane.inspect": "Inspecteren",
+ "pane.composer": "Opstellen",
+ "pane.breakpoints": "Onderbrekingspunten",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Scripts",
+ "pane.mapRemote": "Externe toewijzing",
+ "pane.closeTip": "Deelvenster sluiten",
+ "inspect.empty": "Selecteer een sessie in het raster om headervelden en inhoud van aanvraag en antwoord te bekijken.",
+ "common.ok": "OK",
+ "common.cancel": "Annuleren",
+ "common.save": "Opslaan",
+ "common.apply": "Toepassen",
+ "common.remove": "Verwijderen",
+ "common.browse": "Bladeren…",
+ "common.openFolder": "Map openen",
+ "common.forget": "Vergeten",
+ "common.close": "Sluiten",
+ "loopback.window": "Store-apps toestaan deze proxy te gebruiken",
+ "loopback.checkAll": "Alles aanvinken",
+ "loopback.uncheckAll": "Alles uitvinken",
+ "loopback.filterWatermark": "Filteren op app-naam…",
+ "loopback.clearAll": "Alles wissen",
+ "trust.macWindow": "Vertrouwen bevestigen in Keychain Access",
+ "trust.openKeychain": "Keychain Access openen",
+ "trust.notNow": "Niet nu",
+ "trust.recoveryTitle": "Vertrouwen van de basis-CA",
+ "trust.macWaitPlaceholder": "Wachten op SSL-vertrouwen…",
+ "window.about": "Over Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Copyright © Jehonathan Thomas",
+ "about.license": "Gelicentieerd onder de PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Licentiegegevens",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filters",
+ "filters.search": "Zoeken",
+ "filters.searchHelp": "Dezelfde zoekopdracht als de werkbalk, met meer ruimte. Verborgen hosts en processen staan hieronder, niet in dit vak.",
+ "filters.searchWatermark": "URL, host, proces, method:GET, status:4xx…",
+ "filters.hideHeading": "Verbergen in de lijst",
+ "filters.hideHelp": "Rijen blijven vastgelegd. Dit verbergt ze alleen in de lijst. Om te stoppen met HTTPS ontsleutelen, gebruikt u Host uitsluiten…",
+ "filters.hosts": "Hosts",
+ "filters.addHostWatermark": "Een host toevoegen om te verbergen",
+ "filters.addHost": "Host toevoegen",
+ "filters.processes": "Processen",
+ "filters.addProcessWatermark": "Een proces toevoegen om te verbergen",
+ "filters.addProcess": "Proces toevoegen",
+ "filters.processSpace": "Een naam met een spatie wordt bij het eerste woord afgekapt, waardoor ook andere namen met dat woord verborgen kunnen worden.",
+ "window.confirm": "Bevestigen",
+ "window.excludeHost": "Host uitsluiten",
+ "exclude.action": "Uitsluiten",
+ "exclude.help": "Deze host blijft in de sessielijst staan. Inspector probeert de HTTPS ervan niet te lezen.",
+ "window.logging": "Logboek",
+ "logging.help": "Diagnostische berichten schrijven voor probleemoplossing. Wijzigingen gelden meteen.",
+ "logging.enable": "Logboek inschakelen",
+ "logging.writeFile": "Log naar een bestand schrijven",
+ "logging.detail": "Mate van detail",
+ "logging.detailHelp": "Error = alleen problemen. Warning / Information = meer context. Debug = zeer uitgebreid.",
+ "logging.path": "Pad van het logbestand",
+ "window.excludedHosts": "Uitgesloten hosts",
+ "excluded.reset": "Standaardwaarden herstellen",
+ "excluded.bypass": "Proxy omzeilen (besturingssysteem)",
+ "excluded.bypassHelp": "Verkeer bereikt Inspector nooit wanneer de systeemproxy aan staat. Vooraf gevuld met Microsoft-identiteits-, SSO- en RDP-hosts. Ze verwijderen kan de RDP-aanmelding verbreken zolang de systeemproxy is ingeschakeld.",
+ "excluded.notDecrypted": "Niet-ontsleutelde hosts",
+ "excluded.notDecryptedHelp": "CONNECT blijft zichtbaar; TLS blijft ondoorzichtig wanneer HTTPS ontsleutelen aan staat. Vooraf gevuld met hosts die het certificaat vastpinnen (Dropbox, Webex).",
+ "excluded.learnHeading": "Bij een ontsleutelfout automatisch niet ontsleutelen",
+ "excluded.learn": "Hosts onthouden waarvan de oorsprongs-TLS onder ontsleuteling mislukt",
+ "excluded.learnHelp": "Wanneer de oorsprongs-TLS onder ontsleuteling herhaaldelijk mislukt, of de oorspronkelijke server 403/429 teruggeeft, stopt Inspector met het ontsleutelen van die host voor latere verbindingen in deze sessie. De lijst is begrensd en wordt bij een herstart vergeten, tenzij u die hosts naar niet-ontsleutelde hosts verplaatst.",
+ "excluded.learnPaused": "Leren gepauzeerd — bestaande items blijven tot ze worden vergeten.",
+ "excluded.noneLearned": "Nog geen hosts onthouden.",
+ "excluded.promote": "Verplaatsen naar niet-ontsleutelde hosts",
+ "excluded.clearLearned": "Alle onthouden items wissen",
+ "window.retention": "Sessiebehoud",
+ "retention.max": "Maximumaantal sessies om te bewaren",
+ "retention.maxHelp": "Hoeveel aanvragen in de sessielijst blijven. Daarboven verlaten de oudste rijen de lijst, maar blijven op schijf tot Sessies wissen of de schijfruimtelimiet ze verwijdert.",
+ "retention.cache": "Cachemap",
+ "retention.openCache": "Cachemap openen",
+ "retention.clearCache": "Opgeslagen sessiecache wissen…",
+ "retention.advanced": "Geavanceerd",
+ "retention.disk": "Schijfruimte voor opgeslagen sessies (MB)",
+ "retention.diskHelp": "Maximale ruimte voor alle opgeslagen sessies op schijf (alle Inspector-uitvoeringen). Elke uitvoering gebruikt een submap met tijdstempel; bij overschrijding worden de oudste HAR-bestanden eerst verwijderd. Lege uitvoeringsmappen worden verwijderd.",
+ "loopback.intro": "Windows Store- en UWP-apps worden standaard geblokkeerd voor localhost. Vink apps aan die Inspector moeten gebruiken en kies Toepassen. Start daarna elke app opnieuw (sluit hem volledig af). Inspector moet actief zijn met systeemproxy aan. Alles wissen verwijdert elke toestemming.",
+ "loopback.closedUnchanged": "Store-apps ongewijzigd.",
+ "loopback.proxyStopped": "Start de proxy en schakel de systeemproxy in. Store-apps kunnen pas worden vastgelegd als beide aan staan.",
+ "loopback.systemProxyOff": "Schakel de systeemproxy in (menu Vastleggen). De toestemmingslijst laat Store-apps alleen localhost bereiken; ze volgen nog steeds de systeemproxy.",
+ "loopback.refreshing": "Systeemproxy vernieuwen zodat actieve apps opnieuw verbinden…",
+ "loopback.unchangedCount": "Toestemmingslijst komt al overeen: {0}.",
+ "loopback.allowed": "Toegestaan: {0}.",
+ "loopback.allowedRefreshed": " De systeemproxy is vernieuwd zodat actieve apps opnieuw verbinden. Als er nog geen verkeer verschijnt, sluit de app volledig af en open hem opnieuw.",
+ "loopback.allowedProxyStopped": " Start de proxy en schakel de systeemproxy in, sluit daarna de app volledig af en open hem opnieuw.",
+ "loopback.allowedSystemProxyOff": " Schakel de systeemproxy in, sluit daarna de app volledig af en open hem opnieuw.",
+ "loopback.allowedReady": " Sluit de app volledig af en open hem opnieuw om verkeer vast te leggen.",
+ "loopback.clearedRefreshed": "Alle loopback-uitzonderingen zijn gewist. De systeemproxy is vernieuwd zodat actieve apps opnieuw verbinden.",
+ "loopback.clearedReady": "Alle loopback-uitzonderingen zijn gewist. Sluit elke app die Inspector gebruikte volledig af en open hem opnieuw.",
+ "loopback.cleared": "Alle loopback-uitzonderingen zijn gewist.",
+ "trust.macWaitBody": "Toon info in Keychain Access kan al Altijd vertrouwen tonen terwijl de SSL-beleidsregels niet zijn opgeslagen (Chrome en Inspector behandelen de CA nog als niet-vertrouwd).\n\nOpslaan afdwingen:\n1. Keychain Access → login → Certificaten → dubbelklik op Titanium Root Certificate Authority\n2. Klap Vertrouwen uit\n3. Zet Bij gebruik van dit certificaat op Systeemstandaard gebruiken en daarna weer op Altijd vertrouwen\n4. Sluit Toon info — er moet een wachtwoordvenster verschijnen; dat schrijft de echte SSL-vertrouwensbeleidsregels\n\nDit venster sluit automatisch zodra die beleidsregels worden herkend. Als u al hebt opgeslagen, klikt u op Ik heb Altijd vertrouwen opgeslagen.",
+ "trust.macWaitStatus": "Wachten op het certificaat in de sleutelhanger…",
+ "trust.macWaitInKeychain": "Wachten op opgeslagen SSL-beleidsregels (zet Altijd vertrouwen om, sluit Toon info, voer het wachtwoord in)…",
+ "trust.macNotSaved": "Altijd vertrouwen tonen is niet genoeg — zet om naar Systeemstandaard gebruiken en weer naar Altijd vertrouwen, sluit Toon info, voer uw wachtwoord in en probeer Basis-CA installeren / HTTPS ontsleutelen opnieuw",
+ "trust.macConfirmSaved": "Ik heb Altijd vertrouwen opgeslagen",
+ "trust.exportCa": "CA exporteren",
+ "trust.install.mac": "HTTPS ontsleutelen vereist dat u de basis-CA van Titanium Inspector vertrouwt in Keychain Access (sleutelhanger login). Nu installeren?",
+ "trust.install.linux": "HTTPS ontsleutelen vereist dat u de basis-CA van Titanium Inspector vertrouwt in uw gebruikerscertificaatarchief (NSS). Nu installeren?",
+ "trust.install.windows": "HTTPS ontsleutelen vereist dat u de basis-CA van Titanium Inspector vertrouwt in het archief met vertrouwde basiscertificeringsinstanties van de huidige gebruiker. Nu installeren?\n\nWindows kan een Ja/Nee-beveiligingsvenster voor vertrouwde basiscertificaten tonen (geen UAC). Kies Ja om de CA te vertrouwen.",
+ "trust.install.other": "HTTPS ontsleutelen vereist dat u de basis-CA van Titanium Inspector op deze computer vertrouwt. Nu installeren?",
+ "trust.remove.mac": "De basis-CA van Titanium Inspector uit de sleutelhanger verwijderen? HTTPS-ontsleuteling wordt uitgeschakeld.",
+ "trust.remove.linux": "De basis-CA van Titanium Inspector uit uw gebruikerscertificaatarchief (NSS) verwijderen? HTTPS-ontsleuteling wordt uitgeschakeld.",
+ "trust.remove.windows": "De basis-CA van Titanium Inspector uit het archief met vertrouwde basiscertificeringsinstanties van de huidige gebruiker verwijderen? HTTPS-ontsleuteling wordt uitgeschakeld.",
+ "trust.remove.other": "De basis-CA van Titanium Inspector verwijderen? HTTPS-ontsleuteling wordt uitgeschakeld.",
+ "trust.elevate.mac": "Vertrouwen op gebruikersniveau is mislukt of was onvoldoende. Doorgaan om een macOS-beheerderswachtwoord te vragen? Annuleren laat de certificaatinstellingen ongewijzigd.",
+ "trust.elevate.linux": "Vertrouwen op gebruikersniveau is mislukt of was onvoldoende. Doorgaan om een polkit-beheerdersvenster te tonen? Annuleren laat de certificaatinstellingen ongewijzigd.",
+ "trust.elevate.windows": "Vertrouwen op gebruikersniveau is mislukt of was onvoldoende. Doorgaan om UAC te tonen? Annuleren laat de certificaatinstellingen ongewijzigd.",
+ "trust.elevate.other": "Vertrouwen op gebruikersniveau is mislukt of was onvoldoende. Doorgaan met een beheerdersvenster? Annuleren laat de certificaatinstellingen ongewijzigd.",
+ "trust.recovery.mac": "\n\nDoorgaan om een macOS-beheerderswachtwoord te vragen? Niet nu laat de certificaatinstellingen ongewijzigd.",
+ "trust.recovery.linux": "\n\nDoorgaan om een polkit-beheerdersvenster te tonen? Niet nu laat de certificaatinstellingen ongewijzigd.",
+ "trust.recovery.windows": "\n\nDoorgaan om UAC te tonen? Niet nu laat de certificaatinstellingen ongewijzigd.",
+ "trust.recovery.other": "\n\nDoorgaan met een beheerdersvenster? Niet nu laat de certificaatinstellingen ongewijzigd.",
+ "trust.hosts.mac": "Omzeilen door het besturingssysteem heeft Vastleggen → Systeemproxy nodig (gebruikt de netwerkproxy-instellingen van macOS). Regels die alleen de tunnel betreffen gelden voor elke client die Inspector bereikt. Fabrieksinstellingen staan al in de lijsten hieronder — bewerk ze vrij of herstel ze.",
+ "trust.hosts.linux": "Omzeilen door het besturingssysteem heeft Vastleggen → Systeemproxy nodig (gebruikt de proxy-instellingen van de bureaubladomgeving). Regels die alleen de tunnel betreffen gelden voor elke client die Inspector bereikt. Fabrieksinstellingen staan al in de lijsten hieronder — bewerk ze vrij of herstel ze.",
+ "trust.hosts.windows": "Omzeilen door het besturingssysteem heeft Vastleggen → Systeemproxy nodig (gebruikt WinINET). Regels die alleen de tunnel betreffen gelden voor elke client die Inspector bereikt. Fabrieksinstellingen staan al in de lijsten hieronder — bewerk ze vrij of herstel ze.",
+ "trust.hosts.other": "Omzeilen door het besturingssysteem heeft Vastleggen → Systeemproxy nodig. Regels die alleen de tunnel betreffen gelden voor elke client die Inspector bereikt. Fabrieksinstellingen staan al in de lijsten hieronder — bewerk ze vrij of herstel ze.",
+ "trust.localhost.mac": "Wanneer de systeemproxy aan staat, localhost via Inspector sturen. Uit voegt localhost toe aan de proxyomzeilingslijst van macOS.",
+ "trust.localhost.linux": "Wanneer de systeemproxy aan staat, localhost via Inspector sturen. Uit voegt localhost toe aan NO_PROXY.",
+ "trust.localhost.windows": "Wanneer de systeemproxy aan staat, localhost via Inspector sturen (WinINET <-loopback>). Uit laat loopback de proxy overslaan.",
+ "trust.localhost.other": "Wanneer de systeemproxy aan staat, localhost via Inspector sturen.",
+ "trust.status.missing": "De basis-CA wordt nog niet vertrouwd — probeer opnieuw of exporteer de CA",
+ "trust.status.cancelled": "Installatie van de basis-CA geannuleerd",
+ "trust.status.certutil": "Certificaathulpmiddelen van de browser ontbreken — installeer ze, probeer opnieuw of exporteer de CA",
+ "trust.status.homebrew": "Homebrew is vereist om certificaathulpmiddelen te installeren — exporteer de CA om handmatig te vertrouwen",
+ "trust.status.macConfirm": "Stel Altijd vertrouwen in voor de basis-CA van Titanium Inspector in Keychain Access",
+ "trust.status.keychain": "Sleutelhangervertrouwen mislukt — probeer opnieuw of exporteer de CA en vertrouw deze handmatig",
+ "trust.fail.keychainTitle": "Vertrouwen in de sleutelhanger bevestigen",
+ "trust.fail.continueKeychain": "Doorgaan in Keychain Access",
+ "trust.fail.toolsTitle": "Certificaathulpmiddelen nodig",
+ "trust.fail.toolsLinux": "Inspector heeft certutil (NSS-hulpmiddelen) nodig om het vertrouwen van de basis-CA af te ronden.",
+ "trust.fail.toolsOther": "Inspector heeft certificaathulpmiddelen van de browser nodig om het vertrouwen van de basis-CA af te ronden.",
+ "trust.fail.tryAgain": "Opnieuw proberen",
+ "trust.fail.homebrewBody": "Homebrew is vereist om certificaathulpmiddelen te installeren. Exporteer de CA om deze handmatig te vertrouwen.",
+ "trust.fail.title": "HTTPS kan nog niet worden ontsleuteld",
+ "trust.fail.body": "De basis-CA van Titanium Inspector wordt op deze computer nog niet vertrouwd.",
+ "toolbar.throttle": "Begrenzen",
+ "toolbar.throttleTip": "Voegt latentie en bandbreedtebeperking toe tijdens het vastleggen (schrijven van inhoud / WebSocket-frames). Standaard uit.",
+ "toolbar.bindWatermark": "*, localhost of IP",
+ "toolbar.bindTip": "127.0.0.1 of localhost = alleen deze pc. 0.0.0.0 of * = alle netwerkadapters (inclusief localhost).",
+ "toolbar.portWatermark": "* of poort",
+ "toolbar.portTip": "* of leeg = door het systeem gekozen poort (de echte poort verschijnt na het starten). Anders 1–65535.",
+ "toolbar.listeningTip": "Proxy luistert",
+ "toolbar.trustHealthTip": "Vertrouwensstatus van de basis-CA voor HTTPS ontsleutelen. Installeer de CA of vertrouw deze als hier niet vertrouwd staat.",
+ "chip.process": "Proces",
+ "inspect.request": "Aanvraag",
+ "inspect.requestTip": "Headervelden en inhoud van de aanvraag",
+ "inspect.copyHeaders": "Headervelden kopiëren",
+ "inspect.resizeTip": "Sleep om de grootte te wijzigen. Dubbelklik om te herstellen.",
+ "inspect.pretty": "Leesbaar",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Inhoud als hexdump weergeven",
+ "inspect.saveRequest": "Aanvraag opslaan…",
+ "inspect.response": "Antwoord",
+ "inspect.responseTip": "Headervelden en inhoud van het antwoord",
+ "inspect.saveResponse": "Antwoord opslaan…",
+ "inspect.diff": "Verschil",
+ "inspect.frames": "WS-frames",
+ "inspect.framesHelp": "Live WebSocket-frames voor deze sessie (richting, opcode, voorbeeld van de payload).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events, gelezen uit de inhoud van het antwoord.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Headervelden tonen",
+ "inspect.hideHeaders": "Headervelden verbergen",
+ "inspect.headers": "Headervelden ({0})",
+ "inspect.prettyTip": "JSON, XML en HTML inspringen",
+ "inspect.prettyHexTip": "Niet van toepassing in de hexweergave",
+ "inspect.emptyBody": "(leeg)",
+ "inspect.noRequestBody": "Geen aanvraaginhoud",
+ "inspect.waiting": "Wachten op antwoord…",
+ "composer.help": "Stel een aanvraag op en verstuur deze via de proxy. Laden uit selectie kopieert de huidige sessie.",
+ "composer.method": "Methode",
+ "composer.url": "URL",
+ "composer.headers": "Headervelden (Naam: waarde per regel)",
+ "composer.body": "Inhoud",
+ "composer.loadSelected": "Laden uit selectie",
+ "composer.loadBody": "Inhoud laden uit bestand…",
+ "composer.send": "Verzenden",
+ "bp.help": "Pauzeer overeenkomende clientaanvragen om de inhoud te bewerken, door te gaan of af te breken. Eén pauze tegelijk; gaat automatisch verder na 120s. Ingeschakeld uitvinken laat een gepauzeerde aanvraag doorgaan.",
+ "bp.enabled": "Ingeschakeld",
+ "bp.breakOnResponse": "Onderbreken bij antwoord",
+ "bp.match": "Overeenkomst",
+ "bp.urlWatermark": "URL-filter (* = alles, bijv. *api*/users*)",
+ "bp.graphqlWatermark": "Alleen deze GraphQL-bewerking (optioneel)",
+ "bp.graphqlTip": "Extra filter op de inhoud van de clientaanvraag. Komt overeen met JSON operationName of een benoemde query. Laat leeg om elke bewerking van de URL te laten overeenkomen.",
+ "bp.fromSelected": "Uit geselecteerde sessie",
+ "bp.fromSelectedTip": "Kopieert de naam van de GraphQL-bewerking uit de aanvraag van de geselecteerde sessie.",
+ "bp.graphqlHelp": "Laat het GraphQL-vak leeg om elke bewerking te laten overeenkomen. Vul het in (bijv. GetUser) om alleen die clientaanvraag op de URL hierboven te pauzeren. Onderbreken bij antwoord gebruikt nog steeds het URL-filter.",
+ "bp.editWatermark": "Inhoud bewerken (Inhoudsbewerking toepassen, daarna Doorgaan)",
+ "bp.applyEdit": "Inhoudsbewerking toepassen",
+ "bp.continue": "Doorgaan",
+ "bp.abort": "Afbreken",
+ "ar.help": "Stuurt een nagebootst antwoord terug vóór de echte server. Overeenkomst bepaalt op welke clientaanvragen een regel van toepassing is; de velden daaronder zijn wat u terugstuurt.",
+ "ar.enabled": "Ingeschakeld (vóór onderbrekingspunten)",
+ "ar.urlWatermark": "Overeenkomende URL (*-jokers)",
+ "ar.graphqlHelp": "Dezelfde URL, verschillende GraphQL-bewerkingen kunnen verschillende regels gebruiken. Laat leeg om elke bewerking te laten overeenkomen.",
+ "ar.respondWith": "Antwoorden met",
+ "ar.statusTip": "HTTP-status. Leeg = 200. Gebruik 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local-bestand (optioneel)",
+ "ar.bodyWatermark": "Antwoordinhoud (gebruikt wanneer Map Local leeg is)",
+ "ar.add": "Regel toevoegen",
+ "ar.update": "Regel bijwerken",
+ "ar.delete": "Regel verwijderen",
+ "script.intro": "Eén opdracht per regel, bij elke vastgelegde sessie. Dit is geen JavaScript of C# — typ alleen de opdrachten hieronder.",
+ "script.what": "Wat u kunt typen",
+ "script.setHeaderHelp": "Voeg een headerveld toe of vervang het. Het verkeer gaat nog steeds naar de server.",
+ "script.setStatusHelp": "Bij de aanvraag: meteen antwoorden en de server overslaan. Bij het antwoord: de status wijzigen die de client ziet.",
+ "script.abortHelp": "Blokkeer met 403 Forbidden. Voeg een set-status-regel toe om een andere code te kiezen.",
+ "script.comment": "Begin een regel met # of // voor een opmerking. U kunt opdrachten combineren; zet elke opdracht op een eigen regel.",
+ "script.onRequest": "Bij aanvraag",
+ "script.onResponse": "Bij antwoord",
+ "script.requestSkips": "abort of set-status hier slaat AutoResponder, onderbrekingspunten en de oorsprong over.",
+ "map.help": "Herschrijft overeenkomende clientaanvragen naar een andere oorsprong vóór de echte server. Gebruik één * in overeenkomst en doel om een pad- of queryachtervoegsel te behouden. Wordt uitgevoerd na AutoResponder / Map Local.",
+ "map.graphqlHelp": "Laat leeg om elke bewerking van de URL te herschrijven. Vul het in om alleen die GraphQL-bewerking te herschrijven.",
+ "map.rewriteTo": "Herschrijven naar",
+ "map.targetWatermark": "Doel-URL (absoluut, optionele *)",
+ "loopback.allow": "Toestaan",
+ "loopback.appName": "App-naam",
+ "loopback.packageId": "Pakket-ID",
+ "status.ready": "Gereed",
+ "status.searchingBodies": "Inhoud doorzoeken…",
+ "status.proxyStopped": "Proxy gestopt",
+ "status.proxyRunning": "Proxy actief op {0}",
+ "trust.health.trusted": "CA vertrouwd",
+ "trust.health.untrusted": "CA niet vertrouwd"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.pl.json b/src/Titanium.Inspector/Localization/strings.pl.json
new file mode 100644
index 000000000..8684fe9c2
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.pl.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Plik",
+ "menu.exportAllHar": "Eksportuj cały HAR…",
+ "menu.exportSelectedHar": "Eksportuj zaznaczony HAR…",
+ "menu.importHar": "Importuj HAR…",
+ "menu.exportAllArchive": "Eksportuj całe archiwum…",
+ "menu.exportSelectedArchive": "Eksportuj zaznaczone archiwum…",
+ "menu.importArchive": "Importuj archiwum…",
+ "menu.exit": "Zakończ",
+ "menu.capture": "Przechwytywanie",
+ "menu.startProxy": "Uruchom proxy",
+ "menu.stopProxy": "Zatrzymaj proxy",
+ "menu.capturing": "Przechwytuj",
+ "menu.clearSessions": "Wyczyść sesje",
+ "menu.removeSelected": "Usuń zaznaczone",
+ "menu.autoStartCapture": "Automatycznie rozpocznij przechwytywanie",
+ "menu.autoSystemProxy": "Automatycznie włącz systemowe proxy przy starcie",
+ "menu.decryptHttps": "Odszyfruj HTTPS",
+ "menu.systemProxy": "Systemowe proxy",
+ "menu.captureLocal": "Przechwytuj ruch lokalny",
+ "menu.allowStoreApps": "Zezwól aplikacjom Store…",
+ "menu.installCa": "Zainstaluj główny CA (bieżący użytkownik)",
+ "menu.removeCa": "Usuń główny CA (bieżący użytkownik)",
+ "menu.rotateCa": "Wyczyść i zainstaluj ponownie główny CA…",
+ "menu.removeOldCas": "Usuń stare główne CA…",
+ "menu.exportCa": "Eksportuj główny CA…",
+ "menu.trustFirefox": "Zaufaj CA w Firefox…",
+ "menu.deviceCa": "Skonfiguruj CA urządzenia zewnętrznego",
+ "menu.tools": "Narzędzia",
+ "menu.composer": "Kompozytor…",
+ "menu.breakpoints": "Punkty przerwania…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Skrypty…",
+ "menu.mapRemote": "Mapowanie zdalne…",
+ "menu.options": "Opcje",
+ "menu.theme": "Motyw",
+ "menu.themeLight": "Jasny",
+ "menu.themeDark": "Ciemny",
+ "menu.themeAutomatic": "Automatyczny",
+ "menu.language": "Język",
+ "menu.languageAutomatic": "Automatyczny",
+ "menu.columns": "Kolumny",
+ "menu.col.id": "ID",
+ "menu.col.method": "Metoda",
+ "menu.col.status": "Status",
+ "menu.col.host": "Host",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protokół",
+ "menu.col.duration": "Czas",
+ "menu.col.ttfb": "Oczekiwanie (TTFB)",
+ "menu.col.size": "Rozmiar",
+ "menu.col.process": "Proces",
+ "menu.col.started": "Rozpoczęto",
+ "menu.col.scheme": "Schemat",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Resetuj kolumny",
+ "menu.sessionRetention": "Przechowywanie sesji…",
+ "menu.excludedHosts": "Wykluczone hosty…",
+ "menu.excludedHostsTip": "Listy pomijania odszyfrowania HTTPS i reguły obejścia systemu",
+ "menu.ignoreCerts": "Ignoruj niezabezpieczone certyfikaty serwerów",
+ "menu.addVia": "Dodaj nagłówek Via",
+ "menu.addViaTip": "Dopisz Via: … titanium-web-proxy do przechwyconego ruchu (RFC 9110). Wyłączenie zatrzymuje wstawianie i wykrywanie pętli Via.",
+ "menu.logging": "Rejestrowanie…",
+ "menu.resetSettings": "Resetuj ustawienia Inspector…",
+ "menu.help": "Pomoc",
+ "menu.checkUpdates": "Sprawdź aktualizacje…",
+ "menu.checkUpdatesStartup": "Sprawdzaj aktualizacje przy starcie",
+ "menu.updateChannel": "Kanał aktualizacji",
+ "menu.channelStable": "Stabilny",
+ "menu.channelBeta": "Beta",
+ "menu.about": "Titanium Inspector — informacje…",
+ "toolbar.searchWatermark": "Szukaj URL, hosta, procesu… (lub method:GET status:4xx)",
+ "toolbar.searchTip": "Sam tekst przeszukuje URL, hosta, nazwę procesu, dokładny identyfikator procesu, metodę i status. Prefiksy ograniczają wyszukiwanie do jednego pola: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: przeszukuje też treść zapisaną na dysku. Poprzedź pole lub słowo znakiem -, aby je wykluczyć (np. -host:cursor.sh lub -cursor). Filtry pozwalają edytować ukryte hosty i procesy w większym oknie.",
+ "toolbar.filters": "Filtry",
+ "toolbar.filtersTip": "Edytuj wyszukiwanie oraz ukryte hosty lub procesy w większym oknie",
+ "toolbar.hideConnect": "Ukryj CONNECT",
+ "toolbar.hideConnectTip": "Ukryj nieprzezroczyste tunele HTTPS, gdy Odszyfruj HTTPS jest wyłączone",
+ "toolbar.hideImages": "Ukryj obrazy",
+ "toolbar.errorsOnly": "Tylko błędy",
+ "toolbar.clearFilters": "Wyczyść filtry",
+ "toolbar.hidden": "Ukryte",
+ "ctx.replay": "Wyślij ponownie",
+ "ctx.loadComposer": "Wczytaj do kompozytora",
+ "ctx.saveRequest": "Zapisz treść żądania…",
+ "ctx.saveResponse": "Zapisz treść odpowiedzi…",
+ "ctx.copyUrl": "Kopiuj URL",
+ "ctx.copyCurl": "Kopiuj jako curl",
+ "ctx.copyFetch": "Kopiuj jako fetch",
+ "ctx.diff": "Porównaj zaznaczone…",
+ "ctx.filterHost": "Filtruj według hosta",
+ "ctx.hideHost": "Ukryj hosta",
+ "ctx.filterProcess": "Filtruj według procesu",
+ "ctx.hideProcess": "Ukryj proces",
+ "ctx.excludeHost": "Wyklucz hosta…",
+ "ctx.excludeHostTip": "Przestań odszyfrowywać HTTPS tego hosta. Wiersze zostają na liście; użyj Ukryj hosta, aby usunąć je z widoku.",
+ "grid.duration": "Czas trwania (ms)",
+ "grid.wait": "Oczekiwanie (ms)",
+ "pane.inspect": "Podgląd",
+ "pane.composer": "Kompozytor",
+ "pane.breakpoints": "Punkty przerwania",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Skrypty",
+ "pane.mapRemote": "Mapowanie zdalne",
+ "pane.closeTip": "Zamknij panel",
+ "inspect.empty": "Wybierz sesję w siatce, aby obejrzeć nagłówki i treść żądania oraz odpowiedzi.",
+ "common.ok": "OK",
+ "common.cancel": "Anuluj",
+ "common.save": "Zapisz",
+ "common.apply": "Zastosuj",
+ "common.remove": "Usuń",
+ "common.browse": "Przeglądaj…",
+ "common.openFolder": "Otwórz folder",
+ "common.forget": "Zapomnij",
+ "common.close": "Zamknij",
+ "loopback.window": "Zezwól aplikacjom Store na używanie tego proxy",
+ "loopback.checkAll": "Zaznacz wszystkie",
+ "loopback.uncheckAll": "Odznacz wszystkie",
+ "loopback.filterWatermark": "Filtruj według nazwy aplikacji…",
+ "loopback.clearAll": "Wyczyść wszystko",
+ "trust.macWindow": "Potwierdź zaufanie w Keychain Access",
+ "trust.openKeychain": "Otwórz Keychain Access",
+ "trust.notNow": "Nie teraz",
+ "trust.recoveryTitle": "Zaufanie do głównego CA",
+ "trust.macWaitPlaceholder": "Oczekiwanie na zaufanie SSL…",
+ "window.about": "Informacje o Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Prawa autorskie © Jehonathan Thomas",
+ "about.license": "Na licencji PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Szczegóły licencji",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filtry",
+ "filters.search": "Szukaj",
+ "filters.searchHelp": "To samo wyszukiwanie co na pasku narzędzi, z większą ilością miejsca. Ukryte hosty i procesy są wymienione poniżej, nie w tym polu.",
+ "filters.searchWatermark": "URL, host, proces, method:GET, status:4xx…",
+ "filters.hideHeading": "Ukryj na liście",
+ "filters.hideHelp": "Wiersze pozostają przechwycone. To tylko ukrywa je na liście. Aby przestać odszyfrowywać HTTPS, użyj Wyklucz hosta…",
+ "filters.hosts": "Hosty",
+ "filters.addHostWatermark": "Dodaj hosta do ukrycia",
+ "filters.addHost": "Dodaj hosta",
+ "filters.processes": "Procesy",
+ "filters.addProcessWatermark": "Dodaj proces do ukrycia",
+ "filters.addProcess": "Dodaj proces",
+ "filters.processSpace": "Nazwa ze spacją jest skracana do pierwszego słowa, co może ukryć też inne nazwy zawierające to słowo.",
+ "window.confirm": "Potwierdzenie",
+ "window.excludeHost": "Wyklucz hosta",
+ "exclude.action": "Wyklucz",
+ "exclude.help": "Ten host nadal będzie widoczny na liście sesji. Inspector nie będzie próbował odczytać jego HTTPS.",
+ "window.logging": "Rejestrowanie",
+ "logging.help": "Zapisuj komunikaty diagnostyczne do rozwiązywania problemów. Zmiany obowiązują od razu.",
+ "logging.enable": "Włącz rejestrowanie",
+ "logging.writeFile": "Zapisuj dziennik do pliku",
+ "logging.detail": "Ile szczegółów",
+ "logging.detailHelp": "Error = tylko problemy. Warning / Information = więcej kontekstu. Debug = bardzo szczegółowo.",
+ "logging.path": "Ścieżka pliku dziennika",
+ "window.excludedHosts": "Wykluczone hosty",
+ "excluded.reset": "Przywróć domyślne",
+ "excluded.bypass": "Obejście proxy (system)",
+ "excluded.bypassHelp": "Ruch nigdy nie dociera do Inspector, gdy systemowe proxy jest włączone. Wstępnie dodano hosty tożsamości Microsoft / SSO / RDP. Ich usunięcie może przerwać logowanie RDP, gdy systemowe proxy jest włączone.",
+ "excluded.notDecrypted": "Hosty bez odszyfrowania",
+ "excluded.notDecryptedHelp": "CONNECT pozostaje widoczny; TLS pozostaje nieprzezroczysty, gdy Odszyfruj HTTPS jest włączone. Wstępnie dodano hosty z przypinaniem certyfikatów (Dropbox, Webex).",
+ "excluded.learnHeading": "Automatycznie nie odszyfrowuj po nieudanym odszyfrowaniu",
+ "excluded.learn": "Ucz się hostów, których TLS serwera docelowego zawodzi przy odszyfrowaniu",
+ "excluded.learnHelp": "Gdy TLS serwera docelowego wielokrotnie zawodzi przy odszyfrowaniu albo serwer zwraca 403/429, Inspector przestaje odszyfrowywać tego hosta dla kolejnych połączeń w tej sesji. Lista ma limit i jest zapominana po restarcie, chyba że ją przeniesiesz.",
+ "excluded.learnPaused": "Uczenie wstrzymane — istniejące wpisy zostają, dopóki ich nie zapomnisz.",
+ "excluded.noneLearned": "Nie nauczono jeszcze żadnych hostów.",
+ "excluded.promote": "Przenieś do hostów bez odszyfrowania",
+ "excluded.clearLearned": "Wyczyść wszystkie nauczone",
+ "window.retention": "Przechowywanie sesji",
+ "retention.max": "Maksymalna liczba przechowywanych sesji",
+ "retention.maxHelp": "Ile żądań zostaje na liście sesji. Po przekroczeniu tej liczby najstarsze wiersze znikają z listy, ale pozostają na dysku, dopóki nie użyjesz Wyczyść sesje albo limit miejsca na dysku ich nie usunie.",
+ "retention.cache": "Folder pamięci podręcznej",
+ "retention.openCache": "Otwórz folder pamięci podręcznej",
+ "retention.clearCache": "Wyczyść zapisany bufor sesji…",
+ "retention.advanced": "Zaawansowane",
+ "retention.disk": "Miejsce na dysku dla zapisanych sesji (MB)",
+ "retention.diskHelp": "Maksymalne miejsce na dysku dla wszystkich zapisanych sesji (wszystkie uruchomienia Inspector). Każde uruchomienie używa podfolderu ze znacznikiem czasu; po przekroczeniu limitu najpierw usuwane są najstarsze pliki HAR. Puste foldery uruchomień są usuwane.",
+ "loopback.intro": "Aplikacje Windows Store / UWP są domyślnie blokowane przed localhost. Zaznacz aplikacje, które mają używać Inspector, a potem Zastosuj. Po Zastosuj uruchom ponownie każdą aplikację (całkowicie ją zakończ). Inspector musi działać z włączonym systemowym proxy. Wyczyść wszystko usuwa wszystkie wpisy zezwoleń.",
+ "loopback.closedUnchanged": "Aplikacje Store bez zmian.",
+ "loopback.proxyStopped": "Uruchom proxy i włącz systemowe proxy. Aplikacji Store nie da się przechwycić, dopóki oba nie będą włączone.",
+ "loopback.systemProxyOff": "Włącz systemowe proxy (menu Przechwytywanie). Lista zezwoleń tylko pozwala aplikacjom Store dotrzeć do localhost; nadal stosują się do systemowego proxy.",
+ "loopback.refreshing": "Odświeżanie systemowego proxy, aby działające aplikacje połączyły się ponownie…",
+ "loopback.unchangedCount": "Lista zezwoleń jest już zgodna: {0}.",
+ "loopback.allowed": "Zezwolono: {0}.",
+ "loopback.allowedRefreshed": " Systemowe proxy zostało odświeżone, aby działające aplikacje połączyły się ponownie. Jeśli ruch nadal się nie pojawia, całkowicie zakończ aplikację i otwórz ją ponownie.",
+ "loopback.allowedProxyStopped": " Uruchom proxy i włącz systemowe proxy, a potem całkowicie zakończ aplikację i otwórz ją ponownie.",
+ "loopback.allowedSystemProxyOff": " Włącz systemowe proxy, a potem całkowicie zakończ aplikację i otwórz ją ponownie.",
+ "loopback.allowedReady": " Całkowicie zakończ aplikację i otwórz ją ponownie, aby przechwycić ruch.",
+ "loopback.clearedRefreshed": "Wszystkie wyjątki loopback zostały wyczyszczone. Systemowe proxy zostało odświeżone, aby działające aplikacje połączyły się ponownie.",
+ "loopback.clearedReady": "Wszystkie wyjątki loopback zostały wyczyszczone. Całkowicie zakończ i ponownie otwórz każdą aplikację, która używała Inspector.",
+ "loopback.cleared": "Wszystkie wyjątki loopback zostały wyczyszczone.",
+ "trust.macWaitBody": "Informacje w Keychain mogą już pokazywać Zawsze ufaj, nawet gdy zasady SSL nie zostały zapisane (Chrome i Inspector nadal traktują CA jako niezaufany).\n\nWymuś zapis:\n1. Keychain Access → login → Certyfikaty → kliknij dwukrotnie Titanium Root Certificate Authority\n2. Rozwiń Zaufanie\n3. Ustaw Podczas używania tego certyfikatu na Użyj wartości domyślnych systemu, a potem zmień z powrotem na Zawsze ufaj\n4. Zamknij Informacje — musi pojawić się monit o hasło; to zapisuje rzeczywiste zasady zaufania SSL\n\nTo okno zamknie się automatycznie, gdy te zasady zostaną wykryte. Jeśli już zapisano, kliknij Zapisałem Zawsze ufaj.",
+ "trust.macWaitStatus": "Oczekiwanie na certyfikat w Keychain…",
+ "trust.macWaitInKeychain": "Oczekiwanie na zapisane zasady SSL (przełącz Zawsze ufaj, zamknij Informacje, wpisz hasło)…",
+ "trust.macNotSaved": "Samo wyświetlenie Zawsze ufaj nie wystarczy — przełącz Użyj wartości domyślnych systemu → Zawsze ufaj, zamknij Informacje, wpisz hasło, a potem spróbuj ponownie Zainstaluj główny CA / Odszyfruj HTTPS",
+ "trust.macConfirmSaved": "Zapisałem Zawsze ufaj",
+ "trust.exportCa": "Eksportuj CA",
+ "trust.install.mac": "Odszyfrowanie HTTPS wymaga zaufania głównemu CA Titanium Inspector w Keychain Access (pęk kluczy login). Zainstalować teraz?",
+ "trust.install.linux": "Odszyfrowanie HTTPS wymaga zaufania głównemu CA Titanium Inspector w magazynie certyfikatów użytkownika (NSS). Zainstalować teraz?",
+ "trust.install.windows": "Odszyfrowanie HTTPS wymaga zaufania głównemu CA Titanium Inspector w magazynie Zaufanych głównych urzędów certyfikacji bieżącego użytkownika. Zainstalować teraz?\n\nWindows może pokazać okno zabezpieczeń Tak/Nie dla zaufanego głównego urzędu (to nie UAC) — wybierz Tak, aby zaufać CA.",
+ "trust.install.other": "Odszyfrowanie HTTPS wymaga zaufania głównemu CA Titanium Inspector na tym komputerze. Zainstalować teraz?",
+ "trust.remove.mac": "Usunąć główny CA Titanium Inspector z Keychain? Odszyfrowanie HTTPS zostanie wyłączone.",
+ "trust.remove.linux": "Usunąć główny CA Titanium Inspector z magazynu certyfikatów użytkownika (NSS)? Odszyfrowanie HTTPS zostanie wyłączone.",
+ "trust.remove.windows": "Usunąć główny CA Titanium Inspector z magazynu Zaufanych głównych urzędów certyfikacji bieżącego użytkownika? Odszyfrowanie HTTPS zostanie wyłączone.",
+ "trust.remove.other": "Usunąć główny CA Titanium Inspector? Odszyfrowanie HTTPS zostanie wyłączone.",
+ "trust.elevate.mac": "Zaufanie na poziomie użytkownika nie powiodło się lub było niewystarczające. Kontynuować i pokazać monit o hasło administratora macOS? Anuluj pozostawia ustawienia certyfikatów bez zmian.",
+ "trust.elevate.linux": "Zaufanie na poziomie użytkownika nie powiodło się lub było niewystarczające. Kontynuować i pokazać monit administratora polkit? Anuluj pozostawia ustawienia certyfikatów bez zmian.",
+ "trust.elevate.windows": "Zaufanie na poziomie użytkownika nie powiodło się lub było niewystarczające. Kontynuować i pokazać UAC? Anuluj pozostawia ustawienia certyfikatów bez zmian.",
+ "trust.elevate.other": "Zaufanie na poziomie użytkownika nie powiodło się lub było niewystarczające. Kontynuować z monitem administratora? Anuluj pozostawia ustawienia certyfikatów bez zmian.",
+ "trust.recovery.mac": "\n\nKontynuować i pokazać monit o hasło administratora macOS? Nie teraz pozostawia ustawienia certyfikatów bez zmian.",
+ "trust.recovery.linux": "\n\nKontynuować i pokazać monit administratora polkit? Nie teraz pozostawia ustawienia certyfikatów bez zmian.",
+ "trust.recovery.windows": "\n\nKontynuować i pokazać UAC? Nie teraz pozostawia ustawienia certyfikatów bez zmian.",
+ "trust.recovery.other": "\n\nKontynuować z monitem administratora? Nie teraz pozostawia ustawienia certyfikatów bez zmian.",
+ "trust.hosts.mac": "Obejście systemu wymaga Przechwytywanie → Systemowe proxy (używa ustawień proxy sieci macOS). Reguły tylko dla tunelu dotyczą każdego klienta, który trafia do Inspector. Ustawienia fabryczne są wstępnie wpisane na listach poniżej — edytuj swobodnie lub zresetuj.",
+ "trust.hosts.linux": "Obejście systemu wymaga Przechwytywanie → Systemowe proxy (używa ustawień proxy pulpitu lub środowiska). Reguły tylko dla tunelu dotyczą każdego klienta, który trafia do Inspector. Ustawienia fabryczne są wstępnie wpisane na listach poniżej — edytuj swobodnie lub zresetuj.",
+ "trust.hosts.windows": "Obejście systemu wymaga Przechwytywanie → Systemowe proxy (używa WinINET). Reguły tylko dla tunelu dotyczą każdego klienta, który trafia do Inspector. Ustawienia fabryczne są wstępnie wpisane na listach poniżej — edytuj swobodnie lub zresetuj.",
+ "trust.hosts.other": "Obejście systemu wymaga Przechwytywanie → Systemowe proxy. Reguły tylko dla tunelu dotyczą każdego klienta, który trafia do Inspector. Ustawienia fabryczne są wstępnie wpisane na listach poniżej — edytuj swobodnie lub zresetuj.",
+ "trust.localhost.mac": "Gdy systemowe proxy jest włączone, kieruj localhost przez Inspector. Wyłączenie dodaje localhost do listy obejścia proxy macOS.",
+ "trust.localhost.linux": "Gdy systemowe proxy jest włączone, kieruj localhost przez Inspector. Wyłączenie dodaje localhost do NO_PROXY.",
+ "trust.localhost.windows": "Gdy systemowe proxy jest włączone, kieruj localhost przez Inspector (WinINET <-loopback>). Wyłączenie pozwala pętli zwrotnej pominąć proxy.",
+ "trust.localhost.other": "Gdy systemowe proxy jest włączone, kieruj localhost przez Inspector.",
+ "trust.status.missing": "Główny CA nie jest jeszcze zaufany — spróbuj ponownie albo Eksportuj CA",
+ "trust.status.cancelled": "Instalacja głównego CA anulowana",
+ "trust.status.certutil": "Brak narzędzi certyfikatów przeglądarki — zainstaluj je, spróbuj ponownie albo Eksportuj CA",
+ "trust.status.homebrew": "Homebrew jest wymagany do instalacji narzędzi certyfikatów — Eksportuj CA, aby zaufać ręcznie",
+ "trust.status.macConfirm": "Ustaw Zawsze ufaj dla głównego CA Titanium Inspector w Keychain Access",
+ "trust.status.keychain": "Zaufanie Keychain nie powiodło się — spróbuj ponownie albo Eksportuj CA i zaufaj ręcznie",
+ "trust.fail.keychainTitle": "Potwierdź zaufanie w Keychain",
+ "trust.fail.continueKeychain": "Kontynuuj w Keychain Access",
+ "trust.fail.toolsTitle": "Potrzebne narzędzia certyfikatów",
+ "trust.fail.toolsLinux": "Inspector potrzebuje certutil (narzędzia NSS), aby dokończyć zaufanie do głównego CA.",
+ "trust.fail.toolsOther": "Inspector potrzebuje narzędzi certyfikatów przeglądarki, aby dokończyć zaufanie do głównego CA.",
+ "trust.fail.tryAgain": "Spróbuj ponownie",
+ "trust.fail.homebrewBody": "Homebrew jest wymagany do instalacji narzędzi certyfikatów. Wyeksportuj CA, aby zaufać ręcznie.",
+ "trust.fail.title": "Nie można jeszcze odszyfrować HTTPS",
+ "trust.fail.body": "Główny CA Titanium Inspector nie jest jeszcze zaufany na tym komputerze.",
+ "toolbar.throttle": "Ograniczanie",
+ "toolbar.throttleTip": "Dodaje opóźnienie i ograniczanie przepustowości podczas przechwytywania (zapisy treści / ramki WebSocket). Domyślnie wyłączone.",
+ "toolbar.bindWatermark": "*, localhost lub IP",
+ "toolbar.bindTip": "127.0.0.1 lub localhost = tylko ten komputer. 0.0.0.0 lub * = wszystkie karty sieciowe (w tym localhost).",
+ "toolbar.portWatermark": "* lub port",
+ "toolbar.portTip": "* lub puste = port wybrany przez system (rzeczywisty port pojawia się po uruchomieniu). W przeciwnym razie 1–65535.",
+ "toolbar.listeningTip": "Proxy nasłuchuje",
+ "toolbar.trustHealthTip": "Stan zaufania głównego CA dla odszyfrowywania HTTPS. Zainstaluj CA lub zaufaj mu, jeśli widać niezaufany.",
+ "chip.process": "Proces",
+ "inspect.request": "Żądanie",
+ "inspect.requestTip": "Nagłówki i treść żądania",
+ "inspect.copyHeaders": "Kopiuj nagłówki",
+ "inspect.resizeTip": "Przeciągnij, aby zmienić rozmiar. Kliknij dwukrotnie, aby zresetować.",
+ "inspect.pretty": "Czytelny",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Pokaż treść jako zrzut szesnastkowy",
+ "inspect.saveRequest": "Zapisz żądanie…",
+ "inspect.response": "Odpowiedź",
+ "inspect.responseTip": "Nagłówki i treść odpowiedzi",
+ "inspect.saveResponse": "Zapisz odpowiedź…",
+ "inspect.diff": "Różnica",
+ "inspect.frames": "Ramki WS",
+ "inspect.framesHelp": "Bieżące ramki WebSocket tej sesji (kierunek, opcode, podgląd ładunku).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events odczytane z treści odpowiedzi.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Pokaż nagłówki",
+ "inspect.hideHeaders": "Ukryj nagłówki",
+ "inspect.headers": "Nagłówki ({0})",
+ "inspect.prettyTip": "Wcinaj JSON, XML i HTML",
+ "inspect.prettyHexTip": "Niedostępne w widoku szesnastkowym",
+ "inspect.emptyBody": "(puste)",
+ "inspect.noRequestBody": "Brak treści żądania",
+ "inspect.waiting": "Oczekiwanie na odpowiedź…",
+ "composer.help": "Utwórz i wyślij żądanie przez proxy. Wczytaj z zaznaczenia kopiuje bieżącą sesję.",
+ "composer.method": "Metoda",
+ "composer.url": "URL",
+ "composer.headers": "Nagłówki (Nazwa: wartość w każdym wierszu)",
+ "composer.body": "Treść",
+ "composer.loadSelected": "Wczytaj z zaznaczenia",
+ "composer.loadBody": "Wczytaj treść z pliku…",
+ "composer.send": "Wyślij",
+ "bp.help": "Wstrzymaj pasujące żądania klienta, aby edytować treść, kontynuować lub przerwać. Jedna pauza naraz; automatyczna kontynuacja po 120s. Odznaczenie Włączone wznawia wstrzymane żądanie.",
+ "bp.enabled": "Włączone",
+ "bp.breakOnResponse": "Przerwij przy odpowiedzi",
+ "bp.match": "Dopasowanie",
+ "bp.urlWatermark": "Filtr URL (* = wszystko, np. *api*/users*)",
+ "bp.graphqlWatermark": "Tylko ta operacja GraphQL (opcjonalnie)",
+ "bp.graphqlTip": "Dodatkowy filtr treści żądania klienta. Pasuje do JSON operationName lub nazwanego zapytania. Pozostaw puste, aby dopasować każdą operację adresu URL.",
+ "bp.fromSelected": "Z zaznaczonej sesji",
+ "bp.fromSelectedTip": "Kopiuje nazwę operacji GraphQL z żądania zaznaczonej sesji.",
+ "bp.graphqlHelp": "Pozostaw pole GraphQL puste, aby dopasować każdą operację. Wypełnij je (np. GetUser), aby wstrzymać tylko to żądanie klienta dla adresu URL powyżej. Przerwij przy odpowiedzi nadal używa filtru URL.",
+ "bp.editWatermark": "Edytuj treść (Zastosuj edycję treści, potem Kontynuuj)",
+ "bp.applyEdit": "Zastosuj edycję treści",
+ "bp.continue": "Kontynuuj",
+ "bp.abort": "Przerwij",
+ "ar.help": "Zwraca sztuczną odpowiedź przed prawdziwym serwerem. Dopasowanie decyduje, których żądań klienta dotyczy reguła; pola poniżej to to, co odsyłasz.",
+ "ar.enabled": "Włączone (przed punktami przerwania)",
+ "ar.urlWatermark": "Dopasuj URL (symbole wieloznaczne *)",
+ "ar.graphqlHelp": "Ten sam URL, różne operacje GraphQL mogą używać różnych reguł. Pozostaw puste, aby dopasować każdą operację.",
+ "ar.respondWith": "Odpowiedz",
+ "ar.statusTip": "Status HTTP. Puste = 200. Użyj 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Plik Map Local (opcjonalnie)",
+ "ar.bodyWatermark": "Treść odpowiedzi (używana, gdy Map Local jest puste)",
+ "ar.add": "Dodaj regułę",
+ "ar.update": "Aktualizuj regułę",
+ "ar.delete": "Usuń regułę",
+ "script.intro": "Jedno polecenie na wiersz, dla każdej przechwyconej sesji. To nie jest JavaScript ani C# — wpisuj tylko polecenia poniżej.",
+ "script.what": "Co możesz wpisać",
+ "script.setHeaderHelp": "Dodaje lub zastępuje nagłówek. Ruch nadal trafia do serwera.",
+ "script.setStatusHelp": "Przy żądaniu: odpowiedz od razu i pomiń serwer. Przy odpowiedzi: zmień status, który widzi klient.",
+ "script.abortHelp": "Blokuje kodem 403 Forbidden. Dodaj wiersz set-status, aby wybrać inny kod.",
+ "script.comment": "Rozpocznij wiersz od # lub //, aby dodać komentarz. Możesz łączyć polecenia; każde umieść w osobnym wierszu.",
+ "script.onRequest": "Przy żądaniu",
+ "script.onResponse": "Przy odpowiedzi",
+ "script.requestSkips": "abort lub set-status tutaj pomija AutoResponder, punkty przerwania i źródło.",
+ "map.help": "Przepisuje pasujące żądania klienta na inne źródło przed prawdziwym serwerem. Użyj pojedynczego * w dopasowaniu i celu, aby zachować sufiks ścieżki lub zapytania. Działa po AutoResponder / Map Local.",
+ "map.graphqlHelp": "Pozostaw puste, aby przepisać każdą operację adresu URL. Wypełnij, aby przepisać tylko tę operację GraphQL.",
+ "map.rewriteTo": "Przepisz na",
+ "map.targetWatermark": "Docelowy URL (bezwzględny, opcjonalny *)",
+ "loopback.allow": "Zezwól",
+ "loopback.appName": "Nazwa aplikacji",
+ "loopback.packageId": "ID pakietu",
+ "status.ready": "Gotowe",
+ "status.searchingBodies": "Przeszukiwanie treści…",
+ "status.proxyStopped": "Proxy zatrzymane",
+ "status.proxyRunning": "Proxy działa na {0}",
+ "trust.health.trusted": "CA zaufany",
+ "trust.health.untrusted": "CA niezaufany"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.pt-BR.json b/src/Titanium.Inspector/Localization/strings.pt-BR.json
new file mode 100644
index 000000000..1597388a8
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.pt-BR.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Arquivo",
+ "menu.exportAllHar": "Exportar tudo como HAR…",
+ "menu.exportSelectedHar": "Exportar a seleção como HAR…",
+ "menu.importHar": "Importar HAR…",
+ "menu.exportAllArchive": "Exportar tudo como arquivo…",
+ "menu.exportSelectedArchive": "Exportar a seleção como arquivo…",
+ "menu.importArchive": "Importar arquivo…",
+ "menu.exit": "Sair",
+ "menu.capture": "Captura",
+ "menu.startProxy": "Iniciar proxy",
+ "menu.stopProxy": "Parar proxy",
+ "menu.capturing": "Capturando",
+ "menu.clearSessions": "Limpar sessões",
+ "menu.removeSelected": "Remover seleção",
+ "menu.autoStartCapture": "Iniciar a captura automaticamente",
+ "menu.autoSystemProxy": "Proxy do sistema automático ao iniciar",
+ "menu.decryptHttps": "Descriptografar HTTPS",
+ "menu.systemProxy": "Proxy do sistema",
+ "menu.captureLocal": "Capturar tráfego local",
+ "menu.allowStoreApps": "Permitir aplicativos da Store…",
+ "menu.installCa": "Instalar CA raiz (usuário atual)",
+ "menu.removeCa": "Remover CA raiz (usuário atual)",
+ "menu.rotateCa": "Limpar e reinstalar a CA raiz…",
+ "menu.removeOldCas": "Remover CAs raiz antigas…",
+ "menu.exportCa": "Exportar CA raiz…",
+ "menu.trustFirefox": "Confiar na CA no Firefox…",
+ "menu.deviceCa": "Configurar a CA de um dispositivo externo",
+ "menu.tools": "Ferramentas",
+ "menu.composer": "Compor…",
+ "menu.breakpoints": "Pontos de interrupção…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Scripts…",
+ "menu.mapRemote": "Mapeamento remoto…",
+ "menu.options": "Opções",
+ "menu.theme": "Tema",
+ "menu.themeLight": "Claro",
+ "menu.themeDark": "Escuro",
+ "menu.themeAutomatic": "Automático",
+ "menu.language": "Idioma",
+ "menu.languageAutomatic": "Automático",
+ "menu.columns": "Colunas",
+ "menu.col.id": "Id",
+ "menu.col.method": "Método",
+ "menu.col.status": "Status",
+ "menu.col.host": "Host",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protocolo",
+ "menu.col.duration": "Duração",
+ "menu.col.ttfb": "Espera (TTFB)",
+ "menu.col.size": "Tamanho",
+ "menu.col.process": "Processo",
+ "menu.col.started": "Iniciado",
+ "menu.col.scheme": "Esquema",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Redefinir colunas",
+ "menu.sessionRetention": "Retenção de sessões…",
+ "menu.excludedHosts": "Hosts excluídos…",
+ "menu.excludedHostsTip": "Listas para ignorar a descriptografia HTTPS e regras de desvio do sistema",
+ "menu.ignoreCerts": "Ignorar certificados de servidor inseguros",
+ "menu.addVia": "Adicionar cabeçalho Via",
+ "menu.addViaTip": "Acrescenta Via: … titanium-web-proxy ao tráfego interceptado (RFC 9110). Desligado, a injeção e a detecção de loop Via ficam desativadas.",
+ "menu.logging": "Registro…",
+ "menu.resetSettings": "Redefinir as configurações do Inspector…",
+ "menu.help": "Ajuda",
+ "menu.checkUpdates": "Verificar atualizações…",
+ "menu.checkUpdatesStartup": "Verificar atualizações ao iniciar",
+ "menu.updateChannel": "Canal de atualização",
+ "menu.channelStable": "Estável",
+ "menu.channelBeta": "Beta",
+ "menu.about": "Sobre o Titanium Inspector…",
+ "toolbar.searchWatermark": "Pesquisar URL, host, processo… (ou method:GET status:4xx)",
+ "toolbar.searchTip": "O texto livre pesquisa URL, host, nome do processo, ID exato do processo, método e status. Os prefixos limitam a um campo: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: também pesquisa corpos gravados no disco. Coloque - antes de um campo ou palavra para excluí-lo (p. ex. -host:cursor.sh ou -cursor). Filtros edita hosts e processos ocultos com mais espaço.",
+ "toolbar.filters": "Filtros",
+ "toolbar.filtersTip": "Editar a pesquisa e os hosts ou processos ocultos em uma janela maior",
+ "toolbar.hideConnect": "Ocultar CONNECT",
+ "toolbar.hideConnectTip": "Ocultar túneis HTTPS opacos quando Descriptografar HTTPS está desligado",
+ "toolbar.hideImages": "Ocultar imagens",
+ "toolbar.errorsOnly": "Somente erros",
+ "toolbar.clearFilters": "Limpar filtros",
+ "toolbar.hidden": "Ocultos",
+ "ctx.replay": "Reproduzir",
+ "ctx.loadComposer": "Carregar em Compor",
+ "ctx.saveRequest": "Salvar o corpo da requisição…",
+ "ctx.saveResponse": "Salvar o corpo da resposta…",
+ "ctx.copyUrl": "Copiar URL",
+ "ctx.copyCurl": "Copiar como curl",
+ "ctx.copyFetch": "Copiar como fetch",
+ "ctx.diff": "Comparar seleção…",
+ "ctx.filterHost": "Filtrar por host",
+ "ctx.hideHost": "Ocultar host",
+ "ctx.filterProcess": "Filtrar por processo",
+ "ctx.hideProcess": "Ocultar processo",
+ "ctx.excludeHost": "Excluir host…",
+ "ctx.excludeHostTip": "Parar de descriptografar o HTTPS deste host. As linhas permanecem na lista; use Ocultar host para tirá-las da exibição.",
+ "grid.duration": "Duração (ms)",
+ "grid.wait": "Espera (ms)",
+ "pane.inspect": "Inspecionar",
+ "pane.composer": "Compor",
+ "pane.breakpoints": "Pontos de interrupção",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Scripts",
+ "pane.mapRemote": "Mapeamento remoto",
+ "pane.closeTip": "Fechar painel",
+ "inspect.empty": "Selecione uma sessão na grade para inspecionar cabeçalhos e corpos da requisição e da resposta.",
+ "common.ok": "OK",
+ "common.cancel": "Cancelar",
+ "common.save": "Salvar",
+ "common.apply": "Aplicar",
+ "common.remove": "Remover",
+ "common.browse": "Procurar…",
+ "common.openFolder": "Abrir pasta",
+ "common.forget": "Esquecer",
+ "common.close": "Fechar",
+ "loopback.window": "Permitir que aplicativos da Store usem este proxy",
+ "loopback.checkAll": "Marcar tudo",
+ "loopback.uncheckAll": "Desmarcar tudo",
+ "loopback.filterWatermark": "Filtrar por nome do aplicativo…",
+ "loopback.clearAll": "Limpar tudo",
+ "trust.macWindow": "Confirmar confiança no Keychain Access",
+ "trust.openKeychain": "Abrir Keychain Access",
+ "trust.notNow": "Agora não",
+ "trust.recoveryTitle": "Confiança da CA raiz",
+ "trust.macWaitPlaceholder": "Aguardando confiança SSL…",
+ "window.about": "Sobre o Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Copyright © Jehonathan Thomas",
+ "about.license": "Licenciado sob a PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Detalhes da licença",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filtros",
+ "filters.search": "Pesquisa",
+ "filters.searchHelp": "A mesma pesquisa da barra de ferramentas, com mais espaço. Hosts e processos ocultos ficam listados abaixo, não nesta caixa.",
+ "filters.searchWatermark": "URL, host, processo, method:GET, status:4xx…",
+ "filters.hideHeading": "Ocultar da lista",
+ "filters.hideHelp": "As linhas continuam capturadas. Isto só as oculta na lista. Para parar de descriptografar HTTPS, use Excluir host…",
+ "filters.hosts": "Hosts",
+ "filters.addHostWatermark": "Adicionar um host para ocultar",
+ "filters.addHost": "Adicionar host",
+ "filters.processes": "Processos",
+ "filters.addProcessWatermark": "Adicionar um processo para ocultar",
+ "filters.addProcess": "Adicionar processo",
+ "filters.processSpace": "Um nome com espaço é encurtado na primeira palavra, o que também pode ocultar outros nomes que contenham essa palavra.",
+ "window.confirm": "Confirmar",
+ "window.excludeHost": "Excluir host",
+ "exclude.action": "Excluir",
+ "exclude.help": "Este host ainda aparecerá na lista de sessões. O Inspector não tentará ler o HTTPS dele.",
+ "window.logging": "Registro",
+ "logging.help": "Gravar mensagens de diagnóstico para solução de problemas. As alterações são aplicadas imediatamente.",
+ "logging.enable": "Ativar registro",
+ "logging.writeFile": "Gravar o registro em um arquivo",
+ "logging.detail": "Nível de detalhe",
+ "logging.detailHelp": "Error = somente problemas. Warning / Information = mais contexto. Debug = muito detalhado.",
+ "logging.path": "Caminho do arquivo de registro",
+ "window.excludedHosts": "Hosts excluídos",
+ "excluded.reset": "Restaurar padrões",
+ "excluded.bypass": "Ignorar proxy (sistema)",
+ "excluded.bypassHelp": "O tráfego nunca chega ao Inspector quando o proxy do sistema está ligado. Preenchido com hosts de identidade da Microsoft, SSO e RDP. Removê-los pode impedir a entrada RDP enquanto o proxy do sistema estiver ativado.",
+ "excluded.notDecrypted": "Hosts não descriptografados",
+ "excluded.notDecryptedHelp": "CONNECT permanece visível; TLS permanece opaco quando Descriptografar HTTPS está ligado. Preenchido com hosts que fixam o certificado (Dropbox, Webex).",
+ "excluded.learnHeading": "Não descriptografar automaticamente se a descriptografia falhar",
+ "excluded.learn": "Aprender hosts cujo TLS de origem falha sob descriptografia",
+ "excluded.learnHelp": "Quando o TLS de origem falha repetidamente sob descriptografia, ou o servidor de origem retorna 403/429, o Inspector para de descriptografar esse host nas conexões seguintes desta sessão. A lista tem um limite e é esquecida ao reiniciar, a menos que você mova esses hosts para hosts não descriptografados.",
+ "excluded.learnPaused": "Aprendizado pausado — as entradas existentes são mantidas até serem esquecidas.",
+ "excluded.noneLearned": "Nenhum host aprendido ainda.",
+ "excluded.promote": "Mover para hosts não descriptografados",
+ "excluded.clearLearned": "Limpar todos os aprendidos",
+ "window.retention": "Retenção de sessões",
+ "retention.max": "Máximo de sessões a manter",
+ "retention.maxHelp": "Quantas requisições permanecem na lista de sessões. Acima disso, as linhas mais antigas saem da lista, mas permanecem no disco até que Limpar sessões ou o limite de espaço em disco as remova.",
+ "retention.cache": "Pasta de cache",
+ "retention.openCache": "Abrir pasta de cache",
+ "retention.clearCache": "Limpar o cache de sessões salvas…",
+ "retention.advanced": "Avançado",
+ "retention.disk": "Espaço em disco para sessões salvas (MB)",
+ "retention.diskHelp": "Espaço máximo para todas as sessões salvas em disco (todas as execuções do Inspector). Cada execução usa uma subpasta com data e hora; acima disso, os arquivos HAR mais antigos são excluídos primeiro. Pastas de execução vazias são removidas.",
+ "loopback.intro": "Aplicativos da Windows Store e UWP são bloqueados de localhost por padrão. Marque os aplicativos que devem usar o Inspector e clique em Aplicar. Reinicie cada aplicativo (feche-o por completo) depois de Aplicar. O Inspector precisa estar em execução com o proxy do sistema ligado. Limpar tudo remove cada permissão.",
+ "loopback.closedUnchanged": "Aplicativos da Store inalterados.",
+ "loopback.proxyStopped": "Inicie o proxy e ative o proxy do sistema. Os aplicativos da Store não podem ser capturados até que ambos estejam ligados.",
+ "loopback.systemProxyOff": "Ative o proxy do sistema (menu Captura). A lista de permissões só permite que os aplicativos da Store alcancem localhost; eles ainda seguem o proxy do sistema.",
+ "loopback.refreshing": "Atualizando o proxy do sistema para que os aplicativos em execução se reconectem…",
+ "loopback.unchangedCount": "A lista de permissões já corresponde: {0}.",
+ "loopback.allowed": "Permitido: {0}.",
+ "loopback.allowedRefreshed": " O proxy do sistema foi atualizado para que os aplicativos em execução se reconectem. Se o tráfego ainda não aparecer, feche o aplicativo por completo e abra-o de novo.",
+ "loopback.allowedProxyStopped": " Inicie o proxy e ative o proxy do sistema e, em seguida, feche o aplicativo por completo e abra-o de novo.",
+ "loopback.allowedSystemProxyOff": " Ative o proxy do sistema e, em seguida, feche o aplicativo por completo e abra-o de novo.",
+ "loopback.allowedReady": " Feche o aplicativo por completo e abra-o de novo para capturar o tráfego.",
+ "loopback.clearedRefreshed": "Todas as isenções de loopback foram removidas. O proxy do sistema foi atualizado para que os aplicativos em execução se reconectem.",
+ "loopback.clearedReady": "Todas as isenções de loopback foram removidas. Feche por completo qualquer aplicativo que estivesse usando o Inspector e abra-o de novo.",
+ "loopback.cleared": "Todas as isenções de loopback foram removidas.",
+ "trust.macWaitBody": "Obter Informações no Keychain Access já pode mostrar Sempre confiar mesmo quando as políticas SSL não foram salvas (o Chrome e o Inspector ainda tratam a CA como não confiável).\n\nForçar o salvamento:\n1. Keychain Access → login → Certificados → clique duas vezes em Titanium Root Certificate Authority\n2. Expanda Confiança\n3. Defina Ao usar este certificado como Usar padrões do sistema e depois mude de novo para Sempre confiar\n4. Feche Obter Informações — é preciso aparecer o pedido de senha; ele grava as políticas reais de confiança SSL\n\nEsta janela fecha sozinha quando essas políticas são detectadas. Se você já salvou, clique em Salvei Sempre confiar.",
+ "trust.macWaitStatus": "Aguardando o certificado no chaveiro…",
+ "trust.macWaitInKeychain": "Aguardando as políticas SSL salvas (alterne Sempre confiar, feche Obter Informações, digite a senha)…",
+ "trust.macNotSaved": "Exibir Sempre confiar não basta — mude para Usar padrões do sistema e de volta para Sempre confiar, feche Obter Informações, digite sua senha e tente de novo Instalar CA raiz / Descriptografar HTTPS",
+ "trust.macConfirmSaved": "Salvei Sempre confiar",
+ "trust.exportCa": "Exportar CA",
+ "trust.install.mac": "Descriptografar HTTPS exige confiar na CA raiz do Titanium Inspector no Keychain Access (chaveiro de início). Instalar agora?",
+ "trust.install.linux": "Descriptografar HTTPS exige confiar na CA raiz do Titanium Inspector no repositório de certificados do usuário (NSS). Instalar agora?",
+ "trust.install.windows": "Descriptografar HTTPS exige confiar na CA raiz do Titanium Inspector no repositório de Autoridades de Certificação Raiz Confiáveis do usuário atual. Instalar agora?\n\nO Windows pode mostrar uma caixa de segurança Sim/Não de raiz confiável (não é o UAC). Escolha Sim para confiar na CA.",
+ "trust.install.other": "Descriptografar HTTPS exige confiar na CA raiz do Titanium Inspector neste computador. Instalar agora?",
+ "trust.remove.mac": "Remover a CA raiz do Titanium Inspector do chaveiro? A descriptografia HTTPS será desativada.",
+ "trust.remove.linux": "Remover a CA raiz do Titanium Inspector do repositório de certificados do usuário (NSS)? A descriptografia HTTPS será desativada.",
+ "trust.remove.windows": "Remover a CA raiz do Titanium Inspector do repositório de Autoridades de Certificação Raiz Confiáveis do usuário atual? A descriptografia HTTPS será desativada.",
+ "trust.remove.other": "Remover a CA raiz do Titanium Inspector? A descriptografia HTTPS será desativada.",
+ "trust.elevate.mac": "A confiança no nível do usuário falhou ou foi insuficiente. Continuar para mostrar uma solicitação de senha de administrador do macOS? Cancelar deixa as configurações de certificado inalteradas.",
+ "trust.elevate.linux": "A confiança no nível do usuário falhou ou foi insuficiente. Continuar para mostrar uma solicitação de administrador do polkit? Cancelar deixa as configurações de certificado inalteradas.",
+ "trust.elevate.windows": "A confiança no nível do usuário falhou ou foi insuficiente. Continuar para mostrar o UAC? Cancelar deixa as configurações de certificado inalteradas.",
+ "trust.elevate.other": "A confiança no nível do usuário falhou ou foi insuficiente. Continuar com uma solicitação de administrador? Cancelar deixa as configurações de certificado inalteradas.",
+ "trust.recovery.mac": "\n\nContinuar para mostrar uma solicitação de senha de administrador do macOS? Agora não deixa as configurações de certificado inalteradas.",
+ "trust.recovery.linux": "\n\nContinuar para mostrar uma solicitação de administrador do polkit? Agora não deixa as configurações de certificado inalteradas.",
+ "trust.recovery.windows": "\n\nContinuar para mostrar o UAC? Agora não deixa as configurações de certificado inalteradas.",
+ "trust.recovery.other": "\n\nContinuar com uma solicitação de administrador? Agora não deixa as configurações de certificado inalteradas.",
+ "trust.hosts.mac": "O desvio do sistema precisa de Captura → Proxy do sistema (usa os ajustes de proxy de rede do macOS). As regras somente de túnel valem para cada cliente que chega ao Inspector. Os padrões de fábrica estão preenchidos nas listas abaixo — edite à vontade ou restaure.",
+ "trust.hosts.linux": "O desvio do sistema precisa de Captura → Proxy do sistema (usa os ajustes de proxy da área de trabalho ou do ambiente). As regras somente de túnel valem para cada cliente que chega ao Inspector. Os padrões de fábrica estão preenchidos nas listas abaixo — edite à vontade ou restaure.",
+ "trust.hosts.windows": "O desvio do sistema precisa de Captura → Proxy do sistema (usa WinINET). As regras somente de túnel valem para cada cliente que chega ao Inspector. Os padrões de fábrica estão preenchidos nas listas abaixo — edite à vontade ou restaure.",
+ "trust.hosts.other": "O desvio do sistema precisa de Captura → Proxy do sistema. As regras somente de túnel valem para cada cliente que chega ao Inspector. Os padrões de fábrica estão preenchidos nas listas abaixo — edite à vontade ou restaure.",
+ "trust.localhost.mac": "Quando o proxy do sistema está ligado, enviar localhost pelo Inspector. Desligado, adiciona localhost à lista de desvio do proxy do macOS.",
+ "trust.localhost.linux": "Quando o proxy do sistema está ligado, enviar localhost pelo Inspector. Desligado, adiciona localhost a NO_PROXY.",
+ "trust.localhost.windows": "Quando o proxy do sistema está ligado, enviar localhost pelo Inspector (WinINET <-loopback>). Desligado, o loopback ignora o proxy.",
+ "trust.localhost.other": "Quando o proxy do sistema está ligado, enviar localhost pelo Inspector.",
+ "trust.status.missing": "A CA raiz ainda não é confiável — tente de novo ou exporte a CA",
+ "trust.status.cancelled": "Instalação da CA raiz cancelada",
+ "trust.status.certutil": "Faltam as ferramentas de certificado do navegador — instale-as, tente de novo ou exporte a CA",
+ "trust.status.homebrew": "O Homebrew é necessário para instalar as ferramentas de certificado — exporte a CA para confiar manualmente",
+ "trust.status.macConfirm": "Defina Sempre confiar para a CA raiz do Titanium Inspector no Keychain Access",
+ "trust.status.keychain": "A confiança do chaveiro falhou — tente de novo ou exporte a CA e confie manualmente",
+ "trust.fail.keychainTitle": "Confirmar confiança no chaveiro",
+ "trust.fail.continueKeychain": "Continuar no Keychain Access",
+ "trust.fail.toolsTitle": "Ferramentas de certificado necessárias",
+ "trust.fail.toolsLinux": "O Inspector precisa do certutil (ferramentas NSS) para concluir a confiança na CA raiz.",
+ "trust.fail.toolsOther": "O Inspector precisa das ferramentas de certificado do navegador para concluir a confiança na CA raiz.",
+ "trust.fail.tryAgain": "Tentar novamente",
+ "trust.fail.homebrewBody": "O Homebrew é necessário para instalar as ferramentas de certificado. Exporte a CA para confiar nela manualmente.",
+ "trust.fail.title": "Ainda não é possível descriptografar HTTPS",
+ "trust.fail.body": "A CA raiz do Titanium Inspector ainda não é confiável neste computador.",
+ "toolbar.throttle": "Limitação",
+ "toolbar.throttleTip": "Adiciona latência e limitação de largura de banda durante a captura (gravações do corpo / quadros WebSocket). Desligado por padrão.",
+ "toolbar.bindWatermark": "*, localhost ou IP",
+ "toolbar.bindTip": "127.0.0.1 ou localhost = somente este PC. 0.0.0.0 ou * = todos os adaptadores de rede (inclui localhost).",
+ "toolbar.portWatermark": "* ou porta",
+ "toolbar.portTip": "* ou vazio = porta escolhida pelo sistema (a porta real aparece após o início). Caso contrário, 1–65535.",
+ "toolbar.listeningTip": "O proxy está escutando",
+ "toolbar.trustHealthTip": "Estado de confiança da CA raiz para Descriptografar HTTPS. Instale ou confie na CA se indicar não confiável.",
+ "chip.process": "Processo",
+ "inspect.request": "Requisição",
+ "inspect.requestTip": "Cabeçalhos e corpo da requisição",
+ "inspect.copyHeaders": "Copiar cabeçalhos",
+ "inspect.resizeTip": "Arraste para redimensionar. Clique duas vezes para redefinir.",
+ "inspect.pretty": "Legível",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Mostrar o corpo como despejo hexadecimal",
+ "inspect.saveRequest": "Salvar requisição…",
+ "inspect.response": "Resposta",
+ "inspect.responseTip": "Cabeçalhos e corpo da resposta",
+ "inspect.saveResponse": "Salvar resposta…",
+ "inspect.diff": "Comparação",
+ "inspect.frames": "Quadros WS",
+ "inspect.framesHelp": "Quadros WebSocket ao vivo desta sessão (direção, opcode, prévia da carga).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events analisados a partir do corpo da resposta.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Mostrar cabeçalhos",
+ "inspect.hideHeaders": "Ocultar cabeçalhos",
+ "inspect.headers": "Cabeçalhos ({0})",
+ "inspect.prettyTip": "Indentar JSON, XML e HTML",
+ "inspect.prettyHexTip": "Não se aplica à exibição hexadecimal",
+ "inspect.emptyBody": "(vazio)",
+ "inspect.noRequestBody": "Sem corpo da requisição",
+ "inspect.waiting": "Aguardando a resposta…",
+ "composer.help": "Monte e envie uma requisição pelo proxy. Carregar da seleção copia a sessão atual.",
+ "composer.method": "Método",
+ "composer.url": "URL",
+ "composer.headers": "Cabeçalhos (Nome: valor por linha)",
+ "composer.body": "Corpo",
+ "composer.loadSelected": "Carregar da seleção",
+ "composer.loadBody": "Carregar corpo de arquivo…",
+ "composer.send": "Enviar",
+ "bp.help": "Pausa as requisições de cliente correspondentes para editar o corpo, continuar ou abortar. Uma pausa por vez; continua automaticamente após 120s. Desmarcar Ativado continua uma requisição pausada.",
+ "bp.enabled": "Ativado",
+ "bp.breakOnResponse": "Interromper na resposta",
+ "bp.match": "Correspondência",
+ "bp.urlWatermark": "Filtro de URL (* = todas, ex. *api*/users*)",
+ "bp.graphqlWatermark": "Somente esta operação GraphQL (opcional)",
+ "bp.graphqlTip": "Filtro extra no corpo da requisição do cliente. Corresponde a operationName do JSON ou a uma consulta nomeada. Deixe em branco para corresponder a cada operação da URL.",
+ "bp.fromSelected": "Da sessão selecionada",
+ "bp.fromSelectedTip": "Copia o nome da operação GraphQL da requisição da sessão selecionada.",
+ "bp.graphqlHelp": "Deixe a caixa GraphQL vazia para corresponder a cada operação. Preencha-a (ex. GetUser) para pausar somente essa requisição de cliente na URL acima. Interromper na resposta ainda usa o filtro de URL.",
+ "bp.editWatermark": "Editar corpo (Aplicar edição do corpo e depois Continuar)",
+ "bp.applyEdit": "Aplicar edição do corpo",
+ "bp.continue": "Continuar",
+ "bp.abort": "Abortar",
+ "ar.help": "Devolve uma resposta fictícia antes do servidor real. Correspondência decide a quais requisições de cliente uma regra se aplica; os campos abaixo são o que você envia de volta.",
+ "ar.enabled": "Ativado (antes dos pontos de interrupção)",
+ "ar.urlWatermark": "URL de correspondência (curingas *)",
+ "ar.graphqlHelp": "A mesma URL e operações GraphQL diferentes podem usar regras diferentes. Deixe em branco para corresponder a cada operação.",
+ "ar.respondWith": "Responder com",
+ "ar.statusTip": "Status HTTP. Vazio = 200. Use 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Arquivo Map Local (opcional)",
+ "ar.bodyWatermark": "Corpo da resposta (usado quando Map Local está vazio)",
+ "ar.add": "Adicionar regra",
+ "ar.update": "Atualizar regra",
+ "ar.delete": "Excluir regra",
+ "script.intro": "Um comando por linha, em cada sessão capturada. Isto não é JavaScript nem C# — digite apenas os comandos abaixo.",
+ "script.what": "O que você pode digitar",
+ "script.setHeaderHelp": "Adiciona ou substitui um cabeçalho. O tráfego continua até o servidor.",
+ "script.setStatusHelp": "Na requisição: responder agora e ignorar o servidor. Na resposta: alterar o status que o cliente vê.",
+ "script.abortHelp": "Bloqueia com 403 Forbidden. Adicione uma linha set-status para escolher outro código.",
+ "script.comment": "Comece uma linha com # ou // para um comentário. Você pode combinar comandos; coloque cada um na própria linha.",
+ "script.onRequest": "Na requisição",
+ "script.onResponse": "Na resposta",
+ "script.requestSkips": "abort ou set-status aqui ignora AutoResponder, os pontos de interrupção e a origem.",
+ "map.help": "Reescreve as requisições de cliente correspondentes para outra origem antes do servidor real. Use um único * na correspondência e no destino para preservar um sufixo de caminho ou consulta. É executado depois de AutoResponder / Map Local.",
+ "map.graphqlHelp": "Deixe em branco para reescrever cada operação da URL. Preencha para reescrever somente essa operação GraphQL.",
+ "map.rewriteTo": "Reescrever para",
+ "map.targetWatermark": "URL de destino (absoluta, * opcional)",
+ "loopback.allow": "Permitir",
+ "loopback.appName": "Nome do aplicativo",
+ "loopback.packageId": "ID do pacote",
+ "status.ready": "Pronto",
+ "status.searchingBodies": "Pesquisando corpos…",
+ "status.proxyStopped": "Proxy parado",
+ "status.proxyRunning": "Proxy em execução em {0}",
+ "trust.health.trusted": "CA confiável",
+ "trust.health.untrusted": "CA não confiável"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.pt-PT.json b/src/Titanium.Inspector/Localization/strings.pt-PT.json
new file mode 100644
index 000000000..32d48f525
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.pt-PT.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Ficheiro",
+ "menu.exportAllHar": "Exportar tudo como HAR…",
+ "menu.exportSelectedHar": "Exportar a seleção como HAR…",
+ "menu.importHar": "Importar HAR…",
+ "menu.exportAllArchive": "Exportar tudo como arquivo…",
+ "menu.exportSelectedArchive": "Exportar a seleção como arquivo…",
+ "menu.importArchive": "Importar arquivo…",
+ "menu.exit": "Sair",
+ "menu.capture": "Captura",
+ "menu.startProxy": "Iniciar proxy",
+ "menu.stopProxy": "Parar proxy",
+ "menu.capturing": "A capturar",
+ "menu.clearSessions": "Limpar sessões",
+ "menu.removeSelected": "Remover seleção",
+ "menu.autoStartCapture": "Iniciar a captura automaticamente",
+ "menu.autoSystemProxy": "Proxy do sistema automático ao arrancar",
+ "menu.decryptHttps": "Desencriptar HTTPS",
+ "menu.systemProxy": "Proxy do sistema",
+ "menu.captureLocal": "Capturar tráfego local",
+ "menu.allowStoreApps": "Permitir aplicações da Store…",
+ "menu.installCa": "Instalar CA de raiz (utilizador atual)",
+ "menu.removeCa": "Remover CA de raiz (utilizador atual)",
+ "menu.rotateCa": "Limpar e reinstalar a CA de raiz…",
+ "menu.removeOldCas": "Remover CAs de raiz antigas…",
+ "menu.exportCa": "Exportar CA de raiz…",
+ "menu.trustFirefox": "Confiar na CA no Firefox…",
+ "menu.deviceCa": "Configurar a CA de um dispositivo externo",
+ "menu.tools": "Ferramentas",
+ "menu.composer": "Compor…",
+ "menu.breakpoints": "Pontos de interrupção…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Scripts…",
+ "menu.mapRemote": "Mapeamento remoto…",
+ "menu.options": "Opções",
+ "menu.theme": "Tema",
+ "menu.themeLight": "Claro",
+ "menu.themeDark": "Escuro",
+ "menu.themeAutomatic": "Automático",
+ "menu.language": "Idioma",
+ "menu.languageAutomatic": "Automático",
+ "menu.columns": "Colunas",
+ "menu.col.id": "Id",
+ "menu.col.method": "Método",
+ "menu.col.status": "Estado",
+ "menu.col.host": "Host",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protocolo",
+ "menu.col.duration": "Duração",
+ "menu.col.ttfb": "Espera (TTFB)",
+ "menu.col.size": "Tamanho",
+ "menu.col.process": "Processo",
+ "menu.col.started": "Iniciado",
+ "menu.col.scheme": "Esquema",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Repor colunas",
+ "menu.sessionRetention": "Retenção de sessões…",
+ "menu.excludedHosts": "Hosts excluídos…",
+ "menu.excludedHostsTip": "Listas para ignorar a desencriptação HTTPS e regras de desvio do sistema",
+ "menu.ignoreCerts": "Ignorar certificados de servidor inseguros",
+ "menu.addVia": "Adicionar cabeçalho Via",
+ "menu.addViaTip": "Acrescenta Via: … titanium-web-proxy ao tráfego intercetado (RFC 9110). Desligado, a injeção e a deteção de ciclo Via ficam desativadas.",
+ "menu.logging": "Registo…",
+ "menu.resetSettings": "Repor as definições do Inspector…",
+ "menu.help": "Ajuda",
+ "menu.checkUpdates": "Procurar atualizações…",
+ "menu.checkUpdatesStartup": "Procurar atualizações ao arrancar",
+ "menu.updateChannel": "Canal de atualização",
+ "menu.channelStable": "Estável",
+ "menu.channelBeta": "Beta",
+ "menu.about": "Acerca do Titanium Inspector…",
+ "toolbar.searchWatermark": "Pesquisar URL, host, processo… (ou method:GET status:4xx)",
+ "toolbar.searchTip": "O texto livre pesquisa URL, host, nome do processo, ID exato do processo, método e estado. Os prefixos limitam a um campo: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: também pesquisa corpos gravados no disco. Coloque - antes de um campo ou palavra para o excluir (p. ex. -host:cursor.sh ou -cursor). Filtros edita hosts e processos ocultos com mais espaço.",
+ "toolbar.filters": "Filtros",
+ "toolbar.filtersTip": "Editar a pesquisa e os hosts ou processos ocultos numa janela maior",
+ "toolbar.hideConnect": "Ocultar CONNECT",
+ "toolbar.hideConnectTip": "Ocultar túneis HTTPS opacos quando Desencriptar HTTPS está desligado",
+ "toolbar.hideImages": "Ocultar imagens",
+ "toolbar.errorsOnly": "Apenas erros",
+ "toolbar.clearFilters": "Limpar filtros",
+ "toolbar.hidden": "Ocultos",
+ "ctx.replay": "Reproduzir",
+ "ctx.loadComposer": "Carregar em Compor",
+ "ctx.saveRequest": "Guardar o corpo do pedido…",
+ "ctx.saveResponse": "Guardar o corpo da resposta…",
+ "ctx.copyUrl": "Copiar URL",
+ "ctx.copyCurl": "Copiar como curl",
+ "ctx.copyFetch": "Copiar como fetch",
+ "ctx.diff": "Comparar seleção…",
+ "ctx.filterHost": "Filtrar por host",
+ "ctx.hideHost": "Ocultar host",
+ "ctx.filterProcess": "Filtrar por processo",
+ "ctx.hideProcess": "Ocultar processo",
+ "ctx.excludeHost": "Excluir host…",
+ "ctx.excludeHostTip": "Parar de desencriptar o HTTPS deste host. As linhas permanecem na lista; use Ocultar host para as retirar da vista.",
+ "grid.duration": "Duração (ms)",
+ "grid.wait": "Espera (ms)",
+ "pane.inspect": "Inspecionar",
+ "pane.composer": "Compor",
+ "pane.breakpoints": "Pontos de interrupção",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Scripts",
+ "pane.mapRemote": "Mapeamento remoto",
+ "pane.closeTip": "Fechar painel",
+ "inspect.empty": "Selecione uma sessão na grelha para inspecionar cabeçalhos e corpos do pedido e da resposta.",
+ "common.ok": "OK",
+ "common.cancel": "Cancelar",
+ "common.save": "Guardar",
+ "common.apply": "Aplicar",
+ "common.remove": "Remover",
+ "common.browse": "Procurar…",
+ "common.openFolder": "Abrir pasta",
+ "common.forget": "Esquecer",
+ "common.close": "Fechar",
+ "loopback.window": "Permitir que as aplicações da Store usem este proxy",
+ "loopback.checkAll": "Marcar tudo",
+ "loopback.uncheckAll": "Desmarcar tudo",
+ "loopback.filterWatermark": "Filtrar por nome da aplicação…",
+ "loopback.clearAll": "Limpar tudo",
+ "trust.macWindow": "Confirmar confiança no Keychain Access",
+ "trust.openKeychain": "Abrir Keychain Access",
+ "trust.notNow": "Agora não",
+ "trust.recoveryTitle": "Confiança da CA de raiz",
+ "trust.macWaitPlaceholder": "A aguardar confiança SSL…",
+ "window.about": "Acerca do Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Copyright © Jehonathan Thomas",
+ "about.license": "Licenciado ao abrigo da PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Detalhes da licença",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filtros",
+ "filters.search": "Pesquisa",
+ "filters.searchHelp": "A mesma pesquisa da barra de ferramentas, com mais espaço. Os hosts e processos ocultos estão listados abaixo, não nesta caixa.",
+ "filters.searchWatermark": "URL, host, processo, method:GET, status:4xx…",
+ "filters.hideHeading": "Ocultar da lista",
+ "filters.hideHelp": "As linhas continuam capturadas. Isto apenas as oculta na lista. Para parar de desencriptar HTTPS, use Excluir host…",
+ "filters.hosts": "Hosts",
+ "filters.addHostWatermark": "Adicionar um host para ocultar",
+ "filters.addHost": "Adicionar host",
+ "filters.processes": "Processos",
+ "filters.addProcessWatermark": "Adicionar um processo para ocultar",
+ "filters.addProcess": "Adicionar processo",
+ "filters.processSpace": "Um nome com espaço é encurtado na primeira palavra, o que também pode ocultar outros nomes que contenham essa palavra.",
+ "window.confirm": "Confirmar",
+ "window.excludeHost": "Excluir host",
+ "exclude.action": "Excluir",
+ "exclude.help": "Este host continuará a aparecer na lista de sessões. O Inspector não tentará ler o HTTPS dele.",
+ "window.logging": "Registo",
+ "logging.help": "Escrever mensagens de diagnóstico para resolução de problemas. As alterações aplicam-se de imediato.",
+ "logging.enable": "Ativar registo",
+ "logging.writeFile": "Escrever o registo num ficheiro",
+ "logging.detail": "Nível de detalhe",
+ "logging.detailHelp": "Error = apenas problemas. Warning / Information = mais contexto. Debug = muito detalhado.",
+ "logging.path": "Caminho do ficheiro de registo",
+ "window.excludedHosts": "Hosts excluídos",
+ "excluded.reset": "Repor predefinições",
+ "excluded.bypass": "Ignorar proxy (sistema)",
+ "excluded.bypassHelp": "O tráfego nunca chega ao Inspector quando o proxy do sistema está ligado. Preenchido com hosts de identidade da Microsoft, SSO e RDP. Removê-los pode impedir o início de sessão RDP enquanto o proxy do sistema estiver ativado.",
+ "excluded.notDecrypted": "Hosts não desencriptados",
+ "excluded.notDecryptedHelp": "CONNECT permanece visível; TLS permanece opaco quando Desencriptar HTTPS está ligado. Preenchido com hosts que fixam o certificado (Dropbox, Webex).",
+ "excluded.learnHeading": "Não desencriptar automaticamente se a desencriptação falhar",
+ "excluded.learn": "Aprender hosts cujo TLS de origem falha sob desencriptação",
+ "excluded.learnHelp": "Quando o TLS de origem falha repetidamente sob desencriptação, ou o servidor de origem devolve 403/429, o Inspector deixa de desencriptar esse host nas ligações seguintes desta sessão. A lista tem um limite e é esquecida ao reiniciar, a menos que mova esses hosts para hosts não desencriptados.",
+ "excluded.learnPaused": "Aprendizagem em pausa — as entradas existentes mantêm-se até serem esquecidas.",
+ "excluded.noneLearned": "Ainda não foi aprendido nenhum host.",
+ "excluded.promote": "Mover para hosts não desencriptados",
+ "excluded.clearLearned": "Limpar todos os aprendidos",
+ "window.retention": "Retenção de sessões",
+ "retention.max": "Máximo de sessões a manter",
+ "retention.maxHelp": "Quantos pedidos permanecem na lista de sessões. Acima disto, as linhas mais antigas saem da lista, mas permanecem no disco até que Limpar sessões ou o limite de espaço em disco as remova.",
+ "retention.cache": "Pasta de cache",
+ "retention.openCache": "Abrir pasta de cache",
+ "retention.clearCache": "Limpar a cache de sessões guardadas…",
+ "retention.advanced": "Avançado",
+ "retention.disk": "Espaço em disco para sessões guardadas (MB)",
+ "retention.diskHelp": "Espaço máximo para todas as sessões guardadas em disco (todas as execuções do Inspector). Cada execução usa uma subpasta com data e hora; acima disto, os ficheiros HAR mais antigos são eliminados primeiro. As pastas de execução vazias são removidas.",
+ "loopback.intro": "As aplicações da Windows Store e UWP estão bloqueadas de localhost por predefinição. Marque as aplicações que devem usar o Inspector e clique em Aplicar. Reinicie cada aplicação (saia dela por completo) depois de Aplicar. O Inspector tem de estar em execução com o proxy do sistema ligado. Limpar tudo remove cada permissão.",
+ "loopback.closedUnchanged": "Aplicações da Store inalteradas.",
+ "loopback.proxyStopped": "Inicie o proxy e ative o proxy do sistema. As aplicações da Store não podem ser capturadas até que ambos estejam ligados.",
+ "loopback.systemProxyOff": "Ative o proxy do sistema (menu Captura). A lista de permissões só permite que as aplicações da Store alcancem localhost; elas continuam a seguir o proxy do sistema.",
+ "loopback.refreshing": "A atualizar o proxy do sistema para que as aplicações em execução se voltem a ligar…",
+ "loopback.unchangedCount": "A lista de permissões já corresponde: {0}.",
+ "loopback.allowed": "Permitido: {0}.",
+ "loopback.allowedRefreshed": " O proxy do sistema foi atualizado para que as aplicações em execução se voltem a ligar. Se o tráfego ainda não aparecer, saia da aplicação por completo e abra-a de novo.",
+ "loopback.allowedProxyStopped": " Inicie o proxy e ative o proxy do sistema e, em seguida, saia da aplicação por completo e abra-a de novo.",
+ "loopback.allowedSystemProxyOff": " Ative o proxy do sistema e, em seguida, saia da aplicação por completo e abra-a de novo.",
+ "loopback.allowedReady": " Saia da aplicação por completo e abra-a de novo para capturar o tráfego.",
+ "loopback.clearedRefreshed": "Todas as isenções de loopback foram removidas. O proxy do sistema foi atualizado para que as aplicações em execução se voltem a ligar.",
+ "loopback.clearedReady": "Todas as isenções de loopback foram removidas. Saia por completo de qualquer aplicação que estivesse a usar o Inspector e abra-a de novo.",
+ "loopback.cleared": "Todas as isenções de loopback foram removidas.",
+ "trust.macWaitBody": "Obter Informações no Keychain Access já pode mostrar Confiar sempre mesmo quando as políticas SSL não foram guardadas (o Chrome e o Inspector ainda tratam a CA como não fidedigna).\n\nForçar a gravação:\n1. Keychain Access → início de sessão → Certificados → faça duplo clique em Titanium Root Certificate Authority\n2. Expanda Confiança\n3. Defina Ao utilizar este certificado como Usar predefinições do sistema e depois volte a mudar para Confiar sempre\n4. Feche Obter Informações — tem de aparecer o pedido de palavra-passe; é ele que grava as políticas reais de confiança SSL\n\nEsta janela fecha-se automaticamente quando essas políticas são detetadas. Se já guardou, clique em Guardei Confiar sempre.",
+ "trust.macWaitStatus": "A aguardar o certificado no porta-chaves…",
+ "trust.macWaitInKeychain": "A aguardar as políticas SSL guardadas (alterne Confiar sempre, feche Obter Informações, introduza a palavra-passe)…",
+ "trust.macNotSaved": "Mostrar Confiar sempre não basta — mude para Usar predefinições do sistema e de novo para Confiar sempre, feche Obter Informações, introduza a palavra-passe e tente outra vez Instalar CA de raiz / Desencriptar HTTPS",
+ "trust.macConfirmSaved": "Guardei Confiar sempre",
+ "trust.exportCa": "Exportar CA",
+ "trust.install.mac": "Desencriptar HTTPS exige confiar na CA de raiz do Titanium Inspector no Keychain Access (porta-chaves de início de sessão). Instalar agora?",
+ "trust.install.linux": "Desencriptar HTTPS exige confiar na CA de raiz do Titanium Inspector no arquivo de certificados do utilizador (NSS). Instalar agora?",
+ "trust.install.windows": "Desencriptar HTTPS exige confiar na CA de raiz do Titanium Inspector no arquivo de Autoridades de Certificação de Raiz Fidedignas do utilizador atual. Instalar agora?\n\nO Windows pode mostrar uma caixa de segurança Sim/Não de raiz fidedigna (não é o UAC). Escolha Sim para confiar na CA.",
+ "trust.install.other": "Desencriptar HTTPS exige confiar na CA de raiz do Titanium Inspector neste computador. Instalar agora?",
+ "trust.remove.mac": "Remover a CA de raiz do Titanium Inspector do porta-chaves? A desencriptação HTTPS será desativada.",
+ "trust.remove.linux": "Remover a CA de raiz do Titanium Inspector do arquivo de certificados do utilizador (NSS)? A desencriptação HTTPS será desativada.",
+ "trust.remove.windows": "Remover a CA de raiz do Titanium Inspector do arquivo de Autoridades de Certificação de Raiz Fidedignas do utilizador atual? A desencriptação HTTPS será desativada.",
+ "trust.remove.other": "Remover a CA de raiz do Titanium Inspector? A desencriptação HTTPS será desativada.",
+ "trust.elevate.mac": "A confiança ao nível do utilizador falhou ou foi insuficiente. Continuar para mostrar um pedido de palavra-passe de administrador do macOS? Cancelar deixa as definições de certificado inalteradas.",
+ "trust.elevate.linux": "A confiança ao nível do utilizador falhou ou foi insuficiente. Continuar para mostrar um pedido de administrador do polkit? Cancelar deixa as definições de certificado inalteradas.",
+ "trust.elevate.windows": "A confiança ao nível do utilizador falhou ou foi insuficiente. Continuar para mostrar o UAC? Cancelar deixa as definições de certificado inalteradas.",
+ "trust.elevate.other": "A confiança ao nível do utilizador falhou ou foi insuficiente. Continuar com um pedido de administrador? Cancelar deixa as definições de certificado inalteradas.",
+ "trust.recovery.mac": "\n\nContinuar para mostrar um pedido de palavra-passe de administrador do macOS? Agora não deixa as definições de certificado inalteradas.",
+ "trust.recovery.linux": "\n\nContinuar para mostrar um pedido de administrador do polkit? Agora não deixa as definições de certificado inalteradas.",
+ "trust.recovery.windows": "\n\nContinuar para mostrar o UAC? Agora não deixa as definições de certificado inalteradas.",
+ "trust.recovery.other": "\n\nContinuar com um pedido de administrador? Agora não deixa as definições de certificado inalteradas.",
+ "trust.hosts.mac": "O desvio do sistema precisa de Captura → Proxy do sistema (usa as definições de proxy de rede do macOS). As regras só de túnel aplicam-se a cada cliente que chega ao Inspector. As predefinições de fábrica estão preenchidas nas listas abaixo — edite livremente ou reponha.",
+ "trust.hosts.linux": "O desvio do sistema precisa de Captura → Proxy do sistema (usa as definições de proxy do ambiente de trabalho ou do ambiente). As regras só de túnel aplicam-se a cada cliente que chega ao Inspector. As predefinições de fábrica estão preenchidas nas listas abaixo — edite livremente ou reponha.",
+ "trust.hosts.windows": "O desvio do sistema precisa de Captura → Proxy do sistema (usa WinINET). As regras só de túnel aplicam-se a cada cliente que chega ao Inspector. As predefinições de fábrica estão preenchidas nas listas abaixo — edite livremente ou reponha.",
+ "trust.hosts.other": "O desvio do sistema precisa de Captura → Proxy do sistema. As regras só de túnel aplicam-se a cada cliente que chega ao Inspector. As predefinições de fábrica estão preenchidas nas listas abaixo — edite livremente ou reponha.",
+ "trust.localhost.mac": "Quando o proxy do sistema está ligado, enviar localhost através do Inspector. Desligado, adiciona localhost à lista de desvio do proxy do macOS.",
+ "trust.localhost.linux": "Quando o proxy do sistema está ligado, enviar localhost através do Inspector. Desligado, adiciona localhost a NO_PROXY.",
+ "trust.localhost.windows": "Quando o proxy do sistema está ligado, enviar localhost através do Inspector (WinINET <-loopback>). Desligado, o loopback ignora o proxy.",
+ "trust.localhost.other": "Quando o proxy do sistema está ligado, enviar localhost através do Inspector.",
+ "trust.status.missing": "A CA de raiz ainda não é fidedigna — tente outra vez ou exporte a CA",
+ "trust.status.cancelled": "Instalação da CA de raiz cancelada",
+ "trust.status.certutil": "Faltam as ferramentas de certificado do navegador — instale-as, tente outra vez ou exporte a CA",
+ "trust.status.homebrew": "O Homebrew é necessário para instalar as ferramentas de certificado — exporte a CA para confiar manualmente",
+ "trust.status.macConfirm": "Defina Confiar sempre para a CA de raiz do Titanium Inspector no Keychain Access",
+ "trust.status.keychain": "A confiança do porta-chaves falhou — tente outra vez ou exporte a CA e confie manualmente",
+ "trust.fail.keychainTitle": "Confirmar confiança no porta-chaves",
+ "trust.fail.continueKeychain": "Continuar no Keychain Access",
+ "trust.fail.toolsTitle": "Ferramentas de certificado necessárias",
+ "trust.fail.toolsLinux": "O Inspector precisa do certutil (ferramentas NSS) para concluir a confiança na CA de raiz.",
+ "trust.fail.toolsOther": "O Inspector precisa das ferramentas de certificado do navegador para concluir a confiança na CA de raiz.",
+ "trust.fail.tryAgain": "Tentar outra vez",
+ "trust.fail.homebrewBody": "O Homebrew é necessário para instalar as ferramentas de certificado. Exporte a CA para confiar nela manualmente.",
+ "trust.fail.title": "Ainda não é possível desencriptar HTTPS",
+ "trust.fail.body": "A CA de raiz do Titanium Inspector ainda não é fidedigna neste computador.",
+ "toolbar.throttle": "Limitação",
+ "toolbar.throttleTip": "Adiciona latência e limitação de largura de banda durante a captura (escritas do corpo / tramas WebSocket). Desligado por predefinição.",
+ "toolbar.bindWatermark": "*, localhost ou IP",
+ "toolbar.bindTip": "127.0.0.1 ou localhost = apenas este PC. 0.0.0.0 ou * = todos os adaptadores de rede (inclui localhost).",
+ "toolbar.portWatermark": "* ou porta",
+ "toolbar.portTip": "* ou vazio = porta escolhida pelo sistema (a porta real aparece após o início). Caso contrário, 1–65535.",
+ "toolbar.listeningTip": "O proxy está à escuta",
+ "toolbar.trustHealthTip": "Estado de confiança da CA de raiz para Desencriptar HTTPS. Instale ou confie na CA se indicar não fidedigna.",
+ "chip.process": "Processo",
+ "inspect.request": "Pedido",
+ "inspect.requestTip": "Cabeçalhos e corpo do pedido",
+ "inspect.copyHeaders": "Copiar cabeçalhos",
+ "inspect.resizeTip": "Arraste para redimensionar. Faça duplo clique para repor.",
+ "inspect.pretty": "Legível",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Mostrar o corpo como despejo hexadecimal",
+ "inspect.saveRequest": "Guardar pedido…",
+ "inspect.response": "Resposta",
+ "inspect.responseTip": "Cabeçalhos e corpo da resposta",
+ "inspect.saveResponse": "Guardar resposta…",
+ "inspect.diff": "Comparação",
+ "inspect.frames": "Tramas WS",
+ "inspect.framesHelp": "Tramas WebSocket em direto desta sessão (direção, opcode, pré-visualização da carga).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events analisados a partir do corpo da resposta.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Mostrar cabeçalhos",
+ "inspect.hideHeaders": "Ocultar cabeçalhos",
+ "inspect.headers": "Cabeçalhos ({0})",
+ "inspect.prettyTip": "Indentar JSON, XML e HTML",
+ "inspect.prettyHexTip": "Não se aplica à vista hexadecimal",
+ "inspect.emptyBody": "(vazio)",
+ "inspect.noRequestBody": "Sem corpo do pedido",
+ "inspect.waiting": "A aguardar a resposta…",
+ "composer.help": "Crie e envie um pedido através do proxy. Carregar da seleção copia a sessão atual.",
+ "composer.method": "Método",
+ "composer.url": "URL",
+ "composer.headers": "Cabeçalhos (Nome: valor por linha)",
+ "composer.body": "Corpo",
+ "composer.loadSelected": "Carregar da seleção",
+ "composer.loadBody": "Carregar corpo de ficheiro…",
+ "composer.send": "Enviar",
+ "bp.help": "Pausa os pedidos de cliente correspondentes para editar o corpo, continuar ou abortar. Uma pausa de cada vez; continua automaticamente após 120s. Desmarcar Ativado continua um pedido em pausa.",
+ "bp.enabled": "Ativado",
+ "bp.breakOnResponse": "Interromper na resposta",
+ "bp.match": "Correspondência",
+ "bp.urlWatermark": "Filtro de URL (* = todos, ex. *api*/users*)",
+ "bp.graphqlWatermark": "Apenas esta operação GraphQL (opcional)",
+ "bp.graphqlTip": "Filtro extra no corpo do pedido do cliente. Corresponde a operationName do JSON ou a uma consulta com nome. Deixe em branco para corresponder a cada operação do URL.",
+ "bp.fromSelected": "Da sessão selecionada",
+ "bp.fromSelectedTip": "Copia o nome da operação GraphQL do pedido da sessão selecionada.",
+ "bp.graphqlHelp": "Deixe a caixa GraphQL vazia para corresponder a cada operação. Preencha-a (ex. GetUser) para pausar apenas esse pedido de cliente no URL acima. Interromper na resposta continua a usar o filtro de URL.",
+ "bp.editWatermark": "Editar corpo (Aplicar edição do corpo e depois Continuar)",
+ "bp.applyEdit": "Aplicar edição do corpo",
+ "bp.continue": "Continuar",
+ "bp.abort": "Abortar",
+ "ar.help": "Devolve uma resposta fictícia antes do servidor real. Correspondência decide a que pedidos de cliente se aplica uma regra; os campos abaixo são o que envia de volta.",
+ "ar.enabled": "Ativado (antes dos pontos de interrupção)",
+ "ar.urlWatermark": "URL de correspondência (carateres universais *)",
+ "ar.graphqlHelp": "O mesmo URL e operações GraphQL diferentes podem usar regras diferentes. Deixe em branco para corresponder a cada operação.",
+ "ar.respondWith": "Responder com",
+ "ar.statusTip": "Estado HTTP. Vazio = 200. Use 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Ficheiro Map Local (opcional)",
+ "ar.bodyWatermark": "Corpo da resposta (usado quando Map Local está vazio)",
+ "ar.add": "Adicionar regra",
+ "ar.update": "Atualizar regra",
+ "ar.delete": "Eliminar regra",
+ "script.intro": "Um comando por linha, em cada sessão capturada. Isto não é JavaScript nem C# — escreva apenas os comandos abaixo.",
+ "script.what": "O que pode escrever",
+ "script.setHeaderHelp": "Adiciona ou substitui um cabeçalho. O tráfego continua até ao servidor.",
+ "script.setStatusHelp": "No pedido: responder agora e ignorar o servidor. Na resposta: alterar o estado que o cliente vê.",
+ "script.abortHelp": "Bloqueia com 403 Forbidden. Adicione uma linha set-status para escolher outro código.",
+ "script.comment": "Comece uma linha com # ou // para um comentário. Pode combinar comandos; coloque cada um na sua própria linha.",
+ "script.onRequest": "No pedido",
+ "script.onResponse": "Na resposta",
+ "script.requestSkips": "abort ou set-status aqui ignora AutoResponder, os pontos de interrupção e a origem.",
+ "map.help": "Reescreve os pedidos de cliente correspondentes para outra origem antes do servidor real. Use um único * na correspondência e no destino para preservar um sufixo de caminho ou consulta. É executado depois de AutoResponder / Map Local.",
+ "map.graphqlHelp": "Deixe em branco para reescrever cada operação do URL. Preencha para reescrever apenas essa operação GraphQL.",
+ "map.rewriteTo": "Reescrever para",
+ "map.targetWatermark": "URL de destino (absoluto, * opcional)",
+ "loopback.allow": "Permitir",
+ "loopback.appName": "Nome da aplicação",
+ "loopback.packageId": "ID do pacote",
+ "status.ready": "Pronto",
+ "status.searchingBodies": "A pesquisar corpos…",
+ "status.proxyStopped": "Proxy parado",
+ "status.proxyRunning": "Proxy em execução em {0}",
+ "trust.health.trusted": "CA fidedigna",
+ "trust.health.untrusted": "CA não fidedigna"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.ru.json b/src/Titanium.Inspector/Localization/strings.ru.json
new file mode 100644
index 000000000..6440d1865
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.ru.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Файл",
+ "menu.exportAllHar": "Экспортировать все HAR…",
+ "menu.exportSelectedHar": "Экспортировать выбранные HAR…",
+ "menu.importHar": "Импортировать HAR…",
+ "menu.exportAllArchive": "Экспортировать весь архив…",
+ "menu.exportSelectedArchive": "Экспортировать выбранный архив…",
+ "menu.importArchive": "Импортировать архив…",
+ "menu.exit": "Выход",
+ "menu.capture": "Захват",
+ "menu.startProxy": "Запустить прокси",
+ "menu.stopProxy": "Остановить прокси",
+ "menu.capturing": "Идёт захват",
+ "menu.clearSessions": "Очистить сеансы",
+ "menu.removeSelected": "Удалить выбранные",
+ "menu.autoStartCapture": "Автозапуск захвата",
+ "menu.autoSystemProxy": "Системный прокси при запуске",
+ "menu.decryptHttps": "Расшифровывать HTTPS",
+ "menu.systemProxy": "Системный прокси",
+ "menu.captureLocal": "Захватывать локальный трафик",
+ "menu.allowStoreApps": "Разрешить приложениям Магазина…",
+ "menu.installCa": "Установить корневой CA (текущий пользователь)",
+ "menu.removeCa": "Удалить корневой CA (текущий пользователь)",
+ "menu.rotateCa": "Очистить и переустановить корневой CA…",
+ "menu.removeOldCas": "Удалить старые корневые CA…",
+ "menu.exportCa": "Экспортировать корневой CA…",
+ "menu.trustFirefox": "Доверять CA в Firefox…",
+ "menu.deviceCa": "Настроить CA внешнего устройства",
+ "menu.tools": "Инструменты",
+ "menu.composer": "Компоновщик…",
+ "menu.breakpoints": "Точки останова…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Скрипты…",
+ "menu.mapRemote": "Удалённое сопоставление…",
+ "menu.options": "Параметры",
+ "menu.theme": "Тема",
+ "menu.themeLight": "Светлая",
+ "menu.themeDark": "Тёмная",
+ "menu.themeAutomatic": "Автоматически",
+ "menu.language": "Язык",
+ "menu.languageAutomatic": "Автоматически",
+ "menu.columns": "Столбцы",
+ "menu.col.id": "Ид",
+ "menu.col.method": "Метод",
+ "menu.col.status": "Статус",
+ "menu.col.host": "Хост",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Протокол",
+ "menu.col.duration": "Длительность",
+ "menu.col.ttfb": "Ожидание (TTFB)",
+ "menu.col.size": "Размер",
+ "menu.col.process": "Процесс",
+ "menu.col.started": "Начало",
+ "menu.col.scheme": "Схема",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Сбросить столбцы",
+ "menu.sessionRetention": "Хранение сеансов…",
+ "menu.excludedHosts": "Исключённые хосты…",
+ "menu.excludedHostsTip": "Списки пропуска расшифровки HTTPS и правила обхода ОС",
+ "menu.ignoreCerts": "Игнорировать небезопасные сертификаты сервера",
+ "menu.addVia": "Добавлять заголовок Via",
+ "menu.addViaTip": "Добавлять Via: … titanium-web-proxy к перехваченному трафику (RFC 9110). Выключение отключает добавление и обнаружение циклов Via.",
+ "menu.logging": "Журналирование…",
+ "menu.resetSettings": "Сбросить настройки Inspector…",
+ "menu.help": "Справка",
+ "menu.checkUpdates": "Проверить обновления…",
+ "menu.checkUpdatesStartup": "Проверять обновления при запуске",
+ "menu.updateChannel": "Канал обновлений",
+ "menu.channelStable": "Стабильный",
+ "menu.channelBeta": "Бета",
+ "menu.about": "О программе Titanium Inspector…",
+ "toolbar.searchWatermark": "Поиск URL, хоста, процесса… (или method:GET status:4xx)",
+ "toolbar.searchTip": "Простой текст ищет URL, хост, имя процесса, точный идентификатор процесса, метод и статус. Префиксы ограничивают поиск одним полем: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: также ищет тела, сброшенные на диск. Поставьте - перед полем или словом, чтобы исключить его (например, -host:cursor.sh или -cursor). «Фильтры» правят скрытые хосты и процессы и дают больше места.",
+ "toolbar.filters": "Фильтры",
+ "toolbar.filtersTip": "Изменить поиск и скрытые хосты или процессы в большем окне",
+ "toolbar.hideConnect": "Скрыть CONNECT",
+ "toolbar.hideConnectTip": "Скрывать непрозрачные туннели HTTPS, когда расшифровка HTTPS выключена",
+ "toolbar.hideImages": "Скрыть изображения",
+ "toolbar.errorsOnly": "Только ошибки",
+ "toolbar.clearFilters": "Сбросить фильтры",
+ "toolbar.hidden": "Скрыто",
+ "ctx.replay": "Повторить",
+ "ctx.loadComposer": "Загрузить в компоновщик",
+ "ctx.saveRequest": "Сохранить тело запроса…",
+ "ctx.saveResponse": "Сохранить тело ответа…",
+ "ctx.copyUrl": "Копировать URL",
+ "ctx.copyCurl": "Копировать как curl",
+ "ctx.copyFetch": "Копировать как fetch",
+ "ctx.diff": "Сравнить выбранные…",
+ "ctx.filterHost": "Фильтр по хосту",
+ "ctx.hideHost": "Скрыть хост",
+ "ctx.filterProcess": "Фильтр по процессу",
+ "ctx.hideProcess": "Скрыть процесс",
+ "ctx.excludeHost": "Исключить хост…",
+ "ctx.excludeHostTip": "Прекратить расшифровку HTTPS этого хоста. Строки остаются в списке; чтобы убрать их из вида, используйте «Скрыть хост».",
+ "grid.duration": "Длительность (мс)",
+ "grid.wait": "Ожидание (мс)",
+ "pane.inspect": "Просмотр",
+ "pane.composer": "Компоновщик",
+ "pane.breakpoints": "Точки останова",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Скрипты",
+ "pane.mapRemote": "Удалённое сопоставление",
+ "pane.closeTip": "Закрыть панель",
+ "inspect.empty": "Выберите сеанс в таблице, чтобы просмотреть заголовки и тела запроса и ответа.",
+ "common.ok": "ОК",
+ "common.cancel": "Отмена",
+ "common.save": "Сохранить",
+ "common.apply": "Применить",
+ "common.remove": "Удалить",
+ "common.browse": "Обзор…",
+ "common.openFolder": "Открыть папку",
+ "common.forget": "Забыть",
+ "common.close": "Закрыть",
+ "loopback.window": "Разрешить приложениям Магазина использовать этот прокси",
+ "loopback.checkAll": "Отметить все",
+ "loopback.uncheckAll": "Снять все отметки",
+ "loopback.filterWatermark": "Фильтр по имени приложения…",
+ "loopback.clearAll": "Очистить все",
+ "trust.macWindow": "Подтвердите доверие в Keychain Access",
+ "trust.openKeychain": "Открыть Keychain Access",
+ "trust.notNow": "Не сейчас",
+ "trust.recoveryTitle": "Доверие корневому CA",
+ "trust.macWaitPlaceholder": "Ожидание доверия SSL…",
+ "window.about": "О программе Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Авторские права © Jehonathan Thomas",
+ "about.license": "Лицензия: PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Подробности лицензии",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Фильтры",
+ "filters.search": "Поиск",
+ "filters.searchHelp": "Тот же поиск, что на панели инструментов, но с большим местом. Скрытые хосты и процессы перечислены ниже, а не в этом поле.",
+ "filters.searchWatermark": "URL, хост, процесс, method:GET, status:4xx…",
+ "filters.hideHeading": "Скрыть из списка",
+ "filters.hideHelp": "Строки остаются захваченными. Это лишь скрывает их в списке. Чтобы прекратить расшифровку HTTPS, используйте «Исключить хост…».",
+ "filters.hosts": "Хосты",
+ "filters.addHostWatermark": "Добавить хост для скрытия",
+ "filters.addHost": "Добавить хост",
+ "filters.processes": "Процессы",
+ "filters.addProcessWatermark": "Добавить процесс для скрытия",
+ "filters.addProcess": "Добавить процесс",
+ "filters.processSpace": "Имя с пробелом сокращается до первого слова, из-за чего могут скрыться и другие имена, содержащие это слово.",
+ "window.confirm": "Подтверждение",
+ "window.excludeHost": "Исключить хост",
+ "exclude.action": "Исключить",
+ "exclude.help": "Этот хост по-прежнему будет в списке сеансов. Inspector не будет пытаться читать его HTTPS.",
+ "window.logging": "Журналирование",
+ "logging.help": "Записывать диагностические сообщения для устранения неполадок. Изменения применяются сразу.",
+ "logging.enable": "Включить журналирование",
+ "logging.writeFile": "Записывать журнал в файл",
+ "logging.detail": "Уровень подробности",
+ "logging.detailHelp": "Error = только проблемы. Warning / Information = больше контекста. Debug = очень подробно.",
+ "logging.path": "Путь к файлу журнала",
+ "window.excludedHosts": "Исключённые хосты",
+ "excluded.reset": "Сбросить по умолчанию",
+ "excluded.bypass": "Обход прокси (ОС)",
+ "excluded.bypassHelp": "Трафик не доходит до Inspector, когда включён системный прокси. Изначально внесены хосты Microsoft identity / SSO / RDP. Их удаление может нарушить вход по RDP, пока системный прокси включён.",
+ "excluded.notDecrypted": "Хосты без расшифровки",
+ "excluded.notDecryptedHelp": "CONNECT остаётся видимым; TLS остаётся непрозрачным, когда расшифровка HTTPS включена. Изначально внесены хосты с закреплением сертификата (Dropbox, Webex).",
+ "excluded.learnHeading": "Автоматически не расшифровывать при сбое расшифровки",
+ "excluded.learn": "Запоминать хосты, у которых исходный TLS не проходит при расшифровке",
+ "excluded.learnHelp": "Если исходный TLS многократно не проходит при расшифровке или исходный сервер возвращает 403/429, Inspector прекращает расшифровку этого хоста для последующих соединений в этом сеансе. Список ограничен и забывается при перезапуске, пока вы не перенесёте запись.",
+ "excluded.learnPaused": "Обучение приостановлено — существующие записи сохраняются, пока их не забудут.",
+ "excluded.noneLearned": "Пока нет запомненных хостов.",
+ "excluded.promote": "Перенести в хосты без расшифровки",
+ "excluded.clearLearned": "Очистить все запомненные",
+ "window.retention": "Хранение сеансов",
+ "retention.max": "Максимум хранимых сеансов",
+ "retention.maxHelp": "Сколько запросов остаётся в списке сеансов. При превышении самые старые строки уходят из списка, но остаются на диске, пока их не удалит «Очистить сеансы» или ограничение места на диске.",
+ "retention.cache": "Папка кэша",
+ "retention.openCache": "Открыть папку кэша",
+ "retention.clearCache": "Очистить сохранённый кэш сеансов…",
+ "retention.advanced": "Дополнительно",
+ "retention.disk": "Место на диске для сохранённых сеансов (MB)",
+ "retention.diskHelp": "Максимальное место для всех сохранённых сеансов на диске (все запуски Inspector). Каждый запуск использует подпапку с отметкой времени; при превышении сначала удаляются самые старые файлы HAR. Пустые папки запусков удаляются.",
+ "loopback.intro": "Приложения Windows Store и UWP по умолчанию не могут обращаться к localhost. Отметьте приложения, которые должны использовать Inspector, затем нажмите «Применить». После «Применить» перезапустите каждое приложение (полностью завершите его). Inspector должен работать, и системный прокси должен быть включён. «Очистить все» удаляет все разрешения.",
+ "loopback.closedUnchanged": "Приложения Магазина не изменены.",
+ "loopback.proxyStopped": "Запустите прокси и включите системный прокси. Приложения Магазина нельзя захватывать, пока не включено и то и другое.",
+ "loopback.systemProxyOff": "Включите системный прокси (меню «Захват»). Список разрешений лишь позволяет приложениям Магазина обращаться к localhost; они по-прежнему следуют системному прокси.",
+ "loopback.refreshing": "Обновление системного прокси, чтобы работающие приложения переподключились…",
+ "loopback.unchangedCount": "Список разрешений уже совпадает: {0}.",
+ "loopback.allowed": "Разрешено: {0}.",
+ "loopback.allowedRefreshed": " Системный прокси обновлён, чтобы работающие приложения переподключились. Если трафик по-прежнему не появляется, полностью завершите приложение и откройте его снова.",
+ "loopback.allowedProxyStopped": " Запустите прокси и включите системный прокси, затем полностью завершите приложение и откройте его снова.",
+ "loopback.allowedSystemProxyOff": " Включите системный прокси, затем полностью завершите приложение и откройте его снова.",
+ "loopback.allowedReady": " Полностью завершите приложение и откройте его снова, чтобы захватывать трафик.",
+ "loopback.clearedRefreshed": "Все исключения замыкания на себя сняты. Системный прокси обновлён, чтобы работающие приложения переподключились.",
+ "loopback.clearedReady": "Все исключения замыкания на себя сняты. Полностью завершите и снова откройте любое приложение, которое использовало Inspector.",
+ "loopback.cleared": "Все исключения замыкания на себя сняты.",
+ "trust.macWaitBody": "Окно «Свойства» в Keychain Access может уже показывать «Всегда доверять», даже если политики SSL не сохранены (Chrome и Inspector по-прежнему считают CA недоверенным).\n\nПринудительно сохраните:\n1. Keychain Access → login → Сертификаты → дважды щёлкните Titanium Root Certificate Authority\n2. Раскройте раздел «Доверие»\n3. Для пункта «При использовании этого сертификата» выберите «Использовать системные настройки по умолчанию», затем снова смените его на «Всегда доверять»\n4. Закройте «Свойства» — должен появиться запрос пароля; именно он записывает настоящие политики доверия SSL\n\nЭто окно закроется автоматически, когда эти политики будут обнаружены. Если вы уже сохранили, нажмите «Я сохранил «Всегда доверять»».",
+ "trust.macWaitStatus": "Ожидание сертификата в Keychain…",
+ "trust.macWaitInKeychain": "Ожидание сохранённых политик SSL (переключите «Всегда доверять», закройте «Свойства», введите пароль)…",
+ "trust.macNotSaved": "Показа «Всегда доверять» недостаточно — переключите «Использовать системные настройки по умолчанию» → «Всегда доверять», закройте «Свойства», введите пароль, затем снова выполните «Установить корневой CA» / «Расшифровывать HTTPS»",
+ "trust.macConfirmSaved": "Я сохранил «Всегда доверять»",
+ "trust.exportCa": "Экспортировать CA",
+ "trust.install.mac": "Для расшифровки HTTPS нужно доверять корневому CA Titanium Inspector в Keychain Access (связка login). Установить сейчас?",
+ "trust.install.linux": "Для расшифровки HTTPS нужно доверять корневому CA Titanium Inspector в хранилище сертификатов пользователя (NSS). Установить сейчас?",
+ "trust.install.windows": "Для расшифровки HTTPS нужно доверять корневому CA Titanium Inspector в хранилище доверенных корневых центров текущего пользователя. Установить сейчас?\n\nWindows может показать диалог безопасности «Да/Нет» для доверенного корня (это не UAC) — выберите «Да», чтобы доверять CA.",
+ "trust.install.other": "Для расшифровки HTTPS нужно доверять корневому CA Titanium Inspector на этом компьютере. Установить сейчас?",
+ "trust.remove.mac": "Удалить корневой CA Titanium Inspector из Keychain? Расшифровка HTTPS будет выключена.",
+ "trust.remove.linux": "Удалить корневой CA Titanium Inspector из хранилища сертификатов пользователя (NSS)? Расшифровка HTTPS будет выключена.",
+ "trust.remove.windows": "Удалить корневой CA Titanium Inspector из хранилища доверенных корневых центров текущего пользователя? Расшифровка HTTPS будет выключена.",
+ "trust.remove.other": "Удалить корневой CA Titanium Inspector? Расшифровка HTTPS будет выключена.",
+ "trust.elevate.mac": "Доверие на уровне пользователя не удалось или его недостаточно. Продолжить и показать запрос пароля администратора macOS? «Отмена» оставляет настройки сертификатов без изменений.",
+ "trust.elevate.linux": "Доверие на уровне пользователя не удалось или его недостаточно. Продолжить и показать запрос администратора polkit? «Отмена» оставляет настройки сертификатов без изменений.",
+ "trust.elevate.windows": "Доверие на уровне пользователя не удалось или его недостаточно. Продолжить и показать UAC? «Отмена» оставляет настройки сертификатов без изменений.",
+ "trust.elevate.other": "Доверие на уровне пользователя не удалось или его недостаточно. Продолжить с запросом администратора? «Отмена» оставляет настройки сертификатов без изменений.",
+ "trust.recovery.mac": "\n\nПродолжить и показать запрос пароля администратора macOS? «Не сейчас» оставляет настройки сертификатов без изменений.",
+ "trust.recovery.linux": "\n\nПродолжить и показать запрос администратора polkit? «Не сейчас» оставляет настройки сертификатов без изменений.",
+ "trust.recovery.windows": "\n\nПродолжить и показать UAC? «Не сейчас» оставляет настройки сертификатов без изменений.",
+ "trust.recovery.other": "\n\nПродолжить с запросом администратора? «Не сейчас» оставляет настройки сертификатов без изменений.",
+ "trust.hosts.mac": "Для обхода ОС нужно меню «Захват» → «Системный прокси» (используются сетевые настройки прокси macOS). Правила только для туннеля действуют для каждого клиента, который обращается к Inspector. Заводские значения по умолчанию уже внесены в списки ниже — правьте их свободно или сбросьте.",
+ "trust.hosts.linux": "Для обхода ОС нужно меню «Захват» → «Системный прокси» (используются настройки прокси рабочего стола и окружения). Правила только для туннеля действуют для каждого клиента, который обращается к Inspector. Заводские значения по умолчанию уже внесены в списки ниже — правьте их свободно или сбросьте.",
+ "trust.hosts.windows": "Для обхода ОС нужно меню «Захват» → «Системный прокси» (используется WinINET). Правила только для туннеля действуют для каждого клиента, который обращается к Inspector. Заводские значения по умолчанию уже внесены в списки ниже — правьте их свободно или сбросьте.",
+ "trust.hosts.other": "Для обхода ОС нужно меню «Захват» → «Системный прокси». Правила только для туннеля действуют для каждого клиента, который обращается к Inspector. Заводские значения по умолчанию уже внесены в списки ниже — правьте их свободно или сбросьте.",
+ "trust.localhost.mac": "Когда системный прокси включён, направлять localhost через Inspector. Выключение добавляет localhost в список обхода прокси macOS.",
+ "trust.localhost.linux": "Когда системный прокси включён, направлять localhost через Inspector. Выключение добавляет localhost в NO_PROXY.",
+ "trust.localhost.windows": "Когда системный прокси включён, направлять localhost через Inspector (WinINET <-loopback>). Выключение позволяет замыканию на себя обходить прокси.",
+ "trust.localhost.other": "Когда системный прокси включён, направлять localhost через Inspector.",
+ "trust.status.missing": "Корневой CA ещё не доверен — повторите попытку или экспортируйте CA",
+ "trust.status.cancelled": "Установка корневого CA отменена",
+ "trust.status.certutil": "Средства работы с сертификатами браузера отсутствуют — установите их, повторите попытку или экспортируйте CA",
+ "trust.status.homebrew": "Для установки средств работы с сертификатами нужен Homebrew — экспортируйте CA, чтобы доверять вручную",
+ "trust.status.macConfirm": "Установите «Всегда доверять» для корневого CA Titanium Inspector в Keychain Access",
+ "trust.status.keychain": "Не удалось установить доверие в Keychain — повторите попытку или экспортируйте CA и доверьте ему вручную",
+ "trust.fail.keychainTitle": "Подтвердите доверие в Keychain",
+ "trust.fail.continueKeychain": "Продолжить в Keychain Access",
+ "trust.fail.toolsTitle": "Нужны средства работы с сертификатами",
+ "trust.fail.toolsLinux": "Inspector нужен certutil (средства NSS), чтобы завершить доверие корневому CA.",
+ "trust.fail.toolsOther": "Inspector нужны средства работы с сертификатами браузера, чтобы завершить доверие корневому CA.",
+ "trust.fail.tryAgain": "Повторить",
+ "trust.fail.homebrewBody": "Для установки средств работы с сертификатами нужен Homebrew. Экспортируйте CA, чтобы доверять ему вручную.",
+ "trust.fail.title": "Пока нельзя расшифровать HTTPS",
+ "trust.fail.body": "Корневой CA Titanium Inspector на этом компьютере ещё не является доверенным.",
+ "toolbar.throttle": "Ограничение",
+ "toolbar.throttleTip": "Добавляет задержку и ограничение пропускной способности во время захвата (запись тела / кадры WebSocket). По умолчанию выключено.",
+ "toolbar.bindWatermark": "*, localhost или IP",
+ "toolbar.bindTip": "127.0.0.1 или localhost = только этот компьютер. 0.0.0.0 или * = все сетевые адаптеры (включая localhost).",
+ "toolbar.portWatermark": "* или порт",
+ "toolbar.portTip": "* или пусто = порт, выбранный системой (настоящий порт появляется после запуска). Иначе 1–65535.",
+ "toolbar.listeningTip": "Прокси слушает",
+ "toolbar.trustHealthTip": "Состояние доверия корневого CA для расшифровки HTTPS. Установите CA или доверьте ему, если указано «не доверен».",
+ "chip.process": "Процесс",
+ "inspect.request": "Запрос",
+ "inspect.requestTip": "Заголовки и тело запроса",
+ "inspect.copyHeaders": "Копировать заголовки",
+ "inspect.resizeTip": "Перетащите, чтобы изменить размер. Дважды щёлкните, чтобы сбросить.",
+ "inspect.pretty": "Формат",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Показать тело как шестнадцатеричный дамп",
+ "inspect.saveRequest": "Сохранить запрос…",
+ "inspect.response": "Ответ",
+ "inspect.responseTip": "Заголовки и тело ответа",
+ "inspect.saveResponse": "Сохранить ответ…",
+ "inspect.diff": "Различия",
+ "inspect.frames": "Кадры WS",
+ "inspect.framesHelp": "Живые кадры WebSocket этого сеанса (направление, opcode, предпросмотр данных).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events, разобранные из тела ответа.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Показать заголовки",
+ "inspect.hideHeaders": "Скрыть заголовки",
+ "inspect.headers": "Заголовки ({0})",
+ "inspect.prettyTip": "Отступы для JSON, XML и HTML",
+ "inspect.prettyHexTip": "Недоступно в шестнадцатеричном виде",
+ "inspect.emptyBody": "(пусто)",
+ "inspect.noRequestBody": "Нет тела запроса",
+ "inspect.waiting": "Ожидание ответа…",
+ "composer.help": "Создайте и отправьте запрос через прокси. «Загрузить из выбранного» копирует текущий сеанс.",
+ "composer.method": "Метод",
+ "composer.url": "URL",
+ "composer.headers": "Заголовки (Имя: значение в каждой строке)",
+ "composer.body": "Тело",
+ "composer.loadSelected": "Загрузить из выбранного",
+ "composer.loadBody": "Загрузить тело из файла…",
+ "composer.send": "Отправить",
+ "bp.help": "Приостанавливает подходящие запросы клиента, чтобы изменить тело, продолжить или прервать. Одна пауза за раз; автопродолжение через 120s. Снятие флажка «Включено» продолжает приостановленный запрос.",
+ "bp.enabled": "Включено",
+ "bp.breakOnResponse": "Останов на ответе",
+ "bp.match": "Совпадение",
+ "bp.urlWatermark": "Фильтр URL (* = все, напр. *api*/users*)",
+ "bp.graphqlWatermark": "Только эта операция GraphQL (необязательно)",
+ "bp.graphqlTip": "Дополнительный фильтр тела запроса клиента. Совпадает с JSON operationName или именованным запросом. Оставьте пустым, чтобы совпадать с каждой операцией URL.",
+ "bp.fromSelected": "Из выбранного сеанса",
+ "bp.fromSelectedTip": "Копирует имя операции GraphQL из запроса выбранного сеанса.",
+ "bp.graphqlHelp": "Оставьте поле GraphQL пустым, чтобы совпадать с каждой операцией. Заполните его (напр. GetUser), чтобы приостановить только этот запрос клиента для URL выше. Останов на ответе по-прежнему использует фильтр URL.",
+ "bp.editWatermark": "Изменить тело (Применить правку тела, затем Продолжить)",
+ "bp.applyEdit": "Применить правку тела",
+ "bp.continue": "Продолжить",
+ "bp.abort": "Прервать",
+ "ar.help": "Возвращает поддельный ответ до настоящего сервера. Совпадение определяет, к каким запросам клиента применяется правило; поля ниже — то, что вы отправляете обратно.",
+ "ar.enabled": "Включено (до точек останова)",
+ "ar.urlWatermark": "Совпадение URL (подстановки *)",
+ "ar.graphqlHelp": "Один и тот же URL: разные операции GraphQL могут использовать разные правила. Оставьте пустым, чтобы совпадать с каждой операцией.",
+ "ar.respondWith": "Ответить",
+ "ar.statusTip": "Статус HTTP. Пусто = 200. Используйте 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Файл Map Local (необязательно)",
+ "ar.bodyWatermark": "Тело ответа (используется, когда Map Local пуст)",
+ "ar.add": "Добавить правило",
+ "ar.update": "Обновить правило",
+ "ar.delete": "Удалить правило",
+ "script.intro": "Одна команда в строке, для каждого захваченного сеанса. Это не JavaScript и не C# — вводите только команды ниже.",
+ "script.what": "Что можно ввести",
+ "script.setHeaderHelp": "Добавляет или заменяет заголовок. Трафик по-прежнему идёт на сервер.",
+ "script.setStatusHelp": "На запросе: ответить сразу и пропустить сервер. На ответе: изменить статус, который видит клиент.",
+ "script.abortHelp": "Блокирует кодом 403 Forbidden. Добавьте строку set-status, чтобы выбрать другой код.",
+ "script.comment": "Начните строку с # или // для комментария. Команды можно сочетать; каждую поместите на отдельную строку.",
+ "script.onRequest": "На запросе",
+ "script.onResponse": "На ответе",
+ "script.requestSkips": "abort или set-status здесь пропускает AutoResponder, точки останова и источник.",
+ "map.help": "Переписывает подходящие запросы клиента на другой источник до настоящего сервера. Используйте один * в совпадении и цели, чтобы сохранить суффикс пути или запроса. Выполняется после AutoResponder / Map Local.",
+ "map.graphqlHelp": "Оставьте пустым, чтобы переписать каждую операцию URL. Заполните, чтобы переписать только эту операцию GraphQL.",
+ "map.rewriteTo": "Переписать на",
+ "map.targetWatermark": "Целевой URL (абсолютный, необязательный *)",
+ "loopback.allow": "Разрешить",
+ "loopback.appName": "Имя приложения",
+ "loopback.packageId": "ID пакета",
+ "status.ready": "Готово",
+ "status.searchingBodies": "Поиск в телах…",
+ "status.proxyStopped": "Прокси остановлен",
+ "status.proxyRunning": "Прокси работает на {0}",
+ "trust.health.trusted": "CA доверен",
+ "trust.health.untrusted": "CA не доверен"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.sv.json b/src/Titanium.Inspector/Localization/strings.sv.json
new file mode 100644
index 000000000..fbac6cf7e
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.sv.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Arkiv",
+ "menu.exportAllHar": "Exportera all HAR…",
+ "menu.exportSelectedHar": "Exportera markerad HAR…",
+ "menu.importHar": "Importera HAR…",
+ "menu.exportAllArchive": "Exportera hela arkivet…",
+ "menu.exportSelectedArchive": "Exportera markerat arkiv…",
+ "menu.importArchive": "Importera arkiv…",
+ "menu.exit": "Avsluta",
+ "menu.capture": "Fånga",
+ "menu.startProxy": "Starta proxy",
+ "menu.stopProxy": "Stoppa proxy",
+ "menu.capturing": "Fångar",
+ "menu.clearSessions": "Rensa sessioner",
+ "menu.removeSelected": "Ta bort markerade",
+ "menu.autoStartCapture": "Starta infångning automatiskt",
+ "menu.autoSystemProxy": "Aktivera systemproxy automatiskt vid start",
+ "menu.decryptHttps": "Dekryptera HTTPS",
+ "menu.systemProxy": "Systemproxy",
+ "menu.captureLocal": "Fånga lokal trafik",
+ "menu.allowStoreApps": "Tillåt Store-appar…",
+ "menu.installCa": "Installera rot-CA (aktuell användare)",
+ "menu.removeCa": "Ta bort rot-CA (aktuell användare)",
+ "menu.rotateCa": "Rensa och installera om rot-CA…",
+ "menu.removeOldCas": "Ta bort gamla rot-CA…",
+ "menu.exportCa": "Exportera rot-CA…",
+ "menu.trustFirefox": "Lita på CA i Firefox…",
+ "menu.deviceCa": "Konfigurera CA för extern enhet",
+ "menu.tools": "Verktyg",
+ "menu.composer": "Kompositör…",
+ "menu.breakpoints": "Brytpunkter…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Skript…",
+ "menu.mapRemote": "Fjärravbildning…",
+ "menu.options": "Alternativ",
+ "menu.theme": "Tema",
+ "menu.themeLight": "Ljust",
+ "menu.themeDark": "Mörkt",
+ "menu.themeAutomatic": "Automatiskt",
+ "menu.language": "Språk",
+ "menu.languageAutomatic": "Automatiskt",
+ "menu.columns": "Kolumner",
+ "menu.col.id": "ID",
+ "menu.col.method": "Metod",
+ "menu.col.status": "Status",
+ "menu.col.host": "Värd",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protokoll",
+ "menu.col.duration": "Varaktighet",
+ "menu.col.ttfb": "Väntan (TTFB)",
+ "menu.col.size": "Storlek",
+ "menu.col.process": "Process",
+ "menu.col.started": "Startad",
+ "menu.col.scheme": "Schema",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Återställ kolumner",
+ "menu.sessionRetention": "Sessionsbevarande…",
+ "menu.excludedHosts": "Undantagna värdar…",
+ "menu.excludedHostsTip": "Hoppa-över-listor för HTTPS-dekryptering och regler för att förbigå systemet",
+ "menu.ignoreCerts": "Ignorera osäkra servercertifikat",
+ "menu.addVia": "Lägg till Via-rubrik",
+ "menu.addViaTip": "Lägg till Via: … titanium-web-proxy på fångad trafik (RFC 9110). Av stänger av infogning och identifiering av Via-loopar.",
+ "menu.logging": "Loggning…",
+ "menu.resetSettings": "Återställ Inspector-inställningar…",
+ "menu.help": "Hjälp",
+ "menu.checkUpdates": "Sök efter uppdateringar…",
+ "menu.checkUpdatesStartup": "Sök efter uppdateringar vid start",
+ "menu.updateChannel": "Uppdateringskanal",
+ "menu.channelStable": "Stabil",
+ "menu.channelBeta": "Beta",
+ "menu.about": "Om Titanium Inspector…",
+ "toolbar.searchWatermark": "Sök URL, värd, process… (eller method:GET status:4xx)",
+ "toolbar.searchTip": "Ren text söker i URL, värd, processnamn, exakt process-ID, metod och status. Prefix begränsar till ett fält: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: söker också i innehåll som spillts till disk. Sätt - före ett fält eller ett ord för att utesluta det (t.ex. -host:cursor.sh eller -cursor). Filter redigerar dolda värdar och processer med mer utrymme.",
+ "toolbar.filters": "Filter",
+ "toolbar.filtersTip": "Redigera sökningen och dolda värdar eller processer i ett större fönster",
+ "toolbar.hideConnect": "Dölj CONNECT",
+ "toolbar.hideConnectTip": "Dölj ogenomskinliga HTTPS-tunnlar när Dekryptera HTTPS är av",
+ "toolbar.hideImages": "Dölj bilder",
+ "toolbar.errorsOnly": "Endast fel",
+ "toolbar.clearFilters": "Rensa filter",
+ "toolbar.hidden": "Dolda",
+ "ctx.replay": "Skicka igen",
+ "ctx.loadComposer": "Läs in i kompositören",
+ "ctx.saveRequest": "Spara förfrågans innehåll…",
+ "ctx.saveResponse": "Spara svarets innehåll…",
+ "ctx.copyUrl": "Kopiera URL",
+ "ctx.copyCurl": "Kopiera som curl",
+ "ctx.copyFetch": "Kopiera som fetch",
+ "ctx.diff": "Jämför markerade…",
+ "ctx.filterHost": "Filtrera efter värd",
+ "ctx.hideHost": "Dölj värd",
+ "ctx.filterProcess": "Filtrera efter process",
+ "ctx.hideProcess": "Dölj process",
+ "ctx.excludeHost": "Undanta värd…",
+ "ctx.excludeHostTip": "Sluta dekryptera den här värdens HTTPS. Raderna stannar i listan; använd Dölj värd för att ta bort dem från vyn.",
+ "grid.duration": "Varaktighet (ms)",
+ "grid.wait": "Väntan (ms)",
+ "pane.inspect": "Granska",
+ "pane.composer": "Kompositör",
+ "pane.breakpoints": "Brytpunkter",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Skript",
+ "pane.mapRemote": "Fjärravbildning",
+ "pane.closeTip": "Stäng panel",
+ "inspect.empty": "Välj en session i rutnätet för att granska förfrågans och svarets rubriker och innehåll.",
+ "common.ok": "OK",
+ "common.cancel": "Avbryt",
+ "common.save": "Spara",
+ "common.apply": "Tillämpa",
+ "common.remove": "Ta bort",
+ "common.browse": "Bläddra…",
+ "common.openFolder": "Öppna mapp",
+ "common.forget": "Glöm",
+ "common.close": "Stäng",
+ "loopback.window": "Tillåt Store-appar att använda den här proxyn",
+ "loopback.checkAll": "Markera alla",
+ "loopback.uncheckAll": "Avmarkera alla",
+ "loopback.filterWatermark": "Filtrera efter appnamn…",
+ "loopback.clearAll": "Rensa alla",
+ "trust.macWindow": "Bekräfta förtroende i Keychain Access",
+ "trust.openKeychain": "Öppna Keychain Access",
+ "trust.notNow": "Inte nu",
+ "trust.recoveryTitle": "Förtroende för rot-CA",
+ "trust.macWaitPlaceholder": "Väntar på SSL-förtroende…",
+ "window.about": "Om Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Upphovsrätt © Jehonathan Thomas",
+ "about.license": "Licensierad under PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Licensinformation",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filter",
+ "filters.search": "Sök",
+ "filters.searchHelp": "Samma sökning som i verktygsfältet, med mer utrymme. Dolda värdar och processer listas nedan, inte i den här rutan.",
+ "filters.searchWatermark": "URL, värd, process, method:GET, status:4xx…",
+ "filters.hideHeading": "Dölj från listan",
+ "filters.hideHelp": "Raderna förblir infångade. Detta döljer dem bara i listan. För att sluta dekryptera HTTPS, använd Undanta värd…",
+ "filters.hosts": "Värdar",
+ "filters.addHostWatermark": "Lägg till en värd att dölja",
+ "filters.addHost": "Lägg till värd",
+ "filters.processes": "Processer",
+ "filters.addProcessWatermark": "Lägg till en process att dölja",
+ "filters.addProcess": "Lägg till process",
+ "filters.processSpace": "Ett namn med ett mellanslag kortas av vid första ordet, vilket också kan dölja andra namn som innehåller det ordet.",
+ "window.confirm": "Bekräfta",
+ "window.excludeHost": "Undanta värd",
+ "exclude.action": "Undanta",
+ "exclude.help": "Den här värden visas fortfarande i sessionslistan. Inspector försöker inte läsa dess HTTPS.",
+ "window.logging": "Loggning",
+ "logging.help": "Skriv diagnostikmeddelanden för felsökning. Ändringar gäller omedelbart.",
+ "logging.enable": "Aktivera loggning",
+ "logging.writeFile": "Skriv logg till en fil",
+ "logging.detail": "Hur mycket detaljer",
+ "logging.detailHelp": "Error = bara problem. Warning / Information = mer sammanhang. Debug = mycket utförlig.",
+ "logging.path": "Sökväg till loggfil",
+ "window.excludedHosts": "Undantagna värdar",
+ "excluded.reset": "Återställ till standard",
+ "excluded.bypass": "Förbigå proxy (system)",
+ "excluded.bypassHelp": "Trafik når aldrig Inspector när systemproxy är på. Förifylld med värdar för Microsoft-identitet / SSO / RDP. Om du tar bort dem kan RDP-inloggning sluta fungera medan systemproxy är aktiverad.",
+ "excluded.notDecrypted": "Värdar som inte dekrypteras",
+ "excluded.notDecryptedHelp": "CONNECT förblir synlig; TLS förblir ogenomskinlig när Dekryptera HTTPS är på. Förifylld med värdar som använder certifikatpinning (Dropbox, Webex).",
+ "excluded.learnHeading": "Dekryptera automatiskt inte vid dekrypteringsfel",
+ "excluded.learn": "Lär in värdar vars ursprungs-TLS misslyckas under dekryptering",
+ "excluded.learnHelp": "När ursprungs-TLS misslyckas upprepade gånger under dekryptering, eller ursprungsservern returnerar 403/429, slutar Inspector dekryptera den värden för senare anslutningar i den här sessionen. Listan har ett tak och glöms vid omstart om du inte flyttar upp den.",
+ "excluded.learnPaused": "Inlärning pausad — befintliga poster behålls tills de glöms.",
+ "excluded.noneLearned": "Inga värdar har lärts in ännu.",
+ "excluded.promote": "Flytta till värdar som inte dekrypteras",
+ "excluded.clearLearned": "Rensa alla inlärda",
+ "window.retention": "Sessionsbevarande",
+ "retention.max": "Maximalt antal sessioner att behålla",
+ "retention.maxHelp": "Hur många förfrågningar som stannar i sessionslistan. När gränsen överskrids lämnar de äldsta raderna listan men finns kvar på disk tills Rensa sessioner eller diskutrymmesgränsen tar bort dem.",
+ "retention.cache": "Cachemapp",
+ "retention.openCache": "Öppna cachemapp",
+ "retention.clearCache": "Rensa sparad sessionscache…",
+ "retention.advanced": "Avancerat",
+ "retention.disk": "Diskutrymme för sparade sessioner (MB)",
+ "retention.diskHelp": "Maximalt utrymme för alla sparade sessioner på disk (alla körningar av Inspector). Varje körning använder en undermapp med tidsstämpel; de äldsta HAR-filerna tas bort först när gränsen överskrids. Tomma körningsmappar tas bort.",
+ "loopback.intro": "Windows Store- / UWP-appar blockeras från localhost som standard. Markera appar som ska använda Inspector och välj sedan Tillämpa. Starta om varje app (avsluta den helt) efter Tillämpa. Inspector måste köra med systemproxy på. Rensa alla tar bort varje tillåtelsepost.",
+ "loopback.closedUnchanged": "Store-appar oförändrade.",
+ "loopback.proxyStopped": "Starta proxyn och slå på systemproxy. Store-appar kan inte fångas förrän båda är på.",
+ "loopback.systemProxyOff": "Slå på systemproxy (menyn Fånga). Tillåtelselistan låter bara Store-appar nå localhost; de följer fortfarande systemproxyn.",
+ "loopback.refreshing": "Uppdaterar systemproxy så att appar som körs ansluter igen…",
+ "loopback.unchangedCount": "Tillåtelselistan matchar redan: {0}.",
+ "loopback.allowed": "Tillåtet: {0}.",
+ "loopback.allowedRefreshed": " Systemproxyn uppdaterades så att appar som körs ansluter igen. Om trafiken fortfarande inte visas, avsluta appen helt och öppna den igen.",
+ "loopback.allowedProxyStopped": " Starta proxyn och slå på systemproxy, avsluta sedan appen helt och öppna den igen.",
+ "loopback.allowedSystemProxyOff": " Slå på systemproxy, avsluta sedan appen helt och öppna den igen.",
+ "loopback.allowedReady": " Avsluta appen helt och öppna den igen för att fånga trafik.",
+ "loopback.clearedRefreshed": "Alla loopback-undantag har rensats. Systemproxyn uppdaterades så att appar som körs ansluter igen.",
+ "loopback.clearedReady": "Alla loopback-undantag har rensats. Avsluta helt och öppna igen varje app som använde Inspector.",
+ "loopback.cleared": "Alla loopback-undantag har rensats.",
+ "trust.macWaitBody": "Visa info i Keychain kan redan visa Lita alltid på även när SSL-principer inte sparades (Chrome och Inspector behandlar fortfarande CA som ej betrodd).\n\nTvinga en sparning:\n1. Keychain Access → login → Certifikat → dubbelklicka på Titanium Root Certificate Authority\n2. Expandera Förtroende\n3. Ställ in När det här certifikatet används på Använd systemstandard och ändra sedan tillbaka till Lita alltid på\n4. Stäng Visa info — du måste få en lösenordsuppmaning; den skriver de verkliga SSL-förtroendeprinciperna\n\nDet här fönstret stängs automatiskt när de principerna upptäcks. Om du redan har sparat, klicka på Jag har sparat Lita alltid på.",
+ "trust.macWaitStatus": "Väntar på certifikatet i Keychain…",
+ "trust.macWaitInKeychain": "Väntar på sparade SSL-principer (växla Lita alltid på, stäng Visa info, ange lösenord)…",
+ "trust.macNotSaved": "Visningen Lita alltid på räcker inte — växla Använd systemstandard → Lita alltid på, stäng Visa info, ange ditt lösenord och försök sedan Installera rot-CA / Dekryptera HTTPS igen",
+ "trust.macConfirmSaved": "Jag har sparat Lita alltid på",
+ "trust.exportCa": "Exportera CA",
+ "trust.install.mac": "Dekryptering av HTTPS kräver att rot-CA för Titanium Inspector är betrodd i Keychain Access (nyckelringen login). Installera nu?",
+ "trust.install.linux": "Dekryptering av HTTPS kräver att rot-CA för Titanium Inspector är betrodd i ditt användarcertifikatarkiv (NSS). Installera nu?",
+ "trust.install.windows": "Dekryptering av HTTPS kräver att rot-CA för Titanium Inspector är betrodd i den aktuella användarens arkiv för betrodda rotcertifikat. Installera nu?\n\nWindows kan visa en Ja/Nej-säkerhetsdialog för betrodd rot (inte UAC) — välj Ja för att lita på CA.",
+ "trust.install.other": "Dekryptering av HTTPS kräver att rot-CA för Titanium Inspector är betrodd på den här datorn. Installera nu?",
+ "trust.remove.mac": "Ta bort rot-CA för Titanium Inspector från Keychain? HTTPS-dekryptering stängs av.",
+ "trust.remove.linux": "Ta bort rot-CA för Titanium Inspector från ditt användarcertifikatarkiv (NSS)? HTTPS-dekryptering stängs av.",
+ "trust.remove.windows": "Ta bort rot-CA för Titanium Inspector från den aktuella användarens arkiv för betrodda rotcertifikat? HTTPS-dekryptering stängs av.",
+ "trust.remove.other": "Ta bort rot-CA för Titanium Inspector? HTTPS-dekryptering stängs av.",
+ "trust.elevate.mac": "Förtroende på användarnivå misslyckades eller räckte inte. Fortsätt för att visa en macOS-uppmaning om administratörslösenord? Avbryt lämnar certifikatinställningarna oförändrade.",
+ "trust.elevate.linux": "Förtroende på användarnivå misslyckades eller räckte inte. Fortsätt för att visa en polkit-administratörsuppmaning? Avbryt lämnar certifikatinställningarna oförändrade.",
+ "trust.elevate.windows": "Förtroende på användarnivå misslyckades eller räckte inte. Fortsätt för att visa UAC? Avbryt lämnar certifikatinställningarna oförändrade.",
+ "trust.elevate.other": "Förtroende på användarnivå misslyckades eller räckte inte. Fortsätt med en administratörsuppmaning? Avbryt lämnar certifikatinställningarna oförändrade.",
+ "trust.recovery.mac": "\n\nFortsätt för att visa en macOS-uppmaning om administratörslösenord? Inte nu lämnar certifikatinställningarna oförändrade.",
+ "trust.recovery.linux": "\n\nFortsätt för att visa en polkit-administratörsuppmaning? Inte nu lämnar certifikatinställningarna oförändrade.",
+ "trust.recovery.windows": "\n\nFortsätt för att visa UAC? Inte nu lämnar certifikatinställningarna oförändrade.",
+ "trust.recovery.other": "\n\nFortsätt med en administratörsuppmaning? Inte nu lämnar certifikatinställningarna oförändrade.",
+ "trust.hosts.mac": "Förbikoppling av systemet kräver Fånga → Systemproxy (använder proxyinställningar för macOS-nätverk). Regler enbart för tunnel gäller varje klient som träffar Inspector. Fabriksstandard är förifylld i listorna nedan — redigera fritt eller återställ.",
+ "trust.hosts.linux": "Förbikoppling av systemet kräver Fånga → Systemproxy (använder proxyinställningar för skrivbord eller miljö). Regler enbart för tunnel gäller varje klient som träffar Inspector. Fabriksstandard är förifylld i listorna nedan — redigera fritt eller återställ.",
+ "trust.hosts.windows": "Förbikoppling av systemet kräver Fånga → Systemproxy (använder WinINET). Regler enbart för tunnel gäller varje klient som träffar Inspector. Fabriksstandard är förifylld i listorna nedan — redigera fritt eller återställ.",
+ "trust.hosts.other": "Förbikoppling av systemet kräver Fånga → Systemproxy. Regler enbart för tunnel gäller varje klient som träffar Inspector. Fabriksstandard är förifylld i listorna nedan — redigera fritt eller återställ.",
+ "trust.localhost.mac": "När systemproxy är på, skicka localhost genom Inspector. Av lägger till localhost i förbikopplingslistan för macOS-proxyn.",
+ "trust.localhost.linux": "När systemproxy är på, skicka localhost genom Inspector. Av lägger till localhost i NO_PROXY.",
+ "trust.localhost.windows": "När systemproxy är på, skicka localhost genom Inspector (WinINET <-loopback>). Av låter loopback hoppa över proxyn.",
+ "trust.localhost.other": "När systemproxy är på, skicka localhost genom Inspector.",
+ "trust.status.missing": "Rot-CA är inte betrodd ännu — försök igen eller Exportera CA",
+ "trust.status.cancelled": "Installation av rot-CA avbröts",
+ "trust.status.certutil": "Webbläsarens certifikatverktyg saknas — installera dem, försök igen eller Exportera CA",
+ "trust.status.homebrew": "Homebrew krävs för att installera certifikatverktyg — Exportera CA för att lita på det manuellt",
+ "trust.status.macConfirm": "Ställ in Lita alltid på för rot-CA för Titanium Inspector i Keychain Access",
+ "trust.status.keychain": "Keychain-förtroende misslyckades — försök igen eller Exportera CA och lita på det manuellt",
+ "trust.fail.keychainTitle": "Bekräfta förtroende i Keychain",
+ "trust.fail.continueKeychain": "Fortsätt i Keychain Access",
+ "trust.fail.toolsTitle": "Certifikatverktyg behövs",
+ "trust.fail.toolsLinux": "Inspector behöver certutil (NSS-verktyg) för att slutföra förtroendet för rot-CA.",
+ "trust.fail.toolsOther": "Inspector behöver webbläsarens certifikatverktyg för att slutföra förtroendet för rot-CA.",
+ "trust.fail.tryAgain": "Försök igen",
+ "trust.fail.homebrewBody": "Homebrew krävs för att installera certifikatverktyg. Exportera CA för att lita på den manuellt.",
+ "trust.fail.title": "Kan inte dekryptera HTTPS ännu",
+ "trust.fail.body": "Rot-CA för Titanium Inspector är inte betrodd på den här datorn ännu.",
+ "toolbar.throttle": "Begränsning",
+ "toolbar.throttleTip": "Lägg till fördröjning och bandbreddsformning under fångst (skrivning av innehåll / WebSocket-ramar). Av som standard.",
+ "toolbar.bindWatermark": "*, localhost eller IP",
+ "toolbar.bindTip": "127.0.0.1 eller localhost = bara den här datorn. 0.0.0.0 eller * = alla nätverkskort (inkluderar localhost).",
+ "toolbar.portWatermark": "*, eller port",
+ "toolbar.portTip": "* eller tomt = port som operativsystemet väljer (den riktiga porten visas efter start). Annars 1–65535.",
+ "toolbar.listeningTip": "Proxyn lyssnar",
+ "toolbar.trustHealthTip": "Förtroendestatus för rot-CA för Dekryptera HTTPS. Installera eller lita på CA om det står CA inte betrodd.",
+ "chip.process": "process",
+ "inspect.request": "Förfrågan",
+ "inspect.requestTip": "Förfrågans rubriker och innehåll",
+ "inspect.copyHeaders": "Kopiera rubriker",
+ "inspect.resizeTip": "Dra för att ändra storlek. Dubbelklicka för att återställa.",
+ "inspect.pretty": "Formaterat",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Visa innehållet som en Hex-dump",
+ "inspect.saveRequest": "Spara förfrågan…",
+ "inspect.response": "Svar",
+ "inspect.responseTip": "Svarets rubriker och innehåll",
+ "inspect.saveResponse": "Spara svar…",
+ "inspect.diff": "Skillnad",
+ "inspect.frames": "WS-ramar",
+ "inspect.framesHelp": "Live-ramar för WebSocket i den här sessionen (riktning, opcode, förhandsvisning av data).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events tolkade från svarets innehåll.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Visa rubriker",
+ "inspect.hideHeaders": "Dölj rubriker",
+ "inspect.headers": "Rubriker ({0})",
+ "inspect.prettyTip": "Dra in JSON, XML och HTML",
+ "inspect.prettyHexTip": "Gäller inte i vyn Hex",
+ "inspect.emptyBody": "(tomt)",
+ "inspect.noRequestBody": "Inget innehåll i förfrågan",
+ "inspect.waiting": "Väntar på svar…",
+ "composer.help": "Bygg och skicka en förfrågan genom proxyn. Läs in från markerad kopierar den aktuella sessionen.",
+ "composer.method": "Metod",
+ "composer.url": "URL",
+ "composer.headers": "Rubriker (Namn: Värde per rad)",
+ "composer.body": "Innehåll",
+ "composer.loadSelected": "Läs in från markerad",
+ "composer.loadBody": "Läs in innehåll från fil…",
+ "composer.send": "Skicka",
+ "bp.help": "Pausa matchande klientförfrågningar för att redigera innehållet, fortsätta eller avbryta. En paus i taget; fortsätter automatiskt efter 120s. Om du avmarkerar Aktiverad fortsätter en pausad förfrågan.",
+ "bp.enabled": "Aktiverad",
+ "bp.breakOnResponse": "Bryt vid svar",
+ "bp.match": "Matchning",
+ "bp.urlWatermark": "URL-filter (* = alla, t.ex. *api*/users*)",
+ "bp.graphqlWatermark": "Bara den här GraphQL-operationen (valfritt)",
+ "bp.graphqlTip": "Extra filter på klientförfrågans innehåll. Matchar JSON operationName eller en namngiven fråga. Lämna tomt för att matcha varje operation på den URL.",
+ "bp.fromSelected": "Från markerad session",
+ "bp.fromSelectedTip": "Kopiera namnet på GraphQL-operationen från den markerade sessionens förfrågan.",
+ "bp.graphqlHelp": "Lämna rutan GraphQL tom för att matcha varje operation. Fyll i den (t.ex. GetUser) för att bara pausa den klientförfrågan på den URL ovan. Bryt vid svar använder fortfarande URL-filtret.",
+ "bp.editWatermark": "Redigera innehåll (Tillämpa redigerat innehåll, sedan Fortsätt)",
+ "bp.applyEdit": "Tillämpa redigerat innehåll",
+ "bp.continue": "Fortsätt",
+ "bp.abort": "Avbryt",
+ "ar.help": "Returnera ett fejkat svar före den riktiga servern. Matchning avgör vilka klientförfrågningar en regel gäller; fälten under det är det du skickar tillbaka.",
+ "ar.enabled": "Aktiverad (före brytpunkter)",
+ "ar.urlWatermark": "Matcha URL (* jokertecken)",
+ "ar.graphqlHelp": "Samma URL och olika GraphQL-operationer kan använda olika regler. Lämna tomt för att matcha varje operation.",
+ "ar.respondWith": "Svara med",
+ "ar.statusTip": "HTTP-status. Tomt = 200. Använd 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local-fil (valfritt)",
+ "ar.bodyWatermark": "Svarsinnehåll (används när Map Local är tomt)",
+ "ar.add": "Lägg till regel",
+ "ar.update": "Uppdatera regel",
+ "ar.delete": "Ta bort regel",
+ "script.intro": "Ett kommando per rad, på varje fångad session. Det här är inte JavaScript eller C# — skriv bara kommandona nedan.",
+ "script.what": "Det här kan du skriva",
+ "script.setHeaderHelp": "Lägg till eller ersätt en rubrik. Trafiken fortsätter ändå till servern.",
+ "script.setStatusHelp": "Vid förfrågan: svara nu och hoppa över servern. Vid svar: ändra statusen som klienten ser.",
+ "script.abortHelp": "Blockera med 403 Förbjudet. Lägg till en rad med set-status för att välja en annan kod.",
+ "script.comment": "Inled en rad med # eller // för en kommentar. Du kan kombinera kommandon; sätt varje på en egen rad.",
+ "script.onRequest": "Vid förfrågan",
+ "script.onResponse": "Vid svar",
+ "script.requestSkips": "abort eller set-status här hoppar över AutoResponder, brytpunkter och ursprunget.",
+ "map.help": "Skriv om matchande klientförfrågningar till ett annat ursprung före den riktiga servern. Använd en enda * i matchning och mål för att behålla ett suffix för sökväg eller fråga. Körs efter AutoResponder / Map Local.",
+ "map.graphqlHelp": "Lämna tomt för att skriva om varje operation på den URL. Fyll i för att bara skriva om den GraphQL-operationen.",
+ "map.rewriteTo": "Skriv om till",
+ "map.targetWatermark": "Mål-URL (absolut, valfri *)",
+ "loopback.allow": "Tillåt",
+ "loopback.appName": "Appnamn",
+ "loopback.packageId": "Paket-ID",
+ "status.ready": "Redo",
+ "status.searchingBodies": "Söker i innehåll…",
+ "status.proxyStopped": "Proxy stoppad",
+ "status.proxyRunning": "Proxy körs på {0}",
+ "trust.health.trusted": "CA betrodd",
+ "trust.health.untrusted": "CA inte betrodd"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.th.json b/src/Titanium.Inspector/Localization/strings.th.json
new file mode 100644
index 000000000..a5c005ce4
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.th.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "ไฟล์",
+ "menu.exportAllHar": "ส่งออก HAR ทั้งหมด…",
+ "menu.exportSelectedHar": "ส่งออก HAR ที่เลือก…",
+ "menu.importHar": "นำเข้า HAR…",
+ "menu.exportAllArchive": "ส่งออกที่เก็บถาวรทั้งหมด…",
+ "menu.exportSelectedArchive": "ส่งออกที่เก็บถาวรที่เลือก…",
+ "menu.importArchive": "นำเข้าที่เก็บถาวร…",
+ "menu.exit": "ออก",
+ "menu.capture": "ดักจับ",
+ "menu.startProxy": "เริ่มพร็อกซี",
+ "menu.stopProxy": "หยุดพร็อกซี",
+ "menu.capturing": "กำลังดักจับ",
+ "menu.clearSessions": "ล้างเซสชัน",
+ "menu.removeSelected": "เอาที่เลือกออก",
+ "menu.autoStartCapture": "เริ่มดักจับอัตโนมัติ",
+ "menu.autoSystemProxy": "เปิดพร็อกซีระบบอัตโนมัติเมื่อเริ่ม",
+ "menu.decryptHttps": "ถอดรหัส HTTPS",
+ "menu.systemProxy": "พร็อกซีระบบ",
+ "menu.captureLocal": "ดักจับทราฟฟิกภายในเครื่อง",
+ "menu.allowStoreApps": "อนุญาตแอปสโตร์…",
+ "menu.installCa": "ติดตั้ง CA ราก (ผู้ใช้ปัจจุบัน)",
+ "menu.removeCa": "เอา CA รากออก (ผู้ใช้ปัจจุบัน)",
+ "menu.rotateCa": "ล้างและติดตั้ง CA รากใหม่…",
+ "menu.removeOldCas": "เอา CA รากเก่าออก…",
+ "menu.exportCa": "ส่งออก CA ราก…",
+ "menu.trustFirefox": "เชื่อถือ CA ใน Firefox…",
+ "menu.deviceCa": "ตั้งค่า CA ของอุปกรณ์ภายนอก",
+ "menu.tools": "เครื่องมือ",
+ "menu.composer": "ตัวแต่งคำขอ…",
+ "menu.breakpoints": "จุดพัก…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "สคริปต์…",
+ "menu.mapRemote": "แมประยะไกล…",
+ "menu.options": "ตัวเลือก",
+ "menu.theme": "ธีม",
+ "menu.themeLight": "สว่าง",
+ "menu.themeDark": "มืด",
+ "menu.themeAutomatic": "อัตโนมัติ",
+ "menu.language": "ภาษา",
+ "menu.languageAutomatic": "อัตโนมัติ",
+ "menu.columns": "คอลัมน์",
+ "menu.col.id": "รหัส",
+ "menu.col.method": "เมธอด",
+ "menu.col.status": "สถานะ",
+ "menu.col.host": "โฮสต์",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "โปรโตคอล",
+ "menu.col.duration": "ระยะเวลา",
+ "menu.col.ttfb": "รอ (TTFB)",
+ "menu.col.size": "ขนาด",
+ "menu.col.process": "กระบวนการ",
+ "menu.col.started": "เริ่มเมื่อ",
+ "menu.col.scheme": "สกีม",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "รีเซ็ตคอลัมน์",
+ "menu.sessionRetention": "การเก็บเซสชัน…",
+ "menu.excludedHosts": "โฮสต์ที่ยกเว้น…",
+ "menu.excludedHostsTip": "รายการข้ามการถอดรหัส HTTPS และกฎเลี่ยงของระบบปฏิบัติการ",
+ "menu.ignoreCerts": "ละเว้นใบรับรองเซิร์ฟเวอร์ที่ไม่ปลอดภัย",
+ "menu.addVia": "เพิ่มส่วนหัว Via",
+ "menu.addViaTip": "ต่อท้าย Via: … titanium-web-proxy ในทราฟฟิกที่ดักจับ (RFC 9110) เมื่อปิด จะไม่แทรกและไม่ตรวจจับวงวน Via",
+ "menu.logging": "การบันทึก…",
+ "menu.resetSettings": "รีเซ็ตการตั้งค่า Inspector…",
+ "menu.help": "วิธีใช้",
+ "menu.checkUpdates": "ตรวจหาอัปเดต…",
+ "menu.checkUpdatesStartup": "ตรวจหาอัปเดตเมื่อเริ่มต้น",
+ "menu.updateChannel": "ช่องทางอัปเดต",
+ "menu.channelStable": "เสถียร",
+ "menu.channelBeta": "เบตา",
+ "menu.about": "เกี่ยวกับ Titanium Inspector…",
+ "toolbar.searchWatermark": "ค้นหา URL, โฮสต์, กระบวนการ… (หรือ method:GET status:4xx)",
+ "toolbar.searchTip": "ข้อความธรรมดาค้นหา URL, โฮสต์, ชื่อกระบวนการ, รหัสกระบวนการที่ตรงกัน, เมธอด และสถานะ คำนำหน้าจำกัดการค้นหาไว้ที่ฟิลด์เดียว: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image body: ค้นหาเนื้อหาที่เขียนลงดิสก์ด้วย ใส่ - หน้าฟิลด์หรือคำเพื่อยกเว้น (เช่น -host:cursor.sh หรือ -cursor) ตัวกรองใช้แก้ไขโฮสต์และกระบวนการที่ซ่อนในหน้าต่างที่กว้างกว่า",
+ "toolbar.filters": "ตัวกรอง",
+ "toolbar.filtersTip": "แก้ไขการค้นหาและโฮสต์หรือกระบวนการที่ซ่อนในหน้าต่างที่ใหญ่กว่า",
+ "toolbar.hideConnect": "ซ่อน CONNECT",
+ "toolbar.hideConnectTip": "ซ่อนทันเนล HTTPS ที่มองไม่เห็นเนื้อหาเมื่อปิดการถอดรหัส HTTPS",
+ "toolbar.hideImages": "ซ่อนรูปภาพ",
+ "toolbar.errorsOnly": "เฉพาะข้อผิดพลาด",
+ "toolbar.clearFilters": "ล้างตัวกรอง",
+ "toolbar.hidden": "ซ่อนอยู่",
+ "ctx.replay": "ส่งซ้ำ",
+ "ctx.loadComposer": "โหลดเข้าตัวแต่งคำขอ",
+ "ctx.saveRequest": "บันทึกเนื้อหาคำขอ…",
+ "ctx.saveResponse": "บันทึกเนื้อหาการตอบกลับ…",
+ "ctx.copyUrl": "คัดลอก URL",
+ "ctx.copyCurl": "คัดลอกเป็น curl",
+ "ctx.copyFetch": "คัดลอกเป็น fetch",
+ "ctx.diff": "เปรียบเทียบที่เลือก…",
+ "ctx.filterHost": "กรองตามโฮสต์",
+ "ctx.hideHost": "ซ่อนโฮสต์",
+ "ctx.filterProcess": "กรองตามกระบวนการ",
+ "ctx.hideProcess": "ซ่อนกระบวนการ",
+ "ctx.excludeHost": "ยกเว้นโฮสต์…",
+ "ctx.excludeHostTip": "หยุดถอดรหัส HTTPS ของโฮสต์นี้ แถวยังอยู่ในรายการ ใช้ซ่อนโฮสต์เพื่อเอาออกจากมุมมอง",
+ "grid.duration": "ระยะเวลา (ms)",
+ "grid.wait": "รอ (ms)",
+ "pane.inspect": "ตรวจสอบ",
+ "pane.composer": "ตัวแต่งคำขอ",
+ "pane.breakpoints": "จุดพัก",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "สคริปต์",
+ "pane.mapRemote": "แมประยะไกล",
+ "pane.closeTip": "ปิดบานหน้าต่าง",
+ "inspect.empty": "เลือกเซสชันในตารางเพื่อตรวจสอบส่วนหัวและเนื้อหาของคำขอและการตอบกลับ",
+ "common.ok": "ตกลง",
+ "common.cancel": "ยกเลิก",
+ "common.save": "บันทึก",
+ "common.apply": "นำไปใช้",
+ "common.remove": "เอาออก",
+ "common.browse": "เรียกดู…",
+ "common.openFolder": "เปิดโฟลเดอร์",
+ "common.forget": "ลืม",
+ "common.close": "ปิด",
+ "loopback.window": "อนุญาตให้แอปสโตร์ใช้พร็อกซีนี้",
+ "loopback.checkAll": "เลือกทั้งหมด",
+ "loopback.uncheckAll": "ยกเลิกการเลือกทั้งหมด",
+ "loopback.filterWatermark": "กรองตามชื่อแอป…",
+ "loopback.clearAll": "ล้างทั้งหมด",
+ "trust.macWindow": "ยืนยันความเชื่อถือใน Keychain Access",
+ "trust.openKeychain": "เปิด Keychain Access",
+ "trust.notNow": "ยังไม่ใช่ตอนนี้",
+ "trust.recoveryTitle": "ความเชื่อถือ CA ราก",
+ "trust.macWaitPlaceholder": "กำลังรอความเชื่อถือ SSL…",
+ "window.about": "เกี่ยวกับ Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "ลิขสิทธิ์ © Jehonathan Thomas",
+ "about.license": "ได้รับอนุญาตภายใต้ PolyForm Noncommercial License 1.0.0",
+ "about.licenseLink": "รายละเอียดสัญญาอนุญาต",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "ตัวกรอง",
+ "filters.search": "ค้นหา",
+ "filters.searchHelp": "การค้นหาเดียวกับแถบเครื่องมือ แต่มีพื้นที่มากกว่า โฮสต์และกระบวนการที่ซ่อนแสดงด้านล่าง ไม่ได้อยู่ในช่องนี้",
+ "filters.searchWatermark": "URL, โฮสต์, กระบวนการ, method:GET, status:4xx…",
+ "filters.hideHeading": "ซ่อนจากรายการ",
+ "filters.hideHelp": "แถวยังถูกดักจับอยู่ การนี้เพียงซ่อนในรายการ หากต้องการหยุดถอดรหัส HTTPS ให้ใช้ยกเว้นโฮสต์…",
+ "filters.hosts": "โฮสต์",
+ "filters.addHostWatermark": "เพิ่มโฮสต์ที่จะซ่อน",
+ "filters.addHost": "เพิ่มโฮสต์",
+ "filters.processes": "กระบวนการ",
+ "filters.addProcessWatermark": "เพิ่มกระบวนการที่จะซ่อน",
+ "filters.addProcess": "เพิ่มกระบวนการ",
+ "filters.processSpace": "ชื่อที่มีช่องว่างจะถูกตัดที่คำแรก ซึ่งอาจซ่อนชื่ออื่นที่มีคำนั้นด้วย",
+ "window.confirm": "ยืนยัน",
+ "window.excludeHost": "ยกเว้นโฮสต์",
+ "exclude.action": "ยกเว้น",
+ "exclude.help": "โฮสต์นี้จะยังปรากฏในรายการเซสชัน Inspector จะไม่พยายามอ่าน HTTPS ของโฮสต์นี้",
+ "window.logging": "การบันทึก",
+ "logging.help": "เขียนข้อความวินิจฉัยเพื่อแก้ปัญหา การเปลี่ยนแปลงมีผลทันที",
+ "logging.enable": "เปิดการบันทึก",
+ "logging.writeFile": "เขียนบันทึกลงไฟล์",
+ "logging.detail": "ระดับรายละเอียด",
+ "logging.detailHelp": "Error = เฉพาะปัญหา Warning / Information = บริบทมากขึ้น Debug = ละเอียดมาก",
+ "logging.path": "พาธไฟล์บันทึก",
+ "window.excludedHosts": "โฮสต์ที่ยกเว้น",
+ "excluded.reset": "รีเซ็ตเป็นค่าเริ่มต้น",
+ "excluded.bypass": "เลี่ยงพร็อกซี (ระบบปฏิบัติการ)",
+ "excluded.bypassHelp": "เมื่อเปิดพร็อกซีระบบ ทราฟฟิกจะไม่ถึง Inspector มีโฮสต์ข้อมูลประจำตัว Microsoft / SSO / RDP เป็นค่าเริ่มต้น การเอาออกขณะเปิดพร็อกซีระบบอาจทำให้การลงชื่อเข้าใช้ RDP ใช้ไม่ได้",
+ "excluded.notDecrypted": "โฮสต์ที่ไม่ถอดรหัส",
+ "excluded.notDecryptedHelp": "เมื่อเปิดถอดรหัส HTTPS แล้ว CONNECT ยังมองเห็น และ TLS ยังทึบ มีโฮสต์ที่ปักหมุดใบรับรอง (Dropbox, Webex) เป็นค่าเริ่มต้น",
+ "excluded.learnHeading": "ไม่ถอดรหัสโดยอัตโนมัติเมื่อถอดรหัสล้มเหลว",
+ "excluded.learn": "เรียนรู้โฮสต์ที่ TLS ต้นทางล้มเหลวขณะถอดรหัส",
+ "excluded.learnHelp": "เมื่อ TLS ต้นทางล้มเหลวซ้ำขณะถอดรหัส หรือเซิร์ฟเวอร์ต้นทางส่งกลับ 403/429 Inspector จะหยุดถอดรหัสโฮสต์นั้นสำหรับการเชื่อมต่อถัดไปในเซสชันนี้ รายการมีขีดจำกัด และจะถูกลืมเมื่อเริ่มใหม่เว้นแต่คุณเลื่อนระดับ",
+ "excluded.learnPaused": "การเรียนรู้หยุดชั่วคราว — รายการที่มีอยู่จะคงไว้จนกว่าจะถูกลืม",
+ "excluded.noneLearned": "ยังไม่มีโฮสต์ที่เรียนรู้",
+ "excluded.promote": "เลื่อนเป็นโฮสต์ที่ไม่ถอดรหัส",
+ "excluded.clearLearned": "ล้างที่เรียนรู้ทั้งหมด",
+ "window.retention": "การเก็บเซสชัน",
+ "retention.max": "จำนวนเซสชันสูงสุดที่จะเก็บ",
+ "retention.maxHelp": "จำนวนคำขอที่อยู่ในรายการเซสชัน เมื่อเกินนี้ แถวที่เก่าที่สุดจะออกจากรายการแต่ยังอยู่บนดิสก์จนกว่าล้างเซสชันหรือขีดจำกัดพื้นที่ดิสก์จะลบ",
+ "retention.cache": "โฟลเดอร์แคช",
+ "retention.openCache": "เปิดโฟลเดอร์แคช",
+ "retention.clearCache": "ล้างแคชเซสชันที่บันทึกไว้…",
+ "retention.advanced": "ขั้นสูง",
+ "retention.disk": "พื้นที่ดิสก์สำหรับเซสชันที่บันทึก (MB)",
+ "retention.diskHelp": "พื้นที่สูงสุดสำหรับเซสชันที่บันทึกทั้งหมดบนดิสก์ (ทุกครั้งที่ Inspector ทำงาน) แต่ละครั้งใช้โฟลเดอร์ย่อยที่มีตราเวลา เมื่อเกินนี้จะลบไฟล์ HAR ที่เก่าที่สุดก่อน โฟลเดอร์การทำงานที่ว่างจะถูกลบ",
+ "loopback.intro": "แอป Windows Store / UWP ถูกบล็อกจาก localhost ตามค่าเริ่มต้น เลือกแอปที่ควรใช้ Inspector แล้วนำไปใช้ หลังนำไปใช้ ให้เริ่มแอปใหม่แต่ละตัว (ออกให้หมด) Inspector ต้องทำงานโดยเปิดพร็อกซีระบบ ล้างทั้งหมดจะเอาทุกรายการที่อนุญาตออก",
+ "loopback.closedUnchanged": "แอปสโตร์ไม่เปลี่ยนแปลง",
+ "loopback.proxyStopped": "เริ่มพร็อกซีและเปิดพร็อกซีระบบ จะดักจับแอปสโตร์ไม่ได้จนกว่าทั้งสองจะเปิด",
+ "loopback.systemProxyOff": "เปิดพร็อกซีระบบ (เมนูดักจับ) รายการอนุญาตเพียงให้แอปสโตร์เข้าถึง localhost ได้ แอปยังคงทำตามพร็อกซีระบบ",
+ "loopback.refreshing": "กำลังรีเฟรชพร็อกซีระบบเพื่อให้แอปที่ทำงานอยู่เชื่อมต่อใหม่…",
+ "loopback.unchangedCount": "รายการอนุญาตตรงอยู่แล้ว: {0}",
+ "loopback.allowed": "อนุญาตแล้ว: {0}",
+ "loopback.allowedRefreshed": " รีเฟรชพร็อกซีระบบแล้วเพื่อให้แอปที่ทำงานอยู่เชื่อมต่อใหม่ หากทราฟฟิกยังไม่ปรากฏ ให้ออกจากแอปให้หมดแล้วเปิดใหม่",
+ "loopback.allowedProxyStopped": " เริ่มพร็อกซีและเปิดพร็อกซีระบบ จากนั้นออกจากแอปให้หมดแล้วเปิดใหม่",
+ "loopback.allowedSystemProxyOff": " เปิดพร็อกซีระบบ จากนั้นออกจากแอปให้หมดแล้วเปิดใหม่",
+ "loopback.allowedReady": " ออกจากแอปให้หมดแล้วเปิดใหม่เพื่อดักจับทราฟฟิก",
+ "loopback.clearedRefreshed": "ล้างการยกเว้นลูปแบ็กทั้งหมดแล้ว รีเฟรชพร็อกซีระบบเพื่อให้แอปที่ทำงานอยู่เชื่อมต่อใหม่",
+ "loopback.clearedReady": "ล้างการยกเว้นลูปแบ็กทั้งหมดแล้ว ออกให้หมดแล้วเปิดใหม่ทุกแอปที่ใช้ Inspector",
+ "loopback.cleared": "ล้างการยกเว้นลูปแบ็กทั้งหมดแล้ว",
+ "trust.macWaitBody": "ดูข้อมูลของ Keychain อาจแสดงเชื่อถือเสมอได้แล้ว แม้ยังไม่ได้บันทึกนโยบาย SSL (Chrome และ Inspector ยังถือว่า CA นี้ไม่น่าเชื่อถือ)\n\nบังคับให้บันทึก:\n1. Keychain Access → เข้าสู่ระบบ → ใบรับรอง → ดับเบิลคลิก Titanium Root Certificate Authority\n2. ขยายความเชื่อถือ\n3. ตั้งเมื่อใช้ใบรับรองนี้เป็นใช้ค่าเริ่มต้นของระบบ แล้วเปลี่ยนกลับเป็นเชื่อถือเสมอ\n4. ปิดดูข้อมูล — ต้องมีข้อความถามรหัสผ่าน นั่นคือการเขียนนโยบายความเชื่อถือ SSL จริง\n\nหน้าต่างนี้จะปิดเองเมื่อตรวจพบนโยบายเหล่านั้น หากบันทึกแล้ว ให้คลิกฉันบันทึกเชื่อถือเสมอแล้ว",
+ "trust.macWaitStatus": "กำลังรอใบรับรองใน Keychain…",
+ "trust.macWaitInKeychain": "กำลังรอนโยบาย SSL ที่บันทึก (สลับเชื่อถือเสมอ ปิดดูข้อมูล ใส่รหัสผ่าน)…",
+ "trust.macNotSaved": "การแสดงเชื่อถือเสมอไม่พอ — สลับใช้ค่าเริ่มต้นของระบบเป็นเชื่อถือเสมอ ปิดดูข้อมูล ใส่รหัสผ่าน แล้วลองติดตั้ง CA ราก / ถอดรหัส HTTPS อีกครั้ง",
+ "trust.macConfirmSaved": "ฉันบันทึกเชื่อถือเสมอแล้ว",
+ "trust.exportCa": "ส่งออก CA",
+ "trust.install.mac": "การถอดรหัส HTTPS ต้องเชื่อถือ CA รากของ Titanium Inspector ใน Keychain Access (พวงกุญแจเข้าสู่ระบบ) ติดตั้งตอนนี้หรือไม่",
+ "trust.install.linux": "การถอดรหัส HTTPS ต้องเชื่อถือ CA รากของ Titanium Inspector ในที่เก็บใบรับรองของผู้ใช้ (NSS) ติดตั้งตอนนี้หรือไม่",
+ "trust.install.windows": "การถอดรหัส HTTPS ต้องเชื่อถือ CA รากของ Titanium Inspector ในที่เก็บรูทที่เชื่อถือได้ของผู้ใช้ปัจจุบัน ติดตั้งตอนนี้หรือไม่\n\nWindows อาจแสดงกล่องโต้ตอบความปลอดภัย ใช่/ไม่ใช่ ของรูทที่เชื่อถือได้ (ไม่ใช่ UAC) — เลือกใช่เพื่อเชื่อถือ CA",
+ "trust.install.other": "การถอดรหัส HTTPS ต้องเชื่อถือ CA รากของ Titanium Inspector บนคอมพิวเตอร์นี้ ติดตั้งตอนนี้หรือไม่",
+ "trust.remove.mac": "เอา CA รากของ Titanium Inspector ออกจาก Keychain หรือไม่ การถอดรหัส HTTPS จะถูกปิด",
+ "trust.remove.linux": "เอา CA รากของ Titanium Inspector ออกจากที่เก็บใบรับรองของผู้ใช้ (NSS) หรือไม่ การถอดรหัส HTTPS จะถูกปิด",
+ "trust.remove.windows": "เอา CA รากของ Titanium Inspector ออกจากที่เก็บรูทที่เชื่อถือได้ของผู้ใช้ปัจจุบันหรือไม่ การถอดรหัส HTTPS จะถูกปิด",
+ "trust.remove.other": "เอา CA รากของ Titanium Inspector ออกหรือไม่ การถอดรหัส HTTPS จะถูกปิด",
+ "trust.elevate.mac": "ความเชื่อถือระดับผู้ใช้ล้มเหลวหรือไม่เพียงพอ ดำเนินการต่อเพื่อแสดงข้อความรหัสผ่านผู้ดูแล macOS หรือไม่ การยกเลิกจะไม่เปลี่ยนการตั้งค่าใบรับรอง",
+ "trust.elevate.linux": "ความเชื่อถือระดับผู้ใช้ล้มเหลวหรือไม่เพียงพอ ดำเนินการต่อเพื่อแสดงข้อความผู้ดูแล polkit หรือไม่ การยกเลิกจะไม่เปลี่ยนการตั้งค่าใบรับรอง",
+ "trust.elevate.windows": "ความเชื่อถือระดับผู้ใช้ล้มเหลวหรือไม่เพียงพอ ดำเนินการต่อเพื่อแสดง UAC หรือไม่ การยกเลิกจะไม่เปลี่ยนการตั้งค่าใบรับรอง",
+ "trust.elevate.other": "ความเชื่อถือระดับผู้ใช้ล้มเหลวหรือไม่เพียงพอ ดำเนินการต่อด้วยข้อความผู้ดูแลหรือไม่ การยกเลิกจะไม่เปลี่ยนการตั้งค่าใบรับรอง",
+ "trust.recovery.mac": "\n\nดำเนินการต่อเพื่อแสดงข้อความรหัสผ่านผู้ดูแล macOS หรือไม่ การเลือกยังไม่ใช่ตอนนี้จะไม่เปลี่ยนการตั้งค่าใบรับรอง",
+ "trust.recovery.linux": "\n\nดำเนินการต่อเพื่อแสดงข้อความผู้ดูแล polkit หรือไม่ การเลือกยังไม่ใช่ตอนนี้จะไม่เปลี่ยนการตั้งค่าใบรับรอง",
+ "trust.recovery.windows": "\n\nดำเนินการต่อเพื่อแสดง UAC หรือไม่ การเลือกยังไม่ใช่ตอนนี้จะไม่เปลี่ยนการตั้งค่าใบรับรอง",
+ "trust.recovery.other": "\n\nดำเนินการต่อด้วยข้อความผู้ดูแลหรือไม่ การเลือกยังไม่ใช่ตอนนี้จะไม่เปลี่ยนการตั้งค่าใบรับรอง",
+ "trust.hosts.mac": "การเลี่ยงของระบบปฏิบัติการต้องใช้ดักจับ → พร็อกซีระบบ (ใช้การตั้งค่าพร็อกซีเครือข่ายของ macOS) กฎเฉพาะทันเนลใช้กับทุกไคลเอ็นต์ที่เข้าถึง Inspector มีค่าเริ่มต้นจากโรงงานในรายการด้านล่าง — แก้ไขได้อย่างอิสระหรือรีเซ็ต",
+ "trust.hosts.linux": "การเลี่ยงของระบบปฏิบัติการต้องใช้ดักจับ → พร็อกซีระบบ (ใช้การตั้งค่าพร็อกซีของเดสก์ท็อป / สภาพแวดล้อม) กฎเฉพาะทันเนลใช้กับทุกไคลเอ็นต์ที่เข้าถึง Inspector มีค่าเริ่มต้นจากโรงงานในรายการด้านล่าง — แก้ไขได้อย่างอิสระหรือรีเซ็ต",
+ "trust.hosts.windows": "การเลี่ยงของระบบปฏิบัติการต้องใช้ดักจับ → พร็อกซีระบบ (ใช้ WinINET) กฎเฉพาะทันเนลใช้กับทุกไคลเอ็นต์ที่เข้าถึง Inspector มีค่าเริ่มต้นจากโรงงานในรายการด้านล่าง — แก้ไขได้อย่างอิสระหรือรีเซ็ต",
+ "trust.hosts.other": "การเลี่ยงของระบบปฏิบัติการต้องใช้ดักจับ → พร็อกซีระบบ กฎเฉพาะทันเนลใช้กับทุกไคลเอ็นต์ที่เข้าถึง Inspector มีค่าเริ่มต้นจากโรงงานในรายการด้านล่าง — แก้ไขได้อย่างอิสระหรือรีเซ็ต",
+ "trust.localhost.mac": "เมื่อเปิดพร็อกซีระบบ ให้ส่ง localhost ผ่าน Inspector การปิดจะเพิ่ม localhost ในรายการเลี่ยงพร็อกซีของ macOS",
+ "trust.localhost.linux": "เมื่อเปิดพร็อกซีระบบ ให้ส่ง localhost ผ่าน Inspector การปิดจะเพิ่ม localhost ใน NO_PROXY",
+ "trust.localhost.windows": "เมื่อเปิดพร็อกซีระบบ ให้ส่ง localhost ผ่าน Inspector (WinINET <-loopback>) การปิดจะให้ลูปแบ็กข้ามพร็อกซี",
+ "trust.localhost.other": "เมื่อเปิดพร็อกซีระบบ ให้ส่ง localhost ผ่าน Inspector",
+ "trust.status.missing": "CA รากยังไม่ได้รับการเชื่อถือ — ลองอีกครั้ง หรือส่งออก CA",
+ "trust.status.cancelled": "ยกเลิกการติดตั้ง CA รากแล้ว",
+ "trust.status.certutil": "ไม่มีเครื่องมือใบรับรองของเบราว์เซอร์ — ติดตั้ง แล้วลองอีกครั้ง หรือส่งออก CA",
+ "trust.status.homebrew": "ต้องมี Homebrew เพื่อติดตั้งเครื่องมือใบรับรอง — ส่งออก CA เพื่อเชื่อถือด้วยตนเอง",
+ "trust.status.macConfirm": "ตั้งเชื่อถือเสมอให้ CA รากของ Titanium Inspector ใน Keychain Access",
+ "trust.status.keychain": "ความเชื่อถือ Keychain ล้มเหลว — ลองอีกครั้ง หรือส่งออก CA แล้วเชื่อถือด้วยตนเอง",
+ "trust.fail.keychainTitle": "ยืนยันความเชื่อถือใน Keychain",
+ "trust.fail.continueKeychain": "ดำเนินการต่อใน Keychain Access",
+ "trust.fail.toolsTitle": "ต้องมีเครื่องมือใบรับรอง",
+ "trust.fail.toolsLinux": "Inspector ต้องใช้ certutil (เครื่องมือ NSS) เพื่อเชื่อถือ CA รากให้เสร็จ",
+ "trust.fail.toolsOther": "Inspector ต้องใช้เครื่องมือใบรับรองของเบราว์เซอร์เพื่อเชื่อถือ CA รากให้เสร็จ",
+ "trust.fail.tryAgain": "ลองอีกครั้ง",
+ "trust.fail.homebrewBody": "ต้องมี Homebrew เพื่อติดตั้งเครื่องมือใบรับรอง ส่งออก CA เพื่อเชื่อถือด้วยตนเอง",
+ "trust.fail.title": "ยังถอดรหัส HTTPS ไม่ได้",
+ "trust.fail.body": "คอมพิวเตอร์นี้ยังไม่เชื่อถือ CA รากของ Titanium Inspector",
+ "toolbar.throttle": "จำกัดความเร็ว",
+ "toolbar.throttleTip": "เพิ่มความหน่วงและการปรับแบนด์วิดท์ระหว่างการดักจับ (การเขียนเนื้อหา / เฟรม WebSocket) ปิดไว้เป็นค่าเริ่มต้น",
+ "toolbar.bindWatermark": "*, localhost หรือ IP",
+ "toolbar.bindTip": "127.0.0.1 หรือ localhost = เฉพาะคอมพิวเตอร์นี้ 0.0.0.0 หรือ * = อะแดปเตอร์เครือข่ายทั้งหมด (รวม localhost)",
+ "toolbar.portWatermark": "* หรือพอร์ต",
+ "toolbar.portTip": "* หรือว่าง = พอร์ตที่ระบบปฏิบัติการเลือก (พอร์ตจริงปรากฏหลังเริ่ม) มิฉะนั้น 1–65535",
+ "toolbar.listeningTip": "พร็อกซีกำลังฟังอยู่",
+ "toolbar.trustHealthTip": "สถานะความเชื่อถือของ CA รากสำหรับการถอดรหัส HTTPS หากแสดงว่าไม่ได้รับความเชื่อถือ ให้ติดตั้งหรือเชื่อถือ CA",
+ "chip.process": "กระบวนการ",
+ "inspect.request": "คำขอ",
+ "inspect.requestTip": "ส่วนหัวและเนื้อหาของคำขอ",
+ "inspect.copyHeaders": "คัดลอกส่วนหัว",
+ "inspect.resizeTip": "ลากเพื่อปรับขนาด ดับเบิลคลิกเพื่อรีเซ็ต",
+ "inspect.pretty": "จัดรูปแบบ",
+ "inspect.hex": "ฐานสิบหก",
+ "inspect.hexTip": "แสดงเนื้อหาเป็นดัมพ์ฐานสิบหก",
+ "inspect.saveRequest": "บันทึกคำขอ…",
+ "inspect.response": "การตอบกลับ",
+ "inspect.responseTip": "ส่วนหัวและเนื้อหาของการตอบกลับ",
+ "inspect.saveResponse": "บันทึกการตอบกลับ…",
+ "inspect.diff": "เปรียบเทียบ",
+ "inspect.frames": "เฟรม WS",
+ "inspect.framesHelp": "เฟรม WebSocket สดของเซสชันนี้ (ทิศทาง, รหัสปฏิบัติการ, ตัวอย่างข้อมูลเพย์โหลด)",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "เหตุการณ์ที่เซิร์ฟเวอร์ส่ง ซึ่งแยกวิเคราะห์จากเนื้อหาการตอบกลับ",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "แสดงส่วนหัว",
+ "inspect.hideHeaders": "ซ่อนส่วนหัว",
+ "inspect.headers": "ส่วนหัว ({0})",
+ "inspect.prettyTip": "เยื้อง JSON, XML และ HTML",
+ "inspect.prettyHexTip": "ใช้ไม่ได้ในมุมมองฐานสิบหก",
+ "inspect.emptyBody": "(ว่าง)",
+ "inspect.noRequestBody": "ไม่มีเนื้อหาคำขอ",
+ "inspect.waiting": "กำลังรอการตอบกลับ…",
+ "composer.help": "สร้างและส่งคำขอผ่านพร็อกซี การโหลดจากที่เลือกจะคัดลอกเซสชันปัจจุบัน",
+ "composer.method": "เมธอด",
+ "composer.url": "URL",
+ "composer.headers": "ส่วนหัว (ชื่อ: ค่า ต่อบรรทัด)",
+ "composer.body": "เนื้อหา",
+ "composer.loadSelected": "โหลดจากที่เลือก",
+ "composer.loadBody": "โหลดเนื้อหาจากไฟล์…",
+ "composer.send": "ส่ง",
+ "bp.help": "หยุดคำขอไคลเอ็นต์ที่ตรงกันชั่วคราว เพื่อแก้ไขเนื้อหา ดำเนินการต่อ หรือยกเลิก หยุดได้ครั้งละหนึ่ง แล้วดำเนินการต่ออัตโนมัติหลัง 120s การยกเลิกการเลือกเปิดใช้จะให้คำขอที่หยุดไว้ดำเนินการต่อ",
+ "bp.enabled": "เปิดใช้",
+ "bp.breakOnResponse": "พักที่การตอบกลับ",
+ "bp.match": "จับคู่",
+ "bp.urlWatermark": "ตัวกรอง URL (* = ทั้งหมด เช่น *api*/users*)",
+ "bp.graphqlWatermark": "เฉพาะการทำงาน GraphQL นี้ (ไม่บังคับ)",
+ "bp.graphqlTip": "ตัวกรองเพิ่มเติมบนเนื้อหาคำขอของไคลเอ็นต์ จับคู่ operationName ใน JSON หรือคิวรีที่มีชื่อ เว้นว่างเพื่อจับคู่ทุกการทำงานบน URL",
+ "bp.fromSelected": "จากเซสชันที่เลือก",
+ "bp.fromSelectedTip": "คัดลอกชื่อการทำงาน GraphQL จากคำขอของเซสชันที่เลือก",
+ "bp.graphqlHelp": "เว้นช่อง GraphQL ว่างไว้เพื่อจับคู่ทุกการทำงาน กรอกช่อง (เช่น GetUser) เพื่อหยุดชั่วคราวเฉพาะคำขอไคลเอ็นต์นั้นบน URL ด้านบน การพักที่การตอบกลับยังคงใช้ตัวกรอง URL",
+ "bp.editWatermark": "แก้ไขเนื้อหา (ใช้การแก้ไขเนื้อหา แล้วดำเนินการต่อ)",
+ "bp.applyEdit": "ใช้การแก้ไขเนื้อหา",
+ "bp.continue": "ดำเนินการต่อ",
+ "bp.abort": "ยกเลิก",
+ "ar.help": "ส่งการตอบกลับปลอมก่อนถึงเซิร์ฟเวอร์จริง การจับคู่กำหนดว่ากฎใช้กับคำขอไคลเอ็นต์ใด ช่องด้านล่างนั้นคือสิ่งที่คุณส่งกลับ",
+ "ar.enabled": "เปิดใช้ (ก่อนจุดพัก)",
+ "ar.urlWatermark": "จับคู่ URL (อักขระตัวแทน *)",
+ "ar.graphqlHelp": "URL เดียวกัน การทำงาน GraphQL คนละแบบใช้กฎคนละชุดได้ เว้นว่างเพื่อจับคู่ทุกการทำงาน",
+ "ar.respondWith": "ตอบกลับด้วย",
+ "ar.statusTip": "สถานะ HTTP ว่าง = 200 ใช้ 100–599",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "ไฟล์ Map Local (ไม่บังคับ)",
+ "ar.bodyWatermark": "เนื้อหาการตอบกลับ (ใช้เมื่อ Map Local ว่าง)",
+ "ar.add": "เพิ่มกฎ",
+ "ar.update": "อัปเดตกฎ",
+ "ar.delete": "ลบกฎ",
+ "script.intro": "หนึ่งคำสั่งต่อบรรทัด ในทุกเซสชันที่ดักจับได้ นี่ไม่ใช่ JavaScript หรือ C# — พิมพ์เฉพาะคำสั่งด้านล่าง",
+ "script.what": "สิ่งที่พิมพ์ได้",
+ "script.setHeaderHelp": "เพิ่มหรือแทนที่ส่วนหัว การจราจรยังคงไปที่เซิร์ฟเวอร์",
+ "script.setStatusHelp": "ฝั่งคำขอ: ตอบทันทีและข้ามเซิร์ฟเวอร์ ฝั่งการตอบกลับ: เปลี่ยนสถานะที่ไคลเอ็นต์เห็น",
+ "script.abortHelp": "บล็อกด้วย 403 Forbidden เพิ่มบรรทัด set-status เพื่อเลือกรหัสอื่น",
+ "script.comment": "ขึ้นต้นบรรทัดด้วย # หรือ // เพื่อเป็นหมายเหตุ รวมคำสั่งได้ โดยใส่แต่ละคำสั่งคนละบรรทัด",
+ "script.onRequest": "ฝั่งคำขอ",
+ "script.onResponse": "ฝั่งการตอบกลับ",
+ "script.requestSkips": "abort หรือ set-status ที่นี่จะข้าม AutoResponder จุดพัก และต้นทาง",
+ "map.help": "เขียนคำขอไคลเอ็นต์ที่ตรงกันใหม่ไปยังต้นทางอื่นก่อนถึงเซิร์ฟเวอร์จริง ใช้ * ตัวเดียวในการจับคู่และเป้าหมายเพื่อคงส่วนต่อท้ายของเส้นทาง/คิวรี ทำงานหลัง AutoResponder / Map Local",
+ "map.graphqlHelp": "เว้นว่างเพื่อเขียนใหม่ทุกการทำงานบน URL กรอกเพื่อเขียนใหม่เฉพาะการทำงาน GraphQL นั้น",
+ "map.rewriteTo": "เขียนใหม่ไปที่",
+ "map.targetWatermark": "URL เป้าหมาย (สัมบูรณ์, * ไม่บังคับ)",
+ "loopback.allow": "อนุญาต",
+ "loopback.appName": "ชื่อแอป",
+ "loopback.packageId": "รหัสแพ็กเกจ",
+ "status.ready": "พร้อม",
+ "status.searchingBodies": "กำลังค้นหาเนื้อหา…",
+ "status.proxyStopped": "พร็อกซีหยุดแล้ว",
+ "status.proxyRunning": "พร็อกซีกำลังทำงานที่ {0}",
+ "trust.health.trusted": "CA ได้รับความเชื่อถือ",
+ "trust.health.untrusted": "CA ไม่ได้รับความเชื่อถือ"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.tr.json b/src/Titanium.Inspector/Localization/strings.tr.json
new file mode 100644
index 000000000..b22534752
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.tr.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Dosya",
+ "menu.exportAllHar": "Tüm HAR’ı dışa aktar…",
+ "menu.exportSelectedHar": "Seçili HAR’ı dışa aktar…",
+ "menu.importHar": "HAR içe aktar…",
+ "menu.exportAllArchive": "Tüm arşivi dışa aktar…",
+ "menu.exportSelectedArchive": "Seçili arşivi dışa aktar…",
+ "menu.importArchive": "Arşiv içe aktar…",
+ "menu.exit": "Çıkış",
+ "menu.capture": "Yakalama",
+ "menu.startProxy": "Ara sunucuyu başlat",
+ "menu.stopProxy": "Ara sunucuyu durdur",
+ "menu.capturing": "Yakalanıyor",
+ "menu.clearSessions": "Oturumları temizle",
+ "menu.removeSelected": "Seçilenleri kaldır",
+ "menu.autoStartCapture": "Yakalamayı otomatik başlat",
+ "menu.autoSystemProxy": "Başlangıçta sistem ara sunucusu",
+ "menu.decryptHttps": "HTTPS şifresini çöz",
+ "menu.systemProxy": "Sistem ara sunucusu",
+ "menu.captureLocal": "Yerel trafiği yakala",
+ "menu.allowStoreApps": "Mağaza uygulamalarına izin ver…",
+ "menu.installCa": "Kök CA’yı yükle (geçerli kullanıcı)",
+ "menu.removeCa": "Kök CA’yı kaldır (geçerli kullanıcı)",
+ "menu.rotateCa": "Kök CA’yı temizle ve yeniden yükle…",
+ "menu.removeOldCas": "Eski kök CA’ları kaldır…",
+ "menu.exportCa": "Kök CA’yı dışa aktar…",
+ "menu.trustFirefox": "Firefox’ta CA’ya güven…",
+ "menu.deviceCa": "Dış cihaz CA’sını ayarla",
+ "menu.tools": "Araçlar",
+ "menu.composer": "Oluşturucu…",
+ "menu.breakpoints": "Kesme noktaları…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Betikler…",
+ "menu.mapRemote": "Uzak eşleme…",
+ "menu.options": "Seçenekler",
+ "menu.theme": "Tema",
+ "menu.themeLight": "Açık",
+ "menu.themeDark": "Koyu",
+ "menu.themeAutomatic": "Otomatik",
+ "menu.language": "Dil",
+ "menu.languageAutomatic": "Otomatik",
+ "menu.columns": "Sütunlar",
+ "menu.col.id": "Kimlik",
+ "menu.col.method": "Yöntem",
+ "menu.col.status": "Durum",
+ "menu.col.host": "Ana bilgisayar",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Protokol",
+ "menu.col.duration": "Süre",
+ "menu.col.ttfb": "Bekleme (TTFB)",
+ "menu.col.size": "Boyut",
+ "menu.col.process": "İşlem",
+ "menu.col.started": "Başlangıç",
+ "menu.col.scheme": "Şema",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Sütunları sıfırla",
+ "menu.sessionRetention": "Oturum saklama…",
+ "menu.excludedHosts": "Hariç tutulan ana bilgisayarlar…",
+ "menu.excludedHostsTip": "HTTPS şifre çözme atlama listeleri ve işletim sistemi atlama kuralları",
+ "menu.ignoreCerts": "Güvenli olmayan sunucu sertifikalarını yoksay",
+ "menu.addVia": "Via üst bilgisi ekle",
+ "menu.addViaTip": "Yakalanan trafiğe Via: … titanium-web-proxy ekler (RFC 9110). Kapatıldığında ekleme ve Via döngüsü algılama devre dışı kalır.",
+ "menu.logging": "Günlük kaydı…",
+ "menu.resetSettings": "Inspector ayarlarını sıfırla…",
+ "menu.help": "Yardım",
+ "menu.checkUpdates": "Güncelleştirmeleri denetle…",
+ "menu.checkUpdatesStartup": "Başlangıçta güncelleştirmeleri denetle",
+ "menu.updateChannel": "Güncelleştirme kanalı",
+ "menu.channelStable": "Kararlı",
+ "menu.channelBeta": "Beta",
+ "menu.about": "Titanium Inspector hakkında…",
+ "toolbar.searchWatermark": "URL, ana bilgisayar, işlem ara… (veya method:GET status:4xx)",
+ "toolbar.searchTip": "Düz metin URL, ana bilgisayar, işlem adı, tam işlem kimliği, yöntem ve durumu arar. Önekler aramayı tek alanla sınırlar: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: diske dökülen gövdeleri de arar. Bir alanı veya sözcüğü dışlamak için başına - koyun (ör. -host:cursor.sh veya -cursor). Filtreler, gizli ana bilgisayarları ve işlemleri daha geniş bir alanda düzenler.",
+ "toolbar.filters": "Filtreler",
+ "toolbar.filtersTip": "Aramayı ve gizli ana bilgisayarları veya işlemleri daha büyük bir pencerede düzenle",
+ "toolbar.hideConnect": "CONNECT’i gizle",
+ "toolbar.hideConnectTip": "HTTPS şifre çözme kapalıyken opak HTTPS tünellerini gizle",
+ "toolbar.hideImages": "Görüntüleri gizle",
+ "toolbar.errorsOnly": "Yalnızca hatalar",
+ "toolbar.clearFilters": "Filtreleri temizle",
+ "toolbar.hidden": "Gizli",
+ "ctx.replay": "Yeniden gönder",
+ "ctx.loadComposer": "Oluşturucuya yükle",
+ "ctx.saveRequest": "İstek gövdesini kaydet…",
+ "ctx.saveResponse": "Yanıt gövdesini kaydet…",
+ "ctx.copyUrl": "URL’yi kopyala",
+ "ctx.copyCurl": "curl olarak kopyala",
+ "ctx.copyFetch": "fetch olarak kopyala",
+ "ctx.diff": "Seçilenleri karşılaştır…",
+ "ctx.filterHost": "Ana bilgisayara göre filtrele",
+ "ctx.hideHost": "Ana bilgisayarı gizle",
+ "ctx.filterProcess": "İşleme göre filtrele",
+ "ctx.hideProcess": "İşlemi gizle",
+ "ctx.excludeHost": "Ana bilgisayarı hariç tut…",
+ "ctx.excludeHostTip": "Bu ana bilgisayarın HTTPS şifresini çözmeyi durdur. Satırlar listede kalır; görünümden kaldırmak için Ana bilgisayarı gizle’yi kullanın.",
+ "grid.duration": "Süre (ms)",
+ "grid.wait": "Bekleme (ms)",
+ "pane.inspect": "İncele",
+ "pane.composer": "Oluşturucu",
+ "pane.breakpoints": "Kesme noktaları",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Betikler",
+ "pane.mapRemote": "Uzak eşleme",
+ "pane.closeTip": "Bölmeyi kapat",
+ "inspect.empty": "İstek ve yanıt üst bilgileri ile gövdelerini incelemek için kılavuzdan bir oturum seçin.",
+ "common.ok": "Tamam",
+ "common.cancel": "İptal",
+ "common.save": "Kaydet",
+ "common.apply": "Uygula",
+ "common.remove": "Kaldır",
+ "common.browse": "Gözat…",
+ "common.openFolder": "Klasörü aç",
+ "common.forget": "Unut",
+ "common.close": "Kapat",
+ "loopback.window": "Mağaza uygulamalarının bu ara sunucuyu kullanmasına izin ver",
+ "loopback.checkAll": "Tümünü işaretle",
+ "loopback.uncheckAll": "Tüm işaretleri kaldır",
+ "loopback.filterWatermark": "Uygulama adına göre filtrele…",
+ "loopback.clearAll": "Tümünü temizle",
+ "trust.macWindow": "Keychain Access’te güveni onayla",
+ "trust.openKeychain": "Keychain Access’i aç",
+ "trust.notNow": "Şimdi değil",
+ "trust.recoveryTitle": "Kök CA güveni",
+ "trust.macWaitPlaceholder": "SSL güveni bekleniyor…",
+ "window.about": "Titanium Inspector hakkında",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Telif hakkı © Jehonathan Thomas",
+ "about.license": "PolyForm Noncommercial License 1.0.0 kapsamında lisanslanmıştır.",
+ "about.licenseLink": "Lisans ayrıntıları",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Filtreler",
+ "filters.search": "Ara",
+ "filters.searchHelp": "Araç çubuğuyla aynı arama, daha geniş alanda. Gizli ana bilgisayarlar ve işlemler bu kutuda değil, aşağıda listelenir.",
+ "filters.searchWatermark": "URL, ana bilgisayar, işlem, method:GET, status:4xx…",
+ "filters.hideHeading": "Listeden gizle",
+ "filters.hideHelp": "Satırlar yakalanmış olarak kalır. Bu yalnızca onları listede gizler. HTTPS şifresini çözmeyi durdurmak için Ana bilgisayarı hariç tut… seçeneğini kullanın.",
+ "filters.hosts": "Ana bilgisayarlar",
+ "filters.addHostWatermark": "Gizlenecek ana bilgisayar ekle",
+ "filters.addHost": "Ana bilgisayar ekle",
+ "filters.processes": "İşlemler",
+ "filters.addProcessWatermark": "Gizlenecek işlem ekle",
+ "filters.addProcess": "İşlem ekle",
+ "filters.processSpace": "Boşluk içeren bir ad ilk sözcükte kısaltılır; bu, o sözcüğü içeren başka adları da gizleyebilir.",
+ "window.confirm": "Onay",
+ "window.excludeHost": "Ana bilgisayarı hariç tut",
+ "exclude.action": "Hariç tut",
+ "exclude.help": "Bu ana bilgisayar oturum listesinde görünmeye devam eder. Inspector, onun HTTPS içeriğini okumaya çalışmaz.",
+ "window.logging": "Günlük kaydı",
+ "logging.help": "Sorun giderme için tanı iletileri yazın. Değişiklikler hemen uygulanır.",
+ "logging.enable": "Günlük kaydını etkinleştir",
+ "logging.writeFile": "Günlüğü bir dosyaya yaz",
+ "logging.detail": "Ayrıntı düzeyi",
+ "logging.detailHelp": "Error = yalnızca sorunlar. Warning / Information = daha fazla bağlam. Debug = çok ayrıntılı.",
+ "logging.path": "Günlük dosyası yolu",
+ "window.excludedHosts": "Hariç tutulan ana bilgisayarlar",
+ "excluded.reset": "Varsayılanlara sıfırla",
+ "excluded.bypass": "Ara sunucuyu atla (işletim sistemi)",
+ "excluded.bypassHelp": "Sistem ara sunucusu açıkken trafik Inspector’a hiç ulaşmaz. Başlangıçta Microsoft identity / SSO / RDP ana bilgisayarları eklenir. Bunları kaldırmak, sistem ara sunucusu açıkken RDP oturum açmayı bozabilir.",
+ "excluded.notDecrypted": "Şifresi çözülmeyen ana bilgisayarlar",
+ "excluded.notDecryptedHelp": "CONNECT görünür kalır; HTTPS şifre çözme açıkken TLS opak kalır. Başlangıçta sertifika sabitlemesi kullanan ana bilgisayarlar eklenir (Dropbox, Webex).",
+ "excluded.learnHeading": "Şifre çözme başarısız olunca otomatik olarak çözme",
+ "excluded.learn": "Şifre çözme altında kaynak TLS’i başarısız olan ana bilgisayarları öğren",
+ "excluded.learnHelp": "Kaynak TLS şifre çözme altında tekrar tekrar başarısız olursa veya kaynak sunucu 403/429 döndürürse Inspector, bu oturumdaki sonraki bağlantılar için o ana bilgisayarın şifresini çözmeyi durdurur. Liste sınırlıdır ve siz yükseltmedikçe yeniden başlatınca unutulur.",
+ "excluded.learnPaused": "Öğrenme duraklatıldı — var olan girdiler unutulana kadar tutulur.",
+ "excluded.noneLearned": "Henüz öğrenilen ana bilgisayar yok.",
+ "excluded.promote": "Şifresi çözülmeyen ana bilgisayarlara yükselt",
+ "excluded.clearLearned": "Öğrenilenlerin tümünü temizle",
+ "window.retention": "Oturum saklama",
+ "retention.max": "Saklanacak en fazla oturum",
+ "retention.maxHelp": "Oturum listesinde kaç isteğin kalacağı. Bu sayı aşılınca en eski satırlar listeden çıkar ama Oturumları temizle veya disk alanı sınırı onları kaldırana kadar diskte kalır.",
+ "retention.cache": "Önbellek klasörü",
+ "retention.openCache": "Önbellek klasörünü aç",
+ "retention.clearCache": "Kayıtlı oturum önbelleğini temizle…",
+ "retention.advanced": "Gelişmiş",
+ "retention.disk": "Kayıtlı oturumlar için disk alanı (MB)",
+ "retention.diskHelp": "Diskteki tüm kayıtlı oturumlar için en fazla alan (tüm Inspector çalıştırmaları). Her çalıştırma zaman damgalı bir alt klasör kullanır; sınır aşılınca önce en eski HAR dosyaları silinir. Boş çalıştırma klasörleri kaldırılır.",
+ "loopback.intro": "Windows Store / UWP uygulamaları varsayılan olarak localhost erişiminden engellenir. Inspector kullanması gereken uygulamaları işaretleyin, sonra Uygula’ya basın. Uygula’dan sonra her uygulamayı yeniden başlatın (tamamen kapatın). Inspector çalışıyor olmalı ve sistem ara sunucusu açık olmalıdır. Tümünü temizle her izin girdisini kaldırır.",
+ "loopback.closedUnchanged": "Mağaza uygulamaları değişmedi.",
+ "loopback.proxyStopped": "Ara sunucuyu başlatın ve sistem ara sunucusunu açın. İkisi de açık olmadan Mağaza uygulamaları yakalanamaz.",
+ "loopback.systemProxyOff": "Sistem ara sunucusunu açın (Yakalama menüsü). İzin listesi Mağaza uygulamalarının yalnızca localhost’a ulaşmasını sağlar; yine de sistem ara sunucusunu izlerler.",
+ "loopback.refreshing": "Çalışan uygulamalar yeniden bağlansın diye sistem ara sunucusu yenileniyor…",
+ "loopback.unchangedCount": "İzin listesi zaten eşleşiyor: {0}.",
+ "loopback.allowed": "İzin verildi: {0}.",
+ "loopback.allowedRefreshed": " Çalışan uygulamalar yeniden bağlansın diye sistem ara sunucusu yenilendi. Trafik hâlâ görünmüyorsa uygulamayı tamamen kapatıp yeniden açın.",
+ "loopback.allowedProxyStopped": " Ara sunucuyu başlatın ve sistem ara sunucusunu açın, sonra uygulamayı tamamen kapatıp yeniden açın.",
+ "loopback.allowedSystemProxyOff": " Sistem ara sunucusunu açın, sonra uygulamayı tamamen kapatıp yeniden açın.",
+ "loopback.allowedReady": " Trafiği yakalamak için uygulamayı tamamen kapatıp yeniden açın.",
+ "loopback.clearedRefreshed": "Tüm geri döngü muafiyetleri temizlendi. Çalışan uygulamalar yeniden bağlansın diye sistem ara sunucusu yenilendi.",
+ "loopback.clearedReady": "Tüm geri döngü muafiyetleri temizlendi. Inspector kullanan her uygulamayı tamamen kapatıp yeniden açın.",
+ "loopback.cleared": "Tüm geri döngü muafiyetleri temizlendi.",
+ "trust.macWaitBody": "Keychain Access içindeki Bilgi Al penceresi, SSL ilkeleri kaydedilmemiş olsa bile Her Zaman Güven gösterebilir (Chrome ve Inspector CA’yı hâlâ güvenilmez sayar).\n\nKaydı zorlayın:\n1. Keychain Access → login → Sertifikalar → Titanium Root Certificate Authority öğesine çift tıklayın\n2. Güven’i genişletin\n3. Bu sertifika kullanılırken değerini Sistem Varsayılanlarını Kullan yapın, sonra yeniden Her Zaman Güven olarak değiştirin\n4. Bilgi Al’ı kapatın — bir parola istemi görmeniz gerekir; gerçek SSL güven ilkelerini bu yazar\n\nBu ilkeler algılandığında pencere kendiliğinden kapanır. Zaten kaydettiyseniz Her Zaman Güven’i kaydettim’e tıklayın.",
+ "trust.macWaitStatus": "Keychain içinde sertifika bekleniyor…",
+ "trust.macWaitInKeychain": "Kaydedilmiş SSL ilkeleri bekleniyor (Her Zaman Güven’i değiştirin, Bilgi Al’ı kapatın, parolayı girin)…",
+ "trust.macNotSaved": "Her Zaman Güven görünmesi yetmez — Sistem Varsayılanlarını Kullan → Her Zaman Güven olarak değiştirin, Bilgi Al’ı kapatın, parolanızı girin, sonra Kök CA’yı yükle / HTTPS şifresini çöz adımlarını yeniden deneyin",
+ "trust.macConfirmSaved": "Her Zaman Güven’i kaydettim",
+ "trust.exportCa": "CA’yı dışa aktar",
+ "trust.install.mac": "HTTPS şifresini çözmek, Titanium Inspector kök CA’sına Keychain Access’te (login anahtar zinciri) güvenilmesini gerektirir. Şimdi yüklensin mi?",
+ "trust.install.linux": "HTTPS şifresini çözmek, Titanium Inspector kök CA’sına kullanıcı sertifika deponuzda (NSS) güvenilmesini gerektirir. Şimdi yüklensin mi?",
+ "trust.install.windows": "HTTPS şifresini çözmek, Titanium Inspector kök CA’sına geçerli kullanıcının Güvenilen Kök deposunda güvenilmesini gerektirir. Şimdi yüklensin mi?\n\nWindows, Güvenilen Kök için bir Evet/Hayır güvenlik iletişim kutusu gösterebilir (UAC değil) — CA’ya güvenmek için Evet’i seçin.",
+ "trust.install.other": "HTTPS şifresini çözmek, bu bilgisayarda Titanium Inspector kök CA’sına güvenilmesini gerektirir. Şimdi yüklensin mi?",
+ "trust.remove.mac": "Titanium Inspector kök CA’sı Keychain’den kaldırılsın mı? HTTPS şifre çözme kapatılacak.",
+ "trust.remove.linux": "Titanium Inspector kök CA’sı kullanıcı sertifika deponuzdan (NSS) kaldırılsın mı? HTTPS şifre çözme kapatılacak.",
+ "trust.remove.windows": "Titanium Inspector kök CA’sı geçerli kullanıcının Güvenilen Kök deposundan kaldırılsın mı? HTTPS şifre çözme kapatılacak.",
+ "trust.remove.other": "Titanium Inspector kök CA’sı kaldırılsın mı? HTTPS şifre çözme kapatılacak.",
+ "trust.elevate.mac": "Kullanıcı düzeyinde güven başarısız oldu veya yetersiz kaldı. macOS yönetici parola istemi gösterilsin mi? İptal, sertifika ayarlarını değiştirmez.",
+ "trust.elevate.linux": "Kullanıcı düzeyinde güven başarısız oldu veya yetersiz kaldı. polkit yönetici istemi gösterilsin mi? İptal, sertifika ayarlarını değiştirmez.",
+ "trust.elevate.windows": "Kullanıcı düzeyinde güven başarısız oldu veya yetersiz kaldı. UAC gösterilsin mi? İptal, sertifika ayarlarını değiştirmez.",
+ "trust.elevate.other": "Kullanıcı düzeyinde güven başarısız oldu veya yetersiz kaldı. Yönetici istemiyle devam edilsin mi? İptal, sertifika ayarlarını değiştirmez.",
+ "trust.recovery.mac": "\n\nmacOS yönetici parola istemi gösterilsin mi? Şimdi değil, sertifika ayarlarını değiştirmez.",
+ "trust.recovery.linux": "\n\npolkit yönetici istemi gösterilsin mi? Şimdi değil, sertifika ayarlarını değiştirmez.",
+ "trust.recovery.windows": "\n\nUAC gösterilsin mi? Şimdi değil, sertifika ayarlarını değiştirmez.",
+ "trust.recovery.other": "\n\nYönetici istemiyle devam edilsin mi? Şimdi değil, sertifika ayarlarını değiştirmez.",
+ "trust.hosts.mac": "İşletim sistemi atlaması için Yakalama → Sistem ara sunucusu gerekir (macOS ağ ara sunucusu ayarlarını kullanır). Yalnızca tünel kuralları Inspector’a ulaşan her istemciye uygulanır. Fabrika varsayılanları aşağıdaki listelere yerleştirilmiştir — serbestçe düzenleyin veya sıfırlayın.",
+ "trust.hosts.linux": "İşletim sistemi atlaması için Yakalama → Sistem ara sunucusu gerekir (masaüstü / ortam ara sunucusu ayarlarını kullanır). Yalnızca tünel kuralları Inspector’a ulaşan her istemciye uygulanır. Fabrika varsayılanları aşağıdaki listelere yerleştirilmiştir — serbestçe düzenleyin veya sıfırlayın.",
+ "trust.hosts.windows": "İşletim sistemi atlaması için Yakalama → Sistem ara sunucusu gerekir (WinINET kullanır). Yalnızca tünel kuralları Inspector’a ulaşan her istemciye uygulanır. Fabrika varsayılanları aşağıdaki listelere yerleştirilmiştir — serbestçe düzenleyin veya sıfırlayın.",
+ "trust.hosts.other": "İşletim sistemi atlaması için Yakalama → Sistem ara sunucusu gerekir. Yalnızca tünel kuralları Inspector’a ulaşan her istemciye uygulanır. Fabrika varsayılanları aşağıdaki listelere yerleştirilmiştir — serbestçe düzenleyin veya sıfırlayın.",
+ "trust.localhost.mac": "Sistem ara sunucusu açıkken localhost’u Inspector üzerinden gönderin. Kapatıldığında localhost, macOS ara sunucu atlama listesine eklenir.",
+ "trust.localhost.linux": "Sistem ara sunucusu açıkken localhost’u Inspector üzerinden gönderin. Kapatıldığında localhost, NO_PROXY listesine eklenir.",
+ "trust.localhost.windows": "Sistem ara sunucusu açıkken localhost’u Inspector üzerinden gönderin (WinINET <-loopback>). Kapatıldığında geri döngü ara sunucuyu atlar.",
+ "trust.localhost.other": "Sistem ara sunucusu açıkken localhost’u Inspector üzerinden gönderin.",
+ "trust.status.missing": "Kök CA henüz güvenilir değil — yeniden deneyin veya CA’yı dışa aktarın",
+ "trust.status.cancelled": "Kök CA yüklemesi iptal edildi",
+ "trust.status.certutil": "Tarayıcı sertifika araçları eksik — yükleyin, yeniden deneyin veya CA’yı dışa aktarın",
+ "trust.status.homebrew": "Sertifika araçlarını yüklemek için Homebrew gerekir — elle güvenmek için CA’yı dışa aktarın",
+ "trust.status.macConfirm": "Keychain Access’te Titanium Inspector kök CA’sı için Her Zaman Güven ayarlayın",
+ "trust.status.keychain": "Keychain güveni başarısız oldu — yeniden deneyin veya CA’yı dışa aktarıp elle güvenin",
+ "trust.fail.keychainTitle": "Keychain’de güveni onayla",
+ "trust.fail.continueKeychain": "Keychain Access’te devam et",
+ "trust.fail.toolsTitle": "Sertifika araçları gerekli",
+ "trust.fail.toolsLinux": "Inspector’ın kök CA güvenini tamamlamak için certutil (NSS araçları) gerekir.",
+ "trust.fail.toolsOther": "Inspector’ın kök CA güvenini tamamlamak için tarayıcı sertifika araçları gerekir.",
+ "trust.fail.tryAgain": "Yeniden dene",
+ "trust.fail.homebrewBody": "Sertifika araçlarını yüklemek için Homebrew gerekir. Elle güvenmek için CA’yı dışa aktarın.",
+ "trust.fail.title": "HTTPS şifresi henüz çözülemiyor",
+ "trust.fail.body": "Titanium Inspector kök CA’sı bu bilgisayarda henüz güvenilir değil.",
+ "toolbar.throttle": "Kısıtlama",
+ "toolbar.throttleTip": "Yakalama sırasında gecikme ve bant genişliği şekillendirme ekleyin (gövde yazmaları / WebSocket çerçeveleri). Varsayılan olarak kapalı.",
+ "toolbar.bindWatermark": "*, localhost veya IP",
+ "toolbar.bindTip": "127.0.0.1 veya localhost = yalnızca bu bilgisayar. 0.0.0.0 veya * = tüm ağ bağdaştırıcıları (localhost dahil).",
+ "toolbar.portWatermark": "*, veya bağlantı noktası",
+ "toolbar.portTip": "* veya boş = işletim sisteminin seçtiği bağlantı noktası (gerçek bağlantı noktası başladıktan sonra görünür). Aksi halde 1–65535.",
+ "toolbar.listeningTip": "Ara sunucu dinliyor",
+ "toolbar.trustHealthTip": "HTTPS şifresini çöz için kök CA güven durumu. CA güvenilir değil görünüyorsa CA sertifikasını yükleyin veya güvenin.",
+ "chip.process": "işlem",
+ "inspect.request": "İstek",
+ "inspect.requestTip": "İstek üst bilgileri ve gövdesi",
+ "inspect.copyHeaders": "Üst bilgileri kopyala",
+ "inspect.resizeTip": "Yeniden boyutlandırmak için sürükleyin. Sıfırlamak için çift tıklayın.",
+ "inspect.pretty": "Biçimli",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Gövdeyi Hex dökümü olarak göster",
+ "inspect.saveRequest": "İsteği kaydet…",
+ "inspect.response": "Yanıt",
+ "inspect.responseTip": "Yanıt üst bilgileri ve gövdesi",
+ "inspect.saveResponse": "Yanıtı kaydet…",
+ "inspect.diff": "Fark",
+ "inspect.frames": "WS çerçeveleri",
+ "inspect.framesHelp": "Bu oturumun canlı WebSocket çerçeveleri (yön, opcode, veri önizlemesi).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Yanıt gövdesinden ayrıştırılan Server-Sent Events.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Üst bilgileri göster",
+ "inspect.hideHeaders": "Üst bilgileri gizle",
+ "inspect.headers": "Üst bilgiler ({0})",
+ "inspect.prettyTip": "JSON, XML ve HTML girintile",
+ "inspect.prettyHexTip": "Hex görünümünde uygulanamaz",
+ "inspect.emptyBody": "(boş)",
+ "inspect.noRequestBody": "İstek gövdesi yok",
+ "inspect.waiting": "Yanıt bekleniyor…",
+ "composer.help": "Ara sunucu üzerinden bir istek oluşturup gönderin. Seçilenden yükle geçerli oturumu kopyalar.",
+ "composer.method": "Yöntem",
+ "composer.url": "URL",
+ "composer.headers": "Üst bilgiler (her satırda Ad: Değer)",
+ "composer.body": "Gövde",
+ "composer.loadSelected": "Seçilenden yükle",
+ "composer.loadBody": "Gövdeyi dosyadan yükle…",
+ "composer.send": "Gönder",
+ "bp.help": "Eşleşen istemci isteklerini duraklatın; gövdeyi düzenleyin, devam edin veya sonlandırın. Aynı anda bir duraklatma; 120s sonra otomatik devam eder. Etkin işaretini kaldırmak duraklatılmış isteği devam ettirir.",
+ "bp.enabled": "Etkin",
+ "bp.breakOnResponse": "Yanıtta kes",
+ "bp.match": "Eşleşme",
+ "bp.urlWatermark": "URL süzgeci (* = tümü, örn. *api*/users*)",
+ "bp.graphqlWatermark": "Yalnızca bu GraphQL işlemi (isteğe bağlı)",
+ "bp.graphqlTip": "İstemci istek gövdesine ek süzgeç. JSON operationName alanına veya adlandırılmış bir sorguya uyar. Bu URL üzerindeki her işleme uyması için boş bırakın.",
+ "bp.fromSelected": "Seçili oturumdan",
+ "bp.fromSelectedTip": "GraphQL işlem adını seçili oturumun isteğinden kopyalayın.",
+ "bp.graphqlHelp": "Her işleme uyması için GraphQL kutusunu boş bırakın. Yalnızca yukarıdaki URL üzerindeki o istemci isteğini duraklatmak için doldurun (örn. GetUser). Yanıtta kes yine URL süzgecini kullanır.",
+ "bp.editWatermark": "Gövdeyi düzenle (Gövde düzenlemesini uygula, sonra Devam et)",
+ "bp.applyEdit": "Gövde düzenlemesini uygula",
+ "bp.continue": "Devam et",
+ "bp.abort": "Sonlandır",
+ "ar.help": "Gerçek sunucudan önce sahte bir yanıt döndürün. Eşleşme, kuralın hangi istemci isteklerine uygulanacağını belirler; altındaki alanlar geri gönderdiğiniz içeriktir.",
+ "ar.enabled": "Etkin (kesme noktalarından önce)",
+ "ar.urlWatermark": "URL eşleştir (* joker karakterler)",
+ "ar.graphqlHelp": "Aynı URL üzerinde farklı GraphQL işlemleri farklı kurallar kullanabilir. Her işleme uyması için boş bırakın.",
+ "ar.respondWith": "Şununla yanıtla",
+ "ar.statusTip": "HTTP durumu. Boş = 200. 100–599 kullanın.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local dosyası (isteğe bağlı)",
+ "ar.bodyWatermark": "Yanıt gövdesi (Map Local boşken kullanılır)",
+ "ar.add": "Kural ekle",
+ "ar.update": "Kuralı güncelle",
+ "ar.delete": "Kuralı sil",
+ "script.intro": "Yakalanan her oturumda satır başına bir komut. Bu JavaScript veya C# değildir — yalnızca aşağıdaki komutları yazın.",
+ "script.what": "Yazabilecekleriniz",
+ "script.setHeaderHelp": "Bir üst bilgi ekleyin veya değiştirin. Trafik sunucuya gitmeye devam eder.",
+ "script.setStatusHelp": "İstekte: hemen yanıtlayın ve sunucuyu atlayın. Yanıtta: istemcinin gördüğü durumu değiştirin.",
+ "script.abortHelp": "403 Yasak ile engelleyin. Farklı bir kod için bir set-status satırı ekleyin.",
+ "script.comment": "Yorum için satırı # veya // ile başlatın. Komutları birleştirebilirsiniz; her birini kendi satırına yazın.",
+ "script.onRequest": "İstekte",
+ "script.onResponse": "Yanıtta",
+ "script.requestSkips": "Buradaki abort veya set-status şunları atlar: AutoResponder, kesme noktaları ve kaynak.",
+ "map.help": "Eşleşen istemci isteklerini gerçek sunucudan önce başka bir kaynağa yeniden yazın. Yol veya sorgu sonekini korumak için eşleşmede ve hedefte tek bir * kullanın. AutoResponder / Map Local sonrasında çalışır.",
+ "map.graphqlHelp": "Bu URL üzerindeki her işlemi yeniden yazmak için boş bırakın. Yalnızca o GraphQL işlemini yeniden yazmak için doldurun.",
+ "map.rewriteTo": "Şuna yeniden yaz",
+ "map.targetWatermark": "Hedef URL (mutlak, isteğe bağlı *)",
+ "loopback.allow": "İzin ver",
+ "loopback.appName": "Uygulama adı",
+ "loopback.packageId": "Paket kimliği",
+ "status.ready": "Hazır",
+ "status.searchingBodies": "Gövdeler aranıyor…",
+ "status.proxyStopped": "Ara sunucu durduruldu",
+ "status.proxyRunning": "Ara sunucu şurada çalışıyor: {0}",
+ "trust.health.trusted": "CA güvenilir",
+ "trust.health.untrusted": "CA güvenilir değil"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.uk.json b/src/Titanium.Inspector/Localization/strings.uk.json
new file mode 100644
index 000000000..44503ac5f
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.uk.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Файл",
+ "menu.exportAllHar": "Експортувати всі HAR…",
+ "menu.exportSelectedHar": "Експортувати вибрані HAR…",
+ "menu.importHar": "Імпортувати HAR…",
+ "menu.exportAllArchive": "Експортувати весь архів…",
+ "menu.exportSelectedArchive": "Експортувати вибраний архів…",
+ "menu.importArchive": "Імпортувати архів…",
+ "menu.exit": "Вихід",
+ "menu.capture": "Захоплення",
+ "menu.startProxy": "Запустити проксі",
+ "menu.stopProxy": "Зупинити проксі",
+ "menu.capturing": "Триває захоплення",
+ "menu.clearSessions": "Очистити сеанси",
+ "menu.removeSelected": "Видалити вибране",
+ "menu.autoStartCapture": "Автозапуск захоплення",
+ "menu.autoSystemProxy": "Системний проксі під час запуску",
+ "menu.decryptHttps": "Розшифровувати HTTPS",
+ "menu.systemProxy": "Системний проксі",
+ "menu.captureLocal": "Захоплювати локальний трафік",
+ "menu.allowStoreApps": "Дозволити програмам крамниці…",
+ "menu.installCa": "Встановити кореневий CA (поточний користувач)",
+ "menu.removeCa": "Видалити кореневий CA (поточний користувач)",
+ "menu.rotateCa": "Очистити й перевстановити кореневий CA…",
+ "menu.removeOldCas": "Видалити старі кореневі CA…",
+ "menu.exportCa": "Експортувати кореневий CA…",
+ "menu.trustFirefox": "Довіряти CA у Firefox…",
+ "menu.deviceCa": "Налаштувати CA зовнішнього пристрою",
+ "menu.tools": "Інструменти",
+ "menu.composer": "Компонувальник…",
+ "menu.breakpoints": "Точки зупину…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Скрипти…",
+ "menu.mapRemote": "Віддалене зіставлення…",
+ "menu.options": "Параметри",
+ "menu.theme": "Тема",
+ "menu.themeLight": "Світла",
+ "menu.themeDark": "Темна",
+ "menu.themeAutomatic": "Автоматично",
+ "menu.language": "Мова",
+ "menu.languageAutomatic": "Автоматично",
+ "menu.columns": "Стовпці",
+ "menu.col.id": "Ід",
+ "menu.col.method": "Метод",
+ "menu.col.status": "Стан",
+ "menu.col.host": "Хост",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Протокол",
+ "menu.col.duration": "Тривалість",
+ "menu.col.ttfb": "Очікування (TTFB)",
+ "menu.col.size": "Розмір",
+ "menu.col.process": "Процес",
+ "menu.col.started": "Початок",
+ "menu.col.scheme": "Схема",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Скинути стовпці",
+ "menu.sessionRetention": "Зберігання сеансів…",
+ "menu.excludedHosts": "Виключені хости…",
+ "menu.excludedHostsTip": "Списки пропуску розшифрування HTTPS і правила обходу ОС",
+ "menu.ignoreCerts": "Ігнорувати небезпечні сертифікати сервера",
+ "menu.addVia": "Додавати заголовок Via",
+ "menu.addViaTip": "Додавати Via: … titanium-web-proxy до перехопленого трафіку (RFC 9110). Вимкнення вимикає додавання та виявлення циклів Via.",
+ "menu.logging": "Журналювання…",
+ "menu.resetSettings": "Скинути налаштування Inspector…",
+ "menu.help": "Довідка",
+ "menu.checkUpdates": "Перевірити оновлення…",
+ "menu.checkUpdatesStartup": "Перевіряти оновлення під час запуску",
+ "menu.updateChannel": "Канал оновлень",
+ "menu.channelStable": "Стабільний",
+ "menu.channelBeta": "Бета",
+ "menu.about": "Про Titanium Inspector…",
+ "toolbar.searchWatermark": "Пошук URL, хоста, процесу… (або method:GET status:4xx)",
+ "toolbar.searchTip": "Звичайний текст шукає URL, хост, ім’я процесу, точний ідентифікатор процесу, метод і стан. Префікси обмежують пошук одним полем: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: також шукає тіла, скинуті на диск. Поставте - перед полем або словом, щоб виключити його (наприклад, -host:cursor.sh або -cursor). «Фільтри» змінюють приховані хости й процеси та дають більше місця.",
+ "toolbar.filters": "Фільтри",
+ "toolbar.filtersTip": "Змінити пошук і приховані хости або процеси у більшому вікні",
+ "toolbar.hideConnect": "Сховати CONNECT",
+ "toolbar.hideConnectTip": "Ховати непрозорі тунелі HTTPS, коли розшифрування HTTPS вимкнено",
+ "toolbar.hideImages": "Сховати зображення",
+ "toolbar.errorsOnly": "Лише помилки",
+ "toolbar.clearFilters": "Скинути фільтри",
+ "toolbar.hidden": "Сховано",
+ "ctx.replay": "Повторити",
+ "ctx.loadComposer": "Завантажити в компонувальник",
+ "ctx.saveRequest": "Зберегти тіло запиту…",
+ "ctx.saveResponse": "Зберегти тіло відповіді…",
+ "ctx.copyUrl": "Копіювати URL",
+ "ctx.copyCurl": "Копіювати як curl",
+ "ctx.copyFetch": "Копіювати як fetch",
+ "ctx.diff": "Порівняти вибране…",
+ "ctx.filterHost": "Фільтр за хостом",
+ "ctx.hideHost": "Сховати хост",
+ "ctx.filterProcess": "Фільтр за процесом",
+ "ctx.hideProcess": "Сховати процес",
+ "ctx.excludeHost": "Виключити хост…",
+ "ctx.excludeHostTip": "Припинити розшифрування HTTPS цього хоста. Рядки лишаються в списку; щоб прибрати їх з огляду, скористайтеся «Сховати хост».",
+ "grid.duration": "Тривалість (мс)",
+ "grid.wait": "Очікування (мс)",
+ "pane.inspect": "Перегляд",
+ "pane.composer": "Компонувальник",
+ "pane.breakpoints": "Точки зупину",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Скрипти",
+ "pane.mapRemote": "Віддалене зіставлення",
+ "pane.closeTip": "Закрити панель",
+ "inspect.empty": "Виберіть сеанс у таблиці, щоб переглянути заголовки й тіла запиту та відповіді.",
+ "common.ok": "ОК",
+ "common.cancel": "Скасувати",
+ "common.save": "Зберегти",
+ "common.apply": "Застосувати",
+ "common.remove": "Видалити",
+ "common.browse": "Огляд…",
+ "common.openFolder": "Відкрити папку",
+ "common.forget": "Забути",
+ "common.close": "Закрити",
+ "loopback.window": "Дозволити програмам крамниці використовувати цей проксі",
+ "loopback.checkAll": "Позначити всі",
+ "loopback.uncheckAll": "Зняти всі позначки",
+ "loopback.filterWatermark": "Фільтр за назвою програми…",
+ "loopback.clearAll": "Очистити все",
+ "trust.macWindow": "Підтвердьте довіру в Keychain Access",
+ "trust.openKeychain": "Відкрити Keychain Access",
+ "trust.notNow": "Не зараз",
+ "trust.recoveryTitle": "Довіра до кореневого CA",
+ "trust.macWaitPlaceholder": "Очікування довіри SSL…",
+ "window.about": "Про Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Авторське право © Jehonathan Thomas",
+ "about.license": "Ліцензовано згідно з PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Подробиці ліцензії",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Фільтри",
+ "filters.search": "Пошук",
+ "filters.searchHelp": "Той самий пошук, що на панелі інструментів, але з більшим місцем. Приховані хости й процеси перелічено нижче, а не в цьому полі.",
+ "filters.searchWatermark": "URL, хост, процес, method:GET, status:4xx…",
+ "filters.hideHeading": "Сховати зі списку",
+ "filters.hideHelp": "Рядки лишаються захопленими. Це лише ховає їх у списку. Щоб припинити розшифрування HTTPS, скористайтеся «Виключити хост…».",
+ "filters.hosts": "Хости",
+ "filters.addHostWatermark": "Додати хост, який треба сховати",
+ "filters.addHost": "Додати хост",
+ "filters.processes": "Процеси",
+ "filters.addProcessWatermark": "Додати процес, який треба сховати",
+ "filters.addProcess": "Додати процес",
+ "filters.processSpace": "Ім’я з пробілом скорочується до першого слова, через що можуть сховатися й інші імена, які містять це слово.",
+ "window.confirm": "Підтвердження",
+ "window.excludeHost": "Виключити хост",
+ "exclude.action": "Виключити",
+ "exclude.help": "Цей хост і далі буде в списку сеансів. Inspector не намагатиметься читати його HTTPS.",
+ "window.logging": "Журналювання",
+ "logging.help": "Записувати діагностичні повідомлення для усунення несправностей. Зміни застосовуються одразу.",
+ "logging.enable": "Увімкнути журналювання",
+ "logging.writeFile": "Записувати журнал у файл",
+ "logging.detail": "Рівень подробиць",
+ "logging.detailHelp": "Error = лише проблеми. Warning / Information = більше контексту. Debug = дуже докладно.",
+ "logging.path": "Шлях до файлу журналу",
+ "window.excludedHosts": "Виключені хости",
+ "excluded.reset": "Скинути до типових",
+ "excluded.bypass": "Обхід проксі (ОС)",
+ "excluded.bypassHelp": "Трафік не доходить до Inspector, коли ввімкнено системний проксі. Спочатку внесено хости Microsoft identity / SSO / RDP. Їх видалення може зламати вхід через RDP, доки системний проксі ввімкнено.",
+ "excluded.notDecrypted": "Хости без розшифрування",
+ "excluded.notDecryptedHelp": "CONNECT лишається видимим; TLS лишається непрозорим, коли розшифрування HTTPS увімкнено. Спочатку внесено хости із закріпленням сертифіката (Dropbox, Webex).",
+ "excluded.learnHeading": "Автоматично не розшифровувати в разі збою розшифрування",
+ "excluded.learn": "Запам’ятовувати хости, у яких вихідний TLS не проходить під час розшифрування",
+ "excluded.learnHelp": "Якщо вихідний TLS неодноразово не проходить під час розшифрування або вихідний сервер повертає 403/429, Inspector припиняє розшифрування цього хоста для подальших з’єднань у цьому сеансі. Список обмежений і забувається під час перезапуску, доки ви не перенесете запис.",
+ "excluded.learnPaused": "Навчання призупинено — наявні записи зберігаються, доки їх не забудуть.",
+ "excluded.noneLearned": "Ще немає запам’ятованих хостів.",
+ "excluded.promote": "Перенести до хостів без розшифрування",
+ "excluded.clearLearned": "Очистити всі запам’ятовані",
+ "window.retention": "Зберігання сеансів",
+ "retention.max": "Максимум сеансів, які зберігати",
+ "retention.maxHelp": "Скільки запитів лишається в списку сеансів. Після перевищення найстаріші рядки зникають зі списку, але лишаються на диску, доки їх не видалить «Очистити сеанси» або обмеження місця на диску.",
+ "retention.cache": "Папка кешу",
+ "retention.openCache": "Відкрити папку кешу",
+ "retention.clearCache": "Очистити збережений кеш сеансів…",
+ "retention.advanced": "Додатково",
+ "retention.disk": "Місце на диску для збережених сеансів (MB)",
+ "retention.diskHelp": "Максимальне місце для всіх збережених сеансів на диску (усі запуски Inspector). Кожен запуск використовує підпапку з позначкою часу; після перевищення спочатку видаляються найстаріші файли HAR. Порожні папки запусків видаляються.",
+ "loopback.intro": "Програми Windows Store та UWP за замовчуванням не можуть звертатися до localhost. Позначте програми, які мають використовувати Inspector, і натисніть «Застосувати». Після «Застосувати» перезапустіть кожну програму (повністю завершіть її). Inspector має працювати, і системний проксі має бути ввімкнено. «Очистити все» видаляє всі дозволи.",
+ "loopback.closedUnchanged": "Програми крамниці не змінено.",
+ "loopback.proxyStopped": "Запустіть проксі й увімкніть системний проксі. Програми крамниці не можна захоплювати, доки не ввімкнено і те, і те.",
+ "loopback.systemProxyOff": "Увімкніть системний проксі (меню «Захоплення»). Список дозволів лише дає програмам крамниці доступ до localhost; вони й далі йдуть за системним проксі.",
+ "loopback.refreshing": "Оновлення системного проксі, щоб запущені програми перепідключилися…",
+ "loopback.unchangedCount": "Список дозволів уже збігається: {0}.",
+ "loopback.allowed": "Дозволено: {0}.",
+ "loopback.allowedRefreshed": " Системний проксі оновлено, щоб запущені програми перепідключилися. Якщо трафік і далі не з’являється, повністю завершіть програму й відкрийте її знову.",
+ "loopback.allowedProxyStopped": " Запустіть проксі й увімкніть системний проксі, потім повністю завершіть програму й відкрийте її знову.",
+ "loopback.allowedSystemProxyOff": " Увімкніть системний проксі, потім повністю завершіть програму й відкрийте її знову.",
+ "loopback.allowedReady": " Повністю завершіть програму й відкрийте її знову, щоб захоплювати трафік.",
+ "loopback.clearedRefreshed": "Усі винятки замикання на себе знято. Системний проксі оновлено, щоб запущені програми перепідключилися.",
+ "loopback.clearedReady": "Усі винятки замикання на себе знято. Повністю завершіть і знову відкрийте будь-яку програму, яка використовувала Inspector.",
+ "loopback.cleared": "Усі винятки замикання на себе знято.",
+ "trust.macWaitBody": "Вікно «Інформація» в Keychain Access може вже показувати «Завжди довіряти», навіть якщо політики SSL не збережено (Chrome та Inspector і далі вважають CA недовіреним).\n\nПримусово збережіть:\n1. Keychain Access → login → Сертифікати → двічі клацніть Titanium Root Certificate Authority\n2. Розгорніть розділ «Довіра»\n3. Для пункту «Під час використання цього сертифіката» виберіть «Використовувати системні параметри за замовчуванням», а потім знову змініть його на «Завжди довіряти»\n4. Закрийте «Інформація» — має з’явитися запит пароля; саме він записує справжні політики довіри SSL\n\nЦе вікно закриється автоматично, коли ці політики буде виявлено. Якщо ви вже зберегли, натисніть «Я зберіг «Завжди довіряти»».",
+ "trust.macWaitStatus": "Очікування сертифіката в Keychain…",
+ "trust.macWaitInKeychain": "Очікування збережених політик SSL (перемкніть «Завжди довіряти», закрийте «Інформація», введіть пароль)…",
+ "trust.macNotSaved": "Показу «Завжди довіряти» недостатньо — перемкніть «Використовувати системні параметри за замовчуванням» → «Завжди довіряти», закрийте «Інформація», введіть пароль, а потім знову виконайте «Встановити кореневий CA» / «Розшифровувати HTTPS»",
+ "trust.macConfirmSaved": "Я зберіг «Завжди довіряти»",
+ "trust.exportCa": "Експортувати CA",
+ "trust.install.mac": "Для розшифрування HTTPS потрібно довіряти кореневому CA Titanium Inspector у Keychain Access (зв’язка login). Встановити зараз?",
+ "trust.install.linux": "Для розшифрування HTTPS потрібно довіряти кореневому CA Titanium Inspector у сховищі сертифікатів користувача (NSS). Встановити зараз?",
+ "trust.install.windows": "Для розшифрування HTTPS потрібно довіряти кореневому CA Titanium Inspector у сховищі довірених кореневих центрів поточного користувача. Встановити зараз?\n\nWindows може показати діалог безпеки «Так/Ні» для довіреного кореня (це не UAC) — виберіть «Так», щоб довіряти CA.",
+ "trust.install.other": "Для розшифрування HTTPS потрібно довіряти кореневому CA Titanium Inspector на цьому комп’ютері. Встановити зараз?",
+ "trust.remove.mac": "Видалити кореневий CA Titanium Inspector із Keychain? Розшифрування HTTPS буде вимкнено.",
+ "trust.remove.linux": "Видалити кореневий CA Titanium Inspector зі сховища сертифікатів користувача (NSS)? Розшифрування HTTPS буде вимкнено.",
+ "trust.remove.windows": "Видалити кореневий CA Titanium Inspector зі сховища довірених кореневих центрів поточного користувача? Розшифрування HTTPS буде вимкнено.",
+ "trust.remove.other": "Видалити кореневий CA Titanium Inspector? Розшифрування HTTPS буде вимкнено.",
+ "trust.elevate.mac": "Довіра на рівні користувача не вдалася або її недостатньо. Продовжити й показати запит пароля адміністратора macOS? «Скасувати» залишає налаштування сертифікатів без змін.",
+ "trust.elevate.linux": "Довіра на рівні користувача не вдалася або її недостатньо. Продовжити й показати запит адміністратора polkit? «Скасувати» залишає налаштування сертифікатів без змін.",
+ "trust.elevate.windows": "Довіра на рівні користувача не вдалася або її недостатньо. Продовжити й показати UAC? «Скасувати» залишає налаштування сертифікатів без змін.",
+ "trust.elevate.other": "Довіра на рівні користувача не вдалася або її недостатньо. Продовжити із запитом адміністратора? «Скасувати» залишає налаштування сертифікатів без змін.",
+ "trust.recovery.mac": "\n\nПродовжити й показати запит пароля адміністратора macOS? «Не зараз» залишає налаштування сертифікатів без змін.",
+ "trust.recovery.linux": "\n\nПродовжити й показати запит адміністратора polkit? «Не зараз» залишає налаштування сертифікатів без змін.",
+ "trust.recovery.windows": "\n\nПродовжити й показати UAC? «Не зараз» залишає налаштування сертифікатів без змін.",
+ "trust.recovery.other": "\n\nПродовжити із запитом адміністратора? «Не зараз» залишає налаштування сертифікатів без змін.",
+ "trust.hosts.mac": "Для обходу ОС потрібне меню «Захоплення» → «Системний проксі» (використовуються мережеві параметри проксі macOS). Правила лише для тунелю діють для кожного клієнта, який звертається до Inspector. Заводські типові значення вже внесено до списків нижче — редагуйте їх вільно або скиньте.",
+ "trust.hosts.linux": "Для обходу ОС потрібне меню «Захоплення» → «Системний проксі» (використовуються параметри проксі стільниці та середовища). Правила лише для тунелю діють для кожного клієнта, який звертається до Inspector. Заводські типові значення вже внесено до списків нижче — редагуйте їх вільно або скиньте.",
+ "trust.hosts.windows": "Для обходу ОС потрібне меню «Захоплення» → «Системний проксі» (використовується WinINET). Правила лише для тунелю діють для кожного клієнта, який звертається до Inspector. Заводські типові значення вже внесено до списків нижче — редагуйте їх вільно або скиньте.",
+ "trust.hosts.other": "Для обходу ОС потрібне меню «Захоплення» → «Системний проксі». Правила лише для тунелю діють для кожного клієнта, який звертається до Inspector. Заводські типові значення вже внесено до списків нижче — редагуйте їх вільно або скиньте.",
+ "trust.localhost.mac": "Коли системний проксі ввімкнено, спрямовувати localhost через Inspector. Вимкнення додає localhost до списку обходу проксі macOS.",
+ "trust.localhost.linux": "Коли системний проксі ввімкнено, спрямовувати localhost через Inspector. Вимкнення додає localhost до NO_PROXY.",
+ "trust.localhost.windows": "Коли системний проксі ввімкнено, спрямовувати localhost через Inspector (WinINET <-loopback>). Вимкнення дає змогу замиканню на себе обходити проксі.",
+ "trust.localhost.other": "Коли системний проксі ввімкнено, спрямовувати localhost через Inspector.",
+ "trust.status.missing": "Кореневий CA ще не довірений — спробуйте знову або експортуйте CA",
+ "trust.status.cancelled": "Встановлення кореневого CA скасовано",
+ "trust.status.certutil": "Засобів роботи із сертифікатами браузера немає — встановіть їх, спробуйте знову або експортуйте CA",
+ "trust.status.homebrew": "Щоб установити засоби роботи із сертифікатами, потрібен Homebrew — експортуйте CA, щоб довіряти вручну",
+ "trust.status.macConfirm": "Установіть «Завжди довіряти» для кореневого CA Titanium Inspector у Keychain Access",
+ "trust.status.keychain": "Не вдалося встановити довіру в Keychain — спробуйте знову або експортуйте CA і довірте йому вручну",
+ "trust.fail.keychainTitle": "Підтвердьте довіру в Keychain",
+ "trust.fail.continueKeychain": "Продовжити в Keychain Access",
+ "trust.fail.toolsTitle": "Потрібні засоби роботи із сертифікатами",
+ "trust.fail.toolsLinux": "Inspector потрібен certutil (засоби NSS), щоб завершити довіру до кореневого CA.",
+ "trust.fail.toolsOther": "Inspector потрібні засоби роботи із сертифікатами браузера, щоб завершити довіру до кореневого CA.",
+ "trust.fail.tryAgain": "Спробувати знову",
+ "trust.fail.homebrewBody": "Щоб установити засоби роботи із сертифікатами, потрібен Homebrew. Експортуйте CA, щоб довіряти йому вручну.",
+ "trust.fail.title": "Поки не можна розшифрувати HTTPS",
+ "trust.fail.body": "Кореневий CA Titanium Inspector на цьому комп’ютері ще не є довіреним.",
+ "toolbar.throttle": "Обмеження",
+ "toolbar.throttleTip": "Додає затримку й обмеження пропускної здатності під час захоплення (запис тіла / кадри WebSocket). Типово вимкнено.",
+ "toolbar.bindWatermark": "*, localhost або IP",
+ "toolbar.bindTip": "127.0.0.1 або localhost = лише цей комп’ютер. 0.0.0.0 або * = усі мережеві адаптери (включно з localhost).",
+ "toolbar.portWatermark": "* або порт",
+ "toolbar.portTip": "* або порожньо = порт, вибраний системою (справжній порт з’являється після запуску). Інакше 1–65535.",
+ "toolbar.listeningTip": "Проксі слухає",
+ "toolbar.trustHealthTip": "Стан довіри кореневого CA для розшифрування HTTPS. Установіть CA або довірте йому, якщо вказано «не довірений».",
+ "chip.process": "Процес",
+ "inspect.request": "Запит",
+ "inspect.requestTip": "Заголовки й тіло запиту",
+ "inspect.copyHeaders": "Копіювати заголовки",
+ "inspect.resizeTip": "Перетягніть, щоб змінити розмір. Двічі клацніть, щоб скинути.",
+ "inspect.pretty": "Формат",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Показати тіло як шістнадцятковий дамп",
+ "inspect.saveRequest": "Зберегти запит…",
+ "inspect.response": "Відповідь",
+ "inspect.responseTip": "Заголовки й тіло відповіді",
+ "inspect.saveResponse": "Зберегти відповідь…",
+ "inspect.diff": "Відмінності",
+ "inspect.frames": "Кадри WS",
+ "inspect.framesHelp": "Живі кадри WebSocket цього сеансу (напрямок, opcode, попередній перегляд даних).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events, розібрані з тіла відповіді.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Показати заголовки",
+ "inspect.hideHeaders": "Сховати заголовки",
+ "inspect.headers": "Заголовки ({0})",
+ "inspect.prettyTip": "Відступи для JSON, XML і HTML",
+ "inspect.prettyHexTip": "Недоступно в шістнадцятковому вигляді",
+ "inspect.emptyBody": "(порожньо)",
+ "inspect.noRequestBody": "Немає тіла запиту",
+ "inspect.waiting": "Очікування відповіді…",
+ "composer.help": "Створіть і надішліть запит через проксі. «Завантажити з вибраного» копіює поточний сеанс.",
+ "composer.method": "Метод",
+ "composer.url": "URL",
+ "composer.headers": "Заголовки (Ім’я: значення в кожному рядку)",
+ "composer.body": "Тіло",
+ "composer.loadSelected": "Завантажити з вибраного",
+ "composer.loadBody": "Завантажити тіло з файлу…",
+ "composer.send": "Надіслати",
+ "bp.help": "Призупиняє відповідні запити клієнта, щоб змінити тіло, продовжити або перервати. Одна пауза за раз; автопродовження через 120s. Зняття прапорця «Увімкнено» продовжує призупинений запит.",
+ "bp.enabled": "Увімкнено",
+ "bp.breakOnResponse": "Зупин на відповіді",
+ "bp.match": "Збіг",
+ "bp.urlWatermark": "Фільтр URL (* = усі, напр. *api*/users*)",
+ "bp.graphqlWatermark": "Лише ця операція GraphQL (необов’язково)",
+ "bp.graphqlTip": "Додатковий фільтр тіла запиту клієнта. Збігається з JSON operationName або іменованим запитом. Залиште порожнім, щоб збігатися з кожною операцією URL.",
+ "bp.fromSelected": "З вибраного сеансу",
+ "bp.fromSelectedTip": "Копіює ім’я операції GraphQL із запиту вибраного сеансу.",
+ "bp.graphqlHelp": "Залиште поле GraphQL порожнім, щоб збігатися з кожною операцією. Заповніть його (напр. GetUser), щоб призупинити лише цей запит клієнта для URL вище. Зупин на відповіді й далі використовує фільтр URL.",
+ "bp.editWatermark": "Змінити тіло (Застосувати правку тіла, потім Продовжити)",
+ "bp.applyEdit": "Застосувати правку тіла",
+ "bp.continue": "Продовжити",
+ "bp.abort": "Перервати",
+ "ar.help": "Повертає підроблену відповідь до справжнього сервера. Збіг визначає, до яких запитів клієнта застосовується правило; поля нижче — те, що ви надсилаєте назад.",
+ "ar.enabled": "Увімкнено (до точок зупину)",
+ "ar.urlWatermark": "Збіг URL (підстановки *)",
+ "ar.graphqlHelp": "Той самий URL: різні операції GraphQL можуть використовувати різні правила. Залиште порожнім, щоб збігатися з кожною операцією.",
+ "ar.respondWith": "Відповісти",
+ "ar.statusTip": "Статус HTTP. Порожньо = 200. Використовуйте 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Файл Map Local (необов’язково)",
+ "ar.bodyWatermark": "Тіло відповіді (використовується, коли Map Local порожній)",
+ "ar.add": "Додати правило",
+ "ar.update": "Оновити правило",
+ "ar.delete": "Видалити правило",
+ "script.intro": "Одна команда на рядок, для кожного захопленого сеансу. Це не JavaScript і не C# — вводьте лише команди нижче.",
+ "script.what": "Що можна ввести",
+ "script.setHeaderHelp": "Додає або замінює заголовок. Трафік і далі йде на сервер.",
+ "script.setStatusHelp": "На запиті: відповісти одразу й пропустити сервер. На відповіді: змінити статус, який бачить клієнт.",
+ "script.abortHelp": "Блокує кодом 403 Forbidden. Додайте рядок set-status, щоб вибрати інший код.",
+ "script.comment": "Почніть рядок із # або // для коментаря. Команди можна поєднувати; кожну помістіть в окремий рядок.",
+ "script.onRequest": "На запиті",
+ "script.onResponse": "На відповіді",
+ "script.requestSkips": "abort або set-status тут пропускає AutoResponder, точки зупину й джерело.",
+ "map.help": "Переписує відповідні запити клієнта на інше джерело до справжнього сервера. Використайте один * у збігу й цілі, щоб зберегти суфікс шляху або запиту. Виконується після AutoResponder / Map Local.",
+ "map.graphqlHelp": "Залиште порожнім, щоб переписати кожну операцію URL. Заповніть, щоб переписати лише цю операцію GraphQL.",
+ "map.rewriteTo": "Переписати на",
+ "map.targetWatermark": "Цільовий URL (абсолютний, необов’язковий *)",
+ "loopback.allow": "Дозволити",
+ "loopback.appName": "Назва програми",
+ "loopback.packageId": "ID пакета",
+ "status.ready": "Готово",
+ "status.searchingBodies": "Пошук у тілах…",
+ "status.proxyStopped": "Проксі зупинено",
+ "status.proxyRunning": "Проксі працює на {0}",
+ "trust.health.trusted": "CA довірений",
+ "trust.health.untrusted": "CA не довірений"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.vi.json b/src/Titanium.Inspector/Localization/strings.vi.json
new file mode 100644
index 000000000..ef6d193b6
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.vi.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "Tệp",
+ "menu.exportAllHar": "Xuất tất cả HAR…",
+ "menu.exportSelectedHar": "Xuất HAR đã chọn…",
+ "menu.importHar": "Nhập HAR…",
+ "menu.exportAllArchive": "Xuất tất cả kho lưu trữ…",
+ "menu.exportSelectedArchive": "Xuất kho lưu trữ đã chọn…",
+ "menu.importArchive": "Nhập kho lưu trữ…",
+ "menu.exit": "Thoát",
+ "menu.capture": "Thu thập",
+ "menu.startProxy": "Khởi động proxy",
+ "menu.stopProxy": "Dừng proxy",
+ "menu.capturing": "Đang thu thập",
+ "menu.clearSessions": "Xóa phiên",
+ "menu.removeSelected": "Gỡ mục đã chọn",
+ "menu.autoStartCapture": "Tự động bắt đầu thu thập",
+ "menu.autoSystemProxy": "Tự động bật proxy hệ thống khi khởi động",
+ "menu.decryptHttps": "Giải mã HTTPS",
+ "menu.systemProxy": "Proxy hệ thống",
+ "menu.captureLocal": "Thu thập lưu lượng cục bộ",
+ "menu.allowStoreApps": "Cho phép ứng dụng cửa hàng…",
+ "menu.installCa": "Cài CA gốc (người dùng hiện tại)",
+ "menu.removeCa": "Gỡ CA gốc (người dùng hiện tại)",
+ "menu.rotateCa": "Xóa và cài lại CA gốc…",
+ "menu.removeOldCas": "Gỡ các CA gốc cũ…",
+ "menu.exportCa": "Xuất CA gốc…",
+ "menu.trustFirefox": "Tin cậy CA trong Firefox…",
+ "menu.deviceCa": "Thiết lập CA thiết bị bên ngoài",
+ "menu.tools": "Công cụ",
+ "menu.composer": "Trình soạn…",
+ "menu.breakpoints": "Điểm ngắt…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "Tập lệnh…",
+ "menu.mapRemote": "Ánh xạ từ xa…",
+ "menu.options": "Tùy chọn",
+ "menu.theme": "Giao diện",
+ "menu.themeLight": "Sáng",
+ "menu.themeDark": "Tối",
+ "menu.themeAutomatic": "Tự động",
+ "menu.language": "Ngôn ngữ",
+ "menu.languageAutomatic": "Tự động",
+ "menu.columns": "Cột",
+ "menu.col.id": "Mã",
+ "menu.col.method": "Phương thức",
+ "menu.col.status": "Trạng thái",
+ "menu.col.host": "Máy chủ",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "Giao thức",
+ "menu.col.duration": "Thời lượng",
+ "menu.col.ttfb": "Chờ (TTFB)",
+ "menu.col.size": "Kích thước",
+ "menu.col.process": "Tiến trình",
+ "menu.col.started": "Bắt đầu",
+ "menu.col.scheme": "Lược đồ",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "Đặt lại cột",
+ "menu.sessionRetention": "Giữ phiên…",
+ "menu.excludedHosts": "Máy chủ loại trừ…",
+ "menu.excludedHostsTip": "Danh sách bỏ qua giải mã HTTPS và quy tắc bỏ qua của hệ điều hành",
+ "menu.ignoreCerts": "Bỏ qua chứng chỉ máy chủ không an toàn",
+ "menu.addVia": "Thêm tiêu đề Via",
+ "menu.addViaTip": "Thêm Via: … titanium-web-proxy vào lưu lượng bị chặn (RFC 9110). Tắt sẽ ngừng chèn và ngừng phát hiện vòng lặp Via.",
+ "menu.logging": "Nhật ký…",
+ "menu.resetSettings": "Đặt lại cài đặt Inspector…",
+ "menu.help": "Trợ giúp",
+ "menu.checkUpdates": "Kiểm tra bản cập nhật…",
+ "menu.checkUpdatesStartup": "Kiểm tra bản cập nhật khi khởi động",
+ "menu.updateChannel": "Kênh cập nhật",
+ "menu.channelStable": "Ổn định",
+ "menu.channelBeta": "Thử nghiệm",
+ "menu.about": "Giới thiệu Titanium Inspector…",
+ "toolbar.searchWatermark": "Tìm URL, máy chủ, tiến trình… (hoặc method:GET status:4xx)",
+ "toolbar.searchTip": "Văn bản thuần tìm URL, máy chủ, tên tiến trình, ID tiến trình chính xác, phương thức và trạng thái. Tiền tố giới hạn ở một trường: method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image. body: cũng tìm nội dung đã tràn ra đĩa. Thêm - trước một trường hoặc từ để loại trừ (ví dụ -host:cursor.sh hoặc -cursor). Bộ lọc sửa máy chủ và tiến trình đang ẩn trong cửa sổ rộng hơn.",
+ "toolbar.filters": "Bộ lọc",
+ "toolbar.filtersTip": "Sửa tìm kiếm cùng máy chủ hoặc tiến trình đang ẩn trong cửa sổ lớn hơn",
+ "toolbar.hideConnect": "Ẩn CONNECT",
+ "toolbar.hideConnectTip": "Ẩn đường hầm HTTPS không đọc được khi tắt Giải mã HTTPS",
+ "toolbar.hideImages": "Ẩn hình ảnh",
+ "toolbar.errorsOnly": "Chỉ lỗi",
+ "toolbar.clearFilters": "Xóa bộ lọc",
+ "toolbar.hidden": "Đã ẩn",
+ "ctx.replay": "Gửi lại",
+ "ctx.loadComposer": "Tải vào Trình soạn",
+ "ctx.saveRequest": "Lưu nội dung yêu cầu…",
+ "ctx.saveResponse": "Lưu nội dung phản hồi…",
+ "ctx.copyUrl": "Sao chép URL",
+ "ctx.copyCurl": "Sao chép dạng curl",
+ "ctx.copyFetch": "Sao chép dạng fetch",
+ "ctx.diff": "So sánh mục đã chọn…",
+ "ctx.filterHost": "Lọc theo máy chủ",
+ "ctx.hideHost": "Ẩn máy chủ",
+ "ctx.filterProcess": "Lọc theo tiến trình",
+ "ctx.hideProcess": "Ẩn tiến trình",
+ "ctx.excludeHost": "Loại trừ máy chủ…",
+ "ctx.excludeHostTip": "Ngừng giải mã HTTPS của máy chủ này. Các hàng vẫn ở trong danh sách; dùng Ẩn máy chủ để bỏ chúng khỏi khung nhìn.",
+ "grid.duration": "Thời lượng (ms)",
+ "grid.wait": "Chờ (ms)",
+ "pane.inspect": "Kiểm tra",
+ "pane.composer": "Trình soạn",
+ "pane.breakpoints": "Điểm ngắt",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "Tập lệnh",
+ "pane.mapRemote": "Ánh xạ từ xa",
+ "pane.closeTip": "Đóng ngăn",
+ "inspect.empty": "Chọn một phiên trong lưới để kiểm tra tiêu đề và nội dung của yêu cầu và phản hồi.",
+ "common.ok": "Đồng ý",
+ "common.cancel": "Hủy",
+ "common.save": "Lưu",
+ "common.apply": "Áp dụng",
+ "common.remove": "Gỡ",
+ "common.browse": "Duyệt…",
+ "common.openFolder": "Mở thư mục",
+ "common.forget": "Quên",
+ "common.close": "Đóng",
+ "loopback.window": "Cho phép ứng dụng cửa hàng dùng proxy này",
+ "loopback.checkAll": "Chọn tất cả",
+ "loopback.uncheckAll": "Bỏ chọn tất cả",
+ "loopback.filterWatermark": "Lọc theo tên ứng dụng…",
+ "loopback.clearAll": "Xóa tất cả",
+ "trust.macWindow": "Xác nhận tin cậy trong Keychain Access",
+ "trust.openKeychain": "Mở Keychain Access",
+ "trust.notNow": "Để sau",
+ "trust.recoveryTitle": "Tin cậy CA gốc",
+ "trust.macWaitPlaceholder": "Đang chờ tin cậy SSL…",
+ "window.about": "Giới thiệu Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "Bản quyền © Jehonathan Thomas",
+ "about.license": "Được cấp phép theo PolyForm Noncommercial License 1.0.0.",
+ "about.licenseLink": "Chi tiết giấy phép",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "Bộ lọc",
+ "filters.search": "Tìm kiếm",
+ "filters.searchHelp": "Cùng ô tìm với thanh công cụ, nhưng rộng hơn. Máy chủ và tiến trình đang ẩn được liệt kê bên dưới, không nằm trong ô này.",
+ "filters.searchWatermark": "URL, máy chủ, tiến trình, method:GET, status:4xx…",
+ "filters.hideHeading": "Ẩn khỏi danh sách",
+ "filters.hideHelp": "Các hàng vẫn được ghi. Thao tác này chỉ ẩn chúng trong danh sách. Để ngừng giải mã HTTPS, hãy dùng Loại trừ máy chủ…",
+ "filters.hosts": "Máy chủ",
+ "filters.addHostWatermark": "Thêm máy chủ cần ẩn",
+ "filters.addHost": "Thêm máy chủ",
+ "filters.processes": "Tiến trình",
+ "filters.addProcessWatermark": "Thêm tiến trình cần ẩn",
+ "filters.addProcess": "Thêm tiến trình",
+ "filters.processSpace": "Tên có dấu cách được rút ở từ đầu tiên, nên cũng có thể ẩn các tên khác chứa từ đó.",
+ "window.confirm": "Xác nhận",
+ "window.excludeHost": "Loại trừ máy chủ",
+ "exclude.action": "Loại trừ",
+ "exclude.help": "Máy chủ này vẫn hiện trong danh sách phiên. Inspector sẽ không cố đọc HTTPS của nó.",
+ "window.logging": "Nhật ký",
+ "logging.help": "Ghi thông báo chẩn đoán để khắc phục sự cố. Thay đổi có hiệu lực ngay.",
+ "logging.enable": "Bật nhật ký",
+ "logging.writeFile": "Ghi nhật ký ra tệp",
+ "logging.detail": "Mức chi tiết",
+ "logging.detailHelp": "Error = chỉ sự cố. Warning / Information = thêm ngữ cảnh. Debug = rất chi tiết.",
+ "logging.path": "Đường dẫn tệp nhật ký",
+ "window.excludedHosts": "Máy chủ loại trừ",
+ "excluded.reset": "Đặt lại về mặc định",
+ "excluded.bypass": "Bỏ qua proxy (hệ điều hành)",
+ "excluded.bypassHelp": "Khi proxy hệ thống bật, lưu lượng không tới Inspector. Đã điền sẵn máy chủ danh tính Microsoft / SSO / RDP. Gỡ chúng khi proxy hệ thống đang bật có thể làm hỏng đăng nhập RDP.",
+ "excluded.notDecrypted": "Máy chủ không giải mã",
+ "excluded.notDecryptedHelp": "Khi bật Giải mã HTTPS, CONNECT vẫn hiện; TLS vẫn không đọc được. Đã điền sẵn máy chủ ghim chứng chỉ (Dropbox, Webex).",
+ "excluded.learnHeading": "Tự động không giải mã khi giải mã thất bại",
+ "excluded.learn": "Học các máy chủ mà TLS gốc thất bại khi giải mã",
+ "excluded.learnHelp": "Khi TLS gốc thất bại nhiều lần trong lúc giải mã, hoặc máy chủ gốc trả về 403/429, Inspector ngừng giải mã máy chủ đó cho các kết nối sau trong phiên này. Danh sách có giới hạn và bị quên khi khởi động lại trừ khi bạn thăng cấp.",
+ "excluded.learnPaused": "Đã tạm dừng học — các mục hiện có được giữ đến khi bị quên.",
+ "excluded.noneLearned": "Chưa học máy chủ nào.",
+ "excluded.promote": "Thăng cấp thành máy chủ không giải mã",
+ "excluded.clearLearned": "Xóa mọi mục đã học",
+ "window.retention": "Giữ phiên",
+ "retention.max": "Số phiên tối đa cần giữ",
+ "retention.maxHelp": "Số yêu cầu giữ trong danh sách phiên. Khi vượt quá, các hàng cũ nhất rời danh sách nhưng vẫn trên đĩa cho đến khi Xóa phiên hoặc giới hạn dung lượng đĩa xóa chúng.",
+ "retention.cache": "Thư mục bộ nhớ đệm",
+ "retention.openCache": "Mở thư mục bộ nhớ đệm",
+ "retention.clearCache": "Xóa bộ nhớ đệm phiên đã lưu…",
+ "retention.advanced": "Nâng cao",
+ "retention.disk": "Dung lượng đĩa cho phiên đã lưu (MB)",
+ "retention.diskHelp": "Dung lượng tối đa cho mọi phiên đã lưu trên đĩa (mọi lần chạy Inspector). Mỗi lần chạy dùng một thư mục con có dấu thời gian; khi vượt quá, tệp HAR cũ nhất bị xóa trước. Thư mục chạy trống sẽ bị gỡ.",
+ "loopback.intro": "Ứng dụng Windows Store / UWP mặc định bị chặn khỏi localhost. Chọn ứng dụng sẽ dùng Inspector, rồi Áp dụng. Sau khi áp dụng, hãy khởi động lại từng ứng dụng (thoát hẳn). Inspector phải đang chạy với proxy hệ thống bật. Xóa tất cả gỡ mọi mục cho phép.",
+ "loopback.closedUnchanged": "Ứng dụng cửa hàng không đổi.",
+ "loopback.proxyStopped": "Hãy khởi động proxy và bật proxy hệ thống. Không thể ghi ứng dụng cửa hàng cho đến khi cả hai đều bật.",
+ "loopback.systemProxyOff": "Hãy bật proxy hệ thống (menu Thu thập). Danh sách cho phép chỉ giúp ứng dụng cửa hàng tới localhost; chúng vẫn theo proxy hệ thống.",
+ "loopback.refreshing": "Đang làm mới proxy hệ thống để ứng dụng đang chạy kết nối lại…",
+ "loopback.unchangedCount": "Danh sách cho phép đã khớp: {0}.",
+ "loopback.allowed": "Đã cho phép: {0}.",
+ "loopback.allowedRefreshed": " Đã làm mới proxy hệ thống để ứng dụng đang chạy kết nối lại. Nếu lưu lượng vẫn không xuất hiện, hãy thoát hẳn rồi mở lại ứng dụng.",
+ "loopback.allowedProxyStopped": " Hãy khởi động proxy và bật proxy hệ thống, rồi thoát hẳn và mở lại ứng dụng.",
+ "loopback.allowedSystemProxyOff": " Hãy bật proxy hệ thống, rồi thoát hẳn và mở lại ứng dụng.",
+ "loopback.allowedReady": " Hãy thoát hẳn rồi mở lại ứng dụng để ghi lưu lượng.",
+ "loopback.clearedRefreshed": "Đã xóa mọi miễn trừ loopback. Đã làm mới proxy hệ thống để ứng dụng đang chạy kết nối lại.",
+ "loopback.clearedReady": "Đã xóa mọi miễn trừ loopback. Hãy thoát hẳn rồi mở lại mọi ứng dụng từng dùng Inspector.",
+ "loopback.cleared": "Đã xóa mọi miễn trừ loopback.",
+ "trust.macWaitBody": "Lấy thông tin của Keychain có thể đã hiện Luôn tin cậy ngay cả khi chính sách SSL chưa được lưu (Chrome và Inspector vẫn coi CA này là chưa tin cậy).\n\nBuộc lưu:\n1. Keychain Access → đăng nhập → Chứng chỉ → bấm đúp Titanium Root Certificate Authority\n2. Mở rộng Tin cậy\n3. Đặt Khi dùng chứng chỉ này thành Dùng mặc định hệ thống, rồi đổi lại thành Luôn tin cậy\n4. Đóng Lấy thông tin — phải có lời nhắc mật khẩu; đó mới ghi chính sách tin cậy SSL thật\n\nCửa sổ này tự đóng khi phát hiện các chính sách đó. Nếu bạn đã lưu, hãy bấm Tôi đã lưu Luôn tin cậy.",
+ "trust.macWaitStatus": "Đang chờ chứng chỉ trong Keychain…",
+ "trust.macWaitInKeychain": "Đang chờ chính sách SSL đã lưu (bật tắt Luôn tin cậy, đóng Lấy thông tin, nhập mật khẩu)…",
+ "trust.macNotSaved": "Chỉ hiện Luôn tin cậy là chưa đủ — chuyển Dùng mặc định hệ thống thành Luôn tin cậy, đóng Lấy thông tin, nhập mật khẩu, rồi thử Cài CA gốc / Giải mã HTTPS lần nữa",
+ "trust.macConfirmSaved": "Tôi đã lưu Luôn tin cậy",
+ "trust.exportCa": "Xuất CA",
+ "trust.install.mac": "Giải mã HTTPS cần tin cậy CA gốc Titanium Inspector trong Keychain Access (chuỗi khóa đăng nhập). Cài ngay?",
+ "trust.install.linux": "Giải mã HTTPS cần tin cậy CA gốc Titanium Inspector trong kho chứng chỉ người dùng (NSS). Cài ngay?",
+ "trust.install.windows": "Giải mã HTTPS cần tin cậy CA gốc Titanium Inspector trong kho Gốc tin cậy của người dùng hiện tại. Cài ngay?\n\nWindows có thể hiện hộp thoại bảo mật Có/Không của Gốc tin cậy (không phải UAC) — chọn Có để tin cậy CA.",
+ "trust.install.other": "Giải mã HTTPS cần tin cậy CA gốc Titanium Inspector trên máy tính này. Cài ngay?",
+ "trust.remove.mac": "Gỡ CA gốc Titanium Inspector khỏi Keychain? Giải mã HTTPS sẽ tắt.",
+ "trust.remove.linux": "Gỡ CA gốc Titanium Inspector khỏi kho chứng chỉ người dùng (NSS)? Giải mã HTTPS sẽ tắt.",
+ "trust.remove.windows": "Gỡ CA gốc Titanium Inspector khỏi kho Gốc tin cậy của người dùng hiện tại? Giải mã HTTPS sẽ tắt.",
+ "trust.remove.other": "Gỡ CA gốc Titanium Inspector? Giải mã HTTPS sẽ tắt.",
+ "trust.elevate.mac": "Tin cậy cấp người dùng thất bại hoặc chưa đủ. Tiếp tục để hiện lời nhắc mật khẩu quản trị macOS? Hủy sẽ giữ nguyên cài đặt chứng chỉ.",
+ "trust.elevate.linux": "Tin cậy cấp người dùng thất bại hoặc chưa đủ. Tiếp tục để hiện lời nhắc quản trị polkit? Hủy sẽ giữ nguyên cài đặt chứng chỉ.",
+ "trust.elevate.windows": "Tin cậy cấp người dùng thất bại hoặc chưa đủ. Tiếp tục để hiện UAC? Hủy sẽ giữ nguyên cài đặt chứng chỉ.",
+ "trust.elevate.other": "Tin cậy cấp người dùng thất bại hoặc chưa đủ. Tiếp tục với lời nhắc quản trị? Hủy sẽ giữ nguyên cài đặt chứng chỉ.",
+ "trust.recovery.mac": "\n\nTiếp tục để hiện lời nhắc mật khẩu quản trị macOS? Để sau sẽ giữ nguyên cài đặt chứng chỉ.",
+ "trust.recovery.linux": "\n\nTiếp tục để hiện lời nhắc quản trị polkit? Để sau sẽ giữ nguyên cài đặt chứng chỉ.",
+ "trust.recovery.windows": "\n\nTiếp tục để hiện UAC? Để sau sẽ giữ nguyên cài đặt chứng chỉ.",
+ "trust.recovery.other": "\n\nTiếp tục với lời nhắc quản trị? Để sau sẽ giữ nguyên cài đặt chứng chỉ.",
+ "trust.hosts.mac": "Bỏ qua của hệ điều hành cần Thu thập → Proxy hệ thống (dùng cài đặt proxy mạng macOS). Quy tắc chỉ đường hầm áp dụng cho mọi máy khách tới Inspector. Giá trị mặc định gốc được điền vào danh sách bên dưới — sửa tự do hoặc đặt lại.",
+ "trust.hosts.linux": "Bỏ qua của hệ điều hành cần Thu thập → Proxy hệ thống (dùng cài đặt proxy máy tính / môi trường). Quy tắc chỉ đường hầm áp dụng cho mọi máy khách tới Inspector. Giá trị mặc định gốc được điền vào danh sách bên dưới — sửa tự do hoặc đặt lại.",
+ "trust.hosts.windows": "Bỏ qua của hệ điều hành cần Thu thập → Proxy hệ thống (dùng WinINET). Quy tắc chỉ đường hầm áp dụng cho mọi máy khách tới Inspector. Giá trị mặc định gốc được điền vào danh sách bên dưới — sửa tự do hoặc đặt lại.",
+ "trust.hosts.other": "Bỏ qua của hệ điều hành cần Thu thập → Proxy hệ thống. Quy tắc chỉ đường hầm áp dụng cho mọi máy khách tới Inspector. Giá trị mặc định gốc được điền vào danh sách bên dưới — sửa tự do hoặc đặt lại.",
+ "trust.localhost.mac": "Khi proxy hệ thống bật, gửi localhost qua Inspector. Tắt sẽ thêm localhost vào danh sách bỏ qua proxy của macOS.",
+ "trust.localhost.linux": "Khi proxy hệ thống bật, gửi localhost qua Inspector. Tắt sẽ thêm localhost vào NO_PROXY.",
+ "trust.localhost.windows": "Khi proxy hệ thống bật, gửi localhost qua Inspector (WinINET <-loopback>). Tắt sẽ cho loopback bỏ qua proxy.",
+ "trust.localhost.other": "Khi proxy hệ thống bật, gửi localhost qua Inspector.",
+ "trust.status.missing": "CA gốc chưa được tin cậy — thử lại, hoặc Xuất CA",
+ "trust.status.cancelled": "Đã hủy cài CA gốc",
+ "trust.status.certutil": "Thiếu công cụ chứng chỉ trình duyệt — hãy cài, thử lại, hoặc Xuất CA",
+ "trust.status.homebrew": "Cần Homebrew để cài công cụ chứng chỉ — Xuất CA để tin cậy thủ công",
+ "trust.status.macConfirm": "Đặt Luôn tin cậy cho CA gốc Titanium Inspector trong Keychain Access",
+ "trust.status.keychain": "Tin cậy Keychain thất bại — thử lại, hoặc Xuất CA và tin cậy thủ công",
+ "trust.fail.keychainTitle": "Xác nhận tin cậy trong Keychain",
+ "trust.fail.continueKeychain": "Tiếp tục trong Keychain Access",
+ "trust.fail.toolsTitle": "Cần công cụ chứng chỉ",
+ "trust.fail.toolsLinux": "Inspector cần certutil (công cụ NSS) để hoàn tất tin cậy CA gốc.",
+ "trust.fail.toolsOther": "Inspector cần công cụ chứng chỉ trình duyệt để hoàn tất tin cậy CA gốc.",
+ "trust.fail.tryAgain": "Thử lại",
+ "trust.fail.homebrewBody": "Cần Homebrew để cài công cụ chứng chỉ. Hãy xuất CA để tin cậy thủ công.",
+ "trust.fail.title": "Chưa thể giải mã HTTPS",
+ "trust.fail.body": "Máy tính này chưa tin cậy CA gốc Titanium Inspector.",
+ "toolbar.throttle": "Giới hạn",
+ "toolbar.throttleTip": "Thêm độ trễ và định hình băng thông khi thu thập (ghi nội dung / khung WebSocket). Tắt theo mặc định.",
+ "toolbar.bindWatermark": "*, localhost hoặc IP",
+ "toolbar.bindTip": "127.0.0.1 hoặc localhost = chỉ máy này. 0.0.0.0 hoặc * = mọi bộ điều hợp mạng (bao gồm localhost).",
+ "toolbar.portWatermark": "*, hoặc cổng",
+ "toolbar.portTip": "* hoặc để trống = cổng do hệ điều hành chọn (cổng thật hiện sau khi khởi động). Ngược lại 1–65535.",
+ "toolbar.listeningTip": "Proxy đang lắng nghe",
+ "toolbar.trustHealthTip": "Trạng thái tin cậy CA gốc cho Giải mã HTTPS. Hãy cài hoặc tin cậy CA nếu trạng thái là CA chưa tin cậy.",
+ "chip.process": "tiến trình",
+ "inspect.request": "Yêu cầu",
+ "inspect.requestTip": "Tiêu đề và nội dung yêu cầu",
+ "inspect.copyHeaders": "Sao chép tiêu đề",
+ "inspect.resizeTip": "Kéo để đổi kích thước. Nhấp đúp để đặt lại.",
+ "inspect.pretty": "Định dạng",
+ "inspect.hex": "Hex",
+ "inspect.hexTip": "Hiện nội dung dạng Hex",
+ "inspect.saveRequest": "Lưu yêu cầu…",
+ "inspect.response": "Phản hồi",
+ "inspect.responseTip": "Tiêu đề và nội dung phản hồi",
+ "inspect.saveResponse": "Lưu phản hồi…",
+ "inspect.diff": "Khác biệt",
+ "inspect.frames": "Khung WS",
+ "inspect.framesHelp": "Khung WebSocket trực tiếp của phiên này (hướng, opcode, xem trước dữ liệu).",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "Server-Sent Events được phân tích từ nội dung phản hồi.",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "Hiện tiêu đề",
+ "inspect.hideHeaders": "Ẩn tiêu đề",
+ "inspect.headers": "Tiêu đề ({0})",
+ "inspect.prettyTip": "Thụt lề JSON, XML và HTML",
+ "inspect.prettyHexTip": "Không áp dụng trong chế độ Hex",
+ "inspect.emptyBody": "(trống)",
+ "inspect.noRequestBody": "Không có nội dung yêu cầu",
+ "inspect.waiting": "Đang chờ phản hồi…",
+ "composer.help": "Tạo và gửi một yêu cầu qua proxy. Tải từ mục đã chọn sẽ sao chép phiên hiện tại.",
+ "composer.method": "Phương thức",
+ "composer.url": "URL",
+ "composer.headers": "Tiêu đề (Tên: Giá trị mỗi dòng)",
+ "composer.body": "Nội dung",
+ "composer.loadSelected": "Tải từ mục đã chọn",
+ "composer.loadBody": "Tải nội dung từ tệp…",
+ "composer.send": "Gửi",
+ "bp.help": "Tạm dừng các yêu cầu máy khách khớp để sửa nội dung, tiếp tục hoặc hủy bỏ. Chỉ một lần dừng tại một thời điểm; tự tiếp tục sau 120s. Bỏ chọn Đã bật sẽ tiếp tục yêu cầu đang dừng.",
+ "bp.enabled": "Đã bật",
+ "bp.breakOnResponse": "Ngắt ở phản hồi",
+ "bp.match": "Khớp",
+ "bp.urlWatermark": "Bộ lọc URL (* = tất cả, ví dụ *api*/users*)",
+ "bp.graphqlWatermark": "Chỉ thao tác GraphQL này (tùy chọn)",
+ "bp.graphqlTip": "Bộ lọc thêm trên nội dung yêu cầu máy khách. Khớp JSON operationName hoặc truy vấn có tên. Để trống để khớp mọi thao tác trên URL.",
+ "bp.fromSelected": "Từ phiên đã chọn",
+ "bp.fromSelectedTip": "Sao chép tên thao tác GraphQL từ yêu cầu của phiên đã chọn.",
+ "bp.graphqlHelp": "Để trống ô GraphQL để khớp mọi thao tác. Điền (ví dụ GetUser) để chỉ tạm dừng yêu cầu máy khách đó trên URL ở trên. Ngắt ở phản hồi vẫn dùng bộ lọc URL.",
+ "bp.editWatermark": "Sửa nội dung (Áp dụng sửa nội dung, rồi Tiếp tục)",
+ "bp.applyEdit": "Áp dụng sửa nội dung",
+ "bp.continue": "Tiếp tục",
+ "bp.abort": "Hủy bỏ",
+ "ar.help": "Trả về phản hồi giả trước máy chủ thật. Khớp quyết định yêu cầu máy khách nào áp dụng quy tắc; các trường bên dưới là nội dung bạn gửi lại.",
+ "ar.enabled": "Đã bật (trước điểm ngắt)",
+ "ar.urlWatermark": "Khớp URL (ký tự đại diện *)",
+ "ar.graphqlHelp": "Cùng URL, các thao tác GraphQL khác nhau có thể dùng quy tắc khác nhau. Để trống để khớp mọi thao tác.",
+ "ar.respondWith": "Phản hồi bằng",
+ "ar.statusTip": "Trạng thái HTTP. Để trống = 200. Dùng 100–599.",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Tệp Map Local (tùy chọn)",
+ "ar.bodyWatermark": "Nội dung phản hồi (dùng khi Map Local để trống)",
+ "ar.add": "Thêm quy tắc",
+ "ar.update": "Cập nhật quy tắc",
+ "ar.delete": "Xóa quy tắc",
+ "script.intro": "Mỗi dòng một lệnh, trên mọi phiên đã thu thập. Đây không phải JavaScript hay C# — chỉ gõ các lệnh bên dưới.",
+ "script.what": "Bạn có thể gõ gì",
+ "script.setHeaderHelp": "Thêm hoặc thay tiêu đề. Lưu lượng vẫn tiếp tục tới máy chủ.",
+ "script.setStatusHelp": "Với yêu cầu: trả lời ngay và bỏ qua máy chủ. Với phản hồi: đổi trạng thái mà máy khách thấy.",
+ "script.abortHelp": "Chặn bằng 403 Bị cấm. Thêm một dòng set-status để chọn mã khác.",
+ "script.comment": "Bắt đầu dòng bằng # hoặc // để ghi chú. Có thể kết hợp lệnh; mỗi lệnh một dòng.",
+ "script.onRequest": "Với yêu cầu",
+ "script.onResponse": "Với phản hồi",
+ "script.requestSkips": "abort hoặc set-status ở đây sẽ bỏ qua AutoResponder, điểm ngắt và nguồn gốc.",
+ "map.help": "Viết lại các yêu cầu máy khách khớp sang nguồn gốc khác trước máy chủ thật. Dùng một dấu * trong phần khớp và đích để giữ hậu tố đường dẫn hoặc truy vấn. Chạy sau AutoResponder / Map Local.",
+ "map.graphqlHelp": "Để trống để viết lại mọi thao tác trên URL. Điền để chỉ viết lại thao tác GraphQL đó.",
+ "map.rewriteTo": "Viết lại thành",
+ "map.targetWatermark": "URL đích (tuyệt đối, * tùy chọn)",
+ "loopback.allow": "Cho phép",
+ "loopback.appName": "Tên ứng dụng",
+ "loopback.packageId": "ID gói",
+ "status.ready": "Sẵn sàng",
+ "status.searchingBodies": "Đang tìm trong nội dung…",
+ "status.proxyStopped": "Proxy đã dừng",
+ "status.proxyRunning": "Proxy đang chạy trên {0}",
+ "trust.health.trusted": "CA được tin cậy",
+ "trust.health.untrusted": "CA chưa tin cậy"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.zh-Hans.json b/src/Titanium.Inspector/Localization/strings.zh-Hans.json
new file mode 100644
index 000000000..2976faa91
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.zh-Hans.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "文件",
+ "menu.exportAllHar": "导出全部 HAR…",
+ "menu.exportSelectedHar": "导出所选 HAR…",
+ "menu.importHar": "导入 HAR…",
+ "menu.exportAllArchive": "导出全部归档…",
+ "menu.exportSelectedArchive": "导出所选归档…",
+ "menu.importArchive": "导入归档…",
+ "menu.exit": "退出",
+ "menu.capture": "捕获",
+ "menu.startProxy": "启动代理",
+ "menu.stopProxy": "停止代理",
+ "menu.capturing": "正在捕获",
+ "menu.clearSessions": "清除会话",
+ "menu.removeSelected": "移除所选",
+ "menu.autoStartCapture": "自动开始捕获",
+ "menu.autoSystemProxy": "启动时自动开启系统代理",
+ "menu.decryptHttps": "解密 HTTPS",
+ "menu.systemProxy": "系统代理",
+ "menu.captureLocal": "捕获本地流量",
+ "menu.allowStoreApps": "允许商店应用…",
+ "menu.installCa": "安装根 CA(当前用户)",
+ "menu.removeCa": "移除根 CA(当前用户)",
+ "menu.rotateCa": "清除并重新安装根 CA…",
+ "menu.removeOldCas": "移除旧的根 CA…",
+ "menu.exportCa": "导出根 CA…",
+ "menu.trustFirefox": "在 Firefox 中信任 CA…",
+ "menu.deviceCa": "设置外部设备 CA",
+ "menu.tools": "工具",
+ "menu.composer": "构造器…",
+ "menu.breakpoints": "断点…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "脚本…",
+ "menu.mapRemote": "远程映射…",
+ "menu.options": "选项",
+ "menu.theme": "主题",
+ "menu.themeLight": "浅色",
+ "menu.themeDark": "深色",
+ "menu.themeAutomatic": "自动",
+ "menu.language": "语言",
+ "menu.languageAutomatic": "自动",
+ "menu.columns": "列",
+ "menu.col.id": "编号",
+ "menu.col.method": "方法",
+ "menu.col.status": "状态",
+ "menu.col.host": "主机",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "协议",
+ "menu.col.duration": "耗时",
+ "menu.col.ttfb": "等待 (TTFB)",
+ "menu.col.size": "大小",
+ "menu.col.process": "进程",
+ "menu.col.started": "开始时间",
+ "menu.col.scheme": "方案",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "重置列",
+ "menu.sessionRetention": "会话保留…",
+ "menu.excludedHosts": "排除的主机…",
+ "menu.excludedHostsTip": "HTTPS 解密跳过列表和操作系统绕过规则",
+ "menu.ignoreCerts": "忽略不安全的服务器证书",
+ "menu.addVia": "添加 Via 标头",
+ "menu.addViaTip": "在拦截的流量上追加 Via: … titanium-web-proxy(RFC 9110)。关闭后停止注入,并停止 Via 环路检测。",
+ "menu.logging": "日志…",
+ "menu.resetSettings": "重置 Inspector 设置…",
+ "menu.help": "帮助",
+ "menu.checkUpdates": "检查更新…",
+ "menu.checkUpdatesStartup": "启动时检查更新",
+ "menu.updateChannel": "更新通道",
+ "menu.channelStable": "稳定版",
+ "menu.channelBeta": "测试版",
+ "menu.about": "关于 Titanium Inspector…",
+ "toolbar.searchWatermark": "搜索 URL、主机、进程…(或 method:GET status:4xx)",
+ "toolbar.searchTip": "纯文本会搜索 URL、主机、进程名、精确的进程 ID、方法和状态。前缀将范围限制为一个字段:method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image。body: 也会搜索已写到磁盘的正文。在字段或词语前加上 - 即可排除(例如 -host:cursor.sh 或 -cursor)。筛选可在更大的空间里编辑隐藏的主机和进程。",
+ "toolbar.filters": "筛选",
+ "toolbar.filtersTip": "在更大的窗口中编辑搜索以及隐藏的主机或进程",
+ "toolbar.hideConnect": "隐藏 CONNECT",
+ "toolbar.hideConnectTip": "关闭解密 HTTPS 时,隐藏不透明的 HTTPS 隧道",
+ "toolbar.hideImages": "隐藏图像",
+ "toolbar.errorsOnly": "仅错误",
+ "toolbar.clearFilters": "清除筛选",
+ "toolbar.hidden": "已隐藏",
+ "ctx.replay": "重放",
+ "ctx.loadComposer": "载入到构造器",
+ "ctx.saveRequest": "保存请求正文…",
+ "ctx.saveResponse": "保存响应正文…",
+ "ctx.copyUrl": "复制 URL",
+ "ctx.copyCurl": "复制为 curl",
+ "ctx.copyFetch": "复制为 fetch",
+ "ctx.diff": "比较所选…",
+ "ctx.filterHost": "按主机筛选",
+ "ctx.hideHost": "隐藏主机",
+ "ctx.filterProcess": "按进程筛选",
+ "ctx.hideProcess": "隐藏进程",
+ "ctx.excludeHost": "排除主机…",
+ "ctx.excludeHostTip": "停止解密此主机的 HTTPS。这些行仍留在列表中;若要从视图中移除,请使用隐藏主机。",
+ "grid.duration": "耗时(毫秒)",
+ "grid.wait": "等待(毫秒)",
+ "pane.inspect": "检查",
+ "pane.composer": "构造器",
+ "pane.breakpoints": "断点",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "脚本",
+ "pane.mapRemote": "远程映射",
+ "pane.closeTip": "关闭窗格",
+ "inspect.empty": "在表格中选择一个会话,以查看请求和响应的标头与正文。",
+ "common.ok": "确定",
+ "common.cancel": "取消",
+ "common.save": "保存",
+ "common.apply": "应用",
+ "common.remove": "移除",
+ "common.browse": "浏览…",
+ "common.openFolder": "打开文件夹",
+ "common.forget": "忘记",
+ "common.close": "关闭",
+ "loopback.window": "允许商店应用使用此代理",
+ "loopback.checkAll": "全选",
+ "loopback.uncheckAll": "全不选",
+ "loopback.filterWatermark": "按应用名称筛选…",
+ "loopback.clearAll": "全部清除",
+ "trust.macWindow": "在 Keychain Access 中确认信任",
+ "trust.openKeychain": "打开 Keychain Access",
+ "trust.notNow": "以后再说",
+ "trust.recoveryTitle": "根 CA 信任",
+ "trust.macWaitPlaceholder": "正在等待 SSL 信任…",
+ "window.about": "关于 Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "版权所有 © Jehonathan Thomas",
+ "about.license": "根据 PolyForm Noncommercial License 1.0.0 授权。",
+ "about.licenseLink": "许可证详情",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "筛选",
+ "filters.search": "搜索",
+ "filters.searchHelp": "与工具栏相同的搜索,只是空间更大。隐藏的主机和进程列在下方,不在此框中。",
+ "filters.searchWatermark": "URL、主机、进程、method:GET、status:4xx…",
+ "filters.hideHeading": "从列表中隐藏",
+ "filters.hideHelp": "这些行仍会被捕获。此操作只是在列表中隐藏它们。若要停止解密 HTTPS,请使用排除主机…",
+ "filters.hosts": "主机",
+ "filters.addHostWatermark": "添加要隐藏的主机",
+ "filters.addHost": "添加主机",
+ "filters.processes": "进程",
+ "filters.addProcessWatermark": "添加要隐藏的进程",
+ "filters.addProcess": "添加进程",
+ "filters.processSpace": "含空格的名称会在第一个词处截断,因此也可能隐藏包含该词的其他名称。",
+ "window.confirm": "确认",
+ "window.excludeHost": "排除主机",
+ "exclude.action": "排除",
+ "exclude.help": "此主机仍会出现在会话列表中。Inspector 不会尝试读取其 HTTPS。",
+ "window.logging": "日志",
+ "logging.help": "写入用于排查问题的诊断消息。更改会立即生效。",
+ "logging.enable": "启用日志",
+ "logging.writeFile": "将日志写入文件",
+ "logging.detail": "详细程度",
+ "logging.detailHelp": "Error = 仅问题。Warning / Information = 更多上下文。Debug = 非常详细。",
+ "logging.path": "日志文件路径",
+ "window.excludedHosts": "排除的主机",
+ "excluded.reset": "重置为默认值",
+ "excluded.bypass": "绕过代理(操作系统)",
+ "excluded.bypassHelp": "开启系统代理时,这些流量不会到达 Inspector。已预置 Microsoft 身份 / SSO / RDP 主机。在系统代理启用时移除它们,可能导致 RDP 登录失败。",
+ "excluded.notDecrypted": "不解密的主机",
+ "excluded.notDecryptedHelp": "开启解密 HTTPS 时,CONNECT 仍可见,TLS 保持不透明。已预置证书锁定主机(Dropbox、Webex)。",
+ "excluded.learnHeading": "解密失败时自动不再解密",
+ "excluded.learn": "学习在解密下源站 TLS 失败的主机",
+ "excluded.learnHelp": "当源站 TLS 在解密下反复失败,或源站服务器返回 403/429 时,Inspector 会在本次会话的后续连接中停止解密该主机。列表有上限,除非提升,否则重启后会被忘记。",
+ "excluded.learnPaused": "学习已暂停 — 现有条目会保留到被忘记为止。",
+ "excluded.noneLearned": "尚未学习到任何主机。",
+ "excluded.promote": "提升为不解密的主机",
+ "excluded.clearLearned": "清除全部已学习项",
+ "window.retention": "会话保留",
+ "retention.max": "最多保留的会话数",
+ "retention.maxHelp": "会话列表中保留多少请求。超过此数时,最旧的行会离开列表,但仍留在磁盘上,直到清除会话或磁盘空间上限将其删除。",
+ "retention.cache": "缓存文件夹",
+ "retention.openCache": "打开缓存文件夹",
+ "retention.clearCache": "清除已保存的会话缓存…",
+ "retention.advanced": "高级",
+ "retention.disk": "已保存会话的磁盘空间(MB)",
+ "retention.diskHelp": "磁盘上所有已保存会话的最大空间(所有 Inspector 运行)。每次运行使用一个带时间戳的子文件夹;超过此限制时优先删除最旧的 HAR 文件。空的运行文件夹会被移除。",
+ "loopback.intro": "Windows 商店 / UWP 应用默认无法访问 localhost。勾选应使用 Inspector 的应用,然后应用。应用后请重启每个应用(完全退出)。Inspector 必须在系统代理开启时运行。全部清除会移除每一条允许项。",
+ "loopback.closedUnchanged": "商店应用未更改。",
+ "loopback.proxyStopped": "请启动代理并开启系统代理。两者都开启之前,无法捕获商店应用。",
+ "loopback.systemProxyOff": "请开启系统代理(捕获菜单)。允许列表只让商店应用访问 localhost;它们仍遵循系统代理。",
+ "loopback.refreshing": "正在刷新系统代理,以便正在运行的应用重新连接…",
+ "loopback.unchangedCount": "允许列表已匹配:{0}。",
+ "loopback.allowed": "已允许:{0}。",
+ "loopback.allowedRefreshed": " 已刷新系统代理,以便正在运行的应用重新连接。如果流量仍未出现,请完全退出并重新打开该应用。",
+ "loopback.allowedProxyStopped": " 请启动代理并开启系统代理,然后完全退出并重新打开该应用。",
+ "loopback.allowedSystemProxyOff": " 请开启系统代理,然后完全退出并重新打开该应用。",
+ "loopback.allowedReady": " 请完全退出并重新打开该应用以捕获流量。",
+ "loopback.clearedRefreshed": "已清除所有环回豁免。已刷新系统代理,以便正在运行的应用重新连接。",
+ "loopback.clearedReady": "已清除所有环回豁免。请完全退出并重新打开任何曾使用 Inspector 的应用。",
+ "loopback.cleared": "已清除所有环回豁免。",
+ "trust.macWaitBody": "Keychain 的“显示简介”可能已经显示“始终信任”,即使 SSL 策略并未保存(Chrome 和 Inspector 仍会将该 CA 视为不受信任)。\n\n请强制保存:\n1. Keychain Access → 登录 → 证书 → 双击 Titanium Root Certificate Authority\n2. 展开信任\n3. 将“使用此证书时”设为“使用系统默认”,然后再改回“始终信任”\n4. 关闭“显示简介”——必须出现密码提示;这才会写入真正的 SSL 信任策略\n\n检测到这些策略后,此窗口会自动关闭。如果已经保存,请单击“我已保存始终信任”。",
+ "trust.macWaitStatus": "正在等待 Keychain 中的证书…",
+ "trust.macWaitInKeychain": "正在等待已保存的 SSL 策略(切换始终信任,关闭显示简介,输入密码)…",
+ "trust.macNotSaved": "仅显示始终信任不够 — 请在使用系统默认与始终信任之间切换,关闭显示简介,输入密码,然后再次尝试安装根 CA / 解密 HTTPS",
+ "trust.macConfirmSaved": "我已保存始终信任",
+ "trust.exportCa": "导出 CA",
+ "trust.install.mac": "解密 HTTPS 需要在 Keychain Access(登录钥匙串)中信任 Titanium Inspector 根 CA。是否立即安装?",
+ "trust.install.linux": "解密 HTTPS 需要在你的用户证书存储(NSS)中信任 Titanium Inspector 根 CA。是否立即安装?",
+ "trust.install.windows": "解密 HTTPS 需要在当前用户的受信任根存储中信任 Titanium Inspector 根 CA。是否立即安装?\n\nWindows 可能会显示受信任根的是/否安全对话框(不是 UAC)— 请选择是以信任该 CA。",
+ "trust.install.other": "解密 HTTPS 需要在此计算机上信任 Titanium Inspector 根 CA。是否立即安装?",
+ "trust.remove.mac": "要从 Keychain 中移除 Titanium Inspector 根 CA 吗?HTTPS 解密将会关闭。",
+ "trust.remove.linux": "要从你的用户证书存储(NSS)中移除 Titanium Inspector 根 CA 吗?HTTPS 解密将会关闭。",
+ "trust.remove.windows": "要从当前用户的受信任根存储中移除 Titanium Inspector 根 CA 吗?HTTPS 解密将会关闭。",
+ "trust.remove.other": "要移除 Titanium Inspector 根 CA 吗?HTTPS 解密将会关闭。",
+ "trust.elevate.mac": "用户级信任失败或不足。是否继续以显示 macOS 管理员密码提示?取消将保持证书设置不变。",
+ "trust.elevate.linux": "用户级信任失败或不足。是否继续以显示 polkit 管理员提示?取消将保持证书设置不变。",
+ "trust.elevate.windows": "用户级信任失败或不足。是否继续以显示 UAC?取消将保持证书设置不变。",
+ "trust.elevate.other": "用户级信任失败或不足。是否继续以显示管理员提示?取消将保持证书设置不变。",
+ "trust.recovery.mac": "\n\n是否继续以显示 macOS 管理员密码提示?以后再说将保持证书设置不变。",
+ "trust.recovery.linux": "\n\n是否继续以显示 polkit 管理员提示?以后再说将保持证书设置不变。",
+ "trust.recovery.windows": "\n\n是否继续以显示 UAC?以后再说将保持证书设置不变。",
+ "trust.recovery.other": "\n\n是否继续以显示管理员提示?以后再说将保持证书设置不变。",
+ "trust.hosts.mac": "操作系统绕过需要捕获 → 系统代理(使用 macOS 网络代理设置)。仅隧道规则适用于每个连接到 Inspector 的客户端。出厂默认值已填入下方列表 — 可自由编辑或重置。",
+ "trust.hosts.linux": "操作系统绕过需要捕获 → 系统代理(使用桌面 / 环境代理设置)。仅隧道规则适用于每个连接到 Inspector 的客户端。出厂默认值已填入下方列表 — 可自由编辑或重置。",
+ "trust.hosts.windows": "操作系统绕过需要捕获 → 系统代理(使用 WinINET)。仅隧道规则适用于每个连接到 Inspector 的客户端。出厂默认值已填入下方列表 — 可自由编辑或重置。",
+ "trust.hosts.other": "操作系统绕过需要捕获 → 系统代理。仅隧道规则适用于每个连接到 Inspector 的客户端。出厂默认值已填入下方列表 — 可自由编辑或重置。",
+ "trust.localhost.mac": "开启系统代理时,让 localhost 经过 Inspector。关闭则会把 localhost 加入 macOS 代理绕过列表。",
+ "trust.localhost.linux": "开启系统代理时,让 localhost 经过 Inspector。关闭则会把 localhost 加入 NO_PROXY。",
+ "trust.localhost.windows": "开启系统代理时,让 localhost 经过 Inspector(WinINET <-loopback>)。关闭则允许环回跳过代理。",
+ "trust.localhost.other": "开启系统代理时,让 localhost 经过 Inspector。",
+ "trust.status.missing": "根 CA 尚未受信任 — 请重试,或导出 CA",
+ "trust.status.cancelled": "已取消安装根 CA",
+ "trust.status.certutil": "缺少浏览器证书工具 — 请安装后重试,或导出 CA",
+ "trust.status.homebrew": "安装证书工具需要 Homebrew — 请导出 CA 以手动信任",
+ "trust.status.macConfirm": "请在 Keychain Access 中将 Titanium Inspector 根 CA 设为始终信任",
+ "trust.status.keychain": "Keychain 信任失败 — 请重试,或导出 CA 并手动信任",
+ "trust.fail.keychainTitle": "在 Keychain 中确认信任",
+ "trust.fail.continueKeychain": "在 Keychain Access 中继续",
+ "trust.fail.toolsTitle": "需要证书工具",
+ "trust.fail.toolsLinux": "Inspector 需要 certutil(NSS 工具)才能完成对根 CA 的信任。",
+ "trust.fail.toolsOther": "Inspector 需要浏览器证书工具才能完成对根 CA 的信任。",
+ "trust.fail.tryAgain": "重试",
+ "trust.fail.homebrewBody": "安装证书工具需要 Homebrew。请导出该 CA 以手动信任。",
+ "trust.fail.title": "暂时无法解密 HTTPS",
+ "trust.fail.body": "此计算机尚未信任 Titanium Inspector 根 CA。",
+ "toolbar.throttle": "限速",
+ "toolbar.throttleTip": "在捕获期间添加延迟和带宽整形(正文写入 / WebSocket 帧)。默认关闭。",
+ "toolbar.bindWatermark": "*、localhost 或 IP",
+ "toolbar.bindTip": "127.0.0.1 或 localhost = 仅此电脑。0.0.0.0 或 * = 所有网络适配器(包括 localhost)。",
+ "toolbar.portWatermark": "* 或端口",
+ "toolbar.portTip": "* 或空 = 操作系统选择的端口(实际端口在启动后显示)。否则为 1–65535。",
+ "toolbar.listeningTip": "代理正在侦听",
+ "toolbar.trustHealthTip": "解密 HTTPS 的根 CA 信任状态。若显示未受信任,请安装或信任该 CA。",
+ "chip.process": "进程",
+ "inspect.request": "请求",
+ "inspect.requestTip": "请求标头和正文",
+ "inspect.copyHeaders": "复制标头",
+ "inspect.resizeTip": "拖动以调整大小。双击以重置。",
+ "inspect.pretty": "美化",
+ "inspect.hex": "十六进制",
+ "inspect.hexTip": "将正文显示为十六进制转储",
+ "inspect.saveRequest": "保存请求…",
+ "inspect.response": "响应",
+ "inspect.responseTip": "响应标头和正文",
+ "inspect.saveResponse": "保存响应…",
+ "inspect.diff": "比较",
+ "inspect.frames": "WS 帧",
+ "inspect.framesHelp": "此会话的实时 WebSocket 帧(方向、操作码、载荷预览)。",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "从响应正文解析出的服务器发送事件。",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "显示标头",
+ "inspect.hideHeaders": "隐藏标头",
+ "inspect.headers": "标头 ({0})",
+ "inspect.prettyTip": "缩进 JSON、XML 和 HTML",
+ "inspect.prettyHexTip": "十六进制视图中不适用",
+ "inspect.emptyBody": "(空)",
+ "inspect.noRequestBody": "无请求正文",
+ "inspect.waiting": "正在等待响应…",
+ "composer.help": "通过代理构造并发送请求。从所选加载会复制当前会话。",
+ "composer.method": "方法",
+ "composer.url": "URL",
+ "composer.headers": "标头(每行 名称: 值)",
+ "composer.body": "正文",
+ "composer.loadSelected": "从所选加载",
+ "composer.loadBody": "从文件加载正文…",
+ "composer.send": "发送",
+ "bp.help": "暂停匹配的客户端请求,以便编辑正文、继续或中止。一次仅暂停一个;120s 后自动继续。取消勾选已启用会让已暂停的请求继续。",
+ "bp.enabled": "已启用",
+ "bp.breakOnResponse": "在响应处中断",
+ "bp.match": "匹配",
+ "bp.urlWatermark": "URL 筛选(* = 全部,例如 *api*/users*)",
+ "bp.graphqlWatermark": "仅此 GraphQL 操作(可选)",
+ "bp.graphqlTip": "对客户端请求正文的额外筛选。匹配 JSON 的 operationName 或具名查询。留空则匹配该 URL 上的每个操作。",
+ "bp.fromSelected": "从所选会话",
+ "bp.fromSelectedTip": "从所选会话的请求中复制 GraphQL 操作名。",
+ "bp.graphqlHelp": "将 GraphQL 框留空可匹配每个操作。填入内容(例如 GetUser)只会暂停上方 URL 上的该客户端请求。在响应处中断仍使用 URL 筛选。",
+ "bp.editWatermark": "编辑正文(应用正文编辑,然后继续)",
+ "bp.applyEdit": "应用正文编辑",
+ "bp.continue": "继续",
+ "bp.abort": "中止",
+ "ar.help": "在真实服务器之前返回伪造的响应。匹配决定规则适用于哪些客户端请求;其下方的字段就是你发回的内容。",
+ "ar.enabled": "已启用(在断点之前)",
+ "ar.urlWatermark": "匹配 URL(* 通配符)",
+ "ar.graphqlHelp": "同一 URL 上的不同 GraphQL 操作可以使用不同规则。留空则匹配每个操作。",
+ "ar.respondWith": "以此响应",
+ "ar.statusTip": "HTTP 状态。留空 = 200。请使用 100–599。",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local 文件(可选)",
+ "ar.bodyWatermark": "响应正文(Map Local 为空时使用)",
+ "ar.add": "添加规则",
+ "ar.update": "更新规则",
+ "ar.delete": "删除规则",
+ "script.intro": "对每个捕获的会话,每行一条命令。这不是 JavaScript 或 C# — 只输入下面的命令。",
+ "script.what": "可以输入什么",
+ "script.setHeaderHelp": "添加或替换一个标头。流量仍会继续发往服务器。",
+ "script.setStatusHelp": "对于请求:立即应答并跳过服务器。对于响应:更改客户端看到的状态。",
+ "script.abortHelp": "以 403 Forbidden 阻止。添加一行 set-status 以选择其他状态码。",
+ "script.comment": "以 # 或 // 开头表示注释。可以组合命令;每条命令单独一行。",
+ "script.onRequest": "对于请求",
+ "script.onResponse": "对于响应",
+ "script.requestSkips": "此处的 abort 或 set-status 会跳过 AutoResponder、断点和源站。",
+ "map.help": "在到达真实服务器之前,将匹配的客户端请求改写到另一个源站。在匹配和目标中各使用一个 *,以保留路径/查询后缀。在 AutoResponder / Map Local 之后运行。",
+ "map.graphqlHelp": "留空则改写该 URL 上的每个操作。填写则只改写该 GraphQL 操作。",
+ "map.rewriteTo": "改写到",
+ "map.targetWatermark": "目标 URL(绝对地址,可选 *)",
+ "loopback.allow": "允许",
+ "loopback.appName": "应用名称",
+ "loopback.packageId": "包 ID",
+ "status.ready": "就绪",
+ "status.searchingBodies": "正在搜索正文…",
+ "status.proxyStopped": "代理已停止",
+ "status.proxyRunning": "代理正在 {0} 上运行",
+ "trust.health.trusted": "CA 已受信任",
+ "trust.health.untrusted": "CA 未受信任"
+}
diff --git a/src/Titanium.Inspector/Localization/strings.zh-Hant.json b/src/Titanium.Inspector/Localization/strings.zh-Hant.json
new file mode 100644
index 000000000..039cfd3e3
--- /dev/null
+++ b/src/Titanium.Inspector/Localization/strings.zh-Hant.json
@@ -0,0 +1,326 @@
+{
+ "menu.file": "檔案",
+ "menu.exportAllHar": "匯出全部 HAR…",
+ "menu.exportSelectedHar": "匯出所選 HAR…",
+ "menu.importHar": "匯入 HAR…",
+ "menu.exportAllArchive": "匯出全部封存…",
+ "menu.exportSelectedArchive": "匯出所選封存…",
+ "menu.importArchive": "匯入封存…",
+ "menu.exit": "結束",
+ "menu.capture": "擷取",
+ "menu.startProxy": "啟動代理",
+ "menu.stopProxy": "停止代理",
+ "menu.capturing": "正在擷取",
+ "menu.clearSessions": "清除工作階段",
+ "menu.removeSelected": "移除所選",
+ "menu.autoStartCapture": "自動開始擷取",
+ "menu.autoSystemProxy": "啟動時自動開啟系統代理",
+ "menu.decryptHttps": "解密 HTTPS",
+ "menu.systemProxy": "系統代理",
+ "menu.captureLocal": "擷取本機流量",
+ "menu.allowStoreApps": "允許市集應用程式…",
+ "menu.installCa": "安裝根 CA(目前使用者)",
+ "menu.removeCa": "移除根 CA(目前使用者)",
+ "menu.rotateCa": "清除並重新安裝根 CA…",
+ "menu.removeOldCas": "移除舊的根 CA…",
+ "menu.exportCa": "匯出根 CA…",
+ "menu.trustFirefox": "在 Firefox 中信任 CA…",
+ "menu.deviceCa": "設定外部裝置 CA",
+ "menu.tools": "工具",
+ "menu.composer": "建構器…",
+ "menu.breakpoints": "中斷點…",
+ "menu.autoResponder": "AutoResponder…",
+ "menu.scripts": "指令碼…",
+ "menu.mapRemote": "遠端對應…",
+ "menu.options": "選項",
+ "menu.theme": "佈景主題",
+ "menu.themeLight": "淺色",
+ "menu.themeDark": "深色",
+ "menu.themeAutomatic": "自動",
+ "menu.language": "語言",
+ "menu.languageAutomatic": "自動",
+ "menu.columns": "欄",
+ "menu.col.id": "編號",
+ "menu.col.method": "方法",
+ "menu.col.status": "狀態",
+ "menu.col.host": "主機",
+ "menu.col.url": "URL",
+ "menu.col.protocol": "通訊協定",
+ "menu.col.duration": "耗時",
+ "menu.col.ttfb": "等待 (TTFB)",
+ "menu.col.size": "大小",
+ "menu.col.process": "處理程序",
+ "menu.col.started": "開始時間",
+ "menu.col.scheme": "綱要",
+ "menu.col.contentType": "Content-Type",
+ "menu.resetColumns": "重設欄",
+ "menu.sessionRetention": "工作階段保留…",
+ "menu.excludedHosts": "排除的主機…",
+ "menu.excludedHostsTip": "HTTPS 解密略過清單和作業系統略過規則",
+ "menu.ignoreCerts": "忽略不安全的伺服器憑證",
+ "menu.addVia": "新增 Via 標頭",
+ "menu.addViaTip": "在攔截的流量上附加 Via: … titanium-web-proxy(RFC 9110)。關閉後會停用注入與 Via 迴圈偵測。",
+ "menu.logging": "記錄…",
+ "menu.resetSettings": "重設 Inspector 設定…",
+ "menu.help": "說明",
+ "menu.checkUpdates": "檢查更新…",
+ "menu.checkUpdatesStartup": "啟動時檢查更新",
+ "menu.updateChannel": "更新通道",
+ "menu.channelStable": "穩定版",
+ "menu.channelBeta": "測試版",
+ "menu.about": "關於 Titanium Inspector…",
+ "toolbar.searchWatermark": "搜尋 URL、主機、處理程序…(或 method:GET status:4xx)",
+ "toolbar.searchTip": "純文字會搜尋 URL、主機、處理程序名稱、精確的處理程序 ID、方法和狀態。前綴會將範圍限制為一個欄位:method: status: host: url: process: pid: protocol: content-type: body: is:ws|grpc|tunnel|error hide:tunnel|image。body: 也會搜尋已寫到磁碟的本文。在欄位或詞語前加上 - 即可排除(例如 -host:cursor.sh 或 -cursor)。篩選可在更大的空間裡編輯隱藏的主機和處理程序。",
+ "toolbar.filters": "篩選",
+ "toolbar.filtersTip": "在較大的視窗中編輯搜尋以及隱藏的主機或處理程序",
+ "toolbar.hideConnect": "隱藏 CONNECT",
+ "toolbar.hideConnectTip": "關閉解密 HTTPS 時,隱藏不透明的 HTTPS 通道",
+ "toolbar.hideImages": "隱藏影像",
+ "toolbar.errorsOnly": "僅錯誤",
+ "toolbar.clearFilters": "清除篩選",
+ "toolbar.hidden": "已隱藏",
+ "ctx.replay": "重送",
+ "ctx.loadComposer": "載入至建構器",
+ "ctx.saveRequest": "儲存要求本文…",
+ "ctx.saveResponse": "儲存回應本文…",
+ "ctx.copyUrl": "複製 URL",
+ "ctx.copyCurl": "複製為 curl",
+ "ctx.copyFetch": "複製為 fetch",
+ "ctx.diff": "比較所選…",
+ "ctx.filterHost": "依主機篩選",
+ "ctx.hideHost": "隱藏主機",
+ "ctx.filterProcess": "依處理程序篩選",
+ "ctx.hideProcess": "隱藏處理程序",
+ "ctx.excludeHost": "排除主機…",
+ "ctx.excludeHostTip": "停止解密此主機的 HTTPS。這些列仍留在清單中;若要從檢視中移除,請使用隱藏主機。",
+ "grid.duration": "耗時(毫秒)",
+ "grid.wait": "等待(毫秒)",
+ "pane.inspect": "檢查",
+ "pane.composer": "建構器",
+ "pane.breakpoints": "中斷點",
+ "pane.autoResponder": "AutoResponder",
+ "pane.scripts": "指令碼",
+ "pane.mapRemote": "遠端對應",
+ "pane.closeTip": "關閉窗格",
+ "inspect.empty": "在表格中選取一個工作階段,以檢查要求和回應的標頭與本文。",
+ "common.ok": "確定",
+ "common.cancel": "取消",
+ "common.save": "儲存",
+ "common.apply": "套用",
+ "common.remove": "移除",
+ "common.browse": "瀏覽…",
+ "common.openFolder": "開啟資料夾",
+ "common.forget": "忘記",
+ "common.close": "關閉",
+ "loopback.window": "允許市集應用程式使用此代理",
+ "loopback.checkAll": "全部勾選",
+ "loopback.uncheckAll": "全部取消勾選",
+ "loopback.filterWatermark": "依應用程式名稱篩選…",
+ "loopback.clearAll": "全部清除",
+ "trust.macWindow": "在 Keychain Access 中確認信任",
+ "trust.openKeychain": "開啟 Keychain Access",
+ "trust.notNow": "稍後再說",
+ "trust.recoveryTitle": "根 CA 信任",
+ "trust.macWaitPlaceholder": "正在等待 SSL 信任…",
+ "window.about": "關於 Titanium Inspector",
+ "about.product": "Titanium Inspector",
+ "about.copyright": "著作權所有 © Jehonathan Thomas",
+ "about.license": "依 PolyForm Noncommercial License 1.0.0 授權。",
+ "about.licenseLink": "授權詳細資料",
+ "about.website": "titaniumproxy.com",
+ "window.filters": "篩選",
+ "filters.search": "搜尋",
+ "filters.searchHelp": "與工具列相同的搜尋,只是空間更大。隱藏的主機和處理程序列在下方,不在此方塊中。",
+ "filters.searchWatermark": "URL、主機、處理程序、method:GET、status:4xx…",
+ "filters.hideHeading": "從清單中隱藏",
+ "filters.hideHelp": "這些列仍會被擷取。此操作只會在清單中隱藏它們。若要停止解密 HTTPS,請使用排除主機…",
+ "filters.hosts": "主機",
+ "filters.addHostWatermark": "新增要隱藏的主機",
+ "filters.addHost": "新增主機",
+ "filters.processes": "處理程序",
+ "filters.addProcessWatermark": "新增要隱藏的處理程序",
+ "filters.addProcess": "新增處理程序",
+ "filters.processSpace": "名稱若含空白,會在第一個詞被截短,因此也可能隱藏含有該詞的其他名稱。",
+ "window.confirm": "確認",
+ "window.excludeHost": "排除主機",
+ "exclude.action": "排除",
+ "exclude.help": "此主機仍會出現在工作階段清單中。Inspector 不會嘗試讀取其 HTTPS。",
+ "window.logging": "記錄",
+ "logging.help": "寫入用於疑難排解的診斷訊息。變更會立即生效。",
+ "logging.enable": "啟用記錄",
+ "logging.writeFile": "將記錄寫入檔案",
+ "logging.detail": "詳細程度",
+ "logging.detailHelp": "Error = 僅問題。Warning / Information = 更多內容。Debug = 非常詳細。",
+ "logging.path": "記錄檔路徑",
+ "window.excludedHosts": "排除的主機",
+ "excluded.reset": "重設為預設值",
+ "excluded.bypass": "略過代理(作業系統)",
+ "excluded.bypassHelp": "開啟系統代理時,這些流量不會到達 Inspector。已預先填入 Microsoft 身分識別 / SSO / RDP 主機。在系統代理啟用時移除它們,可能導致 RDP 登入失敗。",
+ "excluded.notDecrypted": "不解密的主機",
+ "excluded.notDecryptedHelp": "開啟解密 HTTPS 時,CONNECT 仍可見,TLS 保持不透明。已預先填入憑證釘選主機(Dropbox、Webex)。",
+ "excluded.learnHeading": "解密失敗時自動不再解密",
+ "excluded.learn": "學習在解密下來源 TLS 失敗的主機",
+ "excluded.learnHelp": "當來源 TLS 在解密下反覆失敗,或來源伺服器傳回 403/429 時,Inspector 會在此次工作階段的後續連線中停止解密該主機。清單有上限,除非提升,否則重新啟動後會被忘記。",
+ "excluded.learnPaused": "學習已暫停 — 現有項目會保留到被忘記為止。",
+ "excluded.noneLearned": "尚未學習到任何主機。",
+ "excluded.promote": "提升為不解密的主機",
+ "excluded.clearLearned": "清除全部已學習項",
+ "window.retention": "工作階段保留",
+ "retention.max": "最多保留的工作階段數",
+ "retention.maxHelp": "工作階段清單中保留多少要求。超過此數時,最舊的列會離開清單,但仍留在磁碟上,直到清除工作階段或磁碟空間上限將其刪除。",
+ "retention.cache": "快取資料夾",
+ "retention.openCache": "開啟快取資料夾",
+ "retention.clearCache": "清除已儲存的工作階段快取…",
+ "retention.advanced": "進階",
+ "retention.disk": "已儲存工作階段的磁碟空間(MB)",
+ "retention.diskHelp": "磁碟上所有已儲存工作階段的最大空間(所有 Inspector 執行)。每次執行使用一個帶時間戳記的子資料夾;超過此限制時會先刪除最舊的 HAR 檔案。空白的執行資料夾會被移除。",
+ "loopback.intro": "Windows 市集 / UWP 應用程式預設無法存取 localhost。勾選應使用 Inspector 的應用程式,然後套用。套用後請重新啟動每個應用程式(完全結束)。Inspector 必須在系統代理開啟時執行。全部清除會移除每一筆允許項目。",
+ "loopback.closedUnchanged": "市集應用程式未變更。",
+ "loopback.proxyStopped": "請啟動代理並開啟系統代理。兩者都開啟之前,無法擷取市集應用程式。",
+ "loopback.systemProxyOff": "請開啟系統代理(擷取功能表)。允許清單只讓市集應用程式連到 localhost;它們仍遵循系統代理。",
+ "loopback.refreshing": "正在重新整理系統代理,以便執行中的應用程式重新連線…",
+ "loopback.unchangedCount": "允許清單已相符:{0}。",
+ "loopback.allowed": "已允許:{0}。",
+ "loopback.allowedRefreshed": " 已重新整理系統代理,以便執行中的應用程式重新連線。如果流量仍未出現,請完全結束並重新開啟該應用程式。",
+ "loopback.allowedProxyStopped": " 請啟動代理並開啟系統代理,然後完全結束並重新開啟該應用程式。",
+ "loopback.allowedSystemProxyOff": " 請開啟系統代理,然後完全結束並重新開啟該應用程式。",
+ "loopback.allowedReady": " 請完全結束並重新開啟該應用程式以擷取流量。",
+ "loopback.clearedRefreshed": "已清除所有回送豁免。已重新整理系統代理,以便執行中的應用程式重新連線。",
+ "loopback.clearedReady": "已清除所有回送豁免。請完全結束並重新開啟任何曾使用 Inspector 的應用程式。",
+ "loopback.cleared": "已清除所有回送豁免。",
+ "trust.macWaitBody": "Keychain 的「顯示簡介」可能已經顯示「永遠信任」,即使 SSL 原則並未儲存(Chrome 和 Inspector 仍會將該 CA 視為不受信任)。\n\n請強制儲存:\n1. Keychain Access → 登入 → 憑證 → 按兩下 Titanium Root Certificate Authority\n2. 展開信任\n3. 將「使用此憑證時」設為「使用系統預設」,然後再改回「永遠信任」\n4. 關閉「顯示簡介」——必須出現密碼提示;這才會寫入真正的 SSL 信任原則\n\n偵測到這些原則後,此視窗會自動關閉。如果已經儲存,請按一下「我已儲存永遠信任」。",
+ "trust.macWaitStatus": "正在等待 Keychain 中的憑證…",
+ "trust.macWaitInKeychain": "正在等待已儲存的 SSL 原則(切換永遠信任,關閉顯示簡介,輸入密碼)…",
+ "trust.macNotSaved": "僅顯示永遠信任不夠 — 請在使用系統預設與永遠信任之間切換,關閉顯示簡介,輸入密碼,然後再次嘗試安裝根 CA / 解密 HTTPS",
+ "trust.macConfirmSaved": "我已儲存永遠信任",
+ "trust.exportCa": "匯出 CA",
+ "trust.install.mac": "解密 HTTPS 需要在 Keychain Access(登入鑰匙圈)中信任 Titanium Inspector 根 CA。是否立即安裝?",
+ "trust.install.linux": "解密 HTTPS 需要在你的使用者憑證存放區(NSS)中信任 Titanium Inspector 根 CA。是否立即安裝?",
+ "trust.install.windows": "解密 HTTPS 需要在目前使用者的受信任根存放區中信任 Titanium Inspector 根 CA。是否立即安裝?\n\nWindows 可能會顯示受信任根的是/否安全性對話方塊(不是 UAC)— 請選擇是以信任該 CA。",
+ "trust.install.other": "解密 HTTPS 需要在這部電腦上信任 Titanium Inspector 根 CA。是否立即安裝?",
+ "trust.remove.mac": "要從 Keychain 中移除 Titanium Inspector 根 CA 嗎?HTTPS 解密將會關閉。",
+ "trust.remove.linux": "要從你的使用者憑證存放區(NSS)中移除 Titanium Inspector 根 CA 嗎?HTTPS 解密將會關閉。",
+ "trust.remove.windows": "要從目前使用者的受信任根存放區中移除 Titanium Inspector 根 CA 嗎?HTTPS 解密將會關閉。",
+ "trust.remove.other": "要移除 Titanium Inspector 根 CA 嗎?HTTPS 解密將會關閉。",
+ "trust.elevate.mac": "使用者層級信任失敗或不足。是否繼續以顯示 macOS 管理員密碼提示?取消將保持憑證設定不變。",
+ "trust.elevate.linux": "使用者層級信任失敗或不足。是否繼續以顯示 polkit 管理員提示?取消將保持憑證設定不變。",
+ "trust.elevate.windows": "使用者層級信任失敗或不足。是否繼續以顯示 UAC?取消將保持憑證設定不變。",
+ "trust.elevate.other": "使用者層級信任失敗或不足。是否繼續以顯示管理員提示?取消將保持憑證設定不變。",
+ "trust.recovery.mac": "\n\n是否繼續以顯示 macOS 管理員密碼提示?稍後再說將保持憑證設定不變。",
+ "trust.recovery.linux": "\n\n是否繼續以顯示 polkit 管理員提示?稍後再說將保持憑證設定不變。",
+ "trust.recovery.windows": "\n\n是否繼續以顯示 UAC?稍後再說將保持憑證設定不變。",
+ "trust.recovery.other": "\n\n是否繼續以顯示管理員提示?稍後再說將保持憑證設定不變。",
+ "trust.hosts.mac": "作業系統略過需要擷取 → 系統代理(使用 macOS 網路代理設定)。僅通道規則適用於每個連到 Inspector 的用戶端。原廠預設值已填入下方清單 — 可自由編輯或重設。",
+ "trust.hosts.linux": "作業系統略過需要擷取 → 系統代理(使用桌面 / 環境代理設定)。僅通道規則適用於每個連到 Inspector 的用戶端。原廠預設值已填入下方清單 — 可自由編輯或重設。",
+ "trust.hosts.windows": "作業系統略過需要擷取 → 系統代理(使用 WinINET)。僅通道規則適用於每個連到 Inspector 的用戶端。原廠預設值已填入下方清單 — 可自由編輯或重設。",
+ "trust.hosts.other": "作業系統略過需要擷取 → 系統代理。僅通道規則適用於每個連到 Inspector 的用戶端。原廠預設值已填入下方清單 — 可自由編輯或重設。",
+ "trust.localhost.mac": "開啟系統代理時,讓 localhost 經過 Inspector。關閉則會把 localhost 加入 macOS 代理略過清單。",
+ "trust.localhost.linux": "開啟系統代理時,讓 localhost 經過 Inspector。關閉則會把 localhost 加入 NO_PROXY。",
+ "trust.localhost.windows": "開啟系統代理時,讓 localhost 經過 Inspector(WinINET <-loopback>)。關閉則允許回送略過代理。",
+ "trust.localhost.other": "開啟系統代理時,讓 localhost 經過 Inspector。",
+ "trust.status.missing": "根 CA 尚未受信任 — 請重試,或匯出 CA",
+ "trust.status.cancelled": "已取消安裝根 CA",
+ "trust.status.certutil": "缺少瀏覽器憑證工具 — 請安裝後重試,或匯出 CA",
+ "trust.status.homebrew": "安裝憑證工具需要 Homebrew — 請匯出 CA 以手動信任",
+ "trust.status.macConfirm": "請在 Keychain Access 中將 Titanium Inspector 根 CA 設為永遠信任",
+ "trust.status.keychain": "Keychain 信任失敗 — 請重試,或匯出 CA 並手動信任",
+ "trust.fail.keychainTitle": "在 Keychain 中確認信任",
+ "trust.fail.continueKeychain": "在 Keychain Access 中繼續",
+ "trust.fail.toolsTitle": "需要憑證工具",
+ "trust.fail.toolsLinux": "Inspector 需要 certutil(NSS 工具)才能完成對根 CA 的信任。",
+ "trust.fail.toolsOther": "Inspector 需要瀏覽器憑證工具才能完成對根 CA 的信任。",
+ "trust.fail.tryAgain": "重試",
+ "trust.fail.homebrewBody": "安裝憑證工具需要 Homebrew。請匯出該 CA 以手動信任。",
+ "trust.fail.title": "暫時無法解密 HTTPS",
+ "trust.fail.body": "這部電腦尚未信任 Titanium Inspector 根 CA。",
+ "toolbar.throttle": "節流",
+ "toolbar.throttleTip": "在擷取期間加入延遲與頻寬塑形(本文寫入 / WebSocket 訊框)。預設為關閉。",
+ "toolbar.bindWatermark": "*、localhost 或 IP",
+ "toolbar.bindTip": "127.0.0.1 或 localhost = 僅這部電腦。0.0.0.0 或 * = 所有網路介面卡(包括 localhost)。",
+ "toolbar.portWatermark": "* 或連接埠",
+ "toolbar.portTip": "* 或空 = 作業系統選擇的連接埠(實際連接埠會在啟動後出現)。否則為 1–65535。",
+ "toolbar.listeningTip": "代理正在聆聽",
+ "toolbar.trustHealthTip": "解密 HTTPS 的根 CA 信任狀態。若顯示未受信任,請安裝或信任該 CA。",
+ "chip.process": "處理程序",
+ "inspect.request": "要求",
+ "inspect.requestTip": "要求標頭與本文",
+ "inspect.copyHeaders": "複製標頭",
+ "inspect.resizeTip": "拖曳以調整大小。按兩下以重設。",
+ "inspect.pretty": "美化",
+ "inspect.hex": "十六進位",
+ "inspect.hexTip": "將本文顯示為十六進位傾印",
+ "inspect.saveRequest": "儲存要求…",
+ "inspect.response": "回應",
+ "inspect.responseTip": "回應標頭與本文",
+ "inspect.saveResponse": "儲存回應…",
+ "inspect.diff": "比較",
+ "inspect.frames": "WS 訊框",
+ "inspect.framesHelp": "此工作階段的即時 WebSocket 訊框(方向、作業碼、承載預覽)。",
+ "inspect.sse": "SSE",
+ "inspect.sseHelp": "從回應本文剖析的伺服器傳送事件。",
+ "inspect.protobuf": "Protobuf",
+ "inspect.showHeaders": "顯示標頭",
+ "inspect.hideHeaders": "隱藏標頭",
+ "inspect.headers": "標頭 ({0})",
+ "inspect.prettyTip": "縮排 JSON、XML 與 HTML",
+ "inspect.prettyHexTip": "十六進位檢視中不適用",
+ "inspect.emptyBody": "(空)",
+ "inspect.noRequestBody": "沒有要求本文",
+ "inspect.waiting": "正在等候回應…",
+ "composer.help": "透過代理建構並傳送要求。從所選載入會複製目前的工作階段。",
+ "composer.method": "方法",
+ "composer.url": "URL",
+ "composer.headers": "標頭(每行 名稱: 值)",
+ "composer.body": "本文",
+ "composer.loadSelected": "從所選載入",
+ "composer.loadBody": "從檔案載入本文…",
+ "composer.send": "傳送",
+ "bp.help": "暫停符合的用戶端要求,以便編輯本文、繼續或中止。一次只暫停一個;120s 後會自動繼續。取消勾選已啟用會讓已暫停的要求繼續。",
+ "bp.enabled": "已啟用",
+ "bp.breakOnResponse": "在回應處中斷",
+ "bp.match": "比對",
+ "bp.urlWatermark": "URL 篩選(* = 全部,例如 *api*/users*)",
+ "bp.graphqlWatermark": "僅此 GraphQL 作業(選擇性)",
+ "bp.graphqlTip": "對用戶端要求本文的額外篩選。比對 JSON 的 operationName 或具名查詢。留空則比對該 URL 上的每個作業。",
+ "bp.fromSelected": "從所選工作階段",
+ "bp.fromSelectedTip": "從所選工作階段的要求複製 GraphQL 作業名稱。",
+ "bp.graphqlHelp": "將 GraphQL 方塊留空可比對每個作業。填入內容(例如 GetUser)只會暫停上方 URL 上的該用戶端要求。在回應處中斷仍使用 URL 篩選。",
+ "bp.editWatermark": "編輯本文(套用本文編輯,然後繼續)",
+ "bp.applyEdit": "套用本文編輯",
+ "bp.continue": "繼續",
+ "bp.abort": "中止",
+ "ar.help": "在真正的伺服器之前傳回假的回應。比對決定規則要套用到哪些用戶端要求;其下方的欄位就是你傳回的內容。",
+ "ar.enabled": "已啟用(在中斷點之前)",
+ "ar.urlWatermark": "比對 URL(* 萬用字元)",
+ "ar.graphqlHelp": "同一個 URL 上的不同 GraphQL 作業可以使用不同規則。留空則比對每個作業。",
+ "ar.respondWith": "以此回應",
+ "ar.statusTip": "HTTP 狀態。留空 = 200。請使用 100–599。",
+ "ar.contentType": "Content-Type",
+ "ar.mapLocal": "Map Local 檔案(選擇性)",
+ "ar.bodyWatermark": "回應本文(當 Map Local 為空時使用)",
+ "ar.add": "新增規則",
+ "ar.update": "更新規則",
+ "ar.delete": "刪除規則",
+ "script.intro": "對每個擷取的工作階段,每行一條命令。這不是 JavaScript 或 C# — 只輸入下面的命令。",
+ "script.what": "可以輸入什麼",
+ "script.setHeaderHelp": "新增或取代一個標頭。流量仍會繼續送往伺服器。",
+ "script.setStatusHelp": "對於要求:立即回應並略過伺服器。對於回應:變更用戶端看到的狀態。",
+ "script.abortHelp": "以 403 Forbidden 封鎖。新增一行 set-status 以選擇其他狀態碼。",
+ "script.comment": "以 # 或 // 開頭表示註解。可以組合命令;每條命令單獨一行。",
+ "script.onRequest": "對於要求",
+ "script.onResponse": "對於回應",
+ "script.requestSkips": "此處的 abort 或 set-status 會略過 AutoResponder、中斷點與來源。",
+ "map.help": "在到達真正的伺服器之前,將符合的用戶端要求改寫到另一個來源。在比對與目標中各使用一個 *,以保留路徑/查詢尾碼。在 AutoResponder / Map Local 之後執行。",
+ "map.graphqlHelp": "留空則改寫該 URL 上的每個作業。填寫則只改寫該 GraphQL 作業。",
+ "map.rewriteTo": "改寫到",
+ "map.targetWatermark": "目標 URL(絕對位址,選擇性 *)",
+ "loopback.allow": "允許",
+ "loopback.appName": "應用程式名稱",
+ "loopback.packageId": "套件 ID",
+ "status.ready": "就緒",
+ "status.searchingBodies": "正在搜尋本文…",
+ "status.proxyStopped": "代理已停止",
+ "status.proxyRunning": "代理正在 {0} 上執行",
+ "trust.health.trusted": "CA 已受信任",
+ "trust.health.untrusted": "CA 未受信任"
+}
diff --git a/src/Titanium.Inspector/Services/LoopbackExemptCopy.cs b/src/Titanium.Inspector/Services/LoopbackExemptCopy.cs
index 6cd56b5e9..41439cfeb 100644
--- a/src/Titanium.Inspector/Services/LoopbackExemptCopy.cs
+++ b/src/Titanium.Inspector/Services/LoopbackExemptCopy.cs
@@ -1,3 +1,5 @@
+using Titanium.Inspector.Localization;
+
namespace Titanium.Inspector.Services;
/// Whether Inspector can receive Store-app traffic right now.
@@ -37,20 +39,15 @@ public LoopbackCaptureReadiness CurrentReadiness() =>
/// User-facing copy for Allow Store apps. Shared by the dialog and tests.
public static class LoopbackExemptCopy
{
- public const string Intro =
- "Windows Store / UWP apps are blocked from localhost by default. Check apps that should use Inspector, then Apply. " +
- "Restart each app (fully quit it) after Apply. Inspector must be running with System proxy on. " +
- "Clear all removes every allow entry.";
+ public static string Intro => LanguageService.Get("loopback.intro");
- public const string ClosedUnchanged = "Store apps unchanged.";
+ public static string ClosedUnchanged => LanguageService.Get("loopback.closedUnchanged");
- public const string ProxyStoppedWarning =
- "Start the proxy and turn on System proxy. Store apps cannot be captured until both are on.";
+ public static string ProxyStoppedWarning => LanguageService.Get("loopback.proxyStopped");
- public const string SystemProxyOffWarning =
- "Turn on System proxy (Capture menu). The allow list only lets Store apps reach localhost; they still follow the system proxy.";
+ public static string SystemProxyOffWarning => LanguageService.Get("loopback.systemProxyOff");
- public const string RefreshingStatus = "Refreshing system proxy so running apps reconnect…";
+ public static string RefreshingStatus => LanguageService.Get("loopback.refreshing");
public static string? ProxyWarning(LoopbackCaptureReadiness readiness) => readiness switch
{
@@ -74,26 +71,23 @@ public static bool SameSet(IEnumerable left, IEnumerable right)
}
public static string UnchangedStatus(int count) =>
- count == 1
- ? "Allow list already matches this app."
- : $"Allow list already matches these {count} apps.";
+ LanguageService.Format("loopback.unchangedCount", count);
public static string AppliedStatus(int count, LoopbackCaptureReadiness readiness, bool refreshed)
{
- var allowed = count == 1 ? "Allowed 1 app." : $"Allowed {count} apps.";
+ var allowed = LanguageService.Format("loopback.allowed", count);
if (refreshed)
{
- return allowed +
- " System proxy was refreshed so running apps reconnect. If traffic still does not appear, fully quit and reopen the app.";
+ return allowed + LanguageService.Get("loopback.allowedRefreshed");
}
return readiness switch
{
LoopbackCaptureReadiness.ProxyStopped =>
- allowed + " Start the proxy and turn on System proxy, then fully quit and reopen the app.",
+ allowed + LanguageService.Get("loopback.allowedProxyStopped"),
LoopbackCaptureReadiness.SystemProxyOff =>
- allowed + " Turn on System proxy, then fully quit and reopen the app.",
- _ => allowed + " Fully quit and reopen the app to capture traffic.",
+ allowed + LanguageService.Get("loopback.allowedSystemProxyOff"),
+ _ => allowed + LanguageService.Get("loopback.allowedReady"),
};
}
@@ -101,12 +95,12 @@ public static string ClearedStatus(LoopbackCaptureReadiness readiness, bool refr
{
if (refreshed)
{
- return "All loopback exemptions cleared. System proxy was refreshed so running apps reconnect.";
+ return LanguageService.Get("loopback.clearedRefreshed");
}
return readiness == LoopbackCaptureReadiness.Ready
- ? "All loopback exemptions cleared. Fully quit and reopen any app that was using Inspector."
- : "All loopback exemptions cleared.";
+ ? LanguageService.Get("loopback.clearedReady")
+ : LanguageService.Get("loopback.cleared");
}
private static HashSet ToSet(IEnumerable values) =>
diff --git a/src/Titanium.Inspector/Services/OsThemePreference.cs b/src/Titanium.Inspector/Services/OsThemePreference.cs
new file mode 100644
index 000000000..0f1dd9c96
--- /dev/null
+++ b/src/Titanium.Inspector/Services/OsThemePreference.cs
@@ -0,0 +1,250 @@
+using System.Diagnostics;
+using Avalonia.Styling;
+
+namespace Titanium.Inspector.Services;
+
+///
+/// Automatic theme. Windows and macOS keep so Avalonia
+/// follows UISettings and NSAppearance, including later changes.
+/// Linux does the same when the desktop portal reports light or dark. When the portal is
+/// missing or has no preference, GTK and KDE settings decide.
+///
+internal static class OsThemePreference
+{
+ public static ThemeVariant AutomaticVariant()
+ {
+ if (!OperatingSystem.IsLinux())
+ {
+ return ThemeVariant.Default;
+ }
+
+ var scheme = TryReadPortalColorScheme();
+ if (scheme is 1 or 2)
+ {
+ return ThemeVariant.Default;
+ }
+
+ return FilePrefersDark() ? ThemeVariant.Dark : ThemeVariant.Default;
+ }
+
+ internal static bool FilePrefersDark()
+ {
+ var config = ConfigDirectory();
+ return PrefersDark(
+ Environment.GetEnvironmentVariable("XDG_CURRENT_DESKTOP"),
+ Environment.GetEnvironmentVariable("GTK_THEME"),
+ ReadIfExists(Path.Combine(config, "gtk-4.0", "settings.ini")),
+ ReadIfExists(Path.Combine(config, "gtk-3.0", "settings.ini")),
+ ReadIfExists(Path.Combine(config, "kdeglobals")));
+ }
+
+ internal static bool PrefersDark(string? desktop, string? gtkThemeEnv, string? gtk4Ini, string? gtk3Ini, string? kdeGlobals)
+ {
+ var fromEnv = GtkThemeEnvPrefersDark(gtkThemeEnv);
+ if (fromEnv is not null)
+ {
+ return fromEnv.Value;
+ }
+
+ var gtk = GtkSettingsPrefersDark(gtk4Ini) ?? GtkSettingsPrefersDark(gtk3Ini);
+ var kde = KdePrefersDark(kdeGlobals);
+ var isKde = desktop is not null && desktop.Contains("KDE", StringComparison.OrdinalIgnoreCase);
+ if (isKde)
+ {
+ return kde ?? gtk ?? false;
+ }
+
+ return gtk ?? kde ?? false;
+ }
+
+ internal static bool? GtkThemeEnvPrefersDark(string? value)
+ {
+ if (string.IsNullOrWhiteSpace(value))
+ {
+ return null;
+ }
+
+ if (value.Contains(":dark", StringComparison.OrdinalIgnoreCase))
+ {
+ return true;
+ }
+
+ if (value.Contains(":light", StringComparison.OrdinalIgnoreCase))
+ {
+ return false;
+ }
+
+ return value.Contains("dark", StringComparison.OrdinalIgnoreCase) ? true : null;
+ }
+
+ internal static bool? GtkSettingsPrefersDark(string? iniText)
+ {
+ if (string.IsNullOrEmpty(iniText))
+ {
+ return null;
+ }
+
+ bool? prefer = null;
+ string? theme = null;
+ foreach (var raw in iniText.Split('\n'))
+ {
+ var line = raw.Trim();
+ if (line.Length == 0 || line[0] is '#' or '[')
+ {
+ continue;
+ }
+
+ var eq = line.IndexOf('=');
+ if (eq <= 0)
+ {
+ continue;
+ }
+
+ var key = line[..eq].Trim();
+ var val = line[(eq + 1)..].Trim().Trim('"');
+ if (key.Equals("gtk-application-prefer-dark-theme", StringComparison.OrdinalIgnoreCase))
+ {
+ prefer = val is "1" or "true" or "yes";
+ }
+ else if (key.Equals("gtk-theme-name", StringComparison.OrdinalIgnoreCase))
+ {
+ theme = val;
+ }
+ }
+
+ if (prefer is not null)
+ {
+ return prefer;
+ }
+
+ if (theme is null)
+ {
+ return null;
+ }
+
+ return theme.Contains("dark", StringComparison.OrdinalIgnoreCase);
+ }
+
+ internal static bool? KdePrefersDark(string? text)
+ {
+ if (string.IsNullOrEmpty(text))
+ {
+ return null;
+ }
+
+ string? scheme = null;
+ foreach (var raw in text.Split('\n'))
+ {
+ var line = raw.Trim();
+ const string key = "ColorScheme=";
+ if (line.StartsWith(key, StringComparison.Ordinal))
+ {
+ scheme = line[key.Length..].Trim();
+ }
+ }
+
+ return scheme is null ? null : scheme.Contains("dark", StringComparison.OrdinalIgnoreCase);
+ }
+
+ /// Portal color-scheme: 0 no preference, 1 dark, 2 light. Null when the portal cannot be read.
+ internal static int? ParseColorScheme(string? output)
+ {
+ if (string.IsNullOrWhiteSpace(output))
+ {
+ return null;
+ }
+
+ var marker = "uint32";
+ var index = output.IndexOf(marker, StringComparison.Ordinal);
+ if (index >= 0)
+ {
+ var rest = output[(index + marker.Length)..].TrimStart();
+ var length = 0;
+ while (length < rest.Length && char.IsDigit(rest[length]))
+ {
+ length++;
+ }
+
+ if (length > 0 && int.TryParse(rest[..length], out var scheme) && scheme is >= 0 and <= 2)
+ {
+ return scheme;
+ }
+ }
+
+ return null;
+ }
+
+ private static int? TryReadPortalColorScheme()
+ {
+ try
+ {
+ using var process = new Process();
+ process.StartInfo = new ProcessStartInfo
+ {
+ FileName = "/usr/bin/gdbus",
+ RedirectStandardOutput = true,
+ RedirectStandardError = true,
+ UseShellExecute = false,
+ CreateNoWindow = true,
+ };
+ process.StartInfo.ArgumentList.Add("call");
+ process.StartInfo.ArgumentList.Add("--session");
+ process.StartInfo.ArgumentList.Add("--dest");
+ process.StartInfo.ArgumentList.Add("org.freedesktop.portal.Desktop");
+ process.StartInfo.ArgumentList.Add("--object-path");
+ process.StartInfo.ArgumentList.Add("/org/freedesktop/portal/desktop");
+ process.StartInfo.ArgumentList.Add("--method");
+ process.StartInfo.ArgumentList.Add("org.freedesktop.portal.Settings.Read");
+ process.StartInfo.ArgumentList.Add("org.freedesktop.appearance");
+ process.StartInfo.ArgumentList.Add("color-scheme");
+ if (!process.Start())
+ {
+ return null;
+ }
+
+ if (!process.WaitForExit(500))
+ {
+ try
+ {
+ process.Kill(entireProcessTree: true);
+ }
+ catch (InvalidOperationException)
+ {
+ // already exited
+ }
+
+ return null;
+ }
+
+ return ParseColorScheme(process.StandardOutput.ReadToEnd());
+ }
+ catch (Exception ex) when (ex is InvalidOperationException or System.ComponentModel.Win32Exception or IOException)
+ {
+ return null;
+ }
+ }
+
+ private static string ConfigDirectory()
+ {
+ var xdg = Environment.GetEnvironmentVariable("XDG_CONFIG_HOME");
+ return string.IsNullOrWhiteSpace(xdg)
+ ? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".config")
+ : xdg;
+ }
+
+ private static string? ReadIfExists(string path)
+ {
+ try
+ {
+ return File.Exists(path) ? File.ReadAllText(path) : null;
+ }
+ catch (IOException)
+ {
+ return null;
+ }
+ catch (UnauthorizedAccessException)
+ {
+ return null;
+ }
+ }
+}
diff --git a/src/Titanium.Inspector/Services/OsTrustUxCopy.cs b/src/Titanium.Inspector/Services/OsTrustUxCopy.cs
index e5d13a3e0..ea7b5deb1 100644
--- a/src/Titanium.Inspector/Services/OsTrustUxCopy.cs
+++ b/src/Titanium.Inspector/Services/OsTrustUxCopy.cs
@@ -1,3 +1,4 @@
+using Titanium.Inspector.Localization;
using Titanium.Web.Proxy.Network;
namespace Titanium.Inspector.Services;
@@ -5,127 +6,115 @@ namespace Titanium.Inspector.Services;
/// Shared user-facing copy for root CA trust — always current-OS only.
public static class OsTrustUxCopy
{
- public const string MacSslTrustWaitBody =
- "Keychain Get Info can already show Always Trust even when SSL policies were not saved " +
- "(Chrome and Inspector still treat the CA as untrusted).\n\n" +
- "Force a save:\n" +
- "1. Keychain Access → login → Certificates → double-click Titanium Root Certificate Authority\n" +
- "2. Expand Trust\n" +
- "3. Set When using this certificate to Use System Defaults, then change it to Always Trust again\n" +
- "4. Close Get Info — you must get a password prompt; that writes the real SSL trust policies\n\n" +
- "This window closes automatically when those policies are detected. " +
- "If you already saved, click I’ve saved Always Trust.";
+ public static string MacSslTrustWaitBody => LanguageService.Get("trust.macWaitBody");
- public const string MacSslTrustWaitStatusWaiting = "Waiting for the certificate in Keychain…";
- public const string MacSslTrustWaitStatusInKeychain =
- "Waiting for saved SSL policies (toggle Always Trust, close Get Info, enter password)…";
+ public static string MacSslTrustWaitStatusWaiting => LanguageService.Get("trust.macWaitStatus");
- public const string MacSslTrustNotSavedYet =
- "Always Trust display is not enough — toggle Use System Defaults → Always Trust, close Get Info, " +
- "enter your password, then try Install root CA / Decrypt HTTPS again";
+ public static string MacSslTrustWaitStatusInKeychain => LanguageService.Get("trust.macWaitInKeychain");
- public const string MacSslTrustWaitConfirmSaved = "I’ve saved Always Trust";
+ public static string MacSslTrustNotSavedYet => LanguageService.Get("trust.macNotSaved");
- private const string ExportCaLabel = "Export CA";
+ public static string MacSslTrustWaitConfirmSaved => LanguageService.Get("trust.macConfirmSaved");
+
+ private static string ExportCaLabel => LanguageService.Get("trust.exportCa");
/// Install-root confirm body for the OS this process is running on.
public static string ConfirmInstallRootCaBody()
{
if (OperatingSystem.IsMacOS())
{
- return "Decrypt HTTPS requires trusting the Titanium Inspector root CA in Keychain Access (login keychain). Install now?";
+ return LanguageService.Get("trust.install.mac");
}
if (OperatingSystem.IsLinux())
{
- return "Decrypt HTTPS requires trusting the Titanium Inspector root CA in your user certificate store (NSS). Install now?";
+ return LanguageService.Get("trust.install.linux");
}
if (OperatingSystem.IsWindows())
{
- return "Decrypt HTTPS requires trusting the Titanium Inspector root CA in your current-user Trusted Root store. Install now?" +
- "\n\nWindows may show a Trusted Root Yes/No security dialog (not UAC) — choose Yes to trust the CA.";
+ return LanguageService.Get("trust.install.windows");
}
- return "Decrypt HTTPS requires trusting the Titanium Inspector root CA on this computer. Install now?";
+ return LanguageService.Get("trust.install.other");
}
public static string ConfirmRemoveRootCaBody()
{
if (OperatingSystem.IsMacOS())
- return "Remove the Titanium Inspector root CA from Keychain? HTTPS decrypt will be turned off.";
+ return LanguageService.Get("trust.remove.mac");
if (OperatingSystem.IsLinux())
- return "Remove the Titanium Inspector root CA from your user certificate store (NSS)? HTTPS decrypt will be turned off.";
+ return LanguageService.Get("trust.remove.linux");
if (OperatingSystem.IsWindows())
- return "Remove the Titanium Inspector root CA from the current-user Trusted Root store? HTTPS decrypt will be turned off.";
- return "Remove the Titanium Inspector root CA? HTTPS decrypt will be turned off.";
+ return LanguageService.Get("trust.remove.windows");
+ return LanguageService.Get("trust.remove.other");
}
public static string ConfirmElevateRootCaBody()
{
if (OperatingSystem.IsMacOS())
- return "User-level trust failed or was insufficient. Continue to show a macOS admin password prompt? Cancel leaves certificate settings unchanged.";
+ return LanguageService.Get("trust.elevate.mac");
if (OperatingSystem.IsLinux())
- return "User-level trust failed or was insufficient. Continue to show a polkit admin prompt? Cancel leaves certificate settings unchanged.";
+ return LanguageService.Get("trust.elevate.linux");
if (OperatingSystem.IsWindows())
- return "User-level trust failed or was insufficient. Continue to show UAC? Cancel leaves certificate settings unchanged.";
- return "User-level trust failed or was insufficient. Continue with an admin prompt? Cancel leaves certificate settings unchanged.";
+ return LanguageService.Get("trust.elevate.windows");
+ return LanguageService.Get("trust.elevate.other");
}
public static string TrustRecoveryAdminBody(string message)
{
if (OperatingSystem.IsMacOS())
- return message + "\n\nContinue to show a macOS admin password prompt? Not now leaves certificate settings unchanged.";
+ return message + LanguageService.Get("trust.recovery.mac");
if (OperatingSystem.IsLinux())
- return message + "\n\nContinue to show a polkit admin prompt? Not now leaves certificate settings unchanged.";
+ return message + LanguageService.Get("trust.recovery.linux");
if (OperatingSystem.IsWindows())
- return message + "\n\nContinue to show UAC? Not now leaves certificate settings unchanged.";
- return message + "\n\nContinue with an admin prompt? Not now leaves certificate settings unchanged.";
+ return message + LanguageService.Get("trust.recovery.windows");
+ return message + LanguageService.Get("trust.recovery.other");
}
public static string ExcludedHostsIntro()
{
if (OperatingSystem.IsMacOS())
- return "OS bypass needs Capture → System proxy (uses macOS network proxy settings). Tunnel-only rules apply to every client that hits Inspector. Factory defaults are seeded into the lists below — edit freely or reset.";
+ return LanguageService.Get("trust.hosts.mac");
if (OperatingSystem.IsLinux())
- return "OS bypass needs Capture → System proxy (uses desktop / environment proxy settings). Tunnel-only rules apply to every client that hits Inspector. Factory defaults are seeded into the lists below — edit freely or reset.";
+ return LanguageService.Get("trust.hosts.linux");
if (OperatingSystem.IsWindows())
- return "OS bypass needs Capture → System proxy (uses WinINET). Tunnel-only rules apply to every client that hits Inspector. Factory defaults are seeded into the lists below — edit freely or reset.";
- return "OS bypass needs Capture → System proxy. Tunnel-only rules apply to every client that hits Inspector. Factory defaults are seeded into the lists below — edit freely or reset.";
+ return LanguageService.Get("trust.hosts.windows");
+ return LanguageService.Get("trust.hosts.other");
}
public static string ProxyLocalhostTip()
{
if (OperatingSystem.IsMacOS())
- return "When System proxy is on, send localhost through Inspector. Off adds localhost to the macOS proxy bypass list.";
+ return LanguageService.Get("trust.localhost.mac");
if (OperatingSystem.IsLinux())
- return "When System proxy is on, send localhost through Inspector. Off adds localhost to NO_PROXY.";
+ return LanguageService.Get("trust.localhost.linux");
if (OperatingSystem.IsWindows())
- return "When System proxy is on, send localhost through Inspector (WinINET <-loopback>). Off lets loopback skip the proxy.";
- return "When System proxy is on, send localhost through Inspector.";
+ return LanguageService.Get("trust.localhost.windows");
+ return LanguageService.Get("trust.localhost.other");
}
public static string FormatStatus(CertificateOsTrustResult? result)
{
if (result is null)
- return "Root CA is not trusted yet — try again, or Export CA";
+ return LanguageService.Get("trust.status.missing");
return result.Kind switch
{
CertificateOsTrustKind.Cancelled =>
- "Root CA install cancelled",
+ LanguageService.Get("trust.status.cancelled"),
CertificateOsTrustKind.CertutilMissing =>
- "Browser certificate tools are missing — install them, try again, or Export CA",
+ LanguageService.Get("trust.status.certutil"),
CertificateOsTrustKind.HomebrewMissing =>
string.IsNullOrWhiteSpace(result.Message)
- ? "Homebrew is required to install certificate tools — Export CA to trust manually"
+ ? LanguageService.Get("trust.status.homebrew")
: result.Message,
CertificateOsTrustKind.MacNeedsManualTrustConfirm =>
- "Set Always Trust for the Titanium Inspector root CA in Keychain Access",
+ LanguageService.Get("trust.status.macConfirm"),
CertificateOsTrustKind.MacKeychainFailed =>
- "Keychain trust failed — try again, or Export CA and trust it manually",
+ LanguageService.Get("trust.status.keychain"),
_ => string.IsNullOrWhiteSpace(result.Message)
- ? "Root CA is not trusted yet — try again, or Export CA"
+ ? LanguageService.Get("trust.status.missing")
: result.Message,
};
}
@@ -141,35 +130,33 @@ public static (string Title, string Body, string Primary, string? Secondary, dou
return kind switch
{
CertificateOsTrustKind.MacNeedsManualTrustConfirm => (
- "Confirm trust in Keychain",
+ LanguageService.Get("trust.fail.keychainTitle"),
detail ?? MacSslTrustWaitBody,
- "Continue in Keychain Access",
+ LanguageService.Get("trust.fail.continueKeychain"),
ExportCaLabel,
360),
CertificateOsTrustKind.CertutilMissing => (
- "Certificate tools needed",
+ LanguageService.Get("trust.fail.toolsTitle"),
detail ??
(OperatingSystem.IsLinux()
- ? "Inspector needs certutil (NSS tools) to finish trusting the root CA."
- : "Inspector needs browser certificate tools to finish trusting the root CA."),
- "Try again",
+ ? LanguageService.Get("trust.fail.toolsLinux")
+ : LanguageService.Get("trust.fail.toolsOther")),
+ LanguageService.Get("trust.fail.tryAgain"),
ExportCaLabel,
280),
CertificateOsTrustKind.HomebrewMissing => (
- "Certificate tools needed",
- detail ??
- "Homebrew is required to install certificate tools. Export the CA to trust it manually.",
+ LanguageService.Get("trust.fail.toolsTitle"),
+ detail ?? LanguageService.Get("trust.fail.homebrewBody"),
ExportCaLabel,
null,
260),
_ => (
- "Can't decrypt HTTPS yet",
- detail ??
- "The Titanium Inspector root CA is not trusted on this computer yet.",
- "Try again",
+ LanguageService.Get("trust.fail.title"),
+ detail ?? LanguageService.Get("trust.fail.body"),
+ LanguageService.Get("trust.fail.tryAgain"),
ExportCaLabel,
260),
};
diff --git a/src/Titanium.Inspector/Services/SessionSearch.cs b/src/Titanium.Inspector/Services/SessionSearch.cs
index 332b7701a..4bdfbdd1c 100644
--- a/src/Titanium.Inspector/Services/SessionSearch.cs
+++ b/src/Titanium.Inspector/Services/SessionSearch.cs
@@ -7,7 +7,10 @@ namespace Titanium.Inspector.Services;
/// Session search/filter syntax. A bare word matches URL, host, process name, process ID (exact),
/// method (exact), or status code (exact). Prefixes limit the match to one field:
/// method:, status: (exact or 2xx–5xx), host:, url:, body:, process:, pid:, protocol:, content-type:,
-/// is:ws|grpc|tunnel|multipart|error, hide:tunnel|image|static
+/// is:ws|grpc|tunnel|multipart|error, hide:tunnel|image|static.
+/// A leading - on a field prefix excludes rows that match it (-host:cursor.sh,
+/// -process:Cursor), and on a bare word excludes rows that word would match (-cursor).
+/// hide: is already an exclusion, so a minus in front of it is ignored.
///
public static class SessionSearch
{
@@ -170,6 +173,75 @@ public static string SetKeyedToken(string? query, string key, string value)
return string.IsNullOrEmpty(without) ? token : without + " " + token;
}
+ ///
+ /// Append key:value when that exact token is not already present.
+ /// Other tokens, including the same key with a different value, stay as they are.
+ ///
+ public static string AddToken(string? query, string key, string value)
+ {
+ if (string.IsNullOrWhiteSpace(key) || string.IsNullOrWhiteSpace(value))
+ {
+ return query?.Trim() ?? "";
+ }
+
+ var trimmed = value.Trim();
+ if (trimmed.Contains(' ', StringComparison.Ordinal) ||
+ trimmed.Contains('\t', StringComparison.Ordinal))
+ {
+ trimmed = trimmed.Split((char[]?)null, StringSplitOptions.RemoveEmptyEntries)[0];
+ }
+
+ var normalizedKey = key.Trim().ToLowerInvariant();
+ if (ContainsToken(query, normalizedKey, trimmed))
+ {
+ return query?.Trim() ?? "";
+ }
+
+ var token = $"{normalizedKey}:{trimmed}";
+ var q = query?.Trim() ?? "";
+ return string.IsNullOrEmpty(q) ? token : q + " " + token;
+ }
+
+ ///
+ /// Tokens in the same order uses to match.
+ /// A keyed token is key + value (-host + cursor.sh).
+ /// A bare word has an empty key ("" + -cursor).
+ ///
+ public static IReadOnlyList<(string Key, string Value)> GetTokens(string? query)
+ {
+ if (string.IsNullOrWhiteSpace(query))
+ {
+ return [];
+ }
+
+ return Tokenize(query);
+ }
+
+ ///
+ /// Drop every -host: and -process: token, then append the given lists.
+ /// Other tokens (typed text, checkboxes, positive filters) stay in place.
+ /// Blank or whitespace-only values are skipped; a value with spaces keeps its first word,
+ /// matching .
+ ///
+ public static string ReplaceHideTokens(
+ string? query,
+ IEnumerable? hosts,
+ IEnumerable? processes)
+ {
+ var remainder = RemoveKeyedTokens(RemoveKeyedTokens(query, "-host"), "-process");
+ foreach (var host in hosts ?? [])
+ {
+ remainder = AddToken(remainder, "-host", host);
+ }
+
+ foreach (var process in processes ?? [])
+ {
+ remainder = AddToken(remainder, "-process", process);
+ }
+
+ return remainder;
+ }
+
/// Clear the entire search/filter query.
public static string ClearFilters(string? _) => "";
@@ -181,7 +253,8 @@ public static bool HasBodyToken(string? query)
return false;
}
- return Tokenize(query).Any(t => t.Key == "body");
+ // -body: needs the same on-disk body search as body:, or spilled bodies would never be excluded.
+ return Tokenize(query).Any(t => t.Key is "body" or "-body");
}
///
@@ -266,29 +339,75 @@ private static string FormatEmptySearchRetentionHint(int retentionEvictedTotal)
return list;
}
+ /// Fields a leading - may invert. hide: is already an exclusion.
+ private static bool IsNegatableKey(string key) => key is
+ "method" or "status" or "host" or "url" or "body" or "process" or "pid" or
+ "protocol" or "content-type" or "contenttype" or "is";
+
private static bool MatchToken(
SessionSnapshot s,
(string Key, string Value) token,
Func? bodyMatcher)
{
- return token.Key switch
- {
- "method" => s.Method.Equals(token.Value, StringComparison.OrdinalIgnoreCase),
- "status" => MatchStatus(s.StatusCode, token.Value),
- "host" => MatchHost(s, token.Value),
- "url" => s.Url.Contains(token.Value, StringComparison.OrdinalIgnoreCase),
- "body" => bodyMatcher?.Invoke(s, token.Value) ??
- ((s.RequestBodyText?.Contains(token.Value, StringComparison.OrdinalIgnoreCase) == true) ||
- (s.ResponseBodyText?.Contains(token.Value, StringComparison.OrdinalIgnoreCase) == true)),
- "process" => MatchProcess(s, token.Value),
+ var key = token.Key;
+ var negate = false;
+
+ // A bare -word excludes rows a bare word would match, the same as Google or Gmail search.
+ // Without this, typing -cursor would search for the literal text "-cursor" and empty the list.
+ if (key.Length == 0 && token.Value.Length > 1 && token.Value[0] == '-')
+ {
+ return !MatchBareText(s, token.Value[1..]);
+ }
+
+ if (key.Length > 1 && key[0] == '-')
+ {
+ var positive = key[1..];
+ if (positive == "hide")
+ {
+ // hide: already excludes. A second minus must not bring those rows back.
+ key = positive;
+ }
+ else if (IsNegatableKey(positive))
+ {
+ negate = true;
+ key = positive;
+ }
+ else
+ {
+ // An unknown -field: is not a URL search (that would keep only the rows the user
+ // meant to hide). Leave the row visible.
+ return true;
+ }
+ }
+
+ var matched = MatchKeyed(s, key, token.Value, bodyMatcher);
+ return negate ? !matched : matched;
+ }
+
+ private static bool MatchKeyed(
+ SessionSnapshot s,
+ string key,
+ string value,
+ Func? bodyMatcher)
+ {
+ return key switch
+ {
+ "method" => s.Method.Equals(value, StringComparison.OrdinalIgnoreCase),
+ "status" => MatchStatus(s.StatusCode, value),
+ "host" => MatchHost(s, value),
+ "url" => s.Url.Contains(value, StringComparison.OrdinalIgnoreCase),
+ "body" => bodyMatcher?.Invoke(s, value) ??
+ ((s.RequestBodyText?.Contains(value, StringComparison.OrdinalIgnoreCase) == true) ||
+ (s.ResponseBodyText?.Contains(value, StringComparison.OrdinalIgnoreCase) == true)),
+ "process" => MatchProcess(s, value),
"pid" => s.ProcessId > 0 &&
- s.ProcessId.ToString().Equals(token.Value, StringComparison.Ordinal),
+ s.ProcessId.ToString().Equals(value, StringComparison.Ordinal),
"protocol" =>
- s.Protocol?.Contains(token.Value, StringComparison.OrdinalIgnoreCase) == true,
- "" => MatchBareText(s, token.Value),
+ s.Protocol?.Contains(value, StringComparison.OrdinalIgnoreCase) == true,
+ "" => MatchBareText(s, value),
"content-type" or "contenttype" =>
- s.ContentType?.Contains(token.Value, StringComparison.OrdinalIgnoreCase) == true,
- "is" => token.Value.ToLowerInvariant() switch
+ s.ContentType?.Contains(value, StringComparison.OrdinalIgnoreCase) == true,
+ "is" => value.ToLowerInvariant() switch
{
"ws" or "websocket" => s.IsWebSocket,
"grpc" => s.IsGrpc,
@@ -297,17 +416,17 @@ private static bool MatchToken(
"multipart" => s.IsMultipart,
"error" or "errors" => IsErrorStatus(s.StatusCode),
"opaque" or "encrypted" => s.IsTunnel && s.OpaqueReason != OpaqueTunnelReason.None,
- _ when token.Value.StartsWith("opaque-reason:", StringComparison.OrdinalIgnoreCase) =>
- MatchOpaqueReason(s, token.Value["opaque-reason:".Length..]),
+ _ when value.StartsWith("opaque-reason:", StringComparison.OrdinalIgnoreCase) =>
+ MatchOpaqueReason(s, value["opaque-reason:".Length..]),
_ => true,
},
- "hide" => token.Value.ToLowerInvariant() switch
+ "hide" => value.ToLowerInvariant() switch
{
"tunnel" or "connect" => !s.IsTunnel,
"image" or "images" or "static" => !IsImageOrStatic(s),
_ => true,
},
- _ => s.Url.Contains(token.Value, StringComparison.OrdinalIgnoreCase),
+ _ => s.Url.Contains(value, StringComparison.OrdinalIgnoreCase),
};
}
diff --git a/src/Titanium.Inspector/Services/SettingsService.cs b/src/Titanium.Inspector/Services/SettingsService.cs
index 4052e0797..2691019c9 100644
--- a/src/Titanium.Inspector/Services/SettingsService.cs
+++ b/src/Titanium.Inspector/Services/SettingsService.cs
@@ -96,6 +96,9 @@ public sealed class InspectorSettings
/// App color theme: follow OS (Automatic), Light, or Dark.
public ThemeMode ThemeMode { get; set; } = ThemeMode.Automatic;
+ /// UI language: auto follows the OS UI language, or a shipped culture name such as de.
+ public string UiLanguage { get; set; } = "auto";
+
/// Session grid column widths, order, and sort across launches.
public SessionGridLayoutDto? SessionGridLayout { get; set; }
diff --git a/src/Titanium.Inspector/Services/ThemeService.cs b/src/Titanium.Inspector/Services/ThemeService.cs
index 6cc60b693..b0c343a53 100644
--- a/src/Titanium.Inspector/Services/ThemeService.cs
+++ b/src/Titanium.Inspector/Services/ThemeService.cs
@@ -16,7 +16,7 @@ public static void ApplyThemeMode(ThemeMode mode)
{
ThemeMode.Light => ThemeVariant.Light,
ThemeMode.Dark => ThemeVariant.Dark,
- _ => ThemeVariant.Default,
+ _ => OsThemePreference.AutomaticVariant(),
};
}
}
diff --git a/src/Titanium.Inspector/Titanium.Inspector.csproj b/src/Titanium.Inspector/Titanium.Inspector.csproj
index 02429d7be..1257c3348 100644
--- a/src/Titanium.Inspector/Titanium.Inspector.csproj
+++ b/src/Titanium.Inspector/Titanium.Inspector.csproj
@@ -8,7 +8,7 @@
enable
true
false
- 7.0.21
+ 7.0.22
Jehonathan Thomas
Titanium Inspector desktop traffic debugger (PolyForm Noncommercial).
LICENSE
@@ -35,6 +35,8 @@
+
+
diff --git a/src/Titanium.Inspector/ViewModels/MainWindowViewModel.BodyInspect.cs b/src/Titanium.Inspector/ViewModels/MainWindowViewModel.BodyInspect.cs
index bf23c9c72..e4e26b36d 100644
--- a/src/Titanium.Inspector/ViewModels/MainWindowViewModel.BodyInspect.cs
+++ b/src/Titanium.Inspector/ViewModels/MainWindowViewModel.BodyInspect.cs
@@ -3,6 +3,7 @@
using System.Windows.Input;
using Avalonia.Controls;
using Avalonia.Media.Imaging;
+using Titanium.Inspector.Localization;
using Titanium.Inspector.Services;
namespace Titanium.Inspector.ViewModels;
@@ -10,9 +11,9 @@ namespace Titanium.Inspector.ViewModels;
public sealed partial class MainWindowViewModel
{
private const string ContentTypeHeaderName = "Content-Type";
- private const string EmptyBodyPlaceholder = "(empty)";
- private const string NoRequestBodyPlaceholder = "No request body";
- private const string WaitingForResponsePlaceholder = "Waiting for response…";
+ private static string EmptyBodyPlaceholder => LanguageService.Get("inspect.emptyBody");
+ private static string NoRequestBodyPlaceholder => LanguageService.Get("inspect.noRequestBody");
+ private static string WaitingForResponsePlaceholder => LanguageService.Get("inspect.waiting");
private const string NoResponseReceivedPrefix = "No response received";
private const string PrettyPrintFailureHint = "Cannot pretty-print (body truncated or invalid)";
private const string ImageTooLargeHint = "Image too large to preview in Inspect";
@@ -80,7 +81,9 @@ public bool BodyHexMode
public bool ShowBodyModeToggles => _selected is { IsTunnel: false };
public string BodyPrettyToolTip =>
- _bodyHexMode ? "Not applicable in hex view" : "Indent JSON, XML, and HTML";
+ _bodyHexMode
+ ? LanguageService.Get("inspect.prettyHexTip")
+ : LanguageService.Get("inspect.prettyTip");
public string RequestBodyCaptureHint
{
diff --git a/src/Titanium.Inspector/ViewModels/MainWindowViewModel.InspectLayout.cs b/src/Titanium.Inspector/ViewModels/MainWindowViewModel.InspectLayout.cs
index f4b8c2448..1eb069537 100644
--- a/src/Titanium.Inspector/ViewModels/MainWindowViewModel.InspectLayout.cs
+++ b/src/Titanium.Inspector/ViewModels/MainWindowViewModel.InspectLayout.cs
@@ -1,4 +1,5 @@
using System.ComponentModel;
+using Titanium.Inspector.Localization;
using Titanium.Inspector.Services;
namespace Titanium.Inspector.ViewModels;
@@ -36,7 +37,9 @@ public sealed partial class MainWindowViewModel
public string InspectHeadersToggleGlyph => _inspectHeadersCollapsed ? "▸" : "▾";
public string InspectHeadersToggleTip =>
- _inspectHeadersCollapsed ? "Show headers" : "Hide headers";
+ _inspectHeadersCollapsed
+ ? LanguageService.Get("inspect.showHeaders")
+ : LanguageService.Get("inspect.hideHeaders");
/// Star weight for the headers row while it is expanded.
public double InspectHeadersStar => _inspectHeadersStar;
@@ -71,9 +74,11 @@ private set
}
}
- public string RequestHeadersCaption => $"Headers ({_selectedRequestHeaderCount})";
+ public string RequestHeadersCaption =>
+ LanguageService.Format("inspect.headers", _selectedRequestHeaderCount);
- public string ResponseHeadersCaption => $"Headers ({_selectedResponseHeaderCount})";
+ public string ResponseHeadersCaption =>
+ LanguageService.Format("inspect.headers", _selectedResponseHeaderCount);
public void ToggleInspectHeadersCollapsed() =>
SetInspectHeadersCollapsed(!_inspectHeadersCollapsed, userChosen: true);
diff --git a/src/Titanium.Inspector/ViewModels/MainWindowViewModel.Sessions.cs b/src/Titanium.Inspector/ViewModels/MainWindowViewModel.Sessions.cs
index 0d1312b08..37c965082 100644
--- a/src/Titanium.Inspector/ViewModels/MainWindowViewModel.Sessions.cs
+++ b/src/Titanium.Inspector/ViewModels/MainWindowViewModel.Sessions.cs
@@ -9,6 +9,7 @@
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Platform.Storage;
using Avalonia.Threading;
+using Titanium.Inspector.Localization;
using Titanium.Inspector.Services;
using Titanium.Inspector.Views;
using Titanium.Web.Proxy;
@@ -19,7 +20,7 @@ namespace Titanium.Inspector.ViewModels;
public sealed partial class MainWindowViewModel
{
private const int BulkGridEditThreshold = 32;
- private const string SearchingBodiesStatus = "Searching bodies…";
+ private static string SearchingBodiesStatus => LanguageService.Get("status.searchingBodies");
private int _bodyFilterGeneration;
private CancellationTokenSource? _bodyFilterCts;
@@ -327,6 +328,37 @@ private Task FilterByProcessAsync()
StatusText = $"Filtered by process:{process}";
return Task.CompletedTask;
}
+ private Task HideHostAsync()
+ {
+ var host = ResolveUnanimousFilterHost();
+ if (string.IsNullOrEmpty(host))
+ {
+ StatusText = "Hide host needs one shared host in the selection";
+ return Task.CompletedTask;
+ }
+
+ SearchQuery = SessionSearch.AddToken(SearchQuery, "-host", host);
+ StatusText = $"Hidden host:{host} · Clear filters to show";
+ return Task.CompletedTask;
+ }
+ private Task HideProcessAsync()
+ {
+ var process = ResolveUnanimousFilterProcess();
+ if (string.IsNullOrEmpty(process))
+ {
+ StatusText = "Hide process needs one shared process in the selection";
+ return Task.CompletedTask;
+ }
+
+ // Search tokens cannot contain spaces, so "Google Chrome" becomes -process:Google, which also hides
+ // other names containing "Google". Hiding more than the user pointed at must not be silent.
+ var token = process.Split((char[]?)null, StringSplitOptions.RemoveEmptyEntries)[0];
+ SearchQuery = SessionSearch.AddToken(SearchQuery, "-process", process);
+ StatusText = token.Length < process.Length
+ ? $"Hidden process:{token} (shortened at the space; also hides other names containing it) · Clear filters to show"
+ : $"Hidden process:{process} · Clear filters to show";
+ return Task.CompletedTask;
+ }
/// True when selection shares one non-empty host (single or multi-select).
public bool CanFilterByHost => ResolveUnanimousFilterHost() is not null;
/// True when at least one session is selected.
@@ -678,12 +710,15 @@ private void OnSessionUpdatedForFilter(SessionSnapshot snapshot)
}
else if (index >= 0)
{
- if (ReferenceEquals(SelectedSession, snapshot))
+ RunWithGridEchoSuppress(() =>
{
- SelectedSession = null;
- }
+ if (ReferenceEquals(SelectedSession, snapshot))
+ {
+ ClearSelectionRemovedByFilter();
+ }
- Sessions.RemoveAt(index);
+ Sessions.RemoveAt(index);
+ });
RefreshSessionCountText();
}
}
@@ -765,6 +800,108 @@ private void NotifyQuickFilterProperties()
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(HideImagesFilter)));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ErrorsOnlyFilter)));
}
+
+ /// Hosts hidden from the list (-host:), in query order. Display only.
+ public ObservableCollection HiddenHostChips { get; } = new();
+
+ /// Processes hidden from the list (-process:), in query order. Display only.
+ public ObservableCollection HiddenProcessChips { get; } = new();
+
+ /// True when at least one hide-host or hide-process chip should show.
+ public bool HasHiddenChips => HiddenHostChips.Count > 0 || HiddenProcessChips.Count > 0;
+
+ /// True when both chip kinds are present, so process chips need a "process" prefix.
+ public bool ShowProcessChipPrefix => HiddenHostChips.Count > 0 && HiddenProcessChips.Count > 0;
+
+ private void RefreshHiddenChips()
+ {
+ var hosts = new List();
+ var processes = new List();
+ foreach (var token in SessionSearch.GetTokens(SearchQuery))
+ {
+ if (token.Key == "-host")
+ {
+ hosts.Add(token.Value);
+ }
+ else if (token.Key == "-process")
+ {
+ processes.Add(token.Value);
+ }
+ }
+
+ ReplaceChipList(HiddenHostChips, hosts);
+ ReplaceChipList(HiddenProcessChips, processes);
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(HasHiddenChips)));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ShowProcessChipPrefix)));
+ }
+
+ private static void ReplaceChipList(ObservableCollection chips, List next)
+ {
+ if (chips.Count == next.Count)
+ {
+ var same = true;
+ for (var i = 0; i < next.Count; i++)
+ {
+ if (!string.Equals(chips[i], next[i], StringComparison.Ordinal))
+ {
+ same = false;
+ break;
+ }
+ }
+
+ if (same)
+ {
+ return;
+ }
+ }
+
+ chips.Clear();
+ foreach (var value in next)
+ {
+ chips.Add(value);
+ }
+ }
+
+ private Task RemoveHiddenHostAsync(object? parameter)
+ {
+ if (parameter is string host && !string.IsNullOrWhiteSpace(host))
+ {
+ SearchQuery = SessionSearch.RemoveToken(SearchQuery, "-host", host);
+ }
+
+ return Task.CompletedTask;
+ }
+
+ private Task RemoveHiddenProcessAsync(object? parameter)
+ {
+ if (parameter is string process && !string.IsNullOrWhiteSpace(process))
+ {
+ SearchQuery = SessionSearch.RemoveToken(SearchQuery, "-process", process);
+ }
+
+ return Task.CompletedTask;
+ }
+
+ private async Task OpenFiltersAsync()
+ {
+ var owner = TryGetMainWindow();
+ if (owner is null)
+ {
+ StatusText = "Filters requires the main window";
+ return;
+ }
+
+ var applied = await SearchFiltersWindow.ShowAsync(owner, SearchQuery).ConfigureAwait(true);
+ if (applied is null)
+ {
+ return;
+ }
+
+ SearchQuery = applied;
+ StatusText = HasHiddenChips
+ ? "Filters applied · Clear filters to show hidden rows"
+ : "Filters applied";
+ }
private void ApplyFilter()
{
if (SessionSearch.HasBodyToken(SearchQuery))
@@ -774,11 +911,14 @@ private void ApplyFilter()
}
CancelBodyFilter();
- var previouslySelected = SelectedSession;
- var detailsWereOpen = ShowSessionDetails;
- var matched = SessionSearch.Filter(_all, SearchQuery, bodyMatcher: null).ToList();
- ReplaceVisibleSessions(matched);
- RestoreSelectionAfterFilter(previouslySelected, detailsWereOpen);
+ RunWithGridEchoSuppress(() =>
+ {
+ var previouslySelected = SelectedSession;
+ var detailsWereOpen = ShowSessionDetails;
+ var matched = SessionSearch.Filter(_all, SearchQuery, bodyMatcher: null).ToList();
+ ReplaceVisibleSessions(matched);
+ RestoreSelectionAfterFilter(previouslySelected, detailsWereOpen);
+ });
}
private void ReplaceVisibleSessions(IReadOnlyList matched)
@@ -820,7 +960,7 @@ private void RestoreSelectionAfterFilter(SessionSnapshot? previouslySelected, bo
}
else if (previouslySelected is not null)
{
- SelectedSession = null;
+ ClearSelectionRemovedByFilter();
}
}
@@ -894,8 +1034,11 @@ void Apply(List matched)
return;
}
- ReplaceVisibleSessions(matched);
- RestoreSelectionAfterFilter(previouslySelected, detailsWereOpen);
+ RunWithGridEchoSuppress(() =>
+ {
+ ReplaceVisibleSessions(matched);
+ RestoreSelectionAfterFilter(previouslySelected, detailsWereOpen);
+ });
RefreshSessionCountText();
if (StatusText == SearchingBodiesStatus)
{
diff --git a/src/Titanium.Inspector/ViewModels/MainWindowViewModel.cs b/src/Titanium.Inspector/ViewModels/MainWindowViewModel.cs
index c51deb366..437860e58 100644
--- a/src/Titanium.Inspector/ViewModels/MainWindowViewModel.cs
+++ b/src/Titanium.Inspector/ViewModels/MainWindowViewModel.cs
@@ -11,6 +11,7 @@
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Platform.Storage;
using Avalonia.Threading;
+using Titanium.Inspector.Localization;
using Titanium.Inspector.Services;
using Titanium.Inspector.Views;
using Titanium.Web.Proxy;
@@ -41,7 +42,7 @@ public sealed partial class MainWindowViewModel : INotifyPropertyChanged, INotif
private readonly RelayCommand _copyAsFetchCommand;
private readonly RelayCommand _diffSessionsCommand;
private string _sessionDiffText = "";
- private const string StatusReady = "Ready";
+ private static string StatusReady => LanguageService.Get("status.ready");
private const string StartProxyFirstStatus = "Start the proxy first";
private const string SystemProxyRestoredStatus = "System proxy restored";
private const string TrustingRootCaWindowsStatus =
@@ -126,6 +127,14 @@ public sealed partial class MainWindowViewModel : INotifyPropertyChanged, INotif
/// (filter restore / bulk removal — DataGrid may briefly re-select a neighbor row).
///
private bool _suppressOpenSessionDetails;
+
+ ///
+ /// Holds open-on-select across a filter's grid reset and the deferred
+ /// SelectedItem write. A user pointer or key cancels it immediately.
+ ///
+ private int _echoSuppressDepth;
+
+ private int _echoSuppressTicket;
private bool _showWsFramesTab;
private bool _showSseTab;
private bool _showProtobufTab;
@@ -198,6 +207,11 @@ public MainWindowViewModel(InspectorViewModelServices services)
SetThemeMode(ThemeMode.Automatic);
return Task.CompletedTask;
});
+ SetUiLanguageCommand = CmdWithParameter(parameter =>
+ {
+ SetUiLanguage(parameter as string ?? LanguageService.AutomaticSetting);
+ return Task.CompletedTask;
+ });
ToggleCheckForUpdatesOnStartupCommand = Cmd(() =>
{
CheckForUpdatesOnStartup = !CheckForUpdatesOnStartup;
@@ -286,7 +300,9 @@ public MainWindowViewModel(InspectorViewModelServices services)
_diffSessionsCommand = Cmd(DiffSessionsAsync, () => CanDiffSessions);
DiffSessionsCommand = _diffSessionsCommand;
FilterByHostCommand = Cmd(FilterByHostAsync);
+ HideHostCommand = Cmd(HideHostAsync);
FilterByProcessCommand = Cmd(FilterByProcessAsync);
+ HideProcessCommand = Cmd(HideProcessAsync);
OpenExclusionSummaryCommand = Cmd(OpenExcludedHostsAsync);
SendComposerCommand = Cmd(async () => await SendComposerAsync());
AddAutoResponderRuleCommand = Cmd(AddAutoResponderRuleAsync);
@@ -326,6 +342,9 @@ public MainWindowViewModel(InspectorViewModelServices services)
SearchQuery = SessionSearch.ClearFilters(SearchQuery);
return Task.CompletedTask;
});
+ OpenFiltersCommand = Cmd(OpenFiltersAsync);
+ RemoveHiddenHostCommand = CmdWithParameter(RemoveHiddenHostAsync);
+ RemoveHiddenProcessCommand = CmdWithParameter(RemoveHiddenProcessAsync);
WireBodyInspectCommands();
WireEventHandlers();
@@ -1236,8 +1255,8 @@ public string DecryptTrustHealthText
if (!_decryptHttps)
return "";
return _interception.IsRootTrusted
- ? "CA trusted"
- : "CA not trusted";
+ ? LanguageService.Get("trust.health.trusted")
+ : LanguageService.Get("trust.health.untrusted");
}
}
@@ -1384,7 +1403,9 @@ private Task ApplyEditBodyAsync()
public ICommand CopyAsFetchCommand { get; }
public ICommand DiffSessionsCommand { get; }
public ICommand FilterByHostCommand { get; }
+ public ICommand HideHostCommand { get; }
public ICommand FilterByProcessCommand { get; }
+ public ICommand HideProcessCommand { get; }
public ICommand SendComposerCommand { get; }
public ICommand AddAutoResponderRuleCommand { get; }
public ICommand DeleteAutoResponderRuleCommand { get; }
@@ -1411,6 +1432,9 @@ private Task ApplyEditBodyAsync()
public ICommand OpenToolsScriptsCommand { get; }
public ICommand OpenToolsMapRemoteCommand { get; }
public ICommand ClearFiltersCommand { get; }
+ public ICommand OpenFiltersCommand { get; }
+ public ICommand RemoveHiddenHostCommand { get; }
+ public ICommand RemoveHiddenProcessCommand { get; }
public string BindAddress
{
@@ -2008,7 +2032,15 @@ await MarshalToUiAsync(() =>
}
}
- public static string ProxyLocalhostTip => OsTrustUxCopy.ProxyLocalhostTip();
+ public string ProxyLocalhostTip
+ {
+ get
+ {
+ // Touch instance state so Avalonia {Binding} + PropertyChanged stay valid (CA1822 / S2325).
+ _ = _settings;
+ return OsTrustUxCopy.ProxyLocalhostTip();
+ }
+ }
public bool AutoStartCapture
{
@@ -2070,6 +2102,14 @@ public bool UpdateChannelIsStable
public bool ThemeModeIsAutomatic => _settings.Current.ThemeMode == ThemeMode.Automatic;
+ /// auto or a shipped culture name. Radios bind this; it is not the resolved catalog.
+ public string UiLanguage =>
+ string.IsNullOrWhiteSpace(_settings.Current.UiLanguage)
+ ? LanguageService.AutomaticSetting
+ : _settings.Current.UiLanguage;
+
+ public ICommand SetUiLanguageCommand { get; }
+
public bool CheckForUpdatesOnStartup
{
get => _settings.Current.CheckForUpdatesOnStartup;
@@ -2219,13 +2259,13 @@ public bool ShowSessionDetails
public string PaneContentTitle => SelectedPaneNavIndex switch
{
- 0 => "Inspect",
- 1 => "Composer",
- 2 => "Breakpoints",
- 3 => "AutoResponder",
- 4 => "Scripts",
- 5 => "Map Remote",
- _ => "Inspect",
+ 0 => LanguageService.Get("pane.inspect"),
+ 1 => LanguageService.Get("pane.composer"),
+ 2 => LanguageService.Get("pane.breakpoints"),
+ 3 => LanguageService.Get("pane.autoResponder"),
+ 4 => LanguageService.Get("pane.scripts"),
+ 5 => LanguageService.Get("pane.mapRemote"),
+ _ => LanguageService.Get("pane.inspect"),
};
public bool IsInspectRailPressed => _showSessionDetails && SelectedPaneNavIndex == 0;
@@ -2301,6 +2341,7 @@ public string SearchQuery
ApplyFilter();
RefreshSessionCountText();
NotifyQuickFilterProperties();
+ RefreshHiddenChips();
}
}
}
@@ -2388,7 +2429,7 @@ public SessionSnapshot? SelectedSession
ClearBodyInspectCache();
}
- if (value is not null && !_suppressOpenSessionDetails)
+ if (value is not null && !IsOpenSessionDetailsSuppressed)
{
var openingPane = !ShowSessionDetails;
ShowSessionDetails = true;
@@ -2749,6 +2790,31 @@ private void NotifySettingsUiChanged()
ThemeService.ApplyThemeMode(_settings.Current.ThemeMode);
}
+ private void SetUiLanguage(string setting)
+ {
+ var normalized = string.IsNullOrWhiteSpace(setting)
+ ? LanguageService.AutomaticSetting
+ : setting;
+ if (string.Equals(_settings.Current.UiLanguage, normalized, StringComparison.OrdinalIgnoreCase))
+ {
+ return;
+ }
+
+ _settings.Current.UiLanguage = normalized;
+ _settings.Save();
+ LanguageService.Apply(normalized);
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(UiLanguage)));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ProxyLocalhostTip)));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(PaneContentTitle)));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(DecryptTrustHealthText)));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(InspectHeadersToggleTip)));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(RequestHeadersCaption)));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ResponseHeadersCaption)));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(BodyPrettyToolTip)));
+ RefreshEndpointAndBindUi();
+ RefreshSelectedInspectors();
+ }
+
private void SetThemeMode(ThemeMode mode)
{
if (_settings.Current.ThemeMode == mode)
@@ -2839,6 +2905,67 @@ public void SelectSessionWithoutOpeningDetails(SessionSnapshot? snap)
}
}
+ private bool IsOpenSessionDetailsSuppressed =>
+ _suppressOpenSessionDetails || _echoSuppressDepth > 0;
+
+ ///
+ /// A pointer or key on a session row cancels filter-echo suppression so that
+ /// selection still opens Inspect.
+ ///
+ public void NoteUserSessionSelectionGesture()
+ {
+ _echoSuppressTicket++;
+ _echoSuppressDepth = 0;
+ }
+
+ ///
+ /// Run a filter grid update without letting a selection echo open Inspect.
+ /// Unit tests (no ) release before return.
+ /// A live UI releases on the next dispatcher pass, after the deferred binding write.
+ ///
+ private void RunWithGridEchoSuppress(Action action)
+ {
+ _echoSuppressDepth++;
+ var ticket = _echoSuppressTicket;
+ try
+ {
+ action();
+ }
+ finally
+ {
+ void Release()
+ {
+ if (ticket != _echoSuppressTicket)
+ {
+ return;
+ }
+
+ _echoSuppressDepth = Math.Max(0, _echoSuppressDepth - 1);
+ }
+
+ if (Application.Current is null)
+ {
+ Release();
+ }
+ else
+ {
+ Dispatcher.UIThread.Post(Release, DispatcherPriority.Background);
+ }
+ }
+ }
+
+ ///
+ /// The selected row left the visible grid. Close Inspect; leave Composer and other tools open.
+ ///
+ private void ClearSelectionRemovedByFilter()
+ {
+ SelectedSession = null;
+ if (SelectedPaneNavIndex == 0)
+ {
+ ShowSessionDetails = false;
+ }
+ }
+
///
/// Suppress open-on-select for the duration of a DataGrid selection write
/// (e.g. right-click selecting a row for a context menu).
@@ -3258,9 +3385,11 @@ private bool TryResolveStartBind(out IPAddress address, out int port)
private void RefreshEndpointAndBindUi()
{
EndpointStatusText = _interception.IsRunning
- ? $"Proxy running on {FormatBindDisplay()}:{BindPort}"
- : "Proxy stopped";
- InterceptToggleText = _interception.IsRunning ? "Stop proxy" : "Start proxy";
+ ? LanguageService.Format("status.proxyRunning", $"{FormatBindDisplay()}:{BindPort}")
+ : LanguageService.Get("status.proxyStopped");
+ InterceptToggleText = _interception.IsRunning
+ ? LanguageService.Get("menu.stopProxy")
+ : LanguageService.Get("menu.startProxy");
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(BindFieldsEnabled)));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsIntercepting)));
}
diff --git a/src/Titanium.Inspector/Views/AboutWindow.axaml b/src/Titanium.Inspector/Views/AboutWindow.axaml
index c1b42ce75..408cd1b42 100644
--- a/src/Titanium.Inspector/Views/AboutWindow.axaml
+++ b/src/Titanium.Inspector/Views/AboutWindow.axaml
@@ -1,32 +1,33 @@
-
-
+
-
+
+ Text="{loc:Loc about.license}" />
-
-
diff --git a/src/Titanium.Inspector/Views/AboutWindow.axaml.cs b/src/Titanium.Inspector/Views/AboutWindow.axaml.cs
index f8629c5a2..9e326113a 100644
--- a/src/Titanium.Inspector/Views/AboutWindow.axaml.cs
+++ b/src/Titanium.Inspector/Views/AboutWindow.axaml.cs
@@ -1,3 +1,4 @@
+using Titanium.Inspector.Localization;
using Avalonia.Controls;
using Avalonia.Input;
using Titanium.Inspector.Services;
@@ -14,6 +15,7 @@ public partial class AboutWindow : Window
public AboutWindow()
{
InitializeComponent();
+ LanguageService.AttachWindow(this);
VersionText.Text = $"Version {UpdateService.FormatAssemblyDisplayVersion()}";
OkButton.Click += (_, _) => Close();
LicenseLink.PointerPressed += (_, e) => OnLinkPressed(e, LicenseUrl);
diff --git a/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml b/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml
index 96762c13d..5c02b6455 100644
--- a/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml
+++ b/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml
@@ -1,20 +1,21 @@
-
-
+
+
+ Text="{loc:Loc exclude.help}" />
diff --git a/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml.cs b/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml.cs
index 4afc81539..2fb8f3d11 100644
--- a/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml.cs
+++ b/src/Titanium.Inspector/Views/ExcludeHostDialog.axaml.cs
@@ -1,3 +1,4 @@
+using Titanium.Inspector.Localization;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Titanium.Inspector.Services;
@@ -19,6 +20,7 @@ public ExcludeHostDialog(SettingsService settings, string hostname)
_settings = settings;
_hostname = hostname.Trim();
InitializeComponent();
+ LanguageService.AttachWindow(this);
HostLabel.Text = _hostname;
var parent = ExtractParentDomain(_hostname);
if (string.IsNullOrEmpty(parent))
diff --git a/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml b/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml
index b16ce4d22..1a2bb5434 100644
--- a/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml
+++ b/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml
@@ -1,53 +1,54 @@
-
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+ Text="{loc:Loc excluded.learnHelp}" />
+ Text="{loc:Loc excluded.learnPaused}" />
-
+
-
-
-
diff --git a/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml.cs b/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml.cs
index f5eb82acb..23b45df2e 100644
--- a/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml.cs
+++ b/src/Titanium.Inspector/Views/ExcludedHostsWindow.axaml.cs
@@ -1,3 +1,4 @@
+using Titanium.Inspector.Localization;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
@@ -29,6 +30,7 @@ public ExcludedHostsWindow(
_onSaved = onSaved;
_interception = interception;
InitializeComponent();
+ LanguageService.AttachWindow(this);
Title = readOnly ? "Excluded hosts (view)" : "Excluded hosts";
_settings.EnsureExclusionsSeeded();
LoadFromSettings();
diff --git a/src/Titanium.Inspector/Views/LoggingSettingsWindow.axaml b/src/Titanium.Inspector/Views/LoggingSettingsWindow.axaml
index 5fba28aec..1697cac09 100644
--- a/src/Titanium.Inspector/Views/LoggingSettingsWindow.axaml
+++ b/src/Titanium.Inspector/Views/LoggingSettingsWindow.axaml
@@ -1,40 +1,41 @@
+ Text="{loc:Loc logging.help}" />
-
-
+
+
-
-
-
+
+ Text="{loc:Loc logging.detailHelp}" />
-
+
-
-
diff --git a/src/Titanium.Inspector/Views/LoggingSettingsWindow.axaml.cs b/src/Titanium.Inspector/Views/LoggingSettingsWindow.axaml.cs
index d76df8bfa..abf0f5083 100644
--- a/src/Titanium.Inspector/Views/LoggingSettingsWindow.axaml.cs
+++ b/src/Titanium.Inspector/Views/LoggingSettingsWindow.axaml.cs
@@ -1,3 +1,4 @@
+using Titanium.Inspector.Localization;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Platform.Storage;
@@ -22,6 +23,7 @@ public LoggingSettingsWindow(SettingsService settings, Action
_settings = settings;
_applyLogging = applyLogging;
InitializeComponent();
+ LanguageService.AttachWindow(this);
LevelCombo.ItemsSource = Levels;
LoadFromSettings();
SaveButton.Click += OnSave;
diff --git a/src/Titanium.Inspector/Views/LoopbackExemptWindow.axaml b/src/Titanium.Inspector/Views/LoopbackExemptWindow.axaml
index a53a4e03f..0f91c87a4 100644
--- a/src/Titanium.Inspector/Views/LoopbackExemptWindow.axaml
+++ b/src/Titanium.Inspector/Views/LoopbackExemptWindow.axaml
@@ -1,8 +1,9 @@
@@ -13,25 +14,27 @@
-
-
-
+
+
+
-
+
-
-
+
+
-
-
-
-
diff --git a/src/Titanium.Inspector/Views/MacSslTrustWaitDialog.axaml.cs b/src/Titanium.Inspector/Views/MacSslTrustWaitDialog.axaml.cs
index f82ca4ddf..cfe965870 100644
--- a/src/Titanium.Inspector/Views/MacSslTrustWaitDialog.axaml.cs
+++ b/src/Titanium.Inspector/Views/MacSslTrustWaitDialog.axaml.cs
@@ -1,3 +1,4 @@
+using Titanium.Inspector.Localization;
using Avalonia.Controls;
using Avalonia.Threading;
using Titanium.Inspector.Services;
@@ -17,6 +18,7 @@ public partial class MacSslTrustWaitDialog : Window
public MacSslTrustWaitDialog()
{
InitializeComponent();
+ LanguageService.AttachWindow(this);
CancelButton.Click += (_, _) => CloseWith(MacSslTrustWaitResult.Cancelled);
ConfirmSavedButton.Click += (_, _) => OnConfirmSavedClicked();
Activated += (_, _) => TryVerifyOnFocus();
diff --git a/src/Titanium.Inspector/Views/MainWindow.axaml b/src/Titanium.Inspector/Views/MainWindow.axaml
index 0f752adb2..575a7d7d2 100644
--- a/src/Titanium.Inspector/Views/MainWindow.axaml
+++ b/src/Titanium.Inspector/Views/MainWindow.axaml
@@ -2,6 +2,8 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:Titanium.Inspector.ViewModels"
xmlns:svc="using:Titanium.Inspector.Services"
+ xmlns:loc="using:Titanium.Inspector.Localization"
+ xmlns:conv="using:Titanium.Inspector.Converters"
x:Class="Titanium.Inspector.Views.MainWindow"
x:DataType="vm:MainWindowViewModel"
Title="Titanium Inspector"
@@ -9,162 +11,288 @@
Width="1280" Height="800">
@@ -179,58 +307,113 @@
AutomationProperties.AutomationId="ToolbarPanel">
-
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
-
+
-
@@ -358,17 +551,17 @@
-
-
+
-
-
-
+
-
@@ -379,7 +572,7 @@
-
@@ -388,7 +581,7 @@
-
@@ -411,7 +604,7 @@
-
@@ -429,7 +623,7 @@
AutomationProperties.AutomationId="InspectTabs"
IsVisible="{Binding HasSelectedSession}"
SelectedIndex="{Binding SelectedInspectTabIndex}">
-
@@ -451,7 +645,7 @@
AutomationProperties.AutomationId="ToggleReqHeadersPane" />
-
-
-
-
@@ -507,7 +701,7 @@
-
@@ -529,7 +723,7 @@
AutomationProperties.AutomationId="ToggleRespHeadersPane" />
-
-
-
-
@@ -586,32 +780,32 @@
-
-
+ Text="{loc:Loc inspect.framesHelp}" />
-
+ Text="{loc:Loc inspect.sseHelp}" />
-
@@ -619,23 +813,24 @@
+ Text="{loc:Loc composer.help}" />
-
-
-
-
@@ -643,65 +838,67 @@
IsVisible="{Binding HasComposerBodyFile}"
AutomationProperties.AutomationId="ComposerBodyFromFileHint" />
-
-
-
+ Text="{loc:Loc bp.help}" />
-
-
-
-
+
-
-
-
+
-
-
-
-
+
-
-
+
-
-
-
+ Text="{loc:Loc ar.graphqlHelp}" />
+
-
-
-
-
-
-
-
+ Text="{loc:Loc script.intro}" />
-
+
+ Text="{loc:Loc script.setHeaderHelp}" />
+ Text="{loc:Loc script.setStatusHelp}" />
+ Text="{loc:Loc script.abortHelp}" />
+ Text="{loc:Loc script.comment}" />
-
+
-
+ Text="{loc:Loc script.requestSkips}" />
+
-
+
-
-
+
-
-
-
-
+
+
-
-
-
@@ -865,8 +1064,8 @@