Подтвердить что ты не робот

Локализация меню Cut | Copy | Paste в iOS

У меня есть некоторые проблемы, локализирующие датское приложение. (Язык, а не тесто)

Я установил CFBundleDevelopmentRegion для da_DK для датчан в моем info.plist, но всплывающее окно, появляющееся для ввода текста, все еще находится на английском языке, даже на телефонах, работающих с датской ОС.

enter image description here

Как в названии заданий я могу изменить это?

Тестирующее устройство представляет собой iPhone 4S, не подвергнутый джейлбрейку, работающий под управлением iOS 5.1 с датским языком в качестве настройки iOS, а также учетную запись датской itunes.

Я не использую .xib для дизайна. все интерфейсы запрограммированы как viewcontrollers.

4b9b3361

Ответ 1

В дереве файлов Xcode (Project Navigator) выберите ваш проект. в правой панели выберите свой проект еще раз. выберите "Информация" и добавьте свой язык.

настроить i18n


Я создал образец проекта, это результат:

введите описание изображения здесь

Ответ 2

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

Если вы не используете xibs, вы обычно делаете это, добавляя в проект файл Localizable.strings. В диалоговом окне "Добавить файл" Xcode вы можете использовать шаблон "Строковый файл" (в разделе "Ресурсы" ) для этого.

Чтобы на самом деле локализовать файл строк, откройте инспектор файлов ( 1) и нажмите кнопку + в разделе "Локализация". В итоге вы получите файл, отображаемый как группа в навигаторе проекта, с подзаголовком для каждого языка.

Файл строк имеет формат:

"Label_Text" = "Smørrebrød";

(не забудьте точку с запятой)

Чтобы использовать локализованные строки в вашем коде, вы можете использовать макрос NSLocalizedString следующим образом:

myLabel.text = NSLocalizedString(@"Label_Text", nil);

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

Если вы используете английские строки как ключи, вы можете оставить английскую версию Localizable.strings пустой (но не удалять ее).

Наличие файла Localizable.strings на языке, выбранном пользователем, также приведет к появлению на этом языке стандартных элементов пользовательского интерфейса, таких как меню редактирования, сборщика фотографий и т.д.

Ответ 3

Если вы не можете заставить его работать на официальном уровне, как это предусмотрено @vikingosegundo, вы можете сделать это с помощью некоторой творческой инженерии (Creative, как, боже мой, что опасно). Я обнаружил этот метод, когда я случайно перепробовал [NSBundle localizedStringForKey:value:tableName:].

1) Добавьте категорию в NSBundle следующими способами:

#import <objc/runtime.h>

+ (void) load  {
    Method original, swizzled;

    original = class_getInstanceMethod(self, @selector(localizedStringForKey:value:table:));
    swizzled = class_getInstanceMethod(self, @selector(swizzled_localizedStringForKey:value:table:));
    method_exchangeImplementations(original, swizzled);
}

- (NSString*) swizzled_localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName {

    NSLog(@"Key: %@. Value: %@", key, value);

    return [self swizzled_localizedStringForKey: key value:value table:tableName];
}

2) Когда я просто регистрирую ключ/значение, вы хотите поместить блок if ([key isEqualToString: xxx]). Там вы хотите уловить (по крайней мере некоторые из) следующие значения клавиш: Вырезать, Копировать [Меню], Выбрать, Выбрать все, Вставить, Удалить [Меню], Заменить..., Определить, Говорить, Пауза. Это значения по умолчанию, которые могут отображаться там.

3) Когда вы поймали это значение, вы можете найти его в пользовательской таблице или использовать жестко заданные значения. Если вы посмотрите в пользовательской таблице, убедитесь, что у вас есть catch в swizzled методе, чтобы избежать бесконечного цикла в вашей пользовательской таблице.

NB: Почему вам нужно лезть? Потому что это превысит весь текст Apple для вашего приложения. Вы по-прежнему будете хотеть значения по умолчанию для всех остальных строк, поэтому вам нужно swizzle, чтобы получить значения по умолчанию для строк, которые вам не интересны.

Удачи. Пол

Ответ 4

Попробуйте добавить/установить флажок "Локализованные ресурсы могут быть смешаны" в Info.plist на "YES".

Ответ 5

Вы можете сделать это непосредственно в info.plist. Что-то вроде этого:

<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleLocalizations</key>
<array>
  <string>en</string>
  <string>de</string>
  <string>es</string>
  <string>ja</string>
</array>    

Ответ 6

Найдите, если ваш .xib локализован (вы найдете его в инспекторе на правой панели), если вы перейдете к настройкам Project/Target-Settings, нажмите + -Sign и выберите "Duplicate English to Danish" или что-то, что означает то же самое (я не могу проверить правильный элемент в данный момент)

Кстати, он назвал iPhone 4S.