可能使用NSLocalizedStringvariables和/或参数?
我曾尝试使用一个variables作为input参数到NSLocalizedString,但我回来的是input参数。 我究竟做错了什么? 是否有可能使用一个可变的string值作为NSLocalizedstring的索引?
例如,我有一些我希望显示本地化版本的string。 但是,我想使用一个variables作为NSLocalizedString的参数,而不是一个常量string。 同样,我想在NSLocalizedString的参数中包含格式化元素,所以我将能够使用相同的格式参数来检索string的本地化版本。 我可以做以下事情:
情况1:variablesNSLocalizedstring:
NSString *varStr = @"Index1"; NSString *string1 = NSLocalizedString(varStr,@"");
情况2:格式化的NSLocalizedString:
NSString *string1 = [NSString stringWithFormat:NSLocalizedString(@"This is an %@",@""),@"Apple"];
(请注意,variables可以包含任何内容,而不仅仅是一组固定的string。)
谢谢!
如果你想要返回本地化版本的“这是一个苹果/橙/无论”,你会想要:
NSString *localizedVersion = NSLocalizedString(([NSString stringWithFormat:@"This is an %@", @"Apple"]), nil);
(即, NSLocalizedString()
和[NSString stringWithFormat:]
的嵌套是相反的。)
如果你想要的是要被本地化的格式 ,而不是被替代的值,可以这样做:
NSString *finalString = [NSString stringWithFormat:NSLocalizedString(@"SomeFormat", nil), @"Apple"];
并在您Localizable.strings
:
SomeFormat = "This is an %@";
我只想添加一个非常有用的定义,我在很多项目中都使用这个定义。
受到androids可能性的启发,我已经将这个函数添加到我的header prefix
文件header prefix
:
#define NSLocalizedFormatString(fmt, ...) [NSString stringWithFormat:NSLocalizedString(fmt, nil), __VA_ARGS__]
这允许你定义一个本地化的string,如下所示:
"ExampleScreenAuthorizationDescriptionLbl"= "I authorize the payment of %@ to %@.";
它可以通过以下方式使用:
self.labelAuthorizationText.text = NSLocalizedFormatString(@"ExampleScreenAuthorizationDescriptionLbl", self.formattedAmount, self.companyQualifier);
如果您的本地化string中有多个variables,则可以使用此解决scheme:
在Localizable.strings中
"winpopup" = "#name# wins a #type# and get #points# points(s)";
并使用stringByReplacingOccurrencesOfString来插入值
NSString *string = NSLocalizedString(@"winpopup", nil); //"#name# wins a #type# and get #points# points(s)" NSString *foo = [string stringByReplacingOccurrencesOfString:@"#name#" withString:gameLayer.turn]; NSString *fooo = [foo stringByReplacingOccurrencesOfString:@"#type#" withString:winMode]; NSString *msg = [fooo stringByReplacingOccurrencesOfString:@"#points#" withString:[NSString stringWithFormat:@"%i", pkt]]; NSLog(@"%@", msg);
事实certificate,一个缺less的目标条目是怪罪。 只要检查我目前的构build目标是否包含Localizable.string文件即可解决问题!
为了迅速:
let myString = String(format: NSLocalizedString("I authorize the payment of %d ", comment: ""), amount)
你的想法应该工作。 但是,如果您正在取回input参数,那意味着您的Localizable.strings文件中没有findinput参数。 检查该文件的语法和位置。