Connect with us

Разработка

Конкатенация против интерполяции текста в SwiftUI

Хотя конкатенация текста хорошо работает для простых сценариев стилизации, лучше всего всегда отдавать предпочтение интерполяции для локализованного текста, чтобы обеспечить грамматически правильный и естественный перевод.

Опубликовано

/

     
     

SwiftUI позволяет нам объединять несколько представлений текста в одно представление с помощью оператора плюс (+). Это позволяет нам применять разные стили к отдельным частям текста.

Вот простой пример, который окрашивает слово «spicy» в красный цвет:

Конкатенация против интерполяции текста в SwiftUI

Я часто вижу, как разработчики используют эту технику, но важно понимать ее ограничения, особенно в отношении локализации.

Когда мы объединяем текст, как в примере выше, каждый сегмент будет извлечен и переведен отдельно. Вот как это может выглядеть в файле каталога строк для французского языка:

Конкатенация против интерполяции текста в SwiftUI

Во-первых, некоторые сегменты имеют конечные и предшествующие пробелы, которые может быть довольно сложно обнаружить. Переводчики должны тщательно сохранять эти пробелы, чтобы гарантировать, что при объединении переведенных сегментов между словами все еще будут пробелы. Но есть и более серьезная проблема: конкатенация не позволяет переводчикам менять порядок сегментов для языков с разными грамматическими структурами. Например, во французском языке прилагательные обычно следуют за существительным, в отличие от английского. Правильный перевод будет «Chips tortilla avec sauce épicée ️️️», но при простой конкатенации приложение неправильно отобразит «Chips tortilla avec épicée ️️️ sauce», что отражает прямой перевод с английского, который звучит неестественно.

Конкатенация против интерполяции текста в SwiftUI

Чтобы правильно обрабатывать локализацию, мы должны использовать интерполяцию текста, а не конкатенацию. Интерполяция текста позволяет нам вставлять переменные непосредственно в одну локализуемую строку, даже если эти переменные стилизованные текстовые представления. Это означает, что мы можем применять модификаторы текста точно так же, как мы это делаем с конкатенированными сегментами.

Вот как выглядит предыдущий пример с использованием интерполяции:

Визуально это выглядит точно так же на английском языке:

Конкатенация против интерполяции текста в SwiftUI

Однако извлеченные локализуемые строки в String Catalog будут сильно отличаться. Хотя стилизованный сегмент по-прежнему извлекается отдельно, основная локализованная строка включает спецификатор формата, позволяющий переводчикам свободно перемещать интерполированный сегмент в структуре предложения. Кроме того, переводчикам больше не нужно вручную управлять начальными и конечными пробелами для сегментов.

Конкатенация против интерполяции текста в SwiftUI

Теперь, когда приложение работает на французском языке, SwiftUI правильно вставляет стилизованное прилагательное в соответствующее место:

Конкатенация против интерполяции текста в SwiftUI

Подводя итог, можно сказать, что хотя конкатенация текста хорошо работает для простых сценариев стилизации, лучше всего всегда отдавать предпочтение интерполяции для локализованного текста, чтобы обеспечить грамматически правильный и естественный перевод. В реальных проектах также рекомендуется включать комментарии, особенно для строк с определителями формата, чтобы переводчики понимали, что представляет собой каждый заполнитель.

Если вы хотите заложить прочную основу в SwiftUI, новая книга «SwiftUI Fundamentals» глубоко погружает в основные принципы и API фреймворка, чтобы помочь вам понять, как он работает под капотом и как эффективно использовать его в ваших проектах.

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: