2015-03-31 14 views
0

iOS有一個genStrings函數來幫助將來自NSLocalizedString(及相關函數)的調用本地化爲用於翻譯的鍵值對的輸出文件。iOS - genStrings -s無法使用替換函數

看看我的.h文件中:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 

-(NSString*)CustomLocalizedString :(NSString*) key defaultString:(NSString*)comment; 

@end 

這裏CustomLocalizedString將是我的替換功能,而不是NSLocalizedString。

讓我們看到的.m實現文件:

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self CustomLocalizedString:@"my key" defaultString:@"my default"]; 
} 



-(NSString*)CustomLocalizedString:(NSString *)key defaultString:(NSString *)comment{ 

    NSString* mystring= NSLocalizedString(key ,comment); 

    return mystring; 
} 
@end 

當我去命令行運行genStrings,並告訴它使用我的自定義功能:

genstrings -o . -s CustomLocalizedString ViewController.m 

但效果奇:

Bad entry in file ViewController.m (line = 19): Argument is not a literal string. 
    Bad entry in file ViewController.m (line = 24): Argument is not a literal string. 
    Bad entry in file ViewController.m (line = 26): Argument is not a literal string. 

如果我們檢查名爲Localizable.strings的輸出文件,它看起來像這樣:

?%% 

回答

0

我發現了這個問題。看起來自定義函數必須遵循與NSLocalizedString函數完全相同的方法簽名。我用

[self CustomLocalizedString:@"my key" defaultString:@"my default"]; 

我改成了

CustomLocalizedString(@"my key",@"my default"); 

,這解決了問題。您可能必須命名該函數,就像我爲LocalizedString部分添加前綴一樣,但仔細檢查是否在該部分上寫入。