{"id":18414405,"url":"https://github.com/kennytm/lproj2es","last_synced_at":"2025-04-07T11:32:47.206Z","repository":{"id":62442491,"uuid":"88435445","full_name":"kennytm/lproj2es","owner":"kennytm","description":"Dump iOS localization strings into Elasticsearch","archived":false,"fork":false,"pushed_at":"2017-04-29T07:33:28.000Z","size":67,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-22T17:40:11.174Z","etag":null,"topics":["elasticsearch","ios","localization-tool","lproj"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/kennytm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-04-16T18:50:43.000Z","updated_at":"2023-01-19T09:25:15.000Z","dependencies_parsed_at":"2022-11-01T22:02:36.048Z","dependency_job_id":null,"html_url":"https://github.com/kennytm/lproj2es","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/kennytm%2Flproj2es","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennytm%2Flproj2es/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennytm%2Flproj2es/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kennytm%2Flproj2es/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kennytm","download_url":"https://codeload.github.com/kennytm/lproj2es/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247645048,"owners_count":20972402,"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":["elasticsearch","ios","localization-tool","lproj"],"created_at":"2024-11-06T03:51:06.784Z","updated_at":"2025-04-07T11:32:46.825Z","avatar_url":"https://github.com/kennytm.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"lproj2es\n========\n\n**lproj2es** is a utility to extract all localized strings `*.lproj/*.strings` into an ElasticSearch index for easy\nlook-up. This allows translators to produce localizations using terms from endorsed by Apple.\n\n## Loading the iOS root filesystem\n\n1. Download an IPSW from \u003chttps://ipsw.me\u003e. IPSWs nowadays are typically over 2 GB in size, so make sure you have got\n    enough time to download the file, and enough harddisk space to store and unzip it.\n\n2. Unzip the IPSW to extract the root filesystem image (the filenames vary between iOS versions).\n\n    ```sh\n    $ unzip iPhone_7Plus_10.3.1_14E304_Restore.ipsw 058-55433-171.dmg\n    ```\n\n3. Attach the image.\n\n    ```sh\n    $ open 058-55433-171.dmg\n    ```\n\n## Building the index\n\n1. Start the ElasticSearch cluster. We assume ElasticSearch is accessible via http://127.0.0.1:9200.\n\n2. Run the program. It typically takes less than 3 minutes to finish with ElasticSearch on the local machine.\n\n    ```sh\n    $ ./lproj2es /Volumes/Erie14E304.D11D111OS/\n    ```\n\n## Document structure\n\nThe indexed translations are stored in the `localizations` index with `ios` type, using 1 replica and 1 shard. Each\ndocument looks like:\n\n```json\n{\n    \"BUNDLE\": \"/Volumes/Erie14E304.D11D111OS/System/Library/CoreServices/SpringBoard.app\",\n    \"FILE\": \"SpringBoard.strings\",\n    \"KEY\": \"AWAY_LOCK_LABEL\",\n    \"en_US\": \"slide to unlock\",\n    \"fr_FR\": \"Déverrouiller\",\n    \"es_ES\": \"Deslizar para desbloquear\",\n    \"de_DE\": \"Entsperren\",\n    ...\n}\n```\n\nThe **BUNDLE** field specifies the bundle the translation belongs to. The **FILE** field gives the `*.strings` file that\ncontains the translation. The document encodes a single key-value entry in the `*.strings` file, with the key in the\n**KEY** field, and values in their respective locale-id field (**en\\_US**, **fr\\_FR**, etc.)\n\n## Options\n\n```\nlproj2es 0.1.0\nkennytm \u003ckennytm@gmail.com\u003e\nDump iOS localization strings into ElasticSearch\n\nUSAGE:\n    lproj2es [OPTIONS] \u003croot\u003e\n\nFLAGS:\n    -h, --help       Prints help information\n    -V, --version    Prints version information\n\nOPTIONS:\n    -u, --url \u003cbase\u003e             Acesss point of the ElasticSearch cluster [default: http://127.0.0.1:9200]\n    -i, --index \u003cindex\u003e          Name of the index [default: localizations]\n    -t, --type \u003ctype_\u003e           Name of the type [default: ios]\n        --shards \u003cshards\u003e        Number of shards of the new index [default: 1]\n        --replicas \u003creplicas\u003e    Number of replicas of the new index [default: 1]\n\nARGS:\n    \u003croot\u003e    Root directory to scan for localized bundles\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkennytm%2Flproj2es","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkennytm%2Flproj2es","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkennytm%2Flproj2es/lists"}