github.com/v2fly/tools@v0.100.0/internal/imports/testdata/mod/rsc.io_sampler_v1.3.0.txt (about) 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 }