diff --git a/.github/workflows/translations-sync.yml b/.github/workflows/translations-sync.yml new file mode 100644 index 00000000..fac70d1b --- /dev/null +++ b/.github/workflows/translations-sync.yml @@ -0,0 +1,36 @@ +name: Sync translations + +on: + workflow_dispatch: + push: + paths: ['bridge_ui/locales/**'] + branches: [master] + +permissions: + contents: write + pull-requests: write + +jobs: + sync-translations: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Sync sources and translations + uses: crowdin/github-action@v2 + with: + config: 'crowdin.yml' + upload_sources: true + upload_translations: true + download_translations: true + export_only_approved: true + localization_branch_name: l10n_crowdin_translations + create_pull_request: true + pull_request_title: 'New Crowdin translations' + pull_request_body: 'New translations from Crowdin.' + pull_request_base_branch_name: 'master' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 00000000..2af4ab27 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,130 @@ +# +# Your Crowdin credentials +# +'project_id_env': 'CROWDIN_PROJECT_ID' +'api_token_env': 'CROWDIN_PERSONAL_TOKEN' +'base_path': '.' +'base_url': 'https://api.crowdin.com' + +# +# Choose file structure in Crowdin +# e.g. true or false +# +'preserve_hierarchy': true + +# +# Files configuration +# +files: [ + { + 'source': '/bridge_ui/locales/en-US/translation.json', + 'translation': '/bridge_ui/locales/%locale%/%original_file_name%' + }, + # { + # + # Source files filter + # e.g. "/resources/en/*.json" + # + + # + # Where translations will be placed + # e.g. "/resources/%two_letters_code%/%original_file_name%" + # + + # + # Files or directories for ignore + # e.g. ["/**/?.txt", "/**/[0-9].txt", "/**/*\?*.txt"] + # + # "ignore": [], + + # + # The dest allows you to specify a file name in Crowdin + # e.g. "/messages.json" + # + # "dest": "", + + # + # File type + # e.g. "json" + # + # "type": "", + + # + # The parameter "update_option" is optional. If it is not set, after the files update the translations for changed strings will be removed. Use to fix typos and for minor changes in the source strings + # e.g. "update_as_unapproved" or "update_without_changes" + # + # "update_option": "", + + # + # Start block (for XML only) + # + + # + # Defines whether to translate tags attributes. + # e.g. 0 or 1 (Default is 1) + # + # "translate_attributes": 1, + + # + # Defines whether to translate texts placed inside the tags. + # e.g. 0 or 1 (Default is 1) + # + # "translate_content": 1, + + # + # This is an array of strings, where each item is the XPaths to DOM element that should be imported + # e.g. ["/content/text", "/content/text[@value]"] + # + # "translatable_elements": [], + + # + # Defines whether to split long texts into smaller text segments + # e.g. 0 or 1 (Default is 1) + # + # "content_segmentation": 1, + + # + # End block (for XML only) + # + + # + # Start .properties block + # + + # + # Defines whether single quote should be escaped by another single quote or backslash in exported translations + # e.g. 0 or 1 or 2 or 3 (Default is 3) + # 0 - do not escape single quote; + # 1 - escape single quote by another single quote; + # 2 - escape single quote by backslash; + # 3 - escape single quote by another single quote only in strings containing variables ( {0} ). + # + # "escape_quotes": 3, + + # + # Defines whether any special characters (=, :, ! and #) should be escaped by backslash in exported translations. + # e.g. 0 or 1 (Default is 0) + # 0 - do not escape special characters + # 1 - escape special characters by a backslash + # + # "escape_special_characters": 0 + # + + # + # End .properties block + # + + # + # Does the first line contain header? + # e.g. true or false + # + # "first_line_contains_header": true, + + # + # for spreadsheets + # e.g. "identifier,source_phrase,context,uk,ru,fr" + # + # "scheme": "", + # } + + ]