Merge branch 'maint'

This commit is contained in:
John Ralls 2022-12-19 12:11:32 -08:00
commit b8c0673526
102 changed files with 16110 additions and 16132 deletions

View File

@ -358,8 +358,8 @@ find_guile_dirs()
# ############################################################
if (WITH_AQBANKING)
pkg_check_modules (GWENHYWFAR REQUIRED gwenhywfar>=5.8.0)
pkg_check_modules (AQBANKING REQUIRED aqbanking>=6.4.0)
pkg_check_modules (GWENHYWFAR REQUIRED gwenhywfar>=5.6.0)
pkg_check_modules (AQBANKING REQUIRED aqbanking>=6.2.0)
set(CMAKE_REQUIRED_INCLUDES "${AQBANKING_INCLUDE_DIRS}"
"${GWENHYWFAR_INCLUDE_DIRS}")
set(CMAKE_REQUIRED_LIBRARIES "${AQBANKING_LD_FLAGS}")

161
NEWS
View File

@ -1,60 +1,155 @@
Version history:
------- -------
4.13 - 18 December 2022
Between 4.12 and 4.13, the following bugfixes were accomplished:
Bug 760274 - The Statusbar "forgets" when register doesn't have focus
Bug 798545 - Crash when updating document link on vendor bill
Bug 798614 - Croatia to join the Euro
Bug 798629 - gnucash crashes attempting to import OFX file
Bug 798633 - 4.12 build failure on 32-bit Linux: "No code for module"
Bug 798640 - Segfault when running saved report
Bug 798649 - Crash when closing Edit Style Sheets dialog while Style Sheet
Properties dialog is still open.
Bug 798653 - Schedule Calendar event description pop up window does not
track mouse position
Bug 798657 - Import Summary language is wrong
Bug 798664 - Result of 'gnucash --nofile' is marked dirty
Bug 798669 - Multicolumn Balance Sheet not printing exchange rates
include equity accounts in the exchange rate commodities list.
Bug 798672 - Preferences are not saved nor loaded,
ERROR <GLib-GIO> g_settings_new_full: assertion
'schema != NULL' failed
Bug 798680 - Not able to match a reverse transaction of a previously
matched transaction.
Bug 798681 - Previously imported investment income transactions may not
be filtered.
Bug 798694 - Cursor in the wrong place after pasting with auto-completion
The following fixes and improvements were not associated with bug reports:
Don't normalize text when pasting from the clipboard or appending
descriptions or notes during imports.
[register] Delay post-ime reset of the selection to works around bug 798587.
[ofx import] Clean up importing investment transactions for smoother
workflow and better UI behavior.
[account-piecharts] drill-down piechart: tree-depth is at most 6
Fix numerous memory leaks.
[ifrs-report] From Bug 798004 allow Cr cash to offset Dr fee and remove
invalid "dividend reinvestment" during short.
[gtest-qofevent.cpp] Add comprehensive tests for qofevent
[test-qofbook] Test that gnc_features_test_unknown returns a suitable
error message
[test-qofbook.c] add test for gnc_features_set_unused
[gnc-features.cpp] backport gnc_features_set_unused from master
[qofbook.cpp] backport qof_book_unset_feature from master
Move gnc-euro.[ch] to engine and unit test it.
[test-qofbook] basic features test: Sets a feature and tests it's set.
It's impossible to design a book with unknown features using the API.
po/README: Remove relics from ancient context forms
[test-ifrs-cost-basis] amend tests to accommodate extra column.
[ifrs-cost-basis] compare register vs calculated capgain per transaction.
Accomodate WebKit package version update to webkit2gtk-4.1.
[assistant-stock-transaction] input positive capgains for Credit income account.
New API: None.
Deprecations:
qof_book_get_features
New and Updated Translations: Chinese (Simplified), Croatian, English
(Australia), English (New Zealand), English (United Kingdom), French,
Hungarian, Indonesian, Japanese, Korean, Macedonian, Polish, Spanish,
Urdu
4.12 - 25 September 2022
Between 4.11 and 4.12, the following bugfixes were accomplished:
Bug 794584 - Register not updated when scheduled transactions created
Bug 798262 - Scheduled transactions with blank amounts do not get created.
Bug 798385 - Description to often only "Landesbank Hessen-Thuringen Girozentrale"
Prepend the Ulitimate Creditor or Ultimate Debtor to the transaction description.
Bug 798565 - Import map editor: deletion of a map does not mark gnucash document as dirty
Bug 798385 - Description to often only
"Landesbank Hessen-Thuringen Girozentrale"
Prepend the Ulitimate Creditor or Ultimate Debtor to the
transaction description.
Bug 798565 - Import map editor: deletion of a map does not mark gnucash
document as dirty
Bug 798573 - Tab Width Behaviour
Formerly when the notebook tabs on the left or right, the space used fluctuated depending on tab label width. This change sets the label width to the preference setting when the tabs are on the left or right but when top or bottom the width is set to the number of characters when shorter than the preference setting so they take up less room.
Bug 798578 - MT940 imports broken - all transactions have date of first transaction
Bug 798585 - segfault running sample script
simple_business_create.py.
Formerly when the notebook tabs on the left or right,
the space used fluctuated depending on tab label
width. This change sets the label width to the
preference setting when the tabs are on the left or
right but when top or bottom the width is set to the
number of characters when shorter than the preference
setting so they take up less room.
Bug 798578 - MT940 imports broken - all transactions have date of first
transaction
Bug 798585 - segfault running sample script simple_business_create.py.
Bug 798588 - sx scrubbing was using incorrect free function
Bug 798590 - Transaction report: wrong type argument in position 1
Bug 798598 - Selecting a line in a Vendor Credit Note changes display of Subtotal cell to 0.00
Bug 798598 - Selecting a line in a Vendor Credit Note changes display of
Subtotal cell to 0.00
Bug 798611 - Date changing when changing timezone by one hour
When getting a date from the date editor anywhere in the program set the time to neutral time instead of the beginning of the day unless get_date_internal is called with GNC_DATE_EDIT_SHOW_TIME in which case the user-provided time is used.
When getting a date from the date editor anywhere in
the program set the time to neutral time instead of
the beginning of the day unless get_date_internal is
called with GNC_DATE_EDIT_SHOW_TIME in which case the
user-provided time is used.
Bug 798616 - Can't register amount greater than 9,000,000,000
Because when loading the value the split in the xml backend doesn't yet have a parent so the code tried to convert to GNC_COMMODITY_MAX_FRACTION and if the numerator was larger than 10^10 that would overflow. To fix it this changes the "don't know" response in get_currency_denom and get_commodity_denom to GNC_DENOM_AUTO which will normally leave the denominator alone.
Because when loading the value the split in the xml
backend doesn't yet have a parent so the code tried
to convert to GNC_COMMODITY_MAX_FRACTION and if the
numerator was larger than 10^10 that would
overflow. To fix it this changes the "don't know"
response in get_currency_denom and
get_commodity_denom to GNC_DENOM_AUTO which will
normally leave the denominator alone.
The following fixes and improvements were not associated with bug reports:
It is now possible to edit the description, notes, and memo fields of new transactions in the import matcher and to do so for multiple transactions. The option is accessed via a context menu on selected import lines.
Show GnuCash's installation and configuration configuration paths in the About dialog. List the same from the command line with a --paths option.
It is now possible to edit the description, notes, and memo fields of
new transactions in the import matcher and to do so for multiple
transactions. The option is accessed via a context menu on selected
import lines.
Show GnuCash's installation and configuration configuration paths in the
About dialog. List the same from the command line with a --paths option.
Add account hierarchy templates for locale es_AR
Continued work on the Stock Transaction Assistant. If you want to try out this new way of recording your investment transactions start GnuCash with the --extra option. The stock assistant is available on the toolbar and from the Actions menu when a register for a STOCK or FUND account is focused.
Replace the very obsolete ghelp: URI scheme with help: and install the documentation according to the XDG documentation spec on non-Mac Linux systems. This ensures that the Help menu documentation items work with Gnome 42 and later.
Conforming to the XDG documentation spec, rename the root page of the Help manual to index from help. This has the happy side effect of removing some special-case code from the macOS documentation links.
Standardize the top-level Equity and Assets account names in the French templates to "Capitaux propres" and "Actif" respectively.
Continued work on the Stock Transaction Assistant. If you want to try out
this new way of recording your investment transactions start GnuCash
with the --extra option. The stock assistant is available on the
toolbar and from the Actions menu when a register for a STOCK or FUND
account is focused.
Replace the very obsolete ghelp: URI scheme with help and install the
documentation according to the XDG documentation spec on non-Mac Linux
systems. This ensures that the Help menu documentation items work with
Gnome 42 and later.
Conforming to the XDG documentation spec, rename the root page of the Help
manual to index from help. This has the happy side effect of removing
some special-case code from the macOS documentation links.
Standardize the top-level Equity and Assets account names in the French
templates to "Capitaux propres" and "Actif" respectively.
[gnc-ab-utils] concise string accumulator
[gnc-glib-utils] gnc_g_list_stringjoin skips NULL data
[ifrs-cost-basis] identify sale/purchase according to truth table instead of via flawed heuristics
[ifrs-cost-basis] identify sale/purchase according to truth table instead
of via flawed heuristics
[ifrs-cost-basis] add options used as a report footer
[lot-viewer] Show Open & Close dates only when they have a value.
Fix use-after-free crash in gnc_set_busy_cursor.
Create Swiss SMB account chart acctchrt_pme-19.gnucash-xea.
[date-utilities] avoid report crash if start > end date
[html-chart] add percent formatter for numbers for older javascript.
[trial-balance] set default price-source to average-cost
to minimise complaints (see Bug 798550)
[trial-balance] set default price-source to average-cost to minimise
complaints (see Bug 798550)
Use macos-latest github runner for mac tests.
[dialog-price] Price Database: Insert help buttons
Disable transaction type (i.e. Bill or Invoice) in Invoice/Bill Registers, determining the type by inspecting the money flow.
Fix python tests dependencies
So that ninja check works from a clean build directory with Python enabled.
Disable transaction type (i.e. Bill or Invoice) in Invoice/Bill Registers,
determining the type by inspecting the money flow.
Fix python tests dependencies so that ninja check works from a clean build
directory with Python enabled.
Review of account templates C—missing placeholders, redundancies
Fixed a variety of fixed memory leaks, poor list handling, and dangling reference errors.
Fixed a variety of fixed memory leaks, poor list handling, and dangling
reference errors.
New API:
gnc_tm_get_today_neutral to complement gnc_tm_get_today_begin and
@ -64,7 +159,11 @@ New API:
Deprecations: None.
New and Updated Translations: Basque, Chinese (Simplified), Croatian, Dutch, English (Australia), English (New Zealand), English (United Kingdom), French, German, Hebrew, Hungarian, Indonesian, Italian, Korean, Marathi, Polish, Portuguese, Portuguese (Brazil), Russian, Swedish, Ukrainian
New and Updated Translations: Basque, Chinese (Simplified), Croatian,
Dutch, English (Australia), English (New Zealand), English (United
Kingdom), French, German, Hebrew, Hungarian, Indonesian, Italian,
Korean, Marathi, Polish, Portuguese, Portuguese (Brazil), Russian,
Swedish, Ukrainian
4.11 - 26 June 2022
Between 4.10 and 4.11, the following bugfixes were accomplished:

