mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-03 23:19:26 +01:00 
			
		
		
		
	PoChecker: refactor.
- Drop the listbox for translated po-files - Now possible to test multiple master po-files - Language filter controls setting of "Find All Translated PoFiles" - Regenerated language files. git-svn-id: trunk@46475 -
This commit is contained in:
		
							parent
							
								
									dd86099d37
								
							
						
					
					
						commit
						7c9f2ba5c3
					
				@ -69,7 +69,7 @@
 | 
			
		||||
        <PackageName Value="LCL"/>
 | 
			
		||||
      </Item2>
 | 
			
		||||
    </RequiredPackages>
 | 
			
		||||
    <Units Count="8">
 | 
			
		||||
    <Units Count="9">
 | 
			
		||||
      <Unit0>
 | 
			
		||||
        <Filename Value="pochecker.lpr"/>
 | 
			
		||||
        <IsPartOfProject Value="True"/>
 | 
			
		||||
@ -118,6 +118,11 @@
 | 
			
		||||
        <IsPartOfProject Value="True"/>
 | 
			
		||||
        <UnitName Value="PoCheckerSettings"/>
 | 
			
		||||
      </Unit7>
 | 
			
		||||
      <Unit8>
 | 
			
		||||
        <Filename Value="..\pofamilylists.pp"/>
 | 
			
		||||
        <IsPartOfProject Value="True"/>
 | 
			
		||||
        <UnitName Value="PoFamilyLists"/>
 | 
			
		||||
      </Unit8>
 | 
			
		||||
    </Units>
 | 
			
		||||
  </ProjectOptions>
 | 
			
		||||
  <CompilerOptions>
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ uses
 | 
			
		||||
  {$ENDIF}{$ENDIF}
 | 
			
		||||
  Interfaces, // this includes the LCL widgetset
 | 
			
		||||
  Forms, pocheckermain, pofamilies, resultdlg, simplepofiles, pocheckerconsts,
 | 
			
		||||
  graphstat, pocheckersettings;
 | 
			
		||||
  graphstat, pocheckersettings, pofamilylists;
 | 
			
		||||
 | 
			
		||||
{$R *.res}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -99,9 +99,11 @@ msgstr ""
 | 
			
		||||
msgid "Errors / warnings reported by %s for:"
 | 
			
		||||
msgstr "Chyby / varování nahlášené %s pro:"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfindalltranslatedpofiles
 | 
			
		||||
msgid "Find all translated po-files"
 | 
			
		||||
msgstr "Najít všechny přeložené po soubory"
 | 
			
		||||
#: pocheckerconsts.sfilesnotfoundandremoved
 | 
			
		||||
msgid ""
 | 
			
		||||
"The follwing files were not foud and removed from the list:\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfuzzy
 | 
			
		||||
msgid "Fuzzy"
 | 
			
		||||
@ -144,15 +146,9 @@ msgstr "Identifikátor [%s] nalezen v %s, ale neexistuje v %s"
 | 
			
		||||
msgid "No errors found"
 | 
			
		||||
msgstr "Žádné chyby nenalezeny"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotaproperfilename
 | 
			
		||||
msgid ""
 | 
			
		||||
"Selected filename\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"does not seem to be a proper name for a po-file\n"
 | 
			
		||||
#: pocheckerconsts.snofileslefttocheck
 | 
			
		||||
msgid "There are no files left to check."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Vybraný název souboru\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"nevypadá jako korektní jméno po souboru\n"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotestselected
 | 
			
		||||
msgid "There are no tests selected."
 | 
			
		||||
 | 
			
		||||
@ -72,8 +72,7 @@ msgstr "[Zeile %d] %s"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sduplicateoriginals
 | 
			
		||||
msgid "The (untranslated) value \"%s\" is used for more than 1 entry:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Der (nicht übersetzte) Wert \"%s\" wird für mehr als 1 Eintrag verwendet:"
 | 
			
		||||
msgstr "Der (nicht übersetzte) Wert \"%s\" wird für mehr als 1 Eintrag verwendet:"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.serroroncleanup
 | 
			
		||||
msgid ""
 | 
			
		||||
@ -97,9 +96,11 @@ msgstr ""
 | 
			
		||||
msgid "Errors / warnings reported by %s for:"
 | 
			
		||||
msgstr "Fehler / Warnungen gemeldet von %s für:"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfindalltranslatedpofiles
 | 
			
		||||
msgid "Find all translated po-files"
 | 
			
		||||
msgstr "Alle übersetzten po-Dateien finden"
 | 
			
		||||
#: pocheckerconsts.sfilesnotfoundandremoved
 | 
			
		||||
msgid ""
 | 
			
		||||
"The follwing files were not foud and removed from the list:\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfuzzy
 | 
			
		||||
msgid "Fuzzy"
 | 
			
		||||
@ -141,16 +142,9 @@ msgstr "Bezeichner [%s] gefunden in %s, aber er existiert nicht in %s"
 | 
			
		||||
msgid "No errors found"
 | 
			
		||||
msgstr "Keine Fehler gefunden"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotaproperfilename
 | 
			
		||||
msgid ""
 | 
			
		||||
"Selected filename\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"does not seem to be a proper name for a po-file\n"
 | 
			
		||||
#: pocheckerconsts.snofileslefttocheck
 | 
			
		||||
msgid "There are no files left to check."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Gewählter Dateiname\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"sieht nicht wie ein geeigneter Name für eine po-file\n"
 | 
			
		||||
" aus\n"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotestselected
 | 
			
		||||
msgid "There are no tests selected."
 | 
			
		||||
@ -325,3 +319,4 @@ msgstr "Abwählen"
 | 
			
		||||
#: pocheckerconsts.suntranslated
 | 
			
		||||
msgid "Untranslated"
 | 
			
		||||
msgstr "Nicht übersetzt"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -95,9 +95,11 @@ msgstr ""
 | 
			
		||||
msgid "Errors / warnings reported by %s for:"
 | 
			
		||||
msgstr "Errores / advertencias reportadas por %s para:"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfindalltranslatedpofiles
 | 
			
		||||
msgid "Find all translated po-files"
 | 
			
		||||
msgstr "Encontrar todos los archivos PO traducidos"
 | 
			
		||||
#: pocheckerconsts.sfilesnotfoundandremoved
 | 
			
		||||
msgid ""
 | 
			
		||||
"The follwing files were not foud and removed from the list:\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfuzzy
 | 
			
		||||
msgid "Fuzzy"
 | 
			
		||||
@ -141,15 +143,9 @@ msgstr "Identificador [%s] se encuentra en %s, pero no existe en %s"
 | 
			
		||||
msgid "No errors found"
 | 
			
		||||
msgstr "No se encontraron errores"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotaproperfilename
 | 
			
		||||
msgid ""
 | 
			
		||||
"Selected filename\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"does not seem to be a proper name for a po-file\n"
 | 
			
		||||
#: pocheckerconsts.snofileslefttocheck
 | 
			
		||||
msgid "There are no files left to check."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Seleccionado archivo\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"no parece ser un nombre apropiado para un archivo po\n"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotestselected
 | 
			
		||||
msgid "There are no tests selected."
 | 
			
		||||
 | 
			
		||||
@ -97,9 +97,11 @@ msgstr ""
 | 
			
		||||
msgid "Errors / warnings reported by %s for:"
 | 
			
		||||
msgstr "A(z) %s hibákat / figyelmeztetéseket jelzett ezzel kapcsolatban:"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfindalltranslatedpofiles
 | 
			
		||||
msgid "Find all translated po-files"
 | 
			
		||||
msgstr "Az összes lefordított po-fájl megkeresése"
 | 
			
		||||
#: pocheckerconsts.sfilesnotfoundandremoved
 | 
			
		||||
msgid ""
 | 
			
		||||
"The follwing files were not foud and removed from the list:\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfuzzy
 | 
			
		||||
msgid "Fuzzy"
 | 
			
		||||
@ -141,15 +143,9 @@ msgstr "A(z) [%s] azonosító megtalálható itt: %s, de nem található meg itt
 | 
			
		||||
msgid "No errors found"
 | 
			
		||||
msgstr "Nincsenek hibák"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotaproperfilename
 | 
			
		||||
msgid ""
 | 
			
		||||
"Selected filename\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"does not seem to be a proper name for a po-file\n"
 | 
			
		||||
#: pocheckerconsts.snofileslefttocheck
 | 
			
		||||
msgid "There are no files left to check."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"A választott fájlnév\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"nem tűnik megfelelő névnek egy po-fájl számára\n"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotestselected
 | 
			
		||||
msgid "There are no tests selected."
 | 
			
		||||
 | 
			
		||||
@ -97,9 +97,11 @@ msgstr ""
 | 
			
		||||
msgid "Errors / warnings reported by %s for:"
 | 
			
		||||
msgstr "Errori / avvertimenti riportati da %s per:"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfindalltranslatedpofiles
 | 
			
		||||
msgid "Find all translated po-files"
 | 
			
		||||
msgstr "Trova tutti i file po tradotti"
 | 
			
		||||
#: pocheckerconsts.sfilesnotfoundandremoved
 | 
			
		||||
msgid ""
 | 
			
		||||
"The follwing files were not foud and removed from the list:\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfuzzy
 | 
			
		||||
msgid "Fuzzy"
 | 
			
		||||
@ -141,15 +143,9 @@ msgstr "Identificatore [%s] trovato in %s, ma inesistente in %s"
 | 
			
		||||
msgid "No errors found"
 | 
			
		||||
msgstr "Nessun errore riscontrato"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotaproperfilename
 | 
			
		||||
msgid ""
 | 
			
		||||
"Selected filename\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"does not seem to be a proper name for a po-file\n"
 | 
			
		||||
#: pocheckerconsts.snofileslefttocheck
 | 
			
		||||
msgid "There are no files left to check."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Il nome selezionato\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"non sembra un nome corretto per un file po\n"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotestselected
 | 
			
		||||
msgid "There are no tests selected."
 | 
			
		||||
 | 
			
		||||
@ -97,9 +97,11 @@ msgstr ""
 | 
			
		||||
msgid "Errors / warnings reported by %s for:"
 | 
			
		||||
msgstr "以下のファイルに対する %s によるエラー/警告の結果:"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfindalltranslatedpofiles
 | 
			
		||||
msgid "Find all translated po-files"
 | 
			
		||||
msgstr "翻訳されたすべての po ファイルを検査する"
 | 
			
		||||
#: pocheckerconsts.sfilesnotfoundandremoved
 | 
			
		||||
msgid ""
 | 
			
		||||
"The follwing files were not foud and removed from the list:\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfuzzy
 | 
			
		||||
