#swift #swiftui #navigationbar
#быстрый #свифтуи #панель навигации
Вопрос:
Я столкнулся с проблемой с локализованным названием панели навигации.
Когда я изменяю объект среды локали, заголовок панели навигации некорневого представления стека навигации не изменится. Пожалуйста, смотрите изображения ниже, Service
это корневой вид стека навигации, Card Maker
это второй вид.
en
место действия
jp
место действия
Код, который я пробовал
Services
Вид
NavigationView { VStack { NavigationLink { CardsMakerView() } label: { Text("Open Cards") } } .navigationTitle("Services") .navigationBarTitleDisplayMode(.inline) } .environment(.locale, viewModel.language)
Card Maker
Вид
ScrollView { // ... } .navigationTitle("Card Maker") .navigationBarTitleDisplayMode(.inline)
С ServiceView
заголовком панели навигации проблем нет. Спасибо за вашу помощь.
Комментарии:
1. Попробуйте поместить
.navigationTitle("Services")
и другиеNavigationView
соответствующие модификаторы *внутрь*(!)NavigationView
.2. вы могли бы попробовать использовать:
.navigationTitle(LocalizedStringKey("Card Maker"))
3. спасибо @Asperi @workingdog, я отредактировал свой вопрос и тоже попробовал,
LocalizedStringKey
но безуспешно. Строки «Производитель карт» и «Сервисы» уже существуют в моих локализуемых строках.для обоих языков.4. Вы можете попробовать: 1.. navigationBarTitle(Текст(NSLocalizedString(«Создатель карт», комментарий: «Создатель карт»))) (обычно работает) 2. используйте «стиль ключа» (что это значит — в вашем «Локализуемом» используйте один ключ для строк, в вашем случае «Создатель карт» = «Создатель карт»; и для другого языка «создатель карт» = «»;). Следовательно, в вызове вы используете что-то вроде «Текст(«card_maker»)»
5. @ViktorGolubenkov, спасибо за комментарий. Я использую первый язык в качестве ключевого. Проблема не в загрузке локализованной строки. Просто предположим, что модификация swiftui
.environment(.locale
все еще не работает мгновенно со вторым представлением в стеке навигации.