Skip to content

Commit 4d450df

Browse files
authored
Fixed locales (translations) not being detected with default config (#2724)
* Fixed locales (translations) not being detected with default config * Fixed integration test * Apply i18n settings only if specified * Fixed settings.GetLocale() * Do not print directly to stdout if locale-detection fails (windows) * Give LANG env var priority (windows)
1 parent 3b14b47 commit 4d450df

File tree

7 files changed

+36
-20
lines changed

7 files changed

+36
-20
lines changed

Diff for: commands/instances.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,9 @@ func (s *arduinoCoreServerImpl) Init(req *rpc.InitRequest, stream rpc.ArduinoCor
419419
// Refreshes the locale used, this will change the
420420
// language of the CLI if the locale is different
421421
// after started.
422-
i18n.Init(s.settings.GetString("locale"))
422+
if locale, ok, _ := s.settings.GetStringOk("locale"); ok {
423+
i18n.Init(locale)
424+
}
423425

424426
return nil
425427
}

Diff for: commands/service.go

+1-7
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,14 @@ import (
1919
"context"
2020

2121
"github.com/arduino/arduino-cli/internal/cli/configuration"
22-
"github.com/arduino/arduino-cli/internal/i18n"
2322
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
2423
"github.com/arduino/arduino-cli/version"
2524
)
2625

2726
// NewArduinoCoreServer returns an implementation of the ArduinoCoreService gRPC service
2827
// that uses the provided version string.
2928
func NewArduinoCoreServer() rpc.ArduinoCoreServiceServer {
30-
settings := configuration.NewSettings()
31-
32-
// Setup i18n
33-
i18n.Init(settings.Locale())
34-
35-
return &arduinoCoreServerImpl{settings: settings}
29+
return &arduinoCoreServerImpl{settings: configuration.NewSettings()}
3630
}
3731

3832
type arduinoCoreServerImpl struct {

Diff for: commands/service_settings_test.go

-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ func TestGetAll(t *testing.T) {
6262
"user": `+defaultUserDir.GetEncodedValue()+`
6363
},
6464
"library": {},
65-
"locale": "en",
6665
"logging": {
6766
"format": "text",
6867
"level": "info"

Diff for: internal/cli/configuration/defaults.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func SetDefaults(settings *Settings) {
7373
setKeyTypeSchema("network.user_agent_ext", "")
7474

7575
// locale
76-
setDefaultValueAndKeyTypeSchema("locale", "en")
76+
setKeyTypeSchema("locale", "")
7777
}
7878

7979
// InjectEnvVars change settings based on the environment variables values

Diff for: internal/cli/configuration/locale.go

+3
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,8 @@
1616
package configuration
1717

1818
func (s *Settings) Locale() string {
19+
if locale, ok, err := s.GetStringOk("locale"); ok && err == nil {
20+
return locale
21+
}
1922
return s.Defaults.GetString("locale")
2023
}

Diff for: internal/i18n/detect_windows.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,24 @@
1616
package i18n
1717

1818
import (
19-
"fmt"
2019
"strings"
2120
"syscall"
2221
"unsafe"
22+
23+
"github.com/sirupsen/logrus"
2324
)
2425

2526
func getLocaleIdentifier() string {
2627
defer func() {
2728
if r := recover(); r != nil {
28-
fmt.Println("failed to get windows user locale", r)
29+
logrus.WithField("error", r).Errorf("Failed to get windows user locale")
2930
}
3031
}()
3132

33+
if loc := getLocaleIdentifierFromEnv(); loc != "" {
34+
return loc
35+
}
36+
3237
dll := syscall.MustLoadDLL("kernel32")
3338
defer dll.Release()
3439
proc := dll.MustFindProc("GetUserDefaultLocaleName")

Diff for: internal/integrationtest/config/config_test.go

+21-8
Original file line numberDiff line numberDiff line change
@@ -882,25 +882,25 @@ build.unk: 123
882882
t.Cleanup(func() { unkwnownConfig.Remove() })
883883

884884
// Run "config get" with a configuration containing an unknown key
885-
out, _, err := cli.Run("config", "get", "locale", "--config-file", unkwnownConfig.String())
885+
out, _, err := cli.Run("config", "get", "daemon.port", "--config-file", unkwnownConfig.String())
886886
require.NoError(t, err)
887-
require.Equal(t, "en", strings.TrimSpace(string(out)))
887+
require.Equal(t, `"50051"`, strings.TrimSpace(string(out)))
888888

889-
// Run "config get" with a configuration containing an invalid key
889+
// Run "config get" with a configuration containing an invalid value
890890
invalidConfig := paths.New(filepath.Join(tmp, "invalid.yaml"))
891-
invalidConfig.WriteFile([]byte(`locale: 123`))
891+
invalidConfig.WriteFile([]byte(`daemon.port: 123`))
892892
t.Cleanup(func() { invalidConfig.Remove() })
893-
out, _, err = cli.Run("config", "get", "locale", "--config-file", invalidConfig.String())
893+
out, _, err = cli.Run("config", "get", "daemon.port", "--config-file", invalidConfig.String())
894894
require.NoError(t, err)
895-
require.Equal(t, "en", strings.TrimSpace(string(out)))
895+
require.Equal(t, `"50051"`, strings.TrimSpace(string(out)))
896896

897897
// Run "config get" with a configuration containing a null array
898898
nullArrayConfig := paths.New(filepath.Join(tmp, "null_array.yaml"))
899899
nullArrayConfig.WriteFile([]byte(`board_manager.additional_urls:`))
900900
t.Cleanup(func() { nullArrayConfig.Remove() })
901-
out, _, err = cli.Run("config", "get", "locale", "--config-file", invalidConfig.String())
901+
out, _, err = cli.Run("config", "get", "daemon.port", "--config-file", nullArrayConfig.String())
902902
require.NoError(t, err)
903-
require.Equal(t, "en", strings.TrimSpace(string(out)))
903+
require.Equal(t, `"50051"`, strings.TrimSpace(string(out)))
904904
}
905905

906906
func TestConfigViaEnvVars(t *testing.T) {
@@ -931,3 +931,16 @@ func TestConfigViaEnvVars(t *testing.T) {
931931
require.NoError(t, err)
932932
require.Equal(t, "20\n\n", string(out))
933933
}
934+
935+
func TestI18N(t *testing.T) {
936+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
937+
defer env.CleanUp()
938+
939+
out, _, err := cli.RunWithCustomEnv(map[string]string{"LC_ALL": "it"})
940+
require.NoError(t, err)
941+
require.Contains(t, string(out), "Comandi disponibili")
942+
943+
out, _, err = cli.RunWithCustomEnv(map[string]string{"LC_ALL": "en"})
944+
require.NoError(t, err)
945+
require.Contains(t, string(out), "Available Commands")
946+
}

0 commit comments

Comments
 (0)