Разработка
Конкатенация против интерполяции текста в SwiftUI
Хотя конкатенация текста хорошо работает для простых сценариев стилизации, лучше всего всегда отдавать предпочтение интерполяции для локализованного текста, чтобы обеспечить грамматически правильный и естественный перевод.
SwiftUI позволяет нам объединять несколько представлений текста в одно представление с помощью оператора плюс (+). Это позволяет нам применять разные стили к отдельным частям текста.
Вот простой пример, который окрашивает слово «spicy» в красный цвет:
Text("Tortilla chips with ") +
Text("spicy ️️️").foregroundStyle(.red) +
Text(" dip")
Я часто вижу, как разработчики используют эту технику, но важно понимать ее ограничения, особенно в отношении локализации.
Когда мы объединяем текст, как в примере выше, каждый сегмент будет извлечен и переведен отдельно. Вот как это может выглядеть в файле каталога строк для французского языка:
Во-первых, некоторые сегменты имеют конечные и предшествующие пробелы, которые может быть довольно сложно обнаружить. Переводчики должны тщательно сохранять эти пробелы, чтобы гарантировать, что при объединении переведенных сегментов между словами все еще будут пробелы. Но есть и более серьезная проблема: конкатенация не позволяет переводчикам менять порядок сегментов для языков с разными грамматическими структурами. Например, во французском языке прилагательные обычно следуют за существительным, в отличие от английского. Правильный перевод будет «Chips tortilla avec sauce épicée ️️️», но при простой конкатенации приложение неправильно отобразит «Chips tortilla avec épicée ️️️ sauce», что отражает прямой перевод с английского, который звучит неестественно.
Чтобы правильно обрабатывать локализацию, мы должны использовать интерполяцию текста, а не конкатенацию. Интерполяция текста позволяет нам вставлять переменные непосредственно в одну локализуемую строку, даже если эти переменные стилизованные текстовые представления. Это означает, что мы можем применять модификаторы текста точно так же, как мы это делаем с конкатенированными сегментами.
Вот как выглядит предыдущий пример с использованием интерполяции:
xxxxxxxxxx
Text("Tortilla chips with \(Text("spicy ️️️").foregroundStyle(.red)) dip")
Визуально это выглядит точно так же на английском языке:
Однако извлеченные локализуемые строки в String Catalog будут сильно отличаться. Хотя стилизованный сегмент по-прежнему извлекается отдельно, основная локализованная строка включает спецификатор формата, позволяющий переводчикам свободно перемещать интерполированный сегмент в структуре предложения. Кроме того, переводчикам больше не нужно вручную управлять начальными и конечными пробелами для сегментов.
Теперь, когда приложение работает на французском языке, SwiftUI правильно вставляет стилизованное прилагательное в соответствующее место:
Подводя итог, можно сказать, что хотя конкатенация текста хорошо работает для простых сценариев стилизации, лучше всего всегда отдавать предпочтение интерполяции для локализованного текста, чтобы обеспечить грамматически правильный и естественный перевод. В реальных проектах также рекомендуется включать комментарии, особенно для строк с определителями формата, чтобы переводчики понимали, что представляет собой каждый заполнитель.
Если вы хотите заложить прочную основу в SwiftUI, новая книга «SwiftUI Fundamentals» глубоко погружает в основные принципы и API фреймворка, чтобы помочь вам понять, как он работает под капотом и как эффективно использовать его в ваших проектах.
-
Новости1 неделя назад
Видео и подкасты о мобильной разработке 2025.14
-
Видео и подкасты для разработчиков3 недели назад
Javascript для бэкенда – отличная идея: Node.js, NPM, Typescript
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.12
-
Разработка3 недели назад
«Давайте просто…»: системные идеи, которые звучат хорошо, но почти никогда не работают