Skip to content

version 1.32.0 release#1168

Merged
VampireChicken12 merged 94 commits into
mainfrom
dev
Feb 7, 2026
Merged

version 1.32.0 release#1168
VampireChicken12 merged 94 commits into
mainfrom
dev

Conversation

@VampireChicken12
Copy link
Copy Markdown
Member

@VampireChicken12 VampireChicken12 commented Feb 7, 2026

Summary by CodeRabbit

Release Notes

  • New Features

    • Added Mini Player button with controls
    • Added playlist management features (mark/unmark unwatched, remove video)
    • Added Save to Watch Later button
    • Added Timestamp Preview functionality
    • Restructured localization to support enhanced UI customization options
  • Documentation

    • Updated contributor credits with new contributors and dynamic link references
  • Chores

    • Updated dependencies and development tooling
    • Enhanced code formatting and linting configuration
    • Contributor record management updates

dnicolson and others added 30 commits January 3, 2026 02:23
Co-authored-by: Nathan <45531575+VampireChicken12@users.noreply.github.com>
Co-authored-by: Dave Nicolson <david.nicolson@gmail.com>
Co-authored-by: VampireChicken12 <Johnbrown51@yahoo.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Carl Fürstenberg <azatoth@gmail.com>
Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net>
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
fixer](https://github.com/postcss/autoprefixer) from 10.4.21 to 10.4.22.
fix: Update playback buttons speed when player speed is changed in menu #1106
fixer](https://github.com/postcss/autoprefixer) from 10.4.22 to 10.4.23.
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Nathan <45531575+VampireChicken12@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…1120)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
#1121)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…dent when a members only video exists in them
Bumps [eslint](https://github.com/eslint/eslint) from 9.38.0 to 9.39.2.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v9.38.0...v9.39.2)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.39.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [zod](https://github.com/colinhacks/zod) from 4.2.1 to 4.3.5.
- [Release notes](https://github.com/colinhacks/zod/releases)
- [Commits](colinhacks/zod@v4.2.1...v4.3.5)

---
updated-dependencies:
- dependency-name: zod
  dependency-version: 4.3.5
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
dependabot Bot and others added 22 commits February 3, 2026 21:42
Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](lodash/lodash@4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash-es
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](lodash/lodash@4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
scripts to run deep dark update scripts
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 7, 2026

Walkthrough

A major refactoring of the extension's localization schema migrates translation structures from flat key-value pairs to deeply nested hierarchies using extras, settings, and enable wrappers across all 14 locale files. Contributors and configuration files are also updated with new entries and minor adjustments.

Changes

Cohort / File(s) Summary
Localization Schema Refactor
public/locales/*.json (ca-ES, cs-CZ, de-DE, en-GB, en-US, en-US.d.ts, es-ES, fa-IR, fr-FR, he-IL, hi-IN, it-IT, ja-JP, ko-KR, nl-NL)
Comprehensive restructuring introducing nested extras, settings, and enable containers for hundreds of translation keys. Adds miniPlayerButton, playlistManagementButtons, saveToWatchLaterButton, deepDarkCSS, and globalVolume features. Reorganizes existing entries (e.g., resumeButton, copiedToClipboard, decreaseLimit/increaseLimit) under new nested structures while preserving text values.
Contributor Management
.all-contributorsrc, README.md
Updates contributor database with new entries (jtoya85, SoSeDiK) and metadata fields (baseBranch, repoType). Reorders existing contributor fields and restructures contributor links in README table to use author-specific commit/issue URLs.
Configuration Updates
package.json, eslint.config.mjs, prettier.config.mjs
Adds npm scripts for deepdark updates, updates dependencies (globals, @types/chrome, @types/node), adds postcss-safe-parser dev dependency, adds Prettier ESLint rule, and migrates Prettier config from CommonJS to ES module export syntax.
Style Cleanup
public/contentStyle.css
Removes deprecated .ytp-big-mode .yte-button-tooltip styling rule (5 lines removed).

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~90 minutes

Possibly related PRs

  • Dev #1115: Both PRs extensively refactor the same localization JSON structures by introducing nested extras/settings/enable blocks and new feature keys across multiple locale files.
  • Separate playlist management buttons #1076: Both PRs modify playlist management and watch-later button localization entries by introducing nested structures for playlistManagementButtons and saveToWatchLaterButton.
  • Changed the translations too #855: Both PRs update .all-contributorsrc and README.md contributor-related content with similar structural and metadata changes.

Suggested labels

released


🐰 Hop hop, translations grow deep,
Nested extras in a heap,
New contributors join the team,
Localization dreams come true, it seems!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title "version 1.32.0 release" is directly related to the changeset, which includes version bumps, new features, dependency updates, and localization changes consistent with a release.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

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

❤️ Share

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

Copy link
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: 18

Caution

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

⚠️ Outside diff range comments (7)
public/locales/fa-IR.json (1)

1-7: ⚠️ Potential issue | 🟠 Major

Persian locale (fa-IR) contains no actual translations — all user-facing strings are in English.

Only langName ("فارسی") is in Persian. Every translation string throughout the file is English text. Unlike other locales (de-DE, ja-JP, ru-RU, etc.) which contain complete translations in their respective languages, fa-IR appears to be untranslated after the structural restructuring. This needs clarification: is this intentional (English fallback) or an oversight during the v1.32.0 refactor? If translations are pending, create a tracking issue to ensure they're completed before release.

public/locales/he-IL.json (1)

1-7: ⚠️ Potential issue | 🟠 Major

Hebrew locale file contains only English translation strings instead of Hebrew translations.

The langCode is correctly set to "he-IL" and langName is "עברית" (Hebrew), but every user-facing string throughout the file is in English. For example, line 5 has "Copy video URL with timestamp" when it should be in Hebrew. Hebrew-speaking users selecting this locale will see a completely English UI, which defeats the purpose of localization.

Additionally, fa-IR.json (Persian/Farsi) exhibits the same issue—all strings are in English despite being intended for Persian-speaking users. Other locales like de-DE, es-ES, and ru-RU are properly translated, making this a notable oversight.

Either provide proper Hebrew (and Persian) translations before shipping this release, or remove these locales from the language selector until translations are available.

public/locales/cs-CZ.json (1)

1-889: ⚠️ Potential issue | 🟠 Major

Czech locale (cs-CZ) contains no Czech translations.

Every user-facing string in this file is in English despite langName being "Čeština". This means Czech-speaking users selecting this locale will see an entirely English UI. If this is intentional (i.e., translations are pending), consider either omitting the locale from the selectable list until translations are ready, or adding a tracking issue for the missing translations.

#!/bin/bash
# Check if previous version of cs-CZ.json had any Czech text
# by looking at git history for non-ASCII characters (Czech uses diacritics)
git log --oneline -5 -- public/locales/cs-CZ.json
echo "---"
# Check how many values contain non-ASCII characters (suggesting actual translations)
python3 -c "
import json, sys
with open('public/locales/cs-CZ.json', 'r') as f:
    data = json.load(f)

def count_strings(obj, path=''):
    total = 0
    translated = 0
    if isinstance(obj, dict):
        for k, v in obj.items():
            if k in ('langCode', 'langName'):
                continue
            t, tr = count_strings(v, f'{path}.{k}')
            total += t
            translated += tr
    elif isinstance(obj, str):
        total = 1
        # Check if string contains non-ASCII chars (diacritics typical of Czech)
        if any(ord(c) > 127 for c in obj):
            translated = 1
    return total, translated

total, translated = count_strings(data)
print(f'Total strings: {total}')
print(f'Strings with non-ASCII chars (likely translated): {translated}')
print(f'Untranslated: {total - translated}')
"
public/locales/hi-IN.json (1)

1-889: ⚠️ Potential issue | 🟡 Minor

Hindi locale (hi-IN) is largely untranslated.

Only a small subset of pages.content.features strings have Hindi translations (e.g., button labels for copyTimestamp, featureMenu, forwardRewind, loop, maximize). The entire pages.options, settings.sections, and most of pages.content.features remain in English. This is a significant gap for Hindi-speaking users.

Also, langName on line 3 is "Hindi" (English) — other locales use the native name (e.g., "한국어", "日本語", "Italiano"). Consider using "हिन्दी" for consistency.

public/locales/ca-ES.json (1)

1-889: ⚠️ Potential issue | 🟠 Major

Catalan locale (ca-ES) is entirely untranslated — every string is in English.

Despite langName: "Català", there is not a single Catalan string in this file. Even the messages section (lines 5-6) is in English. This locale should either be removed from the selectable language list until translations are provided, or flagged with a tracking issue.

This is the same concern as cs-CZ.json but more severe since even basic messages lack translation.

public/locales/fr-FR.json (1)

14-69: ⚠️ Potential issue | 🟠 Major

Extensive untranslated strings in the French locale.

Many strings across the file remain in English rather than being translated to French. Notable areas include:

  • copyTimestampUrlButton.extras.copied (Line 16: "Copied!" instead of e.g. "Copié !")
  • forwardRewindButtons, hideEndScreenCardsButton, loopButton, maximizePlayerButton button labels (Lines 24–59)
  • miniPlayerButton (Lines 61–69)
  • playbackSpeedButtons.extras (Lines 84–87)
  • playlistManagementButtons.extras and saveToWatchLaterButton.extras (Lines 92–108)
  • Many options.extras entries (Lines 231–263)
  • The entire miniPlayer section (Lines 286–315), deepDarkCSS (Lines 329–374), globalVolume (Lines 874–886), and various settings subsections

Consider completing a translation pass on all newly introduced keys.

public/locales/en-GB.json (1)

2-2: ⚠️ Potential issue | 🟡 Minor

langCode should be "en-GB" to match the filename and other locale conventions.

All other locale files use langCode values matching their filenames (e.g., de-DE.json has "de-DE", ja-JP.json has "ja-JP"). The en-GB.json file uses "en-UK", which breaks this pattern and the BCP 47 standard. Since langCode is used in error messages (see checkLocalesForMissingKeys.ts), the mismatch should be corrected for consistency.

🔧 Suggested fix
-	"langCode": "en-UK",
+	"langCode": "en-GB",
🤖 Fix all issues with AI agents
In `@eslint.config.mjs`:
- Line 80: The ESLint rule override "prettier/prettier" currently sets
endOfLine: "auto" which conflicts with the project's Prettier config
(prettier.config.mjs) that sets endOfLine: "lf"; either remove the endOfLine
option from the "prettier/prettier" rule in eslint.config.mjs so Prettier
remains the single source of truth, or make the change the other way by updating
prettier.config.mjs to use "auto" to match the ESLint override — modify the
"prettier/prettier" entry in eslint.config.mjs (or adjust prettier.config.mjs)
accordingly to keep both tools consistent.

In `@public/locales/de-DE.json`:
- Around line 61-69: Several new keys in the German locale remain in English;
update all untranslated strings (e.g., miniPlayerButton,
playlistManagementButtons.extras, saveToWatchLaterButton.extras,
openSettingsOnMajorOrMinorVersionChange, optionDisabled, settingSearch, the
entire miniPlayer section, deepDarkCSS parts, forwardRewindButtons settings, and
globalVolume) with proper German translations, preserving the JSON structure and
key names (e.g., "miniPlayerButton", "playlistManagementButtons.extras",
"globalVolume") and keeping nested objects intact; after translating each
string, validate the JSON (lint/format) to ensure no trailing commas or syntax
errors and run the localization tests or app to confirm strings render
correctly.
- Line 872: The JSON entry for the German translation has a stray acute accent
at the start of the "title" value; locate the object containing the "title" key
with the value "´Lautstärke-Boost Einstellungen" and remove the leading `´` so
it becomes "Lautstärke-Boost Einstellungen", ensuring the JSON string remains
properly quoted and escaped.

In `@public/locales/en-US.json`:
- Around line 256-263: Update the brand capitalization for the Youtube string
under the "youtubeDataApiV3Key" object: change the "input.title" value from
"Enter your Youtube Data API V3 key." to "Enter your YouTube Data API V3 key."
and apply the same change for the equivalent key path
("youtubeDataApiV3Key.input.title") in all other locale files to keep
translations consistent.

In `@public/locales/es-ES.json`:
- Around line 61-69: The Spanish locale file contains many untranslated English
strings; update public/locales/es-ES.json by translating all newly added keys
into Spanish — at minimum translate miniPlayerButton
(miniPlayerButton.button.label and .toggle.off/.on),
playlistManagementButtons.extras, saveToWatchLaterButton.extras,
openSettingsOnMajorOrMinorVersionChange, settingSearch, the entire miniPlayer
settings section, deepDarkCSS entries, onScreenDisplaySettings titles,
playerSpeed.settings.buttons, and the entire globalVolume section; ensure each
key (e.g., miniPlayerButton, playlistManagementButtons, saveToWatchLaterButton,
openSettingsOnMajorOrMinorVersionChange, settingSearch, miniPlayer, deepDarkCSS,
onScreenDisplaySettings, playerSpeed.settings.buttons, globalVolume) contains
correct Spanish strings and matches the existing JSON structure and punctuation
so the file remains valid.
- Around line 577-581: Fix the Spanish typos in the JSON value for the
"saveToWatchLaterButton" -> "enable" -> "label": replace "Habiliar el boton para
ver mas tarde" with the corrected text "Habilitar el botón para ver más tarde"
(fixing "Habiliar"→"Habilitar", "boton"→"botón", and adding the accent in
"más"). Ensure the updated string is placed exactly as the value for the "label"
key under the "enable" object.

In `@public/locales/fa-IR.json`:
- Around line 256-263: Update the user-facing branding inside the
youtubeDataApiV3Key localization object so "Youtube" is capitalized as "YouTube"
to match the rest of the file; locate strings under the youtubeDataApiV3Key key
(e.g., getApiKeyLinkText, input.label, input.title, title) and change any
occurrence of "Youtube" to "YouTube".
- Around line 499-503: Update the translation value for the key
"hideScrollbar.enable.title": replace the string "Hides the pages scrollbar"
with the corrected possessive form "Hides the page's scrollbar" so the grammar
is fixed (ensure the apostrophe is properly escaped/encoded if necessary for the
JSON format).

In `@public/locales/he-IL.json`:
- Around line 499-503: Update the translation value for the
"hideScrollbar.enable.title" key to use the possessive apostrophe: change "Hides
the pages scrollbar" to "Hides the page's scrollbar" so the JSON entry under
"hideScrollbar" -> "enable" -> "title" is corrected.
- Around line 148-151: The "reset" translation's title contains a comma splice:
update the "title" string (key "reset" -> "title") to separate the independent
clauses properly (e.g., replace the comma with a period and lowercase "Click" to
"click", or use a semicolon and lowercase "click") so the sentence reads
grammatically correct for the user-facing string.
- Around line 256-263: Fix inconsistent branding and punctuation in the
"youtubeDataApiV3Key" localization entries: change the input.title value from
"Enter your Youtube Data API V3 key." to use the correct casing "YouTube" and
remove the trailing period to match the title value; ensure the "title" remains
"YouTube API V3 key" and update only the string at key
youtubeDataApiV3Key.input.title so casing and punctuation are consistent.

In `@public/locales/ja-JP.json`:
- Around line 61-69: Translate the untranslated English strings into Japanese
for the specified localization keys: replace the values under "miniPlayerButton"
(e.g., "button.label", "button.toggle.off", "button.toggle.on"), and all strings
under "settings.sections.miniPlayer" and "settings.sections.globalVolume" with
appropriate Japanese text while preserving the JSON keys and structure (do not
change key names like miniPlayerButton, settings.sections.miniPlayer,
settings.sections.globalVolume); ensure phrasing is consistent with the rest of
the ja-JP file and keep any placeholders or punctuation intact.
- Around line 84-87: Update the Japanese translations for the "decreaseLimit"
and "increaseLimit" keys in the ja-JP locale: replace the incorrect "できまっせん"
with the correct "できません" so the values become "再生速度を下げるはできません ({{SPEED}})" and
"再生速度を上げるはできません ({{SPEED}})"; ensure you only change those strings for the keys
"decreaseLimit" and "increaseLimit" in the JSON.

In `@public/locales/ko-KR.json`:
- Around line 61-69: The miniPlayerButton entry contains English strings;
replace button.label ("Mini Player") and button.toggle.off/on ("Mini Player
off"/"Mini Player on") with their Korean equivalents to match the locale; update
the JSON keys under miniPlayerButton → button → label and miniPlayerButton →
button → toggle.off and toggle.on with appropriate Korean translations (e.g.,
label and toggle states consistent with other UI strings like loopButton and
maximizePlayerButton).
- Around line 286-316: The miniPlayer block is still in English; translate all
strings under the "miniPlayer" object (e.g., miniPlayer.button.label,
miniPlayer.button.title, miniPlayer.enable.label, miniPlayer.enable.title,
miniPlayer.settings.position.select.label,
miniPlayer.settings.position.select.options.{bottomCenter,bottomLeft,bottomRight,topCenter,topLeft,topRight},
miniPlayer.settings.position.select.title, miniPlayer.settings.size.label,
miniPlayer.settings.size.title, and miniPlayer.title) into Korean consistent
with the style used in neighboring sections (like customCSS and
forwardRewindButtons) while preserving the JSON keys and structure.
- Around line 874-886: Translate the untranslated strings under the globalVolume
object into Korean: replace enable.label, enable.title, settings.amount.label,
settings.amount.title, and the globalVolume.title with appropriate Korean
equivalents (matching tone and terminology used in volumeBoost translations),
ensuring consistency in phrasing and punctuation with other locale entries;
locate these keys by name (globalVolume, enable.label, enable.title,
settings.amount.label, settings.amount.title) and update their values to Korean.

In `@public/locales/nl-NL.json`:
- Around line 61-69: Several newly added keys in the Dutch locale are still in
English; update the translations for the identified keys by replacing English
strings with proper Dutch equivalents: translate miniPlayerButton
(button.toggle.off/on and button.label), playlistManagementButtons.extras,
saveToWatchLaterButton.extras, openSettingsOnMajorOrMinorVersionChange,
optionDisabled (all nested keys), the entire miniPlayer settings block, the
specified parts of deepDarkCSS, and the globalVolume section; ensure the JSON
keys (e.g., "miniPlayerButton", "playlistManagementButtons.extras",
"saveToWatchLaterButton.extras", "openSettingsOnMajorOrMinorVersionChange",
"optionDisabled", "miniPlayer", "deepDarkCSS", "globalVolume") retain their
names and only the string values are replaced with accurate Dutch translations,
preserving punctuation and interpolation placeholders if any.
- Around line 256-263: The translation for youtubeDataApiV3Key.getApiKeyLinkText
contains a typo ("gier") and should be corrected to a proper Dutch phrase;
update the value of getApiKeyLinkText under the youtubeDataApiV3Key object to
something like "Je kan er één hier verkrijgen" (or another natural Dutch
phrasing meaning "You can get one from here") so the link text reads correctly.
🧹 Nitpick comments (3)
package.json (1)

33-33: globals belongs in devDependencies.

The globals package is only consumed by eslint.config.mjs and is not needed at runtime. It should be moved from dependencies to devDependencies.

Proposed fix

Move "globals": "^17.0.0" from dependencies to devDependencies.

.all-contributorsrc (1)

274-282: Inconsistent field ordering for the SoSeDiK entry.

All other contributor entries follow avatar_url → contributions → login → name → profile ordering, but this entry starts with login → name → avatar_url → profile → contributions. Consider reordering for consistency — the all-contributors CLI will likely normalize this on its next run anyway.

public/locales/he-IL.json (1)

493-498: Informal tone: "Get rid of" differs from the style of other entries.

Most other title strings use formal phrasing (e.g., "Hides all shorts", "Hides the live stream chat"). "Get rid of playlists from homepage" stands out as informal.

✏️ Suggested wording
 				"hidePlaylistRecommendationsFromHomePage": {
 					"enable": {
 						"label": "Hide playlists from homepage",
-						"title": "Get rid of playlists from homepage"
+						"title": "Hides playlist recommendations from the homepage"
 					}
 				},

Comment thread eslint.config.mjs
"no-useless-escape": "off",
"prefer-const": ["error", { destructuring: "any", ignoreReadBeforeAssign: false }],
"prefer-destructuring": ["error", { array: true, object: true }, { enforceForRenamedProperties: true }],
"prettier/prettier": ["error", { endOfLine: "auto", useTabs: true }],
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

endOfLine: "auto" conflicts with Prettier config's "lf".

The Prettier config (prettier.config.mjs line 4) sets endOfLine: "lf", but this ESLint rule overrides it to "auto". This means eslint --fix will accept any line endings, while prettier --check/prettier --write will enforce LF — leading to inconsistent behavior between the two tools.

If the intent is to be lenient on line endings (e.g., for Windows contributors), update prettier.config.mjs to match. Otherwise, remove the endOfLine override here so the Prettier config is the single source of truth.

🤖 Prompt for AI Agents
In `@eslint.config.mjs` at line 80, The ESLint rule override "prettier/prettier"
currently sets endOfLine: "auto" which conflicts with the project's Prettier
config (prettier.config.mjs) that sets endOfLine: "lf"; either remove the
endOfLine option from the "prettier/prettier" rule in eslint.config.mjs so
Prettier remains the single source of truth, or make the change the other way by
updating prettier.config.mjs to use "auto" to match the ESLint override — modify
the "prettier/prettier" entry in eslint.config.mjs (or adjust
prettier.config.mjs) accordingly to keep both tools consistent.

Comment thread public/locales/de-DE.json
Comment on lines +61 to +69
"miniPlayerButton": {
"button": {
"label": "Mini Player",
"toggle": {
"off": "Mini Player off",
"on": "Mini Player on"
}
}
},
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 | 🟠 Major

Many new strings remain untranslated (English) in the German locale.

Similar to other non-English locales, many newly added sections contain English rather than German translations. This includes miniPlayerButton (Lines 61–69), playlistManagementButtons.extras and saveToWatchLaterButton.extras (Lines 92–108), openSettingsOnMajorOrMinorVersionChange (Lines 231–233), optionDisabled (Lines 235–251), settingSearch (Line 254), the entire miniPlayer section (Lines 286–315), parts of deepDarkCSS (Lines 329–374), forwardRewindButtons settings (Lines 376–387), and the globalVolume section (Lines 874–886).

Consider a translation pass for all newly introduced keys.

🤖 Prompt for AI Agents
In `@public/locales/de-DE.json` around lines 61 - 69, Several new keys in the
German locale remain in English; update all untranslated strings (e.g.,
miniPlayerButton, playlistManagementButtons.extras,
saveToWatchLaterButton.extras, openSettingsOnMajorOrMinorVersionChange,
optionDisabled, settingSearch, the entire miniPlayer section, deepDarkCSS parts,
forwardRewindButtons settings, and globalVolume) with proper German
translations, preserving the JSON structure and key names (e.g.,
"miniPlayerButton", "playlistManagementButtons.extras", "globalVolume") and
keeping nested objects intact; after translating each string, validate the JSON
(lint/format) to ensure no trailing commas or syntax errors and run the
localization tests or app to confirm strings render correctly.

Comment thread public/locales/de-DE.json
}
}
},
"title": "´Lautstärke-Boost Einstellungen"
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

Stray accent character in title.

Line 872: "´Lautstärke-Boost Einstellungen" has a spurious ´ at the start.

✏️ Proposed fix
-			"title": "´Lautstärke-Boost Einstellungen"
+			"title": "Lautstärke-Boost Einstellungen"
📝 Committable suggestion

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

Suggested change
"title": "´Lautstärke-Boost Einstellungen"
"title": "Lautstärke-Boost Einstellungen"
🤖 Prompt for AI Agents
In `@public/locales/de-DE.json` at line 872, The JSON entry for the German
translation has a stray acute accent at the start of the "title" value; locate
the object containing the "title" key with the value "´Lautstärke-Boost
Einstellungen" and remove the leading `´` so it becomes "Lautstärke-Boost
Einstellungen", ensuring the JSON string remains properly quoted and escaped.

Comment thread public/locales/en-US.json
Comment on lines +256 to +263
"youtubeDataApiV3Key": {
"getApiKeyLinkText": "You can get one from here",
"input": {
"label": "API Key",
"title": "Enter your Youtube Data API V3 key."
},
"title": "YouTube API V3 key"
}
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

Minor: "Youtube" should be "YouTube" (brand capitalization).

Line 260: "Enter your Youtube Data API V3 key." — The official brand name uses a capital "T": "YouTube".

This same typo appears across all locale files at the equivalent path.

✏️ Proposed fix
 "input": {
 	"label": "API Key",
-	"title": "Enter your Youtube Data API V3 key."
+	"title": "Enter your YouTube Data API V3 key."
 }
📝 Committable suggestion

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

Suggested change
"youtubeDataApiV3Key": {
"getApiKeyLinkText": "You can get one from here",
"input": {
"label": "API Key",
"title": "Enter your Youtube Data API V3 key."
},
"title": "YouTube API V3 key"
}
"youtubeDataApiV3Key": {
"getApiKeyLinkText": "You can get one from here",
"input": {
"label": "API Key",
"title": "Enter your YouTube Data API V3 key."
},
"title": "YouTube API V3 key"
}
🤖 Prompt for AI Agents
In `@public/locales/en-US.json` around lines 256 - 263, Update the brand
capitalization for the Youtube string under the "youtubeDataApiV3Key" object:
change the "input.title" value from "Enter your Youtube Data API V3 key." to
"Enter your YouTube Data API V3 key." and apply the same change for the
equivalent key path ("youtubeDataApiV3Key.input.title") in all other locale
files to keep translations consistent.

Comment thread public/locales/es-ES.json
Comment on lines +61 to +69
"miniPlayerButton": {
"button": {
"label": "Mini Player",
"toggle": {
"off": "Mini Player off",
"on": "Mini Player on"
}
}
},
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 | 🟠 Major

Many new strings remain untranslated (English) in the Spanish locale.

Numerous newly added sections contain English text instead of Spanish translations. This includes but is not limited to: miniPlayerButton (Lines 61–69), playlistManagementButtons.extras (Lines 94–96), saveToWatchLaterButton.extras (Lines 102–108), openSettingsOnMajorOrMinorVersionChange (Lines 231–233), settingSearch (Line 254), the entire miniPlayer settings section (Lines 286–316), large parts of deepDarkCSS (Lines 329–374), onScreenDisplaySettings titles (Lines 626, 651, 666), playerSpeed.settings.buttons (Lines 700–705), and the entire globalVolume section (Lines 874–886).

Consider doing a translation pass for all newly introduced keys to avoid a degraded UX for Spanish-speaking users.

🤖 Prompt for AI Agents
In `@public/locales/es-ES.json` around lines 61 - 69, The Spanish locale file
contains many untranslated English strings; update public/locales/es-ES.json by
translating all newly added keys into Spanish — at minimum translate
miniPlayerButton (miniPlayerButton.button.label and .toggle.off/.on),
playlistManagementButtons.extras, saveToWatchLaterButton.extras,
openSettingsOnMajorOrMinorVersionChange, settingSearch, the entire miniPlayer
settings section, deepDarkCSS entries, onScreenDisplaySettings titles,
playerSpeed.settings.buttons, and the entire globalVolume section; ensure each
key (e.g., miniPlayerButton, playlistManagementButtons, saveToWatchLaterButton,
openSettingsOnMajorOrMinorVersionChange, settingSearch, miniPlayer, deepDarkCSS,
onScreenDisplaySettings, playerSpeed.settings.buttons, globalVolume) contains
correct Spanish strings and matches the existing JSON structure and punctuation
so the file remains valid.

Comment thread public/locales/ko-KR.json
Comment on lines +61 to +69
"miniPlayerButton": {
"button": {
"label": "Mini Player",
"toggle": {
"off": "Mini Player off",
"on": "Mini Player on"
}
}
},
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

New miniPlayerButton strings are untranslated in Korean locale.

The miniPlayerButton label and toggle states are in English. These should be translated to Korean for consistency with other button entries (e.g., loopButton, maximizePlayerButton which use Korean text like "연속 재생", "화면 크기에 맞추기").

🤖 Prompt for AI Agents
In `@public/locales/ko-KR.json` around lines 61 - 69, The miniPlayerButton entry
contains English strings; replace button.label ("Mini Player") and
button.toggle.off/on ("Mini Player off"/"Mini Player on") with their Korean
equivalents to match the locale; update the JSON keys under miniPlayerButton →
button → label and miniPlayerButton → button → toggle.off and toggle.on with
appropriate Korean translations (e.g., label and toggle states consistent with
other UI strings like loopButton and maximizePlayerButton).

Comment thread public/locales/ko-KR.json
Comment on lines +286 to 316
"miniPlayer": {
"button": {
"label": "Mini Player button",
"title": "Adds a button that opens the Mini Player"
},
"select": {
"label": "동영상 화질",
"title": "항상 선택한 화질로 동영상이 재생됩니다."
},
"title": "동영상 화질 자동 변경"
},
"bottomButtons": {
"clear": {
"title": "확장과 관련된 데이터를 PC에서 모두 삭제합니다.",
"value": "데이터 삭제"
},
"confirm": {
"title": "작업을 진행하려면 다시 누르세요",
"value": "확인"
},
"openTab": {
"title": "새 탭에서 설정 열기"
},
"reset": {
"title": "모든 설정을 기본값으로 변경합니다. 진행을 원하시면 확인을 누르세요",
"value": "초기화"
}
},
"buttonPlacement": {
"select": {
"buttonNames": {
"copyTimestampUrlButton": "현재 시간 주소 복사 버튼",
"decreasePlaybackSpeedButton": "속도 조절 버튼",
"forwardButton": "빨리 감기 버튼",
"hideEndScreenCardsButton": "최종 화면 숨기기",
"increasePlaybackSpeedButton": "속도 조절 버튼",
"loopButton": "연속 재생 버튼",
"maximizePlayerButton": "화면 크기에 맞추기 버튼",
"openTranscriptButton": "스크립트 보기 버튼",
"rewindButton": "되감기 버튼",
"screenshotButton": "스크린샷 버튼",
"volumeBoostButton": "볼륨 부스트 버튼"
},
"options": {
"below_player": {
"placement": "플레이어 컨트롤 아래",
"value": "아래"
},
"feature_menu": {
"placement": "추가 기능 버튼",
"value": "추가 기능"
},
"player_controls_left": {
"placement": "플레이어 컨트롤의 왼쪽",
"value": "왼쪽"
},
"player_controls_right": {
"placement": "플레이어 컨트롤의 오른쪽",
"value": "오른쪽"
"enable": {
"label": "Open Mini Player when viewing comments",
"title": "Automatically opens the Mini Player when you scroll to comments."
},
"settings": {
"position": {
"select": {
"label": "Default Mini Player position",
"options": {
"bottomCenter": "Bottom center",
"bottomLeft": "Bottom left",
"bottomRight": "Bottom right",
"topCenter": "Top center",
"topLeft": "Top left",
"topRight": "Top right"
},
"title": "Sets the starting position before you move the Mini Player."
}
},
"title": "{{BUTTON_NAME}} 을 {{PLACEMENT}} 에 배치하세요"
"size": {
"label": "Default Mini Player size",
"title": "Sets the initial size before you resize the Mini Player."
}
},
"title": "Button placement settings"
"title": "Mini Player settings"
},
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

Entire miniPlayer settings section is untranslated.

All labels, titles, and position options under settings.sections.miniPlayer are in English. This contrasts with other settings sections (e.g., customCSS, forwardRewindButtons, scrollWheelVolumeControl) which have Korean translations.

🤖 Prompt for AI Agents
In `@public/locales/ko-KR.json` around lines 286 - 316, The miniPlayer block is
still in English; translate all strings under the "miniPlayer" object (e.g.,
miniPlayer.button.label, miniPlayer.button.title, miniPlayer.enable.label,
miniPlayer.enable.title, miniPlayer.settings.position.select.label,
miniPlayer.settings.position.select.options.{bottomCenter,bottomLeft,bottomRight,topCenter,topLeft,topRight},
miniPlayer.settings.position.select.title, miniPlayer.settings.size.label,
miniPlayer.settings.size.title, and miniPlayer.title) into Korean consistent
with the style used in neighboring sections (like customCSS and
forwardRewindButtons) while preserving the JSON keys and structure.

Comment thread public/locales/ko-KR.json
Comment on lines +874 to 886
"globalVolume": {
"enable": {
"label": "선택한 테마 사용",
"title": "선택한 테마를 활성화합니다."
"label": "Always start videos with this volume",
"title": "Makes all videos begin at your selected volume automatically"
},
"select": {
"label": "테마 선택",
"title": "적용할 테마를 선택하세요"
"settings": {
"amount": {
"label": "Video start volume",
"title": "The volume applied to every video when it begins playing"
}
},
"title": "YouTube deep dark settings"
"title": "Global Volume Override"
}
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

globalVolume section is entirely untranslated.

The enable.label, enable.title, settings.amount, and section title are all in English. For consistency with other volume-related settings (e.g., volumeBoost which is fully translated to Korean), these should be translated.

🤖 Prompt for AI Agents
In `@public/locales/ko-KR.json` around lines 874 - 886, Translate the untranslated
strings under the globalVolume object into Korean: replace enable.label,
enable.title, settings.amount.label, settings.amount.title, and the
globalVolume.title with appropriate Korean equivalents (matching tone and
terminology used in volumeBoost translations), ensuring consistency in phrasing
and punctuation with other locale entries; locate these keys by name
(globalVolume, enable.label, enable.title, settings.amount.label,
settings.amount.title) and update their values to Korean.

Comment thread public/locales/nl-NL.json
Comment on lines +61 to +69
"miniPlayerButton": {
"button": {
"label": "Mini Player",
"toggle": {
"off": "Mini Player off",
"on": "Mini Player on"
}
}
},
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 | 🟠 Major

Many new strings remain untranslated (English) in the Dutch locale.

Similar to other non-English locales, numerous newly added sections contain English text instead of Dutch translations. This includes miniPlayerButton (Lines 61–69), playlistManagementButtons.extras (Lines 92–100), saveToWatchLaterButton.extras (Lines 102–107), openSettingsOnMajorOrMinorVersionChange (Lines 231–233), optionDisabled (Lines 235–251), the entire miniPlayer settings section (Lines 286–315), parts of deepDarkCSS (Lines 367–372), and the globalVolume section (Lines 874–886).

Consider a translation pass for all newly introduced keys.

🤖 Prompt for AI Agents
In `@public/locales/nl-NL.json` around lines 61 - 69, Several newly added keys in
the Dutch locale are still in English; update the translations for the
identified keys by replacing English strings with proper Dutch equivalents:
translate miniPlayerButton (button.toggle.off/on and button.label),
playlistManagementButtons.extras, saveToWatchLaterButton.extras,
openSettingsOnMajorOrMinorVersionChange, optionDisabled (all nested keys), the
entire miniPlayer settings block, the specified parts of deepDarkCSS, and the
globalVolume section; ensure the JSON keys (e.g., "miniPlayerButton",
"playlistManagementButtons.extras", "saveToWatchLaterButton.extras",
"openSettingsOnMajorOrMinorVersionChange", "optionDisabled", "miniPlayer",
"deepDarkCSS", "globalVolume") retain their names and only the string values are
replaced with accurate Dutch translations, preserving punctuation and
interpolation placeholders if any.

Comment thread public/locales/nl-NL.json
Comment on lines +256 to +263
"youtubeDataApiV3Key": {
"getApiKeyLinkText": "Je kan één gier verkrijgen",
"input": {
"label": "API sleutel",
"title": "Voer uw Youtube Data API V3 sleutel in."
},
"title": "YouTube API V3 key"
}
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

Typo: "gier" (vulture) should be "hier" (here).

Line 257: "Je kan één gier verkrijgen" translates to "You can get one vulture" — this should be "Je kan er één hier verkrijgen" (or similar phrasing for "You can get one from here").

✏️ Proposed fix
 "youtubeDataApiV3Key": {
-	"getApiKeyLinkText": "Je kan één gier verkrijgen",
+	"getApiKeyLinkText": "Je kan er hier één verkrijgen",
 	"input": {
📝 Committable suggestion

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

Suggested change
"youtubeDataApiV3Key": {
"getApiKeyLinkText": "Je kan één gier verkrijgen",
"input": {
"label": "API sleutel",
"title": "Voer uw Youtube Data API V3 sleutel in."
},
"title": "YouTube API V3 key"
}
"youtubeDataApiV3Key": {
"getApiKeyLinkText": "Je kan er hier één verkrijgen",
"input": {
"label": "API sleutel",
"title": "Voer uw Youtube Data API V3 sleutel in."
},
"title": "YouTube API V3 key"
}
🤖 Prompt for AI Agents
In `@public/locales/nl-NL.json` around lines 256 - 263, The translation for
youtubeDataApiV3Key.getApiKeyLinkText contains a typo ("gier") and should be
corrected to a proper Dutch phrase; update the value of getApiKeyLinkText under
the youtubeDataApiV3Key object to something like "Je kan er één hier verkrijgen"
(or another natural Dutch phrasing meaning "You can get one from here") so the
link text reads correctly.

@VampireChicken12 VampireChicken12 merged commit d7abef3 into main Feb 7, 2026
6 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done - Released in YouTube Enhancer Feb 7, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 7, 2026

🎉 This PR is included in version 1.32.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Done - Released

Development

Successfully merging this pull request may close these issues.

2 participants