iOS Локализация отображаемого имени пакета для en-GB и en-US - PullRequest
2 голосов
/ 27 мая 2020

Мы разрабатываем приложение для футбола (Soccer). Приложение поддерживает только английский sh, но футбол имеет другое значение во всем мире. Т.е. в США / Австралии / Японии / Новой Зеландии футбол используют вместо футбола. Мы хотим определить отображаемое имя на основе языка, выбранного на устройстве.

Мы хотим добиться, чтобы отображаемое имя в США / Австралии / Японии / Новой Зеландии было «Футбол», а в остальном мире - «Футбол».

Реализация

Мы подумали, прочитав эту документацию от Apple, что у нас может быть запасной языковой механизм. Итак, мы реализовали следующее.

Мы создали файл с именем InfoPlist.strings, который поддерживает следующее:

en-GB
en-US
en-AU
en-NZ
ja

Файлы InfoPlist.strings построены следующим образом:

en- GB

CFBundleDisplayName = "Football";
CFBundleName = "Football";

en- [US / AU / NZ] / ja

CFBundleDisplayName = "Soccer";
CFBundleName = "Soccer";

Структура проекта

enter image description here

Помимо этого, мы указали CFBundleDevelopmentRegion в Info.plist как en-GB / United Kingdom.

Мы также пытались добавить следующее в Info.plist, но безуспешно:

<key>CFBundleDisplayName</key>
<string>$(PRODUCT_NAME)</string>
<key>LSHasLocalizedDisplayName</key>
<true/>

Когда вы выбираете один из поддерживаемых языков в качестве предпочтительного языка на устройстве, он работает нормально. Но когда вы выбираете неподдерживаемый язык (например, немецкий), он возвращается к локализации en-US. Можете ли вы помочь нам понять это?

Теоретически ОС ищет предпочтительный язык (в данном случае немецкий) и обнаруживает, что он не поддерживается. После этого, если он поддерживает базовый язык (без диалекта), он будет использовать его. В этом случае он также недоступен. Затем он переходит на последний шаг:

Если ни один из предпочтительных языков пользователя не поддерживается вашим приложением, iOS выбирает язык, соответствующий региону разработки вашего приложения (CFBundleDevelopmentRegion).

В нашем случае CFBundleDevelopmentRegion определено как en-GB / United Kingdom.

Мы ожидаем увидеть «Football» в качестве отображаемого имени, но мы видим «Soccer» (en-US локализация). Мы не понимаем.

Надеюсь, вы поможете нам - заранее спасибо :)

...