Skip to content

fix(i18n/tr): repair ten provider-guide titles, a dead domain, and 61 markdown artifacts - #101

Open
hakankaan wants to merge 2 commits into
LettuceAI:mainfrom
hakankaan:fix-turkish-locale
Open

hakankaan wants to merge 2 commits into
LettuceAI:mainfrom
hakankaan:fix-turkish-locale

Conversation

@hakankaan

Copy link
Copy Markdown

Disclosure: I work on ModelRunner (context: #98). This is unrelated to that PR — I found these while matching the Turkish register there, flagged them in #98, and @Husky110's note about the other languages prompted me to just fix them properly. Nothing here touches providers or app logic; it's tr.ts only. I read Turkish, so these are checked rather than machine-produced.

1. Ten provider-guide titles (8785886)

The Turkish titles lost their brand names and kept translation artifacts:

key before after
mistral "Nasıl " "Mistral API anahtarınızı nasıl bulursunuz"
qwen "_Şifrenizi nasıl bulabilirsiniz? " — your password "Qwen API anahtarınızı nasıl bulursunuz"
gemini "_Google'ınızı nasıl bulabilirsiniz? " — "Gemini" dropped "Google Gemini API anahtarınızı nasıl bulursunuz"
openrouter, nanogpt, featherless all three literally "_Nasıl bulunur? " brand-specific
openai, deepseek, zai, anannas stray leading _ / trailing space same pattern

All ten now follow the pattern the healthy entries already use — "<Brand> API anahtarınızı nasıl bulursunuz" — keeping brand names and API in English.

And one that actually breaks: featherless.s1 read "tüysüz.ai'yi ziyaret edin...". Featherless was translated as a word (tüy = feather), so Turkish users were being sent to tüysüz.ai, which does not exist. Now featherless.ai.

2. Sixty-one strings wrapped in markdown emphasis (28bf1e6)

tr.ts has 61 strings wrapped in underscores the English source doesn't have — "_Bilinmeyen_", "_Henüz ayarlanmadı_", "_Konuşma tercihlerini yönet_". They render literally. en.ts has zero.

Kept deliberately narrow: a string was only unwrapped if it had a matching leading and trailing underscore, no inner underscore, and an English counterpart with no emphasis. Split into its own commit since it's mechanical and reviews differently from the ten above.

Verified

  • npx tsc --noEmit — exit 0.
  • Loaded the built locale and asserted on it: 64 top-level keys, 0 remaining "_…_" strings, no tüysüz, featherless.ai present.
  • bun run check also runs cargo check; there's no Rust toolchain on this machine, so that half is left to CI. This change is TypeScript-only, so tsc is the relevant gate.

I didn't touch the capitalised domains (Platform.openai.com, Console.groq.com) — they're sentence-case artifacts too, but domains are case-insensitive so they work. Say the word and I'll fold those in, or leave them.

hakankaan and others added 2 commits September 11, 2026 14:58
…main

The Turkish provider guides lost their brand names and kept translation
artifacts: nine titles begin with a stray underscore and end in a trailing
space, mistral's is just "Nasıl ", and qwen's says "Şifrenizi" (your
password) rather than API key. gemini dropped "Gemini" entirely.

featherless.ai was also translated as a word: s1 sent Turkish users to
"tüysüz.ai", which does not exist.

All ten now follow the pattern the existing entries use — "<Brand> API
anahtarınızı nasıl bulursunuz" — keeping brand names and API in English.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
61 strings in tr.ts are wrapped in underscores that the English source does
not have — "_Bilinmeyen_", "_Henüz ayarlanmadı_" and so on. They are
translation artifacts, not emphasis, and render literally in the UI.

Only strings with a matching leading and trailing underscore, no inner
underscore, and an English counterpart carrying no emphasis were touched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant