LoreStringTurkish game localization
CheckerFree 500 words
LoreString

Localization that doesn't break your build.

Your engine never changes. Keys stay anchored, placeholders stay intact. Only the language table swaps.

Ships toSteam·iOS·Android·macOS·Windows·itch.io

ENGLISH
Watch it happen

The keys never move. Only the text does.

locale_table.jsonTR → EN · 0%
BTN_CLOSEKAPATCLOSE
CAT_RACEYARIŞRACING
COND_GOODİyi (70%+)Good (70%+)
EK_0_METRE{0} Metre{0} Metres
EK_AD_BULTENEYarış bültene eklendi: {0}Race added to the bulletin: {0}
EK_AD_HAFTA_AYARHafta {0} olarak ayarlandı!Week set to {0}.
MSG_BITIS_CIZGISINEBitiş çizgisine 200 metre!200 metres to the line!
1,903 keys353 with placeholders0 engine changes
This is what your game looks like to them.
quest_log
— and this is what it could look like.
The gap

They are already playing. And they are complaining.

Make your game speak.
Don't Starve Together
0
reviews written in Turkish
✕ no Turkish support
Terraria
0
reviews written in Turkish
✕ no Turkish support
Hollow Knight
0
reviews written in Turkish
✕ no Turkish support

"Great 2D platformer, the story is legendary — the only bad part is there's no Turkish language support."

— Steam review · Hollow Knight
original: "kardeşim 2d güzel bir platform oyunu hikayesi de efsane sadece türkçe dil desteği yok bir o kötü" · translated by LoreString

Translation is easy.
Not breaking the game is the hard part.

The four traps

What actually breaks a localized build.

01

Keys stay anchored

Every key is pinned once and never regenerated. UI_NO_HORSE_IN_STABLE stays exactly that, forever. Without it, one re-export shifts the whole table and every translation lands on the wrong line.

02

Placeholders are verified

Every {0} and {1} is counted before and after — count and order both. A line that comes back short is rejected automatically, not discovered by a player.

03

Data is never translated

Some strings aren't text — they're values your code compares and saves. Translate r.surface === 'Grass' and the game breaks silently. These are separated and translated only at display time.

04

Names are generated, not translated

Horses, jockeys, towns, guilds. A translated name pool reads like a machine wrote it. We build a native pool per language so generated content sounds like it belongs there.

Mobile

Mobile breaks differently. We know how.

Same job, harder traps. A string table is a string table — but on phones a wrong specifier doesn't look odd, it terminates the app.

Format specifiers

Android writes %1$s, iOS writes %@. Translate one into the other and the app doesn't render wrong — it crashes. Every specifier is counted and typed before and after.

Plurals

Android <plurals> and iOS stringsdict carry one entry per quantity rule. Turkish does not split them the way English does. Flatten them and the count silently disappears from the sentence.

Overflow

Turkish runs roughly 20–30% longer than English. On a 360 dp button that is the difference between a label and a clipped word. Length is measured per string against the widget it lives in.

strings.xml · .xcstrings · .strings · .stringsdict · JSON · CSV · PO — store listings too: title, description, keywords.
What actually breaks

A missing brace is a crash, not a typo.

Every line is counted before and after translation — placeholder count and order both. One of these ships. The other never leaves the pipeline.

✓ PASSED — 1 placeholder in, 1 out
EK_AD_BULTENE
Yarış bültene eklendi: {0}
Race added to the bulletin: {0}
Order preserved, count matched. Goes into the build.
✕ REJECTED — placeholder lost
EK_AD_HAFTA_AYAR
Hafta {0} olarak ayarlandı!
Week set.
The number vanished. A player would read "Week set." forever and never learn which week. Caught automatically — it never reaches your build.
How it works

Three steps. Your engine is never touched.

The first language takes the longest, because the catalogue is built once. Every language after that costs translation time plus minutes.

Extract

Your build is scanned, every visible string catalogued and given a permanent key. Data values are separated out. The catalogue comes back for you to review.

Translate

Native translation with a locked glossary, placeholder checks and UI-length control, so nothing overflows a button built for English.

Merge & verify

The table is merged back in your format, then verified line by line. You get a build that runs identically — in another language.

Pricing

One rate. No minimum you can't afford.

Agencies charge $0.10–$0.18 per word for Turkish — and bill the engineering as a separate line, $5,000 to $20,000 when a game wasn't built to hold translations. The work is the same. The pipeline is why the price isn't.

agency rate
$0.18
per word · delivered in your format
  • JSON, CSV, PO, XLSX, .strings — your call
  • Locked glossary and consistent terminology
  • Placeholder and UI-length verification included
  • Credit in your game's credits, if you want it
  • Patch and DLC updates per job or monthly
+ Setup — once per build
$500
Keys anchored for life, placeholders mapped and verified, data values separated from text, your engine untouched. This is the line agencies call localization engineering. They do it by hand. We built the pipeline once — so you pay once, and not five thousand.
Up to 5,000 keys. Larger builds quoted.

Turkish game, no English?

That direction is the easier one and we have shipped it: a full Turkish game taken to English before it reached Steam — 1,903 keys, 353 of them with placeholders, zero engine changes. If your game speaks Turkish but not English, the whole world is a closed door, and it is one file away from opening.

Talk about it
UI_NO_HORSE_IN_STABLE = "No horse in the stable."
UI_HORSE_READY = "{0} is ready to race."
The key never moves. The placeholder never moves. Only the value swaps.

Send 500 words. Judge for yourself.

Pick your messiest 500 words — or 5% of your build, whichever is smaller. They come back as a side-by-side report: every line, every key, every placeholder verified. You judge the quality. The build-ready file comes with the order.

hello@lorestring.com
Or check your own file first → Free, no sign-up, nothing leaves your browser.