Swiftpack.co - surfstudio/Autolocalizable as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by surfstudio.
surfstudio/Autolocalizable 1.1.0
Library for autolocalization ios application
⭐️ 2
🕓 3 years ago
iOS
.package(url: "https://github.com/surfstudio/Autolocalizable.git", from: "1.1.0")

Autolocalizable

CI Status Version License Platform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Author

Anatoly Cherkasov, [email protected]

Collaborators

Alexander Filimonov

License

Autolocalizable is available under the MIT license. See the LICENSE file for more info.

Что бы избежать лишних импортов

В Bridging-Header.h проекта стоит тобавить строчку:


#import "Autolocalizable/Autolocalizable-Swift.h"

Если вы будете использовать Swift Package Manager, тогда этот трюк не сработает.

Базовые возможности

  • Держит значение активного языка
  • Локализация одного текстового поля (UILabеl например)
  • Отслеживание смены языка таргетно
  • Поддержка NSAttributtedString
  • Локализация с учетом склонений и различных трансформаций (uppercased, capitalizingFirstLetter)
  • Горячее подключение таблиц для локализации (Например текст может приходить с сервера) (см протокол LocalizableValueService)

Примеры использования

Базовое использование:

К классам UILabel, UIButton, UITabbarItem, UIViewController(заголовок) подключен протокол AutoLocalizableField - он позволяет зарегистрировать объект в системе авто локализации, при заполнении поля localized.


labelDecription.localized = LocalizableStringItem("description")
sendButton.localized = LocalizableStringItem("send")
viewController.localizedTitle = LocalizableStringItem("viewControllerTitle")

при смене языка, текст автоматически заменится.

Отслеживание смены языка:

Пример отслеживания смены языка:

final class MyClass: AutolocalizableFollowing {

    init() {
	followAutolocalization()
    }

    // MARK: - AutolocalizableFollowing

    func languageWasChanged(locale: LocaleType) {
        /// ... code    
    }

}

SwiftGen

Доступен шаблон для подключения автоматической генерации через SwiftGen. Шаблон находится в корне репозитория (swiftgen-templates) и поддерживает генерацию в отдельном package SPM Узнать про установку кастомных шаблонов можно в репозитории проекта SwiftGen

Если генерация успешно интегрирована, доступен подобный синтаксис: titleLabel.localized = L10n.ViewController.title

Описание helper-ов

LocalizableValueService

Протокол, для чтения .strings файлов запрашиваемого языка

Методы

func localized(_ table: String, _ key: String, _ args: [CVarArg], locale: LocaleType, bundle: Bundle) -> String

Метод для получения переведенной строки на указанный язык, по ключу

table - Таблица .strings (По умолчанию Localizable.strings)

key - Ключ строки, для которой требуется перевод (Например "Login.title")

args - Список аргументов для форматирования (Необходимо указывать если в перевод подставляются данные через %@)

locale - Требуемый язык

bundle - Bundle содержащий ресурсы

Базовая реализация протокола доступна в классе BaseLocalizableValueService

LocalizableStringItem

Моделька, оборачивает параметры строки, необходимые для локализации. Подключен к SwiftGen

Свойства

private(set) var value: String

Возвращает локализированную строку

Конструкторы

init(_ table: String, _ key: String, _ args: CVarArg...)

и

init(_ table: String, _ key: String, _ args: CVarArg..., bundle: Bundle)

table - Название .strings таблицы

key - Ключ локализации

args - Список аргументов для форматирования

bundle - Bundle содержащий ресурсы, по умолчанию Bundle.main, но может быть изменен, если например ресурсы вынесены в spm

Методы

func set(localizableService: LocalizableValueService) -> LocalizableStringItem

Позволяет установить таблицу для получения локализаций. Возвращает LocalizableStringItem сконфигурированный для получения строки из указаного сервиса.

func add(transform: @escaping ((String) -> String)) -> LocalizableStringItem

Добавляет transform к локализуемой строке. Возвращает LocalizableStringItem с добавленным в очередь трансформом.

Правила трансформации: На вход блока приходит локализованная строка, обработанная ранее добавленными transform-блоками, в блоке необходимо вернуть измененную строку.

func addDeclension(_ value: Int?) -> LocalizableStringItem

Подключает склонения к локализованной строке

func uppercased() -> LocalizableStringItem

Переводит всю локализируемую строку в верхний регистр

func lowercased() -> LocalizableStringItem

Переводит всю локализируемую строку в нижний регистр

func capitalizingFirstLetter() -> LocalizableStringItem

Переводит первый символ локализуемой строки в верхний регистр

func attributedItem(with attributed: [NSAttributedString.Key: Any]) -> LocalizableAttributedStringItem

Позволяет получить AttributedString из локализованной строки

LocalizableAttributedStringItem

Аналог LocalizableStringItem для работы с AttributedString

Свойства

private(set) var value: NSAttributedString

Локализованная строка с примененными атрибутами

private(set) var item: LocalizableStringItem

Исходный элемент локализации

Конструкторы

init(item: LocalizableStringItem, attributed: [NSAttributedString.Key: Any])

item - исходный LocalizableStringItem

attributed - Применяемые атрибуты

Описание протоколов

protocol AutoLocalizableField

Свойства:

var localized: LocalizableStringItem? { get set }

Не требует реализации. При заполнении, зарегистрирует текущий объект в системе авто локализации с указанным LocalizableStringItem

Если передать nil - удалит из системы локализации.

Методы:

func languageWasChanged(locale: LocaleType, localizableString: LocalizableStringItem?)

Метод вызовется при смене локализации

locale - новый язык

localizableString - LocalizableStringItem, указанный при регистрации.

protocol AutoLocalizableAttributedField

Аналог AutoLocalizableField, но для AttributedString

protocol AutolocalizableFollowing

Позволяет подписаться на обновление локализации

В классе, к которому подключается протокол, необходимо реализовать метод

func languageWasChanged(locale: LocaleType)`

Для отслеживания смены языка вызывать followAutolocalization(), для отмены unfollowAutolocalization

GitHub

link
Stars: 2
Last commit: 3 years ago
Advertisement: IndiePitcher.com - Cold Email Software for Startups

Release Notes

Release 1.1.0
3 years ago
  • Добавлена поддержка SPM
  • Добавлена установка bundle при создании LocalizableStringItem

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics