iPhone en_ * подъязыковая локализация - PullRequest
10 голосов
/ 01 июня 2009

Я хочу локализовать строки в своем приложении для iphone для en_GB и других вспомогательных языков 'en', но XCode и iphone отказываются это допустить. Я создал локализацию «Localizable.strings» для en_GB и en_US (я пробовал дефисы и подчеркивания) для целей тестирования, но они просто не распознаются. Единственный код языка, который работает, это просто «en» (отображается как «английский» в XCode).

Не могу поверить, что это невозможно, так что я делаю не так? Я также надеюсь получить типичное «каскадное» поведение, если строка не найдена в подъязыке, например, «en_GB», то это должно быть взято из «en», если это возможно. Помощь

Ответы [ 6 ]

6 голосов
/ 10 июня 2009

Когда вы выбираете «английский» из списка языков в настройках iPhone, это фактически означает язык «en_US».

Так что, пока Apple не обновит свое программное обеспечение с помощью дополнительных подъязыков, таких как «английский (британский)» и т. Д., Нам остается переходить к настройке региона и загружать строки вручную из другой строки.

Однако язык и региональная локаль разделены по причине: испанский пользователь в Великобритании может пожелать, чтобы даты / время были отформатированы в соответствии с местными обычаями, но строки программы были на их родном языке. Было бы неправильно определять региональную локализацию (Великобритания) и, следовательно, отображать строки в Великобритании.

Так что, в принципе, в настоящее время нет способа сделать это.

4 голосов
/ 02 июня 2009

То, что вы делаете, должно работать в соответствии с документами. Но похоже, что реализация iPhoneOS расходится с документацией. Согласно Radar 6158876 поддержка языка en_GB не поддерживается, только язык (форматы даты и т.

2 голосов
/ 30 июля 2010

Это действительно может быть сделано - проверьте мое решение здесь - Локализация приложений iPhone - проблемы с английским языком?

1 голос
/ 24 февраля 2014

Я не уверен, в какой версии iOS она была представлена, но iOS 7 определенно имеет предпочтение «британский английский», которое будет выбирать ресурсы из каталога en_GB.lproj. Различные хаки, плавающие по сети, могут не понадобиться, если вы не хотите более специализированного * диалекта.

* посмотри, что я там сделал;)

1 голос
/ 20 июля 2009

Создайте отдельный строковый ресурс, скажем UKLocalization.strings, и создайте локализации для каждого из ваших поддерживаемых языков. Для всех локализаций, кроме en, этот файл пуст. Для en он содержит только строки с уникальным написанием en_GB.

Затем вы создаете замену для NSLocalizationString, которая сначала проверит таблицу UKLocalization, а затем вернется к стандартной таблице локализации.

например:.

static NSString* _locTable = nil;
void RTLocalizationInit()
{
    _locTable = nil;

    NSString* country = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode];
    if ([country isEqual:@"GB"])
    {
        _locTable = @"UKLocalization";
    }
}

NSString* RTLocalizedString(NSString* key, NSString* ignored)
{
    NSString* value = nil;
    value = [[NSBundle mainBundle] localizedStringForKey:key value:nil table: _locTable];
    if (value == key)
    {
        value = NSLocalizedString(key, @"");
    }
    return value;
}
1 голос
/ 09 июня 2009

Я нашел ту же проблему.

Кстати, если вы посмотрите в меню «Настройки iPhone» -> «Основные» -> «Международные», то это делает различие между языком и регионом совершенно ясным:

Языки:
-Английский

Регион Формат:
Соединенные Штаты
Великобритания

Структура локализации, похоже, обращает внимание только на язык, а не на регион.

У меня возникает соблазн подать запрос на улучшение в Apple, поскольку IMO вполне разумно, если пользователь захочет использовать британский английский (для текста), находясь в Соединенных Штатах (где, скажем, телефонные номера должны быть в формате США).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...