lang.go (1269B)
1 package lang 2 3 import ( 4 "context" 5 "fmt" 6 7 iso639_3 "github.com/barbashov/iso639-3" 8 ) 9 10 var ( 11 // Default language (hard to get around) 12 Default = "eng" // ISO639-3 13 ) 14 15 // Language is used to set and get language translation to be used for rendering output. 16 type Language struct { 17 Code string 18 Name string 19 } 20 21 // LanguageFromCode returns a Language object from the given ISO-639-3 (three-letter) code. 22 // 23 // Will fail if an unknown code is provided. 24 func LanguageFromCode(code string) (Language, error) { 25 r := iso639_3.FromAnyCode(code) 26 if r == nil { 27 return Language{}, fmt.Errorf("invalid language code: %s", code) 28 } 29 return Language{ 30 Code: r.Part3, 31 Name: r.Name, 32 }, nil 33 } 34 35 // String implements the String interface. 36 // 37 // Returns a representation of the Language fit for debugging. 38 func (l Language) String() string { 39 return fmt.Sprintf("%s (%s)", l.Code, l.Name) 40 } 41 42 // LanguageFromContext scans the given context for a valid language 43 // specification, and if found returns a corresponding language 44 // object. 45 func LanguageFromContext(ctx context.Context) (Language, bool) { 46 //var code string 47 var lang Language 48 var ok bool 49 if ctx.Value("Language") != nil { 50 lang = ctx.Value("Language").(Language) 51 ok = true 52 //code = lang.Code 53 } 54 return lang, ok 55 }