Set locale initially.
[crypto-install.git] / crypto-install
index cbb76c6..6fb3a7c 100755 (executable)
@@ -2,8 +2,8 @@
 # -*- mode: python; coding: utf-8; -*-
 
 
-import argparse, errno, gettext, itertools, os, re, readline, subprocess, \
-    sys, tempfile, textwrap, threading
+import argparse, errno, gettext, itertools, locale, os, re, readline, \
+    subprocess, sys, tempfile, textwrap, threading
 
 
 if sys.version_info[0] == 2:
@@ -18,8 +18,8 @@ if sys.version_info[0] == 2:
         return raw_input (prompt)
 
 
-    def gettext_install ():
-        gettext.install ("crypto-install", unicode = True)
+    def gettext_install (*args, **kwargs):
+        gettext.install (*args, unicode = True, **kwargs)
 elif sys.version_info[0] > 2:
     from tkinter import *
     from tkinter.messagebox import *
@@ -32,8 +32,7 @@ elif sys.version_info[0] > 2:
         return input (prompt)
 
 
-    def gettext_install ():
-        gettext.install ("crypto-install")
+    gettext_install = gettext.install
 else:
     raise Exception ("Unsupported Python version {}".format (sys.version_info))
 
@@ -89,7 +88,7 @@ def parse_arguments ():
         "--gpg-home",
         dest = "gnupg_home",
         default = os.getenv("GNUPGHOME") or "~/.gnupg",
-        metavar = "PATH",
+        metavar = _ ("PATH"),
         help = _ ("Default directory for GnuPG files."))
     openssh_group = parser.add_argument_group (
         _ ("OpenSSH"),
@@ -103,7 +102,7 @@ def parse_arguments ():
         "--ssh-home",
         dest = "openssh_home",
         default = "~/.ssh",
-        metavar = "PATH",
+        metavar = _ ("PATH"),
         help = _ ("Default directory for OpenSSH files."))
     return parser.parse_args ()
 
@@ -617,25 +616,20 @@ class CryptoInstall (Tk):
         self.balloon.bind_widget (self.openssh, msg = msg)
         self.balloon.bind_widget (self.openssh_label, msg = msg)
 
-    def generate_thread (self):
+    def generate_thread (self, gnupg, openssh, name, email, comment, user,
+                         host):
         stdout = sys.stdout
 
         try:
             sys.stdout = self.progress.redirect
 
-            # TODO: capture and show stdout and stderr
-            if self.gnupg_var.get ():
-                # TODO: make get calls thread-safe
-                gnupg_setup (self.arguments,
-                             self.name_var.get (),
-                             self.email_var.get (),
-                             self.comment_var.get ())
+            if gnupg:
+                gnupg_setup (self.arguments, name, email, comment)
                 # TODO: put update into queue
                 self.update_widgets ()
 
-            if self.openssh_var.get ():
-                comment = "{}@{}".format (self.user_var.get (),
-                                          self.host_var.get ())
+            if openssh:
+                comment = "{}@{}".format (user, host)
                 openssh_setup (self.arguments, comment)
                 # TODO: put update into queue
                 self.update_widgets ()
@@ -645,7 +639,8 @@ class CryptoInstall (Tk):
     def _on_idle ():
         try:
             while True:
-                self.progress.redirect.write (self.progress.queue.get (block = False))
+                message = self.progress.queue.get (block = False)
+                self.progress.redirect.write (message)
         except Empty:
             pass
 
@@ -654,12 +649,21 @@ class CryptoInstall (Tk):
 
         self.bind ("<<Idle>>", self._on_idle)
 
-        thread = threading.Thread (target = self.generate_thread)
+        thread = threading.Thread (target = self.generate_thread,
+                                   args = (self.gnupg_var.get (),
+                                           self.openssh_var.get (),
+                                           self.name_var.get (),
+                                           self.email_var.get (),
+                                           self.comment_var.get (),
+                                           self.user_var.get (),
+                                           self.host_var.get ()))
         thread.start ()
 
 
 def main ():
-    gettext_install ()
+    locale.setlocale (locale.LC_ALL, "")
+
+    gettext_install ("crypto-install", localedir = os.getenv ("TEXTDOMAINDIR"))
 
     arguments = parse_arguments ()