0

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 的输出文件,它看起来像这样:

 ?%%
4

1 回答 1

1

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

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

我把它改成

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

这解决了这个问题。您可能必须像我一样在 LocalizedString 部分前加上前缀来命名该函数,但请仔细检查我是否在该部分上写入。

于 2015-03-31T00:16:47.463 回答