Это возможно с Руководством , представленным в ConstraintLayout.
Например, вы можете разместить свой верх EditText на 25% высоты экрана, а слева и справа на 20% ширины экрана:
Вот источник макета:
When you choose 'English' from the list of languages on the iPhone preferences, that actually means the 'en_US' language.
So until apple update their software with additional sublanguages like "English (British)" etc. we are left with going by the locale region setting, and loading strings manually from another string table.
However, the language and regional locale are separated for a reason: a Spanish user in the UK may want dates/times formatted according to the local customs, but program strings in their native tongue. It would be incorrect to detect the regional locale (UK) and therefore display UK strings.
So basically there is no way to do this currently.
То, что вы делаете, должно работать в соответствии с документацией. Но похоже, что реализация iPhoneOS расходится с документацией. Согласно Radar 6158876 , нет поддержки языка en_GB, только локаль (форматы даты и т.п.).
Я обнаружил ту же проблему.
Кстати, если вы посмотрите на меню «Настройки iPhone» -> «Основные» -> «Международный», то увидите, что разница между языком и регионом довольно очевидна:
Языки:
-Английский
Формат региона:
-США
-United Kingdom
Структура локализации, похоже, обращает внимание только на язык, а не на регион.
У меня возникает соблазн подать запрос на усовершенствование этого в Apple, так как IMO разумно, что пользователь может захотеть использовать британский английский (для текста), находясь в Соединенных Штатах (где, скажем, номера телефонов должны быть в формате США).
Создайте отдельный строковый ресурс, например 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;
}
Это действительно можно сделать - посмотрите мое решение здесь - Локализация приложения для iPhone - Проблемы с английским языком?