Transifex

  • Documentation
  • Translation Checks
  • Setting Translation Checks

Setting Translation Checks

Translations missing key elements such as a variable or link could potentially break your website or app. To help prevent this, Transifex automatically checks every translation against a set of conditions. Whenever a condition is not met, e.g. an HTML element is missing, the translator will be shown either a warning or error message telling them what needs to be fixed. Translators can still save a translation when there's a warning. But if there's an error, they'll need to address the issue before they'll be able to save the translation.

Configuring translation checks

Each file format has a set of translation checks on by default. You can change whether a failed check results in an error or warning, or turn off a check altogether. You need to have an administrator role in order to perform the following changes.

To customize translation checks:

  • Go to your Organization Settings from the main navigation.

  • Click on Translation Checks in the left menu.translation-checks-overview.png#asset:80

  • Click on a file format to see the checks available for that file format.

  • Click on the toggles next to each rule to change whether a check should show a warning, error message, or be off.

    translation-checks.png#asset:809

  • Hit Save to confirm the changes.

You can always restore the translation check settings by clicking the Set to default checks next to the Save button.

The file format for Transifex Live projects is "Transifex Format (.json) checks".

Checking for custom variables

If you use custom variables in your code, you can set up custom translation checks and make sure they are left untouched in the translation. This is done by adding a custom check for a file format, and specifying either the characters your custom variables start and end with or the exact characters your variables consist of.

To do this:

  • Head to the Translation Checks settings page.

  • Click on the file format you want to add custom checks for.

  • Click Set up custom placeholders.

  • In the popup:

    • if you provide a start and end value, then the system will try to detect text which starts and ends with the specified words. So, in order to protect variables like {address}, %email%, [username] etc. during the translation process, you will just need to complete the fields "Starts with" and "Ends with" as shown below: 

    create_custom_variables.png#asset:6674

    • if you want the system to look for exact matches instead (e.g. %ld, %temperature), then you can enter the variable in the "Enter a custom variable" field including all the characters the variable consists of.
  • Click Add placeholder so as to finish adding this check. You can add more if you like by creating more placeholders.

    added_custom_placeholders.png#asset:6673


Note

When adding multiple placeholder delimiters, keep in mind that the delimiters are executed in the order they are added.

In the following example both placeholders will be executed. However if the order was reversed then only the first expression would be executed.

Macaque in the trees

Like the default checks, you can change whether a failed check results in an error or warning, or turn it off all together.

Translation checks based on regular expressions

With custom translation checks, you, as an organization administrator, can add your own regular expressions and ensure that nothing will break your website or application due to an invalid translation.

These checks can be created per file format as follows:

  • Click on the file format where you want to create your custom translation check
  • Click 'Add a translation check' at the bottom of the checks list
  • Provide a description for the check you want to create - This message will be displayed in the editor every time your rule is violated
  • Add your custom regular expression
  • Define where the custom translation check will be applied i.e. Translations only (the translation check will fail if there is a match) or Translations, and source strings (the translation check will fail if the matches found in the source string are different than the matches found in the translation). In case of the latter, you also have the option to enable the setting "Respect the matching order" which ensures that the order in source is preserved in the translation text
  • Test the regular expression you created before saving your configuration
  • Define the status of the check (Error, Warning, Off)

- Custom translation checks is a feature available on Premium and Enterprise plans

- The regular expression has a maximum timeout of 100ms

- Whenever an existing custom translation check is updated, the updated check is triggered only for newly submitted translations automatically. To trigger the updated check for existing translations as well, then run on-demand translation checks

Use Cases - Examples

Description: Match Quotes

When the source text contains double or single quotes and you want to check that there are quotes also in the translation text, you can use the following regular expression:

Regex: \"|\'

You can omit the double or the single quote from this regex, if you want to check only for one of them, eg. \"

This expression instructs the system to find if double or single quotes exist in the translation text. Depending on where this check will be applied, translations only or both source and translation string, the following can happen:

  • if the check is on translations only and the translation text does not contain double or single quotes, an error will be returned
  • if the check is on translations only and the translation text contains double or single quotes, no error is returned
  • if the check is on the source and translation strings and the source text contains double or single quotes, whereas the translation text does not, an error will be returned
  • if the check is on the source and translation strings and both the source and translation text contain double or single quotes, no error is returned

