Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .changeset/30512-service-settings-locales-a.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@objectstack/service-settings': patch
---

i18n(service-settings): the built-in Setup settings pages ship in Traditional Chinese, Arabic, French and Brazilian Portuguese

Clause-②: no
Metadata-protocol: none

The built-in settings pages (Mail, SMS, Branding, Company, Localization, Authentication, File Storage, AI & Embedder, Knowledge, and the Data Lifecycle page `@objectstack/objectql` registers) now carry `zh-Hant`, `ar`, `fr` and `pt-BR` beside the existing `en`, `zh-CN`, `ja-JP` and `es-ES`: page titles and descriptions, group headings, field labels and help, option labels, banners, action buttons and the source badges. An administrator reading Setup in one of those languages sees these pages in their own language instead of English. Country pickers name each country in the reader's language through `Intl.DisplayNames`, as the existing locales do. The settings coverage test now holds each new locale to the same full coverage. First half of package 6 of #30512; `ru`, `de` and `ko` follow in the second half.
698 changes: 698 additions & 0 deletions packages/services/service-settings/src/translations/ar.ts

Large diffs are not rendered by default.

752 changes: 752 additions & 0 deletions packages/services/service-settings/src/translations/fr.ts

Large diffs are not rendered by default.

10 changes: 9 additions & 1 deletion packages/services/service-settings/src/translations/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,20 @@ import { en } from './en.js';
import { zhCN } from './zh-CN.js';
import { jaJP } from './ja-JP.js';
import { esES } from './es-ES.js';
import { zhHant } from './zh-Hant.js';
import { ar } from './ar.js';
import { fr } from './fr.js';
import { ptBR } from './pt-BR.js';

export { en, zhCN, jaJP, esES };
export { en, zhCN, jaJP, esES, zhHant, ar, fr, ptBR };

export const settingsBuiltinTranslations: PlatformTranslationBundle = {
en,
'zh-CN': zhCN,
'ja-JP': jaJP,
'es-ES': esES,
'zh-Hant': zhHant,
'ar': ar,
'fr': fr,
'pt-BR': ptBR,
};
736 changes: 736 additions & 0 deletions packages/services/service-settings/src/translations/pt-BR.ts

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.

/**
* Settings-translation coverage guard (zh-CN / ja-JP / es-ES).
* Settings-translation coverage guard (every shipped non-English locale).
*
* Every built-in settings manifest ships English labels inline; the console
* localizes them by resolving `settings.<namespace>.…` against the shipped
Expand All @@ -24,7 +24,7 @@ import { describe, it, expect } from 'vitest';
import type { SettingsManifest } from '@objectstack/spec/system';
import { lifecycleSettingsManifest } from '@objectstack/objectql';
import * as manifestsModule from '../manifests/index.js';
import { en, zhCN, jaJP, esES } from './index.js';
import { en, zhCN, jaJP, esES, zhHant, ar, fr, ptBR } from './index.js';

// The manifests barrel also exports action handlers and the aggregate array;
// keep only the manifest objects.
Expand Down Expand Up @@ -53,6 +53,10 @@ const LOCALES: Array<[string, { settings?: Record<string, any> }]> = [
['zh-CN', zhCN],
['ja-JP', jaJP],
['es-ES', esES],
['zh-Hant', zhHant],
['ar', ar],
['fr', fr],
['pt-BR', ptBR],
];

function missingFor(data: { settings?: Record<string, any> }, m: SettingsManifest): string[] {
Expand Down
483 changes: 483 additions & 0 deletions packages/services/service-settings/src/translations/zh-Hant.ts

Large diffs are not rendered by default.

Loading