Upload translation file fails at ~11% with no actionable error

Description:

While uploading a translation file via the Crowdin CLI, the process starts successfully but fails at approximately 11% progress with a generic error message and no further details.

Command executed:

crowdin upload translations 
  –auto-approve-imported 
  –branch master-test 
  –language uk 
  –project-id=“${CROWDIN_PROJECT_ID}” 
  –token=“${CROWDIN_PERSONAL_TOKEN}” 
  –verbose

Steps to reproduce:

  1. Run crowdin upload translations with --auto-approve-imported for a large .properties file (~24,000 lines)
  2. Observe upload progress polling
  3. Upload stalls at 11% and then fails

Observed behavior:

  • CLI successfully loads config and fetches project info
  • Upload job is created and begins polling
  • Progress is reported repeatedly at 0%–11% over many polling cycles (~80+ status checks)
  • At 11%, the job fails with:
    :cross_mark: Failed to upload the translation file ‘…Language_uk.properties’. Please contact our support team for help
    :cross_mark: sleep interrupted
  • No details about the root cause are provided

Job ID for server-side investigation: 4cd80334-fee6-42d0-ab4c-6222ba3bcaac

Hi @davi.santos

When an upload progress bar freezes or fails at a specific early percentage, like 11 percent, it usually points to a severe file parsing crash or a strict timeout on our backend. Because the system cannot process the file enough to generate a standard validation error, it fails silently and leaves you without context.

In .properties, a backslash at the very end of a line tells the parser that the string continues on the next physical line. If you have a trailing backslash that accidentally escapes the line break without a valid continuation, or if there are invalid Unicode escapes such as a backslash followed by a u and non-hexadecimal characters, the parser can crash or enter an infinite loop, resulting in the stalled progress bar.

I recommend opening the file in a code editor and doing a quick search for any trailing backslashes at the ends of your lines, as well as verifying that the file is saved in standard UTF-8 without a Byte Order Mark.

If the file looks fine to you, please reach our directly to support@crowdin.com and send your file sample (without any credentials) + project URL (or ID) so our team can take a look at it.

Hi @Dima,

I inspected the file and found something suspicious on the last line:

zoom-to-fit=Припасувати масштаб (Automatic Translation)##

It has a ## suffix at the end and no trailing newline. This might be the cause of the issue. I’ll fix it and retry.

I’d also like to share an interesting thing I noticed. When the upload failed with the error I mentioned, I polled the job via the API:

curl -H “Authorization: Bearer ${CROWDIN_PERSONAL_TOKEN}” “https://api.crowdin.com/api/v2/projects/${CROWDIN_PROJECT_ID}/translations/imports/4cd80334-fee6-42d0-ab4c-6222ba3bcaac” | jq .status

And the job had completed successfully. Is that intended? The CLI reported a failure, but the backend job continued running and eventually finished.

That trailing ## and missing newline on the last line definitely looks suspicious and is very likely what was breaking the parsing during upload :man_detective:

Regarding what you observed with the API job status versus the CLI error, the CLI should either surface the final backend status correctly or stop the job entirely, rather than ending in a “failed” state while the server-side process keeps running.

To investigate this properly, we will need to review the specific import job and how the CLI handled its polling and error reporting.

Please email support with the following so the team can check it in detail with the developers:

  • The translation file you were uploading (with any sensitive content removed if needed)

  • Your project URL or ID

  • The exact CLI command you used and the full output or logs from that run

Once the team reviews it, we can confirm whether this is a bug in the CLI’s error handling or some edge case in how the import job reports its status.

Hi @Dima,

Thanks for the follow-up.

I’ve sent an email to support with the requested details.

I’ll wait for the team’s investigation.

1 Like