Claude Code in Persian: the language setting, CLAUDE.md, and right-to-left text
Yes. Claude Code's settings reference says the language value goes to the model as written, as an instruction to always answer in that language. There is no fixed list of response languages, so persian and farsi both work, and Claude Code does not check the spelling (official text, as of 2026-11-12). The hard part with Persian is display, not the setting. Text runs right to left, the half-space is U+200C, and ی versus ي and ک versus ك are different code points.
Updated 2026-11-13
One key across Claude, GPT and Chinese models, billed per token.
- Billed per token — live rates on /models
- Pay by card (Visa / Mastercard), Apple Pay, Google Pay or crypto
- Self-service: top up and activate instantly
Four things that decide your Persian output
Setting the response language
The official settings reference says it plainly: there is no fixed list for responses, the value is passed to the model verbatim as an instruction to always answer in that language, and Claude Code does not check it, so a misspelled name reaches the model as written.
Why dictation falls back to English
The same value also sets the voice dictation language, and dictation has a fixed list of supported languages that does not include Persian; the docs state that a language outside that list makes /voice warn you and fall back to English for dictation, while the text responses are unaffected.
What U+200C is
The half-space is U+200C ZERO WIDTH NON-JOINER: it stops two letters from joining. Chapter 9 of the Unicode Standard names the Persian plural suffix as its example and states that ignoring or removing these characters produces text with a different meaning, or meaningless text.
Why search finds nothing
In Persian, ی is U+06CC ARABIC LETTER FARSI YEH and ک is U+06A9 ARABIC LETTER KEHEH; in Arabic, ي is U+064A ARABIC LETTER YEH and ك is U+0643 ARABIC LETTER KAF, four different code points. Digits are the same story: Persian digits run from U+06F0 to U+06F9, Arabic-Indic digits from U+0660 to U+0669. A character search for one spelling therefore misses the other, and mixed digits are ordered by bidirectional class (Persian digits count as EN, Arabic-Indic digits as AN). Normalise the spelling first, then compare or store.
Response language and repository conventions are two things
The official docs keep two things apart. Which language the answers come in is a setting: the language value goes to the model verbatim, with no fixed list and no validation, and the same value also drives voice dictation and auto-generated session titles. Repository conventions — which language comments, identifiers, and commit messages use — belong in CLAUDE.md: plain-text Markdown, read at the start of every session, with the official advice to stay under 200 lines because longer files reduce adherence. Write both and you get Persian explanations with a stable code style.
Three common traps in Persian projects
① Right-to-left: the Arabic script is written from right to left, and conformant implementations must reorder it for display with the Unicode Bidirectional Algorithm, so cursor position and character order in a terminal are not the same as screen position. ② A deleted half-space: copy-paste or a cleaning script drops U+200C, the words join up, and the meaning goes with them. ③ Mixed letters: ي and ك copied from Arabic material are not the same code points as Persian ی and ک, so search and replace miss them.
Versions and dates of the three sources
The Claude Code settings reference and memory page as they stand: no fixed list for language and no validation; CLAUDE.md is plain text, read at the start of every session, with advice to stay under 200 lines.
The last update of the Claude Help Center page on using Claude in your preferred language; it states that Claude is available in multiple languages on web and desktop applications and lists the interface languages.
The version date of Vim's options.txt help: rightleft makes a window display right-to-left, and the option is local to the window.
Documented vs. your own repository
Documented
① Claude Code: no fixed list for response languages, the value goes to the model verbatim and is not validated, so a typo raises no error; dictation has a fixed list, and a language outside it falls back to English for dictation while the text responses are unaffected. ② CLAUDE.md: plain text, read at the start of every session, can import other files with @path, should stay under 200 lines, has block-level HTML comments stripped before injection, and is context rather than enforced configuration. ③ Unicode chapter 9: the Arabic script is written from right to left and conformant implementations must reorder it for display with the bidirectional algorithm; the half-space example is the Persian plural suffix; FARSI YEH and YEH are different code points. ④ W3C: control codes are invisible, plain text can only use them, and the isolate controls are recommended over RLE, LRE, and PDF. ⑤ The GNU Emacs manual: bidirectional editing covers Arabic, Farsi, and Hebrew, and implements the UBA.
What the docs leave open
Nothing official promises that a model always answers in Persian: language only passes the value along as an instruction, and how closely it is followed depends on the model and the prompt. Whether a long session drifts back to English, whether Persian letters inside identifiers get rewritten, and how much display width your terminal gives U+200C are things only your own repository can settle. One official warning is worth keeping: bidirectional scripts raise security considerations when used in identifiers.
Two places, two jobs
settings.json — the response language
The language key decides which language the answers come in: the value goes to the model verbatim, unvalidated, with no fixed list; it also sets the voice dictation language, which does have a fixed list, and the auto-generated session titles.
CLAUDE.md — writing conventions
Which language comments, identifiers, and commit messages use, whether Persian letters belong in variable names, which language example code uses — conventions like these go in CLAUDE.md: plain-text Markdown, read at the start of every session, ideally under 200 lines.
Set the language first, then write the rule
First, put one line in ~/.claude/settings.json: { "language": "persian" } (the official example uses japanese; the value is not validated, so farsi works too). Second, write the repository convention into ./CLAUDE.md; this block is ready to paste: پاسخها را فارسی بنویس؛ کد، نام متغیرها و پیام کامیت را انگلیسی نگه دار. (Answer in Persian; keep code, variable names, and commit messages in English.) Third, run /context all in a session and check that the file is listed under Memory files, then give it a real task and check whether Persian survives the tool calls.
On QCode
The language setting and CLAUDE.md live on your machine: the CLI reads them before the request leaves, so switching models changes neither. QCode's Claude models speak the Anthropic protocol: set ANTHROPIC_BASE_URL to https://api.qcode.cc/api and use the key from your dashboard, which starts with cr_; per-model rates are on /models, billed per token. Pay-as-you-go Packs start at $4 for a one-time quota you use within 7 days; if you already have a Personal Plan, add a booster pack when you need more quota.
FAQ
Does Claude Code support Persian?
Yes, for the answers. The official settings reference states that there is no fixed list for response languages: the value goes to the model verbatim and Claude Code does not validate it, so persian and farsi both work. Two other places work differently: the app interface language is its own fixed list, and voice dictation has a fixed list too; Persian is not on the dictation list, so choosing it falls back to English dictation. The text responses are unaffected.
How do I make Persian the default?
Put { "language": "persian" } in ~/.claude/settings.json; farsi works as well. The official example is japanese, which shows the type is any language name; the value is not validated and a typo raises no error, so check the spelling yourself. The project-level .claude/settings.json can carry the same key, and to make a whole repository consistent, also state the convention in ./CLAUDE.md.
The Persian text is in the wrong order in my terminal. What now?
Keep two effects apart. The Arabic script is written from right to left, and conformant implementations must reorder it for display with the Unicode Bidirectional Algorithm, so the screen runs right to left while the file is still stored left to right; in a mixed line, digits and English runs still read left to right. When the algorithm needs an extra hint, W3C recommends the isolate controls RLI, LRI, and PDI rather than RLE, LRE, and PDF. Editors have official switches: Vim's rightleft makes a window display right-to-left, and GNU Emacs has bidi-display-reordering.
The half-space shows as garbage or disappears. Why?
The half-space is U+200C ZERO WIDTH NON-JOINER. Its width is zero, so a character that seems to have vanished usually has no glyph but is still there. The real risk is deletion: chapter 9 of the Unicode Standard states that ignoring or removing these non-joiners produces text with a different meaning or meaningless text, and the Persian plural suffix is the official example. Turn on your editor's display of invisible characters when you debug; W3C also notes that control codes are invisible and easy to leave unterminated, and that plain text can only use them.
Can I write CLAUDE.md in Persian?
Yes. CLAUDE.md is a plain-text file that Claude reads at the start of every session, so write the rules in the language your team reads. Length and placement matter more than language: stay under 200 lines, because longer files reduce adherence; block-level HTML comments are stripped before injection, so do not hide rules in them; and when the file grows, use @path imports for the rest.
Which language should comments and commit messages use?
That is a team convention, not a vendor fact, but write it down either way. A common split is Persian for explanations and English for code and commit messages: Persian letters inside identifiers bring two concrete problems. Bidirectional scripts raise official security considerations when used in identifiers, and Persian ی and ک are different code points from Arabic ي and ك, so search and code review miss them easily. Put the rule in CLAUDE.md and it is read at the start of every session.
Sources
Claude Code: the language section of the settings reference, the memory page (how CLAUDE.md is read, the length advice, imports, HTML comments), and the voice-dictation page (the dictation list and the fallback rule), all read on 2026-11-12. Anthropic Help Center: using Claude in your preferred language (last updated 2026-10-23). Unicode: chapter 9, Middle East-I (writing direction, half-space, FARSI YEH, digits), UAX #9 for the bidirectional algorithm, and ArabicShaping.txt plus UnicodeData.txt for code points and properties. W3C: control codes versus markup in bidirectional text. Editors: the Bidirectional Editing section of the GNU Emacs manual and Vim's options.txt help (2026-10-25). QCode side: the Claude Code tutorial on docs.qcode.cc and the pricing and pay-as-you-go pages on qcode.cc.
Ready to run Claude Code in Persian?
Create a QCode key, set ANTHROPIC_BASE_URL, and pay per token. Pay-as-you-go Packs need no subscription.
Related reading
Pay-as-you-go Packs, no subscription
A one-time quota you use within 7 days; if you already have a Personal Plan, add a booster pack.
Claude Code in German
The same mechanics in another language: umlauts and file length.
Claude Code in Arabic: the answer language, CLAUDE.md and terminal RTL
Official sources for the language setting, an Arabic CLAUDE.md rule block, and how terminals and editors handle bidi today (iTerm2, kitty, Windows Terminal, VS Code), plus QCode setup.
Crypto payment guide
Nine coins, 56 networks, zero platform fee for AI coding API credits.
Vendor docs and standards change; every behaviour quoted here was read from the official pages on 2026-11-12, and the body gives the version dates for Vim and the Help Center. How consistently a model answers in Persian is not a vendor promise, so verify it on your own repository.