Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | TRANSLATING VIM MESSAGES |
| 2 | |
| 3 | In this directory you will find xx.po files, where "xx" is a language code. |
| 4 | Each file contains the translation of English Vim messages for one language. |
| 5 | The files are in "po" format, used by the gettext package. Please refer to |
| 6 | the gettext documentation for more information. |
| 7 | |
| 8 | The GNU gettext library, starting with version 0.10.37, supports converting |
| 9 | messages from one encoding to another. This requires that it was compiled |
| 10 | with HAVE_ICONV. The result is that the messages may be in any encoding |
| 11 | supported by iconv and will be automatically converted to the currently used |
| 12 | encoding. |
| 13 | |
| 14 | The GNU gettext library, starting with version 0.10.36, uses a new format for |
Bram Moolenaar | c81e5e7 | 2007-05-05 18:24:42 +0000 | [diff] [blame] | 15 | some encodings. This follows the C99 standard for strings. It means that |
| 16 | when a multi-byte character includes the 0x5c byte, this is not recognized as |
| 17 | a backslash. Since this format is incompatible with Solaris, Vim uses the old |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 18 | format. This is done by setting the OLD_PO_FILE_OUTPUT and OLD_PO_FILE_INPUT |
| 19 | environment variables. When you use the Makefile in this directory that will |
| 20 | be done for you. This does NOT work with gettext 0.10.36. Don't use it, get |
| 21 | 0.10.37. |
| 22 | |
Bram Moolenaar | e1dc76f | 2022-06-25 18:01:32 +0100 | [diff] [blame^] | 23 | Have a look at these helper scripts, they may be useful for you: |
| 24 | https://github.com/adaext/vim-menutrans-helper |
| 25 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 26 | |
| 27 | ON MS-WINDOWS |
| 28 | |
| 29 | The distributed files are generated on Unix, but this should also be possible |
| 30 | on MS-Windows. Download the gettext packages, for example from: |
| 31 | |
| 32 | http://sourceforge.net/projects/gettext |
| 33 | |
| 34 | You might have to do the commands manually. Example: |
| 35 | |
Bram Moolenaar | 2696761 | 2019-03-17 17:13:16 +0100 | [diff] [blame] | 36 | cd c:\vim\vim81 |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 37 | mkdir runtime\lang\ja\LC_MESSAGES |
| 38 | msgfmt -o runtime\lang\ja\LC_MESSAGES\vim.mo src\po\ja.po |
| 39 | |
| 40 | |
| 41 | WHEN THERE IS A MISTAKE |
| 42 | |
| 43 | If you find there is a mistake in one of the translations, please report this |
| 44 | to the maintainer of the translation. His/her E-mail address is in the |
| 45 | comments at the start of the file. You can also see this with the ":messages" |
| 46 | command in Vim when the translation is being used. |
| 47 | |
| 48 | |
| 49 | CREATING A NEW PO FILE |
| 50 | |
| 51 | We will use "xx.po" as an example here, replace "xx" with the name of your |
| 52 | language. |
| 53 | |
| 54 | - Edit Makefile to add xx to LANGUAGES and xx.mo to MOFILES. |
Bram Moolenaar | d2f3a8b | 2018-06-19 14:35:59 +0200 | [diff] [blame] | 55 | - If you haven't done so already, run ./configure in the top vim directory |
| 56 | (i.e. go up two directories) and then come back here afterwards. |
| 57 | - Execute these commands: |
| 58 | % make vim.pot |
| 59 | % msginit -l xx |
| 60 | % rm vim.pot |
| 61 | The first command will generate a vim.pot file which is used by msginit to |
| 62 | generate a correct xx.po file. After that vim.pot is not needed. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 63 | - The remaining work is like updating, see the next section. |
| 64 | |
| 65 | |
| 66 | UPDATING A PO FILE |
| 67 | |
| 68 | If you are the maintainer of a .po file, this is how you update the file. We |
| 69 | will use "xx.po" as an example here, replace "xx" with the name of your |
| 70 | language. |
| 71 | |
| 72 | (1) Add new and changed messages from the Vim sources: |
| 73 | |
| 74 | make xx |
| 75 | |
| 76 | This will extract all the strings from Vim and merge them in with the |
Bram Moolenaar | 56b45b9 | 2013-06-24 22:22:18 +0200 | [diff] [blame] | 77 | existing translations. Requires the GNU gettext utilities. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 78 | Your original xx.po file will be copied to xx.po.orig |
| 79 | |
| 80 | -- After you do this, you MUST do the next three steps! -- |
| 81 | |
| 82 | (2) Translate |
| 83 | See the gettext documentation on how to do this. You can also find |
Bram Moolenaar | 0b39c3f | 2020-08-30 15:52:10 +0200 | [diff] [blame] | 84 | examples in the other po files. You can use "gF" on the file name to see |
| 85 | the context of the message. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 86 | Search the po file for items that require translation: |
| 87 | |
| 88 | /fuzzy\|^msgstr ""\(\n"\)\@! |
| 89 | |
| 90 | Remove the "#, fuzzy" line after adding the translation. |
| 91 | |
| 92 | There is one special message: |
| 93 | msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>" |
| 94 | You should include your name and E-mail address instead, for example: |
| 95 | msgstr "Berichten übersetzt bei: John Doe <john@doe.org>" |
| 96 | |
Bram Moolenaar | aaef1ba | 2017-08-01 17:40:23 +0200 | [diff] [blame] | 97 | (3) Remove unused messages (optional) |
Bram Moolenaar | fa57335 | 2020-09-04 13:53:00 +0200 | [diff] [blame] | 98 | Remove messages that have been marked as obsolete. |
Bram Moolenaar | aaef1ba | 2017-08-01 17:40:23 +0200 | [diff] [blame] | 99 | Such messages start with "#~". |
| 100 | |
| 101 | The cleanup script will also do that (see next step). |
| 102 | |
| 103 | (4) Clean up |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 104 | This is very important to make sure the translation works on all systems. |
| 105 | Comment-out all non-translated strings. There are two types: |
| 106 | - items marked with "#, fuzzy" |
| 107 | - items with an empty msgstr |
| 108 | You can do this with the cleanup.vim script: |
| 109 | |
| 110 | :source cleanup.vim |
| 111 | |
| 112 | Background: on Solaris an empty msgstr results in an empty message; GNU |
| 113 | gettext ignores empty strings and items marked with "#, fuzzy". |
| 114 | |
Bram Moolenaar | 4be06f9 | 2005-07-29 22:36:03 +0000 | [diff] [blame] | 115 | This also removes the line numbers from the file, so that patches are not |
| 116 | messed up by changes in line numbers and show the actual changes in the |
| 117 | text. |
| 118 | |
Bram Moolenaar | f55e4c8 | 2017-08-01 20:44:53 +0200 | [diff] [blame] | 119 | (5) Check: |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 120 | |
Bram Moolenaar | 74675a6 | 2017-07-15 13:53:23 +0200 | [diff] [blame] | 121 | While editing the .po file: |
| 122 | :source check.vim |
| 123 | |
| 124 | From the command line: |
Bram Moolenaar | 58d9823 | 2005-07-23 22:25:46 +0000 | [diff] [blame] | 125 | vim -S check.vim xx.po |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 126 | make xx.mo |
| 127 | |
| 128 | Look out for syntax errors and fix them. |
Bram Moolenaar | e6ae622 | 2013-05-21 21:01:10 +0200 | [diff] [blame] | 129 | |
Bram Moolenaar | 0b39c3f | 2020-08-30 15:52:10 +0200 | [diff] [blame] | 130 | (6) Local tryout: |
| 131 | Vim normally picks up the .mo files from: |
| 132 | $VIMRUNTIME/lang/{lang}/LC_MESSAGES/vim.mo |
| 133 | To try out the messages with Vim use: |
Bram Moolenaar | fa57335 | 2020-09-04 13:53:00 +0200 | [diff] [blame] | 134 | make tryoutinstall |
Bram Moolenaar | 0b39c3f | 2020-08-30 15:52:10 +0200 | [diff] [blame] | 135 | And run Vim with $VIMRUNTIME set to ../runtime |
| 136 | |
Bram Moolenaar | e6ae622 | 2013-05-21 21:01:10 +0200 | [diff] [blame] | 137 | |
| 138 | USING GETTEXT WITHOUT ICONV |
| 139 | |
| 140 | When using gettext which doesn't support iconv, the encoding of the .mo file |
| 141 | must match your active encoding. For that you must convert and change |
| 142 | encoding of *.po file in advance of generating the *.mo file. For example, to |
| 143 | convert ja.po to EUC-JP (supposed as your system encoding): |
| 144 | |
| 145 | (1) Convert the file encoding: |
| 146 | |
| 147 | mv ja.po ja.po.orig |
| 148 | iconv -f utf-8 -t euc-jp ja.po.orig > ja.po |
| 149 | |
| 150 | (2) Rewrite charset declaration in the file: |
| 151 | |
| 152 | Open ja.po find this line: |
| 153 | "Content-Type: text/plain; charset=utf-8\n" |
| 154 | You should change "charset" like this: |
| 155 | "Content-Type: text/plain; charset=euc-jp\n" |
| 156 | |
| 157 | There are examples in the Makefile for the conversions already supported. |