05. september 2001 - 08:28Der 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.
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!
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å
// 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.
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 )
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.