Untranslated String Detector
An untranslated string detector turns same-as-source target values into a review list instead of leaving them hidden in the file.
Examples
{
"billing.cancel": "Cancel subscription",
"brand.name": "LocaleQA",
"billing.renew": "Renew plan"
}{
"billing.cancel": "Cancel subscription",
"brand.name": "LocaleQA",
"billing.renew": "プランを更新"
}Same as source: billing.cancel Likely acceptable but review-worthy: brand.name
The unchanged brand name may be intentional; the unchanged billing action is likely a missed translation.
Who reviews same-as-source strings
Vendors and reviewers decide whether a string should remain unchanged. Localization PMs need a compact list of candidates, and QA teams need confidence that English or source-language strings were not accidentally shipped.
Same-as-source strings can slip late into a release because the file is syntactically valid and the UI may still render. The problem is not technical failure; it is missed review scope.
Why JSON validity is irrelevant here
JSON validation cannot distinguish a correctly preserved product name from an untranslated sentence. It only proves the file parses.
LocaleQA uses deterministic source-target comparison after trim-only matching. It does not infer language quality or decide whether an unchanged string is wrong; it identifies candidates for human review.
Manual versus automated detection
Manual detection depends on someone scanning the target file for source-language text. Automated same-as-source checks are more repeatable, especially for long files, repeated UI labels, and delivery reports that need auditability.