msgid "Fuzzy"
 | 
			
		||||
@ -141,15 +143,9 @@ msgstr "識別子 [%s] が %s 内で見つかりましたが、%s 内には存
 | 
			
		||||
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"
 | 
			
		||||
#: pocheckerconsts.snofileslefttocheck
 | 
			
		||||
msgid "There are no files left to check."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"選択されたファイル\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"は、適切な po ファイル名ではないようです\n"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotestselected
 | 
			
		||||
msgid "There are no tests selected."
 | 
			
		||||
 | 
			
		||||
@ -97,9 +97,11 @@ msgstr ""
 | 
			
		||||
msgid "Errors / warnings reported by %s for:"
 | 
			
		||||
msgstr "%s praneštos klaidos/perspėjimai apie:"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfindalltranslatedpofiles
 | 
			
		||||
msgid "Find all translated po-files"
 | 
			
		||||
msgstr "Rasti visus išverstus PO failus"
 | 
			
		||||
#: pocheckerconsts.sfilesnotfoundandremoved
 | 
			
		||||
msgid ""
 | 
			
		||||
"The follwing files were not foud and removed from the list:\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfuzzy
 | 
			
		||||
msgid "Fuzzy"
 | 
			
		||||
@ -143,15 +145,9 @@ msgstr "Identifikatorių [%s] turi „%s“, tačiau jo neturi „%s“"
 | 
			
		||||
msgid "No errors found"
 | 
			
		||||
msgstr "Klaidų nerasta"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotaproperfilename
 | 
			
		||||
msgid ""
 | 
			
		||||
"Selected filename\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"does not seem to be a proper name for a po-file\n"
 | 
			
		||||
#: pocheckerconsts.snofileslefttocheck
 | 
			
		||||
msgid "There are no files left to check."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Parinktas failo pavadinimas\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"nepanašu kad tai būtų tinkamas pavadinimas PO failui\n"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotestselected
 | 
			
		||||
msgid "There are no tests selected."
 | 
			
		||||
 | 
			
		||||
@ -78,8 +78,10 @@ msgstr ""
 | 
			
		||||
msgid "Errors / warnings reported by %s for:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfindalltranslatedpofiles
 | 
			
		||||
msgid "Find all translated po-files"
 | 
			
		||||
#: pocheckerconsts.sfilesnotfoundandremoved
 | 
			
		||||
msgid ""
 | 
			
		||||
"The follwing files were not foud and removed from the list:\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfuzzy
 | 
			
		||||
@ -122,11 +124,8 @@ msgstr ""
 | 
			
		||||
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"
 | 
			
		||||
#: pocheckerconsts.snofileslefttocheck
 | 
			
		||||
msgid "There are no files left to check."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotestselected
 | 
			
		||||
 | 
			
		||||
@ -96,9 +96,11 @@ msgstr ""
 | 
			
		||||
msgid "Errors / warnings reported by %s for:"
 | 
			
		||||
msgstr "Erros / avisos reportados por %s para:"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfindalltranslatedpofiles
 | 
			
		||||
msgid "Find all translated po-files"
 | 
			
		||||
msgstr "Localizar todos os arquivos po traduzidos"
 | 
			
		||||
#: pocheckerconsts.sfilesnotfoundandremoved
 | 
			
		||||
msgid ""
 | 
			
		||||
"The follwing files were not foud and removed from the list:\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfuzzy
 | 
			
		||||
msgid "Fuzzy"
 | 
			
		||||
@ -141,15 +143,9 @@ msgstr "Identificador [%s] encontrado em %s, mas inexistente em %s"
 | 
			
		||||
msgid "No errors found"
 | 
			
		||||
msgstr "Nenhum erro encontrado"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotaproperfilename
 | 
			
		||||
msgid ""
 | 
			
		||||
"Selected filename\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"does not seem to be a proper name for a po-file\n"
 | 
			
		||||
#: pocheckerconsts.snofileslefttocheck
 | 
			
		||||
msgid "There are no files left to check."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Nome de arquivo selecionado\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"parece não ser um nome apropriado para um arquivo PO\n"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotestselected
 | 
			
		||||
msgid "There are no tests selected."
 | 
			
		||||
 | 
			
		||||
@ -95,9 +95,11 @@ msgstr ""
 | 
			
		||||
msgid "Errors / warnings reported by %s for:"
 | 
			
		||||
msgstr "Ошибки и предупреждения, найденные %s для:"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfindalltranslatedpofiles
 | 
			
		||||
msgid "Find all translated po-files"
 | 
			
		||||
msgstr "Найти все переведённые файлы PO"
 | 
			
		||||
#: pocheckerconsts.sfilesnotfoundandremoved
 | 
			
		||||
msgid ""
 | 
			
		||||
"The follwing files were not foud and removed from the list:\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfuzzy
 | 
			
		||||
msgid "Fuzzy"
 | 
			
		||||
@ -140,15 +142,9 @@ msgstr "Идентификатор [%s] найден в %s, но отсутст
 | 
			
		||||
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"
 | 
			
		||||
#: pocheckerconsts.snofileslefttocheck
 | 
			
		||||
msgid "There are no files left to check."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Выбранное имя файла\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"не выглядит корректно для файла PO\n"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotestselected
 | 
			
		||||
msgid "There are no tests selected."
 | 
			
		||||
 | 
			
		||||
@ -94,9 +94,11 @@ msgstr ""
 | 
			
		||||
msgid "Errors / warnings reported by %s for:"
 | 
			
		||||
msgstr "Помилки / попередження звітовані %s для:"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfindalltranslatedpofiles
 | 
			
		||||
msgid "Find all translated po-files"
 | 
			
		||||
msgstr "Знайти всі перекладені po-файли"
 | 
			
		||||
#: pocheckerconsts.sfilesnotfoundandremoved
 | 
			
		||||
msgid ""
 | 
			
		||||
"The follwing files were not foud and removed from the list:\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.sfuzzy
 | 
			
		||||
msgid "Fuzzy"
 | 
			
		||||
@ -140,15 +142,9 @@ msgstr "Ідентифікатор [%s] знайдений в %s, але він
 | 
			
		||||
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"
 | 
			
		||||
#: pocheckerconsts.snofileslefttocheck
 | 
			
		||||
msgid "There are no files left to check."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Вибраний файл\n"
 | 
			
		||||
"%s\n"
 | 
			
		||||
"схоже не є вірним іменем для po-файлу\n"
 | 
			
		||||
 | 
			
		||||
#: pocheckerconsts.snotestselected
 | 
			
		||||
msgid "There are no tests selected."
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,9 @@ resourcestring
 | 
			
		||||
  sUnselectListBox = 'Unselect';
 | 
			
		||||
  sAllLanguages = 'All Languages';
 | 
			
		||||
  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';
 | 
			
		||||
  //sNotAProperFileName = 'Selected filename' + LineEnding + '%s' + LineEnding + 'does not seem to be a proper name for a po-file';
 | 
			
		||||
  sFilesNotFoundAndRemoved = 'The follwing files were not foud and removed from the list:' + LineEnding + '%s';
 | 
			
		||||
  sNoFilesLeftToCheck = 'There are no files left to check.';
 | 
			
		||||
  sErrorOnCreate = 'Error creating an instance of TPoFamily:' + LineEnding + '%s';
 | 
			
		||||
  sErrorOnCleanup = 'An unrecoverable error occurred' + LineEnding + '%s' + LineEnding + 'Please close the program';
 | 
			
		||||
 | 
			
		||||
@ -69,7 +71,7 @@ resourcestring
 | 
			
		||||
  sCheckForDuplicateUntranslatedValues = 'Check for duplicate untranslated '
 | 
			
		||||
    +'values';
 | 
			
		||||
  sCheckStatistics = 'Check percentage of (un)translated and fuzzy strings';
 | 
			
		||||
  sFindAllTranslatedPoFiles = 'Find all translated po-files';
 | 
			
		||||
  //sFindAllTranslatedPoFiles = 'Find all translated po-files';
 | 
			
		||||
  sIgnoreFuzzyTranslations = 'Ignore translated strings marked as "fuzzy"';
 | 
			
		||||
  sIncompatibleFormatArgs = '[Line: %d] Incompatible and/or invalid format() arguments for:' ;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,11 @@
 | 
			
		||||
object PoCheckerForm: TPoCheckerForm
 | 
			
		||||
  Left = 318
 | 
			
		||||
  Height = 514
 | 
			
		||||
  Height = 513
 | 
			
		||||
  Top = 163
 | 
			
		||||
  Width = 644
 | 
			
		||||
  Anchors = []
 | 
			
		||||
  Caption = 'GUI Po-file checking tool'
 | 
			
		||||
  ClientHeight = 514
 | 
			
		||||
  ClientHeight = 513
 | 
			
		||||
  ClientWidth = 644
 | 
			
		||||
  Constraints.MinHeight = 450
 | 
			
		||||
  Constraints.MinWidth = 600
 | 
			
		||||
@ -123,7 +123,7 @@ object PoCheckerForm: TPoCheckerForm
 | 
			
		||||
  object NoErrLabel: TLabel
 | 
			
		||||
    Left = 8
 | 
			
		||||
    Height = 25
 | 
			
		||||
    Top = 452
 | 
			
		||||
    Top = 451
 | 
			
		||||
    Width = 146
 | 
			
		||||
    Anchors = [akLeft, akBottom]
 | 
			
		||||
    Caption = 'No errors found'
 | 
			
		||||
@ -133,18 +133,6 @@ object PoCheckerForm: TPoCheckerForm
 | 
			
		||||
    ParentColor = False
 | 
			
		||||
    ParentFont = False
 | 
			
		||||
  end
 | 
			
		||||
  object FindAllPOsCheckBox: TCheckBox
 | 
			
		||||
    AnchorSideLeft.Control = TestListBox
 | 
			
		||||
    AnchorSideTop.Control = SelectBasicBtn
 | 
			
		||||
    AnchorSideTop.Side = asrBottom
 | 
			
		||||
    Left = 201
 | 
			
		||||
    Height = 19
 | 
			
		||||
    Top = 184
 | 
			
		||||
    Width = 156
 | 
			
		||||
    BorderSpacing.Top = 6
 | 
			
		||||
    Caption = 'Find all translated PO files'
 | 
			
		||||
    TabOrder = 3
 | 
			
		||||
  end
 | 
			
		||||
  object SelectBasicBtn: TButton
 | 
			
		||||
    AnchorSideLeft.Control = TestListBox
 | 
			
		||||
    AnchorSideTop.Control = TestListBox
 | 
			
		||||
@ -157,7 +145,7 @@ object PoCheckerForm: TPoCheckerForm
 | 
			
		||||
    Caption = 'Select Basic Tests'
 | 
			
		||||
    Enabled = False
 | 
			
		||||
    OnClick = SelectBasicBtnClick
 | 
			
		||||
    TabOrder = 4
 | 
			
		||||
    TabOrder = 3
 | 
			
		||||
  end
 | 
			
		||||
  object SelectAllBtn: TButton
 | 
			
		||||
    AnchorSideLeft.Control = SelectBasicBtn
 | 
			
		||||
@ -171,7 +159,7 @@ object PoCheckerForm: TPoCheckerForm
 | 
			
		||||
    Caption = 'Select All Tests'
 | 
			
		||||
    Enabled = False
 | 
			
		||||
    OnClick = SelectAllBtnClick
 | 
			
		||||
    TabOrder = 5
 | 
			
		||||
    TabOrder = 4
 | 
			
		||||
  end
 | 
			
		||||
  object UnselectAllBtn: TButton
 | 
			
		||||
    AnchorSideLeft.Control = SelectAllBtn
 | 
			
		||||
@ -185,24 +173,24 @@ object PoCheckerForm: TPoCheckerForm
 | 
			
		||||
    Caption = 'Unselect All Tests'
 | 
			
		||||
    Enabled = False
 | 
			
		||||
    OnClick = UnselectAllBtnClick
 | 
			
		||||
    TabOrder = 6
 | 
			
		||||
    TabOrder = 5
 | 
			
		||||
  end
 | 
			
		||||
  object IgnoreFuzzyCheckBox: TCheckBox
 | 
			
		||||
    AnchorSideLeft.Control = TestListBox
 | 
			
		||||
    AnchorSideTop.Control = FindAllPOsCheckBox
 | 
			
		||||
    AnchorSideTop.Control = SelectBasicBtn
 | 
			
		||||
    AnchorSideTop.Side = asrBottom
 | 
			
		||||
    Left = 201
 | 
			
		||||
    Height = 19
 | 
			
		||||
    Top = 209
 | 
			
		||||
    Top = 184
 | 
			
		||||
    Width = 152
 | 
			
		||||
    BorderSpacing.Top = 6
 | 
			
		||||
    Caption = 'sIgnoreFuzzyTranslations'
 | 
			
		||||
    TabOrder = 7
 | 
			
		||||
    TabOrder = 6
 | 
			
		||||
  end
 | 
			
		||||
  object StatusBar: TStatusBar
 | 
			
		||||
    Left = 0
 | 
			
		||||
    Height = 23
 | 
			
		||||
    Top = 491
 | 
			
		||||
    Top = 490
 | 
			
		||||
    Width = 644
 | 
			
		||||
    Panels = <>
 | 
			
		||||
  end
 | 
			
		||||
@ -257,58 +245,39 @@ object PoCheckerForm: TPoCheckerForm
 | 
			
		||||
      FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
 | 
			
		||||
    }
 | 
			
		||||
    OnClick = ScanDirBtnClick
 | 
			
		||||
    TabOrder = 9
 | 
			
		||||
    TabOrder = 8
 | 
			
		||||
  end
 | 
			
		||||
  object MasterPoListBox: TListBox
 | 
			
		||||
    AnchorSideTop.Control = IgnoreFuzzyCheckBox
 | 
			
		||||
    AnchorSideTop.Side = asrBottom
 | 
			
		||||
    AnchorSideRight.Control = TestListBox
 | 
			
		||||
    AnchorSideRight.Side = asrBottom
 | 
			
		||||
    AnchorSideBottom.Control = NoErrLabel
 | 
			
		||||
    Left = 8
 | 
			
		||||
    Height = 184
 | 
			
		||||
    Top = 233
 | 
			
		||||
    Width = 272
 | 
			
		||||
    Anchors = [akTop, akLeft, akBottom]
 | 
			
		||||
    Height = 185
 | 
			
		||||
    Top = 208
 | 
			
		||||
    Width = 629
 | 
			
		||||
    Anchors = [akTop, akLeft, akRight, akBottom]
 | 
			
		||||
    BorderSpacing.Top = 5
 | 
			
		||||
    BorderSpacing.Bottom = 35
 | 
			
		||||
    BorderSpacing.Bottom = 58
 | 
			
		||||
    ItemHeight = 0
 | 
			
		||||
    MultiSelect = True
 | 
			
		||||
    OnDrawItem = MasterPoListBoxDrawItem
 | 
			
		||||
    OnResize = MasterPoListBoxResize
 | 
			
		||||
    OnSelectionChange = MasterPoListBoxSelectionChange
 | 
			
		||||
    Sorted = True
 | 
			
		||||
    Style = lbOwnerDrawFixed
 | 
			
		||||
    TabOrder = 10
 | 
			
		||||
  end
 | 
			
		||||
  object ChildPoListBox: TListBox
 | 
			
		||||
    AnchorSideLeft.Control = MasterPoListBox
 | 
			
		||||
    AnchorSideLeft.Side = asrBottom
 | 
			
		||||
    AnchorSideTop.Control = MasterPoListBox
 | 
			
		||||
    AnchorSideRight.Control = TestListBox
 | 
			
		||||
    AnchorSideRight.Side = asrBottom
 | 
			
		||||
    AnchorSideBottom.Control = ClearChildBtn
 | 
			
		||||
    Left = 290
 | 
			
		||||
    Height = 154
 | 
			
		||||
    Top = 233
 | 
			
		||||
    Width = 347
 | 
			
		||||
    Anchors = [akTop, akLeft, akRight, akBottom]
 | 
			
		||||
    BorderSpacing.Left = 10
 | 
			
		||||
    BorderSpacing.Bottom = 40
 | 
			
		||||
    ItemHeight = 0
 | 
			
		||||
    OnDrawItem = MasterPoListBoxDrawItem
 | 
			
		||||
    OnResize = ChildPoListBoxResize
 | 
			
		||||
    OnSelectionChange = ChildPoListBoxSelectionChange
 | 
			
		||||
    Style = lbOwnerDrawFixed
 | 
			
		||||
    TabOrder = 11
 | 
			
		||||
    TabOrder = 9
 | 
			
		||||
  end
 | 
			
		||||
  object LangFilter: TComboBox
 | 
			
		||||
    AnchorSideLeft.Control = ChildPoListBox
 | 
			
		||||
    AnchorSideTop.Control = ChildPoListBox
 | 
			
		||||
    AnchorSideLeft.Control = MasterPoListBox
 | 
			
		||||
    AnchorSideTop.Side = asrBottom
 | 
			
		||||
    AnchorSideRight.Control = TestListBox
 | 
			
		||||
    AnchorSideRight.Side = asrBottom
 | 
			
		||||
    AnchorSideBottom.Control = ClearChildBtn
 | 
			
		||||
    Left = 290
 | 
			
		||||
    Left = 8
 | 
			
		||||
    Height = 23
 | 
			
		||||
    Top = 396
 | 
			
		||||
    Width = 347
 | 
			
		||||
    Top = 400
 | 
			
		||||
    Width = 629
 | 
			
		||||
    Anchors = [akLeft, akRight]
 | 
			
		||||
    BorderSpacing.Top = 5
 | 
			
		||||
    ItemHeight = 15
 | 
			
		||||
@ -340,7 +309,7 @@ object PoCheckerForm: TPoCheckerForm
 | 
			
		||||
    )
 | 
			
		||||
    OnChange = LangFilterChange
 | 
			
		||||
    Style = csDropDownList
 | 
			
		||||
    TabOrder = 12
 | 
			
		||||
    TabOrder = 10
 | 
			
		||||
    Text = 'All languages'
 | 
			
		||||
  end
 | 
			
		||||
  object ClearMasterBtn: TButton
 | 
			
		||||
@ -350,13 +319,13 @@ object PoCheckerForm: TPoCheckerForm
 | 
			
		||||
    AnchorSideBottom.Control = NoErrLabel
 | 
			
		||||
    Left = 8
 | 
			
		||||
    Height = 25
 | 
			
		||||
    Top = 427
 | 
			
		||||
    Top = 426
 | 
			
		||||
    Width = 75
 | 
			
		||||
    Anchors = [akLeft, akBottom]
 | 
			
		||||
    BorderSpacing.Top = 10
 | 
			
		||||
    Caption = 'Clear'
 | 
			
		||||
    OnClick = ClearMasterBtnClick
 | 
			
		||||
    TabOrder = 13
 | 
			
		||||
    TabOrder = 11
 | 
			
		||||
  end
 | 
			
		||||
  object UnselectMasterBtn: TButton
 | 
			
		||||
    AnchorSideLeft.Control = ClearMasterBtn
 | 
			
		||||
@ -364,41 +333,14 @@ object PoCheckerForm: TPoCheckerForm
 | 
			
		||||
    AnchorSideBottom.Control = NoErrLabel
 | 
			
		||||
    Left = 93
 | 
			
		||||
    Height = 25
 | 
			
		||||
    Top = 427
 | 
			
		||||
    Top = 426
 | 
			
		||||
    Width = 75
 | 
			
		||||
    Anchors = [akLeft, akBottom]
 | 
			
		||||
    BorderSpacing.Left = 10
 | 
			
		||||
    Caption = 'Unselect'
 | 
			
		||||
    Enabled = False
 | 
			
		||||
    OnClick = UnselectMasterBtnClick
 | 
			
		||||
    TabOrder = 14
 | 
			
		||||
  end
 | 
			
		||||
  object ClearChildBtn: TButton
 | 
			
		||||
    AnchorSideLeft.Control = ChildPoListBox
 | 
			
		||||
    AnchorSideBottom.Control = NoErrLabel
 | 
			
		||||
    Left = 290
 | 
			
		||||
    Height = 25
 | 
			
		||||
    Top = 427
 | 
			
		||||
    Width = 75
 | 
			
		||||
    Anchors = [akLeft, akBottom]
 | 
			
		||||
    Caption = 'Clear'
 | 
			
		||||
    OnClick = ClearChildBtnClick
 | 
			
		||||
    TabOrder = 15
 | 
			
		||||
  end
 | 
			
		||||
  object UnselectChildBtn: TButton
 | 
			
		||||
    AnchorSideLeft.Control = ClearChildBtn
 | 
			
		||||
    AnchorSideLeft.Side = asrBottom
 | 
			
		||||
    AnchorSideBottom.Control = NoErrLabel
 | 
			
		||||
    Left = 375
 | 
			
		||||
    Height = 25
 | 
			
		||||
    Top = 427
 | 
			
		||||
    Width = 75
 | 
			
		||||
    Anchors = [akLeft, akBottom]
 | 
			
		||||
    BorderSpacing.Left = 10
 | 
			
		||||
    Caption = 'Unselect'
 | 
			
		||||
    Enabled = False
 | 
			
		||||
    OnClick = UnselectChildBtnClick
 | 
			
		||||
    TabOrder = 16
 | 
			
		||||
    TabOrder = 12
 | 
			
		||||
  end
 | 
			
		||||
  object OpenDialog: TOpenDialog
 | 
			
		||||
    Filter = 'po-files (*.po)|*.po|all files|*'
 | 
			
		||||
 | 
			
		||||
@ -25,14 +25,15 @@ interface
 | 
			
		||||
 | 
			
		||||
uses
 | 
			
		||||
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
 | 
			
		||||
  StdCtrls, LCLProc, CheckLst, Buttons, ExtCtrls, ComCtrls, Masks, Types,
 | 
			
		||||
  StdCtrls, LCLProc, CheckLst, Buttons, ExtCtrls, ComCtrls, Types,
 | 
			
		||||
  LCLType,
 | 
			
		||||
  {$IFDEF POCHECKERSTANDALONE}
 | 
			
		||||
  Translations,
 | 
			
		||||
  {$ELSE}
 | 
			
		||||
  IDEIntf, MenuIntf,
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  SimplePoFiles, PoFamilies, ResultDlg, pocheckerconsts, PoCheckerSettings;
 | 
			
		||||
  SimplePoFiles, PoFamilies, ResultDlg, pocheckerconsts, PoCheckerSettings,
 | 
			
		||||
  PoFamilyLists;
 | 
			
		||||
 | 
			
		||||
type
 | 
			
		||||
 | 
			
		||||
@ -40,18 +41,13 @@ type
 | 
			
		||||
 | 
			
		||||
  TPoCheckerForm = class(TForm)
 | 
			
		||||
    SelectDirectoryDialog: TSelectDirectoryDialog;
 | 
			
		||||
    UnselectChildBtn: TButton;
 | 
			
		||||
    ClearChildBtn: TButton;
 | 
			
		||||
    UnselectMasterBtn: TButton;
 | 
			
		||||
    ClearMasterBtn: TButton;
 | 
			
		||||
    LangFilter: TComboBox;
 | 
			
		||||
    ChildPoListBox: TListBox;
 | 
			
		||||
    MasterPoListBox: TListBox;
 | 
			
		||||
    ScanDirBtn: TBitBtn;
 | 
			
		||||
    StatusBar: TStatusBar;
 | 
			
		||||
    procedure ChildPoListBoxResize(Sender: TObject);
 | 
			
		||||
    procedure ChildPoListBoxSelectionChange(Sender: TObject; User: boolean);
 | 
			
		||||
    procedure ClearChildBtnClick(Sender: TObject);
 | 
			
		||||
    procedure MasterPoListBoxResize(Sender: TObject);
 | 
			
		||||
    procedure ClearMasterBtnClick(Sender: TObject);
 | 
			
		||||
    procedure FormShow(Sender: TObject);
 | 
			
		||||
    procedure LangFilterChange(Sender: TObject);
 | 
			
		||||
@ -62,10 +58,9 @@ type
 | 
			
		||||
    procedure UnselectChildBtnClick(Sender: TObject);
 | 
			
		||||
    procedure UnselectMasterBtnClick(Sender: TObject);
 | 
			
		||||
  private
 | 
			
		||||
    PoFamily: TPoFamily;
 | 
			
		||||
    FSelectedPoName: String;
 | 
			
		||||
    //PoFamily: TPoFamily;
 | 
			
		||||
    PoFamilyList: TPoFamilyList;
 | 
			
		||||
    FPoCheckerSettings: TPoCheckerSettings;
 | 
			
		||||
    FChildPoList: TStringList;
 | 
			
		||||
    procedure OnTestStart(const ATestName, APoFileName: string);
 | 
			
		||||
    procedure OnTestEnd(const {%H-}ATestName: string; const {%H-}ErrorCount: integer);
 | 
			
		||||
    procedure FillTestListBox;
 | 
			
		||||
@ -76,14 +71,14 @@ type
 | 
			
		||||
    procedure ShowError(const Msg: string);
 | 
			
		||||
    function TrySelectFile(out Filename: String): Boolean;
 | 
			
		||||
    procedure ScanDirectory(ADir: String);
 | 
			
		||||
    function TryCreatePoFamily(Filename: String): Boolean;
 | 
			
		||||
    function TryCreatepoFamilyList(MasterList: TStrings; const Lang: String): Boolean;
 | 
			
		||||
    procedure RunSelectedTests;
 | 
			
		||||
    procedure ClearStatusBar;
 | 
			
		||||
    procedure SetSelectedPoName(AFilename: String);
 | 
			
		||||
    procedure UpdateGUI(HasSelection: Boolean);
 | 
			
		||||
    function GetSelectedMasterFiles: TStringList;
 | 
			
		||||
    procedure AddToMasterPoList(Fn: String);
 | 
			
		||||
    procedure AddToMasterPoList(S: TStrings);
 | 
			
		||||
    procedure AddToChildPoList(Fn: String);
 | 
			
		||||
    procedure AddToChildPoList(S: TStrings);
 | 
			
		||||
    procedure SetSelectedMasterFiles(S: TStrings);
 | 
			
		||||
    procedure LoadConfig;
 | 
			
		||||
    procedure SaveConfig;
 | 
			
		||||
  published
 | 
			
		||||
@ -91,7 +86,6 @@ type
 | 
			
		||||
    UnselectAllBtn: TButton;
 | 
			
		||||
    SelectAllBtn: TButton;
 | 
			
		||||
    SelectBasicBtn: TButton;
 | 
			
		||||
    FindAllPOsCheckBox: TCheckBox;
 | 
			
		||||
    NoErrLabel: TLabel;
 | 
			
		||||
    RunBtn: TBitBtn;
 | 
			
		||||
    OpenBtn: TBitBtn;
 | 
			
		||||
@ -152,20 +146,15 @@ begin
 | 
			
		||||
      'lclstrconsts.' + Lang + '.po');
 | 
			
		||||
  end;
 | 
			
		||||
  {$ENDIF}
 | 
			
		||||
  FChildPoList := TStringList.Create;
 | 
			
		||||
  FChildPoList.Sorted := True;
 | 
			
		||||
  FChildPoList.Duplicates := dupIgnore;
 | 
			
		||||
  Caption := sGUIPoFileCheckingTool;
 | 
			
		||||
  SelectTestLabel.Caption := sSelectTestTypes;
 | 
			
		||||
  FindAllPOsCheckBox.Caption := sFindAllTranslatedPoFiles;
 | 
			
		||||
  //FindAllPOsCheckBox.Caption := sFindAllTranslatedPoFiles;
 | 
			
		||||
  IgnoreFuzzyCheckBox.Caption := sIgnoreFuzzyTranslations;
 | 
			
		||||
  OpenBtn.Caption := sOpenAPoFile;
 | 
			
		||||
  ScanDirBtn.Caption := sScanDir;
 | 
			
		||||
  RunBtn.Caption := sRunSelectedTests;
 | 
			
		||||
  ClearMasterBtn.Caption := sClearListBox;
 | 
			
		||||
  ClearChildBtn.Caption := sClearListBox;
 | 
			
		||||
  UnselectMasterBtn.Caption := sUnselectListBox;
 | 
			
		||||
  UnselectChildBtn.Caption := sUnselectListBox;
 | 
			
		||||
  LangFilter.Items[0] := sAllLanguages;
 | 
			
		||||
  NoErrLabel.Caption := sNoErrorsFound;
 | 
			
		||||
  FillTestListBox;
 | 
			
		||||
@ -181,12 +170,11 @@ end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.FormDestroy(Sender: TObject);
 | 
			
		||||
begin
 | 
			
		||||
  if Assigned(PoFamily) then
 | 
			
		||||
    PoFamily.Free;
 | 
			
		||||
  if Assigned(PoFamilyList) then
 | 
			
		||||
    PoFamilyList.Free;
 | 
			
		||||
  SaveConfig;
 | 
			
		||||
  if Assigned(FPoCheckerSettings) then
 | 
			
		||||
    FPoCheckerSettings.Free;
 | 
			
		||||
  FChildPoList.Free;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -199,23 +187,38 @@ begin
 | 
			
		||||
    if IsMasterPoName(Fn) then
 | 
			
		||||
      AddToMasterPoList(Fn)
 | 
			
		||||
    else
 | 
			
		||||
      AddToChildPoList(Fn);
 | 
			
		||||
    SetSelectedPoName(Fn);
 | 
			
		||||
      //AddToChildPoList(Fn);
 | 
			
		||||
      AddToMasterPoList(ExtractMasterNameFromChildName(Fn));
 | 
			
		||||
    UpdateGUI(True);
 | 
			
		||||
  end
 | 
			
		||||
  else
 | 
			
		||||
  begin
 | 
			
		||||
    SetSelectedPoName('');
 | 
			
		||||
    UpdateGUI(False);
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.RunBtnClick(Sender: TObject);
 | 
			
		||||
var
 | 
			
		||||
  AMasterList: TStringList;
 | 
			
		||||
  LangIdx: Integer;
 | 
			
		||||
  ALang: String;
 | 
			
		||||
begin
 | 
			
		||||
  if TryCreatePoFamily(FSelectedPoName) then
 | 
			
		||||
    RunSelectedTests
 | 
			
		||||
  LangIdx := LangFilter.ItemIndex;
 | 
			
		||||
  if (LangIdx > 0) then
 | 
			
		||||
    ALang := LangFilter.Items[LangIdx]
 | 
			
		||||
  else
 | 
			
		||||
  begin
 | 
			
		||||
    if Assigned(PoFamily) then FreeAndNil(PoFamily);
 | 
			
		||||
    ALang := langAll;
 | 
			
		||||
  AMasterList := GetSelectedMasterFiles;
 | 
			
		||||
  try
 | 
			
		||||
    if TryCreatePoFamilyList(AMasterList, ALang) then
 | 
			
		||||
      RunSelectedTests
 | 
			
		||||
    else
 | 
			
		||||
    begin
 | 
			
		||||
      if Assigned(PoFamilyList) then FreeAndNil(PoFamilyList);
 | 
			
		||||
    end;
 | 
			
		||||
  finally
 | 
			
		||||
    AMasterList.Free;
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
@ -240,85 +243,24 @@ begin
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.LangFilterChange(Sender: TObject);
 | 
			
		||||
var
 | 
			
		||||
  Filter, Mask, PrevItem: String;
 | 
			
		||||
  Idx, i: Integer;
 | 
			
		||||
