github.com/mdaxf/iac@v0.0.0-20240519030858-58a061660378/vendor_skip/golang.org/x/text/message/doc.go (about) 1 // Copyright 2017 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package message implements formatted I/O for localized strings with functions 6 // analogous to the fmt's print functions. It is a drop-in replacement for fmt. 7 // 8 // # Localized Formatting 9 // 10 // A format string can be localized by replacing any of the print functions of 11 // fmt with an equivalent call to a Printer. 12 // 13 // p := message.NewPrinter(message.MatchLanguage("en")) 14 // p.Println(123456.78) // Prints 123,456.78 15 // 16 // p.Printf("%d ducks in a row", 4331) // Prints 4,331 ducks in a row 17 // 18 // p := message.NewPrinter(message.MatchLanguage("nl")) 19 // p.Printf("Hoogte: %.1f meter", 1244.9) // Prints Hoogte: 1,244.9 meter 20 // 21 // p := message.NewPrinter(message.MatchLanguage("bn")) 22 // p.Println(123456.78) // Prints ১,২৩,৪৫৬.৭৮ 23 // 24 // Printer currently supports numbers and specialized types for which packages 25 // exist in x/text. Other builtin types such as time.Time and slices are 26 // planned. 27 // 28 // Format strings largely have the same meaning as with fmt with the following 29 // notable exceptions: 30 // - flag # always resorts to fmt for printing 31 // - verb 'f', 'e', 'g', 'd' use localized formatting unless the '#' flag is 32 // specified. 33 // - verb 'm' inserts a translation of a string argument. 34 // 35 // See package fmt for more options. 36 // 37 // # Translation 38 // 39 // The format strings that are passed to Printf, Sprintf, Fprintf, or Errorf 40 // are used as keys to look up translations for the specified languages. 41 // More on how these need to be specified below. 42 // 43 // One can use arbitrary keys to distinguish between otherwise ambiguous 44 // strings: 45 // 46 // p := message.NewPrinter(language.English) 47 // p.Printf("archive(noun)") // Prints "archive" 48 // p.Printf("archive(verb)") // Prints "archive" 49 // 50 // p := message.NewPrinter(language.German) 51 // p.Printf("archive(noun)") // Prints "Archiv" 52 // p.Printf("archive(verb)") // Prints "archivieren" 53 // 54 // To retain the fallback functionality, use Key: 55 // 56 // p.Printf(message.Key("archive(noun)", "archive")) 57 // p.Printf(message.Key("archive(verb)", "archive")) 58 // 59 // # Translation Pipeline 60 // 61 // Format strings that contain text need to be translated to support different 62 // locales. The first step is to extract strings that need to be translated. 63 // 64 // 1. Install gotext 65 // 66 // go get -u golang.org/x/text/cmd/gotext 67 // gotext -help 68 // 69 // 2. Mark strings in your source to be translated by using message.Printer, 70 // instead of the functions of the fmt package. 71 // 72 // 3. Extract the strings from your source 73 // 74 // gotext extract 75 // 76 // The output will be written to the textdata directory. 77 // 78 // 4. Send the files for translation 79 // 80 // It is planned to support multiple formats, but for now one will have to 81 // rewrite the JSON output to the desired format. 82 // 83 // 5. Inject translations into program 84 // 85 // 6. Repeat from 2 86 // 87 // Right now this has to be done programmatically with calls to Set or 88 // SetString. These functions as well as the methods defined in 89 // see also package golang.org/x/text/message/catalog can be used to implement 90 // either dynamic or static loading of messages. 91 // 92 // # Plural and Gender Forms 93 // 94 // Translated messages can vary based on the plural and gender forms of 95 // substitution values. In general, it is up to the translators to provide 96 // alternative translations for such forms. See the packages in 97 // golang.org/x/text/feature and golang.org/x/text/message/catalog for more 98 // information. 99 package message