From: Paul Davis Date: Wed, 23 Jan 2013 18:44:16 +0000 (+0000) Subject: new logic for enabling translation in bundled releases of ardour X-Git-Tag: 3.0~151 X-Git-Url: https://git.carlh.net/gitweb/?a=commitdiff_plain;h=bc2523c2495f87cc0df0f3496c96cf0fef4d746d;p=ardour.git new logic for enabling translation in bundled releases of ardour git-svn-id: svn://localhost/ardour2/branches/3.0@13980 d708f5d6-7413-0410-9779-e7cbd77b26cf --- diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc index a8f8db5a38..0aff343c31 100644 --- a/gtk2_ardour/main.cc +++ b/gtk2_ardour/main.cc @@ -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 { diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index b4c348bf1a..859eedb822 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -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" + " (requires a restart of %1 to take effect)\n" + " (if available for your language preferences)"), 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); diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h index 26e875fda3..5f64c4b6a3 100644 --- a/libs/ardour/ardour/ardour.h +++ b/libs/ardour/ardour/ardour.h @@ -62,8 +62,10 @@ namespace ARDOUR { void find_bindings_files (std::map&); - 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(); diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc index c23cb614fe..b21f3038bb 100644 --- a/libs/ardour/globals.cc +++ b/libs/ardour/globals.cc @@ -21,6 +21,7 @@ #endif #include // Needed so that libraptor (included in lrdf) won't complain +#include #include #include #include @@ -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 ARDOUR::get_available_sync_options () {