Поддержка справа налево языки

Ваш пользовательский интерфейс должен быть зеркально отражен при отображении справа налево языков. При использовании основной интернационализации и Автоматического Расположения большая часть пользовательского интерфейса будет казаться зеркальной автоматически для Вас. Текстовое направление изменяется на справа налево за исключением телефонных номеров и кодов стран, которые являются всегда слева направо. Некоторые представления и средства управления в Вашем пользовательском интерфейсе могут не изменить направление автоматически, которое можно фиксировать программно.

Создание справа налево пользовательские интерфейсы

Поддержка справа налево языки при помощи основной интернационализации и Автоматического Расположения, как описано в Интернационализации Пользовательского интерфейса. В целом, если язык разработки слева направо, выровняйте представления, запускающиеся в верхнем левом углу, и добавьте ограничения, разворачивающие представления до нижней правой части. Когда Вы используете Автоматическое Расположение leading и trailing атрибуты (не right и left атрибуты), большая часть пользовательского интерфейса кажется зеркальной на справа налево языках. Для приложений Mac большинство средств управления — таких как сегментированные средства управления, индикаторы хода выполнения и представления схемы — также кажется зеркально отраженным. если Вы хотите это поведение для приложения для iOS, разделяете управление на подклассы и переопределяете методы рисования, iOS автоматически не зеркально отражает средства управления, поэтому.

../Art/maps_rtl_mirroring_2x.png../Art/maps_rtl_mirroring_2x.png

Типы средств управления и содержания, которое не должно зеркально отражать в справа налево язык:

Используйте основную интернационализацию и, если необходимо, обеспечьте специфичные для языка изображения и аудиофайлы для справа налево языки, которые Вы поддерживаете. Для локализации других файлов ресурсов считайте Добавляющие Дополнительные Ресурсы, которые Вы Хотите Локализовать.

Полностью протестируйте свой пользовательский интерфейс в справа налево язык, как описано в Тестировании Справа налево Языков, и только если необходимый, измените свой код для поддержки справа налево языков.

Получение направления макета

Вы получаете направление макета программно от объекта приложения.

Для приложений для iOS, чтобы определить, является ли язык справа налево, отправляют userInterfaceLayoutDirection к объекту общего приложения:

