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)。
由于
马丁
答案 0 :(得分:5)
SHGetLocalizedName()。 Michael Kaplan's blog上有一个PInvoke示例。
答案 1 :(得分:0)
我非常确定没有将路径转换为其本地化形式的功能,因为当您看到更大的图片时它没有意义。如果你有一个漫游配置文件,甚至可能没有"用户"或" Benutzer"文件夹,因为它将全部位于服务器管理员放置的位置。
这也引出了如何调用此函数的问题。为了论证,我们假设你用美国英语默认值来称呼它。如果你说"给我c:\ Users \ Bob"的德语本地化版本,Vista和Windows 7就可以了,但XP并不知道"用户&#34 ;夹。因此,如果没有一个你无法保证安装的后备补丁,那就会破裂。
一般来说,微软建议不要担心路径的左半部分。相反,您只是应该使用Environment.GetFolderPath()
并将其中一个SpecialFolder
枚举传递给它。特殊文件夹部分之后的任何内容都是您自己定义和创建的,但它就是它。您的代码应该说,"相对于桌面创建一个名为Bob"的文件夹。无论如何解决这个问题都不应该存储,因为有可能在某一天改变这条道路,