Sixteen declared alternates, fifteen of them on other hosts
Rask AI declares 16 language alternates. Fifteen resolve to language subdomains, so under the rule applied to every vendor only the English one sits on the host being read, and one of the sixteen carries a code that does not match its target. As of 2026-09-22.
| What is in the markup | Count | How the rule treats it |
|---|---|---|
| Alternates declared in all | 16 | Recorded, then filtered |
| Resolving to language subdomains | 15 | Not counted, as for every vendor |
| On the host being read | One, English | Counted |
| Declared as br, pointing at Brazilian Portuguese | One of the 16 | Recorded as a mismatch, not silently corrected |
Inclusion rule. One vendor, one column, showing the raw declaration and the counted figure separately so the effect of the rule is visible. Order. Raw declaration first, then what the rule keeps, then the mismatch.
1A rule that costs this vendor fifteen languages
Counting only same-host alternates takes a declaration of sixteen down to one. That looks harsh, and it is the price of a rule that cannot be bent per vendor: counting other hosts would let a company with many properties outscore one that translated its own pages.
The raw figure is printed here rather than hidden, because the number a vendor put in its own markup is worth recording even when the rule discards most of it. A reader who prefers the broader rule has both numbers and can disagree with the specific step.
2The code that points somewhere else
One alternate is declared with the code br. That code belongs to Breton, a language of western France, and the target is a Brazilian Portuguese subdomain. Brazilian Portuguese is written pt-BR; br alone is a different language entirely.
This is a maintenance error rather than a claim, and it is the only one of its kind in the register. It is worth recording because it shows what a declaration is: a machine-readable assertion that can be wrong in ways a human reader of the page would never notice.
3What the entry is evidence of
Fifteen subdomains that resolve are real localisation work. The column cannot count them, but their existence is recorded in the row, and a reader looking for a localised dubbing interface should follow the raw figure rather than the counted one.
One other vendor here is in the same position with eleven of twelve. Between them they are the reason this column always prints both numbers, and the reason the counting rule has a page of its own rather than a footnote.
4Sources
Read from the markup of rask.ai, with each alternate target resolved as declared. The column itself is described on site language, and every cell Rask AI fills is on its tool page.
5The same column, tool by tool
| Tool | Site languages |
|---|---|
| CapCut | 27 |
| D-ID | 2 |
| Fliki | None declared |
| Hailuo | None declared |
| HeyGen | None declared |
| Higgsfield | 5 |
| invideo AI | None declared |
| Kling AI | 20 |
| LTX Studio | None declared |
| Pika | None declared |
| PixVerse | 13 |
| Rask AI | One same-host, 15 on subdomains |
| Runway | 5 |
| SceneMixer | 15 |
| Synthesia | 9 |
| VEED | None declared |
| Vidnoz | One same-host, 11 on subdomains |
| Vidu | 9 |
Inclusion rule. Tools with a public English site selling AI video generation or AI video dubbing. Site languages count hreflang alternates served from the host being read; x-default and alternates pointing at another host are not counted, for every vendor alike. Order. Alphabetical by tool name.
Neighbouring cells: PixVerse: site language and Runway: site language. All of them together: the cell index and the register table.
- Site languages16 alternates declared: ar, br, cs, de, en, es, es-mx, fr, it, ja, ko, pl, pt, th, tr, zhraw count before the rule is applied
- Site languagesFifteen of the sixteen resolve to language subdomains; English alone sits on the host being countedwhere the alternates resolve
- Site languagesOne alternate is declared with the code br, which belongs to Breton, and points at a Brazilian Portuguese subdomaina code that does not match its target