20230416
This commit is contained in:
64
FileSplitterShared/Classes/FileSplitterConsoleOptions.cs
Normal file
64
FileSplitterShared/Classes/FileSplitterConsoleOptions.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using Newtonsoft.Json;
|
||||
using System.Text;
|
||||
|
||||
namespace FileSplitter.Shared.Classes;
|
||||
|
||||
/// <summary>
|
||||
/// Параметры консоли программы
|
||||
/// </summary>
|
||||
public sealed class FileSplitterConsoleOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
public FileSplitterConsoleOptions () => Language = "russian";
|
||||
|
||||
/// <summary>
|
||||
/// Язык приложения
|
||||
/// </summary>
|
||||
public string Language { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Сохранение параметров в файл
|
||||
/// </summary>
|
||||
public void Save ()
|
||||
{
|
||||
//Открываю файл
|
||||
StreamWriter writer = new("settings.json", Encoding.UTF8,
|
||||
new() { Access = FileAccess.Write, Mode = FileMode.Create });
|
||||
|
||||
//Записываю файл
|
||||
writer.WriteLine(JsonConvert.SerializeObject(this));
|
||||
|
||||
//Закрываю файл
|
||||
writer.Close();
|
||||
//Освобождаю память
|
||||
writer.Dispose();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Загрузка параметров из файла
|
||||
/// </summary>
|
||||
public void Load ()
|
||||
{
|
||||
//Если файла опций не существует
|
||||
if (!File.Exists("settings.json"))
|
||||
//- то создаём
|
||||
Save();
|
||||
|
||||
//Открываю файл
|
||||
StreamReader reader = new("settings.json", Encoding.UTF8);
|
||||
|
||||
//Читаю файл
|
||||
FileSplitterConsoleOptions options =
|
||||
JsonConvert.DeserializeObject<FileSplitterConsoleOptions>(reader.ReadLine() ?? "[]") ?? new();
|
||||
|
||||
//- закрываю файл
|
||||
reader.Close();
|
||||
//- освобождаю память
|
||||
reader.Dispose();
|
||||
|
||||
//Устанавливаю параметры
|
||||
Language = options.Language;
|
||||
}
|
||||
}
|
134
FileSplitterShared/Classes/FileSplitterLanguage.cs
Normal file
134
FileSplitterShared/Classes/FileSplitterLanguage.cs
Normal file
@@ -0,0 +1,134 @@
|
||||
namespace FileSplitter.Shared.Classes;
|
||||
|
||||
/// <summary>
|
||||
/// Класс json-представления языкового файла программы
|
||||
/// </summary>
|
||||
public class FileSplitterLanguage
|
||||
{
|
||||
//Параметры приложения
|
||||
public FileSplitterLanguage()
|
||||
{
|
||||
AppTitle = string.Empty;
|
||||
AppVersion = string.Empty;
|
||||
AppCopyrights = string.Empty;
|
||||
MessageNoParametersForSplit = string.Empty;
|
||||
MessageSplitAsk = string.Empty;
|
||||
MessageStartSplit = string.Empty;
|
||||
MessageSplitFilePart = string.Empty;
|
||||
MessageSplitComplete = string.Empty;
|
||||
MessageHashCheckStart = string.Empty;
|
||||
MessageHashCheckFail = string.Empty;
|
||||
MessageHashCheckComplete = string.Empty;
|
||||
MessageJoinAsk = string.Empty;
|
||||
MessageStartJoin = string.Empty;
|
||||
MessageJoinUnsupportedFile = string.Empty;
|
||||
MessageJoinUnknownFile = string.Empty;
|
||||
MessageJoinHashError = string.Empty;
|
||||
MessageJoinCheckError = string.Empty;
|
||||
MessageJoinFilePart = string.Empty;
|
||||
MessageJoinComplete = string.Empty;
|
||||
MessagePleaseWaitToReady = string.Empty;
|
||||
InteractiveStartAsk = string.Empty;
|
||||
InteractiveWrongInput = string.Empty;
|
||||
InteractiveOperationFinish = string.Empty;
|
||||
InteractiveFileNameNotExist = string.Empty;
|
||||
InteractiveFileNameExist = string.Empty;
|
||||
InteractiveSplitFileNameAsk = string.Empty;
|
||||
InteractiveSplitFileNameResult = string.Empty;
|
||||
InteractiveSplitTargetDirAsk = string.Empty;
|
||||
InteractiveSplitTargetDirResult = string.Empty;
|
||||
InteractiveSplitPartSizeAsk = string.Empty;
|
||||
InteractiveSplitPartSizeAsk2 = string.Empty;
|
||||
InteractiveSplitPartSizeResult = string.Empty;
|
||||
InteractiveSplitOptionsAsk = string.Empty;
|
||||
InteractiveSplitOptionsResult = string.Empty;
|
||||
InteractiveJoinFileNameAsk = string.Empty;
|
||||
InteractiveJoinFileNameResult = string.Empty;
|
||||
InteractiveJoinTargetFileNameAsk = string.Empty;
|
||||
InteractiveJoinTargetFileNameResult = string.Empty;
|
||||
InteractiveJoinOptionsAsk = string.Empty;
|
||||
InteractiveJoinOptionsResult = string.Empty;
|
||||
InteractiveOptionsAsk = string.Empty;
|
||||
InteractiveOptionsConfirm = string.Empty;
|
||||
InteractiveOptionsResult = string.Empty;
|
||||
FileSizeStringsByte = string.Empty;
|
||||
FileSizeStringsKByte = string.Empty;
|
||||
FileSizeStringsMByte = string.Empty;
|
||||
FileSizeStringsGByte = string.Empty;
|
||||
FileSizeStringsTByte = string.Empty;
|
||||
ExitCodeNamesAllDone = string.Empty;
|
||||
ExitCodeNamesInfoVersionUnsupported = string.Empty;
|
||||
ExitCodeNamesInvalidParameters = string.Empty;
|
||||
ExitCodeNamesSplitFileHashError = string.Empty;
|
||||
ExitCodeNamesTargetFileCheckError = string.Empty;
|
||||
ExitCodeNamesUnknownInfoFile = string.Empty;
|
||||
ExitCodeNamesUserAborted = string.Empty;
|
||||
}
|
||||
|
||||
public string AppTitle { get; set; }
|
||||
public string AppVersion { get; set; }
|
||||
public string AppCopyrights { get; set; }
|
||||
|
||||
//Сообщения
|
||||
public string MessageNoParametersForSplit { get; set; }
|
||||
public string MessageSplitAsk { get; set; }
|
||||
public string MessageStartSplit { get; set; }
|
||||
public string MessageSplitFilePart { get; set; }
|
||||
public string MessageSplitComplete { get; set; }
|
||||
public string MessageHashCheckStart { get; set; }
|
||||
public string MessageHashCheckFail { get; set; }
|
||||
public string MessageHashCheckComplete { get; set; }
|
||||
public string MessageJoinAsk { get; set; }
|
||||
public string MessageStartJoin { get; set; }
|
||||
public string MessageJoinUnsupportedFile { get; set; }
|
||||
public string MessageJoinUnknownFile { get; set; }
|
||||
public string MessageJoinHashError { get; set; }
|
||||
public string MessageJoinCheckError { get; set; }
|
||||
public string MessageJoinFilePart { get; set; }
|
||||
public string MessageJoinComplete { get; set; }
|
||||
public string MessagePleaseWaitToReady { get; set; }
|
||||
|
||||
//Сообщения интерактивного режима
|
||||
public string InteractiveStartAsk { get; set; }
|
||||
public string InteractiveWrongInput { get; set; }
|
||||
public string InteractiveOperationFinish { get; set; }
|
||||
public string InteractiveFileNameNotExist { get; set; }
|
||||
public string InteractiveFileNameExist { get; set; }
|
||||
|
||||
public string InteractiveSplitFileNameAsk { get; set; }
|
||||
public string InteractiveSplitFileNameResult { get; set; }
|
||||
public string InteractiveSplitTargetDirAsk { get; set; }
|
||||
public string InteractiveSplitTargetDirResult { get; set; }
|
||||
public string InteractiveSplitPartSizeAsk { get; set; }
|
||||
public string InteractiveSplitPartSizeAsk2 { get; set; }
|
||||
public string InteractiveSplitPartSizeResult { get; set; }
|
||||
public string InteractiveSplitOptionsAsk { get; set; }
|
||||
public string InteractiveSplitOptionsResult { get; set; }
|
||||
|
||||
public string InteractiveJoinFileNameAsk { get; set; }
|
||||
public string InteractiveJoinFileNameResult { get; set; }
|
||||
public string InteractiveJoinTargetFileNameAsk { get; set; }
|
||||
public string InteractiveJoinTargetFileNameResult { get; set; }
|
||||
public string InteractiveJoinOptionsAsk { get; set; }
|
||||
public string InteractiveJoinOptionsResult { get; set; }
|
||||
|
||||
public string InteractiveOptionsAsk { get; set; }
|
||||
public string InteractiveOptionsConfirm { get; set; }
|
||||
public string InteractiveOptionsResult { get; set; }
|
||||
|
||||
//Константы размеров
|
||||
public string FileSizeStringsByte { get; set; }
|
||||
public string FileSizeStringsKByte { get; set; }
|
||||
public string FileSizeStringsMByte { get; set; }
|
||||
public string FileSizeStringsGByte { get; set; }
|
||||
public string FileSizeStringsTByte { get; set; }
|
||||
|
||||
//Переводы кодов возврата
|
||||
public string ExitCodeNamesAllDone { get; set; }
|
||||
public string ExitCodeNamesInfoVersionUnsupported { get; set; }
|
||||
public string ExitCodeNamesInvalidParameters { get; set; }
|
||||
public string ExitCodeNamesSplitFileHashError { get; set; }
|
||||
public string ExitCodeNamesTargetFileCheckError { get; set; }
|
||||
public string ExitCodeNamesUnknownInfoFile { get; set; }
|
||||
public string ExitCodeNamesUserAborted { get; set; }
|
||||
}
|
@@ -1,62 +1,117 @@
|
||||
using FileSplitter.Shared.Enums;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace FileSplitter.Shared.Classes;
|
||||
|
||||
public static class Localization
|
||||
{
|
||||
//Содержимое языкового файла
|
||||
private static readonly FileSplitterLanguage Language;
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
static Localization()
|
||||
{
|
||||
//Создаю опции приложения
|
||||
FileSplitterConsoleOptions options = new();
|
||||
//- и загружаю их
|
||||
options.Load();
|
||||
|
||||
//Язык приложения
|
||||
string language = options.Language;
|
||||
|
||||
//Если файла языка не существует
|
||||
if (!File.Exists($"languages\\{language}.json"))
|
||||
//- то используем русский
|
||||
language = "russian";
|
||||
|
||||
//Читаю файл
|
||||
string languageContent = File.ReadAllText($"languages\\{language}.json");
|
||||
|
||||
//Загружаю парсер
|
||||
Language = JsonConvert.DeserializeObject<FileSplitterLanguage>(languageContent) ?? new ();
|
||||
|
||||
//Задаю массивы
|
||||
//- размеров файлов
|
||||
FileSizeStrings = new[]
|
||||
{
|
||||
Language.FileSizeStringsByte,
|
||||
Language.FileSizeStringsKByte,
|
||||
Language.FileSizeStringsMByte,
|
||||
Language.FileSizeStringsGByte,
|
||||
Language.FileSizeStringsTByte
|
||||
};
|
||||
|
||||
//- кодов ответов
|
||||
ExitCodeNames = new()
|
||||
{
|
||||
(FsExitCode.ecAllDone, Language.ExitCodeNamesAllDone),
|
||||
(FsExitCode.ecInvalidParameters, Language.ExitCodeNamesInvalidParameters),
|
||||
(FsExitCode.ecUserAborted, Language.ExitCodeNamesUserAborted),
|
||||
(FsExitCode.ecUnknownInfoFile, Language.ExitCodeNamesUnknownInfoFile),
|
||||
(FsExitCode.ecInfoVersionUnsupported, Language.ExitCodeNamesInfoVersionUnsupported),
|
||||
(FsExitCode.ecSplitFileHashError, Language.ExitCodeNamesSplitFileHashError),
|
||||
(FsExitCode.ecTargetFileCheckError, Language.ExitCodeNamesTargetFileCheckError)
|
||||
};
|
||||
}
|
||||
|
||||
//Параметры приложения
|
||||
public const string AppTitle = "ANB Software Делитель файлов";
|
||||
public const string AppVersion = "Версия: {0}";
|
||||
public const string AppCopyrights = "Авторские права (C) {0}, Александр Бабаев.";
|
||||
public static string AppTitle => Language.AppTitle;
|
||||
public static string AppVersion => Language.AppVersion;
|
||||
public static string AppCopyrights => Language.AppCopyrights;
|
||||
|
||||
//Сообщения
|
||||
public const string MessageNoParametersForSplit =
|
||||
"Не заданы параметры разбиения. Информацию о работе с программой смотрите в файле \"Help\\Russian\\Console.html\"";
|
||||
public const string MessageSplitAsk =
|
||||
"Информация о разбиваемом файле:\n***{0}\n***Размер: {1}\n***Хэш файла: {2}\n***Предполагается разбиение на {3} части(-ей)\nВы хотите начать разбиение? [Y|y - да, Любая другая буква/слово/выражение - нет]";
|
||||
public const string MessageStartSplit = "Запущено разбиение файла {0} на части размером {1} и сохранением их в директории {2}.";
|
||||
public const string MessageSplitFilePart = "Идёт обработка части {0} из {1}...";
|
||||
public const string MessageSplitComplete = "Разбиение файла {0} завершено!";
|
||||
public const string MessageHashCheckStart = "Начинаю проверку хэша разбиения";
|
||||
public const string MessageHashCheckFail = "К сожалению, файл \"{0}\" не прошёл проверку хэша!";
|
||||
public const string MessageHashCheckComplete = "Проверка хэша завершена!";
|
||||
public const string MessageJoinAsk = "Вы хотите начать сборку файла {0}? [Y|y - да, любая другая буква/слово/выражение - нет]";
|
||||
public const string MessageStartJoin = "Запущено объединение файлов, заданных файлом информации {0}, в файл {1}.";
|
||||
public const string MessageJoinUnsupportedFile = "К сожалению, версия файла информации {0} не поддерживается!";
|
||||
public const string MessageJoinUnknownFile = "Не могу прочитать файл информации! Возможно он зашифрован?";
|
||||
public const string MessageJoinHashError = "К сожалению, разделённые файлы не прошли проверку. Возможно они повреждены?";
|
||||
public const string MessageJoinCheckError =
|
||||
"К сожалению, объединённый файл не прошли проверку корректности объединения. Возможно были какие-либо ошибки?";
|
||||
public const string MessageJoinFilePart = "Идёт обработка части {0} из {1}...";
|
||||
public const string MessageJoinComplete = "Объединение файла {0} завершено!";
|
||||
public static string MessageNoParametersForSplit => Language.MessageNoParametersForSplit;
|
||||
public static string MessageSplitAsk => Language.MessageSplitAsk;
|
||||
public static string MessageStartSplit => Language.MessageStartSplit;
|
||||
public static string MessageSplitFilePart => Language.MessageSplitFilePart;
|
||||
public static string MessageSplitComplete => Language.MessageSplitComplete;
|
||||
public static string MessageHashCheckStart => Language.MessageHashCheckStart;
|
||||
public static string MessageHashCheckFail => Language.MessageHashCheckFail;
|
||||
public static string MessageHashCheckComplete => Language.MessageHashCheckComplete;
|
||||
public static string MessageJoinAsk => Language.MessageJoinAsk;
|
||||
public static string MessageStartJoin => Language.MessageStartJoin;
|
||||
public static string MessageJoinUnsupportedFile => Language.MessageJoinUnsupportedFile;
|
||||
public static string MessageJoinUnknownFile => Language.MessageJoinUnknownFile;
|
||||
public static string MessageJoinHashError => Language.MessageJoinHashError;
|
||||
public static string MessageJoinCheckError => Language.MessageJoinCheckError;
|
||||
public static string MessageJoinFilePart => Language.MessageJoinFilePart;
|
||||
public static string MessageJoinComplete => Language.MessageJoinComplete;
|
||||
public static string MessagePleaseWaitToReady => Language.MessagePleaseWaitToReady;
|
||||
|
||||
//Сообщения интерактивного режима
|
||||
public const string InteractiveStartAsk = "Выберете одно из действий:\n* S|s - разбиение\n* J|j - объединение\n* E|e - выход\nВаш выбор:";
|
||||
public const string InteractiveWrongInput = "Выбрано неизвестное действие!";
|
||||
public const string InteractiveOperationFinish = "Операция завершена с кодом: {0}";
|
||||
public const string InteractiveSplitFileNameAsk = "Введите имя разбиваемого файла (или перетащите его сюда):";
|
||||
public const string InteractiveFileNameNotExist = "Файл не существует! Повторить ввод файла? [Y|y - для повтора, любая другая буква - прерывание операции]";
|
||||
public const string InteractiveSplitFileNameResult = "Для разбиения выбран файл: {0}";
|
||||
public const string InteractiveSplitTargetDirAsk = "Выберете папку, куда следует сохранить части файла (или оставьте пустым, чтобы использовать папку разбиваемого файла):";
|
||||
public const string InteractiveSplitTargetDirResult = "Файлы разбиения будут сохранены в папке: {0}";
|
||||
public const string InteractiveSplitPartSizeAsk = "Введите размер части (в байтах):";
|
||||
public const string InteractiveSplitPartSizeAsk2 = "Вы выбрали размер части {0}. Всё правильно? [Y|y - да, продолжить, любая другая буква - нет, повторить ввод]";
|
||||
public const string InteractiveSplitPartSizeResult = "Выбран размер части: {0}";
|
||||
public const string InteractiveSplitOptionsAsk = "Введите дополнительные параметры разбиения (разделитель - пробел):";
|
||||
public const string InteractiveSplitOptionsResult = "Выбраны дополнительные параметры: [{0}]";
|
||||
public static string InteractiveStartAsk => Language.InteractiveStartAsk;
|
||||
public static string InteractiveWrongInput => Language.InteractiveWrongInput;
|
||||
public static string InteractiveOperationFinish => Language.InteractiveOperationFinish;
|
||||
public static string InteractiveFileNameNotExist => Language.InteractiveFileNameNotExist;
|
||||
public static string InteractiveFileNameExist => Language.InteractiveFileNameExist;
|
||||
|
||||
public static string InteractiveSplitFileNameAsk => Language.InteractiveSplitFileNameAsk;
|
||||
public static string InteractiveSplitFileNameResult => Language.InteractiveSplitFileNameResult;
|
||||
public static string InteractiveSplitTargetDirAsk => Language.InteractiveSplitTargetDirAsk;
|
||||
public static string InteractiveSplitTargetDirResult => Language.InteractiveSplitTargetDirResult;
|
||||
public static string InteractiveSplitPartSizeAsk => Language.InteractiveSplitPartSizeAsk;
|
||||
public static string InteractiveSplitPartSizeAsk2 => Language.InteractiveSplitPartSizeAsk2;
|
||||
public static string InteractiveSplitPartSizeResult => Language.InteractiveSplitPartSizeResult;
|
||||
public static string InteractiveSplitOptionsAsk => Language.InteractiveSplitOptionsAsk;
|
||||
public static string InteractiveSplitOptionsResult => Language.InteractiveSplitOptionsResult;
|
||||
|
||||
public static string InteractiveJoinFileNameAsk => Language.InteractiveJoinFileNameAsk;
|
||||
public static string InteractiveJoinFileNameResult => Language.InteractiveJoinFileNameResult;
|
||||
public static string InteractiveJoinTargetFileNameAsk => Language.InteractiveJoinTargetFileNameAsk;
|
||||
public static string InteractiveJoinTargetFileNameResult => Language.InteractiveJoinTargetFileNameResult;
|
||||
public static string InteractiveJoinOptionsAsk => Language.InteractiveJoinOptionsAsk;
|
||||
public static string InteractiveJoinOptionsResult => Language.InteractiveJoinOptionsResult;
|
||||
|
||||
public static string InteractiveOptionsAsk => Language.InteractiveOptionsAsk;
|
||||
public static string InteractiveOptionsConfirm => Language.InteractiveOptionsConfirm;
|
||||
public static string InteractiveOptionsResult => Language.InteractiveOptionsResult;
|
||||
|
||||
//Константы размеров
|
||||
public static readonly string[] FileSizeStrings = { "байт", "Кб", "Мб", "Гб", "Тб" };
|
||||
public static string[] FileSizeStrings { get; }
|
||||
|
||||
//Переводы кодов возврата
|
||||
public static readonly List<(FsExitCode, string)> ExitCodeNames = new()
|
||||
{
|
||||
(FsExitCode.ecAllDone, "Успешно завершено"),
|
||||
(FsExitCode.ecInvalidParameters, "Неверные параметры"),
|
||||
(FsExitCode.ecUserAborted, "Прервано пользователем"),
|
||||
(FsExitCode.ecUnknownInfoFile, "Неизвестный файл информации о разбиении"),
|
||||
(FsExitCode.ecInfoVersionUnsupported, "Версия файла информации о разбиении не поддерживается"),
|
||||
(FsExitCode.ecSplitFileHashError, "Ошибка проверки хэш-суммы разделённых файлов"),
|
||||
(FsExitCode.ecTargetFileCheckError, "Ошибка проверки целостности собираемого файла")
|
||||
};
|
||||
public static List<(FsExitCode, string)> ExitCodeNames { get; }
|
||||
}
|
Reference in New Issue
Block a user