Browse Source
The po2msg.sh script and the .gitignore in the po directory have been shamelessly copied from the current git-gui. This enables the top level "make NO_MSGFMT" to work consistently for git across the git-gui and gitk sub-projects. This is the same effective patch that has previously been posted as a git.git patch which more succinctly described the copying of po/.gitignore and po/po2msg.sh from git-gui. Signed-off-by: Charles Bailey <charles@hashpling.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
Charles Bailey
17 years ago
committed by
Junio C Hamano
3 changed files with 140 additions and 1 deletions
@ -0,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."] |
||||||
|
} |
Loading…
Reference in new issue