The setup will look like this:

Screenshot-2022-01-13-at-1.35.46-PM.png#asset:9906

Your regex expression can easily be tested using the test area.

Message returned when translation check fails:

Screenshot-2022-01-17-at-12.03.56-PM.png#asset:9918

Message returned when translation check is successful:

Screenshot-2022-01-13-at-2.10.20-PM.png#asset:9908

More examples can be found below:

Description: Special characters (excluding whitespaces)

You can use the following regular expression if you want to check whether there are characters apart from alphanumeric ones and whitespace in the translation text or in both the source and translation texts. Examples of special characters are: !@#$%&* and others.

Regex: [^a-zA-Z0-9\s]

---------------------------------------------------------------------------

Description: Spaces, tabs, or newline at end of a string

Often translators add a space or a tab or a newline at the end of their translation text, which is not present in the source text. To check whether there are such cases, you can use the following regular expression.

Regex: [\s\t\n]+$

Using the + in the regular expression means that there will be a match even if spaces or tabs or newlines are more than one. The $ sign denotes the end of the string. If you apply it to both the source and the translation text, then the following can happen:

  • If both the source and the translation text contain a space at the end, no error will be returned
  • If either the source or the translation text contains a space at the end, an error will be returned

If the translation check is applied only to the translation text, an error will be raised every time there is a space, a tab, or a newline at the end of the string, regardless if the source text contains them or not.

---------------------------------------------------------------------------

Description: Find whitespace at the end or beginning of a string

Similar to the example above, if you want to locate whitespace at the beginning or at the end of a string, you can use the following regular expression.

Regex: ^\s+|\s$

The | sign is used as the logical OR and the ^ sign marks the beginning of the string. If you apply this check to the translation text, for example, the following can happen:

  • If the translation text contains one or more whitespaces at the beginning of a string, or whitespace at the end, an error will be returned
  • If the translation text doesn't start or end with whitespace, then no error will be returned

---------------------------------------------------------------------------

Description: Find multiple whitespaces

Sometimes the translators add more than one whitespaces in their translations by mistake. To catch such cases you can use the following regular expression.

Regex: \s{2,}

The curly brackets signify how many times the previous token, in our case the whitespace, is repeated. The lower limit is 2 times; there is no upper limit. When this check is applied to the translation text, the following can happen:

  • If the translation text contains two or more consecutive whitespaces somewhere in the string (beginning, middle, end) an error will be returned
  • If the translation text doesn't contain two or more consecutive whitespaces, then no error will be returned

---------------------------------------------------------------------------

Description: Placeholders that start and end with % (no whitespace in between)

Many times the source text contains variables, which the translator should leave intact while he translates the source string. If whitespaces are added by mistake, then the developers' code will break and the app or page etc. will not load correctly. Let's take, for example, the following source string: "There are %no_of_countries% in %continent%". The translator adds the following as a greek translation: "Υπάρχουν %no_of countries% χώρες στην %continent%". There is whitespace added by accident in the first variable. When the following regular expression is used, these mistakes can be caught and fixed, before the translations reach production.

Regex: %(?!%)(?!%)\S+?%

The negative lookaheads (?!%) denote that the first character, the %, should not be followed directly by one or two same characters. It should be followed by one or more non-whitespace characters, and end with the % character.

Given the example above, and considering that you have a translation check with the above regular expression configured for both the source and the translation text, an error (or a warning) will be raised for the translation entered.

On-demand translation checks

On-demand translation checks can be found under the settings page of your Transifex project. This feature allows you to run translation checks on translation strings that have already been submitted.

In order to run translation checks on demand, you need to:

  1. Visit the Settings page of your project in Transifex
  2. Click on the Workflow tab
  3. Scroll down to the "Quality Assurance" section
  4. Click on the highlighted text "Check now" as shown below:

Screenshot-2021-06-07-at-2.48.34-PM.png#asset:9128

5. After that, the system will start running translation checks on the existing translations.

Check-on-demand-image-after-pressed.png#asset:9138

When the task is completed, an email notification will be sent to the user who performed this action (admins, maintainers) where a detailed report will be included:

ton_demand_translation_checks_emails.png#asset:9142