[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tyndur-devel] [PATCH 2/3] lpt: Mehrsprachige Meldungen vorbereiten



On Sat, Sep 26 16:35, Kevin Wolf wrote:
> * lpt: Ressourcestrings fuer Meldungen verwenden, damit sie uebersetzt
>   werden koennen
> 
> Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
> ---
>  src/modules/pas/lpt/Makefile.all          |    2 +-
>  src/modules/pas/lpt/helpers.pas           |   22 +++++--
>  src/modules/pas/lpt/lang/Makefile.conf    |    1 +
>  src/modules/pas/lpt/lang/lang_en.c        |   48 +++++++++++++++
>  src/modules/pas/lpt/lpt.pas               |   93 ++++++++++++++++++++--------
>  src/modules/pas/lpt/packages.pas          |    9 ++-
>  src/modules/pas/lpt/repositories.pas      |   10 ++-
>  src/modules/pas/lpt/repository_base.pas   |    3 +
>  src/modules/pas/lpt/repository_file.pas   |    2 +-
>  src/modules/pas/lpt/repository_http.pas   |    7 ++-
>  src/modules/pas/lpt/repository_single.pas |    5 +-
>  11 files changed, 158 insertions(+), 44 deletions(-)
>  create mode 100644 src/modules/pas/lpt/lang/Makefile.conf
>  create mode 100644 src/modules/pas/lpt/lang/lang_en.c
> 
> diff --git a/src/modules/pas/lpt/Makefile.all b/src/modules/pas/lpt/Makefile.all
> index dd0ebaa..c4078d2 100644
> --- a/src/modules/pas/lpt/Makefile.all
> +++ b/src/modules/pas/lpt/Makefile.all
> @@ -2,5 +2,5 @@ shopt -s extglob
>  source $LOST_BUILDMK_ROOT/config.sh
>  
>  echo "LD   $1/apps/lpt"
> -$LOST_TOOLS_LD -olpt.mod -Ttext=0x40000000 *.o --start-group ../lib/units/*.a $2 --end-group
> +$LOST_TOOLS_LD -olpt.mod -Ttext=0x40000000 *.o lang/*.o --start-group ../lib/units/*.a $2 --end-group
>  $LOST_TOOLS_STRIP -s lpt.mod -o $1/apps/lpt
> diff --git a/src/modules/pas/lpt/helpers.pas b/src/modules/pas/lpt/helpers.pas
> index ba96dbf..b26ff4b 100644
> --- a/src/modules/pas/lpt/helpers.pas
> +++ b/src/modules/pas/lpt/helpers.pas
> @@ -2,7 +2,7 @@ unit helpers;
>  {$MODE ObjFPC}
>  
>  interface
> -uses crt, sysutils, dos, classes, tar, packages, tcpip, http;
> +uses crt, sysutils, dos, classes, tar, packages, tcpip, http, multilang;
>  
>  procedure ScanFile(pkgset: TPackageSet; filename, repository: String);
>  procedure DrawProgress(http: HTTPRequest);
> @@ -17,6 +17,14 @@ procedure mkpath(path: string);
>  
>  implementation
>  
> +resourcestring
> +    rsBytesReceived = '%d Bytes empfangen';
> +    rsBytesReceivedPartial = '%d/%d Bytes empfangen';

Möchtest du hier nicht auch die tolle Notation für "Bytes" verwenden?
;-)

> +
> +    rsDownloading = 'Herunterladen von %s';
> +    rsConnecting = 'Verbinde...';
> +    rsHTTPError = 'Fehler: HTTP-Statuscode';
> +
>  procedure mkpath(path: string);
>  var
>      i: integer;
> @@ -54,9 +62,11 @@ begin
>      end;
>  
>      if http.responseRemaining >= 0 then begin
> -        Write(#13, (http.responseLength - http.responseRemaining), '/', http.responseLength, ' Bytes empfangen');
> +        Write(#13, FormatNum(rsBytesReceivedPartial,
> +            [http.responseLength - http.responseRemaining,
> +            http.responseLength]));
>      end else begin
> -        Write(#13, http.responseLength, ' Bytes empfangen');
> +        Write(#13, FormatNum(rsBytesReceived, [http.responseLength]));
>      end;
>  end;
>  
> @@ -67,8 +77,8 @@ begin
>      httpc := HTTPRequest.create(url);
>      httpc.setRequestHeader('Pragma', 'no-cache');
>      httpc.setRequestHeader('Cache-Control', 'no-cache');
> -    WriteLn('Herunterladen von ', url);
> -    Write('Verbinde...');
> +    WriteLn(Format(rsDownloading, [url]));
> +    Write(rsConnecting);
>      httpc.onReadTick := @DrawProgress;
>      httpc.get;
>      WriteLn;
> @@ -76,7 +86,7 @@ begin
>      if httpc.statusCode = 200 then begin
>          exit(httpc);
>      end else begin
> -        WriteLn('Fehler: HTTP-Statuscode ', httpc.statusCode);
> +        WriteLn(rsHTTPError, ' ', httpc.statusCode);
>          exit(nil)
>      end;
>  end;
> diff --git a/src/modules/pas/lpt/lang/Makefile.conf b/src/modules/pas/lpt/lang/Makefile.conf
> new file mode 100644
> index 0000000..594ef2a
> --- /dev/null
> +++ b/src/modules/pas/lpt/lang/Makefile.conf
> @@ -0,0 +1 @@
> +CC_FLAGS_APPEND="-Wno-missing-braces"

Ui ich wusste garnicht, dass wir sowas Tolles wie eine Makefile.conf
haben. buildmk.sh ueberrascht mich doch immer von neuem. *g*

> diff --git a/src/modules/pas/lpt/lang/lang_en.c b/src/modules/pas/lpt/lang/lang_en.c
> new file mode 100644
> index 0000000..c90d990
> --- /dev/null
> +++ b/src/modules/pas/lpt/lang/lang_en.c
> @@ -0,0 +1,48 @@
> +/*
> + * Copyright (c) 2009 The tyndur Project. All rights reserved.
> + *
> + * This code is derived from software contributed to the tyndur Project
> + * by Kevin Wolf.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
> + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
> + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
> + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
> + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
> + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
> + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
> + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + */
> +
> +#include "tms.h"
> +
> +static int get_number(int n)
> +{
> +    return (n == 1 ? 0 : 1);
> +}
> +
> +static const struct tms_strings dict[] = {
> +    0,
> +    0,
> +};
> +
> +static const struct tms_lang lang = {
> +    .lang = "en",
> +    .numbers = 2,
> +    .get_number = get_number,
> +    .strings = dict,
> +};
> +
> +LANGUAGE(&lang)
> diff --git a/src/modules/pas/lpt/lpt.pas b/src/modules/pas/lpt/lpt.pas
> index 9b3f98e..1cdf230 100644
> --- a/src/modules/pas/lpt/lpt.pas
> +++ b/src/modules/pas/lpt/lpt.pas
> @@ -1,16 +1,37 @@
>  program lpt;
>  {$MODE ObjFPC}
>  
> -uses crt, dos, sysutils, classes, tar, helpers, packages, repositories, repository_base;
> +uses
> +    crt, dos, sysutils, classes, tar, multilang,
> +    helpers, packages, repositories, repository_base;
> +
> +resourcestring
> +    rsUsage =
> +        'Aufruf: lpt [scan|list|get <Paket>]'#10 +
> +        '  scan: L??dt die Paketlisten von den Servern'#10 +
> +        '  list: Zeigt alle verf??gbaren Pakete an'#10 +
> +        '  get:  Installiert das angegebene Paket'#10 +
> +        '  install: Installiert das angegebene Paket aus lokaler Datei'#10 +
> +        '           Achtung, Datei als letzten Parameter angeben!';
> +
> +    rsDownloadAndExtract = 'Herunterladen und Entpacken von %s';
> +    rsSearching = 'Suche %s';
> +    rsConfiguring = 'Richte %s ein';
> +
> +    rsError = 'Fehler:';
> +    rsCantLoadRepoList = 'Kann Repository-Liste nicht laden:';
> +    rsFailDownloadRepoList = 'Download der Paketliste f??r %s fehlgeschlagen:';
> +    rsAlreadyInstalled = 'Paket ist bereits installiert:';
> +    rsCannotReadPkglists = 'Kann die Paketlisten nicht einlesen:';
> +    rsCannotFindPackage = 'Konnte keine Version von %s finden';
> +    rsCannotResolveDep = 'Konnte die Abh??ngigkeiten des Pakets nicht aufl??sen:';
> +    rsWrongParamCount = 'Falsche Parameterzahl';
> +    rsInvalidAction = 'Ung??tige Aktion:';
> +
>  
>  procedure PrintUsage;
>  begin
> -    WriteLn('Aufruf: lpt [scan|list|get <Paket>]');
> -    WriteLn('  scan: L??dt die Paketlisten von den Servern');
> -    WriteLn('  list: Zeigt alle verf??gbaren Pakete an');
> -    WriteLn('  get:  Installiert das angegebene Paket');
> -    WriteLn('  install: Installiert das angegebene Paket aus lokaler Datei');
> -    WriteLn('           Achtung, Datei als letzten Parameter angeben!');
> +    WriteLn(rsUsage);
>  end;
>  
>  procedure Scan;
> @@ -26,7 +47,7 @@ begin
>      except
>          on e: Exception do begin
>              TextColor(12);
> -            WriteLn('Kann Repository-Liste nicht laden:');
> +            WriteLn(rsCantLoadRepoList);
>              WriteLn(e.message);
>              TextColor(7);
>          end;
> @@ -40,7 +61,7 @@ begin
>          except
>              on e: EDownload do begin
>                  TextColor(12);
> -                WriteLn('Download der Paketliste f??r ' + repo.name + ' fehlgeschlagen:');
> +                WriteLn(Format(rsFailDownloadRepoList, [repo.name]));
>                  WriteLn(e.message);
>                  TextColor(7);
>              end;
> @@ -62,7 +83,7 @@ begin
>          except
>              on e: Exception do begin
>                  TextColor(12);
> -                WriteLn('Fehler: ' + e.message);
> +                WriteLn(rsError, ' ', e.message);
>                  TextColor(7);
>              end;
>          end;
> @@ -86,7 +107,7 @@ procedure Get(pkgname: String; reinstall: boolean);
>              version.version + '/' + version.section.section + '/';
>          if FileExists(filename) and not reinstall then begin
>              TextColor(15);
> -            WriteLn('Bereits installiert: ' + version.pkg.name + '/' +
> +            WriteLn(rsAlreadyInstalled, ' ', version.pkg.name, '/',
>                  version.section.section);
>              TextColor(7);
>              Install := true;
> @@ -97,7 +118,8 @@ procedure Get(pkgname: String; reinstall: boolean);
>  
>          // Ansonsten herunterladen und installieren
>          TextColor(15);
> -        WriteLn('Herunterladen und Entpacken von ' + version.pkg.name + '/' + version.section.section);
> +        WriteLn(Format(rsDownloadAndExtract, [version.pkg.name + '/' +
> +            version.section.section]));
>          TextColor(7);
>          installarchive := repos.Download(version);
>          if installarchive <> nil then begin
> @@ -107,9 +129,10 @@ procedure Get(pkgname: String; reinstall: boolean);
>          filename := 'file:/packages/' + version.pkg.name + '/' +
>              version.version + '/postinstall-' + version.section.section;
>  
> -        WriteLn('Suche ' + filename);
> +        WriteLn(Format(rsSearching, [filename]));
>          if FileExists(filename) then begin
> -            WriteLn('Richte ' + version.pkg.name + '/' + version.section.section + ' ein');
> +            WriteLn(Format(rsConfiguring, [version.pkg.name + '/' +
> +                version.section.section]));
>              exec(filename, '');
>          end;
>  
> @@ -134,7 +157,7 @@ begin
>      except
>          on e: EPackageList do begin
>              TextColor(12);
> -            WriteLn('Kann die Paketlisten nicht einlesen: ');
> +            WriteLn(rsCannotReadPkglists);
>              WriteLn(e.message);
>              TextColor(7);
>          end;
> @@ -154,7 +177,7 @@ begin
>      
>      if version = nil then begin
>          TextColor(12);
> -        WriteLn('Konnte keine Version von ' + pkgname + ' finden');
> +        WriteLn(format(rsCannotFindPackage, [pkgname]));
>          TextColor(7);
>          exit;
>      end;
> @@ -166,7 +189,7 @@ begin
>      except
>          on e: EDependency do begin
>              TextColor(12);
> -            WriteLn('Konnte die Abhaengigkeiten des Pakets nicht aufloesen:');
> +            WriteLn(rsCannotResolveDep);
>              WriteLn(e.message);
>              TextColor(7);
>              exit;
> @@ -184,7 +207,7 @@ begin
>                  except
>                      on e: Exception do begin
>                          TextColor(12);
> -                        WriteLn('Fehler: ' + e.message);
> +                        WriteLn(rsError, ' ', e.message);
>                          TextColor(7);
>                      end;
>                  end;
> @@ -282,7 +305,23 @@ begin
>      c_lostio_create_link(@path[1], @pubname[1], False);
>  end;
>  
> +procedure SetLang;
> +var
> +    name: String;
> +    lang: TLanguage;
> +begin
> +    name := GetEnv('LANG');
> +    if name <> '' then begin
> +        lang := GetLanguage(name);
> +        if lang <> nil then begin
> +            SetLanguage(lang);
> +        end;
> +    end;
> +end;
> +
>  begin
> +    SetLang;
> +
>      if system.ParamCount < 1 then begin
>          PrintUsage;
>          halt(1);
> @@ -296,60 +335,60 @@ begin
>          if system.ParamCount = 2 then begin
>              Get(system.ParamStr(2), false);
>          end else begin
> -            WriteLn('Falsche Parameterzahl');
> +            WriteLn(rsWrongParamCount);
>              PrintUsage;
>          end;
>      end else if system.ParamStr(1) = 'reget' then begin
>          if system.ParamCount = 2 then begin
>              Get(system.ParamStr(2), true);
>          end else begin
> -            WriteLn('Falsche Parameterzahl');
> +            WriteLn(rsWrongParamCount);
>              PrintUsage;
>          end;
>      end else if system.ParamStr(1) = 'install' then begin
>          if system.ParamCount = 3 then begin
>              Install(system.ParamStr(3), system.ParamStr(2), false);
>          end else begin
> -            WriteLn('Falsche Parameterzahl');
> +            WriteLn(rsWrongParamCount);
>              PrintUsage;
>          end;
>      end else if system.ParamStr(1) = 'reinstall' then begin
>          if system.ParamCount = 3 then begin
>              Install(system.ParamStr(3), system.ParamStr(2), true);
>          end else begin
> -            WriteLn('Falsche Parameterzahl');
> +            WriteLn(rsWrongParamCount);
>              PrintUsage;
>          end;
>      end else if system.ParamStr(1) = 'cfg-addbin' then begin
>          if system.ParamCount = 3 then begin
>              CfgAddbin(system.ParamStr(2), system.ParamStr(3));
>          end else begin
> -            WriteLn('Falsche Parameterzahl');
> +            WriteLn(rsWrongParamCount);
>              PrintUsage;
>          end;
>      end else if system.ParamStr(1) = 'cfg-addlib' then begin
>          if system.ParamCount = 3 then begin
>              CfgAddlib(system.ParamStr(2), system.ParamStr(3));
>          end else begin
> -            WriteLn('Falsche Parameterzahl');
> +            WriteLn(rsWrongParamCount);
>              PrintUsage;
>          end;
>      end else if system.ParamStr(1) = 'cfg-addinc' then begin
>          if system.ParamCount = 3 then begin
>              CfgAddinc(system.ParamStr(2), system.ParamStr(3));
>          end else begin
> -            WriteLn('Falsche Parameterzahl');
> +            WriteLn(rsWrongParamCount);
>              PrintUsage;
>          end;
>      end else if system.ParamStr(1) = 'cfg-adddoc' then begin
>          if system.ParamCount = 3 then begin
>              CfgAdddoc(system.ParamStr(2), system.ParamStr(3));
>          end else begin
> -            WriteLn('Falsche Parameterzahl');
> +            WriteLn(rsWrongParamCount);
>              PrintUsage;
>          end;
>      end else begin
> -        WriteLn('Ungueltige Aktion: ', system.ParamStr(1));
> +        WriteLn(rsInvalidAction, ' ', system.ParamStr(1));
>          PrintUsage;
>          halt(1);
>      end;
> diff --git a/src/modules/pas/lpt/packages.pas b/src/modules/pas/lpt/packages.pas
> index 9e2b44c..d5a0218 100644
> --- a/src/modules/pas/lpt/packages.pas
> +++ b/src/modules/pas/lpt/packages.pas
> @@ -88,7 +88,10 @@ type
>      end;
>  
>  implementation
> -    
> +
> +resourcestring
> +    rsPackageMissing = 'Paket %s fehlt';
> +
>  constructor TPackageSet.create;
>  begin
>      packages := TCollection.create(TPackage);
> @@ -220,8 +223,8 @@ begin
>                              AddVersion(depPkg);
>                              changed := true;
>                          end else begin
> -                            raise EDependency.create('Paket ' + dep.pkgname + 
> -                                '/' + dep.section + ' fehlt');
> +                            raise EDependency.create(Format(rsPackageMissing,
> +                                [dep.pkgname]));
>                          end;
>                      end;
>                  end;
> diff --git a/src/modules/pas/lpt/repositories.pas b/src/modules/pas/lpt/repositories.pas
> index 13633ca..a31cad1 100644
> --- a/src/modules/pas/lpt/repositories.pas
> +++ b/src/modules/pas/lpt/repositories.pas
> @@ -11,6 +11,10 @@ function GetAllRepositories(): TCollection;
>  
>  implementation
>  
> +resourcestring
> +    rsUnknownRepoType = 'Repository unbekannten Typs!';
> +    rsInvalidPkgsrc = 'Ung??ltige Paketquelle:';
> +
>  var
>      repos: TCollection;
>  
> @@ -25,7 +29,7 @@ begin
>      end else if repostype = files then begin
>          repo := TFileRepository.create(repos);
>      end else begin
> -        raise EInvalidRepository.create('Repository unbekannten Types!');
> +        raise EInvalidRepository.create(rsUnknownRepoType);
>      end;
>      repo.name := name;
>      repo.url := url;
> @@ -66,13 +70,13 @@ begin
>                  repostype := files;
>              end else begin
>                  TextColor(12);
> -                WriteLn('Ungueltige Paketquelle: ' + url);
> +                WriteLn(rsInvalidPkgsrc, ' ', url);
>                  TextColor(7);
>                  continue;
>              end
>          end else begin
>              TextColor(12);
> -            WriteLn('Ungueltige Paketquelle: ' + url);
> +            WriteLn(rsInvalidPkgsrc, ' ', url);
>              TextColor(7);
>              continue;
>          end;
> diff --git a/src/modules/pas/lpt/repository_base.pas b/src/modules/pas/lpt/repository_base.pas
> index f2a4712..8b34360 100644
> --- a/src/modules/pas/lpt/repository_base.pas
> +++ b/src/modules/pas/lpt/repository_base.pas
> @@ -4,6 +4,9 @@ unit repository_base;
>  interface
>  uses sysutils, classes, tar, packages, helpers;
>  
> +resourcestring
> +    rsNoPackageList = 'Keine Paketliste f??r %s vorhanden!';
> +
>  type
>      EDownload = class(Exception) end;
>      EPackageList = class(Exception) end;
> diff --git a/src/modules/pas/lpt/repository_file.pas b/src/modules/pas/lpt/repository_file.pas
> index 6cc353c..cfc1d0e 100644
> --- a/src/modules/pas/lpt/repository_file.pas
> +++ b/src/modules/pas/lpt/repository_file.pas
> @@ -47,7 +47,7 @@ begin
>      if FileExists(self.url + 'packages.' + getArch) then begin
>          ScanFile(pkgset, self.url + 'packages.' + getArch, self.name);
>      end else begin
> -        raise EPackageList.create('Keine Paketliste f??r ' + self.name + ' vorhanden!');
> +        raise EPackageList.create(Format(rsNoPackageList, [self.name]));
>      end;
>  end;
>  
> diff --git a/src/modules/pas/lpt/repository_http.pas b/src/modules/pas/lpt/repository_http.pas
> index 759cbc6..33a957d 100644
> --- a/src/modules/pas/lpt/repository_http.pas
> +++ b/src/modules/pas/lpt/repository_http.pas
> @@ -16,6 +16,9 @@ type
>  
>  implementation
>  
> +resourcestring
> +    rsDownloadingPkglist = 'Lade Paketliste %s von %s';
> +
>  constructor THTTPRepository.create(parent : TCollection);
>  begin
>      inherited;
> @@ -46,7 +49,7 @@ begin
>          pkglisturl := self.url + 'packages.' + getArch;
>      end;
>  
> -    WriteLn('Lade Paketliste ' + self.name + ' von ' + pkglisturl);
> +    WriteLn(Format(rsDownloadingPkglist, [self.name, pkglisturl]));
>      try
>          DownloadToFile(pkglisturl, getConfigRoot + 'pkglist.' + self.name);
>      except
> @@ -61,7 +64,7 @@ begin
>      if FileExists(getConfigRoot + 'pkglist.' + self.name) then begin
>          ScanFile(pkgset, getConfigRoot + 'pkglist.' + self.name, self.name);
>      end else begin
> -        raise EPackageList.create('Keine Paketliste f??r ' + self.name + ' vorhanden!');
> +        raise EPackageList.create(Format(rsNoPackageList, [self.name]));
>      end;
>  end;
>  
> diff --git a/src/modules/pas/lpt/repository_single.pas b/src/modules/pas/lpt/repository_single.pas
> index 1a62681..8ab1e2b 100644
> --- a/src/modules/pas/lpt/repository_single.pas
> +++ b/src/modules/pas/lpt/repository_single.pas
> @@ -16,6 +16,9 @@ type
>  
>  implementation
>  
> +resourcestring
> +    rsLocalPkgDesc = 'Keine (lokale Datei)';
> +
>  constructor TSFRepository.create(parent : TCollection);
>  begin
>      inherited;
> @@ -89,7 +92,7 @@ begin
>              (* Pr??fen ob Metadaten zu Paket passen *)
>              if (line = 'packages/'+pkg_name+'/'+pkg_version+'/packageinfo-'+pkg_section) then begin
>                  pkg := pkgset.add(pkg_name);
> -                pkg.desc := 'Keine (lokale Datei)';
> +                pkg.desc := rsLocalPkgDesc;
>                  section := pkg.add(pkg_section);
>                  version := section.add(pkg_version);
>                  version.pkg := pkg;

Ich habe jetzt nicht geprüft ob das vollständig ist, aber das was da ist
sieht eigentlich nicht schlecht aus. Also immer schön rein damit wenn du
das oben korrigiert hast oder auch nicht ;-)

Acked-by: Antoine Kaufmann <toni@xxxxxxxxxx>

-- 
Antoine Kaufmann
<toni@xxxxxxxxxxxxxxxx>

Attachment: pgpKbGuOjXe8q.pgp
Description: PGP signature