Changeset 9 for tools/Lazarus translator/UMainForm.pas
- Timestamp:
- Jan 15, 2009, 9:47:30 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/Lazarus translator/UMainForm.pas
r7 r9 1 unit UMainForm; 1 unit UMainForm; 2 2 3 3 {$mode objfpc}{$H+} … … 7 7 uses 8 8 Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, 9 ComCtrls, UItemTranslationForm, UTextFileStream, StdCtrls; 10 11 const 12 TranslationFolder: string = '../../trunk/'; 13 TranslationMergeFileName: string = '../../tags/0.9.25/lazaruside.cz.po'; 9 ComCtrls, StdCtrls; 14 10 15 11 type 16 TTranslationItem = class 17 Identification: string; 18 OriginalText: string; 19 TranslatedText: string; 20 end; 12 13 { TForm1 } 21 14 22 15 { TMainForm } 23 16 24 17 TMainForm = class(TForm) 25 ComboBox1: TComboBox;18 Button1: TButton; 26 19 ListView1: TListView; 27 ProgressBar1: TProgressBar;28 20 procedure Button1Click(Sender: TObject); 29 procedure ComboBox1Change(Sender: TObject);30 procedure FormShow(Sender: TObject);31 procedure FormDestroy(Sender: TObject);32 21 procedure FormCreate(Sender: TObject); 33 procedure ListView1Compare(Sender: TObject; Item1, Item2: TListItem;34 Data: Integer; var Compare: Integer);35 22 procedure ListView1DblClick(Sender: TObject); 36 procedure ListView1KeyPress(Sender: TObject; var Key: Char);37 procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);38 23 private 39 LastFileName: string;40 procedure MergeListFromFile;24 procedure LoadTranslationList; 25 { private declarations } 41 26 public 42 LastSortedColumn: Integer; 43 StringList: TList; // TList<TText> 44 procedure FillList; 45 procedure LoadListFromFile; 46 procedure SaveListToFile; 47 end; 27 { public declarations } 28 end; 48 29 49 30 var 50 31 MainForm: TMainForm; 51 Ascending: Boolean;52 32 53 33 implementation 54 34 55 function SortByColumn(Item1, Item2: TListItem; Data: integer): Integer; stdcall; 35 uses 36 UItemListForm; 37 38 { TMainForm } 39 40 procedure TMainForm.ListView1DblClick(Sender: TObject); 56 41 begin 57 if Data = 0 then 58 Result := AnsiCompareText(Item1.Caption, Item2.Caption) 59 else 60 Result := AnsiCompareText(Item1.SubItems[Data - 1], 61 Item2.SubItems[Data - 1]); 62 if not Ascending then Result := -Result; 63 end; 64 65 procedure TMainForm.FillList; 66 var 67 I: Integer; 68 NewItem: TListItem; 69 CompletedCount: Integer; 70 begin 71 CompletedCount := 0; 72 with ListView1, Items do begin 73 BeginUpdate; 74 Clear; 75 for I := 0 to StringList.Count - 1 do 76 with TTranslationItem(StringList[I]) do begin 77 NewItem := Add; 78 NewItem.Data := StringList[I]; 79 NewItem.Caption := OriginalText; 80 with NewItem.SubItems do begin 81 Add(TranslatedText); 82 Add(Identification); 83 if TranslatedText <> '' then Inc(CompletedCount); 84 end; 42 if Assigned(ListView1.Selected) then begin 43 if not FileExists(TranslationFolder + ItemListForm.RenameToLocale(ListView1.Selected.Caption)) then begin 44 ForceDirectories(TranslationFolder + ExtractFileDir(ListView1.Selected.Caption)); 45 if FileExists(LazarusRepository + ListView1.Selected.Caption) then 46 FileCopy(LazarusRepository + ListView1.Selected.Caption, TranslationFolder + ItemListForm.RenameToLocale(ListView1.Selected.Caption)) 47 else raise Exception.Create('Zdrojový soubor ' + LazarusRepository + ListView1.Selected.Caption + ' nenalezen!'); 85 48 end; 86 EndUpdate; 49 ItemListForm.TranslationFile := TranslationFolder + ItemListForm.RenameToLocale(ListView1.Selected.Caption); 50 ItemListForm.ShowModal; 87 51 end; 88 ProgressBar1.Max := StringList.Count;89 ProgressBar1.Position := CompletedCount;90 52 end; 91 53 92 54 procedure TMainForm.FormCreate(Sender: TObject); 93 55 begin 94 StringList := TList.Create; 95 LastSortedColumn := -1; 96 Ascending := True; 56 LoadTranslationList; 97 57 end; 98 58 99 procedure TMainForm.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; 100 Data: Integer; var Compare: Integer); 101 begin 102 Compare := AnsiCompareText(Item1.SubItems[0], 103 Item2.SubItems[0]); 104 if not Ascending then Compare := -Compare; 105 end; 106 107 procedure TMainForm.FormDestroy(Sender: TObject); 59 procedure TMainForm.Button1Click(Sender: TObject); 108 60 var 109 61 I: Integer; 110 62 begin 111 SaveListToFile; 112 for I := 0 to StringList.Count - 1 do 113 TTranslationItem(StringList[I]).Free; 114 StringList.Free; 115 end; 116 117 procedure TMainForm.FormShow(Sender: TObject); 118 begin 119 LoadListFromFile; 120 //MergeListFromFile; 121 FillList; 122 end; 123 124 procedure TMainForm.Button1Click(Sender: TObject); 125 begin 126 ListView1.SortColumn := 1; 127 ListView1.SortType := stData; 128 ListView1.Refresh; 129 ListView1.Invalidate; 130 end; 131 132 procedure TMainForm.ComboBox1Change(Sender: TObject); 133 begin 134 SaveListToFile; 135 LoadListFromFile; 136 FillList; 137 end; 138 139 procedure TMainForm.ListView1ColumnClick(Sender: TObject; Column: TListColumn); 140 begin 141 if Column.Index = LastSortedColumn then 142 Ascending := not Ascending 143 else 144 LastSortedColumn := Column.Index; 145 //TListView(Sender).CustomSort(@SortByColumn, Column.Index); 146 end; 147 148 procedure TMainForm.ListView1DblClick(Sender: TObject); 149 begin 150 if Assigned(ListView1.Selected) then 151 with ItemTranslationForm, TTranslationItem(ListView1.Selected.Data) do begin 152 Memo1.Text := OriginalText; 153 Memo2.Text := TranslatedText; 154 ItemTranslationForm.ShowModal; 155 //OriginalText := Memo1.Text; 156 TranslatedText := Copy(Memo2.Text, 1, Length(Memo2.Text) - 2); 157 158 ListView1.Selected.SubItems[0] := TranslatedText; 159 SaveListToFile; 63 for I := 0 to High(LanguageFiles) do begin 64 ForceDirectories(TranslationFolder + ExtractFileDir(LanguageFiles[I])); 65 ItemListForm.TranslationFile := LazarusRepository + LanguageFiles[I]; 66 ItemListForm.LoadListFromFile; 67 ItemListForm.TranslationFile := TranslationFolder + ItemListForm.RenameToLocale(LanguageFiles[I]); 68 ItemListForm.MergeListFromFile; 69 ItemListForm.SaveListToFile; 160 70 end; 161 71 end; 162 72 163 procedure TMainForm.ListView1KeyPress(Sender: TObject; var Key: Char); 73 procedure TMainForm.LoadTranslationList; 74 var 75 I: Integer; 76 NewItem: TListItem; 164 77 begin 165 if Key = #13 then ListView1DblClick(Self); 166 end; 167 168 procedure TMainForm.LoadListFromFile; 169 var 170 Source: TTextFileStream; 171 Row: string; 172 NewItem: TTranslationItem; 173 I: Integer; 174 begin 175 StringList.Clear; 176 LastFileName := TranslationFolder + ComboBox1.Text; 177 NewItem := nil; 178 Source := TTextFileStream.Create(LastFileName, fmOpenRead); 179 try 180 for I := 0 to 11 do Row := Source.ReadLn; // Skip leading info lines 181 182 while not Source.Eof do begin 183 Row := Source.ReadLn; 184 if Copy(Row, 1, 2) = '#:' then begin 185 NewItem := TTranslationItem.Create; 186 NewItem.Identification := Copy(Row, 4, 255); 187 end else 188 if Copy(Row, 1, Pos(' ', Row) - 1) = 'msgid' then begin 189 if Assigned(NewItem) then 190 NewItem.OriginalText := Copy(Row, 8, Length(Row) - 8) 191 end else 192 if Copy(Row, 1, Pos(' ', Row) - 1) = 'msgstr' then begin 193 NewItem.TranslatedText := Copy(Row, 9, Length(Row) - 9); 194 StringList.Add(NewItem); 195 end; 196 end; 197 finally 198 Source.Free; 78 ListView1.Items.Clear; 79 for I := 0 to High(LanguageFiles) do begin 80 NewItem := ListView1.Items.Add; 81 NewItem.Caption := LanguageFiles[I] 199 82 end; 200 83 end; 201 202 procedure TMainForm.SaveListToFile;203 var204 Source: TTextFileStream;205 I: Integer;206 begin207 Source := TTextFileStream.Create(LastFileName, fmOpenWrite);208 with Source do209 try210 WriteLn('msgid ""');211 WriteLn('msgstr ""');212 WriteLn('"Project-Id-Version: \n"');213 WriteLn('"POT-Creation-Date: \n"');214 WriteLn('"PO-Revision-Date: 2009-01-07 19:03+0100\n"');215 WriteLn('"Last-Translator: Chronos <robie@centrum.cz>\n"');216 WriteLn('"Translation-Source: http://tv.zdechov.net/svn/lazarus_czech/\n"');217 WriteLn('"Language-Team: \n"');218 WriteLn('"MIME-Version: 1.0\n"');219 WriteLn('"Content-Type: text/plain; charset=UTF-8\n"');220 WriteLn('"Content-Transfer-Encoding: 8bit\n"');221 WriteLn('');222 for I := 0 to StringList.Count - 1 do223 with TTranslationItem(StringList[I]) do begin224 WriteLn('#: ' + Identification);225 WriteLn('msgid "' + OriginalText + '"');226 WriteLn('msgstr "' + TranslatedText + '"');227 WriteLn('');228 end;229 finally230 Source.Free;231 end;232 end;233 234 procedure TMainForm.MergeListFromFile;235 var236 Source: TTextFileStream;237 Row: string;238 NewItem: TTranslationItem;239 I: Integer;240 begin241 NewItem := nil;242 Source := TTextFileStream.Create(TranslationMergeFileName, fmOpenRead);243 try244 for I := 0 to 10 do Row := Source.ReadLn; // Skip lines245 246 while not Source.Eof do begin247 Row := Source.ReadLn;248 if Copy(Row, 1, 2) = '#:' then begin249 NewItem := TTranslationItem.Create;250 NewItem.Identification := Copy(Row, 4, 255);251 end else252 if Copy(Row, 1, Pos(' ', Row) - 1) = 'msgid' then253 NewItem.OriginalText := Copy(Row, 8, Length(Row) - 8)254 else255 if Copy(Row, 1, Pos(' ', Row) - 1) = 'msgstr' then begin256 NewItem.TranslatedText := Copy(Row, 9, Length(Row) - 9);257 I := 0;258 while (I < StringList.Count) and ((TTranslationItem(StringList[I]).OriginalText <> NewItem.OriginalText) or259 (TTranslationItem(StringList[I]).Identification <> NewItem.Identification)) do Inc(I);260 if I < StringList.Count then261 TTranslationItem(StringList[I]).TranslatedText := NewItem.TranslatedText;262 NewItem.Free;263 end;264 end;265 finally266 Source.Free;267 end;268 end;269 270 84 271 85 initialization
Note:
See TracChangeset
for help on using the changeset viewer.