fix(i18n): localize all user-facing Life OS text
This commit is contained in:
1 parent
4297f1ee42
commit
a95d3652ca
12 files changed
+1057
-110
No files matched your search
@@ -0,0 +1,478 @@
|
||||
{
|
||||
"app": {
|
||||
"today": "TODAY",
|
||||
"timeline": "TIMELINE",
|
||||
"museum": "MUSEUM",
|
||||
"insights": "INSIGHTS",
|
||||
"profile": "PROFILE",
|
||||
"tasks": "TASKS",
|
||||
"calendar": "CALENDAR",
|
||||
"system": "SYSTEM"
|
||||
},
|
||||
"common": {
|
||||
"save": "SAVE",
|
||||
"cancel": "CANCEL",
|
||||
"edit": "EDIT",
|
||||
"delete": "DELETE",
|
||||
"close": "Close",
|
||||
"open": "Open",
|
||||
"minimize": "Minimize",
|
||||
"maximize": "Maximize",
|
||||
"restore": "Restore window",
|
||||
"energy": "ENERGY",
|
||||
"days": "DAYS",
|
||||
"never": "NEVER"
|
||||
},
|
||||
"today": {
|
||||
"prompt": "How was your day?",
|
||||
"placeholder": "Write something about today...",
|
||||
"archive": "ARCHIVE TODAY",
|
||||
"update": "UPDATE MEMORY",
|
||||
"archiveDate": "SAVE MEMORY",
|
||||
"updateDate": "UPDATE MEMORY",
|
||||
"backToToday": "Back to today",
|
||||
"weather": "TODAY'S WEATHER",
|
||||
"energy": "ENERGY LEVEL",
|
||||
"film": "DAILY PROMPT",
|
||||
"archiving": "ARCHIVING MEMORY...",
|
||||
"archived": "MEMORY ARCHIVED"
|
||||
},
|
||||
"weather": {
|
||||
"clear": "Clear",
|
||||
"light": "Light",
|
||||
"cloudy": "Cloudy",
|
||||
"rain": "Rain",
|
||||
"storm": "Storm"
|
||||
},
|
||||
"timeline": {
|
||||
"eyebrow": "MEMORY ARCHIVE",
|
||||
"heading": "{count} OF {total} MEMORIES",
|
||||
"search": "Search memories",
|
||||
"searchPlaceholder": "Search notes, tags, places, tasks…",
|
||||
"filterTag": "Filter by tag",
|
||||
"allTags": "ALL TAGS",
|
||||
"noMatches": "No memories match these filters.",
|
||||
"favorite": "FAVORITE",
|
||||
"emptyTitle": "No memories yet.",
|
||||
"emptyBody": "Open Today when you are ready to keep one.",
|
||||
"detail": "MEMORY DETAIL",
|
||||
"untitled": "Untitled memory",
|
||||
"noNote": "No written note.",
|
||||
"editing": "EDITING AS TODAY — SAVE TO UPDATE",
|
||||
"preserved": "FAVORITED",
|
||||
"addMuseum": "ADD TO MUSEUM",
|
||||
"confirmDelete": "CONFIRM DELETE",
|
||||
"remove": "Remove this memory?",
|
||||
"irreversible": "This cannot be undone.",
|
||||
"deleteMemory": "DELETE MEMORY",
|
||||
"removed": "MEMORY REMOVED",
|
||||
"added": "MEMORY FAVORITED",
|
||||
"unpreserved": "REMOVED FROM FAVORITES"
|
||||
},
|
||||
"memory": {
|
||||
"tags": "TAGS",
|
||||
"tagsPlaceholder": "Separate tags with commas",
|
||||
"place": "PLACE / SCENE (OPTIONAL)",
|
||||
"placePlaceholder": "Where or what was the setting?",
|
||||
"linkTask": "RELATED TASK (OPTIONAL)",
|
||||
"noTask": "NO RELATED TASK",
|
||||
"relatedTask": "Related task",
|
||||
"favorite": "ADD TO FAVORITES",
|
||||
"edit": "EDIT MEMORY DETAILS",
|
||||
"note": "NOTE",
|
||||
"title": "TITLE (OPTIONAL)",
|
||||
"titlePlaceholder": "Give this memory a title"
|
||||
},
|
||||
"museum": {
|
||||
"eyebrow": "MUSEUM",
|
||||
"title": "Preserved moments",
|
||||
"subtitle": "Worth keeping for the long view.",
|
||||
"empty": "A museum begins with one preserved moment.",
|
||||
"preserved": "STATUS: PRESERVED",
|
||||
"collection": "COLLECTION"
|
||||
},
|
||||
"insights": {
|
||||
"eyebrow": "LAST 30 DAYS",
|
||||
"title": "Insights, quietly.",
|
||||
"weather": "WEATHER",
|
||||
"average": "AVERAGE ENERGY",
|
||||
"active": "MOST ACTIVE DAY",
|
||||
"current": "CURRENT STREAK",
|
||||
"longest": "Longest streak: {count} days",
|
||||
"noEntries": "No entries yet"
|
||||
},
|
||||
"profile": {
|
||||
"eyebrow": "SYSTEM PROFILE",
|
||||
"online": "LIFE OS ONLINE",
|
||||
"daysOnline": "DAYS ONLINE",
|
||||
"memories": "MEMORIES",
|
||||
"museumItems": "MUSEUM ITEMS",
|
||||
"streak": "CURRENT STREAK",
|
||||
"longest": "LONGEST STREAK",
|
||||
"commonWeather": "COMMON WEATHER",
|
||||
"personal": "PERSONAL SYSTEM",
|
||||
"name": "Display Name",
|
||||
"birthday": "Birthday (optional)",
|
||||
"start": "Life OS Start Date",
|
||||
"motto": "Personal Motto",
|
||||
"save": "SAVE PROFILE",
|
||||
"saved": "PROFILE SAVED",
|
||||
"average": "AVERAGE ENERGY {value} / 5"
|
||||
},
|
||||
"system": {
|
||||
"eyebrow": "SYSTEM SETTINGS",
|
||||
"title": "System, local and yours.",
|
||||
"appearance": "APPEARANCE",
|
||||
"language": "LANGUAGE",
|
||||
"browserLanguage": "BROWSER LANGUAGE",
|
||||
"detectedZh": "Detected: Chinese",
|
||||
"detectedEn": "Detected: English",
|
||||
"auto": "AUTO",
|
||||
"data": "DATA",
|
||||
"storage": "STORAGE",
|
||||
"dataStorage": "DATA STORAGE",
|
||||
"export": "EXPORT DATA",
|
||||
"import": "IMPORT DATA",
|
||||
"reset": "RESET LIFE OS",
|
||||
"local": "Local Storage",
|
||||
"stored": "Your data is stored locally in this browser.",
|
||||
"backups": "Create regular backups to prevent data loss.",
|
||||
"lastBackup": "LAST BACKUP · {value}",
|
||||
"recommended": "BACKUP RECOMMENDED",
|
||||
"version": "VERSION",
|
||||
"theme": {
|
||||
"dark": "DARK",
|
||||
"light": "LIGHT",
|
||||
"auto": "AUTO"
|
||||
},
|
||||
"storageSummary": "{memories} memories · {museum} museum items · {tasks} tasks · Approx. {size} KB",
|
||||
"release": "Life OS<br>Version {version} · Backup schema v2 · D1 schema v2",
|
||||
"languageEnglish": "ENGLISH",
|
||||
"languageChinese": "中文"
|
||||
},
|
||||
"dialog": {
|
||||
"backup": "LIFE OS BACKUP",
|
||||
"ready": "Ready to restore",
|
||||
"exported": "Exported: {date}",
|
||||
"memories": "Memories: {count}",
|
||||
"museumItems": "Museum Items: {count}",
|
||||
"goals": "Goals: {count}",
|
||||
"tasks": "Tasks: {count}",
|
||||
"merge": "MERGE",
|
||||
"replaceAll": "REPLACE ALL DATA",
|
||||
"final": "FINAL CONFIRMATION",
|
||||
"replaceQuestion": "Replace all Life OS data?",
|
||||
"replaceWarning": "This will replace all current Life OS data.",
|
||||
"replace": "REPLACE DATA",
|
||||
"resetQuestion": "Reset all local data?",
|
||||
"resetWarning": "Export a backup first if you want to keep it.",
|
||||
"resetData": "RESET DATA"
|
||||
},
|
||||
"feedback": {
|
||||
"backup": "BACKUP CREATED",
|
||||
"invalid": "INVALID BACKUP FILE",
|
||||
"restored": "SYSTEM RESTORED",
|
||||
"restoring": "RESTORING SYSTEM...",
|
||||
"minimized": "MINIMIZED — TAP THE APP ICON TO RESTORE",
|
||||
"languageZh": "Language set to Chinese",
|
||||
"languageEn": "Language set to English",
|
||||
"followingZh": "Following browser language: Chinese",
|
||||
"followingEn": "Following browser language: English"
|
||||
},
|
||||
"addon": {
|
||||
"draftRestored": "DRAFT RESTORED",
|
||||
"searchTitle": "SEARCH MEMORY ARCHIVE",
|
||||
"searchPlaceholder": "Search titles, notes, moods…",
|
||||
"searchHint": "ESC to close · click a result to open it",
|
||||
"untitled": "Untitled memory",
|
||||
"noResults": "No memories found.",
|
||||
"syncPaused": "CLOUD SYNC PAUSED — CHANGES STAY ON THIS DEVICE",
|
||||
"syncReady": "CLOUD SYNC READY",
|
||||
"migrateQuestion": "Move this browser’s Life OS to the cloud?",
|
||||
"migrateBody": "Your existing local records will become the first synced copy for this ChatGPT account.",
|
||||
"migrate": "MIGRATE & SYNC",
|
||||
"fresh": "START FRESH",
|
||||
"migrated": "LOCAL LIFE OS MIGRATED",
|
||||
"cloudRestored": "CLOUD LIFE OS RESTORED",
|
||||
"cloudUnavailable": "CLOUD STORAGE UNAVAILABLE — LOCAL MODE ACTIVE",
|
||||
"openMemory": "Open memory: {title}"
|
||||
},
|
||||
"calendar": {
|
||||
"eyebrow": "MEMORIES & MILESTONES",
|
||||
"month": "MONTH",
|
||||
"day": "DAY",
|
||||
"today": "TODAY",
|
||||
"mon": "MON",
|
||||
"tue": "TUE",
|
||||
"wed": "WED",
|
||||
"thu": "THU",
|
||||
"fri": "FRI",
|
||||
"sat": "SAT",
|
||||
"sun": "SUN",
|
||||
"previous": "Previous month",
|
||||
"next": "Next month",
|
||||
"previousDay": "Previous day",
|
||||
"nextDay": "Next day",
|
||||
"dayAtGlance": "THAT DAY",
|
||||
"memory": "MEMORY",
|
||||
"task": "TASK",
|
||||
"goal": "GOAL",
|
||||
"items": "items",
|
||||
"taskDue": "TASK DUE",
|
||||
"taskDone": "TASK COMPLETED",
|
||||
"goalCreated": "GOAL CREATED",
|
||||
"goalTarget": "GOAL TARGET DATE",
|
||||
"goalDone": "GOAL COMPLETED",
|
||||
"emptyDay": "No memories or milestones recorded for this day.",
|
||||
"openToday": "Write a memory",
|
||||
"writeMemory": "Add memory",
|
||||
"openTasks": "Open tasks"
|
||||
},
|
||||
"tasks": {
|
||||
"eyebrow": "GOALS & TASKS",
|
||||
"title": "Make room for what matters.",
|
||||
"subtitle": "A small, steady plan for today and the days ahead.",
|
||||
"addGoal": "NEW GOAL",
|
||||
"addTask": "ADD TASK",
|
||||
"taskPlaceholder": "What needs doing?",
|
||||
"goalPlaceholder": "What do you want to move toward?",
|
||||
"goalDescription": "A note about this goal (optional)",
|
||||
"finishedGoals": "COMPLETED GOALS",
|
||||
"goalComplete": "COMPLETE GOAL",
|
||||
"goalReopen": "REOPEN GOAL",
|
||||
"all": "ALL",
|
||||
"today": "TODAY",
|
||||
"upcoming": "UPCOMING",
|
||||
"done": "DONE",
|
||||
"activeGoals": "ACTIVE GOALS",
|
||||
"noGoals": "Start with one goal worth moving toward.",
|
||||
"noTasks": "Nothing on this list yet.",
|
||||
"due": "DUE {date}",
|
||||
"noDate": "NO DUE DATE",
|
||||
"priority": {
|
||||
"low": "LOW",
|
||||
"normal": "NORMAL",
|
||||
"high": "HIGH"
|
||||
},
|
||||
"goal": "GOAL",
|
||||
"anyGoal": "NO GOAL",
|
||||
"save": "SAVE",
|
||||
"cancel": "CANCEL",
|
||||
"complete": "MARK COMPLETE",
|
||||
"reopen": "REOPEN",
|
||||
"delete": "DELETE",
|
||||
"goalTitle": "New goal",
|
||||
"taskTitle": "New task",
|
||||
"goalCreated": "GOAL CREATED",
|
||||
"taskAdded": "TASK ADDED",
|
||||
"taskRemoved": "TASK REMOVED",
|
||||
"goalRemoved": "GOAL REMOVED",
|
||||
"confirmGoalDelete": "Delete this goal?",
|
||||
"confirmGoalDeleteBody": "Tasks linked to it will be kept without a goal.",
|
||||
"target": "TARGET DATE",
|
||||
"completed": "COMPLETED",
|
||||
"progress": "{done} OF {total} DONE",
|
||||
"desktopShow": "SHOW COUNTDOWN",
|
||||
"desktopHide": "HIDE COUNTDOWN",
|
||||
"countdown": "GOAL COUNTDOWN",
|
||||
"daysLeft": "{count} days left",
|
||||
"todayTarget": "Target is today",
|
||||
"daysOverdue": "{count} days overdue",
|
||||
"pinOnCreate": "Show countdown on desktop",
|
||||
"todayHeading": "Focus for today",
|
||||
"openCount": "{count} OPEN TASKS",
|
||||
"overdue": "OVERDUE"
|
||||
},
|
||||
"shell": {
|
||||
"pageTitle": "Life OS",
|
||||
"brand": "LIFE OS / PERSONAL DESKTOP",
|
||||
"initializing": "INITIALIZING PERSONAL SYSTEM…",
|
||||
"life": "LIFE",
|
||||
"morning": "GOOD MORNING",
|
||||
"afternoon": "GOOD AFTERNOON",
|
||||
"evening": "GOOD EVENING",
|
||||
"systemOnline": "SYSTEM ONLINE · LIFE OS v{version}",
|
||||
"systemDate": "SYSTEM DATE",
|
||||
"open": "Open",
|
||||
"close": "Close",
|
||||
"minimize": "Minimize",
|
||||
"maximize": "Maximize",
|
||||
"restore": "Restore window",
|
||||
"openApp": "Open {app}",
|
||||
"refresh": "Refresh desktop",
|
||||
"newToday": "New today entry",
|
||||
"systemSettings": "System settings",
|
||||
"doubleClickMaximize": "Double-click to maximize",
|
||||
"wallpaperTitle": "Bing daily wallpaper: {title}",
|
||||
"dailyImage": "Daily image",
|
||||
"todayMemories": "{memories} memories · {preserved} preserved",
|
||||
"memoryCount": "{count} memories",
|
||||
"menuCloseWindow": "Close window",
|
||||
"todaySummary": "{memories} memories · {preserved} preserved"
|
||||
},
|
||||
"wallpaper": {
|
||||
"dailyImage": "Daily image"
|
||||
},
|
||||
"prompt": {
|
||||
"films": [
|
||||
{
|
||||
"title": "A Quiet Tuesday",
|
||||
"subtitle": "Drama · Slice of Life"
|
||||
},
|
||||
{
|
||||
"title": "The Afternoon That Stayed",
|
||||
"subtitle": "Independent · Warm"
|
||||
},
|
||||
{
|
||||
"title": "Small Light, Long Hallway",
|
||||
"subtitle": "Contemplative · Drama"
|
||||
},
|
||||
{
|
||||
"title": "Before the Notifications",
|
||||
"subtitle": "Minimal · Coming of Age"
|
||||
},
|
||||
{
|
||||
"title": "Room With Open Curtains",
|
||||
"subtitle": "Slice of Life · Calm"
|
||||
},
|
||||
{
|
||||
"title": "The Usual Way Home",
|
||||
"subtitle": "Drama · Familiar"
|
||||
},
|
||||
{
|
||||
"title": "Notes Left Unfinished",
|
||||
"subtitle": "Reflective · Short Film"
|
||||
},
|
||||
{
|
||||
"title": "A Weather of Thoughts",
|
||||
"subtitle": "Quiet · Personal"
|
||||
},
|
||||
{
|
||||
"title": "The Day Between Things",
|
||||
"subtitle": "Indie · Observational"
|
||||
},
|
||||
{
|
||||
"title": "Slow Hours, Soft Edges",
|
||||
"subtitle": "Slice of Life · Dream"
|
||||
},
|
||||
{
|
||||
"title": "A Window Still Lit",
|
||||
"subtitle": "Drama · Evening"
|
||||
},
|
||||
{
|
||||
"title": "Ordinary, Carefully Held",
|
||||
"subtitle": "Human · Gentle"
|
||||
},
|
||||
{
|
||||
"title": "One More Page Tonight",
|
||||
"subtitle": "Study · Slow Burn"
|
||||
},
|
||||
{
|
||||
"title": "The Space After Lunch",
|
||||
"subtitle": "Memory · Calm"
|
||||
},
|
||||
{
|
||||
"title": "Late Bus, Clear Mind",
|
||||
"subtitle": "Urban · Reflective"
|
||||
},
|
||||
{
|
||||
"title": "Little Things in Focus",
|
||||
"subtitle": "Documentary · Life"
|
||||
},
|
||||
{
|
||||
"title": "What the Room Remembered",
|
||||
"subtitle": "Poetic · Still"
|
||||
},
|
||||
{
|
||||
"title": "Blue Hour, No Rush",
|
||||
"subtitle": "Evening · Quiet"
|
||||
},
|
||||
{
|
||||
"title": "The Map of a Small Day",
|
||||
"subtitle": "Journey · Personal"
|
||||
},
|
||||
{
|
||||
"title": "Somewhere After Four",
|
||||
"subtitle": "Indie · Warm"
|
||||
},
|
||||
{
|
||||
"title": "A Day With No Headline",
|
||||
"subtitle": "Slice of Life · Soft"
|
||||
},
|
||||
{
|
||||
"title": "The Sound of Taking Time",
|
||||
"subtitle": "Slow Cinema · Personal"
|
||||
},
|
||||
{
|
||||
"title": "Things That Did Not Need Fixing",
|
||||
"subtitle": "Drama · Gentle"
|
||||
},
|
||||
{
|
||||
"title": "Halfway Through September",
|
||||
"subtitle": "Memory · Youth"
|
||||
},
|
||||
{
|
||||
"title": "A Small Archive of Us",
|
||||
"subtitle": "Personal · Quiet"
|
||||
},
|
||||
{
|
||||
"title": "The Night Kept Its Shape",
|
||||
"subtitle": "Noir · Calm"
|
||||
},
|
||||
{
|
||||
"title": "Unscheduled Sunshine",
|
||||
"subtitle": "Light · Personal"
|
||||
},
|
||||
{
|
||||
"title": "The Last Open Tab",
|
||||
"subtitle": "Modern · Reflective"
|
||||
},
|
||||
{
|
||||
"title": "A Place for Today",
|
||||
"subtitle": "Drama · Human"
|
||||
},
|
||||
{
|
||||
"title": "Nothing Lost to the Day",
|
||||
"subtitle": "Slice of Life · Hopeful"
|
||||
}
|
||||
],
|
||||
"lines": [
|
||||
"Nothing remarkable happened. Maybe that was the point.",
|
||||
"A small day, held carefully enough to remember.",
|
||||
"The ordinary parts stayed longer than expected.",
|
||||
"Not every chapter needs a dramatic ending.",
|
||||
"Some thoughts arrived; some were allowed to pass.",
|
||||
"A quiet record of being here.",
|
||||
"The day moved at its own reasonable pace.",
|
||||
"There was room for a little more softness.",
|
||||
"Even the unfinished things belonged here.",
|
||||
"The light changed, and so did the mood.",
|
||||
"A scene worth keeping, without needing an explanation.",
|
||||
"It was enough to notice the day as it was.",
|
||||
"Time did not rush; neither did this memory.",
|
||||
"The details were small, but they were real.",
|
||||
"A pause became part of the story.",
|
||||
"Somewhere, this became a day to keep.",
|
||||
"The familiar became briefly luminous.",
|
||||
"Nothing needed to be solved before nightfall.",
|
||||
"A few moments stayed in focus.",
|
||||
"The story was quiet, but it was still yours.",
|
||||
"Today left a small mark.",
|
||||
"A gentle frame around an ordinary hour.",
|
||||
"The day asked for attention, not perfection.",
|
||||
"This memory can rest here for now.",
|
||||
"The world was loud; this page was not.",
|
||||
"A few loose threads, honestly kept.",
|
||||
"The simplest version of today was enough.",
|
||||
"The day settled before it ended.",
|
||||
"There was meaning in the in-between.",
|
||||
"A private moment, safely archived."
|
||||
]
|
||||
},
|
||||
"login": {
|
||||
"title": "Your life,<br>in sync.",
|
||||
"description": "Sign in with ChatGPT to open your personal Life OS and keep your memories safely synced across devices.",
|
||||
"continue": "CONTINUE WITH CHATGPT",
|
||||
"footnote": "PERSONAL SYSTEM · CLOUD SYNC"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user