// Code generated by go generate. DO NOT EDIT.

// gotext is a tool for managing text in Go source code.
//
// Usage:
//
//	gotext command [arguments]
//
// The commands are:
//
//	update      merge translations and generate catalog
//	extract     extracts strings to be translated from code
//	rewrite     rewrites fmt functions to use a message Printer
//	generate    generates code to insert translated messages
//
// Use "gotext help [command]" for more information about a command.
//
// Additional help topics:
//
// Use "gotext help [topic]" for more information about that topic.
//
// # Merge translations and generate catalog
//
// Usage:
//
//	gotext update <package>* [-out <gofile>]
//
// # Extracts strings to be translated from code
//
// Usage:
//
//	gotext extract <package>*
//
// # Rewrites fmt functions to use a message Printer
//
// Usage:
//
//	gotext rewrite <package>
//
// rewrite is typically done once for a project. It rewrites all usages of
// fmt to use x/text's message package whenever a message.Printer is in scope.
// It rewrites Print and Println calls with constant strings to the equivalent
// using Printf to allow translators to reorder arguments.
//
// # Generates code to insert translated messages
//
// Usage:
//
//	gotext generate <package>
package main
