【问题标题】:Function for getting localized path?获取本地化路径的功能?
【发布时间】:2011-06-09 05:02:55
【问题描述】:

Windows 7(可能还有 Windows Vista)使用 desktop.ini 文件中的 LocalizedResourceName 条目显示本地化文件夹名称。对于我的 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)。

谢谢

马丁

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我很确定没有将路径转换为其本地化形式的函数,因为当您看到更大的图景时,它没有任何意义。如果您有漫游配置文件,甚至可能没有“用户”或“Benutzer”文件夹,因为它们都在服务器管理员放置的任何位置。

      这也引出了你如何调用这个函数的问题。为了争论起见,我们假设您使用美国英语默认值调用它。如果你说“给我 c:\Users\Bob 的德文本地化版本”,Vista 和 Windows 7 会很好,但 XP 不知道“用户”文件夹。因此,如果没有您无法保证会安装的向后补丁,它就会中断。

      通常,Microsoft 建议不要担心路径的左半部分。相反,您应该使用Environment.GetFolderPath() 并将SpecialFolder 枚举之一传递给它。特殊文件夹部分之后的任何内容都由您定义和创建,仅此而已。您的代码应该说,“相对于桌面创建一个名为 Bob 的文件夹”。无论解析为什么都不应该被存储,因为它可能有一天会改变路径,

      【讨论】:

      • 我想,你误解了我的问题(可能是我的错):如果我向我的用户显示GetFolderPath(当然是我正在使用的)的结果,他会感到困惑,因为这函数返回“C:/User/Name/Documents”(即使在德语系统上),而他在资源管理器中看到“C:/Benutzer/Name/Dokumente”。这种自动本地化是由 shell 使用 desktop.ini 中的条目完成的,我自己也在寻求一些方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2011-11-02
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多