mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-11-22 00:47:42 -06:00
Merge branch 'maint'
This commit is contained in:
commit
506a1b3c5e
@ -2844,7 +2844,7 @@ gboolean gnc_tree_view_search_compare (GtkTreeModel *model, gint column,
|
||||
gchar *case_normalized_key = NULL;
|
||||
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)
|
||||
case_normalized_key = g_utf8_casefold (normalized_key, -1);
|
||||
if (case_normalized_key)
|
||||
@ -2873,7 +2873,7 @@ gboolean gnc_tree_view_search_compare (GtkTreeModel *model, gint column,
|
||||
if (!str)
|
||||
continue;
|
||||
|
||||
normalized_string = g_utf8_normalize (str, -1, G_NORMALIZE_ALL);
|
||||
normalized_string = g_utf8_normalize (str, -1, G_NORMALIZE_NFC);
|
||||
if (normalized_string)
|
||||
case_normalized_string = g_utf8_casefold (normalized_string, -1);
|
||||
if (case_normalized_string&&NULL!=strstr(case_normalized_string,case_normalized_key))
|
||||
|
@ -1005,23 +1005,10 @@ forward_page_func (gint current_page, gpointer user_data)
|
||||
}
|
||||
|
||||
static void
|
||||
create_split (Transaction *trans, FieldMask splitfield,
|
||||
const gchar *action, Account *account,
|
||||
create_split (Transaction *trans, const gchar *action, Account *account,
|
||||
AccountVec& account_commits, GtkWidget *memo_entry,
|
||||
gnc_numeric amount_numeric, gnc_numeric value_numeric,
|
||||
bool skip_if_zero, StockTransactionInfo *info)
|
||||
gnc_numeric amount_numeric, gnc_numeric value_numeric)
|
||||
{
|
||||
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 ());
|
||||
xaccSplitSetParent (split, trans);
|
||||
xaccAccountBeginEdit (account);
|
||||
@ -1096,55 +1083,68 @@ stock_assistant_finish (GtkAssistant *assistant, gpointer user_data)
|
||||
gae_amount (info->stock_amount_edit) : gnc_numeric_zero ();
|
||||
auto stock_value = info->txn_type->stock_value != FieldMask::DISABLED ?
|
||||
gae_amount (info->stock_value_edit) : gnc_numeric_zero ();
|
||||
create_split (trans, info->txn_type->stock_amount | info->txn_type->stock_value,
|
||||
NC_ ("Stock Assistant: Action field", "Stock"),
|
||||
if (info->txn_type->input_new_balance)
|
||||
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,
|
||||
stock_amount, stock_value, false, info);
|
||||
stock_amount, stock_value);
|
||||
|
||||
if (info->txn_type->cash_value != FieldMask::DISABLED)
|
||||
{
|
||||
auto cash = gae_amount (info->cash_value);
|
||||
create_split (trans, info->txn_type->cash_value,
|
||||
NC_ ("Stock Assistant: Action field", "Cash"),
|
||||
if (info->txn_type->cash_value & FieldMask::ENABLED_CREDIT)
|
||||
cash = gnc_numeric_neg (cash);
|
||||
|
||||
create_split (trans, NC_ ("Stock Assistant: Action field", "Cash"),
|
||||
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)
|
||||
{
|
||||
auto fees = gae_amount (info->fees_value);
|
||||
auto capitalize = gtk_toggle_button_get_active
|
||||
(GTK_TOGGLE_BUTTON (info->capitalize_fees_checkbox));
|
||||
create_split (trans, info->txn_type->fees_value,
|
||||
NC_ ("Stock Assistant: Action field", "Fees"),
|
||||
capitalize ? info->acct : gas_account (info->fees_account),
|
||||
account_commits, info->fees_memo_edit,
|
||||
capitalize ? gnc_numeric_zero () : fees, fees, true, info);
|
||||
if (!gnc_numeric_zero_p (fees))
|
||||
{
|
||||
auto capitalize = gtk_toggle_button_get_active
|
||||
(GTK_TOGGLE_BUTTON (info->capitalize_fees_checkbox));
|
||||
|
||||
create_split (trans, NC_ ("Stock Assistant: Action field", "Fees"),
|
||||
capitalize ? info->acct : gas_account (info->fees_account),
|
||||
account_commits, info->fees_memo_edit,
|
||||
capitalize ? gnc_numeric_zero () : fees, fees);
|
||||
}
|
||||
}
|
||||
|
||||
if (info->txn_type->dividend_value != FieldMask::DISABLED)
|
||||
{
|
||||
auto dividend = gae_amount (info->dividend_value);
|
||||
create_split (trans, info->txn_type->dividend_value,
|
||||
NC_ ("Stock Assistant: Action field", "Dividend"),
|
||||
if (info->txn_type->dividend_value & FieldMask::ENABLED_CREDIT)
|
||||
dividend = gnc_numeric_neg (dividend);
|
||||
|
||||
create_split (trans, NC_ ("Stock Assistant: Action field", "Dividend"),
|
||||
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)
|
||||
{
|
||||
auto capgains = gae_amount (info->capgains_value);
|
||||
create_split (trans, info->txn_type->capgains_value,
|
||||
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"),
|
||||
create_split (trans, NC_ ("Stock Assistant: Action field", "Capital Gain"),
|
||||
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);
|
||||
|
@ -411,6 +411,7 @@ gnc_plugin_page_report_load_uri (GncPluginPage *page)
|
||||
{
|
||||
GncPluginPageReport *report;
|
||||
GncPluginPageReportPrivate *priv;
|
||||
GncPluginPage *weak_page = page;
|
||||
URLType type;
|
||||
char * id_name;
|
||||
char * child_name;
|
||||
@ -434,6 +435,7 @@ gnc_plugin_page_report_load_uri (GncPluginPage *page)
|
||||
g_free(id_name);
|
||||
g_free(child_name);
|
||||
|
||||
g_object_add_weak_pointer(G_OBJECT(page), (gpointer*)(&weak_page));
|
||||
gtk_widget_show_all( GTK_WIDGET(priv->container) );
|
||||
|
||||
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);
|
||||
g_free(url_location);
|
||||
|
||||
gnc_plugin_page_report_set_progressbar( page, FALSE );
|
||||
if (weak_page)
|
||||
{
|
||||
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
|
||||
gnc_window_set_progressbar_window( nullptr );
|
||||
|
@ -85,7 +85,7 @@ Click on "Next" to proceed or "Cancel" to Abort Import.</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<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 name="wrap">True</property>
|
||||
</object>
|
||||
|
@ -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="can-focus">False</property>
|
||||
<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 name="wrap">True</property>
|
||||
</object>
|
||||
|
@ -465,7 +465,7 @@ handle_embedded_object( GncHtmlWebkit* self, gchar* html_str )
|
||||
* widget.
|
||||
********************************************************************/
|
||||
|
||||
static void
|
||||
static gboolean
|
||||
load_to_stream( GncHtmlWebkit* self, URLType type,
|
||||
const gchar* location, const gchar* label )
|
||||
{
|
||||
@ -485,30 +485,45 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
|
||||
stream_handler = g_hash_table_lookup( gnc_html_stream_handlers, type );
|
||||
if ( stream_handler )
|
||||
{
|
||||
gboolean ok = stream_handler( location, &fdata, &fdata_len );
|
||||
GncHtml *weak_html = GNC_HTML(self);
|
||||
gboolean ok;
|
||||
|
||||
if ( ok )
|
||||
{
|
||||
fdata = fdata ? fdata : g_strdup( "" );
|
||||
g_object_add_weak_pointer(G_OBJECT(self), (gpointer *)(&weak_html));
|
||||
|
||||
// Until webkitgtk supports download requests, look for "<object classid="
|
||||
// indicating the beginning of an embedded graph. If found, handle it
|
||||
if ( g_strstr_len( fdata, -1, "<object classid=" ) != NULL )
|
||||
{
|
||||
gchar* new_fdata;
|
||||
new_fdata = handle_embedded_object( self, fdata );
|
||||
g_free( fdata );
|
||||
fdata = new_fdata;
|
||||
}
|
||||
ok = stream_handler(location, &fdata, &fdata_len);
|
||||
|
||||
// Save a copy for export purposes
|
||||
if ( priv->html_string != NULL )
|
||||
{
|
||||
g_free( priv->html_string );
|
||||
}
|
||||
priv->html_string = g_strdup( fdata );
|
||||
impl_webkit_show_data( GNC_HTML(self), fdata, strlen(fdata) );
|
||||
// webkit_web_view_load_html_string( priv->web_view, fdata, BASE_URI_NAME );
|
||||
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("");
|
||||
|
||||
// Until webkitgtk supports download requests, look for "<object
|
||||
// classid=" indicating the beginning of an embedded graph. If
|
||||
// found, handle it
|
||||
if (g_strstr_len(fdata, -1, "<object classid=") != NULL) {
|
||||
gchar *new_fdata;
|
||||
new_fdata = handle_embedded_object(self, fdata);
|
||||
g_free(fdata);
|
||||
fdata = new_fdata;
|
||||
}
|
||||
|
||||
// Save a copy for export purposes
|
||||
if (priv->html_string != NULL) {
|
||||
g_free(priv->html_string);
|
||||
}
|
||||
priv->html_string = g_strdup(fdata);
|
||||
impl_webkit_show_data(GNC_HTML(self), fdata, strlen(fdata));
|
||||
// webkit_web_view_load_html_string( priv->web_view,
|
||||
// fdata, BASE_URI_NAME );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -529,7 +544,7 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
|
||||
/* 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 );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#if 0
|
||||
@ -831,6 +847,7 @@ impl_webkit_show_url( GncHtml* self, URLType type,
|
||||
GncHTMLUrlCB url_handler;
|
||||
gboolean new_window;
|
||||
GncHtmlWebkitPrivate* priv;
|
||||
gboolean stream_loaded = FALSE;
|
||||
|
||||
g_return_if_fail( self != NULL );
|
||||
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",
|
||||
priv->base.base_location ? priv->base.base_location : "(null)" );
|
||||
|
||||
load_to_stream( GNC_HTML_WEBKIT(self), result.url_type,
|
||||
new_location, new_label );
|
||||
stream_loaded = load_to_stream( GNC_HTML_WEBKIT(self),
|
||||
result.url_type,
|
||||
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,
|
||||
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 */
|
||||
gnc_html_history_append( priv->base.history,
|
||||
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 );
|
||||
@ -998,7 +1017,7 @@ impl_webkit_show_url( GncHtml* self, URLType 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 );
|
||||
}
|
||||
|
@ -466,7 +466,7 @@ handle_embedded_object( GncHtmlWebkit* self, gchar* html_str )
|
||||
* widget.
|
||||
********************************************************************/
|
||||
|
||||
static void
|
||||
static gboolean
|
||||
load_to_stream( GncHtmlWebkit* self, URLType type,
|
||||
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)",
|
||||
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 )
|
||||
{
|
||||
@ -486,7 +486,23 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
|
||||
stream_handler = g_hash_table_lookup( gnc_html_stream_handlers, type );
|
||||
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 )
|
||||
{
|
||||
@ -533,7 +549,7 @@ load_to_stream( GncHtmlWebkit* self, URLType type,
|
||||
}
|
||||
/* 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 );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
perform_navigation_policy (WebKitWebView *web_view,
|
||||
WebKitNavigationPolicyDecision *decision,
|
||||
@ -782,6 +800,7 @@ impl_webkit_show_url( GncHtml* self, URLType type,
|
||||
GncHTMLUrlCB url_handler;
|
||||
gboolean new_window;
|
||||
GncHtmlWebkitPrivate* priv;
|
||||
gboolean stream_loaded = FALSE;
|
||||
|
||||
g_return_if_fail( self != NULL );
|
||||
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",
|
||||
priv->base.base_location ? priv->base.base_location : "(null)" );
|
||||
|
||||
load_to_stream( GNC_HTML_WEBKIT(self), result.url_type,
|
||||
new_location, new_label );
|
||||
stream_loaded = load_to_stream( GNC_HTML_WEBKIT(self),
|
||||
result.url_type,
|
||||
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,
|
||||
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 */
|
||||
gnc_html_history_append( priv->base.history,
|
||||
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 );
|
||||
@ -948,7 +969,7 @@ impl_webkit_show_url( GncHtml* self, URLType 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 );
|
||||
}
|
||||
|
@ -870,8 +870,8 @@ maybe_append_string (const char* match_string, const char* 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);
|
||||
norm_match_string = g_utf8_normalize (match_string, -1, G_NORMALIZE_NFC);
|
||||
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) ||
|
||||
!strstr (norm_match_string, norm_imp_string))
|
||||
|
@ -986,7 +986,7 @@ static void populate_list (gpointer key, gpointer value, GtkListStore *list)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
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;
|
||||
gtk_list_store_append (list, &iter);
|
||||
gtk_list_store_set (list, &iter,
|
||||
|
@ -605,7 +605,7 @@ gnc_combo_cell_type_ahead_search (const gchar* newval,
|
||||
GRegex* regex0 = g_regex_new (escaped_sep, 0, 0, NULL);
|
||||
char* rep_str = g_regex_replace_literal (regex0, escaped_newval, -1, 0,
|
||||
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);
|
||||
|
||||
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;
|
||||
gtk_tree_model_get (GTK_TREE_MODEL (full_store), &iter, 0,
|
||||
&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))
|
||||
{
|
||||
|
@ -61,11 +61,11 @@ qof_utf8_substr_nocase (const gchar *haystack, const gchar *needle)
|
||||
|
||||
haystack_casefold = g_utf8_casefold (haystack, -1);
|
||||
haystack_normalized = g_utf8_normalize (haystack_casefold, -1,
|
||||
G_NORMALIZE_ALL);
|
||||
G_NORMALIZE_NFC);
|
||||
g_free (haystack_casefold);
|
||||
|
||||
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);
|
||||
|
||||
p = strstr (haystack_normalized, needle_normalized);
|
||||
|
@ -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 '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 '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 'N287 #(current "Sched B" "Interest income" 3 #f "_IntInc" ((1990 "1") (1982 "2") (1981 "1a") (1980 "1"))))
|
||||
|
@ -11,14 +11,15 @@
|
||||
# Thomas Jungers <thomasjungers@gmail.com>, 2021.
|
||||
# Maxime Leroy <lisacintosh@gmail.com>, 2021.
|
||||
# Sébastien Ray <sebastien.ray@normalesup.org>, 2022.
|
||||
# aleksej0R <omolice@hotmail.fr>, 2022.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GnuCash 4.8\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug."
|
||||
"cgi?product=GnuCash&component=Translations\n"
|
||||
"POT-Creation-Date: 2021-12-05 20:11+0100\n"
|
||||
"PO-Revision-Date: 2022-03-09 20:11+0000\n"
|
||||
"Last-Translator: Sébastien Ray <sebastien.ray@normalesup.org>\n"
|
||||
"PO-Revision-Date: 2022-12-19 23:55+0000\n"
|
||||
"Last-Translator: aleksej0R <omolice@hotmail.fr>\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/gnucash/glossary/"
|
||||
"fr/>\n"
|
||||
"Language: fr\n"
|
||||
@ -26,7 +27,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\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.)"
|
||||
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"
|
||||
msgid "account hierarchy"
|
||||
msgstr "hiérarchie du compte"
|
||||
msgstr "plan de comptes"
|
||||
|
||||
#. "-"
|
||||
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"
|
||||
msgid "account type: Passive"
|
||||
msgstr "passif"
|
||||
msgstr "type de compte : passif"
|
||||
|
||||
#. "Group of accounts tracking your success, complement of 'Assets & Liabilities'"
|
||||
msgid "account type: Profit & Loss"
|
||||
|
12
po/hr.po
12
po/hr.po
@ -1,14 +1,14 @@
|
||||
# Croatian translations for GnuCash.
|
||||
# Copyright (C) 2019 Free Software Foundation, Inc.
|
||||
# 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 ""
|
||||
msgstr ""
|
||||
"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-12-05 14:47+0000\n"
|
||||
"PO-Revision-Date: 2023-01-02 15:48+0000\n"
|
||||
"Last-Translator: Milo Ivir <mail@milotype.de>\n"
|
||||
"Language-Team: Croatian <https://hosted.weblate.org/projects/gnucash/gnucash/"
|
||||
"hr/>\n"
|
||||
@ -16,9 +16,9 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.15-dev\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.15.1-dev\n"
|
||||
|
||||
#: borrowed/goffice/go-charmap-sel.c:70
|
||||
msgid "Arabic"
|
||||
@ -17801,7 +17801,7 @@ msgstr "Sredina"
|
||||
|
||||
#: gnucash/gtkbuilder/dialog-print-check.glade:281
|
||||
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
|
||||
msgid "Deluxe(tm) Personal Checks US-Letter"
|
||||
|
16
po/pl.po
16
po/pl.po
@ -9,10 +9,10 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GnuCash 4.13-pre1\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug.cgi?"
|
||||
"product=GnuCash&component=Translations\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-20 11:48+0000\n"
|
||||
"PO-Revision-Date: 2022-12-31 21:51+0000\n"
|
||||
"Last-Translator: Kaligula <kaligula.dev@gmail.com>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/gnucash/gnucash/"
|
||||
"pl/>\n"
|
||||
@ -22,7 +22,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && 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"
|
||||
"X-Poedit-Bookmarks: 2255,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
|
||||
|
||||
#: 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
|
||||
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
|
||||
msgid "Too many uncleared splits"
|
||||
@ -16481,7 +16481,7 @@ msgid ""
|
||||
"Select \"U+C\" to update a matching transaction and mark it as cleared (c)."
|
||||
msgstr ""
|
||||
"Wybierz \"A+P\", aby aktualizować pasującą transakcję i oznaczyć jako "
|
||||
"przejrzeaną (p)."
|
||||
"przejrzaną (p)."
|
||||
|
||||
#: gnucash/gtkbuilder/dialog-import.glade:706
|
||||
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
|
||||
msgid "Select neither to skip the transaction (it won't be imported at all)."
|
||||
msgstr ""
|
||||
"Wybierz, aby transakcja została pominięta (nie będzie wtedy w ogóle "
|
||||
"importowana)."
|
||||
msgstr "Aby pominąć transakcję (nie importować) pozostaw wszystkie pola puste."
|
||||
|
||||
#: gnucash/gtkbuilder/dialog-import.glade:729
|
||||
msgid "(none)"
|
||||
|
16
po/pt_BR.po
16
po/pt_BR.po
@ -11,14 +11,14 @@
|
||||
# LL Magical <lolayami2004@gmail.com>, 2020.
|
||||
# Fábio Rodrigues Ribeiro <farribeiro@gmail.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 ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GnuCash 4.13-pre1\n"
|
||||
"Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug.cgi?"
|
||||
"product=GnuCash&component=Translations\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-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"
|
||||
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
|
||||
"gnucash/gnucash/pt_BR/>\n"
|
||||
@ -27,7 +27,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\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
|
||||
msgid "Arabic"
|
||||
@ -9728,7 +9728,7 @@ msgstr "Nome da conta"
|
||||
#: gnucash/gnome-utils/gnc-tree-view-split-reg.c:2918
|
||||
#: gnucash/gtkbuilder/dialog-price.glade:580
|
||||
msgid "Commodity"
|
||||
msgstr "Commodity"
|
||||
msgstr "Mercadoria"
|
||||
|
||||
#: gnucash/gnome-utils/gnc-tree-view-account.c:823
|
||||
#: 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
|
||||
msgid "Multi-split"
|
||||
msgstr "Multi-split"
|
||||
msgstr "Multi-divisão"
|
||||
|
||||
#: gnucash/gtkbuilder/assistant-csv-trans-import.glade:524
|
||||
msgid ""
|
||||
@ -14823,7 +14823,7 @@ msgstr "_Quantia"
|
||||
#: gnucash/gtkbuilder/dialog-print-check.glade:1129
|
||||
#: gnucash/gtkbuilder/gnc-plugin-page-register.glade:957
|
||||
msgid "_Memo"
|
||||
msgstr "_Memo"
|
||||
msgstr "_Memorando"
|
||||
|
||||
#. Default memo text for the remains of a stock split
|
||||
#: gnucash/gtkbuilder/assistant-stock-split.glade:309
|
||||
|
15
po/zh_CN.po
15
po/zh_CN.po
@ -17,7 +17,7 @@
|
||||
# TianXing_Yi <ytx.cash@gmail.com>, 2021.
|
||||
# cjh <cjh@cjh0613.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.
|
||||
# 李元基 <lovedebushiu@qq.com>, 2022.
|
||||
# Eric <alchemillatruth@purelymail.com>, 2022.
|
||||
@ -31,8 +31,8 @@ msgstr ""
|
||||
"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-12-17 16:20+0000\n"
|
||||
"Last-Translator: 帅是我2 <a1173522112@163.com>\n"
|
||||
"PO-Revision-Date: 2023-01-02 04:51+0000\n"
|
||||
"Last-Translator: J0kWang <lianjiefly@gmail.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
|
||||
"gnucash/gnucash/zh_Hans/>\n"
|
||||
"Language: zh_CN\n"
|
||||
@ -18623,6 +18623,8 @@ msgid ""
|
||||
"See <a href=\"https://wiki.gnucash.org/wiki/AqBanking\">https://wiki.gnucash."
|
||||
"org/wiki/AqBanking</a> for more details"
|
||||
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
|
||||
msgid ""
|
||||
@ -18630,7 +18632,8 @@ msgid ""
|
||||
"Banking server. You should not rely on time-critical transfers through "
|
||||
"Online Banking, because sometimes the bank does not give you correct "
|
||||
"feedback when a transfer is rejected."
|
||||
msgstr ""
|
||||
msgstr "注意:没有任何保障。有些银行的服务器设备很差。你不应该通过网上银行来进行紧急"
|
||||
"转账,因为当你的转账被拒绝时这些银行是不会给你正确的反馈的。"
|
||||
|
||||
#: gnucash/import-export/aqb/assistant-ab-initial.glade:89
|
||||
msgid "Initial Online Banking Setup"
|
||||
@ -18657,6 +18660,8 @@ msgid ""
|
||||
"<a href=\"https://aquamaniac.de/rdm/projects/aqbanking/wiki/Bugreports/"
|
||||
"\">https://aquamaniac.de/rdm/projects/aqbanking/wiki/Bugreports/</a>"
|
||||
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
|
||||
msgid ""
|
||||
@ -25227,7 +25232,7 @@ msgstr "百分比图"
|
||||
msgid ""
|
||||
"Display account contributions as a percentage of the total value for the "
|
||||
"period."
|
||||
msgstr ""
|
||||
msgstr "显示账户缴款占本期总金额的百分比。"
|
||||
|
||||
#: gnucash/report/reports/standard/category-barchart.scm:292
|
||||
msgid "Invalid dates"
|
||||
|
Loading…
Reference in New Issue
Block a user