View File

@ -1049,6 +1049,5 @@
(list (vector bank 150 150)
(vector aapl -150 0))
#:description "spin-off $150")
account-alist))

View File

@ -75,6 +75,7 @@
#include "gnc-prefs.h"
#include "gnc-ui.h"
#include "gnc-ui-util.h"
#include <gnc-session.h>
#include "gnc-component-manager.h"
#include "dialog-preferences.h"
#include "dialog-doclink-utils.h"
@ -122,10 +123,14 @@ GSList *add_ins = NULL;
static gchar *gnc_account_separator_is_valid (const gchar *separator,
gchar **normalized_separator)
{
QofBook *book = gnc_get_current_book ();
QofBook *book;
GList *conflict_accts = NULL;
gchar *message = NULL;
if (!gnc_current_session_exist())
return NULL;
book = gnc_get_current_book ();
*normalized_separator = gnc_normalize_account_separator (separator);
conflict_accts = gnc_account_list_name_violations (book, *normalized_separator);
if (conflict_accts)
@ -151,7 +156,7 @@ gnc_account_separator_pref_changed_cb (GtkEntry *entry, GtkWidget *dialog)
{
GtkWidget *label, *image;
gchar *sample;
gchar *separator;
gchar *separator = NULL;
gchar *conflict_msg = gnc_account_separator_is_valid (gtk_entry_get_text (entry), &separator);
@ -200,7 +205,7 @@ gnc_account_separator_validate (GtkWidget *dialog)
{
GtkWidget *entry = g_object_get_data (G_OBJECT(dialog), "account-separator");
gboolean ret = TRUE;
gchar *separator;
gchar *separator = NULL;
gchar *conflict_msg = gnc_account_separator_is_valid (gtk_entry_get_text (GTK_ENTRY(entry)), &separator);
/* Check if the new separator clashes with existing account names */
@ -1337,7 +1342,6 @@ gnc_preferences_dialog_create (GtkWindow *parent)
GtkTreeIter iter;
gnc_commodity *locale_currency;
const gchar *currency_name;
QofBook *book;
GDate fy_end;
gboolean date_is_valid = FALSE;
@ -1396,11 +1400,14 @@ gnc_preferences_dialog_create (GtkWindow *parent)
prefs_table, (GDestroyNotify)g_hash_table_destroy);
book = gnc_get_current_book ();
g_date_clear (&fy_end, 1);
qof_instance_get (QOF_INSTANCE(book),
"fy-end", &fy_end,
NULL);
if (gnc_current_session_exist())
{
QofBook *book = gnc_get_current_book ();
g_date_clear (&fy_end, 1);
qof_instance_get (QOF_INSTANCE(book),
"fy-end", &fy_end,
NULL);
}
box = GTK_WIDGET(gtk_builder_get_object (builder,
"pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_START_PERIOD));
period = gnc_period_select_new (TRUE);

View File

@ -494,17 +494,20 @@ _gdc_set_cal_min_size_req(GncDenseCal *dcal)
}
GtkWidget*
gnc_dense_cal_new(void)
gnc_dense_cal_new (GtkWindow *parent)
{
GncDenseCal *dcal;
dcal = g_object_new(GNC_TYPE_DENSE_CAL, NULL);
GncDenseCal *dcal = g_object_new (GNC_TYPE_DENSE_CAL, NULL);
gtk_window_set_transient_for (GTK_WINDOW(dcal->transPopup),
GTK_WINDOW(parent));
return GTK_WIDGET(dcal);
}
GtkWidget*
gnc_dense_cal_new_with_model(GncDenseCalModel *model)
gnc_dense_cal_new_with_model (GtkWindow *parent, GncDenseCalModel *model)
{
GncDenseCal *cal = GNC_DENSE_CAL(gnc_dense_cal_new());
GncDenseCal *cal = GNC_DENSE_CAL(gnc_dense_cal_new (parent));
gnc_dense_cal_set_model(cal, model);
return GTK_WIDGET(cal);
}

View File

@ -117,8 +117,9 @@ typedef struct _gdc_mark_data
GList *ourMarks;
} gdc_mark_data;
GtkWidget* gnc_dense_cal_new (void);
GtkWidget* gnc_dense_cal_new_with_model (GncDenseCalModel *model);
GtkWidget* gnc_dense_cal_new (GtkWindow *parent);
GtkWidget* gnc_dense_cal_new_with_model (GtkWindow *parent,
GncDenseCalModel *model);
GType gnc_dense_cal_get_type (void);
void gnc_dense_cal_set_model(GncDenseCal *cal, GncDenseCalModel *model);

View File

@ -123,7 +123,6 @@ gnc_ui_new_user_ok_cb (GtkWidget * widget, gpointer data)
else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (new_user->tutorial_button)))
{
gnc_gnome_help (GTK_WINDOW(new_user->window), HF_GUIDE, NULL);
gncp_new_user_finish ();
}
gtk_widget_destroy (new_user->window);
}
@ -198,7 +197,6 @@ gnc_ui_new_user_cancel_dialog (GtkWindow *parent)
keepshowing = (result == GTK_RESPONSE_YES);
gnc_set_first_startup (keepshowing);
gncp_new_user_finish ();
g_object_unref(G_OBJECT(builder));
gtk_widget_destroy(dialog);

View File

