{"thread":{"id":"9181","subject":"[PATCH] Mark many more strings for i18n.","startedAt":"2007-07-23T19:37:47Z","lastAt":"2007-07-23T19:37:47Z","messageCount":1,"participants":["Christian Stimming"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"48338","messageId":"200707232137.48298.stimming@tuhh.de","threadId":"9181","inReplyTo":null,"subject":"[PATCH] Mark many more strings for i18n.","fromName":"Christian Stimming","fromEmail":"stimming@tuhh.de","sentAt":"2007-07-23T19:37:47Z","receivedAt":"2007-07-23T19:37:47Z","isPatch":true,"sender":{"key":"stimming@tuhh.de","avatar":"https://avatars.githubusercontent.com/u/227778?v=4"},"body":"\nSigned-off-by: Christian Stimming <stimming@tuhh.de>\n---\nHas already been applied to the \"mob\" branch of git-gui-i18n.git. Now we \nsurpass the 250 messages - the translation is actually getting interesting \nby now.\n\nNote that many strings with variables in them had to be rewritten because\nthe variable evaluation has to come after the passing through [mc], not before.\n\nAlso, the structure of most of the error message is \n\"Some verbose text: \\n\\n git's error message\" and the only i18n'able part of this is the \npart before the colon. In this patch I propose to translate the first part *including* \nthe colon. Alternatively, the structure could be changed into \n[append [mc \"Some verbose text.\"] \" \" [mc \"Git error message was:\"] \"\\n\\n$err\"]\nand only the very first part is changed but the rest is unchanged for all error messages.\n\n git-gui.sh                   |   28 +++++++++---------\n lib/blame.tcl                |   10 +++---\n lib/branch_checkout.tcl      |   14 ++++----\n lib/branch_create.tcl        |   36 ++++++++++++------------\n lib/branch_delete.tcl        |   20 ++++++-------\n lib/branch_rename.tcl        |   22 +++++++-------\n lib/browser.tcl              |   20 ++++++------\n lib/checkout_op.tcl          |   46 +++++++++++++++---------------\n lib/choose_rev.tcl           |   16 +++++-----\n lib/commit.tcl               |   52 +++++++++++++++++-----------------\n lib/console.tcl              |   14 ++++----\n lib/database.tcl             |   26 ++++++++--------\n lib/diff.tcl                 |   12 ++++----\n lib/error.tcl                |    8 ++--\n lib/index.tcl                |    8 ++--\n lib/merge.tcl                |   64 ++++++++++++++++++++++-------------------\n lib/option.tcl               |   46 +++++++++++++++---------------\n lib/remote.tcl               |    4 +-\n lib/remote_branch_delete.tcl |   42 +++++++++++++--------------\n lib/shortcut.tcl             |   12 ++++----\n lib/status_bar.tcl           |    2 +-\n lib/transport.tcl            |   30 ++++++++++----------\n 22 files changed, 266 insertions(+), 266 deletions(-)\n\ndiff --git a/git-gui.sh b/git-gui.sh\nindex 52170ee..fa510b9 100755\n--- a/git-gui.sh\n+++ b/git-gui.sh\n@@ -528,7 +528,7 @@ proc tk_optionMenu {w varName args} {\n set _git  [_which git]\n if {$_git eq {}} {\n \tcatch {wm withdraw .}\n-\terror_popup \"Cannot find git in PATH.\"\n+\terror_popup [mc \"Cannot find git in PATH.\"]\n \texit 1\n }\n \n@@ -547,7 +547,7 @@ $err\n }\n if {![regsub {^git version } $_git_version {} _git_version]} {\n \tcatch {wm withdraw .}\n-\terror_popup \"Cannot parse Git version string:\\n\\n$_git_version\"\n+\terror_popup [append [mc \"Cannot parse Git version string:\"] \"\\n\\n$_git_version\"]\n \texit 1\n }\n \n@@ -686,7 +686,7 @@ if {[catch {\n \t\tset _prefix [git rev-parse --show-prefix]\n \t} err]} {\n \tcatch {wm withdraw .}\n-\terror_popup \"Cannot find the git directory:\\n\\n$err\"\n+\terror_popup [append [mc \"Cannot find the git directory:\"] \"\\n\\n$err\"]\n \texit 1\n }\n if {![file isdirectory $_gitdir] && [is_Cygwin]} {\n@@ -694,18 +694,18 @@ if {![file isdirectory $_gitdir] && [is_Cygwin]} {\n }\n if {![file isdirectory $_gitdir]} {\n \tcatch {wm withdraw .}\n-\terror_popup \"Git directory not found:\\n\\n$_gitdir\"\n+\terror_popup [append [mc \"Git directory not found:\"] \"\\n\\n$_gitdir\"]\n \texit 1\n }\n if {![is_enabled bare]} {\n \tif {[lindex [file split $_gitdir] end] ne {.git}} {\n \t\tcatch {wm withdraw .}\n-\t\terror_popup \"Cannot use funny .git directory:\\n\\n$_gitdir\"\n+\t\terror_popup [append [mc \"Cannot use funny .git directory:\"] \"\\n\\n$_gitdir\"]\n \t\texit 1\n \t}\n \tif {[catch {cd [file dirname $_gitdir]} err]} {\n \t\tcatch {wm withdraw .}\n-\t\terror_popup \"No working directory [file dirname $_gitdir]:\\n\\n$err\"\n+\t\terror_popup [append [mc \"No working directory\"] \" [file dirname $_gitdir]:\\n\\n$err\"]\n \t\texit 1\n \t}\n }\n@@ -850,7 +850,7 @@ proc rescan {after {honor_trustmtime 1}} {\n \t\trescan_stage2 {} $after\n \t} else {\n \t\tset rescan_active 1\n-\t\tui_status {Refreshing file status...}\n+\t\tui_status [mc \"Refreshing file status...\"]\n \t\tset fd_rf [git_read update-index \\\n \t\t\t-q \\\n \t\t\t--unmerged \\\n@@ -883,7 +883,7 @@ proc rescan_stage2 {fd after} {\n \tset buf_rlo {}\n \n \tset rescan_active 3\n-\tui_status {Scanning for modified files ...}\n+\tui_status [mc \"Scanning for modified files ...\"]\n \tset fd_di [git_read diff-index --cached -z [PARENT]]\n \tset fd_df [git_read diff-files -z]\n \tset fd_lo [eval git_read ls-files --others -z $ls_others]\n@@ -1049,7 +1049,7 @@ proc ui_status {msg} {\n }\n \n proc ui_ready {{test {}}} {\n-\t$::main_status show {Ready.} $test\n+\t$::main_status show [mc \"Ready.\"] $test\n }\n \n proc escape_path {path} {\n@@ -1400,7 +1400,7 @@ proc incr_font_size {font {amt 1}} {\n ##\n ## ui commands\n \n-set starting_gitk_msg {Starting gitk... please wait...}\n+set starting_gitk_msg [mc \"Starting gitk... please wait...\"]\n \n proc do_gitk {revs} {\n \t# -- Always start gitk through whatever we were loaded with.  This\n@@ -1409,7 +1409,7 @@ proc do_gitk {revs} {\n \tset exe [file join [file dirname $::_git] gitk]\n \tset cmd [list [info nameofexecutable] $exe]\n \tif {! [file exists $exe]} {\n-\t\terror_popup \"Unable to start gitk:\\n\\n$exe does not exist\"\n+\t\terror_popup [mc \"Unable to start gitk:\\n\\n%s does not exist\" $exe]\n \t} else {\n \t\teval exec $cmd $revs &\n \t\tui_status $::starting_gitk_msg\n@@ -1626,7 +1626,7 @@ proc apply_config {} {\n \t\t\t\tfont configure $font $cn $cv\n \t\t\t}\n \t\t\t} err]} {\n-\t\t\terror_popup \"Invalid font specified in gui.$name:\\n\\n$err\"\n+\t\t\terror_popup [mc \"Invalid font specified in gui.%s:\\n\\n%s\" $name $err]\n \t\t}\n \t\tforeach {cn cv} [font configure $font] {\n \t\t\tfont configure ${font}bold $cn $cv\n@@ -1913,7 +1913,7 @@ if {[is_MacOSX]} {\n \t\tset miga_fd [open \"|$cmd\" r]\n \t\tfconfigure $miga_fd -blocking 0\n \t\tfileevent $miga_fd readable [list miga_done $miga_fd]\n-\t\tui_status {Running miga...}\n+\t\tui_status [mc \"Running miga...\"]\n \t}\n \tproc miga_done {fd} {\n \t\tread $fd 512\n@@ -2469,7 +2469,7 @@ unset ui_diff_applyhunk\n #\n set main_status [::status_bar::new .status]\n pack .status -anchor w -side bottom -fill x\n-$main_status show {Initializing...}\n+$main_status show [mc \"Initializing...\"]\n \n # -- Load geometry\n #\ndiff --git a/lib/blame.tcl b/lib/blame.tcl\nindex 9607284..b5fdad5 100644\n--- a/lib/blame.tcl\n+++ b/lib/blame.tcl\n@@ -74,11 +74,11 @@ constructor new {i_commit i_path} {\n \tset path   $i_path\n \n \tmake_toplevel top w\n-\twm title $top \"[appname] ([reponame]): File Viewer\"\n+\twm title $top [append \"[appname] ([reponame]): \" [mc \"File Viewer\"]]\n \n \tframe $w.header -background gold\n \tlabel $w.header.commit_l \\\n-\t\t-text {Commit:} \\\n+\t\t-text [mc \"Commit:\"] \\\n \t\t-background gold \\\n \t\t-anchor w \\\n \t\t-justify left\n@@ -101,7 +101,7 @@ constructor new {i_commit i_path} {\n \t\t-anchor w \\\n \t\t-justify left\n \tlabel $w.header.path_l \\\n-\t\t-text {File:} \\\n+\t\t-text [mc \"File:\"] \\\n \t\t-background gold \\\n \t\t-anchor w \\\n \t\t-justify left\n@@ -246,7 +246,7 @@ constructor new {i_commit i_path} {\n \n \tmenu $w.ctxm -tearoff 0\n \t$w.ctxm add command \\\n-\t\t-label \"Copy Commit\" \\\n+\t\t-label [mc \"Copy Commit\"] \\\n \t\t-command [cb _copycommit]\n \n \tforeach i $w_columns {\n@@ -366,7 +366,7 @@ method _load {jump} {\n \tset amov_data [list [list]]\n \tset asim_data [list [list]]\n \n-\t$status show \"Reading $commit:[escape_path $path]...\"\n+\t$status show [mc \"Reading %s...\" \"$commit:[escape_path $path]\"]\n \t$w_path conf -text [escape_path $path]\n \tif {$commit eq {}} {\n \t\tset fd [open $path r]\ndiff --git a/lib/branch_checkout.tcl b/lib/branch_checkout.tcl\nindex 72c45b4..c727437 100644\n--- a/lib/branch_checkout.tcl\n+++ b/lib/branch_checkout.tcl\n@@ -11,20 +11,20 @@ field opt_detach    0; # force a detached head case?\n \n constructor dialog {} {\n \tmake_toplevel top w\n-\twm title $top \"[appname] ([reponame]): Checkout Branch\"\n+    wm title $top [append \"[appname] ([reponame]): \" [mc \"Checkout Branch\"]]\n \tif {$top ne {.}} {\n \t\twm geometry $top \"+[winfo rootx .]+[winfo rooty .]\"\n \t}\n \n-\tlabel $w.header -text {Checkout Branch} -font font_uibold\n+\tlabel $w.header -text [mc \"Checkout Branch\"] -font font_uibold\n \tpack $w.header -side top -fill x\n \n \tframe $w.buttons\n-\tbutton $w.buttons.create -text Checkout \\\n+\tbutton $w.buttons.create -text [mc Checkout] \\\n \t\t-default active \\\n \t\t-command [cb _checkout]\n \tpack $w.buttons.create -side right\n-\tbutton $w.buttons.cancel -text {Cancel} \\\n+\tbutton $w.buttons.cancel -text [mc Cancel] \\\n \t\t-command [list destroy $w]\n \tpack $w.buttons.cancel -side right -padx 5\n \tpack $w.buttons -side bottom -fill x -pady 10 -padx 10\n@@ -33,15 +33,15 @@ constructor dialog {} {\n \t$w_rev bind_listbox <Double-Button-1> [cb _checkout]\n \tpack $w.rev -anchor nw -fill both -expand 1 -pady 5 -padx 5\n \n-\tlabelframe $w.options -text {Options}\n+\tlabelframe $w.options -text [mc Options]\n \n \tcheckbutton $w.options.fetch \\\n-\t\t-text {Fetch Tracking Branch} \\\n+\t\t-text [mc \"Fetch Tracking Branch\"] \\\n \t\t-variable @opt_fetch\n \tpack $w.options.fetch -anchor nw\n \n \tcheckbutton $w.options.detach \\\n-\t\t-text {Detach From Local Branch} \\\n+\t\t-text [mc \"Detach From Local Branch\"] \\\n \t\t-variable @opt_detach\n \tpack $w.options.detach -anchor nw\n \ndiff --git a/lib/branch_create.tcl b/lib/branch_create.tcl\nindex def615d..acfe411 100644\n--- a/lib/branch_create.tcl\n+++ b/lib/branch_create.tcl\n@@ -19,28 +19,28 @@ constructor dialog {} {\n \tglobal repo_config\n \n \tmake_toplevel top w\n-\twm title $top \"[appname] ([reponame]): Create Branch\"\n+\twm title $top [append \"[appname] ([reponame]): \" [mc \"Create Branch\"]]\n \tif {$top ne {.}} {\n \t\twm geometry $top \"+[winfo rootx .]+[winfo rooty .]\"\n \t}\n \n-\tlabel $w.header -text {Create New Branch} -font font_uibold\n+\tlabel $w.header -text [mc \"Create New Branch\"] -font font_uibold\n \tpack $w.header -side top -fill x\n \n \tframe $w.buttons\n-\tbutton $w.buttons.create -text Create \\\n+\tbutton $w.buttons.create -text [mc Create] \\\n \t\t-default active \\\n \t\t-command [cb _create]\n \tpack $w.buttons.create -side right\n-\tbutton $w.buttons.cancel -text {Cancel} \\\n+\tbutton $w.buttons.cancel -text [mc Cancel] \\\n \t\t-command [list destroy $w]\n \tpack $w.buttons.cancel -side right -padx 5\n \tpack $w.buttons -side bottom -fill x -pady 10 -padx 10\n \n-\tlabelframe $w.desc -text {Branch Name}\n+\tlabelframe $w.desc -text [mc \"Branch Name\"]\n \tradiobutton $w.desc.name_r \\\n \t\t-anchor w \\\n-\t\t-text {Name:} \\\n+\t\t-text [mc \"Name:\"] \\\n \t\t-value user \\\n \t\t-variable @name_type\n \tset w_name $w.desc.name_t\n@@ -55,7 +55,7 @@ constructor dialog {} {\n \n \tradiobutton $w.desc.match_r \\\n \t\t-anchor w \\\n-\t\t-text {Match Tracking Branch Name} \\\n+\t\t-text [mc \"Match Tracking Branch Name\"] \\\n \t\t-value match \\\n \t\t-variable @name_type\n \tgrid $w.desc.match_r -sticky we -padx {0 5} -columnspan 2\n@@ -66,35 +66,35 @@ constructor dialog {} {\n \tset w_rev [::choose_rev::new $w.rev {Starting Revision}]\n \tpack $w.rev -anchor nw -fill both -expand 1 -pady 5 -padx 5\n \n-\tlabelframe $w.options -text {Options}\n+\tlabelframe $w.options -text [mc Options]\n \n \tframe $w.options.merge\n-\tlabel $w.options.merge.l -text {Update Existing Branch:}\n+\tlabel $w.options.merge.l -text [mc \"Update Existing Branch:\"]\n \tpack $w.options.merge.l -side left\n \tradiobutton $w.options.merge.no \\\n-\t\t-text No \\\n+\t\t-text [mc No] \\\n \t\t-value none \\\n \t\t-variable @opt_merge\n \tpack $w.options.merge.no -side left\n \tradiobutton $w.options.merge.ff \\\n-\t\t-text {Fast Forward Only} \\\n+\t\t-text [mc \"Fast Forward Only\"] \\\n \t\t-value ff \\\n \t\t-variable @opt_merge\n \tpack $w.options.merge.ff -side left\n \tradiobutton $w.options.merge.reset \\\n-\t\t-text {Reset} \\\n+\t\t-text [mc Reset] \\\n \t\t-value reset \\\n \t\t-variable @opt_merge\n \tpack $w.options.merge.reset -side left\n \tpack $w.options.merge -anchor nw\n \n \tcheckbutton $w.options.fetch \\\n-\t\t-text {Fetch Tracking Branch} \\\n+\t\t-text [mc \"Fetch Tracking Branch\"] \\\n \t\t-variable @opt_fetch\n \tpack $w.options.fetch -anchor nw\n \n \tcheckbutton $w.options.checkout \\\n-\t\t-text {Checkout After Creation} \\\n+\t\t-text [mc \"Checkout After Creation\"] \\\n \t\t-variable @opt_checkout\n \tpack $w.options.checkout -anchor nw\n \tpack $w.options -anchor nw -fill x -pady 5 -padx 5\n@@ -128,7 +128,7 @@ method _create {} {\n \t\t\t\t-type ok \\\n \t\t\t\t-title [wm title $w] \\\n \t\t\t\t-parent $w \\\n-\t\t\t\t-message \"Please select a tracking branch.\"\n+\t\t\t\t-message [mc \"Please select a tracking branch.\"]\n \t\t\treturn\n \t\t}\n \t\tif {![regsub ^refs/heads/ [lindex $spec 2] {} newbranch]} {\n@@ -137,7 +137,7 @@ method _create {} {\n \t\t\t\t-type ok \\\n \t\t\t\t-title [wm title $w] \\\n \t\t\t\t-parent $w \\\n-\t\t\t\t-message \"Tracking branch [$w get] is not a branch in the remote repository.\"\n+\t\t\t\t-message [mc \"Tracking branch %s is not a branch in the remote repository.\" [$w get]]\n \t\t\treturn\n \t\t}\n \t}\n@@ -150,7 +150,7 @@ method _create {} {\n \t\t\t-type ok \\\n \t\t\t-title [wm title $w] \\\n \t\t\t-parent $w \\\n-\t\t\t-message \"Please supply a branch name.\"\n+\t\t\t-message [mc \"Please supply a branch name.\"]\n \t\tfocus $w_name\n \t\treturn\n \t}\n@@ -161,7 +161,7 @@ method _create {} {\n \t\t\t-type ok \\\n \t\t\t-title [wm title $w] \\\n \t\t\t-parent $w \\\n-\t\t\t-message \"'$newbranch' is not an acceptable branch name.\"\n+\t\t\t-message [mc \"'%s' is not an acceptable branch name.\" $newbranch]\n \t\tfocus $w_name\n \t\treturn\n \t}\ndiff --git a/lib/branch_delete.tcl b/lib/branch_delete.tcl\nindex c7573c6..7ac5f8a 100644\n--- a/lib/branch_delete.tcl\n+++ b/lib/branch_delete.tcl\n@@ -12,29 +12,29 @@ constructor dialog {} {\n \tglobal current_branch\n \n \tmake_toplevel top w\n-\twm title $top \"[appname] ([reponame]): Delete Branch\"\n+\twm title $top [append \"[appname] ([reponame]): \" [mc \"Delete Branch\"]]\n \tif {$top ne {.}} {\n \t\twm geometry $top \"+[winfo rootx .]+[winfo rooty .]\"\n \t}\n \n-\tlabel $w.header -text {Delete Local Branch} -font font_uibold\n+\tlabel $w.header -text [mc \"Delete Local Branch\"] -font font_uibold\n \tpack $w.header -side top -fill x\n \n \tframe $w.buttons\n \tset w_delete $w.buttons.delete\n \tbutton $w_delete \\\n-\t\t-text Delete \\\n+\t\t-text [mc Delete] \\\n \t\t-default active \\\n \t\t-state disabled \\\n \t\t-command [cb _delete]\n \tpack $w_delete -side right\n \tbutton $w.buttons.cancel \\\n-\t\t-text {Cancel} \\\n+\t\t-text [mc Cancel] \\\n \t\t-command [list destroy $w]\n \tpack $w.buttons.cancel -side right -padx 5\n \tpack $w.buttons -side bottom -fill x -pady 10 -padx 10\n \n-\tlabelframe $w.list -text {Local Branches}\n+\tlabelframe $w.list -text [mc \"Local Branches\"]\n \tset w_heads $w.list.l\n \tlistbox $w_heads \\\n \t\t-height 10 \\\n@@ -49,9 +49,9 @@ constructor dialog {} {\n \n \tset w_check [choose_rev::new \\\n \t\t$w.check \\\n-\t\t{Delete Only If Merged Into} \\\n+\t\t[mc \"Delete Only If Merged Into\"] \\\n \t\t]\n-\t$w_check none {Always (Do not perform merge test.)}\n+\t$w_check none [mc \"Always (Do not perform merge test.)\"]\n \tpack $w.check -anchor nw -fill x -pady 5 -padx 5\n \n \tforeach h [load_all_heads] {\n@@ -112,9 +112,7 @@ method _delete {} {\n \t}\n \tif {$to_delete eq {}} return\n \tif {$check_cmt eq {}} {\n-\t\tset msg {Recovering deleted branches is difficult.\n-\n-Delete the selected branches?}\n+\t\tset msg [mc \"Recovering deleted branches is difficult. \\n\\n Delete the selected branches?\"]\n \t\tif {[tk_messageBox \\\n \t\t\t-icon warning \\\n \t\t\t-type yesno \\\n@@ -140,7 +138,7 @@ Delete the selected branches?}\n \t\t\t-type ok \\\n \t\t\t-title [wm title $w] \\\n \t\t\t-parent $w \\\n-\t\t\t-message \"Failed to delete branches:\\n$failed\"\n+\t\t\t-message [mc \"Failed to delete branches:\\n%s\" $failed]\n \t}\n \n \tdestroy $w\ndiff --git a/lib/branch_rename.tcl b/lib/branch_rename.tcl\nindex 1cadc31..e8592af 100644\n--- a/lib/branch_rename.tcl\n+++ b/lib/branch_rename.tcl\n@@ -11,7 +11,7 @@ constructor dialog {} {\n \tglobal current_branch\n \n \tmake_toplevel top w\n-\twm title $top \"[appname] ([reponame]): Rename Branch\"\n+\twm title $top [append \"[appname] ([reponame]): \" [mc \"Rename Branch\"]]\n \tif {$top ne {.}} {\n \t\twm geometry $top \"+[winfo rootx .]+[winfo rooty .]\"\n \t}\n@@ -19,24 +19,24 @@ constructor dialog {} {\n \tset oldname $current_branch\n \tset newname [get_config gui.newbranchtemplate]\n \n-\tlabel $w.header -text {Rename Branch} -font font_uibold\n+\tlabel $w.header -text [mc \"Rename Branch\"] -font font_uibold\n \tpack $w.header -side top -fill x\n \n \tframe $w.buttons\n-\tbutton $w.buttons.rename -text Rename \\\n+\tbutton $w.buttons.rename -text [mc Rename] \\\n \t\t-default active \\\n \t\t-command [cb _rename]\n \tpack $w.buttons.rename -side right\n-\tbutton $w.buttons.cancel -text {Cancel} \\\n+\tbutton $w.buttons.cancel -text [mc Cancel] \\\n \t\t-command [list destroy $w]\n \tpack $w.buttons.cancel -side right -padx 5\n \tpack $w.buttons -side bottom -fill x -pady 10 -padx 10\n \n \tframe $w.rename\n-\tlabel $w.rename.oldname_l -text {Branch:}\n+\tlabel $w.rename.oldname_l -text [mc \"Branch:\"]\n \teval tk_optionMenu $w.rename.oldname_m @oldname [load_all_heads]\n \n-\tlabel $w.rename.newname_l -text {New Name:}\n+\tlabel $w.rename.newname_l -text [mc \"New Name:\"]\n \tentry $w.rename.newname_t \\\n \t\t-borderwidth 1 \\\n \t\t-relief sunken \\\n@@ -72,7 +72,7 @@ method _rename {} {\n \t\t\t-type ok \\\n \t\t\t-title [wm title $w] \\\n \t\t\t-parent $w \\\n-\t\t\t-message \"Please select a branch to rename.\"\n+\t\t\t-message [mc \"Please select a branch to rename.\"]\n \t\tfocus $w.rename.oldname_m\n \t\treturn\n \t}\n@@ -83,7 +83,7 @@ method _rename {} {\n \t\t\t-type ok \\\n \t\t\t-title [wm title $w] \\\n \t\t\t-parent $w \\\n-\t\t\t-message \"Please supply a branch name.\"\n+\t\t\t-message [mc \"Please supply a branch name.\"]\n \t\tfocus $w.rename.newname_t\n \t\treturn\n \t}\n@@ -93,7 +93,7 @@ method _rename {} {\n \t\t\t-type ok \\\n \t\t\t-title [wm title $w] \\\n \t\t\t-parent $w \\\n-\t\t\t-message \"Branch '$newname' already exists.\"\n+\t\t\t-message [mc \"Branch '%s' already exists.\" $newname]\n \t\tfocus $w.rename.newname_t\n \t\treturn\n \t}\n@@ -103,7 +103,7 @@ method _rename {} {\n \t\t\t-type ok \\\n \t\t\t-title [wm title $w] \\\n \t\t\t-parent $w \\\n-\t\t\t-message \"We do not like '$newname' as a branch name.\"\n+\t\t\t-message [mc \"We do not like '%s' as a branch name.\" $newname]\n \t\tfocus $w.rename.newname_t\n \t\treturn\n \t}\n@@ -114,7 +114,7 @@ method _rename {} {\n \t\t\t-type ok \\\n \t\t\t-title [wm title $w] \\\n \t\t\t-parent $w \\\n-\t\t\t-message \"Failed to rename '$oldname'.\\n\\n$err\"\n+\t\t\t-message [mc \"Failed to rename '%s'.\\n\\n%s\" $oldname $err]\n \t\treturn\n \t}\n \ndiff --git a/lib/browser.tcl b/lib/browser.tcl\nindex b684c67..9435e67 100644\n--- a/lib/browser.tcl\n+++ b/lib/browser.tcl\n@@ -7,7 +7,7 @@ field w\n field browser_commit\n field browser_path\n field browser_files  {}\n-field browser_status {Starting...}\n+field browser_status [mc \"Starting...\"]\n field browser_stack  {}\n field browser_busy   1\n \n@@ -16,7 +16,7 @@ field ls_buf     {}; # Buffered record output from ls-tree\n constructor new {commit {path {}}} {\n \tglobal cursor_ptr M1B\n \tmake_toplevel top w\n-\twm title $top \"[appname] ([reponame]): File Browser\"\n+\twm title $top [append \"[appname] ([reponame]): \" [mc \"File Browser\"]]\n \n \tset browser_commit $commit\n \tset browser_path $browser_commit:$path\n@@ -117,7 +117,7 @@ method _parent {} {\n \t\t} else {\n \t\t\tregsub {/[^/]+$} $browser_path {} browser_path\n \t\t}\n-\t\tset browser_status \"Loading $browser_path...\"\n+\t\tset browser_status [mc \"Loading %s...\" $browser_path]\n \t\t_ls $this [lindex $parent 0] [lindex $parent 1]\n \t}\n }\n@@ -134,7 +134,7 @@ method _enter {} {\n \t\ttree {\n \t\t\tset name [lindex $info 2]\n \t\t\tset escn [escape_path $name]\n-\t\t\tset browser_status \"Loading $escn...\"\n+\t\t\tset browser_status [mc \"Loading %s...\" $escn]\n \t\t\tappend browser_path $escn\n \t\t\t_ls $this [lindex $info 1] $name\n \t\t}\n@@ -178,7 +178,7 @@ method _ls {tree_id {name {}}} {\n \t\t\t-align center -padx 5 -pady 1 \\\n \t\t\t-name icon0 \\\n \t\t\t-image file_uplevel\n-\t\t$w insert end {[Up To Parent]}\n+\t\t$w insert end [mc \"[Up To Parent]\"]\n \t\tlappend browser_files parent\n \t}\n \tlappend browser_stack [list $tree_id $name]\n@@ -230,7 +230,7 @@ method _read {fd} {\n \n \tif {[eof $fd]} {\n \t\tclose $fd\n-\t\tset browser_status Ready.\n+\t\tset browser_status [mc \"Ready.\"]\n \t\tset browser_busy 0\n \t\tset ls_buf {}\n \t\tif {$n > 0} {\n@@ -251,22 +251,22 @@ field w_rev          ; # mega-widget to pick the initial revision\n \n constructor dialog {} {\n \tmake_toplevel top w\n-\twm title $top \"[appname] ([reponame]): Browse Branch Files\"\n+\twm title $top [append \"[appname] ([reponame]): \" [mc \"Browse Branch Files\"]]\n \tif {$top ne {.}} {\n \t\twm geometry $top \"+[winfo rootx .]+[winfo rooty .]\"\n \t}\n \n \tlabel $w.header \\\n-\t\t-text {Browse Branch Files} \\\n+\t\t-text [mc \"Browse Branch Files\"] \\\n \t\t-font font_uibold\n \tpack $w.header -side top -fill x\n \n \tframe $w.buttons\n-\tbutton $w.buttons.browse -text Browse \\\n+\tbutton $w.buttons.browse -text [mc Browse] \\\n \t\t-default active \\\n \t\t-command [cb _open]\n \tpack $w.buttons.browse -side right\n-\tbutton $w.buttons.cancel -text {Cancel} \\\n+\tbutton $w.buttons.cancel -text [mc Cancel] \\\n \t\t-command [list destroy $w]\n \tpack $w.buttons.cancel -side right -padx 5\n \tpack $w.buttons -side bottom -fill x -pady 10 -padx 10\ndiff --git a/lib/checkout_op.tcl b/lib/checkout_op.tcl\nindex 0571115..4b29634 100644\n--- a/lib/checkout_op.tcl\n+++ b/lib/checkout_op.tcl\n@@ -137,7 +137,7 @@ method _finish_fetch {ok} {\n \t\tdestroy $w\n \t\tset w {}\n \t} else {\n-\t\tbutton $w.close -text Close -command [list destroy $w]\n+\t\tbutton $w.close -text [mc Close] -command [list destroy $w]\n \t\tpack $w.close -side bottom -anchor e -padx 10 -pady 10\n \t}\n \n@@ -166,7 +166,7 @@ method _update_ref {} {\n \t\t# Assume it does not exist, and that is what the error was.\n \t\t#\n \t\tif {!$create} {\n-\t\t\t_error $this \"Branch '$newbranch' does not exist.\"\n+\t\t\t_error $this [mc \"Branch '%s' does not exist.\" $newbranch]\n \t\t\treturn 0\n \t\t}\n \n@@ -176,7 +176,7 @@ method _update_ref {} {\n \t\t# We were told to create it, but not do a merge.\n \t\t# Bad.  Name shouldn't have existed.\n \t\t#\n-\t\t_error $this \"Branch '$newbranch' already exists.\"\n+\t\t_error $this [mc \"Branch '%s' already exists.\" $newbranch]\n \t\treturn 0\n \t} elseif {!$create && $merge_type eq {none}} {\n \t\t# We aren't creating, it exists and we don't merge.\n@@ -202,7 +202,7 @@ method _update_ref {} {\n \t\t\t\t\t#\n \t\t\t\t\tset new $cur\n \t\t\t\t} else {\n-\t\t\t\t\t_error $this \"Branch '$newbranch' already exists.\\n\\nIt cannot fast-forward to $new_expr.\\nA merge is required.\"\n+\t\t\t\t\t_error $this [mc \"Branch '%s' already exists.\\n\\nIt cannot fast-forward to %s.\\nA merge is required.\" $newbranch $new_expr]\n \t\t\t\t\treturn 0\n \t\t\t\t}\n \t\t\t}\n@@ -216,7 +216,7 @@ method _update_ref {} {\n \t\t\t\t}\n \t\t\t}\n \t\t\tdefault {\n-\t\t\t\t_error $this \"Merge strategy '$merge_type' not supported.\"\n+\t\t\t\t_error $this [mc \"Merge strategy '%s' not supported.\" $merge_type]\n \t\t\t\treturn 0\n \t\t\t}\n \t\t\t}\n@@ -235,7 +235,7 @@ method _update_ref {} {\n \t\tif {[catch {\n \t\t\t\tgit update-ref -m $reflog_msg $ref $new $cur\n \t\t\t} err]} {\n-\t\t\t_error $this \"Failed to update '$newbranch'.\\n\\n$err\"\n+\t\t\t_error $this [mc \"Failed to update '%s'.\\n\\n%s\" $newbranch $err]\n \t\t\treturn 0\n \t\t}\n \t}\n@@ -247,7 +247,7 @@ method _checkout {} {\n \tif {[lock_index checkout_op]} {\n \t\tafter idle [cb _start_checkout]\n \t} else {\n-\t\t_error $this \"Index is already locked.\"\n+\t\t_error $this [mc \"Index is already locked.\"]\n \t\tdelete_this\n \t}\n }\n@@ -262,12 +262,12 @@ method _start_checkout {} {\n \t\t&& $curType eq {normal}\n \t\t&& $curHEAD eq $HEAD} {\n \t} elseif {$commit_type ne $curType || $HEAD ne $curHEAD} {\n-\t\tinfo_popup {Last scanned state does not match repository state.\n+\t\tinfo_popup [mc \"Last scanned state does not match repository state.\n \n Another Git program has modified this repository since the last scan.  A rescan must be performed before the current branch can be changed.\n \n The rescan will be automatically started now.\n-}\n+\"]\n \t\tunlock_index\n \t\trescan ui_ready\n \t\tdelete_this\n@@ -349,12 +349,12 @@ method _readtree_wait {fd} {\n \tif {[catch {close $fd}]} {\n \t\tset err $readtree_d\n \t\tregsub {^fatal: } $err {} err\n-\t\t$::main_status stop \"Aborted checkout of '[_name $this]' (file level merging is required).\"\n-\t\twarn_popup \"File level merge required.\n+\t\t$::main_status stop [mc \"Aborted checkout of '%s' (file level merging is required).\" [_name $this]]\n+\t\twarn_popup [append [mc \"File level merge required.\"] \"\n \n $err\n \n-Staying on branch '$current_branch'.\"\n+\" [mc \"Staying on branch '%s'.\" $current_branch]]\n \t\tunlock_index\n \t\tdelete_this\n \t\treturn\n@@ -423,9 +423,9 @@ method _after_readtree {} {\n \t}\n \n \tif {$is_detached} {\n-\t\tinfo_popup \"You are no longer on a local branch.\n+\t\tinfo_popup [mc \"You are no longer on a local branch.\n \n-If you wanted to be on a branch, create one now starting from 'This Detached Checkout'.\"\n+If you wanted to be on a branch, create one now starting from 'This Detached Checkout'.\"]\n \t}\n \n \t# -- Update our repository state.  If we were previously in\n@@ -472,7 +472,7 @@ method _confirm_reset {cur} {\n \tpack [label $w.msg1 \\\n \t\t-anchor w \\\n \t\t-justify left \\\n-\t\t-text \"Resetting '$name' to $new_expr will lose the following commits:\" \\\n+\t\t-text [mc \"Resetting '%s' to '%s' will lose the following commits:\" $name $new_expr]\\\n \t\t] -anchor w\n \n \tset list $w.list.l\n@@ -494,21 +494,21 @@ method _confirm_reset {cur} {\n \tpack [label $w.msg2 \\\n \t\t-anchor w \\\n \t\t-justify left \\\n-\t\t-text {Recovering lost commits may not be easy.} \\\n+\t\t-text [mc \"Recovering lost commits may not be easy.\"] \\\n \t\t]\n \tpack [label $w.msg3 \\\n \t\t-anchor w \\\n \t\t-justify left \\\n-\t\t-text \"Reset '$name'?\" \\\n+\t\t-text [mc \"Reset '%s'?\" $name] \\\n \t\t]\n \n \tframe $w.buttons\n \tbutton $w.buttons.visualize \\\n-\t\t-text Visualize \\\n+\t\t-text [mc Visualize] \\\n \t\t-command $gitk\n \tpack $w.buttons.visualize -side left\n \tbutton $w.buttons.reset \\\n-\t\t-text Reset \\\n+\t\t-text [mc Reset] \\\n \t\t-command \"\n \t\t\tset @reset_ok 1\n \t\t\tdestroy $w\n@@ -516,7 +516,7 @@ method _confirm_reset {cur} {\n \tpack $w.buttons.reset -side right\n \tbutton $w.buttons.cancel \\\n \t\t-default active \\\n-\t\t-text Cancel \\\n+\t\t-text [mc Cancel] \\\n \t\t-command [list destroy $w]\n \tpack $w.buttons.cancel -side right -padx 5\n \tpack $w.buttons -side bottom -fill x -pady 10 -padx 10\n@@ -572,13 +572,13 @@ method _toplevel {title} {\n }\n \n method _fatal {err} {\n-\terror_popup \"Failed to set current branch.\n+\terror_popup [append [mc \"Failed to set current branch.\n \n This working directory is only partially switched.  We successfully updated your files, but failed to update an internal Git file.\n \n-This should not have occurred.  [appname] will now close and give up.\n+This should not have occurred.  %s will now close and give up.\" [appname]] \"\n \n-$err\"\n+$err\"]\n \texit 1\n }\n \ndiff --git a/lib/choose_rev.tcl b/lib/choose_rev.tcl\nindex 6c4c318..1e82990 100644\n--- a/lib/choose_rev.tcl\n+++ b/lib/choose_rev.tcl\n@@ -32,14 +32,14 @@ constructor new {path {title {}}} {\n \tif {$is_detached} {\n \t\tradiobutton $w.detachedhead_r \\\n \t\t\t-anchor w \\\n-\t\t\t-text {This Detached Checkout} \\\n+\t\t\t-text [mc \"This Detached Checkout\"] \\\n \t\t\t-value HEAD \\\n \t\t\t-variable @revtype\n \t\tgrid $w.detachedhead_r -sticky we -padx {0 5} -columnspan 2\n \t}\n \n \tradiobutton $w.expr_r \\\n-\t\t-text {Revision Expression:} \\\n+\t\t-text [mc \"Revision Expression:\"] \\\n \t\t-value expr \\\n \t\t-variable @revtype\n \tentry $w.expr_t \\\n@@ -53,17 +53,17 @@ constructor new {path {title {}}} {\n \n \tframe $w.types\n \tradiobutton $w.types.head_r \\\n-\t\t-text {Local Branch} \\\n+\t\t-text [mc \"Local Branch\"] \\\n \t\t-value head \\\n \t\t-variable @revtype\n \tpack $w.types.head_r -side left\n \tradiobutton $w.types.trck_r \\\n-\t\t-text {Tracking Branch} \\\n+\t\t-text [mc \"Tracking Branch\"] \\\n \t\t-value trck \\\n \t\t-variable @revtype\n \tpack $w.types.trck_r -side left\n \tradiobutton $w.types.tag_r \\\n-\t\t-text {Tag} \\\n+\t\t-text [mc \"Tag\"] \\\n \t\t-value tag \\\n \t\t-variable @revtype\n \tpack $w.types.tag_r -side left\n@@ -224,7 +224,7 @@ method commit_or_die {} {\n \t\t}\n \n \t\tset top [winfo toplevel $w]\n-\t\tset msg \"Invalid revision: [get $this]\\n\\n$err\"\n+\t\tset msg [mc \"Invalid revision: %s\\n\\n%s\" [get $this] $err]\n \t\ttk_messageBox \\\n \t\t\t-icon error \\\n \t\t\t-type ok \\\n@@ -245,7 +245,7 @@ method _expr {} {\n \t\tif {$i ne {}} {\n \t\t\treturn [lindex $cur_specs $i 1]\n \t\t} else {\n-\t\t\terror \"No revision selected.\"\n+\t\t\terror [mc \"No revision selected.\"]\n \t\t}\n \t}\n \n@@ -253,7 +253,7 @@ method _expr {} {\n \t\tif {$c_expr ne {}} {\n \t\t\treturn $c_expr\n \t\t} else {\n-\t\t\terror \"Revision expression is empty.\"\n+\t\t\terror [mc \"Revision expression is empty.\"]\n \t\t}\n \t}\n \tHEAD { return HEAD                     }\ndiff --git a/lib/commit.tcl b/lib/commit.tcl\nindex 6b86f98..f60b11e 100644\n--- a/lib/commit.tcl\n+++ b/lib/commit.tcl\n@@ -6,19 +6,19 @@ proc load_last_commit {} {\n \tglobal repo_config\n \n \tif {[llength $PARENT] == 0} {\n-\t\terror_popup {There is nothing to amend.\n+\t\terror_popup [mc \"There is nothing to amend.\n \n You are about to create the initial commit.  There is no commit before this to amend.\n-}\n+\"]\n \t\treturn\n \t}\n \n \trepository_state curType curHEAD curMERGE_HEAD\n \tif {$curType eq {merge}} {\n-\t\terror_popup {Cannot amend while merging.\n+\t\terror_popup [mc \"Cannot amend while merging.\n \n You are currently in the middle of a merge that has not been fully completed.  You cannot amend the prior commit unless you first abort the current merge activity.\n-}\n+\"]\n \t\treturn\n \t}\n \n@@ -46,7 +46,7 @@ You are currently in the middle of a merge that has not been fully completed.  Y\n \t\t\t}\n \t\t\tset msg [string trim $msg]\n \t\t} err]} {\n-\t\terror_popup \"Error loading commit data for amend:\\n\\n$err\"\n+ \t    error_popup [append [mc \"Error loading commit data for amend:\"] \"\\n\\n$err\"]\n \t\treturn\n \t}\n \n@@ -73,12 +73,12 @@ proc committer_ident {} {\n \n \tif {$GIT_COMMITTER_IDENT eq {}} {\n \t\tif {[catch {set me [git var GIT_COMMITTER_IDENT]} err]} {\n-\t\t\terror_popup \"Unable to obtain your identity:\\n\\n$err\"\n+\t\t\terror_popup [append [mc \"Unable to obtain your identity:\"] \"\\n\\n$err\"]\n \t\t\treturn {}\n \t\t}\n \t\tif {![regexp {^(.*) [0-9]+ [-+0-9]+$} \\\n \t\t\t$me me GIT_COMMITTER_IDENT]} {\n-\t\t\terror_popup \"Invalid GIT_COMMITTER_IDENT:\\n\\n$me\"\n+\t\t\terror_popup [append [mc \"Invalid GIT_COMMITTER_IDENT:\"] \"\\n\\n$me\"]\n \t\t\treturn {}\n \t\t}\n \t}\n@@ -130,12 +130,12 @@ proc commit_tree {} {\n \t\t&& $curType eq {normal}\n \t\t&& $curHEAD eq $HEAD} {\n \t} elseif {$commit_type ne $curType || $HEAD ne $curHEAD} {\n-\t\tinfo_popup {Last scanned state does not match repository state.\n+\t\tinfo_popup [mc \"Last scanned state does not match repository state.\n \n Another Git program has modified this repository since the last scan.  A rescan must be performed before another commit can be created.\n \n The rescan will be automatically started now.\n-}\n+\"]\n \t\tunlock_index\n \t\trescan ui_ready\n \t\treturn\n@@ -151,26 +151,26 @@ The rescan will be automatically started now.\n \t\tD? -\n \t\tM? {set files_ready 1}\n \t\tU? {\n-\t\t\terror_popup \"Unmerged files cannot be committed.\n+\t\t\terror_popup [mc \"Unmerged files cannot be committed.\n \n-File [short_path $path] has merge conflicts.  You must resolve them and add the file before committing.\n-\"\n+File %s has merge conflicts.  You must resolve them and add the file before committing.\n+\" [short_path $path]]\n \t\t\tunlock_index\n \t\t\treturn\n \t\t}\n \t\tdefault {\n-\t\t\terror_popup \"Unknown file state [lindex $s 0] detected.\n+\t\t\terror_popup [mc \"Unknown file state %s detected.\n \n-File [short_path $path] cannot be committed by this program.\n-\"\n+File %s cannot be committed by this program.\n+\" [lindex $s 0] [short_path $path]]\n \t\t}\n \t\t}\n \t}\n \tif {!$files_ready && ![string match *merge $curType]} {\n-\t\tinfo_popup {No changes to commit.\n+\t\tinfo_popup [mc \"No changes to commit.\n \n You must add at least 1 file before you can commit.\n-}\n+\"]\n \t\tunlock_index\n \t\treturn\n \t}\n@@ -180,14 +180,14 @@ You must add at least 1 file before you can commit.\n \tset msg [string trim [$ui_comm get 1.0 end]]\n \tregsub -all -line {[ \\t\\r]+$} $msg {} msg\n \tif {$msg eq {}} {\n-\t\terror_popup {Please supply a commit message.\n+\t\terror_popup [mc \"Please supply a commit message.\n \n A good commit message has the following format:\n \n - First line: Describe in one sentance what you did.\n - Second line: Blank\n - Remaining lines: Describe why this change is good.\n-}\n+\"]\n \t\tunlock_index\n \t\treturn\n \t}\n@@ -254,7 +254,7 @@ proc commit_committree {fd_wt curHEAD msg} {\n \n \tgets $fd_wt tree_id\n \tif {$tree_id eq {} || [catch {close $fd_wt} err]} {\n-\t\terror_popup \"write-tree failed:\\n\\n$err\"\n+\t\terror_popup [append [mc \"write-tree failed:\"] \"\\n\\n$err\"]\n \t\tui_status {Commit failed.}\n \t\tunlock_index\n \t\treturn\n@@ -276,14 +276,14 @@ proc commit_committree {fd_wt curHEAD msg} {\n \t\t}\n \n \t\tif {$tree_id eq $old_tree} {\n-\t\t\tinfo_popup {No changes to commit.\n+\t\t\tinfo_popup [mc \"No changes to commit.\n \n No files were modified by this commit and it was not a merge commit.\n \n A rescan will be automatically started now.\n-}\n+\"]\n \t\t\tunlock_index\n-\t\t\trescan {ui_status {No changes to commit.}}\n+\t\t\trescan {ui_status [mc \"No changes to commit.\"]}\n \t\t\treturn\n \t\t}\n \t}\n@@ -314,7 +314,7 @@ A rescan will be automatically started now.\n \t}\n \tlappend cmd <$msg_p\n \tif {[catch {set cmt_id [eval git $cmd]} err]} {\n-\t\terror_popup \"commit-tree failed:\\n\\n$err\"\n+\t\terror_popup [append [mc \"commit-tree failed:\"] \"\\n\\n$err\"]\n \t\tui_status {Commit failed.}\n \t\tunlock_index\n \t\treturn\n@@ -336,7 +336,7 @@ A rescan will be automatically started now.\n \tif {[catch {\n \t\t\tgit update-ref -m $reflogm HEAD $cmt_id $curHEAD\n \t\t} err]} {\n-\t\terror_popup \"update-ref failed:\\n\\n$err\"\n+\t\terror_popup [append [mc \"update-ref failed:\"] \"\\n\\n$err\"]\n \t\tui_status {Commit failed.}\n \t\tunlock_index\n \t\treturn\n@@ -427,5 +427,5 @@ A rescan will be automatically started now.\n \tdisplay_all_files\n \tunlock_index\n \treshow_diff\n-\tui_status \"Created commit [string range $cmt_id 0 7]: $subject\"\n+\tui_status [mc \"Created commit %s: %s\" [string range $cmt_id 0 7] $subject]\n }\ndiff --git a/lib/console.tcl b/lib/console.tcl\nindex 6f718fb..e5f9ba4 100644\n--- a/lib/console.tcl\n+++ b/lib/console.tcl\n@@ -52,7 +52,7 @@ method _init {} {\n \t\t-state disabled \\\n \t\t-xscrollcommand [list $w.m.sbx set] \\\n \t\t-yscrollcommand [list $w.m.sby set]\n-\tlabel $w.m.s -text {Working... please wait...} \\\n+\tlabel $w.m.s -text [mc \"Working... please wait...\"] \\\n \t\t-anchor w \\\n \t\t-justify left \\\n \t\t-font font_uibold\n@@ -66,11 +66,11 @@ method _init {} {\n \tpack $w.m -side top -fill both -expand 1 -padx 5 -pady 10\n \n \tmenu $w.ctxm -tearoff 0\n-\t$w.ctxm add command -label \"Copy\" \\\n+\t$w.ctxm add command -label [mc \"Copy\"] \\\n \t\t-command \"tk_textCopy $w.m.t\"\n-\t$w.ctxm add command -label \"Select All\" \\\n+\t$w.ctxm add command -label [mc \"Select All\"] \\\n \t\t-command \"focus $w.m.t;$w.m.t tag add sel 0.0 end\"\n-\t$w.ctxm add command -label \"Copy All\" \\\n+\t$w.ctxm add command -label [mc \"Copy All\"] \\\n \t\t-command \"\n \t\t\t$w.m.t tag add sel 0.0 end\n \t\t\ttk_textCopy $w.m.t\n@@ -78,7 +78,7 @@ method _init {} {\n \t\t\"\n \n \tif {$is_toplevel} {\n-\t\tbutton $w.ok -text {Close} \\\n+\t\tbutton $w.ok -text [mc \"Close\"] \\\n \t\t\t-state disabled \\\n \t\t\t-command [list destroy $w]\n \t\tpack $w.ok -side bottom -anchor e -pady 10 -padx 10\n@@ -181,7 +181,7 @@ method insert {txt} {\n method done {ok} {\n \tif {$ok} {\n \t\tif {[winfo exists $w.m.s]} {\n-\t\t\t$w.m.s conf -background green -text {Success}\n+\t\t\t$w.m.s conf -background green -text [mc \"Success\"]\n \t\t\tif {$is_toplevel} {\n \t\t\t\t$w.ok conf -state normal\n \t\t\t\tfocus $w.ok\n@@ -191,7 +191,7 @@ method done {ok} {\n \t\tif {![winfo exists $w.m.s]} {\n \t\t\t_init $this\n \t\t}\n-\t\t$w.m.s conf -background red -text {Error: Command Failed}\n+\t\t$w.m.s conf -background red -text [mc \"Error: Command Failed\"]\n \t\tif {$is_toplevel} {\n \t\t\t$w.ok conf -state normal\n \t\t\tfocus $w.ok\ndiff --git a/lib/database.tcl b/lib/database.tcl\nindex 0657cc2..8dda9af 100644\n--- a/lib/database.tcl\n+++ b/lib/database.tcl\n@@ -24,14 +24,14 @@ proc do_stats {} {\n \ttoplevel $w\n \twm geometry $w \"+[winfo rootx .]+[winfo rooty .]\"\n \n-\tlabel $w.header -text {Database Statistics}\n+\tlabel $w.header -text [mc \"Database Statistics\"]\n \tpack $w.header -side top -fill x\n \n \tframe $w.buttons -border 1\n-\tbutton $w.buttons.close -text Close \\\n+\tbutton $w.buttons.close -text [mc Close] \\\n \t\t-default active \\\n \t\t-command [list destroy $w]\n-\tbutton $w.buttons.gc -text {Compress Database} \\\n+\tbutton $w.buttons.gc -text [mc \"Compress Database\"] \\\n \t\t-default normal \\\n \t\t-command \"destroy $w;do_gc\"\n \tpack $w.buttons.close -side right\n@@ -40,13 +40,13 @@ proc do_stats {} {\n \n \tframe $w.stat -borderwidth 1 -relief solid\n \tforeach s {\n-\t\t{count           {Number of loose objects}}\n-\t\t{size            {Disk space used by loose objects} { KiB}}\n-\t\t{in-pack         {Number of packed objects}}\n-\t\t{packs           {Number of packs}}\n-\t\t{size-pack       {Disk space used by packed objects} { KiB}}\n-\t\t{prune-packable  {Packed objects waiting for pruning}}\n-\t\t{garbage         {Garbage files}}\n+\t\t{count           [mc \"Number of loose objects\"]}\n+\t\t{size            [mc \"Disk space used by loose objects\"] { KiB}}\n+\t\t{in-pack         [mc \"Number of packed objects\"]}\n+\t\t{packs           [mc \"Number of packs\"]}\n+\t\t{size-pack       [mc \"Disk space used by packed objects\"] { KiB}}\n+\t\t{prune-packable  [mc \"Packed objects waiting for pruning\"]}\n+\t\t{garbage         [mc \"Garbage files\"]}\n \t\t} {\n \t\tset name [lindex $s 0]\n \t\tset label [lindex $s 1]\n@@ -64,12 +64,12 @@ proc do_stats {} {\n \tbind $w <Visibility> \"grab $w; focus $w.buttons.close\"\n \tbind $w <Key-Escape> [list destroy $w]\n \tbind $w <Key-Return> [list destroy $w]\n-\twm title $w \"[appname] ([reponame]): Database Statistics\"\n+\twm title $w [append \"[appname] ([reponame]): \" [mc \"Database Statistics\"]]\n \ttkwait window $w\n }\n \n proc do_gc {} {\n-\tset w [console::new {gc} {Compressing the object database}]\n+\tset w [console::new {gc} [mc \"Compressing the object database\"]]\n \tconsole::chain $w {\n \t\t{exec git pack-refs --prune}\n \t\t{exec git reflog expire --all}\n@@ -80,7 +80,7 @@ proc do_gc {} {\n \n proc do_fsck_objects {} {\n \tset w [console::new {fsck-objects} \\\n-\t\t{Verifying the object database with fsck-objects}]\n+\t\t[mc \"Verifying the object database with fsck-objects\"]]\n \tset cmd [list git fsck-objects]\n \tlappend cmd --full\n \tlappend cmd --cache\ndiff --git a/lib/diff.tcl b/lib/diff.tcl\nindex e09e125..d937e46 100644\n--- a/lib/diff.tcl\n+++ b/lib/diff.tcl\n@@ -39,13 +39,13 @@ proc handle_empty_diff {} {\n \tset s $file_states($path)\n \tif {[lindex $s 0] ne {_M}} return\n \n-\tinfo_popup \"No differences detected.\n+\tinfo_popup [mc \"No differences detected.\n \n-[short_path $path] has no changes.\n+%s has no changes.\n \n The modification date of this file was updated by another application, but the content within the file was not changed.\n \n-A rescan will be automatically started to find other files which may have the same state.\"\n+A rescan will be automatically started to find other files which may have the same state.\" [short_path $path]]\n \n \tclear_diff\n \tdisplay_file $path __\n@@ -94,7 +94,7 @@ proc show_diff {path w {lno {}}} {\n \t\t\tset diff_active 0\n \t\t\tunlock_index\n \t\t\tui_status \"Unable to display [escape_path $path]\"\n-\t\t\terror_popup \"Error loading file:\\n\\n$err\"\n+ \t\t    error_popup [append [mc \"Error loading file:\"] \"\\n\\n$err\"]\n \t\t\treturn\n \t\t}\n \t\t$ui_diff conf -state normal\n@@ -159,7 +159,7 @@ proc show_diff {path w {lno {}}} {\n \t\tset diff_active 0\n \t\tunlock_index\n \t\tui_status \"Unable to display [escape_path $path]\"\n-\t\terror_popup \"Error loading diff:\\n\\n$err\"\n+\t\terror_popup [append [mc \"Error loading diff:\"] \"\\n\\n$err\"]\n \t\treturn\n \t}\n \n@@ -307,7 +307,7 @@ proc apply_hunk {x y} {\n \t\tputs -nonewline $p $current_diff_header\n \t\tputs -nonewline $p [$ui_diff get $s_lno $e_lno]\n \t\tclose $p} err]} {\n-\t\terror_popup \"Failed to $mode selected hunk.\\n\\n$err\"\n+\t\terror_popup [append [mc \"Failed to %s selected hunk.\" $mode] \"\\n\\n$err\"]\n \t\tunlock_index\n \t\treturn\n \t}\ndiff --git a/lib/error.tcl b/lib/error.tcl\nindex 16a2218..13565b7 100644\n--- a/lib/error.tcl\n+++ b/lib/error.tcl\n@@ -9,7 +9,7 @@ proc error_popup {msg} {\n \tset cmd [list tk_messageBox \\\n \t\t-icon error \\\n \t\t-type ok \\\n-\t\t-title \"$title: error\" \\\n+\t\t-title [append \"$title: \" [mc \"error\"]] \\\n \t\t-message $msg]\n \tif {[winfo ismapped .]} {\n \t\tlappend cmd -parent .\n@@ -25,7 +25,7 @@ proc warn_popup {msg} {\n \tset cmd [list tk_messageBox \\\n \t\t-icon warning \\\n \t\t-type ok \\\n-\t\t-title \"$title: warning\" \\\n+\t\t-title [append \"$title: \" [mc \"warning\"]] \\\n \t\t-message $msg]\n \tif {[winfo ismapped .]} {\n \t\tlappend cmd -parent .\n@@ -78,7 +78,7 @@ proc hook_failed_popup {hook msg} {\n \t\t-font font_diff \\\n \t\t-yscrollcommand [list $w.m.sby set]\n \tlabel $w.m.l2 \\\n-\t\t-text {You must correct the above errors before committing.} \\\n+\t\t-text [mc \"You must correct the above errors before committing.\"] \\\n \t\t-anchor w \\\n \t\t-justify left \\\n \t\t-font font_uibold\n@@ -99,6 +99,6 @@ proc hook_failed_popup {hook msg} {\n \n \tbind $w <Visibility> \"grab $w; focus $w\"\n \tbind $w <Key-Return> \"destroy $w\"\n-\twm title $w \"[appname] ([reponame]): error\"\n+\twm title $w [append \"[appname] ([reponame]): \" [mc \"error\"]]\n \ttkwait window $w\n }\ndiff --git a/lib/index.tcl b/lib/index.tcl\nindex 3ea72e1..9080ac6 100644\n--- a/lib/index.tcl\n+++ b/lib/index.tcl\n@@ -358,13 +358,13 @@ proc revert_helper {txt paths} {\n \tset reply [tk_dialog \\\n \t\t.confirm_revert \\\n \t\t\"[appname] ([reponame])\" \\\n-\t\t\"Revert changes in $s?\n+\t\t[mc \"Revert changes in %s?\n \n-Any unadded changes will be permanently lost by the revert.\" \\\n+Any unadded changes will be permanently lost by the revert.\" $s] \\\n \t\tquestion \\\n \t\t1 \\\n-\t\t{Do Nothing} \\\n-\t\t{Revert Changes} \\\n+\t\t[mc \"Do Nothing\"] \\\n+\t\t[mc \"Revert Changes\"] \\\n \t\t]\n \tif {$reply == 1} {\n \t\tcheckout_index \\\ndiff --git a/lib/merge.tcl b/lib/merge.tcl\nindex e5a7525..40e82a9 100644\n--- a/lib/merge.tcl\n+++ b/lib/merge.tcl\n@@ -11,10 +11,10 @@ method _can_merge {} {\n \tglobal HEAD commit_type file_states\n \n \tif {[string match amend* $commit_type]} {\n-\t\tinfo_popup {Cannot merge while amending.\n+\t\tinfo_popup [mc \"Cannot merge while amending.\n \n You must finish amending this commit before starting any type of merge.\n-}\n+\"]\n \t\treturn 0\n \t}\n \n@@ -25,12 +25,12 @@ You must finish amending this commit before starting any type of merge.\n \t#\n \trepository_state curType curHEAD curMERGE_HEAD\n \tif {$commit_type ne $curType || $HEAD ne $curHEAD} {\n-\t\tinfo_popup {Last scanned state does not match repository state.\n+\t\tinfo_popup [mc \"Last scanned state does not match repository state.\n \n Another Git program has modified this repository since the last scan.  A rescan must be performed before a merge can be performed.\n \n The rescan will be automatically started now.\n-}\n+\"]\n \t\tunlock_index\n \t\trescan ui_ready\n \t\treturn 0\n@@ -42,22 +42,22 @@ The rescan will be automatically started now.\n \t\t\tcontinue; # and pray it works!\n \t\t}\n \t\tU? {\n-\t\t\terror_popup \"You are in the middle of a conflicted merge.\n+\t\t\terror_popup [mc \"You are in the middle of a conflicted merge.\n \n-File [short_path $path] has merge conflicts.\n+File %s has merge conflicts.\n \n You must resolve them, add the file, and commit to complete the current merge.  Only then can you begin another merge.\n-\"\n+\" [short_path $path]]\n \t\t\tunlock_index\n \t\t\treturn 0\n \t\t}\n \t\t?? {\n-\t\t\terror_popup \"You are in the middle of a change.\n+\t\t\terror_popup [mc \"You are in the middle of a change.\n \n-File [short_path $path] is modified.\n+File %s is modified.\n \n You should complete the current commit before starting a merge.  Doing so will help you abort a failed merge, should the need arise.\n-\"\n+\" [short_path $path]]\n \t\t\tunlock_index\n \t\t\treturn 0\n \t\t}\n@@ -91,9 +91,9 @@ method _start {} {\n \t}\n \n \tset cmd [list git merge $name]\n-\tset msg \"Merging $current_branch and $name\"\n+\tset msg [mc \"Merging %s and %s\" $current_branch $name]\n \tui_status \"$msg...\"\n-\tset cons [console::new \"Merge\" $cmd]\n+\tset cons [console::new [mc \"Merge\"] $cmd]\n \tconsole::exec $cons $cmd [cb _finish $cons]\n \n \twm protocol $w WM_DELETE_WINDOW {}\n@@ -103,9 +103,9 @@ method _start {} {\n method _finish {cons ok} {\n \tconsole::done $cons $ok\n \tif {$ok} {\n-\t\tset msg {Merge completed successfully.}\n+\t\tset msg [mc \"Merge completed successfully.\"]\n \t} else {\n-\t\tset msg {Merge failed.  Conflict resolution is required.}\n+\t\tset msg [mc \"Merge failed.  Conflict resolution is required.\"]\n \t}\n \tunlock_index\n \trescan [list ui_status $msg]\n@@ -154,7 +154,7 @@ constructor dialog {} {\n \tset list [lsort -unique $list]\n \n \tmake_toplevel top w\n-\twm title $top \"[appname] ([reponame]): Merge\"\n+\twm title $top [append \"[appname] ([reponame]): \" [mc \"Merge\"]]\n \tif {$top ne {.}} {\n \t\twm geometry $top \"+[winfo rootx .]+[winfo rooty .]\"\n \t}\n@@ -163,22 +163,22 @@ constructor dialog {} {\n \tset _start [cb _start]\n \n \tlabel $w.header \\\n-\t\t-text \"Merge Into $current_branch\" \\\n+\t\t-text [mc \"Merge Into %s\" $current_branch] \\\n \t\t-font font_uibold\n \tpack $w.header -side top -fill x\n \n \tframe $w.buttons\n-\tbutton $w.buttons.visualize -text Visualize -command $_visualize\n+\tbutton $w.buttons.visualize -text [mc Visualize] -command $_visualize\n \tpack $w.buttons.visualize -side left\n-\tbutton $w.buttons.create -text Merge -command $_start\n+\tbutton $w.buttons.create -text [mc Merge] -command $_start\n \tpack $w.buttons.create -side right\n \tbutton $w.buttons.cancel \\\n-\t\t-text {Cancel} \\\n+\t\t-text [mc \"Cancel\"] \\\n \t\t-command [cb _cancel]\n \tpack $w.buttons.cancel -side right -padx 5\n \tpack $w.buttons -side bottom -fill x -pady 10 -padx 10\n \n-\tlabelframe $w.source -text {Source Branches}\n+\tlabelframe $w.source -text [mc \"Source Branches\"]\n \tset w_list $w.source.l\n \tlistbox $w_list \\\n \t\t-height 10 \\\n@@ -237,30 +237,34 @@ proc reset_hard {} {\n \tglobal HEAD commit_type file_states\n \n \tif {[string match amend* $commit_type]} {\n-\t\tinfo_popup {Cannot abort while amending.\n+\t\tinfo_popup [mc \"Cannot abort while amending.\n \n You must finish amending this commit.\n-}\n+\"]\n \t\treturn\n \t}\n \n \tif {![lock_index abort]} return\n \n \tif {[string match *merge* $commit_type]} {\n-\t\tset op merge\n+\t\tset op_question [mc \"Abort merge?\n+\n+Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n+\n+Continue with aborting the current merge?\"]\n \t} else {\n-\t\tset op commit\n-\t}\n+\t\tset op_question [mc \"Abort commit?\n \n-\tif {[ask_popup \"Abort $op?\n+Aborting the current commit will cause *ALL* uncommitted changes to be lost.\n \n-Aborting the current $op will cause *ALL* uncommitted changes to be lost.\n+Continue with aborting the current commit?\"]\n+\t}\n \n-Continue with aborting the current $op?\"] eq {yes}} {\n+\tif {[ask_popup $op_question] eq {yes}} {\n \t\tset fd [git_read read-tree --reset -u HEAD]\n \t\tfconfigure $fd -blocking 0 -translation binary\n \t\tfileevent $fd readable [namespace code [list _reset_wait $fd]]\n-\t\tui_status {Aborting... please wait...}\n+\t\tui_status [mc \"Aborting... please wait...\"]\n \t} else {\n \t\tunlock_index\n \t}\n@@ -283,7 +287,7 @@ proc _reset_wait {fd} {\n \t\tcatch {file delete [gitdir MERGE_MSG]}\n \t\tcatch {file delete [gitdir GITGUI_MSG]}\n \n-\t\trescan {ui_status {Abort completed.  Ready.}}\n+\t\trescan {ui_status [mc \"Abort completed.  Ready.\"]}\n \t}\n }\n \ndiff --git a/lib/option.tcl b/lib/option.tcl\nindex aa9f783..6c4d7ae 100644\n--- a/lib/option.tcl\n+++ b/lib/option.tcl\n@@ -62,7 +62,7 @@ proc do_about {} {\n \ttoplevel $w\n \twm geometry $w \"+[winfo rootx .]+[winfo rooty .]\"\n \n-\tlabel $w.header -text \"About [appname]\" \\\n+\tlabel $w.header -text [mc \"About %s\" [appname]] \\\n \t\t-font font_uibold\n \tpack $w.header -side top -fill x\n \n@@ -74,8 +74,8 @@ proc do_about {} {\n \tpack $w.buttons -side bottom -fill x -pady 10 -padx 10\n \n \tlabel $w.desc \\\n-\t\t-text \"git-gui - a graphical user interface for Git.\n-$copyright\" \\\n+\t\t-text [append [mc \"git-gui - a graphical user interface for Git.\"] \"\n+$copyright\"] \\\n \t\t-padx 5 -pady 5 \\\n \t\t-justify left \\\n \t\t-anchor w \\\n@@ -157,44 +157,44 @@ proc do_options {} {\n \ttoplevel $w\n \twm geometry $w \"+[winfo rootx .]+[winfo rooty .]\"\n \n-\tlabel $w.header -text \"Options\" \\\n+\tlabel $w.header -text [mc \"Options\"] \\\n \t\t-font font_uibold\n \tpack $w.header -side top -fill x\n \n \tframe $w.buttons\n-\tbutton $w.buttons.restore -text {Restore Defaults} \\\n+\tbutton $w.buttons.restore -text [mc \"Restore Defaults\"] \\\n \t\t-default normal \\\n \t\t-command do_restore_defaults\n \tpack $w.buttons.restore -side left\n-\tbutton $w.buttons.save -text Save \\\n+\tbutton $w.buttons.save -text [mc Save] \\\n \t\t-default active \\\n \t\t-command [list do_save_config $w]\n \tpack $w.buttons.save -side right\n-\tbutton $w.buttons.cancel -text {Cancel} \\\n+\tbutton $w.buttons.cancel -text [mc \"Cancel\"] \\\n \t\t-default normal \\\n \t\t-command [list destroy $w]\n \tpack $w.buttons.cancel -side right -padx 5\n \tpack $w.buttons -side bottom -fill x -pady 10 -padx 10\n \n-\tlabelframe $w.repo -text \"[reponame] Repository\"\n-\tlabelframe $w.global -text {Global (All Repositories)}\n+\tlabelframe $w.repo -text [mc \"%s Repository\" [reponame]]\n+\tlabelframe $w.global -text [mc \"Global (All Repositories)\"]\n \tpack $w.repo -side left -fill both -expand 1 -pady 5 -padx 5\n \tpack $w.global -side right -fill both -expand 1 -pady 5 -padx 5\n \n \tset optid 0\n \tforeach option {\n-\t\t{t user.name {User Name}}\n-\t\t{t user.email {Email Address}}\n-\n-\t\t{b merge.summary {Summarize Merge Commits}}\n-\t\t{i-1..5 merge.verbosity {Merge Verbosity}}\n-\t\t{b merge.diffstat {Show Diffstat After Merge}}\n-\n-\t\t{b gui.trustmtime  {Trust File Modification Timestamps}}\n-\t\t{b gui.pruneduringfetch {Prune Tracking Branches During Fetch}}\n-\t\t{b gui.matchtrackingbranch {Match Tracking Branches}}\n-\t\t{i-0..99 gui.diffcontext {Number of Diff Context Lines}}\n-\t\t{t gui.newbranchtemplate {New Branch Name Template}}\n+\t\t{t user.name [mc \"User Name\"]}\n+\t\t{t user.email [mc \"Email Address\"]}\n+\n+\t\t{b merge.summary [mc \"Summarize Merge Commits\"]}\n+\t\t{i-1..5 merge.verbosity [mc \"Merge Verbosity\"]}\n+\t\t{b merge.diffstat [mc \"Show Diffstat After Merge\"]}\n+\n+\t\t{b gui.trustmtime  [mc \"Trust File Modification Timestamps\"]}\n+\t\t{b gui.pruneduringfetch [mc \"Prune Tracking Branches During Fetch\"]}\n+\t\t{b gui.matchtrackingbranch [mc \"Match Tracking Branches\"]}\n+\t\t{i-0..99 gui.diffcontext [mc \"Number of Diff Context Lines\"]}\n+\t\t{t gui.newbranchtemplate [mc \"New Branch Name Template\"]}\n \t\t} {\n \t\tset type [lindex $option 0]\n \t\tset name [lindex $option 1]\n@@ -272,7 +272,7 @@ proc do_options {} {\n \tbind $w <Visibility> \"grab $w; focus $w.buttons.save\"\n \tbind $w <Key-Escape> \"destroy $w\"\n \tbind $w <Key-Return> [list do_save_config $w]\n-\twm title $w \"[appname] ([reponame]): Options\"\n+\twm title $w [append \"[appname] ([reponame]): \" [mc \"Options\"]]\n \ttkwait window $w\n }\n \n@@ -303,7 +303,7 @@ proc do_restore_defaults {} {\n \n proc do_save_config {w} {\n \tif {[catch {save_config} err]} {\n-\t\terror_popup \"Failed to completely save options:\\n\\n$err\"\n+\t\terror_popup [append [mc \"Failed to completely save options:\"] \"\\n\\n$err\"]\n \t}\n \treshow_diff\n \tdestroy $w\ndiff --git a/lib/remote.tcl b/lib/remote.tcl\nindex e235ca8..c47ae50 100644\n--- a/lib/remote.tcl\n+++ b/lib/remote.tcl\n@@ -163,7 +163,7 @@ proc populate_fetch_menu {} {\n \t}\n \tforeach r $prune_list {\n \t\t$m add command \\\n-\t\t\t-label \"Prune from $r...\" \\\n+\t\t\t-label [mc \"Prune from %s...\" $r] \\\n \t\t\t-command [list prune_from $r]\n \t}\n }\n@@ -197,7 +197,7 @@ proc populate_push_menu {} {\n \t\t\t\t$m add separator\n \t\t\t}\n \t\t\t$m add command \\\n-\t\t\t\t-label \"Push to $r...\" \\\n+\t\t\t\t-label [mc \"Push to %s...\" $r] \\\n \t\t\t\t-command [list push_to $r]\n \t\t\tincr fast_count\n \t\t}\ndiff --git a/lib/remote_branch_delete.tcl b/lib/remote_branch_delete.tcl\nindex c88a360..06b5eab 100644\n--- a/lib/remote_branch_delete.tcl\n+++ b/lib/remote_branch_delete.tcl\n@@ -26,28 +26,28 @@ constructor dialog {} {\n \tglobal all_remotes M1B\n \n \tmake_toplevel top w\n-\twm title $top \"[appname] ([reponame]): Delete Remote Branch\"\n+\twm title $top [append \"[appname] ([reponame]): \" [mc \"Delete Remote Branch\"]]\n \tif {$top ne {.}} {\n \t\twm geometry $top \"+[winfo rootx .]+[winfo rooty .]\"\n \t}\n \n-\tlabel $w.header -text {Delete Remote Branch} -font font_uibold\n+\tlabel $w.header -text [mc \"Delete Remote Branch\"] -font font_uibold\n \tpack $w.header -side top -fill x\n \n \tframe $w.buttons\n-\tbutton $w.buttons.delete -text Delete \\\n+\tbutton $w.buttons.delete -text [mc Delete] \\\n \t\t-default active \\\n \t\t-command [cb _delete]\n \tpack $w.buttons.delete -side right\n-\tbutton $w.buttons.cancel -text {Cancel} \\\n+\tbutton $w.buttons.cancel -text [mc \"Cancel\"] \\\n \t\t-command [list destroy $w]\n \tpack $w.buttons.cancel -side right -padx 5\n \tpack $w.buttons -side bottom -fill x -pady 10 -padx 10\n \n-\tlabelframe $w.dest -text {From Repository}\n+\tlabelframe $w.dest -text [mc \"From Repository\"]\n \tif {$all_remotes ne {}} {\n \t\tradiobutton $w.dest.remote_r \\\n-\t\t\t-text {Remote:} \\\n+\t\t\t-text [mc \"Remote:\"] \\\n \t\t\t-value remote \\\n \t\t\t-variable @urltype\n \t\teval tk_optionMenu $w.dest.remote_m @remote $all_remotes\n@@ -63,7 +63,7 @@ constructor dialog {} {\n \t\tset urltype url\n \t}\n \tradiobutton $w.dest.url_r \\\n-\t\t-text {Arbitrary URL:} \\\n+\t\t-text [mc \"Arbitrary URL:\"] \\\n \t\t-value url \\\n \t\t-variable @urltype\n \tentry $w.dest.url_t \\\n@@ -81,7 +81,7 @@ constructor dialog {} {\n \tgrid columnconfigure $w.dest 1 -weight 1\n \tpack $w.dest -anchor nw -fill x -pady 5 -padx 5\n \n-\tlabelframe $w.heads -text {Branches}\n+\tlabelframe $w.heads -text [mc \"Branches\"]\n \tlistbox $w.heads.l \\\n \t\t-height 10 \\\n \t\t-width 70 \\\n@@ -96,7 +96,7 @@ constructor dialog {} {\n \t\t-anchor w \\\n \t\t-justify left\n \tbutton $w.heads.footer.rescan \\\n-\t\t-text {Rescan} \\\n+\t\t-text [mc \"Rescan\"] \\\n \t\t-command [cb _rescan]\n \tpack $w.heads.footer.status -side left -fill x\n \tpack $w.heads.footer.rescan -side right\n@@ -106,9 +106,9 @@ constructor dialog {} {\n \tpack $w.heads.l -side left -fill both -expand 1\n \tpack $w.heads -fill both -expand 1 -pady 5 -padx 5\n \n-\tlabelframe $w.validate -text {Delete Only If}\n+\tlabelframe $w.validate -text [mc \"Delete Only If\"]\n \tradiobutton $w.validate.head_r \\\n-\t\t-text {Merged Into:} \\\n+\t\t-text [mc \"Merged Into:\"] \\\n \t\t-value head \\\n \t\t-variable @checktype\n \tset head_m [tk_optionMenu $w.validate.head_m @check_head {}]\n@@ -116,7 +116,7 @@ constructor dialog {} {\n \ttrace add variable @check_head write [cb _write_check_head]\n \tgrid $w.validate.head_r $w.validate.head_m -sticky w\n \tradiobutton $w.validate.always_r \\\n-\t\t-text {Always (Do not perform merge checks)} \\\n+\t\t-text [mc \"Always (Do not perform merge checks)\"] \\\n \t\t-value always \\\n \t\t-variable @checktype\n \tgrid $w.validate.always_r -columnspan 2 -sticky w\n@@ -149,7 +149,7 @@ method _delete {} {\n \t\t\t\t-type ok \\\n \t\t\t\t-title [wm title $w] \\\n \t\t\t\t-parent $w \\\n-\t\t\t\t-message \"A branch is required for 'Merged Into'.\"\n+\t\t\t\t-message [mc \"A branch is required for 'Merged Into'.\"]\n \t\t\treturn\n \t\t}\n \t\tset crev $full_cache(\"$cache\\nrefs/heads/$check_head\")\n@@ -186,9 +186,7 @@ method _delete {} {\n  - [join $not_merged \"\\n - \"]\"\n \n \t\tif {$need_fetch} {\n-\t\t\tappend msg \"\n-\n-One or more of the merge tests failed because you have not fetched the necessary commits.  Try fetching from $uri first.\"\n+\t\t\tappend msg \"\\n\\n\" [mc \"One or more of the merge tests failed because you have not fetched the necessary commits.  Try fetching from %s first.\" $uri]\n \t\t}\n \n \t\ttk_messageBox \\\n@@ -206,7 +204,7 @@ One or more of the merge tests failed because you have not fetched the necessary\n \t\t\t-type ok \\\n \t\t\t-title [wm title $w] \\\n \t\t\t-parent $w \\\n-\t\t\t-message \"Please select one or more branches to delete.\"\n+\t\t\t-message [mc \"Please select one or more branches to delete.\"]\n \t\treturn\n \t}\n \n@@ -215,9 +213,9 @@ One or more of the merge tests failed because you have not fetched the necessary\n \t\t-type yesno \\\n \t\t-title [wm title $w] \\\n \t\t-parent $w \\\n-\t\t-message {Recovering deleted branches is difficult.\n+\t\t-message [mc \"Recovering deleted branches is difficult.\n \n-Delete the selected branches?}] ne yes} {\n+Delete the selected branches?\"]] ne yes} {\n \t\treturn\n \t}\n \n@@ -225,7 +223,7 @@ Delete the selected branches?}] ne yes} {\n \n \tset cons [console::new \\\n \t\t\"push $uri\" \\\n-\t\t\"Deleting branches from $uri\"]\n+\t\t[mc \"Deleting branches from %s\" $uri]]\n \tconsole::exec $cons $push_cmd\n }\n \n@@ -285,12 +283,12 @@ method _load {cache uri} {\n \t\t$w.heads.l conf -state disabled\n \t\tset head_list [list]\n \t\tset full_list [list]\n-\t\tset status {No repository selected.}\n+\t\tset status [mc \"No repository selected.\"]\n \t\treturn\n \t}\n \n \tif {[catch {set x $cached($cache)}]} {\n-\t\tset status \"Scanning $uri...\"\n+\t\tset status [mc \"Scanning %s...\" $uri]\n \t\t$w.heads.l conf -state disabled\n \t\tset head_list [list]\n \t\tset full_list [list]\ndiff --git a/lib/shortcut.tcl b/lib/shortcut.tcl\nindex c36be2f..d0e63a3 100644\n--- a/lib/shortcut.tcl\n+++ b/lib/shortcut.tcl\n@@ -6,7 +6,7 @@ proc do_windows_shortcut {} {\n \n \tset fn [tk_getSaveFile \\\n \t\t-parent . \\\n-\t\t-title \"[appname] ([reponame]): Create Desktop Icon\" \\\n+\t\t-title [append \"[appname] ([reponame]): \" [mc \"Create Desktop Icon\"]] \\\n \t\t-initialfile \"Git [reponame].bat\"]\n \tif {$fn != {}} {\n \t\tif {[file extension $fn] ne {.bat}} {\n@@ -23,7 +23,7 @@ proc do_windows_shortcut {} {\n \t\t\t\tputs $fd \" \\\"[file normalize $argv0]\\\"\"\n \t\t\t\tclose $fd\n \t\t\t} err]} {\n-\t\t\terror_popup \"Cannot write script:\\n\\n$err\"\n+\t\t\terror_popup [append [mc \"Cannot write script:\"] \"\\n\\n$err\"]\n \t\t}\n \t}\n }\n@@ -42,7 +42,7 @@ proc do_cygwin_shortcut {} {\n \t}\n \tset fn [tk_getSaveFile \\\n \t\t-parent . \\\n-\t\t-title \"[appname] ([reponame]): Create Desktop Icon\" \\\n+\t\t-title [append \"[appname] ([reponame]): \" [mc \"Create Desktop Icon\"]] \\\n \t\t-initialdir $desktop \\\n \t\t-initialfile \"Git [reponame].bat\"]\n \tif {$fn != {}} {\n@@ -71,7 +71,7 @@ proc do_cygwin_shortcut {} {\n \t\t\t\tputs $fd \" &\\\"\"\n \t\t\t\tclose $fd\n \t\t\t} err]} {\n-\t\t\terror_popup \"Cannot write script:\\n\\n$err\"\n+\t\t\terror_popup [append [mc \"Cannot write script:\"] \"\\n\\n$err\"]\n \t\t}\n \t}\n }\n@@ -81,7 +81,7 @@ proc do_macosx_app {} {\n \n \tset fn [tk_getSaveFile \\\n \t\t-parent . \\\n-\t\t-title \"[appname] ([reponame]): Create Desktop Icon\" \\\n+\t\t-title [append \"[appname] ([reponame]): \" [mc \"Create Desktop Icon\"]] \\\n \t\t-initialdir [file join $env(HOME) Desktop] \\\n \t\t-initialfile \"Git [reponame].app\"]\n \tif {$fn != {}} {\n@@ -146,7 +146,7 @@ proc do_macosx_app {} {\n \n \t\t\t\tfile attributes $exe -permissions u+x,g+x,o+x\n \t\t\t} err]} {\n-\t\t\terror_popup \"Cannot write icon:\\n\\n$err\"\n+\t\t\terror_popup [append [mc \"Cannot write icon:\"] \"\\n\\n$err\"]\n \t\t}\n \t}\n }\ndiff --git a/lib/status_bar.tcl b/lib/status_bar.tcl\nindex 72a8fe1..769ef81 100644\n--- a/lib/status_bar.tcl\n+++ b/lib/status_bar.tcl\n@@ -55,7 +55,7 @@ method update {have total} {\n \t\tset pdone [expr {100 * $have / $total}]\n \t}\n \n-\tset status [format \"%s ... %i of %i %s (%2i%%)\" \\\n+\tset status [mc \"%s ... %i of %i %s (%2i%%)\" \\\n \t\t$prefix $have $total $units $pdone]\n \t$w_c coords bar 0 0 $pdone 20\n }\ndiff --git a/lib/transport.tcl b/lib/transport.tcl\nindex 3a22bd4..1c7baef 100644\n--- a/lib/transport.tcl\n+++ b/lib/transport.tcl\n@@ -4,7 +4,7 @@\n proc fetch_from {remote} {\n \tset w [console::new \\\n \t\t\"fetch $remote\" \\\n-\t\t\"Fetching new changes from $remote\"]\n+\t\t[mc \"Fetching new changes from %s\" $remote]]\n \tset cmds [list]\n \tlappend cmds [list exec git fetch $remote]\n \tif {[is_config_true gui.pruneduringfetch]} {\n@@ -16,14 +16,14 @@ proc fetch_from {remote} {\n proc prune_from {remote} {\n \tset w [console::new \\\n \t\t\"remote prune $remote\" \\\n-\t\t\"Pruning tracking branches deleted from $remote\"]\n+\t\t[mc \"Pruning tracking branches deleted from %s\" $remote]]\n \tconsole::exec $w [list git remote prune $remote]\n }\n \n proc push_to {remote} {\n \tset w [console::new \\\n \t\t\"push $remote\" \\\n-\t\t\"Pushing changes to $remote\"]\n+\t\t[mc \"Pushing changes to %s\" $remote]]\n \tset cmd [list git push]\n \tlappend cmd -v\n \tlappend cmd $remote\n@@ -65,7 +65,7 @@ proc start_push_anywhere_action {w} {\n \n \tset cons [console::new \\\n \t\t\"push $r_url\" \\\n-\t\t\"Pushing $cnt $unit to $r_url\"]\n+\t\t[mc \"Pushing %s %s to %s\" $cnt $unit $r_url]]\n \tconsole::exec $cons $cmd\n \tdestroy $w\n }\n@@ -81,21 +81,21 @@ proc do_push_anywhere {} {\n \ttoplevel $w\n \twm geometry $w \"+[winfo rootx .]+[winfo rooty .]\"\n \n-\tlabel $w.header -text {Push Branches} -font font_uibold\n+\tlabel $w.header -text [mc \"Push Branches\"] -font font_uibold\n \tpack $w.header -side top -fill x\n \n \tframe $w.buttons\n-\tbutton $w.buttons.create -text Push \\\n+\tbutton $w.buttons.create -text [mc Push] \\\n \t\t-default active \\\n \t\t-command [list start_push_anywhere_action $w]\n \tpack $w.buttons.create -side right\n-\tbutton $w.buttons.cancel -text {Cancel} \\\n+\tbutton $w.buttons.cancel -text [mc \"Cancel\"] \\\n \t\t-default normal \\\n \t\t-command [list destroy $w]\n \tpack $w.buttons.cancel -side right -padx 5\n \tpack $w.buttons -side bottom -fill x -pady 10 -padx 10\n \n-\tlabelframe $w.source -text {Source Branches}\n+\tlabelframe $w.source -text [mc \"Source Branches\"]\n \tlistbox $w.source.l \\\n \t\t-height 10 \\\n \t\t-width 70 \\\n@@ -112,10 +112,10 @@ proc do_push_anywhere {} {\n \tpack $w.source.l -side left -fill both -expand 1\n \tpack $w.source -fill both -expand 1 -pady 5 -padx 5\n \n-\tlabelframe $w.dest -text {Destination Repository}\n+\tlabelframe $w.dest -text [mc \"Destination Repository\"]\n \tif {$all_remotes ne {}} {\n \t\tradiobutton $w.dest.remote_r \\\n-\t\t\t-text {Remote:} \\\n+\t\t\t-text [mc \"Remote:\"] \\\n \t\t\t-value remote \\\n \t\t\t-variable push_urltype\n \t\teval tk_optionMenu $w.dest.remote_m push_remote $all_remotes\n@@ -130,7 +130,7 @@ proc do_push_anywhere {} {\n \t\tset push_urltype url\n \t}\n \tradiobutton $w.dest.url_r \\\n-\t\t-text {Arbitrary URL:} \\\n+\t\t-text [mc \"Arbitrary URL:\"] \\\n \t\t-value url \\\n \t\t-variable push_urltype\n \tentry $w.dest.url_t \\\n@@ -150,13 +150,13 @@ proc do_push_anywhere {} {\n \tgrid columnconfigure $w.dest 1 -weight 1\n \tpack $w.dest -anchor nw -fill x -pady 5 -padx 5\n \n-\tlabelframe $w.options -text {Transfer Options}\n+\tlabelframe $w.options -text [mc \"Transfer Options\"]\n \tcheckbutton $w.options.thin \\\n-\t\t-text {Use thin pack (for slow network connections)} \\\n+\t\t-text [mc \"Use thin pack (for slow network connections)\"] \\\n \t\t-variable push_thin\n \tgrid $w.options.thin -columnspan 2 -sticky w\n \tcheckbutton $w.options.tags \\\n-\t\t-text {Include tags} \\\n+\t\t-text [mc \"Include tags\"] \\\n \t\t-variable push_tags\n \tgrid $w.options.tags -columnspan 2 -sticky w\n \tgrid columnconfigure $w.options 1 -weight 1\n@@ -169,6 +169,6 @@ proc do_push_anywhere {} {\n \tbind $w <Visibility> \"grab $w; focus $w.buttons.create\"\n \tbind $w <Key-Escape> \"destroy $w\"\n \tbind $w <Key-Return> [list start_push_anywhere_action $w]\n-\twm title $w \"[appname] ([reponame]): Push\"\n+\twm title $w [append \"[appname] ([reponame]): \" [mc \"Push\"]]\n \ttkwait window $w\n }\n-- \n1.5.2.3\n"}]}