new logic for enabling translation in bundled releases of ardour
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 23 Jan 2013 18:44:16 +0000 (18:44 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 23 Jan 2013 18:44:16 +0000 (18:44 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@13980 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/main.cc
gtk2_ardour/rc_option_editor.cc
libs/ardour/ardour/ardour.h
libs/ardour/globals.cc

index a8f8db5a38837267494030775ecfb4df6bf549d0..0aff343c3151035eb14acd40c6b5a6de70b7a807 100644 (file)
@@ -149,7 +149,7 @@ fixup_bundle_environment (int, char* [])
        bundle_dir = Glib::path_get_dirname (exec_dir);
 
 #ifdef ENABLE_NLS
-       if (ARDOUR::translations_are_disabled ()) {
+       if (!ARDOUR::translations_are_enabled ()) {
                localedir = "/this/cannot/exist";
                export_search_path (bundle_dir, "GTK_LOCALEDIR", "/Resources/locale");
        } else {
@@ -237,7 +237,7 @@ fixup_bundle_environment (int /*argc*/, char* argv[])
        std::string userconfigdir = user_config_directory();
 
 #ifdef ENABLE_NLS
-       if (ARDOUR::translations_are_disabled ()) {
+       if (!ARDOUR::translations_are_enabled ()) {
                localedir = "/this/cannot/exist";
                export_search_path (dir_path, "GTK_LOCALEDIR", "/this/cannot/exist");
        } else {
index b4c348bf1afe26e64f97b8912280b0ef43ea1de4..859eedb822989a9a8145f7d5577daef255b558e9 100644 (file)
@@ -1684,6 +1684,17 @@ RCOptionEditor::RCOptionEditor ()
 
        /* USER INTERACTION */
 
+       if (getenv ("ARDOUR_BUNDLED")) {
+               add_option (_("User interaction"), 
+                           new BoolOption (
+                                   "enable-translation",
+                                   string_compose (_("Use translations of %1 messages\n"
+                                                     "   <i>(requires a restart of %1 to take effect)</i>\n"
+                                                     "   <i>(if available for your language preferences)</i>"), PROGRAM_NAME),
+                                   sigc::ptr_fun (ARDOUR::translations_are_enabled),
+                                   sigc::ptr_fun (ARDOUR::set_translations_enabled)));
+       }
+
        add_option (_("User interaction"), new OptionEditorHeading (_("Keyboard")));
 
        add_option (_("User interaction"), new KeyboardOptions);
index 26e875fda342d573b3d7d90f36d5d9d581b08dd6..5f64c4b6a31bcae51e6d09ec3e2b15a211d11d0f 100644 (file)
@@ -62,8 +62,10 @@ namespace ARDOUR {
 
        void find_bindings_files (std::map<std::string,std::string>&);
 
-       std::string translation_kill_path ();
-       bool translations_are_disabled ();
+       /* these only impact bundled installations */
+       std::string translation_enable_path ();
+       bool translations_are_enabled ();
+       bool set_translations_enabled (bool);
 
        static inline microseconds_t get_microseconds () {
                return (microseconds_t) jack_get_time();
index c23cb614feaeaeb583a4a775a9988ffea0bf07b6..b21f3038bbeff0fd74139bbc0f67430417275e42 100644 (file)
@@ -21,6 +21,7 @@
 #endif
 
 #include <cstdio> // Needed so that libraptor (included in lrdf) won't complain
+#include <cstdlib>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/time.h>
@@ -465,19 +466,45 @@ ARDOUR::setup_fpu ()
 #endif
 }
 
+/* this can be changed to modify the translation behaviour for
+   cases where the user has never expressed a preference.
+*/
+static const bool translate_by_default = true;
+
 string
-ARDOUR::translation_kill_path ()
+ARDOUR::translation_enable_path ()
+{
+        return Glib::build_filename (user_config_directory(), ".translate");
+}
+
+bool
+ARDOUR::translations_are_enabled ()
 {
-        return Glib::build_filename (user_config_directory(), ".love_is_the_language_of_audio");
+        if (Glib::file_test (translation_enable_path(), Glib::FILE_TEST_EXISTS)) {
+               return true;
+       } 
+
+       return translate_by_default;
 }
 
 bool
-ARDOUR::translations_are_disabled ()
+ARDOUR::set_translations_enabled (bool yn)
 {
-        /* if file does not exist, we don't translate (bundled ardour only) */
-        return Glib::file_test (translation_kill_path(), Glib::FILE_TEST_EXISTS) == false;
+       string i18n_enabler = ARDOUR::translation_enable_path();
+
+       if (yn) {
+               int fd = ::open (i18n_enabler.c_str(), O_RDONLY|O_CREAT, 0644);
+               if (fd >= 0) {
+                       close (fd);
+                       return true;
+               } 
+               return false;
+       } 
+
+       return unlink (i18n_enabler.c_str()) == 0;
 }
 
+
 vector<SyncSource>
 ARDOUR::get_available_sync_options ()
 {