获取本地化路径的功能?

时间:2011-01-14 15:05:52

标签: .net windows-7 localization windows-vista special-folders

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

(见this问题)

这样,资源管理器在德语Windows上将路径“C:\ Users \ Username \ Documents”显示为“C:\ Benutzer \ Username \ Dokumente”。

我想知道,如果有任何内置shell函数来自动获取这个本地化名称,或者更好的是,将整个路径转换为其本地化形式(最好是.NET中的任何内容)?

这更有趣,因为LocalizedResourceName条目仅记录在Windows CE中(参见here)。

由于

马丁

2 个答案:

答案 0 :(得分:5)

SHGetLocalizedName()。 Michael Kaplan's blog上有一个PInvoke示例。

答案 1 :(得分:0)

我非常确定没有将路径转换为其本地化形式的功能,因为当您看到更大的图片时它没有意义。如果你有一个漫游配置文件,甚至可能没有"用户"或" Benutzer"文件夹,因为它将全部位于服务器管理员放置的位置。

这也引出了如何调用此函数的问题。为了论证,我们假设你用美国英语默认值来称呼它。如果你说"给我c:\ Users \ Bob"的德语本地化版本,Vista和Windows 7就可以了,但XP并不知道"用户&#34 ;夹。因此,如果没有一个你无法保证安装的后备补丁,那就会破裂。

一般来说,微软建议不要担心路径的左半部分。相反,您只是应该使用Environment.GetFolderPath()并将其中一个SpecialFolder枚举传递给它。特殊文件夹部分之后的任何内容都是您自己定义和创建的,但它就是它。您的代码应该说,"相对于桌面创建一个名为Bob"的文件夹。无论如何解决这个问题都不应该存储,因为有可能在某一天改变这条道路,