go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

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 }