|
- package main
-
- import (
- "golang.org/x/text/language"
- "golang.org/x/text/message"
- )
-
- // In this test, lowercap strings are ones that need to be picked up for
- // translation, whereas uppercap strings should not be picked up.
-
- func main() {
- p := message.NewPrinter(language.English)
-
- // TODO: probably should use type instead of string content for argument
- // substitution.
- wrapf(p, "inline %s", "ARG1")
- gwrapf("global printer used %s", "ARG1")
-
- w := wrapped{p}
-
- // Comment about wrapf.
- w.wrapf("number: %d, string: %s, bool: %v", 2, "STRING ARG", true)
- w.wrapf("empty string")
- w.wrap("Lovely weather today!")
-
- more(&w)
- }
-
- var printer = message.NewPrinter(language.English)
-
- func more(w wrapper) {
- w.wrap("number one")
- w.wrapf("speed of light: %s", "C")
- }
-
- func gwrapf(format string, args ...interface{}) {
- v := format
- a := args
- printer.Printf(v, a...)
- }
-
- func wrapf(p *message.Printer, format string, args ...interface{}) {
- v := format
- a := args
- p.Printf(v, a...)
- }
-
- func wrap(p *message.Printer, format string) {
- v := format
- b := "0"
- a := []interface{}{3, b}
- s := a[:]
- p.Printf(v, s...)
- }
-
- type wrapper interface {
- wrapf(format string, args ...interface{})
- wrap(msg string)
- }
-
- type wrapped struct {
- p *message.Printer
- }
-
- // TODO: calls over interfaces do not get picked up. It looks like this is
- // because w is not a pointer receiver, while the other method is. Mixing of
- // receiver types does not seem to be allowed by callgraph/cha.
- func (w wrapped) wrapf(format string, args ...interface{}) {
- w.p.Printf(format, args...)
- }
-
- func (w *wrapped) wrap(msg string) {
- w.p.Printf(msg)
- }
-
- func fint(p *message.Printer, x int) {
- v := "number: %d"
- const c = "DAFDA"
- p.Printf(v, c)
- }
-
- const format = "constant local" + " %s"
-
- // NOTE: pass is not called. Ensure it is picked up anyway.
- func pass(p *message.Printer, args ...interface{}) {
- // TODO: find an example caller to find substituted types and argument
- // examples.
- p.Sprintf(format, args...)
- }
-
- func lookup(p *message.Printer, x int) {
- // TODO: pick up all elements from slice foo.
- p.Printf(foo[x])
- }
-
- var foo = []string{
- "aaaa",
- "bbbb",
- }
-
- func field(p *message.Printer, x int) {
- // TODO: pick up strings in field BAR from all composite literals of
- // typeof(strct.Foo.Bar).
- p.Printf(strct.Foo.Bar, x)
- }
-
- type fooStruct struct {
- Foo barStruct
- }
-
- type barStruct struct {
- other int
- Bar string
- }
-
- var strct = fooStruct{
- Foo: barStruct{0, "foo %d"},
- }
-
- func call(p *message.Printer, x int) {
- // TODO: pick up constant return values.
- p.Printf(fn())
- }
-
- func fn() string {
- return "const str"
- }
-
- // Both strings get picked up.
- func ifConst(p *message.Printer, cond bool, arg1 string) {
- a := "foo %s %s"
- if cond {
- a = "bar %s %s"
- }
- b := "FOO"
- if cond {
- b = "BAR"
- }
- wrapf(p, a, arg1, b)
- }
-
- // Pick up all non-empty strings in this function.
- func ifConst2(x int) {
- a := ""
- switch x {
- case 0:
- a = "foo"
- case 1:
- a = "bar"
- case 2:
- a = "baz"
- }
- gwrapf(a)
- }
-
- // TODO: pick up strings passed to the second argument in calls to freeVar.
- func freeVar(p *message.Printer, str string) {
- fn := func(p *message.Printer) {
- p.Printf(str)
- }
- fn(p)
- }
-
- func freeConst(p *message.Printer) {
- // str is a message
- const str = "const str"
- fn := func(p *message.Printer) {
- p.Printf(str)
- }
- fn(p)
- }
-
- func global(p *message.Printer) {
- // city describes the expected next meeting place
- city := "Amsterdam"
- // See a person around.
- p.Printf(globalStr, city)
- }
-
- // globalStr is a global variable with a string constant assigned to it.
- var globalStr = "See you around in %s!"
-
- func global2(p *message.Printer) {
- const food = "Pastrami"
- wrapf(p, constFood,
- food, // the food to be consumed by the subject
- )
- }
-
- // Comment applying to all constants in a block are ignored.
- var (
- // Ho ho ho
- notAMessage, constFood, msgHello = "NOPE!", consume, hello
- )
-
- // A block comment.
- var (
- // This comment takes precedence.
- hello = "Hello, %d and %s!"
-
- consume = "Please eat your %s!"
- )
|