2013-07-15 2 views
0

Я работаю над локализацией своего приложения и добавлением NSLocalizedString() по всему моему коду, где строка будет отображаться на экране. Вопрос в том, что у меня есть UIPickerview, который показывает 12 элементов, и я бы хотел локализовать его, а не добавлять разные языковые строки в основные данные. Это то, что у меня есть, что возвращает названия. Как я могу локализовать его?Как я могу локализовать названия/текст uipickerview

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    return [self.items objectAtIndex:row]; 
} 

Идет ли это работать?

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    NSString *localizedTitle = [NSString stringWithFormat:NSLocalizedString(@"%@", @"Item Name"),[self.items objectAtIndex:row]]; 
    return localizedTitle; 
} 

У меня должен быть список всех элементов в файле Localizable.strings?

Заранее благодарен!

ответ

0

NSLocalizedString не работает с Основные данные. NSLocalizedString - это макрос для получения ключевого значения из локализованного файла.

Итак, если вы хотите получить правильное слово из Core Data, сначала вам нужно получить текущий язык, который используется в iOS. Как это:

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; 

Тогда вам нужно сделать NSFetchRequest, который будет возвращать правильное слово для выбранного языка. Если в вашем пользовательском интерфейсе много ярлыков, кнопок и т. Д., Вы сделаете много записок. Начиная с NSFetchRequest следует сделать асинхронным, он может выглядеть странным, если текст не отображается в ярлыках, когда сначала отображается представление. Поэтому мой вопрос: вы уверены, что хотите использовать Основные данные для локализации? Вы всегда можете попробовать сделать выборку в основном потоке, но, безусловно, ваш пользовательский интерфейс замерзнет.

+0

Спасибо за ответ! Я не хочу использовать основные данные для локализации. Я хотел бы использовать только Localizable.strings для локализации. Эти слова будут использоваться во множестве разных мест в приложении и хотели бы, чтобы он был установлен один раз и не имел разных таблиц в основных данных для каждого языка. – Yan

+0

Тогда самый простой способ добиться этого - сделать ключи в Localizable.strings чтобы иметь такой порядок: picker_1_0 = "some_value"; picker_2_0 = "some_value" и т. д. Затем, когда UIPickerView dataSource вызывает - (NSString *) pickerView: (UIPickerView *) pickerView titleForRow: (NSInteger) строка для компонента Component: (NSInteger), вы используете локализацию таким образом NSLocalizedString ("", [ NSString stringWithFormat: @ "picker_% d_% d", row, component]); Используя его таким образом, у вас будут ключи, заказанные в порядке, которым это требует UIPickerView. –

+0

Значит ли это, что все сборщики будут иметь те же значения, которые берутся из файла строк? – Yan

0

Когда вы локализуете, любая строка, которую пользователь видит, независимо от того, какой компонент пользовательского интерфейса является ее частью, должен быть в Localizablestrings.

Каждый возможный пункт в вашем сборщике должен иметь запись в вашем Localizable.strings. NSLocalizedString - это просто макрос для загрузки строк из вашего Localizable.strings.

Когда вы закончите, вы просто отправьте свои .strings в SmoothLocalize.com или аналогичную службу и перетащите результат, который они вернут в ваше приложение.

+0

Как бы это сделать в файле строк. Если я просто добавлю «item1» = «язык элемента» в файл строк, который не отображается в подборщике – Yan

+0

Вы загружаете сборщик с массивом где-нибудь? Если да, загружаете ли вы строки, такие как NSLocalizedString («string», nil)? – user1023127

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