...

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

Documentation: cmd/go/testdata/mod

     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}

View as plain text