2010-09-27 114 views
1

我在(unsigned long long)变量中得到了一个字节的文件大小。有没有一种标准的方式将其转换为字符串,并带有本地化单元?在Mac OS X中获取本地化的文件大小

我知道那些种解决方案的:

NSString * stringFromFileSize(FileSize theSize) 
{ 
    float floatSize = theSize; 
    if (theSize<1023) 
     return ([NSString stringWithFormat:@"%i bytes",theSize]); 
    floatSize = floatSize/1024; 
    if (floatSize<1023) 
     return ([NSString stringWithFormat:@"%1.1f KB",floatSize]); 
    floatSize = floatSize/1024; 
    if (floatSize<1023) 
     return ([NSString stringWithFormat:@"%1.1f MB",floatSize]); 
    floatSize = floatSize/1024; 

    return([NSString stringWithFormat:@"%1.1f GB",floatSize]); 
} 

不过,这并不在法国,在那里“八位字节”是用来代替字节(从单位所有的B不得不被替换工作一个'o')。我搜索了大约CFLocalGetValue,查看了我所知道的所有格式化方法但没有任何成功,那么是否有任何隐藏的方法/函数可以帮助我?我可以设法通过手工来创建一些东西,但我会提前避免它。

+0

请注意,Mac OS X 10.6中的Finder以1000为单位报告文件大小(尽管10.5和之前使用的是基于1024的单位)。根据不同的应用程序,您可能希望与之保持一致... – 2010-09-28 04:09:35

回答

3

听起来像NSLocalizedString的工作。您可以将条目添加到您的法国本地化(在Localizable.strings):

"bytes" = "octets"; 
"KB" = "Ko"; 
"MB" = "Mo"; 
"GB" = "Go"; 

然后使用:

return [NSString stringWithFormat:@"%i %@", theSize, NSLocalizedString(@"bytes", nil)]; 

为了更具体地回答这个问题,我不知道有任何可可功能的处理这些转换。

+1

如果我没有找到“标准”方式来执行此操作,那就是我计划要做的事情。 Finder在没有任何问题的情况下执行它,这很奇怪,平台不会像日期那样免费提供它: -/ – 2010-09-27 19:01:21

+0

Finder执行相同的操作。你可以在Apple框架的.lproj文件夹中找到很多类似的字符串。 – Costique 2010-09-27 19:58:41

1

对于任何面临同样问题的人:有一个方便的NSByteCountFormatter类,它提供本地化。当问题被问到时,看起来它不在身边。它可用于OS X 10.8 Mountain Lion。