{"id":25804525,"url":"https://github.com/liri-infra/translation-action","last_synced_at":"2026-05-06T19:07:29.953Z","repository":{"id":130346756,"uuid":"254723811","full_name":"liri-infra/translation-action","owner":"liri-infra","description":":heavy_plus_sign: GitHub action to update translations","archived":false,"fork":false,"pushed_at":"2023-11-30T07:00:10.000Z","size":65,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-12-01T06:38:24.922Z","etag":null,"topics":["action","github","github-actions","lupdate","qt","transifex"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/liri-infra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.GPLv3","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-04-10T19:54:57.000Z","updated_at":"2023-12-01T06:38:24.923Z","dependencies_parsed_at":"2023-11-30T06:35:44.887Z","dependency_job_id":"c0abfc7f-3d91-416a-a8bd-6ef2fdaebb11","html_url":"https://github.com/liri-infra/translation-action","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liri-infra%2Ftranslation-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liri-infra%2Ftranslation-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liri-infra%2Ftranslation-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liri-infra%2Ftranslation-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/liri-infra","download_url":"https://codeload.github.com/liri-infra/translation-action/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241045264,"owners_count":19899621,"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":["action","github","github-actions","lupdate","qt","transifex"],"created_at":"2025-02-27T18:37:29.585Z","updated_at":"2025-11-21T19:03:17.775Z","avatar_url":"https://github.com/liri-infra.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\nSPDX-FileCopyrightText: 2020 Pier Luigi Fiorini \u003cpierluigi.fiorini@gmail.com\u003e\n\nSPDX-License-Identifier: GPL-3.0-or-later\n--\u003e\n\n# translation-action\n\n[![License](https://img.shields.io/badge/license-GPLv3.0-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.html)\n\nThis action does the following tasks:\n\n 1. Regenerate translation source files\n 2. Push source files to Transifex in order to rebase the translations\n 3. Pull rebased translations from Transifex\n 4. Commit and push to git\n\nYour project must have a `sources.json` file, usually located under the `.tx` directory.\n\nThis file contains a list of objects with the following keys:\n\n  * `type`: contains `ts`, `desktop` or `metainfo`\n  * `directory`: sources directory, only for `ts`\n  * `source_file`: template file, only for `desktop` and `metainfo`\n  * `file_filter`: filter of the source files, only for `desktop` and `metainfo`\n  * `output_path`: output file location\n\nHere's an example of `.tx/sources.json` from [Liri Text](https://github.com/lirios/text/blob/develop/.tx/sources.json):\n\n```json\n[\n  {\n    \"type\": \"ts\",\n    \"directory\": \"src\",\n    \"output_path\": \"translations/app/liri-text.ts\"\n  },\n  {\n    \"type\": \"desktop\",\n    \"source_file\": \"data/io.liri.Text.desktop.in\",\n    \"dest_file\": \"data/io.liri.Text.desktop\",\n    \"file_filter\": \"translations/data/desktop/\u003clang\u003e.po\",\n    \"output_path\": \"translations/data/desktop/desktop.pot\"\n  },\n  {\n    \"type\": \"metainfo\",\n    \"source_file\": \"data/io.liri.Text.appdata.xml.in\",\n    \"dest_file\": \"data/io.liri.Text.appdata.xml\",\n    \"file_filter\": \"translations/data/metainfo/\u003clang\u003e.po\",\n    \"output_path\": \"translations/data/metainfo/metainfo.pot\"\n  }\n]\n```\n\n## Usage\n\nThis action is usually called in a `schedule` workflow like this:\n\n```yaml\nname: Translations Sync\n\non:\n  schedule:\n    - cron: '0 15 * * 0'\n\njobs:\n  update-translations:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v2\n      - name: Update translations\n        uses: liri-infra/translation-action@master\n        env:\n          TX_TOKEN:  ${{ secrets.TX_TOKEN }}\n        with:\n          ssh_key: ${{ secrets.CI_SSH_KEY }}\n```\n\nThe example checks out the project, configures git to push with a ssh key,\nthen update `.ts` files, push them to Transifex and pull back the\ntranslations refreshed with the new sources.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliri-infra%2Ftranslation-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fliri-infra%2Ftranslation-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliri-infra%2Ftranslation-action/lists"}