Avatar billede landsbytossen Nybegynder
05. september 2001 - 08:28 Der er 6 kommentarer og
2 løsninger

Dll sprogfiler

Nogen der har erfaring med at placere deres sprog i dll filer. Så man kan skifte en dll ud og få et nyt sprog (feks. DK, UK, D)i ens program. Skal man anvende en ressource fil eller anvende en kæmpe case struktur. Der kan være flere hundrede strenge der skal oversættes.
Avatar billede lectoc Nybegynder
05. september 2001 - 08:33 #1
Vi udvikler applikationer, der kan køre på flere sprog. Til det anvender vi produktet MULTILIZER. Hver sprog ligger dog ikke i en DLL, men alle strengene ligger i en slags database-fil (kan være tekst-fil eller binær fil eller en rigtig database).

Det er et meget fint produkt, hvor selve oversættelsen af strengene fungerer stort set fuld-automatisk!

Se på www.multilizer.com.


Avatar billede martinlind Nybegynder
05. september 2001 - 08:33 #2
Du skal da bare bruge delphi\'s indbyggede mulighed, så er det ret enkelt, ellers kan du kigge på Richedit demo\'en den kan skifte mellem tre sprog
Avatar billede zardic Nybegynder
06. september 2001 - 09:38 #3
OK her er er component til at gører det

Note: Ikke alle skriver det samme sted hvergang so
du kan IKKE være 100% ikke op at det bliver the du får ps denne version er der lidt rod i
hvis du vil have en version unde rod i så skriv like igen så skal jeg nok send når get komme til den comp den er  på

{Zardic}

unit Cvgrap;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TProjInfo = class(TComponent)
  private
    { Private declarations }
    sFileName ,
    sFileVersion ,
    sFileDescription ,
    sLegalCopyright,
    sComments ,
    sCompanyName ,
    sInternalName ,
    sLegalTrademarks ,
    sOriginalFilename ,
    sProductName ,
    sProductVersion ,
    sLanguage : string;
    slAllItems: TStrings;
    procedure SetFileName (exename : string);
    procedure SetFileVersion (ver : string);
    procedure SetFileDescription(desc : string);
    procedure SetLegalCopyright(cr : string);
    procedure SetComments(cmt : string);
    procedure SetCompanyName(cn : string);
    procedure SetInternalName(intn : string);
    procedure SetLegalTrademarks(tm : string);
    procedure SetOriginalFilename(ofn : string);
    procedure SetProductName(pn : string);
    procedure SetProductVersion(pv : string);
    procedure SetLanguage(lang : string);
    procedure SetAllItems(items : Tstrings);
    procedure GetVersionInfo(AVersionList: TStrings);
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent);  override;
    procedure execute;
  published
    property EXEName : string  read sFileName write SetFileName;
    property FileVersion: String  read sFileVersion write SetFileVersion;
    property FileDescription: String  read sFileDescription write SetFileDescription;
    property LegalCopyright: String  read sLegalCopyright write SetLegalCopyright;
    property Comments: String  read sComments write SetComments;
    property CompanyName: String  read sCompanyName write SetCompanyName;
    property InternalName: String  read sInternalName write SetInternalName;
    property LegalTrademarks: String  read sLegalTrademarks write SetLegalTrademarks;
    property OriginalFilename: String  read sOriginalFilename write SetOriginalFilename;
    property ProductName: String  read sProductName write SetProductName;
    property ProductVersion: String  read sProductVersion write SetProductVersion;
    property Language: String  read sLanguage write SetLanguage;
    property AllItems: TStrings  read slAllItems write SetAllItems;

    { Published declarations }
  end;

procedure Register;

implementation

