lokalise/Pull from Lokalise
GitHub action to download translation files from Lokalise TMS to your GitHub repository in the form of a pull request.
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Activelast commit Jun 30, 2026
- License
- Apache 2.0
Pinned Snippet
uses: lokalise/lokalise-pull-action@95afae3fac9dd28db1ff4887a63b1f76cbee714d # v5.3.0tags can be moved; commit SHAs can't. why a SHA?
Inputs
| name | description | required | default |
|---|---|---|---|
| api_token | API token for Lokalise with read/write permissions | yes | — |
| project_id | Project ID for Lokalise | yes | — |
| base_lang | Base language (e.g., en, fr_FR) | no | en |
| translations_path | Paths to translation files | no | locales |
| file_format | Format of the translation files (e.g., json). Find all supported file formats at https://developers.lokalise.com/reference/api-file-formats | no | json |
| file_ext | Custom file extension(s) to use when searching for translation files. You can pass either a single string (e.g. json) or multiple extensions as newline-separated values (YAML block). By default, the extension is inferred from the file_format value. However, for certain formats (e.g., json_structured) or bundles (e.g., iOS with .strings and .stringsdict), this parameter allows specifying one or more extensions manually to ensure proper file matching. | no | "" |
| additional_params | Additional parameters for Lokalise API on pull. Must be a valid JSON or YAML. Find all supported options at https://developers.lokalise.com/reference/download-files | no | "" |
| temp_branch_prefix | Prefix for the temp branch to create pull request | no | lok |
| always_pull_base | By default, changes in the base language translation files are ignored. Set this to true to include base language translations in the PR. | no | false |
| flat_naming | Use flat naming convention (true/false). If true, expects files like locales/en.json instead of locales/en/file.json | no | false |
| skip_include_tags | Skip setting the include-tags argument during download. This will download all translation keys for the specified format, regardless of tags. | no | false |
| skip_original_filenames | Skips setting the --original-filenames and --directory-prefix arguments during download. By default, the action enables --original-filenames=true and sets a directory-prefix to /. When --original-filenames is set to false, all translation keys are exported into a single file per language, and --directory-prefix has no effect. | no | false |
| pr_labels | Comma-separated list of labels to apply to the created pull request | no | "" |
| pr_title | Title of the pull request. If not provided, defaults to "Lokalise translations update". | no | Lokalise translations update |
| pr_body | Body of the pull request. If not provided, defaults to "This PR updates translations from Lokalise." | no | This PR updates translations from Lokalise. |
| pr_reviewers | Comma-separated list of GitHub usernames to assign as reviewers for the pull request. | no | "" |
| pr_teams_reviewers | Comma-separated list of team slugs within the organization to assign as reviewers for the pull request. | no | "" |
| pr_draft | Create PR as draft | no | false |
| pr_assignees | Comma-separated list of assignees for the PR | no | "" |
| max_retries | Maximum number of retries on rate limit and other retryable errors | no | 3 |
| sleep_on_retry | Number of seconds to sleep before retrying | no | 1 |
| http_timeout | Timeout for HTTP calls (in seconds) | no | 120 |
| download_timeout | Timeout for the whole download operation (in seconds) | no | 600 |
| async_mode | Use async mode for translations download | no | false |
| async_poll_initial_wait | Number of seconds to wait before polling the async download process for the first time | no | 1 |
| async_poll_max_wait | Timeout for polling the async download process | no | 120 |
| os_platform | Target platform for the binary (linux_amd64, linux_arm64, mac_amd64, mac_arm64). If not set, the action will auto-detect based on the runner. | no | "" |
| git_user_name | Git username to set in git config. If not provided, defaults to GitHub actor. | no | "" |
| git_user_email | Git email to set in git config. If not provided, uses "<username>@users.noreply.github.com". | no | "" |
| git_commit_message | Git commit message used. If not provided, defaults to "Translations update". | no | Translations update |
| git_sign_commits | Use `git commit -S` (requires signing to be configured in the workflow) | no | false |
| custom_github_token | Optional GitHub token to use for API operations instead of the default GITHUB_TOKEN. Useful for custom permissions or elevated scopes. | no | "" |
| override_branch_name | Optional static branch name to use instead of auto-generating one. Useful when you want to reuse the same PR. | no | "" |
| override_base_branch | Override base branch to use for the Lokalise PR (defaults to triggering branch) | no | "" |
| force_push | Force push changes to the remote branch (overwrites history). Use with caution. Defaults to false. | no | false |
| post_process_command | Shell command to run after downloading translation files and before committing. Useful for custom replacements, cleanup, or any post-processing logic. Still experimental. | no | "" |
| post_process_strict | Whether to fail the action if the post_process_command returns a non-zero exit code | no | false |
Outputs
| name | description |
|---|---|
| created_branch | Branch used for the PR (new temp branch on manual runs, PR head on PR runs) |
| pr_exists | True if a PR exists after this run (created or updated) |
| pr_created | True if a brand-new PR was created by this run |
| pr_updated | True if an existing PR was updated by this run |
| pr_action | Either 'created', 'updated', or 'none' |
| pr_number | Pull request number (created or existing) |
| pr_id | Pull request ID (created or existing) |
| pr_url | Pull request URL (created or existing) |