...

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

Documentation: cmd/go/testdata/mod

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

View as plain text