diff --git a/providers/amazon/amazon.go b/providers/amazon/amazon.go index f1119f6..175eb0d 100644 --- a/providers/amazon/amazon.go +++ b/providers/amazon/amazon.go @@ -16,5 +16,10 @@ type Provider struct{} // BuildURI generates a search URL for Amazon. func (p *Provider) BuildURI(q string) string { - return fmt.Sprintf("https://www.amazon.com/s/?keywords=%s", url.QueryEscape(q)) + switch providers.Region() { + case "GB": + return fmt.Sprintf("https://www.amazon.co.uk/s/?keywords=%s", url.QueryEscape(q)) + default: + return fmt.Sprintf("https://www.amazon.com/s/?keywords=%s", url.QueryEscape(q)) + } } diff --git a/providers/providers.go b/providers/providers.go index 60d0c6b..df9c3b7 100644 --- a/providers/providers.go +++ b/providers/providers.go @@ -2,11 +2,18 @@ package providers import ( "fmt" + "os" "regexp" "sort" "strings" "github.com/zquestz/s/launcher" + "golang.org/x/text/language" +) + +const ( + defaultLanguage = "en" + defaultRegion = "US" ) // Provider interface provides a way to build the URI @@ -95,3 +102,44 @@ func ProviderNames() []string { sort.Strings(names) return names } + +// Region returns the users region code. +// Eg. "US", "GB", etc +func Region() string { + l := locale() + + tag, err := language.Parse(l) + if err != nil { + return defaultRegion + } + + region, _ := tag.Region() + + return region.String() +} + +// Language returns the users language code. +// Eg. "en", "es", etc +func Language() string { + l := locale() + + tag, err := language.Parse(l) + if err != nil { + return defaultLanguage + } + + base, _ := tag.Base() + + return base.String() +} + +func locale() string { + lang := os.Getenv("LANG") + if lang == "" { + return "" + } + + locale := strings.Split(lang, ".")[0] + + return locale +}