How to build a bilingual app for Quebec with AI: French rules and Law 25

How to build a bilingual app for Quebec with AI: French rules and Law 25

Cover: Codema graphic (no photo)
Cover: Codema graphic (no photo)

How to build a bilingual app for Quebec with AI: OQLF French-language rules, Law 25 privacy duties, Next.js i18n patterns and resources.

Browse the Own Your Stack topicBrowse the Vibe Coding topic

Editor's note: This is the English working draft of what will become our flagship French-language piece for Quebec readers. The French edition will be written for a Quebec audience, not machine-translated, and will be the primary version.

Most AI building guides are written in English, for an English-speaking market. If you build a bilingual app for Quebec, you have more to think about: language rules, privacy rules, and users who expect a product that feels native in French, not translated as an afterthought.

The good news is that AI coding agents make building bilingual products much easier than it used to be. This guide covers the rules to know, practical patterns for building in French with AI, and a short list of resources.

This is general information, not legal advice. Check your specific obligations with a professional or the relevant authority.

The rules: French language

The Office québécois de la langue française (OQLF) states the basics plainly in its fact sheet for businesses (OQLF fact sheet, PDF):

  • If your business operates in Quebec, its website must be available in French. You can offer other languages too, but all of the content, product pages included, must be available in French and be of equivalent quality.
  • Commercial posts, brochures, catalogues and ads you publish on your website and social media must be written in French. Other languages are allowed as long as the content aimed at Quebec customers is always available in French.
  • The same fact sheet reports that 3 in 4 people in Quebec say they prefer to shop and look for information online in French.

For the software your team uses, the OQLF says employers must make the French version of any software available to staff, in-house applications included, and install it in French by default on workstations. Businesses that employ 25 or more people in Quebec for six months are subject to the francization process and must register with the OQLF (OQLF, information technology, citing the Charter of the French language, arts. 4 and 141).

What this means for builders: if you're building an internal tool or a client-facing app for a Quebec business, plan for French from day one. Retrofitting a second language into hard-coded strings is the expensive way to do it.

The rules: privacy (Law 25)

Quebec's Law 25 matters for any app that handles personal information, and AI features often do. A few provisions are especially relevant (CAI, main changes):

  • Privacy impact assessment (EFVP) for any project to acquire, develop or overhaul an information system involving personal information, and before communicating personal information outside Quebec. If your AI feature sends customer data to a service hosted elsewhere, that's worth looking at closely.
  • Highest-privacy defaults. Privacy settings for technology products offered to the public must default to the highest level of confidentiality.
  • A privacy policy in clear, simple terms, published on your website.
  • Data portability, in force since September 22, 2024: on request, you must provide a person's computerized personal information in a structured, commonly used format (CAI). We cover this in more depth in our piece on owning your code and data.

How to build a bilingual app for Quebec with AI: patterns that work

1. Put the language strategy in your agent's instructions

Your AGENTS.md (or CLAUDE.md) should state the rules once, so you don't repeat them in every chat:

## Language
- The product is bilingual: French (fr-CA) and English (en).
- French is a first-class language, never a fallback. Every user-facing
  string must exist in both dictionaries before a feature is "done".
- Never hard-code user-facing text in components. Use the dictionaries
  in app/[lang]/dictionaries/.
- Use Quebec French terminology (e.g., "courriel", not "e-mail").
  When unsure of a term, flag it for human review instead of guessing.

2. Use locale routing from the start

Next.js supports internationalized routing with sub-paths like /fr/products or with separate domains, and its guide shows a dictionary pattern with app/[lang]/ and one JSON file per language, loaded on the server so translations don't bloat the client bundle (Next.js internationalization). Ask your agent to set this up before it builds features.

3. Make translation part of the workflow, not a final step

Agents are good at keeping two dictionaries in sync. Claude Code's docs even show translation as a CI task: claude -p "translate new strings into French and raise a PR for review" (Claude Code overview). Note the "for review" part. A fluent French speaker should approve user-facing text, especially legal, marketing and error messages.

4. Package your terminology as a skill

Build a small agent skill, for example quebec-french-review, that checks new strings against your glossary. Keep the glossary in the skill's references/ folder so it loads only when needed (Agent Skills spec). Build the glossary from an authoritative source. The OQLF's Vitrine linguistique includes the Grand dictionnaire terminologique (specialized terms, definitions and translations) and the Banque de dépannage linguistique (grammar, spelling, syntax and writing). Our AGENTS.md starter template already includes a rule that every user-facing string must exist in both languages.

5. Search that understands French

If your app has search, don't use English-only defaults. PostgreSQL, which powers Supabase, "comes with predefined configurations for many languages" and includes a French Snowball stemmer (PostgreSQL docs). That means a search for "facturation" can also match related word forms:

select title
from articles
where to_tsvector('french', title || ' ' || body)
      @@ plainto_tsquery('french', 'facturation client');

For a bilingual table, store the language for each row and use the matching configuration.

6. Test in French, not just in English

Ask your agent for tests that render key pages in fr and check that no English strings slip through. Also check accents in URLs, sorting and email templates. French text often runs longer than English, so check that buttons and headings don't break your layout.

Resources worth bookmarking

Why this matters

Quebec builders sometimes treat French as a compliance cost. We think it's an opportunity. Few AI resources are written for French-speaking builders, and a product that feels native in French stands out. That's why the French version of this guide will be our flagship piece. À suivre.

Keep reading

FAQ

Does my website need to be in French in Quebec?

Yes, if your business operates in Quebec. The OQLF says all website content, product pages included, must be available in French and be of equivalent quality.

Can I use AI to translate my app into French?

AI agents are good at keeping English and French dictionaries in sync, but a fluent French speaker should review user-facing text, especially legal, marketing and error messages.

Does Law 25 apply to AI features?

Law 25 applies to personal information, and AI features often process it. Sending customer data to a service outside Quebec calls for a privacy impact assessment first. This is general information, not legal advice.

How do I make Postgres search work in French?

Use the french text search configuration with to_tsvector and plainto_tsquery. PostgreSQL ships with a French Snowball stemmer, so related word forms match.

FAQ

Does my website need to be in French in Quebec?

Yes, if your business operates in Quebec. The OQLF says all website content, product pages included, must be available in French and be of equivalent quality.

Can I use AI to translate my app into French?

AI agents are good at keeping English and French dictionaries in sync, but a fluent French speaker should review user-facing text, especially legal, marketing and error messages.

Does Law 25 apply to AI features?

Law 25 applies to personal information, and AI features often process it. Sending customer data to a service outside Quebec calls for a privacy impact assessment first. This is general information, not legal advice.

How do I make Postgres search work in French?

Use the french text search configuration with to_tsvector and plainto_tsquery. PostgreSQL ships with a French Snowball stemmer, so related word forms match.

Sources

  1. OQLF, “Médias sociaux, sites Web et documents publicitaires” (fact sheet, PDF)https://www.oqlf.gouv.qc.ca/francisation/entreprises/memo-assistant-francisation/publications/fiche-medias-sociaux-sites-web-doc-publicitaires.pdf
  2. OQLF, “Technologies de l'information (logiciels)”https://www.oqlf.gouv.qc.ca/francisation/entreprises/outils-logiciels.html
  3. CAI, “Principaux changements apportés par la Loi 25”https://www.cai.gouv.qc.ca/protection-renseignements-personnels/sujets-et-domaines-dinteret/principaux-changements-loi-25
  4. CAI, “Entrée en vigueur des dispositions sur la portabilité”https://www.cai.gouv.qc.ca/actualites/entree-en-vigueur-dispositions-portabilite-renseignements-personnels-informatises
  5. OQLF, Vitrine linguistiquehttps://vitrinelinguistique.oqlf.gouv.qc.ca/
  6. Next.js, “Internationalization”https://nextjs.org/docs/app/guides/internationalization
  7. PostgreSQL, “Full Text Search: Introduction”https://www.postgresql.org/docs/current/textsearch-intro.html
  8. Claude Code, “Overview”https://code.claude.com/docs/en/overview
  9. Agent Skills specificationhttps://agentskills.io/specification
  10. Milahttps://mila.quebec/en

Report a correction

Before you go
Matching resources

Matching resources

Agent skills (SKILL.md)

Supabase RLS audit skill for coding agents

An agent skill that checks every Supabase table for Row Level Security and per-operation policies, then reports gaps without changing anything.

Keep reading

Keep reading

Newsletter

The Codema publication. Consent is required. You are not subscribed until you confirm from the email, and nothing is stored if email delivery is not connected.