summaryrefslogtreecommitdiffhomepage
path: root/vendor/golang.org/x/text/message/doc.go
blob: 4bf7bdcac3b00643d602b2631241d9885c35f28c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package message implements formatted I/O for localized strings with functions
// analogous to the fmt's print functions. It is a drop-in replacement for fmt.
//
// # Localized Formatting
//
// A format string can be localized by replacing any of the print functions of
// fmt with an equivalent call to a Printer.
//
//	p := message.NewPrinter(message.MatchLanguage("en"))
//	p.Println(123456.78) // Prints 123,456.78
//
//	p.Printf("%d ducks in a row", 4331) // Prints 4,331 ducks in a row
//
//	p := message.NewPrinter(message.MatchLanguage("nl"))
//	p.Printf("Hoogte: %.1f meter", 1244.9) // Prints Hoogte: 1,244.9 meter
//
//	p := message.NewPrinter(message.MatchLanguage("bn"))
//	p.Println(123456.78) // Prints ১,২৩,৪৫৬.৭৮
//
// Printer currently supports numbers and specialized types for which packages
// exist in x/text. Other builtin types such as time.Time and slices are
// planned.
//
// Format strings largely have the same meaning as with fmt with the following
// notable exceptions:
//   - flag # always resorts to fmt for printing
//   - verb 'f', 'e', 'g', 'd' use localized formatting unless the '#' flag is
//     specified.
//   - verb 'm' inserts a translation of a string argument.
//
// See package fmt for more options.
//
// # Translation
//
// The format strings that are passed to Printf, Sprintf, Fprintf, or Errorf
// are used as keys to look up translations for the specified languages.
// More on how these need to be specified below.
//
// One can use arbitrary keys to distinguish between otherwise ambiguous
// strings:
//
//	p := message.NewPrinter(language.English)
//	p.Printf("archive(noun)")  // Prints "archive"
//	p.Printf("archive(verb)")  // Prints "archive"
//
//	p := message.NewPrinter(language.German)
//	p.Printf("archive(noun)")  // Prints "Archiv"
//	p.Printf("archive(verb)")  // Prints "archivieren"
//
// To retain the fallback functionality, use Key:
//
//	p.Printf(message.Key("archive(noun)", "archive"))
//	p.Printf(message.Key("archive(verb)", "archive"))
//
// # Translation Pipeline
//
// Format strings that contain text need to be translated to support different
// locales. The first step is to extract strings that need to be translated.
//
// 1. Install gotext
//
//	go get -u golang.org/x/text/cmd/gotext
//	gotext -help
//
// 2. Mark strings in your source to be translated by using message.Printer,
// instead of the functions of the fmt package.
//
// 3. Extract the strings from your source
//
//	gotext extract
//
// The output will be written to the textdata directory.
//
// 4. Send the files for translation
//
// It is planned to support multiple formats, but for now one will have to
// rewrite the JSON output to the desired format.
//
// 5. Inject translations into program
//
// 6. Repeat from 2
//
// Right now this has to be done programmatically with calls to Set or
// SetString. These functions as well as the methods defined in
// see also package golang.org/x/text/message/catalog can be used to implement
// either dynamic or static loading of messages.
//
// # Plural and Gender Forms
//
// Translated messages can vary based on the plural and gender forms of
// substitution values. In general, it is up to the translators to provide
// alternative translations for such forms. See the packages in
// golang.org/x/text/feature and golang.org/x/text/message/catalog for more
// information.
package message