@@ -58,10 +58,18 @@ const ESSENTIALS = new Set(['cold', 'come', 'die', 'drink', 'eat', 'fire', 'good
5858const BODY = new Set ( [ 'belly' , 'blood' , 'bone' , 'breast' , 'ear' , 'eye' , 'fat' , 'foot' , 'hair' , 'hand' , 'head' , 'hear' , 'heart' , 'knee' , 'liver' , 'mouth' , 'neck' , 'nose' , 'skin' , 'tongue' , 'tooth' ] ) ;
5959const PEOPLE = new Set ( [ 'I' , 'man' , 'many' , 'one' , 'person' , 'that' , 'this' , 'two' , 'we' , 'what' , 'who' , 'woman' , 'you' ] ) ;
6060
61- const currentCopy = COPY [ getLocale ( ) ] || COPY . en ;
62- const languageDisplayNameFormatters = [ ...new Set ( [ 'en' , getLocale ( ) ] ) ] . flatMap ( locale => {
63- try { return [ new Intl . DisplayNames ( [ locale ] , { type : 'language' } ) ] ; } catch { return [ ] ; }
64- } ) ;
61+ function copyForLocale ( ) {
62+ return COPY [ getLocale ( ) ] || COPY . en ;
63+ }
64+
65+ function createLanguageDisplayNameFormatters ( ) {
66+ return [ ...new Set ( [ 'en' , getLocale ( ) ] ) ] . flatMap ( locale => {
67+ try { return [ new Intl . DisplayNames ( [ locale ] , { type : 'language' } ) ] ; } catch { return [ ] ; }
68+ } ) ;
69+ }
70+
71+ let currentCopy = copyForLocale ( ) ;
72+ let languageDisplayNameFormatters = createLanguageDisplayNameFormatters ( ) ;
6573let currentThemeMode = 'system' ;
6674loadMode ( ) . then ( mode => { currentThemeMode = mode ; applyMode ( mode , { syncStorage : false } ) ; } ) ;
6775watch ( ( ) => currentThemeMode ) ;
@@ -128,6 +136,15 @@ function languageAliases(language) {
128136 return [ ...new Set ( aliases . filter ( Boolean ) . map ( normalizeSearch ) ) ] ;
129137}
130138
139+ function rebuildLanguageIndex ( ) {
140+ if ( ! lexicon ) return ;
141+ languageLabels = new Map ( lexicon . languages . map ( language => [ languageLabel ( language ) , language ] ) ) ;
142+ languageRows = lexicon . languages . map ( ( language , index ) => {
143+ const aliases = languageAliases ( language ) ;
144+ return { language, index, aliases, searchText : aliases . join ( ' ' ) } ;
145+ } ) ;
146+ }
147+
131148function languageMatchScore ( row , query ) {
132149 if ( row . aliases . includes ( query ) ) return 0 ;
133150 if ( row . aliases . some ( alias => alias . startsWith ( query ) ) ) return 1 ;
@@ -341,6 +358,24 @@ elements['word-dialog'].addEventListener('click', event => {
341358 if ( event . target === elements [ 'word-dialog' ] ) elements [ 'word-dialog' ] . close ( ) ;
342359} ) ;
343360
361+ document . addEventListener ( 'wb-locale-changed' , ( ) => {
362+ const selectedLabel = selectedLanguage ? languageLabel ( selectedLanguage ) : '' ;
363+ const pickerQuery = languagePickerOpen && elements [ 'language-input' ] . value !== selectedLabel
364+ ? elements [ 'language-input' ] . value
365+ : '' ;
366+ currentCopy = copyForLocale ( ) ;
367+ languageDisplayNameFormatters = createLanguageDisplayNameFormatters ( ) ;
368+ applyCopy ( ) ;
369+ if ( ! lexicon ) return ;
370+ rebuildLanguageIndex ( ) ;
371+ elements [ 'concept-count' ] . textContent = lexicon . conceptCount . toLocaleString ( getLocale ( ) ) ;
372+ elements [ 'language-count' ] . textContent = lexicon . languageCount . toLocaleString ( getLocale ( ) ) ;
373+ elements [ 'variety-count' ] . textContent = lexicon . varietyCount . toLocaleString ( getLocale ( ) ) ;
374+ if ( languagePickerOpen ) renderLanguageOptions ( pickerQuery ) ;
375+ else if ( selectedLanguage ) elements [ 'language-input' ] . value = languageLabel ( selectedLanguage ) ;
376+ render ( ) ;
377+ } ) ;
378+
344379applyCopy ( ) ;
345380try {
346381 const response = await fetch ( './data/panlex-swadesh-110.json' ) ;
@@ -349,11 +384,7 @@ try {
349384 elements [ 'concept-count' ] . textContent = lexicon . conceptCount . toLocaleString ( ) ;
350385 elements [ 'language-count' ] . textContent = lexicon . languageCount . toLocaleString ( ) ;
351386 elements [ 'variety-count' ] . textContent = lexicon . varietyCount . toLocaleString ( ) ;
352- languageLabels = new Map ( lexicon . languages . map ( language => [ languageLabel ( language ) , language ] ) ) ;
353- languageRows = lexicon . languages . map ( ( language , index ) => {
354- const aliases = languageAliases ( language ) ;
355- return { language, index, aliases, searchText : aliases . join ( ' ' ) } ;
356- } ) ;
387+ rebuildLanguageIndex ( ) ;
357388 const preferredUid = DEFAULT_UID [ getLocale ( ) ] || 'eng-000' ;
358389 selectLanguage ( lexicon . languages . find ( language => language . uid === preferredUid )
359390 || lexicon . languages . find ( language => language . uid === 'eng-000' ) || lexicon . languages [ 0 ] , { closePicker : false } ) ;
0 commit comments