@@ -201,15 +201,22 @@ export abstract class Loader extends Disposable {
201
201
return str
202
202
}
203
203
204
- private treeNodeValueHasPluralizationKeys ( value : Record < string , any > , locale : string ) {
204
+ private treeNodeValueHasPluralizationKeys ( value : Record < string , any > ) {
205
205
return value && isObject ( value ) && Object . keys ( value ) . some ( key => NESTED_PLURALIZATION_KEYS . includes ( key ) )
206
206
}
207
207
208
- private firstPluralizationKeyValue ( value : Record < string , any > , locale : string ) {
208
+ private firstPluralizationKey ( value : Record < string , any > ) {
209
209
if ( ! value || ! isObject ( value ) )
210
210
return undefined
211
211
212
- const firstPluralizationKey = Object . keys ( value ) . find ( key => NESTED_PLURALIZATION_KEYS . includes ( key ) )
212
+ return Object . keys ( value ) . find ( key => NESTED_PLURALIZATION_KEYS . includes ( key ) )
213
+ }
214
+
215
+ private firstPluralizationKeyValue ( value : Record < string , any > ) {
216
+ if ( ! value || ! isObject ( value ) )
217
+ return undefined
218
+
219
+ const firstPluralizationKey = this . firstPluralizationKey ( value )
213
220
214
221
return firstPluralizationKey ? ( value as Record < string , any > ) [ firstPluralizationKey ] : undefined
215
222
}
@@ -227,8 +234,8 @@ export abstract class Loader extends Disposable {
227
234
if ( ! value )
228
235
return undefined
229
236
230
- if ( Config . _keyStyle !== 'flat' && this . treeNodeValueHasPluralizationKeys ( value , locale ) )
231
- return this . stripAnnotationString ( this . firstPluralizationKeyValue ( value , locale ) , maxlength )
237
+ if ( Config . _keyStyle !== 'flat' && this . treeNodeValueHasPluralizationKeys ( value ) )
238
+ return this . stripAnnotationString ( this . firstPluralizationKeyValue ( value ) , maxlength )
232
239
233
240
let text = JSON
234
241
. stringify ( value , null , stringifySpace )
@@ -252,16 +259,28 @@ export abstract class Loader extends Disposable {
252
259
return new LocaleNode ( { keypath : key , shadow : true } )
253
260
}
254
261
255
- getNodeByKey ( key : string , shadow = false ) : LocaleNode | undefined {
262
+ getNodeByKey ( key : string , shadow = false , locale ?: string ) : LocaleNode | undefined {
256
263
const node = resolveFlattenRoot ( this . getTreeNodeByKey ( key ) )
257
264
if ( ! node && shadow )
258
265
return this . getShadowNodeByKey ( key )
259
266
if ( node && node . type !== 'tree' )
260
267
return node
268
+
269
+ const language = locale || Config . sourceLanguage
270
+ if (
271
+ node
272
+ && node . type === 'tree'
273
+ && Config . _keyStyle !== 'flat'
274
+ && this . treeNodeValueHasPluralizationKeys ( node . values [ language ] )
275
+ ) {
276
+ const subkey = this . firstPluralizationKey ( node . values [ language ] )
277
+ if ( subkey && node . children [ subkey ] && node . children [ subkey ] . type === 'node' )
278
+ return node . children [ subkey ] as LocaleNode
279
+ }
261
280
}
262
281
263
- getTranslationsByKey ( key : string , shadow = true ) {
264
- const node = this . getNodeByKey ( key , shadow )
282
+ getTranslationsByKey ( key : string , shadow = true , locale ?: string ) {
283
+ const node = this . getNodeByKey ( key , shadow , locale )
265
284
if ( ! node )
266
285
return { }
267
286
if ( shadow )
@@ -271,7 +290,7 @@ export abstract class Loader extends Disposable {
271
290
}
272
291
273
292
getRecordByKey ( key : string , locale : string , shadow = false ) : LocaleRecord | undefined {
274
- const trans = this . getTranslationsByKey ( key , shadow )
293
+ const trans = this . getTranslationsByKey ( key , shadow , locale )
275
294
return trans [ locale ]
276
295
}
277
296
0 commit comments