{"id":16647132,"url":"https://github.com/michaelrsweet/stringsutil","last_synced_at":"2026-05-25T10:31:54.649Z","repository":{"id":143286316,"uuid":"481200323","full_name":"michaelrsweet/stringsutil","owner":"michaelrsweet","description":"Simple localization library and tool for Apple \".strings\" files","archived":false,"fork":false,"pushed_at":"2025-12-19T20:08:22.000Z","size":318,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-26T21:52:59.359Z","etag":null,"topics":["c","localization","strings"],"latest_commit_sha":null,"homepage":"https://www.msweet.org/stringsutil","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/michaelrsweet.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"michaelrsweet","liberapay":"michaelrsweet"}},"created_at":"2022-04-13T12:06:54.000Z","updated_at":"2025-12-19T20:08:25.000Z","dependencies_parsed_at":"2024-04-08T16:40:45.025Z","dependency_job_id":"54ce959e-d8e4-443e-85a2-007bdc29e7cd","html_url":"https://github.com/michaelrsweet/stringsutil","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/michaelrsweet/stringsutil","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelrsweet%2Fstringsutil","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelrsweet%2Fstringsutil/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelrsweet%2Fstringsutil/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelrsweet%2Fstringsutil/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michaelrsweet","download_url":"https://codeload.github.com/michaelrsweet/stringsutil/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelrsweet%2Fstringsutil/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33471517,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-25T06:32:55.349Z","status":"ssl_error","status_checked_at":"2026-05-25T06:32:35.322Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["c","localization","strings"],"created_at":"2024-10-12T08:43:56.271Z","updated_at":"2026-05-25T10:31:54.627Z","avatar_url":"https://github.com/michaelrsweet.png","language":"C","funding_links":["https://github.com/sponsors/michaelrsweet","https://liberapay.com/michaelrsweet"],"categories":[],"sub_categories":[],"readme":"StringsUtil - Strings File Library and Utility\n==============================================\n\n![Version](https://img.shields.io/github/v/release/michaelrsweet/stringsutil?include_prereleases)\n![Apache 2.0](https://img.shields.io/github/license/michaelrsweet/stringsutil)\n![Build Status](https://img.shields.io/github/actions/workflow/status/michaelrsweet/stringsutil/build.yml?branch=master)\n![Coverity Scan Status](https://img.shields.io/coverity/scan/24835.svg)\n\nStringsUtil provides a library for using Apple \".strings\" localization files and\na utility for managing those files.  It is intended as a free, smaller,\nembeddable, and more flexible alternative to GNU gettext.  Key features include:\n\n- Support for localizing using both Apple \".strings\" and GNU gettext \".po\"\n  files.\n- Simple C/C++ library with support for embedding localization data in an\n  executable and/or loading localizations from external files.\n- Tools for exporting, importing, and merging localization files.\n- Tool for reporting on the quality of a localization.\n- Tool for scanning C/C++ source files for localization strings.\n- Tool for doing a first pass machine translation using the LibreTranslate\n  service/software.\n\n\nRequirements\n------------\n\nYou'll need a C compiler and the CUPS library.\n\n\n\"Kicking the Tires\"\n-------------------\n\nStringsUtil provides a configure script that creates a makefile which allows\nyou to build the unit tests on Linux and macOS (at least), which verify that all\nof the functions work as expected:\n\n    ./configure\n    make test\n\nThe makefile also builds the `stringsutil` program.\n\n\nInstalling\n----------\n\nRun:\n\n    sudo make install\n\nto install it in `/usr/local` along with a man page.\n\n\nUsing the `stringsutil` Tool\n----------------------------\n\nThe `stringsutil` tool allows you to manage your \".strings\" files.  Create a\n\".strings\" file by scanning source files in the current directory with the\n\"scan\" sub-command:\n\n    stringsutil -f base.strings scan *.[ch]\n\nCreate a \".po\" file for external localizers to work with using the \"export\"\nsub-command:\n\n    stringsutil -f base.strings export es.po\n\nWhen the localizer is done, use the \"import\" sub-command to import the strings\nfrom the \".po\" file:\n\n    cp base.strings es.strings\n    stringsutil -f es.strings import es.po\n\nRun the \"report\" sub-command to see how well the localizer did:\n\n    stringsutil -f base.strings report es.strings\n\nWhen you have made source changes that affect the localization strings, use the\n\"scan\" sub-command again to update the base strings:\n\n    stringsutil -f base.strings scan *.[ch]\n\nThen add those changes to the \"es.strings\" file with the \"merge\" sub-command:\n\n    stringsutil -f es.strings -c merge base.strings\n\nThe \"translate\" sub-command uses a LibreTranslate service to do a first-pass\nmachine translation of your strings.  For example, the following command will\nuse a local Docker instance of LibreTranslate:\n\n    stringsutil -f es.strings -l es -T http://localhost:5000 translate base.strings\n\nYou also use the \"export\" command to produce a C header file containing a\nstrings file that can be embedded in a program:\n\n    stringsutil -f es.strings export es_strings.h\n\n\nLegal Stuff\n-----------\n\nCopyright © 2022-2025 by Michael R Sweet.\n\nStringsUtil is licensed under the Apache License Version 2.0 with an (optional)\nexception to allow linking against GPL2/LGPL2-only software.  See the files\n\"LICENSE\" and \"NOTICE\" for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelrsweet%2Fstringsutil","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichaelrsweet%2Fstringsutil","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelrsweet%2Fstringsutil/lists"}