Ios 在本地化目标c中连接两个字符串
我以前的代码没有本地化。它工作得很好Ios 在本地化目标c中连接两个字符串,ios,objective-c,nslocalizedstring,stringwithformat,Ios,Objective C,Nslocalizedstring,Stringwithformat,我以前的代码没有本地化。它工作得很好 case LOGIN_LOGOUT: ((Cell*)cell).lbl.text = [self isLoggedIn] ? [NSString stringWithFormat:@"Logout %@", email] :NSLocalizedString(@"Login", @"Message"); break; 但当我在注销中实现本地化时,电子邮件将不会显示 case LOGIN_LOGOUT: ((Cell*)cell).lbl
case LOGIN_LOGOUT: ((Cell*)cell).lbl.text = [self isLoggedIn] ?
[NSString stringWithFormat:@"Logout %@", email]
:NSLocalizedString(@"Login", @"Message");
break;
但当我在注销中实现本地化时,电子邮件将不会显示
case LOGIN_LOGOUT: ((Cell*)cell).lbl.text = [self isLoggedIn] ?
[NSString stringWithFormat:NSLocalizedString(@"Logout", @"Message") ,"%@",
email] :NSLocalizedString(@"Login", @"Message");
break;
我知道我缺少stringWithFormat中的一些基础知识,但有人能给我提供一些指导吗?您正在查找注销的本地化信息。您正在将其用作格式字符串。那不太可能奏效。不要做太复杂的语句,这会使调试变得不可能 我会写信的
case LOGIN_LOGOUT: {
NSString* labelText;
if ([self isLoggedIn]) {
NSString* formatString = NSLocalizedString(@"Logout", @"Message");
labelText = [NSString stringWithFormat:formatString, "%@", email];
} else {
labelText = NSLocalizedString(@"Login", @"Message");
}
((Cell*)cell).lbl.text = labelText;
break;
}
现在你可以真正调试整个混乱。stringWithFormat参数看起来非常非常狡猾 假设您有.strings文件,其中包含名为Logout的条目。你有:
[NSString stringWithFormat:NSLocalizedString(@"Logout", @"Message") ,"%@", email]
在这里,您尝试通过NSLocalizedString加载格式字符串,并将其与NSString一起使用。这意味着您必须将正确的格式字符串放入.strings文件中,因此,如果您当前有:
"Logout" = "Logout";
为了使其与本地化之前一样,您需要:
"Logout" = "Logout %@";
如果没有.strings文件或没有名为Logout的条目,NSLocalizedString将返回密钥,即
NSLocalizedString(@"key", @"comment") // returns "key"
也就是说,你的NSLocalizedString@Logout,如果NSLocalizedString在.strings文件中找不到正确的条目,@Message可能会返回注销
有更多的事情可能会出错,如果你想深入了解这一点,我就整个主题写了一篇很棒的文章:
另外,我建议使用+localizedStringWithFormat:而不是简单的+stringWithFormat:,因为前者使用当前的语言环境。我认为你最好对整个短语进行本地化,因为在某些语言或其他更复杂的问题中可能会有不同的语序。如果这是整个短语,一切都很好,不是更大短语的一部分,只需将对象格式说明符%@添加到你的.strings条目中。@MANIAK_dobrii喜欢下面的答案??伙计,我的应用程序崩溃了,它不起作用-[NSKeyedUnarchiver initForReadingWithData:]:数据为空。有些东西真的搞砸了,我甚至猜不出是什么导致了这个错误。我们能找到答案的唯一方法是在你的问题中提供你的代码。不要只是复制粘贴代码,你的问题比你想象的要严重。你不能那样对待国际化,如果你这样做,它会对你造成伤害。未来会发生哪些类型的问题?请告诉我me@iosDev有很多事情要处理,请查看我提供的链接。@Manik_dobrii:谢谢,修复了。