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:谢谢,修复了。