Tools

String audit

Check strings on the way out, and deliveries on the way in.

Two checks over the same catalog: lint the source for the patterns that make strings hard to translate, then diff the returned delivery against it before you import. Load the samples to see what each check catches. Nothing you paste leaves the browser.

Lints one catalog for the problems that make a string hard or impossible to translate.

Paste your strings catalog

Audit findings

Keys

15

Errors

3

Warnings

5

Info

9

Filter by rule

  • Empty / whitespace-only valueerror

    checkout.freeShipping

    Value is empty. Did you forget to fill in the translation?

  • Unbalanced ICU braceserror

    checkout.intro

    Welcome to checkout. {Plus a few more lines of legalese, actually a very long s…

    Unbalanced braces (1 unclosed).

  • String concatenation in valueerror

    auth.rateLimit

    "You have " + count + " attempts remaining"

    Looks like concatenated JS: translators can't reorder fragments. Refactor into a single string with placeholders.

  • Embedded HTMLwarning

    auth.tos

    By signing in you agree to our <a href='/tos'>Terms</a>

    HTML detected. Either use ICU tag syntax ({tagName, /tagName}) or move markup outside the string and inject the inner text only.

  • Hardcoded plural via key suffixwarning

    auth.errorPassword_plural

    Wrong password (multiple attempts)

    Looks like a plural form encoded in the key. ICU MessageFormat (`{count, plural, one {…} other {…}}`) lets translators pick the correct categories per locale.

  • Identifier or code as valuewarning

    common.ok

    OK

    Value looks like an identifier, not a UI string. Move it to config and do not ship it to translators.

  • Identifier or code as valuewarning

    checkout.FOOTER_TEXT

    footerText

    Value looks like an identifier, not a UI string. Move it to config and do not ship it to translators.

  • Printf-style placeholderwarning

    checkout.summary

    You have %d items in cart

    Found printf-style or Objective-C placeholders. Use ICU named placeholders ({count}) so translators can reorder.

  • Ambiguous short stringinfo

    common.ok

    OK

    Short value with little context. Add a translator comment (e.g. via .arb's `@key.description` or a sibling `_comment` key).

  • Ambiguous short stringinfo

    common.submit

    Submit

    Short value with little context. Add a translator comment (e.g. via .arb's `@key.description` or a sibling `_comment` key).

  • Ambiguous short stringinfo

    common.cancel

    Cancel

    Short value with little context. Add a translator comment (e.g. via .arb's `@key.description` or a sibling `_comment` key).

  • Ambiguous short stringinfo

    auth.signIn

    Sign in

    Short value with little context. Add a translator comment (e.g. via .arb's `@key.description` or a sibling `_comment` key).

  • Ambiguous short stringinfo

    checkout.totalLabel

    Total:  

    Short value with little context. Add a translator comment (e.g. via .arb's `@key.description` or a sibling `_comment` key).

  • Ambiguous short stringinfo

    checkout.FOOTER_TEXT

    footerText

    Short value with little context. Add a translator comment (e.g. via .arb's `@key.description` or a sibling `_comment` key).

  • Double space inside valueinfo

    checkout.totalLabel

    Total:  

    Multiple consecutive spaces. Usually a typo.

  • Very long stringinfo

    checkout.intro

    Welcome to checkout. {Plus a few more lines of legalese, actually a very long s…

    Value is 300 characters. Split into shorter strings so TM leverage works sentence-by-sentence.

  • Leading or trailing whitespaceinfo

    checkout.totalLabel

    Total:  

    Whitespace at the start or end of the value. Trim unless intentional (e.g. concatenation glue).

Related: Lesson: Pseudolocalization workbench