{"id":13995072,"url":"https://github.com/konrad1977/loco","last_synced_at":"2026-03-04T13:36:09.757Z","repository":{"id":49808463,"uuid":"514585434","full_name":"konrad1977/loco","owner":"konrad1977","description":"A linter for Swift Localizations","archived":false,"fork":false,"pushed_at":"2023-11-27T15:06:28.000Z","size":3206,"stargazers_count":73,"open_issues_count":1,"forks_count":2,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-08-10T14:18:03.632Z","etag":null,"topics":["cli","linter","localization-management","static-code-analysis","swift","xcode"],"latest_commit_sha":null,"homepage":"","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/konrad1977.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}},"created_at":"2022-07-16T13:27:12.000Z","updated_at":"2024-07-23T11:15:38.000Z","dependencies_parsed_at":"2023-11-27T16:39:04.453Z","dependency_job_id":null,"html_url":"https://github.com/konrad1977/loco","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konrad1977%2Floco","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konrad1977%2Floco/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konrad1977%2Floco/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/konrad1977%2Floco/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/konrad1977","download_url":"https://codeload.github.com/konrad1977/loco/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227177757,"owners_count":17743159,"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":["cli","linter","localization-management","static-code-analysis","swift","xcode"],"created_at":"2024-08-09T14:03:14.306Z","updated_at":"2026-03-04T13:36:09.676Z","avatar_url":"https://github.com/konrad1977.png","language":"Swift","readme":"\n![\"Logo\"](https://github.com/konrad1977/loco/blob/main/images/logo.png)\n![](https://img.shields.io/github/languages/top/konrad1977/loco)\n\n# Loco\nLoco is an extremly fast CLI linter for Localization.strings and swift files.\n\n### What does it check?\n- Semicolons\n- *Untranslated* strings in your swift files\n- Empty values\n- Duplicate keys\n- Unused keys\n- Missing keys in one or more languages\n- Missing a translation file for a whole language\n\n- **Works with swiftgen generated localizations**.\n\n### New features:\n- Doesnt lint empty strings inside normally checked objects.\n- It doesnt check commented out strings that normally would be checked (Single line comments.)\n\n#### Output format\n- Loco will output its result in a compiler error log format so it can easily be integrated in third party apps (like Xcode, Emacs, Vim)\n\n##### Limitation\n- Loco builds two separate sets of data for each source file, one is for known localization pattern, such as NSLocalizedString, etc. The other one is for all the strings. Loco will then check if any of those are in a .strings file for silent warnings about unused translation keys. But it wont discover if a such key is untranslated. \n- Does not lint Localization.dict\n- Does not lint Storyboards\n- Will have false positive / true negatives\n- Needs a bit code clean up. (imperative coding mixed with tons of functional. Sorry purists)\n- Only some unit tests (more will come)\n\n#### Installation\nCompile the project using terminal (or Xcode)\n\n##### Release\n```shell\nswift build -c release\n```\n\n##### Debug\n```shell\nswift build\n```\n\nCopy the loco binary from either .build/release or .build/debug to\n```shell\n/usr/local/bin\n```\n\n## How to use\n\n### Integrate with Xcode\n![\"Xcode\"](https://github.com/konrad1977/loco/blob/main/images/xcode.png)\n\nIn build phases. Add run script (+)\n```shell\nif which loco \u003e /dev/null; then\n\tloco\nelse \n\techo \"warning: Loco is not installed. Compile from https://github.com/konrad1977/loco\"\nfi\n```\n\n*Make sure you run loco before compile sources to get info where you are missing a semicolon*\n\n### From terminal\nJust run loco from your project root.\n```shell\n$ loco\n```\n\n#### Arguments\nLint individual swift files (check for missing translations only)\n```shell\n$ loco -f \"/myProject/Sources/Subfolder/somefile.swift\"\n```\n\nEnable colored output\n```shell\n$ loco --color\n```\nWith color\n![\"Example2\"](https://github.com/konrad1977/loco/blob/main/images/example2.png)\n\nWithout color\n![\"Example\"](https://github.com/konrad1977/loco/blob/main/images/example.png)\n","funding_links":[],"categories":["Swift"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkonrad1977%2Floco","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkonrad1977%2Floco","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkonrad1977%2Floco/lists"}