Skip to content

Translations update from Hosted Weblate#10120

Merged
eliandoran merged 7 commits into
TriliumNext:mainfrom
weblate:weblate-trilium-client
Jun 11, 2026
Merged

Translations update from Hosted Weblate#10120
eliandoran merged 7 commits into
TriliumNext:mainfrom
weblate:weblate-trilium-client

Conversation

@weblate

@weblate weblate commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Translations update from Hosted Weblate for Trilium Notes/Client.

It also includes following components:

Current translation status:

Weblate translation status

@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Jun 11, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request updates translation files across multiple languages for both client and server assets, removing obsolete ribbon widget translations and adding new strings for features such as tab pinning, spreadsheet exporting, image viewing, and security settings. Feedback on the changes highlights an issue in the Traditional Chinese (tw) translation file, where several pluralized _other keys were added as empty strings. Since Traditional Chinese does not distinguish plural forms, leaving these keys empty will result in blank text in the UI; they should instead be populated with the same translations as their corresponding _one keys.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment on lines +817 to +818
"open_all_confirm_one": "這將在新分頁中開啟 {{count}} 則筆記。要繼續嗎?",
"open_all_confirm_other": ""

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

In Traditional Chinese (tw), there is no plural form distinction. Leaving the _other key as an empty string will cause the application to render empty text in the UI when a pluralized translation is resolved. It should be populated with the same translation as the _one key.

Suggested change
"open_all_confirm_one": "這將在新分頁中開啟 {{count}} 則筆記。要繼續嗎?",
"open_all_confirm_other": ""
"open_all_confirm_one": "這將在新分頁中開啟 {{count}} 則筆記。要繼續嗎?",
"open_all_confirm_other": "這將在新分頁中開啟 {{count}} 則筆記。要繼續嗎?"

Comment on lines 862 to +863
"subtree_size_one": "(子階層大小: {{size}}, 共計 {{count}} 個筆記)",
"subtree_size_other": "",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

In Traditional Chinese (tw), there is no plural form distinction. Leaving the _other key as an empty string will cause the application to render empty text in the UI when a pluralized translation is resolved. It should be populated with the same translation as the _one key.

    "subtree_size_one": "(子階層大小: {{size}}, 共計 {{count}} 個筆記)",
    "subtree_size_other": "(子階層大小: {{size}}, 共計 {{count}} 個筆記)"

Comment on lines +874 to +875
"too-many-notes_one": "此子樹包含 {{count}} 則筆記,已超過筆記地圖中可顯示的 {{max}} 則上限。",
"too-many-notes_other": ""

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

In Traditional Chinese (tw), there is no plural form distinction. Leaving the _other key as an empty string will cause the application to render empty text in the UI when a pluralized translation is resolved. It should be populated with the same translation as the _one key.

Suggested change
"too-many-notes_one": "此子樹包含 {{count}} 則筆記,已超過筆記地圖中可顯示的 {{max}} 則上限。",
"too-many-notes_other": ""
"too-many-notes_one": "此子樹包含 {{count}} 則筆記,已超過筆記地圖中可顯示的 {{max}} 則上限。",
"too-many-notes_other": "此子樹包含 {{count}} 則筆記,已超過筆記地圖中可顯示的 {{max}} 則上限。"

Comment on lines 1522 to +1523
"converted-to-attachments_one": "{{count}} 個筆記已被轉換為附件。",
"converted-to-attachments_other": "",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

In Traditional Chinese (tw), there is no plural form distinction. Leaving the _other key as an empty string will cause the application to render empty text in the UI when a pluralized translation is resolved. It should be populated with the same translation as the _one key.

    "converted-to-attachments_one": "{{count}} 個筆記已被轉換為附件。",
    "converted-to-attachments_other": "{{count}} 個筆記已被轉換為附件。"

Comment on lines 2094 to +2095
"total_notes_one": "{{count}} 筆記",
"total_notes_other": "",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

In Traditional Chinese (tw), there is no plural form distinction. Leaving the _other key as an empty string will cause the application to render empty text in the UI when a pluralized translation is resolved. It should be populated with the same translation as the _one key.

    "total_notes_one": "{{count}} 筆記",
    "total_notes_other": "{{count}} 筆記"

Comment on lines 2194 to +2195
"tab_width_spaces_one": "{{count}} 個空格",
"tab_width_spaces_other": "",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

In Traditional Chinese (tw), there is no plural form distinction. Leaving the _other key as an empty string will cause the application to render empty text in the UI when a pluralized translation is resolved. It should be populated with the same translation as the _one key.

    "tab_width_spaces_one": "{{count}} 個空格",
    "tab_width_spaces_other": "{{count}} 個空格"

@greptile-apps

greptile-apps Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Translation updates across 20 locale files for the client, server, and website components. German and French receive the most substantial additions (security settings dialog, tab pinning, image/audio navigation, mermaid error messages, spreadsheet export strings, and snippet badge labels), while most other locales remove the deprecated ribbon.widgets and ribbon.promoted_attributes_message keys now that the ribbon has been replaced by the new layout.

  • Plural form fixes (de, fr): Previously empty _other/_many plural slots are filled with correct singular/plural distinctions, resolving blank text in those locales for count > 1.
  • New feature strings (de, fr, it, ja): Security settings, tab pinning, AI/LLM standalone disclaimer, anonymized database UI, and backup location strings added.
  • tw/translation.json issue: Six plural _other keys are introduced as explicit empty strings, which i18next will render as blank — the _one strings should be copied across since Chinese has no plural distinction.

Confidence Score: 4/5

Safe to merge with the caveat that Traditional Chinese users will see blank text in plural contexts until the empty _other strings in tw/translation.json are corrected.

All other locales are handled correctly — German and French plural fixes are complete and new keys are well-formed. The only defect is the six empty _other plural slots added in tw/translation.json, which will silently render nothing for Traditional Chinese users whenever a count greater than 1 is displayed in the affected UI strings.

apps/client/src/translations/tw/translation.json — the six newly added _other plural keys (open_all_confirm_other, subtree_size_other, too-many-notes_other, converted-to-attachments_other, total_notes_other, tab_width_spaces_other) are all empty strings and should mirror their corresponding _one values.

Important Files Changed

Filename Overview
apps/client/src/translations/tw/translation.json Adds 6 plural keys but leaves all _other forms as empty strings, causing blank UI text when count > 1; removes deprecated ribbon keys.
apps/client/src/translations/de/translation.json Correctly fills all _one/_other plural pairs, adds new keys for security, tab pinning, image navigation, mermaid errors, snippet badge, and spreadsheet export; removes deprecated ribbon keys.
apps/client/src/translations/fr/translation.json Correctly fills all _one/_many/_other plural forms previously blank; adds new keys for security, tab pinning, mermaid errors, image navigation, snippet badge, and spreadsheet export; removes deprecated ribbon keys.
apps/client/src/translations/it/translation.json Adds new ETAPI, backup, AI/LLM, and options keys; fixes backup frequency label gender agreement; removes deprecated ribbon keys.
apps/client/src/translations/ja/translation.json Adds new backup, anonymized DB, AI/LLM, and options keys; removes deprecated ribbon keys.
apps/server/src/assets/translations/de/server.json Adds security-dialog, security-title, markdown-snippet, and code-snippet translation keys for the new security settings dialog.
apps/server/src/assets/translations/fr/server.json Adds security-dialog, security-title, markdown-snippet, and code-snippet translation keys for the new security settings dialog.
apps/client/src/translations/ar/translation.json Removes deprecated ribbon.widgets and ribbon.promoted_attributes_message keys; retains edited_notes_message.
apps/client/src/translations/cn/translation.json Removes deprecated ribbon.widgets and ribbon.promoted_attributes_message keys.
apps/client/src/translations/ro/translation.json Removes deprecated ribbon.widgets and ribbon.promoted_attributes_message keys.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Translation PR\n20 files changed] --> B[Deprecated Key Removal]
    A --> C[Plural Form Fixes]
    A --> D[New Key Additions]

    B --> B1["ribbon.widgets removed\n14 locales: ar, cn, cs, de, es,\nga, hi, id, it, ja, pl, pt,\npt_br, ro, ru, tw, uk"]
    B --> B2["ribbon.promoted_attributes_message\nremoved from 14+ locales"]

    C --> C1["de: _other forms filled\nopen_all_confirm, subtree_size,\ntoo-many-notes, converted-to-attachments,\ntotal_notes, tab_width_spaces ✅"]
    C --> C2["fr: _other + _many forms filled\nsame 6 key groups ✅"]
    C --> C3["tw: _other forms added\nbut all set to empty string ⚠️"]

    D --> D1["de + fr client:\nsecurity, tab pinning, image nav,\nmermaid errors, spreadsheet export,\nsnippet badge"]
    D --> D2["de + fr server:\nsecurity-dialog keys,\nsecurity-title, snippet types"]
    D --> D3["it + ja:\nbackup location, anonymized DB,\nAI/LLM, options keys"]
Loading

Comments Outside Diff (1)

  1. apps/client/src/translations/tw/translation.json, line 743 (link)

    P1 Empty plural _other forms render blank text for count > 1

    Six new plural keys are added with "" as the _other value: open_all_confirm_other, subtree_size_other, too-many-notes_other, converted-to-attachments_other, total_notes_other, and tab_width_spaces_other. i18next treats an explicit empty string as the resolved value and does not fall back to the _one form, so any UI path that uses count > 1 will display nothing for Traditional Chinese users. Since Chinese has no grammatical plural distinction, these _other values should mirror the corresponding _one strings rather than remain empty.

    Fix in Claude Code

Fix All in Claude Code

Reviews (3): Last reviewed commit: "Translated using Weblate (Japanese)" | Re-trigger Greptile

@codecov

codecov Bot commented Jun 11, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@codecov

codecov Bot commented Jun 11, 2026

Copy link
Copy Markdown

Bundle Report

Bundle size has no change ✅

Affected Assets, Files, and Routes:

view changes for bundle: client-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
src/dist-*.js 1 bytes 57 bytes 1.79%
src/dist-*.js -1 bytes 56 bytes -1.75%

1270o1 and others added 7 commits June 11, 2026 20:47
Currently translated at 99.9% (2203 of 2204 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
Currently translated at 99.9% (2203 of 2204 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/fr/
Currently translated at 100.0% (404 of 404 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/
Currently translated at 100.0% (404 of 404 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/fr/
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
Currently translated at 99.9% (2210 of 2211 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/
Currently translated at 99.9% (2210 of 2211 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
@weblate weblate force-pushed the weblate-trilium-client branch from fc76e75 to 67f41bf Compare June 11, 2026 18:48
@eliandoran eliandoran merged commit b46b4a7 into TriliumNext:main Jun 11, 2026
12 checks passed
@eliandoran eliandoran added this to the v0.104.0 milestone Jun 11, 2026
@dosubot dosubot Bot added the lgtm This PR has been approved by a maintainer label Jun 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lgtm This PR has been approved by a maintainer size:XS This PR changes 0-9 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants