Components, PoChecker:

a) made it localizable;
       b) slightly improved dialogs;
       c) added Russian translation.

git-svn-id: trunk@36198 -
This commit is contained in:
maxim 2012-03-21 23:00:18 +00:00
parent fb29f7bfd4
commit b6b63e0fd4
15 changed files with 640 additions and 128 deletions

3
.gitattributes vendored
View File

@ -2017,8 +2017,11 @@ components/pochecker/Proj/pochecker.lpr svneol=native#text/plain
components/pochecker/Proj/pocheckermain.lfm svneol=native#text/plain components/pochecker/Proj/pocheckermain.lfm svneol=native#text/plain
components/pochecker/Proj/pocheckermain.pp svneol=native#text/plain components/pochecker/Proj/pocheckermain.pp svneol=native#text/plain
components/pochecker/README.txt svneol=native#text/plain components/pochecker/README.txt svneol=native#text/plain
components/pochecker/languages/pocheckerconsts.po svneol=native#text/plain
components/pochecker/languages/pocheckerconsts.ru.po svneol=native#text/plain
components/pochecker/pochecker.lpk svneol=native#text/plain components/pochecker/pochecker.lpk svneol=native#text/plain
components/pochecker/pochecker.pas svneol=native#text/plain components/pochecker/pochecker.pas svneol=native#text/plain
components/pochecker/pocheckerconsts.pas svneol=native#text/pascal
components/pochecker/pocheckermain.lfm svneol=native#text/plain components/pochecker/pocheckermain.lfm svneol=native#text/plain
components/pochecker/pocheckermain.pp svneol=native#text/plain components/pochecker/pocheckermain.pp svneol=native#text/plain
components/pochecker/pofamilies.pp svneol=native#text/plain components/pochecker/pofamilies.pp svneol=native#text/plain

View File

@ -4,11 +4,13 @@
<Version Value="9"/> <Version Value="9"/>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<General> <General>
<Flags>
<SaveOnlyProjectUnits Value="True"/>
</Flags>
<SessionStorage Value="InProjectDir"/> <SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/> <MainUnit Value="0"/>
<ResourceType Value="res"/> <ResourceType Value="res"/>
<UseXPManifest Value="True"/> <UseXPManifest Value="True"/>
<Icon Value="0"/>
</General> </General>
<i18n> <i18n>
<EnableI18N LFM="False"/> <EnableI18N LFM="False"/>
@ -37,7 +39,7 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item2> </Item2>
</RequiredPackages> </RequiredPackages>
<Units Count="5"> <Units Count="6">
<Unit0> <Unit0>
<Filename Value="pochecker.lpr"/> <Filename Value="pochecker.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
@ -46,25 +48,34 @@
<Unit1> <Unit1>
<Filename Value="pocheckermain.pp"/> <Filename Value="pocheckermain.pp"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<ComponentName Value="PoCheckerForm"/>
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="pocheckermain"/> <UnitName Value="pocheckermain"/>
</Unit1> </Unit1>
<Unit2> <Unit2>
<Filename Value="..\pofamilies.pp"/> <Filename Value="..\pofamilies.pp"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="pofamilies"/> <UnitName Value="PoFamilies"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
<Filename Value="..\resultdlg.pp"/> <Filename Value="..\resultdlg.pp"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<ComponentName Value="ResultDlgForm"/>
<HasResources Value="True"/> <HasResources Value="True"/>
<UnitName Value="resultdlg"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="ResultDlg"/>
</Unit3> </Unit3>
<Unit4> <Unit4>
<Filename Value="..\simplepofiles.pp"/> <Filename Value="..\simplepofiles.pp"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="simplepofiles"/> <UnitName Value="simplepofiles"/>
</Unit4> </Unit4>
<Unit5>
<Filename Value="..\pocheckerconsts.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="pocheckerconsts"/>
</Unit5>
</Units> </Units>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>

View File

@ -7,7 +7,7 @@ uses
cthreads, cthreads,
{$ENDIF}{$ENDIF} {$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset Interfaces, // this includes the LCL widgetset
Forms, pocheckermain, pofamilies, resultdlg, simplepofiles; Forms, pocheckermain, pofamilies, resultdlg, simplepofiles, pocheckerconsts;
{$R *.res} {$R *.res}

View File

@ -15,7 +15,7 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideTop.Control = SelectTestLabel AnchorSideTop.Control = SelectTestLabel
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 201 Left = 201
Height = 174 Height = 150
Top = 28 Top = 28
Width = 373 Width = 373
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
@ -38,10 +38,16 @@ object PoCheckerForm: TPoCheckerForm
ParentFont = False ParentFont = False
end end
object OpenBtn: TBitBtn object OpenBtn: TBitBtn
AnchorSideLeft.Control = RunBtn
AnchorSideRight.Control = RunBtn
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = RunBtn
Left = 8 Left = 8
Height = 63 Height = 63
Top = 33 Top = 33
Width = 184 Width = 184
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Bottom = 6
Caption = '&Open a po-file' Caption = '&Open a po-file'
Glyph.Data = { Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100 36040000424D3604000000000000360000002800000010000000100000000100
@ -83,16 +89,12 @@ object PoCheckerForm: TPoCheckerForm
TabOrder = 1 TabOrder = 1
end end
object RunBtn: TBitBtn object RunBtn: TBitBtn
AnchorSideLeft.Control = OpenBtn
AnchorSideTop.Control = OpenBtn
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = OpenBtn
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 8 Left = 8
Height = 63 Height = 63
Top = 102 Top = 102
Width = 184 Width = 184
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = '&Run Selected Tests' Caption = '&Run Selected Tests'
Enabled = False Enabled = False
@ -114,7 +116,7 @@ object PoCheckerForm: TPoCheckerForm
Left = 8 Left = 8
Height = 14 Height = 14
Top = 8 Top = 8
Width = 62 Width = 66
Caption = 'Current Test:' Caption = 'Current Test:'
ParentColor = False ParentColor = False
end end
@ -125,7 +127,7 @@ object PoCheckerForm: TPoCheckerForm
Left = 8 Left = 8
Height = 14 Height = 14
Top = 22 Top = 22
Width = 69 Width = 75
Caption = 'Current po-file:' Caption = 'Current po-file:'
ParentColor = False ParentColor = False
end end
@ -134,7 +136,7 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CurTestHeaderLabel AnchorSideTop.Control = CurTestHeaderLabel
AnchorSideTop.Side = asrCenter AnchorSideTop.Side = asrCenter
Left = 76 Left = 80
Height = 14 Height = 14
Top = 8 Top = 8
Width = 64 Width = 64
@ -147,10 +149,10 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CurPoHeaderLabel AnchorSideTop.Control = CurPoHeaderLabel
AnchorSideTop.Side = asrCenter AnchorSideTop.Side = asrCenter
Left = 83 Left = 89
Height = 14 Height = 14
Top = 22 Top = 22
Width = 56 Width = 55
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'CurPoLabel' Caption = 'CurPoLabel'
ParentColor = False ParentColor = False
@ -158,9 +160,9 @@ object PoCheckerForm: TPoCheckerForm
end end
object NoErrLabel: TLabel object NoErrLabel: TLabel
Left = 8 Left = 8
Height = 25 Height = 24
Top = 231 Top = 232
Width = 149 Width = 152
Anchors = [akLeft, akBottom] Anchors = [akLeft, akBottom]
Caption = 'No errors found' Caption = 'No errors found'
Font.Color = clGreen Font.Color = clGreen
@ -175,14 +177,26 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 201 Left = 201
Height = 17 Height = 17
Top = 208 Top = 184
Width = 64 Width = 61
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'Select All' Caption = 'Select All'
Enabled = False Enabled = False
OnClick = SelectAllCheckBoxClick OnClick = SelectAllCheckBoxClick
TabOrder = 4 TabOrder = 4
end end
object FindAllPOsCheckBox: TCheckBox
AnchorSideLeft.Control = SelectAllCheckBox
AnchorSideTop.Control = SelectAllCheckBox
AnchorSideTop.Side = asrBottom
Left = 201
Height = 17
Top = 207
Width = 142
BorderSpacing.Top = 6
Caption = 'Find all translated PO files'
TabOrder = 5
end
object OpenDialog: TOpenDialog object OpenDialog: TOpenDialog
Filter = 'po-files (*.po)|*.po|all files|*' Filter = 'po-files (*.po)|*.po|all files|*'
Options = [ofFileMustExist, ofEnableSizing, ofViewDetail] Options = [ofFileMustExist, ofEnableSizing, ofViewDetail]

View File

@ -25,14 +25,15 @@ interface
uses uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls, LCLProc, CheckLst, Buttons, ExtCtrls, StdCtrls, LCLProc, CheckLst, Buttons, ExtCtrls, Translations,
SimplePoFiles, PoFamilies, ResultDlg; SimplePoFiles, PoFamilies, ResultDlg, pocheckerconsts;
type type
{ TPoCheckerForm } { TPoCheckerForm }
TPoCheckerForm = class(TForm) TPoCheckerForm = class(TForm)
FindAllPOsCheckBox: TCheckBox;
SelectAllCheckBox: TCheckBox; SelectAllCheckBox: TCheckBox;
CurTestHeaderLabel: TLabel; CurTestHeaderLabel: TLabel;
CurPoHeaderLabel: TLabel; CurPoHeaderLabel: TLabel;
@ -67,20 +68,6 @@ type
end; end;
resourcestring
rsPoChecker = 'PO File Checker';
sSelectAllTests = 'Select all tests';
sUnSelectAllTests = 'Unselect all tests';
sCannotFindMaster = 'Cannot find master po file:' + LineEnding + '%s' + LineEnding + 'for selected file' + LineEnding + '%s';
sNotAProperFileName = 'Selected filename' + LineEnding + '%s' + LineEnding + 'does not seem to be a proper name for a po-file';
sErrorOnCreate = 'Error creating an instance of TPoFamily:' + LineEnding + '%s';
sErrorOnCleanup = 'An unrecoverable error occurred' + LineEnding + '%s' + LineEnding + 'Please close the program';
sTotalErrors = 'Total errors found : %d';
sTotalWarnings = 'Total warnings found: %d';
//sNoErrorsFound = 'No errors found.';
sNoTestSelected = 'There are no tests selected.';
var var
PoCheckerForm: TPoCheckerForm; PoCheckerForm: TPoCheckerForm;
@ -91,10 +78,31 @@ implementation
{ TPoCheckerForm } { TPoCheckerForm }
procedure TPoCheckerForm.FormCreate(Sender: TObject); procedure TPoCheckerForm.FormCreate(Sender: TObject);
var
Lang, T: string;
begin begin
//Initializing translation
Lang := GetEnvironmentVariableUTF8('LANG');
if Lang = '' then
LCLGetLanguageIDs(Lang, T);
if Lang <> '' then
begin
Lang := copy(Lang, 1, 2);
Translations.TranslateUnitResourceStrings('PoCheckerConsts', '..'+DirectorySeparator+'languages'+DirectorySeparator+'pocheckerconsts.'+Lang+'.po');
Translations.TranslateUnitResourceStrings('LCLStrConsts', '..'+DirectorySeparator+'languages'+DirectorySeparator+'lclstrconsts.'+Lang+'.po');
end;
Caption := sGUIPoFileCheckingTool;
SelectTestLabel.Caption := sSelectTestTypes;
FindAllPOsCheckBox.Caption := sFindAllTranslatedPoFiles;
OpenBtn.Caption := sOpenAPoFile;
RunBtn.Caption := sRunSelectedTests;
NoErrLabel.Caption := sNoErrorsFound;
FillTestListBox; FillTestListBox;
ClearAndDisableStatusPanel; ClearAndDisableStatusPanel;
NoErrLabel.Visible := False; NoErrLabel.Visible := False;
CurTestHeaderLabel.Caption := sCurrentTest;
CurPoHeaderLabel.Caption := sCurrentPoFile;
end; end;
procedure TPoCheckerForm.FormDestroy(Sender: TObject); procedure TPoCheckerForm.FormDestroy(Sender: TObject);
@ -158,8 +166,16 @@ procedure TPoCheckerForm.FillTestListBox;
var var
Opt: TPoTestOption; Opt: TPoTestOption;
begin begin
for Opt := Low(PoTestOptionNames) to High(PoTestOptionNames) do for Opt := Low(PoTestOptionNames) to Pred(High(PoTestOptionNames)) do
TestListBox.Items.Add(PoTestOptionNames[Opt]); case Opt of
ptoCheckNrOfItems: TestListBox.Items.Add(sCheckNumberOfItems);
ptoCheckFormatArgs: TestListBox.Items.Add(sCheckForIncompatibleFormatArguments);
ptoCheckMissingIdentifiers: TestListBox.Items.Add(sCheckMissingIdentifiers);
ptoCheckMismatchedOriginals: TestListBox.Items.Add(sCheckForMismatchesInUntranslatedStrings);
ptoCheckDuplicateOriginals: TestListBox.Items.Add(sCheckForDuplicateUntranslatedValues);
else
TestListBox.Items.Add(PoTestOptionNames[Opt]);
end;
SelectAllCheckBox.Caption := sSelectAllTests; SelectAllCheckBox.Caption := sSelectAllTests;
end; end;
@ -169,7 +185,7 @@ var
Index: Integer; Index: Integer;
begin begin
Result := []; Result := [];
for Opt := Low(TpoTestOption) to High(TPoTestOption) do for Opt := Low(TpoTestOption) to Pred(High(TPoTestOption)) do
begin begin
Index := Ord(Opt); Index := Ord(Opt);
if (Index < TestListBox.Count) then if (Index < TestListBox.Count) then
@ -178,6 +194,8 @@ begin
Result := Result + [Opt]; Result := Result + [Opt];
end; end;
end; end;
if FindAllPOsCheckBox.Checked then
Result := Result + [High(TPoTestOption)];
end; end;
procedure TPoCheckerForm.ShowError(const Msg: String); procedure TPoCheckerForm.ShowError(const Msg: String);

View File

@ -0,0 +1,181 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: pocheckerconsts.rspochecker
msgid "PO File Checker"
msgstr ""
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
"%s\n"
"for selected file\n"
"%s\n"
msgstr ""
#: pocheckerconsts.scheckforduplicateuntranslatedvalues
msgid "Check for duplicate untranslated values"
msgstr ""
#: pocheckerconsts.scheckforincompatibleformatarguments
msgid "Check for incompatible format arguments"
msgstr ""
#: pocheckerconsts.scheckformismatchesinuntranslatedstrings
msgid "Check for mismatches in untranslated strings"
msgstr ""
#: pocheckerconsts.scheckmissingidentifiers
msgid "Check missing identifiers"
msgstr ""
#: pocheckerconsts.schecknumberofitems
msgid "Check number of items"
msgstr ""
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr ""
#: pocheckerconsts.scurrentpofile
msgid "Current po-file:"
msgstr ""
#: pocheckerconsts.scurrenttest
msgid "Current Test:"
msgstr ""
#: pocheckerconsts.sduplicatelinenrwithvalue
msgid "[Line %d] %s"
msgstr ""
#: pocheckerconsts.sduplicateoriginals
msgid "The (untranslated) value \"%s\" is used for more than 1 entry:"
msgstr ""
#: pocheckerconsts.serroroncleanup
msgid ""
"An unrecoverable error occurred\n"
"%s\n"
"Please close the program\n"
msgstr ""
#: pocheckerconsts.serroroncreate
msgid ""
"Error creating an instance of TPoFamily:\n"
"%s\n"
msgstr ""
#: pocheckerconsts.serrorsbytest
msgid "Errors / warnings reported by %s for:"
msgstr ""
#: pocheckerconsts.sfindalltranslatedpofiles
msgid "Find all translated po-files"
msgstr ""
#: pocheckerconsts.sguipofilecheckingtool
msgid "GUI Po-file checking tool"
msgstr ""
#: pocheckerconsts.sidentifiernotfoundin
msgid "Identifier [%s] not found in %s"
msgstr ""
#: pocheckerconsts.sincompatibleformatargs
msgid "[Line: %d] Incompatible format() arguments for:"
msgstr ""
#: pocheckerconsts.slineinfilename
msgid "[Line %d] in %s:"
msgstr ""
#: pocheckerconsts.slinenr
msgid "[Line: %d]"
msgstr ""
#: pocheckerconsts.smissingmasteridentifier
msgid "Identifier [%s] found in %s, but it does not exist in %s"
msgstr ""
#: pocheckerconsts.snoerrorsfound
msgid "No errors found"
msgstr ""
#: pocheckerconsts.snotaproperfilename
msgid ""
"Selected filename\n"
"%s\n"
"does not seem to be a proper name for a po-file\n"
msgstr ""
#: pocheckerconsts.snotestselected
msgid "There are no tests selected."
msgstr ""
#: pocheckerconsts.snrerrorsfound
msgid "Found %d errors."
msgstr ""
#: pocheckerconsts.snrofitemsmismatch
msgid "Mismatch in number of items for master and child"
msgstr ""
#: pocheckerconsts.snrofitemsmismatchd
msgid "%s: %d items"
msgstr ""
#: pocheckerconsts.snrwarningsfound
msgid "Found %d warnings."
msgstr ""
#: pocheckerconsts.sopenapofile
msgid "&Open a po-file"
msgstr ""
#: pocheckerconsts.soriginal
msgid "Original"
msgstr ""
#: pocheckerconsts.sresults
msgid "Results"
msgstr ""
#: pocheckerconsts.srunselectedtests
msgid "&Run Selected Tests"
msgstr ""
#: pocheckerconsts.ssavecaption
msgid "Save to file"
msgstr ""
#: pocheckerconsts.ssaveerror
msgid ""
"Error saving file:\n"
"%s\n"
msgstr ""
#: pocheckerconsts.sselectalltests
msgid "Select all tests"
msgstr ""
#: pocheckerconsts.sselecttesttypes
msgid "Select test types"
msgstr ""
#: pocheckerconsts.stotalerrors
msgid "Total errors / warnings found: %d"
msgstr ""
#: pocheckerconsts.stotalwarnings
msgid "Total warnings found: %d"
msgstr ""
#: pocheckerconsts.stranslation
msgid "Translation"
msgstr ""
#: pocheckerconsts.sunselectalltests
msgid "Unselect all tests"
msgstr ""

View File

@ -0,0 +1,203 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: Maxim Ganetsky <maxkill@mail.ru>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
#: pocheckerconsts.rspochecker
msgid "PO File Checker"
msgstr "Проверка файлов PO"
#: pocheckerconsts.scannotfindmaster
msgid ""
"Cannot find master po file:\n"
"%s\n"
"for selected file\n"
"%s\n"
msgstr ""
"Невозможно найти главный файл PO:\n"
"%s\n"
"для выбранного файла\n"
"%s\n"
#: pocheckerconsts.scheckforduplicateuntranslatedvalues
msgid "Check for duplicate untranslated values"
msgstr "Поиск дублирующихся непереведённых строк"
#: pocheckerconsts.scheckforincompatibleformatarguments
msgid "Check for incompatible format arguments"
msgstr "Поиск несовместимых аргументов форматирования"
#: pocheckerconsts.scheckformismatchesinuntranslatedstrings
msgid "Check for mismatches in untranslated strings"
msgstr "Поиск несоответствий непереведённых строк"
#: pocheckerconsts.scheckmissingidentifiers
msgid "Check missing identifiers"
msgstr "Поиск отсутствующих идентификаторов"
#: pocheckerconsts.schecknumberofitems
msgid "Check number of items"
msgstr "Проверка числа строк"
#: pocheckerconsts.scopycaption
msgid "Copy to clipboard"
msgstr "Копировать в буфер обмена"
#: pocheckerconsts.scurrentpofile
msgid "Current po-file:"
msgstr "Текущий файл PO:"
#: pocheckerconsts.scurrenttest
msgid "Current Test:"
msgstr "Текущий тест:"
#: pocheckerconsts.sduplicatelinenrwithvalue
msgid "[Line %d] %s"
msgstr "[Строка %d] %s"
#: pocheckerconsts.sduplicateoriginals
msgid "The (untranslated) value \"%s\" is used for more than 1 entry:"
msgstr "Исходное значение \"%s\" имеется в нескольких элементах:"
#: pocheckerconsts.serroroncleanup
msgid ""
"An unrecoverable error occurred\n"
"%s\n"
"Please close the program\n"
msgstr ""
"Возникла неустранимая ошибка\n"
"%s\n"
"Программу следует закрыть\n"
#: pocheckerconsts.serroroncreate
msgid ""
"Error creating an instance of TPoFamily:\n"
"%s\n"
msgstr ""
"Ошибка создания экземпляра класса TPoFamily:\n"
"%s\n"
#: pocheckerconsts.serrorsbytest
msgid "Errors / warnings reported by %s for:"
msgstr "Ошибки и предупреждения, найденные %s для:"
#: pocheckerconsts.sfindalltranslatedpofiles
msgid "Find all translated po-files"
msgstr "Найти все переведённые файлы PO"
#: pocheckerconsts.sguipofilecheckingtool
msgid "GUI Po-file checking tool"
msgstr "Средство проверки файлов PO"
#: pocheckerconsts.sidentifiernotfoundin
msgid "Identifier [%s] not found in %s"
msgstr "Идентификатор [%s] не найден в %s"
#: pocheckerconsts.sincompatibleformatargs
msgid "[Line: %d] Incompatible format() arguments for:"
msgstr "[Строка: %d] Несовместимые аргументы для Format() в:"
#: pocheckerconsts.slineinfilename
msgid "[Line %d] in %s:"
msgstr "[Строка %d] в %s:"
#: pocheckerconsts.slinenr
msgid "[Line: %d]"
msgstr "[Строка: %d]"
#: pocheckerconsts.smissingmasteridentifier
msgid "Identifier [%s] found in %s, but it does not exist in %s"
msgstr "Идентификатор [%s] найден в %s, но отсутствует в %s"
#: pocheckerconsts.snoerrorsfound
msgid "No errors found"
msgstr "Ошибок не найдено"
#: pocheckerconsts.snotaproperfilename
msgid ""
"Selected filename\n"
"%s\n"
"does not seem to be a proper name for a po-file\n"
msgstr ""
"Выбранное имя файла\n"
"%s\n"
"не выглядит корректно для файла PO\n"
#: pocheckerconsts.snotestselected
msgid "There are no tests selected."
msgstr "Не выбрано ни одного теста."
#: pocheckerconsts.snrerrorsfound
msgid "Found %d errors."
msgstr "Найдено ошибок: %d"
#: pocheckerconsts.snrofitemsmismatch
msgid "Mismatch in number of items for master and child"
msgstr "Несоответствие количества элементов в главном и дочернем файлах"
#: pocheckerconsts.snrofitemsmismatchd
msgid "%s: %d items"
msgstr "%s: %d элементов"
#: pocheckerconsts.snrwarningsfound
msgid "Found %d warnings."
msgstr "Найдено предупреждений: %d"
#: pocheckerconsts.sopenapofile
msgid "&Open a po-file"
msgstr "&Открыть файл PO"
#: pocheckerconsts.soriginal
msgid "Original"
msgstr "Исходная строка"
#: pocheckerconsts.sresults
msgid "Results"
msgstr "Результаты"
#: pocheckerconsts.srunselectedtests
msgid "&Run Selected Tests"
msgstr "&Запустить выбранные тесты"
#: pocheckerconsts.ssavecaption
msgid "Save to file"
msgstr "Сохранить в файл"
#: pocheckerconsts.ssaveerror
msgid ""
"Error saving file:\n"
"%s\n"
msgstr ""
"Ошибка сохранения файла:\n"
"%s\n"
#: pocheckerconsts.sselectalltests
msgid "Select all tests"
msgstr "Выбрать все тесты"
#: pocheckerconsts.sselecttesttypes
msgid "Select test types"
msgstr "Выбор тестов"
#: pocheckerconsts.stotalerrors
msgid "Total errors / warnings found: %d"
msgstr "Всего найдено ошибок и предупреждений: %d"
#: pocheckerconsts.stotalwarnings
msgid "Total warnings found: %d"
msgstr "Всего найдено предупреждений: %d"
#: pocheckerconsts.stranslation
msgid "Translation"
msgstr "Перевод"
#: pocheckerconsts.sunselectalltests
msgid "Unselect all tests"
msgstr "Отменить выбор всех тестов"

View File

@ -20,7 +20,7 @@
<Description Value="Check the validity of translated PO files. <Description Value="Check the validity of translated PO files.
"/> "/>
<Version Major="1"/> <Version Major="1"/>
<Files Count="6"> <Files Count="7">
<Item1> <Item1>
<Filename Value="resultdlg.pp"/> <Filename Value="resultdlg.pp"/>
<UnitName Value="ResultDlg"/> <UnitName Value="ResultDlg"/>
@ -46,7 +46,15 @@
<Filename Value="pocheckermain.lfm"/> <Filename Value="pocheckermain.lfm"/>
<Type Value="LFM"/> <Type Value="LFM"/>
</Item6> </Item6>
<Item7>
<Filename Value="pocheckerconsts.pas"/>
<UnitName Value="pocheckerconsts"/>
</Item7>
</Files> </Files>
<i18n>
<EnableI18N Value="True"/>
<OutDir Value="languages"/>
</i18n>
<Type Value="RunAndDesignTime"/> <Type Value="RunAndDesignTime"/>
<RequiredPkgs Count="3"> <RequiredPkgs Count="3">
<Item1> <Item1>
@ -65,5 +73,8 @@
<PublishOptions> <PublishOptions>
<Version Value="2"/> <Version Value="2"/>
</PublishOptions> </PublishOptions>
<CustomOptions Items="ExternHelp" Version="2">
<_ExternHelp Items="Count"/>
</CustomOptions>
</Package> </Package>
</CONFIG> </CONFIG>

View File

@ -2,20 +2,21 @@
This source is only used to compile and install the package. This source is only used to compile and install the package.
} }
unit PoChecker; unit PoChecker;
interface interface
uses uses
ResultDlg, PoFamilies, pocheckermain, SimplePoFiles, LazarusPackageIntf; ResultDlg, PoFamilies, pocheckermain, SimplePoFiles, pocheckerconsts,
LazarusPackageIntf;
implementation implementation
procedure Register; procedure Register;
begin begin
RegisterUnit('pocheckermain', @pocheckermain.Register); RegisterUnit('pocheckermain', @pocheckermain.Register);
end; end;
initialization initialization
RegisterPackage('PoChecker', @Register); RegisterPackage('PoChecker', @Register);
end. end.

View File

@ -0,0 +1,64 @@
unit pocheckerconsts;
{$mode objfpc}{$H+}
interface
resourcestring
//Main form
rsPoChecker = 'PO File Checker';
sSelectAllTests = 'Select all tests';
sUnSelectAllTests = 'Unselect all tests';
sGUIPoFileCheckingTool = 'GUI Po-file checking tool';
sSelectTestTypes = 'Select test types';
sOpenAPoFile = '&Open a po-file';
sRunSelectedTests = '&Run Selected Tests';
sCannotFindMaster = 'Cannot find master po file:' + LineEnding + '%s' + LineEnding + 'for selected file' + LineEnding + '%s';
sNotAProperFileName = 'Selected filename' + LineEnding + '%s' + LineEnding + 'does not seem to be a proper name for a po-file';
sErrorOnCreate = 'Error creating an instance of TPoFamily:' + LineEnding + '%s';
sErrorOnCleanup = 'An unrecoverable error occurred' + LineEnding + '%s' + LineEnding + 'Please close the program';
sTotalErrors = 'Total errors / warnings found: %d';
sTotalWarnings = 'Total warnings found: %d';
sNoErrorsFound = 'No errors found';
sCurrentTest = 'Current Test:';
sCurrentPoFile = 'Current po-file:';
sNoTestSelected = 'There are no tests selected.';
//Result form
sSaveError = 'Error saving file:' + LineEnding + '%s';
sSaveCaption = 'Save to file';
sResults = 'Results';
sCopyCaption = 'Copy to clipboard';
//PoFamiles
sOriginal = 'Original';
sTranslation = 'Translation';
sErrorsByTest = 'Errors / warnings reported by %s for:';
sCheckNumberOfItems = 'Check number of items';
sCheckForIncompatibleFormatArguments = 'Check for incompatible format '
+'arguments';
sCheckMissingIdentifiers = 'Check missing identifiers';
sCheckForMismatchesInUntranslatedStrings = 'Check for mismatches in '
+'untranslated strings';
sCheckForDuplicateUntranslatedValues = 'Check for duplicate untranslated '
+'values';
sFindAllTranslatedPoFiles = 'Find all translated po-files';
sIncompatibleFormatArgs = '[Line: %d] Incompatible format() arguments for:' ;
sNrErrorsFound = 'Found %d errors.';
sNrWarningsFound = 'Found %d warnings.';
sLineInFileName = '[Line %d] in %s:';
sIdentifierNotFoundIn = 'Identifier [%s] not found in %s';
sMissingMasterIdentifier = 'Identifier [%s] found in %s, but it does not exist in %s';
sLineNr = '[Line: %d]';
sNrOfItemsMisMatch = 'Mismatch in number of items for master and child';
sNrOfItemsMismatchD = '%s: %d items';
sDuplicateOriginals = 'The (untranslated) value "%s" is used for more than 1 entry:';
sDuplicateLineNrWithValue = '[Line %d] %s';
implementation
end.

View File

@ -15,8 +15,8 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideTop.Control = SelectTestLabel AnchorSideTop.Control = SelectTestLabel
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 201 Left = 201
Height = 169 Height = 150
Top = 33 Top = 28
Width = 373 Width = 373
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Top = 6 BorderSpacing.Top = 6
@ -28,9 +28,9 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideLeft.Control = OpenBtn AnchorSideLeft.Control = OpenBtn
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
Left = 201 Left = 201
Height = 19 Height = 14
Top = 8 Top = 8
Width = 144 Width = 97
BorderSpacing.Left = 9 BorderSpacing.Left = 9
Caption = 'Select test types' Caption = 'Select test types'
Font.Style = [fsBold] Font.Style = [fsBold]
@ -38,10 +38,16 @@ object PoCheckerForm: TPoCheckerForm
ParentFont = False ParentFont = False
end end
object OpenBtn: TBitBtn object OpenBtn: TBitBtn
AnchorSideLeft.Control = RunBtn
AnchorSideRight.Control = RunBtn
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = RunBtn
Left = 8 Left = 8
Height = 63 Height = 63
Top = 33 Top = 33
Width = 184 Width = 184
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Bottom = 6
Caption = '&Open a po-file' Caption = '&Open a po-file'
Glyph.Data = { Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100 36040000424D3604000000000000360000002800000010000000100000000100
@ -83,16 +89,12 @@ object PoCheckerForm: TPoCheckerForm
TabOrder = 1 TabOrder = 1
end end
object RunBtn: TBitBtn object RunBtn: TBitBtn
AnchorSideLeft.Control = OpenBtn
AnchorSideTop.Control = OpenBtn
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = OpenBtn
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 8 Left = 8
Height = 63 Height = 63
Top = 102 Top = 102
Width = 184 Width = 184
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = '&Run Selected Tests' Caption = '&Run Selected Tests'
Enabled = False Enabled = False
@ -112,9 +114,9 @@ object PoCheckerForm: TPoCheckerForm
TabOrder = 3 TabOrder = 3
object CurTestHeaderLabel: TLabel object CurTestHeaderLabel: TLabel
Left = 8 Left = 8
Height = 19 Height = 14
Top = 8 Top = 8
Width = 96 Width = 66
Caption = 'Current Test:' Caption = 'Current Test:'
ParentColor = False ParentColor = False
end end
@ -123,9 +125,9 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideTop.Control = CurTestHeaderLabel AnchorSideTop.Control = CurTestHeaderLabel
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 8 Left = 8
Height = 19 Height = 14
Top = 27 Top = 22
Width = 111 Width = 75
Caption = 'Current po-file:' Caption = 'Current po-file:'
ParentColor = False ParentColor = False
end end
@ -134,10 +136,10 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CurTestHeaderLabel AnchorSideTop.Control = CurTestHeaderLabel
AnchorSideTop.Side = asrCenter AnchorSideTop.Side = asrCenter
Left = 110 Left = 80
Height = 19 Height = 14
Top = 8 Top = 8
Width = 95 Width = 64
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'CurTestLabel' Caption = 'CurTestLabel'
ParentColor = False ParentColor = False
@ -147,10 +149,10 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CurPoHeaderLabel AnchorSideTop.Control = CurPoHeaderLabel
AnchorSideTop.Side = asrCenter AnchorSideTop.Side = asrCenter
Left = 125 Left = 89
Height = 19 Height = 14
Top = 27 Top = 22
Width = 82 Width = 55
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'CurPoLabel' Caption = 'CurPoLabel'
ParentColor = False ParentColor = False
@ -160,7 +162,7 @@ object PoCheckerForm: TPoCheckerForm
Left = 8 Left = 8
Height = 24 Height = 24
Top = 232 Top = 232
Width = 171 Width = 152
Anchors = [akLeft, akBottom] Anchors = [akLeft, akBottom]
Caption = 'No errors found' Caption = 'No errors found'
Font.Color = clGreen Font.Color = clGreen
@ -174,15 +176,27 @@ object PoCheckerForm: TPoCheckerForm
AnchorSideTop.Control = TestListBox AnchorSideTop.Control = TestListBox
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 201 Left = 201
Height = 23 Height = 17
Top = 208 Top = 184
Width = 97 Width = 61
BorderSpacing.Top = 6 BorderSpacing.Top = 6
Caption = 'Select All' Caption = 'Select All'
Enabled = False Enabled = False
OnClick = SelectAllCheckBoxClick OnClick = SelectAllCheckBoxClick
TabOrder = 4 TabOrder = 4
end end
object FindAllPOsCheckBox: TCheckBox
AnchorSideLeft.Control = SelectAllCheckBox
AnchorSideTop.Control = SelectAllCheckBox
AnchorSideTop.Side = asrBottom
Left = 201
Height = 17
Top = 207
Width = 142
BorderSpacing.Top = 6
Caption = 'Find all translated PO files'
TabOrder = 5
end
object OpenDialog: TOpenDialog object OpenDialog: TOpenDialog
Filter = 'po-files (*.po)|*.po|all files|*' Filter = 'po-files (*.po)|*.po|all files|*'
Options = [ofFileMustExist, ofEnableSizing, ofViewDetail] Options = [ofFileMustExist, ofEnableSizing, ofViewDetail]

View File

@ -26,13 +26,14 @@ interface
uses uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls, LCLProc, CheckLst, Buttons, ExtCtrls, IDEIntf, MenuIntf, StdCtrls, LCLProc, CheckLst, Buttons, ExtCtrls, IDEIntf, MenuIntf,
SimplePoFiles, PoFamilies, ResultDlg; SimplePoFiles, PoFamilies, ResultDlg, pocheckerconsts;
type type
{ TPoCheckerForm } { TPoCheckerForm }
TPoCheckerForm = class(TForm) TPoCheckerForm = class(TForm)
FindAllPOsCheckBox: TCheckBox;
SelectAllCheckBox: TCheckBox; SelectAllCheckBox: TCheckBox;
CurTestHeaderLabel: TLabel; CurTestHeaderLabel: TLabel;
CurPoHeaderLabel: TLabel; CurPoHeaderLabel: TLabel;
@ -67,20 +68,6 @@ type
end; end;
resourcestring
rsPoChecker = 'PO File Checker';
sSelectAllTests = 'Select all tests';
sUnSelectAllTests = 'Unselect all tests';
sCannotFindMaster = 'Cannot find master po file:' + LineEnding + '%s' + LineEnding + 'for selected file' + LineEnding + '%s';
sNotAProperFileName = 'Selected filename' + LineEnding + '%s' + LineEnding + 'does not seem to be a proper name for a po-file';
sErrorOnCreate = 'Error creating an instance of TPoFamily:' + LineEnding + '%s';
sErrorOnCleanup = 'An unrecoverable error occurred' + LineEnding + '%s' + LineEnding + 'Please close the program';
sTotalErrors = 'Total errors / warnings found: %d';
sTotalWarnings = 'Total warnings found: %d';
//sNoErrorsFound = 'No errors found.';
sNoTestSelected = 'There are no tests selected.';
var var
PoCheckerForm: TPoCheckerForm; PoCheckerForm: TPoCheckerForm;
@ -102,9 +89,17 @@ end;
procedure TPoCheckerForm.FormCreate(Sender: TObject); procedure TPoCheckerForm.FormCreate(Sender: TObject);
begin begin
Caption := sGUIPoFileCheckingTool;
SelectTestLabel.Caption := sSelectTestTypes;
FindAllPOsCheckBox.Caption := sFindAllTranslatedPoFiles;
OpenBtn.Caption := sOpenAPoFile;
RunBtn.Caption := sRunSelectedTests;
NoErrLabel.Caption := sNoErrorsFound;
FillTestListBox; FillTestListBox;
ClearAndDisableStatusPanel; ClearAndDisableStatusPanel;
NoErrLabel.Visible := False; NoErrLabel.Visible := False;
CurTestHeaderLabel.Caption := sCurrentTest;
CurPoHeaderLabel.Caption := sCurrentPoFile;
end; end;
procedure TPoCheckerForm.FormDestroy(Sender: TObject); procedure TPoCheckerForm.FormDestroy(Sender: TObject);
@ -168,8 +163,16 @@ procedure TPoCheckerForm.FillTestListBox;
var var
Opt: TPoTestOption; Opt: TPoTestOption;
begin begin
for Opt := Low(PoTestOptionNames) to High(PoTestOptionNames) do for Opt := Low(PoTestOptionNames) to Pred(High(PoTestOptionNames)) do
TestListBox.Items.Add(PoTestOptionNames[Opt]); case Opt of
ptoCheckNrOfItems: TestListBox.Items.Add(sCheckNumberOfItems);
ptoCheckFormatArgs: TestListBox.Items.Add(sCheckForIncompatibleFormatArguments);
ptoCheckMissingIdentifiers: TestListBox.Items.Add(sCheckMissingIdentifiers);
ptoCheckMismatchedOriginals: TestListBox.Items.Add(sCheckForMismatchesInUntranslatedStrings);
ptoCheckDuplicateOriginals: TestListBox.Items.Add(sCheckForDuplicateUntranslatedValues);
else
TestListBox.Items.Add(PoTestOptionNames[Opt]);
end;
SelectAllCheckBox.Caption := sSelectAllTests; SelectAllCheckBox.Caption := sSelectAllTests;
end; end;
@ -179,7 +182,7 @@ var
Index: Integer; Index: Integer;
begin begin
Result := []; Result := [];
for Opt := Low(TpoTestOption) to High(TPoTestOption) do for Opt := Low(TpoTestOption) to Pred(High(TPoTestOption)) do
begin begin
Index := Ord(Opt); Index := Ord(Opt);
if (Index < TestListBox.Count) then if (Index < TestListBox.Count) then
@ -188,6 +191,8 @@ begin
Result := Result + [Opt]; Result := Result + [Opt];
end; end;
end; end;
if FindAllPOsCheckBox.Checked then
Result := Result + [High(TPoTestOption)];
end; end;
procedure TPoCheckerForm.ShowError(const Msg: String); procedure TPoCheckerForm.ShowError(const Msg: String);

View File

@ -9,7 +9,7 @@ interface
uses uses
Classes, SysUtils, LCLProc, FileUtil, StringHashList, Classes, SysUtils, LCLProc, FileUtil, StringHashList,
//{$IFDEF UNIX}{$IFNDEF DisableCWString}, cwstring{$ENDIF}{$ENDIF}, //{$IFDEF UNIX}{$IFNDEF DisableCWString}, cwstring{$ENDIF}{$ENDIF},
SimplePoFiles; SimplePoFiles, pocheckerconsts;
Type Type
@ -99,37 +99,18 @@ const
Divider = '-------------------------------------------------------'; Divider = '-------------------------------------------------------';
resourcestring
sOriginal = 'Original';
sTranslation = 'Translation';
sErrorsByTest = 'Errors / warnings reported by %s for:';
sCheckFormatArgs = 'CheckFormatArgs';
sCheckMissingIdentifiers = 'CheckMissingIdentifiers';
sCheckNrOfItems = 'CheckNrOfItems';
sCheckMismatchedOriginals = 'CheckMismatchedOriginals';
sCheckDuplicateOriginals = 'CheckDuplicateOriginals';
sIncompatibleFormatArgs = '[Line: %d] Incompatible format() arguments for:' ;
sNrErrorsFound = 'Found %d errors.';
sNrWarningsFound = 'Found %d warnings.';
sLineInFileName = '[Line %d] in %s:';
sIdentifierNotFoundIn = 'Identifier [%s] not found in %s';
sMissingMasterIdentifier = 'Identifier [%s] found in %s, but it does not exist in %s';
sLineNr = '[Line: %d]';
sFormatArgsID = '%s %s'; sFormatArgsID = '%s %s';
sFormatArgsValues = '%s%s" (= %s)'; sFormatArgsValues = '%s%s" (= %s)';
sNrOfItemsMisMatch = 'Mismatch in number of items for master and child';
sNrOfItemsMismatchM = '%s: %d items';
sNrOfItemsMismatchC = '%s: %d items';
sMismatchOriginalsID = '%s'; sMismatchOriginalsID = '%s';
sMismatchOriginalsM = '%s: %s'; sMismatchOriginalsM = '%s: %s';
sMismatchOriginalsC = '%s: %s'; sMismatchOriginalsC = '%s: %s';
sDuplicateOriginals = 'The (untranslated) value "%s" is used for more than 1 entry:'; sCheckFormatArgs = 'CheckFormatArgs';
sDuplicateLineNrWithValue = '[Line %d] %s'; sCheckNrOfItems = 'CheckNrOfItems';
sCheckMissingIdentifiers = 'CheckMissingIdentifiers';
sCheckMismatchedOriginals = 'CheckMismatchedOriginals';
sCheckDuplicateOriginals = 'CheckDuplicateOriginals';
//Helper functions //Helper functions
@ -338,8 +319,8 @@ begin
ErrorLog.Add(Divider); ErrorLog.Add(Divider);
ErrorLog.Add(''); ErrorLog.Add('');
ErrorLog.Add(sNrOfItemsMismatch); ErrorLog.Add(sNrOfItemsMismatch);
ErrorLog.Add(Format(sNrOfItemsMismatchM,[ShortMasterName,FMaster.Count])); ErrorLog.Add(Format(sNrOfItemsMismatchD,[ShortMasterName,FMaster.Count]));
ErrorLog.Add(Format(sNrOfItemsMismatchC,[ShortChildName,FChild.Count])); ErrorLog.Add(Format(sNrOfItemsMismatchD,[ShortChildName,FChild.Count]));
ErrorLog.Add(Divider); ErrorLog.Add(Divider);
ErrorLog.Add(''); ErrorLog.Add('');
ErrorLog.Add(''); ErrorLog.Add('');

View File

@ -27,10 +27,10 @@ object ResultDlgForm: TResultDlgForm
object CloseBtn: TBitBtn object CloseBtn: TBitBtn
AnchorSideRight.Control = Panel1 AnchorSideRight.Control = Panel1
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 661 Left = 643
Height = 26 Height = 26
Top = 12 Top = 12
Width = 71 Width = 89
Anchors = [akRight] Anchors = [akRight]
AutoSize = True AutoSize = True
BorderSpacing.Right = 10 BorderSpacing.Right = 10
@ -41,10 +41,10 @@ object ResultDlgForm: TResultDlgForm
end end
object SaveBtn: TBitBtn object SaveBtn: TBitBtn
AnchorSideRight.Control = CloseBtn AnchorSideRight.Control = CloseBtn
Left = 553 Left = 534
Height = 26 Height = 26
Top = 12 Top = 12
Width = 98 Width = 99
Anchors = [akRight] Anchors = [akRight]
AutoSize = True AutoSize = True
BorderSpacing.Around = 10 BorderSpacing.Around = 10
@ -90,10 +90,10 @@ object ResultDlgForm: TResultDlgForm
end end
object CopyBtn: TBitBtn object CopyBtn: TBitBtn
AnchorSideRight.Control = SaveBtn AnchorSideRight.Control = SaveBtn
Left = 416 Left = 395
Height = 26 Height = 26
Top = 12 Top = 12
Width = 127 Width = 129
Anchors = [akRight] Anchors = [akRight]
AutoSize = True AutoSize = True
BorderSpacing.Around = 10 BorderSpacing.Around = 10
@ -668,6 +668,16 @@ object ResultDlgForm: TResultDlgForm
ReadOnly = True ReadOnly = True
ScrollBars = ssAutoBoth ScrollBars = ssAutoBoth
BracketHighlightStyle = sbhsBoth BracketHighlightStyle = sbhsBoth
BracketMatchColor.Background = clNone
BracketMatchColor.Foreground = clNone
BracketMatchColor.Style = [fsBold]
FoldedCodeColor.Background = clNone
FoldedCodeColor.Foreground = clGray
FoldedCodeColor.FrameColor = clGray
MouseLinkColor.Background = clNone
MouseLinkColor.Foreground = clBlue
LineHighlightColor.Background = clNone
LineHighlightColor.Foreground = clNone
inline SynLeftGutterPartList1: TSynGutterPartList inline SynLeftGutterPartList1: TSynGutterPartList
object SynGutterLineNumber1: TSynGutterLineNumber object SynGutterLineNumber1: TSynGutterLineNumber
Width = 17 Width = 17

View File

@ -6,7 +6,8 @@ interface
uses uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
ExtCtrls, Buttons, ClipBrd, LCLType, LCLProc, SynEdit, SynHighlighterPo; ExtCtrls, Buttons, ClipBrd, LCLType, LCLProc, SynEdit, SynHighlighterPo,
pocheckerconsts;
type type
@ -38,16 +39,11 @@ implementation
{$R *.lfm} {$R *.lfm}
ResourceString
sSaveError = 'Error saving file:' + LineEnding + '%s';
sSaveCaption = 'Save to file';
sCopyCaption = 'Copy to clipboard';
{ TResultDlgForm } { TResultDlgForm }
procedure TResultDlgForm.FormCreate(Sender: TObject); procedure TResultDlgForm.FormCreate(Sender: TObject);
begin begin
Caption := sResults;
LogMemo.Lines.Clear; LogMemo.Lines.Clear;
LogMemo.Align := alClient; LogMemo.Align := alClient;
FLog := TStringList.Create; FLog := TStringList.Create;