Функция для получения локализованного пути? - PullRequest
5 голосов
/ 14 января 2011

Windows 7 (и, вероятно, Windows Vista) отображают локализованные имена папок, используя запись LocalizedResourceName в файле desktop.ini. Для моей папки Documents это выглядит как

[.ShellClassInfo]
LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21770
IconResource=%SystemRoot%\system32\imageres.dll,-112
IconFile=%SystemRoot%\system32\shell32.dll
IconIndex=-235

(см. этот вопрос)

Таким образом, проводник отображает путь «C: \ Users \ Имя пользователя \ Documents» как «C: \ Benutzer \ Username \ Dokumente» в немецкой Windows.

Интересно, есть ли встроенная функция оболочки для автоматического получения этого локализованного имени или, что еще лучше, для преобразования всего пути в его локализованную форму (лучше всего будет что-нибудь в .NET)?

Это еще более интересно, поскольку запись LocalizedResourceName документирована только для Windows CE (см. здесь ).

Спасибо

Martin

Ответы [ 2 ]

5 голосов
/ 14 января 2011

SHGetLocalizedName (). В блоге Майкла Каплана .

есть образец PInvoke.
0 голосов
/ 14 января 2011

Я почти уверен, что нет функции для преобразования пути в локализованную форму, потому что когда вы видите большую картинку, это не имеет смысла.Если у вас есть перемещаемый профиль, может даже не быть папки «Пользователи» или «Benutzer», потому что она будет находиться там, где ее разместил администратор сервера.

Также возникает вопрос о том, как вы вызываете эту функцию.В качестве аргумента мы просто предположим, что вы называете его по умолчанию для английского языка США.Если вы скажете «дайте мне локализованную версию c: \ Users \ Bob на немецком языке», Vista и Windows 7 будут в порядке с этим, но XP не знает о папке «Users».Так что это сломалось бы без обратного патча, который вы не можете гарантировать.

Как правило, Microsoft рекомендует даже не беспокоиться о левой половине пути.Вместо этого вы просто должны использовать Environment.GetFolderPath() и передать ему одно из перечислений SpecialFolder.Все, что находится после специальной части папки, вы можете определить и создать, но это все.Ваш код должен сказать «относительно рабочего стола создайте папку с именем Bob».Все, что разрешается, никогда не должно храниться, потому что когда-нибудь этот путь может измениться,

...