Quebec Bill 96 website requirements — check your french locale free

Lints a French-Canadian locale file (fr-CA.json, .arb) for Quebec Bill 96 / OQLF problems: France-French terms, untranslated English, euro currency, slashed dates, fr-FR locale tags. Runs entirely in your browser — nothing is uploaded.

Same engine as the VS Code extension, byte for byte.

Install free

Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.

VS Code MarketplaceOpen VSX (Cursor, VSCodium)npmMCP server (npx)Docker Hub
ext install ReadyStack.i18n-fr-ca-bill96-lint
npx @readystack/i18n-fr-ca-bill96-lint <file>
npx @readystack/i18n-fr-ca-bill96-lint --mcp

Team? One key for every ReadyStack linter, 5 seats, $149 once

Get the full rule table as a PDF
All 9 rules i18n fr-CA Lint — Quebec Bill 96 checks, each with its source and date, on printable pages you can hand to your team or auditor. We email it now, and once more only if a rule changes. No newsletter.

Get the full version $29

Sweeps every locale file in the workspace in one command, writes the findings to a Markdown report and to a CSV or JSON export you keep, and returns a CI exit code so a bad French build fails the pipeline. $29 once, one licence key per person or CI seat.

One payment, one licence key for this tool. The key is shown right after payment.

A Canadian language-service provider bills fr-CA revision at $0.10 to $0.15 a word; a 12,000-word UI string set is $1,200 to $1,800.

Buy the full version — $29
ENDEJAESPT

Find a tool

· ReadyStack

Worked example

Real numbers from this tool, line by line.

i18n fr-CA Lint — Quebec Bill 96

13 findings came out of one French-Canadian locale file, and 8 of them were error level — the kind a Quebec francization complaint cites. The file was the sample that ships with i18n fr-CA Lint, and it is 13 lines long. If you own the fr-CA build at a company that sells software in Montreal or Quebec City, that ratio is the story.

Here is the uncomfortable part. Your French file was almost certainly written in Paris — or by a model trained on Paris. Ask any general assistant for a French UI string and it hands back e-mail, shopping, week-end and chat. The Office quebecois de la langue francaise replaces all four: courriel, magasinage, fin de semaine, clavardage. A model does not know it is being asked for Quebec unless you tell it, and it never reads your locale file line by line, so it cannot tell you which of two thousand keys is still sitting in English.

Quebec does read it. Under the Charter of the French Language, as amended by Bill 96 and fully in force since June 1, 2025, a company faces $3,000 to $30,000 a day for a French-language violation, and the francization certificate threshold dropped to firms with 25 employees or more. Complaints to the OQLF are filed by customers, not by auditors on a schedule, which is why there is no date on your calendar to prepare for.

So the linter goes at the artifact you actually own: the locale resource. fr.json, fr-CA.json, app_fr.arb, a Chrome _locales messages file. It parses every string value with its line number and runs 9 rules over it.

fr-fr-term catches the France-French words the OQLF replaces. english-left catches a value with no French accent that still reads as English — the string that ships an English screen inside the French build. euro-currency catches a euro sign or EUR in a file that should price in Canadian dollars. date-slash catches 21/09/2026 where Quebec writes 2026-09-21 or 21 septembre 2026. number-separator catches 1,234.56 where French Canadian grouping is 1 234,56. caps-accent catches TERMINE, ETAT and ACCES, because Quebec keeps the accent on capitals. empty-or-todo catches the empty or TODO value that falls back to English at runtime. locale-tag catches an @@locale key set to fr or fr-FR instead of fr-CA, which is the single line that makes your loader serve France French to every Quebec user. anglicism catches digital, supporter, opportunite, canceller and the rest.

The clean sample that ships beside the dirty one returns zero findings. That matters more than the 13: you can see exactly what a passing file looks like before you start editing. And a random JSON file in your repository is left alone — the engine only speaks up when the resource declares a French locale tag or already carries French accented text.

What would this cost with a person in the loop? A Canadian language-service provider bills fr-CA revision at $0.10 to $0.15 a word. A 12,000-word UI string set is $1,200 to $1,800 per pass, and you pay it again on the next release. A linter does not replace that revision — it removes the mechanical findings before the invoice starts.

All 9 rules run free on the file you have open, in the editor and on a web page that runs the identical engine in your browser with nothing uploaded. The licensed part is a different job on a different axis: one sweep across every locale file in the workspace, a Markdown report, a CSV or JSON export you keep, and a CI exit code so a French build with an English screen in it fails the pipeline instead of shipping.

Point it at your fr-CA file. If it comes back with zero, you have learned something worth knowing.

15 seconds — what it actually does

Questions people ask

What does i18n fr-CA Lint actually do?

It reads the French-Canadian locale file open in your editor and reports, line by line, every string that would not survive a Quebec francization complaint: France-French words the OQLF replaces, English text left untranslated, euro amounts, slashed dates, English number separators, unaccented capitals, empty or TODO values, and an fr-FR locale tag. Nine rules, each with the Quebec wording to use instead.

Who is this for?

Product and localization engineers at software companies that sell to Quebec. If your repository has an fr.json, fr-CA.json or app_fr.arb and a customer in Montreal or Quebec City sees that build, you are inside the Charter of the French Language. The extension is aimed at the developer who owns the locale file, not at a translation vendor.

Why can a free chatbot not do this?

General chatbots write France French by default. Ask one for a French UI string and you get e-mail, shopping, week-end and chat — the exact words the Office quebecois de la langue francaise replaces with courriel, magasinage, fin de semaine and clavardage. A chatbot also does not read your file line by line, so it never tells you which of 2,000 keys is still English.

What is free and what needs a licence key?

Free, with no key: all 9 rules run on the locale file you have open, in the editor and on the web page, with full line numbers and suggested Quebec wording. The licence key adds a different job — one sweep across every locale file in the workspace, a Markdown report, a CSV or JSON export you keep, and a CI exit code. $29 once.

What would this cost me to have a person do?

A Canadian language-service provider bills fr-CA revision at $0.10 to $0.15 a word, so a 12,000-word UI string set is $1,200 to $1,800 per pass, and you pay it again on the next release. Under the Charter of the French Language a company faces $3,000 to $30,000 a day for the violation this linter is pointed at.

Why not just ask ChatGPT or another AI chat?

A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. i18n fr-CA Lint — Quebec Bill 96 checks the file you open against 9 rules from a rule set dated 2026-09-21, and points at the exact line. For a filing, an audit or a client you need that dated result on your own files.

Ask about this tool

One question, answered by the person who built it. Your email only if you want the answer sent.

Embed this tool on your site (free)

Paste this code into your page. It runs in your visitor’s browser and stays up to date. Nothing your visitors type is stored.

 All embeddable tools

For businesses: your name and logo instead of ours, and each visitor’s result + e-mail in your inbox (only when they tick consent) — Pro from $19/month. See Pro →