Skip to content

chore(i18n): update translations from Weblate#2680

Merged
fallenbagel merged 1 commit intodevelopfrom
weblate/translations-frontend
Mar 12, 2026
Merged

chore(i18n): update translations from Weblate#2680
fallenbagel merged 1 commit intodevelopfrom
weblate/translations-frontend

Conversation

@seerr-automation-bot
Copy link
Copy Markdown
Contributor

@seerr-automation-bot seerr-automation-bot commented Mar 11, 2026

Translations update from Weblate for Seerr/Seerr Frontend.

Current translation status:

Weblate translation status

Summary by CodeRabbit

  • Localization
    • Removed the Beta warning message from the About/Settings screen across many locales.
    • Expanded and completed translations for webhook custom headers, API timeout labels/tips, notification priority/validation, discover time-window options, monitor-new-item labels, blocklist and metadata texts, and many other UI strings.
    • Added new empty locale placeholders to enable additional language support and improved translation coverage.

@seerr-automation-bot seerr-automation-bot requested a review from a team as a code owner March 11, 2026 18:45
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 11, 2026

📝 Walkthrough

Walkthrough

Removed components.Settings.SettingsAbout.betawarning from many locale files, added or populated numerous i18n keys (notifications, webhook custom headers, time-window labels, network/settings entries) across several locales, and introduced two new empty locale files.

Changes

Cohort / File(s) Summary
Beta warning removals
src/i18n/locale/ar.json, src/i18n/locale/bg.json, src/i18n/locale/ca.json, src/i18n/locale/el.json, src/i18n/locale/es.json, src/i18n/locale/es_MX.json, src/i18n/locale/fi.json, src/i18n/locale/he.json, src/i18n/locale/hi.json, src/i18n/locale/hr.json, src/i18n/locale/ko.json, src/i18n/locale/lt.json, src/i18n/locale/nb_NO.json, src/i18n/locale/nl.json, src/i18n/locale/pl.json, src/i18n/locale/ro.json, src/i18n/locale/sl.json, src/i18n/locale/sq.json, src/i18n/locale/sr.json, src/i18n/locale/tr.json, src/i18n/locale/uk.json, src/i18n/locale/zh_Hant.json
Deleted the single components.Settings.SettingsAbout.betawarning entry in each listed locale (single-line removals).
Added/expanded notification, webhook, and time-window keys
src/i18n/locale/da.json, src/i18n/locale/ja.json, src/i18n/locale/sv.json, src/i18n/locale/pt_PT.json, src/i18n/locale/hu.json, src/i18n/locale/eu.json
Removed beta key and added multiple i18n keys such as components.Settings.SonarrModal.monitorNewItems, components.Settings.Notifications.NotificationsNtfy.priority, validationPriorityRequired, components.Discover.timeWindowDay/timeWindowWeek, and several components.Settings.Notifications.NotificationsWebhook.customHeaders*.
Large locale overhauls & branding/text updates
src/i18n/locale/de.json, src/i18n/locale/fr.json, src/i18n/locale/it.json, src/i18n/locale/pt_BR.json, src/i18n/locale/ru.json, src/i18n/locale/zh_Hans.json, src/i18n/locale/eu.json, src/i18n/locale/hu.json, src/i18n/locale/tr.json
Extensive string revisions, many previously-empty keys populated, terminology/branding updates (e.g., Jellyseerr → Seerr in multiple entries), and broad additions across Settings, Discover, Notifications, Blocklist, and related namespaces.
New or empty locale files
src/i18n/locale/sk.json, src/i18n/locale/lb.json
Added new locale files containing empty JSON objects (placeholders for future translations).
Miscellaneous single-file edits
src/i18n/locale/ru.json, src/i18n/locale/zh_Hans.json, src/i18n/locale/nb_NO.json, src/i18n/locale/ko.json
Specific targeted edits: e.g., components.Settings.SettingsLogs.filterError adjusted in ru.json; blocklist/permission/request labels and multiple additions in zh_Hans.json; assorted single-line or small multi-line changes in others.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐇 I hopped through keys both old and new,

betawarning softly said adieu.
Headers, time windows, priorities bloom,
Locales fill their quiet room.
A little rabbit cheers — translations renew.

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'chore(i18n): update translations from Weblate' directly and clearly describes the main change—translation updates from Weblate—and accurately reflects the primary purpose of the PR across all modified locale files.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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.

fallenbagel
fallenbagel previously approved these changes Mar 11, 2026
Copy link
Copy Markdown

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

🧹 Nitpick comments (1)
src/i18n/locale/fr.json (1)

76-76: Minor terminology inconsistency (optional).

Line 76 uses "Plateformes de streaming" while line 110 uses "Services de streaming". Both are valid translations, but you may want to standardize on one term for consistency across the UI.

Also applies to: 110-110

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/fr.json` at line 76, The translation keys use two different
French terms; standardize the wording by updating the value for
"components.Discover.FilterSlideover.streamingservices" (and the duplicate at
the other occurrence) to the chosen consistent term—e.g., change both entries
from "Plateformes de streaming" to "Services de streaming" (or vice versa) so
all instances of that key use the exact same string across the file.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/i18n/locale/it.json`:
- Line 1441: Update the Italian translation typos: change the value for
components.Discover.FilterSlideover.excludeKeywords from "Parole chiavi escluse"
to "Parole chiave escluse", and find and fix the other two occurrences by
replacing "ULR Youtube" with "URL YouTube" and "parola chiava" with "parola
chiave" wherever they appear in this locale file so the shipped strings are
correct.
- Line 1489: The ICU plural selector for the key
components.Settings.SettingsJobsCache.editJobScheduleSelectorDays uses an
invalid plural category "1"; update the ICU message to use the correct plural
keyword "one" (i.e. change "plural, 1 {giorno}" to "plural, one {giorno}") so it
matches React Intl's expected syntax and other locales.
- Around line 1579-1581: Update the three locale keys that use the wrong
singular prefix to the plural prefix: change
"component.BlocklistBlock.blocklistdate",
"component.BlocklistBlock.blocklistedby", and
"component.BlocklistModal.blocklisting" to
"components.BlocklistBlock.blocklistdate",
"components.BlocklistBlock.blocklistedby", and
"components.BlocklistModal.blocklisting" respectively in this locale file; after
renaming, run a quick search for those old keys in the codebase (references to
BlocklistBlock / BlocklistModal) and update any usages to the new keys to keep
translations wired correctly.

In `@src/i18n/locale/pt_BR.json`:
- Line 1184: Update the two pt-BR localization entries: change the product name
"Seer" to the correct project name in the key
"components.Settings.SettingsJobsCache.imagecacheDescription" and fix the typo
"especias" to "especiais" in the other settings string referenced in the review
(the key around line 1417); ensure the Portuguese text preserves surrounding
formatting like the <code>{appDataPath}/cache/images</code> placeholder and only
corrects the misspellings.
- Around line 1429-1430: The two translation keys for DNS TTL are identical;
update the value for components.Settings.SettingsNetwork.dnsCacheForceMinTtl so
it reads as the minimum TTL (e.g., "TTL mínimo do cache DNS") while leaving
components.Settings.SettingsNetwork.dnsCacheForceMaxTtl unchanged, ensuring the
min/max labels are distinct in src/i18n/locale/pt_BR.json.
- Line 1563: The translation for the key
"components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.activesubscription"
is empty and results in a blank label in pt-BR; open src/i18n/locale/pt_BR.json,
locate that exact key and replace the empty string with the appropriate
Portuguese label (e.g., "Inscrição ativa" or another agreed phrase), ensuring
valid JSON string formatting and escaping if needed so the UI shows the web push
label correctly.
- Line 1404: The pluralization string for the scheduler label
"components.Settings.SettingsJobsCache.editJobScheduleSelectorDays" contains
English words ("day"/"days"); update the ICU plural branches so the singular
branch uses "dia" and the other branch uses "{jobScheduleDays} dias" (preserving
the {jobScheduleDays} interpolation) so the pt-BR translation reads "Cada dia"
for one and "Cada {jobScheduleDays} dias" for other counts.

In `@src/i18n/locale/pt_PT.json`:
- Line 1615: The string for the settings label
"components.Settings.SonarrModal.monitorNewItems" is written as an imperative
phrase ("Acompanhe as novas temporadas"); change it to a noun/label form such as
"Monitorizar novas temporadas" so it reads like a setting label rather than an
instruction and matches other settings copy.

In `@src/i18n/locale/ru.json`:
- Around line 1600-1607: Two typos exist in the Russian locale strings for
blocklisted-tag import: correct the misspellings in the keys
components.Settings.blocklistedTagImportInstructions (replace "конифгурацию"
with "конфигурацию") and components.Settings.importBlocklistedTagsTip (replace
"Импоритровать" with "Импортировать") so the user-facing settings UI shows the
proper Russian words.
- Around line 1455-1457: The translation value for the key
components.Settings.Notifications.NotificationsNtfy.embedPoster contains a
trailing soft-hyphen/non-printing character; open the string for that key and
remove the invisible character so the value becomes "Добавлять постер" (no
soft-hyphen or other hidden characters), then save the JSON ensuring encoding
remains UTF-8.

In `@src/i18n/locale/zh_Hans.json`:
- Around line 1446-1451: Replace the mistaken "证书" wording with a media-rating
term (e.g., "分级" or "内容分级") for the Certification selector translations: update
the values for "components.Selector.CertificationSelector.errorLoading",
"components.Selector.CertificationSelector.maxRating",
"components.Selector.CertificationSelector.minRating",
"components.Selector.CertificationSelector.noOptions", and
"components.Selector.CertificationSelector.selectCertification" to use "分级" or
"内容分级" (for example change "证书加载失败" to "分级信息加载失败" or "内容分级加载失败") so the text
clearly refers to content rating rather than a certificate.
- Around line 1571-1584: Summary: The translations mix three terms ("封锁清单",
"黑名单", "被屏蔽") for the same feature; pick one and make them consistent. Fix:
choose a single term (e.g., "黑名单") and update all affected keys so wording is
consistent—replace "封锁清单" and instances of "被屏蔽"/"被屏蔽的" with "黑名单"/contextual
phrases like "黑名单设置", "显示所有被列入黑名单的媒体", "管理黑名单", "查看黑名单中的媒体", and "从黑名单中移除" for
the keys components.Blocklist.* (blocklistsettings, showAllBlocklisted,
filterBlocklistedTags, etc.), components.Layout.Sidebar.blocklist,
components.PermissionEdit.manageblocklist and related description/view keys,
i18n.removefromBlocklist, and the unableToConnect keys in
components.Discover.RecentRequestsSlider and components.RequestList so the
namespace uses the same term throughout.

---

Nitpick comments:
In `@src/i18n/locale/fr.json`:
- Line 76: The translation keys use two different French terms; standardize the
wording by updating the value for
"components.Discover.FilterSlideover.streamingservices" (and the duplicate at
the other occurrence) to the chosen consistent term—e.g., change both entries
from "Plateformes de streaming" to "Services de streaming" (or vice versa) so
all instances of that key use the exact same string across the file.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0a0733e9-83e0-44e9-ab12-5f6f68f0ede4

📥 Commits

Reviewing files that changed from the base of the PR and between f047cab and 9784d88.

📒 Files selected for processing (37)
  • src/i18n/locale/ar.json
  • src/i18n/locale/bg.json
  • src/i18n/locale/ca.json
  • src/i18n/locale/cs.json
  • src/i18n/locale/da.json
  • src/i18n/locale/de.json
  • src/i18n/locale/el.json
  • src/i18n/locale/es.json
  • src/i18n/locale/es_MX.json
  • src/i18n/locale/et.json
  • src/i18n/locale/eu.json
  • src/i18n/locale/fi.json
  • src/i18n/locale/fr.json
  • src/i18n/locale/he.json
  • src/i18n/locale/hi.json
  • src/i18n/locale/hr.json
  • src/i18n/locale/hu.json
  • src/i18n/locale/it.json
  • src/i18n/locale/ja.json
  • src/i18n/locale/ko.json
  • src/i18n/locale/lt.json
  • src/i18n/locale/nb_NO.json
  • src/i18n/locale/nl.json
  • src/i18n/locale/pl.json
  • src/i18n/locale/pt_BR.json
  • src/i18n/locale/pt_PT.json
  • src/i18n/locale/ro.json
  • src/i18n/locale/ru.json
  • src/i18n/locale/sk.json
  • src/i18n/locale/sl.json
  • src/i18n/locale/sq.json
  • src/i18n/locale/sr.json
  • src/i18n/locale/sv.json
  • src/i18n/locale/tr.json
  • src/i18n/locale/uk.json
  • src/i18n/locale/zh_Hans.json
  • src/i18n/locale/zh_Hant.json
💤 Files with no reviewable changes (22)
  • src/i18n/locale/nl.json
  • src/i18n/locale/bg.json
  • src/i18n/locale/fi.json
  • src/i18n/locale/lt.json
  • src/i18n/locale/ca.json
  • src/i18n/locale/pl.json
  • src/i18n/locale/es.json
  • src/i18n/locale/sq.json
  • src/i18n/locale/tr.json
  • src/i18n/locale/uk.json
  • src/i18n/locale/hr.json
  • src/i18n/locale/el.json
  • src/i18n/locale/sl.json
  • src/i18n/locale/ar.json
  • src/i18n/locale/ko.json
  • src/i18n/locale/he.json
  • src/i18n/locale/sr.json
  • src/i18n/locale/ro.json
  • src/i18n/locale/hi.json
  • src/i18n/locale/es_MX.json
  • src/i18n/locale/zh_Hant.json
  • src/i18n/locale/nb_NO.json

Comment thread src/i18n/locale/it.json
Comment thread src/i18n/locale/it.json Outdated
Comment thread src/i18n/locale/it.json
"components.Discover.updatefailed": "Algo deu errado com a mudança das configurações de descoberta personalizadas.",
"components.Discover.updatesuccess": "Configurações personalizadas de descoberta atualizadas.",
"components.Settings.SettingsJobsCache.imagecacheDescription": "Quando ativado nas configurações, o Overseer irá obter e guardar imagens de fontes externas pré configuradas. As imagens guardadas são salvas na sua pasta de configuração. Você pode encontrar os arquivos em <code>{appDataPath}/cache/images</code>.",
"components.Settings.SettingsJobsCache.imagecacheDescription": "Quando ativado nas configurações, o Seer irá obter e guardar imagens de fontes externas pré configuradas. As imagens guardadas são salvas na sua pasta de configuração. Você pode encontrar os arquivos em <code>{appDataPath}/cache/images</code>.",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix the remaining pt-BR typos in these new settings strings.

Line 1184 misspells the product name as Seer, and Line 1417 uses especias instead of especiais.

Suggested fix
-  "components.Settings.SettingsJobsCache.imagecacheDescription": "Quando ativado nas configurações, o Seer irá obter e guardar imagens de fontes externas pré configuradas. As imagens guardadas são salvas na sua pasta de configuração. Você pode encontrar os arquivos em <code>{appDataPath}/cache/images</code>.",
+  "components.Settings.SettingsJobsCache.imagecacheDescription": "Quando ativado nas configurações, o Seerr irá obter e guardar imagens de fontes externas pré-configuradas. As imagens guardadas são salvas na sua pasta de configuração. Você pode encontrar os arquivos em <code>{appDataPath}/cache/images</code>.",

-  "components.Settings.SettingsMain.enableSpecialEpisodes": "Permitir pedidos de episódios especias",
+  "components.Settings.SettingsMain.enableSpecialEpisodes": "Permitir pedidos de episódios especiais",

Also applies to: 1417-1417

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` at line 1184, Update the two pt-BR localization
entries: change the product name "Seer" to the correct project name in the key
"components.Settings.SettingsJobsCache.imagecacheDescription" and fix the typo
"especias" to "especiais" in the other settings string referenced in the review
(the key around line 1417); ensure the Portuguese text preserves surrounding
formatting like the <code>{appDataPath}/cache/images</code> placeholder and only
corrects the misspellings.

Comment thread src/i18n/locale/pt_BR.json
Comment thread src/i18n/locale/pt_PT.json
Comment thread src/i18n/locale/ru.json
Comment thread src/i18n/locale/ru.json
Comment on lines +1446 to +1451
"components.Selector.CertificationSelector.errorLoading": "证书加载失败",
"components.Selector.CertificationSelector.maxRating": "",
"components.Selector.CertificationSelector.minRating": "",
"components.Selector.CertificationSelector.noOptions": "",
"components.Selector.CertificationSelector.selectCertification": "",
"components.Selector.CertificationSelector.selectCountry": "",
"components.Selector.CertificationSelector.selectCountry": "选择国家/地区",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Use a media-rating term instead of 证书 here.

In this selector, Certification refers to content rating / age classification, not a document or TLS certificate. 证书加载失败 will read like the wrong feature failed to load.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/zh_Hans.json` around lines 1446 - 1451, Replace the mistaken
"证书" wording with a media-rating term (e.g., "分级" or "内容分级") for the
Certification selector translations: update the values for
"components.Selector.CertificationSelector.errorLoading",
"components.Selector.CertificationSelector.maxRating",
"components.Selector.CertificationSelector.minRating",
"components.Selector.CertificationSelector.noOptions", and
"components.Selector.CertificationSelector.selectCertification" to use "分级" or
"内容分级" (for example change "证书加载失败" to "分级信息加载失败" or "内容分级加载失败") so the text
clearly refers to content rating rather than a certificate.

Comment thread src/i18n/locale/zh_Hans.json
fallenbagel
fallenbagel previously approved these changes Mar 11, 2026
Copy link
Copy Markdown

@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

♻️ Duplicate comments (9)
src/i18n/locale/pt_BR.json (4)

1404-1404: ⚠️ Potential issue | 🟡 Minor

Translate the ICU plural branches for the scheduler label.

Line 1404 still renders English (day / days) inside the pt-BR message.

Suggested fix
-  "components.Settings.SettingsJobsCache.editJobScheduleSelectorDays": "Cada {jobScheduleDays, plural, one {day} other {{jobScheduleDays} days}}",
+  "components.Settings.SettingsJobsCache.editJobScheduleSelectorDays": "A cada {jobScheduleDays, plural, one {dia} other {{jobScheduleDays} dias}}",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` at line 1404, The ICU plural branches for the key
"components.Settings.SettingsJobsCache.editJobScheduleSelectorDays" are still in
English; update the plural forms so the singular and plural Portuguese words are
used (e.g., "dia" for one and "dias" for other) while preserving the ICU plural
syntax and the {jobScheduleDays} interpolation; ensure the full value becomes
something like the Portuguese equivalent for "Every {n} day(s)" using the same
key.

1429-1430: ⚠️ Potential issue | 🟡 Minor

Differentiate the min/max DNS TTL labels.

Lines 1429-1430 currently show the same text, so the minimum TTL field is mislabeled in pt-BR.

Suggested fix
   "components.Settings.SettingsNetwork.dnsCacheForceMaxTtl": "TTL máximo do cache DNS",
-  "components.Settings.SettingsNetwork.dnsCacheForceMinTtl": "TTL máximo do cache DNS",
+  "components.Settings.SettingsNetwork.dnsCacheForceMinTtl": "TTL mínimo do cache DNS",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` around lines 1429 - 1430, The pt-BR locale has
the same translation for both DNS TTL entries; update the value for
"components.Settings.SettingsNetwork.dnsCacheForceMinTtl" so it correctly reads
"TTL mínimo do cache DNS" instead of the duplicate "TTL máximo do cache DNS"
(leave "components.Settings.SettingsNetwork.dnsCacheForceMaxTtl" unchanged).

1563-1563: ⚠️ Potential issue | 🟡 Minor

Don’t leave the new web push label empty.

Line 1563 is still empty, so the active-subscription label will render blank in pt-BR.

Suggested fix
-  "components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.activesubscription": "",
+  "components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.activesubscription": "Assinatura ativa",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` at line 1563, The translation key
components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.activesubscription
is empty and will render blank; open the pt_BR.json and provide the Portuguese
(Brazil) text for the "active subscription" label (for example "Assinatura
ativa" or your chosen localized phrase) by replacing the empty string value for
that key so the label displays correctly in pt-BR.

1184-1184: ⚠️ Potential issue | 🟡 Minor

Fix the remaining pt-BR typos in these settings strings.

Line 1184 still says Seer, and Line 1417 still has especias, so both labels will show obvious typos in the pt-BR UI.

Suggested fix
-  "components.Settings.SettingsJobsCache.imagecacheDescription": "Quando ativado nas configurações, o Seer irá obter e guardar imagens de fontes externas pré configuradas. As imagens guardadas são salvas na sua pasta de configuração. Você pode encontrar os arquivos em <code>{appDataPath}/cache/images</code>.",
+  "components.Settings.SettingsJobsCache.imagecacheDescription": "Quando ativado nas configurações, o Seerr irá obter e guardar imagens de fontes externas pré-configuradas. As imagens guardadas são salvas na sua pasta de configuração. Você pode encontrar os arquivos em <code>{appDataPath}/cache/images</code>.",

-  "components.Settings.SettingsMain.enableSpecialEpisodes": "Permitir pedidos de episódios especias",
+  "components.Settings.SettingsMain.enableSpecialEpisodes": "Permitir pedidos de episódios especiais",

Also applies to: 1417-1417

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` at line 1184, Replace the incorrect occurrences
in the pt-BR locale: update the value for
components.Settings.SettingsJobsCache.imagecacheDescription to use the
product/display name used elsewhere in translations instead of the literal
"Seer" (keep the rest of the sentence and the {appDataPath} placeholder intact),
and locate the other pt_BR.json entry containing the misspelling "especias"
(search the file for that token) and correct it to the appropriate Portuguese
word "especiais" (or the correct accented form used in your project), ensuring
consistency with other pt-BR strings.
src/i18n/locale/it.json (3)

1579-1581: ⚠️ Potential issue | 🟠 Major

Keep the Blocklist keys under the components. namespace.

Lines 1579-1581 switch to component. while the rest of this locale file uses components.. Since i18n lookups are exact, these keys are likely to miss the existing Blocklist namespace.

🗂️ Suggested fix
-  "component.BlocklistBlock.blocklistdate": "Data blocco",
-  "component.BlocklistBlock.blocklistedby": "Bloccato da",
-  "component.BlocklistModal.blocklisting": "Bloccaggio",
+  "components.BlocklistBlock.blocklistdate": "Data blocco",
+  "components.BlocklistBlock.blocklistedby": "Bloccato da",
+  "components.BlocklistModal.blocklisting": "Bloccaggio",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/it.json` around lines 1579 - 1581, The three i18n keys
"component.BlocklistBlock.blocklistdate",
"component.BlocklistBlock.blocklistedby", and
"component.BlocklistModal.blocklisting" are using the wrong namespace; rename
them to use the existing components. namespace (i.e.
"components.BlocklistBlock.blocklistdate",
"components.BlocklistBlock.blocklistedby",
"components.BlocklistModal.blocklisting") so lookups match the rest of the
locale and existing Blocklist keys.

1489-1489: ⚠️ Potential issue | 🟠 Major

Use a valid ICU plural selector on Line 1489.

plural, 1 {giorno} is invalid ICU syntax. React Intl expects a category like one, so this message can fail to format at runtime.

🧩 Suggested fix
-  "components.Settings.SettingsJobsCache.editJobScheduleSelectorDays": "Ogni {jobScheduleDays, plural, 1 {giorno} other {{jobScheduleDays} giorni}}",
+  "components.Settings.SettingsJobsCache.editJobScheduleSelectorDays": "Ogni {jobScheduleDays, plural, one {giorno} other {{jobScheduleDays} giorni}}",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/it.json` at line 1489, The ICU plural form for the key
components.Settings.SettingsJobsCache.editJobScheduleSelectorDays is using an
invalid category "1"; update the plural selector to use ICU categories (e.g.,
one and other) and use the numeric placeholder inside the other branch (or #) so
React Intl can format it: change the plural selector from "plural, 1 {giorno}
other {{jobScheduleDays} giorni}" to use "one {giorno} other {# giorni}" or "one
{giorno} other {{jobScheduleDays} giorni}" accordingly.

1441-1441: ⚠️ Potential issue | 🟡 Minor

Fix the remaining Italian typos before shipping these strings.

Lines 1441, 1498, 1501, and 1516 still contain obvious mistakes (Parole chiavi, dalla pagine, ULR Youtube, parola chiava). These strings surface directly in the UI.

✏️ Suggested fixes
-  "components.Discover.FilterSlideover.excludeKeywords": "Parole chiavi escluse",
+  "components.Discover.FilterSlideover.excludeKeywords": "Parole chiave escluse",

-  "components.Settings.SettingsMain.hideAvailableTip": "Nascondi i media disponibili dalla pagine di esplorazione, ma non dai risultati di ricerca",
+  "components.Settings.SettingsMain.hideAvailableTip": "Nascondi i media disponibili dalle pagine di esplorazione, ma non dai risultati di ricerca",

-  "components.Settings.SettingsMain.youtubeUrl": "ULR Youtube",
+  "components.Settings.SettingsMain.youtubeUrl": "URL YouTube",

-  "components.Settings.invalidKeyword": "{keywordId} non è una parola chiava TMDB.",
+  "components.Settings.invalidKeyword": "{keywordId} non è una parola chiave TMDB.",

Also applies to: 1498-1501, 1516-1516

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/it.json` at line 1441, Update the Italian strings to correct
typos: change "Parole chiavi escluse" (key:
components.Discover.FilterSlideover.excludeKeywords) to "Parole chiave escluse",
change any occurrences of "dalla pagine" to "dalla pagina", change "ULR Youtube"
to "URL YouTube", and change "parola chiava" to "parola chiave" so the UI shows
correct Italian.
src/i18n/locale/ru.json (2)

1456-1456: ⚠️ Potential issue | 🟡 Minor

Remove the hidden trailing character in the ntfy poster label.

Добавлять постер­ still contains a stray non-printing character, which can render inconsistently and makes the string harder to copy/search cleanly.

💬 Suggested fix
-  "components.Settings.Notifications.NotificationsNtfy.embedPoster": "Добавлять постер­",
+  "components.Settings.Notifications.NotificationsNtfy.embedPoster": "Добавлять постер",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/ru.json` at line 1456, The translation string for key
components.Settings.Notifications.NotificationsNtfy.embedPoster contains a
hidden trailing non-printing character (likely a soft hyphen or similar) after
"Добавлять постер"; open the value for that key, remove the invisible character
so the value is exactly "Добавлять постер", and save ensuring no extra
whitespace or control characters remain (you can detect/remove \u00AD or other
non-printing chars when editing).

1600-1607: ⚠️ Potential issue | 🟡 Minor

Fix the typos in the blocklist import copy.

конифгурацию and Импоритровать are still misspelled and will ship directly into the settings UI.

💬 Suggested fix
-  "components.Settings.blocklistedTagImportInstructions": "Вставьте конифгурацию блокируемого тега ниже.",
+  "components.Settings.blocklistedTagImportInstructions": "Вставьте конфигурацию блокируемого тега ниже.",-  "components.Settings.importBlocklistedTagsTip": "Импоритровать конфигурацию блокируемого тега",
+  "components.Settings.importBlocklistedTagsTip": "Импортировать конфигурацию блокируемого тега",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/ru.json` around lines 1600 - 1607, Update the Russian strings
to correct typos: change components.Settings.blocklistedTagImportInstructions
value from "Вставьте конифгурацию блокируемого тега ниже." to use
"конфигурацию", and change components.Settings.importBlocklistedTagsTip value
from "Импоритровать конфигурацию заблокированного тега" to "Импортировать
конфигурацию заблокированного тега"; leave other keys
(components.Settings.blocklistedTagImportTitle,
components.Settings.blocklistedTagsText,
components.Settings.clearBlocklistedTagsConfirm,
components.Settings.copyBlocklistedTags,
components.Settings.copyBlocklistedTagsEmpty,
components.Settings.copyBlocklistedTagsTip) unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/i18n/locale/de.json`:
- Line 1557: The German pluralization for
components.Settings.SettingsJobsCache.editJobScheduleSelectorDays is wrong for
the singular case ("Alle Tag"); update the ICU plural message so the one-case
reads a proper German phrase (e.g. "jeden Tag") instead of "Tag" — change the
value to use one {jeden Tag} and keep other {{jobScheduleDays} Tage} for the
other case.

In `@src/i18n/locale/ru.json`:
- Line 1597: The tooltip for
"components.Settings.SettingsNetwork.proxyEnabledTip" contains a protocol typo
that contradicts the first clause; update the string so the second clause reads
that it does NOT enable "HTTPS" (not "HTTP") in the phrase after the
parenthesis, i.e., change the final word from HTTP to HTTPS while keeping the
rest of the Russian text intact.
- Around line 1474-1475: The label string for the section title key
components.Settings.Notifications.NotificationsWebhook.supportVariables is
currently an action-style phrase and should be a noun phrase; update that
localization value to a section label like "Поддерживаемые переменные URL" (or
similar noun-form) so it matches the section title used in NotificationsWebhook
and avoids implying a toggle.

---

Duplicate comments:
In `@src/i18n/locale/it.json`:
- Around line 1579-1581: The three i18n keys
"component.BlocklistBlock.blocklistdate",
"component.BlocklistBlock.blocklistedby", and
"component.BlocklistModal.blocklisting" are using the wrong namespace; rename
them to use the existing components. namespace (i.e.
"components.BlocklistBlock.blocklistdate",
"components.BlocklistBlock.blocklistedby",
"components.BlocklistModal.blocklisting") so lookups match the rest of the
locale and existing Blocklist keys.
- Line 1489: The ICU plural form for the key
components.Settings.SettingsJobsCache.editJobScheduleSelectorDays is using an
invalid category "1"; update the plural selector to use ICU categories (e.g.,
one and other) and use the numeric placeholder inside the other branch (or #) so
React Intl can format it: change the plural selector from "plural, 1 {giorno}
other {{jobScheduleDays} giorni}" to use "one {giorno} other {# giorni}" or "one
{giorno} other {{jobScheduleDays} giorni}" accordingly.
- Line 1441: Update the Italian strings to correct typos: change "Parole chiavi
escluse" (key: components.Discover.FilterSlideover.excludeKeywords) to "Parole
chiave escluse", change any occurrences of "dalla pagine" to "dalla pagina",
change "ULR Youtube" to "URL YouTube", and change "parola chiava" to "parola
chiave" so the UI shows correct Italian.

In `@src/i18n/locale/pt_BR.json`:
- Line 1404: The ICU plural branches for the key
"components.Settings.SettingsJobsCache.editJobScheduleSelectorDays" are still in
English; update the plural forms so the singular and plural Portuguese words are
used (e.g., "dia" for one and "dias" for other) while preserving the ICU plural
syntax and the {jobScheduleDays} interpolation; ensure the full value becomes
something like the Portuguese equivalent for "Every {n} day(s)" using the same
key.
- Around line 1429-1430: The pt-BR locale has the same translation for both DNS
TTL entries; update the value for
"components.Settings.SettingsNetwork.dnsCacheForceMinTtl" so it correctly reads
"TTL mínimo do cache DNS" instead of the duplicate "TTL máximo do cache DNS"
(leave "components.Settings.SettingsNetwork.dnsCacheForceMaxTtl" unchanged).
- Line 1563: The translation key
components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.activesubscription
is empty and will render blank; open the pt_BR.json and provide the Portuguese
(Brazil) text for the "active subscription" label (for example "Assinatura
ativa" or your chosen localized phrase) by replacing the empty string value for
that key so the label displays correctly in pt-BR.
- Line 1184: Replace the incorrect occurrences in the pt-BR locale: update the
value for components.Settings.SettingsJobsCache.imagecacheDescription to use the
product/display name used elsewhere in translations instead of the literal
"Seer" (keep the rest of the sentence and the {appDataPath} placeholder intact),
and locate the other pt_BR.json entry containing the misspelling "especias"
(search the file for that token) and correct it to the appropriate Portuguese
word "especiais" (or the correct accented form used in your project), ensuring
consistency with other pt-BR strings.

In `@src/i18n/locale/ru.json`:
- Line 1456: The translation string for key
components.Settings.Notifications.NotificationsNtfy.embedPoster contains a
hidden trailing non-printing character (likely a soft hyphen or similar) after
"Добавлять постер"; open the value for that key, remove the invisible character
so the value is exactly "Добавлять постер", and save ensuring no extra
whitespace or control characters remain (you can detect/remove \u00AD or other
non-printing chars when editing).
- Around line 1600-1607: Update the Russian strings to correct typos: change
components.Settings.blocklistedTagImportInstructions value from "Вставьте
конифгурацию блокируемого тега ниже." to use "конфигурацию", and change
components.Settings.importBlocklistedTagsTip value from "Импоритровать
конфигурацию заблокированного тега" to "Импортировать конфигурацию
заблокированного тега"; leave other keys
(components.Settings.blocklistedTagImportTitle,
components.Settings.blocklistedTagsText,
components.Settings.clearBlocklistedTagsConfirm,
components.Settings.copyBlocklistedTags,
components.Settings.copyBlocklistedTagsEmpty,
components.Settings.copyBlocklistedTagsTip) unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d70e80ca-4da7-4a3b-8efc-f275138c2901

📥 Commits

Reviewing files that changed from the base of the PR and between 9784d88 and cd96edb.

📒 Files selected for processing (38)
  • src/i18n/locale/ar.json
  • src/i18n/locale/bg.json
  • src/i18n/locale/ca.json
  • src/i18n/locale/cs.json
  • src/i18n/locale/da.json
  • src/i18n/locale/de.json
  • src/i18n/locale/el.json
  • src/i18n/locale/es.json
  • src/i18n/locale/es_MX.json
  • src/i18n/locale/et.json
  • src/i18n/locale/eu.json
  • src/i18n/locale/fi.json
  • src/i18n/locale/fr.json
  • src/i18n/locale/he.json
  • src/i18n/locale/hi.json
  • src/i18n/locale/hr.json
  • src/i18n/locale/hu.json
  • src/i18n/locale/it.json
  • src/i18n/locale/ja.json
  • src/i18n/locale/ko.json
  • src/i18n/locale/lb.json
  • src/i18n/locale/lt.json
  • src/i18n/locale/nb_NO.json
  • src/i18n/locale/nl.json
  • src/i18n/locale/pl.json
  • src/i18n/locale/pt_BR.json
  • src/i18n/locale/pt_PT.json
  • src/i18n/locale/ro.json
  • src/i18n/locale/ru.json
  • src/i18n/locale/sk.json
  • src/i18n/locale/sl.json
  • src/i18n/locale/sq.json
  • src/i18n/locale/sr.json
  • src/i18n/locale/sv.json
  • src/i18n/locale/tr.json
  • src/i18n/locale/uk.json
  • src/i18n/locale/zh_Hans.json
  • src/i18n/locale/zh_Hant.json
💤 Files with no reviewable changes (22)
  • src/i18n/locale/lt.json
  • src/i18n/locale/hr.json
  • src/i18n/locale/nl.json
  • src/i18n/locale/zh_Hant.json
  • src/i18n/locale/tr.json
  • src/i18n/locale/el.json
  • src/i18n/locale/ko.json
  • src/i18n/locale/nb_NO.json
  • src/i18n/locale/hi.json
  • src/i18n/locale/es.json
  • src/i18n/locale/ar.json
  • src/i18n/locale/he.json
  • src/i18n/locale/sq.json
  • src/i18n/locale/sr.json
  • src/i18n/locale/pl.json
  • src/i18n/locale/ro.json
  • src/i18n/locale/bg.json
  • src/i18n/locale/ca.json
  • src/i18n/locale/uk.json
  • src/i18n/locale/sl.json
  • src/i18n/locale/es_MX.json
  • src/i18n/locale/fi.json
🚧 Files skipped from review as they are similar to previous changes (5)
  • src/i18n/locale/sk.json
  • src/i18n/locale/hu.json
  • src/i18n/locale/ja.json
  • src/i18n/locale/pt_PT.json
  • src/i18n/locale/sv.json

Comment thread src/i18n/locale/de.json
Comment thread src/i18n/locale/ru.json
Comment thread src/i18n/locale/ru.json
Co-authored-by: Gallyam <gallyamb@gmail.com>
Co-authored-by: Jamal R. <jamal2362@googlemail.com>
Co-authored-by: Josiel Jordão <josiel-junior2@hotmail.com>
Co-authored-by: Marek <mara.pavelka@gmail.com>
Co-authored-by: Nehogy Irj <nehogyirj@gmail.com>
Co-authored-by: Nils Karlsson Pyssling <nisse@users.noreply.translate.seerr.dev>
Co-authored-by: Pysta <stefanjanckulik@gmail.com>
Co-authored-by: Roberto Saleri <roberto.saleri@gmail.com>
Co-authored-by: Sebastian Langer <sl@scn.cx>
Co-authored-by: SulliL <susu.leduc@gmail.com>
Co-authored-by: Thadah D. Denyse <thadahdenyse@protonmail.com>
Co-authored-by: Ulrik J <ulrikj@users.noreply.translate.seerr.dev>
Co-authored-by: Vincenzo Gianfelice <gianfelicevincenzo.dev@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: chenhui_li <lichenhui1997@gmail.com>
Co-authored-by: fallenbagel <98979876+fallenbagel@users.noreply.github.com>
Co-authored-by: markspoiss007-web <markspoiss007@gmail.com>
Co-authored-by: tkymmm <lempicka@sluice.xyz>
Co-authored-by: ugyes <ferenc.bodi@live.com>
@seerr-automation-bot seerr-automation-bot force-pushed the weblate/translations-frontend branch from 0af215c to 50e1b57 Compare March 11, 2026 19:08
Copy link
Copy Markdown

@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

♻️ Duplicate comments (1)
src/i18n/locale/pt_BR.json (1)

1404-1404: ⚠️ Potential issue | 🟡 Minor

Regression: English "day/days" still present in pt-BR translation.

This issue was previously flagged and marked as addressed, but the translation still contains English words "day" and "days" which will render incorrectly in the pt-BR UI (e.g., "Cada day" or "Cada 3 days"). The Weblate sync may have overwritten the fix.

Suggested fix
-  "components.Settings.SettingsJobsCache.editJobScheduleSelectorDays": "Cada {jobScheduleDays, plural, one {day} other {{jobScheduleDays} days}}",
+  "components.Settings.SettingsJobsCache.editJobScheduleSelectorDays": "A cada {jobScheduleDays, plural, one {dia} other {{jobScheduleDays} dias}}",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` at line 1404, The pt-BR translation for the key
components.Settings.SettingsJobsCache.editJobScheduleSelectorDays still contains
English singular/plural words; update the ICU plural message so the Portuguese
terms are used instead — replace the English tokens "day" and "days" with "dia"
and "dias" respectively (e.g., use one {dia} and other {{jobScheduleDays} dias})
so the string renders correctly for 1 and N days.
🧹 Nitpick comments (2)
src/i18n/locale/pt_BR.json (2)

1242-1242: Minor: "Por favor" should be lowercase.

Mid-sentence capitalization of "Por favor" is non-standard; "por favor" would be more grammatically correct.

Suggested fix
-  "components.MovieDetails.watchlistError": "Algo deu errado, Por favor, tente novamente.",
+  "components.MovieDetails.watchlistError": "Algo deu errado, por favor, tente novamente.",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` at line 1242, Update the localized string value
for the key "components.MovieDetails.watchlistError" to use lowercase "por
favor" instead of "Por favor"; locate the JSON entry for
components.MovieDetails.watchlistError and change "Algo deu errado, Por favor,
tente novamente." to "Algo deu errado, por favor, tente novamente." ensuring
JSON punctuation remains valid.

1454-1557: Numerous untranslated keys will render blank in pt-BR UI.

Over 100 new keys have empty values (""). While this is expected in a Weblate sync, these will display blank labels to pt-BR users. Key areas affected include:

  • User authentication settings (SettingsUsers.atLeastOneAuth, loginMethods)
  • Sonarr modal (animeSeriesType, seriesType, tagRequests)
  • Setup flow (configemby, configjellyfin, configplex)
  • User profile settings (linked accounts, web push notifications)

Consider prioritizing these in Weblate or adding fallback to English.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` around lines 1454 - 1557, Many pt_BR JSON keys
(e.g., "components.Settings.SettingsUsers.atLeastOneAuth",
"components.Settings.SonarrModal.seriesType", "components.Setup.configjellyfin",
"components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.enablewebpush",
and many others) are empty and will render blank in the UI; populate these keys
with Portuguese (pt-BR) translations in src/i18n/locale/pt_BR.json (prioritize
authentication, Sonarr modal, setup flow, and user profile/webpush keys) or
implement a fallback to English by ensuring the i18n lookup returns the default
English string when a pt_BR value is empty. Ensure each referenced key is
updated (no empty ""), validate the JSON, and run the localization lint/CI to
confirm no missing translations remain.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/i18n/locale/fr.json`:
- Line 1557: The translation key
components.Settings.SettingsJobsCache.editJobScheduleSelectorDays uses the wrong
singular French word; change the ICU plural mapping so the `one` case uses
"jour" (singular) instead of "jours", keeping the `other` case as
"{jobScheduleDays} jours" and preserving the existing ICU placeholders and
punctuation.

In `@src/i18n/locale/hu.json`:
- Line 558: The current translation value for the i18n key "i18n.showingresults"
includes both Hungarian suffix variants ("-tól/től" and "-ból/ből") which
renders incorrectly; update the value of "i18n.showingresults" to a wording that
avoids case-dependent suffixes (for example: "Eredmények:
<strong>{from}</strong>–<strong>{to}</strong> / <strong>{total}</strong>") so
the UI shows a clean, language-correct pagination label.

In `@src/i18n/locale/ru.json`:
- Around line 1540-1542: The Russian label for enabling web-push is inconsistent
with nearby keys: replace the informal imperative value of
"components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.enablewebpush"
("Включи веб-пуш") with the infinitive form to match "Отключить веб-пуш" — e.g.,
change it to "Включить веб-пуш" so all action labels use the same grammatical
form.

---

Duplicate comments:
In `@src/i18n/locale/pt_BR.json`:
- Line 1404: The pt-BR translation for the key
components.Settings.SettingsJobsCache.editJobScheduleSelectorDays still contains
English singular/plural words; update the ICU plural message so the Portuguese
terms are used instead — replace the English tokens "day" and "days" with "dia"
and "dias" respectively (e.g., use one {dia} and other {{jobScheduleDays} dias})
so the string renders correctly for 1 and N days.

---

Nitpick comments:
In `@src/i18n/locale/pt_BR.json`:
- Line 1242: Update the localized string value for the key
"components.MovieDetails.watchlistError" to use lowercase "por favor" instead of
"Por favor"; locate the JSON entry for components.MovieDetails.watchlistError
and change "Algo deu errado, Por favor, tente novamente." to "Algo deu errado,
por favor, tente novamente." ensuring JSON punctuation remains valid.
- Around line 1454-1557: Many pt_BR JSON keys (e.g.,
"components.Settings.SettingsUsers.atLeastOneAuth",
"components.Settings.SonarrModal.seriesType", "components.Setup.configjellyfin",
"components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.enablewebpush",
and many others) are empty and will render blank in the UI; populate these keys
with Portuguese (pt-BR) translations in src/i18n/locale/pt_BR.json (prioritize
authentication, Sonarr modal, setup flow, and user profile/webpush keys) or
implement a fallback to English by ensuring the i18n lookup returns the default
English string when a pt_BR value is empty. Ensure each referenced key is
updated (no empty ""), validate the JSON, and run the localization lint/CI to
confirm no missing translations remain.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 57e52f47-2dd5-4eb3-83c2-aeffd6b3b613

📥 Commits

Reviewing files that changed from the base of the PR and between cd96edb and 0af215c.

📒 Files selected for processing (38)
  • src/i18n/locale/ar.json
  • src/i18n/locale/bg.json
  • src/i18n/locale/ca.json
  • src/i18n/locale/cs.json
  • src/i18n/locale/da.json
  • src/i18n/locale/de.json
  • src/i18n/locale/el.json
  • src/i18n/locale/es.json
  • src/i18n/locale/es_MX.json
  • src/i18n/locale/et.json
  • src/i18n/locale/eu.json
  • src/i18n/locale/fi.json
  • src/i18n/locale/fr.json
  • src/i18n/locale/he.json
  • src/i18n/locale/hi.json
  • src/i18n/locale/hr.json
  • src/i18n/locale/hu.json
  • src/i18n/locale/it.json
  • src/i18n/locale/ja.json
  • src/i18n/locale/ko.json
  • src/i18n/locale/lb.json
  • src/i18n/locale/lt.json
  • src/i18n/locale/nb_NO.json
  • src/i18n/locale/nl.json
  • src/i18n/locale/pl.json
  • src/i18n/locale/pt_BR.json
  • src/i18n/locale/pt_PT.json
  • src/i18n/locale/ro.json
  • src/i18n/locale/ru.json
  • src/i18n/locale/sk.json
  • src/i18n/locale/sl.json
  • src/i18n/locale/sq.json
  • src/i18n/locale/sr.json
  • src/i18n/locale/sv.json
  • src/i18n/locale/tr.json
  • src/i18n/locale/uk.json
  • src/i18n/locale/zh_Hans.json
  • src/i18n/locale/zh_Hant.json
💤 Files with no reviewable changes (22)
  • src/i18n/locale/he.json
  • src/i18n/locale/nl.json
  • src/i18n/locale/el.json
  • src/i18n/locale/pl.json
  • src/i18n/locale/hr.json
  • src/i18n/locale/bg.json
  • src/i18n/locale/es_MX.json
  • src/i18n/locale/ro.json
  • src/i18n/locale/ko.json
  • src/i18n/locale/ca.json
  • src/i18n/locale/lt.json
  • src/i18n/locale/sq.json
  • src/i18n/locale/es.json
  • src/i18n/locale/tr.json
  • src/i18n/locale/uk.json
  • src/i18n/locale/sr.json
  • src/i18n/locale/fi.json
  • src/i18n/locale/ar.json
  • src/i18n/locale/hi.json
  • src/i18n/locale/nb_NO.json
  • src/i18n/locale/zh_Hant.json
  • src/i18n/locale/sl.json
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/i18n/locale/de.json
  • src/i18n/locale/sk.json
  • src/i18n/locale/lb.json
  • src/i18n/locale/pt_PT.json

Comment thread src/i18n/locale/fr.json
Comment thread src/i18n/locale/hu.json
Comment thread src/i18n/locale/ru.json
Copy link
Copy Markdown

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

♻️ Duplicate comments (9)
src/i18n/locale/hu.json (1)

558-558: ⚠️ Potential issue | 🟡 Minor

Hungarian pagination label still renders both suffix variants literally.

-tól/től and -ból/ből will both show up in the UI, so this label still reads broken in Hungarian. Please correct the translation in Weblate rather than editing this sync PR directly.

Based on learnings, translation/i18n issues in automated Weblate sync PRs should be fixed in Weblate so they flow in through the sync process.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/hu.json` at line 558, The Hungarian translation for the key
"i18n.showingresults" currently contains both alternate suffixes ("-tól/től" and
"-ból/ből") which render literally; open the string for "i18n.showingresults" in
Weblate and replace the combined variants with the correct single Hungarian
suffixes (or an appropriate localized phrasing) so only the proper forms appear
in the UI, then save so the change flows back via the sync PR process rather
than editing this sync PR directly.
src/i18n/locale/pt_BR.json (4)

1404-1404: ⚠️ Potential issue | 🟡 Minor

Localize the ICU plural branches.

Line 1404 still uses English day / days, so pt-BR users will see mixed-language scheduler text. Please update this string in Weblate rather than in the generated sync commit.

Based on learnings, for automated Weblate sync PRs from seerr-weblate-bot on weblate/translations-frontend, translation fixes should be submitted on Weblate so they flow in through the sync process.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` at line 1404, The plural ICU string for the key
"components.Settings.SettingsJobsCache.editJobScheduleSelectorDays" still uses
English ("day"/"days"); update the Portuguese translations for the plural
branches to localized singular and plural forms (e.g., "dia" and "dias") by
editing this key in Weblate (not in the generated sync commit) so the corrected
translation will flow back through the automated weblate sync process.

1429-1430: ⚠️ Potential issue | 🟡 Minor

Differentiate the min/max DNS TTL labels.

Lines 1429-1430 still render both fields as TTL máximo do cache DNS, so users cannot tell which input is the minimum TTL. Please fix the min-label in Weblate.

Based on learnings, for automated Weblate sync PRs from seerr-weblate-bot on weblate/translations-frontend, translation fixes should be submitted on Weblate so they flow in through the sync process.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` around lines 1429 - 1430, The two i18n keys
components.Settings.SettingsNetwork.dnsCacheForceMaxTtl and
components.Settings.SettingsNetwork.dnsCacheForceMinTtl currently have identical
Portuguese values; change the value for
components.Settings.SettingsNetwork.dnsCacheForceMinTtl from "TTL máximo do
cache DNS" to "TTL mínimo do cache DNS" so min/max are differentiated, and make
this change via Weblate (weblate/translations-frontend) so it flows through the
automated sync from seerr-weblate-bot rather than editing the JSON directly.

1563-1563: ⚠️ Potential issue | 🟡 Minor

Don’t leave the new web push label empty.

Line 1563 is still an empty string, which will render a blank label in the pt-BR notification settings UI. Please fill this in via Weblate.

Based on learnings, for automated Weblate sync PRs from seerr-weblate-bot on weblate/translations-frontend, translation fixes should be submitted on Weblate so they flow in through the sync process.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` at line 1563, The pt-BR translation key
"components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.activesubscription"
is empty and must be populated; open the Weblate project for this repo
(weblate/translations-frontend), find that key in the pt_BR locale and provide
the proper Portuguese label (do not edit the JSON file directly in the repo),
then save/submit the translation so it flows through the automated sync from
seerr-weblate-bot.

1184-1184: ⚠️ Potential issue | 🟡 Minor

Submit these remaining pt-BR typo fixes through Weblate.

Line 1184 still spells the product name as Seer, and Line 1417 still has especias. Both will ship visible typos in Settings. Please correct them in Weblate instead of editing this sync PR directly.

Based on learnings, for automated Weblate sync PRs from seerr-weblate-bot on weblate/translations-frontend, translation fixes should be submitted on Weblate so they flow in through the sync process.

Also applies to: 1417-1417

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/pt_BR.json` at line 1184, Do not edit the sync PR directly;
instead open Weblate and submit translation fixes: update the value for
"components.Settings.SettingsJobsCache.imagecacheDescription" to replace the
incorrect product name `Seer` with the canonical product name used across the
project, and on the string at line 1417 (the other pt-BR entry containing
"especias") correct the typo to "especiais"; submit both fixes through Weblate
so they propagate via the automated seerr-weblate-bot sync.
src/i18n/locale/zh_Hans.json (2)

1446-1446: ⚠️ Potential issue | 🟡 Minor

Use a media-rating term instead of 证书 here.

Certification in this selector refers to content rating / age classification, so 证书加载失败 reads like the wrong feature failed to load. Please update this in Weblate to something like 分级信息加载失败 or 内容分级加载失败.

Based on learnings, translation/i18n issues in automated Weblate sync PRs for this repo should be fixed in Weblate so they flow back through the sync.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/zh_Hans.json` at line 1446, Update the translation for the
key "components.Selector.CertificationSelector.errorLoading" to use a
media-rating term instead of "证书"; replace "证书加载失败" with a phrase like
"分级信息加载失败" or "内容分级加载失败" via Weblate so the change flows through the automated
i18n sync.

1571-1583: ⚠️ Potential issue | 🟡 Minor

Keep blocklist terminology consistent across this namespace.

This block still mixes 封锁清单, 黑名单, and 被屏蔽, so the sidebar, permissions, and actions no longer read as one cohesive feature. Please normalize these strings in Weblate to a single term for the feature.

Based on learnings, translation/i18n issues in automated Weblate sync PRs for this repo should be fixed in Weblate so they flow back through the sync.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/zh_Hans.json` around lines 1571 - 1583, Normalize the
blocklist terminology across the zh_Hans namespace by picking one term (e.g.,
"黑名单" or "封锁清单") and updating all affected translation entries in Weblate so
they stay consistent; specifically update
components.Blocklist.blocklistsettings, components.Blocklist.filterManual,
components.Blocklist.mediaType, components.Blocklist.showAllBlocklisted,
components.Blocklist.filterBlocklistedTags,
components.Discover.RecentRequestsSlider.unableToConnect,
components.Layout.Sidebar.blocklist, components.PermissionEdit.manageblocklist,
components.PermissionEdit.manageblocklistDescription,
components.PermissionEdit.viewblocklistedItems,
components.PermissionEdit.viewblocklistedItemsDescription,
components.RequestList.unableToConnect, and i18n.removefromBlocklist to use the
chosen single term and adjust surrounding phrasing (e.g., change 被屏蔽/被屏蔽的 to the
chosen noun/adjective form) so the sidebar, permission labels, descriptions and
actions read consistently.
src/i18n/locale/it.json (2)

1579-1581: ⚠️ Potential issue | 🟠 Major

These blocklist entries are under the wrong namespace.

These three new keys use component. while the surrounding blocklist namespace in this file is components.. That mismatch can leave the Italian strings unresolved at runtime and force a fallback/missing message on the blocklist UI.

Based on learnings, translation fixes for automated Weblate sync PRs in this repo should be submitted on Weblate so they flow back through the sync.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/it.json` around lines 1579 - 1581, The three i18n keys
"component.BlocklistBlock.blocklistdate",
"component.BlocklistBlock.blocklistedby", and
"component.BlocklistModal.blocklisting" are using the wrong namespace; change
their prefixes from "component." to "components." so they match the surrounding
blocklist keys (i.e., rename to "components.BlocklistBlock.blocklistdate",
"components.BlocklistBlock.blocklistedby", and
"components.BlocklistModal.blocklisting"), then submit this correction through
the Weblate translation interface so it flows back through the automated sync.

1441-1441: ⚠️ Potential issue | 🟡 Minor

Reintroduced Italian typos in shipped strings.

These additions still contain obvious typos: Parole chiavi escluse, ULR Youtube, and parola chiava. Please correct them in Weblate before the next sync so the Italian UI does not ship broken copy.

Based on learnings, translation fixes for automated Weblate sync PRs in this repo should be submitted on Weblate so they flow back through the sync.

Also applies to: 1501-1501, 1516-1516

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/i18n/locale/it.json` at line 1441, Fix the Italian typos in Weblate (so
they flow through the automated sync): update the value for
components.Discover.FilterSlideover.excludeKeywords from "Parole chiavi escluse"
to "Parole chiave escluse", replace any "ULR Youtube" occurrences with "URL
YouTube", and change any "parola chiava" to "parola chiave"; apply the same
corrections to the other affected i18n keys mentioned in the PR and save the
changes in Weblate so the next sync picks them up.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/i18n/locale/it.json`:
- Around line 1605-1606: The tooltip text for
components.Settings.SettingsMain.hideBlocklistedTip is inverted relative to the
label components.Settings.SettingsMain.hideBlocklisted; update
hideBlocklistedTip so it matches the label meaning (e.g., "Nascondi i bloccati
dalla pagina di esplorazione per tutti gli utenti con il permesso \"Gestisci
lista blocchi\"") and submit the change via Weblate so it flows back through the
automated sync.

---

Duplicate comments:
In `@src/i18n/locale/hu.json`:
- Line 558: The Hungarian translation for the key "i18n.showingresults"
currently contains both alternate suffixes ("-tól/től" and "-ból/ből") which
render literally; open the string for "i18n.showingresults" in Weblate and
replace the combined variants with the correct single Hungarian suffixes (or an
appropriate localized phrasing) so only the proper forms appear in the UI, then
save so the change flows back via the sync PR process rather than editing this
sync PR directly.

In `@src/i18n/locale/it.json`:
- Around line 1579-1581: The three i18n keys
"component.BlocklistBlock.blocklistdate",
"component.BlocklistBlock.blocklistedby", and
"component.BlocklistModal.blocklisting" are using the wrong namespace; change
their prefixes from "component." to "components." so they match the surrounding
blocklist keys (i.e., rename to "components.BlocklistBlock.blocklistdate",
"components.BlocklistBlock.blocklistedby", and
"components.BlocklistModal.blocklisting"), then submit this correction through
the Weblate translation interface so it flows back through the automated sync.
- Line 1441: Fix the Italian typos in Weblate (so they flow through the
automated sync): update the value for
components.Discover.FilterSlideover.excludeKeywords from "Parole chiavi escluse"
to "Parole chiave escluse", replace any "ULR Youtube" occurrences with "URL
YouTube", and change any "parola chiava" to "parola chiave"; apply the same
corrections to the other affected i18n keys mentioned in the PR and save the
changes in Weblate so the next sync picks them up.

In `@src/i18n/locale/pt_BR.json`:
- Line 1404: The plural ICU string for the key
"components.Settings.SettingsJobsCache.editJobScheduleSelectorDays" still uses
English ("day"/"days"); update the Portuguese translations for the plural
branches to localized singular and plural forms (e.g., "dia" and "dias") by
editing this key in Weblate (not in the generated sync commit) so the corrected
translation will flow back through the automated weblate sync process.
- Around line 1429-1430: The two i18n keys
components.Settings.SettingsNetwork.dnsCacheForceMaxTtl and
components.Settings.SettingsNetwork.dnsCacheForceMinTtl currently have identical
Portuguese values; change the value for
components.Settings.SettingsNetwork.dnsCacheForceMinTtl from "TTL máximo do
cache DNS" to "TTL mínimo do cache DNS" so min/max are differentiated, and make
this change via Weblate (weblate/translations-frontend) so it flows through the
automated sync from seerr-weblate-bot rather than editing the JSON directly.
- Line 1563: The pt-BR translation key
"components.UserProfile.UserSettings.UserNotificationSettings.UserNotificationsWebPush.activesubscription"
is empty and must be populated; open the Weblate project for this repo
(weblate/translations-frontend), find that key in the pt_BR locale and provide
the proper Portuguese label (do not edit the JSON file directly in the repo),
then save/submit the translation so it flows through the automated sync from
seerr-weblate-bot.
- Line 1184: Do not edit the sync PR directly; instead open Weblate and submit
translation fixes: update the value for
"components.Settings.SettingsJobsCache.imagecacheDescription" to replace the
incorrect product name `Seer` with the canonical product name used across the
project, and on the string at line 1417 (the other pt-BR entry containing
"especias") correct the typo to "especiais"; submit both fixes through Weblate
so they propagate via the automated seerr-weblate-bot sync.

In `@src/i18n/locale/zh_Hans.json`:
- Line 1446: Update the translation for the key
"components.Selector.CertificationSelector.errorLoading" to use a media-rating
term instead of "证书"; replace "证书加载失败" with a phrase like "分级信息加载失败" or
"内容分级加载失败" via Weblate so the change flows through the automated i18n sync.
- Around line 1571-1583: Normalize the blocklist terminology across the zh_Hans
namespace by picking one term (e.g., "黑名单" or "封锁清单") and updating all affected
translation entries in Weblate so they stay consistent; specifically update
components.Blocklist.blocklistsettings, components.Blocklist.filterManual,
components.Blocklist.mediaType, components.Blocklist.showAllBlocklisted,
components.Blocklist.filterBlocklistedTags,
components.Discover.RecentRequestsSlider.unableToConnect,
components.Layout.Sidebar.blocklist, components.PermissionEdit.manageblocklist,
components.PermissionEdit.manageblocklistDescription,
components.PermissionEdit.viewblocklistedItems,
components.PermissionEdit.viewblocklistedItemsDescription,
components.RequestList.unableToConnect, and i18n.removefromBlocklist to use the
chosen single term and adjust surrounding phrasing (e.g., change 被屏蔽/被屏蔽的 to the
chosen noun/adjective form) so the sidebar, permission labels, descriptions and
actions read consistently.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9c07fafc-80cd-4af1-9c9f-fef06615a026

📥 Commits

Reviewing files that changed from the base of the PR and between 0af215c and 50e1b57.

📒 Files selected for processing (38)
  • src/i18n/locale/ar.json
  • src/i18n/locale/bg.json
  • src/i18n/locale/ca.json
  • src/i18n/locale/cs.json
  • src/i18n/locale/da.json
  • src/i18n/locale/de.json
  • src/i18n/locale/el.json
  • src/i18n/locale/es.json
  • src/i18n/locale/es_MX.json
  • src/i18n/locale/et.json
  • src/i18n/locale/eu.json
  • src/i18n/locale/fi.json
  • src/i18n/locale/fr.json
  • src/i18n/locale/he.json
  • src/i18n/locale/hi.json
  • src/i18n/locale/hr.json
  • src/i18n/locale/hu.json
  • src/i18n/locale/it.json
  • src/i18n/locale/ja.json
  • src/i18n/locale/ko.json
  • src/i18n/locale/lb.json
  • src/i18n/locale/lt.json
  • src/i18n/locale/nb_NO.json
  • src/i18n/locale/nl.json
  • src/i18n/locale/pl.json
  • src/i18n/locale/pt_BR.json
  • src/i18n/locale/pt_PT.json
  • src/i18n/locale/ro.json
  • src/i18n/locale/ru.json
  • src/i18n/locale/sk.json
  • src/i18n/locale/sl.json
  • src/i18n/locale/sq.json
  • src/i18n/locale/sr.json
  • src/i18n/locale/sv.json
  • src/i18n/locale/tr.json
  • src/i18n/locale/uk.json
  • src/i18n/locale/zh_Hans.json
  • src/i18n/locale/zh_Hant.json
💤 Files with no reviewable changes (21)
  • src/i18n/locale/zh_Hant.json
  • src/i18n/locale/nl.json
  • src/i18n/locale/sq.json
  • src/i18n/locale/pl.json
  • src/i18n/locale/el.json
  • src/i18n/locale/lt.json
  • src/i18n/locale/bg.json
  • src/i18n/locale/he.json
  • src/i18n/locale/ro.json
  • src/i18n/locale/sr.json
  • src/i18n/locale/es_MX.json
  • src/i18n/locale/ca.json
  • src/i18n/locale/sl.json
  • src/i18n/locale/hr.json
  • src/i18n/locale/nb_NO.json
  • src/i18n/locale/ar.json
  • src/i18n/locale/uk.json
  • src/i18n/locale/hi.json
  • src/i18n/locale/ko.json
  • src/i18n/locale/es.json
  • src/i18n/locale/fi.json
✅ Files skipped from review due to trivial changes (1)
  • src/i18n/locale/sk.json
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/i18n/locale/pt_PT.json
  • src/i18n/locale/eu.json

Comment thread src/i18n/locale/it.json
@fallenbagel fallenbagel disabled auto-merge March 12, 2026 10:57
@fallenbagel fallenbagel merged commit b1adc79 into develop Mar 12, 2026
13 checks passed
@fallenbagel fallenbagel added this to the v3.2.0 milestone Mar 28, 2026
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.

5 participants