// simply change this to register to a different location
procedure Register;
begin
  RegisterComponents(\'Tusborg\', [TProjInfo]);
end;

// constructor - creates the needed items
constructor TProjInfo.Create(AOwner: TComponent);
begin
    sFileName := \'\';
    slAllItems  := TStringList.create;
    inherited create(Aowner);
end;

// set the exename property
procedure TProjInfo.SetFileName(exename : string);
begin
    if fileexists(exename) then
    begin
        sFileName := exename;
    end
    else
    begin
        sFileName := \'\';
    end;
end;

{**********************************************}
{**  set the various properties              **}
{**********************************************}

procedure TProjInfo.SetFileVersion(ver: string);
begin
          sFileVersion := ver;
end;

procedure TProjInfo.SetFileDescription(desc : string);
begin
          sFileDescription := desc;
end;

procedure TProjInfo.SetLegalCopyright(cr : string);
begin
          sLegalCopyright := cr;
end;

procedure TProjInfo.SetComments(cmt : string);
begin
          sComments := cmt;
end;

procedure TProjInfo.SetCompanyName(cn : string);
begin
        sCompanyName := cn;
end;

procedure TProjInfo.SetInternalName(intn : string);
begin
          sInternalName := intn;
end;

procedure TProjInfo.SetLegalTrademarks(tm : string);
begin
          sLegalTrademarks := tm;
end;

procedure TProjInfo.SetOriginalFilename(ofn : string);
begin
          sOriginalFilename := ofn;
end;

procedure TProjInfo.SetProductName(pn : string);
begin
          sProductName := pn;
end;

procedure TProjInfo.SetProductVersion(pv : string);
begin
          sProductVersion := pv;
end;

procedure TProjInfo.SetLanguage(lang : string);
begin
          sLanguage := lang;
end;

procedure TProjInfo.SetAllItems(items : Tstrings);
begin
          slAllItems.assign(items);
end;

//  execute method
procedure TProjInfo.execute;
var  alist: TStrings;
begin
    alist := TStringList.create;
    getversioninfo(alist);  // stores the version information into the stringlist
    // only do if information obtained
    if alist.count > 0 then
    begin

      setfileversion(alist.strings[0]);
      SetFileDescription(alist.strings[1]);
      setLegalCopyright(alist.strings[2]);
      SetComments(alist.strings[3]);
      SetProductName(alist.strings[4]);
      SetCompanyName(alist.strings[5]);
      SetInternalName(alist.strings[6]);
      SetLegalTrademarks(alist.strings[7]);
      SetOriginalFilename(alist.strings[8]);
  if alist.Count > 9 Then
      SetProductVersion(alist.strings[9])
    else
    SetProductVersion(\'\');
  if alist.Count > 10 Then
      SetLanguage(alist.strings[10])
    else
    SetLanguage(\'\');
      SetAllItems(alist);
    end;
    alist.free;
end;

procedure TProjInfo.GetVersionInfo(AVersionList: TStrings);
const
  //  all version information items
  CInfoStr : array[1..10] of string =
    (\'FileVersion\',\'FileDescription\',\'LegalCopyright\',\'Comments\',
    \'CompanyName\',  \'InternalName\',\'LegalTrademarks\',
    \'OriginalFilename\',\'ProductName\', \'ProductVersion\');
type
  PTransBuffer = ^TTransBuffer;
  TTransBuffer = array[1..4] of smallint;
var
  transStr,
  typeStr,
  filename,
  language : string;
  i        : integer;
  ptrans  : PTransBuffer;
  value    : PChar;
  verBuf  : pointer;
  infoSize,
  verSize,
  wnd      : DWORD;
begin
  // clear the list
  AVersionList.Clear;
  // get application information
  filename := sFileName;
  infoSize := GetFileVersioninfoSize(PChar(filename), wnd);
  // if information exists . . .
  if infoSize <> 0 then
  begin
    GetMem(verBuf, infoSize);
    try
      if GetFileVersionInfo(PChar(filename), wnd, infoSize, verBuf) then
      begin
        VerQueryvalue(verBuf, PChar(\'\\VarFileInfo\\Translation\'),
                      Pointer(ptrans), verSize);
        transStr := IntToHex(ptrans^[1], 4) + IntToHex(ptrans^[2], 4);
        //  loop through all version information
        for i := Low(CInfoStr) to High(CInfoStr) do
        begin
          typeStr := \'StringFileInfo\\\' + transStr + \'\\\' + CInfoStr[i];
          //  get information and store into list
          if VerQueryvalue(verBuf, PChar(typeStr),Pointer(value), verSize) then
            // use this if you wish to add the title
            //AVersionList.Add(CInfoStr[i] + \': \' + value);
            AVersionList.Add(value);
        end;
        // only add language if the rest completed sucessfully
        if AVersionList.Count > 0 then
        begin
          SetLength(language, 256);
          // get language info and convert to string
          VerLanguageName(ptrans^[1], PChar(language), 256);
          SetLength(language, StrLen(PChar(language)));
          // use this if you wish to add the title
          // AVersionList.Add(\'Language: \' + language);
          AVersionList.Add(language);
        end;
      end;
    finally
      // memory cleanup
      FreeMem(verBuf);
    end;
  end;
end;

//  thus endeth the component and all the code contained therein.
end.

Avatar billede landsbytossen Nybegynder
06. september 2001 - 09:52 #4
Meget gerne se hele component uden rod :-)
lanstorp@worldonline.dk
Avatar billede zardic Nybegynder
06. september 2001 - 09:55 #5
ok comming up
Avatar billede martinlind Nybegynder
06. september 2001 - 10:09 #6
Jeg ville nu stadig vælge Delphi\'s indbyggede i stedet for et 3\'part produkt, delphi\'s virker fint, og måden kan ses i richtedit demo\'en ( hvor svært kan det være )
Avatar billede zardic Nybegynder
06. september 2001 - 10:38 #7
mail send to lanstorp@worldonline.dk
Avatar billede landsbytossen Nybegynder
06. september 2001 - 10:42 #8
Takker, undersøger begge muligheder.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester