2010-09-27 58 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。