Skip to content

Four languages: German, Turkish, Thai, Traditional Chinese - #821

Merged
Louis-CFM merged 6 commits into
mainfrom
feat/languages-de-tr-th-zh-hant
Oct 20, 2026
Merged

Louis-CFM merged 6 commits into
mainfrom
feat/languages-de-tr-th-zh-hant

Conversation

@Louis-CFM

@Louis-CFM Louis-CFM commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Four community translations in one branch, re-applied onto current main, one commit per language with its translator as co-author.

Language Platforms From By
German (de) Mac, Windows, Linux #701 @Ohualtex
Turkish (tr) Mac, Windows, Linux #700 @Ohualtex
Thai (th) Mac #790 @XBalanceZ
Traditional Chinese (zh-Hant) Mac #314 @shawn-t516

How the Mac catalog was merged. No PR's Localizable.xcstrings was taken as is (the older ones would drop newer keys such as whatsapp.* and update.*). A script went through main's keys and copied in each PR's localization for its new language only, everything else as on main, in Xcode's format: the diff is only added language entries.

Strings still in English (newer than the translation, they fall back to English):

  • German: 97 keys (68 whatsapp.* and 29 update.* strings)
  • Turkish: 97 (same)
  • Thai: 97 (same)
  • Traditional Chinese: 0. I translated the 30 strings main gained after Add Traditional Chinese localization to macOS #314 was written (update.*, step.needs-input) so the catalog stays complete.

The strings from #820 and #823 (claude-desktop.*, alerts.all-pills*, the plan card's "has a plan ready", "Change plan", "Auto mode", "Manual") are translated in all four new languages.

whatsapp.remove and step.needs-input are translated in de/tr/th because Windows shows "Remove" and "Needs input": without them the generator would drop those strings from strings.json for every language. Same for the two extra.json entries main added recently (the island clock): they got German and Turkish values.

Plumbing per language: the language picker in Settings, CFBundleLocalizations in Info.plist, InfoAppStore.plist and both targets in project.yml. Windows/Linux (German, Turkish): the language lists in gen-strings.mjs, i18n.ts and i18n.rs, the PRs' de/tr values added to current main's extra.json, strings.json regenerated, and both PRs' tests. Two of those tests were relaxed: the Apple-catalog check now accepts strings newer than a translation (at least 85% must be translated), and the registration check lets the Mac have languages Windows and Linux don't (Thai, Traditional Chinese).

Left out of #790: everything except the Thai strings. That's the YouTube pill and controller, the notch width sliders, the geometry and iPhone view changes, and the hand edits to project.pbxproj and Package.resolved. They have nothing to do with Thai, and the project file comes from xcodegen. #790 also didn't touch Info.plist or project.yml, so those lines are added here.

Kept from #314: String(localized:) around outfit names, PillCatalog category titles and subtitles (pill ids unchanged), and the DeepSeek/Qwen/Moonshot "key saved" messages. The catalog gets its new keys: those strings plus some the code already showed but the catalog lacked, like "Display", "API key" and "Open Claude". Each one is translated in all 14 languages. Where Windows already had a translation in extra.json, it is reused there (with #701/#700's German and Turkish) and taken out of extra.json, since the Mac catalog now has it. Brand names and URLs keep their English text. The script passes on this tree and now runs in the macOS Build workflow. Its CONTRIBUTING note is kept.

Checked locally: the catalog parses, python3 scripts/test-localization.py passes, npm test in windows/ passes (415 tests), gen-strings.mjs --check is clean, and the changed CoucouKit files typecheck with Swift 6.1 on Linux (with a stub for String(localized:)).

https://claude.ai/code/session_01LJm3SRL9k3gBPaVtfPhwcT


Generated by Claude Code

claude and others added 5 commits October 20, 2026 02:21
Ohualtex's German translation, re-applied onto current main:
- Localizable.xcstrings: the "de" localization of every main key #701
  translates, nothing else changed; the newer whatsapp.* and update.*
  strings stay in English for now (whatsapp.remove and step.needs-input
  are translated: Windows shows them).
- Deutsch in the language picker, CFBundleLocalizations of both Mac
  targets (Info.plist, InfoAppStore.plist, project.yml).
- Windows and Linux: "de" in the language lists (gen-strings, i18n.ts,
  i18n.rs), #701's German values for extra.json, strings.json regenerated,
  and #701's tests. The Apple-catalog checks now accept strings newer than
  a translation, and the registration check lets the Mac have languages
  Windows and Linux don't.

Co-Authored-By: Ohualtex <230626673+Ohualtex@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LJm3SRL9k3gBPaVtfPhwcT
Ohualtex's Turkish translation, re-applied onto current main the same way
as German:
- Localizable.xcstrings: the "tr" localization of every main key #700
  translates, nothing else changed; the newer whatsapp.* and update.*
  strings stay in English for now (whatsapp.remove and step.needs-input
  are translated: Windows shows them).
- Türkçe in the language picker, CFBundleLocalizations of both Mac
  targets.
- Windows and Linux: "tr" in the language lists, #700's Turkish values for
  extra.json, strings.json regenerated, and #700's tests (its registration
  check is the one the German commit already has).

Co-Authored-By: Ohualtex <230626673+Ohualtex@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LJm3SRL9k3gBPaVtfPhwcT
XBalanceZ's Thai translation: only the "th" localizations of
Localizable.xcstrings from #790, for the keys main has, plus what a new
Mac language needs: ไทย in the language picker and "th" in
CFBundleLocalizations (Info.plist, InfoAppStore.plist, project.yml).
The rest of #790 (YouTube pill and controller, notch width sliders,
geometry and iPhone changes, the hand-edited project.pbxproj and
Package.resolved) is not part of this. The newer whatsapp.* and update.*
strings stay in English for now.

Co-Authored-By: XBalanceZ <106819823+XBalanceZ@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LJm3SRL9k3gBPaVtfPhwcT
shawn-t516's Traditional Chinese translation:
- Localizable.xcstrings: the "zh-Hant" localization of every key, from
  #314 (plus the update.* and step.needs-input strings main gained since),
  and 繁體中文 in the language picker after 简体中文;
  CFBundleLocalizations of both Mac targets.
- #314's wrapping of hard-coded English in String(localized:): outfit
  names (MochiWardrobe), PillCatalog category titles and subtitles, and the
  DeepSeek, Qwen and Moonshot "key saved" messages. Pill ids are unchanged.
  The catalog gains #314's new keys (those, plus literals the code already
  shows that the catalog lacked, and the plan card's Change plan, Auto mode
  and Manual buttons), each translated in every language; the
  ones Windows already translates in extra.json reuse those translations
  (and #701/#700's German and Turkish) and leave extra.json, since the Mac
  catalog now has them. Brand names and URLs keep their English text.
- scripts/test-localization.py and its CONTRIBUTING note, now also run by
  the macOS Build workflow.

Co-Authored-By: shawn-t516 <180199675+shawn-t516@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LJm3SRL9k3gBPaVtfPhwcT
@Louis-CFM
Louis-CFM force-pushed the feat/languages-de-tr-th-zh-hant branch from 2c55dd1 to 2bb7608 Compare October 20, 2026 00:24
Localizable.xcstrings is main's with the de/tr/th/zh-Hant localizations
copied in again by the same script, plus German, Turkish, Thai and
Traditional Chinese for the strings #820 and #823 add (claude-desktop.*,
alerts.all-pills*, "has a plan ready"; "Change plan", "Auto mode" and
"Manual", now in main's catalog, keep main's entries plus the four new
languages). strings.json regenerated with gen-strings.mjs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LJm3SRL9k3gBPaVtfPhwcT
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.

2 participants