Text file src/cmd/go/testdata/mod/rsc.io_sampler_v1.2.0.txt

     1  rsc.io/sampler@v1.2.0
     2  
     3  -- .mod --
     4  module "rsc.io/sampler"
     5  
     6  require "golang.org/x/text" v0.0.0-20170915032832-14c0d48ead0c
     7  -- .info --
     8  {"Version":"v1.2.0","Name":"25f24110b153246056eccc14a3a4cd81afaff586","Short":"25f24110b153","Time":"2018-02-13T18:13:45Z"}
     9  -- go.mod --
    10  module "rsc.io/sampler"
    11  
    12  require "golang.org/x/text" v0.0.0-20170915032832-14c0d48ead0c
    13  -- hello.go --
    14  // Copyright 2018 The Go Authors. All rights reserved.
    15  // Use of this source code is governed by a BSD-style
    16  // license that can be found in the LICENSE file.
    17  
    18  // Translations by Google Translate.
    19  
    20  package sampler
    21  
    22  var hello = newText(`
    23  
    24  English: en: Hello, world.
    25  French: fr: Bonjour le monde.
    26  Spanish: es: Hola Mundo.
    27  
    28  `)
    29  -- hello_test.go --
    30  // Copyright 2018 The Go Authors. All rights reserved.
    31  // Use of this source code is governed by a BSD-style
    32  // license that can be found in the LICENSE file.
    33  
    34  package sampler
    35  
    36  import (
    37  	"testing"
    38  
    39  	"golang.org/x/text/language"
    40  )
    41  
    42  var helloTests = []struct {
    43  	prefs []language.Tag
    44  	text  string
    45  }{
    46  	{
    47  		[]language.Tag{language.Make("en-US"), language.Make("fr")},
    48  		"Hello, world.",
    49  	},
    50  	{
    51  		[]language.Tag{language.Make("fr"), language.Make("en-US")},
    52  		"Bonjour la monde.",
    53  	},
    54  }
    55  
    56  func TestHello(t *testing.T) {
    57  	for _, tt := range helloTests {
    58  		text := Hello(tt.prefs...)
    59  		if text != tt.text {
    60  			t.Errorf("Hello(%v) = %q, want %q", tt.prefs, text, tt.text)
    61  		}
    62  	}
    63  }
    64  -- sampler.go --
    65  // Copyright 2018 The Go Authors. All rights reserved.
    66  // Use of this source code is governed by a BSD-style
    67  // license that can be found in the LICENSE file.
    68  
    69  // Package sampler shows simple texts.
    70  package sampler // import "rsc.io/sampler"
    71  
    72  import (
    73  	"os"
    74  	"strings"
    75  
    76  	"golang.org/x/text/language"
    77  )
    78  
    79  // DefaultUserPrefs returns the default user language preferences.
    80  // It consults the $LC_ALL, $LC_MESSAGES, and $LANG environment
    81  // variables, in that order.
    82  func DefaultUserPrefs() []language.Tag {
    83  	var prefs []language.Tag
    84  	for _, k := range []string{"LC_ALL", "LC_MESSAGES", "LANG"} {
    85  		if env := os.Getenv(k); env != "" {
    86  			prefs = append(prefs, language.Make(env))
    87  		}
    88  	}
    89  	return prefs
    90  }
    91  
    92  // Hello returns a localized greeting.
    93  // If no prefs are given, Hello uses DefaultUserPrefs.
    94  func Hello(prefs ...language.Tag) string {
    95  	if len(prefs) == 0 {
    96  		prefs = DefaultUserPrefs()
    97  	}
    98  	return hello.find(prefs)
    99  }
   100  
   101  // A text is a localized text.
   102  type text struct {
   103  	byTag   map[string]string
   104  	matcher language.Matcher
   105  }
   106  
   107  // newText creates a new localized text, given a list of translations.
   108  func newText(s string) *text {
   109  	t := &text{
   110  		byTag: make(map[string]string),
   111  	}
   112  	var tags []language.Tag
   113  	for _, line := range strings.Split(s, "\n") {
   114  		line = strings.TrimSpace(line)
   115  		if line == "" {
   116  			continue
   117  		}
   118  		f := strings.Split(line, ": ")
   119  		if len(f) != 3 {
   120  			continue
   121  		}
   122  		tag := language.Make(f[1])
   123  		tags = append(tags, tag)
   124  		t.byTag[tag.String()] = f[2]
   125  	}
   126  	t.matcher = language.NewMatcher(tags)
   127  	return t
   128  }
   129  
   130  // find finds the text to use for the given language tag preferences.
   131  func (t *text) find(prefs []language.Tag) string {
   132  	tag, _, _ := t.matcher.Match(prefs...)
   133  	s := t.byTag[tag.String()]
   134  	if strings.HasPrefix(s, "RTL ") {
   135  		s = "\u200F" + strings.TrimPrefix(s, "RTL ") + "\u200E"
   136  	}
   137  	return s
   138  }
   139  

View as plain text