Merge branch '13-component-settings' into 'main'
Resolve "Component: Settings" Closes #13 See merge request open-source/dotnet/i18n-commander!11
@ -23,7 +23,7 @@ public sealed class DataContext : DbContext
|
|||||||
#region Settings
|
#region Settings
|
||||||
|
|
||||||
modelBuilder.Entity<Setting>().HasIndex(n => n.Id);
|
modelBuilder.Entity<Setting>().HasIndex(n => n.Id);
|
||||||
modelBuilder.Entity<Setting>().HasIndex(n => n.Name).IsUnique();
|
modelBuilder.Entity<Setting>().HasIndex(n => n.Code).IsUnique();
|
||||||
modelBuilder.Entity<Setting>().HasIndex(n => n.BoolValue);
|
modelBuilder.Entity<Setting>().HasIndex(n => n.BoolValue);
|
||||||
modelBuilder.Entity<Setting>().HasIndex(n => n.GuidValue);
|
modelBuilder.Entity<Setting>().HasIndex(n => n.GuidValue);
|
||||||
modelBuilder.Entity<Setting>().HasIndex(n => n.IntegerValue);
|
modelBuilder.Entity<Setting>().HasIndex(n => n.IntegerValue);
|
||||||
|
@ -7,7 +7,7 @@ public sealed class Setting
|
|||||||
[Key]
|
[Key]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
public string Name { get; set; } = string.Empty;
|
public string Code { get; set; } = string.Empty;
|
||||||
|
|
||||||
public string TextValue { get; set; } = string.Empty;
|
public string TextValue { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
7
I18N Commander/DataModel/Database/SettingDeepLAction.cs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
namespace DataModel.Database;
|
||||||
|
|
||||||
|
public enum SettingDeepLAction
|
||||||
|
{
|
||||||
|
MANUAL,
|
||||||
|
AUTOMATIC_ALL,
|
||||||
|
}
|
9
I18N Commander/DataModel/Database/SettingDeepLMode.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
namespace DataModel.Database;
|
||||||
|
|
||||||
|
public enum SettingDeepLMode
|
||||||
|
{
|
||||||
|
DISABLED,
|
||||||
|
|
||||||
|
USE_FREE_ACCOUNT,
|
||||||
|
USE_PRO_ACCOUNT,
|
||||||
|
}
|
10
I18N Commander/DataModel/Database/SettingNames.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
namespace DataModel.Database;
|
||||||
|
|
||||||
|
public static class SettingNames
|
||||||
|
{
|
||||||
|
public static readonly string DEEPL_SOURCE_CULTURE = "DeepL Source Culture";
|
||||||
|
public static readonly string CULTURE = "Culture";
|
||||||
|
public static readonly string DEEPL_ACTION = "DeepL Action";
|
||||||
|
public static readonly string DEEPL_API_KEY = "DeepL API Key";
|
||||||
|
public static readonly string DEEPL_MODE = "DeepL Mode";
|
||||||
|
}
|
201
I18N Commander/DataModel/Migrations/20220725170320_202207RenamedSettingsCode.Designer.cs
generated
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using DataModel.Database.Common;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace DataModel.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(DataContext))]
|
||||||
|
[Migration("20220725170320_202207RenamedSettingsCode")]
|
||||||
|
partial class _202207RenamedSettingsCode
|
||||||
|
{
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "6.0.5");
|
||||||
|
|
||||||
|
modelBuilder.Entity("DataModel.Database.Section", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("DataKey")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("Depth")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int?>("ParentId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("DataKey");
|
||||||
|
|
||||||
|
b.HasIndex("Depth");
|
||||||
|
|
||||||
|
b.HasIndex("Id");
|
||||||
|
|
||||||
|
b.HasIndex("Name");
|
||||||
|
|
||||||
|
b.HasIndex("ParentId");
|
||||||
|
|
||||||
|
b.ToTable("Sections");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("DataModel.Database.Setting", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<bool>("BoolValue")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Code")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<Guid>("GuidValue")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("IntegerValue")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("TextValue")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("BoolValue");
|
||||||
|
|
||||||
|
b.HasIndex("Code")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.HasIndex("GuidValue");
|
||||||
|
|
||||||
|
b.HasIndex("Id");
|
||||||
|
|
||||||
|
b.HasIndex("IntegerValue");
|
||||||
|
|
||||||
|
b.HasIndex("TextValue");
|
||||||
|
|
||||||
|
b.ToTable("Settings");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("DataModel.Database.TextElement", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Code")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("SectionId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("Code");
|
||||||
|
|
||||||
|
b.HasIndex("Id");
|
||||||
|
|
||||||
|
b.HasIndex("Name");
|
||||||
|
|
||||||
|
b.HasIndex("SectionId");
|
||||||
|
|
||||||
|
b.ToTable("TextElements");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("DataModel.Database.Translation", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Culture")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Text")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("TextElementId")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("Culture");
|
||||||
|
|
||||||
|
b.HasIndex("Id");
|
||||||
|
|
||||||
|
b.HasIndex("Text");
|
||||||
|
|
||||||
|
b.HasIndex("TextElementId");
|
||||||
|
|
||||||
|
b.ToTable("Translations");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("DataModel.Database.Section", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("DataModel.Database.Section", "Parent")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("ParentId");
|
||||||
|
|
||||||
|
b.Navigation("Parent");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("DataModel.Database.TextElement", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("DataModel.Database.Section", "Section")
|
||||||
|
.WithMany("TextElements")
|
||||||
|
.HasForeignKey("SectionId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Section");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("DataModel.Database.Translation", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("DataModel.Database.TextElement", "TextElement")
|
||||||
|
.WithMany("Translations")
|
||||||
|
.HasForeignKey("TextElementId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("TextElement");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("DataModel.Database.Section", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("TextElements");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("DataModel.Database.TextElement", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Translations");
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace DataModel.Migrations
|
||||||
|
{
|
||||||
|
public partial class _202207RenamedSettingsCode : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.RenameColumn(
|
||||||
|
name: "Name",
|
||||||
|
table: "Settings",
|
||||||
|
newName: "Code");
|
||||||
|
|
||||||
|
migrationBuilder.RenameIndex(
|
||||||
|
name: "IX_Settings_Name",
|
||||||
|
table: "Settings",
|
||||||
|
newName: "IX_Settings_Code");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.RenameColumn(
|
||||||
|
name: "Code",
|
||||||
|
table: "Settings",
|
||||||
|
newName: "Name");
|
||||||
|
|
||||||
|
migrationBuilder.RenameIndex(
|
||||||
|
name: "IX_Settings_Code",
|
||||||
|
table: "Settings",
|
||||||
|
newName: "IX_Settings_Name");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -61,16 +61,16 @@ namespace DataModel.Migrations
|
|||||||
b.Property<bool>("BoolValue")
|
b.Property<bool>("BoolValue")
|
||||||
.HasColumnType("INTEGER");
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("Code")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
b.Property<Guid>("GuidValue")
|
b.Property<Guid>("GuidValue")
|
||||||
.HasColumnType("TEXT");
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
b.Property<int>("IntegerValue")
|
b.Property<int>("IntegerValue")
|
||||||
.HasColumnType("INTEGER");
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
b.Property<string>("Name")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("TEXT");
|
|
||||||
|
|
||||||
b.Property<string>("TextValue")
|
b.Property<string>("TextValue")
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("TEXT");
|
.HasColumnType("TEXT");
|
||||||
@ -79,15 +79,15 @@ namespace DataModel.Migrations
|
|||||||
|
|
||||||
b.HasIndex("BoolValue");
|
b.HasIndex("BoolValue");
|
||||||
|
|
||||||
|
b.HasIndex("Code")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
b.HasIndex("GuidValue");
|
b.HasIndex("GuidValue");
|
||||||
|
|
||||||
b.HasIndex("Id");
|
b.HasIndex("Id");
|
||||||
|
|
||||||
b.HasIndex("IntegerValue");
|
b.HasIndex("IntegerValue");
|
||||||
|
|
||||||
b.HasIndex("Name")
|
|
||||||
.IsUnique();
|
|
||||||
|
|
||||||
b.HasIndex("TextValue");
|
b.HasIndex("TextValue");
|
||||||
|
|
||||||
b.ToTable("Settings");
|
b.ToTable("Settings");
|
||||||
|
435
I18N Commander/Processor/AppSettings.cs
Normal file
@ -0,0 +1,435 @@
|
|||||||
|
using DataModel.Database;
|
||||||
|
using DataModel.Database.Common;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
|
namespace Processor;
|
||||||
|
|
||||||
|
public static class AppSettings
|
||||||
|
{
|
||||||
|
#region DeepL Settings
|
||||||
|
|
||||||
|
#region DeepL Mode
|
||||||
|
|
||||||
|
private static SettingDeepLMode CACHE_DEEPL_MODE = SettingDeepLMode.DISABLED;
|
||||||
|
private static bool CACHE_DEEPL_MODE_IS_LOADED = false;
|
||||||
|
|
||||||
|
public static async Task SetDeepLMode(SettingDeepLMode mode)
|
||||||
|
{
|
||||||
|
// Convert the enum to its int value:
|
||||||
|
var intValue = (int)mode;
|
||||||
|
|
||||||
|
// Update the cache:
|
||||||
|
CACHE_DEEPL_MODE = mode;
|
||||||
|
CACHE_DEEPL_MODE_IS_LOADED = true;
|
||||||
|
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Check, if the setting is already set:
|
||||||
|
if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_MODE) is {} existingSetting)
|
||||||
|
{
|
||||||
|
existingSetting.IntegerValue = intValue;
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Does not exist, so create it:
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var setting = new Setting
|
||||||
|
{
|
||||||
|
Code = SettingNames.DEEPL_MODE,
|
||||||
|
IntegerValue = intValue,
|
||||||
|
};
|
||||||
|
|
||||||
|
await db.Settings.AddAsync(setting);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<SettingDeepLMode> GetDeepLMode()
|
||||||
|
{
|
||||||
|
if (CACHE_DEEPL_MODE_IS_LOADED)
|
||||||
|
return CACHE_DEEPL_MODE;
|
||||||
|
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Check, if the setting is already set:
|
||||||
|
if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_MODE) is { } existingSetting)
|
||||||
|
return (SettingDeepLMode) existingSetting.IntegerValue;
|
||||||
|
|
||||||
|
// Does not exist, so create it:
|
||||||
|
var setting = new Setting
|
||||||
|
{
|
||||||
|
Code = SettingNames.DEEPL_MODE,
|
||||||
|
IntegerValue = (int)SettingDeepLMode.DISABLED,
|
||||||
|
};
|
||||||
|
|
||||||
|
await db.Settings.AddAsync(setting);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
|
var mode = (SettingDeepLMode) setting.IntegerValue;
|
||||||
|
CACHE_DEEPL_MODE = mode;
|
||||||
|
CACHE_DEEPL_MODE_IS_LOADED = true;
|
||||||
|
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region DeepL API Key
|
||||||
|
|
||||||
|
private static string CACHE_DEEPL_API_KEY = string.Empty;
|
||||||
|
private static bool CACHE_DEEPL_API_KEY_IS_LOADED = false;
|
||||||
|
|
||||||
|
public static async Task SetDeepLAPIKey(string apiKey)
|
||||||
|
{
|
||||||
|
// Update the cache:
|
||||||
|
CACHE_DEEPL_API_KEY = apiKey;
|
||||||
|
CACHE_DEEPL_API_KEY_IS_LOADED = true;
|
||||||
|
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Check, if the setting is already set:
|
||||||
|
if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_API_KEY) is {} existingSetting)
|
||||||
|
{
|
||||||
|
existingSetting.TextValue = apiKey;
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Does not exist, so create it:
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var setting = new Setting
|
||||||
|
{
|
||||||
|
Code = SettingNames.DEEPL_API_KEY,
|
||||||
|
TextValue = apiKey,
|
||||||
|
};
|
||||||
|
|
||||||
|
await db.Settings.AddAsync(setting);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<string> GetDeepLAPIKey()
|
||||||
|
{
|
||||||
|
// Check the cache:
|
||||||
|
if (CACHE_DEEPL_API_KEY_IS_LOADED)
|
||||||
|
return CACHE_DEEPL_API_KEY;
|
||||||
|
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Check, if the setting is already set:
|
||||||
|
if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_API_KEY) is { } existingSetting)
|
||||||
|
return existingSetting.TextValue;
|
||||||
|
|
||||||
|
// Does not exist, so create it:
|
||||||
|
var setting = new Setting
|
||||||
|
{
|
||||||
|
Code = SettingNames.DEEPL_API_KEY,
|
||||||
|
TextValue = string.Empty,
|
||||||
|
};
|
||||||
|
|
||||||
|
await db.Settings.AddAsync(setting);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
|
var key = setting.TextValue;
|
||||||
|
CACHE_DEEPL_API_KEY = key;
|
||||||
|
CACHE_DEEPL_API_KEY_IS_LOADED = true;
|
||||||
|
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region DeepL Action
|
||||||
|
|
||||||
|
private static SettingDeepLAction CACHE_DEEPL_ACTION = SettingDeepLAction.MANUAL;
|
||||||
|
private static bool CACHE_DEEPL_ACTION_IS_LOADED = false;
|
||||||
|
|
||||||
|
public static async Task SetDeepLAction(SettingDeepLAction action)
|
||||||
|
{
|
||||||
|
// Convert the enum to its int value:
|
||||||
|
var intValue = (int)action;
|
||||||
|
|
||||||
|
// Update the cache:
|
||||||
|
CACHE_DEEPL_ACTION = action;
|
||||||
|
CACHE_DEEPL_ACTION_IS_LOADED = true;
|
||||||
|
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Check, if the setting is already set:
|
||||||
|
if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_ACTION) is {} existingSetting)
|
||||||
|
{
|
||||||
|
existingSetting.IntegerValue = intValue;
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Does not exist, so create it:
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var setting = new Setting
|
||||||
|
{
|
||||||
|
Code = SettingNames.DEEPL_ACTION,
|
||||||
|
IntegerValue = intValue,
|
||||||
|
};
|
||||||
|
|
||||||
|
await db.Settings.AddAsync(setting);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<SettingDeepLAction> GetDeepLAction()
|
||||||
|
{
|
||||||
|
// Check the cache:
|
||||||
|
if (CACHE_DEEPL_ACTION_IS_LOADED)
|
||||||
|
return CACHE_DEEPL_ACTION;
|
||||||
|
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Check, if the setting is already set:
|
||||||
|
if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_ACTION) is { } existingSetting)
|
||||||
|
return (SettingDeepLAction) existingSetting.IntegerValue;
|
||||||
|
|
||||||
|
// Does not exist, so create it:
|
||||||
|
var setting = new Setting
|
||||||
|
{
|
||||||
|
Code = SettingNames.DEEPL_ACTION,
|
||||||
|
IntegerValue = (int)SettingDeepLAction.MANUAL,
|
||||||
|
};
|
||||||
|
|
||||||
|
await db.Settings.AddAsync(setting);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
|
var action = (SettingDeepLAction) setting.IntegerValue;
|
||||||
|
CACHE_DEEPL_ACTION = action;
|
||||||
|
CACHE_DEEPL_ACTION_IS_LOADED = true;
|
||||||
|
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region DeepL Source Culture
|
||||||
|
|
||||||
|
private static int CACHE_DEEPL_SOURCE_CULTURE = -1;
|
||||||
|
private static bool CACHE_DEEPL_SOURCE_CULTURE_IS_LOADED = false;
|
||||||
|
|
||||||
|
public static async Task SetDeepLSourceCultureIndex(int cultureIndex)
|
||||||
|
{
|
||||||
|
// Update the cache:
|
||||||
|
CACHE_DEEPL_SOURCE_CULTURE = cultureIndex;
|
||||||
|
CACHE_DEEPL_SOURCE_CULTURE_IS_LOADED = true;
|
||||||
|
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Check, if the setting is already set:
|
||||||
|
if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_SOURCE_CULTURE) is {} existingSetting)
|
||||||
|
{
|
||||||
|
existingSetting.IntegerValue = cultureIndex;
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Does not exist, so create it:
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var setting = new Setting
|
||||||
|
{
|
||||||
|
Code = SettingNames.DEEPL_SOURCE_CULTURE,
|
||||||
|
IntegerValue = cultureIndex,
|
||||||
|
};
|
||||||
|
|
||||||
|
await db.Settings.AddAsync(setting);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<int> GetDeepLSourceCultureIndex()
|
||||||
|
{
|
||||||
|
// Check the cache:
|
||||||
|
if (CACHE_DEEPL_SOURCE_CULTURE_IS_LOADED)
|
||||||
|
return CACHE_DEEPL_SOURCE_CULTURE;
|
||||||
|
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Check, if the setting is already set:
|
||||||
|
if (await db.Settings.FirstOrDefaultAsync(n => n.Code == SettingNames.DEEPL_SOURCE_CULTURE) is { } existingSetting)
|
||||||
|
return existingSetting.IntegerValue;
|
||||||
|
|
||||||
|
// Does not exist, so create it:
|
||||||
|
var setting = new Setting
|
||||||
|
{
|
||||||
|
Code = SettingNames.DEEPL_SOURCE_CULTURE,
|
||||||
|
IntegerValue = -1,
|
||||||
|
};
|
||||||
|
|
||||||
|
await db.Settings.AddAsync(setting);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
|
var cultureIndex = setting.IntegerValue;
|
||||||
|
CACHE_DEEPL_SOURCE_CULTURE = cultureIndex;
|
||||||
|
CACHE_DEEPL_SOURCE_CULTURE_IS_LOADED = true;
|
||||||
|
|
||||||
|
return cultureIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Translation Settings
|
||||||
|
|
||||||
|
#region List of culture indices
|
||||||
|
|
||||||
|
private static List<int> CACHE_CULTURES_INDICES = new();
|
||||||
|
|
||||||
|
public static async Task<List<int>> GetCultureIndices()
|
||||||
|
{
|
||||||
|
// When possible, use the cache:
|
||||||
|
if (CACHE_CULTURES_INDICES.Count > 0)
|
||||||
|
return CACHE_CULTURES_INDICES;
|
||||||
|
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Count the number of cultures:
|
||||||
|
var list = await db.Settings.Where(n => n.Code.StartsWith(SettingNames.CULTURE)).OrderBy(n => n.IntegerValue).Select(n => n.IntegerValue).ToListAsync();
|
||||||
|
|
||||||
|
// We have at least one default culture:
|
||||||
|
if(list.Count == 0)
|
||||||
|
{
|
||||||
|
// Add the default culture, which is en-US:
|
||||||
|
await AppSettings.SetCultureCode(1, "en-US");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CACHE_CULTURES_INDICES = list;
|
||||||
|
|
||||||
|
return CACHE_CULTURES_INDICES;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Get a culture
|
||||||
|
|
||||||
|
// Cache the cultures:
|
||||||
|
private static readonly Dictionary<int, string> CACHE_CULTURES = new();
|
||||||
|
|
||||||
|
public static async Task<string> GetCultureCode(int index)
|
||||||
|
{
|
||||||
|
// Check the cache:
|
||||||
|
if (CACHE_CULTURES.TryGetValue(index, out var cultureCode))
|
||||||
|
return cultureCode;
|
||||||
|
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Get the culture code:
|
||||||
|
var code = await db.Settings.FirstOrDefaultAsync(n => n.Code.StartsWith(SettingNames.CULTURE) && n.IntegerValue == index);
|
||||||
|
|
||||||
|
// When the culture code is not set & index = 1, use the default culture en-US:
|
||||||
|
if(code is null && index == 1)
|
||||||
|
{
|
||||||
|
CACHE_CULTURES.Add(index, "en-US");
|
||||||
|
return "en-US";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the cache & return the code:
|
||||||
|
var codeText = code?.TextValue ?? string.Empty;
|
||||||
|
CACHE_CULTURES[index] = codeText;
|
||||||
|
return codeText;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Set a culture
|
||||||
|
|
||||||
|
public static async Task SetCultureCode(int index, string code)
|
||||||
|
{
|
||||||
|
// Update the cache:
|
||||||
|
CACHE_CULTURES[index] = code;
|
||||||
|
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Check, if the setting is already set:
|
||||||
|
if (await db.Settings.FirstOrDefaultAsync(n => n.Code.StartsWith(SettingNames.CULTURE) && n.IntegerValue == index) is {} existingSetting)
|
||||||
|
{
|
||||||
|
existingSetting.TextValue = code;
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Does not exist, so create it:
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var setting = new Setting
|
||||||
|
{
|
||||||
|
Code = $"{SettingNames.CULTURE} {index}",
|
||||||
|
IntegerValue = index,
|
||||||
|
TextValue = code,
|
||||||
|
};
|
||||||
|
|
||||||
|
await db.Settings.AddAsync(setting);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
|
// Update the list of cultures indices:
|
||||||
|
CACHE_CULTURES_INDICES.Add(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Delete a culture
|
||||||
|
|
||||||
|
public static async Task DeleteCulture(int index)
|
||||||
|
{
|
||||||
|
// Get the database:
|
||||||
|
await using var db = ProcessorMeta.ServiceProvider.GetRequiredService<DataContext>();
|
||||||
|
|
||||||
|
// Check, if the setting is already set:
|
||||||
|
if (await db.Settings.FirstOrDefaultAsync(n => n.Code.StartsWith(SettingNames.CULTURE) && n.IntegerValue == index) is {} existingSetting)
|
||||||
|
{
|
||||||
|
db.Settings.Remove(existingSetting);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the list of cultures indices:
|
||||||
|
CACHE_CULTURES_INDICES.Remove(index);
|
||||||
|
|
||||||
|
// Update the cache:
|
||||||
|
CACHE_CULTURES.Remove(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Get a list of cultures
|
||||||
|
|
||||||
|
public readonly record struct CultureInfo(string Code, int Index);
|
||||||
|
|
||||||
|
public static async Task<List<CultureInfo>> GetCultureInfos()
|
||||||
|
{
|
||||||
|
// Get the number of cultures:
|
||||||
|
var cultureIndices = await AppSettings.GetCultureIndices();
|
||||||
|
|
||||||
|
// Get the culture codes:
|
||||||
|
var cultureInfos = new List<CultureInfo>();
|
||||||
|
foreach (var cultureIndex in cultureIndices)
|
||||||
|
cultureInfos.Add(new CultureInfo
|
||||||
|
{
|
||||||
|
Code = await AppSettings.GetCultureCode(cultureIndex),
|
||||||
|
Index = cultureIndex,
|
||||||
|
});
|
||||||
|
|
||||||
|
return cultureInfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
105
I18N Commander/UI WinForms/Components/Main.Designer.cs
generated
@ -28,12 +28,18 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
|
this.components = new System.ComponentModel.Container();
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
|
||||||
this.tableLayout = new System.Windows.Forms.TableLayoutPanel();
|
this.tableLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||||
this.flowLayoutBottom = new System.Windows.Forms.FlowLayoutPanel();
|
|
||||||
this.splitContainerLR = new System.Windows.Forms.SplitContainer();
|
this.splitContainerLR = new System.Windows.Forms.SplitContainer();
|
||||||
this.sectionTree = new UI_WinForms.Components.SectionTree();
|
this.sectionTree = new UI_WinForms.Components.SectionTree();
|
||||||
this.splitContainerRTB = new System.Windows.Forms.SplitContainer();
|
this.splitContainerRTB = new System.Windows.Forms.SplitContainer();
|
||||||
this.textElements = new UI_WinForms.Components.TextElements();
|
this.textElements = new UI_WinForms.Components.TextElements();
|
||||||
|
this.tabControl = new System.Windows.Forms.TabControl();
|
||||||
|
this.tabTranslation = new System.Windows.Forms.TabPage();
|
||||||
|
this.tabSettings = new System.Windows.Forms.TabPage();
|
||||||
|
this.settings = new UI_WinForms.Components.Settings();
|
||||||
|
this.imageList = new System.Windows.Forms.ImageList(this.components);
|
||||||
this.tableLayout.SuspendLayout();
|
this.tableLayout.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.splitContainerLR)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.splitContainerLR)).BeginInit();
|
||||||
this.splitContainerLR.Panel1.SuspendLayout();
|
this.splitContainerLR.Panel1.SuspendLayout();
|
||||||
@ -42,33 +48,25 @@
|
|||||||
((System.ComponentModel.ISupportInitialize)(this.splitContainerRTB)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.splitContainerRTB)).BeginInit();
|
||||||
this.splitContainerRTB.Panel1.SuspendLayout();
|
this.splitContainerRTB.Panel1.SuspendLayout();
|
||||||
this.splitContainerRTB.SuspendLayout();
|
this.splitContainerRTB.SuspendLayout();
|
||||||
|
this.tabControl.SuspendLayout();
|
||||||
|
this.tabTranslation.SuspendLayout();
|
||||||
|
this.tabSettings.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// tableLayout
|
// tableLayout
|
||||||
//
|
//
|
||||||
this.tableLayout.ColumnCount = 1;
|
this.tableLayout.ColumnCount = 1;
|
||||||
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
|
||||||
this.tableLayout.Controls.Add(this.flowLayoutBottom, 0, 1);
|
|
||||||
this.tableLayout.Controls.Add(this.splitContainerLR, 0, 0);
|
this.tableLayout.Controls.Add(this.splitContainerLR, 0, 0);
|
||||||
this.tableLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.tableLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.tableLayout.Location = new System.Drawing.Point(0, 0);
|
this.tableLayout.Location = new System.Drawing.Point(3, 3);
|
||||||
this.tableLayout.Name = "tableLayout";
|
this.tableLayout.Name = "tableLayout";
|
||||||
this.tableLayout.RowCount = 2;
|
this.tableLayout.RowCount = 1;
|
||||||
this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 66F));
|
this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||||
this.tableLayout.Size = new System.Drawing.Size(965, 603);
|
this.tableLayout.Size = new System.Drawing.Size(885, 589);
|
||||||
this.tableLayout.TabIndex = 0;
|
this.tableLayout.TabIndex = 0;
|
||||||
//
|
//
|
||||||
// flowLayoutBottom
|
|
||||||
//
|
|
||||||
this.flowLayoutBottom.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
||||||
this.flowLayoutBottom.Location = new System.Drawing.Point(0, 537);
|
|
||||||
this.flowLayoutBottom.Margin = new System.Windows.Forms.Padding(0);
|
|
||||||
this.flowLayoutBottom.Name = "flowLayoutBottom";
|
|
||||||
this.flowLayoutBottom.Size = new System.Drawing.Size(965, 66);
|
|
||||||
this.flowLayoutBottom.TabIndex = 0;
|
|
||||||
//
|
|
||||||
// splitContainerLR
|
// splitContainerLR
|
||||||
//
|
//
|
||||||
this.splitContainerLR.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
this.splitContainerLR.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
@ -85,7 +83,7 @@
|
|||||||
// splitContainerLR.Panel2
|
// splitContainerLR.Panel2
|
||||||
//
|
//
|
||||||
this.splitContainerLR.Panel2.Controls.Add(this.splitContainerRTB);
|
this.splitContainerLR.Panel2.Controls.Add(this.splitContainerRTB);
|
||||||
this.splitContainerLR.Size = new System.Drawing.Size(959, 531);
|
this.splitContainerLR.Size = new System.Drawing.Size(879, 583);
|
||||||
this.splitContainerLR.SplitterDistance = 319;
|
this.splitContainerLR.SplitterDistance = 319;
|
||||||
this.splitContainerLR.TabIndex = 1;
|
this.splitContainerLR.TabIndex = 1;
|
||||||
//
|
//
|
||||||
@ -95,7 +93,7 @@
|
|||||||
this.sectionTree.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
this.sectionTree.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||||
this.sectionTree.Location = new System.Drawing.Point(0, 0);
|
this.sectionTree.Location = new System.Drawing.Point(0, 0);
|
||||||
this.sectionTree.Name = "sectionTree";
|
this.sectionTree.Name = "sectionTree";
|
||||||
this.sectionTree.Size = new System.Drawing.Size(317, 529);
|
this.sectionTree.Size = new System.Drawing.Size(317, 581);
|
||||||
this.sectionTree.TabIndex = 0;
|
this.sectionTree.TabIndex = 0;
|
||||||
//
|
//
|
||||||
// splitContainerRTB
|
// splitContainerRTB
|
||||||
@ -111,7 +109,7 @@
|
|||||||
//
|
//
|
||||||
this.splitContainerRTB.Panel1.Controls.Add(this.textElements);
|
this.splitContainerRTB.Panel1.Controls.Add(this.textElements);
|
||||||
this.splitContainerRTB.Panel1MinSize = 340;
|
this.splitContainerRTB.Panel1MinSize = 340;
|
||||||
this.splitContainerRTB.Size = new System.Drawing.Size(636, 531);
|
this.splitContainerRTB.Size = new System.Drawing.Size(556, 583);
|
||||||
this.splitContainerRTB.SplitterDistance = 340;
|
this.splitContainerRTB.SplitterDistance = 340;
|
||||||
this.splitContainerRTB.TabIndex = 0;
|
this.splitContainerRTB.TabIndex = 0;
|
||||||
//
|
//
|
||||||
@ -121,14 +119,70 @@
|
|||||||
this.textElements.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
this.textElements.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||||
this.textElements.Location = new System.Drawing.Point(0, 0);
|
this.textElements.Location = new System.Drawing.Point(0, 0);
|
||||||
this.textElements.Name = "textElements";
|
this.textElements.Name = "textElements";
|
||||||
this.textElements.Size = new System.Drawing.Size(634, 338);
|
this.textElements.Size = new System.Drawing.Size(554, 338);
|
||||||
this.textElements.TabIndex = 0;
|
this.textElements.TabIndex = 0;
|
||||||
//
|
//
|
||||||
|
// tabControl
|
||||||
|
//
|
||||||
|
this.tabControl.Alignment = System.Windows.Forms.TabAlignment.Left;
|
||||||
|
this.tabControl.Controls.Add(this.tabTranslation);
|
||||||
|
this.tabControl.Controls.Add(this.tabSettings);
|
||||||
|
this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.tabControl.ImageList = this.imageList;
|
||||||
|
this.tabControl.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.tabControl.Multiline = true;
|
||||||
|
this.tabControl.Name = "tabControl";
|
||||||
|
this.tabControl.Padding = new System.Drawing.Point(12, 12);
|
||||||
|
this.tabControl.SelectedIndex = 0;
|
||||||
|
this.tabControl.Size = new System.Drawing.Size(965, 603);
|
||||||
|
this.tabControl.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// tabTranslation
|
||||||
|
//
|
||||||
|
this.tabTranslation.Controls.Add(this.tableLayout);
|
||||||
|
this.tabTranslation.ImageIndex = 1;
|
||||||
|
this.tabTranslation.Location = new System.Drawing.Point(70, 4);
|
||||||
|
this.tabTranslation.Name = "tabTranslation";
|
||||||
|
this.tabTranslation.Padding = new System.Windows.Forms.Padding(3);
|
||||||
|
this.tabTranslation.Size = new System.Drawing.Size(891, 595);
|
||||||
|
this.tabTranslation.TabIndex = 0;
|
||||||
|
this.tabTranslation.Text = "Translation";
|
||||||
|
this.tabTranslation.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// tabSettings
|
||||||
|
//
|
||||||
|
this.tabSettings.Controls.Add(this.settings);
|
||||||
|
this.tabSettings.ImageIndex = 0;
|
||||||
|
this.tabSettings.Location = new System.Drawing.Point(70, 4);
|
||||||
|
this.tabSettings.Name = "tabSettings";
|
||||||
|
this.tabSettings.Padding = new System.Windows.Forms.Padding(3);
|
||||||
|
this.tabSettings.Size = new System.Drawing.Size(891, 595);
|
||||||
|
this.tabSettings.TabIndex = 1;
|
||||||
|
this.tabSettings.Text = "Settings";
|
||||||
|
this.tabSettings.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// settings
|
||||||
|
//
|
||||||
|
this.settings.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.settings.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||||
|
this.settings.Location = new System.Drawing.Point(3, 3);
|
||||||
|
this.settings.Name = "settings";
|
||||||
|
this.settings.Size = new System.Drawing.Size(885, 589);
|
||||||
|
this.settings.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// imageList
|
||||||
|
//
|
||||||
|
this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
|
||||||
|
this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
|
||||||
|
this.imageList.TransparentColor = System.Drawing.Color.Transparent;
|
||||||
|
this.imageList.Images.SetKeyName(0, "icons8-settings.svg.png");
|
||||||
|
this.imageList.Images.SetKeyName(1, "icons8-language-45.png");
|
||||||
|
//
|
||||||
// Main
|
// Main
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
this.Controls.Add(this.tableLayout);
|
this.Controls.Add(this.tabControl);
|
||||||
this.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
this.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||||
this.Name = "Main";
|
this.Name = "Main";
|
||||||
this.Size = new System.Drawing.Size(965, 603);
|
this.Size = new System.Drawing.Size(965, 603);
|
||||||
@ -140,6 +194,9 @@
|
|||||||
this.splitContainerRTB.Panel1.ResumeLayout(false);
|
this.splitContainerRTB.Panel1.ResumeLayout(false);
|
||||||
((System.ComponentModel.ISupportInitialize)(this.splitContainerRTB)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.splitContainerRTB)).EndInit();
|
||||||
this.splitContainerRTB.ResumeLayout(false);
|
this.splitContainerRTB.ResumeLayout(false);
|
||||||
|
this.tabControl.ResumeLayout(false);
|
||||||
|
this.tabTranslation.ResumeLayout(false);
|
||||||
|
this.tabSettings.ResumeLayout(false);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -147,10 +204,14 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private TableLayoutPanel tableLayout;
|
private TableLayoutPanel tableLayout;
|
||||||
private FlowLayoutPanel flowLayoutBottom;
|
|
||||||
private SplitContainer splitContainerLR;
|
private SplitContainer splitContainerLR;
|
||||||
private SplitContainer splitContainerRTB;
|
private SplitContainer splitContainerRTB;
|
||||||
private SectionTree sectionTree;
|
private SectionTree sectionTree;
|
||||||
private TextElements textElements;
|
private TextElements textElements;
|
||||||
|
private TabControl tabControl;
|
||||||
|
private TabPage tabTranslation;
|
||||||
|
private TabPage tabSettings;
|
||||||
|
private ImageList imageList;
|
||||||
|
private Settings settings;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,4 +57,332 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>
|
||||||
|
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
|
||||||
|
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
|
||||||
|
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAjEoAAAJNU0Z0AUkBTAIBAQIB
|
||||||
|
AAEgAQABIAEAAS0BAAEtAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABtAMAAS0DAAEBAQABIAUAAZAB
|
||||||
|
fvoAAw8BFAMTARkEAf8A/wAqAAMnATkDTgGWA1EBoQNRAaEDUQGhA04BlgMnATp8AAMLAQ4BVQFTAVEB
|
||||||
|
ogFpAVsBUgHHAyUBNv8A/wAmAAMRARYDQgHzAToCOQH/AT0BPAE7Af8BPQE8ATsB/wE9ATwBOwH/AToC
|
||||||
|
OQH/A0AB9AMRARZ4AAMSARgBbQFdAVIBzAG8AVsBGQH/AXkBXgFOAdcDEAEV/wD/ACIAAz8BbgFGAUMB
|
||||||
|
QgH/AcQBrwGmAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8BxAGuAaYB/wFGAUMBQgH/A0ABcHgAAxIB
|
||||||
|
GAFtAV0BUgHMAbwBWwEZAf8BvAFbARkB/wF3AV8BTAHYAyUBNwQB/wD/ABoAA1YBtwFXAVIBUAH/Ad4B
|
||||||
|
xQG7Af8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B3gHFAbsB/wFXAVIBTwH/A1YBugQBdAADEgEYAW0B
|
||||||
|
XQFSAcwBuwFbARkB/wG8AVsBGQH/AbwBWwEZAf8BdwFfAU8B1QIaARkBI/8A8QADAwEEAyIBMQMpAT4D
|
||||||
|
EgEYFAADEgEYA1UB2wF7AXABbAH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB
|
||||||
|
/wF6AXABawH/A1UB2wMTARoUAAMSARcDKQE+AyIBMQMDAQRQAAMSARgBbQFdAVIBzAG7AVsBGQH/AbsB
|
||||||
|
WwEZAf8BuwFbARkB/wG8AVsBGQH/AXUBXQFRAdQDIQEvBAH/AOUAAwIBAwM9AWkDTwHkA0UB7wNWAdAD
|
||||||
|
NgFZAwQBBQwAAygBOwNKAewBqwGaAZMB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecB
|
||||||
|
zQHCAf8BqgGZAZIB/wNIAe0DKQE9DAADAwEEAzYEVwHPA0UB7wNPAeUDPgFqAwIBA0wAAxIBGAFtAV0B
|
||||||
|
UgHMAbsBWwEaAf8BuwFbARkB/wG7AVsBGQH/AbsBWwEZAf8BuwFbARkB/wFzAVwBTwHTAyIBMf8A4QAD
|
||||||
|
AgEDAzQBUwNHAfEBbwFpAWYB/wG3AasBpAH/AV0BWQFXAf8DOgH7A1EBpAMZASIDBAEFAwkBDAM/AW4B
|
||||||
|
OAI3AfsB3AHIAb4B/wHnAc4BwwH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B2AHAAbYB
|
||||||
|
/wIzATIB/ANAAXEDCgENAwMBBAMYASADUQGiATsBOgE5AfsBXgFXAVQB/wG2AaMBmwH/AXABZwFjAf8D
|
||||||
|
SAHyAzUBVQMCAQNIAAMSARgBbQFdAVIBzAG7AVsBGgH/AbsBWwEaAf8BuwFbARkB/wG7AVsBGQH/AbsB
|
||||||
|
WwEZAf8BuwFbARkB/wF1AV0BUQHUAxgBIP8A2QADAwEEAz0BaANHAfEBfwF0AW8B/wHjAcwBwQH/AewB
|
||||||
|
2gHQAf8B5AHVAcsB/wGnAZ0BlwH/AVMBUAFPAf8DTwHkA04BmANVAbQBTAJLAewBeAFyAW4B/wHtAdwB
|
||||||
|
0gH/AeoB1QHLAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AXUBawFnAf8D
|
||||||
|
SAHtA1QBtQNOAZcDUAHiAVMBTgFMAf8BpAGUAY0B/wHfAcYBuwH/AecBzQHCAf8B4wHJAb4B/wGAAXUB
|
||||||
|
cAH/A0gB8gM+AWoDAwEERAADEgEYAW0BXQFSAcwBugFbARoB/wG7AVsBGgH/AbsBWwEaAf8BuwFbARoB
|
||||||
|
/wG7AVsBGQH/AbsBWwEZAf8BuwFbARkB/wF2AVwBTgHWAyUBN/8A1QADIQEvA1AB4wFvAWoBZgH/AeMB
|
||||||
|
zAHCAf8B5wHNAcIB/wHoAdABxQH/Ae0B3AHSAf8B7QHdAdMB/wHoAdkBzwH/AYQBfgF5Af8DNwH/AU4B
|
||||||
|
TAFLAf8BtwGrAaUB/wHqAdsB0QH/Ae0B3QHTAf8B7QHdAdMB/wHrAdUBywH/AecBzQHCAf8B5wHNAcIB
|
||||||
|
/wHnAc0BwgH/AecBzQHCAf8B5QHLAcAB/wGzAaABmAH/AU0BSgFIAf8BNwI2Af8BgQF1AXEB/wHjAckB
|
||||||
|
vwH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B4wHJAb4B/wFwAWcBYwH/A08B5QMiATEk
|
||||||
|
AAMhATABVAFSAVABoAFZAVYBUwGrAVkBVgFTAasBWQFWAVMBqwFZAVYBUwGrAVkBVgFTAasBWQFWAVMB
|
||||||
|
qwFdAVgBUwGzAZQBXwE5Ae4BugFbARoB/wG6AVsBGgH/AbsBWwEaAf8BuwFbARoB/wG7AVsBGgH/AbsB
|
||||||
|
WwEaAf8BuwFbARkB/wG7AVsBGQH/AYkBXwFGAeUBWgFVAVMBrQFZAVYBUwGrAVkBVgFTAasBWQFWAVMB
|
||||||
|
qwFYAVQBUgGpAVsBWQFUAasBWwFZAVQBqwFbAVkBVAGrAVsBWQFUAasBWwFZAVQBqwFbAVkBVAGrAVsB
|
||||||
|
WQFUAasBWwFZAVQBqwFbAVkBVAGrAVsBWQFUAasBWwFZAVQBqwFVAVQBUQGgAyEBMP8AjQADKAE8A0gB
|
||||||
|
7QG3AasBpAH/AewB2wHQAf8B6QHRAcYB/wHnAc0BwgH/AegB0QHGAf8B7AHaAdAB/wHtAd0B0wH/AewB
|
||||||
|
3AHSAf8B3gHPAcYB/wHsAdwB0gH/Ae0B3QHTAf8B7QHdAdMB/wHtAd0B0wH/Ae0B3QHTAf8B7QHdAdMB
|
||||||
|
/wHqAdUBywH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHmAcwBwQH/AdgB
|
||||||
|
wAG2Af8B5gHMAcEB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB
|
||||||
|
/wGxAZ4BlwH/A0UB7wMpAT0gAAMgAS4BkwFdAT0B7AG5AVoBGgH/AbkBWgEaAf8BuQFaARoB/wG5AVoB
|
||||||
|
GgH/AbkBWgEaAf8BugFaARoB/wG6AVoBGgH/AboBWwEaAf8BugFbARoB/wG6AVsBGgH/AboBWwEaAf8B
|
||||||
|
ugFbARoB/wG6AVsBGgH/AbsBWwEaAf8BuwFbARoB/wG7AVsBGgH/AbsBWwEZAf8BuwFbARkB/wG7AVsB
|
||||||
|
GQH/AbsBWwEZAf8BuwFbARkB/wG8AVsBGQH/AcUBdQErAfwB7AGkAUIB/wHsAaQBQgH/AewBpAFCAf8B
|
||||||
|
7AGkAUIB/wHsAaQBQgH/AewBpAFCAf8B7AGkAUIB/wHsAaQBQgH/AesBpAFCAf8B6wGkAUIB/wHrAaQB
|
||||||
|
QgH/AesBpAFCAf8BqwGGAVMB6wMgAS3/AIkAAxABFQNUAc0BXAFZAVYB/wHjAdQBywH/Ae0B3AHSAf8B
|
||||||
|
6QHRAcYB/wHnAc0BwgH/AegB0AHFAf8B7AHbAdEB/wHtAd0B0wH/Ae0B3QHTAf8B7QHdAdMB/wHtAd0B
|
||||||
|
0wH/Ae0B3QHTAf8B7QHdAdMB/wHtAd0B0wH/Ae0B3QHTAf8B7QHcAdIB/wHrAdUBygH/AecBzQHCAf8B
|
||||||
|
5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0B
|
||||||
|
wgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/Ad0BxQG6Af8BWgFVAVIB/wNWAc4DEQEWIAADMwFQAaIB
|
||||||
|
XgEtAfYBuQFaARsB/wG5AVoBGgH/AbkBWgEaAf8BuQFaARoB/wG5AVoBGgH/AbkBWgEaAf8BuQFaARoB
|
||||||
|
/wG5AVoBGgH/AboBWgEaAf8BugFbARoB/wG6AVsBGgH/AboBWwEaAf8BugFbARoB/wG6AVsBGgH/AboB
|
||||||
|
WwEaAf8BuwFbARoB/wG7AVsBGgH/AbsBWwEaAf8BuwFbARkB/wG7AVsBGQH/AbsBWwEZAf8BtQFhAR4B
|
||||||
|
/gHQAYoBOwH9Ae0BpAFCAf8B7AGkAUIB/wHsAaQBQgH/AewBpAFCAf8B7AGkAUIB/wHsAaQBQgH/AewB
|
||||||
|
pAFCAf8B7AGkAUIB/wHsAaQBQgH/AewBpAFCAf8B7AGkAUIB/wHrAaQBQgH/AccBkwFIAfYDMwFQ/wCN
|
||||||
|
AAMzAVICQQFAAfoBpgGbAZUB/wHtAd0B0wH/AewB2wHQAf8B6QHRAcYB/wHrAdcB0AH/AewB2gHTAf8B
|
||||||
|
7AHbAdEB/wHtAd0B0wH/Ae0B3QHTAf8B7QHdAdMB/wHtAd0B0wH/Ae0B3QHTAf8B7QHdAdMB/wHqAdoB
|
||||||
|
0AH/AcYBuQGxAf8B6gHaAdAB/wHqAdUBygH/AecBzgHDAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B
|
||||||
|
5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wGhAZEB
|
||||||
|
iwH/AToCOQH7AzUBViQAAzMBUQGnAVsBLgH3AbgBWgEbAf8BuQFaARsB/wG5AVoBGwH/AbkBWgEaAf8B
|
||||||
|
uQFaARoB/wG5AVoBGgH/AbkBWgEaAf8BuQFaARoB/wG6AVoBGgH/AboBWgEaAf8BugFaARoB/wG6AVsB
|
||||||
|
GgH/AboBWwEaAf8BugFbARoB/wG6AVsBGgH/AboBWwEaAf8BuwFbARoB/wG7AVsBGgH/AbsBWwEaAf8B
|
||||||
|
uwFbARkB/wG7AVsBGQH/AboBZwEiAf4B2wGZAUAB/QHtAaQBQgH/Ae0BpAFCAf8B7AGkAUIB/wHsAaQB
|
||||||
|
QgH/AewBpAFCAf8B7AGkAUIB/wHsAaQBQgH/AewBpAFCAf8B7AGkAUIB/wHsAaQBQgH/AewBpAFCAf8B
|
||||||
|
7AGkAUIB/wHHAZMBSAH2AzMBUf8AjQADAwEEA1ABnQFSAU8BTQH/AecB1wHNAf8B7QHdAdMB/wHwAeQB
|
||||||
|
3wH/AfYB8gH3Af8B9QHxAfUB/wHtAdsB1QH/AewB2gHQAf8B7QHdAdMB/wHYAcoBwQH/AcYBuQGxAf8B
|
||||||
|
6AHWAcwB/wHfAcsBwQH/Ac8BuwGxAf8BQQI/Af8BzwG6AbEB/wHfAcoBwAH/AaQBlgGPAf8BjwGCAXwB
|
||||||
|
/wHmAcwBwQH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecB
|
||||||
|
zQHCAf8B4QHIAb4B/wFQAUwBSgH/A1EBogMDAQQkAAMzAVEBpwFbAS4B9wG4AVoBGwH/AbgBWgEbAf8B
|
||||||
|
uAFaARsB/wG5AVoBGwH/AbkBWgEbAf8BuQFaARoB/wG5AVoBGgH/AbkBWgEaAf8BuQFaARoB/wG5AVoB
|
||||||
|
GgH/AbkBWgEaAf8BugFaARoB/wG6AVsBGgH/AboBWwEaAf8BugFbARoB/wG6AVsBGgH/AboBWwEaAf8B
|
||||||
|
ugFbARoB/wG7AVsBGgH/AbsBWwEaAf8BuwFbARoB/wHDAXMBKwH8AewBowFBAf8B7QGkAUIB/wHtAaQB
|
||||||
|
QgH/Ae0BpAFCAf8B7QGkAUIB/wHsAaQBQgH/AewBpAFCAf8B7AGkAUIB/wHsAaQBQgH/AewBpAFCAf8B
|
||||||
|
7AGkAUIB/wHsAaQBQgH/AewBpAFCAf8ByQGTAUgB9gMzAVH/AJEAAxcBHwNQAd8BfwF5AXQB/wHsAdwB
|
||||||
|
0gH/Ae0B3QHUAf8B9ALtAf8B8AHkAeIB/wHnAc0BwgH/AeUBzgHDAf8BuwGvAagB/wFGAUQBQwH/AU8B
|
||||||
|
SwFJAf8B0AG3AawB/wHQAbcBrAH/AcQBrQGjAf8BOAI3Af8BxAGtAaMB/wHDAawBogH/AU8BSwFJAf8B
|
||||||
|
ZAFcAVkB/wHiAcgBvQH/AeYBzAHBAf8B5gHMAcEB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0B
|
||||||
|
wgH/AeYBzAHBAf8BfgF0AW4B/wNQAeIDGAEgKAADMwFRAacBWwEuAfcBuAFaARsB/wG4AVoBGwH/AbgB
|
||||||
|
WgEbAf8BuAFaARsB/wG4AVoBGwH/AbkBWgEbAf8BuQFaARoB/wG5AVoBGgH/AbkBWgEaAf8BuQFaARoB
|
||||||
|
/wG5AVoBGgH/AbkBWgEaAf8BugFaARoB/wG6AVoBGgH/AboBWwEaAf8BugFbARoB/wG6AVsBGgH/AboB
|
||||||
|
WwEaAf8BugFbARoB/wG6AVsBGgH/AbsBWwEaAf8B0wGMATgB+wHtAaQBQgH/Ae0BpAFCAf8B7QGkAUIB
|
||||||
|
/wHtAaQBQgH/Ae0BpAFCAf8B7QGkAUIB/wHtAaQBQgH/AewBpAFCAf8B7AGkAUIB/wHsAaQBQgH/AewB
|
||||||
|
pAFCAf8B7AGkAUIB/wHsAaQBQgH/AckBkwFIAfYDMwFR/wCRAAMDAQQDTQGTAzYB/wHaAcoBwQH/Ae0B
|
||||||
|
3QHTAf8B7gHfAdYB/wHtAd0B1AH/AeUBzgHDAf8BlgGIAYIB/wE4AjcB/wFsAWMBXwH/AbYBoQGYAf8B
|
||||||
|
0AG3AawB/wHQAbcBrAH/AcwBtAGpAf8BnAGLAYQB/wHMAbQBqQH/AbYBogGYAf8BVAFPAUwB/wGqAZcB
|
||||||
|
jwH/Ac8BtgGsAf8BlAGFAYAB/wGvAZ4BlgH/AeYBzAHBAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B
|
||||||
|
2QHAAbYB/wE3AjYB/wNOAZYDAwEEKAADMwFRAacBWwEuAfcBuAFaARsB/wG4AVoBGwH/AbgBWgEbAf8B
|
||||||
|
uAFaARsB/wG4AVoBGwH/AbgBWgEbAf8BuAFaARsB/wG5AVoBGwH/AbkBWgEaAf8BuQFaARoB/wG5AVoB
|
||||||
|
GgH/AbkBWgEaAf8BuQFaARoB/wG5AVoBGgH/AboBWgEaAf8BugFaARoB/wG6AVsBGgH/AboBWwEaAf8B
|
||||||
|
ugFbARoB/wG6AVsBGgH/AboBZgEoAfwB5gGcAUUB/gHtAaQBQgH/Ae0BpAFCAf8B7QGkAUIB/wHtAaQB
|
||||||
|
QgH/Ae0BpAFCAf8B7QGkAUIB/wHtAaQBQgH/Ae0BpAFCAf8B7QGkAUIB/wHsAaQBQgH/AewBpAFCAf8B
|
||||||
|
7AGkAUIB/wHsAaQBQgH/AckBkwFIAfYDMwFR/wCRAAMJAQwDVAGyAUkBRgFFAf8B5gHPAcQB/wHtAdwB
|
||||||
|
0gH/Ae0B3QHTAf8B7QHdAdMB/wG8AbABqAH/AjgBNwH/AXsBcAFrAf8BzgG1AaoB/wHQAbcBrAH/AdAB
|
||||||
|
twGsAf8B0AG3AawB/wHQAbcBrAH/AdABtwGsAf8B0AG3AawB/wHPAbYBqwH/AcwBtAGpAf8BzwG2AasB
|
||||||
|
/wGEAXcBcgH/AzUB/wGTAYUBfwH/AeYBzAHBAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5gHMAcEB
|
||||||
|
/wFQAUsBSgH/A1UBtAMJAQwoAAMzAVEBpgFbAS4B9wG3AVoBGwH/AbgBWgEbAf8BuAFaARsB/wG4AVoB
|
||||||
|
GwH/AbgBWgEbAf8BuAFaARsB/wG4AVoBGwH/AbgBWgEbAf8BuQFaARsB/wG5AVoBGgH/AbkBWgEaAf8B
|
||||||
|
uQFaARoB/wG5AVoBGgH/AbkBWgEaAf8BuQFaARoB/wG6AVoBGgH/AboBWgEaAf8BugFbARoB/wG6AVsB
|
||||||
|
GgH/AboBWwEaAf8BygF9ATEB+wHuAaQBQgH/Ae0BpAFCAf8B7QGkAUIB/wHtAaQBQgH/Ae0BpAFCAf8B
|
||||||
|
7QGkAUIB/wHtAaQBQgH/Ae0BpAFCAf8B7QGkAUIB/wHtAaQBQgH/Ae0BpAFCAf8B7AGkAUIB/wHsAaQB
|
||||||
|
QgH/AewBpAFCAf8ByQGTAUgB9gMzAVH/AIkAAxMBGgMpAT0DQAFwA0wB6wGvAZ8BmAH/AecBzQHCAf8B
|
||||||
|
6QHRAcYB/wHsAdsB0AH/AdYByAG/Af8BRgFEAUMB/wFrAWIBXgH/Ac4BtQGqAf8B0AG3AawB/wHOAbYB
|
||||||
|
qwH/AaIBkQGJAf8BaAFgAVwB/wFBAT8BPgH/AzUB/wFBAT4BPQH/AWgBXwFbAf8BogGQAYgB/wHNAbQB
|
||||||
|
qgH/AZQBhQF+Af8BhAF3AXEB/wHPAbYBrAH/AeMByQG+Af8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B
|
||||||
|
5wHNAcIB/wG0AaIBmgH/A0wB6wM/AW4DKAE8AxMBGSAAAzMBUQGmAVsBLgH3AbcBWgEbAf8BtwFaARsB
|
||||||
|
/wG4AVoBGwH/AbgBWgEbAf8BwwFyATwB/wHLAYUBVgH/Ab8BaQEwAf8BuAFaARsB/wG4AVoBGwH/AbkB
|
||||||
|
WgEbAf8BuQFaARsB/wG9AWQBKAH/AcsBhQFWAf8BxQF2AUEB/wG5AVoBGgH/AbkBWgEaAf8BuQFaARoB
|
||||||
|
/wG6AVoBGgH/AboBWwEaAf8BvgFdASUB/QHaAZcBQAH9Ae4BpAFCAf8B7gGkAUIB/wHeAZQBOgH/Ae0B
|
||||||
|
owFCAf8B7QGkAUIB/wHtAaQBQgH/Ae0BpAFCAf8B7QGkAUIB/wHrAaIBQQH/Ad0BkwE6Af8B7QGkAUIB
|
||||||
|
/wHtAaQBQgH/AewBpAFCAf8B7AGkAUIB/wHJAZMBSAH2AzMBUf8AfQADEQEWA0ABcANWAboDVQHbA0gB
|
||||||
|
7QMzAfwBdgFwAW0B/wHpAdkBzwH/AekB0QHHAf8B5wHNAcIB/wHoAdABxQH/AYUBfQF3Af8BPgE8ATsB
|
||||||
|
/wGxAZ0BlAH/AdABtwGsAf8BzgG2AasB/wGCAXUBcAH/AT0CPAH/AUsBYAFnAf8BcgGnAboB/wF9AbsB
|
||||||
|
0gH/AXIBqAG8Af8BTAFhAWgB/wE9AjwB/wGBAXQBbwH/Ac0BtQGqAf8BzwG2AasB/wHAAakBnwH/AYUB
|
||||||
|
eAFzAf8BoAGQAYkB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHlAcsBwAH/AXkBbwFqAf8COAE3AfsD
|
||||||
|
SgHsA1UB2wNWAbgDQAFvAxEBFhQAAzMBUQGmAVsBLgH3AbcBWgEbAf8BtwFaARsB/wG3AVoBGwH/AbcB
|
||||||
|
WgEbAf8BzgGMAWEB/wH7AfUB8QH/Ad0BsQGTAf8BuAFaARsB/wG4AVoBGwH/AbgBWgEbAf8BuAFaARsB
|
||||||
|
/wHWAaABfAH/AfsB9QHxAf8B1wGhAX4B/wG5AVoBGgH/AbkBWgEaAf8BuQFaARoB/wG5AVoBGgH/AbkB
|
||||||
|
WgEaAf8BvgFqASwB/QHkAZkBRAH+Ae4BpAFCAf8B2QGPATgB/wGWAUwBFwH/AcUBegEuAf8B7AGjAUEB
|
||||||
|
/wHtAaQBQgH/Ae0BpAFCAf8B6QGgAUAB/wG5AW0BJwH/AZgBSgEVAf8B3gGUAToB/wHtAaQBQgH/Ae0B
|
||||||
|
pAFCAf8B7QGkAUIB/wHKAZMBSAH2AzMBUf8AeQADJgE4A0IB8wFGAUMBQgH/AVcBUgFPAf8BeQFvAWoB
|
||||||
|
/wGqAZkBkgH/AdoBxgG9Af8B7QHcAdIB/wHtAd0B0wH/AewB2wHRAf8B6AHQAcYB/wHWAb4BtAH/AVcB
|
||||||
|
UQFPAf8BZAFcAVgB/wHQAbcBrAH/AdABtwGsAf8BowGRAYkB/wE9AjwB/wFaAXsBiAH/AYsB1gHwAf8B
|
||||||
|
jwHdAfkB/wGPAd0B+QH/AY8B3QH5Af8BiwHWAfEB/wFbAXwBiQH/AT0CPAH/AaIBkAGJAf8BzAG0AakB
|
||||||
|
/wFNAUkBRwH/AUcBRAFCAf8BiwF/AXoB/wHmAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecB
|
||||||
|
zQHCAf8B3QHEAboB/wGvAZ0BlgH/AX4BcwFvAf8BWQFUAVEB/wFHAUQBQwH/A0IB8wMnATkQAAMzAVEB
|
||||||
|
pgFbAS4B9wG3AVoBGwH/AbcBWgEbAf8BtwFaARsB/wG3AVoBGwH/AbgBXgEgAf8B+QHxAewB/wH4Ae4B
|
||||||
|
5wH/AckBgQFQAf8ByQGBAVAB/wHJAYEBUAH/AckBgQFQAf8B9AHlAdwB/wH7AfYB8wH/AcYBeAFEAf8B
|
||||||
|
uQFaARoB/wG5AVoBGgH/AbkBWgEaAf8BuQFaARoB/wG5AVoBGgH/AcgBewEwAfsB7gGkAUIB/wHtAaMB
|
||||||
|
QgH/AbwBcgEqAf8BjQFCARIB/wGOAUIBEgH/Ab8BdAErAf8B6AGeAT8B/wHbAZEBOQH/AaMBVQEbAf8B
|
||||||
|
jgE/ARAB/wGYAUoBFgH/AcwBggExAf8B7QGkAUIB/wHtAaQBQgH/Ae0BpAFCAf8BygGTAUgB9gMzAVH/
|
||||||
|
AHkAA04BlAE6AjkB/wHCAa0BpAH/Ad4BxQG7Af8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B6gHUAcoB
|
||||||
|
/wHtAd0B0wH/Ae0B3QHTAf8B7AHbAdEB/wHFAbMBqgH/AUMBQAE/Af8BoAGOAYcB/wHQAbcBrAH/AdAB
|
||||||
|
twGsAf8BagFhAV0B/wFKAV4BZQH/AYsB1gHwAf8BjwHdAfkB/wGPAd0B+QH/AY8B3QH5Af8BjwHdAfkB
|
||||||
|
/wGPAd0B+QH/AYsB1gHxAf8BSwFgAWgB/wFoAWABXAH/Ac8BtgGrAf8BqAGWAY0B/wG4AaMBmQH/Ad0B
|
||||||
|
yQG/Af8B6gHVAcoB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB
|
||||||
|
/wHnAc0BwgH/AeABxwG9Af8BxgGxAacB/wE7AjkB/wNOAZYQAAMzAVEBpQFbAS4B9wG3AVoBGwH/AbcB
|
||||||
|
WgEbAf8BtwFaARsB/wG3AVoBGwH/AbcBWwEcAf8B5gHGAbEZ/wHvAdkBywH/Ab4BZwEtAf8BuAFaARsB
|
||||||
|
/wG5AVoBGwH/AbkBWgEaAf8BuQFaARoB/wGyAV8BHgH+AdQBjgE5AfwB7gGkAUIB/wHuAaQBQgH/AekB
|
||||||
|
nwE/Af8BxwF9AS8B/wGTAUcBFQH/AY0BQQESAf8BpwFbAR4B/wGZAUwBFgH/AY4BQAERAf8BrwFhASEB
|
||||||
|
/wHbAZEBOQH/AewBowFCAf8B7QGkAUIB/wHtAaQBQgH/Ae0BpAFCAf8BygGTAUgB9gMzAVH/AHkAA1EB
|
||||||
|
ogE9ATwBOwH/AeYBzAHBAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AeoB
|
||||||
|
1AHJAf8B7QHdAdMB/wHtAd0B0wH/Ab0BsQGpAf8BNwI2Af8BxAGtAaMB/wHQAbcBrAH/AdABtwGsAf8B
|
||||||
|
QwFAAT8B/wFwAaUBtwH/AY8B3QH5Af8BjwHdAfkB/wFsAZwBrQH/AToBQQFEAf8BagGaAasB/wGPAd0B
|
||||||
|
+QH/AY8B3QH5Af8BcgGnAboB/wFBAT8BPgH/AdABtwGsAf8BzAGzAakB/wHEAa0BowH/Ac8BuwGxAf8B
|
||||||
|
6gHaAdAB/wHrAdUBygH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0B
|
||||||
|
wgH/AecBzQHCAf8B5wHNAcIB/wE9ATwBOwH/A1EBoRAAAzMBUQGlAVsBLwH3AbYBWgEcAf8BtwFaARsB
|
||||||
|
/wG3AVoBGwH/AbcBWgEbAf8BtwFaARsB/wHUAZwBdgH/Af4B/QH8Af8B9gHqAeMB/wHjAcABqAH/AeQB
|
||||||
|
wAGnAf8B8gHgAdQF/wHhAbgBnAH/AbgBWwEcAf8BuAFaARsB/wG4AVoBGwH/AbkBWgEbAf8BuQFaARsB
|
||||||
|
/wG1AW4BKgH6Ae8BowFCAf8B7wGjAUIB/wHuAaQBQgH/Ae4BpAFCAf8B7gGkAUIB/wHNAYMBMgH/AZAB
|
||||||
|
RAETAf8BjAFAAREB/wGNAT8BEAH/AbgBbAEmAf8B7AGiAUEB/wHuAaQBQgH/Ae0BpAFCAf8B7QGkAUIB
|
||||||
|
/wHtAaQBQgH/Ae0BpAFCAf8BygGTAUgB9gMzAVH/AHkAA1EBogE9ATwBOwH/AeYBzAHBAf8B5wHNAcIB
|
||||||
|
/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B6gHUAcoB/wHtAdwB0gH/AbgB
|
||||||
|
rAGlAf8DMwH/Ac4BtQGqAf8B0AG3AawB/wHQAbcBrAH/ATgCNwH/AXwBuQHQAf8BjwHdAfkB/wGPAd0B
|
||||||
|
+QH/AT0BRgFJAf8DMwH/ATsBQwFFAf8BjwHdAfkB/wGPAd0B+QH/AXwBuwHRAf8BNgI1Af8B0AG3AawB
|
||||||
|
/wGcAYsBgwH/ATgCNwH/AUEBQAE/Af8BxwG6AbIB/wHtAdwB0gH/AeoB1QHKAf8B5wHNAcIB/wHnAc0B
|
||||||
|
wgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wE9ATwBOwH/A1EBoRAAAzMB
|
||||||
|
UQGlAVsBLwH3AbYBWgEcAf8BtgFaARwB/wG3AVoBGwH/AbcBWgEbAf8BtwFaARsB/wHFAXoBRwH/AfkB
|
||||||
|
8gHtAf8B8QHeAdIB/wG9AWgBLwH/AboBYAEjAf8B6AHJAbQF/wHMAYgBWwH/AbgBWgEbAf8BuAFaARsB
|
||||||
|
/wG4AVoBGwH/AbgBWgEbAf8BsgFfAR8B/gHTAY0BOQH7Ae8BowFCAf8B7wGjAUIB/wHvAaMBQgH/Ae8B
|
||||||
|
pAFCAf8B7gGkAUIB/wHOAYMBMgH/AZEBRQETAf8BjAFAAREB/wGOAUABEQH/AcUBeQEtAf8B7QGjAUIB
|
||||||
|
/wHuAaQBQgH/Ae4BpAFCAf8B7gGkAUIB/wHtAaQBQgH/Ae0BpAFCAf8BygGTAUgB9gMzAVH/AHkAA1EB
|
||||||
|
ogE9ATwBOwH/AeYBzAHBAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecB
|
||||||
|
zQHCAf8B5wHNAcIB/wHqAdQBygH/Ab0BsQGqAf8CNwE2Af8BwwGsAaIB/wHQAbcBrAH/AdABtwGsAf8B
|
||||||
|
QwFBAUAB/wFvAaMBtgH/AY8B3QH5Af8BjwHdAfkB/wFuAaABsQH/AT4BSAFLAf8BbQGeAa8B/wGPAd0B
|
||||||
|
+QH/AY8B3QH5Af8BcQGmAbgB/wFCAUABPgH/AdABtwGsAf8BzAG0AakB/wHEAa0BowH/Ac8BuwGxAf8B
|
||||||
|
6gHaAdAB/wHtAd0B0wH/Ae0B3QHTAf8B6wHVAcoB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0B
|
||||||
|
wgH/AecBzQHCAf8B5wHNAcIB/wE9ATwBOwH/A1EBoRAAAzMBUQGlAVsBLwH3AbYBWgEcAf8BtgFaARwB
|
||||||
|
/wG2AVoBHAH/AbYBWgEcAf8BtgFaARsB/wG4AV0BHwH/AfEB3wHSAf8B+gHzAe8B/wHHAX8BTgH/Ab4B
|
||||||
|
aQEwAf8B9gHrAeQB/wH7AfUB8gH/AboBXwEhAf8BuAFaARsB/wG4AVoBGwH/AbgBWgEbAf8BuAFaARsB
|
||||||
|
/wG+AWQBKgH9AeUBmAFEAf4B7wGjAUIB/wHvAaMBQgH/Ae8BowFCAf8B7wGjAUIB/wHpAZ0BPwH/AZcB
|
||||||
|
SwEWAf8BjAFAAREB/wGsAWABIAH/AZEBQwESAf8BlQFGARQB/wHWAYsBNgH/Ae4BpAFCAf8B7gGkAUIB
|
||||||
|
/wHuAaQBQgH/Ae4BpAFCAf8B7QGkAUIB/wHKAZMBSAH2AzMBUf8AeQADTQGSAToCOQH/AcIBrQGkAf8B
|
||||||
|
3QHFAboB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0B
|
||||||
|
wgH/AcYBtAGrAf8BRAFCAUEB/wGeAY0BhQH/AdABtwGsAf8B0AG3AawB/wFrAWIBXgH/AUkBXAFkAf8B
|
||||||
|
iwHVAe8B/wGPAd0B+QH/AY8B3QH5Af8BjwHdAfkB/wGPAd0B+QH/AY8B3QH5Af8BiwHVAfAB/wFKAV4B
|
||||||
|
ZQH/AWkBYQFdAf8BzwG2AasB/wG2AaEBmAH/AcIBqwGhAf8B4AHMAcEB/wHtAd0B0wH/Ae0B3QHTAf8B
|
||||||
|
7QHdAdMB/wHtAd0B0wH/AeoB1QHKAf8B5wHOAcMB/wHnAc0BwgH/AecBzQHCAf8B2wHDAbkB/wHBAawB
|
||||||
|
pAH/AToCOQH/A04BlRAAAzMBUQGlAVsBLwH3AbYBWgEcAf8BtgFaARwB/wG2AVoBHAH/AbYBWgEcAf8B
|
||||||
|
tgFaARwB/wG2AVoBGwH/AdYBoAF8Bf8B1wGjAYAB/wHNAYwBXwP/Af4B/wHdAbABkwH/AbcBWgEbAf8B
|
||||||
|
uAFaARsB/wG4AVoBGwH/AbgBWgEbAf8BuAFaARsB/wHIAXoBKwH8Ae4BogFBAf8B7wGjAUIB/wHvAaMB
|
||||||
|
QgH/Ae8BowFCAf8B7wGjAUIB/wHRAYUBMwH/AZsBUAEZAf8BuQFtASgB/wHrAaABQQH/AbgBbAEmAf8B
|
||||||
|
jgE/ARAB/wGoAVsBHgH/AewBoQFBAf8B7gGkAUIB/wHuAaQBQgH/Ae4BpAFCAf8B7gGkAUIB/wHKAZMB
|
||||||
|
SAH2AzMBUf8AeQADIwEzA0gB7gFFAUMBQQH/AVYBUQFPAf8BeAFuAWoB/wGpAZgBkQH/AdgBwAG2Af8B
|
||||||
|
5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHXAb8BtQH/AVgBUgFQAf8BYgFbAVcB/wHPAbcB
|
||||||
|
rAH/AdABtwGsAf8BpAGSAYoB/wE+AjwB/wFZAXgBhAH/AYoB1QHvAf8BjwHdAfkB/wGPAd0B+QH/AY8B
|
||||||
|
3QH5Af8BiwHVAfAB/wFZAXoBhgH/AT0CPAH/AaMBkQGKAf8BzQG0AakB/wFWAVEBTgH/AU4BSgFIAf8B
|
||||||
|
qAGdAZYB/wHtAd0B0wH/Ae0B3QHTAf8B7QHdAdMB/wHtAd0B0wH/Ae0B3AHSAf8B1wHDAboB/wGlAZUB
|
||||||
|
jgH/AXUBawFnAf8BVQFQAU4B/wFEAUIBQQH/AkcBRgHxAyUBNhAAAzMBUQGlAVsBLwH3AbUBWgEcAf8B
|
||||||
|
tgFaARwB/wG2AVoBHAH/AbYBWgEcAf8BtgFaARwB/wG2AVoBHAH/AbwBZQErAf8B/AH4AfYB/wHuAdgB
|
||||||
|
yAH/AekBzQG6Af8B/QH6AfgB/wG/AW0BNQH/AbcBWgEbAf8BtwFaARsB/wG3AVoBGwH/AbgBWgEbAf8B
|
||||||
|
ugFcARwB/wHQAYIBMwH8AfABowFCAf8B7wGjAUIB/wHvAaMBQgH/Ae8BowFCAf8B7wGjAUIB/wHvAaMB
|
||||||
|
QgH/AeMBlwE8Af8B6wGfAUAB/wHvAaMBQgH/AekBngE/Af8BpQFXARwB/wGPAUABEQH/AcQBeAEsAf8B
|
||||||
|
7gGkAUIB/wHuAaQBQgH/Ae4BpAFCAf8B7gGkAUIB/wHLAZMBSAH2AzMBUf8AfQADDAEQAzwBZgNUAbAD
|
||||||
|
UwHZA0kB6gI+AT0B+gFyAWkBZQH/AeQBygG/Af8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8BhQF5AXUB
|
||||||
|
/wE+ATwBOwH/Aa8BmwGSAf8B0AG3AawB/wHPAbYBqwH/AYUBeAFyAf8BPgE9ATwB/wFJAVwBYwH/AW8B
|
||||||
|
ogG1Af8BewG5Ac8B/wFvAaMBtQH/AUoBXQFkAf8BPgI8Af8BhAF3AXEB/wHMAbQBqQH/Ac4BtgGrAf8B
|
||||||
|
rQGaAZEB/wFnAWABXQH/AaABlgGRAf8B7QHdAdMB/wHtAd0B0wH/Ae0B3QHTAf8B6gHaAdAB/wFzAW0B
|
||||||
|
agH/ATcCNgH7A0wB6wNVAdoDVQG0Az0BaQMOARIUAAMzAVEBpQFaAS8B9wG1AVoBHAH/AbUBWgEcAf8B
|
||||||
|
tgFaARwB/wG2AVoBHAH/AbYBWgEcAf8BtgFaARwB/wG2AVoBHAH/AegByQG1Af8B/gL9Af8B/gH9AfwB
|
||||||
|
/wHuAdcByAH/AbgBXQEfAf8BtwFaARsB/wG3AVoBGwH/AbcBWgEbAf8BtwFaARsB/wG2AWYBIwH+AeIB
|
||||||
|
nwFAAf0B8AGjAUIB/wHwAaMBQgH/Ae8BowFCAf8BugFuASkB/wGmAVsBHwH/AacBWwEfAf8BpwFbAR8B
|
||||||
|
/wGnAVsBHwH/AaUBWAEdAf8BpwFZAR0B/wGgAVIBGQH/AY4BPwEQAf8BkAFBAREB/wGoAVsBHQH/Ac8B
|
||||||
|
hAEyAf8B7gGkAUIB/wHuAaQBQgH/AcsBkwFIAfYDMwFR/wCJAAMPARQDJQE3Az0BaQNMAekBrQGcAZQB
|
||||||
|
/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHTAbwBsgH/AUgBRQFEAf8BaAFgAVwB/wHOAbUBqgH/AdAB
|
||||||
|
twGsAf8BzwG2AasB/wGlAZMBiwH/AWsBYgFeAf8BRAFCAUAB/wI5ATgB/wFEAUEBQAH/AWsBYgFeAf8B
|
||||||
|
pAGSAYoB/wHNAbQBqgH/AY0BfwF4Af8BgAFzAW4B/wHOAbcBrQH/AegB1gHMAf8B7QHdAdMB/wHtAd0B
|
||||||
|
0wH/Ae0B3QHTAf8B7QHdAdMB/wG0AakBogH/A0wB6wM/AW0DJwE6AxEBFiAAAzMBUQGlAVoBLwH3AbUB
|
||||||
|
WQEcAf8BtQFZARwB/wG1AVoBHAH/AbUBWgEcAf8BtgFaARwB/wG2AVoBHAH/AbYBWgEcAf8B0AGUAWwB
|
||||||
|
/wH+Af0B/AL/Av4B/wHbAa0BjgH/AbcBWwEcAf8BtwFaARsB/wG3AVoBGwH/AbcBWgEbAf8BtwFaARsB
|
||||||
|
/wHAAX0BMwH6AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8BpgFbAR8B/wGLAUABEQH/AYsB
|
||||||
|
QAERAf8BiwFAAREB/wGMAUABEQH/AY0BQAERAf8BjwE/ARAB/wGNAT8BEAH/AY4BPwEQAf8BjgE/ARAB
|
||||||
|
/wGPAT8BEAH/AcQBeAEsAf8B7gGkAUIB/wHuAaQBQgH/AcsBkwFIAfYDMwFR/wCRAAMIAQoDVAGvAUkB
|
||||||
|
RgFEAf8B5QHLAcAB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wG7AacBnwH/ATkCOAH/AXQBagFlAf8B
|
||||||
|
zgG1AaoB/wHQAbcBrAH/AdABtwGsAf8B0AG3AawB/wHQAbcBrAH/AdABtwGsAf8B0AG3AawB/wHQAbcB
|
||||||
|
rAH/AdABtwGsAf8BzwG2AasB/wGFAXgBcwH/AzUB/wGSAYYBgQH/AewB2wHRAf8B7QHdAdMB/wHtAd0B
|
||||||
|
0wH/Ae0B3QHTAf8B6wHbAdEB/wFLAUkBSAH/A1UBswMJAQwoAAMzAVEBpQFaAS8B9wG1AVkBHAH/AbUB
|
||||||
|
WQEcAf8BtQFZARwB/wG1AVoBHAH/AbUBWgEcAf8BtgFaARwB/wG2AVoBHAH/AcIBdQFCAf8B9QHoAeAB
|
||||||
|
/wH6AfQB7wH/AcoBhwFaAf8BtgFaARwB/wG2AVoBGwH/AbcBWgEbAf8BtwFaARsB/wGxAV8BIAH+AdkB
|
||||||
|
mgFDAfsB8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B7wGjAUIB
|
||||||
|
/wHvAaMBQgH/Ae8BowFCAf8BjQFAAREB/wGmAVgBHAH/Ae8BowFCAf8B7wGjAUIB/wHvAaMBQgH/Ae8B
|
||||||
|
owFCAf8B7wGkAUIB/wHuAaQBQgH/Ae4BpAFCAf8BywGTAUgB9gMzAVH/AJEAAwMBBANOAZQDNgH/AdYB
|
||||||
|
vgG0Af8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5AHKAb8B/wGbAYwBhQH/AToCOQH/AWgBYAFcAf8B
|
||||||
|
rwGbAZIB/wHPAbYBrAH/AdABtwGsAf8B0AG3AawB/wHQAbcBrAH/AdABtwGsAf8B0AG3AawB/wHQAbcB
|
||||||
|
rAH/AdABtwGsAf8B0AG5Aa4B/wGZAYwBhgH/AbIBoAGYAf8B6AHQAcUB/wHsAdsB0QH/AfEB5QHhAf8B
|
||||||
|
7QHdAdQB/wHdAc4BxQH/AzcB/wNOAZcDAwEEKAADMwFRAaUBWgEvAfcBtQFZARwB/wG1AVkBHAH/AbUB
|
||||||
|
WQEcAf8BtQFZARwB/wG1AVoBHAH/AbUBWgEcAf8BtQFaARwB/wG3AV0BIQH/AcEBcwE+Af8BwwF2AUIB
|
||||||
|
/wG4AV8BIwH/AbYBWgEcAf8BtgFaARwB/wG2AVoBHAH/AbcBWgEbAf8BvQFqASgB+wHwAaMBQgH/AfAB
|
||||||
|
owFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB
|
||||||
|
/wHvAaMBQgH/AZsBTwEZAf8BsQFjASIB/wHvAaMBQgH/Ae8BowFCAf8B7wGjAUIB/wHvAaMBQgH/Ae8B
|
||||||
|
owFCAf8B7wGjAUIB/wHuAaQBQgH/AcsBkwFIAfYDMwFR/wCRAAMYASADUAHiAX8BdAFvAf8B5gHMAcEB
|
||||||
|
/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AeQBygG/Af8BvgGpAaEB/wFKAUcBRQH/AT4B
|
||||||
|
PAE7Af8BYgFaAVcB/wGmAZQBjAH/AdABtwGsAf8B0AG3AawB/wHFAa4BpAH/AZ4BjQGGAf8BkwGEAX0B
|
||||||
|
/wHZAcMBuAH/AegB1gHMAf8B7AHcAdEB/wHpAdEBxgH/AecBzQHCAf8B7AHYAdIB/wH3AfQB+QH/AfIB
|
||||||
|
6AHkAf8B7AHcAdIB/wGGAX4BegH/A1AB4wMYASEoAAMzAVEBpQFaAS8B9wG0AVkBHAH/AbUBWQEcAf8B
|
||||||
|
tQFZARwB/wG1AVkBHAH/AbUBWQEcAf8BtQFZARwB/wG1AVkBHAH/AbUBWgEcAf8BtgFaARwB/wG2AVoB
|
||||||
|
HAH/AbYBWgEcAf8BtgFaARwB/wG2AVoBHAH/AbYBWgEcAf8BsAFfASAB/gHPAX4BMQH8AfEBowFCAf8B
|
||||||
|
8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMB
|
||||||
|
QgH/AfABowFCAf8B6AGbAT4B/wHpAZ0BPwH/Ae8BowFCAf8B7wGjAUIB/wHvAaMBQgH/Ae8BowFCAf8B
|
||||||
|
7wGjAUIB/wHvAaMBQgH/Ae8BowFCAf8BzAGSAUgB9gMzAVH/AI0AAwMBBANRAaIBUQFMAUoB/wHhAcgB
|
||||||
|
vgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B
|
||||||
|
1QG+AbQB/wGLAX4BeAH/AVoBVQFSAf8BXwFaAVcB/wHbAcYBuwH/AdEBvAGyAf8BTwFMAUoB/wFGAUMB
|
||||||
|
QgH/AWIBWwFYAf8B7AHbAdEB/wHtAd0B0wH/Ae0B3QHTAf8B7AHbAdAB/wHpAdEBxgH/AecBzQHCAf8B
|
||||||
|
7AHaAdQB/wHsAdsB0QH/Ae0B3QHTAf8B6QHZAdAB/wFUAVIBUAH/A1EBpAMEAQUkAAMzAVEBpQFaATAB
|
||||||
|
9wG0AVkBHAH/AbQBWQEcAf8BtQFZARwB/wG1AVkBHAH/AbUBWQEcAf8BtQFZARwB/wG1AVkBHAH/AbUB
|
||||||
|
WQEcAf8BtQFaARwB/wG1AVoBHAH/AbYBWgEcAf8BtgFaARwB/wG2AVoBHAH/AbYBWgEcAf8BtgFnASUB
|
||||||
|
/gHcAZcBQAH9AfEBowFCAf8B8QGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AfAB
|
||||||
|
owFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/Ae8BowFCAf8B7wGjAUIB
|
||||||
|
/wHvAaMBQgH/Ae8BowFCAf8B7wGjAUIB/wHvAaMBQgH/Ae8BowFCAf8BzAGSAUgB9gMzAVH/AI0AAzUB
|
||||||
|
VgE6AjkB+wGhAZEBiwH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0B
|
||||||
|
wgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B2QHCAbcB/wHWAcIBuQH/Ae0B3QHTAf8B
|
||||||
|
6wHcAdIB/wHJAb0BtAH/AckBtgGtAf8B2gHCAbgB/wHoAdEBxgH/AewB2wHQAf8B7QHdAdMB/wHtAd0B
|
||||||
|
0wH/Ae0B2wHRAf8B6QHSAccB/wHnAc0BwgH/AegB0AHFAf8B7AHaAdAB/wHtAd0B0wH/AakBngGYAf8B
|
||||||
|
OwI6AfsDNgFYJAADMwFRAaUBWgEwAfcBtAFZAR0B/wG0AVkBHQH/AbQBWQEcAf8BtAFZARwB/wG0AVkB
|
||||||
|
HAH/AbUBWQEcAf8BtQFZARwB/wG1AVkBHAH/AbUBWQEcAf8BtQFZARwB/wG1AVoBHAH/AbUBWgEcAf8B
|
||||||
|
tgFaARwB/wG2AVoBHAH/Ab8BcAErAfwB8AGiAUEB/wHxAaMBQgH/AfEBowFCAf8B8QGjAUIB/wHxAaMB
|
||||||
|
QgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B
|
||||||
|
8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B7wGjAUIB/wHvAaMBQgH/Ae8BowFCAf8B7wGjAUIB/wHvAaMB
|
||||||
|
QgH/AcwBkgFIAfYDMwFR/wCJAAMRARYDVgHOAVoBVQFSAf8B3QHFAboB/wHnAc0BwgH/AecBzQHCAf8B
|
||||||
|
5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0B
|
||||||
|
wgH/AecBzQHCAf8B5wHNAcIB/wHqAdQBygH/Ae0B3gHUAf8B7QHdAdMB/wHsAdsB0QH/AegB0AHFAf8B
|
||||||
|
5wHNAcIB/wHpAdEBxgH/Ae0B3AHSAf8B7QHdAdMB/wHtAd0B0wH/AewB2wHRAf8B6QHRAcYB/wHnAc0B
|
||||||
|
wgH/AegB0QHGAf8B7QHcAdIB/wHlAdYBzAH/AWABXAFZAf8DVgHQAxIBFyAAAzMBUQGlAVoBMAH3AbQB
|
||||||
|
WQEdAf8BtAFZAR0B/wG0AVkBHQH/AbQBWQEcAf8BtAFZARwB/wG0AVkBHAH/AbUBWQEcAf8BtQFZARwB
|
||||||
|
/wG1AVkBHAH/AbUBWQEcAf8BtQFZARwB/wG1AVoBHAH/AbUBWgEcAf8BtgFaARwB/wHSAYcBNwH7AfEB
|
||||||
|
owFCAf8B8QGjAUIB/wHxAaMBQgH/AfEBowFCAf8B8QGjAUIB/wHxAaMBQgH/AfEBowFCAf8B8AGjAUIB
|
||||||
|
/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AfAB
|
||||||
|
owFCAf8B8AGjAUIB/wHvAaMBQgH/Ae8BowFCAf8B7wGjAUIB/wHMAZIBSAH2AzMBUf8AiQADKAE8A0gB
|
||||||
|
7QGuAZwBlQH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AeYB
|
||||||
|
zAHBAf8B1QG9AbMB/wHkAcoBwAH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B5wHOAcMB
|
||||||
|
/wHxAeYB5AH/AfAB5AHeAf8B7QHdAdMB/wHsAdsB0AH/AekB0QHGAf8B5wHNAcIB/wHnAc8BxAH/AdsB
|
||||||
|
ywHCAf8B7AHcAdIB/wHtAd0B0wH/AewB2wHQAf8B6QHRAcYB/wHnAc0BwgH/AegB0AHFAf8B7AHaAdAB
|
||||||
|
/wG6Aa4BpgH/A0UB7wMpAT4gAAMzAVEBpAFaATAB9wG0AVkBHQH/AbQBWQEdAf8BtAFZAR0B/wG0AVkB
|
||||||
|
HQH/AbQBWQEdAf8BtAFZARwB/wG0AVkBHAH/AbQBWQEcAf8BtQFZARwB/wG1AVkBHAH/AbUBWQEcAf8B
|
||||||
|
tQFZARwB/wG1AVkBHAH/AbQBYgEoAfwB6AGZAUUB/gHxAaMBQgH/AfEBowFCAf8B8QGjAUIB/wHxAaMB
|
||||||
|
QgH/AfEBowFCAf8B8QGjAUIB/wHxAaMBQgH/AfEBowFCAf8B8QGjAUIB/wHwAaMBQgH/AfABowFCAf8B
|
||||||
|
8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHvAaMB
|
||||||
|
QgH/Ae8BowFCAf8BzAGSAUgB9gMzAVH/AIkAAyABLgNQAeIBaQFiAV4B/wHhAcgBvQH/AecBzQHCAf8B
|
||||||
|
5wHNAcIB/wHnAc0BwgH/AecBzQHCAf8B4QHIAb0B/wF+AXMBbgH/AzYB/wFHAUQBQwH/AasBmgGTAf8B
|
||||||
|
4wHKAb8B/wHnAc0BwgH/AecBzQHCAf8B7gHeAdkB/wH3AfYB/AH/AfcB9gH7Af8B8AHjAd0B/wHtAd0B
|
||||||
|
0wH/AeoB2QHPAf8BsQGhAZoB/wFLAUgBRgH/ATcCNgH/AX4BdwFzAf8B5gHXAc0B/wHtAd0B0wH/Ae0B
|
||||||
|
3AHSAf8B6QHRAcYB/wHnAc0BwgH/AeMBywHBAf8BbQFnAWMB/wNPAeQDIQEwIAADMwFRAZ0BXQEuAfYB
|
||||||
|
swFZAR0B/wGzAVkBHQH/AbQBWQEdAf8BtAFZAR0B/wG0AVkBHQH/AbQBWQEdAf8BtAFZAR0B/wG0AVkB
|
||||||
|
HAH/AbQBWQEcAf8BtQFZARwB/wG1AVkBHAH/AbUBWQEcAf8BtQFZARwB/wHHAXcBLwH7AfIBowFCAf8B
|
||||||
|
8gGjAUIB/wHxAaMBQgH/AfEBowFCAf8B8QGjAUIB/wHxAaMBQgH/AfEBowFCAf8B8QGjAUIB/wHxAaMB
|
||||||
|
QgH/AfEBowFCAf8B8QGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B
|
||||||
|
8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHvAaMBQgH/AcwBkgFIAfYDMwFR/wCJAAMCAQMD
|
||||||
|
OwFkA0gB7wF7AXEBbQH/AeEByAG9Af8B5wHNAcIB/wHeAcUBuwH/AaIBkgGLAf8BUQFMAUsB/wNSAeAD
|
||||||
|
TQGTA1QBsANMAekBbwFmAWIB/wHnAc0BwgH/AeoB1gHPAf8B8wHsAe4B/wH4AfcB/gH/AfcB9gH9Af8B
|
||||||
|
8gHpAegB/wHuAd4B1gH/AXwBdQFxAf8DSgHqA1QBsANNAZIDUAHfAVABTQFMAf8BowGZAZMB/wHhAdIB
|
||||||
|
yQH/AewB2wHQAf8B4wHMAcEB/wF9AXIBbQH/A0cB8QM9AWgDAwEEIAADHQEoAXsBXgFLAd0BswFZAR0B
|
||||||
|
/wGzAVkBHQH/AbMBWQEdAf8BtAFZAR0B/wG0AVkBHQH/AbQBWQEdAf8BtAFZAR0B/wG0AVkBHQH/AbQB
|
||||||
|
WQEcAf8BtAFZARwB/wG0AVkBHAH/AbUBWQEcAf8BsgFiASIB/gHcAZUBQAH9AfIBowFCAf8B8gGjAUIB
|
||||||
|
/wHyAaMBQgH/AfEBowFCAf8B8QGjAUIB/wHxAaMBQgH/AfEBowFCAf8B8QGjAUIB/wHxAaMBQgH/AfEB
|
||||||
|
owFCAf8B8QGjAUIB/wHxAaMBQgH/AfEBowFCAf8B8AGjAUIB/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB
|
||||||
|
/wHwAaMBQgH/AfABowFCAf8B8AGjAUIB/wHwAaMBQgH/AY8BdQFXAd0DHQEo/wCNAAQCAzIBTwNIAe8B
|
||||||
|
aQFiAV4B/wGxAZ4BlgH/AVsBVQFTAf8BQQJAAfoDTwGeAxgBIAMDAQQDCQELAz8BbAM2AfsB1AG9AbMB
|
||||||
|
/wHnAc0BwgH/AegB0AHHAf8B8wHrAe0B/wHvAeEB3wH/AegBzwHFAf8B4AHMAcIB/wM1AfwDPwFuAwkB
|
||||||
|
CwMDAQQDFgEeA1ABmgNBAfkBWQFWAVQB/wGwAaUBngH/AWwBZwFjAf8DRgHwAzMBUgMCAQMkAAQBAxoB
|
||||||
|
JAM9AWgCQQFAAXECQQFAAXECQQFAAXECQQFAAXECQQFAAXECQQFAAXECQQFAAXECQQFAAXECQQFAAXEC
|
||||||
|
QQFAAXECQQFAAXECQQFAAXACQQFAAXEDQQFxA0EBcQNBAXEDQQFxA0EBcQNBAXEDQQFxA0EBcQNBAXED
|
||||||
|
QQFxA0EBcQNBAXEDQQFxA0EBcQNBAXEDQQFxA0EBcQNBAXEDQQFxA0EBcQM9AWgDGgEkBAH/AJEABAID
|
||||||
|
OwFkA1AB4gNIAe0DVAHNAzQBVAMDAQQMAAMnAToDTAHrAaUBlAGOAf8B5wHNAcIB/wHnAc0BwgH/AeoB
|
||||||
|
1gHOAf8B6AHOAcQB/wHnAc0BwgH/AbEBnwGXAf8DSgHsAykBPQwAAwIBAwMzAVEDVgHLA0gB7QNQAeMD
|
||||||
|
PQFnAwIBA/8A/wBaAAMCAQMDIAEtAygBOwMQARUUAAMSARcDVQHaAXQBawFnAf8B5wHNAcIB/wHnAc0B
|
||||||
|
wgH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AYABdQFwAf8DVQHbAxMBGRQAAw8BFAMoATsDIAEuAwIB
|
||||||
|
A/8A/wCGAANVAbMBVQFQAU4B/wHcAcMBuQH/AecBzQHCAf8B5wHNAcIB/wHnAc0BwgH/AeEByAG9Af8B
|
||||||
|
WgFUAVIB/wNWAbr/AP8ArgADPQFpAUQBQgFBAf8BwAGrAaMB/wHlAcwBwQH/AeUBzAHBAf8B5QHMAcEB
|
||||||
|
/wHFAbABpwH/AUgBRQFDAf8DQAFx/wD/AK4AAw0BEQJEAUMB8AE6AjkB/wE9AjsB/wE9AjsB/wE9AjsB
|
||||||
|
/wE6AjkB/wNCAfMDEQEW/wD/ALIAAyQBNANNAZIDUQGiA1EBogNRAaIDTQGTAyUBN/8A/wD/AP8A/wA9
|
||||||
|
AAFCAU0BPgcAAT4DAAEoAwABtAMAAS0DAAEBAQABAQUAATgBBBYAA/8BAAf/AccD/wHADAAC/wHgAT8D
|
||||||
|
/wGHA/8BwAwAAv8BwAEfA/8BgwP/AcAMAAL/AcABHwP/AYAD/wHADAAC/wHAAQ8D/wGAA/8BwAwAAf8B
|
||||||
|
DwGAAQ8BhwL/AYABPwL/AcAMAAH+AQMBgAEOAQMC/wGAAT8C/wHADAAB/AMAAQEC/wGAAR8C/wHADAAB
|
||||||
|
+AQAAv8BgAEPAv8BwAwAAfgEAAH/AYADAAEDAcAMAAH4BAAB/wQAAQEBwAwAAfgEAAH/BAABAQHADAAB
|
||||||
|
/AMAAQEB/wQAAQEBwAwAAfwDAAEBAf8EAAEBAcAMAAH+AwABAwH/BAABAQHADAAB/gMAAQMB/wQAAQEB
|
||||||
|
wAwAAf4DAAEDAf8EAAEBAcAMAAH4BAAB/wQAAQEBwAwAAcAEAAEfBAABAQHADAABgAQAAQ8EAAEBAcAM
|
||||||
|
AAGABAABDwQAAQEBwAwAAYAEAAEPBAABAQHADAABgAQAAQ8EAAEBAcAMAAGABAABDwQAAQEBwAwAAYAE
|
||||||
|
AAEPBAABAQHADAABgAQAAQ8EAAEBAcAMAAHABAABHwQAAQEBwAwAAfgEAAH/BAABAQHADAAB/gMAAQMB
|
||||||
|
/wQAAQEBwAwAAf4DAAEDAf8EAAEBAcAMAAH+AwABAwH/BAABAQHADAAB/AMAAQEB/wQAAQEBwAwAAfwD
|
||||||
|
AAEBAf8EAAEBAcAMAAH4BAAB/wQAAQEBwAwAAfgEAAH/BAABAQHADAAB+AQAAf8EAAEBAcAMAAH4BAAB
|
||||||
|
/wQAAQEBwAwAAfwDAAEBAf8EAAEBAcAMAAH+AQMBgAEOAQMG/wHADAAB/wEPAYABDwGHBv8BwAwAAv8B
|
||||||
|
wAEfB/8BwAwAAv8BwAEfB/8BwAwAAv8BwAEfB/8BwAwAAv8B4AE/B/8BwAwAC/8BwAwACw==
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
108
I18N Commander/UI WinForms/Components/Setting.Designer.cs
generated
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
namespace UI_WinForms.Components
|
||||||
|
{
|
||||||
|
sealed partial class Setting
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Component Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.tableLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.labelExplanation = new System.Windows.Forms.Label();
|
||||||
|
this.labelSettingName = new System.Windows.Forms.Label();
|
||||||
|
this.labelIcon = new System.Windows.Forms.Label();
|
||||||
|
this.tableLayout.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// tableLayout
|
||||||
|
//
|
||||||
|
this.tableLayout.ColumnCount = 4;
|
||||||
|
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 66F));
|
||||||
|
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 250F));
|
||||||
|
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 300F));
|
||||||
|
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
|
this.tableLayout.Controls.Add(this.labelExplanation, 3, 0);
|
||||||
|
this.tableLayout.Controls.Add(this.labelSettingName, 1, 0);
|
||||||
|
this.tableLayout.Controls.Add(this.labelIcon, 0, 0);
|
||||||
|
this.tableLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.tableLayout.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.tableLayout.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.tableLayout.Name = "tableLayout";
|
||||||
|
this.tableLayout.RowCount = 1;
|
||||||
|
this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
|
this.tableLayout.Size = new System.Drawing.Size(1000, 72);
|
||||||
|
this.tableLayout.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// labelExplanation
|
||||||
|
//
|
||||||
|
this.labelExplanation.AutoSize = true;
|
||||||
|
this.labelExplanation.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.labelExplanation.Location = new System.Drawing.Point(619, 0);
|
||||||
|
this.labelExplanation.Name = "labelExplanation";
|
||||||
|
this.labelExplanation.Size = new System.Drawing.Size(378, 72);
|
||||||
|
this.labelExplanation.TabIndex = 1;
|
||||||
|
this.labelExplanation.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||||
|
//
|
||||||
|
// labelSettingName
|
||||||
|
//
|
||||||
|
this.labelSettingName.AutoSize = true;
|
||||||
|
this.labelSettingName.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.labelSettingName.Location = new System.Drawing.Point(69, 0);
|
||||||
|
this.labelSettingName.Name = "labelSettingName";
|
||||||
|
this.labelSettingName.Size = new System.Drawing.Size(244, 72);
|
||||||
|
this.labelSettingName.TabIndex = 2;
|
||||||
|
this.labelSettingName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||||
|
//
|
||||||
|
// labelIcon
|
||||||
|
//
|
||||||
|
this.labelIcon.AutoSize = true;
|
||||||
|
this.labelIcon.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.labelIcon.Location = new System.Drawing.Point(3, 0);
|
||||||
|
this.labelIcon.Name = "labelIcon";
|
||||||
|
this.labelIcon.Size = new System.Drawing.Size(60, 72);
|
||||||
|
this.labelIcon.TabIndex = 3;
|
||||||
|
//
|
||||||
|
// Setting
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
|
this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
|
this.Controls.Add(this.tableLayout);
|
||||||
|
this.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||||
|
this.Name = "Setting";
|
||||||
|
this.Size = new System.Drawing.Size(1000, 72);
|
||||||
|
this.tableLayout.ResumeLayout(false);
|
||||||
|
this.tableLayout.PerformLayout();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private TableLayoutPanel tableLayout;
|
||||||
|
private Label labelExplanation;
|
||||||
|
private Label labelSettingName;
|
||||||
|
private Label labelIcon;
|
||||||
|
}
|
||||||
|
}
|
272
I18N Commander/UI WinForms/Components/Setting.cs
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
using DataModel.Database;
|
||||||
|
using Processor;
|
||||||
|
using UI_WinForms.Resources;
|
||||||
|
|
||||||
|
namespace UI_WinForms.Components;
|
||||||
|
|
||||||
|
public sealed partial class Setting : UserControl
|
||||||
|
{
|
||||||
|
public Setting()
|
||||||
|
{
|
||||||
|
this.InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Setting(SettingUIData settingMetaData)
|
||||||
|
{
|
||||||
|
this.InitializeComponent();
|
||||||
|
this.Dock = DockStyle.Top;
|
||||||
|
this.labelIcon.Image = settingMetaData.Icon;
|
||||||
|
this.labelSettingName.Text = settingMetaData.SettingName();
|
||||||
|
this.labelExplanation.Text = settingMetaData.SettingExplanation();
|
||||||
|
|
||||||
|
var dataControl = settingMetaData.SetupDataControl();
|
||||||
|
this.tableLayout.Controls.Add(dataControl, 2, 0);
|
||||||
|
|
||||||
|
// Ensure, that this data control is vertical centered by calculating the needed margin, considering the outer size of the table layout:
|
||||||
|
var margin = (this.tableLayout.GetRowHeights().First() - dataControl.Height) / 2f;
|
||||||
|
dataControl.Margin = new Padding(0, (int) margin, 0, (int)margin);
|
||||||
|
|
||||||
|
// Calculate the needed height of the explanation label & centering of the data control when the parent window is resized:
|
||||||
|
this.tableLayout.Resize += (sender, args) =>
|
||||||
|
{
|
||||||
|
// Adjust the height of the parent controls (table & user control):
|
||||||
|
this.tableLayout.Height = Math.Max((int)this.labelExplanation.CreateGraphics().MeasureString(this.labelExplanation.Text, this.labelExplanation.Font, new SizeF(this.labelExplanation.Width, 1000)).Height, 66);
|
||||||
|
this.Height = this.tableLayout.Height + this.tableLayout.Margin.Vertical;
|
||||||
|
|
||||||
|
// Ensure, that this data control is vertical centered by calculating the needed margin, considering the outer size of the table layout:
|
||||||
|
var margin = (this.tableLayout.GetRowHeights().First() - dataControl.Height) / 2f;
|
||||||
|
dataControl.Margin = new Padding(0, (int) margin, 0, (int)margin);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private readonly record struct SettingUIData(
|
||||||
|
Bitmap Icon,
|
||||||
|
Func<string> SettingName,
|
||||||
|
Func<string> SettingExplanation,
|
||||||
|
Func<Control> SetupDataControl
|
||||||
|
);
|
||||||
|
|
||||||
|
private static async Task<Setting> ShowDeepLModeSettingAsync()
|
||||||
|
{
|
||||||
|
var currentSetting = await AppSettings.GetDeepLMode();
|
||||||
|
var settingData = new SettingUIData(
|
||||||
|
Icon: Icons.deepl_logo_icon_170284,
|
||||||
|
SettingName: () => "DeepL Service",
|
||||||
|
SettingExplanation: () => "DeepL is a translation service that offers a wide range of translation services. This setting allows you to choose between the free and pro version of DeepL.",
|
||||||
|
SetupDataControl: () =>
|
||||||
|
{
|
||||||
|
var dropdown = new ComboBox();
|
||||||
|
dropdown.Items.Add("Disabled");
|
||||||
|
dropdown.Items.Add("Free version");
|
||||||
|
dropdown.Items.Add("Pro version");
|
||||||
|
dropdown.SelectedIndex = currentSetting switch
|
||||||
|
{
|
||||||
|
SettingDeepLMode.DISABLED => 0,
|
||||||
|
SettingDeepLMode.USE_FREE_ACCOUNT => 1,
|
||||||
|
SettingDeepLMode.USE_PRO_ACCOUNT => 2,
|
||||||
|
|
||||||
|
_ => 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Setup the change event handler:
|
||||||
|
dropdown.SelectedValueChanged += async (sender, args) => await AppSettings.SetDeepLMode(dropdown.SelectedIndex switch
|
||||||
|
{
|
||||||
|
0 => SettingDeepLMode.DISABLED,
|
||||||
|
1 => SettingDeepLMode.USE_FREE_ACCOUNT,
|
||||||
|
2 => SettingDeepLMode.USE_PRO_ACCOUNT,
|
||||||
|
|
||||||
|
_ => SettingDeepLMode.DISABLED,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Apply the desired layout:
|
||||||
|
dropdown.Dock = DockStyle.Fill;
|
||||||
|
dropdown.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||||
|
|
||||||
|
return dropdown;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return new Setting(settingData);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task<Setting> ShowDeepLAPIKeySettingAsync()
|
||||||
|
{
|
||||||
|
var currentSetting = await AppSettings.GetDeepLAPIKey();
|
||||||
|
var settingData = new SettingUIData(
|
||||||
|
Icon: Icons.icons8_key_512,
|
||||||
|
SettingName: () => "DeepL API Key",
|
||||||
|
SettingExplanation: () => "The API key is required to use the DeepL translation service. You can find your API key on the DeepL website.",
|
||||||
|
SetupDataControl: () =>
|
||||||
|
{
|
||||||
|
var textbox = new TextBox();
|
||||||
|
textbox.Text = currentSetting;
|
||||||
|
textbox.TextChanged += async (sender, args) => await AppSettings.SetDeepLAPIKey(textbox.Text);
|
||||||
|
textbox.Dock = DockStyle.Fill;
|
||||||
|
return textbox;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return new Setting(settingData);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task<Setting> ShowDeepLActionSettingAsync()
|
||||||
|
{
|
||||||
|
var currentSetting = await AppSettings.GetDeepLAction();
|
||||||
|
var settingData = new SettingUIData(
|
||||||
|
Icon: Icons.icons8_play_512__2_,
|
||||||
|
SettingName: () => "DeepL Operation",
|
||||||
|
SettingExplanation: () => "Should the missing translations be automatically completed by DeepL? This can lead to higher costs. By default, DeepL is only applied manually.",
|
||||||
|
SetupDataControl: () =>
|
||||||
|
{
|
||||||
|
// We set up a combo box with the available actions:
|
||||||
|
var dropdown = new ComboBox();
|
||||||
|
dropdown.Items.Add("Manual");
|
||||||
|
dropdown.Items.Add("Automatic");
|
||||||
|
dropdown.SelectedIndex = currentSetting switch
|
||||||
|
{
|
||||||
|
SettingDeepLAction.MANUAL => 0,
|
||||||
|
SettingDeepLAction.AUTOMATIC_ALL => 1,
|
||||||
|
|
||||||
|
_ => 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Setup the change event handler:
|
||||||
|
dropdown.SelectedValueChanged += async (sender, args) => await AppSettings.SetDeepLAction(dropdown.SelectedIndex switch
|
||||||
|
{
|
||||||
|
0 => SettingDeepLAction.MANUAL,
|
||||||
|
1 => SettingDeepLAction.AUTOMATIC_ALL,
|
||||||
|
|
||||||
|
_ => SettingDeepLAction.MANUAL,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Apply the desired layout:
|
||||||
|
dropdown.Dock = DockStyle.Fill;
|
||||||
|
dropdown.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||||
|
|
||||||
|
return dropdown;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return new Setting(settingData);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal readonly record struct ComboBoxItem(string DisplayText, int CultureIndex)
|
||||||
|
{
|
||||||
|
public override string ToString() => this.DisplayText;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task<Setting> ShowDeepLSourceCultureSettingAsync()
|
||||||
|
{
|
||||||
|
var currentSourceCultureIndex = await AppSettings.GetDeepLSourceCultureIndex();
|
||||||
|
|
||||||
|
// We load the corresponding culture for that index. As dropdown items, we show
|
||||||
|
// all other available cultures:
|
||||||
|
var allCultures = await AppSettings.GetCultureInfos();
|
||||||
|
var sourceCulture = allCultures.FirstOrDefault(n => n.Index == currentSourceCultureIndex);
|
||||||
|
|
||||||
|
// Attention: We have to store the culture's index, because the index is not
|
||||||
|
// continuous and can change when the user adds or removes a culture!
|
||||||
|
var settingData = new SettingUIData(
|
||||||
|
Icon: Icons.icons8_chat_bubble_512,
|
||||||
|
SettingName: () => "DeepL Source Culture",
|
||||||
|
SettingExplanation: () => "The source culture is used to translate the missing translations.",
|
||||||
|
SetupDataControl: () =>
|
||||||
|
{
|
||||||
|
var dropdown = new ComboBox();
|
||||||
|
var currentCultureDropdownIndex = 0;
|
||||||
|
for (var n = 0; n < allCultures.Count; n++)
|
||||||
|
{
|
||||||
|
var cultureInfo = allCultures[n];
|
||||||
|
if(cultureInfo.Index == currentSourceCultureIndex)
|
||||||
|
currentCultureDropdownIndex = n;
|
||||||
|
|
||||||
|
dropdown.Items.Add(new ComboBoxItem($"{cultureInfo.Index}.: {cultureInfo.Code}", cultureInfo.Index));
|
||||||
|
}
|
||||||
|
|
||||||
|
dropdown.SelectedIndex = currentCultureDropdownIndex;
|
||||||
|
|
||||||
|
// Setup the change event handler:
|
||||||
|
dropdown.SelectedValueChanged += async (sender, args) =>
|
||||||
|
{
|
||||||
|
if(dropdown.SelectedItem is ComboBoxItem selectedItem)
|
||||||
|
await AppSettings.SetDeepLSourceCultureIndex(selectedItem.CultureIndex);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Apply the desired layout:
|
||||||
|
dropdown.Dock = DockStyle.Fill;
|
||||||
|
dropdown.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||||
|
|
||||||
|
return dropdown;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return new Setting(settingData);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEnumerable<Task<Setting>> ShowCultureSettingsAsync()
|
||||||
|
{
|
||||||
|
var isFirstCulture = true; // We need this flag to distinguish the first task from the others.
|
||||||
|
var cultureIndices = new List<int>(new []{ -1 });
|
||||||
|
while (cultureIndices.Count > 0)
|
||||||
|
{
|
||||||
|
var innerLoopIndex = cultureIndices.Last(); // needed to avoid closure issues.
|
||||||
|
yield return Task.Run(async () =>
|
||||||
|
{
|
||||||
|
var localCultureIndex = innerLoopIndex;
|
||||||
|
|
||||||
|
// Get a list of culture indices. Thus, we know the number of cultures. We cannot do this in the outer loop,
|
||||||
|
// because we cannot await there. The AppSettings is caching the answer, though. The list of indices is ordered
|
||||||
|
// ascending.
|
||||||
|
var localCultureIndices = await AppSettings.GetCultureIndices();
|
||||||
|
|
||||||
|
// Update the number of cultures in the outer loop for the first call:
|
||||||
|
if(isFirstCulture)
|
||||||
|
{
|
||||||
|
localCultureIndex = localCultureIndices.Last();
|
||||||
|
innerLoopIndex = localCultureIndices.Last();
|
||||||
|
|
||||||
|
cultureIndices.Clear();
|
||||||
|
cultureIndices.AddRange(localCultureIndices);
|
||||||
|
isFirstCulture = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the current culture code:
|
||||||
|
var currentCultureCode = await AppSettings.GetCultureCode(localCultureIndex);
|
||||||
|
|
||||||
|
// Construct the setting:
|
||||||
|
return new Setting(new()
|
||||||
|
{
|
||||||
|
Icon = Icons.icons8_chat_bubble_512,
|
||||||
|
SettingName = () => $"{localCultureIndex}. Culture",
|
||||||
|
SettingExplanation = () => "The culture according to RFC 4646: First comes the ISO 639-1 language code in lower case, followed by a hyphen, followed by the ISO 3166-1 alpha-2 country code in upper case. Example: en-US for English in the USA, de-DE for German in Germany.",
|
||||||
|
SetupDataControl = () =>
|
||||||
|
{
|
||||||
|
var textbox = new TextBox();
|
||||||
|
textbox.Text = currentCultureCode;
|
||||||
|
textbox.TextChanged += async (sender, args) =>
|
||||||
|
{
|
||||||
|
await AppSettings.SetCultureCode(localCultureIndex, textbox.Text);
|
||||||
|
};
|
||||||
|
textbox.Dock = DockStyle.Fill;
|
||||||
|
return textbox;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
cultureIndices.Remove(innerLoopIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerable<Task<Setting>> GetAllSettings()
|
||||||
|
{
|
||||||
|
yield return ShowDeepLSourceCultureSettingAsync();
|
||||||
|
foreach (var setting in ShowCultureSettingsAsync())
|
||||||
|
{
|
||||||
|
yield return setting;
|
||||||
|
}
|
||||||
|
|
||||||
|
yield return ShowDeepLActionSettingAsync();
|
||||||
|
yield return ShowDeepLAPIKeySettingAsync();
|
||||||
|
yield return ShowDeepLModeSettingAsync();
|
||||||
|
}
|
||||||
|
}
|
60
I18N Commander/UI WinForms/Components/Setting.resx
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
179
I18N Commander/UI WinForms/Components/Settings.Designer.cs
generated
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
namespace UI_WinForms.Components
|
||||||
|
{
|
||||||
|
partial class Settings
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Component Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.components = new System.ComponentModel.Container();
|
||||||
|
this.tableLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.labelHeadIcon = new System.Windows.Forms.Label();
|
||||||
|
this.labelHead = new System.Windows.Forms.Label();
|
||||||
|
this.panelSettings = new System.Windows.Forms.Panel();
|
||||||
|
this.flowLayoutToolbar = new System.Windows.Forms.FlowLayoutPanel();
|
||||||
|
this.buttonAddCulture = new System.Windows.Forms.Button();
|
||||||
|
this.buttonDeleteCulture = new System.Windows.Forms.Button();
|
||||||
|
this.contextMenuDelete = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||||
|
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||||
|
this.tableLayout.SuspendLayout();
|
||||||
|
this.flowLayoutToolbar.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// tableLayout
|
||||||
|
//
|
||||||
|
this.tableLayout.ColumnCount = 2;
|
||||||
|
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 70F));
|
||||||
|
this.tableLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
|
this.tableLayout.Controls.Add(this.labelHeadIcon, 0, 0);
|
||||||
|
this.tableLayout.Controls.Add(this.labelHead, 1, 0);
|
||||||
|
this.tableLayout.Controls.Add(this.panelSettings, 0, 1);
|
||||||
|
this.tableLayout.Controls.Add(this.flowLayoutToolbar, 0, 2);
|
||||||
|
this.tableLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.tableLayout.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.tableLayout.Name = "tableLayout";
|
||||||
|
this.tableLayout.RowCount = 3;
|
||||||
|
this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 66F));
|
||||||
|
this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
|
this.tableLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 66F));
|
||||||
|
this.tableLayout.Size = new System.Drawing.Size(1001, 381);
|
||||||
|
this.tableLayout.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// labelHeadIcon
|
||||||
|
//
|
||||||
|
this.labelHeadIcon.AutoSize = true;
|
||||||
|
this.labelHeadIcon.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.labelHeadIcon.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||||
|
this.labelHeadIcon.Image = global::UI_WinForms.Resources.Icons.icons8_settings_svg;
|
||||||
|
this.labelHeadIcon.Location = new System.Drawing.Point(3, 0);
|
||||||
|
this.labelHeadIcon.Name = "labelHeadIcon";
|
||||||
|
this.labelHeadIcon.Size = new System.Drawing.Size(64, 66);
|
||||||
|
this.labelHeadIcon.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// labelHead
|
||||||
|
//
|
||||||
|
this.labelHead.AutoSize = true;
|
||||||
|
this.labelHead.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.labelHead.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
|
||||||
|
this.labelHead.Location = new System.Drawing.Point(73, 0);
|
||||||
|
this.labelHead.Name = "labelHead";
|
||||||
|
this.labelHead.Size = new System.Drawing.Size(925, 66);
|
||||||
|
this.labelHead.TabIndex = 1;
|
||||||
|
this.labelHead.Text = "Settings";
|
||||||
|
this.labelHead.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||||
|
//
|
||||||
|
// panelSettings
|
||||||
|
//
|
||||||
|
this.panelSettings.AutoScroll = true;
|
||||||
|
this.tableLayout.SetColumnSpan(this.panelSettings, 21);
|
||||||
|
this.panelSettings.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.panelSettings.Location = new System.Drawing.Point(0, 66);
|
||||||
|
this.panelSettings.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.panelSettings.Name = "panelSettings";
|
||||||
|
this.panelSettings.Size = new System.Drawing.Size(1001, 249);
|
||||||
|
this.panelSettings.TabIndex = 2;
|
||||||
|
//
|
||||||
|
// flowLayoutToolbar
|
||||||
|
//
|
||||||
|
this.tableLayout.SetColumnSpan(this.flowLayoutToolbar, 2);
|
||||||
|
this.flowLayoutToolbar.Controls.Add(this.buttonAddCulture);
|
||||||
|
this.flowLayoutToolbar.Controls.Add(this.buttonDeleteCulture);
|
||||||
|
this.flowLayoutToolbar.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.flowLayoutToolbar.Location = new System.Drawing.Point(0, 315);
|
||||||
|
this.flowLayoutToolbar.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.flowLayoutToolbar.Name = "flowLayoutToolbar";
|
||||||
|
this.flowLayoutToolbar.Size = new System.Drawing.Size(1001, 66);
|
||||||
|
this.flowLayoutToolbar.TabIndex = 3;
|
||||||
|
//
|
||||||
|
// buttonAddCulture
|
||||||
|
//
|
||||||
|
this.buttonAddCulture.FlatAppearance.BorderSize = 0;
|
||||||
|
this.buttonAddCulture.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.buttonAddCulture.Image = global::UI_WinForms.Resources.Icons.icons8_collectibles_512;
|
||||||
|
this.buttonAddCulture.Location = new System.Drawing.Point(3, 3);
|
||||||
|
this.buttonAddCulture.Name = "buttonAddCulture";
|
||||||
|
this.buttonAddCulture.Size = new System.Drawing.Size(60, 60);
|
||||||
|
this.buttonAddCulture.TabIndex = 0;
|
||||||
|
this.toolTip.SetToolTip(this.buttonAddCulture, "Add another culture");
|
||||||
|
this.buttonAddCulture.UseVisualStyleBackColor = true;
|
||||||
|
this.buttonAddCulture.Click += new System.EventHandler(this.buttonAddCulture_Click);
|
||||||
|
//
|
||||||
|
// buttonDeleteCulture
|
||||||
|
//
|
||||||
|
this.buttonDeleteCulture.ContextMenuStrip = this.contextMenuDelete;
|
||||||
|
this.buttonDeleteCulture.FlatAppearance.BorderSize = 0;
|
||||||
|
this.buttonDeleteCulture.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.buttonDeleteCulture.Image = global::UI_WinForms.Resources.Icons.icons8_trash_can_512;
|
||||||
|
this.buttonDeleteCulture.Location = new System.Drawing.Point(69, 3);
|
||||||
|
this.buttonDeleteCulture.Name = "buttonDeleteCulture";
|
||||||
|
this.buttonDeleteCulture.Size = new System.Drawing.Size(60, 60);
|
||||||
|
this.buttonDeleteCulture.TabIndex = 0;
|
||||||
|
this.toolTip.SetToolTip(this.buttonDeleteCulture, "Delete a culture");
|
||||||
|
this.buttonDeleteCulture.UseVisualStyleBackColor = true;
|
||||||
|
this.buttonDeleteCulture.Click += new System.EventHandler(this.buttonDeleteCulture_Click);
|
||||||
|
//
|
||||||
|
// contextMenuDelete
|
||||||
|
//
|
||||||
|
this.contextMenuDelete.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||||
|
this.contextMenuDelete.ImageScalingSize = new System.Drawing.Size(20, 20);
|
||||||
|
this.contextMenuDelete.Name = "contextMenuDelete";
|
||||||
|
this.contextMenuDelete.Size = new System.Drawing.Size(211, 32);
|
||||||
|
//
|
||||||
|
// toolTip
|
||||||
|
//
|
||||||
|
this.toolTip.AutoPopDelay = 30000;
|
||||||
|
this.toolTip.InitialDelay = 500;
|
||||||
|
this.toolTip.ReshowDelay = 100;
|
||||||
|
this.toolTip.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;
|
||||||
|
this.toolTip.ToolTipTitle = "Help";
|
||||||
|
//
|
||||||
|
// Settings
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
|
this.Controls.Add(this.tableLayout);
|
||||||
|
this.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||||
|
this.Name = "Settings";
|
||||||
|
this.Size = new System.Drawing.Size(1001, 381);
|
||||||
|
this.tableLayout.ResumeLayout(false);
|
||||||
|
this.tableLayout.PerformLayout();
|
||||||
|
this.flowLayoutToolbar.ResumeLayout(false);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private TableLayoutPanel tableLayout;
|
||||||
|
private Label labelHeadIcon;
|
||||||
|
private Label labelHead;
|
||||||
|
private Panel panelSettings;
|
||||||
|
private FlowLayoutPanel flowLayoutToolbar;
|
||||||
|
private ToolTip toolTip;
|
||||||
|
private Button buttonAddCulture;
|
||||||
|
private Button buttonDeleteCulture;
|
||||||
|
private ContextMenuStrip contextMenuDelete;
|
||||||
|
}
|
||||||
|
}
|
60
I18N Commander/UI WinForms/Components/Settings.cs
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
using Processor;
|
||||||
|
|
||||||
|
namespace UI_WinForms.Components;
|
||||||
|
|
||||||
|
public partial class Settings : UserControl
|
||||||
|
{
|
||||||
|
public Settings()
|
||||||
|
{
|
||||||
|
this.InitializeComponent();
|
||||||
|
this.Load += async (sender, args) => await this.LoadAllSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task LoadAllSettings()
|
||||||
|
{
|
||||||
|
this.panelSettings.Controls.Clear();
|
||||||
|
foreach (var setting in Setting.GetAllSettings())
|
||||||
|
this.panelSettings.Controls.Add(await setting);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void buttonAddCulture_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// Get the current indices of cultures:
|
||||||
|
var cultureIndices = await AppSettings.GetCultureIndices();
|
||||||
|
|
||||||
|
// Add a new culture:
|
||||||
|
await AppSettings.SetCultureCode(cultureIndices.Max() + 1, string.Empty);
|
||||||
|
|
||||||
|
// Reload all settings:
|
||||||
|
await this.LoadAllSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void buttonDeleteCulture_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// Read all cultures:
|
||||||
|
var cultures = await AppSettings.GetCultureInfos();
|
||||||
|
|
||||||
|
// Populate the delete button's menu strip with all cultures:
|
||||||
|
this.contextMenuDelete.Items.Clear();
|
||||||
|
foreach (var culture in cultures)
|
||||||
|
{
|
||||||
|
var item = new ToolStripMenuItem($"{culture.Index}. Culture: {culture.Code}");
|
||||||
|
item.Tag = culture.Index;
|
||||||
|
item.Click += async (senderObj, args) =>
|
||||||
|
{
|
||||||
|
if (senderObj is not ToolStripMenuItem toolStripMenuItem)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Delete the culture:
|
||||||
|
await AppSettings.DeleteCulture((int)toolStripMenuItem.Tag);
|
||||||
|
|
||||||
|
// Reload all settings:
|
||||||
|
await this.LoadAllSettings();
|
||||||
|
};
|
||||||
|
|
||||||
|
this.contextMenuDelete.Items.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.contextMenuDelete.Show((Button)sender, new Point(0, (this.contextMenuDelete.Height + this.buttonDeleteCulture.Height / 2) * -1));
|
||||||
|
}
|
||||||
|
}
|
66
I18N Commander/UI WinForms/Components/Settings.resx
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="contextMenuDelete.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>122, 17</value>
|
||||||
|
</metadata>
|
||||||
|
</root>
|
@ -60,6 +60,16 @@ namespace UI_WinForms.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap deepl_logo_icon_170284 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("deepl_logo_icon_170284", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -110,6 +120,26 @@ namespace UI_WinForms.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap icons8_chat_bubble_512 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("icons8_chat_bubble_512", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap icons8_collectibles_512 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("icons8_collectibles_512", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -140,6 +170,16 @@ namespace UI_WinForms.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap icons8_key_512 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("icons8_key_512", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -180,6 +220,16 @@ namespace UI_WinForms.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap icons8_play_512__2_ {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("icons8_play_512__2_", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -199,5 +249,25 @@ namespace UI_WinForms.Resources {
|
|||||||
return ((System.Drawing.Bitmap)(obj));
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap icons8_settings_svg {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("icons8_settings_svg", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap icons8_trash_can_512 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("icons8_trash_can_512", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,6 +118,9 @@
|
|||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="deepl_logo_icon_170284" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>deepl_logo_icon_170284.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
<data name="icons8_add_folder_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="icons8_add_folder_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>icons8-add-folder-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>icons8-add-folder-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
@ -133,6 +136,12 @@
|
|||||||
<data name="icons8_cancel_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="icons8_cancel_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>icons8-cancel-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>icons8-cancel-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="icons8_chat_bubble_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>icons8-chat-bubble-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="icons8_collectibles_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>icons8-collectibles-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
<data name="icons8_delete_folder_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="icons8_delete_folder_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>icons8-delete-folder-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>icons8-delete-folder-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
@ -142,6 +151,9 @@
|
|||||||
<data name="icons8_document_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="icons8_document_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>icons8-document-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>icons8-document-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="icons8_key_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>icons8-key-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
<data name="icons8_language_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="icons8_language_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>icons8-language-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>icons8-language-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
@ -154,10 +166,19 @@
|
|||||||
<data name="icons8_open_file_under_cursor_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="icons8_open_file_under_cursor_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>icons8-open-file-under-cursor-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>icons8-open-file-under-cursor-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="icons8_play_512__2_" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>icons8-play-512 (2).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
<data name="icons8_remove_tag_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="icons8_remove_tag_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>icons8-remove-tag-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>icons8-remove-tag-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="icons8_rename_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="icons8_rename_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>icons8-rename-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>icons8-rename-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="icons8_settings_svg" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>icons8-settings.svg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="icons8_trash_can_512" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>icons8-trash-can-512.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
BIN
I18N Commander/UI WinForms/Resources/deepl_logo_icon_170284.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
I18N Commander/UI WinForms/Resources/icons8-chat-bubble-512.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
I18N Commander/UI WinForms/Resources/icons8-collectibles-512.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
I18N Commander/UI WinForms/Resources/icons8-key-512.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
I18N Commander/UI WinForms/Resources/icons8-play-512 (2).png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
I18N Commander/UI WinForms/Resources/icons8-settings.svg.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
I18N Commander/UI WinForms/Resources/icons8-trash-can-512.png
Normal file
After Width: | Height: | Size: 2.2 KiB |