{"id":1317,"url":"https://github.com/dcordero/Rubustrings","last_synced_at":"2025-08-02T04:30:51.706Z","repository":{"id":21256090,"uuid":"24571661","full_name":"dcordero/Rubustrings","owner":"dcordero","description":"Check Localizable.strings files of iOS Apps","archived":false,"fork":false,"pushed_at":"2019-01-16T08:21:34.000Z","size":174,"stargazers_count":119,"open_issues_count":4,"forks_count":14,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-12-02T18:59:49.705Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dcordero.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-09-28T22:09:40.000Z","updated_at":"2024-08-12T14:36:16.000Z","dependencies_parsed_at":"2022-08-28T11:50:07.450Z","dependency_job_id":null,"html_url":"https://github.com/dcordero/Rubustrings","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcordero%2FRubustrings","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcordero%2FRubustrings/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcordero%2FRubustrings/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcordero%2FRubustrings/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dcordero","download_url":"https://codeload.github.com/dcordero/Rubustrings/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228438762,"owners_count":17920013,"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-01-05T20:15:43.683Z","updated_at":"2024-12-06T08:30:42.567Z","avatar_url":"https://github.com/dcordero.png","language":"Ruby","funding_links":[],"categories":["Localization"],"sub_categories":["Other Hardware","Other free courses"],"readme":"# Rubustrings [![Build Status](https://travis-ci.org/dcordero/Rubustrings.svg?branch=master)](https://travis-ci.org/dcordero/Rubustrings)\n\nCheck the format and consistency of the Localizable.strings files of iOS Apps with multi-language support\n\n[Rubustrings](https://github.com/dcordero/RubustringsXml) is also available for Android [here](https://github.com/dcordero/RubustringsXml)\n\n## Usage\n\nIt only needs the files to validate as arguments\n\n```\nrubustrings Localizable.strings\n```\n\nAdditionally to the filenames, including the option --onlyformat will only assert for the format.\n\n## Install\n\n```\ngem install rubustrings\n```\n\n## Validators\n\nCurrently Rubustrings validates:\n\n* **The syntaxis of the strings file**: Just the format of each line: \"key\" = \"value\";\n* **Dynamic values (%@, %d, %ld,...)**: It checks that the translation include the same set of them than the original string.\n* **Special characters at the beginning or at the end**: If the original string begins or ends with a white space,\\n or \\r it tests that the translation also does.\n\nIt also warning on:\n* **Untranslated strings**: In missing translations\n* **Translation significantly large**: In translations 3 times larger than original string\n\n## Example\n\n```\ndcordero@silver:~$ rubustrings Localizable.strings\nProcessing file: \"Localizable.strings\"\n\nLocalizable.strings:217: error: beginning mismatch: \"Tubasa\" = \" Tubasa\";\nLocalizable.strings:220: error: number of variables mismatch: \"Web %@\" = \"Web\";\nLocalizable.strings:225: error: invalid format: \"bad format\" = \"because of a missing quote;\n\nResult: ✘ Some errors detected\n```\n\n```\ndcordero@silver:~$ rubustrings Localizable.strings\nProcessing file: \"Localizable.strings\"\n\nResult: ✓ Strings file validated succesfully\n```\n## XCode\n\nRubustrings can also be used as a custom build rule so that all .strings files\nare automatically validated at build time. This will also attempt to highlight\noffending lines in XCode.\n\n![Xcode build rule example](./xcode_example.png \"example\")\n\nJust add a new \"Run Script Phase\" with:\n\n```\nif which rubustrings\u003e/dev/null; then\n  find \"${SRCROOT}\" -type f -name Localizable.strings -print0 | xargs -0 -n1 rubustrings\nelse\n  echo \"warning: Rubustrings not installed, download from https://github.com/dcordero/Rubustrings\"\nfi\n```\n\n![Xcode setting example](./xcode_setting.png \"configuration\")\n\n## License\n\nMIT License (MIT) Copyright (c) 2017 @dcordero\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcordero%2FRubustrings","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdcordero%2FRubustrings","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcordero%2FRubustrings/lists"}