GoPLS Viewer

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