2016-02-02 3 views
5

Я работаю над приложением, которое поддерживает два языка: английский и арабский. Когда пользователь меняет язык на арабский, мне нужно приложение, чтобы сделать текст справа налево (RTL).Изменение налево налево RTL программно

Я искал эту проблему, и я нашел this answer о поддержке RTL.

Я бы хотел применить вышеуказанный ответ, но программным способом, потому что мне нужно перейти от LTR к RTL во время работы приложения.

+2

IOS не поддерживает такие изменения во время выполнения (и я не знаю, ОС, которая позволила бы вам сделать это), так что вы должны будете реализуйте свои собственные макеты повсюду и используйте для этого левый-правый, а не start-end. В будущем вы можете переключить локаль в приложении «Настройки» без перезапуска приложений, возможно, это будет возможно даже сейчас, так или иначе, это делается не программно. –

+0

@ A-Live ОК, Спасибо – SalmaGh

ответ

5

Я изменил мое приложение справа налево RTL с помощью этого:

self.transform = CGAffineTransformMakeScale(-1.0, 1.0) 

Это отражено мнение, то я щелкал объекты в поле зрения, как это:

label.transform = CGAffineTransformMakeScale(-1.0, 1.0) 
textField.transform = CGAffineTransformMakeScale(-1.0, 1.0) 
image.transform = CGAffineTransformMakeScale(-1.0, 1.0) 

Это сделал мой views RTL вместо изменения всех ограничений или перестроить приложение как RTL.

+0

это тоже перевернет текст и изображения , тогда он уничтожит дизайн приложения –

+0

@FadiAbuzant Да, я хотел, чтобы мой дизайн приложения был справа налево, я имею в виду все изображения, метки, текстовые поля .... и т. Д., Чтобы быть в правой части в то время как мои объекты просмотра были в левой части. Я конвертировал свое приложение с английского на арабский «многоязычное приложение», поэтому вместо создания новых представлений с правом налево дизайн я использовал этот способ. – SalmaGh

+0

Чувак ... @SalmaGh ваш серьезный? – SwingerDinger

0

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

Если да, вы можете не только предоставить NSLayoutConstraint, которые удовлетворяют вашим требованиям, вы также можете указать выравнивание для представления текста и кнопок: NSTextAlignment.

Поскольку вы не можете управлять программными настройками программно, имейте в виду, что ваше приложение больше не будет использовать естественные ограничения, такие как leading или trailing.

0

Не возражаете, если я спрошу, зачем вам это нужно?

Я бы рекомендовал дважды подумать, прежде чем делать это, главным образом потому, что он создает запутанное впечатление от пользователя. Пользователи ожидают, что их приложения будут следовать системному языку и, следовательно, не имеют способа выбора языка внутри приложения.

iOS облегчает вам работу с этим способом; если вы используете автоматическую компоновку, создайте свои пользовательские элементы управления по API UIKit и используйте NSLocalizedString, все будет правильно работать во время выполнения для ваших пользователей.

+0

У меня нет iOS в моем браузере. Мне нужно создать язык смены приложений, а когда мой выбран, он должен быть rtl. –

+1

На каком языке вы говорите? – wakachamo

+0

Персидский; В iOS нет персидского языка. Для людей с клавиатурой просто добавить арабский, но они не могут изменить местный язык на арабский, поскольку они являются двумя разными языками (одни и те же буквы), а персидские люди не знают арабский язык. Существует локальный для персидского языка в OS X, но не в iOS. –

-1

Используйте следующие строки в методе didFinishLaunchingWithOptions, когда Вы хотите, чтобы арабский язык раскладки, Для СВИФТ

UIView.appearance(). SemanticContentAttribute = .forceRightToLeft

Для Objective C

[UIView внешний вид]. semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;

и перезагрузить приложение, используя

[self application:app didFinishLaunchingWithOptions:nil]; 

каким-либо другим способом в AppDelegate. Вызовите этот метод, когда вы меняете язык приложения.

Использовать наоборот для английской локализации приложения.

+0

Настройка semanticContentAttribute на прокси-сервере appearance() не поддерживается. Вы столкнетесь со многими другими проблемами и ошибками, поскольку приложение по-прежнему полагает, что оно работает на языке, который не является тем, который вы переопределяете. Добавление языкового коммутатора в ваше приложение только сделает его более запутанным; пользователи ожидают, что их приложения будут следовать языку, на котором установлено их устройство. – wakachamo

1

в Swift 4 попробовать это,

//FOR RIGHT TO LEFT 
UIView.appearance().semanticContentAttribute = .forceRightToLeft 

//FOR LEFT TO RIGHT 
UIView.appearance().semanticContentAttribute = .forceLeftToRight 
Смежные вопросы