How to Localize a SaaS as a Solo Founder (Tools + Costs)

Localizing a SaaS as a solo founder is a code job first and a translation job second. Externalize your strings, format numbers and dates with the Intl APIs, pick one or two languages from real data, machine-translate with a native review, charge in local currency, and tell Google about each version with hreflang. Most of the tooling has a free tier, so the real cost is your time and a reviewer.

Editorial title card reading "How to Localize a SaaS as a Solo Founder (Tools + Costs)" beside the orange ZeroRaised mark.

Key takeaways

  • Internationalize first (strings out of code, ICU plurals, Intl.NumberFormat and DateTimeFormat), then localize one language at a time.
  • CSA Research's 2020 survey of 8,709 consumers found 76% prefer to buy with information in their native language and 40% will never buy from websites in other languages.
  • Several translation management tools have free tiers: Tolgee Free covers 30,000 words and 3 seats, Localazy is free up to 200 source keys, and Weglot is free for 2,000 words on a marketing site.
  • Google Cloud Translation lists the first 500,000 characters per month as free (a $10 monthly credit), then $20 per million characters for NMT, so machine translation is rarely the expensive part.
  • Stripe Adaptive Pricing and Paddle localized pricing let customers pay in their own currency without you managing exchange rates by hand.
On this page 22
  1. TL;DR
  2. i18n vs l10n: what you are actually doing
  3. Step 1: Internationalize the code
  4. Move strings into message files
  5. Format numbers, currency and dates with Intl
  6. Put the locale in the URL
  7. Step 2: Choose your first language from data
  8. Step 3: Pick a translation management tool
  9. Step 4: Machine-translate, then review
  10. Step 5: Charge in local currency
  11. Step 6: Tell Google about each language with hreflang
  12. Worked example: 20,000 words into 3 languages
  13. Testing checklist before you ship a language
  14. Common mistakes
  15. Frequently asked questions
  16. What is the difference between internationalization and localization?
  17. Which language should a SaaS localize into first?
  18. How much does it cost to localize a SaaS?
  19. Do I need to charge in local currency?
  20. How do I make localized pages rank in Google?
  21. Launch in more than one language
  22. Sources

Short answer: To localize a SaaS as a solo founder, first internationalize the code (move every string into message files, use ICU plurals and the browser's Intl formatters), then add one language at a time: machine-translate, get a native speaker to review, charge in local currency, and publish each language on its own URL with hreflang. The tools are cheap or free at indie scale; the scarce resource is a good reviewer.

Every price and limit below comes from the vendor's own page, checked on 9 Nov 2026. The plan and the advice are ours and are marked as such.

TL;DR#

  • i18n before l10n. Internationalization is the code that makes localization easy; localization is the per-market adaptation (W3C).
  • There is demand. CSA Research found "76% of online shoppers prefer to buy products with information in their native language" and "40% will never buy from websites in other languages" (CSA Research).
  • Free tooling exists. Tolgee Free: 30,000 words, 3 seats (Tolgee). Localazy: free up to 200 source keys (Localazy).
  • Machine translation is cheap. Google Cloud Translation lists 500,000 free characters a month, then $20 per million for NMT (Google Cloud).
  • Local prices are a setting now. Stripe Adaptive Pricing covers "more than 150 countries" (Stripe docs); Paddle supports 30 currencies (Paddle).

Disclosure: ZeroRaised publishes this guide and is a launch site for bootstrapped products. We have no commercial relationship with any tool named here and earn nothing if you sign up. Facts come from the linked sources as checked on 9 Nov 2026.

i18n vs l10n: what you are actually doing#

W3C defines localization as the "adaptation of a product, application or document content to meet the language, cultural and other requirements" of a specific market, and internationalization as the "design and development of a product, application or document content that enables easy localization" (W3C).

For a solo SaaS, i18n is a one-off engineering project (no hard-coded strings, locale-aware formatting, a locale in the URL). l10n repeats per language: translations, local currency, screenshots, support and the marketing site. Our read: do the i18n work early even if a second language is a year away; it is far cheaper while the codebase is small.

Step 1: Internationalize the code#

Move strings into message files#

Pick a library that matches your stack. For React, i18next with react-i18next is common; for Next.js, next-intl. Both pick plural forms through the browser's Intl.PluralRules, which matters because many languages have more than two plural forms. i18next uses suffixed keys such as key_one and key_other (i18next plurals). next-intl uses ICU MessageFormat, with this example in its docs (next-intl):

{
  "message": "You have {count, plural, =0 {no followers yet} =1 {one follower} other {# followers}}."
}

Never build sentences by concatenating fragments ("You have " + n + " items"). Word order changes between languages, and translators need the whole sentence.

Format numbers, currency and dates with Intl#

Intl.NumberFormat "enables language-sensitive number formatting" and Intl.DateTimeFormat "enables language-sensitive date and time formatting" (MDN NumberFormat, MDN DateTimeFormat). Use them everywhere you show a price, a count or a date:

new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(1234.5)
new Intl.DateTimeFormat('ja-JP', { dateStyle: 'long' }).format(new Date())

Store dates in UTC and money in minor units on the server; format only at the edge.

Put the locale in the URL#

Use /de/, /fr/ and so on for the marketing site and docs; you need separate URLs for SEO (Step 6). Inside the app, store the user's chosen locale on their account.

Step 2: Choose your first language from data#

Start with your own numbers: signups, trial starts, payment attempts and support emails by country. A language where people already sign up in spite of English-only copy is your best bet.

If you have no data yet, use the web as a rough proxy. W3Techs' content-language survey for November 2026 shows (W3Techs):

Content languageShare of websites
English49.5%
Spanish6.0%
German5.9%
Japanese4.9%
French4.6%
Portuguese4.1%
Russian3.4%
Italian2.8%
Dutch, Flemish2.1%
Polish1.8%

This measures websites, not buyers, so treat it as a tie-breaker. The buyer side is clearer in CSA Research's 2020 "Can't Read, Won't Buy" survey of 8,709 consumers in 29 countries: 76% prefer to buy with information in their native language, and "65% prefer content in their language, even if it's poor quality" (CSA Research). That was a consumer survey; B2B buyers may behave differently.

Our read: German, French and Spanish are the usual first picks for a B2B SaaS selling into Europe and Latin America, and Japanese for products with a strong Japan signal. Pick the one where you can find a reliable native reviewer, because a bad translation in a billing screen costs more trust than English does.

Step 3: Pick a translation management tool#

You can keep JSON files in Git and translate them by hand for one language. Once you have two languages or more than a few hundred strings, a translation management system (TMS) pays for itself: it syncs keys, shows translators context, runs machine translation and flags missing strings.

ToolFree optionEntry paid priceNotes
TolgeeFree: 30,000 words, 3 seats, no cardTranslate €58/mo (billed annually)Open source; the pricing page offers self-hosting
LocalazyFree up to 200 source keysProfessional $34/mo ($408 billed annually)Unlimited seats and languages on paid plans
SimpleLocalizeCommunity plan, 500 keys, no cardDeveloper €12/mo (listed on its pricing page)Indie and open-source plans on request
Crowdin14-day Team trial; free Open Source License on requestNot shown in the page text we could readUnlimited translators and proofreaders on paid plans
Lokalise14-day trial, no cardExplorer $149/moBuilt for teams; no permanent free plan
WeglotFree: 2,000 words, 1 languageStarter €15 / $17 per monthFor marketing sites, not app strings

We also checked Phrase, but its entry price was not clear enough to quote, so it is left out.

Our picks: Tolgee if you like open source and may self-host later; Localazy or SimpleLocalize free tiers for a small app with a few hundred keys; Crowdin's Open Source License for open-source projects; Weglot for a marketing site on Webflow or WordPress, since it translates the rendered site (Business at €29 / $32 per month covers 50,000 words and 3 languages).

Step 4: Machine-translate, then review#

Machine translation is now good enough for a first draft of UI strings, and it is cheap. Google Cloud Translation lists the first 500,000 characters per month as free (applied as a $10 monthly credit) and $20 per million characters after that for its NMT model (Google Cloud pricing). DeepL is the other common choice; its pricing page did not show API rates we could verify today, so check DeepL's API page before you budget for it. Most TMS tools above plug into one or both.

Machine translation gets the volume done; a native speaker makes it trustworthy. Ask your reviewer to start with billing and cancellation screens, onboarding, error messages and the pricing page. Good reviewers: a customer in that country (offer a free year), a freelance translator, or a native-speaking founder friend. Give them a glossary so product terms are translated consistently.

Step 5: Charge in local currency#

Our read: a German buyer who sees €29 has one less reason to hesitate than one who sees $32 and wonders what their bank will add. You no longer have to manage this by hand.

Stripe Adaptive Pricing "lets your customers pay in their local currency in more than 150 countries". Stripe sets the exchange rate, "guaranteed for 24 hours", and the docs say customers pay a 2-4% conversion fee built into that rate while "You pay 0%" (Stripe docs). If you want round local prices instead, add manual prices per currency with currency_options; these "override Adaptive Pricing for those currencies" (Stripe manual currency prices).

Paddle converts your base price automatically and lets you set country-specific price overrides. It says it "supports over 200 countries and territories and 30 currencies" (Paddle docs).

Two things to settle alongside currency:

  • Price levels. Whether to charge less in lower-income markets is a pricing decision, not a translation one. Our guide on how to price a SaaS product covers how to set and test price points.
  • Tax. Selling into the EU, UK and elsewhere can bring VAT or GST obligations. A merchant of record such as Paddle handles that for you; with Stripe as a payment processor, you stay responsible for it. See sales tax for SaaS solo founders before you switch on new countries.

Step 6: Tell Google about each language with hreflang#

Each language version needs its own URL, and Google needs to know they are alternates. Google Search Central lists "three ways" to do it: HTML link tags, HTTP headers or the sitemap. Two rules trip people up: "Each language version must list itself as well as all other language versions", and "If two pages don't both point to each other, the tags will be ignored" (Google Search Central).

<link rel="alternate" hreflang="en" href="https://example.com/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/pricing" />
<link rel="alternate" hreflang="x-default" href="https://example.com/pricing" />

The x-default value "is used when no other language/region matches the user's browser setting". Our read: localize the homepage, pricing page and two or three highest-intent landing pages first. Translating every blog post is rarely worth it at the start.

Worked example: 20,000 words into 3 languages#

Illustrative example, our arithmetic from the prices cited above. Your volumes will differ.

The setup: an app with 12,000 words of UI strings and help text, plus an 8,000-word marketing site, going into German, French and Spanish.

ItemAssumptionCost
Characters to translate20,000 words × ~6 characters per word (including spaces) = 120,000 per language × 3 = 360,000
Machine translationGoogle Cloud Translation NMT: 360,000 is under the 500,000 free characters per month$0 (without the free allowance: 0.36M × $20 = $7.20)
TMS for the appTolgee Free covers 30,000 words and 3 seats; if your hosted words outgrow it, Translate is €58/mo billed annually€0 to €58/mo
Marketing siteWeglot Business: 50,000 words, 3 languages€29 / $32 per month
Native review3 reviewers, priced from real quotesYour largest line item

Our read: tooling is roughly one cheap subscription; review is the real budget. If you cannot afford review for three languages, ship one properly.

Testing checklist before you ship a language#

  • Pseudo-localization. Generate a fake locale that wraps and lengthens every string (for example "[Ŝéttîñĝš~~~]"). Any plain English left is a hard-coded string.
  • Text expansion. German and French run longer than English. Check buttons, navigation and tables at narrow widths.
  • Plurals. Test 0, 1, 2, 5 and 21 in each language.
  • Formats. Check decimal commas, date order and currency symbols on invoices and CSV exports, not just screens.
  • RTL readiness. If Arabic or Hebrew is on the roadmap, test dir="rtl" and use CSS logical properties (margin-inline-start) now.
  • Emails and fallbacks. Localize transactional emails and receipts, and make missing keys fall back to English, not checkout.title.

Common mistakes#

  • Translating before internationalizing. You end up translating the same string in three places.
  • Forcing language by IP. Respect the browser setting and offer a visible switcher.
  • One URL for every language. Google cannot index versions it cannot reach separately.
  • Localizing the site but not checkout. A German landing page that hands off to an English-only, dollar-only checkout loses the sale at the last step. See how to sell software online for checkout options.
  • Too many languages at once. Each language is an ongoing support commitment, not a one-off task.

Frequently asked questions#

What is the difference between internationalization and localization?#

W3C defines localization as the adaptation of a product or content to meet the language, cultural and other requirements of a specific market, and internationalization as the design and development that enables easy localization. In a SaaS, internationalization is the code work (strings in files, plural rules, locale-aware formatting) and localization is the per-language work (translation, currency, local examples).

Which language should a SaaS localize into first?#

Start with your own data: signups, traffic and failed payments by country. If you have none, W3Techs' November 2026 content-language figures put Spanish (6.0%), German (5.9%), Japanese (4.9%) and French (4.6%) behind English (49.5%) on the web. Our read: pick one language where you already see demand and can find a native reviewer.

How much does it cost to localize a SaaS?#

Tooling can be close to free at solo scale. In our worked example, machine-translating a 20,000-word app and site into 3 languages is about 360,000 characters, inside Google Cloud Translation's 500,000 free characters per month. The real cost is a native reviewer per language, which you should price from actual quotes.

Do I need to charge in local currency?#

It helps, and it is now easy. Stripe Adaptive Pricing lets customers pay in their local currency in more than 150 countries, with the customer paying a 2-4% conversion fee and you paying 0%. Paddle converts prices automatically across 30 currencies and lets you override prices per country.

How do I make localized pages rank in Google?#

Give each language its own URL and add hreflang annotations through HTML, HTTP headers or your sitemap. Google says each language version must list itself as well as all other versions, and tags are ignored if two pages do not point to each other. Use x-default for a fallback page.

Launch in more than one language#

Shipped a new language? That is a launch. Submit your product to ZeroRaised for free and reach makers who build without VC. For more practical guides on growing a bootstrapped SaaS, join the ZeroRaised newsletter.

Sources#

Frequently asked questions

What is the difference between internationalization and localization?

W3C defines localization as the adaptation of a product or content to meet the language, cultural and other requirements of a specific market, and internationalization as the design and development that enables easy localization. In a SaaS, internationalization is the code work (strings in files, plural rules, locale-aware formatting) and localization is the per-language work (translation, currency, local examples).

Which language should a SaaS localize into first?

Start with your own data: signups, traffic and failed payments by country. If you have none, W3Techs' November 2026 content-language figures put Spanish (6.0%), German (5.9%), Japanese (4.9%) and French (4.6%) behind English (49.5%) on the web. Our read: pick one language where you already see demand and can find a native reviewer.

How much does it cost to localize a SaaS?

Tooling can be close to free at solo scale. In our worked example, machine-translating a 20,000-word app and site into 3 languages is about 360,000 characters, inside Google Cloud Translation's 500,000 free characters per month. The real cost is a native reviewer per language, which you should price from actual quotes.

Do I need to charge in local currency?

It helps, and it is now easy. Stripe Adaptive Pricing lets customers pay in their local currency in more than 150 countries, with the customer paying a 2-4% conversion fee and you paying 0%. Paddle converts prices automatically across 30 currencies and lets you override prices per country.

How do I make localized pages rank in Google?

Give each language its own URL and add hreflang annotations through HTML, HTTP headers or your sitemap. Google says each language version must list itself as well as all other versions, and tags are ignored if two pages do not point to each other. Use x-default for a fallback page.