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