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

> How to localize a SaaS without a team: i18n setup, which languages first, translation tools and prices, local currency pricing, hreflang and a cost example.

- Canonical: https://zeroraised.com/blog/how-to-localize-a-saas
- Published: 2026-11-09T13:30:00Z
- Author: ZeroRaised Team (https://zeroraised.com/blog/authors/zeroraised)
- Publisher: ZeroRaised (https://zeroraised.com/)
- Section: Growth
- Tags: localization, saas, international, developer-tools

**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](https://www.w3.org/International/questions/qa-i18n)).
- **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](https://csa-research.com/Blogs-Events/CSA-in-the-Media/Press-Releases/Consumers-Prefer-their-Own-Language)).
- **Free tooling exists.** Tolgee Free: 30,000 words, 3 seats ([Tolgee](https://tolgee.io/pricing)). Localazy: free up to 200 source keys ([Localazy](https://localazy.com/pricing)).
- **Machine translation is cheap.** Google Cloud Translation lists 500,000 free characters a month, then $20 per million for NMT ([Google Cloud](https://cloud.google.com/products/translate/pricing)).
- **Local prices are a setting now.** Stripe Adaptive Pricing covers "more than 150 countries" ([Stripe docs](https://docs.stripe.com/payments/currencies/localize-prices/adaptive-pricing)); Paddle supports 30 currencies ([Paddle](https://developer.paddle.com/build/products/offer-localized-pricing)).

**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](https://www.w3.org/International/questions/qa-i18n)).

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](https://www.i18next.com/translation-function/plurals)). next-intl uses ICU MessageFormat, with this example in its docs ([next-intl](https://next-intl.dev/docs/usage/messages)):

```json
{
  "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](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat), [MDN DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat)). Use them everywhere you show a price, a count or a date:

```js
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](https://w3techs.com/technologies/overview/content_language)):

| Content language | Share of websites |
|---|---|
| English | 49.5% |
| Spanish | 6.0% |
| German | 5.9% |
| Japanese | 4.9% |
| French | 4.6% |
| Portuguese | 4.1% |
| Russian | 3.4% |
| Italian | 2.8% |
| Dutch, Flemish | 2.1% |
| Polish | 1.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](https://csa-research.com/Blogs-Events/CSA-in-the-Media/Press-Releases/Consumers-Prefer-their-Own-Language)). 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.

| Tool | Free option | Entry paid price | Notes |
|---|---|---|---|
| [Tolgee](https://tolgee.io/pricing) | Free: 30,000 words, 3 seats, no card | Translate €58/mo (billed annually) | Open source; the pricing page offers self-hosting |
| [Localazy](https://localazy.com/pricing) | Free up to 200 source keys | Professional $34/mo ($408 billed annually) | Unlimited seats and languages on paid plans |
| [SimpleLocalize](https://simplelocalize.io/pricing/) | Community plan, 500 keys, no card | Developer €12/mo (listed on its pricing page) | Indie and open-source plans on request |
| [Crowdin](https://crowdin.com/pricing) | 14-day Team trial; free Open Source License on request | Not shown in the page text we could read | Unlimited translators and proofreaders on paid plans |
| [Lokalise](https://lokalise.com/pricing) | 14-day trial, no card | Explorer $149/mo | Built for teams; no permanent free plan |
| [Weglot](https://www.weglot.com/pricing) | Free: 2,000 words, 1 language | Starter €15 / $17 per month | For 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](https://cloud.google.com/products/translate/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](https://www.deepl.com/en/pro-api) 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](https://docs.stripe.com/payments/currencies/localize-prices/adaptive-pricing)). 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](https://docs.stripe.com/payments/checkout/localize-prices/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](https://developer.paddle.com/build/products/offer-localized-pricing)).

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](https://zeroraised.com/blog/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](https://zeroraised.com/blog/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](https://developers.google.com/search/docs/specialty/international/localized-versions)).

```html
<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.

| Item | Assumption | Cost |
|---|---|---|
| Characters to translate | 20,000 words × ~6 characters per word (including spaces) = 120,000 per language × 3 = 360,000 | |
| Machine translation | Google 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 app | Tolgee 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 site | Weglot Business: 50,000 words, 3 languages | €29 / $32 per month |
| Native review | 3 reviewers, priced from real quotes | Your 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](https://zeroraised.com/blog/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](https://zeroraised.com/submit) for free and reach makers who build without VC. For more practical guides on growing a bootstrapped SaaS, [join the ZeroRaised newsletter](https://zeroraised.com/newsletter).

## Sources

- [W3C: Localization vs. Internationalization](https://www.w3.org/International/questions/qa-i18n), last checked 9 Nov 2026
- [W3Techs: Usage statistics of content languages for websites](https://w3techs.com/technologies/overview/content_language), last checked 9 Nov 2026
- [CSA Research: Consumers Prefer their Own Language (Can't Read, Won't Buy, B2C)](https://csa-research.com/Blogs-Events/CSA-in-the-Media/Press-Releases/Consumers-Prefer-their-Own-Language), last checked 9 Nov 2026
- [i18next: Plurals](https://www.i18next.com/translation-function/plurals), last checked 9 Nov 2026
- [next-intl: Rendering messages](https://next-intl.dev/docs/usage/messages), last checked 9 Nov 2026
- [MDN: Intl.NumberFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat), last checked 9 Nov 2026
- [MDN: Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat), last checked 9 Nov 2026
- [Tolgee pricing](https://tolgee.io/pricing), last checked 9 Nov 2026
- [Localazy pricing](https://localazy.com/pricing), last checked 9 Nov 2026
- [SimpleLocalize pricing](https://simplelocalize.io/pricing/), last checked 9 Nov 2026
- [Crowdin pricing](https://crowdin.com/pricing), last checked 9 Nov 2026
- [Lokalise pricing](https://lokalise.com/pricing), last checked 9 Nov 2026
- [Weglot pricing](https://www.weglot.com/pricing), last checked 9 Nov 2026
- [Google Cloud Translation pricing](https://cloud.google.com/products/translate/pricing), last checked 9 Nov 2026
- [DeepL API](https://www.deepl.com/en/pro-api), last checked 9 Nov 2026
- [Stripe: Adaptive Pricing](https://docs.stripe.com/payments/currencies/localize-prices/adaptive-pricing), last checked 9 Nov 2026
- [Stripe: Manual currency prices](https://docs.stripe.com/payments/checkout/localize-prices/manual-currency-prices), last checked 9 Nov 2026
- [Paddle: Offer localized pricing](https://developer.paddle.com/build/products/offer-localized-pricing), last checked 9 Nov 2026
- [Google Search Central: Tell Google about localized versions of your page](https://developers.google.com/search/docs/specialty/international/localized-versions), last checked 9 Nov 2026

## 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.


