Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Deutsche Übersetzung für CSIDL_MYDOCUMENTS und Konsorten? (https://www.delphipraxis.net/180236-deutsche-uebersetzung-fuer-csidl_mydocuments-und-konsorten.html)

Benmik 4. Mai 2014 00:21

Deutsche Übersetzung für CSIDL_MYDOCUMENTS und Konsorten?
 
Bekanntlich übersetzt der Explorer die englischen Bezeichnungen für die special folder.
"C:\Users\Anwendername\Pictures\" wird als "C:\Users\Anwendername\Eigene Bilder\" angezeigt.

Gibt es eine Funktion, die mir die lokalisierten Namen für solche Verzeichnisse liefert?

Sir Rufo 4. Mai 2014 01:17

AW: Deutsche Übersetzung für CSIDL_MYDOCUMENTS und Konsorten?
 
Zitat:

Zitat von Benmik (Beitrag 1257831)
Bekanntlich übersetzt der Explorer die englischen Bezeichnungen für die special folder.
"C:\Users\Anwendername\Pictures\" wird als "C:\Users\Anwendername\Eigene Bilder\" angezeigt.

Gibt es eine Funktion, die mir die lokalisierten Namen für solche Verzeichnisse liefert?

Ja, hier im Forum nachzulesen unter
http://www.delphipraxis.net/94230-%5...tml#post695528
;)

Benmik 4. Mai 2014 17:28

AW: Deutsche Übersetzung für CSIDL_MYDOCUMENTS und Konsorten?
 
Vielen Dank, Sir Rufo.

Ich hatte gesucht, aber nicht die richtigen Suchbegriffe gefunden. Hast du sowas im Kopf?

Der Link hat mir sehr weitergeholfen, aber bei ShGetFileInfo() bin ich natürlich auch auf die beiden dort ungelösten Probleme gestoßen, nämlich dass die Funktion nicht den vollen Pfad, sondern nur das letzte Verzeichnis zurückgibt, und dass es keinen Weg zurück gibt (deutsch -> englisch).

Das erste Problem habe ich gelöst, indem ich jedes einzelne Teilverzeichnis des Pfades durch die Funktion jage:
Delphi-Quellcode:
uses ShellApi;

function ErmittleDtVerznamen(Verzname:string):string;
var FileInfo: SHFILEINFO; p1,p2:integer; Verz,Teilverz:string;
const Tz = '\';
begin
  Result := '';
  If DirectoryExists(Verzname) then begin
    Verz    := IncludeTrailingBackSlash(Verzname);
    Result  := Copy(Verzname,1,3);
    p1       := 3;
    p2       := PosEx(Tz,Verz,p1 + 1);
    While p2 > 0 do begin
      Teilverz := IncludeTrailingBackSlash(Copy(Verz,1,p2 - 1));
      If SHGetFileInfo(PChar(Teilverz), 0, FileInfo,SizeOf(FileInfo),SHGFI_DISPLAYNAME) <> 0
        then Result := Result + IncludeTrailingBackSlash(FileInfo.szDisplayName)
        else exit;
      p1 := p2 + 1;
      p2  := PosEx(Tz,Verz,p1 + 1);
    end;
  end;
end;
Da wird unseren Experten noch einiges an Verbesserungspotenzial einfallen :stupid:, aber es funktioniert und vielleicht hilft es ja jemandem.

Das zweite Problem habe ich nur proprietär gelöst, indem ich eine Liste aller eingedeutschten Namen anlege, was unter meinen Gegebenheiten lückenlos möglich ist.

Sir Rufo 4. Mai 2014 17:31

AW: Deutsche Übersetzung für CSIDL_MYDOCUMENTS und Konsorten?
 
Nein im Kopf habe ich das nicht, aber es hilft die Suchbegriffe in englisch bei Tante Google einzutippen ;)

Benmik 4. Mai 2014 19:48

AW: Deutsche Übersetzung für CSIDL_MYDOCUMENTS und Konsorten?
 
Vielleicht noch ein Tipp für die, die hier mal landen. Die obige Funktion schlägt manchmal scheinbar (ja wirklich: scheinbar (!)) fehl und liefert zum Beispiel "pictures" statt "Eigene Bilder".
Ein Blick in den Dateimanager zeigt dann aber, dass dort auch die englische Bezeichnung angezeigt wird. Es kann ohne Weiteres zu einem wilden Durcheinander von deutschen und englischen Bezeichnungen kommen.
Grund hierfür ist die desktop.ini, die für die deutschen Bezeichnungen in jedem Verzeichnis vorhanden sein und (im Falle von "Pictures"!) folgenden Inhalt haben muss:
Delphi-Quellcode:
[.ShellClassInfo]
LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21779
InfoTip=@%SystemRoot%\system32\shell32.dll,-12688
IconResource=%SystemRoot%\system32\imageres.dll,-113
IconFile=%SystemRoot%\system32\shell32.dll
IconIndex=-236
Der entscheidende Punkt ist "LocalizedResourceName=@%SystemRoot%\system32\shel l32.dll" mit der richtigen Nummer.

ABER - und jetzt kommt die ganz große Fußangel - diese Desktop.ini funktioniert nur, wenn das entsprechende Verzeichnis das Attribut "Schreibgeschützt" hat. Da muss man erstmal drauf kommen. Gibt man bei korrekter Desktop.ini in einer Konsole den Befehl "attrib +r C:\Users\Anwendername\Pictures" ein, so kann man zusehen, wie im Dateimanager die Anzeige von "Pictures" plötzlich auf "Eigene Dateien" umspringt.

Eine Reihe von Desktop.ini-Dateiinhalten bei den verschiedenen Verzeichnissen findet man dankenswerter Weise hier.

himitsu 4. Mai 2014 20:36

AW: Deutsche Übersetzung für CSIDL_MYDOCUMENTS und Konsorten?
 
Schreibschutz:

Wobei das Absicht ist, denn so braucht der Explorer nur nach der Desktop.ini zu suchen, wenn das Verzeichnis entsprechend markiert ist.

Benmik 7. Mai 2014 21:05

AW: Deutsche Übersetzung für CSIDL_MYDOCUMENTS und Konsorten?
 
Absicht ist das sicher, aber ob das eine der glücklicheren Lösungen von Microsoft ist, wage ich doch zu bezweifeln.

Ich kanns ja leider nicht mehr editieren, aber die Anzeige springt im Falle von "Pictures" natürlich auf "Eigene Bilder" um.

himitsu 7. Mai 2014 21:32

AW: Deutsche Übersetzung für CSIDL_MYDOCUMENTS und Konsorten?
 
Damals, als das eingeführt erfunden wurde, waren Computer noch nicht so leistungsstark (RAM, CPU usw.) und da war das schon eine gute Idee.
Und selbst jetzt hat das immernoch vorteile, auch wenn die Verzeichnisstruktur immer mehr aus den Explorerfenstern verdrengt wird. (b.z. wo sich sie nicht mehr ordentlich nutzen lässt, seitdem sie sich "standardmäßig" nicht mehr synchronisiert)

Unglücklich ist nur, daß man über den Explorer solche "System"-Properties nicht ändern kann (System, Schreibschutz bei Verzeichnissen),
außer man verwendet die Experten dafür. (z.B. Verzeichnis-Eigenschaften > Anpassen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz