Skip to content

Conversation

imnasnainaec
Copy link
Collaborator

No description provided.

@github-actions github-actions bot added the 💻 FW Lite issues related to the fw lite application, not miniLcm or crdt related label Jul 25, 2025
Copy link

coderabbitai bot commented Jul 25, 2025

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

📝 Walkthrough

Walkthrough

This change updates localization JSON files for English, Spanish, French, Indonesian, and Korean, adding numerous new translation keys related to audio features, filtering, synchronization, and UI labels. The README for the frontend viewer receives editorial and formatting improvements. No code or functional changes are introduced.

Changes

Files Change Summary
frontend/viewer/README.md Editorial and formatting improvements: capitalization, punctuation, clarity, and line breaks.
frontend/viewer/src/locales/en.json Adds new English translation keys for audio, filtering, sync, and UI labels; minor punctuation.
frontend/viewer/src/locales/es.json
frontend/viewer/src/locales/fr.json
frontend/viewer/src/locales/id.json
frontend/viewer/src/locales/ko.json
Adds new translation keys (with empty translations) for audio, filtering, sync, and UI labels; updates origin references.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Possibly related PRs

Suggested labels

💻 FW Lite

Suggested reviewers

  • hahn-kev

Poem

A hop and a skip, new words in the air,
Audio and filters, translations to share.
From English to French, and Spanish anew,
Korean and Indonesian join the crew.
README’s now clearer, the docs shining bright—
A rabbit’s delight in languages’ light!
🐇✨

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch i18n-extract

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

github-actions bot commented Jul 25, 2025

UI unit Tests

  1 files   38 suites   19s ⏱️
 80 tests  80 ✅ 0 💤 0 ❌
111 runs  111 ✅ 0 💤 0 ❌

Results for commit 0b0c343.

♻️ This comment has been updated with latest results.

Copy link

argos-ci bot commented Jul 25, 2025

The latest updates on your projects. Learn more about Argos notifications ↗︎

Build Status Details Updated (UTC)
default (Inspect) ✅ No changes detected - Jul 29, 2025, 8:00 AM

Copy link

github-actions bot commented Jul 25, 2025

C# Unit Tests

126 tests   126 ✅  12s ⏱️
 20 suites    0 💤
  1 files      0 ❌

Results for commit 0b0c343.

♻️ This comment has been updated with latest results.

Copy link

@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: 2

🧹 Nitpick comments (11)
frontend/viewer/src/locales/en.json (3)

482-493: Duplicate key differs only by title-case – pick one style

"Citation Form" was just introduced, but "Citation form" already exists at lines 471-480. Two almost-identical strings will show up in menus and filters and look like a typo to users. Decide on one canonical label (sentence-case or title-case) and remove the other.

-    "message": "Citation Form",
+    "message": "Citation form",

1487-1497: Same issue for “Lexeme Form” vs “Lexeme form”

The new title-case variant duplicates the existing sentence-case key. Align the casing with the earlier entry to avoid UI inconsistency.

-    "message": "Lexeme Form",
+    "message": "Lexeme form",

314-325: Ambiguous wording “Any Ws”

End-users are unlikely to understand what “Ws” means. Spell it out (“Any writing system”) or at least use capital “WS” if that acronym is established in your UI copy guidelines.

frontend/viewer/README.md (3)

5-8: Convert bare URLs to Markdown links

markdownlint flags the raw URLs on lines 5-6 (MD034). Wrap them in angle brackets or standard link syntax to silence the linter and improve readability.

-We're using a different library here from the lexbox UI. The core lib is https://lingui.dev/
-with a Svelte plugin https://github.com/HenryLie/svelte-i18n-lingui
+We're using a different library here from the Lexbox UI.  
+The core library is <https://lingui.dev/> with a Svelte plugin at <https://github.com/HenryLie/svelte-i18n-lingui>.

20-21: Avoid casual “If you want” phrasing

Minor style nit: replace conversational wording with concise instruction, e.g. “You can then feed those files to an AI translator…”.


37-41: ShadCN command – keep version pin explicit

pnpx shadcn-svelte@next will always pull the latest prerelease and may introduce breaking changes. Pin to a known good version (e.g., @0.6.3) or document that the project deliberately tracks next.

frontend/viewer/src/locales/fr.json (3)

82-93: Prefer French abbreviation “Mo” instead of “MB”.

If you leave the translation blank, the UI will fall back to “MB”, which is unfamiliar to many French users.
Proposed quick fix:

-    "translation": ""
+    "translation": "{0} Mo"

482-493: Potential duplicate keys differ only by capitalisation (“Citation form” vs “Citation Form”, “Lexeme form” vs “Lexeme Form”).

Unless both variants are required by design, keeping only one prevents accidental inconsistency and eases translators’ work. Double-check in code whether both IDs are actually consumed.

Also applies to: 1475-1497


194-209: Many new audio / filter strings still untranslated.

It’s fine to merge with blanks, but consider at least adding TODO comments in Crowdin/POEditor so translators see the new keys immediately.

Also applies to: 350-361, 646-657, 866-877, 922-945, 1002-1013, 1890-1901, 2398-2409, 2626-2637

frontend/viewer/src/locales/id.json (2)

82-93: Localise unit abbreviation to “MB” or “MiB” consistently.

Indonesian UI sometimes chooses to keep English units. Decide whether you want to keep “MB” or localise (e.g. still “MB”, no full-width space) and set the translation accordingly to avoid fallback logic.

-    "translation": ""
+    "translation": "{0} MB"

482-493: Duplicate keys with only first-letter case difference.

"Citation form"/"Citation Form" and "Lexeme form"/"Lexeme Form" appear again. Validate that the UI really needs both—otherwise translators will have to maintain two identical strings.

Also applies to: 1475-1497

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ad0c31a and ace2d00.

📒 Files selected for processing (6)
  • frontend/viewer/README.md (1 hunks)
  • frontend/viewer/src/locales/en.json (78 hunks)
  • frontend/viewer/src/locales/es.json (78 hunks)
  • frontend/viewer/src/locales/fr.json (79 hunks)
  • frontend/viewer/src/locales/id.json (78 hunks)
  • frontend/viewer/src/locales/ko.json (78 hunks)
🧰 Additional context used
🧠 Learnings (7)
📓 Common learnings
Learnt from: myieye
PR: sillsdev/languageforge-lexbox#1720
File: frontend/viewer/src/locales/es.json:1786-1790
Timestamp: 2025-06-02T14:27:02.745Z
Learning: Spanish locale file (frontend/viewer/src/locales/es.json) contains generated code that may have null line numbers in origin entries due to limitations in the code generation process.
frontend/viewer/README.md (1)

Learnt from: rmunn
PR: #1836
File: frontend/viewer/src/lib/components/audio/AudioDialog.svelte:25-25
Timestamp: 2025-07-22T09:19:37.386Z
Learning: In the sillsdev/languageforge-lexbox project, when file size limits or other constants need to be shared between C# backend and TypeScript frontend code, prefer exposing them through Reinforced.Typings type generation rather than hardcoding the values separately. This ensures consistency and prevents discrepancies when values change.

frontend/viewer/src/locales/id.json (2)

Learnt from: myieye
PR: #1720
File: frontend/viewer/src/locales/es.json:1786-1790
Timestamp: 2025-06-02T14:27:02.745Z
Learning: Spanish locale file (frontend/viewer/src/locales/es.json) contains generated code that may have null line numbers in origin entries due to limitations in the code generation process.

Learnt from: hahn-kev
PR: #1757
File: frontend/viewer/src/lib/components/field-editors/multi-select.svelte:130-136
Timestamp: 2025-06-18T05:13:00.591Z
Learning: In frontend/viewer/src/lib/components/field-editors/multi-select.svelte, the computeCommandScore function from 'bits-ui' handles empty filter strings appropriately and does not hide all options when the filter is empty, contrary to initial analysis assumptions.

frontend/viewer/src/locales/en.json (3)

Learnt from: myieye
PR: #1720
File: frontend/viewer/src/locales/es.json:1786-1790
Timestamp: 2025-06-02T14:27:02.745Z
Learning: Spanish locale file (frontend/viewer/src/locales/es.json) contains generated code that may have null line numbers in origin entries due to limitations in the code generation process.

Learnt from: hahn-kev
PR: #1757
File: frontend/viewer/src/lib/components/field-editors/multi-select.svelte:130-136
Timestamp: 2025-06-18T05:13:00.591Z
Learning: In frontend/viewer/src/lib/components/field-editors/multi-select.svelte, the computeCommandScore function from 'bits-ui' handles empty filter strings appropriately and does not hide all options when the filter is empty, contrary to initial analysis assumptions.

Learnt from: rmunn
PR: #1650
File: frontend/src/lib/i18n/locales/en.json:671-681
Timestamp: 2025-05-13T09:50:00.358Z
Learning: The Lexbox project uses the \n\ pattern at the end of lines in JSON locale files to handle multiline strings, where the \n represents a newline character and the trailing backslash indicates line continuation. Standard JSON validators may flag this as invalid, but it's an established convention in the project that their tooling supports.

frontend/viewer/src/locales/ko.json (2)

Learnt from: myieye
PR: #1720
File: frontend/viewer/src/locales/es.json:1786-1790
Timestamp: 2025-06-02T14:27:02.745Z
Learning: Spanish locale file (frontend/viewer/src/locales/es.json) contains generated code that may have null line numbers in origin entries due to limitations in the code generation process.

Learnt from: hahn-kev
PR: #1757
File: frontend/viewer/src/lib/components/field-editors/multi-select.svelte:130-136
Timestamp: 2025-06-18T05:13:00.591Z
Learning: In frontend/viewer/src/lib/components/field-editors/multi-select.svelte, the computeCommandScore function from 'bits-ui' handles empty filter strings appropriately and does not hide all options when the filter is empty, contrary to initial analysis assumptions.

frontend/viewer/src/locales/fr.json (2)

Learnt from: myieye
PR: #1720
File: frontend/viewer/src/locales/es.json:1786-1790
Timestamp: 2025-06-02T14:27:02.745Z
Learning: Spanish locale file (frontend/viewer/src/locales/es.json) contains generated code that may have null line numbers in origin entries due to limitations in the code generation process.

Learnt from: hahn-kev
PR: #1757
File: frontend/viewer/src/lib/components/field-editors/multi-select.svelte:130-136
Timestamp: 2025-06-18T05:13:00.591Z
Learning: In frontend/viewer/src/lib/components/field-editors/multi-select.svelte, the computeCommandScore function from 'bits-ui' handles empty filter strings appropriately and does not hide all options when the filter is empty, contrary to initial analysis assumptions.

frontend/viewer/src/locales/es.json (2)

Learnt from: myieye
PR: #1720
File: frontend/viewer/src/locales/es.json:1786-1790
Timestamp: 2025-06-02T14:27:02.745Z
Learning: Spanish locale file (frontend/viewer/src/locales/es.json) contains generated code that may have null line numbers in origin entries due to limitations in the code generation process.

Learnt from: hahn-kev
PR: #1757
File: frontend/viewer/src/lib/components/field-editors/multi-select.svelte:130-136
Timestamp: 2025-06-18T05:13:00.591Z
Learning: In frontend/viewer/src/lib/components/field-editors/multi-select.svelte, the computeCommandScore function from 'bits-ui' handles empty filter strings appropriately and does not hide all options when the filter is empty, contrary to initial analysis assumptions.

🪛 LanguageTool
frontend/viewer/README.md

[style] ~20-~20: This phrasing can be overused. Try elevating your writing with a more formal alternative.
Context: ...update the files under /src/locales/. If you want, you can then feed those files to an AI...

(IF_YOU_WANT)

🪛 markdownlint-cli2 (0.17.2)
frontend/viewer/README.md

5-5: Bare URL used

(MD034, no-bare-urls)


6-6: Bare URL used

(MD034, no-bare-urls)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
  • GitHub Check: Build UI / publish-ui
  • GitHub Check: Build API / publish-api
  • GitHub Check: check-and-lint
  • GitHub Check: frontend-component-unit-tests
  • GitHub Check: frontend
  • GitHub Check: Build FW Lite and run tests
🔇 Additional comments (6)
frontend/viewer/src/locales/en.json (4)

2819-2830: “Writing System(s)” label collision

"Writing System" (singular) and "Writing Systems" (plural) make sense, but adding an identical singular string here without context (“Writing System” in a filter vs. a label) risks translators mapping them differently. Consider adding descriptive comments or renaming keys to clarify their usage (e.g. "writingSystemFilterLabel").


2387-2397: Redundant size prefix

"Size:" duplicates information already given by {0} MB (key ZTysYT). Unless both are needed in different components, consider removing one to keep the UI minimal.


1400-1409: Hard-wrapped newline escapes – verify rendering

"Hold to record or\\npress and release to start recording." embeds an escaped newline. Ensure the consumer component interprets \n correctly; otherwise the literal “\n” will appear to users.


1675-1777: Plural-form “audio” strings added – looks good

All newly added audio-related messages (“Add/Remove/Replace/Save audio”, “No audio”, etc.) are self-consistent and placeholder-free. 👍

frontend/viewer/src/locales/fr.json (1)

146-161: Fill obvious one-word translations to avoid English fall-backs.

Keys like "Field" (AXjA78) and "Filter for" (BkugWJ) are trivial to translate (e.g. Champ, Filtrer par). Supplying them now prevents mixed-language UI snippets later.

frontend/viewer/src/locales/id.json (1)

195-209: Same untranslated block as French – add at least placeholders.

For fast-moving features (audio editor, filters) consider adding Indonesian stubs ("Tambahkan audio", "Buang", etc.) to minimise mixed-language UI.

Also applies to: 350-361, 646-657, 866-877, 922-945, 1002-1013, 1890-1901, 2398-2409, 2626-2637

@hahn-kev
Copy link
Collaborator

taking over this PR as I actually want to change our format to support Crowdin

@hahn-kev hahn-kev merged commit e1dab17 into develop Jul 29, 2025
22 checks passed
@hahn-kev hahn-kev deleted the i18n-extract branch July 29, 2025 08:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

💻 FW Lite issues related to the fw lite application, not miniLcm or crdt related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants