Turkish at a glance
Türkçe- Language code
- tr
- Text direction
- Left to right
- Register
- sen (informal), siz (formal)
Regional variants and their hreflang values
trTurkish for every reader, written as the Turkish of Türkiye (ships today)tr-CYTurkish (Cyprus), on the roadmap
Most of what goes wrong on a Turkish website starts with one letter. Turkish has a dotted i and a dotless ı, each with its own capital, so a menu that looks fine in English can come out misspelled the moment a stylesheet puts it in capitals. The second decision is older than the web: whether the site calls its reader sen or siz.
LangRelay serves Turkish under the tag tr, at /tr/, written as the Turkish of Türkiye. It offers a Formality register for Turkish, so you can fix the choice between sen and siz once for the whole language.
Four letters where English has two#
English pairs i with I. Turkish has two pairs: i with İ, and ı with I. The W3C's CSS Text specification uses exactly this case to explain why case conversion depends on language: in Turkish "the usual case mappings between 'I' and 'i' are replaced" by mappings to the dotted and dotless counterparts, and only when the content language is known to be Turkish.
Two common ways of putting text in capitals depend on that condition:
- CSS
text-transform: uppercaseapplies Turkish rules only when the element's language is Turkish, which the browser reads from thelangattribute. - JavaScript's
toUpperCase()always uses the default mapping. MDN's own example fortoLocaleUpperCase()turns istanbul into İSTANBUL with the Turkish locale and into ISTANBUL withen-US.
Software that lowercases text has the same problem in the other direction. Wikipedia's article on the dotted and dotless I lists Turkish-locale casing bugs in Oracle, PHP and Java, among others.
A worked example: one menu item in capitals#
This is a worked example. A shop's header styles its menu in capitals, and its Turkish translation has a Contact item, İletişim, and a Sale item, İndirim. Each word below went through JavaScript in Node 24:
A Turkish reader sees the default column as dotless vowels, which spell different, wrong words. Lowercasing fails as well: the default rules turn İLETİŞİM into 11 characters, each dotted capital becoming an i followed by a combining dot, where the Turkish rules give the eight letters of iletişim. A search box or a login form that compares lowercased text can then fail to match what the visitor typed.
The fix for CSS is the lang attribute, and on a LangRelay site it is already there: the WordPress plugin writes lang="tr" on the <html> element of every page it serves in Turkish, so a browser that follows the CSS Text rules applies the Turkish mapping to a stylesheet's uppercase menu without any change to the theme. Scripts are your theme's or your plugins' code, so check any that change case and give them the page's language.
Sen or siz#
Modern Turkish keeps a clear line between the two. Wikipedia's survey of formal and informal address says family and friends use sen with each other, and that siz "is used almost exclusively" in formal situations such as business, a customer and a clerk, or people meeting for the first time. Siz is also the plural, and the verb agrees with whichever one the sentence uses, so the choice changes verb endings across the whole page as well as the pronoun.
Compare the forgotten password link on a sign-in form:
- Siz: Şifrenizi mi unuttunuz?
- Sen: Şifreni mi unuttun?
And a newsletter button, where Kaydolun asks the reader to sign up with siz and Kaydol with sen.
LangRelay's guidance is to start from siz for a shop, a service or anything that handles money, and to choose sen only when the brand already speaks that way in its own Turkish material. Whichever you pick, it has to hold everywhere: an order confirmation in sen after a checkout in siz reads like two companies.
In LangRelay, Settings, Languages offers three values for Turkish. Formal asks the translation model for siz, Informal asks for sen, and Language default leaves the choice to the model. The setting applies to machine translation started after you save it. Text that already has a translation keeps it, including text a new page shares with older ones, until someone selects it in the Translation grid and runs Machine retranslate.
Prices, percentages and dates#
Turkish formats numbers differently from English, and puts the percent sign before the number. JavaScript's Intl.NumberFormat, which reads the Unicode CLDR data, gives these for tr-TR:
A sale banner that says "25% off" in the source should read %25 in Turkish copy that follows the local convention. When you ask Relay to review a page, it reports a changed number, price or date as a major finding, so a percentage that moved shows up; a sign on the wrong side is a style choice your reviewer makes once and keeps.
One country, one tag#
The bare tag tr means Turkish as written in Türkiye, the default content locale CLDR gives it. LangRelay asks its translation engine for that variety by name, as Turkish (Türkiye), so the engine does not choose a variety for itself. For Turkish as written in Cyprus, LangRelay's locale model would give tr-CY its own prefix, hreflang entry and approvals; that variant is on the roadmap, and most sites only need tr.
Because there is usually one Turkish version, the hreflang set is short. Each English page and its Turkish version list each other and an x-default, and Google asks that every version list itself as well as the others. The plugin writes that set from the page's live translations. Its language switcher marks each link with its own language, so the Turkish entry is written in Turkish. On the English contact page it is a link like this one:
<a href="https://example.com/tr/contact/" hreflang="tr" lang="tr">Türkçe</a>Checking Turkish pages#
Read the pages on the site itself, with your real theme and fonts. Check every place your theme writes capitals: menus, buttons, badges and headings with letter spacing. Then search the Turkish pages for the register you did not choose; if a line in sen sits on a page written in siz, a Relay review reports it as a minor finding, and the Translation grid lets you fix it once for every page that shares the line.
The WordPress translation guide covers installing the plugin, and German website translation works through the same register choice in a language with three regional standards. The locale entry explains how a tag such as tr names a language and a region. To try Turkish on your own Site, book a demo.
Sources
The pages this one cites, with the day each was read.
- 01W3C, CSS Text Module Level 3 (text-transform, language-specific case mappings)w3.org, checked 7 October 2026
- 02MDN Web Docs, String.prototype.toLocaleUpperCase()developer.mozilla.org, checked 7 October 2026
- 03Wikipedia, Dotted and dotless I in computingen.wikipedia.org, checked 7 October 2026
- 04Wikipedia, T-V distinction in the world's languages (Turkish)en.wikipedia.org, checked 7 October 2026
- 05MDN Web Docs, Intl.NumberFormatdeveloper.mozilla.org, checked 7 October 2026
- 06Google Search Central, Tell Google about localized versions of your pagedevelopers.google.com, checked 7 October 2026
- 07WordPress.org, LangRelay plugin (version 2.1.0)wordpress.org, checked 7 October 2026




