Skip to content

feat(i18n): add French locale#1438

Merged
src-opn merged 2 commits into
different-ai:devfrom
Pagecran:feat/french-localization
Apr 13, 2026
Merged

feat(i18n): add French locale#1438
src-opn merged 2 commits into
different-ai:devfrom
Pagecran:feat/french-localization

Conversation

@pascalandr
Copy link
Copy Markdown
Contributor

Summary

  • add a full French locale for the OpenWork app
  • register fr in the locale registry and language picker
  • keep key and placeholder coverage aligned with the English source locale

Testing

  • node scripts/i18n-audit.mjs --missing
  • custom en/fr key and placeholder audit (2075 keys, 0 missing, 0 extra, 0 placeholder mismatches)
  • pnpm --filter @openwork/app typecheck (fails on a pre-existing unrelated React typing issue in apps/app/src/react/session/markdown.react.tsx:100)

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 12, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
openwork-landing Ready Ready Preview, Comment, Open in v0 Apr 13, 2026 1:51pm

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 12, 2026

@pascalandr is attempting to deploy a commit to the Different AI Team on Vercel.

A member of the Team first needs to authorize it.

@github-actions
Copy link
Copy Markdown
Contributor

The following comment was made by an LLM, it may be inaccurate:

@jcllobet
Copy link
Copy Markdown
Collaborator

jcllobet commented Apr 12, 2026

@pascalandr can you also add french to the audit script and check the results? ../openwork/scripts/i18n-audit.mjs.

 - const LOCALES = ["ja", "zh", "vi", "pt-BR", "th"];                           
  + const LOCALES = ["ja", "zh", "vi", "pt-BR", "th", "fr"];                     

Tagging @johnnyshields so he can comment on what we want to do missing_keys and unused_keys in a potential PR that cleans it up afterwards:

This is what I got from the audit report:

╔══════════════════════════════════════════════════╗
    ║              i18n Audit Report                   ║
    ╚══════════════════════════════════════════════════╝

    === Key counts ===
      en       2075 keys (source of truth)
      ja       2043 keys (98%)
      zh       2043 keys (98%)
      vi       2043 keys (98%)
      pt-BR    2043 keys (98%)
      th       2043 keys (98%)
      fr       2075 keys (100%)

    === Missing keys (in en.ts but not in locale) ===
      ja: ✗ 32 missing
          17  den.*
          15  skills.*
      zh: ✗ 32 missing
          17  den.*
          15  skills.*
      vi: ✗ 32 missing
          17  den.*
          15  skills.*
      pt-BR: ✗ 32 missing
          17  den.*
          15  skills.*
      th: ✗ 32 missing
          17  den.*
          15  skills.*
      fr: ✓ no missing

    === Orphan keys (in locale but not in en.ts) ===
      ja: ✓ no orphans
      zh: ✓ no orphans
      vi: ✓ no orphans
      pt-BR: ✓ no orphans
      th: ✓ no orphans
      fr: ✓ no orphans

    === Duplicate keys ===
      en: ✓ no duplicates
      ja: ✓ no duplicates
      zh: ✓ no duplicates
      vi: ✓ no duplicates
      pt-BR: ✓ no duplicates
      th: ✓ no duplicates
      fr: ✓ no duplicates

    === Unused keys (in en.ts but never referenced in repo) ===
      ⚠ 292 potentially unused keys
          62  dashboard.*
          57  onboarding.*
          45  share.*
          21  session.*
          19  inbox_panel.*
          16  sidebar.*
          14  skills.*
          11  settings.*
           7  context_panel.*
           7  share_skill_destination.*
           7  workspace.*
           7  workspace_sidebar.*
           6  config.*
           6  mcp.*
           4  workspace_list.*

    === Dangling t() calls (keys not in en.ts) ===
      ✓ all t() keys exist in en.ts

    === Dynamic t() calls (keys built at runtime) ===
      ✓ no dynamic key construction

    === Placeholder integrity ===
      ✗ ja/den.status_loaded_orgs: missing placeholder {plural}
      ✗ zh/den.status_loaded_orgs: missing placeholder {plural}
      ✗ th/den.status_loaded_orgs: missing placeholder {plural}
      ✗ ja/den.status_loaded_templates: missing placeholder {plural}
      ✗ zh/den.status_loaded_templates: missing placeholder {plural}
      ✗ th/den.status_loaded_templates: missing placeholder {plural}
      ✗ ja/den.status_loaded_workers: missing placeholder {plural}
      ✗ zh/den.status_loaded_workers: missing placeholder {plural}
      ✗ th/den.status_loaded_workers: missing placeholder {plural}
      ✗ ja/message_list.subagent_message_count: missing placeholder {plural}
      ✗ zh/message_list.subagent_message_count: missing placeholder {plural}
      ✗ th/message_list.subagent_message_count: missing placeholder {plural}
      ✗ ja/onboarding.folders_allowed: missing placeholder {plural}
      ✗ zh/onboarding.folders_allowed: missing placeholder {plural}
      ✗ th/onboarding.folders_allowed: missing placeholder {plural}
      ✗ ja/session.show_earlier: missing placeholder {plural}
      ✗ zh/session.show_earlier: missing placeholder {plural}
      ✗ th/session.show_earlier: missing placeholder {plural}
      ✗ ja/status.providers_connected: missing placeholder {plural}
      ✗ zh/status.providers_connected: missing placeholder {plural}
      ✗ th/status.providers_connected: missing placeholder {plural}
      ✗ 21 placeholder issues

    === Done ===
    Run with --missing, --orphan, --duplicates, --unused, --dangling,
    --placeholders, --hardcoded, --prune, or --sort for a single check.
    [rerun: b12]
    ```

@jcllobet
Copy link
Copy Markdown
Collaborator

@OmarMcAdam I played around with french a bit and it seems to 1) work 2) not break for other languages (eg: English).

@pascalandr
Copy link
Copy Markdown
Contributor Author

@jcllobet
Added \fr to scripts/i18n-audit.mjs and reran the audit. French is clean: 2075 keys, no missing/orphan/duplicate keys, and no placeholder issues. The remaining missing keys / placeholder issues are pre-existing in other locales only.

@src-opn src-opn merged commit 2ffdf5d into different-ai:dev Apr 13, 2026
9 of 13 checks passed
benjaminshafii pushed a commit that referenced this pull request May 15, 2026
* feat(i18n): add French locale

* chore(i18n): include French in audit script
benjaminshafii pushed a commit that referenced this pull request May 15, 2026
* feat(i18n): add French locale

* chore(i18n): include French in audit script
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.

3 participants