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

     1  rsc.io/sampler@v1.3.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.3.0","Name":"0cc034b51e57ed7832d4c67d526f75a900996e5c","Short":"0cc034b51e57","Time":"2018-02-13T19:05:03Z"}
     9  -- glass.go --
    10  // Copyright 2018 The Go Authors. All rights reserved.
    11  // Use of this source code is governed by a BSD-style
    12  // license that can be found in the LICENSE file.
    13  
    14  // Translations from Frank da Cruz, Ethan Mollick, and many others.
    15  // See http://kermitproject.org/utf8.html.
    16  // http://www.oocities.org/nodotus/hbglass.html
    17  // https://en.wikipedia.org/wiki/I_Can_Eat_Glass
    18  
    19  package sampler
    20  
    21  var glass = newText(`
    22  
    23  English: en: I can eat glass and it doesn't hurt me.
    24  French: fr: Je peux manger du verre, ça ne me fait pas mal.
    25  Spanish: es: Puedo comer vidrio, no me hace daño.
    26  
    27  `)
    28  -- glass_test.go --
    29  // Copyright 2018 The Go Authors. All rights reserved.
    30  // Use of this source code is governed by a BSD-style
    31  // license that can be found in the LICENSE file.
    32  
    33  package sampler
    34  
    35  import (
    36  	"testing"
    37  
    38  	"golang.org/x/text/language"
    39  	_ "rsc.io/testonly"
    40  )
    41  
    42  var glassTests = []struct {
    43  	prefs []language.Tag
    44  	text  string
    45  }{
    46  	{
    47  		[]language.Tag{language.Make("en-US"), language.Make("fr")},
    48  		"I can eat glass and it doesn't hurt me.",
    49  	},
    50  	{
    51  		[]language.Tag{language.Make("fr"), language.Make("en-US")},
    52  		"Je peux manger du verre, ça ne me fait pas mal.",
    53  	},
    54  }
    55  
    56  func TestGlass(t *testing.T) {
    57  	for _, tt := range glassTests {
    58  		text := Glass(tt.prefs...)
    59  		if text != tt.text {
    60  			t.Errorf("Glass(%v) = %q, want %q", tt.prefs, text, tt.text)
    61  		}
    62  	}
    63  }
    64  -- go.mod --
    65  module "rsc.io/sampler"
    66  
    67  require "golang.org/x/text" v0.0.0-20170915032832-14c0d48ead0c
    68  -- hello.go --
    69  // Copyright 2018 The Go Authors. All rights reserved.
    70  // Use of this source code is governed by a BSD-style
    71  // license that can be found in the LICENSE file.
    72  
    73  // Translations by Google Translate.
    74  
    75  package sampler
    76  
    77  var hello = newText(`
    78  
    79  English: en: Hello, world.
    80  French: fr: Bonjour le monde.
    81  Spanish: es: Hola Mundo.
    82  
    83  `)
    84  -- hello_test.go --
    85  // Copyright 2018 The Go Authors. All rights reserved.
    86  // Use of this source code is governed by a BSD-style
    87  // license that can be found in the LICENSE file.
    88  
    89  package sampler
    90  
    91  import (
    92  	"testing"
    93  
    94  	"golang.org/x/text/language"
    95  )
    96  
    97  var helloTests = []struct {
    98  	prefs []language.Tag
    99  	text  string
   100  }{
   101  	{
   102  		[]language.Tag{language.Make("en-US"), language.Make("fr")},
   103  		"Hello, world.",
   104  	},
   105  	{
   106  		[]language.Tag{language.Make("fr"), language.Make("en-US")},
   107  		"Bonjour le monde.",
   108  	},
   109  }
   110  
   111  func TestHello(t *testing.T) {
   112  	for _, tt := range helloTests {
   113  		text := Hello(tt.prefs...)
   114  		if text != tt.text {
   115  			t.Errorf("Hello(%v) = %q, want %q", tt.prefs, text, tt.text)
   116  		}
   117  	}
   118  }
   119  -- sampler.go --
   120  // Copyright 2018 The Go Authors. All rights reserved.
   121  // Use of this source code is governed by a BSD-style
   122  // license that can be found in the LICENSE file.
   123  
   124  // Package sampler shows simple texts.
   125  package sampler // import "rsc.io/sampler"
   126  
   127  import (
   128  	"os"
   129  	"strings"
   130  
   131  	"golang.org/x/text/language"
   132  )
   133  
   134  // DefaultUserPrefs returns the default user language preferences.
   135  // It consults the $LC_ALL, $LC_MESSAGES, and $LANG environment
   136  // variables, in that order.
   137  func DefaultUserPrefs() []language.Tag {
   138  	var prefs []language.Tag
   139  	for _, k := range []string{"LC_ALL", "LC_MESSAGES", "LANG"} {
   140  		if env := os.Getenv(k); env != "" {
   141  			prefs = append(prefs, language.Make(env))
   142  		}
   143  	}
   144  	return prefs
   145  }
   146  
   147  // Hello returns a localized greeting.
   148  // If no prefs are given, Hello uses DefaultUserPrefs.
   149  func Hello(prefs ...language.Tag) string {
   150  	if len(prefs) == 0 {
   151  		prefs = DefaultUserPrefs()
   152  	}
   153  	return hello.find(prefs)
   154  }
   155  
   156  // Glass returns a localized silly phrase.
   157  // If no prefs are given, Glass uses DefaultUserPrefs.
   158  func Glass(prefs ...language.Tag) string {
   159  	if len(prefs) == 0 {
   160  		prefs = DefaultUserPrefs()
   161  	}
   162  	return glass.find(prefs)
   163  }
   164  
   165  // A text is a localized text.
   166  type text struct {
   167  	byTag   map[string]string
   168  	matcher language.Matcher
   169  }
   170  
   171  // newText creates a new localized text, given a list of translations.
   172  func newText(s string) *text {
   173  	t := &text{
   174  		byTag: make(map[string]string),
   175  	}
   176  	var tags []language.Tag
   177  	for _, line := range strings.Split(s, "\n") {
   178  		line = strings.TrimSpace(line)
   179  		if line == "" {
   180  			continue
   181  		}
   182  		f := strings.Split(line, ": ")
   183  		if len(f) != 3 {
   184  			continue
   185  		}
   186  		tag := language.Make(f[1])
   187  		tags = append(tags, tag)
   188  		t.byTag[tag.String()] = f[2]
   189  	}
   190  	t.matcher = language.NewMatcher(tags)
   191  	return t
   192  }
   193  
   194  // find finds the text to use for the given language tag preferences.
   195  func (t *text) find(prefs []language.Tag) string {
   196  	tag, _, _ := t.matcher.Match(prefs...)
   197  	s := t.byTag[tag.String()]
   198  	if strings.HasPrefix(s, "RTL ") {
   199  		s = "\u200F" + strings.TrimPrefix(s, "RTL ") + "\u200E"
   200  	}
   201  	return s
   202  }
   203  

View as plain text