Skip to content

Remove i18n#1537

Merged
yujonglee merged 4 commits intomainfrom
remove-i18n
Oct 4, 2025
Merged

Remove i18n#1537
yujonglee merged 4 commits intomainfrom
remove-i18n

Conversation

@yujonglee
Copy link
Contributor

No description provided.

@yujonglee
Copy link
Contributor Author

@coderabbitai ignore

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 4, 2025

Note

Reviews paused

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.
📝 Walkthrough

Walkthrough

This PR removes Lingui i18n usage across the desktop app and utilities, deletes the i18n CI workflow, and drops a compile step from desktop CD. Texts are hardcoded in English, date formatting uses a local util, and App no longer wraps with I18nProvider. A settings route adds an analytics useEffect.

Changes

Cohort / File(s) Summary
CI Workflows
Github Actions: .github/workflows/desktop_cd.yaml, .github/workflows/i18n.yaml
Remove i18n compile step from desktop_cd; delete the dedicated i18n workflow.
App bootstrap i18n removal
apps/desktop/src/main.tsx
Remove @lingui i18n setup and I18nProvider; render app without i18n context.
Utils i18n removal and datetime strings
packages/utils/package.json, packages/utils/src/datetime.test.ts, packages/utils/src/datetime.ts
Drop @lingui/core dependency and test setup; replace i18n-based messages with plain strings in datetime helpers.
Editor header chips
apps/desktop/src/components/editor-area/note-header/chips/event-chip.tsx, .../participants-chip.tsx, .../title-input.tsx
Remove Trans/useLingui and replace translated text/placeholders with literals.
Finder calendar view
apps/desktop/src/components/finder/views/calendar-view.tsx
Replace i18n date formatting with format from @hypr/utils; literalize “Today”.
Human profile
apps/desktop/src/components/human-profile/*
Remove Trans; use plain text in past-notes and upcoming-events.
Individualization modal
apps/desktop/src/components/individualization-modal/*-view.tsx
Remove Trans; use literal titles, subtitles, button labels.
Left sidebar
apps/desktop/src/components/left-sidebar/*.tsx, .../top-area/*.tsx
Remove Trans/useLingui; literalize headers, messages, tooltips, menu labels.
Organization profile
apps/desktop/src/components/organization-profile/*
Remove Trans; use plain text for section titles and messages.
Right panel chat
apps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx
Remove Trans; literalize heading and beta notice.
Search
apps/desktop/src/components/search-bar.tsx, apps/desktop/src/components/left-sidebar/search-list.tsx
Remove i18n; set static placeholders and context menu text.
Settings components (AI, STT, Calendar, Templates)
apps/desktop/src/components/settings/components/**
Remove Trans/useLingui; replace all labels/placeholders/descriptions with literals.
Settings views
apps/desktop/src/components/settings/views/*.tsx
Remove i18n wrappers; set static strings. In ai-llm.tsx, ai-stt.tsx, general.tsx, help-support.tsx, integrations.tsx, lab.tsx, notifications.tsx, profile.tsx, sound.tsx, team.tsx, template.tsx, templates.tsx.
Share & permissions
apps/desktop/src/components/share-and-permission/*.tsx
Remove Trans/useLingui; literalize placeholders and labels.
Toolbar buttons
apps/desktop/src/components/toolbar/buttons/*.tsx
Remove Trans; set static tooltip labels.
Welcome modal
apps/desktop/src/components/welcome-modal/*.tsx
Remove Trans/useLingui; convert all onboarding texts to literals (permissions, language, LLM/STT selection, progress, navigation).
Workspace calendar
apps/desktop/src/components/workspace-calendar/event-card.tsx
Remove Trans; literalize “Create Note”.
Routes
apps/desktop/src/routes/app.human.$id.tsx, apps/desktop/src/routes/app.index.tsx, apps/desktop/src/routes/app.settings.tsx
Remove Trans/useLingui; literal labels. Add useEffect analytics on tab changes in app.settings.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant U as User
  participant App as App (Renderer)
  participant Ctx as Providers
  participant Anal as Analytics

  Note over Ctx: New provider stack (no I18nProvider)
  U->>App: Open Settings
  App->>Ctx: Mount Query/Theme/Tooltip/CatchBoundary
  App->>App: Render Settings tabs (literal labels)
  U->>App: Switch tab
  App->>Anal: useEffect emits tab-change event
  Anal-->>App: Ack
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Description Check ⚠️ Warning The pull request description is missing and provides no information about the changes, so reviewers have no context or summary of the PR’s intent or scope. Please add a descriptive summary explaining that this PR removes all i18n integration, including which workflows, components, and utilities are affected and why this change is needed.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (1 passed)
Check name Status Explanation
Title Check ✅ Passed The title “Remove i18n” succinctly captures the primary change of deleting internationalization support across the codebase and related workflows, and it is clear and specific enough for teammates to understand the scope of the PR at a glance.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/desktop/src/components/settings/views/sound.tsx (1)

56-63: Fix inconsistent button text rendering.

The button content is inconsistent: when pending, "Requesting..." is a plain text node, but when not pending, buttonText is wrapped in a <p> element. This creates different DOM structures for the same button state.

Apply this diff to make the rendering consistent:

             {isPending
               ? (
                 <>
                   <Spinner className="mr-2" />
-                  Requesting...
+                  <p>Requesting...</p>
                 </>
               )
               : <p>{buttonText}</p>}

Alternatively, remove both <p> wrappers for a cleaner implementation:

             {isPending
               ? (
                 <>
                   <Spinner className="mr-2" />
                   Requesting...
                 </>
               )
-              : <p>{buttonText}</p>}
+              : buttonText}
🧹 Nitpick comments (8)
apps/desktop/src/components/share-and-permission/participants-selector.tsx (1)

33-34: Consider consolidating text on a single line.

The text split across two lines is functional (JSX collapses whitespace), but would be clearer on one line:

-            Teamspace · {participants.length}
-            people
+            Teamspace · {participants.length} people
apps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx (1)

142-155: Consider removing the commented code block.

This commented block contains obsolete i18n references that won't work if uncommented. If the beta notice is not needed, remove the block entirely. If you plan to re-enable it later, update it to use hardcoded text instead of the Trans wrapper.

As per coding guidelines.

apps/desktop/src/components/workspace-calendar/event-card.tsx (1)

64-70: Consider memoizing date objects for performance.

The getStartDate() and getEndDate() functions are called multiple times during render (lines 95, 97, 98, 99, 100), creating new Date objects each time. Consider memoizing these values:

+  const startDate = useMemo(() => new Date(event.start_date), [event.start_date]);
+  const endDate = useMemo(() => new Date(event.end_date), [event.end_date]);
+
-  const getStartDate = () => {
-    return new Date(event.start_date);
-  };
-
-  const getEndDate = () => {
-    return new Date(event.end_date);
-  };

Then update the render logic to use startDate and endDate directly instead of calling the functions.

apps/desktop/src/components/share-and-permission/publish.tsx (1)

6-8: Consider removing unused interface.

The PublishProps interface is exported but never used—the Publish component accepts no props. This violates the guideline "No unused imports, variables, or functions."

Apply this diff to remove the unused interface:

-export interface PublishProps {
-  session: Session | null;
-}
-
 export const Publish = () => {
apps/desktop/src/components/settings/views/sound.tsx (2)

43-43: Consider removing unnecessary <p> wrappers.

Both branches wrap content in <p> tags, which adds extra DOM elements. You can simplify this to plain text since the parent div already handles styling.

Apply this diff to simplify:

-            {done ? <p>Access Granted</p> : <p>{description}</p>}
+            {done ? "Access Granted" : description}

134-135: LGTM! Successfully removed i18n for system audio permission.

The hardcoded strings are clear and the i18n removal is properly implemented.

Minor suggestion: consider changing "other people's voice" to "other people's voices" (plural) for more natural phrasing, though the current wording is acceptable.

apps/desktop/src/routes/app.settings.tsx (1)

38-66: Eliminate duplicate getTabTitle function.

The getTabTitle function is defined twice with identical logic: once inside the TabButton component (lines 39-66) and once inside the Component function (lines 111-138). This violates the DRY principle and increases maintenance burden.

Extract the function to the module level (outside both components):

+function getTabTitle(tab: Tab): string {
+  switch (tab) {
+    case "general":
+      return "General";
+    case "ai-llm":
+      return "Intelligence";
+    case "ai-stt":
+      return "Transcription";
+    case "calendar":
+      return "Calendar";
+    case "notifications":
+      return "Notifications";
+    case "templates":
+      return "Templates";
+    case "sound":
+      return "Sound";
+    case "integrations":
+      return "Integrations";
+    case "billing":
+      return "Billing & License";
+    case "mcp":
+      return "MCP";
+    case "help-support":
+      return "Help & Support";
+    default:
+      return tab;
+  }
+}
+
 function TabButton({ tab, isActive, onClick }: { tab: Tab; isActive: boolean; onClick: () => void }) {
-  const getTabTitle = (tab: Tab) => {
-    switch (tab) {
-      case "general":
-        return "General";
-      case "ai-llm":
-        return "Intelligence";
-      case "ai-stt":
-        return "Transcription";
-      case "calendar":
-        return "Calendar";
-      case "notifications":
-        return "Notifications";
-      case "templates":
-        return "Templates";
-      case "sound":
-        return "Sound";
-      case "integrations":
-        return "Integrations";
-      case "billing":
-        return "Billing & License";
-      case "mcp":
-        return "MCP";
-      case "help-support":
-        return "Help & Support";
-      default:
-        return tab;
-    }
-  };
-
   return (

Then remove the duplicate definition from the Component function (lines 111-138).

Also applies to: 111-138

apps/desktop/src/components/settings/views/template.tsx (1)

263-267: Consider adjusting the placeholder string indentation.

The multi-line placeholder string has extra leading whitespace on continuation lines that will appear in the actual placeholder text shown to users. This may not be the intended formatting.

Consider removing the extra indentation:

-          placeholder={`Describe the summary you want to generate...
-            
-• what kind of meeting is this?
-• any format requirements?
-• what should AI remember when summarizing?`}
+          placeholder={`Describe the summary you want to generate...
+
+• what kind of meeting is this?
+• any format requirements?
+• what should AI remember when summarizing?`}

Or use a more explicit approach with string concatenation to control whitespace.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f5ed7c3 and eb006ee.

⛔ Files ignored due to path filters (2)
  • apps/desktop/src/locales/en/messages.po is excluded by !**/*.po
  • apps/desktop/src/locales/ko/messages.po is excluded by !**/*.po
📒 Files selected for processing (66)
  • .github/workflows/desktop_cd.yaml (0 hunks)
  • .github/workflows/i18n.yaml (0 hunks)
  • apps/desktop/src/components/editor-area/note-header/chips/event-chip.tsx (5 hunks)
  • apps/desktop/src/components/editor-area/note-header/chips/participants-chip.tsx (2 hunks)
  • apps/desktop/src/components/editor-area/note-header/title-input.tsx (1 hunks)
  • apps/desktop/src/components/finder/views/calendar-view.tsx (3 hunks)
  • apps/desktop/src/components/human-profile/past-notes.tsx (1 hunks)
  • apps/desktop/src/components/human-profile/upcoming-events.tsx (1 hunks)
  • apps/desktop/src/components/individualization-modal/how-heard-view.tsx (1 hunks)
  • apps/desktop/src/components/individualization-modal/industry-view.tsx (2 hunks)
  • apps/desktop/src/components/individualization-modal/org-size-view.tsx (2 hunks)
  • apps/desktop/src/components/individualization-modal/role-view.tsx (2 hunks)
  • apps/desktop/src/components/left-sidebar/events-list.tsx (4 hunks)
  • apps/desktop/src/components/left-sidebar/notes-list.tsx (4 hunks)
  • apps/desktop/src/components/left-sidebar/search-list.tsx (2 hunks)
  • apps/desktop/src/components/left-sidebar/top-area/finder-button.tsx (1 hunks)
  • apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx (1 hunks)
  • apps/desktop/src/components/organization-profile/members-list.tsx (2 hunks)
  • apps/desktop/src/components/organization-profile/recent-notes.tsx (3 hunks)
  • apps/desktop/src/components/organization-profile/upcoming-events.tsx (2 hunks)
  • apps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx (3 hunks)
  • apps/desktop/src/components/search-bar.tsx (2 hunks)
  • apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx (13 hunks)
  • apps/desktop/src/components/settings/components/ai/stt-view-remote.tsx (4 hunks)
  • apps/desktop/src/components/settings/components/calendar/apple-calendar-integration-details.tsx (4 hunks)
  • apps/desktop/src/components/settings/components/calendar/calendar-selector.tsx (3 hunks)
  • apps/desktop/src/components/settings/components/template-list.tsx (3 hunks)
  • apps/desktop/src/components/settings/components/template-sections.tsx (2 hunks)
  • apps/desktop/src/components/settings/components/templates-sidebar.tsx (3 hunks)
  • apps/desktop/src/components/settings/views/ai-llm.tsx (4 hunks)
  • apps/desktop/src/components/settings/views/ai-stt.tsx (1 hunks)
  • apps/desktop/src/components/settings/views/general.tsx (9 hunks)
  • apps/desktop/src/components/settings/views/help-support.tsx (5 hunks)
  • apps/desktop/src/components/settings/views/integrations.tsx (13 hunks)
  • apps/desktop/src/components/settings/views/lab.tsx (1 hunks)
  • apps/desktop/src/components/settings/views/notifications.tsx (6 hunks)
  • apps/desktop/src/components/settings/views/profile.tsx (7 hunks)
  • apps/desktop/src/components/settings/views/sound.tsx (4 hunks)
  • apps/desktop/src/components/settings/views/team.tsx (9 hunks)
  • apps/desktop/src/components/settings/views/template.tsx (11 hunks)
  • apps/desktop/src/components/settings/views/templates.tsx (7 hunks)
  • apps/desktop/src/components/share-and-permission/invite-list.tsx (2 hunks)
  • apps/desktop/src/components/share-and-permission/participants-selector.tsx (1 hunks)
  • apps/desktop/src/components/share-and-permission/publish.tsx (2 hunks)
  • apps/desktop/src/components/toolbar/buttons/chat-panel-button.tsx (1 hunks)
  • apps/desktop/src/components/toolbar/buttons/delete-note-button.tsx (1 hunks)
  • apps/desktop/src/components/toolbar/buttons/left-sidebar-button.tsx (1 hunks)
  • apps/desktop/src/components/toolbar/buttons/new-note-button.tsx (1 hunks)
  • apps/desktop/src/components/toolbar/buttons/new-window-button.tsx (1 hunks)
  • apps/desktop/src/components/welcome-modal/audio-permissions-view.tsx (5 hunks)
  • apps/desktop/src/components/welcome-modal/calendar-permissions-view.tsx (4 hunks)
  • apps/desktop/src/components/welcome-modal/custom-endpoint-view.tsx (12 hunks)
  • apps/desktop/src/components/welcome-modal/download-progress-view.tsx (4 hunks)
  • apps/desktop/src/components/welcome-modal/index.tsx (2 hunks)
  • apps/desktop/src/components/welcome-modal/language-selection-view.tsx (6 hunks)
  • apps/desktop/src/components/welcome-modal/llm-selection-view.tsx (2 hunks)
  • apps/desktop/src/components/welcome-modal/model-selection-view.tsx (2 hunks)
  • apps/desktop/src/components/welcome-modal/welcome-view.tsx (2 hunks)
  • apps/desktop/src/components/workspace-calendar/event-card.tsx (1 hunks)
  • apps/desktop/src/main.tsx (1 hunks)
  • apps/desktop/src/routes/app.human.$id.tsx (2 hunks)
  • apps/desktop/src/routes/app.index.tsx (1 hunks)
  • apps/desktop/src/routes/app.settings.tsx (3 hunks)
  • packages/utils/package.json (0 hunks)
  • packages/utils/src/datetime.test.ts (1 hunks)
  • packages/utils/src/datetime.ts (6 hunks)
💤 Files with no reviewable changes (3)
  • .github/workflows/desktop_cd.yaml
  • .github/workflows/i18n.yaml
  • packages/utils/package.json
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{js,ts,tsx,rs}

⚙️ CodeRabbit configuration file

**/*.{js,ts,tsx,rs}: 1. Do not add any error handling. Keep the existing one.
2. No unused imports, variables, or functions.
3. For comments, keep it minimal. It should be about "Why", not "What".

