When working with dynamic values in input placeholders, it’s easy to unintentionally create dozens of duplicate strings in Transifex Live.
Let’s look at a common example.
The Problem
Consider an input placeholder rendered like this:
Choose a value up to 50
Later, the same input changes dynamically:
Choose a value up to 100
Choose a value up to 250
From a user perspective, this is clearly the same message with a changing number.
However, from Transifex Live’s perspective, these are three completely different strings.
Choose a value up to 50Choose a value up to 100Choose a value up to 250
As a result :
- Each variation is detected separately
- Each requires approval
- Each requires translation
- Your string list grows unnecessarily
Related reading
If you’re working with dynamic UI values such as statuses, percentages, or backend-driven content, check out our earlier post: “Did you know? You can localize dynamic UI values with Transifex Live—without creating thousands of strings”
That article focuses on localizing dynamic data values, while this post focuses on a Live detection edge case involving input placeholders.
The key idea
For placeholders, the goal is to ensure Transifex Live detects only the static part of the text, while the dynamic value is appended after translation, at runtime.
Recommended workaround for Live projects
-
Define the static placeholder text
const staticText = "Choose a value up to"; -
Translate only the static text with Transifex Live
const translatedText = Transifex.live.translateText(staticText); -
Append the dynamic value at runtime
const placeholder = `${translatedText} ${dynamicValue}`; input.setAttribute("placeholder", placeholder);
With this approach:
- Transifex Live detects only:
Choose a value up to
- You approve a single translation
- All numeric variations are handled dynamically
- No duplicate placeholder strings are created
Important note
If the full placeholder string (static + dynamic) is rendered before Transifex Live runs, Live may still detect it as a separate string.
To avoid this, make sure the translated text is explicitly applied at runtime.
When to use this
This workaround is especially useful for:
- Input placeholders with limits or ranges
- UI text with dynamic thresholds
- Transifex Live projects where placeholders vary only by runtime values
Have you run into similar placeholder issues with Transifex Live?
Share your experience below — we’d love to hear how you’re handling it ![]()