iOS具有genStrings函数,可帮助将NSLocalizedString(及相关函数)的调用本地化为键值对的输出文件以进行翻译。

看一下我的.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的输出文件,则如下所示:

 ?%%

最佳答案

我发现了问题。似乎自定义函数必须遵循与NSLocalizedString函数完全相同的方法签名。我在用

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


我将其更改为

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


这样就解决了问题。您可能必须像我一样为函数命名,也要为LocalizedString部分加上前缀,但是要仔细检查是否在该部分上即时通讯。

10-08 06:04