2013-11-15 2 views
2

Мне интересно, как обновить viewControllers с файлами nib и UITableview как subview, пока я меняю язык на странице настроек моего приложения, а не на языке устройства. Я мог подумать об использовании NSNotificationCenter для этого сценария, но в то же время мне также нужно подумать об обновлении ярлыка ячейки таблицы. Я не могу или не хочу перезагружать таблицу, потому что я делаю много вещей в методе cellForRowAtIndexPath, потому что в таблице много данных. Также проблема связана с использованием метода делегата. Может ли кто-нибудь предложить/помочь мне, как устранить эту проблему, не перегружая табличное представление.обновить все UIViewController после изменения языка внутри приложения

+0

поиск о локализации ... его встроенный приятель вам не нужно ничего делать – amar

+0

спасибо @amar за ответ. Я хочу изменить язык в своем приложении, но не в устройстве. Поэтому для этого, когда пользователь выбирает язык в приложении, он должен быть отражен во всех диспетчерах просмотра, и для этого я использую NSNotificationCenter во всех моих классах ViewController. Так что эти изменения произойдут сразу после выбора языка в приложении. Таким образом, мой вопрос заключается в том, как табличное имя ячейки с переопределением таблицы. Любая помощь будет оценена. – Amit89

+0

Привет, я сделал то же самое в своем приложении, добавив несколько языков в plist, а затем на основе глобальной переменной выберем его оттуда. вы также можете определить макрос LocalizedString (), чтобы использовать каждый из них. Если вам нужен код, но потребуется некоторое время. – amar

ответ

0

Для пользовательской локализации это сделать (Этот ответ специфичен на этот вопрос не является альтернативой локализации)

сделать макрос в файле определяет. если у вас его уже нет, то

Добавить новый файл-> name it Defines.h -> удалить его .m-> удалить все вещи внутри своего .h-> импортировать его в .pch.

Теперь определить макрос в нем LOCALISEDSTRING(m) [[[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Language" ofType:@"plist"]] objectAtIndex:globalIntIndex]objectForKey:m]

вы «globalIntIndex» также объявлен в defines.h установить его с соответствующим indexvalue для каждого языка.

Теперь добавьте файл plist и назовите его «Язык» добавьте в него свои языки как элемент массива, а внутри каждого языка добавьте KEY со строковым значением в качестве словаря. Ключ будет одинаковым для каждого языка

enter image description here

Plist будет выглядеть выше изображение поместить весь текст английского в пункте 0 и русском текст в пункте 1.

теперь вы можете использовать его как NSLog(@"%@",LOCALISEDSTRING(@"KEY")); если globalIntIndex = 0, тогда он будет печатать строку на английском языке, иначе она будет печатать строку на русском языке.

+0

Спасибо за предложение, его работа. Теперь мое сомнение похоже: предположим, что есть три ViewControllers с именем A, B, C. В C ViewController есть возможность изменить язык, и после его изменения все элементы пользовательского интерфейса, такие как label, textField, button, текст ячейки таблицы, должны быть изменены во всех трех ViewController. Если я реализую по вашей идее, это не обновление , – Amit89

+0

Вам необходимо установить отображаемый текст, появится метод. – amar

+0

Это проблема, потому что у меня много данных в представлении таблицы, поэтому, если я перезагрузите табличное представление для обновления производительности таблицы, проблема будет вставлена ​​на передний план. Также можно обновить .. – Amit89

0

Я думаю, что в вашем приложении может быть Localizable.strings файл.
Подробнее об этом учебнике: Localization Tutorial for iOS.

Кроме того, здесь есть два демо:
Если вы используете XIB построить пользовательский интерфейс, см RMDateSelectionViewController
Если используется код для создания пользовательского интерфейса см ZCImagePickerController

0

Если вы хотите изменить свой нынешний язык мгновенно, вы должны внедрить несколько языков на свой собственный код. Обычно класс обрабатывает всю строку, отображаемую в вашем интерфейсе. Уведомление об изменении языка рекомендуется для каждого контроллера.

Вы можете использовать:

[[NSUserDefaults standardUserDefaults] 
     setObject:[NSArray arrayWithObjects:@"en", nil] 
     forKey:@"AppleLanguages"]; 

установить свой настоящий язык, но его не может измениться мгновенно, а также не рекомендуется.

+0

Изменение языка происходит в зависимости от выбора языка в моем приложении. Мое сомнение заключается в том, как изменить имя ячейки таблицы с помощью метода cellForRowAtIndexPath и всех частей пользовательского интерфейса. Я использую NSSNotificationCenter для обновления ViewControllers. – Amit89

+0

@ Сообщение Amit89 не рекомендуется добавлять дополнительный код, используя макрос, в котором когда-либо вы будете использовать уведомление, я дал образец в своем ответе, если не ясно. – amar

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