WIP: begin to translate git with gettext
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 28 lines · Jeff Epler
Signed-off-by Jeff Epler <[email protected]>---
While I'm certain that there are a lot of things to object to in this patch, it shows 90% of what is needed to use gettext to translate the portions of git written in c, without involving undesired gnu infrastructure such as automake.
Makefileadds necessary rules for generating git.pot and for building and installing compiled message catalogs (.mo) from text message catalogs (.po). It also adds a gettext support header and source file.Minimal changes are made to git to use the requested
LC_CTYPEandLC_MESSAGES, and some messages for 'git status' are marked for translation.When I provided a gibberish translation of a message:
#: wt-status.c:87
msgid "# Changed but not updated:"
msgstr "# Changes not blah blah blah"running 'git status' used the translation:
$ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # # Changes not blah blah blah ...
Quoted 3 lines
I ran with 'make install' and prefix set in config.mak. It didn't seem to work when running from the source directory, and it may or may not work with runtime prefix.
Thanks a lot for this patch.
I'm having some trouble getting it to work though. I did:
make pot
That made the po/git.pot file with all the relevant messages. Then I made a po/is.po in poedit which has stuff like:
#: wt-status.c:598
msgid "On branch "
msgstr "A greininni "
#: wt-status.c:605
msgid "Not currently on any branch."
msgstr "Ekki á grænni grein.
I did:
make prefix=/usr all
sudo make prefix=/usr install
But any invocation of my new git-status (I uninstalled my system git first) with either LC_ALL, LC_MESSAGES or LC_CTYPE set to is, is_IS or is_IS.UTF-8 doest't yield the desired results:
$ strings /usr/share/locale/is/LC_MESSAGES/git.mo |grep grein
nni grein.
A greininniit doesn't seem to spot the file:
$ strace git status 2>&1|grep locale
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = -1
ENOENT (No such file or directory)
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
open("/usr/lib/locale/is/LC_MESSAGES", O_RDONLY) = -1 ENOENT (No
such file or directory)
open("/usr/share/locale-langpack/is/LC_MESSAGES", O_RDONLY) = 3
open("/usr/share/locale-langpack/is/LC_MESSAGES/SYS_LC_MESSAGES",
O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/is/LC_CTYPE", O_RDONLY) = -1 ENOENT (No such
file or directory)
open("/usr/share/locale-langpack/is/LC_CTYPE", O_RDONLY) = -1
ENOENT (No such file or directory)
open("share/locale/",
O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 5
open("share/locale/.gitignore", O_RDONLY|O_LARGEFILE) = -1 ENOENT
(No such file or directory)
open("share/locale/is/",
O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 6
open("share/locale/is/.gitignore", O_RDONLY|O_LARGEFILE) = -1
ENOENT (No such file or directory)
open("share/locale/is/LC_MESSAGES/",
O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 7
open("share/locale/is/LC_MESSAGES/.gitignore",
O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)And the UI remains untranslated.
I'm probably doing something very silly. I'd appreciate some help if you can spot what it is, if I can get this working I can start submitting some i18n patches.
Is it possible that you don't have is_IS language support? On Ubuntu this comes from a package like language-pack-is-base.
I tried your po entries in a file named po/is.po, and it didn't work. When I installed language-pack-is-base, it did.
$ unset LANGUAGE LC_MESSAGES; export LANG=is_IS.UTF-8 $ /usr/local/jepler/git/bin/git status | head -1 # A greininni master
Comparing the bad strace with the good, and excluding ENOENT opens, it's the presence of the is_IS language pack that is the first difference. @@ -1,4 +1,8 @@
open("/usr/share/locale/locale.alias", O_RDONLY) = 3
+open("/usr/lib/locale/is_IS.utf8/LC_MESSAGES", O_RDONLY) = 3 +open("/usr/lib/locale/is_IS.utf8/LC_MESSAGES/SYS_LC_MESSAGES", O_RDONLY) = 3 +open("/usr/lib/locale/is_IS.utf8/LC_CTYPE", O_RDONLY) = 3
open("share/locale/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 14
open("share/locale/is/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 15
open("share/locale/is/LC_MESSAGES/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 16+open("/usr/local/jepler/git/share/locale/is/LC_MESSAGES/git.mo", O_RDONLY) = 12
Jeff
Quoted 9 lines · Jeff Epler
Is it possible that you don't have
is_ISlanguage support? On Ubuntu this comes from a package like language-pack-is-base.I tried your po entries in a file named po/is.po, and it didn't work. When I installed language-pack-is-base, it did.
$ unset LANGUAGE LC_MESSAGES; export LANG=is_IS.UTF-8 $ /usr/local/jepler/git/bin/git status | head -1 # A greininni master
Yes, my system's settings were broken. Thanks, it works now.