begin
 | 
			
		||||
  Idx := ChildPoListBox.ItemIndex;
 | 
			
		||||
  if (Idx > -1) then
 | 
			
		||||
    PrevItem := ChildPoListBox.Items[Idx]
 | 
			
		||||
  else
 | 
			
		||||
    PrevItem := '';
 | 
			
		||||
  //debugln('TPoCheckerForm.LangFilterChange: PrevItem = "',PrevItem,'"');
 | 
			
		||||
  Filter := LangFilter.Items.Strings[LangFilter.ItemIndex];
 | 
			
		||||
  if (LangFilter.ItemIndex > 0) then
 | 
			
		||||
  begin
 | 
			
		||||
    Mask := '*.'+Filter+'.po';
 | 
			
		||||
    ChildPoListBox.Clear;
 | 
			
		||||
    ChildPoListBox.Items.BeginUpdate;
 | 
			
		||||
    try
 | 
			
		||||
    for i := 0 to FChildPoList.Count - 1 do
 | 
			
		||||
      begin
 | 
			
		||||
        if MatchesMask(FChildPoList.Strings[i], Mask, False) then
 | 
			
		||||
          ChildPoListBox.Items.Add(FChildPoList.Strings[i]);
 | 
			
		||||
      end;
 | 
			
		||||
    finally
 | 
			
		||||
      ChildPoListBox.Items.EndUpdate;
 | 
			
		||||
    end;
 | 
			
		||||
  end
 | 
			
		||||
  else
 | 
			
		||||
    ChildPoListBox.Items.Assign(FChildPoList);
 | 
			
		||||
  if (Idx <> -1) then
 | 
			
		||||
  begin
 | 
			
		||||
    Idx := ChildPoListBox.Items.IndexOf(PrevItem);
 | 
			
		||||
    debugln('TPoCheckerForm.LangFilterChange: IndexOf(PrevItem) = ',DbgS(Idx));
 | 
			
		||||
    if (Idx <> -1) then
 | 
			
		||||
    begin
 | 
			
		||||
      ChildPoListBox.ItemIndex := Idx;
 | 
			
		||||
    end
 | 
			
		||||
    else
 | 
			
		||||
    begin
 | 
			
		||||
      if (MasterPoListBox.ItemIndex = -1) then
 | 
			
		||||
        SetSelectedPoName('');
 | 
			
		||||
    end;
 | 
			
		||||
  end;
 | 
			
		||||
  UnselectChildBtn.Enabled := (Idx <> -1);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.ChildPoListBoxSelectionChange(Sender: TObject;
 | 
			
		||||
  User: boolean);
 | 
			
		||||
begin
 | 
			
		||||
  //debugln('TPoCheckerForm.ChildPoListBoxSelectionChange: User = ',DbgS(User));
 | 
			
		||||
  if User then
 | 
			
		||||
  begin
 | 
			
		||||
    SetSelectedPoName(ChildPoListBox.Items[ChildPoListBox.ItemIndex]);
 | 
			
		||||
  end;
 | 
			
		||||
  UnselectChildBtn.Enabled := (ChildPoListBox.ItemIndex <> -1);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.ChildPoListBoxResize(Sender: TObject);
 | 
			
		||||
procedure TPoCheckerForm.MasterPoListBoxResize(Sender: TObject);
 | 
			
		||||
var
 | 
			
		||||
  ATop, ADiff: Integer;
 | 
			
		||||
  ATop: Integer;
 | 
			
		||||
begin
 | 
			
		||||
  //Can't seem to get this to work with just Anchors
 | 
			
		||||
  ATop := ChildPoListBox.Top + ChildPoListBox.Height;
 | 
			
		||||
  ADiff := MasterPoListBox.Top + MasterPoListBox.Height - ATop;
 | 
			
		||||
  LangFilter.Top := ATop + (ADiff - LangFilter.Height);
 | 
			
		||||
  ATop := MasterPoListBox.Top + MasterPoListBox.Height;
 | 
			
		||||
  LangFilter.Top := ATop + 5;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.ClearChildBtnClick(Sender: TObject);
 | 
			
		||||
begin
 | 
			
		||||
  FChildPoList.Clear;
 | 
			
		||||
  LangFilterChange(LangFilter);
 | 
			
		||||
  if (MasterPoListBox.ItemIndex = -1) then
 | 
			
		||||
    SetSelectedPoName('');
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.ClearMasterBtnClick(Sender: TObject);
 | 
			
		||||
begin
 | 
			
		||||
  MasterPoListBox.Clear;
 | 
			
		||||
  if (ChildPoListBox.ItemIndex = -1) then
 | 
			
		||||
    SetSelectedPoName('');
 | 
			
		||||
  UpdateGUI(False);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.FormShow(Sender: TObject);
 | 
			
		||||
@ -353,9 +295,9 @@ begin
 | 
			
		||||
  //debugln('TPoCheckerForm.MasterPoListBoxSelectionChange: User = ',DbgS(User));
 | 
			
		||||
  if User then
 | 
			
		||||
  begin
 | 
			
		||||
    SetSelectedPoName(MasterPoListBox.Items[MasterPoListBox.ItemIndex]);
 | 
			
		||||
    UpdateGUI(MasterPoListBox.SelCount > 0);
 | 
			
		||||
  end;
 | 
			
		||||
  UnselectMasterBtn.Enabled := (MasterPoListBox.ItemIndex <> -1);
 | 
			
		||||
  UnselectMasterBtn.Enabled := (MasterPoListBox.SelCount <> 0);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.ScanDirBtnClick(Sender: TObject);
 | 
			
		||||
@ -368,16 +310,12 @@ end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.UnselectChildBtnClick(Sender: TObject);
 | 
			
		||||
begin
 | 
			
		||||
  ChildpoListBox.ItemIndex := -1;
 | 
			
		||||
  if (MasterPoListBox.ItemIndex = -1) then
 | 
			
		||||
    SetSelectedPoName('');
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.UnselectMasterBtnClick(Sender: TObject);
 | 
			
		||||
begin
 | 
			
		||||
  MasterPoListBox.ItemIndex := -1;
 | 
			
		||||
  if (ChildPoListBox.ItemIndex = -1) then
 | 
			
		||||
    SetSelectedPoName('');
 | 
			
		||||
  MasterPoListBox.ClearSelection;
 | 
			
		||||
  UpdateGUI(False);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.OnTestStart(const ATestName, APoFileName: string);
 | 
			
		||||
@ -443,8 +381,8 @@ end;
 | 
			
		||||
function TPoCheckerForm.GetTestOptions: TPoTestOptions;
 | 
			
		||||
begin
 | 
			
		||||
  Result := [];
 | 
			
		||||
  if FindAllPOsCheckBox.Checked then
 | 
			
		||||
    Result := Result + [ptoFindAllChildren];
 | 
			
		||||
  //if FindAllPOsCheckBox.Checked then
 | 
			
		||||
  //  Result := Result + [ptoFindAllChildren];
 | 
			
		||||
  if IgnoreFuzzyCheckBox.Checked then
 | 
			
		||||
    Result := Result + [ptoIgnoreFuzzyStrings];
 | 
			
		||||
end;
 | 
			
		||||
@ -466,7 +404,7 @@ end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.SetTestOptionCheckBoxes(TestOptions: TPoTestOptions);
 | 
			
		||||
begin
 | 
			
		||||
  FindAllPOsCheckBox.Checked := (ptoFindAllChildren in TestOptions);
 | 
			
		||||
  //FindAllPOsCheckBox.Checked := (ptoFindAllChildren in TestOptions);
 | 
			
		||||
  IgnoreFuzzyCheckBox.Checked := (ptoIgnoreFuzzyStrings in TestOptions);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
@ -491,85 +429,82 @@ end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.ScanDirectory(ADir: String);
 | 
			
		||||
var
 | 
			
		||||
  SL, ML, CL: TStringList;
 | 
			
		||||
  SL, ML: TStringList;
 | 
			
		||||
  i: Integer;
 | 
			
		||||
  S: String;
 | 
			
		||||
begin
 | 
			
		||||
  SL := FindAllFiles(ADir, '*.po',True);
 | 
			
		||||
  try
 | 
			
		||||
    ML := TStringList.Create;
 | 
			
		||||
    CL := TStringList.Create;
 | 
			
		||||
    for i := 0 to SL.Count - 1 do
 | 
			
		||||
    begin
 | 
			
		||||
      S := SL[i];
 | 
			
		||||
      //debugln('TPoCheckerForm.ScanDirectory: S = "',ExtractFilename(S),'"');
 | 
			
		||||
      if IsMasterPoName(S) then
 | 
			
		||||
        ML.Add(S)
 | 
			
		||||
      else
 | 
			
		||||
        CL.Add(S);
 | 
			
		||||
        ML.Add(S);
 | 
			
		||||
    end;
 | 
			
		||||
    if (ML.Count > 0) then AddToMasterPoList(ML);
 | 
			
		||||
    if (CL.Count > 0) then AddToChildPoList(CL);
 | 
			
		||||
  finally
 | 
			
		||||
    SL.Free;
 | 
			
		||||
    ML.Free;
 | 
			
		||||
    CL.Free;
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TPoCheckerForm.TryCreatePoFamily(Filename: String): Boolean;
 | 
			
		||||
 | 
			
		||||
function TPoCheckerForm.TryCreatepoFamilyList(MasterList: TStrings; const Lang: String): Boolean;
 | 
			
		||||
var
 | 
			
		||||
  ChosenMasterName, ChosenChildName, ShortFn: String;
 | 
			
		||||
  Fn, Msg: String;
 | 
			
		||||
  i, Cnt: Integer;
 | 
			
		||||
begin
 | 
			
		||||
  Result := False;
 | 
			
		||||
  ShortFn := ExtractFileName(Filename);
 | 
			
		||||
  if IsMasterPoName(Filename) then
 | 
			
		||||
  Msg := '';
 | 
			
		||||
  Cnt := MasterList.Count;
 | 
			
		||||
  for i := Cnt - 1 downto 0 do
 | 
			
		||||
  begin
 | 
			
		||||
    ChosenMasterName := Filename;
 | 
			
		||||
    ChosenChildName := '';
 | 
			
		||||
  end
 | 
			
		||||
  else
 | 
			
		||||
  begin //not a mastername, may be a child
 | 
			
		||||
    ChosenChildName := Filename;
 | 
			
		||||
    ChosenMasterName := ExtractMasterNameFromChildName(Filename);
 | 
			
		||||
    if (ChosenMasterName = '') then
 | 
			
		||||
    Fn := MasterList.Strings[i];
 | 
			
		||||
    if not FileExistsUtf8(Fn) then
 | 
			
		||||
    begin
 | 
			
		||||
      ChosenMasterName := '';
 | 
			
		||||
      ChosenChildName := '';
 | 
			
		||||
      ShowError(Format(sNotAProperFileName, [ShortFn]));
 | 
			
		||||
    end
 | 
			
		||||
    else
 | 
			
		||||
    if not FileExistsUtf8(ChosenMasterName) then
 | 
			
		||||
    begin
 | 
			
		||||
      ShowError(Format(sCannotFindMaster,
 | 
			
		||||
        [ExtractFileName(ChosenMasterName), ShortFn]));
 | 
			
		||||
      ChosenMasterName := '';
 | 
			
		||||
      ChosenChildName := '';
 | 
			
		||||
      MasterList.Delete(i);
 | 
			
		||||
      Msg := Format('"%s"',[Fn]) + LineEnding + Msg;
 | 
			
		||||
    end;
 | 
			
		||||
  end;
 | 
			
		||||
  Result := (ChosenMasterName <> '');
 | 
			
		||||
  if Result then
 | 
			
		||||
  if (Msg <> '') then
 | 
			
		||||
    MessageDlg('PoChecker',Format(sFilesNotFoundAndRemoved,[Msg]), mtInformation, [mbOk], 0);
 | 
			
		||||
  Cnt := MasterList.Count;
 | 
			
		||||
  if (Cnt = 0) then
 | 
			
		||||
  begin
 | 
			
		||||
    if Assigned(PoFamily) then
 | 
			
		||||
      PoFamily.Free;
 | 
			
		||||
    try
 | 
			
		||||
      PoFamily := TPoFamily.Create(ChosenMasterName, ChosenChildName);
 | 
			
		||||
      PoFamily.OnTestStart := @OnTestStart;
 | 
			
		||||
      PoFamily.OnTestEnd := @OnTestEnd;
 | 
			
		||||
    except
 | 
			
		||||
      on E: Exception do
 | 
			
		||||
    MessageDlg('PoChecker', sNoFilesLeftToCheck, mtInformation, [mbOk], 0);
 | 
			
		||||
    Exit;
 | 
			
		||||
  end;
 | 
			
		||||
  try
 | 
			
		||||
    if Assigned(PoFamilyList) then PoFamilyList.Free;
 | 
			
		||||
    PoFamilyList := TPoFamilyList.Create(MasterList, Lang, Msg);
 | 
			
		||||
    if (Msg <> '') then
 | 
			
		||||
    begin
 | 
			
		||||
      MessageDlg('PoChecker',Format(sFilesNotFoundAndRemoved,[Msg]), mtInformation, [mbOk], 0);
 | 
			
		||||
      if (PoFamilyList.Count = 0) then
 | 
			
		||||
      begin
 | 
			
		||||
        Result := False;
 | 
			
		||||
        ShowError(Format(sErrorOnCreate, [E.Message]));
 | 
			
		||||
        if Assigned(PoFamily) then
 | 
			
		||||
        begin
 | 
			
		||||
          try
 | 
			
		||||
            PoFamily.Free;
 | 
			
		||||
          except
 | 
			
		||||
            on E: Exception do
 | 
			
		||||
            begin
 | 
			
		||||
              ShowError(Format(sErrorOnCleanUp, [E.Message]));
 | 
			
		||||
            end;
 | 
			
		||||
        MessageDlg('PoChecker', sNoFilesLeftToCheck, mtInformation, [mbOk], 0);
 | 
			
		||||
        FreeAndNil(PoFamilyList);
 | 
			
		||||
        Exit;
 | 
			
		||||
      end;
 | 
			
		||||
    end;
 | 
			
		||||
    PoFamilyList.OnTestStart := @OnTestStart;
 | 
			
		||||
    PoFamilyList.OnTestEnd := @OnTestEnd;
 | 
			
		||||
    Result := True;
 | 
			
		||||
  except
 | 
			
		||||
    on E: Exception do
 | 
			
		||||
    begin
 | 
			
		||||
      Result := False;
 | 
			
		||||
      ShowError(Format(sErrorOnCreate, [E.Message]));
 | 
			
		||||
      if Assigned(PoFamilyList) then
 | 
			
		||||
      begin
 | 
			
		||||
        try
 | 
			
		||||
          FreeAndNil(PoFamilyList);
 | 
			
		||||
        except
 | 
			
		||||
          on E: Exception do
 | 
			
		||||
          begin
 | 
			
		||||
            ShowError(Format(sErrorOnCleanUp, [E.Message]));
 | 
			
		||||
          end;
 | 
			
		||||
        end;
 | 
			
		||||
      end;
 | 
			
		||||
@ -599,10 +534,8 @@ begin
 | 
			
		||||
  SL := TStringList.Create;
 | 
			
		||||
  mr := mrNone;
 | 
			
		||||
  try
 | 
			
		||||
    if (not (ptoFindAllChildren in TestOptions)) and Assigned(PoFamily.Child) and
 | 
			
		||||
      (PoFamily.ChildName <> FSelectedPoName) then
 | 
			
		||||
      PoFamily.ChildName := FSelectedPoName;
 | 
			
		||||
    PoFamily.RunTests(TestTypes, TestOptions, ErrorCount, WarningCount, SL);
 | 
			
		||||
 | 
			
		||||
    PoFamilyList.RunTests(TestTypes, TestOptions, ErrorCount, WarningCount, SL);
 | 
			
		||||
    //debugln('RunSelectedTests: ', Format(sTotalErrors, [ErrorCount]));
 | 
			
		||||
    //debugln('                  ', Format(sTotalWarnings, [WarningCount]));
 | 
			
		||||
    if (ErrorCount > 0) or (WarningCount > 0) or
 | 
			
		||||
@ -615,7 +548,7 @@ begin
 | 
			
		||||
        ResultDlg.Log.Assign(SL);
 | 
			
		||||
        FreeAndNil(SL);                 //No need to keep 2 copies of this data
 | 
			
		||||
        if (pttCheckStatistics in TestTypes) then
 | 
			
		||||
          ResultDlg.PoFamilyStats := PoFamily.PoFamilyStats
 | 
			
		||||
          ResultDlg.PoFamilyStats := PoFamilyList.PoFamilyStats
 | 
			
		||||
        else
 | 
			
		||||
          ResultDlg.PoFamilyStats := nil;
 | 
			
		||||
        ResultDlg.Settings := FPoCheckerSettings;
 | 
			
		||||
@ -639,35 +572,17 @@ begin
 | 
			
		||||
  StatusBar.SimpleText := '';
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.SetSelectedPoName(AFilename: String);
 | 
			
		||||
var
 | 
			
		||||
  Idx: Integer;
 | 
			
		||||
procedure TPoCheckerForm.UpdateGUI(HasSelection: Boolean);
 | 
			
		||||
begin
 | 
			
		||||
  //debugln('TPoCheckerForm.SetSelectedPoName: ((FSelectedPoName = AFilename)) = ',DbgS((FSelectedPoName = AFilename)));
 | 
			
		||||
  NoErrLabel.Visible := False;
 | 
			
		||||
  //if (FSelectedPoName = AFilename) then Exit;
 | 
			
		||||
  FSelectedPoName := AFilename;
 | 
			
		||||
  if (AFilename <> '') then
 | 
			
		||||
  if HasSelection then
 | 
			
		||||
  begin
 | 
			
		||||
    RunBtn.Enabled := True;
 | 
			
		||||
    TestListBox.Enabled := True;
 | 
			
		||||
    SelectAllBtn.Enabled := True;
 | 
			
		||||
    SelectBasicBtn.Enabled := True;
 | 
			
		||||
    UnselectAllBtn.Enabled := True;
 | 
			
		||||
    Caption := sGUIPoFileCheckingTool + ' [' + ExtractFileName(AFilename) + ']';
 | 
			
		||||
    OpenDialog.InitialDir:= ExtractFileDir(AFilename);
 | 
			
		||||
    if IsMasterPoName(AFilename) then
 | 
			
		||||
    begin
 | 
			
		||||
      Idx := MasterPoListBox.Items.IndexOf(AFilename);
 | 
			
		||||
      MasterPoListBox.ItemIndex := Idx;
 | 
			
		||||
      ChildPoListBox.ItemIndex := -1;
 | 
			
		||||
    end
 | 
			
		||||
    else
 | 
			
		||||
    begin
 | 
			
		||||
      Idx := ChildPoListBox.Items.IndexOf(AFilename);
 | 
			
		||||
      ChildPoListBox.ItemIndex := Idx;
 | 
			
		||||
      MasterPoListBox.ItemIndex := -1;
 | 
			
		||||
    end;
 | 
			
		||||
    UnselectMasterBtn.Enabled := True;
 | 
			
		||||
  end
 | 
			
		||||
  else
 | 
			
		||||
  begin
 | 
			
		||||
@ -676,9 +591,21 @@ begin
 | 
			
		||||
    SelectAllBtn.Enabled := False;
 | 
			
		||||
    SelectBasicBtn.Enabled := False;
 | 
			
		||||
    UnselectAllBtn.Enabled := False;
 | 
			
		||||
    Caption := sGUIPoFileCheckingTool;
 | 
			
		||||
    ChildPoListBox.ItemIndex := -1;
 | 
			
		||||
    MasterPoListBox.ItemIndex := -1;
 | 
			
		||||
    UnselectMasterBtn.Enabled := False;
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TPoCheckerForm.GetSelectedMasterFiles: TStringList;
 | 
			
		||||
var
 | 
			
		||||
  i: Integer;
 | 
			
		||||
  Fn: String;
 | 
			
		||||
begin
 | 
			
		||||
  Result := TStringList.Create;
 | 
			
		||||
  for i := 0 to MasterPoListBox.Items.Count - 1 do
 | 
			
		||||
  begin
 | 
			
		||||
    Fn := MasterpoListBox.Items[i];
 | 
			
		||||
    if MasterPoListBox.Selected[i] then
 | 
			
		||||
      Result.Add(Fn);
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
@ -686,6 +613,7 @@ procedure TPoCheckerForm.AddToMasterPoList(Fn: String);
 | 
			
		||||
var
 | 
			
		||||
  Idx: Integer;
 | 
			
		||||
begin
 | 
			
		||||
  if not FileExistsUtf8(Fn) then Exit;
 | 
			
		||||
  Idx := MasterPoListBox.Items.IndexOf(Fn);
 | 
			
		||||
  if (Idx = -1) then
 | 
			
		||||
  begin
 | 
			
		||||
@ -696,54 +624,59 @@ end;
 | 
			
		||||
procedure TPoCheckerForm.AddToMasterPoList(S: TStrings);
 | 
			
		||||
var
 | 
			
		||||
  i, Idx: Integer;
 | 
			
		||||
  Str, PrevItem: String;
 | 
			
		||||
  Str: String;
 | 
			
		||||
begin
 | 
			
		||||
  {
 | 
			
		||||
  Idx := MasterPoListBox.ItemIndex;
 | 
			
		||||
  if (Idx <> -1) then
 | 
			
		||||
    PrevItem := MasterPoListBox.Items[Idx]
 | 
			
		||||
  else
 | 
			
		||||
    PrevItem := '';
 | 
			
		||||
  }
 | 
			
		||||
  MasterPoListBox.Items.BeginUpdate;
 | 
			
		||||
  try
 | 
			
		||||
    for i := 0 to S.Count - 1 do
 | 
			
		||||
    begin
 | 
			
		||||
      Str := S[i];
 | 
			
		||||
      Idx := MasterPoListBox.Items.IndexOf(Str);
 | 
			
		||||
      if (Idx = -1) then
 | 
			
		||||
        MasterPoListBox.Items.Add(Str);
 | 
			
		||||
      //skip files that do not exist (anymore)
 | 
			
		||||
      if FileExistsUtf8(Str) then
 | 
			
		||||
      begin
 | 
			
		||||
        Idx := MasterPoListBox.Items.IndexOf(Str);
 | 
			
		||||
        if (Idx = -1) then
 | 
			
		||||
          MasterPoListBox.Items.Add(Str);
 | 
			
		||||
      end
 | 
			
		||||
    end;
 | 
			
		||||
    {
 | 
			
		||||
    if (PrevItem <> '') then
 | 
			
		||||
    begin
 | 
			
		||||
      Idx := MasterPoListBox.Items.IndexOf(PrevItem);
 | 
			
		||||
      MasterPoListBox.ItemIndex := Idx;
 | 
			
		||||
    end;
 | 
			
		||||
    }
 | 
			
		||||
  finally
 | 
			
		||||
    MasterPoListBox.Items.EndUpdate;
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.AddToChildPoList(Fn: String);
 | 
			
		||||
var
 | 
			
		||||
  Idx: Integer;
 | 
			
		||||
begin
 | 
			
		||||
  Idx := FChildPoList.Add(Fn);
 | 
			
		||||
  if (Idx > -1) then
 | 
			
		||||
    LangFilterChange(LangFilter);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.AddToChildPoList(S: TStrings);
 | 
			
		||||
procedure TPoCheckerForm.SetSelectedMasterFiles(S: TStrings);
 | 
			
		||||
var
 | 
			
		||||
  i, Idx: Integer;
 | 
			
		||||
  Str: String;
 | 
			
		||||
  Fn: String;
 | 
			
		||||
  HasSelection: Boolean;
 | 
			
		||||
begin
 | 
			
		||||
  MasterPoListBox.ClearSelection;
 | 
			
		||||
  for i := 0 to S.Count - 1 do
 | 
			
		||||
  begin
 | 
			
		||||
    Str := S[i];
 | 
			
		||||
    Idx := FChildPoList.IndexOf(Str);
 | 
			
		||||
    if (Idx = -1) then
 | 
			
		||||
      FChildPoList.Add(Str);
 | 
			
		||||
    Fn := S.Strings[i];
 | 
			
		||||
    Idx := MasterPoListBox.Items.IndexOf(Fn);
 | 
			
		||||
    if (Idx <> -1) then
 | 
			
		||||
    begin
 | 
			
		||||
      MasterPoListBox.Selected[Idx] := True;
 | 
			
		||||
      HasSelection := True;
 | 
			
		||||
    end;
 | 
			
		||||
  end;
 | 
			
		||||
  LangFilterChange(LangFilter);
 | 
			
		||||
  //debugln('TPoCheckerForm.SetSelectedMasterFiles: MasterPoListBox.SelCount = ',DbgS(MasterPoListBox.SelCount));
 | 
			
		||||
  UpdateGUI(HasSelection);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -764,22 +697,26 @@ begin
 | 
			
		||||
  SelectDirectoryDialog.Filename := FPoCheckerSettings.SelectDirectoryFilename;
 | 
			
		||||
  OpenDialog.FileName := FPoCheckerSettings.OpenDialogFilename;
 | 
			
		||||
  AddToMasterPoList(FPoCheckerSettings.MasterPoList);
 | 
			
		||||
  AddToChildPoList(FPoCheckerSettings.ChildPoList);
 | 
			
		||||
  SetSelectedMasterFiles(FPoCheckerSettings.MasterPoSelList);
 | 
			
		||||
  //AddToChildPoList(FPoCheckerSettings.ChildPoList);
 | 
			
		||||
  {
 | 
			
		||||
  if (CompareText(ExtractFileExt(FPoCheckerSettings.LastSelectedFile), '.po') = 0) then
 | 
			
		||||
  begin
 | 
			
		||||
    if IsMasterPoName(FPoCheckerSettings.LastSelectedFile) then
 | 
			
		||||
      AddToMasterPoList(FPoCheckerSettings.LastSelectedFile)
 | 
			
		||||
    else
 | 
			
		||||
      AddToChildPoList(FPoCheckerSettings.LastSelectedFile);
 | 
			
		||||
    SetSelectedPoName(FPoCheckerSettings.LastSelectedFile)
 | 
			
		||||
    UpdateGUI(True)
 | 
			
		||||
  end
 | 
			
		||||
  else
 | 
			
		||||
    SetSelectedPoName('');
 | 
			
		||||
    UpdateGUI(False);
 | 
			
		||||
  }
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerForm.SaveConfig;
 | 
			
		||||
var
 | 
			
		||||
  SL: TStringList;
 | 
			
		||||
begin
 | 
			
		||||
  FPoCheckerSettings.LastSelectedFile := FSelectedPoName;
 | 
			
		||||
  FPoCheckerSettings.SelectDirectoryFilename := SelectDirectoryDialog.Filename;
 | 
			
		||||
  FPoCheckerSettings.OpenDialogFilename := OpenDialog.FileName;
 | 
			
		||||
  FPoCheckerSettings.TestTypes := GetTestTypesFromListBox;
 | 
			
		||||
@ -790,7 +727,12 @@ begin
 | 
			
		||||
  else
 | 
			
		||||
    FPoCheckerSettings.MainFormGeometry := Rect(RestoredLeft, RestoredTop, RestoredLeft + RestoredWidth, RestoredTop + RestoredHeight);
 | 
			
		||||
  FPoCheckerSettings.MasterPoList := MasterPoListBox.Items;
 | 
			
		||||
  FPoCheckerSettings.ChildPoList := FChildPoList;
 | 
			
		||||
  SL := GetSelectedMasterFiles;
 | 
			
		||||
  try
 | 
			
		||||
    FPoCheckerSettings.MasterPoSelList := SL;
 | 
			
		||||
  finally
 | 
			
		||||
    SL.Free;
 | 
			
		||||
  end;
 | 
			
		||||
  FPoCheckerSettings.SaveConfig;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -30,13 +30,13 @@ type
 | 
			
		||||
    FTestTypes: TPoTestTypes;
 | 
			
		||||
    FTestOptions: TPoTestOptions;
 | 
			
		||||
    FMasterPoList: TStringList;
 | 
			
		||||
    FChildPoList: TStringList;
 | 
			
		||||
    FMasterPoSelList: TStringList;
 | 
			
		||||
    FLastSelectedFile: String;
 | 
			
		||||
    FMainFormGeometry: TRect;
 | 
			
		||||
    FGraphFormGeometry: TRect;
 | 
			
		||||
    FResultsFormGeometry: TRect;
 | 
			
		||||
    function GetChildPoList: TStrings;
 | 
			
		||||
    function GetMasterPoList: TStrings;
 | 
			
		||||
    function GetMasterPoSelList: TStrings;
 | 
			
		||||
    function LoadLastSelectedFile: String;
 | 
			
		||||
    function LoadTestTypes: TPoTestTypes;
 | 
			
		||||
    function LoadTestOptions: TPoTestOptions;
 | 
			
		||||
@ -45,8 +45,7 @@ type
 | 
			
		||||
    function LoadSelectDirectoryFilename: String;
 | 
			
		||||
    function LoadOpenDialogFilename: String;
 | 
			
		||||
    procedure LoadMasterPoList(List: TStrings);
 | 
			
		||||
    procedure LoadChildPoList(List: TStrings);
 | 
			
		||||
    procedure SaveLastSelectedFile;
 | 
			
		||||
    procedure LoadMasterPoSelList(List: TStrings);
 | 
			
		||||
    procedure SaveTestTypes;
 | 
			
		||||
    procedure SaveTestOptions;
 | 
			
		||||
    procedure SaveWindowsGeometry;
 | 
			
		||||
@ -54,9 +53,9 @@ type
 | 
			
		||||
    procedure SaveSelectDirectoryFilename;
 | 
			
		||||
    procedure SaveOpenDialogFilename;
 | 
			
		||||
    procedure SaveMasterPoList;
 | 
			
		||||
    procedure SaveChildrenPoList;
 | 
			
		||||
    procedure SetChildPoList(AValue: TStrings);
 | 
			
		||||
    procedure SaveMasterPoSelList;
 | 
			
		||||
    procedure SetMasterPoList(AValue: TStrings);
 | 
			
		||||
    procedure SetMasterPoSelList(AValue: TStrings);
 | 
			
		||||
    procedure ResetAllProperties;
 | 
			
		||||
  public
 | 
			
		||||
    constructor Create;
 | 
			
		||||
@ -70,8 +69,7 @@ type
 | 
			
		||||
    property TestOptions: TPoTestOptions read FTestOptions write FTestOptions;
 | 
			
		||||
    property ExternalEditorName: String read FExternalEditorName write FExternalEditorName;
 | 
			
		||||
    property MasterPoList: TStrings read GetMasterPoList write SetMasterPoList;
 | 
			
		||||
    property ChildPoList: TStrings read GetChildPoList write SetChildPoList;
 | 
			
		||||
    property LastSelectedFile: String read FLastSelectedFile write FLastSelectedFile;
 | 
			
		||||
    property MasterPoSelList: TStrings read GetMasterPoSelList write SetMasterPoSelList;
 | 
			
		||||
    property SelectDirectoryFilename: String read FSelectDirectoryFilename write FSelectDirectoryFilename;
 | 
			
		||||
    property OpenDialogFilename: String read FOpenDialogFilename write FOpenDialogFilename;
 | 
			
		||||
    property MainFormGeometry: TRect read FMainFormGeometry write FMainFormGeometry;
 | 
			
		||||
@ -158,6 +156,7 @@ const
 | 
			
		||||
  pWindowsGeometry = 'General/WindowsGeometry/';
 | 
			
		||||
  pExternalEditor = 'ExternalEditor/';
 | 
			
		||||
  pMasterPoFiles = 'MasterPoFiles/';
 | 
			
		||||
  pMasterPoSelection = 'MasterPoSelection/';
 | 
			
		||||
  pChildPoFiles = 'ChildPoFiles/';
 | 
			
		||||
 | 
			
		||||
var
 | 
			
		||||
@ -240,11 +239,12 @@ begin
 | 
			
		||||
  Result := FMasterPoList;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
function TPoCheckerSettings.GetChildPoList: TStrings;
 | 
			
		||||
function TPoCheckerSettings.GetMasterPoSelList: TStrings;
 | 
			
		||||
begin
 | 
			
		||||
  Result := FChildPoList;
 | 
			
		||||
  Result := FMasterPoSelList;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function TPoCheckerSettings.LoadTestTypes: TPoTestTypes;
 | 
			
		||||
var
 | 
			
		||||
  tt: TPoTestType;
 | 
			
		||||
@ -331,25 +331,21 @@ begin
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerSettings.LoadChildPoList(List: TStrings);
 | 
			
		||||
procedure TPoCheckerSettings.LoadMasterPoSelList(List: TStrings);
 | 
			
		||||
var
 | 
			
		||||
  Cnt, i: Integer;
 | 
			
		||||
  Fn: String;
 | 
			
		||||
begin
 | 
			
		||||
  List.Clear;
 | 
			
		||||
  Cnt := Fconfig.GetValue(pChildPoFiles+'Count',0);
 | 
			
		||||
  //debugln('TPoCheckerSettings.LoadChildPoList: Cnt = ',DbgS(Cnt));
 | 
			
		||||
  Cnt := Fconfig.GetValue(pMasterpoSelection+'Count',0);
 | 
			
		||||
  //debugln('TPoCheckerSettings.LoadMasterPoSelList: Cnt = ',DbgS(Cnt));
 | 
			
		||||
  for i := 0 to Cnt - 1 do
 | 
			
		||||
  begin
 | 
			
		||||
    Fn := FConfig.GetValue(pChildPoFiles+Format('Item_%d/Value',[i]),'');
 | 
			
		||||
    Fn := FConfig.GetValue(pMasterpoSelection+Format('Item_%d/Value',[i]),'');
 | 
			
		||||
    if (Fn <> '') then List.Add(Fn);
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerSettings.SaveLastSelectedFile;
 | 
			
		||||
begin
 | 
			
		||||
  FConfig.SetDeleteValue(pLastSelected+'Value',FLastSelectedFile,'');
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerSettings.SaveTestTypes;
 | 
			
		||||
var
 | 
			
		||||
@ -413,27 +409,29 @@ begin
 | 
			
		||||
    FConfig.SetDeleteValue(pMasterPoFiles+Format('Item_%d/Value',[i]),FMasterPoList[i],'');
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerSettings.SaveChildrenPoList;
 | 
			
		||||
procedure TPoCheckerSettings.SaveMasterPoSelList;
 | 
			
		||||
var
 | 
			
		||||
  Cnt, i: Integer;
 | 
			
		||||
begin
 | 
			
		||||
  FConfig.DeletePath(pChildPoFiles);
 | 
			
		||||
  Cnt := FChildPoList.Count;
 | 
			
		||||
  FConfig.SetDeleteValue(pChildPoFiles+'Count',Cnt,0);
 | 
			
		||||
  FConfig.DeletePath(pMasterPoSelection);
 | 
			
		||||
  Cnt := FMasterPoSelList.Count;
 | 
			
		||||
  FConfig.SetDeleteValue(pMasterPoSelection+'Count',Cnt,0);
 | 
			
		||||
  for i := 0 to Cnt - 1 do
 | 
			
		||||
    FConfig.SetDeleteValue(pChildPoFiles+Format('Item_%d/Value',[i]),FChildPoList[i],'');
 | 
			
		||||
    FConfig.SetDeleteValue(pMasterPoSelection+Format('Item_%d/Value',[i]),FMasterPoSelList[i],'');
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerSettings.SetChildPoList(AValue: TStrings);
 | 
			
		||||
begin
 | 
			
		||||
  FChildPoList.Assign(AValue);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerSettings.SetMasterPoList(AValue: TStrings);
 | 
			
		||||
begin
 | 
			
		||||
  FMasterPoList.Assign(AValue);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerSettings.SetMasterPoSelList(AValue: TStrings);
 | 
			
		||||
begin
 | 
			
		||||
  FMasterPoSelList.Assign(AValue);
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
procedure TPoCheckerSettings.ResetAllProperties;
 | 
			
		||||
begin
 | 
			
		||||
  FTestTypes := [];
 | 
			
		||||
@ -449,15 +447,14 @@ begin
 | 
			
		||||
  FSelectDirectoryFilename := '';
 | 
			
		||||
  FLastSelectedFile := '';
 | 
			
		||||
  if Assigned(FMasterPoList) then FMasterPoList.Free;
 | 
			
		||||
  if Assigned(FMasterPoSelList) then FMasterPoSelList.Free;
 | 
			
		||||
  FMasterPoList := TStringList.Create;
 | 
			
		||||
  FMasterPoSelList := TStringList.Create;
 | 
			
		||||
  FMasterPoList.Sorted := True;
 | 
			
		||||
  FMasterPoList.Duplicates := dupIgnore;
 | 
			
		||||
  if Assigned(FChildPoList) then FChildPoList.Free;
 | 
			
		||||
  FChildPoList := TStringList.Create;
 | 
			
		||||
  FChildPoList.Sorted := True;
 | 
			
		||||
  FChildPoList.Duplicates := dupIgnore;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
constructor TPoCheckerSettings.Create;
 | 
			
		||||
begin
 | 
			
		||||
  try
 | 
			
		||||
@ -488,7 +485,7 @@ destructor TPoCheckerSettings.Destroy;
 | 
			
		||||
begin
 | 
			
		||||
  if Assigned(FConfig) then FConfig.Free;
 | 
			
		||||
  FMasterPoList.Free;
 | 
			
		||||
  FChildPoList.Free;
 | 
			
		||||
  FMasterPoSelList.Free;
 | 
			
		||||
  inherited Destroy;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
@ -503,7 +500,7 @@ begin
 | 
			
		||||
    FExternalEditorName := LoadExternalEditorName;
 | 
			
		||||
    LoadWindowsGeometry;
 | 
			
		||||
    LoadMasterPoList(FMasterPoList);
 | 
			
		||||
    LoadChildPoList(FChildPoList);
 | 
			
		||||
    LoadMasterPoSelList(FMasterPoSelList);
 | 
			
		||||
  except
 | 
			
		||||
    ResetAllProperties;
 | 
			
		||||
    debugln('TPoCheckerSettings.LoadConfig: Error loading config.');
 | 
			
		||||
@ -517,7 +514,6 @@ begin
 | 
			
		||||
    //the next line can be reomoved after some time
 | 
			
		||||
    FConfig.DeletePath(pLoadSettings);
 | 
			
		||||
 | 
			
		||||
    SaveLastSelectedFile;
 | 
			
		||||
    SaveTestTypes;
 | 
			
		||||
    SaveTestOptions;
 | 
			
		||||
    SaveExternalEditorName;
 | 
			
		||||
@ -525,7 +521,10 @@ begin
 | 
			
		||||
    SaveOpenDialogFilename;
 | 
			
		||||
    SaveWindowsGeometry;
 | 
			
		||||
    SaveMasterPoList;
 | 
			
		||||
    SaveChildrenPoList;
 | 
			
		||||
    SaveMasterPoSelList;
 | 
			
		||||
    //not used anymore, clear it. Remove this line after a while
 | 
			
		||||
    FConfig.DeletePath(pChildPoFiles);
 | 
			
		||||
 | 
			
		||||
    FConfig.WriteToDisk;
 | 
			
		||||
  except
 | 
			
		||||
    debugln('TPoCheckerSettings.SaveConfig: Error saving config.');
 | 
			
		||||
 | 
			
		||||
@ -122,6 +122,7 @@ Type
 | 
			
		||||
  public
 | 
			
		||||
    procedure Clear;
 | 
			
		||||
    procedure Add(AName: String; ANrTotal, ANrTranslated, ANrUnTranslated, ANrFuzzy, ANrErrors: Integer);
 | 
			
		||||
    procedure AddItemsTo(APoFamilyStats: TPoFamilyStats);
 | 
			
		||||
    constructor Create;
 | 
			
		||||
    destructor Destroy; override;
 | 
			
		||||
    procedure AddStatisticsToLog(ALog: TStrings);
 | 
			
		||||
@ -135,11 +136,12 @@ function IsMasterPoName(const Fn: String): Boolean;
 | 
			
		||||
function ExtractMasterNameFromChildName(const AChildName: String): String;
 | 
			
		||||
function FindAllTranslatedPoFiles(const Filename: string): TStringList;
 | 
			
		||||
 | 
			
		||||
const
 | 
			
		||||
  NoError = 0;
 | 
			
		||||
 | 
			
		||||
implementation
 | 
			
		||||
 | 
			
		||||
const
 | 
			
		||||
  NoError = 0;
 | 
			
		||||
  sCommentIdentifier = '#: ';
 | 
			
		||||
  //sCharSetIdentifier = '"Content-Type: text/plain; charset=';
 | 
			
		||||
  sMsgID = 'msgid "';
 | 
			
		||||
@ -389,6 +391,19 @@ begin
 | 
			
		||||
  FList.Add(TStat.Create(AName, ANrTotal, ANrTranslated, ANrUntranslated, ANrFuzzy, ANrErrors));
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
procedure TPoFamilyStats.AddItemsTo(APoFamilyStats: TPoFamilyStats);
 | 
			
		||||
var
 | 
			
		||||
  i: Integer;
 | 
			
		||||
  AStat: TStat;
 | 
			
		||||
begin
 | 
			
		||||
  for i := 0 to FList.Count - 1 do
 | 
			
		||||
  begin
 | 
			
		||||
    AStat := GetItems(i);
 | 
			
		||||
    APoFamilyStats.Add(AStat.PoName, AStat.NrTotal, AStat.NrTranslated,
 | 
			
		||||
                       AStat.NrUntranslated, AStat.NrFuzzy, AStat.NrErrors);
 | 
			
		||||
  end;
 | 
			
		||||
end;
 | 
			
		||||
 | 
			
		||||
constructor TPoFamilyStats.Create;
 | 
			
		||||
begin
 | 
			
		||||
  FList := TFPObjectList.Create(True);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user