Merge branch 'maint'

This commit is contained in:
Frank H. Ellenberger 2023-01-06 01:31:13 +01:00
commit 506a1b3c5e
18 changed files with 328 additions and 341 deletions

View File

@ -2844,7 +2844,7 @@ gboolean gnc_tree_view_search_compare (GtkTreeModel *model, gint column,
gchar *case_normalized_key = NULL; gchar *case_normalized_key = NULL;
gboolean match = FALSE; gboolean match = FALSE;
normalized_key = g_utf8_normalize (key, -1, G_NORMALIZE_ALL); normalized_key = g_utf8_normalize (key, -1, G_NORMALIZE_NFC);
if (normalized_key) if (normalized_key)
case_normalized_key = g_utf8_casefold (normalized_key, -1); case_normalized_key = g_utf8_casefold (normalized_key, -1);
if (case_normalized_key) if (case_normalized_key)
@ -2873,7 +2873,7 @@ gboolean gnc_tree_view_search_compare (GtkTreeModel *model, gint column,
if (!str) if (!str)
continue; continue;
normalized_string = g_utf8_normalize (str, -1, G_NORMALIZE_ALL); normalized_string = g_utf8_normalize (str, -1, G_NORMALIZE_NFC);
if (normalized_string) if (normalized_string)
case_normalized_string = g_utf8_casefold (normalized_string, -1); case_normalized_string = g_utf8_casefold (normalized_string, -1);
if (case_normalized_string&&NULL!=strstr(case_normalized_string,case_normalized_key)) if (case_normalized_string&&NULL!=strstr(case_normalized_string,case_normalized_key))

View File

@ -1005,23 +1005,10 @@ forward_page_func (gint current_page, gpointer user_data)
} }
static void static void
create_split (Transaction *trans, FieldMask splitfield, create_split (Transaction *trans, const gchar *action, Account *account,
const gchar *action, Account *account,
AccountVec& account_commits, GtkWidget *memo_entry, AccountVec& account_commits, GtkWidget *memo_entry,
gnc_numeric amount_numeric, gnc_numeric value_numeric, gnc_numeric amount_numeric, gnc_numeric value_numeric)
bool skip_if_zero, StockTransactionInfo *info)
{ {
if (skip_if_zero && gnc_numeric_zero_p (value_numeric))
return;
if (info->txn_type->input_new_balance)
amount_numeric = gnc_numeric_sub_fixed (amount_numeric, info->balance_at_date);
else if (splitfield & FieldMask::ENABLED_CREDIT)
{
amount_numeric = gnc_numeric_neg (amount_numeric);
value_numeric = gnc_numeric_neg (value_numeric);
}
auto split = xaccMallocSplit (gnc_get_current_book ()); auto split = xaccMallocSplit (gnc_get_current_book ());
xaccSplitSetParent (split, trans); xaccSplitSetParent (split, trans);
xaccAccountBeginEdit (account); xaccAccountBeginEdit (account);
@ -1096,55 +1083,68 @@ stock_assistant_finish (GtkAssistant *assistant, gpointer user_data)
gae_amount (info->stock_amount_edit) : gnc_numeric_zero (); gae_amount (info->stock_amount_edit) : gnc_numeric_zero ();
auto stock_value = info->txn_type->stock_value != FieldMask::DISABLED ? auto stock_value = info->txn_type->stock_value != FieldMask::DISABLED ?
gae_amount (info->stock_value_edit) : gnc_numeric_zero (); gae_amount (info->stock_value_edit) : gnc_numeric_zero ();
create_split (trans, info->txn_type->stock_amount | info->txn_type->stock_value, if (info->txn_type->input_new_balance)
NC_ ("Stock Assistant: Action field", "Stock"), stock_amount = gnc_numeric_sub_fixed (stock_amount, info->balance_at_date);
else
{
if (info->txn_type->stock_amount & FieldMask::ENABLED_CREDIT)
stock_amount = gnc_numeric_neg (stock_amount);
if (info->txn_type->stock_value & FieldMask::ENABLED_CREDIT)
stock_value = gnc_numeric_neg (stock_value);
}
create_split (trans, NC_ ("Stock Assistant: Action field", "Stock"),
info->acct, account_commits, info->stock_memo_edit, info->acct, account_commits, info->stock_memo_edit,
stock_amount, stock_value, false, info); stock_amount, stock_value);
if (info->txn_type->cash_value != FieldMask::DISABLED) if (info->txn_type->cash_value != FieldMask::DISABLED)
{ {
auto cash = gae_amount (info->cash_value); auto cash = gae_amount (info->cash_value);
create_split (trans, info->txn_type->cash_value, if (info->txn_type->cash_value & FieldMask::ENABLED_CREDIT)
NC_ ("Stock Assistant: Action field", "Cash"), cash = gnc_numeric_neg (cash);
create_split (trans, NC_ ("Stock Assistant: Action field", "Cash"),
gas_account (info->cash_account), account_commits, gas_account (info->cash_account), account_commits,
info->cash_memo_edit, cash, cash, false, info); info->cash_memo_edit, cash, cash);
} }
if (info->txn_type->fees_value != FieldMask::DISABLED) if (info->txn_type->fees_value != FieldMask::DISABLED)
{ {
auto fees = gae_amount (info->fees_value); auto fees = gae_amount (info->fees_value);
if (!gnc_numeric_zero_p (fees))
{
auto capitalize = gtk_toggle_button_get_active auto capitalize = gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON (info->capitalize_fees_checkbox)); (GTK_TOGGLE_BUTTON (info->capitalize_fees_checkbox));
create_split (trans, info->txn_type->fees_value,
NC_ ("Stock Assistant: Action field", "Fees"), create_split (trans, NC_ ("Stock Assistant: Action field", "Fees"),
capitalize ? info->acct : gas_account (info->fees_account), capitalize ? info->acct : gas_account (info->fees_account),
account_commits, info->fees_memo_edit, account_commits, info->fees_memo_edit,
capitalize ? gnc_numeric_zero () : fees, fees, true, info); capitalize ? gnc_numeric_zero () : fees, fees);
}
} }
if (info->txn_type->dividend_value != FieldMask::DISABLED) if (info->txn_type->dividend_value != FieldMask::DISABLED)
{ {
auto dividend = gae_amount (info->dividend_value); auto dividend = gae_amount (info->dividend_value);
create_split (trans, info->txn_type->dividend_value, if (info->txn_type->dividend_value & FieldMask::ENABLED_CREDIT)
NC_ ("Stock Assistant: Action field", "Dividend"), dividend = gnc_numeric_neg (dividend);
create_split (trans, NC_ ("Stock Assistant: Action field", "Dividend"),
gas_account (info->dividend_account), account_commits, gas_account (info->dividend_account), account_commits,
info->dividend_memo_edit, dividend, dividend, false, info); info->dividend_memo_edit, dividend, dividend);
} }
if (info->txn_type->capgains_value != FieldMask::DISABLED) if (info->txn_type->capgains_value != FieldMask::DISABLED)
{ {
auto capgains = gae_amount (info->capgains_value); auto capgains = gae_amount (info->capgains_value);
create_split (trans, info->txn_type->capgains_value, create_split (trans, NC_ ("Stock Assistant: Action field", "Capital Gain"),
NC_ ("Stock Assistant: Action field", "Capital Gain"),
gas_account (info->capgains_account),
account_commits, info->capgains_memo_edit,
capgains, capgains, false, info);
create_split (trans,
info->txn_type->capgains_value ^ (FieldMask::ENABLED_CREDIT | FieldMask::ENABLED_DEBIT),
NC_ ("Stock Assistant: Action field", "Capital Gain"),
info->acct, account_commits, info->capgains_memo_edit, info->acct, account_commits, info->capgains_memo_edit,
gnc_numeric_zero (), capgains, false, info); gnc_numeric_zero (), capgains);
capgains = gnc_numeric_neg (capgains);
create_split (trans, NC_ ("Stock Assistant: Action field", "Capital Gain"),
gas_account (info->capgains_account), account_commits,
info->capgains_memo_edit, capgains, capgains);
} }
add_price (info, date); add_price (info, date);

View File

@ -411,6 +411,7 @@ gnc_plugin_page_report_load_uri (GncPluginPage *page)
{ {
GncPluginPageReport *report; GncPluginPageReport *report;
GncPluginPageReportPrivate *priv; GncPluginPageReportPrivate *priv;
GncPluginPage *weak_page = page;
URLType type; URLType type;
char * id_name; char * id_name;
char * child_name; char * child_name;
@ -434,6 +435,7 @@ gnc_plugin_page_report_load_uri (GncPluginPage *page)
g_free(id_name); g_free(id_name);
g_free(child_name); g_free(child_name);
g_object_add_weak_pointer(G_OBJECT(page), (gpointer*)(&weak_page));
gtk_widget_show_all( GTK_WIDGET(priv->container) ); gtk_widget_show_all( GTK_WIDGET(priv->container) );
priv->loaded = TRUE; priv->loaded = TRUE;
@ -447,7 +449,11 @@ gnc_plugin_page_report_load_uri (GncPluginPage *page)
gnc_html_show_url(priv->html, type, url_location, url_label, 0); gnc_html_show_url(priv->html, type, url_location, url_label, 0);
g_free(url_location); g_free(url_location);
if (weak_page)
{
gnc_plugin_page_report_set_progressbar( page, FALSE ); gnc_plugin_page_report_set_progressbar( page, FALSE );
g_object_remove_weak_pointer(G_OBJECT(page), (gpointer*)(&weak_page));
}
// this resets the window for the progressbar to nullptr // this resets the window for the progressbar to nullptr
gnc_window_set_progressbar_window( nullptr ); gnc_window_set_progressbar_window( nullptr );

View File

@ -85,7 +85,7 @@ Click on "Next" to proceed or "Cancel" to Abort Import.</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes"> <property name="label" translatable="yes">
Select location and file name for the Import, then click "OK"… Select location and file name for the Import, then click "Next"...
</property> </property>
<property name="wrap">True</property> <property name="wrap">True</property>
</object> </object>

View File

@ -75,7 +75,7 @@ Lastly, for repeated imports the preview page has buttons to Load and Save the s
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes"> <property name="label" translatable="yes">
Select location and file name for the Import, then click "OK"… Select location and file name for the Import, then click "Next"...
</property> </property>
<property name="wrap">True</property> <property name="wrap">True</property>
</object> </object>

View File

@ -465,7 +465,7 @@ handle_embedded_object( GncHtmlWebkit* self, gchar* html_str )
* widget. * widget.
********************************************************************/ ********************************************************************/
static void static gboolean
load_to_stream( GncHtmlWebkit* self, URLType type, load_to_stream( GncHtmlWebkit* self, URLType type,
const gchar* location, const gchar* label ) const gchar* location, const gchar* label )
{ {
@ -485,16 +485,31 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
stream_handler = g_hash_table_lookup( gnc_html_stream_handlers, type ); stream_handler = g_hash_table_lookup( gnc_html_stream_handlers, type );
if ( stream_handler ) if ( stream_handler )
{ {
gboolean ok = stream_handler( location, &fdata, &fdata_len ); GncHtml *weak_html = GNC_HTML(self);
gboolean ok;
if ( ok ) g_object_add_weak_pointer(G_OBJECT(self), (gpointer *)(&weak_html));
ok = stream_handler(location, &fdata, &fdata_len);
if (!weak_html) // will be NULL if self has been destroyed
{ {
g_free (fdata);
return FALSE;
}
else
{
g_object_remove_weak_pointer(G_OBJECT(self),
(gpointer*)(&weak_html));
}
if (ok) {
fdata = fdata ? fdata : g_strdup(""); fdata = fdata ? fdata : g_strdup("");
// Until webkitgtk supports download requests, look for "<object classid=" // Until webkitgtk supports download requests, look for "<object
// indicating the beginning of an embedded graph. If found, handle it // classid=" indicating the beginning of an embedded graph. If
if ( g_strstr_len( fdata, -1, "<object classid=" ) != NULL ) // found, handle it
{ if (g_strstr_len(fdata, -1, "<object classid=") != NULL) {
gchar *new_fdata; gchar *new_fdata;
new_fdata = handle_embedded_object(self, fdata); new_fdata = handle_embedded_object(self, fdata);
g_free(fdata); g_free(fdata);
@ -502,13 +517,13 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
} }
// Save a copy for export purposes // Save a copy for export purposes
if ( priv->html_string != NULL ) if (priv->html_string != NULL) {
{
g_free(priv->html_string); g_free(priv->html_string);
} }
priv->html_string = g_strdup(fdata); priv->html_string = g_strdup(fdata);
impl_webkit_show_data(GNC_HTML(self), fdata, strlen(fdata)); impl_webkit_show_data(GNC_HTML(self), fdata, strlen(fdata));
// webkit_web_view_load_html_string( priv->web_view, fdata, BASE_URI_NAME ); // webkit_web_view_load_html_string( priv->web_view,
// fdata, BASE_URI_NAME );
} }
else else
{ {
@ -529,7 +544,7 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
/* No action required: Webkit jumps to the anchor on its own. */ /* No action required: Webkit jumps to the anchor on its own. */
} }
return; return TRUE;
} }
} }
@ -578,6 +593,7 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
} }
while ( FALSE ); while ( FALSE );
return TRUE;
} }
#if 0 #if 0
@ -831,6 +847,7 @@ impl_webkit_show_url( GncHtml* self, URLType type,
GncHTMLUrlCB url_handler; GncHTMLUrlCB url_handler;
gboolean new_window; gboolean new_window;
GncHtmlWebkitPrivate* priv; GncHtmlWebkitPrivate* priv;
gboolean stream_loaded = FALSE;
g_return_if_fail( self != NULL ); g_return_if_fail( self != NULL );
g_return_if_fail( GNC_IS_HTML_WEBKIT(self) ); g_return_if_fail( GNC_IS_HTML_WEBKIT(self) );
@ -921,10 +938,11 @@ impl_webkit_show_url( GncHtml* self, URLType type,
DEBUG( "resetting base location to %s", DEBUG( "resetting base location to %s",
priv->base.base_location ? priv->base.base_location : "(null)" ); priv->base.base_location ? priv->base.base_location : "(null)" );
load_to_stream( GNC_HTML_WEBKIT(self), result.url_type, stream_loaded = load_to_stream( GNC_HTML_WEBKIT(self),
result.url_type,
new_location, new_label ); new_location, new_label );
if ( priv->base.load_cb != NULL ) if ( stream_loaded && priv->base.load_cb != NULL )
{ {
priv->base.load_cb( GNC_HTML(self), result.url_type, priv->base.load_cb( GNC_HTML(self), result.url_type,
new_location, new_label, priv->base.load_cb_data ); new_location, new_label, priv->base.load_cb_data );
@ -987,7 +1005,8 @@ impl_webkit_show_url( GncHtml* self, URLType type,
/* FIXME : handle new_window = 1 */ /* FIXME : handle new_window = 1 */
gnc_html_history_append( priv->base.history, gnc_html_history_append( priv->base.history,
gnc_html_history_node_new( type, location, label ) ); gnc_html_history_node_new( type, location, label ) );
load_to_stream( GNC_HTML_WEBKIT(self), type, location, label ); stream_loaded = load_to_stream( GNC_HTML_WEBKIT(self), type,
location, label );
} }
while ( FALSE ); while ( FALSE );
@ -998,7 +1017,7 @@ impl_webkit_show_url( GncHtml* self, URLType type,
PERR( "URLType %s not supported.", type ); PERR( "URLType %s not supported.", type );
} }
if ( priv->base.load_cb != NULL ) if ( stream_loaded && priv->base.load_cb != NULL )
{ {
(priv->base.load_cb)( GNC_HTML(self), type, location, label, priv->base.load_cb_data ); (priv->base.load_cb)( GNC_HTML(self), type, location, label, priv->base.load_cb_data );
} }

View File

@ -466,7 +466,7 @@ handle_embedded_object( GncHtmlWebkit* self, gchar* html_str )
* widget. * widget.
********************************************************************/ ********************************************************************/
static void static gboolean
load_to_stream( GncHtmlWebkit* self, URLType type, load_to_stream( GncHtmlWebkit* self, URLType type,
const gchar* location, const gchar* label ) const gchar* location, const gchar* label )
{ {
@ -477,7 +477,7 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
DEBUG( "type %s, location %s, label %s", type ? type : "(null)", DEBUG( "type %s, location %s, label %s", type ? type : "(null)",
location ? location : "(null)", label ? label : "(null)"); location ? location : "(null)", label ? label : "(null)");
g_return_if_fail( self != NULL ); g_return_val_if_fail( self != NULL, FALSE );
if ( gnc_html_stream_handlers != NULL ) if ( gnc_html_stream_handlers != NULL )
{ {
@ -486,7 +486,23 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
stream_handler = g_hash_table_lookup( gnc_html_stream_handlers, type ); stream_handler = g_hash_table_lookup( gnc_html_stream_handlers, type );
if ( stream_handler ) if ( stream_handler )
{ {
gboolean ok = stream_handler( location, &fdata, &fdata_len ); GncHtml *weak_html = GNC_HTML(self);
gboolean ok;
g_object_add_weak_pointer(G_OBJECT(self),
(gpointer*)(&weak_html));
ok = stream_handler( location, &fdata, &fdata_len );
if (!weak_html) // will be NULL if self has been destroyed
{
g_free (fdata);
return FALSE;
}
else
{
g_object_remove_weak_pointer(G_OBJECT(self),
(gpointer*)(&weak_html));
}
if ( ok ) if ( ok )
{ {
@ -533,7 +549,7 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
} }
/* No action required: Webkit jumps to the anchor on its own. */ /* No action required: Webkit jumps to the anchor on its own. */
} }
return; return TRUE;
} }
} }
@ -580,7 +596,9 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
} }
} }
while ( FALSE ); while ( FALSE );
return TRUE;
} }
static gboolean static gboolean
perform_navigation_policy (WebKitWebView *web_view, perform_navigation_policy (WebKitWebView *web_view,
WebKitNavigationPolicyDecision *decision, WebKitNavigationPolicyDecision *decision,
@ -782,6 +800,7 @@ impl_webkit_show_url( GncHtml* self, URLType type,
GncHTMLUrlCB url_handler; GncHTMLUrlCB url_handler;
gboolean new_window; gboolean new_window;
GncHtmlWebkitPrivate* priv; GncHtmlWebkitPrivate* priv;
gboolean stream_loaded = FALSE;
g_return_if_fail( self != NULL ); g_return_if_fail( self != NULL );
g_return_if_fail( GNC_IS_HTML_WEBKIT(self) ); g_return_if_fail( GNC_IS_HTML_WEBKIT(self) );
@ -872,10 +891,11 @@ impl_webkit_show_url( GncHtml* self, URLType type,
DEBUG( "resetting base location to %s", DEBUG( "resetting base location to %s",
priv->base.base_location ? priv->base.base_location : "(null)" ); priv->base.base_location ? priv->base.base_location : "(null)" );
load_to_stream( GNC_HTML_WEBKIT(self), result.url_type, stream_loaded = load_to_stream( GNC_HTML_WEBKIT(self),
result.url_type,
new_location, new_label ); new_location, new_label );
if ( priv->base.load_cb != NULL ) if ( stream_loaded && priv->base.load_cb != NULL )
{ {
priv->base.load_cb( GNC_HTML(self), result.url_type, priv->base.load_cb( GNC_HTML(self), result.url_type,
new_location, new_label, priv->base.load_cb_data ); new_location, new_label, priv->base.load_cb_data );
@ -938,7 +958,8 @@ impl_webkit_show_url( GncHtml* self, URLType type,
/* FIXME : handle new_window = 1 */ /* FIXME : handle new_window = 1 */
gnc_html_history_append( priv->base.history, gnc_html_history_append( priv->base.history,
gnc_html_history_node_new( type, location, label ) ); gnc_html_history_node_new( type, location, label ) );
load_to_stream( GNC_HTML_WEBKIT(self), type, location, label ); stream_loaded = load_to_stream( GNC_HTML_WEBKIT(self),
type, location, label );
} }
while ( FALSE ); while ( FALSE );
@ -948,7 +969,7 @@ impl_webkit_show_url( GncHtml* self, URLType type,
PERR( "URLType %s not supported.", type ); PERR( "URLType %s not supported.", type );
} }
if ( priv->base.load_cb != NULL ) if ( stream_loaded && priv->base.load_cb != NULL )
{ {
(priv->base.load_cb)( GNC_HTML(self), type, location, label, priv->base.load_cb_data ); (priv->base.load_cb)( GNC_HTML(self), type, location, label, priv->base.load_cb_data );
} }

View File

@ -870,8 +870,8 @@ maybe_append_string (const char* match_string, const char* imp_string)
if (!(imp_string && *imp_string)) if (!(imp_string && *imp_string))
return retval; return retval;
norm_match_string = g_utf8_normalize (match_string, -1, G_NORMALIZE_ALL); norm_match_string = g_utf8_normalize (match_string, -1, G_NORMALIZE_NFC);
norm_imp_string = g_utf8_normalize (imp_string, -1, G_NORMALIZE_ALL); norm_imp_string = g_utf8_normalize (imp_string, -1, G_NORMALIZE_NFC);
if (g_utf8_strlen (norm_imp_string, -1) > g_utf8_strlen (norm_match_string, -1) || if (g_utf8_strlen (norm_imp_string, -1) > g_utf8_strlen (norm_match_string, -1) ||
!strstr (norm_match_string, norm_imp_string)) !strstr (norm_match_string, norm_imp_string))

View File

@ -986,7 +986,7 @@ static void populate_list (gpointer key, gpointer value, GtkListStore *list)
{ {
GtkTreeIter iter; GtkTreeIter iter;
const char *original = key; const char *original = key;
char *normalized = g_utf8_normalize (original, -1, G_NORMALIZE_ALL); char *normalized = g_utf8_normalize (original, -1, G_NORMALIZE_NFC);
char *normalized_folded = normalized ? g_utf8_casefold (normalized, -1) : NULL; char *normalized_folded = normalized ? g_utf8_casefold (normalized, -1) : NULL;
gtk_list_store_append (list, &iter); gtk_list_store_append (list, &iter);
gtk_list_store_set (list, &iter, gtk_list_store_set (list, &iter,

View File

@ -605,7 +605,7 @@ gnc_combo_cell_type_ahead_search (const gchar* newval,
GRegex* regex0 = g_regex_new (escaped_sep, 0, 0, NULL); GRegex* regex0 = g_regex_new (escaped_sep, 0, 0, NULL);
char* rep_str = g_regex_replace_literal (regex0, escaped_newval, -1, 0, char* rep_str = g_regex_replace_literal (regex0, escaped_newval, -1, 0,
newval_rep, 0, NULL); newval_rep, 0, NULL);
char* normal_rep_str = g_utf8_normalize (rep_str, -1, G_NORMALIZE_ALL); char* normal_rep_str = g_utf8_normalize (rep_str, -1, G_NORMALIZE_NFC);
GRegex *regex = g_regex_new (normal_rep_str, G_REGEX_CASELESS, 0, NULL); GRegex *regex = g_regex_new (normal_rep_str, G_REGEX_CASELESS, 0, NULL);
gboolean valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (full_store), gboolean valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (full_store),
@ -634,7 +634,7 @@ gnc_combo_cell_type_ahead_search (const gchar* newval,
gchar* normalized_str_data = NULL; gchar* normalized_str_data = NULL;
gtk_tree_model_get (GTK_TREE_MODEL (full_store), &iter, 0, gtk_tree_model_get (GTK_TREE_MODEL (full_store), &iter, 0,
&str_data, -1); &str_data, -1);
normalized_str_data = g_utf8_normalize (str_data, -1, G_NORMALIZE_ALL); normalized_str_data = g_utf8_normalize (str_data, -1, G_NORMALIZE_NFC);
if (g_regex_match (regex, normalized_str_data, 0, NULL)) if (g_regex_match (regex, normalized_str_data, 0, NULL))
{ {

View File

@ -61,11 +61,11 @@ qof_utf8_substr_nocase (const gchar *haystack, const gchar *needle)
haystack_casefold = g_utf8_casefold (haystack, -1); haystack_casefold = g_utf8_casefold (haystack, -1);
haystack_normalized = g_utf8_normalize (haystack_casefold, -1, haystack_normalized = g_utf8_normalize (haystack_casefold, -1,
G_NORMALIZE_ALL); G_NORMALIZE_NFC);
g_free (haystack_casefold); g_free (haystack_casefold);
needle_casefold = g_utf8_casefold (needle, -1); needle_casefold = g_utf8_casefold (needle, -1);
needle_normalized = g_utf8_normalize (needle_casefold, -1, G_NORMALIZE_ALL); needle_normalized = g_utf8_normalize (needle_casefold, -1, G_NORMALIZE_NFC);
g_free (needle_casefold); g_free (needle_casefold);
p = strstr (haystack_normalized, needle_normalized); p = strstr (haystack_normalized, needle_normalized);

View File

@ -157,7 +157,7 @@
(cons 'N266 #(none "F1040" "Soc. Sec. income" 1 #f "Social Security" ((2020 "6a") (2018 "5a") (1994 "20a") (1988 "21a") (1987 "20a") (1984 "21a")))) (cons 'N266 #(none "F1040" "Soc. Sec. income" 1 #f "Social Security" ((2020 "6a") (2018 "5a") (1994 "20a") (1988 "21a") (1987 "20a") (1984 "21a"))))
(cons 'N483 #(none "F1040" "Soc. Sec. income, spouse" 1 #f "Social Security" ((2020 "6a") (2018 "5a") (1994 "20a") (1988 "21a") (1987 "20a") (1984 "21a")))) (cons 'N483 #(none "F1040" "Soc. Sec. income, spouse" 1 #f "Social Security" ((2020 "6a") (2018 "5a") (1994 "20a") (1988 "21a") (1987 "20a") (1984 "21a"))))
(cons 'N257 #(none "F1040" "Other income-misc." 1 #f "Other income, m" ((2019 "Schedule 1, 8") (2018 "Schedule 1, 21") (1994 "21") (1988 "22") (1987 "21") (1984 "22") (1982 "21") (1981 "20") (1980 "21")))) (cons 'N257 #(none "F1040" "Other income-misc." 1 #f "Other income, m" ((2019 "Schedule 1, 8") (2018 "Schedule 1, 21") (1994 "21") (1988 "22") (1987 "21") (1984 "22") (1982 "21") (1981 "20") (1980 "21"))))
(cons 'N259 #(none "F1040" "Prizes, awards" 1 #f "Prizes, awards" ((2021 "Schedule 1, 8h") (2019 "Schedule 1, 8") (2018 "Schedule 1, 21") (1994 "21") (1988 "22") (1987 "21") (1984 "22") (1982 "21") (1981 "20") (1980 "21")))) (cons 'N259 #(none "F1040" "Prizes, awards" 1 #f "Prizes, awards" ((2022 "Schedule 1, 8i") (2021 "Schedule 1, 8h") (2019 "Schedule 1, 8") (2018 "Schedule 1, 21") (1994 "21") (1988 "22") (1987 "21") (1984 "22") (1982 "21") (1981 "20") (1980 "21"))))
(cons 'N285 #(not-impl "Sched B" "Schedule B" 1 #f "")) (cons 'N285 #(not-impl "Sched B" "Schedule B" 1 #f ""))
(cons 'N287 #(current "Sched B" "Interest income" 3 #f "_IntInc" ((1990 "1") (1982 "2") (1981 "1a") (1980 "1")))) (cons 'N287 #(current "Sched B" "Interest income" 3 #f "_IntInc" ((1990 "1") (1982 "2") (1981 "1a") (1980 "1"))))

View File

@ -11,14 +11,15 @@
# Thomas Jungers <thomasjungers@gmail.com>, 2021. # Thomas Jungers <thomasjungers@gmail.com>, 2021.
# Maxime Leroy <lisacintosh@gmail.com>, 2021. # Maxime Leroy <lisacintosh@gmail.com>, 2021.
# Sébastien Ray <sebastien.ray@normalesup.org>, 2022. # Sébastien Ray <sebastien.ray@normalesup.org>, 2022.
# aleksej0R <omolice@hotmail.fr>, 2022.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: GnuCash 4.8\n" "Project-Id-Version: GnuCash 4.8\n"
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug." "Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug."
"cgi?product=GnuCash&component=Translations\n" "cgi?product=GnuCash&component=Translations\n"
"POT-Creation-Date: 2021-12-05 20:11+0100\n" "POT-Creation-Date: 2021-12-05 20:11+0100\n"
"PO-Revision-Date: 2022-03-09 20:11+0000\n" "PO-Revision-Date: 2022-12-19 23:55+0000\n"
"Last-Translator: Sébastien Ray <sebastien.ray@normalesup.org>\n" "Last-Translator: aleksej0R <omolice@hotmail.fr>\n"
"Language-Team: French <https://hosted.weblate.org/projects/gnucash/glossary/" "Language-Team: French <https://hosted.weblate.org/projects/gnucash/glossary/"
"fr/>\n" "fr/>\n"
"Language: fr\n" "Language: fr\n"
@ -26,7 +27,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.12-dev\n" "X-Generator: Weblate 4.15.1-dev\n"
#. "English Definition (Dear translator: This file will never be visible to the user! It should only serve as a tool for you, the translator. Nothing more.)" #. "English Definition (Dear translator: This file will never be visible to the user! It should only serve as a tool for you, the translator. Nothing more.)"
msgid "Term (Dear translator: This file will never be visible to the user!)" msgid "Term (Dear translator: This file will never be visible to the user!)"
@ -48,7 +49,7 @@ msgstr "code du compte"
#. "the tree view of all accounts" #. "the tree view of all accounts"
msgid "account hierarchy" msgid "account hierarchy"
msgstr "hiérarchie du compte" msgstr "plan de comptes"
#. "-" #. "-"
msgid "account name" msgid "account name"
@ -100,7 +101,7 @@ msgstr "type de compte : fond mutuel"
#. "The right side of the balance sheet in T account form shows the source of funds and contains equity & liability. While not common in english, most languages would translate 'equity & liability' with 'passive'. Complement: Active. See also: Report Form Implementation: https://bugs.gnucash.org/show_bug.cgi?id=421766" #. "The right side of the balance sheet in T account form shows the source of funds and contains equity & liability. While not common in english, most languages would translate 'equity & liability' with 'passive'. Complement: Active. See also: Report Form Implementation: https://bugs.gnucash.org/show_bug.cgi?id=421766"
msgid "account type: Passive" msgid "account type: Passive"
msgstr "passif" msgstr "type de compte : passif"
#. "Group of accounts tracking your success, complement of 'Assets & Liabilities'" #. "Group of accounts tracking your success, complement of 'Assets & Liabilities'"
msgid "account type: Profit & Loss" msgid "account type: Profit & Loss"

View File

@ -1,14 +1,14 @@
# Croatian translations for GnuCash. # Croatian translations for GnuCash.
# Copyright (C) 2019 Free Software Foundation, Inc. # Copyright (C) 2019 Free Software Foundation, Inc.
# This file is distributed under the same license as the GnuCash package. # This file is distributed under the same license as the GnuCash package.
# Milo Ivir <mail@milotype.de>, 2019., 2020, 2021, 2022. # Milo Ivir <mail@milotype.de>, 2019., 2020, 2021, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: GnuCash 4.13-pre1\n" "Project-Id-Version: GnuCash 4.13-pre1\n"
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug." "Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug."
"cgi?product=GnuCash&component=Translations\n" "cgi?product=GnuCash&component=Translations\n"
"POT-Creation-Date: 2022-12-04 19:47-0800\n" "POT-Creation-Date: 2022-12-04 19:47-0800\n"
"PO-Revision-Date: 2022-12-05 14:47+0000\n" "PO-Revision-Date: 2023-01-02 15:48+0000\n"
"Last-Translator: Milo Ivir <mail@milotype.de>\n" "Last-Translator: Milo Ivir <mail@milotype.de>\n"
"Language-Team: Croatian <https://hosted.weblate.org/projects/gnucash/gnucash/" "Language-Team: Croatian <https://hosted.weblate.org/projects/gnucash/gnucash/"
"hr/>\n" "hr/>\n"
@ -16,9 +16,9 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.15-dev\n" "X-Generator: Weblate 4.15.1-dev\n"
#: borrowed/goffice/go-charmap-sel.c:70 #: borrowed/goffice/go-charmap-sel.c:70
msgid "Arabic" msgid "Arabic"
@ -17801,7 +17801,7 @@ msgstr "Sredina"
#: gnucash/gtkbuilder/dialog-print-check.glade:281 #: gnucash/gtkbuilder/dialog-print-check.glade:281
msgid "Quicken/QuickBooks (tm) US-Letter" msgid "Quicken/QuickBooks (tm) US-Letter"
msgstr "Quicken/QuickBooks (tm) US-Letter" msgstr "Quicken/QuickBooks (tm), u formatu US-Letter"
#: gnucash/gtkbuilder/dialog-print-check.glade:284 #: gnucash/gtkbuilder/dialog-print-check.glade:284
msgid "Deluxe(tm) Personal Checks US-Letter" msgid "Deluxe(tm) Personal Checks US-Letter"

371
po/hu.po

File diff suppressed because it is too large Load Diff

View File

@ -9,10 +9,10 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: GnuCash 4.13-pre1\n" "Project-Id-Version: GnuCash 4.13-pre1\n"
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug."
"product=GnuCash&component=Translations\n" "cgi?product=GnuCash&component=Translations\n"
"POT-Creation-Date: 2022-12-04 19:47-0800\n" "POT-Creation-Date: 2022-12-04 19:47-0800\n"
"PO-Revision-Date: 2022-11-20 11:48+0000\n" "PO-Revision-Date: 2022-12-31 21:51+0000\n"
"Last-Translator: Kaligula <kaligula.dev@gmail.com>\n" "Last-Translator: Kaligula <kaligula.dev@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/gnucash/gnucash/" "Language-Team: Polish <https://hosted.weblate.org/projects/gnucash/gnucash/"
"pl/>\n" "pl/>\n"
@ -22,7 +22,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n" "|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.15-dev\n" "X-Generator: Weblate 4.15.1-dev\n"
"X-Poedit-Bookmarks: 2255,-1,-1,-1,-1,-1,-1,-1,-1,-1\n" "X-Poedit-Bookmarks: 2255,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
#: borrowed/goffice/go-charmap-sel.c:70 #: borrowed/goffice/go-charmap-sel.c:70
@ -8179,7 +8179,7 @@ msgstr "W trakcie przetwarzania '%s' wystąpił błąd"
#: gnucash/gnome-utils/gnc-autoclear.c:100 #: gnucash/gnome-utils/gnc-autoclear.c:100
msgid "Account is already at Auto-Clear Balance." msgid "Account is already at Auto-Clear Balance."
msgstr "Konto ma już bilans Auto-przeglądania." msgstr "Bilans przejrzanych transakcji już się zgadza."
#: gnucash/gnome-utils/gnc-autoclear.c:146 #: gnucash/gnome-utils/gnc-autoclear.c:146
msgid "Too many uncleared splits" msgid "Too many uncleared splits"
@ -16481,7 +16481,7 @@ msgid ""
"Select \"U+C\" to update a matching transaction and mark it as cleared (c)." "Select \"U+C\" to update a matching transaction and mark it as cleared (c)."
msgstr "" msgstr ""
"Wybierz \"A+P\", aby aktualizować pasującą transakcję i oznaczyć jako " "Wybierz \"A+P\", aby aktualizować pasującą transakcję i oznaczyć jako "
"przejrzeaną (p)." "przejrzaną (p)."
#: gnucash/gtkbuilder/dialog-import.glade:706 #: gnucash/gtkbuilder/dialog-import.glade:706
msgid "Select \"C\" to mark a matching transaction as cleared (c)." msgid "Select \"C\" to mark a matching transaction as cleared (c)."
@ -16489,9 +16489,7 @@ msgstr "Wybierz \"P\", aby oznaczyć pasującą transakcję jako przejrzaną (p)
#: gnucash/gtkbuilder/dialog-import.glade:718 #: gnucash/gtkbuilder/dialog-import.glade:718
msgid "Select neither to skip the transaction (it won't be imported at all)." msgid "Select neither to skip the transaction (it won't be imported at all)."
msgstr "" msgstr "Aby pominąć transakcję (nie importować) pozostaw wszystkie pola puste."
"Wybierz, aby transakcja została pominięta (nie będzie wtedy w ogóle "
"importowana)."
#: gnucash/gtkbuilder/dialog-import.glade:729 #: gnucash/gtkbuilder/dialog-import.glade:729
msgid "(none)" msgid "(none)"

View File

@ -11,14 +11,14 @@
# LL Magical <lolayami2004@gmail.com>, 2020. # LL Magical <lolayami2004@gmail.com>, 2020.
# Fábio Rodrigues Ribeiro <farribeiro@gmail.com>, 2021. # Fábio Rodrigues Ribeiro <farribeiro@gmail.com>, 2021.
# José Lemos Neto <lemosjosex@protonmail.com>, 2021. # José Lemos Neto <lemosjosex@protonmail.com>, 2021.
# Wellington Terumi Uemura <wellingtonuemura@gmail.com>, 2021, 2022. # Wellington Terumi Uemura <wellingtonuemura@gmail.com>, 2021, 2022, 2023.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: GnuCash 4.13-pre1\n" "Project-Id-Version: GnuCash 4.13-pre1\n"
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug."
"product=GnuCash&component=Translations\n" "cgi?product=GnuCash&component=Translations\n"
"POT-Creation-Date: 2022-12-04 19:47-0800\n" "POT-Creation-Date: 2022-12-04 19:47-0800\n"
"PO-Revision-Date: 2022-09-13 10:21+0000\n" "PO-Revision-Date: 2023-01-02 15:48+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n" "Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"gnucash/gnucash/pt_BR/>\n" "gnucash/gnucash/pt_BR/>\n"
@ -27,7 +27,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.14.1-dev\n" "X-Generator: Weblate 4.15.1-dev\n"
#: borrowed/goffice/go-charmap-sel.c:70 #: borrowed/goffice/go-charmap-sel.c:70
msgid "Arabic" msgid "Arabic"
@ -9728,7 +9728,7 @@ msgstr "Nome da conta"
#: gnucash/gnome-utils/gnc-tree-view-split-reg.c:2918 #: gnucash/gnome-utils/gnc-tree-view-split-reg.c:2918
#: gnucash/gtkbuilder/dialog-price.glade:580 #: gnucash/gtkbuilder/dialog-price.glade:580
msgid "Commodity" msgid "Commodity"
msgstr "Commodity" msgstr "Mercadoria"
#: gnucash/gnome-utils/gnc-tree-view-account.c:823 #: gnucash/gnome-utils/gnc-tree-view-account.c:823
#: gnucash/import-export/csv-exp/csv-tree-export.c:156 #: gnucash/import-export/csv-exp/csv-tree-export.c:156
@ -13727,7 +13727,7 @@ msgstr "Assistente de importação de transação"
#: gnucash/gtkbuilder/assistant-csv-trans-import.glade:520 #: gnucash/gtkbuilder/assistant-csv-trans-import.glade:520
msgid "Multi-split" msgid "Multi-split"
msgstr "Multi-split" msgstr "Multi-divisão"
#: gnucash/gtkbuilder/assistant-csv-trans-import.glade:524 #: gnucash/gtkbuilder/assistant-csv-trans-import.glade:524
msgid "" msgid ""
@ -14823,7 +14823,7 @@ msgstr "_Quantia"
#: gnucash/gtkbuilder/dialog-print-check.glade:1129 #: gnucash/gtkbuilder/dialog-print-check.glade:1129
#: gnucash/gtkbuilder/gnc-plugin-page-register.glade:957 #: gnucash/gtkbuilder/gnc-plugin-page-register.glade:957
msgid "_Memo" msgid "_Memo"
msgstr "_Memo" msgstr "_Memorando"
#. Default memo text for the remains of a stock split #. Default memo text for the remains of a stock split
#: gnucash/gtkbuilder/assistant-stock-split.glade:309 #: gnucash/gtkbuilder/assistant-stock-split.glade:309

View File

@ -17,7 +17,7 @@
# TianXing_Yi <ytx.cash@gmail.com>, 2021. # TianXing_Yi <ytx.cash@gmail.com>, 2021.
# cjh <cjh@cjh0613.com>, 2021. # cjh <cjh@cjh0613.com>, 2021.
# Eric <spice2wolf@gmail.com>, 2021. # Eric <spice2wolf@gmail.com>, 2021.
# J0kWang <lianjiefly@gmail.com>, 2021, 2022. # J0kWang <lianjiefly@gmail.com>, 2021, 2022, 2023.
# YTX <ytx.cash@gmail.com>, 2021, 2022. # YTX <ytx.cash@gmail.com>, 2021, 2022.
# 李元基 <lovedebushiu@qq.com>, 2022. # 李元基 <lovedebushiu@qq.com>, 2022.
# Eric <alchemillatruth@purelymail.com>, 2022. # Eric <alchemillatruth@purelymail.com>, 2022.
@ -31,8 +31,8 @@ msgstr ""
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug." "Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug."
"cgi?product=GnuCash&component=Translations\n" "cgi?product=GnuCash&component=Translations\n"
"POT-Creation-Date: 2022-12-04 19:47-0800\n" "POT-Creation-Date: 2022-12-04 19:47-0800\n"
"PO-Revision-Date: 2022-12-17 16:20+0000\n" "PO-Revision-Date: 2023-01-02 04:51+0000\n"
"Last-Translator: 帅是我2 <a1173522112@163.com>\n" "Last-Translator: J0kWang <lianjiefly@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"gnucash/gnucash/zh_Hans/>\n" "gnucash/gnucash/zh_Hans/>\n"
"Language: zh_CN\n" "Language: zh_CN\n"
@ -18623,6 +18623,8 @@ msgid ""
"See <a href=\"https://wiki.gnucash.org/wiki/AqBanking\">https://wiki.gnucash." "See <a href=\"https://wiki.gnucash.org/wiki/AqBanking\">https://wiki.gnucash."
"org/wiki/AqBanking</a> for more details" "org/wiki/AqBanking</a> for more details"
msgstr "" msgstr ""
"查看 <a href=\"https://wiki.gnucash.org/wiki/AqBanking\">https://wiki.gnucash"
".org/wiki/AqBanking</a> 更多详情"
#: gnucash/import-export/aqb/assistant-ab-initial.glade:78 #: gnucash/import-export/aqb/assistant-ab-initial.glade:78
msgid "" msgid ""
@ -18630,7 +18632,8 @@ msgid ""
"Banking server. You should not rely on time-critical transfers through " "Banking server. You should not rely on time-critical transfers through "
"Online Banking, because sometimes the bank does not give you correct " "Online Banking, because sometimes the bank does not give you correct "
"feedback when a transfer is rejected." "feedback when a transfer is rejected."
msgstr "" msgstr "注意:没有任何保障。有些银行的服务器设备很差。你不应该通过网上银行来进行紧急"
"转账,因为当你的转账被拒绝时这些银行是不会给你正确的反馈的。"
#: gnucash/import-export/aqb/assistant-ab-initial.glade:89 #: gnucash/import-export/aqb/assistant-ab-initial.glade:89
msgid "Initial Online Banking Setup" msgid "Initial Online Banking Setup"
@ -18657,6 +18660,8 @@ msgid ""
"<a href=\"https://aquamaniac.de/rdm/projects/aqbanking/wiki/Bugreports/" "<a href=\"https://aquamaniac.de/rdm/projects/aqbanking/wiki/Bugreports/"
"\">https://aquamaniac.de/rdm/projects/aqbanking/wiki/Bugreports/</a>" "\">https://aquamaniac.de/rdm/projects/aqbanking/wiki/Bugreports/</a>"
msgstr "" msgstr ""
"<a href=\"https://aquamaniac.de/rdm/projects/aqbanking/wiki/Bugreports/\""
">https://aquamaniac.de/rdm/projects/aqbanking/wiki/Bugreports/</a>"
#: gnucash/import-export/aqb/assistant-ab-initial.glade:157 #: gnucash/import-export/aqb/assistant-ab-initial.glade:157
msgid "" msgid ""
@ -25227,7 +25232,7 @@ msgstr "百分比图"
msgid "" msgid ""
"Display account contributions as a percentage of the total value for the " "Display account contributions as a percentage of the total value for the "
"period." "period."
msgstr "" msgstr "显示账户缴款占本期总金额的百分比。"
#: gnucash/report/reports/standard/category-barchart.scm:292 #: gnucash/report/reports/standard/category-barchart.scm:292
msgid "Invalid dates" msgid "Invalid dates"