From: Junio C Hamano Date: Fri, 11 Jan 2008 08:51:30 +0000 (-0800) Subject: Merge ../gitk X-Git-Tag: v1.5.4-rc3~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=887ad79865d862a0a3aef4b59957d7dd95d0507d;p=thirdparty%2Fgit.git Merge ../gitk * ../gitk: gitk: Update German translation. gitk: Fix typo in user message. gitk: Fix the Makefile to cope with systems lacking msgfmt --- 887ad79865d862a0a3aef4b59957d7dd95d0507d diff --cc gitk-git/Makefile index 61585045b7,0000000000..ae2b80b108 mode 100644,000000..100644 --- a/gitk-git/Makefile +++ b/gitk-git/Makefile @@@ -1,58 -1,0 +1,63 @@@ +# The default target of this Makefile is... +all:: + +prefix ?= $(HOME) +bindir ?= $(prefix)/bin +sharedir ?= $(prefix)/share +gitk_libdir ?= $(sharedir)/gitk/lib +msgsdir ?= $(gitk_libdir)/msgs +msgsdir_SQ = $(subst ','\'',$(msgsdir)) + +TCLTK_PATH ?= wish +INSTALL ?= install +RM ?= rm -f + +DESTDIR_SQ = $(subst ','\'',$(DESTDIR)) +bindir_SQ = $(subst ','\'',$(bindir)) +TCLTK_PATH_SQ = $(subst ','\'',$(TCLTK_PATH)) + +## po-file creation rules +XGETTEXT ?= xgettext - MSGFMT ?= msgfmt ++ifdef NO_MSGFMT ++ MSGFMT ?= $(TCL_PATH) po/po2msg.sh ++else ++ MSGFMT ?= msgfmt ++endif ++ +PO_TEMPLATE = po/gitk.pot +ALL_POFILES = $(wildcard po/*.po) +ALL_MSGFILES = $(subst .po,.msg,$(ALL_POFILES)) + +ifndef V + QUIET = @ + QUIET_GEN = $(QUIET)echo ' ' GEN $@ && +endif + +all:: gitk-wish $(ALL_MSGFILES) + +install:: all + $(INSTALL) gitk-wish '$(DESTDIR_SQ)$(bindir_SQ)'/gitk + $(INSTALL) -d '$(DESTDIR_SQ)$(msgsdir_SQ)' + $(foreach p,$(ALL_MSGFILES), $(INSTALL) $p '$(DESTDIR_SQ)$(msgsdir_SQ)' &&) true + +uninstall:: + $(foreach p,$(ALL_MSGFILES), $(RM) '$(DESTDIR_SQ)$(msgsdir_SQ)'/$(notdir $p) &&) true + $(RM) '$(DESTDIR_SQ)$(bindir_SQ)'/gitk + +clean:: + $(RM) gitk-wish po/*.msg + +gitk-wish: gitk + $(QUIET_GEN)$(RM) $@ $@+ && \ + sed -e '1,3s|^exec .* "$$0"|exec $(subst |,'\|',$(TCLTK_PATH_SQ)) "$$0"|' $@+ && \ + chmod +x $@+ && \ + mv -f $@+ $@ + +$(PO_TEMPLATE): gitk + $(XGETTEXT) -kmc -LTcl -o $@ gitk +update-po:: $(PO_TEMPLATE) + $(foreach p, $(ALL_POFILES), echo Updating $p ; msgmerge -U $p $(PO_TEMPLATE) ; ) +$(ALL_MSGFILES): %.msg : %.po + @echo Generating catalog $@ + $(MSGFMT) --statistics --tcl $< -l $(basename $(notdir $<)) -d $(dir $@) + diff --cc gitk-git/gitk index 801a5a9d86,b3cb8e8b7e..b3cb8e8b7e mode 100644,100755..100644 --- a/gitk-git/gitk +++ b/gitk-git/gitk diff --cc gitk-git/po/.gitignore index 0000000000,e358dd1903..e358dd1903 mode 000000,100644..100644 --- a/gitk-git/po/.gitignore +++ b/gitk-git/po/.gitignore diff --cc gitk-git/po/po2msg.sh index 0000000000,0000000000..c63248e375 new file mode 100644 --- /dev/null +++ b/gitk-git/po/po2msg.sh @@@ -1,0 -1,0 +1,133 @@@ ++#!/bin/sh ++# Tcl ignores the next line -*- tcl -*- \ ++exec tclsh "$0" -- "$@" ++ ++# This is a really stupid program, which serves as an alternative to ++# msgfmt. It _only_ translates to Tcl mode, does _not_ validate the ++# input, and does _not_ output any statistics. ++ ++proc u2a {s} { ++ set res "" ++ foreach i [split $s ""] { ++ scan $i %c c ++ if {$c<128} { ++ # escape '[', '\' and ']' ++ if {$c == 0x5b || $c == 0x5d} { ++ append res "\\" ++ } ++ append res $i ++ } else { ++ append res \\u[format %04.4x $c] ++ } ++ } ++ return $res ++} ++ ++set output_directory "." ++set lang "dummy" ++set files [list] ++set show_statistics 0 ++ ++# parse options ++for {set i 0} {$i < $argc} {incr i} { ++ set arg [lindex $argv $i] ++ if {$arg == "--statistics"} { ++ incr show_statistics ++ continue ++ } ++ if {$arg == "--tcl"} { ++ # we know ++ continue ++ } ++ if {$arg == "-l"} { ++ incr i ++ set lang [lindex $argv $i] ++ continue ++ } ++ if {$arg == "-d"} { ++ incr i ++ set tmp [lindex $argv $i] ++ regsub "\[^/\]$" $tmp "&/" output_directory ++ continue ++ } ++ lappend files $arg ++} ++ ++proc flush_msg {} { ++ global msgid msgstr mode lang out fuzzy ++ global translated_count fuzzy_count not_translated_count ++ ++ if {![info exists msgid] || $mode == ""} { ++ return ++ } ++ set mode "" ++ if {$fuzzy == 1} { ++ incr fuzzy_count ++ set fuzzy 0 ++ return ++ } ++ ++ if {$msgid == ""} { ++ set prefix "set ::msgcat::header" ++ } else { ++ if {$msgstr == ""} { ++ incr not_translated_count ++ return ++ } ++ set prefix "::msgcat::mcset $lang \"[u2a $msgid]\"" ++ incr translated_count ++ } ++ ++ puts $out "$prefix \"[u2a $msgstr]\"" ++} ++ ++set fuzzy 0 ++set translated_count 0 ++set fuzzy_count 0 ++set not_translated_count 0 ++foreach file $files { ++ regsub "^.*/\(\[^/\]*\)\.po$" $file "$output_directory\\1.msg" outfile ++ set in [open $file "r"] ++ fconfigure $in -encoding utf-8 ++ set out [open $outfile "w"] ++ ++ set mode "" ++ while {[gets $in line] >= 0} { ++ if {[regexp "^#" $line]} { ++ if {[regexp ", fuzzy" $line]} { ++ set fuzzy 1 ++ } else { ++ flush_msg ++ } ++ continue ++ } elseif {[regexp "^msgid \"(.*)\"$" $line dummy match]} { ++ flush_msg ++ set msgid $match ++ set mode "msgid" ++ } elseif {[regexp "^msgstr \"(.*)\"$" $line dummy match]} { ++ set msgstr $match ++ set mode "msgstr" ++ } elseif {$line == ""} { ++ flush_msg ++ } elseif {[regexp "^\"(.*)\"$" $line dummy match]} { ++ if {$mode == "msgid"} { ++ append msgid $match ++ } elseif {$mode == "msgstr"} { ++ append msgstr $match ++ } else { ++ puts stderr "I do not know what to do: $match" ++ } ++ } else { ++ puts stderr "Cannot handle $line" ++ } ++ } ++ flush_msg ++ close $in ++ close $out ++} ++ ++if {$show_statistics} { ++ puts [concat "$translated_count translated messages, " \ ++ "$fuzzy_count fuzzy ones, " \ ++ "$not_translated_count untranslated ones."] ++}