2016-03-10 3 views
-1

Мой предыдущий код без локализации. Он работал идеально.Конкатенация двух строк в локализации Цель-c

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, но может кто-нибудь предложить некоторые рекомендации для меня?

+1

Я думаю, что вам лучше локализовать полную фразу, поскольку на некоторых языках может быть другой порядок слов (или другие, более сложные проблемы). – trojanfoe

+1

Все хорошо (если это целая фраза, а не часть большей фразы), просто добавьте спецификатор формата объекта (% @) в запись .strings. –

+0

@MANIAK_dobrii как ниже ответ ?? –

ответ

0

Вы ищете локализацию «Выход». Вы используете это как строку формата. Это вряд ли сработает. Не делайте слишком сложные заявления, что делает невозможным отладки.

Я бы написать

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 выглядят очень, очень изворотливо.

+0

Вы забыли перерыв. Но это отличный момент в стиле кода. –

+0

адрес электронной почты не показан. –

+0

@MANIAK_dobrii: Спасибо, исправлено. – gnasher729

1

Предположим, что у вас есть файл .strings и содержит запись с именем «Выход». У вас есть:

[NSString stringWithFormat:NSLocalizedString(@"Logout", @"Message") ,"%@", email] 

здесь вы пытаетесь загрузить формат строки через NSLocalizedString и использовать его с NSString. Это означает, что вы должны поставить правильный формат строки в файл .strings, поэтому, если в данный момент у вас есть:

"Logout" = "Logout"; 

Для того, чтобы сделать это так же, как прежде, чем локализации, вам необходимо:

"Logout" = "Logout %@"; 

Если у вас нет файла .strings или не имеют вход с именем «Выход», NSLocalizedString возвращает ключ, т.е.

NSLocalizedString(@"key", @"comment") // returns "key" 

Tha t означает, что ваш NSLocalizedString(@"Logout", @"Message") может вернуть «Выход», если NSLocalizedString не удалось найти нужную запись в вашем файле .strings.

Есть много вещей, которые могут пойти не так, если вы хотите получить более глубокие внутренности, я написал большую статью по всей теме: Understanding iOS internationalization.

Также я бы предложил использовать +localizedStringWithFormat: вместо простого +stringWithFormat:, потому что бывший использует текущий язык.

+0

чувак, это не работает мой крах приложения. - [NSKeyedUnarchiver initForReadingWithData:]: данные NULL –

+0

Что-то действительно испортилось, я даже не могу догадаться, что вызвало эту ошибку. Единственный способ понять это - предоставить код в своем вопросе. –

+0

И не просто скопировать код, ваша проблема глубже, чем вы думаете. Вы не можете так заниматься интернационализацией, это укусит вас, если вы это сделаете. –

Смежные вопросы