feat(i18n): add Turkish interface and tray localization (#8208)

* feat(i18n): add Turkish interface and tray localization

* fix(i18n): preserve technical literals in Turkish help

* fix(i18n): treat Turkish as a community translation

Turkish falls back to English for strings it does not have yet, so new
English strings no longer fail CI or the build until someone translates
them:

- Drop the full-catalog parity check and the Pi coverage checks for tr;
  keep the non-empty and interpolation checks for existing strings
- Build the Turkish tray texts from English and override the translated
  ones, so new tray items no longer need a Turkish entry to compile
- Show usage script errors in English for Turkish instead of Chinese
- Label the option as a community translation, next to the other
  languages, using the native name like the existing options
- Restore technical literals that were translated (config.toml, AKSK,
  env placeholders, # SOUL.md, skills.sh, my-provider) and lock them in
  the literal regression test
- Format usage dates with tr-TR
- Document in CONTRIBUTING that Turkish strings are optional, and list
  Turkish as a community translation in the READMEs

---------

Co-authored-by: Jason <farion1231@gmail.com>
This commit is contained in:
alkankandJason authored and GitHub committed 2026-10-14 12:22:41 +08:00
1 parent 74b98ca940
commit c21106ff20
24 files changed
+4996 -15

No files matched your search

+11
View File
@@ -58,6 +58,17 @@ describe("useSettingsForm Hook", () => {
expect(changeLanguageSpy).toHaveBeenCalledWith("en");
});
it("preserves Turkish from server settings", async () => {
useSettingsQueryMock.mockReturnValue({
data: { language: "tr" },
isLoading: false,
});
const { result } = renderHook(() => useSettingsForm());
await waitFor(() => expect(result.current.settings?.language).toBe("tr"));
expect(result.current.initialLanguage).toBe("tr");
expect(changeLanguageSpy).toHaveBeenCalledWith("tr");
});
it("should support japanese language preference from server data", async () => {
useSettingsQueryMock.mockReturnValue({
data: {