@@ -4,6 +4,72 @@ import fetch from 'node-fetch';
44import YAML from 'js-yaml' ;
55import { transifexApi } from '@transifex/api' ;
66
7+ export function expandTStrings ( tstrings ) {
8+ const presets = tstrings . presets || { } ;
9+ for ( const key of Object . keys ( presets ) ) {
10+ let preset = presets [ key ] ;
11+
12+ if ( preset . name ) {
13+ let names = preset . name . split ( '\n' ) . map ( s => s . trim ( ) ) . filter ( Boolean ) ;
14+ preset . name = names [ 0 ] ;
15+ if ( names . length > 1 ) {
16+ preset . aliases = names . slice ( 1 ) ;
17+ }
18+ }
19+ if ( typeof preset . aliases === 'string' ) {
20+ preset . aliases = preset . aliases . split ( '\n' ) ;
21+ }
22+
23+ if ( ! preset . terms ) continue ;
24+
25+ // remove duplicates
26+ preset . terms = Array . from ( new Set (
27+ // remove translation message if it was included somehow
28+ preset . terms . replace ( / < .* > / , '' )
29+ // convert to an array
30+ . split ( ',' )
31+ // make everything lowercase and remove whitespace
32+ . map ( s => s . toLowerCase ( ) . trim ( ) )
33+ // remove empty strings
34+ . filter ( Boolean )
35+ ) ) ;
36+
37+ if ( ! preset . terms . length ) {
38+ // no need to include empty terms
39+ delete preset . terms ;
40+ if ( ! Object . keys ( preset ) . length ) {
41+ delete presets [ key ] ;
42+ }
43+ }
44+ }
45+
46+ const fields = tstrings . fields || { } ;
47+ for ( const key of Object . keys ( fields ) ) {
48+ let field = fields [ key ] ;
49+ if ( ! field . terms ) continue ;
50+
51+ // remove duplicates
52+ field . terms = Array . from ( new Set (
53+ // remove translation message if it was included somehow
54+ field . terms . replace ( / \[ .* \] / , '' )
55+ // convert to an array
56+ . split ( / [ , ، ] / )
57+ // make everything lowercase and remove whitespace
58+ . map ( s => s . toLowerCase ( ) . trim ( ) )
59+ // remove empty strings
60+ . filter ( Boolean )
61+ ) ) ;
62+
63+ if ( ! field . terms . length ) {
64+ // no need to include empty terms
65+ delete field . terms ;
66+ if ( ! Object . keys ( field ) . length ) {
67+ delete fields [ key ] ;
68+ }
69+ }
70+ }
71+ }
72+
773/**
874 * Sorts the keys of an object alphabetically
975 * @template {object} T @param {T } original @returns {T }
@@ -124,67 +190,7 @@ function fetchTranslations(options) {
124190
125191 let locale = { } ;
126192 results . forEach ( ( result , i ) => {
127- let presets = ( result . presets && result . presets . presets ) || { } ;
128- for ( const key of Object . keys ( presets ) ) {
129- let preset = presets [ key ] ;
130-
131- if ( preset . name ) {
132- let names = preset . name . split ( '\n' ) . map ( s => s . trim ( ) ) . filter ( Boolean ) ;
133- preset . name = names [ 0 ] ;
134- if ( names . length > 1 ) {
135- preset . aliases = names . slice ( 1 ) ;
136- }
137- }
138-
139- if ( ! preset . terms ) continue ;
140-
141- // remove duplicates
142- preset . terms = Array . from ( new Set (
143- // remove translation message if it was included somehow
144- preset . terms . replace ( / < .* > / , '' )
145- // convert to an array
146- . split ( ',' )
147- // make everything lowercase and remove whitespace
148- . map ( s => s . toLowerCase ( ) . trim ( ) )
149- // remove empty strings
150- . filter ( Boolean )
151- ) ) ;
152-
153- if ( ! preset . terms . length ) {
154- // no need to include empty terms
155- delete preset . terms ;
156- if ( ! Object . keys ( preset ) . length ) {
157- delete presets [ key ] ;
158- }
159- }
160- }
161-
162- let fields = ( result . presets && result . presets . fields ) || { } ;
163- for ( const key of Object . keys ( fields ) ) {
164- let field = fields [ key ] ;
165- if ( ! field . terms ) continue ;
166-
167- // remove duplicates
168- field . terms = Array . from ( new Set (
169- // remove translation message if it was included somehow
170- field . terms . replace ( / \[ .* \] / , '' )
171- // convert to an array
172- . split ( / [ , ، ] / )
173- // make everything lowercase and remove whitespace
174- . map ( s => s . toLowerCase ( ) . trim ( ) )
175- // remove empty strings
176- . filter ( Boolean )
177- ) ) ;
178-
179- if ( ! field . terms . length ) {
180- // no need to include empty terms
181- delete field . terms ;
182- if ( ! Object . keys ( field ) . length ) {
183- delete fields [ key ] ;
184- }
185- }
186- }
187-
193+ expandTStrings ( result . presets || { } ) ;
188194 locale [ codes [ i ] ] = result ;
189195 } ) ;
190196
0 commit comments