How Web Scraper was translated into 50 languages with AI

i18n

i18n

Originally, the Web Scraper extension was only available in English. English is only the third most spoken native language in the world, with 372 million native speakers, while Spanish has 487 million and Chinese has 988 million. To improve usability and reduce misuse, we decided to internationalize the Web Scraper extension. The initial plan was to use a SaaS, but in the end, everything was translated by AI.


Why is translating software important?

The Chrome extension developer dashboard provides information about user count per country. Using this information, we can calculate how many Web Scraper extension users there are per million people. In native English-speaking countries like the United States, the United Kingdom, and Australia, there are 350+ users per million people, while in countries like Italy and Japan, where English adoption is only 28%, the user count is 200 - 250. From our analysis, English adoption in a country correlates with the user count per million people. See the table below for more examples.

Country Users per 1M population English speaking %
United States37796%
United Kingdom36398%
Australia49791%
Sweden358.689%
China40.30.70%
India65.219%
Italy252.628%
Japan226.928%
Turkey106.015%
Germany198.556%
France586.825%

Initial SaaS approach

Initially, we decided to use a SaaS to perform the translations. We created scripts that would synchronize our string file with their system. There we could initialize languages and translate them via machine translation, AI, or hire human professionals. We started with Latvian, since it is the language our entire team speaks. Latvian is a lot more complex than English: a word can have a gender and up to seven different endings. In a sentence, this means that when multiple words are combined, they have to take specific endings or the sentence doesn't make any sense at all. The initial machine and AI translations were bad or inconsistent. Machine translation would mix up the word endings, and AI got them right only about half the time (at that point, we were using Opus 4.8). In the end, we decided to use human translators.

Example of Latvian language endings:

Grammatical case Feminine singular Feminine plural Masculine singular Masculine plural
Nominative (who/what)mājamājaszēnszēni
Genitive (of what)mājasmājuzēnazēnu
Dative (to whom)mājaimājāmzēnamzēniem
Accusative (whom)mājumājaszēnuzēnus
Instrumental (with whom)ar mājuar mājāmar zēnuar zēniem
Locative (where)mājāmājāszēnāzēnos
Vocative (addressing)māja!mājas!zēn!zēni!

SaaS AI setup

For AI, good context is sometimes what makes or breaks the result, and for i18n it is essential. We set up the context both to try out the AI feature and to remove any ambiguity for human translators, who still use AI and machine translation as a starting point. Here is what we set up:

  • Business description - a brief description of the product.
  • Tone - rules for how the user should be addressed. For example, avoid addressing the user as "you".
  • Word dictionary - descriptions for product-specific terms. For example, a scraper can be a web scraper or a tongue scraper; the dictionary clarifies which one is meant.

SaaS human professional translation

After everything was set up, we tested human translation for Latvian and German. The translator first translated the dictionary, then kept adding new words to it during the translation. When the translated strings came back and we started checking them, we found that while the translations were fluent, the tone was inconsistent, and there were some incorrect translations when an English word was ambiguous. As a result, we weren't 100% satisfied.

The switch to 100% AI

While we were testing professional human translation, a lot was happening in the AI world: the Fable model launched, and OpenRouter announced Fusion, which combines three models to score even higher on benchmarks than Fable. We had to try it. We didn't have access to this in the SaaS platform, so we built this setup locally. The AI translation was iterative work, where each step was redone because of new learnings or changes in previous steps. Here are the steps we performed, some of them multiple times.

Original English strings

While we were happy with our original strings, after creating the tone definition we tasked AI with reviewing them and suggesting better wording. It did, and we made a few changes.

String descriptions

When we first tested AI, there were a lot of ambiguous translations, so we added descriptions to the problematic strings. This steered the translations in the right direction. It was also essential to note when a string is a button label and should be kept as short as possible. For the final version, we tasked AI with going through the entire source code and adding a description for every string. After a manual review, about 10 out of 300 descriptions were adjusted.

Tone

Initially, the tone definition stated that professional IT language should be used and listed the words that shouldn't be translated. After comparing AI and human translations, we tasked AI with updating the definition, giving it examples of the translations we liked better - "X should be translated like this, not like that."

English dictionary

A dictionary is essential because it pins one word to one translation and removes any ambiguity. Initially, it contained web scraping specific words that were being translated into Latvian incorrectly. After the first iteration of AI translation, we tasked AI with adding more words that were ambiguous in other languages. The dictionary grew a lot.

Dictionary translations

The dictionaries were translated with a script that used OpenRouter's Fusion model. The translations were redone multiple times as the English dictionary and the tone definition changed.

Machine translated strings

As an additional input, we translated all strings in all languages with machine translation. The hope was that if AI missed something, machine translation could provide extra context.

String translations

String translations were performed with a script that took:

  • tone definition
  • English dictionary
  • target language's dictionary
  • an English string
  • string description
  • current translation
  • machine-translated string

Using the Fusion model, the strings were translated multiple times as the inputs changed.

AI vs Human results

After setting up the tone and dictionaries and iterating on the AI translations with the Fusion model, there were no incorrect word endings - a good signal that the playing field had become a lot more equal. We compared AI against a human translator for Latvian and German.

Language Strings matched Human translator better AI better Human errors AI errors
Latvian172373531
German206222400

Most human mistakes came from misunderstanding the English string or drifting away from the desired tone. For AI, there were no clear bad patterns; sometimes we simply felt that the human translation was better, even though the AI translation was still good enough.

As you can see, there is no clear winner and no clear loser.

After the final AI translation, we ran one more human translation test, this time giving the professional translator access to our AI translations: they only had to fix issues or keep the translation as is. We did this for the French language. Out of the 307 test strings, 228 were kept as is. Since no one on our team is a native French speaker, we turned to AI to perform the final review. Here are some of the results:

Original string AI translation Human translation Comment
Column nameNom de colonneNom de la colonneMore juice
Give FeedbackDonner un avisDonner mon avisChange of tone
Leave a review
vs
Give my review
Select Next Page buttonSélectionner le bouton page suivanteBouton de sélection de la page suivanteChanged to incorrect translation:
Select the next page button
vs
Next page selection button

Here is the verdict from the AI comparison:

Bottom line: the AI set is the stronger translation overall - it won 60 of 79 rows in a blind multi-agent review, and 27 of the 30 verified critical defects belong to the human set. But the human set is systematically right about one important thing the AI gets wrong everywhere: TONE.md's rule that guidance text must use the imperative. The best French locale would be the AI set with roughly a dozen targeted fixes borrowed from the human's approach.

Final thoughts

Top-tier AI models can compete with human translators, and AI translation can be done without making bad errors. As of writing this, newer and better AI models have already rolled out - and they can only improve from here.

Using human translators would have cost us $7,500, while we spent about $1,500 on AI tokens - and we would have spent half of that if an article like this one had existed.

Our initial plan was to use human translators for the base translation and machine translation for new strings, since having 10 new strings translated by professionals on every release would be too time consuming and too costly. With high quality AI translations, this is no longer a problem at all.

In the end, we had human translations for Latvian, German, French, and Spanish, but we decided to stick with AI-only translations, since we feel this is where things are heading anyway.

Notes for your AI

Since this article will probably end up as input for somebody's AI, here is our tone definition, which you can use as a starting point:

Web Scraper Chrome extension is an utility app for web scraping. It allows users
to extract data from websites.

Web scraper extension has two user interfaces - AI wizard and Advanced UI. Ai
wizard is accessible by clicking the extension icon and it will open a side
panel. The Advanced UI is accessible via browser devtools.

When translating a short text, keep the translation short. Otherwise the text
might not fit in the UI.

Translations should be for IT professionals and web developers. Use technical
terms when appropriate.

When translating words like "scraping", "scraper", "scrape", "scraped",
"element", "point and click", "selector", "parent selector", "wizard",
"browser" they are meant in the context of web scraping. Translate these words,
but keep in mind they are related to web scraping.

BRAND FOUNDATIONS
Core Audience: Technical users, developers, and professionals who interact with
software interfaces. Value clarity, efficiency, and precision in UI text.
Knowledge Level: Assume familiarity with standard software conventions. No need
to explain basic UI patterns.
Core Values: Objectivity and Clarity. Present information without subjective
framing or conversational elements.
Brand Persona: A neutral system interface-detached, informative, and functional,
like a well-designed control panel.

VOICE AND TONE
Primary Voice: Impersonal, objective, and action-oriented.

TONE MATRIX
UI & Layout Context: Use detached action labels. Use infinitive or present
tense. Do: Open developer tools. Don't: You should open the developer tools.
Error Messages Context: Use neutral state reporting. State the condition without
addressing the user. Do: Invalid file format. Don't: You uploaded an invalid
file.
Documentation Context: Use descriptive function labels. Describe what actions
do. Do: Opens developer tools. Don't: This will open your developer tools.
Progress & Status Context: Report ongoing operations with active, present-tense
verbs. Keep the actor implicit and avoid passive or nominalized phrasing. Do:
Gathering page data. Showing 3 of 10 records. Don't: Page data is being
gathered. Record gathering in progress.
Guidance & Onboarding Context: Address the user directly with imperative
instructions for the action to take. Do: Move developer tools to the bottom.
Select the pagination button. Don't: Developer tools should be moved. The
pagination button can be selected.

WRITING PRINCIPLES
Brevity: Keep UI text concise. Fit within standard buttons, menus, and tooltips.
Clarity: Use standard UI terminology. Avoid conversational phrasing.
Impersonality: Never use "you," "your," or "yours." Maintain complete
neutrality.

MECHANICS AND LOCALIZATION
Capitalization: Use Sentence case for labels and descriptions. Use Title Case
for primary action buttons. Preserve the capitalization of named UI views,
screens, and modes when referenced in running text (for example, Website State
Setup).
Punctuation: Avoid periods in UI labels and button text. Use periods in full
sentences within help text or descriptions.
Dates/Time Format: ISO 8601 format (YYYY-MM-DD) / 24-hour clock.
Numbers/Currency Format: Use locale-appropriate formatting. Default to dots for
decimals (1.5).
Units: don't insert a space between a numeric value and its unit symbol (for example,
30s, 100ms).
Measurement System: Use Metric system by default.
Text Expansion: Translated text should not exceed the original source length by
more than 30% to prevent UI layout breakage.
Variables: Never translate placeholder variables or system identifiers.

INCLUSIVITY AND COMPLIANCE
Inclusive Language: Use gender-neutral terms. Avoid all personal pronouns. In
gendered languages, prefer neutral constructions or infinitive forms.
Risk Mitigation: Avoid absolute claims. Use measured, factual language. Prefer "
Available," "Enabled," or "Active" over subjective or promotional terms.

EXCEPTIONS
Allow using "you," "your," or "yours" when asking for feedback or review.
Allow direct, imperative address when guiding the user through an action, such
as pressing a shortcut or moving the developer tools.
Never use "—" always use "-"


Go back to blog page