11/* eslint-disable @typescript-eslint/no-var-requires */
22import { BundleAppApi , LmpBundleWallet , v1ApiGlobalProperty } from '@src/utils/lmp' ;
3- import { firstValueFrom , map } from 'rxjs' ;
3+ import { BehaviorSubject , firstValueFrom , map } from 'rxjs' ;
44import { bitcoinWalletManager , walletManager , walletRepository } from '../wallet' ;
55import { AnyBip32Wallet , AnyWallet , InMemoryWallet , WalletType } from '@cardano-sdk/web-extension' ;
66import { logger } from '@lace/common' ;
77import { Wallet } from '@lace/cardano' ;
8- import { setBackgroundStorage } from '../storage' ;
8+ import { getBackgroundStorage , setBackgroundStorage } from '../storage' ;
99import { Bitcoin } from '@lace/bitcoin' ;
10+ import { Language } from '@lace/translation' ;
11+ import { requestMessage$ } from './utilityServices' ;
12+ import { MessageTypes } from '../../types' ;
1013
1114const cardanoLogo = require ( '../../../../assets/icons/browser-view/cardano-logo.svg' ) . default ;
1215const bitcoinLogo = require ( '../../../../assets/icons/browser-view/bitcoin-logo.svg' ) . default ;
@@ -22,6 +25,28 @@ const isInMemoryWallet = (
2225 wallet : AnyWallet < Wallet . WalletMetadata , Wallet . AccountMetadata >
2326) : wallet is InMemoryWallet < Wallet . WalletMetadata , Wallet . AccountMetadata > => wallet . type === WalletType . InMemory ;
2427
28+ // BehaviorSubject for language state, initialized with default 'en'
29+ export const language$ = new BehaviorSubject < Language > ( Language . en ) ;
30+
31+ // Initialize language from storage on startup
32+ ( async ( ) => {
33+ try {
34+ const storage = await getBackgroundStorage ( ) ;
35+ if ( storage . languageChoice ) {
36+ language$ . next ( storage . languageChoice ) ;
37+ }
38+ } catch ( error ) {
39+ logger . error ( 'Failed to initialize language from storage:' , error ) ;
40+ }
41+ } ) ( ) ;
42+
43+ // Subscribe to v1 UI language changes via requestMessage$
44+ requestMessage$ . subscribe ( ( { type, data } ) => {
45+ if ( type === MessageTypes . CHANGE_LANGUAGE ) {
46+ language$ . next ( data as Language ) ;
47+ }
48+ } ) ;
49+
2550const api : BundleAppApi = {
2651 wallets$ : walletRepository . wallets$ . pipe (
2752 map ( ( wallets ) =>
@@ -81,6 +106,12 @@ const api: BundleAppApi = {
81106 } ) ;
82107 }
83108 }
109+ } ,
110+ language$,
111+ setLanguage : async ( language : Language ) : Promise < void > => {
112+ language$ . next ( language ) ;
113+ await setBackgroundStorage ( { languageChoice : language } ) ;
114+ requestMessage$ . next ( { type : MessageTypes . CHANGE_LANGUAGE , data : language } ) ;
84115 }
85116} ;
86117
0 commit comments