blob: a403a2f23b83b3f54f7454a3a925520f32a8589e [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001TRANSLATING VIM MESSAGES
2
3In this directory you will find xx.po files, where "xx" is a language code.
4Each file contains the translation of English Vim messages for one language.
5The files are in "po" format, used by the gettext package. Please refer to
6the gettext documentation for more information.
7
8The GNU gettext library, starting with version 0.10.37, supports converting
9messages from one encoding to another. This requires that it was compiled
10with HAVE_ICONV. The result is that the messages may be in any encoding
11supported by iconv and will be automatically converted to the currently used
12encoding.
13
14The GNU gettext library, starting with version 0.10.36, uses a new format for
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000015some encodings. This follows the C99 standard for strings. It means that
16when a multi-byte character includes the 0x5c byte, this is not recognized as
17a backslash. Since this format is incompatible with Solaris, Vim uses the old
Bram Moolenaar071d4272004-06-13 20:20:40 +000018format. This is done by setting the OLD_PO_FILE_OUTPUT and OLD_PO_FILE_INPUT
19environment variables. When you use the Makefile in this directory that will
20be done for you. This does NOT work with gettext 0.10.36. Don't use it, get
210.10.37.
22
23
24ON MS-WINDOWS
25
26The distributed files are generated on Unix, but this should also be possible
27on MS-Windows. Download the gettext packages, for example from:
28
29 http://sourceforge.net/projects/gettext
30
31You might have to do the commands manually. Example:
32
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000033 cd c:\vim\vim71
Bram Moolenaar071d4272004-06-13 20:20:40 +000034 mkdir runtime\lang\ja\LC_MESSAGES
35 msgfmt -o runtime\lang\ja\LC_MESSAGES\vim.mo src\po\ja.po
36
37
38WHEN THERE IS A MISTAKE
39
40If you find there is a mistake in one of the translations, please report this
41to the maintainer of the translation. His/her E-mail address is in the
42comments at the start of the file. You can also see this with the ":messages"
43command in Vim when the translation is being used.
44
45
46CREATING A NEW PO FILE
47
48We will use "xx.po" as an example here, replace "xx" with the name of your
49language.
50
51- Edit Makefile to add xx to LANGUAGES and xx.mo to MOFILES.
52- Copy the header of an existing file, e.g., de.po, to xx.po. Do not copy any
53 of the translated messages, delete everything after the "msgstr".
54- The remaining work is like updating, see the next section.
55
56
57UPDATING A PO FILE
58
59If you are the maintainer of a .po file, this is how you update the file. We
60will use "xx.po" as an example here, replace "xx" with the name of your
61language.
62
63(1) Add new and changed messages from the Vim sources:
64
65 make xx
66
67 This will extract all the strings from Vim and merge them in with the
Bram Moolenaar56b45b92013-06-24 22:22:18 +020068 existing translations. Requires the GNU gettext utilities.
Bram Moolenaar071d4272004-06-13 20:20:40 +000069 Your original xx.po file will be copied to xx.po.orig
70
71 -- After you do this, you MUST do the next three steps! --
72
73(2) Translate
74 See the gettext documentation on how to do this. You can also find
75 examples in the other po files.
76 Search the po file for items that require translation:
77
78 /fuzzy\|^msgstr ""\(\n"\)\@!
79
80 Remove the "#, fuzzy" line after adding the translation.
81
82 There is one special message:
83 msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
84 You should include your name and E-mail address instead, for example:
85 msgstr "Berichten übersetzt bei: John Doe <john@doe.org>"
86
87(3) Clean up
88 This is very important to make sure the translation works on all systems.
89 Comment-out all non-translated strings. There are two types:
90 - items marked with "#, fuzzy"
91 - items with an empty msgstr
92 You can do this with the cleanup.vim script:
93
94 :source cleanup.vim
95
96 Background: on Solaris an empty msgstr results in an empty message; GNU
97 gettext ignores empty strings and items marked with "#, fuzzy".
98
Bram Moolenaar4be06f92005-07-29 22:36:03 +000099 This also removes the line numbers from the file, so that patches are not
100 messed up by changes in line numbers and show the actual changes in the
101 text.
102
Bram Moolenaar071d4272004-06-13 20:20:40 +0000103(4) Check:
104
Bram Moolenaar74675a62017-07-15 13:53:23 +0200105 While editing the .po file:
106 :source check.vim
107
108 From the command line:
Bram Moolenaar58d98232005-07-23 22:25:46 +0000109 vim -S check.vim xx.po
Bram Moolenaar071d4272004-06-13 20:20:40 +0000110 make xx.mo
111
112 Look out for syntax errors and fix them.
Bram Moolenaare6ae6222013-05-21 21:01:10 +0200113
114
115USING GETTEXT WITHOUT ICONV
116
117When using gettext which doesn't support iconv, the encoding of the .mo file
118must match your active encoding. For that you must convert and change
119encoding of *.po file in advance of generating the *.mo file. For example, to
120convert ja.po to EUC-JP (supposed as your system encoding):
121
122(1) Convert the file encoding:
123
124 mv ja.po ja.po.orig
125 iconv -f utf-8 -t euc-jp ja.po.orig > ja.po
126
127(2) Rewrite charset declaration in the file:
128
129 Open ja.po find this line:
130 "Content-Type: text/plain; charset=utf-8\n"
131 You should change "charset" like this:
132 "Content-Type: text/plain; charset=euc-jp\n"
133
134There are examples in the Makefile for the conversions already supported.