message: add documentation for the m verb

Also simplicied the http example:
now uses MatchStrings.

Change-Id: I6dabad6d59ab93baf2bd1f16735ab8c14fd45b9e
Reviewed-on: https://go-review.googlesource.com/97835
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ross Light <light@google.com>
diff --git a/message/catalog_test.go b/message/catalog_test.go
index ff409a8..d1fdfde 100644
--- a/message/catalog_test.go
+++ b/message/catalog_test.go
@@ -18,6 +18,10 @@
 	c.SetString(language.English, "", "")
 	c.SetString(language.German, "", "")
 
+	saved := DefaultCatalog
+	defer func() { DefaultCatalog = saved }()
+	DefaultCatalog = c
+
 	testCases := []struct {
 		args string // '|'-separated list
 		want string
@@ -32,7 +36,6 @@
 		want: "en",
 	}}
 	for _, tc := range testCases {
-		DefaultCatalog = c
 		t.Run(tc.args, func(t *testing.T) {
 			got := MatchLanguage(strings.Split(tc.args, "|")...)
 			if got != language.Make(tc.want) {
diff --git a/message/doc.go b/message/doc.go
index 2f7effd..b9584a2 100644
--- a/message/doc.go
+++ b/message/doc.go
@@ -31,6 +31,7 @@
 //   - 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.
 //
diff --git a/message/examples_test.go b/message/examples_test.go
index c73eaf9..8c3dff5 100644
--- a/message/examples_test.go
+++ b/message/examples_test.go
@@ -5,6 +5,7 @@
 package message_test
 
 import (
+	"fmt"
 	"net/http"
 
 	"golang.org/x/text/language"
@@ -13,13 +14,11 @@
 
 func Example_http() {
 	// languages supported by this service:
-	matcher := language.NewMatcher(message.DefaultCatalog.Languages())
-
 	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
 		lang, _ := r.Cookie("lang")
 		accept := r.Header.Get("Accept-Language")
 		fallback := "en"
-		tag, _ := language.MatchStrings(matcher, lang.String(), accept, fallback)
+		tag := message.MatchLanguage(lang.String(), accept, fallback)
 
 		p := message.NewPrinter(tag)
 
@@ -40,3 +39,32 @@
 	// fr     123 456,78
 	// bn     ১,২৩,৪৫৬.৭৮
 }
+
+func ExamplePrinter_mVerb() {
+	message.SetString(language.Dutch, "You have chosen to play %m.", "U heeft ervoor gekozen om %m te spelen.")
+	message.SetString(language.Dutch, "basketball", "basketbal")
+	message.SetString(language.Dutch, "hockey", "ijshockey")
+	message.SetString(language.Dutch, "soccer", "voetbal")
+	message.SetString(language.BritishEnglish, "soccer", "football")
+
+	for _, sport := range []string{"soccer", "basketball", "hockey"} {
+		for _, lang := range []string{"en", "en-GB", "nl"} {
+			p := message.NewPrinter(language.Make(lang))
+			fmt.Printf("%-6s %s\n", lang, p.Sprintf("You have chosen to play %m.", sport))
+		}
+		fmt.Println()
+	}
+
+	// Output:
+	// en     You have chosen to play soccer.
+	// en-GB  You have chosen to play football.
+	// nl     U heeft ervoor gekozen om voetbal te spelen.
+	//
+	// en     You have chosen to play basketball.
+	// en-GB  You have chosen to play basketball.
+	// nl     U heeft ervoor gekozen om basketbal te spelen.
+	//
+	// en     You have chosen to play hockey.
+	// en-GB  You have chosen to play hockey.
+	// nl     U heeft ervoor gekozen om ijshockey te spelen.
+}