A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
-bash/zsh: msgfmt: command not found # Windows (WSL2) sudo apt-get update sudo apt-get install gettext # Debian apt-get install gettext # Ubuntu apt-get install gettext # Alpine apk add gettext # Arch Linux pacman -S gettext # Kali Linux apt-get install gettext # CentOS yum install gettext # Fedora dnf install gettext # OS X brew install gettext # Raspbian apt-get install gettext # Dockerfile dockerfile.run/msgfmt # Docker docker run cmd.cat/msgfmt msgfmt
msgfmt 命令用于从文本翻译描述生成二进制消息目录,大型项目会有成千上万的字符串要翻译,相比于基于文本的 PO 文件,使用(编译为)二进制的 MO 消息文件可能更加划算。二进制 MO 文件比对应的 PO 文件更小、读起来更快,用 msgfmt 可以生成 MO 文件。
msgfmt [OPTION] filename.po ...
Input file location:
filename.po ... input files
-D, --directory=DIRECTORY add DIRECTORY to list for input files search
If input file is -, standard input is read.
Operation mode:
-j, --java Java mode: generate a Java ResourceBundle class
--java2 like --java, and assume Java2 (JDK 1.2 or higher)
--csharp C# mode: generate a .NET .dll file
--csharp-resources C# resources mode: generate a .NET .resources file
--tcl Tcl mode: generate a tcl/msgcat .msg file
--qt Qt mode: generate a Qt .qm file
--desktop Desktop Entry mode: generate a .desktop file
--xml XML mode: generate XML file
Output file location:
-o, --output-file=FILE write output to specified file
--strict enable strict Uniforum mode
If output file is -, output is written to standard output.
Output file location in Java mode:
-r, --resource=RESOURCE resource name
-l, --locale=LOCALE locale name, either language or language_COUNTRY
--source produce a .java file, instead of a .class file
-d DIRECTORY base directory of classes directory hierarchy
The class name is determined by appending the locale name to the resource name,
separated with an underscore. The -d option is mandatory. The class is
written under the specified directory.
Output file location in C# mode:
-r, --resource=RESOURCE resource name
-l, --locale=LOCALE locale name, either language or language_COUNTRY
-d DIRECTORY base directory for locale dependent .dll files
The -l and -d options are mandatory. The .dll file is written in a
subdirectory of the specified directory whose name depends on the locale.
Output file location in Tcl mode:
-l, --locale=LOCALE locale name, either language or language_COUNTRY
-d DIRECTORY base directory of .msg message catalogs
The -l and -d options are mandatory. The .msg file is written in the
specified directory.
Desktop Entry mode options:
-l, --locale=LOCALE locale name, either language or language_COUNTRY
-o, --output-file=FILE write output to specified file
--template=TEMPLATE a .desktop file used as a template
-d DIRECTORY base directory of .po files
-kWORD, --keyword=WORD look for WORD as an additional keyword
-k, --keyword do not to use default keywords
The -l, -o, and --template options are mandatory. If -D is specified, input
files are read from the directory instead of the command line arguments.
XML mode options:
-l, --locale=LOCALE locale name, either language or language_COUNTRY
-L, --language=NAME recognise the specified XML language
-o, --output-file=FILE write output to specified file
--template=TEMPLATE an XML file used as a template
-d DIRECTORY base directory of .po files
The -l, -o, and --template options are mandatory. If -D is specified, input
files are read from the directory instead of the command line arguments.
Input file syntax:
-P, --properties-input input files are in Java .properties syntax
--stringtable-input input files are in NeXTstep/GNUstep .strings
syntax
Input file interpretation:
-c, --check perform all the checks implied by
--check-format, --check-header, --check-domain
--check-format check language dependent format strings
--check-header verify presence and contents of the header entry
--check-domain check for conflicts between domain directives
and the --output-file option
-C, --check-compatibility check that GNU msgfmt behaves like X/Open msgfmt
--check-accelerators[=CHAR] check presence of keyboard accelerators for
menu items
-f, --use-fuzzy use fuzzy entries in output
Output details:
-a, --alignment=NUMBER align strings to NUMBER bytes (default: 1)
--endianness=BYTEORDER write out 32-bit numbers in the given byte order
(big or little, default depends on platform)
--no-hash binary file will not include the hash table
Informative output:
-h, --help display this help and exit
-V, --version output version information and exit
--statistics print statistics about translations
-v, --verbose increase verbosity level
msgfmt 可以检查 gettext 文件的语法是否有效:
msgfmt fr.po --check
上面的命令会在 PO 模板所在的目录下创建一个名为 fr.po 的文件。
msgfmt 生成 MO 文件,如果 PO 文件有效,该命令将在 PO 文件之外创建一个 fr.mo 文件:
msgfmt fr.po --no-hash -o fr.mo
msgfmt 还原 PO 文件,应该在版本控制中保留原始 PO 文件,这样以后就可以更新翻译。如果你丢失了原始的 PO 文件,希望将 MO 文件反编译为基于文本的 PO 文件,你可以用 msgfmt 这样做:
msgunfmt fr.mo > fr.po
注意:反编译出的文件不包含注释和模糊字符串,因为它们一开始就没有编译进 MO 文件里。