Ignore:
Timestamp:
Jan 15, 2009, 9:47:30 AM (15 years ago)
Author:
george
Message:
  • Upraveno: Program přepracován pro podporu více překladových souborů a hromadného sloučení s novějšími anglickými verzemi z repozitáře Lazarusu.
  • Upraveno: Adresářová struktura překladových souborů přepracována tak, aby souhlasila se strukturou adresářů repozitáře Lazarusu.
  • Upraveno: Překladové soubory aktualizovány na SVN verzi 0.9.27.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/Lazarus translator/UMainForm.pas

    r7 r9  
    1 unit UMainForm; 
     1unit UMainForm;
    22
    33{$mode objfpc}{$H+}
     
    77uses
    88  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;
    1410
    1511type
    16   TTranslationItem = class
    17     Identification: string;
    18     OriginalText: string;
    19     TranslatedText: string;
    20   end;
     12
     13  { TForm1 }
    2114
    2215  { TMainForm }
    2316
    2417  TMainForm = class(TForm)
    25     ComboBox1: TComboBox;
     18    Button1: TButton;
    2619    ListView1: TListView;
    27     ProgressBar1: TProgressBar;
    2820    procedure Button1Click(Sender: TObject);
    29     procedure ComboBox1Change(Sender: TObject);
    30     procedure FormShow(Sender: TObject);
    31     procedure FormDestroy(Sender: TObject);
    3221    procedure FormCreate(Sender: TObject);
    33     procedure ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
    34       Data: Integer; var Compare: Integer);
    3522    procedure ListView1DblClick(Sender: TObject);
    36     procedure ListView1KeyPress(Sender: TObject; var Key: Char);
    37     procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);
    3823  private
    39     LastFileName: string;
    40     procedure MergeListFromFile;
     24    procedure LoadTranslationList;
     25    { private declarations }
    4126  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;
    4829
    4930var
    5031  MainForm: TMainForm;
    51   Ascending: Boolean;
    5232
    5333implementation
    5434
    55 function SortByColumn(Item1, Item2: TListItem; Data: integer): Integer; stdcall;
     35uses
     36  UItemListForm;
     37
     38{ TMainForm }
     39
     40procedure TMainForm.ListView1DblClick(Sender: TObject);
    5641begin
    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!');
    8548    end;
    86     EndUpdate;
     49    ItemListForm.TranslationFile := TranslationFolder + ItemListForm.RenameToLocale(ListView1.Selected.Caption);
     50    ItemListForm.ShowModal;
    8751  end;
    88   ProgressBar1.Max := StringList.Count;
    89   ProgressBar1.Position := CompletedCount;
    9052end;
    9153
    9254procedure TMainForm.FormCreate(Sender: TObject);
    9355begin
    94   StringList := TList.Create;
    95   LastSortedColumn := -1;
    96   Ascending := True;
     56  LoadTranslationList;
    9757end;
    9858
    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);
     59procedure TMainForm.Button1Click(Sender: TObject);
    10860var
    10961  I: Integer;
    11062begin
    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;
    16070  end;
    16171end;
    16272
    163 procedure TMainForm.ListView1KeyPress(Sender: TObject; var Key: Char);
     73procedure TMainForm.LoadTranslationList;
     74var
     75  I: Integer;
     76  NewItem: TListItem;
    16477begin
    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]
    19982  end;
    20083end;
    201 
    202 procedure TMainForm.SaveListToFile;
    203 var
    204   Source: TTextFileStream;
    205   I: Integer;
    206 begin
    207   Source := TTextFileStream.Create(LastFileName, fmOpenWrite);
    208   with Source do
    209   try
    210     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 do
    223     with TTranslationItem(StringList[I]) do begin
    224       WriteLn('#: ' + Identification);
    225       WriteLn('msgid "' + OriginalText + '"');
    226       WriteLn('msgstr "' + TranslatedText + '"');
    227       WriteLn('');
    228     end;
    229   finally
    230     Source.Free;
    231   end;
    232 end;
    233 
    234 procedure TMainForm.MergeListFromFile;
    235 var
    236   Source: TTextFileStream;
    237   Row: string;
    238   NewItem: TTranslationItem;
    239   I: Integer;
    240 begin
    241   NewItem := nil;
    242   Source := TTextFileStream.Create(TranslationMergeFileName, fmOpenRead);
    243   try
    244     for I := 0 to 10 do Row := Source.ReadLn;  // Skip lines
    245 
    246     while not Source.Eof do begin
    247       Row := Source.ReadLn;
    248       if Copy(Row, 1, 2) = '#:' then begin
    249         NewItem := TTranslationItem.Create;
    250         NewItem.Identification := Copy(Row, 4, 255);
    251       end else
    252       if Copy(Row, 1, Pos(' ', Row) - 1) = 'msgid' then
    253         NewItem.OriginalText := Copy(Row, 8, Length(Row) - 8)
    254       else
    255       if Copy(Row, 1, Pos(' ', Row) - 1) = 'msgstr' then begin
    256         NewItem.TranslatedText := Copy(Row, 9, Length(Row) - 9);
    257         I := 0;
    258         while (I < StringList.Count) and ((TTranslationItem(StringList[I]).OriginalText <> NewItem.OriginalText) or
    259         (TTranslationItem(StringList[I]).Identification <> NewItem.Identification)) do Inc(I);
    260         if I < StringList.Count then
    261           TTranslationItem(StringList[I]).TranslatedText := NewItem.TranslatedText;
    262         NewItem.Free;
    263       end;
    264     end;
    265   finally
    266     Source.Free;
    267   end;
    268 end;
    269 
    27084
    27185initialization
Note: See TracChangeset for help on using the changeset viewer.