gnucash maint: Bug 798657 - Import Summary language is wrong
John Ralls
jralls at code.gnucash.org
Fri Dec 16 18:34:30 EST 2022
Updated via https://github.com/Gnucash/gnucash/commit/091d4aff (commit)
from https://github.com/Gnucash/gnucash/commit/dd48a025 (commit)
commit 091d4aff2205cfd99c63800ff56a86b858557c52
Author: John Ralls <jralls at ceridwen.us>
Date: Fri Dec 16 15:25:59 2022 -0800
Bug 798657 - Import Summary language is wrong
Root cause is using boost::locale::translate because it ignores
the LANGUAGES environment variable and doesn't support different
values for LC_MESSAGES, LC_DATE, LC_MONETARY, and LC_NUMERIC.
That makes it impossible to configure a user environment that
presents translated strings in a different locale from the one
applied to formatting dates and numbers.
To correct this replace all use of boost::locale::translate
with GNU gettext.
diff --git a/gnucash/gnucash-cli.cpp b/gnucash/gnucash-cli.cpp
index a679b5af6..8ab5b54f6 100644
--- a/gnucash/gnucash-cli.cpp
+++ b/gnucash/gnucash-cli.cpp
@@ -129,14 +129,14 @@ Gnucash::GnucashCli::start ([[maybe_unused]] int argc, [[maybe_unused]] char **a
{
if (*m_quotes_cmd != "get")
{
- std::cerr << bl::format (bl::translate("Unknown quotes command '{1}'")) % *m_quotes_cmd << "\n\n"
+ std::cerr << bl::format (std::string{_("Unknown quotes command '{1}'")}) % *m_quotes_cmd << "\n\n"
<< *m_opt_desc_display.get();
return 1;
}
if (!m_file_to_load || m_file_to_load->empty())
{
- std::cerr << bl::translate("Missing data file parameter") << "\n\n"
+ std::cerr << _("Missing data file parameter") << "\n\n"
<< *m_opt_desc_display.get();
return 1;
}
@@ -150,7 +150,7 @@ Gnucash::GnucashCli::start ([[maybe_unused]] int argc, [[maybe_unused]] char **a
{
if (!m_file_to_load || m_file_to_load->empty())
{
- std::cerr << bl::translate("Missing data file parameter") << "\n\n"
+ std::cerr << _("Missing data file parameter") << "\n\n"
<< *m_opt_desc_display.get();
return 1;
}
@@ -174,7 +174,7 @@ Gnucash::GnucashCli::start ([[maybe_unused]] int argc, [[maybe_unused]] char **a
else if (*m_report_cmd == "show")
if (!m_report_name || m_report_name->empty())
{
- std::cerr << bl::translate("Missing --name parameter") << "\n\n"
+ std::cerr << _("Missing --name parameter") << "\n\n"
<< *m_opt_desc_display.get();
return 1;
}
@@ -182,13 +182,13 @@ Gnucash::GnucashCli::start ([[maybe_unused]] int argc, [[maybe_unused]] char **a
return Gnucash::report_show (m_file_to_load, m_report_name);
else
{
- std::cerr << bl::format (bl::translate("Unknown report command '{1}'")) % *m_report_cmd << "\n\n"
+ std::cerr << bl::format (std::string{_("Unknown report command '{1}'")}) % *m_report_cmd << "\n\n"
<< *m_opt_desc_display.get();
return 1;
}
}
- std::cerr << bl::translate("Missing command or option") << "\n\n"
+ std::cerr << _("Missing command or option") << "\n\n"
<< *m_opt_desc_display.get();
return 1;
diff --git a/gnucash/gnucash-commands.cpp b/gnucash/gnucash-commands.cpp
index 3a5edb8f3..0befa04c2 100644
--- a/gnucash/gnucash-commands.cpp
+++ b/gnucash/gnucash-commands.cpp
@@ -89,7 +89,7 @@ scm_add_quotes(void *data, [[maybe_unused]] int argc, [[maybe_unused]] char **ar
if (!gnc_quote_source_fq_installed())
{
- std::cerr << bl::translate ("No quotes retrieved. Finance::Quote isn't "
+ std::cerr << _("No quotes retrieved. Finance::Quote isn't "
"installed properly.") << "\n";
scm_cleanup_and_exit_with_failure (nullptr);
}
diff --git a/gnucash/gnucash-core-app.cpp b/gnucash/gnucash-core-app.cpp
index eb4716553..7e9962a58 100644
--- a/gnucash/gnucash-core-app.cpp
+++ b/gnucash/gnucash-core-app.cpp
@@ -78,12 +78,12 @@ gnc_print_unstable_message(void)
{
if (!is_development_version) return;
- std::cerr << bl::translate ("This is a development version. It may or may not work.") << "\n"
- << bl::translate ("Report bugs and other problems to gnucash-devel at gnucash.org") << "\n"
+ std::cerr << _("This is a development version. It may or may not work.") << "\n"
+ << _("Report bugs and other problems to gnucash-devel at gnucash.org") << "\n"
/* Translators: {1} will be replaced with an URL*/
- << bl::format (bl::translate ("You can also lookup and file bug reports at {1}")) % PACKAGE_BUGREPORT << "\n"
+ << bl::format (std::string{_("You can also lookup and file bug reports at {1}")}) % PACKAGE_BUGREPORT << "\n"
/* Translators: {1} will be replaced with an URL*/
- << bl::format (bl::translate ("To find the last stable version, please refer to {1}")) % PACKAGE_URL << "\n";
+ << bl::format (std::string{_("To find the last stable version, please refer to {1}")}) % PACKAGE_URL << "\n";
}
static void
@@ -100,8 +100,8 @@ Gnucash::gnc_load_scm_config (void)
if (!is_system_config_loaded)
{
/* Translators: Guile is the programming language of the reports */
- auto msg = bl::translate ("Loading system wide Guile extensionsâ¦").str (gnc_get_boost_locale());
- update_message (msg.c_str());
+ auto msg = _("Loading system wide Guile extensionsâ¦");
+ update_message (msg);
auto system_config_dir = gnc_path_get_pkgsysconfdir ();
auto system_config = g_build_filename (system_config_dir, "config", nullptr);
is_system_config_loaded = gfec_try_load (system_config);
@@ -112,8 +112,8 @@ Gnucash::gnc_load_scm_config (void)
static auto is_user_config_loaded = false;
if (!is_user_config_loaded)
{
- auto msg = bl::translate ("Loading user specific Guile extensionsâ¦").str (gnc_get_boost_locale());
- update_message (msg.c_str());
+ auto msg = _("Loading user specific Guile extensionsâ¦");
+ update_message (msg);
auto config_filename = g_build_filename (gnc_userconfig_dir (), "config-user.scm", nullptr);
is_user_config_loaded = gfec_try_load (config_filename);
g_free (config_filename);
@@ -210,6 +210,7 @@ Gnucash::CoreApp::CoreApp ()
gnc_init_boost_locale (localedir);
std::cerr.imbue (gnc_get_boost_locale());
+ std::cout.imbue (gnc_get_boost_locale());
g_free(localedir);
}
@@ -221,9 +222,9 @@ Gnucash::CoreApp::CoreApp (const char* app_name)
m_app_name = std::string(app_name);
// Now that gettext is properly initialized, set our help tagline.
- m_tagline = bl::translate("- GnuCash, accounting for personal and small business finance").str(gnc_get_boost_locale());
+ m_tagline = _("- GnuCash, accounting for personal and small business finance");
m_opt_desc_display = std::make_unique<bpo::options_description>
- ((bl::format (bl::gettext ("{1} [options] [datafile]", gnc_get_boost_locale())) % m_app_name).str() + std::string(" ") + m_tagline);
+ ((bl::format (std::string{_("{1} [options] [datafile]")}) % m_app_name).str() + std::string(" ") + m_tagline);
add_common_program_options();
}
@@ -267,15 +268,15 @@ Gnucash::CoreApp::parse_command_line (int argc, char **argv)
if (m_show_version)
{
- bl::format rel_fmt (bl::translate ("GnuCash {1}"));
- bl::format dev_fmt (bl::translate ("GnuCash {1} development version"));
+ bl::format rel_fmt (std::string{_("GnuCash {1}")});
+ bl::format dev_fmt (std::string{_("GnuCash {1} development version")});
if (is_development_version)
std::cout << dev_fmt % gnc_version () << "\n";
else
std::cout << rel_fmt % gnc_version () << "\n";
- std::cout << bl::translate ("Build ID") << ": " << gnc_build_id () << "\n";
+ std::cout << _("Build ID") << ": " << gnc_build_id () << "\n";
exit(0);
}
diff --git a/gnucash/gnucash.cpp b/gnucash/gnucash.cpp
index dd7257116..d32c21018 100644
--- a/gnucash/gnucash.cpp
+++ b/gnucash/gnucash.cpp
@@ -170,8 +170,8 @@ scm_run_gnucash (void *data, [[maybe_unused]] int argc, [[maybe_unused]] char **
gnc_hook_add_dangler(HOOK_UI_SHUTDOWN, (GFunc)gnc_file_quit, NULL, NULL);
/* Install Price Quote Sources */
- auto msg = bl::translate ("Checking Finance::Quote...").str(gnc_get_boost_locale());
- gnc_update_splash_screen (msg.c_str(), GNC_SPLASH_PERCENTAGE_UNKNOWN);
+ auto msg = _("Checking Finance::Quote...");
+ gnc_update_splash_screen (msg, GNC_SPLASH_PERCENTAGE_UNKNOWN);
scm_c_use_module("gnucash price-quotes");
scm_c_eval_string("(gnc:price-quotes-install-sources)");
@@ -179,8 +179,8 @@ scm_run_gnucash (void *data, [[maybe_unused]] int argc, [[maybe_unused]] char **
if (!user_file_spec->nofile && (fn = get_file_to_load (user_file_spec->file_to_load)) && *fn )
{
- auto msg = bl::translate ("Loading data...").str(gnc_get_boost_locale());
- gnc_update_splash_screen (msg.c_str(), GNC_SPLASH_PERCENTAGE_UNKNOWN);
+ auto msg = _("Loading data...");
+ gnc_update_splash_screen (msg, GNC_SPLASH_PERCENTAGE_UNKNOWN);
gnc_file_open_file(gnc_get_splash_screen(), fn, /*open_readonly*/ FALSE);
g_free(fn);
}
@@ -309,11 +309,11 @@ Gnucash::Gnucash::start ([[maybe_unused]] int argc, [[maybe_unused]] char **argv
// Will be removed in 5.0
if (m_add_quotes)
{
- std::cerr << bl::translate ("The '--add-price-quotes' option to gnucash has been deprecated and will be removed in GnuCash 5.0. "
- "Please use 'gnucash-cli --quotes get <datafile>' instead.") << "\n";
+ std::cerr << _("The '--add-price-quotes' option to gnucash has been deprecated and will be removed in GnuCash 5.0. "
+ "Please use 'gnucash-cli --quotes get <datafile>' instead.") << "\n";
if (!m_file_to_load || m_file_to_load->empty())
{
- std::cerr << bl::translate("Missing data file parameter") << "\n\n"
+ std::cerr << _("Missing data file parameter") << "\n\n"
<< *m_opt_desc_display.get();
return 1;
}
@@ -345,10 +345,10 @@ main(int argc, char ** argv)
/* We need to initialize gtk before looking up all modules */
if(!gtk_init_check (&argc, &argv))
{
- std::cerr << bl::format (bl::translate ("Run '{1} --help' to see a full list of available command line options.")) % *argv[0]
+ std::cerr << bl::format (std::string{("Run '{1} --help' to see a full list of available command line options.")}) % *argv[0]
<< "\n"
// Translators: Do not translate $DISPLAY! It is an environment variable for X11
- << bl::translate ("Error: could not initialize graphical user interface and option add-price-quotes was not set.\n"
+ << _("Error: could not initialize graphical user interface and option add-price-quotes was not set.\n"
"Perhaps you need to set the $DISPLAY environment variable?");
return 1;
}
diff --git a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
index 8c499d93a..983ee7f51 100644
--- a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
+++ b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
@@ -2122,7 +2122,7 @@ CsvImpTransAssist::assist_summary_page_prepare ()
try
{
/* Translators: {1} will be replaced with a filename */
- text += (bl::format (bl::translate ("The transactions were imported from file '{1}'.")) % m_file_name).str(gnc_get_boost_locale());
+ text += (bl::format (std::string{_("The transactions were imported from file '{1}'.")}) % m_file_name).str();
text += "</b></span>";
}
catch (const bl::conv::conversion_error& err)
diff --git a/gnucash/import-export/csv-imp/gnc-imp-props-price.cpp b/gnucash/import-export/csv-imp/gnc-imp-props-price.cpp
index b92e2a723..cbeedfce9 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-props-price.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-props-price.cpp
@@ -235,16 +235,16 @@ void GncImportPrice::set (GncPricePropType prop_type, const std::string& value,
}
catch (const std::invalid_argument& e)
{
- auto err_str = (bl::format (bl::translate ("Column '{1}' could not be understood.\n")) %
- bl::translate (gnc_price_col_type_strs[prop_type])).str(gnc_get_boost_locale()) +
+ auto err_str = (bl::format (std::string{_("Column '{1}' could not be understood.\n")}) %
+ std::string{_(gnc_price_col_type_strs[prop_type])}).str() +
e.what();
m_errors.emplace(prop_type, err_str);
throw std::invalid_argument (err_str);
}
catch (const std::out_of_range& e)
{
- auto err_str = (bl::format (bl::translate ("Column '{1}' could not be understood.\n")) %
- bl::translate (gnc_price_col_type_strs[prop_type])).str(gnc_get_boost_locale()) +
+ auto err_str = (bl::format (std::string{_("Column '{1}' could not be understood.\n")}) %
+ std::string{_(gnc_price_col_type_strs[prop_type])}).str() +
e.what();
m_errors.emplace(prop_type, err_str);
throw std::invalid_argument (err_str);
diff --git a/gnucash/import-export/csv-imp/gnc-imp-props-tx.cpp b/gnucash/import-export/csv-imp/gnc-imp-props-tx.cpp
index 4b3dee706..8196856c6 100644
--- a/gnucash/import-export/csv-imp/gnc-imp-props-tx.cpp
+++ b/gnucash/import-export/csv-imp/gnc-imp-props-tx.cpp
@@ -289,16 +289,16 @@ void GncPreTrans::set (GncTransPropType prop_type, const std::string& value)
}
catch (const std::invalid_argument& e)
{
- auto err_str = (bl::format (bl::translate ("Column '{1}' could not be understood.\n")) %
- bl::translate (gnc_csv_col_type_strs[prop_type])).str(gnc_get_boost_locale()) +
+ auto err_str = (bl::format (std::string{_("Column '{1}' could not be understood.\n")}) %
+ std::string{_(gnc_csv_col_type_strs[prop_type])}).str() +
e.what();
m_errors.emplace(prop_type, err_str);
throw std::invalid_argument (err_str);
}
catch (const std::out_of_range& e)
{
- auto err_str = (bl::format (bl::translate ("Column '{1}' could not be understood.\n")) %
- bl::translate (gnc_csv_col_type_strs[prop_type])).str(gnc_get_boost_locale()) +
+ auto err_str = (bl::format (std::string{_("Column '{1}' could not be understood.\n")}) %
+ std::string{_(gnc_csv_col_type_strs[prop_type])}).str() +
e.what();
m_errors.emplace(prop_type, err_str);
throw std::invalid_argument (err_str);
@@ -508,16 +508,16 @@ void GncPreSplit::set (GncTransPropType prop_type, const std::string& value)
}
catch (const std::invalid_argument& e)
{
- auto err_str = (bl::format (bl::translate ("Column '{1}' could not be understood.\n")) %
- bl::translate (gnc_csv_col_type_strs[prop_type])).str(gnc_get_boost_locale()) +
+ auto err_str = (bl::format (std::string{_("Column '{1}' could not be understood.\n")}) %
+ std::string{_(gnc_csv_col_type_strs[prop_type])}).str() +
e.what();
m_errors.emplace(prop_type, err_str);
throw std::invalid_argument (err_str);
}
catch (const std::out_of_range& e)
{
- auto err_str = (bl::format (bl::translate ("Column '{1}' could not be understood.\n")) %
- bl::translate (gnc_csv_col_type_strs[prop_type])).str(gnc_get_boost_locale()) +
+ auto err_str = (bl::format (std::string{_("Column '{1}' could not be understood.\n")}) %
+ std::string{_(gnc_csv_col_type_strs[prop_type])}).str() +
e.what();
m_errors.emplace(prop_type, err_str);
throw std::invalid_argument (err_str);
@@ -571,16 +571,16 @@ void GncPreSplit::add (GncTransPropType prop_type, const std::string& value)
}
catch (const std::invalid_argument& e)
{
- auto err_str = (bl::format (bl::translate ("Column '{1}' could not be understood.\n")) %
- bl::translate (gnc_csv_col_type_strs[prop_type])).str(gnc_get_boost_locale()) +
+ auto err_str = (bl::format (std::string{_("Column '{1}' could not be understood.\n")}) %
+ std::string{_(gnc_csv_col_type_strs[prop_type])}).str() +
e.what();
m_errors.emplace(prop_type, err_str);
throw std::invalid_argument (err_str);
}
catch (const std::out_of_range& e)
{
- auto err_str = (bl::format (bl::translate ("Column '{1}' could not be understood.\n")) %
- bl::translate (gnc_csv_col_type_strs[prop_type])).str(gnc_get_boost_locale()) +
+ auto err_str = (bl::format (std::string{_("Column '{1}' could not be understood.\n")}) %
+ std::string{_(gnc_csv_col_type_strs[prop_type])}).str() +
e.what();
m_errors.emplace(prop_type, err_str);
throw std::invalid_argument (err_str);
diff --git a/libgnucash/core-utils/gnc-filepath-utils.cpp b/libgnucash/core-utils/gnc-filepath-utils.cpp
index fff18878c..d65038a2f 100644
--- a/libgnucash/core-utils/gnc-filepath-utils.cpp
+++ b/libgnucash/core-utils/gnc-filepath-utils.cpp
@@ -671,35 +671,35 @@ static std::string migrate_gnc_datahome()
/* Step 3: inform the user of additional changes */
if (full_copy || !succeeded.empty() || !conf_exist_vec.empty() || !failed.empty())
- migration_msg << bl::translate ("Notice") << std::endl << std::endl;
+ migration_msg << _("Notice") << std::endl << std::endl;
if (full_copy)
{
migration_msg
- << bl::translate ("Your gnucash metadata has been migrated.") << std::endl << std::endl
+ << _("Your gnucash metadata has been migrated.") << std::endl << std::endl
/* Translators: this refers to a directory name. */
- << bl::translate ("Old location:") << " " << old_dir.string() << std::endl
+ << _("Old location:") << " " << old_dir.string() << std::endl
/* Translators: this refers to a directory name. */
- << bl::translate ("New location:") << " " << gnc_userdata_home.string() << std::endl << std::endl
+ << _("New location:") << " " << gnc_userdata_home.string() << std::endl << std::endl
// Translators {1} will be replaced with the package name (typically Gnucash) at runtime
- << bl::format (bl::translate ("If you no longer intend to run {1} 2.6.x or older on this system you can safely remove the old directory."))
+ << bl::format (std::string{_("If you no longer intend to run {1} 2.6.x or older on this system you can safely remove the old directory.")})
% PACKAGE_NAME;
}
if (full_copy &&
(!succeeded.empty() || !conf_exist_vec.empty() || !failed.empty()))
migration_msg << std::endl << std::endl
- << bl::translate ("In addition:");
+ << _("In addition:");
if (!succeeded.empty())
{
migration_msg << std::endl << std::endl;
if (full_copy)
- migration_msg << bl::format (bl::translate ("The following file has been copied to {1} instead:",
+ migration_msg << bl::format (std::string{ngettext("The following file has been copied to {1} instead:",
"The following files have been copied to {1} instead:",
- succeeded.size())) % gnc_userconfig_home.string().c_str();
+ succeeded.size())}) % gnc_userconfig_home.string().c_str();
else
- migration_msg << bl::format (bl::translate ("The following file in {1} has been renamed:"))
+ migration_msg << bl::format (std::string{_("The following file in {1} has been renamed:")})
% gnc_userconfig_home.string().c_str();
migration_msg << std::endl;
@@ -708,8 +708,8 @@ static std::string migrate_gnc_datahome()
}
if (!conf_exist_vec.empty())
{
- migration_msg << std::endl << std::endl
- << bl::translate ("The following file has become obsolete and will be ignored:",
+ migration_msg << "\n\n"
+ << ngettext("The following file has become obsolete and will be ignored:",
"The following files have become obsolete and will be ignored:",
conf_exist_vec.size())
<< std::endl;
@@ -719,9 +719,9 @@ static std::string migrate_gnc_datahome()
if (!failed.empty())
{
migration_msg << std::endl << std::endl
- << bl::format (bl::translate ("The following file could not be moved to {1}:",
+ << bl::format (std::string{ngettext("The following file could not be moved to {1}:",
"The following files could not be moved to {1}:",
- failed.size())) % gnc_userconfig_home.string().c_str()
+ failed.size())}) % gnc_userconfig_home.string().c_str()
<< std::endl;
for (auto failed_file : failed)
migration_msg << "- " << failed_file << std::endl;
Summary of changes:
gnucash/gnucash-cli.cpp | 12 +++++-----
gnucash/gnucash-commands.cpp | 2 +-
gnucash/gnucash-core-app.cpp | 27 +++++++++++-----------
gnucash/gnucash.cpp | 18 +++++++--------
.../csv-imp/assistant-csv-trans-import.cpp | 2 +-
.../import-export/csv-imp/gnc-imp-props-price.cpp | 8 +++----
gnucash/import-export/csv-imp/gnc-imp-props-tx.cpp | 24 +++++++++----------
libgnucash/core-utils/gnc-filepath-utils.cpp | 26 ++++++++++-----------
8 files changed, 60 insertions(+), 59 deletions(-)
More information about the gnucash-changes
mailing list