Files:

  • apps/desktop/src/components/left-sidebar/events-list.tsx
  • apps/desktop/src/routes/app.index.tsx
  • apps/desktop/src/components/settings/views/general.tsx
  • apps/desktop/src/components/welcome-modal/calendar-permissions-view.tsx
  • apps/desktop/src/components/toolbar/buttons/left-sidebar-button.tsx
  • apps/desktop/src/components/organization-profile/members-list.tsx
  • apps/desktop/src/components/welcome-modal/download-progress-view.tsx
  • apps/desktop/src/components/human-profile/upcoming-events.tsx
  • apps/desktop/src/components/organization-profile/recent-notes.tsx
  • apps/desktop/src/components/settings/components/template-sections.tsx
  • apps/desktop/src/components/left-sidebar/top-area/finder-button.tsx
  • apps/desktop/src/components/settings/views/templates.tsx
  • apps/desktop/src/components/editor-area/note-header/chips/participants-chip.tsx
  • apps/desktop/src/components/individualization-modal/org-size-view.tsx
  • apps/desktop/src/components/share-and-permission/participants-selector.tsx
  • apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx
  • apps/desktop/src/components/welcome-modal/llm-selection-view.tsx
  • apps/desktop/src/components/welcome-modal/audio-permissions-view.tsx
  • apps/desktop/src/components/left-sidebar/search-list.tsx
  • apps/desktop/src/components/toolbar/buttons/new-note-button.tsx
  • apps/desktop/src/components/welcome-modal/custom-endpoint-view.tsx
  • apps/desktop/src/components/workspace-calendar/event-card.tsx
  • apps/desktop/src/components/welcome-modal/model-selection-view.tsx
  • apps/desktop/src/components/search-bar.tsx
  • apps/desktop/src/components/settings/views/integrations.tsx
  • apps/desktop/src/components/editor-area/note-header/chips/event-chip.tsx
  • apps/desktop/src/components/left-sidebar/notes-list.tsx
  • apps/desktop/src/components/individualization-modal/role-view.tsx
  • apps/desktop/src/components/toolbar/buttons/chat-panel-button.tsx
  • apps/desktop/src/components/settings/views/notifications.tsx
  • apps/desktop/src/components/settings/components/templates-sidebar.tsx
  • apps/desktop/src/components/editor-area/note-header/title-input.tsx
  • apps/desktop/src/components/settings/views/template.tsx
  • apps/desktop/src/components/settings/components/calendar/apple-calendar-integration-details.tsx
  • apps/desktop/src/components/individualization-modal/how-heard-view.tsx
  • apps/desktop/src/components/finder/views/calendar-view.tsx
  • apps/desktop/src/routes/app.human.$id.tsx
  • apps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx
  • apps/desktop/src/components/individualization-modal/industry-view.tsx
  • apps/desktop/src/components/welcome-modal/language-selection-view.tsx
  • packages/utils/src/datetime.ts
  • apps/desktop/src/components/settings/views/help-support.tsx
  • apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx
  • apps/desktop/src/components/settings/views/team.tsx
  • apps/desktop/src/components/settings/views/profile.tsx
  • apps/desktop/src/components/welcome-modal/index.tsx
  • apps/desktop/src/components/organization-profile/upcoming-events.tsx
  • apps/desktop/src/components/toolbar/buttons/new-window-button.tsx
  • packages/utils/src/datetime.test.ts
  • apps/desktop/src/components/settings/views/lab.tsx
  • apps/desktop/src/components/settings/components/ai/stt-view-remote.tsx
  • apps/desktop/src/main.tsx
  • apps/desktop/src/components/share-and-permission/invite-list.tsx
  • apps/desktop/src/components/settings/components/calendar/calendar-selector.tsx
  • apps/desktop/src/components/human-profile/past-notes.tsx
  • apps/desktop/src/components/settings/components/template-list.tsx
  • apps/desktop/src/components/settings/views/sound.tsx
  • apps/desktop/src/routes/app.settings.tsx
  • apps/desktop/src/components/toolbar/buttons/delete-note-button.tsx
  • apps/desktop/src/components/settings/views/ai-llm.tsx
  • apps/desktop/src/components/welcome-modal/welcome-view.tsx
  • apps/desktop/src/components/settings/views/ai-stt.tsx
  • apps/desktop/src/components/share-and-permission/publish.tsx
🧬 Code graph analysis (13)
apps/desktop/src/components/toolbar/buttons/left-sidebar-button.tsx (1)
apps/desktop/src/components/shortcut.tsx (1)
  • Shortcut (5-23)
apps/desktop/src/components/toolbar/buttons/new-note-button.tsx (1)
apps/desktop/src/components/shortcut.tsx (1)
  • Shortcut (5-23)
apps/desktop/src/components/settings/views/integrations.tsx (1)
packages/ui/src/components/ui/form.tsx (2)
  • FormLabel (158-158)
  • FormDescription (158-158)
apps/desktop/src/components/toolbar/buttons/chat-panel-button.tsx (1)
apps/desktop/src/components/shortcut.tsx (1)
  • Shortcut (5-23)
apps/desktop/src/components/settings/views/notifications.tsx (1)
packages/ui/src/components/ui/form.tsx (2)
  • FormLabel (158-158)
  • FormDescription (158-158)
apps/desktop/src/components/finder/views/calendar-view.tsx (1)
packages/utils/src/datetime.ts (1)
  • format (4-11)
apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx (1)
apps/desktop/src/components/shortcut.tsx (1)
  • Shortcut (5-23)
apps/desktop/src/components/settings/views/team.tsx (2)
packages/ui/src/components/ui/button.tsx (1)
  • Button (37-89)
packages/ui/src/components/ui/modal.tsx (3)
  • ModalTitle (130-136)
  • ModalDescription (143-148)
  • ModalHeader (90-92)
apps/desktop/src/components/settings/views/profile.tsx (3)
packages/ui/src/components/ui/form.tsx (3)
  • FormLabel (158-158)
  • FormControl (158-158)
  • FormDescription (158-158)
packages/ui/src/components/ui/input.tsx (1)
  • Input (22-22)
packages/ui/src/components/ui/textarea.tsx (1)
  • Textarea (22-22)
apps/desktop/src/components/settings/views/ai-llm.tsx (3)
packages/ui/src/components/ui/tabs.tsx (1)
  • TabsTrigger (53-53)
packages/ui/src/components/ui/tooltip.tsx (2)
  • TooltipContent (28-28)
  • Tooltip (28-28)
packages/ui/src/components/ui/form.tsx (1)
  • FormDescription (158-158)
apps/desktop/src/components/welcome-modal/welcome-view.tsx (1)
packages/ui/src/components/ui/text-animate.tsx (1)
  • TextAnimate (302-386)
apps/desktop/src/components/settings/views/ai-stt.tsx (1)
packages/ui/src/components/ui/tabs.tsx (1)
  • TabsTrigger (53-53)
