diff --git a/packages/craftcms-cp/src/utilities/translate.ts b/packages/craftcms-cp/src/utilities/translate.ts index fd916f8f07c..48f7c7fb133 100644 --- a/packages/craftcms-cp/src/utilities/translate.ts +++ b/packages/craftcms-cp/src/utilities/translate.ts @@ -1,5 +1,9 @@ import {formatNumber} from './format.js'; +type TranslationStore = Record>; + +let translationsStore: TranslationStore = {}; + export function tokenizePattern( pattern: string ): Array | false { @@ -202,18 +206,25 @@ export function formatMessage(pattern: string, params: object): string { return tokens.join(''); } +export function setTranslations(translations: TranslationStore) { + translationsStore = translations; +} + export function t( message: string, params?: Record, category: string = 'app', - store?: Record + store: TranslationStore = translationsStore ): string { if ( store && typeof store[category] !== 'undefined' && typeof store[category][message] !== 'undefined' ) { - message = store[category][message]; + const translated = store?.[category]?.[message]; + if (translated !== undefined) { + message = translated; + } } if (params) { diff --git a/resources/js/bootstrap/cp.ts b/resources/js/bootstrap/cp.ts index b61344abec4..e1f75f732dc 100644 --- a/resources/js/bootstrap/cp.ts +++ b/resources/js/bootstrap/cp.ts @@ -15,6 +15,7 @@ import ProjectConfig from '@/components/utilities/ProjectConfig/ProjectConfig.vu import AssetIndexes from '@/components/utilities/AssetIndexes/AssetIndexes.vue'; import SystemMessages from '@/components/utilities/SystemMessages/SystemMessages.vue'; import DeprecationErrorsToolbar from '@/components/utilities/DeprecationErrors/DeprecationErrorsToolbar.vue'; +import {setTranslations} from '@craftcms/cp/utilities/translate.ts.mjs'; let bootedCallbacks: Array<(instance: any) => void> = []; let bootingCallbacks: Array<(instance: any) => void> = []; @@ -58,6 +59,8 @@ const Cp = { appId: config.get('systemUid', ''), canAccessQueueManager: config.get('canAccessQueueManager', false), }); + + setTranslations(this.initialConfig.translations); }, async start() { diff --git a/src/Cp/Cp.php b/src/Cp/Cp.php index eaeca839674..fa21b7604af 100644 --- a/src/Cp/Cp.php +++ b/src/Cp/Cp.php @@ -5,8 +5,10 @@ namespace CraftCms\Cms\Cp; use CraftCms\Cms\Cms; +use CraftCms\Cms\Support\Facades\I18N; use CraftCms\Cms\Support\Url; use Illuminate\Support\Collection; +use stdClass; readonly class Cp { @@ -25,6 +27,7 @@ public static function config(): Collection 'csrfTokenName', ]) ->merge([ + 'translations' => I18N::getAllTranslationsForLocale(app()->getLocale()) ?: new stdClass, 'csrfTokenValue' => csrf_token(), 'actionUrl' => Url::actionUrl(), 'cpUrl' => Url::cpUrl(),