i18n: wires up translations for plugins (#102853)

* i18n: consolidate i18n types & runtime services

* Chore: updates after PR feedback

* Chore: updates after feedback

* Chore: updates after feedback

* Chore: adds feature toggle

* Chore: adds locale to backend

* Chore: adds locales to i18n instance

* Chore: fix missing path in CODEOWNERS

* Chore: fix go lint issues

* Chore: fix missing path in CODEOWNERS

* Chore: updates after PR feedback

* Trigger build

* Chore: updates after PR feedback

* Chore: use resolved language for lookup

* Chore: updates after PR feedback

* Update pkg/plugins/plugins.go

Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>

* Chore: updates after PR feedback

* Chore: updates after PR feedback

---------

Co-authored-by: Will Browne <wbrowne@users.noreply.github.com>
This commit is contained in:
Hugo Häggmark
2025-03-31 06:38:38 +02:00
committed by GitHub
parent 7ea0fab606
commit 18ae5d7f0c
29 changed files with 759 additions and 46 deletions

View File

@ -403,6 +403,108 @@ func Test_ReadPluginJSON(t *testing.T) {
},
},
},
{
name: "can read languages in a datasource plugin",
pluginJSON: func(t *testing.T) io.ReadCloser {
pJSON := `{
"id": "myorg-languages-datasource",
"name": "Languages Datasource",
"type": "datasource",
"languages": ["en-US", "pt-BR"]
}`
return io.NopCloser(strings.NewReader(pJSON))
},
expected: JSONData{
ID: "myorg-languages-datasource",
Name: "Languages Datasource",
Type: TypeDataSource,
Languages: []string{"en-US", "pt-BR"},
Extensions: Extensions{
AddedLinks: []AddedLink{},
AddedComponents: []AddedComponent{},
AddedFunctions: []AddedFunction{},
ExposedComponents: []ExposedComponent{},
ExtensionPoints: []ExtensionPoint{},
},
Dependencies: Dependencies{
GrafanaVersion: "*",
Plugins: []Dependency{},
Extensions: ExtensionsDependencies{
ExposedComponents: []string{},
},
},
},
},
{
name: "can read languages in a panel plugin",
pluginJSON: func(t *testing.T) io.ReadCloser {
pJSON := `{
"id": "myorg-languages-panel",
"name": "Languages Panel",
"type": "panel",
"languages": ["en-US", "pt-BR"]
}`
return io.NopCloser(strings.NewReader(pJSON))
},
expected: JSONData{
ID: "myorg-languages-panel",
Name: "Languages Panel",
Type: TypePanel,
Languages: []string{"en-US", "pt-BR"},
Extensions: Extensions{
AddedLinks: []AddedLink{},
AddedComponents: []AddedComponent{},
AddedFunctions: []AddedFunction{},
ExposedComponents: []ExposedComponent{},
ExtensionPoints: []ExtensionPoint{},
},
Dependencies: Dependencies{
GrafanaVersion: "*",
Plugins: []Dependency{},
Extensions: ExtensionsDependencies{
ExposedComponents: []string{},
},
},
},
},
{
name: "can read languages in an app plugin",
pluginJSON: func(t *testing.T) io.ReadCloser {
pJSON := `{
"id": "myorg-languages-app",
"name": "Languages App",
"type": "app",
"languages": ["en-US", "pt-BR"]
}`
return io.NopCloser(strings.NewReader(pJSON))
},
expected: JSONData{
ID: "myorg-languages-app",
Name: "Languages App",
Type: TypeApp,
Languages: []string{"en-US", "pt-BR"},
Extensions: Extensions{
AddedLinks: []AddedLink{},
AddedComponents: []AddedComponent{},
AddedFunctions: []AddedFunction{},
ExposedComponents: []ExposedComponent{},
ExtensionPoints: []ExtensionPoint{},
},
Dependencies: Dependencies{
GrafanaVersion: "*",
Plugins: []Dependency{},
Extensions: ExtensionsDependencies{
ExposedComponents: []string{},
},
},
},
},
}
for _, tt := range tests {