apps/desktop/src/components/share-and-permission/publish.tsx (1)
packages/ui/src/components/ui/button.tsx (1)
  • Button (37-89)
🔇 Additional comments (73)
apps/desktop/src/components/welcome-modal/model-selection-view.tsx (1)

39-39: Strings look good

Plain English labels align with the i18n removal and no other dependencies linger. All good here.

Also applies to: 93-93

apps/desktop/src/components/editor-area/note-header/chips/participants-chip.tsx (1)

383-383: LGTM! i18n removal implemented correctly.

The hardcoded English strings appropriately replace the Lingui translation calls, aligning with the PR's goal of removing i18n integration. The placeholder text and "Create" label are clear and consistent with the surrounding UI.

Also applies to: 561-561

apps/desktop/src/components/toolbar/buttons/chat-panel-button.tsx (1)

46-46: LGTM! i18n removal implemented correctly.

The hardcoded English text "Toggle chat panel" correctly replaces the previous localized version, aligning with the PR objective to remove i18n. The Shortcut component remains properly integrated.

apps/desktop/src/components/settings/views/ai-stt.tsx (1)

116-116: LGTM - i18n removal implemented correctly.

The hardcoded English text aligns with the PR objective to remove i18n. No technical issues detected.

Note: The user requested to ignore this PR via comment. If you'd like to proceed without review, please confirm.

Also applies to: 119-119

apps/desktop/src/components/individualization-modal/how-heard-view.tsx (1)

32-32: LGTM! i18n removal implemented correctly.

The Trans wrappers have been cleanly removed and the text is now hardcoded in English as intended. No lingui imports remain, and the component functionality is preserved.

Also applies to: 37-37

apps/desktop/src/components/share-and-permission/participants-selector.tsx (1)

30-30: LGTM: i18n removal successful.

The hardcoded string correctly replaces the previous Trans wrapper, aligning with the PR objective to remove Lingui i18n.

apps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx (1)

124-124: LGTM! i18n wrapper successfully removed.

The Trans wrapper has been correctly replaced with hardcoded English text, aligning with the PR's objective to remove i18n.

apps/desktop/src/components/organization-profile/recent-notes.tsx (1)

1-74: LGTM! i18n removal is clean and correct.

The removal of Lingui Trans wrappers and hardcoding of English strings aligns with the PR objective. All imports remain used, and the logic is unchanged—only text rendering was simplified.

Note: Date formatting on line 53 remains locale-aware via date-fns, which provides a reasonable UX for date display even with hardcoded English UI text.

apps/desktop/src/components/workspace-calendar/event-card.tsx (1)

128-128: LGTM! Change aligns with PR objectives.

The hardcoded "Create Note" string is consistent with the PR's goal to remove i18n usage. The change is straightforward and doesn't introduce any functional issues.

apps/desktop/src/components/share-and-permission/publish.tsx (2)

3-3: LGTM! Unused import correctly removed.

The Lingui import has been removed since Trans is no longer used in this file, aligning with the PR objective to remove i18n support.


14-25: LGTM! i18n successfully removed.

The Lingui <Trans> wrappers have been replaced with plain English strings as intended. The text is grammatically correct and the component logic remains unchanged.

apps/desktop/src/components/welcome-modal/audio-permissions-view.tsx (1)

1-196: LGTM! i18n removal executed correctly.

The Lingui internationalization has been cleanly removed and all UI strings have been replaced with plain English text. The component logic and functionality remain intact, and all imports are properly used.

apps/desktop/src/components/human-profile/past-notes.tsx (1)

91-92: LGTM! i18n removed as intended.

The Lingui i18n wrappers have been cleanly removed and replaced with plain English text. The functionality remains intact and the implementation aligns with the PR objective.

apps/desktop/src/components/share-and-permission/invite-list.tsx (1)

28-28: LGTM!

The hardcoded button text is clear and appropriate. The i18n removal aligns with the PR objectives.

apps/desktop/src/components/settings/views/sound.tsx (1)

124-125: LGTM! Successfully removed i18n for microphone permission.

The hardcoded strings are clear and the i18n removal is properly implemented.

apps/desktop/src/components/human-profile/upcoming-events.tsx (1)

80-80: LGTM!

The i18n wrapper has been correctly removed and replaced with a plain paragraph element. The change is consistent with the PR's objective to remove Lingui usage.

apps/desktop/src/components/toolbar/buttons/new-note-button.tsx (1)

45-45: LGTM!

The i18n wrapper has been correctly removed. The tooltip now displays plain text while preserving the keyboard shortcut component.

apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx (1)

133-153: LGTM!

All menu item labels have been correctly updated to use plain text strings instead of i18n wrappers. The changes are consistent across all dropdown menu items.

apps/desktop/src/components/settings/views/lab.tsx (1)

73-76: LGTM!

The feature flag component has been correctly updated to render title and description as plain strings. The change maintains the existing functionality while removing i18n dependencies.

apps/desktop/src/components/settings/components/template-sections.tsx (1)

141-151: LGTM!

The placeholder text has been correctly updated to use plain string literals instead of Lingui's template literals. The input and textarea placeholders remain functional with static English text.

apps/desktop/src/components/welcome-modal/index.tsx (1)

351-351: LGTM!

The Back button label has been correctly updated to use plain text. The button functionality remains unchanged.

apps/desktop/src/components/toolbar/buttons/delete-note-button.tsx (1)

41-41: LGTM!

The confirmation dialog message has been correctly updated to use a plain string instead of the i18n template literal. The confirm dialog functionality remains intact.

apps/desktop/src/components/settings/views/notifications.tsx (1)

222-391: LGTM!

All form labels and descriptions have been consistently updated to use plain text strings instead of i18n wrappers. The notification settings functionality, including toggles, mutations, and analytics tracking, remains unchanged.

apps/desktop/src/components/individualization-modal/role-view.tsx (1)

3-30: LGTM: i18n removal is clean.

The Trans wrapper removal and string hardcoding is consistent with the PR objective. Text remains clear and appropriate.

apps/desktop/src/components/left-sidebar/top-area/finder-button.tsx (1)

25-25: LGTM: Tooltip text properly hardcoded.

Clean removal of i18n wrapper.

apps/desktop/src/components/settings/views/help-support.tsx (1)

32-105: LGTM: Help & Support text properly localized to English.

All user-facing strings are clear and maintain the original intent. The removal of Trans wrappers is consistent throughout the component.

apps/desktop/src/components/individualization-modal/org-size-view.tsx (1)

3-30: LGTM: Consistent with role-view changes.

Text hardcoding is clean and maintains clarity.

apps/desktop/src/components/settings/views/profile.tsx (1)

118-222: LGTM: Form labels and placeholders properly hardcoded.

The removal of Trans wrappers and t macro usage is thorough. All form field labels, descriptions, and placeholders remain clear and user-friendly.

apps/desktop/src/components/left-sidebar/events-list.tsx (1)

60-192: LGTM: Events list text properly hardcoded.

Section headers ("Upcoming", "No upcoming events") and context menu items ("New window", "View in calendar") are clear and maintain the original functionality.

apps/desktop/src/components/organization-profile/members-list.tsx (1)

26-101: LGTM: Members list text properly hardcoded.

The section header and "more members" message are clear. Dynamic count interpolation is preserved correctly.

apps/desktop/src/components/organization-profile/upcoming-events.tsx (1)

50-85: LGTM: Upcoming events text properly hardcoded.

Section header and empty state message are clear and consistent with the rest of the organization profile components.

apps/desktop/src/components/search-bar.tsx (1)

41-143: LGTM! i18n removal is clean.

The Lingui i18n usage has been correctly removed. The placeholder text is now a static English string, and no unused imports remain.

apps/desktop/src/components/toolbar/buttons/new-window-button.tsx (1)

34-34: LGTM! Tooltip text correctly updated.

The Trans wrapper has been removed and replaced with a plain string. The tooltip functionality remains unchanged.

apps/desktop/src/components/welcome-modal/calendar-permissions-view.tsx (1)

49-156: LGTM! Calendar permissions UI text correctly updated.

All i18n wrappers have been removed and replaced with static English strings. The component logic and user flow remain unchanged.

apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx (1)

289-659: LGTM! LLM configuration UI text correctly updated.

The i18n wrappers have been systematically removed from all labels, descriptions, and UI text across the OpenAI, Gemini, OpenRouter, and custom endpoint sections. The form logic and validation remain intact.

apps/desktop/src/components/welcome-modal/welcome-view.tsx (1)

3-34: LGTM! Welcome view text correctly updated.

The i18n wrappers have been removed from the welcome message and button text. The TextAnimate component now receives a plain string, which is functionally equivalent.

apps/desktop/src/components/editor-area/note-header/title-input.tsx (1)

31-33: LGTM! Placeholder text correctly updated.

The translation macros have been replaced with plain English strings in the placeholder logic. The conditional behavior remains the same.

apps/desktop/src/components/settings/views/ai-llm.tsx (1)

2-723: LGTM! AI LLM settings text correctly updated.

The i18n wrappers have been removed from tab triggers, form labels, tooltips, and descriptions. The settings form logic and conditional rendering remain unchanged.

apps/desktop/src/components/welcome-modal/language-selection-view.tsx (1)

2-180: LGTM! Language selection UI text correctly updated.

All i18n wrappers have been removed and replaced with static English strings throughout the language selection interface. The language management logic remains unchanged.

apps/desktop/src/components/settings/views/integrations.tsx (1)

1-277: LGTM!

The i18n removal is implemented correctly. All Trans-wrapped strings have been replaced with plain English literals, and the component logic remains intact.

apps/desktop/src/components/welcome-modal/custom-endpoint-view.tsx (1)

1-603: LGTM!

The i18n removal is clean and consistent across all provider forms (OpenAI, Gemini, OpenRouter, and custom endpoints). All labels, descriptions, and helper text are now hardcoded English strings.

apps/desktop/src/components/settings/views/team.tsx (1)

1-242: LGTM!

