iOS - genStrings -s 无法使用替换功能
iOS - genStrings -s not able to use replacement function
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 部分添加前缀,但请仔细检查我是否在该部分上写入。
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 部分添加前缀,但请仔细检查我是否在该部分上写入。