Skip to content

Commit 25a50cc

Browse files
Add support for Go to Definition of a translation key
1 parent 1eb9537 commit 25a50cc

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

src/core/loaders/Loader.ts

+28-9
Original file line numberDiff line numberDiff line change
@@ -201,15 +201,22 @@ export abstract class Loader extends Disposable {
201201
return str
202202
}
203203

204-
private treeNodeValueHasPluralizationKeys(value: Record<string, any>, locale: string) {
204+
private treeNodeValueHasPluralizationKeys(value: Record<string, any>) {
205205
return value && isObject(value) && Object.keys(value).some(key => NESTED_PLURALIZATION_KEYS.includes(key))
206206
}
207207

208-
private firstPluralizationKeyValue(value: Record<string, any>, locale: string) {
208+
private firstPluralizationKey(value: Record<string, any>) {
209209
if (!value || !isObject(value))
210210
return undefined
211211

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)
213220

214221
return firstPluralizationKey ? (value as Record<string, any>)[firstPluralizationKey] : undefined
215222
}
@@ -227,8 +234,8 @@ export abstract class Loader extends Disposable {
227234
if (!value)
228235
return undefined
229236

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)
232239

233240
let text = JSON
234241
.stringify(value, null, stringifySpace)
@@ -252,16 +259,28 @@ export abstract class Loader extends Disposable {
252259
return new LocaleNode({ keypath: key, shadow: true })
253260
}
254261

255-
getNodeByKey(key: string, shadow = false): LocaleNode | undefined {
262+
getNodeByKey(key: string, shadow = false, locale?: string): LocaleNode | undefined {
256263
const node = resolveFlattenRoot(this.getTreeNodeByKey(key))
257264
if (!node && shadow)
258265
return this.getShadowNodeByKey(key)
259266
if (node && node.type !== 'tree')
260267
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+
}
261280
}
262281

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)
265284
if (!node)
266285
return {}
267286
if (shadow)
@@ -271,7 +290,7 @@ export abstract class Loader extends Disposable {
271290
}
272291

273292
getRecordByKey(key: string, locale: string, shadow = false): LocaleRecord | undefined {
274-
const trans = this.getTranslationsByKey(key, shadow)
293+
const trans = this.getTranslationsByKey(key, shadow, locale)
275294
return trans[locale]
276295
}
277296

0 commit comments

Comments
 (0)