{
  "meta": {
    "url": "https://shotlingo.com/tools/app-store-localization-checker",
    "lastVerified": "2026-07-25",
    "counts": {
      "total": 41,
      "expands": 35,
      "shrinks": 5,
      "rtl": 4,
      "cjk": 4,
      "highRisk": 19
    },
    "fieldLimits": [
      {
        "id": "title",
        "label": "App name",
        "limit": 30
      },
      {
        "id": "subtitle",
        "label": "Subtitle",
        "limit": 30
      },
      {
        "id": "promo",
        "label": "Promotional text",
        "limit": 170
      }
    ],
    "method": "expansionPct is the character-count delta versus the English source; widthPct is the rendered-width delta, which differs for CJK because each character is wider even when the string is shorter.",
    "license": "MIT",
    "attribution": "Maintained by Shotlingo (https://shotlingo.com). Linkback appreciated."
  },
  "locales": [
    {
      "code": "de",
      "appStoreCode": "de-DE",
      "name": "German",
      "nativeName": "Deutsch",
      "flag": "🇩🇪",
      "expansionPct": 35,
      "widthPct": 35,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Inter, Roboto and Source Sans 3 render ä, ö, ü and the ß (eszett) cleanly. Check that ß isn't drawn like a Greek beta (β) or a broken long-s ligature, and that the umlaut dots stay clear of ascenders when line-height is tight.",
      "commonMistake": "Designing the English version with tight button text, then being forced to shrink the font in German to make the longer strings fit. The German screenshots end up looking 'smaller' and less premium than the English ones, and users notice the downgrade.",
      "guideUrl": "/localize/app-store-screenshots-to-german/"
    },
    {
      "code": "fi",
      "appStoreCode": "fi",
      "name": "Finnish",
      "nativeName": "Suomi",
      "flag": "🇫🇮",
      "expansionPct": 30,
      "widthPct": 30,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Inter, Roboto and Source Sans 3 render ä and ö cleanly. Coverage is rarely the problem for Latin fonts. The real check is that the two dots sit clearly above the letter and don't clip in tight headline line-heights, since Finnish uses ä/ö far more frequently than German does; also confirm 'å' is present for Swedish-Finnish place and personal names.",
      "commonMistake": "Sizing a control for 'Settings' → 'Asetukset' (9 letters, manageable) and then discovering the same screen needs 'Ilmoitusasetukset' (notification settings, 17 letters) or 'Yksityisyysasetukset' (privacy settings, 20 letters). Finnish compounding means the longest string, not the average, dictates your layout.",
      "guideUrl": "/localize/app-store-screenshots-to-finnish/"
    },
    {
      "code": "hu",
      "appStoreCode": "hu",
      "name": "Hungarian",
      "nativeName": "Magyar",
      "flag": "🇭🇺",
      "expansionPct": 30,
      "widthPct": 30,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Noto Sans, Inter, and Source Sans handle Hungarian, but verify the double-acute ő and ű: many fonts fake them by reusing the dieresis (ö/ü) or a double-grave. The two strokes must be acute (rising to the right and parallel), not dots and not a wavy line.",
      "commonMistake": "Letting ő/ű collapse into ö/ü, via a font that fakes the double-acute or a pipeline that strips accents. These are genuinely different letters ('tör' (breaks) vs 'tőr' (dagger)), so the flattened version reads as a misspelling or a different word.",
      "guideUrl": "/localize/app-store-screenshots-to-hungarian/"
    },
    {
      "code": "pl",
      "appStoreCode": "pl",
      "name": "Polish",
      "nativeName": "Polski",
      "flag": "🇵🇱",
      "expansionPct": 30,
      "widthPct": 30,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Lato (designed by Polish type designer Łukasz Dziedzic), Inter, Roboto and Noto Sans all cover Polish well. Verify ł keeps its stroke (not a plain l), the ogonek on ą/ę and the acute on ś/ź/ń render, and ż (dot) is visually distinct from ź (acute).",
      "commonMistake": "A font that renders ł as a plain 'l' or collapses ż and ź into one glyph. The words still look vaguely Polish to a non-speaker but read as misspellings to natives, undercutting the entire listing's credibility.",
      "guideUrl": "/localize/app-store-screenshots-to-polish/"
    },
    {
      "code": "pt-BR",
      "appStoreCode": "pt-BR",
      "name": "Portuguese (Brazil)",
      "nativeName": "Português (Brasil)",
      "flag": "🇧🇷",
      "expansionPct": 30,
      "widthPct": 30,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Rubik, Barlow, or Inter. Portuguese hinges on the nasal tilde ã/õ (as in 'pão', 'opções') plus the circumflex â/ê/ô and the ç. Verify the tilde sits cleanly over the vowel and isn't clipped at large display sizes.",
      "commonMistake": "Reusing a European Portuguese (pt-PT) translation in a Brazilian listing. Brazilians immediately clock 'ecrã', 'telemóvel' and the 'tu' conjugation as 'Portuguese from Portugal', which in this market signals the app wasn't made for them.",
      "guideUrl": "/localize/app-store-screenshots-to-portuguese-brazil/"
    },
    {
      "code": "pt-PT",
      "appStoreCode": "pt-PT",
      "name": "Portuguese (Portugal)",
      "nativeName": "Português",
      "flag": "🇵🇹",
      "expansionPct": 30,
      "widthPct": 30,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Source Sans 3, Karla, or Overpass. Same diacritics as Brazilian (ã õ â ê ô ç), but European Portuguese also traditionally uses guillemets « » for quotations. Pick a font that includes those angle quotes, not just straight and curly ones.",
      "commonMistake": "Letting Brazilian vocabulary leak into a Portugal listing: 'tela' for screen, 'celular' for phone, 'aplicativo' for app. Portuguese users read these as Brazilian rather than their own, even when the rest of the copy is fine.",
      "guideUrl": "/localize/app-store-screenshots-to-portuguese-portugal/"
    },
    {
      "code": "ar",
      "appStoreCode": "ar-SA",
      "name": "Arabic",
      "nativeName": "العربية",
      "flag": "🇸🇦",
      "expansionPct": 25,
      "widthPct": 30,
      "rtl": true,
      "script": "arabic",
      "overflowRisk": "high",
      "fontNotes": "Noto Sans Arabic, SF Arabic (iOS system) or IBM Plex Arabic. All give correct positional letter shaping and full harakat/diacritic (tashkeel) marks; avoid Latin fonts that merely append Arabic glyphs, which break the cursive letter-joining.",
      "commonMistake": "Translating the copy but leaving the layout left-to-right. Headline on the wrong side, arrows pointing the wrong way, CTA misplaced. Arabic users read this as 'not actually localized', and it is more off-putting than an all-English screenshot.",
      "guideUrl": "/localize/app-store-screenshots-to-arabic/"
    },
    {
      "code": "hr",
      "appStoreCode": "hr",
      "name": "Croatian",
      "nativeName": "Hrvatski",
      "flag": "🇭🇷",
      "expansionPct": 25,
      "widthPct": 25,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Inter, Noto Sans, Roboto and Source Sans 3 cover Croatian. Verify č (caron) and ć (acute) are visually distinct, that š/ž carons render, and that đ/Đ show the crossbar rather than falling back to a plain d.",
      "commonMistake": "Substituting đ with 'dj' or collapsing ć and č. Both look 'close enough' to outsiders but are spelling errors to Croatian readers, and đ→dj in particular instantly marks the localization as machine-made.",
      "guideUrl": "/localize/app-store-screenshots-to-croatian/"
    },
    {
      "code": "cs",
      "appStoreCode": "cs",
      "name": "Czech",
      "nativeName": "Čeština",
      "flag": "🇨🇿",
      "expansionPct": 25,
      "widthPct": 25,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Inter, Noto Sans, Roboto and IBM Plex Sans handle Czech well. Verify ř exists, that ď/ť use the correct small raised tick (not a caron floating above), and that ů keeps its ring so it stays distinct from ú.",
      "commonMistake": "Letting a font stack a full caron on top of ď/ť instead of the correct raised tick, or substituting a plain r for ř. Both make the text look like a foreign approximation of Czech rather than the real thing, which Czech reviewers call out.",
      "guideUrl": "/localize/app-store-screenshots-to-czech/"
    },
    {
      "code": "et",
      "appStoreCode": "et",
      "name": "Estonian",
      "nativeName": "Eesti",
      "flag": "🇪🇪",
      "expansionPct": 25,
      "widthPct": 25,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Noto Sans, Inter, and Lato all cover Estonian; the one to verify is õ (o with tilde), which must be present and visually distinct from ö (o with dieresis). Fonts with only a 'German' umlaut set will have ä ö ü but silently miss õ.",
      "commonMistake": "Using a font or normalization step that lacks õ, so it collapses to o or ö. But õ is its own vowel ('õli' (oil) vs 'oli' (was)), so the word simply changes, and Estonian readers see the whole screenshot as machine-made.",
      "guideUrl": "/localize/app-store-screenshots-to-estonian/"
    },
    {
      "code": "lt",
      "appStoreCode": "lt",
      "name": "Lithuanian",
      "nativeName": "Lietuvių",
      "flag": "🇱🇹",
      "expansionPct": 25,
      "widthPct": 25,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Noto Sans, Inter, and IBM Plex Sans carry the full Lithuanian set. The make-or-break glyphs are the ogonek vowels (ą ę į ų) and the macron ū. Check they render as a hook/bar rather than being dropped, and that dotted ė keeps its dot alongside the caron letters č š ž.",
      "commonMistake": "Choosing a font that silently drops the ogonek, so ą/ę/į/ų collapse to a/e/i/u. This both erases grammatical case endings and produces words that read as misspellings across the entire screenshot.",
      "guideUrl": "/localize/app-store-screenshots-to-lithuanian/"
    },
    {
      "code": "fa",
      "appStoreCode": "fa",
      "name": "Persian (Farsi)",
      "nativeName": "فارسی",
      "flag": "🇮🇷",
      "expansionPct": 25,
      "widthPct": 30,
      "rtl": true,
      "script": "arabic",
      "overflowRisk": "high",
      "fontNotes": "Vazirmatn (widely used open Persian font), IRANSans, or Noto Sans Arabic. All include the Persian letters پ چ ژ گ and the correct ک/ی forms; avoid Arabic-only faces that box out those glyphs or force the Arabic ك/ي shapes.",
      "commonMistake": "Using an Arabic-only font (or Arabic digits and letterforms): پ چ ژ گ turn into tofu boxes and the Arabic ك/ي replace the Persian ک/ی, which Persian readers instantly read as foreign and careless.",
      "guideUrl": "/localize/app-store-screenshots-to-persian/"
    },
    {
      "code": "sr",
      "appStoreCode": "sr",
      "name": "Serbian",
      "nativeName": "Српски",
      "flag": "🇷🇸",
      "expansionPct": 25,
      "widthPct": 25,
      "rtl": false,
      "script": "cyrillic",
      "overflowRisk": "high",
      "fontNotes": "Noto Sans covers both Serbian scripts and its `locl` Serbian variants; PT Sans and Inter also work. If setting Cyrillic, tag `lang=sr` so the italic б, г, д, п, т take Serbian shapes instead of Russian; if setting Latin, confirm đ, ć, č, š and ž all render.",
      "commonMistake": "Setting Serbian Cyrillic in a Russian-tuned font: the upright letters look fine, but italics render б/г/д/п/т in Russian cursive shapes instead of the Serbian forms, which native readers immediately clock as the wrong Cyrillic.",
      "guideUrl": "/localize/app-store-screenshots-to-serbian/"
    },
    {
      "code": "sk",
      "appStoreCode": "sk",
      "name": "Slovak",
      "nativeName": "Slovenčina",
      "flag": "🇸🇰",
      "expansionPct": 25,
      "widthPct": 25,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Noto Sans, Inter, Roboto and IBM Plex Sans cover Slovak, but many fonts include the Czech carons yet miss the Slovak-specific ĺ and ŕ. Verify ľ (raised-tick caron), ĺ, ŕ, ô and ä all render before shipping.",
      "commonMistake": "Reusing a Czech listing or a Czech-only glyph set for Slovakia. Slovak needs ľ/ĺ/ŕ/ô/ä that Czech lacks and never uses ř, so Czech copy shipped to Slovak users reads as the wrong language and draws complaints.",
      "guideUrl": "/localize/app-store-screenshots-to-slovak/"
    },
    {
      "code": "sl",
      "appStoreCode": "sl",
      "name": "Slovenian",
      "nativeName": "Slovenščina",
      "flag": "🇸🇮",
      "expansionPct": 25,
      "widthPct": 25,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Inter, Noto Sans, Roboto and Source Sans 3 all cover Slovenian's minimal set: č, š, ž (caron). The concern is the opposite of its neighbors: keep the caron crisp at small sizes and make sure no Croatian ć or đ leaks in, since those are not Slovenian letters.",
      "commonMistake": "Machine-translating without a native pass so the dual (dvojina) collapses into the plural. Phrases about 'two' of anything come out as generic plurals, which every Slovenian speaker notices instantly and reads as obviously auto-translated.",
      "guideUrl": "/localize/app-store-screenshots-to-slovenian/"
    },
    {
      "code": "es",
      "appStoreCode": "es-ES / es-MX",
      "name": "Spanish",
      "nativeName": "Español",
      "flag": "🇪🇸",
      "expansionPct": 25,
      "widthPct": 25,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Montserrat (drawn by Argentine designer Julieta Ulanovsky, excellent Spanish coverage), Inter, or SF Pro. Confirm the font includes ñ, the inverted marks ¿ ¡, and ü (diéresis) for words like 'pingüino'. Decorative display fonts frequently drop the inverted punctuation.",
      "commonMistake": "Shipping one 'Spanish' listing, usually translated for Spain, and expecting Latin America to accept it. LatAm users read Spain's 'vosotros', 'ordenador' and 'móvil' as foreign, and in Argentina and Uruguay the 'tú' forms also clash with local 'voseo' (vos).",
      "guideUrl": "/localize/app-store-screenshots-to-spanish/"
    },
    {
      "code": "sv",
      "appStoreCode": "sv",
      "name": "Swedish",
      "nativeName": "Svenska",
      "flag": "🇸🇪",
      "expansionPct": 25,
      "widthPct": 25,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "high",
      "fontNotes": "Inter, Roboto and Source Sans 3 all cover å, ä, ö. Coverage isn't the issue. The concern is the ring on 'å' and the dots on 'ä/ö' staying visible above tight cap-height headlines; pick a font whose diacritics don't clip, and never fake 'å' as an 'a' plus a degree sign.",
      "commonMistake": "Replacing å, ä, ö with plain a/o to dodge an encoding or font gap. 'Årsavgift' (annual fee) becoming 'Arsavgift', or 'skärm' becoming 'skarm', reads as broken to every Swede and instantly marks the listing as careless and non-native.",
      "guideUrl": "/localize/app-store-screenshots-to-swedish/"
    },
    {
      "code": "bg",
      "appStoreCode": "bg",
      "name": "Bulgarian",
      "nativeName": "Български",
      "flag": "🇧🇬",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "cyrillic",
      "overflowRisk": "medium",
      "fontNotes": "Noto Sans ships Bulgarian localized Cyrillic forms via the `locl` feature, but only when the text is tagged `lang=bg`. Most design tools default to Russian-style glyphs otherwise. Confirm ж, к, т and ш take their Bulgarian shapes and that ъ is present.",
      "commonMistake": "Rendering Bulgarian in default Russian-style Cyrillic because the design tool never applied the `lang=bg` tag. The letters are technically correct but the shapes are Russian, and Bulgarian readers immediately perceive it as 'not really Bulgarian'.",
      "guideUrl": "/localize/app-store-screenshots-to-bulgarian/"
    },
    {
      "code": "ca",
      "appStoreCode": "ca",
      "name": "Catalan",
      "nativeName": "Català",
      "flag": "🇪🇸",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Inter, Noto Sans, or Source Sans 3. The make-or-break glyph is the ela geminada 'l·l' (an interpunct/middle dot, U+00B7, between two L's, as in 'intel·ligent'); also confirm ç and both grave (è, ò) and acute (é, ó) accents render.",
      "commonMistake": "Writing the ela geminada as plain 'll' or as 'l.l' with a full stop instead of the proper interpunct 'l·l' (U+00B7). 'Intel·ligent' becomes 'intelligent' or 'intel.ligent' (a visible spelling error to any Catalan reader), and treating Catalan as a Spanish dialect compounds it.",
      "guideUrl": "/localize/app-store-screenshots-to-catalan/"
    },
    {
      "code": "da",
      "appStoreCode": "da",
      "name": "Danish",
      "nativeName": "Dansk",
      "flag": "🇩🇰",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Inter, Roboto and Source Sans 3 all include æ, ø, å. Verify the 'æ' is a true single ligature glyph (not a cramped a+e), and that 'ø' keeps a visible slash at small sizes. A slash that fades makes 'øl' (beer) read as 'ol' and signals a broken font.",
      "commonMistake": "Buying one 'Scandinavian' translation and reusing it for both Denmark and Norway because the text looks so similar. Danes instantly catch Norwegian spellings ('melk' instead of 'mælk' (milk), 'løk' instead of 'løg' (onion), 'øye' instead of 'øje' (eye)), and the Norwegian-flavored listing reads as lazy, costing exactly the trust localization was meant to build.",
      "guideUrl": "/localize/app-store-screenshots-to-danish/"
    },
    {
      "code": "nl",
      "appStoreCode": "nl-NL",
      "name": "Dutch",
      "nativeName": "Nederlands",
      "flag": "🇳🇱",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Inter, Source Sans 3 and Open Sans cover Dutch cleanly. The real concern is the trema (ë, ï, ö, ü) in words like 'financiën' and the é in loanwords, not a special script. Also check the 'ij' pair kerns evenly, since some fonts leave a gap that makes it read as two separate letters.",
      "commonMistake": "Defaulting to formal 'u' everywhere because it feels 'safe'. For most Dutch consumer and even SaaS apps it lands as stiff and impersonal. Dutch marketing overwhelmingly uses 'je/jij', so the mismatch makes copy feel machine-translated rather than written for the reader.",
      "guideUrl": "/localize/app-store-screenshots-to-dutch/"
    },
    {
      "code": "fr",
      "appStoreCode": "fr-FR",
      "name": "French",
      "nativeName": "Français",
      "flag": "🇫🇷",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Marianne (the official French State typeface), Spectral, or Inter. Confirm coverage of the œ/Œ ligature (as in 'cœur'), the ç cedilla, accented capitals (É, À, Ç) and the guillemets « ». Many fonts ship « » but lack the precomposed accented uppercase glyphs.",
      "commonMistake": "Using 'tu' in professional or B2B app copy. To French business users it signals 'we machine-translated and didn't actually localize', undermining credibility more than leaving the copy in English would.",
      "guideUrl": "/localize/app-store-screenshots-to-french/"
    },
    {
      "code": "el",
      "appStoreCode": "el",
      "name": "Greek",
      "nativeName": "Ελληνικά",
      "flag": "🇬🇷",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "greek",
      "overflowRisk": "medium",
      "fontNotes": "For modern Greek, Noto Sans Greek, Roboto, and Inter all cover the monotonic set (tonos + dieresis, including the combined ΐ ΰ); check that η ν ρ aren't just re-skinned Latin look-alikes. If you set classical/polytonic text you need a polytonic-capable face like GFS Didot or Noto Serif Greek instead.",
      "commonMistake": "Setting a stylish all-caps headline with the accents left in ('ΚΑΤΈΒΑΣΕ ΤΏΡΑ' instead of 'ΚΑΤΕΒΑΣΕ ΤΩΡΑ'). Greek orthography drops the tonos in all-caps text, so keeping it marks the copy as auto-generated or set by someone who doesn't read Greek.",
      "guideUrl": "/localize/app-store-screenshots-to-greek/"
    },
    {
      "code": "it",
      "appStoreCode": "it",
      "name": "Italian",
      "nativeName": "Italiano",
      "flag": "🇮🇹",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Inter, Lora, or Libre Franklin. Italian needs both grave (à è ì ò ù) and acute (é, occasionally ó) accents. Check the font clearly distinguishes è from é, since 'caffè' (grave) and 'perché' (acute) are both everyday words.",
      "commonMistake": "Carrying over the hyper-casual, exclamation-heavy tone of US app marketing. Italian consumers expect more composed, credible copy in a store listing, so a string of 'Fantastico!' 'Incredibile!' reads as cheap rather than exciting.",
      "guideUrl": "/localize/app-store-screenshots-to-italian/"
    },
    {
      "code": "lv",
      "appStoreCode": "lv",
      "name": "Latvian",
      "nativeName": "Latviešu",
      "flag": "🇱🇻",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Noto Sans, Inter, and IBM Plex Sans cover standard Latvian. The make-or-break glyphs are the comma-below consonants ģ ķ ļ ņ (a comma, never a cedilla-hook, with lowercase ģ's comma sitting above the letter) and the long vowels ā ē ī ū. Note standard Latvian has no ō, so don't pad the alphabet with it.",
      "commonMistake": "Dropping macrons so ā ē ī ū fall back to a e i u. Because length is phonemic, 'kāzas' (wedding) becomes 'kazas' (goats), and a headline can flip meaning entirely rather than just look careless.",
      "guideUrl": "/localize/app-store-screenshots-to-latvian/"
    },
    {
      "code": "no",
      "appStoreCode": "no",
      "name": "Norwegian",
      "nativeName": "Norsk",
      "flag": "🇳🇴",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Inter, Roboto and Source Sans 3 cover æ, ø, å well. The must-check glyph is 'ø' (o with a slash): some fonts omit it or draw the stroke so thin it vanishes at small sizes and reads as a plain 'o' (which changes words), and the ring on 'å' must stay crisp too.",
      "commonMistake": "Shipping the generic 'no' locale in Xcode instead of 'nb' (Bokmål). iOS doesn't resolve 'no' consistently across versions, so your carefully translated strings can silently fall back to the English base localization on some devices.",
      "guideUrl": "/localize/app-store-screenshots-to-norwegian/"
    },
    {
      "code": "ro",
      "appStoreCode": "ro",
      "name": "Romanian",
      "nativeName": "Română",
      "flag": "🇷🇴",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Noto Sans, IBM Plex Sans, or Inter. All render the comma-below ș/ț correctly. Avoid older system fonts (Arial, Tahoma) that substitute the Turkish cedilla ş/ţ, and confirm the breve on ă and the circumflex on â/î are present.",
      "commonMistake": "Using the cedilla forms ş/ţ (U+015F/U+0163) instead of the correct comma-below ș/ț (U+0219/U+021B). They look almost identical at a glance but are wrong Romanian typography, and older fonts silently substitute the cedilla, so the error ships without designers noticing.",
      "guideUrl": "/localize/app-store-screenshots-to-romanian/"
    },
    {
      "code": "tr",
      "appStoreCode": "tr",
      "name": "Turkish",
      "nativeName": "Türkçe",
      "flag": "🇹🇷",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Inter, Roboto, and Noto Sans all carry the full Turkish set (ğ ı İ ş ö ü ç), so glyph coverage is rarely the problem. The real risk is locale-aware casing: uppercase headlines with the 'tr' locale so 'i'→'İ' and 'ı'→'I' render correctly instead of the English 'i'→'I'.",
      "commonMistake": "Uppercasing a headline with a default (English) locale so the dotted i is lost: 'İletişim'/'giriş' become 'ILETISIM'/'GIRIS'. Turkish readers parse the missing dot as a spelling error, and the whole screenshot looks machine-made.",
      "guideUrl": "/localize/app-store-screenshots-to-turkish/"
    },
    {
      "code": "uk",
      "appStoreCode": "uk",
      "name": "Ukrainian",
      "nativeName": "Українська",
      "flag": "🇺🇦",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "cyrillic",
      "overflowRisk": "medium",
      "fontNotes": "Noto Sans, Inter, PT Sans and IBM Plex Sans cover Ukrainian. Confirm the font carries і, ї, є and especially ґ (the g-with-upturn that Russian-focused fonts often omit) and renders the apostrophe cleanly. A Russian-only Cyrillic subset is the failure case.",
      "commonMistake": "Choosing a 'Cyrillic' font that only carries the Russian subset. Ґ and sometimes ї fall back to a different font or a tofu box, and the apostrophe in words like «п'ять» gets dropped, both of which read as broken Ukrainian to native users.",
      "guideUrl": "/localize/app-store-screenshots-to-ukrainian/"
    },
    {
      "code": "ur",
      "appStoreCode": "ur",
      "name": "Urdu",
      "nativeName": "اردو",
      "flag": "🇵🇰",
      "expansionPct": 20,
      "widthPct": 30,
      "rtl": true,
      "script": "arabic",
      "overflowRisk": "high",
      "fontNotes": "Noto Nastaliq Urdu (strongly preferred: true sloping Nastaliq with proper mark stacking), or as fallbacks Jameel Noori Nastaleeq / Noto Sans Arabic; a plain Naskh Arabic font renders Urdu upright and flat, which reads as amateur.",
      "commonMistake": "Setting Urdu in a standard Arabic Naskh font: it renders and is readable, but the upright, non-cascading letters look wrong to Urdu speakers and signal a careless, auto-translated listing.",
      "guideUrl": "/localize/app-store-screenshots-to-urdu/"
    },
    {
      "code": "vi",
      "appStoreCode": "vi",
      "name": "Vietnamese",
      "nativeName": "Tiếng Việt",
      "flag": "🇻🇳",
      "expansionPct": 20,
      "widthPct": 20,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Be Vietnam Pro (designed for Vietnamese), Noto Sans, and recent Inter. All cover ơ, ư, đ plus stacked tone marks (ậ, ệ, ợ). Verify the tone mark sits crisply over the horn vowels and doesn't collide with the letter above; older webfonts often mis-position it or fall back mid-word.",
      "commonMistake": "Using a font that covers base Latin accents but drops Vietnamese-specific marks: the horn vowels ơ/ư, the đ, or stacked tone marks. Tones are phonemic: ma, má, mà, mả, mã, and mạ are six different words, so a missing mark doesn't just look wrong, it changes the meaning.",
      "guideUrl": "/localize/app-store-screenshots-to-vietnamese/"
    },
    {
      "code": "id",
      "appStoreCode": "id",
      "name": "Indonesian",
      "nativeName": "Bahasa Indonesia",
      "flag": "🇮🇩",
      "expansionPct": 15,
      "widthPct": 15,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Indonesian uses unaccented Latin (the only occasional mark is é in a few names/loanwords), so glyph coverage is a non-issue; choose Plus Jakarta Sans (an Indonesian-designed family), Inter, or Poppins for a clean, high-x-height look that stays legible for long affixed words at small screenshot sizes.",
      "commonMistake": "Shipping a single listing for both Indonesian (id) and Malay (ms). They diverge on everyday words (\"bisa\" (can, id) vs \"boleh\" (ms), \"kantor\" (office, from Dutch, id) vs \"pejabat\" (ms)), and Malaysian users read Indonesian as visibly foreign, killing the trust signal you were trying to build.",
      "guideUrl": "/localize/app-store-screenshots-to-indonesian/"
    },
    {
      "code": "ms",
      "appStoreCode": "ms",
      "name": "Malay",
      "nativeName": "Bahasa Melayu",
      "flag": "🇲🇾",
      "expansionPct": 15,
      "widthPct": 15,
      "rtl": false,
      "script": "latin",
      "overflowRisk": "medium",
      "fontNotes": "Standard Rumi (Latin) Malay uses plain ASCII with no special diacritics, so Inter, Roboto, Noto Sans or SF Pro all render it perfectly; the real trap is Jawi (Arabic-based Malay used in Brunei and cultural contexts), which needs a Jawi-capable Arabic font covering the extra letters ڠ ڽ ڤ ݢ چ, not a Latin face.",
      "commonMistake": "Auto-converting an Indonesian listing to Malay with find-and-replace: cognates survive but words like gratis→percuma, ponsel→telefon and unggah→muat naik do not, so the copy reads as Indonesian-with-typos to Malaysian users.",
      "guideUrl": "/localize/app-store-screenshots-to-malay/"
    },
    {
      "code": "ru",
      "appStoreCode": "ru",
      "name": "Russian",
      "nativeName": "Русский",
      "flag": "🇷🇺",
      "expansionPct": 15,
      "widthPct": 15,
      "rtl": false,
      "script": "cyrillic",
      "overflowRisk": "medium",
      "fontNotes": "PT Sans / PT Serif (ParaType, purpose-built for Cyrillic), Roboto, Noto Sans and IBM Plex Sans all ship true Cyrillic italics. Verify the italic forms of г, д, и, п, т are cursive rather than slanted-Latin shapes, and that ё and й keep their diacritics.",
      "commonMistake": "Choosing a trendy Latin display font and letting it fake-slant Cyrillic for italics. Г, д, и and т come out as tilted upright letters instead of their true cursive forms, which native readers instantly read as a foreign font that was never really localized.",
      "guideUrl": "/localize/app-store-screenshots-to-russian/"
    },
    {
      "code": "hi",
      "appStoreCode": "hi",
      "name": "Hindi",
      "nativeName": "हिन्दी",
      "flag": "🇮🇳",
      "expansionPct": 10,
      "widthPct": 15,
      "rtl": false,
      "script": "devanagari",
      "overflowRisk": "medium",
      "fontNotes": "Noto Sans Devanagari, Mukta, or Hind (Indian Type Foundry). All shape the shirorekha headstroke, matras and conjunct ligatures correctly; avoid generic system fonts, whose Devanagari support varies wildly across India's many Android OEMs and can split conjuncts.",
      "commonMistake": "Choosing a font with no or broken Devanagari conjunct support: on user devices text renders as tofu boxes or splits ligatures like क्ष into broken half-letters, even though it looked perfect in your macOS design tool.",
      "guideUrl": "/localize/app-store-screenshots-to-hindi/"
    },
    {
      "code": "he",
      "appStoreCode": "he",
      "name": "Hebrew",
      "nativeName": "עברית",
      "flag": "🇮🇱",
      "expansionPct": 0,
      "widthPct": 5,
      "rtl": true,
      "script": "hebrew",
      "overflowRisk": "high",
      "fontNotes": "Noto Sans Hebrew, SF Hebrew (iOS system) or Heebo (a widely used Hebrew-first Google font). All cover the five final letterforms plus geresh/gershayim punctuation; avoid niqqud-heavy display faces unless you deliberately need vowel points.",
      "commonMistake": "Treating RTL as a text-direction toggle. Flipping the string but leaving arrows, the icon column and the CTA on the LTR side. Israeli reviewers spot this immediately, and it undercuts the premium quality signal the market expects.",
      "guideUrl": "/localize/app-store-screenshots-to-hebrew/"
    },
    {
      "code": "th",
      "appStoreCode": "th",
      "name": "Thai",
      "nativeName": "ไทย",
      "flag": "🇹🇭",
      "expansionPct": -5,
      "widthPct": 0,
      "rtl": false,
      "script": "thai",
      "overflowRisk": "low",
      "fontNotes": "Noto Sans Thai, IBM Plex Sans Thai, and Sarabun (a Thai government-standard looped face). Pick by loop style. Looped fonts carry the traditional head-loops and stack tone marks cleanly, while loopless display faces like Kanit look modern but need generous line-height so upper vowels and tone marks don't clip.",
      "commonMistake": "Letting your design tool wrap Thai on character boundaries, which cuts words in half, and leaving line-height at Latin defaults, which clips the stacked tone marks (่ ้ ๊ ๋) sitting above tall vowels. Both make otherwise-correct Thai look broken.",
      "guideUrl": "/localize/app-store-screenshots-to-thai/"
    },
    {
      "code": "ko",
      "appStoreCode": "ko",
      "name": "Korean",
      "nativeName": "한국어",
      "flag": "🇰🇷",
      "expansionPct": -40,
      "widthPct": 5,
      "rtl": false,
      "script": "cjk",
      "overflowRisk": "low",
      "fontNotes": "Pretendard, Noto Sans KR, Apple SD Gothic Neo (iOS system). Pick a Korean-first family so the jamo proportions and the batchim (bottom consonant) sit correctly; a pan-CJK fallback renders Hangul but with subtly off vertical metrics and stroke terminals.",
      "commonMistake": "Using a Chinese or Japanese font (or a generic pan-CJK fallback) for Korean. Hangul still renders, but the jamo proportions and stroke endings look subtly off to native readers. Always specify a Korean-first family like Pretendard or Apple SD Gothic Neo.",
      "guideUrl": "/localize/app-store-screenshots-to-korean/"
    },
    {
      "code": "ja",
      "appStoreCode": "ja",
      "name": "Japanese",
      "nativeName": "日本語",
      "flag": "🇯🇵",
      "expansionPct": -45,
      "widthPct": 5,
      "rtl": false,
      "script": "cjk",
      "overflowRisk": "low",
      "fontNotes": "Noto Sans JP, Hiragino Sans (iOS system), Yu Gothic. Use the JP-specific build so shared Han characters (骨, 直, 今) take Japanese glyph shapes rather than Chinese; avoid Mincho (serif) for UI unless you deliberately want an editorial tone.",
      "commonMistake": "Leaving English UI screenshots with only the headline translated. Japanese users read the screenshot as a whole. If the buttons still say \"Get Started\" while the headline is Japanese, they assume the app is not actually localized and uninstall.",
      "guideUrl": "/localize/app-store-screenshots-to-japanese/"
    },
    {
      "code": "zh-Hans",
      "appStoreCode": "zh-Hans",
      "name": "Chinese (Simplified)",
      "nativeName": "简体中文",
      "flag": "🇨🇳",
      "expansionPct": -50,
      "widthPct": 0,
      "rtl": false,
      "script": "cjk",
      "overflowRisk": "low",
      "fontNotes": "Noto Sans SC, PingFang SC (iOS system), Source Han Sans SC. All carry mainland simplified glyph forms; a Japanese or Traditional Han font renders shared characters (骨, 直, 今) with subtly wrong strokes and lacks or mismaps the simplified forms.",
      "commonMistake": "Submitting Traditional Chinese screenshots to mainland China, or vice versa. Users leave 1-star reviews and you won't understand why. The character sets and vocabulary are different, not just fancier versions of each other.",
      "guideUrl": "/localize/app-store-screenshots-to-simplified-chinese/"
    },
    {
      "code": "zh-Hant",
      "appStoreCode": "zh-Hant (iOS) / zh-TW (Google Play)",
      "name": "Chinese (Traditional)",
      "nativeName": "繁體中文",
      "flag": "🇹🇼",
      "expansionPct": -50,
      "widthPct": 0,
      "rtl": false,
      "script": "cjk",
      "overflowRisk": "low",
      "fontNotes": "Noto Sans TC (Taiwan MOE forms) or Noto Sans HK (Hong Kong HKSCS forms), plus PingFang TC on iOS. The TW and HK builds differ on characters like 骨, 內, 直; never reuse a Simplified font, which lacks or wrongly maps traditional characters.",
      "commonMistake": "Running a Simplified-to-Traditional character conversion and calling it done. The vocabulary and phrasing differ (软件 mechanically becomes 軟件, but Taiwan actually says 軟體), so the result reads as mainland text in traditional clothing.",
      "guideUrl": "/localize/app-store-screenshots-to-traditional-chinese/"
    }
  ]
}