The i18n removal is thorough and consistent across the team management component. All UI text—including the "Coming Soon" overlay, search placeholders, role labels, and modal content—has been properly converted to English literals.

apps/desktop/src/components/left-sidebar/search-list.tsx (1)

1-372: LGTM!

The i18n removal is minimal and correct. Both context menu items ("Open in new window") have been properly converted to plain English strings.

apps/desktop/src/components/toolbar/buttons/left-sidebar-button.tsx (1)

1-38: LGTM!

The i18n removal is straightforward. The tooltip text has been correctly converted to a plain English string while preserving the Shortcut component integration.

apps/desktop/src/components/settings/views/general.tsx (1)

1-452: LGTM!

The i18n removal is comprehensive across all form fields. All labels, descriptions, and placeholder text have been correctly converted to English literals while preserving the form's validation and mutation logic.

apps/desktop/src/components/left-sidebar/notes-list.tsx (1)

1-377: LGTM!

The i18n removal is clean. The confirmation dialog text and all context menu items have been correctly converted to English literals without affecting the component's functionality.

apps/desktop/src/components/welcome-modal/llm-selection-view.tsx (1)

1-103: LGTM!

The i18n removal is complete for this welcome modal view. All UI text—including the heading, description, button label, and helper text—has been properly converted to English literals.

apps/desktop/src/components/settings/components/calendar/calendar-selector.tsx (1)

68-68: LGTM! Straightforward text replacements.

The i18n wrappers have been cleanly replaced with plain English strings. The logic and functionality remain unchanged.

Also applies to: 85-85, 94-94, 100-100

apps/desktop/src/components/editor-area/note-header/chips/event-chip.tsx (3)

201-201: LGTM! Button labels updated.

The button labels are now plain text instead of i18n-wrapped, consistent with the broader i18n removal.

Also applies to: 211-211


470-470: LGTM! Status messages updated.

The loading and empty state messages are now plain text, maintaining clear user feedback.

Also applies to: 478-478


599-599: LGTM! Conditional rendering preserved.

The save button correctly shows "Saving..." during mutation and "Save Date" otherwise.

apps/desktop/src/components/welcome-modal/download-progress-view.tsx (1)

65-65: LGTM! Download UI text updated.

All user-facing text in the download progress view has been converted to plain English strings. The messaging remains clear and informative throughout the download flow.

Also applies to: 200-200, 220-220, 226-226, 254-254, 258-258

apps/desktop/src/components/settings/components/calendar/apple-calendar-integration-details.tsx (1)

66-66: LGTM! Access status text updated.

The calendar and contacts access status messages and button labels have been cleanly converted to plain text while preserving all conditional rendering logic.

Also applies to: 70-71, 82-82, 108-108, 112-113, 124-124

packages/utils/src/datetime.ts (3)

13-31: LGTM! Pluralization logic correctly preserved.

The function correctly handles singular/plural forms inline (e.g., "1 day" vs "2 days later"), maintaining grammatical correctness without i18n.


33-77: LGTM! Date formatting logic preserved.

Both functions maintain their timezone-aware logic while replacing i18n calls with inline string formatting. Error handling with hardcoded messages is acceptable per coding guidelines.

Also applies to: 79-123


145-187: LGTM! Time calculation logic intact.

The functions correctly calculate time differences and format them appropriately. All time unit thresholds and conditional logic remain unchanged from the original implementation.

Also applies to: 189-228

packages/utils/src/datetime.test.ts (1)

1-1: LGTM! Test setup updated appropriately.

The removal of i18n setup from tests aligns with the changes to the datetime utility functions, which now return plain strings instead of i18n-formatted output.

apps/desktop/src/components/finder/views/calendar-view.tsx (2)

8-8: LGTM! Date formatting migrated to local utility.

The format function from @hypr/utils provides timezone-aware date formatting (as shown in the relevant code snippet at packages/utils/src/datetime.ts:3-10), maintaining the same functionality without i18n.

Also applies to: 46-46


63-63: LGTM! Button label updated.

The "Today" button text is now plain text, consistent with other UI changes in this PR.

apps/desktop/src/routes/app.human.$id.tsx (1)

535-535: LGTM! Button text updated.

The "Create" label in the organization selector has been converted to plain text, consistent with the broader i18n removal.

apps/desktop/src/routes/app.index.tsx (1)

12-12: LGTM!

The i18n wrapper has been correctly removed and replaced with a static string.

apps/desktop/src/main.tsx (1)

131-138: LGTM!

The i18n provider has been correctly removed from the rendering tree. The App and Toaster components are now rendered directly without the internationalization wrapper, which aligns with the PR objective.

apps/desktop/src/components/settings/components/template-list.tsx (3)

39-39: LGTM!

The placeholder text has been correctly updated to a static string.


52-52: LGTM!

The section heading has been correctly updated to a static string.


87-87: LGTM!

The section heading has been correctly updated to a static string.

apps/desktop/src/components/settings/components/templates-sidebar.tsx (3)

30-30: LGTM!

The placeholder text has been correctly updated to a static string.


42-42: LGTM!

The section heading has been correctly updated to a static string.


65-65: LGTM!

The section heading has been correctly updated to a static string.

apps/desktop/src/components/settings/views/templates.tsx (2)

253-253: LGTM!

The conditional button text has been correctly updated to static strings.


277-277: LGTM!

All UI text strings have been correctly updated from i18n wrappers to static English strings, consistent with the PR objective.

Also applies to: 292-292, 306-306, 311-311, 343-346, 356-356

apps/desktop/src/routes/app.settings.tsx (1)

89-105: Verify that the analytics side effect aligns with PR scope.

This PR adds new analytics tracking functionality beyond the stated objective of removing i18n. The useEffect emits analytics events when the tab or userId changes, which is new behavior not present in the original code.

Was this analytics functionality intentionally included in this PR, or should it be in a separate PR focused on analytics improvements?

apps/desktop/src/components/settings/views/template.tsx (1)

204-204: LGTM!

All labels, placeholders, and headings have been correctly updated from i18n wrappers to static English strings.

Also applies to: 228-228, 237-237, 247-247, 257-257, 276-276, 282-282, 306-306, 310-310, 313-313, 323-323, 356-356, 414-414

apps/desktop/src/components/settings/components/ai/stt-view-remote.tsx (1)

101-101: LGTM! I18n removal aligns with PR objectives.

The replacement of Lingui-wrapped strings with hardcoded English text is consistent across all UI labels and descriptions, maintaining the existing component structure and functionality.

Also applies to: 135-135, 143-143, 163-163, 171-171, 191-191, 199-199

{/* Main Title */}
<h2 className="mb-4 text-center text-xl font-semibold text-neutral-800">
<Trans>Help us tailor your Hyprnote experience</Trans>
Help us tailor your Hyprnote experience
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Clean removal of i18n wrappers.

The transition from Trans-wrapped strings to plain English text is correct and consistent with the PR's objective to remove i18n. The hardcoded strings are clear and the component logic remains intact.

Run the following script to verify that Lingui dependencies have been removed from package manifests:

Also applies to: 67-67, 127-127


🏁 Script executed:

#!/bin/bash
# Verify @lingui packages are removed from all package.json files
fd -e json package.json --exec sh -c 'echo "=== {} ===" && cat {} | jq -r ".dependencies, .devDependencies | select(. != null) | keys[]" | grep -i lingui || echo "No lingui deps found"'

Length of output: 16634


🏁 Script executed:

#!/bin/bash
# Check for any @lingui references in all package.json files
grep -R '"@lingui' -n .

Length of output: 26136


Remove leftover Lingui configuration and dependencies
Lingui is still referenced in apps/desktop:

  • package.json lists @lingui/core, @lingui/react, @lingui/cli, @lingui/babel-plugin-lingui-macro, @lingui/vite-plugin
  • lingui.config.js remains
  • vite.config.ts imports and uses the @lingui plugin
  • locale files under apps/desktop/src/locales import @lingui/core

Delete or update these to fully remove i18n before merging.

Comment on lines +109 to +121
<span
className="text-blue-500 hover:underline"
onClick={() => openUrl("https://deepgram.com")}
>
Deepgram
</span>{" "}
directly, or use{" "}
<span
className="text-blue-500 hover:underline"
onClick={() => openUrl("https://docs.hyprnote.com/owhisper/what-is-this")}
>
OWhisper
</span>{" "}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add event propagation control to clickable links.

The clickable span elements opening external URLs will also trigger the parent div's onClick handler (line 92), causing unintended provider selection. This is inconsistent with the pattern used for Input fields (e.g., line 150), which call stopPropagation() to prevent bubbling.

Apply this diff to prevent event bubbling:

                  <span
                    className="text-blue-500 hover:underline"
-                    onClick={() => openUrl("https://deepgram.com")}
+                    onClick={(e) => {
+                      e.stopPropagation();
+                      openUrl("https://deepgram.com");
+                    }}
                  >
                    Deepgram
                  </span>{" "}
                  directly, or use{" "}
                  <span
                    className="text-blue-500 hover:underline"
-                    onClick={() => openUrl("https://docs.hyprnote.com/owhisper/what-is-this")}
+                    onClick={(e) => {
+                      e.stopPropagation();
+                      openUrl("https://docs.hyprnote.com/owhisper/what-is-this");
+                    }}
                  >
                    OWhisper
                  </span>{" "}

Additionally, consider using semantic HTML elements (button or a tag) with proper keyboard navigation support for better accessibility:

<button
  type="button"
  className="text-blue-500 hover:underline cursor-pointer"
  onClick={(e) => {
    e.stopPropagation();
    openUrl("https://deepgram.com");
  }}
>
  Deepgram
</button>
🤖 Prompt for AI Agents
In apps/desktop/src/components/settings/components/ai/stt-view-remote.tsx around
lines 109 to 121, the clickable span elements opening external URLs bubble up to
the parent div's onClick (line 92) and unintentionally trigger provider
selection; update each link handler to call event.stopPropagation() before
calling openUrl (or replace spans with semantic <button type="button"> or <a>
elements and call e.stopPropagation() in their onClick) so clicks open the
external URL without triggering the parent click handler and preserve keyboard
accessibility.

<div className="flex gap-2">
<Input
placeholder={t`Email separated by commas`}
placeholder={"Email separated by commas"}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Improve placeholder text grammar.

The placeholder text "Email separated by commas" is grammatically awkward. Consider using "Emails separated by commas" or "Email addresses separated by commas" for better clarity.

Apply this diff:

-          placeholder={"Email separated by commas"}
+          placeholder={"Emails separated by commas"}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
placeholder={"Email separated by commas"}
placeholder={"Emails separated by commas"}
🤖 Prompt for AI Agents
In apps/desktop/src/components/share-and-permission/invite-list.tsx around line
21, the placeholder text "Email separated by commas" is grammatically awkward;
update it to a clearer phrase such as "Emails separated by commas" or "Email
addresses separated by commas" by replacing the existing placeholder string
accordingly.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 4, 2025

✅ Actions performed

Reviews paused.

@yujonglee yujonglee merged commit 6c29832 into main Oct 4, 2025
6 checks passed
@yujonglee yujonglee deleted the remove-i18n branch October 4, 2025 10:02
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