summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/main.cc4
-rw-r--r--gtk2_ardour/rc_option_editor.cc11
-rw-r--r--libs/ardour/ardour/ardour.h6
-rw-r--r--libs/ardour/globals.cc37
4 files changed, 49 insertions, 9 deletions
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"
+ " <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);
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,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();
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 <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 ()
{