Code

git-gui: detect the use of MUI langauge packs on Windows
[git.git] / po / po2msg.sh
index da0765dd8020af359c1f47e8f2ae2e4e72a9ce5b..1e9f992528153fa62c167db8f8e8c184e7df86bd 100644 (file)
@@ -11,8 +11,8 @@ proc u2a {s} {
        foreach i [split $s ""] {
                scan $i %c c
                if {$c<128} {
-                       # escape '[', '\' and ']'
-                       if {$c == 0x5b || $c == 0x5d} {
+                       # escape '[', '\', '$' and ']'
+                       if {$c == 0x5b || $c == 0x5d || $c == 0x24} {
                                append res "\\"
                        }
                        append res $i
@@ -26,11 +26,17 @@ proc u2a {s} {
 set output_directory "."
 set lang "dummy"
 set files [list]
+set show_statistics 0
 
 # parse options
-for {set i 1} {$i < $argc} {incr i} {
+for {set i 0} {$i < $argc} {incr i} {
        set arg [lindex $argv $i]
-       if {$arg == "--statistics" || $arg == "--tcl"} {
+       if {$arg == "--statistics"} {
+               incr show_statistics
+               continue
+       }
+       if {$arg == "--tcl"} {
+               # we know
                continue
        }
        if {$arg == "-l"} {
@@ -48,22 +54,37 @@ for {set i 1} {$i < $argc} {incr i} {
 }
 
 proc flush_msg {} {
-       global msgid msgstr mode lang out
+       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"]
@@ -73,7 +94,11 @@ foreach file $files {
        set mode ""
        while {[gets $in line] >= 0} {
                if {[regexp "^#" $line]} {
-                       flush_msg
+                       if {[regexp ", fuzzy" $line]} {
+                               set fuzzy 1
+                       } else {
+                               flush_msg
+                       }
                        continue
                } elseif {[regexp "^msgid \"(.*)\"$" $line dummy match]} {
                        flush_msg
@@ -101,3 +126,27 @@ foreach file $files {
        close $out
 }
 
+if {$show_statistics} {
+       set str ""
+
+       append str  "$translated_count translated message"
+       if {$translated_count != 1} {
+               append str s
+       }
+
+       if {$fuzzy_count > 1} {
+               append str  ", $fuzzy_count fuzzy translation"
+               if {$fuzzy_count != 1} {
+                       append str s
+               }
+       }
+       if {$not_translated_count > 0} {
+               append str  ", $not_translated_count untranslated message"
+               if {$not_translated_count != 1} {
+                       append str s
+               }
+       }
+
+       append str  .
+       puts $str
+}