mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-12 19:29:23 +02:00
144 lines
3.8 KiB
ObjectPascal
144 lines
3.8 KiB
ObjectPascal
{ $Id$ }
|
|
{
|
|
***************************************************************************
|
|
* *
|
|
* This source is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This code is distributed in the hope that it will be useful, but *
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
|
* General Public License for more details. *
|
|
* *
|
|
* A copy of the GNU General Public License is available on the World *
|
|
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
|
|
* obtain it by writing to the Free Software Foundation, *
|
|
* Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA. *
|
|
* *
|
|
***************************************************************************
|
|
|
|
Author: Mattias Gaertner
|
|
|
|
Name:
|
|
updatepofiles - updates po files.
|
|
|
|
Synopsis:
|
|
updatepofiles filename1.po [filename2.po ... filenameN.po]
|
|
|
|
Description:
|
|
updatepofiles deletes doubles in the po file and merges new strings into
|
|
all translated po files (filename1.*.po)
|
|
|
|
}
|
|
program UpdatePoFiles;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
uses
|
|
Classes, SysUtils, Translations, LazFileUtils, LazUTF8;
|
|
|
|
var
|
|
Files: TStringList;
|
|
Prefix: string;
|
|
ResFiles: array of TStringList;
|
|
|
|
procedure AddResFile(const PoIndex:Integer; const AResFile:string);
|
|
begin
|
|
if PoIndex>(Length(ResFiles)-1) then
|
|
SetLength(ResFiles, PoIndex+1);
|
|
|
|
if ResFiles[PoIndex]=nil then
|
|
ResFiles[PoIndex] := TStringList.Create;
|
|
|
|
ResFiles[PoIndex].Add(AResFile);
|
|
end;
|
|
|
|
procedure ClearResFiles;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
for i:=0 to Length(ResFiles)-1 do
|
|
if ResFiles[i]<>nil then
|
|
ResFiles[i].Free;
|
|
end;
|
|
|
|
function ParamsValid: boolean;
|
|
var
|
|
i: Integer;
|
|
Filename: String;
|
|
Ext: String;
|
|
Name: string;
|
|
PoIndex: Integer;
|
|
begin
|
|
Result:=false;
|
|
PoIndex:=0;
|
|
|
|
if ParamCount<1 then
|
|
exit;
|
|
|
|
for i:=1 to ParamCount do begin
|
|
|
|
Filename:=ParamStrUTF8(i);
|
|
|
|
Ext:=ExtractFileExt(Filename);
|
|
|
|
if not FileExistsUTF8(Filename) then begin
|
|
|
|
if (Ext='.rst') or (Ext='.lrt') or (Ext='.rsj') then
|
|
continue; // ignore resource files
|
|
|
|
writeln('ERROR: file not found: ',FileName);
|
|
exit;
|
|
end;
|
|
|
|
if (Ext<>'.po') and (Ext<>'.rst') and (Ext<>'.lrt') and (Ext<>'.rsj') then begin
|
|
writeln('ERROR: invalid extension: ',Filename);
|
|
exit;
|
|
end;
|
|
|
|
Name:=ExtractFileName(Filename);
|
|
Name:=LeftStr(Name,length(Name)-length(Ext));
|
|
if Pos('.',Name)>0 then begin
|
|
writeln('ERROR: invalid unitname: ',Name);
|
|
exit;
|
|
end;
|
|
|
|
if Ext='.po' then begin
|
|
if Files=nil then
|
|
Files:=TStringList.Create;
|
|
Files.Add(Filename);
|
|
inc(PoIndex);
|
|
SetLength(ResFiles, Files.Count); // make sure Files and ResFiles are in sync
|
|
end else
|
|
AddResFile(PoIndex, FileName);
|
|
end;
|
|
Result:=true;
|
|
end;
|
|
|
|
procedure UpdateAllPoFiles;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
for i:=0 to Files.Count-1 do
|
|
UpdatePoFile(ResFiles[i], Files[i]);
|
|
end;
|
|
|
|
begin
|
|
Prefix:='';
|
|
Files:=nil;
|
|
|
|
if not ParamsValid then
|
|
writeln('Usage: ',ExtractFileName(ParamStrUTF8(0))
|
|
,' filename1.po [filename2.po ... filenameN.po]')
|
|
else
|
|
UpdateAllPoFiles;
|
|
|
|
if Files<>nil then
|
|
Files.Free;
|
|
|
|
ClearResFiles;
|
|
end.
|
|
|