@ -1329,7 +1329,8 @@ schedXact_editor_create_freq_sel (GncSxEditorDialog *sxed)
gtk_box_pack_start (GTK_BOX (b), example_cal_scrolled_win, TRUE, TRUE, 0);
sxed->dense_cal_model = gnc_dense_cal_store_new (EX_CAL_NUM_MONTHS * 31);
sxed->example_cal = GNC_DENSE_CAL (gnc_dense_cal_new_with_model (GNC_DENSE_CAL_MODEL (sxed->dense_cal_model)));
sxed->example_cal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model (GTK_WINDOW(sxed->dialog),
GNC_DENSE_CAL_MODEL(sxed->dense_cal_model)));
g_assert (sxed->example_cal);
gnc_dense_cal_set_num_months (sxed->example_cal, EX_CAL_NUM_MONTHS);
gnc_dense_cal_set_months_per_col (sxed->example_cal, EX_CAL_MO_PER_COL);

View File

@ -380,7 +380,8 @@ sxftd_init( SXFromTransInfo *sxfti )
w = GTK_WIDGET(gtk_builder_get_object(sxfti->builder, "ex_cal_frame" ));
sxfti->dense_cal_model = gnc_dense_cal_store_new(num_marks);
sxfti->example_cal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model(GNC_DENSE_CAL_MODEL(sxfti->dense_cal_model)));
sxfti->example_cal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model (GTK_WINDOW(sxfti->dialog),
GNC_DENSE_CAL_MODEL(sxfti->dense_cal_model)));
g_object_ref_sink(sxfti->example_cal);
g_assert(sxfti->example_cal);

View File

@ -463,12 +463,15 @@ gnc_plugin_page_sx_list_create_widget (GncPluginPage *plugin_page)
GtkWidget *vbox;
GtkWidget *label;
GtkWidget *swin;
GtkWindow *window;
page = GNC_PLUGIN_PAGE_SX_LIST(plugin_page);
priv = GNC_PLUGIN_PAGE_SX_LIST_GET_PRIVATE(page);
if (priv->widget != NULL)
return priv->widget;
window = GTK_WINDOW(gnc_plugin_page_get_window (GNC_PLUGIN_PAGE(page)));
/* Create Vpaned widget for top level */
widget = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
priv->widget = widget;
@ -566,7 +569,7 @@ gnc_plugin_page_sx_list_create_widget (GncPluginPage *plugin_page)
{
priv->dense_cal_model = gnc_sx_instance_dense_cal_adapter_new (GNC_SX_INSTANCE_MODEL(priv->instances));
priv->gdcal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model (GNC_DENSE_CAL_MODEL(priv->dense_cal_model)));
priv->gdcal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model (window, GNC_DENSE_CAL_MODEL(priv->dense_cal_model)));
g_object_ref_sink (priv->gdcal);
gnc_dense_cal_set_months_per_col (priv->gdcal, 4);

View File

@ -179,7 +179,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() << std::endl;
return 1;
}
@ -203,7 +203,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() << std::endl;
return 1;
}
@ -211,13 +211,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"
<< *m_opt_desc_display.get() << std::endl;
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() << std::endl;
return 1;

View File

@ -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@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@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]")) % 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 () << std::endl;
std::cout << _("Build ID") << ": " << gnc_build_id () << "\n";
exit(0);
}

View File

@ -177,28 +177,29 @@ scm_run_gnucash (void *data, [[maybe_unused]] int argc, [[maybe_unused]] char **
try
{
auto msg = bl::translate ("Checking Finance::Quote...").str(gnc_get_boost_locale());
const auto checking = _("Checking Finance::Quote...");
gnc_update_splash_screen (checking, GNC_SPLASH_PERCENTAGE_UNKNOWN);
GncQuotes quotes;
msg = (bl::format (bl::translate("Found Finance::Quote version {1}.")) % quotes.version()).str(gnc_get_boost_locale());
auto found = (bl::format (std::string{_("Found Finance::Quote version {1}.")}) % quotes.version()).str().c_str();
auto quote_sources = quotes.sources_as_glist();
gnc_quote_source_set_fq_installed (quotes.version().c_str(), quote_sources);
g_list_free (quote_sources);
gnc_update_splash_screen (msg.c_str(), GNC_SPLASH_PERCENTAGE_UNKNOWN);
gnc_update_splash_screen (found, GNC_SPLASH_PERCENTAGE_UNKNOWN);
}
catch (const GncQuoteException& err)
{
auto msg = bl::translate("Unable to load Finance::Quote.").str(gnc_get_boost_locale());
auto msg = _("Unable to load Finance::Quote.");
PINFO ("Attempt to load Finance::Quote returned this error message:\n");
PINFO ("%s", err.what());
gnc_update_splash_screen (msg.c_str(), GNC_SPLASH_PERCENTAGE_UNKNOWN);
gnc_update_splash_screen (msg, GNC_SPLASH_PERCENTAGE_UNKNOWN);
}
gnc_hook_run(HOOK_STARTUP, NULL);
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);
}
@ -327,11 +328,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;
}
@ -363,10 +364,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;
}

View File

@ -101,6 +101,8 @@ gint gnc_ab_trans_dialog_run_until_ok(GncABTransDialog *td);
*/
void gnc_ab_trans_dialog_free(GncABTransDialog *td);
#if (AQBANKING_VERSION_INT >= 60400)
/**
* Retrieve the current list of transaction templates from the dialog @a
* td, unless @a changed is a specified location and the templates have
@ -114,7 +116,7 @@ void gnc_ab_trans_dialog_free(GncABTransDialog *td);
*/
GList *gnc_ab_trans_dialog_get_templ(const GncABTransDialog *td,
gboolean *changed);
#endif
/**
* Retrieve the widget used as parent.
*

View File

@ -153,21 +153,19 @@ gnc_ab_maketrans(GtkWidget *parent, Account *gnc_acc,
/* Let the user enter the values */
result = gnc_ab_trans_dialog_run_until_ok(td);
templates = gnc_ab_trans_dialog_get_templ(td, &changed);
#if (AQBANKING_VERSION_INT >= 60400)
templates = gnc_ab_trans_dialog_get_templ(td, &changed);
if (trans_type != SEPA_INTERNAL_TRANSFER && changed)
#else
if (changed)
#endif
{
/* Save the templates */
save_templates(parent, gnc_acc, templates,
(result == GNC_RESPONSE_NOW));
}
g_list_free(templates);
templates = NULL;
templates = NULL;
#endif
if (result != GNC_RESPONSE_NOW && result != GNC_RESPONSE_LATER)
{
aborted = TRUE;

View File

@ -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)

View File

@ -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);

View File

@ -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);

View File

