Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/renderer/src/assets/fonts/LICENSE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ the SIL Open Font License, Version 1.1, whose full text follows the attributions
below. The OFL requires this notice to travel with every copy of the software.

press-start-2p-latin-400.woff2
Press Start 2P (latin subset, weight 400)
Press Start 2P (latin subset plus the Turkish letters I-dot, G-breve and
S-cedilla, weight 400)
Copyright (c) 2012, Cody "CodeMan38" Boisclair (cody@zone38.net)
https://fonts.google.com/specimen/Press+Start+2P

Expand Down
Binary file modified src/renderer/src/assets/fonts/press-start-2p-latin-400.woff2
Binary file not shown.
7 changes: 7 additions & 0 deletions src/renderer/src/design/fonts.css
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@
* when every OS we ship on already has a good one. The token stacks in
* tokens.css name those system faces instead.
*
* Press Start 2P's latin subset also carries İ Ğ ğ Ş ş (U+0130, U+011E-011F,
* U+015E-015F), cut from the same upstream OFL file. Without them the Turkish
* locale's pixel headings fell back glyph by glyph to a CJK system face, so
* "DİL" read "D:L" and "Bağlantılar" read "Ba;lantılar". Ç ç Ö ö Ü ü ı were
* already in the latin subset. Inter and JetBrains Mono fall back to the system
* sans/mono for those five letters, which looks the same at body sizes.
*
* Vite fingerprints and inlines these URLs at build time, so the paths below are
* source paths, not runtime ones. */

Expand Down
9 changes: 6 additions & 3 deletions src/renderer/src/i18n/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { DEFAULT_GOD_NAME } from '@shared/godIdentity';
import en from './locales/en.json';
import zhCN from './locales/zh-CN.json';
import ar from './locales/ar.json';
import tr from './locales/tr.json';

/**
* The languages the Settings picker offers, in display order.
Expand All @@ -35,7 +36,8 @@ import ar from './locales/ar.json';
export const LANGUAGES = [
{ code: 'en', label: 'English', dir: 'ltr' },
{ code: 'zh-CN', label: '简体中文', dir: 'ltr' },
{ code: 'ar', label: 'العربية', dir: 'rtl' }
{ code: 'ar', label: 'العربية', dir: 'rtl' },
{ code: 'tr', label: 'Türkçe', dir: 'ltr' }
] as const;

export type LanguageCode = (typeof LANGUAGES)[number]['code'];
Expand Down Expand Up @@ -110,11 +112,12 @@ void i18n
resources: {
en: { translation: en },
'zh-CN': { translation: zhCN },
ar: { translation: ar }
ar: { translation: ar },
tr: { translation: tr }
},
lng: detectLanguage(),
fallbackLng: 'en',
supportedLngs: ['en', 'zh-CN', 'ar'],
supportedLngs: ['en', 'zh-CN', 'ar', 'tr'],
// Resources are bundled inline, so nothing ever suspends — the string is
// there at init time. Keeping this false lets every component call
// useTranslation() without wrapping the tree in <Suspense>.
Expand Down
40 changes: 40 additions & 0 deletions src/renderer/src/i18n/locales/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -1405,5 +1405,45 @@
"viewSource": "عرض المصدر",
"loading": "جارٍ تحميل الصورة…",
"decodeFailed": "تعذّر فك ترميز هذه الصورة — قد يكون الملف تالفًا أو امتداده خاطئًا"
},
"demoFloor": {
"headingTo": {
"shelf": "يتجه إلى الرف",
"terminal": "يتجه إلى الطرفية",
"web": "يتجه إلى الويب",
"board": "يتجه إلى اللوحة",
"mailbox": "يتجه إلى صندوق البريد",
"mcp": "يتجه إلى MCP",
"desk": "يتجه إلى المكتب"
},
"headingBackToDesk": "يعود إلى المكتب",
"awaiting": "في الانتظار",
"doneWhatNext": "انتهيت من هذه. ما التالي؟",
"samples": {
"read": {
"what": "يقرأ SPEC.md",
"thought": "أفتح المواصفات لأتأكد من آلة الحالات قبل أن ألمس التنفيذ."
},
"edit": {
"what": "يحرر PixelPanel.tsx",
"thought": "أضبط حساب حدود اللوحة — الخط الداخلي كان منزاحًا بكسلًا واحدًا في الوضع المضمّن."
},
"bash": {
"what": "يشغّل الاختبارات",
"thought": "أشغّل مجموعة اختبارات الواجهة لأتأكد أن شيئًا لم يتراجع قبل أن أكمل."
},
"webFetch": {
"what": "يجلب الوثائق",
"thought": "أجلب وثيقة الخطافات لأتحقق من بنية حمولة PreToolUse — لا أتذكر أسماء الحقول جيدًا."
},
"glob": {
"what": "يبحث عن ملفات المهارات",
"thought": "أعدّد كل ملفات المهارات لأمرّ عليها واحدًا واحدًا بحثًا عن مسارات سكربتات قديمة."
},
"todoWrite": {
"what": "يحدّث لوحة المهام",
"thought": "أقسّم العمل المتبقي إلى أربع مهام منفصلة لأتابعها أثناء التقدم."
}
}
}
}
40 changes: 40 additions & 0 deletions src/renderer/src/i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1405,5 +1405,45 @@
"viewSource": "view source",
"loading": "loading image…",
"decodeFailed": "could not decode this image — the file may be corrupt or misnamed"
},
"demoFloor": {
"headingTo": {
"shelf": "heading to shelf",
"terminal": "heading to terminal",
"web": "heading to web",
"board": "heading to board",
"mailbox": "heading to mailbox",
"mcp": "heading to mcp",
"desk": "heading to desk"
},
"headingBackToDesk": "heading back to desk",
"awaiting": "awaiting",
"doneWhatNext": "Done with that one. What next?",
"samples": {
"read": {
"what": "reading SPEC.md",
"thought": "Pulling up the spec so I can confirm the state machine before touching the implementation."
},
"edit": {
"what": "editing PixelPanel.tsx",
"thought": "Tightening up the panel border math — the inner stroke was a pixel off in inset mode."
},
"bash": {
"what": "running tests",
"thought": "Running the renderer suite to make sure nothing regressed before I move on."
},
"webFetch": {
"what": "fetching docs",
"thought": "Grabbing the hooks doc to double-check the PreToolUse payload shape — my memory of the field names is hazy."
},
"glob": {
"what": "searching for skill files",
"thought": "Enumerating all the skill files so I can walk each one and look for stale script paths."
},
"todoWrite": {
"what": "updating the todo board",
"thought": "Splitting the remaining work into four discrete tasks so I can track them as I go."
}
}
}
}
Loading
Loading