{"id":30719830,"url":"https://github.com/dankinsoid/swiftlocalize","last_synced_at":"2025-09-03T10:42:20.641Z","repository":{"id":62456565,"uuid":"201032164","full_name":"dankinsoid/SwiftLocalize","owner":"dankinsoid","description":"Native Swift localization","archived":false,"fork":false,"pushed_at":"2024-05-31T12:29:38.000Z","size":79118,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"release","last_synced_at":"2025-08-17T09:47:56.164Z","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/dankinsoid.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-07T10:57:43.000Z","updated_at":"2024-05-31T12:30:34.000Z","dependencies_parsed_at":"2022-11-02T00:17:42.343Z","dependency_job_id":"7d1adb7c-c446-4acf-a70c-600188a87a80","html_url":"https://github.com/dankinsoid/SwiftLocalize","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/dankinsoid/SwiftLocalize","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dankinsoid%2FSwiftLocalize","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dankinsoid%2FSwiftLocalize/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dankinsoid%2FSwiftLocalize/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dankinsoid%2FSwiftLocalize/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dankinsoid","download_url":"https://codeload.github.com/dankinsoid/SwiftLocalize/tar.gz/refs/heads/release","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dankinsoid%2FSwiftLocalize/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273431361,"owners_count":25104491,"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","status":"online","status_checked_at":"2025-09-03T02:00:09.631Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":"2025-09-03T10:42:19.717Z","updated_at":"2025-09-03T10:42:20.625Z","avatar_url":"https://github.com/dankinsoid.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SwiftLocalize\n[![CI Status](https://img.shields.io/travis/Voidilov/SwiftLocalize.svg?style=flat)](https://travis-ci.org/Voidilov/SwiftLocalize)\n[![Version](https://img.shields.io/cocoapods/v/SwiftLocalize.svg?style=flat)](https://cocoapods.org/pods/SwiftLocalize)\n[![License](https://img.shields.io/cocoapods/l/SwiftLocalize.svg?style=flat)](https://cocoapods.org/pods/SwiftLocalize)\n## Description\nLibrary for native Swift localization of your projects. \n\t\n## Example\n```swift\nimport Foundation\nimport SwiftLocalize\n\npublic extension String {\n\n   @Localized public var ok: String {\n     [.ru: \"Да\",\n      .en: \"Ok\"]\n   }\n   @Localized public var cancel: String {\n     [.ru: \"Отмена\",\n      .en: \"Cancel\"]\n   }\n   @Localized public var never: String {\n     [.ru: \"Никогда\",\n      .en: \"Never\"]\n   }\n   @Localized public var later: String {\n     [.ru: \"Позже\",\n      .en: \"Later\"]\n   }\n\n   public static func coins(for count: Int) -\u003e String {\n      Localized([\n        .ru: [\n          .cases(NumberCase.accusative): \"монеты\",\n          .cases(NumberCase.singular): \"монета\",\n          .cases(NumberCase.genitive): \"монет\"\n        ]\n     ]).string(.cases(NumberCase(for: count)))\n   }\n\t\n   public static let errors: Localized.Dictionary = [\n      \"unknown\": [.ru: \"Неизвестная ошибка\", .en: \"Unknown error\"],\n      \"server\": [.ru: \"Ошибка сервера\", .en: \"Server error\"]\n   ]\n}\n```\n## Usage\nTo get a localized string create `Localized` object:\n```swift \nlet word = Localized(formsDictionary)\n```\nwhere\n`string: String` - default value,\n`formsDictionary: [Language: Localized.Forms]` - dictionary of forms\n\nTo get a string for current language use `word.localized`\nTo get for a custom language or form call\n```swift\nword.string(language, form)\n```\nwhere\n`language: Language` - language, default value is Language.current,\n`form: FormType` - word form (`OptionSet`)\n\t\nSupported forms: none, singular, plural, masculine, feminine, neuter, common and any combination of them.\n\nYou can create your own form type (for language cases as example) via `LanguageCaseProtocol` and use it:\n```swift\nlet formType = Localized.FormType.cases(customFormEnum)\n```\nThe repo contains one custom `LanguageCaseProtocol` type `NumberCase` for Russian language as example of usage.\n\nExamples of word with several forms:\n```swift\nlet manWord = Localized([\n\t.ru: [.singular: \"человек\", .plural: \"люди\"],\n\t.en: [\n\t\t[.singular, .masculine]: \"man\", \n\t\t[.plural, .masculine]: \"men\",\n\t\t[.singular, .feminine]: \"woman\", \n\t\t[.plural, .feminine]: \"women\"\n\t     ],\n\t .ja: \"人\"\n])\n```\nYou can combine words to get phrases:\n```swift\nlet tree = Localized([\n    .ru: [\n        [.neuter, .singular]: \"дерево\",\n        .plural: \"деревья\"\n    ]\n])\n       \nlet beautiful = Localized([\n    .ru: [\n        .plural: \"красивые\",\n        .singular: [.masculine: \"красивый\", .feminine: \"красивая\", .neuter: \"красивое\"]\n    ]\n])\n       \nlet phrase = beautiful + \" \" + tree\n\nprint(phrase.string(language: .ru, .plural))\n    //prints \"красивые деревья\"\nprint(phrase.string(language: .ru, .singular))\n    //prints \"красивое дерево\"\n```\n\n## Installation\n\n1. [Swift Package Manager](https://github.com/apple/swift-package-manager)\n\nCreate a `Package.swift` file.\n\n```swift\n// swift-tools-version:5.0\nimport PackageDescription\n\nlet package = Package(\n  name: \"SomeProject\",\n  dependencies: [\n    .package(url: \"https://github.com/dankinsoid/SwiftLocalize.git\", from: \"1.9.0\")\n  ],\n  targets: [\n    .target(name: \"SomeProject\", dependencies: [\"SwiftLocalize\"])\n  ]\n)\n```\n\t\n```ruby\n$ swift build\n```\n\n2.  [CocoaPods](https://cocoapods.org)\n\nAdd the following line to your Podfile:\n```ruby\npod 'SwiftLocalize'\n```\nand run `pod update` from the podfile directory first.\n\t\n## Author\n\nVoidilov, voidilov@gmail.com\n\n## License\n\nSwiftLocalize is available under the MIT license. See the LICENSE file for more info.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdankinsoid%2Fswiftlocalize","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdankinsoid%2Fswiftlocalize","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdankinsoid%2Fswiftlocalize/lists"}