@@ -12,6 +12,7 @@ import {
1212 AACSemanticAction ,
1313 AACSemanticCategory ,
1414 AACSemanticIntent ,
15+ AstericsGridMetadata ,
1516} from '../core/treeStructure' ;
1617import fs from 'fs' ;
1718
@@ -932,6 +933,45 @@ class AstericsGridProcessor extends BaseProcessor {
932933 page . grid = gridLayout ;
933934 } ) ;
934935
936+ // Set metadata for Asterics Grid files
937+ const astericsMetadata : AstericsGridMetadata = {
938+ format : 'asterics' ,
939+ hasGlobalGrid : false , // Can be extended in the future
940+ } ;
941+
942+ if ( grdFile . grids && grdFile . grids . length > 0 ) {
943+ astericsMetadata . name = this . getLocalizedLabel ( grdFile . grids [ 0 ] . label ) ;
944+
945+ // Extract all unique languages from all grids and elements
946+ const languages = new Set < string > ( ) ;
947+ grdFile . grids . forEach ( ( grid ) => {
948+ if ( grid . label ) {
949+ Object . keys ( grid . label ) . forEach ( ( lang ) => languages . add ( lang ) ) ;
950+ }
951+ grid . gridElements ?. forEach ( ( element ) => {
952+ if ( element . label ) {
953+ Object . keys ( element . label ) . forEach ( ( lang ) => languages . add ( lang ) ) ;
954+ }
955+ // Also check word forms for languages
956+ element . wordForms ?. forEach ( ( wf ) => {
957+ if ( wf . lang ) languages . add ( wf . lang ) ;
958+ } ) ;
959+ } ) ;
960+ } ) ;
961+
962+ if ( languages . size > 0 ) {
963+ astericsMetadata . languages = Array . from ( languages ) . sort ( ) ;
964+ // Set primary locale to English if available, otherwise the first language found
965+ astericsMetadata . locale = languages . has ( 'en' )
966+ ? 'en'
967+ : languages . has ( 'de' )
968+ ? 'de'
969+ : astericsMetadata . languages [ 0 ] ;
970+ }
971+ }
972+
973+ tree . metadata = astericsMetadata ;
974+
935975 // Set the home page from metadata.homeGridId
936976 if ( grdFile . metadata && grdFile . metadata . homeGridId ) {
937977 tree . rootId = grdFile . metadata . homeGridId ;
@@ -1523,6 +1563,8 @@ class AstericsGridProcessor extends BaseProcessor {
15231563 } ) ;
15241564 }
15251565
1566+ const locale = tree . metadata ?. locale || 'en' ;
1567+
15261568 return {
15271569 id : button . id ,
15281570 modelName : 'GridElement' ,
@@ -1531,7 +1573,7 @@ class AstericsGridProcessor extends BaseProcessor {
15311573 height : 1 ,
15321574 x : calculatedX ,
15331575 y : calculatedY ,
1534- label : { en : button . label } ,
1576+ label : { [ locale ] : button . label } ,
15351577 wordForms : [ ] ,
15361578 image : {
15371579 data : null ,
@@ -1558,7 +1600,7 @@ class AstericsGridProcessor extends BaseProcessor {
15581600 id : page . id ,
15591601 modelName : 'GridData' ,
15601602 modelVersion : '{"major": 5, "minor": 0, "patch": 0}' ,
1561- label : { en : page . name } ,
1603+ label : { [ tree . metadata ?. locale || 'en' ] : page . name } ,
15621604 rowCount : calculatedRows ,
15631605 minColumnCount : calculatedCols ,
15641606 gridElements : gridElements ,
0 commit comments