@@ -49,7 +49,8 @@ const translateHelpers = {
4949 continue ;
5050 }
5151 if ( translate_comments ) {
52- addSegment ( linesToTranslate , currentLine , true ) ;
52+ addSegment ( linesToTranslate , currentLine . charAt ( 0 ) , false ) ;
53+ addSegment ( linesToTranslate , currentLine . substring ( 1 ) , true ) ;
5354 } else {
5455 addSegment ( linesToTranslate , currentLine , false ) ;
5556 }
@@ -92,77 +93,34 @@ const translateHelpers = {
9293 let listSeparator = '' ;
9394 let content = '' ;
9495 switch ( currentSectionType ) {
95- case PARSERCONSTS . INTENT : {
96- // strip line of the list separator
97- listSeparator = currentLine . charAt ( 0 ) ;
98- addSegment ( linesToTranslate , listSeparator + ' ' , false ) ;
99- content = currentLine . slice ( 1 ) . trim ( ) ;
100- let entitiesList = [ ] ;
101- // strip line off labelled entity values,mark pattern any entities as not to localize
102- if ( content . includes ( '{' ) ) {
103- const entityRegex = new RegExp ( / \{ ( .* ?) \} / g) ;
104- let entitiesFound = content . match ( entityRegex ) ;
105- let eStartIndex = - 1 ;
106- let eEndIndex = - 1 ;
107- let entity ;
108- for ( var entityIdx in entitiesFound ) {
109- entity = entitiesFound [ entityIdx ] ;
110- let lEntity = entity . replace ( '{' , '' ) . replace ( '}' , '' ) ;
111- let labelledValue = '' ;
112- let updatedUtteranceLeft = content . substring ( 0 , content . indexOf ( entity ) ) ;
113- let updatedUtteranceRight = content . substring ( content . indexOf ( entity ) + entity . length ) ;
114- // is this a labelled value?
115- if ( lEntity . includes ( '=' ) ) {
116- let entitySplit = lEntity . split ( '=' ) ;
117- if ( entitySplit . length > 2 ) {
118- throw ( new exception ( retCode . errorCode . INVALID_INPUT , '[ERROR]: Nested entity references are not supported in utterance: ' + content ) ) ;
119- }
120- lEntity = entitySplit [ 0 ] . trim ( ) ;
121- labelledValue = entitySplit [ 1 ] . trim ( ) ;
122- eStartIndex = content . indexOf ( entity ) ;
123- eEndIndex = eStartIndex + labelledValue . length - 1 ;
124- content = updatedUtteranceLeft + labelledValue + updatedUtteranceRight ;
125- entitiesList . push ( new helperClasses . entity ( lEntity , labelledValue , eStartIndex , eEndIndex ) ) ;
126- } else {
127- // This is a pattern entity without a labelled value. Do not localize this.
128- eStartIndex = content . indexOf ( lEntity ) - 1 ;
129- eEndIndex = eStartIndex + lEntity . length - 1 ;
130- content = updatedUtteranceLeft + lEntity + updatedUtteranceRight ;
131- entitiesList . push ( new helperClasses . entity ( lEntity , null , eStartIndex , eEndIndex ) ) ;
132- }
96+ case PARSERCONSTS . INTENT :
97+ listSeparator = currentLine . charAt ( 0 ) ;
98+ addSegment ( linesToTranslate , listSeparator + ' ' , false ) ;
99+ content = currentLine . slice ( 1 ) . trim ( ) ;
100+ let skipChars = [ '{' , '}' , '(' , ')' , '[' , ']' , '|' , '=' ]
101+ for ( let i = 0 ; i < content . length ; i ++ ) {
102+ let processedText = ''
103+ let tslt = false
104+ if ( ! skipChars . includes ( content . charAt ( i ) ) ) {
105+ for ( let j = i ; j < content . length && ! skipChars . includes ( content . charAt ( j ) ) ; j ++ ) {
106+ processedText += content . charAt ( j )
107+ }
108+ tslt = true
109+ } else if ( content . charAt ( i ) == '{' ) {
110+ for ( let j = i ; j < content . length && ( content . charAt ( j ) !== '=' && content . charAt ( j ) !== '}' ) ; j ++ ) {
111+ processedText += content . charAt ( j )
133112 }
113+ } else {
114+ processedText += content . charAt ( i )
134115 }
135- let offset = 0 ;
136- let candidateText = '' ;
137- // Tokenize the input utterance.
138- for ( var idx in entitiesList ) {
139- let entity = entitiesList [ idx ] ;
140- if ( entity . start < 0 ) entity . start = 0 ;
141- if ( entity . start !== offset ) {
142- candidateText = content . substring ( offset , entity . start ) ;
143- if ( candidateText . trim ( ) !== '' ) {
144- addSegment ( linesToTranslate , candidateText , true ) ;
145- } else {
146- addSegment ( linesToTranslate , candidateText , false ) ;
147- }
148- }
149- if ( entity . value !== '' ) {
150- addSegment ( linesToTranslate , ' {' + entity . entity + '=' , false ) ;
151- addSegment ( linesToTranslate , content . substring ( entity . start , entity . end + 1 ) . trim ( ) , true ) ;
152- addSegment ( linesToTranslate , '} ' , false ) ;
153- } else {
154- addSegment ( linesToTranslate , ' {' + entity . entity + '} ' , false ) ;
155- }
156- offset = entity . end + 1 ;
157- }
158- if ( offset !== content . length ) {
159- candidateText = content . substring ( offset ) ;
160- if ( candidateText . trim ( ) !== '' ) {
161- addSegment ( linesToTranslate , candidateText . trim ( ) , true ) ;
162- } else {
163- addSegment ( linesToTranslate , candidateText , false ) ;
164- }
116+
117+ if ( processedText . charAt ( 0 ) === ' ' ) {
118+ addSegment ( linesToTranslate , ' ' , false )
165119 }
120+
121+ addSegment ( linesToTranslate , processedText , tslt )
122+ content = content . slice ( processedText . length )
123+ i --
166124 }
167125 break ;
168126 case PARSERCONSTS . NEWENTITY :
@@ -204,7 +162,6 @@ const translateHelpers = {
204162 addSegment ( linesToTranslate , '$' , false ) ;
205163 addSegment ( linesToTranslate , entityName . trim ( ) , true ) ;
206164 addSegment ( linesToTranslate , ' : ' + PARSERCONSTS . QNAALTERATIONS + ' = ' , false ) ;
207- c
208165 } else {
209166 // we would not localize entity line but remember we are under entity section for list entities
210167 // FIX for BF CLI # 121
@@ -219,7 +176,7 @@ const translateHelpers = {
219176 }
220177 } else if ( currentLine . indexOf ( PARSERCONSTS . ANSWER ) === 0 ) {
221178 if ( inAnswer ) {
222- answerData = '' ;
179+ let answerData = '' ;
223180 }
224181 addSegment ( linesToTranslate , currentLine , false ) ;
225182 inAnswer = ! inAnswer ;
0 commit comments