以编程方式获取OSX中的应用程序文件夹的名称

时间:2012-08-03 17:32:29

标签: objective-c macos localization

在美国和欧洲,应用程序文件夹名为Applications,但在中文或日文本地化下如何命名?

有没有办法以编程方式获取文件夹的名称?

4 个答案:

答案 0 :(得分:12)

文件系统中的目录名称始终为英文。这些目录可以附加本地化名称以显示给用户,但这些名称不是用于访问目录的名称。来自Internationalization Programming Topics

  

您需要了解应用程序中的本地化路径名并正确显示它们。本地化路径名仅用于显示目的,在访问文件系统时不应使用。在处理代码中的文件和目录时,应该继续使用实际路径名,包括何时需要写入缓存或用户首选项。您应该使用本地化路径名的唯一时间是您希望通过应用程序的用户界面向用户显示该路径。

也就是说,您可以使用NSSearchPathForDirectoriesInDomains以编程方式获取路径:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSLocalDomainMask, YES);
// Returns an NSArray containing the string "/Applications"

您还可以使用-[NSFileManager URLsForDirectory:inDomains:]

NSArray *urls = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationDirectory inDomains:NSLocalDomainMask];
// Returns an NSArray containing the NSURL "file://localhost/Applications"

如果您需要向用户显示本地化名称,请查看Internationalization Programming Topics

答案 1 :(得分:3)

[[[NSFileManager defaultManager] URLsForDirectory: NSApplicationDirectory inDomains:NSLocalDomainMask] lastObject];

我认为应该有效(reference)。如果您使用的是以前版本的OS X且不支持URLForDirectory,则可以选择NSSearchPathForDirectoriesInDomains()

答案 2 :(得分:1)

要获取适合呈现给用户的文件夹(或具有本地化名称的应用程序)的本地化名称,请使用:

NSString *localizedName = [[NSFileManager defaultManager] displayNameAtPath:path];

对于Applications文件夹,您可以使用:

NSString *localizedApplicationDirectoryName = [[NSFileManager defaultManager] displayNameAtPath:NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSLocalDomainMask, YES).lastObject];

答案 3 :(得分:0)

斯威夫特:

let urls = FileManager().urls(for: .applicationDirectory, in: .localDomainMask)
  

▿1个元素
    ▿0:file:/// Applications /

let urls = FileManager().urls(for: .allApplicationsDirectory, in: .localDomainMask)
  

▿4个元素
    ▿0:file:/// Applications /
    ▿1:file:/// Applications / Utilities /
    ▿2:file:/// Developer / Applications /
    ▿3:file:/// Applications / Demos /