{"id":21748413,"url":"https://github.com/surfstudio/autolocalizable","last_synced_at":"2026-05-19T00:03:32.761Z","repository":{"id":55624339,"uuid":"180644058","full_name":"surfstudio/Autolocalizable","owner":"surfstudio","description":"Library for autolocalization  ios application","archived":false,"fork":false,"pushed_at":"2020-12-17T11:10:08.000Z","size":98,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-01-25T22:58:36.857Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/surfstudio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-04-10T18:48:25.000Z","updated_at":"2023-04-20T12:34:32.000Z","dependencies_parsed_at":"2022-08-15T04:41:03.771Z","dependency_job_id":null,"html_url":"https://github.com/surfstudio/Autolocalizable","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2FAutolocalizable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2FAutolocalizable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2FAutolocalizable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/surfstudio%2FAutolocalizable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/surfstudio","download_url":"https://codeload.github.com/surfstudio/Autolocalizable/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244723835,"owners_count":20499343,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-26T08:13:25.126Z","updated_at":"2026-05-19T00:03:32.731Z","avatar_url":"https://github.com/surfstudio.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Autolocalizable\n\n[![CI Status](https://img.shields.io/travis/git/Autolocalizable.svg?style=flat)](https://travis-ci.org/git/Autolocalizable)\n[![Version](https://img.shields.io/cocoapods/v/Autolocalizable.svg?style=flat)](https://cocoapods.org/pods/Autolocalizable)\n[![License](https://img.shields.io/cocoapods/l/Autolocalizable.svg?style=flat)](https://cocoapods.org/pods/Autolocalizable)\n[![Platform](https://img.shields.io/cocoapods/p/Autolocalizable.svg?style=flat)](https://cocoapods.org/pods/Autolocalizable)\n\n## Example\n\nTo run the example project, clone the repo, and run `pod install` from the Example directory first.\n\n## Author\n\n[Anatoly Cherkasov](https://github.com/virpik), cherkasov@surfstudio.ru\n\n## Collaborators\n\n[Alexander Filimonov](https://github.com/alexfilimon)\n\n## License\n\nAutolocalizable is available under the MIT license. See the LICENSE file for more info.\n\n## Что бы избежать лишних импортов\n\nВ `Bridging-Header.h` проекта стоит тобавить строчку: \n\n```objective-c\n\n#import \"Autolocalizable/Autolocalizable-Swift.h\"\n\n```\n\nЕсли вы будете использовать Swift Package Manager, тогда этот трюк не сработает.\n\n## Базовые возможности\n\n- Держит значение активного языка \n- Локализация одного текстового поля (UILabеl например)\n- Отслеживание смены языка таргетно \n- Поддержка NSAttributtedString \n- Локализация с учетом склонений и различных трансформаций (_uppercased_, _capitalizingFirstLetter_)\n- Горячее подключение таблиц для локализации (Например текст может приходить с сервера) (см протокол [LocalizableValueService](LocalizableValueService))\n\n## Примеры использования\n\n#### Базовое использование:\n\nК классам _UILabel_, _UIButton_, _UITabbarItem_, _UIViewController_(заголовок) подключен протокол **AutoLocalizableField** - он позволяет зарегистрировать объект в системе авто локализации, при заполнении поля **localized**. \n\n```swift\n\nlabelDecription.localized = LocalizableStringItem(\"description\")\nsendButton.localized = LocalizableStringItem(\"send\")\nviewController.localizedTitle = LocalizableStringItem(\"viewControllerTitle\")\n\n```\n\nпри смене языка, текст автоматически заменится.\n\n#### Отслеживание смены языка:\n\nПример отслеживания смены языка: \n\n```swift\nfinal class MyClass: AutolocalizableFollowing {\n\n    init() {\n\tfollowAutolocalization()\n    }\n\n    // MARK: - AutolocalizableFollowing\n\n    func languageWasChanged(locale: LocaleType) {\n        /// ... code    \n    }\n\n}\n\n```\n\n## SwiftGen\n\nДоступен шаблон для подключения автоматической генерации через SwiftGen.\nШаблон находится в корне репозитория (swiftgen-templates) и поддерживает генерацию в отдельном package SPM\nУзнать про установку кастомных шаблонов можно в репозитории проекта [SwiftGen](https://github.com/SwiftGen/SwiftGen#choosing-your-template)\n\nЕсли генерация успешно интегрирована, доступен подобный синтаксис: \n`titleLabel.localized = L10n.ViewController.title`\n\n## Описание helper-ов\n\n#### LocalizableValueService\n\nПротокол, для чтения .strings файлов запрашиваемого языка\n\n**Методы**\n\n\n```swift\nfunc localized(_ table: String, _ key: String, _ args: [CVarArg], locale: LocaleType, bundle: Bundle) -\u003e String\n\n```\n\n\nМетод для получения переведенной строки на указанный язык, по ключу\n\n_table_ - Таблица _.strings_ (По умолчанию Localizable.strings)\n\n_key_ - Ключ строки, для которой требуется перевод (Например \"Login.title\")\n\n_args_ - Список аргументов для форматирования (Необходимо указывать если в перевод подставляются данные через %@)\n\n_locale_ - Требуемый язык\n\n_bundle_ - Bundle содержащий ресурсы\n\n\nБазовая реализация протокола доступна в классе `BaseLocalizableValueService`\n\n#### LocalizableStringItem \n\nМоделька, оборачивает параметры строки, необходимые для локализации. Подключен к _SwiftGen_\n\n**Свойства**\n\n```swift\nprivate(set) var value: String\n\n```\n\nВозвращает локализированную строку\n\n**Конструкторы**\n\n\n```swift\ninit(_ table: String, _ key: String, _ args: CVarArg...)\n\n```\nи\n\n```swift\ninit(_ table: String, _ key: String, _ args: CVarArg..., bundle: Bundle)\n\n```\n\n_table_ - Название .strings таблицы\n\n_key_ - Ключ локализации\n\n_args_ - Список аргументов для форматирования\n\n_bundle_ - Bundle содержащий ресурсы, по умолчанию Bundle.main, но может быть изменен, если например ресурсы вынесены в spm\n\n\n**Методы**\n\n```swift\nfunc set(localizableService: LocalizableValueService) -\u003e LocalizableStringItem\n\n```\n\nПозволяет установить таблицу для получения локализаций. Возвращает _LocalizableStringItem_ сконфигурированный для получения строки из указаного сервиса. \n\n```swift\nfunc add(transform: @escaping ((String) -\u003e String)) -\u003e LocalizableStringItem\n\n```\n\nДобавляет transform к локализуемой строке. Возвращает _LocalizableStringItem_ с добавленным в очередь трансформом. \n\nПравила трансформации: На вход блока приходит локализованная строка, **обработанная ранее добавленными _transform_-блоками**, в блоке необходимо вернуть измененную строку.\n\n```swift\nfunc addDeclension(_ value: Int?) -\u003e LocalizableStringItem\n\n```\n\nПодключает склонения к локализованной строке\n\n```swift\nfunc uppercased() -\u003e LocalizableStringItem\n\n```\n\nПереводит всю локализируемую строку в верхний регистр\n\n```swift\nfunc lowercased() -\u003e LocalizableStringItem\n\n```\n\nПереводит всю локализируемую строку в нижний регистр\n\n```swift\nfunc capitalizingFirstLetter() -\u003e LocalizableStringItem\n\n```\n\nПереводит первый символ локализуемой строки в верхний регистр\n\n```swift\nfunc attributedItem(with attributed: [NSAttributedString.Key: Any]) -\u003e LocalizableAttributedStringItem\n\n```\n\nПозволяет получить  _AttributedString_ из локализованной строки  \n\n#### LocalizableAttributedStringItem\n\nАналог _LocalizableStringItem_ для работы с  _AttributedString_\n\n**Свойства**\n\n```swift\nprivate(set) var value: NSAttributedString\n\n```\n\nЛокализованная строка с примененными атрибутами\n\n```swift\nprivate(set) var item: LocalizableStringItem\n\n```\n\nИсходный элемент локализации\n\n**Конструкторы**\n\n```swift\ninit(item: LocalizableStringItem, attributed: [NSAttributedString.Key: Any])\n\n```\n\n_item_ - исходный _LocalizableStringItem_\n\n_attributed_ - Применяемые атрибуты\n\n## Описание протоколов\n\n#### protocol AutoLocalizableField\n\n**Свойства:**\n\n```swift\nvar localized: LocalizableStringItem? { get set }\n\n```\n\nНе требует реализации. \nПри заполнении, зарегистрирует текущий объект в системе авто локализации с указанным _LocalizableStringItem_\n\nЕсли передать _nil_ - удалит из системы локализации.\n\n**Методы:**\n\n```swift\nfunc languageWasChanged(locale: LocaleType, localizableString: LocalizableStringItem?)\n\n```\n\nМетод вызовется при смене локализации\n\n_locale_ - новый язык\n\n_localizableString_ -  _LocalizableStringItem_, указанный при регистрации. \n\n#### protocol AutoLocalizableAttributedField\n\nАналог _AutoLocalizableField_, но для _AttributedString_\n\n\n#### protocol AutolocalizableFollowing\n\nПозволяет подписаться на обновление локализации\n\nВ классе, к которому подключается протокол, необходимо реализовать метод  \n\n```swift\nfunc languageWasChanged(locale: LocaleType)`\n\n```\n\nДля отслеживания смены языка вызывать `followAutolocalization()`, для отмены `unfollowAutolocalization` \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurfstudio%2Fautolocalizable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsurfstudio%2Fautolocalizable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsurfstudio%2Fautolocalizable/lists"}