Skip to content

Commit

Permalink
Added check for duplicates in key file
Browse files Browse the repository at this point in the history
  • Loading branch information
Nikitosiki committed Jun 7, 2023
1 parent 4f9a602 commit 8ae39a4
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 6 deletions.
35 changes: 29 additions & 6 deletions LocalizatorDll/LocalizerHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include "LocalizerHandler.h"
#include "DllFunctions.h"
#include "XMLReader.h"
Expand All @@ -20,11 +21,20 @@ LocalizerHandler::LocalizerHandler()
if (!XMLReader::ReadLanguagesFromFile(directoryPath + "\\language\\settings.xml", *this->languages))
MessageError(NULL, "Error. Reading settings file!", "Localizer Error", MB_ICONERROR | MB_OK);


// Ïðîâåðÿåì ÷òî ôàéëû ÿçûêîâ ñóùåñòâóþò
if (!CheckAllTranslationsExist(directoryPath + "\\language\\dictionaries\\", *this->languages))
MessageError(NULL, "Error. Not all dictionary files exist!", "Localizer Error", MB_ICONERROR | MB_OK);

// Ñ÷èòûâàåì ôàéë ñî âñåìè êëþ÷àìè
std::vector<std::string> keys;
if (!XMLReader::ReadKeysFromFile(directoryPath + "\\language\\keys.xml", keys))
MessageError(NULL, "Error. Reading keys file!", "Localizer Error", MB_ICONERROR | MB_OK);

// Ïðîâåðÿåì ÷òî âñå êëþ÷è óíèêàëüíûå
std::string duplicateKey;
if (isDuplicates(keys, duplicateKey))
MessageError(NULL, ("Error. Key file contains a duplicate: " + duplicateKey).c_str(), "Localizer Error", MB_ICONERROR | MB_OK);

// Ñ÷èòûâàåì íàçâàíèå ôàéëà âûáðàííîãî ÿçûêà, â ôàéëå íàñòðîåê
std::string fileLanguageName;
if (!XMLReader::ReadSelectLangFile_FromFile(directoryPath + "\\language\\settings.xml", fileLanguageName))
Expand All @@ -34,11 +44,6 @@ LocalizerHandler::LocalizerHandler()
if (!XMLReader::ReadTranslationsFromFile(directoryPath + "\\language\\dictionaries\\" + fileLanguageName, *this->dictionary))
MessageError(NULL, ("Error. Reading dictionary file: " + fileLanguageName).c_str(), "Localizer Error", MB_ICONERROR | MB_OK);

// Ñ÷èòûâàåì ôàéë ñî âñåìè êëþ÷àìè
std::vector<std::string> keys;
if (!XMLReader::ReadKeysFromFile(directoryPath + "\\language\\keys.xml", keys))
MessageError(NULL, "Error. Reading keys file!", "Localizer Error", MB_ICONERROR | MB_OK);

// Ïðîâåðÿåì ñëîâàðü íà êîððåêòíîñòü, èñïîëüçóÿ ôàéë ñî âñåìè êëþ÷àìè
if (!CheckCorrectDictionary(keys, *this->dictionary))
MessageError(NULL, ("Error. Incorrect keys in dictionary, file: " + fileLanguageName).c_str(), "Localizer Error", MB_ICONERROR | MB_OK);
Expand Down Expand Up @@ -131,6 +136,24 @@ const void LocalizerHandler::MessageError(const HWND& hWnd, const LPCSTR& lpText
ExitProcess(0);
}

const bool LocalizerHandler::isDuplicates(const std::vector<std::string>& values, std::string& duplicateElement) const
{
std::vector<std::string> sortedValues = values; // Ñîçäàåì êîïèþ âåêòîðà
std::sort(sortedValues.begin(), sortedValues.end()); // Ñîðòèðóåì êîïèþ

// Ïðîâåðÿåì, åñòü ëè ñîñåäíèå ýëåìåíòû â îòñîðòèðîâàííîì âåêòîðå, êîòîðûå ðàâíû
for (std::size_t i = 1; i < sortedValues.size(); ++i)
{
if (sortedValues[i] == sortedValues[i - 1])
{
duplicateElement = sortedValues[i];
return true; // Åñòü äóáëèêàòû
}
}

return false; // Äóáëèêàòîâ íåò
}

const std::string LocalizerHandler::GetDllFolderPath() const
{
char path[MAX_PATH];
Expand Down
2 changes: 2 additions & 0 deletions LocalizatorDll/LocalizerHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ class LocalizerHandler

const void MessageError(const HWND& hWnd, const LPCSTR& lpText, const LPCSTR& lpCaption, const UINT& uType) const;

const bool isDuplicates(const std::vector<std::string>& values, std::string& duplicateElement) const;


public:
LocalizerHandler();
Expand Down

0 comments on commit 8ae39a4

Please sign in to comment.