{"id":18111525,"url":"https://github.com/gotev/localiser","last_synced_at":"2025-04-14T03:34:05.878Z","repository":{"id":34931016,"uuid":"239108845","full_name":"gotev/localiser","owner":"gotev","description":"Manage localisation strings from a web UI and auto generate JSON language files and native iOS and Android libraries containing the strings needed in your projects","archived":false,"fork":false,"pushed_at":"2023-02-17T04:58:03.000Z","size":237,"stargazers_count":4,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-27T17:36:31.970Z","etag":null,"topics":["android","autogenerated","autogeneration","frontend","i18n","internationalization","ios","json","l10n","localisation","localization","web"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gotev.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":null,"support":null},"funding":{"custom":["https://paypal.me/alexgt"]}},"created_at":"2020-02-08T10:26:41.000Z","updated_at":"2024-01-26T10:39:17.000Z","dependencies_parsed_at":"2023-02-10T13:16:09.191Z","dependency_job_id":null,"html_url":"https://github.com/gotev/localiser","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gotev%2Flocaliser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gotev%2Flocaliser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gotev%2Flocaliser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gotev%2Flocaliser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gotev","download_url":"https://codeload.github.com/gotev/localiser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248815767,"owners_count":21165979,"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":["android","autogenerated","autogeneration","frontend","i18n","internationalization","ios","json","l10n","localisation","localization","web"],"created_at":"2024-11-01T01:06:08.482Z","updated_at":"2025-04-14T03:34:05.852Z","avatar_url":"https://github.com/gotev.png","language":"Python","funding_links":["https://paypal.me/alexgt"],"categories":[],"sub_categories":[],"readme":"# Localiser\nManage localisation strings from a web UI and auto generate JSON language files and native iOS and Android libraries containing the strings needed in your projects.\n\nGenerated native libraries contains Swift and Kotlin type-safe mappings to easily use all your localisation strings. Follow README instructions in each auto generated library.\n\nTo build the auto generated iOS Frameworks you need to have macOS. Running localiser on a Mac is recommended to be fully operational on both mobile platforms without restrictions.\n\n## Architecture\n![architecture](assets/architecture.png)\n\nLocaliser is comprised of the following:\n\n* **db.sqlite3:** a database which contains all your project's localisation strings\n\n* **localiser-ui:** a web UI interface which allows you to easily manage all the localisation strings contained in your `db.sqlite3`. The first time you start it, if you don't have an existing `db.sqlite3`, it will be automatically created for you\n\n* **localiser-generator:** a command line generator which generates the following from the `db.sqlite3` database:\n  * Native `Android` library\n  * Native `iOS` library\n  * [ngx-translate](https://github.com/ngx-translate/core) JSON language files\n\nLook the [example](example) to see what you will get.\n\n## Technology stack\n* SQLite 3\n* Python 3\n* Jinja2\n* Django\n* Docker\n* Swift Package Manager\n* Gradle\n\n## Getting Started\nYour only prerequisite is having docker installed and running on your computer. Since you almost certainly are a mobile developer, I expect you to be on a macOS, so I'm not going to cover procedures in details for Linux or Windows.\n\nEnsure your docker is running. From a terminal, execute:\n\n```\ndocker pull gotev/localiser-ui \u0026\u0026 docker pull gotev/localiser-generator\n```\n\nAdd this in your (`~/.bash_profile` if using bash) or (`~/.zshrc` if using zsh):\n\n```\n# Localiser aliases\nalias localiser='docker run -t -i -v $(PWD):/localiser-ui/db -p 8000:8000 gotev/localiser-ui'\nalias localiser-generator='docker run -ti --rm -v $(PWD)/generated:/localiser-generator/generated -v $(PWD)/db.sqlite3:/localiser-generator/db.sqlite3 gotev/localiser-generator'\n```\n\nsave and exit, then run `source ~/.bash_profile` or `source ~/.zshrc` and you're done!\n\n### Localiser UI\n* simply navigate to the directory containing your `db.sqlite3` and run:\n    ```\n    localiser\n    ```\n    If no `db.sqlite3` is found in the directory, `localiser` creates one for you with default settings\n* open your browser on http://localhost:8000 and have fun! Default credentials are (you can change them once logged):\n  * username: `admin`\n  * password: `admin`\n\n### Localiser Generator\n* navigate to the directory containing your `db.sqlite3` and run:\n    ```\n    localiser-generator \"ProjectName\" \"exportVersion\"\n    ```\n    `exportVersion` can be whatever you use for versioning. [Semantic Versioning](https://semver.org) is recommended.\n* If everything goes right you will find a `generated` directory containing `android`, `ios` and `json` sub-directories.\n\n## Updating\nFrom a terminal, just execute:\n\n```\ndocker pull gotev/localiser-ui \u0026\u0026 docker pull gotev/localiser-generator\n```\n\nEnsure your docker is running. After it completes, you're done and you can continue using localiser as usual.\n\n## Database entities\n```\n* Locale                        you can define your own set of locales\n                                use either ISO 639-1 notation (e.g. it, en, fr): https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\n                                or ISO 3166-1 (e.g. it-IT, en-US): https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n                                full specification: https://tools.ietf.org/html/bcp47\n\n* Project                       you can have N projects in your DB\n\n    |==\u003e Namespace              each project can have from 1 to N namespaces\n\n        |==\u003e Localisation Key   each namespace can have from 1 to N localisation keys\n\n                                you can add a comment for each localisation key to better help\n                                you identify its purpose and where it's supposed to be used\n\n    |==\u003e Translated Key         it's a localisation key translated in a specific locale\n\n                                to speed up development and have the possibility to better\n                                define a translation later, you can mark a translated key as\n                                \"Temporary\" and change its value later. There's a filter which\n                                helps you see only temporary strings\n\n```\n\n### Localised strings\n* `UTF-8`\n* Supports emojis\n* Supports named placeholders in strings in the format `${ + any letter + }`. Generator recognizes only the placeholders present in project's default language values.\n  * Valid placeholder: `${validPlaceholder}`\n  * Some invalid placeholders: `${}`, `${1}`, `${_}`\n\n## License\nLocaliser is comprised of three different parts. Each one has a different license because it serves a different purpose.\n* `Localiser UI` is licensed under the GNU Affero General Public License version 3 (AGPLv3). Please find the attached full license in `localiser-ui` directory.\n* `Localiser Generator` is licensed under the General Public License version 3 (GPLv3). Please find the attached full license in `localiser-generator` directory.\n* `Generated Android and iOS libraries` are licensed under the Unlicense \u003chttp://unlicense.org/\u003e. Please find the the attached full license in your auto-generated libraries directory.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgotev%2Flocaliser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgotev%2Flocaliser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgotev%2Flocaliser/lists"}