@ -859,6 +859,30 @@ notes_append (Transaction* selected_match_trans, gchar* new_notes)
g_free (tmp);
}
static char*
maybe_append_string (const char* match_string, const char* imp_string)
{
char *norm_match_string, *norm_imp_string, *retval = NULL;
if (!(match_string && *match_string))
return g_strdup(imp_string);
if (!(imp_string && *imp_string))
return retval;
norm_match_string = g_utf8_normalize (match_string, -1, G_NORMALIZE_ALL);
norm_imp_string = g_utf8_normalize (imp_string, -1, G_NORMALIZE_ALL);
if (g_utf8_strlen (norm_imp_string, -1) > g_utf8_strlen (norm_match_string, -1) ||
!strstr (norm_match_string, norm_imp_string))
retval = g_strconcat(match_string, "|", imp_string, NULL);
g_free (norm_match_string);
g_free (norm_imp_string);
return retval;
}
/* Append or replace transaction description and notes
* depending on the Append checkbox
*/
@ -868,52 +892,25 @@ update_desc_and_notes (const GNCImportTransInfo* trans_info)
GNCImportMatchInfo* selected_match =
gnc_import_TransInfo_get_selected_match (trans_info);
Transaction* imp_trans = gnc_import_TransInfo_get_trans (trans_info);
Transaction* match_trans = selected_match->trans;
if (trans_info->append_text)
{
gchar *desc_imported, *desc_matched, *note_imported, *note_matched;
const gchar* raw_str = xaccTransGetDescription (imp_trans);
gchar *repl_str;
desc_imported =
raw_str ? g_utf8_normalize (raw_str, -1, G_NORMALIZE_ALL) : NULL;
raw_str = xaccTransGetDescription (selected_match->trans);
desc_matched =
raw_str ? g_utf8_normalize (raw_str, -1, G_NORMALIZE_ALL) : NULL;
raw_str = xaccTransGetNotes (imp_trans);
note_imported =
raw_str ? g_utf8_normalize (raw_str, -1, G_NORMALIZE_ALL) : NULL;
raw_str = xaccTransGetNotes (selected_match->trans);
note_matched =
raw_str ? g_utf8_normalize (raw_str, -1, G_NORMALIZE_ALL) : NULL;
repl_str =
maybe_append_string (xaccTransGetDescription(match_trans),
xaccTransGetDescription(imp_trans));
if (repl_str)
xaccTransSetDescription(match_trans, repl_str);
g_free (repl_str);
// Append if desc_imported not already in desc_matched
if (desc_imported &&
(!desc_matched ||
g_utf8_strlen (desc_imported, -1) > g_utf8_strlen (desc_matched, -1) ||
!strstr (desc_matched, desc_imported)))
{
if (desc_matched && *desc_matched)
desc_append (selected_match->trans, desc_imported);
else
xaccTransSetDescription (selected_match->trans, desc_imported);
}
// Append if note_imported not already in note_matched
if (note_imported &&
(!note_matched ||
g_utf8_strlen (note_imported, -1) > g_utf8_strlen (note_matched, -1) ||
!strstr (note_matched, note_imported)))
{
if (note_matched && *note_matched)
notes_append (selected_match->trans, note_imported);
else
xaccTransSetNotes (selected_match->trans, note_imported);
}
g_free(desc_imported);
g_free(desc_matched);
g_free(note_imported);
g_free(note_matched);
repl_str =
maybe_append_string (xaccTransGetNotes(match_trans),
xaccTransGetNotes(imp_trans));
if (repl_str)
xaccTransSetNotes (match_trans, repl_str);
g_free (repl_str);
}
else
{
@ -1187,6 +1184,22 @@ static gint check_trans_online_id(Transaction *trans1, void *user_data)
return retval;
}
static GHashTable*
hash_account_online_ids (Account *account)
{
GHashTable* acct_hash = g_hash_table_new_full
(g_str_hash, g_str_equal, g_free, NULL);
for (GList *n = xaccAccountGetSplitList (account) ; n; n = n->next)
{
if (gnc_import_split_has_online_id (n->data))
{
char *id = gnc_import_get_split_online_id (n->data);
g_hash_table_insert (acct_hash, (void*) id, GINT_TO_POINTER (1));
}
}
return acct_hash;
}
/** Checks whether the given transaction's online_id already exists in
its parent account. */
gboolean gnc_import_exists_online_id (Transaction *trans, GHashTable* acct_id_hash)
@ -1210,19 +1223,8 @@ gboolean gnc_import_exists_online_id (Transaction *trans, GHashTable* acct_id_ha
// test below will be fast if we have many transactions to import.
dest_acct = xaccSplitGetAccount (source_split);
if (!g_hash_table_contains (acct_id_hash, dest_acct))
{
GHashTable* new_hash = g_hash_table_new_full
(g_str_hash, g_str_equal, g_free, NULL);
g_hash_table_insert (acct_id_hash, dest_acct, new_hash);
for (GList *n = xaccAccountGetSplitList (dest_acct) ; n; n=n->next)
{
if (gnc_import_split_has_online_id (n->data))
{
char *id = gnc_import_get_split_online_id (n->data);
g_hash_table_insert (new_hash, (void*) id, GINT_TO_POINTER (1));
}
}
}
g_hash_table_insert (acct_id_hash, dest_acct,
hash_account_online_ids (dest_acct));
online_id_exists = g_hash_table_contains (g_hash_table_lookup (acct_id_hash, dest_acct),
source_online_id);

View File

@ -2189,21 +2189,6 @@ refresh_model_row (GNCImportMainMatcher *gui,
gtk_tree_selection_unselect_all (selection);
}
void
gnc_gen_trans_list_add_trans (GNCImportMainMatcher *gui, Transaction *trans)
{
Account* acc = NULL;
Split* split = NULL;
int i=0;
split = xaccTransGetSplit (trans, 0);
acc = xaccSplitGetAccount (split);
defer_bal_computation (gui, acc);
gnc_gen_trans_list_add_trans_with_ref_id (gui, trans, 0);
return;
}/* end gnc_import_add_trans() */
void
gnc_gen_trans_list_show_reconcile_after_close_button (GNCImportMainMatcher *info,
gboolean reconcile_after_close,
@ -2219,6 +2204,22 @@ gnc_gen_trans_list_get_reconcile_after_close_button (GNCImportMainMatcher *info)
return info->reconcile_after_close;
}
void
gnc_gen_trans_list_add_trans (GNCImportMainMatcher *gui, Transaction *trans)
{
Account* acc = NULL;
Split* split = NULL;
int i=0;
split = xaccTransGetSplit (trans, 0);
acc = xaccSplitGetAccount (split);
defer_bal_computation (gui, acc);
gnc_gen_trans_list_add_trans_with_ref_id (gui, trans, 0);
return;
}/* end gnc_import_add_trans() */
void
gnc_gen_trans_list_add_trans_with_ref_id (GNCImportMainMatcher *gui, Transaction *trans, guint32 ref_id)
{

File diff suppressed because it is too large Load Diff

View File

@ -239,7 +239,6 @@ gnc_quickfill_cell_modify_verify (BasicCell *_cell,
*start_selection = newval_chars;
*end_selection = -1;
*cursor_position += change_chars;
gnc_basic_cell_set_value_internal (&cell->cell, match_str);
}

View File

@ -1833,6 +1833,13 @@ gnucash_sheet_key_press_event_internal (GtkWidget *widget, GdkEventKey *event)
/* Followed by the input method */
if (gtk_entry_im_context_filter_keypress (GTK_ENTRY(sheet->entry), event))
{
#if !(defined(__APPLE__) || defined(__WIN32__))
/* There's sometimes a timing issue when running under KDE
* Plasma where this call removes the selection. This 1ms
* sleep prevents it.
*/
usleep(1000);
#endif
/* Restore the saved cursor position in case GtkEntry's IMContext
* handlers messed with it after we set it in our insert_cb.
*/

View File

@ -504,7 +504,7 @@ balance at a given time"))
(list gnc:pagename-accounts optname-accounts
(cons acct subaccts))
(list gnc:pagename-accounts optname-levels
(+ 1 tree-depth))
(min 6 (+ 1 tree-depth)))
(list gnc:pagename-general
gnc:optname-reportname
((if show-fullname?

View File

@ -43,6 +43,7 @@
(define (test-average-balance)
(let* ((env (create-test-env))
(book (gnc-get-current-book))
(account-alist (env-create-account-structure-alist env structure))
(options (gnc:make-report-options uuid))
(bank (cdr (assoc "Bank" account-alist)))

View File

@ -49,7 +49,9 @@
(gnc-commodity-get-namespace (gnc-default-report-currency))
sym))
(define USD (gnc-default-report-currency)) ;default currency should be USD because LC_ALL="C"
(define USD
(let ((book (gnc-get-current-book))) ; ensure the book is set
(gnc-default-report-currency))) ;default currency should be USD because LC_ALL="C"
(define GBP (mnemonic->commodity "GBP"))
(define FUNDS (gnc-commodity-new (gnc-get-current-book)
"Funds" ;fullname
@ -91,6 +93,7 @@
(define (create-test-data)
;; This function will perform implementation testing on the transaction report.
(let* ((env (create-test-env))
(book (gnc-get-current-book))
(account-alist (env-create-account-structure-alist env structure))
(bank1savings (cdr (assoc "Savings" account-alist)))
(bank1bonds (cdr (assoc "Bonds" account-alist)))

View File

@ -58,7 +58,8 @@
;; Test two transactions from income to two different assets in two different days
(define (test-in-txn)
(let* ((options (gnc:make-report-options cashflow-barchart-uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options cashflow-barchart-uuid))
(env (create-test-env))
(account-alist (env-create-account-structure-alist env structure))
(bank-account (cdr (assoc "Bank" account-alist)))
@ -100,7 +101,8 @@
;; Test two transactions from two different assets to expense in two different days
(define (test-out-txn)
(let* ((options (gnc:make-report-options cashflow-barchart-uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options cashflow-barchart-uuid))
(env (create-test-env))
(account-alist (env-create-account-structure-alist env structure))
(bank-account (cdr (assoc "Bank" account-alist)))
@ -149,7 +151,8 @@
;; Test null transaction (transaction between assets)
;; This test is identical to test-in-txn but with an extra transaction between assets
(define (test-null-txn)
(let* ((options (gnc:make-report-options cashflow-barchart-uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options cashflow-barchart-uuid))
(env (create-test-env))
(account-alist (env-create-account-structure-alist env structure))
(bank-account (cdr (assoc "Bank" account-alist)))

View File

@ -71,6 +71,7 @@
(define (null-test variant)
;; This null-test tests for the presence of report.
(let* ((uuid (variant->uuid variant))
(book (gnc-get-current-book))
(options (gnc:make-report-options uuid)))
(test-assert (format #f "null-test: ~a" variant)
(options->render uuid options "null-test"))))
@ -112,7 +113,8 @@
(let ((txn (env-transfer env 03 01 1970 equity income 25)))
(xaccTransSetIsClosingTxn txn #t))
(let* ((options (gnc:make-report-options (variant->uuid variant))))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options (variant->uuid variant))))
(set-option! options "General" "Start Date" (cons 'absolute (gnc-dmy2time64 1 1 1970)))
(set-option! options "General" "End Date" (cons 'absolute (gnc-dmy2time64 15 4 1970)))
(set-option! options "Accounts" "Accounts" (list income bank1 bank2 bank3))
@ -160,7 +162,8 @@
(YEAR (gnc:time64-get-year (gnc:get-today))))
(define (default-testing-options)
(let ((options (gnc:make-report-options (variant->uuid variant))))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options (variant->uuid variant))))
(unless (memq variant '(liability-piechart asset-piechart stock-piechart))
(set-option! options "General" "Start Date" '(relative . start-cal-year)))
@ -182,7 +185,8 @@
(env-transfer env 10 07 YEAR expense bank 11)
(env-transfer env 10 09 YEAR income bank 8)
(let* ((options (default-testing-options)))
(let* ((book (gnc-get-current-book))
(options (default-testing-options)))
(test-assert (format #f "basic report exists: ~a" variant)
(options->render uuid options (format #f "test-null ~a default options" variant))))
@ -196,7 +200,8 @@
(env-create-transaction env date bank income idx)
(loop (incdate date DayDelta) (1+ idx))))
(when (eq? variant 'net-worth-barchart)
(let* ((options (default-testing-options)))
(let* ((book (gnc-get-current-book))
(options (default-testing-options)))
(set-option! options "General" "Start Date" (cons 'absolute (gnc-dmy2time64 15 1 1970)))
(set-option! options "General" "End Date" (cons 'absolute (gnc-dmy2time64 15 3 1970)))
(set-option! options "General" "Step Size" 'DayDelta)
@ -214,7 +219,8 @@
(sxml->table-row-col sxml 1 -1 #f)))))
(when (eq? variant 'income-expense-barchart)
(let* ((options (default-testing-options)))
(let* ((book (gnc-get-current-book))
(options (default-testing-options)))
(set-option! options "General" "Start Date" (cons 'absolute (gnc-dmy2time64 15 1 1970)))
(set-option! options "General" "End Date" (cons 'absolute (gnc-dmy2time64 15 3 1970)))
(set-option! options "General" "Step Size" 'DayDelta)

View File

@ -34,7 +34,8 @@
(define (null-test)
;; This null-test tests for the presence of report.
(let ((options (gnc:make-report-options uuid)))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid)))
(test-assert "null-test"
(options->sxml uuid options "null-test"))))

View File

@ -76,6 +76,7 @@
(list "Expenses" (list (cons 'type ACCT-TYPE-EXPENSE)))))
;; This function will perform implementation testing on the GST report.
(let* ((env (create-test-env))
(book (gnc-get-current-book))
(account-alist (env-create-account-structure-alist env structure))
(bank (cdr (assoc "Bank" account-alist)))
(income (cdr (assoc "Income" account-alist)))
@ -224,6 +225,7 @@
(list "EU Reverse VAT Expenses"))))
;; This function will perform implementation testing on the VAT report.
(let* ((env (create-test-env))
(book (gnc-get-current-book))
(account-alist (env-create-account-structure-alist env structure))
(YEAR (gnc:time64-get-year (gnc:get-today))))

View File

@ -60,7 +60,8 @@
(define (null-test variant uuid)
;; This null-test tests for the presence of report.
(let ((options (gnc:make-report-options uuid)))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid)))
(test-assert (format #f "null-test ~a" variant)
(options->sxml uuid options "null-test"))))
@ -97,6 +98,7 @@
(define (advanced-tests)
(test-group-with-cleanup "advanced-portfolio-tests"
;; let* required here to ensure that the book is created before creating the options.
(let* ((account-alist (create-stock-test-data))
(options (gnc:make-report-options advanced-uuid)))
(let ((sxml (options->sxml advanced-uuid options "basic average")))

View File

@ -74,11 +74,13 @@
;; No real test here, just confirm that no exceptions are thrown
(define (null-test uuid)
(let ((options (gnc:make-report-options uuid)))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid)))
(gnc:options->render uuid options "test-standard-category-report" "null-test")))
(define (single-txn-test uuid)
(let* ((income-options (gnc:make-report-options uuid))
(let* ((book (gnc-get-current-book))
(income-options (gnc:make-report-options uuid))
(env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
@ -113,7 +115,8 @@
(teardown)))
(define (single-txn-test-average uuid)
(let* ((income-options (gnc:make-report-options uuid))
(let* ((book (gnc-get-current-book))
(income-options (gnc:make-report-options uuid))
(env (create-test-env))
(curr (gnc-default-report-currency))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET curr))
@ -206,7 +209,8 @@
(teardown))
(define (multi-acct-test expense-report-uuid)
(let* ((expense-options (gnc:make-report-options expense-report-uuid))
(let* ((book (gnc-get-current-book))
(expense-options (gnc:make-report-options expense-report-uuid))
(env (create-test-env))
(expense-accounts (env-expense-account-structure env))
(asset-accounts (env-create-account-structure

View File

@ -51,11 +51,13 @@
;; Just prove that the report exists.
(define (null-test uuid)
(let* ((options (gnc:make-report-options uuid)))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid)))
(gnc:options->render uuid options "test-standard-net-barchart" "null-test")))
(define (single-txn-test uuid)
(let* ((options (gnc:make-report-options uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid))
(env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
@ -99,7 +101,8 @@
(test-end "single-txn-test"))))
(define (two-txn-test uuid)
(let* ((options (gnc:make-report-options uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid))
(env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
@ -151,7 +154,8 @@
(define (two-txn-test-2 uuid)
(let* ((options (gnc:make-report-options uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid))
(env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
@ -199,7 +203,8 @@
sxml))))
(define (two-txn-test-income uuid)
(let* ((options (gnc:make-report-options uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid))
(env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
@ -248,7 +253,8 @@
(define (closing-test uuid)
(let* ((options (gnc:make-report-options uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid))
(env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))

View File

@ -48,11 +48,13 @@
;; Just prove that the report exists.
(define (null-test uuid)
(let ((options (gnc:make-report-options uuid)))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid)))
(gnc:options->render uuid options "test-standard-net-linechart" "null-test")))
(define (single-txn-test uuid)
(let* ((options (gnc:make-report-options uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid))
(env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
@ -94,7 +96,8 @@
(define (two-txn-test uuid)
(let* ((options (gnc:make-report-options uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid))
(env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))
@ -147,7 +150,8 @@
(define (two-txn-test-2 uuid)
(let* ((options (gnc:make-report-options uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid))
(env (create-test-env))
(my-asset-account (env-create-root-account env ACCT-TYPE-ASSET
(gnc-default-report-currency)))

View File

@ -64,7 +64,8 @@
(define optionslist '())
(gnc:report-templates-for-each
(lambda (report-id template)
(let* ((options-generator (gnc:report-template-options-generator template))
(let* ((book (gnc-get-current-book))
(options-generator (gnc:report-template-options-generator template))
(options (options-generator))
(report-options-tested '()))
(gnc:options-for-each
@ -115,7 +116,8 @@
(format #t "[pass] ~a\n" (string-join option-summary ","))))))
(define (simple-stress-test report-name uuid report-options)
(let ((options (gnc:make-report-options uuid)))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid)))
(test-assert (format #f "basic test ~a" report-name)
(gnc:options->render uuid options (string-append "stress-" report-name) "test"))
(format #t "Testing SIMPLE combinations for:\n~a" report-name)
@ -153,7 +155,8 @@
report-options)))))))
(define (combinatorial-stress-test report-name uuid report-options)
(let* ((options (gnc:make-report-options uuid))
(let* ((book (gnc-get-current-book))
(options (gnc:make-report-options uuid))
(render #f))
(test-assert (format #f "basic test ~a" report-name)
@ -265,8 +268,9 @@
(run-tests "on a populated book" optionslist stress-test-runner))
(define (run-test)
(let ((optionslist (generate-optionslist))
(stress-test-runner (get-stress-test-runner)))
(let* ((book (gnc-get-current-book))
(optionslist (generate-optionslist))
(stress-test-runner (get-stress-test-runner)))
(test-runner-factory gnc:test-runner)
(test-begin "stress options")
(tests optionslist stress-test-runner)

View File

@ -38,6 +38,7 @@
(define (test-account-get-trans-type-splits-interval)
(test-group-with-cleanup "test-account-get-trans-type-splits-interval"
(let* ((env (create-test-env))
(book (gnc-get-current-book))
(ts-now (gnc-localtime (current-time)))
(test-day (tm:mday ts-now))
(test-month (+ 1 (tm:mon ts-now)))
@ -287,6 +288,7 @@
(define (create-test-data)
(let* ((env (create-test-env))
(book (gnc-get-current-book))
(account-alist (env-create-account-structure-alist env (structure)))
(asset (cdr (assoc "Asset" account-alist)))
(bank (cdr (assoc "Bank" account-alist)))
@ -589,6 +591,7 @@
(define (test-get-account-at-dates)
(test-group-with-cleanup "test-get-balance-at-dates"
(let* ((env (create-test-env))
(book (gnc-get-current-book))
(structure (list "Root" (list (cons 'type ACCT-TYPE-ASSET))
(list "Asset"
(list "Bank1")

View File

@ -106,7 +106,7 @@ static GSettings * gnc_gsettings_get_settings_ptr (const gchar *schema_str)
{
auto schema_source {g_settings_schema_source_get_default()};
auto schema {g_settings_schema_source_lookup(schema_source, full_name,
FALSE)};
TRUE)};
gset = g_settings_new_full (schema, nullptr, nullptr);
DEBUG ("Created gsettings object %p for schema %s", gset, full_name);
if (G_IS_SETTINGS(gset))

View File

@ -428,7 +428,9 @@ gnc_get_current_root_account (void)
gnc_commodity_table *
gnc_get_current_commodities (void)
{
return gnc_commodity_table_get_table (gnc_get_current_book ());
if (gnc_current_session_exist())
return gnc_commodity_table_get_table (gnc_get_current_book ());
return NULL;
}
gchar *
@ -776,7 +778,8 @@ gnc_default_currency_common (gchar *requested_currency,
GNC_COMMODITY_NS_CURRENCY,
requested_currency);
if (gnc_prefs_get_bool (section, GNC_PREF_CURRENCY_CHOICE_OTHER))
if (gnc_current_session_exist() &&
gnc_prefs_get_bool (section, GNC_PREF_CURRENCY_CHOICE_OTHER))
{
mnemonic = gnc_prefs_get_string(section, GNC_PREF_CURRENCY_OTHER);
currency = gnc_commodity_table_lookup(gnc_get_current_commodities(),
@ -788,11 +791,13 @@ gnc_default_currency_common (gchar *requested_currency,
if (!currency)
currency = gnc_locale_default_currency ();
if (currency)
{
mnemonic = requested_currency;
g_free(mnemonic);
}
return currency;
}
@ -2198,7 +2203,7 @@ unichar_is_cntrl (gunichar uc)
gchar *
gnc_filter_text_for_control_chars (const gchar *text)
{
gchar *normal_text, *nt;
const char *ch;
GString *filtered;
gboolean cntrl = FALSE;
gboolean text_found = FALSE;
@ -2209,20 +2214,18 @@ gnc_filter_text_for_control_chars (const gchar *text)
if (!g_utf8_validate (text, -1, NULL))
return NULL;
normal_text = g_utf8_normalize (text, -1, G_NORMALIZE_ALL_COMPOSE);
filtered = g_string_sized_new (strlen (text) + 1);
filtered = g_string_sized_new (strlen (normal_text) + 1);
ch = text;
nt = normal_text;
while (*nt)
while (*ch)
{
gunichar uc = g_utf8_get_char (nt);
gunichar uc = g_utf8_get_char (ch);
// check for starting with control characters
if (unichar_is_cntrl (uc) && !text_found)
{
nt = g_utf8_next_char (nt);
ch = g_utf8_next_char (ch);
continue;
}
// check for alpha, num and punctuation
@ -2235,18 +2238,17 @@ gnc_filter_text_for_control_chars (const gchar *text)
if (unichar_is_cntrl (uc))
cntrl = TRUE;
nt = g_utf8_next_char (nt);
ch = g_utf8_next_char (ch);
if (cntrl) // if control characters in text replace with space
{
gunichar uc2 = g_utf8_get_char (nt);
gunichar uc2 = g_utf8_get_char (ch);
if (!unichar_is_cntrl (uc2))
filtered = g_string_append_unichar (filtered, ' ');
}
cntrl = FALSE;
}
g_free (normal_text);
return g_string_free (filtered, FALSE);
}

View File

@ -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;

View File

@ -624,6 +624,8 @@ void
xaccSplitCopyKvp (const Split *from, Split *to)
{
qof_instance_copy_kvp (QOF_INSTANCE (to), QOF_INSTANCE (from));
/* But not the online-id */
qof_instance_set (QOF_INSTANCE (to), "online-id", NULL, NULL);
}
/*################## Added for Reg2 #################*/

View File

@ -693,6 +693,9 @@ xaccTransClone (const Transaction *from)
xaccTransBeginEdit (to);
qof_instance_copy_kvp (QOF_INSTANCE (to), QOF_INSTANCE (from));
/* But not the online-id! */
qof_instance_set (QOF_INSTANCE (to), "online-id", NULL, NULL);
for (GList* lfrom = from->splits, *lto = to->splits; lfrom && lto;
lfrom = g_list_next (lfrom), lto = g_list_next (lto))
xaccSplitCopyKvp (lfrom->data, lto->data);

484
po/ar.po

File diff suppressed because it is too large Load Diff

484
po/as.po

File diff suppressed because it is too large Load Diff

484
po/az.po

File diff suppressed because it is too large Load Diff

484
po/bg.po

File diff suppressed because it is too large Load Diff

484
po/brx.po

File diff suppressed because it is too large Load Diff

484
po/ca.po

File diff suppressed because it is too large Load Diff

484
po/cs.po

File diff suppressed because it is too large Load Diff

484
po/da.po

File diff suppressed because it is too large Load Diff

488
po/de.po

File diff suppressed because it is too large Load Diff

484
po/doi.po

File diff suppressed because it is too large Load Diff

484
po/el.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

492
po/es.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

484
po/et.po

File diff suppressed because it is too large Load Diff

484
po/eu.po

File diff suppressed because it is too large Load Diff

484
po/fa.po

File diff suppressed because it is too large Load Diff

484
po/fi.po

File diff suppressed because it is too large Load Diff

488
po/fr.po

File diff suppressed because it is too large Load Diff

484
po/gu.po

File diff suppressed because it is too large Load Diff

488
po/he.po

File diff suppressed because it is too large Load Diff

484
po/hi.po

File diff suppressed because it is too large Load Diff

490
po/hr.po

File diff suppressed because it is too large Load Diff

491
po/hu.po

File diff suppressed because it is too large Load Diff

488
po/id.po

File diff suppressed because it is too large Load Diff

484
po/it.po

File diff suppressed because it is too large Load Diff

1395
po/ja.po

File diff suppressed because it is too large Load Diff

484
po/kn.po

File diff suppressed because it is too large Load Diff

874
po/ko.po

File diff suppressed because it is too large Load Diff

484
po/kok.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

484
po/ks.po

File diff suppressed because it is too large Load Diff

484
po/lt.po

File diff suppressed because it is too large Load Diff

484
po/lv.po

File diff suppressed because it is too large Load Diff

484
po/mai.po

File diff suppressed because it is too large Load Diff

116
po/mk.po
View File

@ -6,10 +6,10 @@
# Vesna Micajkova <vmicajkova@institutpraktikum.mk>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: GnuCash 4.12\n"
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug."
"cgi?product=GnuCash&component=Translations\n"
"POT-Creation-Date: 2022-11-08 02:22+0100\n"
"Project-Id-Version: GnuCash 4.13-pre1\n"
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug.cgi?"
"product=GnuCash&component=Translations\n"
"POT-Creation-Date: 2022-12-04 19:47-0800\n"
"PO-Revision-Date: 2022-11-25 16:48+0000\n"
"Last-Translator: Vesna Micajkova <vmicajkova@institutpraktikum.mk>\n"
"Language-Team: Macedonian <https://hosted.weblate.org/projects/gnucash/"
@ -1031,7 +1031,7 @@ msgstr ""
#: gnucash/gnome-utils/gnc-tree-view-split-reg.c:3000
#: gnucash/gtkbuilder/dialog-bi-import-gui.glade:147
#: gnucash/report/reports/standard/invoice.scm:774
#: libgnucash/engine/Account.cpp:176 libgnucash/engine/gncInvoice.c:1116
#: libgnucash/engine/Account.cpp:176 libgnucash/engine/gncInvoice.c:1119
msgid "Bill"
msgstr ""
@ -1062,7 +1062,7 @@ msgstr ""
#: gnucash/report/reports/standard/taxinvoice.scm:165
#: gnucash/report/reports/support/receipt.eguile.scm:91
#: gnucash/report/reports/support/taxinvoice.eguile.scm:106
#: libgnucash/engine/Account.cpp:157 libgnucash/engine/gncInvoice.c:1114
#: libgnucash/engine/Account.cpp:157 libgnucash/engine/gncInvoice.c:1117
msgid "Invoice"
msgstr ""
@ -1562,7 +1562,7 @@ msgstr ""
msgid "Address Not Found"
msgstr ""
#: gnucash/gnome/dialog-doclink.c:597 gnucash/gnome/dialog-imap-editor.c:883
#: gnucash/gnome/dialog-doclink.c:597 gnucash/gnome/dialog-imap-editor.c:885
msgid "Total Entries"
msgstr ""
@ -1688,8 +1688,8 @@ msgstr ""
msgid "Username"
msgstr ""
#: gnucash/gnome/dialog-employee.c:720 gnucash/gnome/dialog-sx-editor2.c:1755
#: gnucash/gnome/dialog-sx-editor.c:1823 gnucash/gnome/dialog-tax-info.c:1200
#: gnucash/gnome/dialog-employee.c:720 gnucash/gnome/dialog-sx-editor2.c:1756
#: gnucash/gnome/dialog-sx-editor.c:1824 gnucash/gnome/dialog-tax-info.c:1200
#: gnucash/gnome-utils/gnc-dense-cal.c:350
#: gnucash/gnome-utils/gnc-tree-model-budget.c:96
#: gnucash/gnome-utils/gnc-tree-view-commodity.c:368
@ -2033,7 +2033,7 @@ msgid "To see the invalid mappings, use a filter of '%s'"
msgstr ""
#: gnucash/gnome/dialog-imap-editor.c:368
#: gnucash/gnome/dialog-imap-editor.c:605
#: gnucash/gnome/dialog-imap-editor.c:607
msgid "Map Account NOT found"
msgstr ""
@ -2041,28 +2041,28 @@ msgstr ""
msgid "(Note, if there is a large number, it may take a while)"
msgstr ""
#: gnucash/gnome/dialog-imap-editor.c:704
#: gnucash/gnome/dialog-imap-editor.c:706
#: gnucash/gtkbuilder/dialog-imap-editor.glade:123
msgid "Bayesian"
msgstr ""
#: gnucash/gnome/dialog-imap-editor.c:719
#: gnucash/gnome/dialog-imap-editor.c:721
msgid "Description Field"
msgstr ""
#: gnucash/gnome/dialog-imap-editor.c:722
#: gnucash/gnome/dialog-imap-editor.c:724
msgid "Memo Field"
msgstr ""
#: gnucash/gnome/dialog-imap-editor.c:725
#: gnucash/gnome/dialog-imap-editor.c:727
msgid "CSV Account Map"
msgstr ""
#: gnucash/gnome/dialog-imap-editor.c:765
#: gnucash/gnome/dialog-imap-editor.c:767
msgid "Online Id"
msgstr ""
#: gnucash/gnome/dialog-imap-editor.c:791
#: gnucash/gnome/dialog-imap-editor.c:793
msgid "Online HBCI"
msgstr ""
@ -2158,7 +2158,7 @@ msgstr ""
#: gnucash/gnome/dialog-invoice.c:1904 gnucash/gnome/dialog-payment.c:1366
#: gnucash/gtkbuilder/dialog-invoice.glade:857
#: gnucash/report/reports/standard/invoice.scm:780
#: libgnucash/engine/gncInvoice.c:1122
#: libgnucash/engine/gncInvoice.c:1125
msgid "Credit Note"
msgstr ""
@ -2705,9 +2705,9 @@ msgstr ""
#: gnucash/gnome/dialog-payment.c:1457
#, c-format
msgid ""
"You have no valid \"Post To\" accounts. Please create an account of type "
"\"%s\" before you continue to process this payment. Perhaps you want to "
"create an Invoice or Bill first?"
"You have no valid \"Post To\" accounts. Please create an account of type \"%s"
"\" before you continue to process this payment. Perhaps you want to create "
"an Invoice or Bill first?"
msgstr ""
#: gnucash/gnome/dialog-payment.c:1610
@ -2990,23 +2990,23 @@ msgid ""
"Do you really want to do this?"
msgstr ""
#: gnucash/gnome/dialog-sx-editor2.c:1301
#: gnucash/gnome/dialog-sx-editor2.c:1302
msgid ""
"Note: If you have already accepted changes to the Template, Cancel will not "
"revoke them."
msgstr ""
#: gnucash/gnome/dialog-sx-editor2.c:1347 gnucash/gnome/dialog-sx-editor.c:1412
#: gnucash/gnome/dialog-sx-editor2.c:1348 gnucash/gnome/dialog-sx-editor.c:1413
msgid "(never)"
msgstr ""
#: gnucash/gnome/dialog-sx-editor2.c:1515 gnucash/gnome/dialog-sx-editor.c:1574
#: gnucash/gnome/dialog-sx-editor2.c:1516 gnucash/gnome/dialog-sx-editor.c:1575
msgid ""
"The current template transaction has been changed. Would you like to record "
"the changes?"
msgstr ""
#: gnucash/gnome/dialog-sx-editor2.c:1782 gnucash/gnome/dialog-sx-editor.c:1850
#: gnucash/gnome/dialog-sx-editor2.c:1783 gnucash/gnome/dialog-sx-editor.c:1851
#: gnucash/gnome/gnc-plugin-page-sx-list.c:246
#: gnucash/gnome/gnc-plugin-page-sx-list.c:252
msgid "Scheduled Transactions"
@ -3046,13 +3046,13 @@ msgstr ""
msgid "Split with memo %s has an unparsable Debit Formula."
msgstr ""
#: gnucash/gnome/dialog-sx-from-trans.c:557
#: gnucash/gnome/dialog-sx-from-trans.c:558
msgid ""
"The Scheduled Transaction is unbalanced. You are strongly encouraged to "
"correct this situation."
msgstr ""
#: gnucash/gnome/dialog-sx-from-trans.c:789
#: gnucash/gnome/dialog-sx-from-trans.c:790
msgid ""
"Cannot create a Scheduled Transaction from a Transaction currently being "
"edited. Please Enter the Transaction before Scheduling."
@ -3236,7 +3236,7 @@ msgstr ""
msgid "Remaining to Budget"
msgstr ""
#: gnucash/gnome/gnc-budget-view.c:1662 gnucash/gnome/window-reconcile2.c:1094
#: gnucash/gnome/gnc-budget-view.c:1660 gnucash/gnome/window-reconcile2.c:1094
#: gnucash/gnome/window-reconcile.c:1167
#: gnucash/gnome-utils/gnc-tree-view-account.c:924
#: gnucash/report/html-acct-table.scm:803 gnucash/report/reports/aging.scm:544
@ -4250,7 +4250,7 @@ msgid "Budget"
msgstr "Буџет/План"
#: gnucash/gnome/gnc-plugin-page-budget.c:945
#: libgnucash/engine/gnc-budget.cpp:111
#: libgnucash/engine/gnc-budget.cpp:112
msgid "Unnamed Budget"
msgstr ""
@ -5887,17 +5887,17 @@ msgstr ""
msgid "Delete the selected scheduled transaction"
msgstr ""
#: gnucash/gnome/gnc-plugin-page-sx-list.c:441
#: gnucash/gnome/gnc-plugin-page-sx-list.c:444
#: gnucash/gtkbuilder/dialog-account.glade:553
msgid "Transactions"
msgstr ""
#: gnucash/gnome/gnc-plugin-page-sx-list.c:501
#: gnucash/gnome/gnc-plugin-page-sx-list.c:504
msgid "Upcoming Transactions"
msgstr ""
#. Translators: This is a ngettext(3) message, %d is the number of scheduled transactions deleted
#: gnucash/gnome/gnc-plugin-page-sx-list.c:865
#: gnucash/gnome/gnc-plugin-page-sx-list.c:868
#, c-format
msgid "Do you really want to delete this scheduled transaction?"
msgid_plural "Do you really want to delete %d scheduled transactions?"
@ -7226,8 +7226,8 @@ msgstr ""
#: gnucash/gnome-utils/dialog-commodity.c:1345
msgid ""
"You must enter a non-empty \"Full name\", \"Symbol/abbreviation\", and "
"\"Type\" for the commodity."
"You must enter a non-empty \"Full name\", \"Symbol/abbreviation\", and \"Type"
"\" for the commodity."
msgstr ""
#: gnucash/gnome-utils/dialog-doclink-utils.c:237
@ -7786,7 +7786,7 @@ msgstr ""
msgid "Frequency"
msgstr ""
#: gnucash/gnome-utils/gnc-dense-cal.c:1238
#: gnucash/gnome-utils/gnc-dense-cal.c:1241
msgid "(unnamed)"
msgstr ""
@ -9519,7 +9519,7 @@ msgstr ""
#: gnucash/report/reports/standard/net-charts.scm:374
#: gnucash/report/reports/standard/net-charts.scm:422
#: libgnucash/engine/Account.cpp:155 libgnucash/engine/Account.cpp:4503
#: libgnucash/engine/gncInvoice.c:1118
#: libgnucash/engine/gncInvoice.c:1121
msgid "Expense"
msgstr ""
@ -10420,8 +10420,8 @@ msgstr ""
#: gnucash/gschemas/org.gnucash.GnuCash.dialogs.gschema.xml.in:220
msgid ""
"If active, the \"New Hierarchy\" window will be shown whenever the \"New "
"File\" menu item is chosen. Otherwise it will not be shown."
"If active, the \"New Hierarchy\" window will be shown whenever the \"New File"
"\" menu item is chosen. Otherwise it will not be shown."
msgstr ""
#: gnucash/gschemas/org.gnucash.GnuCash.dialogs.gschema.xml.in:227
@ -10658,8 +10658,8 @@ msgstr ""
#: gnucash/gschemas/org.gnucash.GnuCash.dialogs.sxs.gschema.xml.in:27
msgid ""
"Set \"Review Created Transactions\" as the default for the \"since last "
"run\" dialog."
"Set \"Review Created Transactions\" as the default for the \"since last run"
"\" dialog."
msgstr ""
#: gnucash/gschemas/org.gnucash.GnuCash.dialogs.sxs.gschema.xml.in:28
@ -10759,8 +10759,8 @@ msgstr ""
msgid ""
"This setting determines the character that will be used between components "
"of an account name. Possible values are any single non-alphanumeric unicode "
"character, or any of the following strings: \"colon\", \"slash\", "
"\"backslash\", \"dash\" and \"period\"."
"character, or any of the following strings: \"colon\", \"slash\", \"backslash"
"\", \"dash\" and \"period\"."
msgstr ""
#: gnucash/gschemas/org.gnucash.GnuCash.gschema.xml.in:25
@ -11126,8 +11126,8 @@ msgstr ""
#: gnucash/gschemas/org.gnucash.GnuCash.gschema.xml.in:221
msgid ""
"This setting determines the edge at which the summary bar for various pages "
"is drawn. Possible values are \"top\" and \"bottom\". It defaults to "
"\"bottom\"."
"is drawn. Possible values are \"top\" and \"bottom\". It defaults to \"bottom"
"\"."
msgstr ""
#: gnucash/gschemas/org.gnucash.GnuCash.gschema.xml.in:220
@ -11436,14 +11436,15 @@ msgid "PDF export file name format"
msgstr ""
#: gnucash/gschemas/org.gnucash.GnuCash.gschema.xml.in:380
#, c-format
msgid ""
"This setting chooses the file name for PDF export. This is a sprintf(3) "
"string with three arguments: \"%1$s\" is the report name such as "
"\"Invoice\". \"%2$s\" is the number of the report, which for an invoice "
"report is the invoice number. \"%3$s\" is the date of the report, formatted "
"according to the filename-date-format setting. Note: Any characters that are "
"not allowed in filenames, such as '/', will be replaced with underscores '_' "
"in the resulting file name."
"string with three arguments: \"%1$s\" is the report name such as \"Invoice"
"\". \"%2$s\" is the number of the report, which for an invoice report is the "
"invoice number. \"%3$s\" is the date of the report, formatted according to "
"the filename-date-format setting. Note: Any characters that are not allowed "
"in filenames, such as '/', will be replaced with underscores '_' in the "
"resulting file name."
msgstr ""
#: gnucash/gschemas/org.gnucash.GnuCash.gschema.xml.in:384
@ -12588,6 +12589,7 @@ msgstr ""
#. %s is an account template
#: gnucash/gtkbuilder/assistant-hierarchy.glade:377
#, c-format
msgid "Accounts in %s"
msgstr ""
@ -19014,8 +19016,8 @@ msgstr ""
#: gnucash/import-export/csv-exp/assistant-csv-export.c:109
#, c-format
msgid ""
"The account tree will be exported to the file '%s' when you click "
"\"Apply\".\n"
"The account tree will be exported to the file '%s' when you click \"Apply"
"\".\n"
"\n"
"You can also verify your selections by clicking on \"Back\" or \"Cancel\" to "
"abort the export.\n"
@ -20997,9 +20999,9 @@ msgstr ""
#: gnucash/register/register-gnome/datecell-gnome.c:104
msgid ""
"The entered date of the transaction is older than the \"Read-Only "
"Threshold\" set for this book. This setting can be changed in File-"
">Properties->Accounts, resetting to the threshold."
"The entered date of the transaction is older than the \"Read-Only Threshold"
"\" set for this book. This setting can be changed in File->Properties-"
">Accounts, resetting to the threshold."
msgstr ""
#: gnucash/register/register-gnome/gnucash-item-list.c:534
@ -27936,15 +27938,15 @@ msgid ""
"features:"
msgstr ""
#: libgnucash/engine/gncInvoice.c:1746
#: libgnucash/engine/gncInvoice.c:1749
msgid "Extra to Charge Card"
msgstr ""
#: libgnucash/engine/gncInvoice.c:1786
#: libgnucash/engine/gncInvoice.c:1789
msgid "Generated from an invoice. Try unposting the invoice."
msgstr ""
#: libgnucash/engine/gncInvoice.c:2216
#: libgnucash/engine/gncInvoice.c:2219
msgid " (posted)"
msgstr ""

484
po/mni.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

484
po/mr.po

File diff suppressed because it is too large Load Diff

484
po/nb.po

File diff suppressed because it is too large Load Diff

484
po/ne.po

File diff suppressed because it is too large Load Diff

484
po/nl.po

File diff suppressed because it is too large Load Diff

513
po/pl.po

File diff suppressed because it is too large Load Diff

488
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

484
po/ro.po

File diff suppressed because it is too large Load Diff

484
po/ru.po

File diff suppressed because it is too large Load Diff

484
po/rw.po

File diff suppressed because it is too large Load Diff

484
po/sk.po

File diff suppressed because it is too large Load Diff

484
po/sr.po

File diff suppressed because it is too large Load Diff

488
po/sv.po

File diff suppressed because it is too large Load Diff

484
po/ta.po

File diff suppressed because it is too large Load Diff

484
po/te.po

File diff suppressed because it is too large Load Diff

484
po/tr.po

File diff suppressed because it is too large Load Diff

488
po/uk.po

File diff suppressed because it is too large Load Diff

492
po/ur.po

File diff suppressed because it is too large Load Diff

484
po/vi.po

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More