diff --git a/v1/apps/browser-extension-wallet/src/lib/scripts/background/services/lmpService.ts b/v1/apps/browser-extension-wallet/src/lib/scripts/background/services/lmpService.ts index 11835072a..926d50620 100644 --- a/v1/apps/browser-extension-wallet/src/lib/scripts/background/services/lmpService.ts +++ b/v1/apps/browser-extension-wallet/src/lib/scripts/background/services/lmpService.ts @@ -1,12 +1,15 @@ /* eslint-disable @typescript-eslint/no-var-requires */ import { BundleAppApi, LmpBundleWallet, v1ApiGlobalProperty } from '@src/utils/lmp'; -import { firstValueFrom, map } from 'rxjs'; +import { BehaviorSubject, firstValueFrom, map } from 'rxjs'; import { bitcoinWalletManager, walletManager, walletRepository } from '../wallet'; import { AnyBip32Wallet, AnyWallet, InMemoryWallet, WalletType } from '@cardano-sdk/web-extension'; import { logger } from '@lace/common'; import { Wallet } from '@lace/cardano'; -import { setBackgroundStorage } from '../storage'; +import { getBackgroundStorage, setBackgroundStorage } from '../storage'; import { Bitcoin } from '@lace/bitcoin'; +import { Language } from '@lace/translation'; +import { requestMessage$ } from './utilityServices'; +import { MessageTypes } from '../../types'; const cardanoLogo = require('../../../../assets/icons/browser-view/cardano-logo.svg').default; const bitcoinLogo = require('../../../../assets/icons/browser-view/bitcoin-logo.svg').default; @@ -22,6 +25,28 @@ const isInMemoryWallet = ( wallet: AnyWallet ): wallet is InMemoryWallet => wallet.type === WalletType.InMemory; +// BehaviorSubject for language state, initialized with default 'en' +export const language$ = new BehaviorSubject(Language.en); + +// Initialize language from storage on startup +(async () => { + try { + const storage = await getBackgroundStorage(); + if (storage.languageChoice) { + language$.next(storage.languageChoice); + } + } catch (error) { + logger.error('Failed to initialize language from storage:', error); + } +})(); + +// Subscribe to v1 UI language changes via requestMessage$ +requestMessage$.subscribe(({ type, data }) => { + if (type === MessageTypes.CHANGE_LANGUAGE) { + language$.next(data as Language); + } +}); + const api: BundleAppApi = { wallets$: walletRepository.wallets$.pipe( map((wallets) => @@ -81,6 +106,12 @@ const api: BundleAppApi = { }); } } + }, + language$, + setLanguage: async (language: Language): Promise => { + language$.next(language); + await setBackgroundStorage({ languageChoice: language }); + requestMessage$.next({ type: MessageTypes.CHANGE_LANGUAGE, data: language }); } }; diff --git a/v1/apps/browser-extension-wallet/src/utils/lmp.ts b/v1/apps/browser-extension-wallet/src/utils/lmp.ts index 751d31ec2..47aa0f667 100644 --- a/v1/apps/browser-extension-wallet/src/utils/lmp.ts +++ b/v1/apps/browser-extension-wallet/src/utils/lmp.ts @@ -2,6 +2,7 @@ import { RemoteApiProperties, RemoteApiPropertyType } from '@cardano-sdk/web-extension'; import { Observable } from 'rxjs'; import { storage } from 'webextension-polyfill'; +import { Language } from '@lace/translation'; export type LmpBundleWallet = { walletId: string; @@ -13,10 +14,14 @@ export type LmpBundleWallet = { export type BundleAppApi = { wallets$: Observable; activate(walletId: string): Promise; + language$: Observable; + setLanguage(language: Language): Promise; }; export const bundleAppApiProps: RemoteApiProperties = { wallets$: RemoteApiPropertyType.HotObservable, - activate: RemoteApiPropertyType.MethodReturningPromise + activate: RemoteApiPropertyType.MethodReturningPromise, + language$: RemoteApiPropertyType.HotObservable, + setLanguage: RemoteApiPropertyType.MethodReturningPromise }; export const lmpApiBaseChannel = 'bundle-lmp'; export const v1ApiGlobalProperty = 'bundleV1'; diff --git a/v2 b/v2 index 03af6586d..a56ea5025 160000 --- a/v2 +++ b/v2 @@ -1 +1 @@ -Subproject commit 03af6586df7bd84f1696796601ce7f1afb785dfd +Subproject commit a56ea5025d4c5bd16a910385deb85d1296f2f998