59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package analyzer
|
|
|
|
import (
|
|
"math"
|
|
"os"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"golang.org/x/text/currency"
|
|
"golang.org/x/text/language"
|
|
"golang.org/x/text/message"
|
|
)
|
|
|
|
type Amount float64
|
|
|
|
var localizedLanguagePrinter = func() *message.Printer {
|
|
_newLocalizedLanguage := func() (language.Tag, bool) {
|
|
environmentLang := os.Getenv("LANG")
|
|
if environmentLang == "" {
|
|
return language.Tag{}, false
|
|
}
|
|
regexp := regexp.MustCompile(`^([a-z]+)_([A-Z]+)\.[A-Z0-9-]+$`)
|
|
results := regexp.FindAllStringSubmatch(environmentLang, -1)
|
|
if len(results) != 1 || len(results[0]) != 3 {
|
|
return language.Tag{}, false
|
|
}
|
|
|
|
base, err := language.ParseBase(results[0][1])
|
|
if err != nil {
|
|
return language.Tag{}, false
|
|
}
|
|
region, err := language.ParseRegion(results[0][2])
|
|
if err != nil {
|
|
return language.Tag{}, false
|
|
}
|
|
result, err := language.Compose(base, region)
|
|
return result, err == nil
|
|
}
|
|
|
|
result, ok := _newLocalizedLanguage()
|
|
if !ok {
|
|
return message.NewPrinter(language.AmericanEnglish)
|
|
}
|
|
return message.NewPrinter(result)
|
|
}()
|
|
|
|
// Rounded rounds a float to the number of places specified.
|
|
func (amount Amount) Rounded(places int) Amount {
|
|
p := math.Pow10(places)
|
|
return Amount(math.Round(float64(amount)*p) / p)
|
|
}
|
|
|
|
// FormatUSD formats Amount as a string in US dollars.
|
|
func (amount Amount) FormatUSD() string {
|
|
// TODO: Not implemented.
|
|
// Hint: Number localization gets tricky. Can you find a library to help?
|
|
return ""
|
|
}
|