可能使用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参数。 检查该文件的语法和位置。