mirror of
https://github.com/amnezia-vpn/amneziawg-windows-client.git
synced 2026-06-02 06:23:38 +02:00
select the language from registry
This commit is contained in:
@@ -18,6 +18,7 @@ In addition to this [`README.md`](README.md), the following documents are also a
|
||||
- [`buildrun.md`](docs/buildrun.md) – Instructions on building, localizing, running, and developing for this repository.
|
||||
- [`enterprise.md`](docs/enterprise.md) – A summary of various features and tips for making the application usable in enterprise settings.
|
||||
- [`netquirk.md`](docs/netquirk.md) – A description of various networking quirks and "kill-switch" semantics.
|
||||
- [`userregistry.md`](docs/userregistry.md) – A list of registry keys settable by the user for changing the behavior of the application.
|
||||
|
||||
## License
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# Registry Keys for Users
|
||||
|
||||
#### `HKCU\Software\AmneziaWG\Language`
|
||||
|
||||
When this key is set, the UI will try to use the specified language as display language.
|
||||
|
||||
```
|
||||
> reg add HKCU\Software\AmneziaWG /v LimitedOperatorUI /t REG_SZ /d "en" /f
|
||||
```
|
||||
@@ -8,11 +8,16 @@ package l18n
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/amnezia-vpn/amneziawg-windows-client/services"
|
||||
"golang.org/x/sys/windows"
|
||||
"golang.org/x/text/language"
|
||||
"golang.org/x/text/message"
|
||||
)
|
||||
|
||||
const (
|
||||
LanguageUserKey = "Language"
|
||||
)
|
||||
|
||||
var (
|
||||
printer *message.Printer
|
||||
printerLock sync.Mutex
|
||||
@@ -35,6 +40,14 @@ func prn() *message.Printer {
|
||||
|
||||
// lang returns the user preferred UI language we have most confident translation in the default catalog available.
|
||||
func lang() (tag language.Tag) {
|
||||
keyString, res := services.UserKeyString(LanguageUserKey)
|
||||
if res {
|
||||
keyTag := message.MatchLanguage(keyString)
|
||||
if keyTag.String() == keyString {
|
||||
tag = keyTag
|
||||
return
|
||||
}
|
||||
}
|
||||
tag = language.English
|
||||
confidence := language.No
|
||||
languages, err := windows.GetUserPreferredUILanguages(windows.MUI_LANGUAGE_NAME)
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"golang.org/x/sys/windows/registry"
|
||||
)
|
||||
|
||||
const userRegKey = `Software\AmneziaWG`
|
||||
|
||||
var userKey registry.Key
|
||||
|
||||
func openUserKey() (registry.Key, error) {
|
||||
if userKey != 0 {
|
||||
return userKey, nil
|
||||
}
|
||||
var err error
|
||||
userKey, err = registry.OpenKey(registry.CURRENT_USER, userRegKey, registry.QUERY_VALUE)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return userKey, nil
|
||||
}
|
||||
|
||||
func createUserKey() (registry.Key, error) {
|
||||
closeUserKey()
|
||||
var err error
|
||||
userKey, _, err = registry.CreateKey(registry.CURRENT_USER, userRegKey, registry.SET_VALUE)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return userKey, nil
|
||||
}
|
||||
|
||||
func closeUserKey() {
|
||||
if userKey == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
userKey.Close()
|
||||
userKey = 0
|
||||
}
|
||||
|
||||
func UserKeyString(name string) (string, bool) {
|
||||
key, err := openUserKey()
|
||||
if err != nil {
|
||||
return err.Error(), false
|
||||
}
|
||||
val, _, err := key.GetStringValue(name)
|
||||
if err != nil {
|
||||
return err.Error(), false
|
||||
}
|
||||
return val, true
|
||||
}
|
||||
|
||||
func SetUserKeyString(name string, value string) error {
|
||||
key, err := createUserKey()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer closeUserKey()
|
||||
err = key.SetStringValue(name, value)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user