Skip to content

Commit d38df29

Browse files
committed
Support for locale parameter in translations
Fixes N1ebieski#21
1 parent 2c7777c commit d38df29

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

src/features/translation.ts

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { detectedRange, detectInDoc } from "@src/support/parser";
1010
import { wordMatchRegex } from "@src/support/patterns";
1111
import { relativePath } from "@src/support/project";
1212
import { contract, facade } from "@src/support/util";
13+
import { AutocompleteParsingResult } from "@src/types";
1314
import * as vscode from "vscode";
1415
import { FeatureTag, HoverProvider, LinkProvider } from "..";
1516

@@ -30,18 +31,35 @@ const toFind: FeatureTag = [
3031
},
3132
];
3233

33-
const getDefault = (translation: TranslationItem) => {
34-
const langDefault = getTranslations().items.default;
34+
const getLang = (item: AutocompleteParsingResult.MethodCall): string | undefined => {
35+
let lang = undefined;
3536

36-
return translation[langDefault] ?? translation[Object.keys(translation)[0]];
37+
const children = item.arguments.children;
38+
const locale = (children as AutocompleteParsingResult.Argument[]).find(
39+
(arg) => arg.name === "locale",
40+
);
41+
42+
if (locale && locale.children.length) {
43+
lang = (locale.children as AutocompleteParsingResult.StringValue[])[0].value;
44+
}
45+
46+
return lang;
47+
};
48+
49+
const getTranslationItem = (translation: TranslationItem, lang?: string) => {
50+
if (!lang) {
51+
lang = getTranslations().items.default;
52+
}
53+
54+
return translation[lang] ?? translation[Object.keys(translation)[0]];
3755
};
3856

3957
export const linkProvider: LinkProvider = (doc: vscode.TextDocument) => {
4058
return detectInDoc<vscode.DocumentLink, "string">(
4159
doc,
4260
toFind,
4361
getTranslations,
44-
({ param, index }) => {
62+
({ param, index, item }) => {
4563
if (index !== 0) {
4664
return null;
4765
}
@@ -53,7 +71,10 @@ export const linkProvider: LinkProvider = (doc: vscode.TextDocument) => {
5371
return null;
5472
}
5573

56-
const def = getDefault(translation);
74+
const def = getTranslationItem(
75+
translation,
76+
getLang(item as AutocompleteParsingResult.MethodCall)
77+
);
5778

5879
return new vscode.DocumentLink(
5980
detectedRange(param),
@@ -157,7 +178,7 @@ export const completionProvider = {
157178
if (totalTranslationItems < 200) {
158179
// This will bomb if we have too many translations,
159180
// 200 is an arbitrary but probably safe number
160-
completionItem.detail = getDefault(translations).value;
181+
completionItem.detail = getTranslationItem(translations).value;
161182
}
162183

163184
return completionItem;
@@ -182,7 +203,7 @@ export const completionProvider = {
182203
return Object.entries(getTranslations().items.translations)
183204
.filter(([key, value]) => key === result.param(0).value)
184205
.map(([key, value]) => {
185-
return getDefault(value)
206+
return getTranslationItem(value)
186207
.params.filter((param) => {
187208
return true;
188209
// TODO: Fix this....

0 commit comments

Comments
 (0)