if ([UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft) {
}

Для приложений Mac отправить userInterfaceLayoutDirection к объекту приложения:

if ([NSApp userInterfaceLayoutDirection] == NSUserInterfaceLayoutDirectionRightToLeft) {
}

Установка выравнивания текста

Для выравнивания текста слева в слева направо язык используйте естественное выравнивание текста, автоматически зеркально отражающее выравнивание для справа налево языков. Например, если Вы устанавливаете выравнивание NSMutableParagraphStyle объект с помощью setAlignment: метод, передача NSNaturalTextAlignment как параметр.

[[(NSMutableParagraphStyle *)paraStyle setAlignment:NSNaturalTextAlignment];

Однако, если Вы хотите выровнять управление вправо в слева направо язык (и налево в справа налево язык), получить направление макета, как описано в Получении Направления макета, и установить выравнивание в NSLeftTextAlignment для справа налево языка.

Для приложений Mac:

if ([NSApp userInterfaceLayoutDirection] == NSUserInterfaceLayoutDirectionRightToLeft) {
    [[(NSMutableParagraphStyle *)paraStyle setAlignment:NSLeftTextAlignment];
else{
    [[(NSMutableParagraphStyle *)paraStyle setAlignment:NSRightTextAlignment];
}

Обработка двунаправленного текста

Двунаправленный (или «Bidi») текст является текстом, содержащим сегменты, работающие в различных направлениях. Языки такой столь же арабский и еврейский записаны справа налево, но числа и латинский текст (такие как нелокализованные названия продукта) записаны слева направо. Используйте стандартные представления и средства управления, автоматически обрабатывающие двунаправленный текст, как описано в Отображении текста. При создании пользовательских элементов управления для ввода текста необходимо обработать двунаправленный текст сами.

Используя естественное направление записи

Для текста и средств управления, используйте естественное направление записи, определяющее направление записи во время выполнения путем исследования первых нескольких символов текста, который будет выведен на экран.

Для приложений для iOS используйте setBaseWritingDirection:forRange: метод вUITextInput протокол и передача NSWritingDirectionNatural как параметр направления записи. Для приложений Mac, набор направление записи основы управления и другие типы объектов с помощью setBaseWritingDirection: метод, передавая NSWritingDirectionNatural как параметр.

Несмотря на то, что направление и выравнивание являются различными настройками, тексту на слева направо языках свойственно быть выровненным по левому краю и тексту на справа налево языках, которые будут выровнены по правому краю. Считайте Выравнивание текста Установки для того, как установить выравнивание текста для справа налево язык.

Добавление разметки Unicode к двунаправленному тексту

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

Например, телефонные номера положены из лево-to‐right на любом языке. Если локализованная строка содержит переменную для телефонного номера, вставьте символ слева направо встраивания (LRE), U+202A, перед переменной и символом популярности направленного форматирования (PDF), U+202C, после переменной.

// Wrap the plus (+) prefix and phone number in left-to-right directional markers
NSString *phoneNumber = @"408-555-1212";
NSString *localizedPhoneNumber = [NSString stringWithFormat:@"\u202A%@\u202C", phoneNumber];

С другой стороны, чтобы всегда вывести на экран переменную справа налево в слева направо языке вставьте символ справа налево встраивания (RLE), U+202B, перед переменной и символом популярности направленного форматирования (PDF), U+202C, после переменной.

Если переменная появляется в начале строки, естественное направление заставляет всю строку использовать направленность переменной. Это - неправильное поведение, если переменная направленность неизвестна — например, переменная могла бы быть арабским или английским именем пользователя. В этом случае вставьте символ справа налево метки (RLM), U+200F, перед переменной для справа налево языков, или символом слева направо метки (LRM), U+200E, перед переменной для строк для слева направо языков. Используйте этот метод для слева направо локализаций, даже если у Вас нет локализаций для справа налево языков.

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

Когда язык справа налево, некоторые представления Какао автоматически не зеркально отражают. Можно фиксировать выравнивание текста в Интерфейсном Разработчике и порядке представлений программно для приведения к желаемым зеркальным результатам. В некоторых случаях переопределите Делегата Приложения awakeFromNib метод, чтобы определить языковое направление, как описано в Получении Направления макета, и зеркально отразить представления, не зеркально отражающие в Вашем приложении.

Зеркальное отражение табличных представлений

Когда расположение справа налево, таблицы автоматически не зеркально отражают. Порядок столбцов не изменяется. Представления в основанном на представлении табличном зеркальном отражении автоматически при использовании Автоматического Расположения и основной интернационализации, но заголовков и ячеек в основанных на ячейке таблицах не изменяют свое выравнивание текста.

Изменение выравнивания текста

Для основанных на ячейке таблиц, набор выравнивание столбцов и ячеек естественному Разработчику Интерфейса использования направления записи.

Установить выравнивание текста столбца и его ячейки

  1. В Интерфейсном Разработчике выберите Table Column в представлении схемы.

  2. Если необходимо, покажите инспектору Атрибутов.

  3. Выберите естественный из управления Выравниванием.

  4. В представлении схемы щелкните по треугольнику раскрытия рядом со Столбцом таблицы и выберите его Ячейку Текстового поля.

  5. В инспекторе Атрибутов выберите естественный (– – –) от управления Выравниванием.

    ../Art/mac_set_table_column_alignment_2x.png

Также установите объект alignment свойство к NSNaturalTextAlignment программно.

Инвертирование порядка столбцов

Для приложений Mac добавьте этот метод к NSTableView класс (использующий категорию Objective C), который инвертирует порядок столбцов в таблице.

@implementation NSTableView (RTLSupport)
- (void)reverseColumnOrder {
   if ([[NSApplication sharedApplication] userInterfaceLayoutDirection] != NSUserInterfaceLayoutDirectionRightToLeft)
       return;
   unsigned long index = self.tableColumns.count-1;
   while (index > 0) {
       [self moveColumn:0 toColumn:index];
       index--;
   }
}
@end

Зеркальное отражение панелей инструментов

Панели инструментов автоматически не зеркально отражают на справа налево языках. Можно фиксировать это программно любым инвертированием порядка элементов панели инструментов в awakeFromNib метод или реализация toolbarDefaultItemIdentifiers: метод делегата возвратить элементы в обратном порядке.

Например, добавьте этот фрагмент кода к Делегату Приложения awakeFromNib реализация метода, где toolbar NSToolbar объект Вы хотите зеркально отразить.

// Flip toolbar items order for RTL support
if ([NSApp userInterfaceLayoutDirection] == NSUserInterfaceLayoutDirectionRightToLeft) {
   NSArray *toolbarItems = [[self.toolbar items] copy];
   for (NSToolbarItem *item in toolbarItems) {
       [self.toolbar removeItemAtIndex:toolbarItems.count-1];
       [self.toolbar insertItemWithItemIdentifier:item.itemIdentifier atIndex:0];
   }
}

Если изображения на средствах управления слева направо — например, левые и правые стрелки — они должны быть зеркально отражены также.

Зеркальное отражение изображений

К ресурсам зеркального изображения для справа налево языков выберите один из трех подходов. Можно обеспечить отдельные, локализованные ресурсы для справа налево языки, которые Вы поддерживаете, как описано в Добавлении Дополнительных Ресурсов, которые Вы Хотите Локализовать. Можно добавить альтернативу, справа налево отобразить ресурсы к проекту XCode, и в коде, использовать дополнительное изображение для справа налево языков. Вы можете также зеркальные изображения программно для справа налево языков в Делегате Приложения awakeFromNib метод.

Например, вызовите это flipImage: метод для возврата зеркального изображения.

- (NSImage *)flipImage:(NSImage *)image
{
   NSImage *existingImage = image;
   NSSize existingSize = [existingImage size];
   NSSize newSize = NSMakeSize(existingSize.width, existingSize.height);
   NSImage *flippedImage = [[[NSImage alloc] initWithSize:newSize] autorelease];
 
   [flippedImage lockFocus];
   [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
 
   NSAffineTransform *transform = [NSAffineTransform transform];
   [transform translateXBy:existingSize.width yBy:0];
   [transform scaleXBy:-1 yBy:1];
   [transform concat];
 
   [existingImage drawAtPoint:NSZeroPoint fromRect:NSMakeRect(0, 0, newSize.width, newSize.height) operation:NSCompositeSourceOver fraction:1.0];
 
   [flippedImage unlockFocus];
 
   return flippedImage;
}

Тестирование справа налево форматы локали

Вы не должны изменять язык на арабский или иврит для тестирования справа налево форматы локали.

Для iOS Вы выбираете область и форматируете язык вместе в Настройках, как описано в Установке Области на устройствах на iOS. Подменю языка появляется во всплывающем меню Области для языков, использующихся в многократных областях. Для тестирования локали арабской говорящей страны выберите страну из арабского подменю. Для тестирования формата локали на иврите выберите Hebrew (Israel) из всплывающего меню Области.

Для Mac Вы выбираете область и форматируете язык отдельно в Установках системы. Если Вы хотите протестировать форматы локали на арабском языке, установить установку Region в локаль, использующую арабский язык, и измените язык формата на арабский язык. Точно так же для тестирования форматов локали на иврите установите установку Region в Израиль и язык формата ивриту. Также можно установить область и затем установить предпочтительный язык или в арабский или в иврит.

Протестировать формат локали в справа налево язык на Mac

  1. В Установках системы нажмите Language и Region.

  2. Выберите область, использующую язык от всплывающего меню Области.

    Календарь, устанавливающий автоматически, изменяется для соответствия области.

  3. Нажмите Advanced.

    ../Art/mac_region_settings_saudi_arabia_2x.png../Art/mac_region_settings_saudi_arabia_2x.png
  4. В области General выберите справа налево язык от “Всплывающего меню” языка формата.

    ../Art/mac_format_language_arabic_2x.png../Art/mac_format_language_arabic_2x.png

Также измените язык и область в редакторе схемы, описанном в Тестировании Определенных Языков и Областей. Для изменения текстового направления, не изменяя язык или область считайте Тестирование Справа налево Языки.