From 78ce07582eec273b3abe12fa48c719c5dcfbfafb Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 7 Oct 2026 22:07:00 +0000 Subject: [PATCH 1/4] test(ui): expect reader font labels to keep brand names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Arabic renders interFontName as إدخال and Welsh renders untitledSerifFontName as Serif Dideitl. The settings buttons should keep Inter and Untitled Serif in those locales. --- .../ui/src/components/bible-reader.test.tsx | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/components/bible-reader.test.tsx b/packages/ui/src/components/bible-reader.test.tsx index 357947b2..e5e99408 100644 --- a/packages/ui/src/components/bible-reader.test.tsx +++ b/packages/ui/src/components/bible-reader.test.tsx @@ -2,7 +2,7 @@ * @vitest-environment jsdom */ // We stub ResizeObserver for jsdom (used by Radix/@floating-ui). The stub methods are intentionally no-ops. -import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { useState, type ReactElement } from 'react'; @@ -29,6 +29,7 @@ import { } from '@/lib/verse-html-utils'; import { installResizeObserverStub } from '@/test/dom-stubs'; +import i18n from '@/i18n'; installResizeObserverStub(); @@ -460,6 +461,43 @@ it('keeps chapter targets canonical while semantic icons follow RTL interface di ).toContain('8.29289'); }); +describe('reader font brand names', () => { + afterEach(async () => { + await i18n.changeLanguage('en'); + }); + + function renderFontSettings(): void { + render( + , + ); + } + + it('shows Inter when Arabic would otherwise translate interFontName', async () => { + await i18n.changeLanguage('ar'); + renderFontSettings(); + + expect(screen.getByRole('button', { name: /Inter/ })).toBeInTheDocument(); + expect(screen.queryByText('إدخال')).not.toBeInTheDocument(); + }); + + it('shows Untitled Serif when Welsh would otherwise translate untitledSerifFontName', async () => { + await i18n.changeLanguage('cy'); + renderFontSettings(); + + expect(screen.getByRole('button', { name: /Untitled Serif/ })).toBeInTheDocument(); + expect(screen.queryByText('Serif Dideitl')).not.toBeInTheDocument(); + }); +}); + describe('BibleReader version picker language', () => { it('seeds the version picker with defaultLanguageId instead of the browser language', () => { const { overrides, requestedLanguages } = overridesRecordingVersionLanguage(); From 03165441d1fd6e7ea7298cab5dcb04e16a49d8d7 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 7 Oct 2026 22:08:22 +0000 Subject: [PATCH 2/4] fix(ui): keep reader font labels as brand names Reader settings called t('interFontName') and t('untitledSerifFontName'), so some locales renamed Inter and Untitled Serif. The buttons now render those names directly. Locale JSON stays upstream-owned. --- .changeset/plain-font-names.md | 5 +++++ packages/ui/src/components/bible-reader.tsx | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 .changeset/plain-font-names.md diff --git a/.changeset/plain-font-names.md b/.changeset/plain-font-names.md new file mode 100644 index 00000000..d9f807a2 --- /dev/null +++ b/.changeset/plain-font-names.md @@ -0,0 +1,5 @@ +--- +'@youversion/platform-react-ui': patch +--- + +Keep the reader font labels Inter and Untitled Serif in every language. diff --git a/packages/ui/src/components/bible-reader.tsx b/packages/ui/src/components/bible-reader.tsx index c074b518..b8ad48f8 100644 --- a/packages/ui/src/components/bible-reader.tsx +++ b/packages/ui/src/components/bible-reader.tsx @@ -1379,6 +1379,9 @@ function UserMenu() { ); } +const INTER_FONT_NAME = 'Inter'; +const UNTITLED_SERIF_FONT_NAME = 'Untitled Serif'; + export function BibleThemeSettingsContent({ theme, fontSize, @@ -1464,7 +1467,7 @@ export function BibleThemeSettingsContent({ > {t('fontLabel')} - {t('interFontName')} + {INTER_FONT_NAME} From 674a218f03f82fbe59bd4fe97e7ba2e1bc0dad95 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 7 Oct 2026 22:11:12 +0000 Subject: [PATCH 3/4] test(ui): stop naming retired font locale keys The reader font tests still named interFontName and untitledSerifFontName. Those strings are gone from code. --- packages/ui/src/components/bible-reader.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/bible-reader.test.tsx b/packages/ui/src/components/bible-reader.test.tsx index e5e99408..d21ec3e4 100644 --- a/packages/ui/src/components/bible-reader.test.tsx +++ b/packages/ui/src/components/bible-reader.test.tsx @@ -481,7 +481,7 @@ describe('reader font brand names', () => { ); } - it('shows Inter when Arabic would otherwise translate interFontName', async () => { + it('shows Inter in Arabic reader font settings', async () => { await i18n.changeLanguage('ar'); renderFontSettings(); @@ -489,7 +489,7 @@ describe('reader font brand names', () => { expect(screen.queryByText('إدخال')).not.toBeInTheDocument(); }); - it('shows Untitled Serif when Welsh would otherwise translate untitledSerifFontName', async () => { + it('shows Untitled Serif in Welsh reader font settings', async () => { await i18n.changeLanguage('cy'); renderFontSettings(); From 2c72ff5cf68d67b4ac3fcdda631baab10e4cbc66 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 8 Oct 2026 15:37:11 +0000 Subject: [PATCH 4/4] fix(ui): address review feedback on font label tests Combine the Arabic and Welsh checks into one test and restore the previous language in try/finally. --- .../ui/src/components/bible-reader.test.tsx | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/packages/ui/src/components/bible-reader.test.tsx b/packages/ui/src/components/bible-reader.test.tsx index d21ec3e4..5cd20b54 100644 --- a/packages/ui/src/components/bible-reader.test.tsx +++ b/packages/ui/src/components/bible-reader.test.tsx @@ -2,7 +2,7 @@ * @vitest-environment jsdom */ // We stub ResizeObserver for jsdom (used by Radix/@floating-ui). The stub methods are intentionally no-ops. -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import { describe, it, expect, vi, beforeEach } from 'vitest'; import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { useState, type ReactElement } from 'react'; @@ -461,13 +461,11 @@ it('keeps chapter targets canonical while semantic icons follow RTL interface di ).toContain('8.29289'); }); -describe('reader font brand names', () => { - afterEach(async () => { - await i18n.changeLanguage('en'); - }); +it('keeps Inter and Untitled Serif in Arabic and Welsh reader font settings', async () => { + const previousLanguage = i18n.language; - function renderFontSettings(): void { - render( + function renderFontSettings(): ReturnType { + return render( { ); } - it('shows Inter in Arabic reader font settings', async () => { + try { await i18n.changeLanguage('ar'); - renderFontSettings(); - + const arabic = renderFontSettings(); expect(screen.getByRole('button', { name: /Inter/ })).toBeInTheDocument(); expect(screen.queryByText('إدخال')).not.toBeInTheDocument(); - }); + arabic.unmount(); - it('shows Untitled Serif in Welsh reader font settings', async () => { await i18n.changeLanguage('cy'); renderFontSettings(); - expect(screen.getByRole('button', { name: /Untitled Serif/ })).toBeInTheDocument(); expect(screen.queryByText('Serif Dideitl')).not.toBeInTheDocument(); - }); + } finally { + await i18n.changeLanguage(previousLanguage); + } }); describe('BibleReader version picker language', () => {