diff --git a/public/v2/i18n/bg_BG.json b/public/v2/i18n/bg_BG.json new file mode 100644 index 0000000000..3473c4d296 --- /dev/null +++ b/public/v2/i18n/bg_BG.json @@ -0,0 +1,27 @@ +{ + "bg_BG": { + "config": { + "html_language": "bg" + }, + "firefly": { + "spent": "\u041f\u043e\u0445\u0430\u0440\u0447\u0435\u043d\u0438", + "left": "\u041e\u0441\u0442\u0430\u043d\u0430\u043b\u0438", + "paid": "\u041f\u043b\u0430\u0442\u0435\u043d\u0438", + "unpaid": "\u041d\u0435\u043f\u043b\u0430\u0442\u0435\u043d\u0438", + "default_group_title_name_plain": "ungrouped", + "overspent": "\u041f\u0440\u0435\u0440\u0430\u0437\u0445\u043e\u0434", + "money_flowing_in": "\u0412\u0445\u043e\u0434\u044f\u0449\u0438", + "money_flowing_out": "\u0418\u0437\u0445\u043e\u0434\u044f\u0449\u0438", + "category": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "\u0411\u044e\u0434\u0436\u0435\u0442" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/ca_ES.json b/public/v2/i18n/ca_ES.json new file mode 100644 index 0000000000..fec29adc07 --- /dev/null +++ b/public/v2/i18n/ca_ES.json @@ -0,0 +1,27 @@ +{ + "ca_ES": { + "config": { + "html_language": "ca" + }, + "firefly": { + "spent": "Gastat", + "left": "Queda", + "paid": "Pagat", + "unpaid": "Pendent de pagament", + "default_group_title_name_plain": "ungrouped", + "overspent": "Gastat de m\u00e9s", + "money_flowing_in": "Entrant", + "money_flowing_out": "Eixint", + "category": "Categoria", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Pressupost" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/cs_CZ.json b/public/v2/i18n/cs_CZ.json new file mode 100644 index 0000000000..5d98a89d64 --- /dev/null +++ b/public/v2/i18n/cs_CZ.json @@ -0,0 +1,27 @@ +{ + "cs_CZ": { + "config": { + "html_language": "cs" + }, + "firefly": { + "spent": "Utraceno", + "left": "Zb\u00fdv\u00e1", + "paid": "Zaplaceno", + "unpaid": "Nezaplaceno", + "default_group_title_name_plain": "ungrouped", + "overspent": "P\u0159ekro\u010deny v\u00fddaje", + "money_flowing_in": "Vstup", + "money_flowing_out": "V\u00fdstup", + "category": "Kategorie", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Rozpo\u010det" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/da_DK.json b/public/v2/i18n/da_DK.json new file mode 100644 index 0000000000..3c9cab15fc --- /dev/null +++ b/public/v2/i18n/da_DK.json @@ -0,0 +1,27 @@ +{ + "da_DK": { + "config": { + "html_language": "da" + }, + "firefly": { + "spent": "Spent", + "left": "Left", + "paid": "Paid", + "unpaid": "Ubetalt", + "default_group_title_name_plain": "ungrouped", + "overspent": "Overspent", + "money_flowing_in": "In", + "money_flowing_out": "Ud", + "category": "Kategori", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Budget" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/de_DE.json b/public/v2/i18n/de_DE.json new file mode 100644 index 0000000000..a157aec2bd --- /dev/null +++ b/public/v2/i18n/de_DE.json @@ -0,0 +1,27 @@ +{ + "de_DE": { + "config": { + "html_language": "de" + }, + "firefly": { + "spent": "Ausgegeben", + "left": "\u00dcbrig", + "paid": "Bezahlt", + "unpaid": "Unbezahlt", + "default_group_title_name_plain": "ungrouped", + "overspent": "Zuviel ausgegeben", + "money_flowing_in": "Eingehend", + "money_flowing_out": "Ausgehend", + "category": "Kategorie", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Budget" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/el_GR.json b/public/v2/i18n/el_GR.json new file mode 100644 index 0000000000..fa2b69064d --- /dev/null +++ b/public/v2/i18n/el_GR.json @@ -0,0 +1,27 @@ +{ + "el_GR": { + "config": { + "html_language": "el" + }, + "firefly": { + "spent": "\u0394\u03b1\u03c0\u03b1\u03bd\u03ae\u03b8\u03b7\u03ba\u03b1\u03bd", + "left": "\u0391\u03c0\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5\u03bd", + "paid": "\u03a0\u03bb\u03b7\u03c1\u03c9\u03bc\u03ad\u03bd\u03bf", + "unpaid": "\u0391\u03c0\u03bb\u03ae\u03c1\u03c9\u03c4\u03bf", + "default_group_title_name_plain": "ungrouped", + "overspent": "\u03a5\u03c0\u03ad\u03c1\u03b2\u03b1\u03c3\u03b7 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03ce\u03bd", + "money_flowing_in": "\u0395\u03b9\u03c3\u03c1\u03bf\u03ad\u03c2", + "money_flowing_out": "\u0395\u03ba\u03c1\u03bf\u03ad\u03c2", + "category": "\u039a\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "\u03a0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc\u03c2" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/en_GB.json b/public/v2/i18n/en_GB.json new file mode 100644 index 0000000000..ea571b466a --- /dev/null +++ b/public/v2/i18n/en_GB.json @@ -0,0 +1,27 @@ +{ + "en_GB": { + "config": { + "html_language": "en-gb" + }, + "firefly": { + "spent": "Spent", + "left": "Left", + "paid": "Paid", + "unpaid": "Unpaid", + "default_group_title_name_plain": "ungrouped", + "overspent": "Overspent", + "money_flowing_in": "In", + "money_flowing_out": "Out", + "category": "Category", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Budget" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/en_US.json b/public/v2/i18n/en_US.json new file mode 100644 index 0000000000..10ffc249b9 --- /dev/null +++ b/public/v2/i18n/en_US.json @@ -0,0 +1,27 @@ +{ + "en_US": { + "config": { + "html_language": "en" + }, + "firefly": { + "spent": "Spent", + "left": "Left", + "paid": "Paid", + "unpaid": "Unpaid", + "default_group_title_name_plain": "ungrouped", + "overspent": "Overspent", + "money_flowing_in": "In", + "money_flowing_out": "Out", + "category": "Category", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Budget" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/es_ES.json b/public/v2/i18n/es_ES.json new file mode 100644 index 0000000000..0051fc7010 --- /dev/null +++ b/public/v2/i18n/es_ES.json @@ -0,0 +1,27 @@ +{ + "es_ES": { + "config": { + "html_language": "es" + }, + "firefly": { + "spent": "Gastado", + "left": "Disponible", + "paid": "Pagado", + "unpaid": "No pagado", + "default_group_title_name_plain": "ungrouped", + "overspent": "Sobrepasadas", + "money_flowing_in": "Entrada", + "money_flowing_out": "Salida", + "category": "Categoria", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Presupuesto" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/fi_FI.json b/public/v2/i18n/fi_FI.json new file mode 100644 index 0000000000..3eca574738 --- /dev/null +++ b/public/v2/i18n/fi_FI.json @@ -0,0 +1,27 @@ +{ + "fi_FI": { + "config": { + "html_language": "fi" + }, + "firefly": { + "spent": "K\u00e4ytetty", + "left": "J\u00e4ljell\u00e4", + "paid": "Maksettu", + "unpaid": "Maksamatta", + "default_group_title_name_plain": "ungrouped", + "overspent": "Varojen ylitys", + "money_flowing_in": "Sis\u00e4\u00e4n", + "money_flowing_out": "Ulos", + "category": "Kategoria", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Budjetti" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/fr_FR.json b/public/v2/i18n/fr_FR.json new file mode 100644 index 0000000000..07e002370f --- /dev/null +++ b/public/v2/i18n/fr_FR.json @@ -0,0 +1,27 @@ +{ + "fr_FR": { + "config": { + "html_language": "fr" + }, + "firefly": { + "spent": "D\u00e9pens\u00e9", + "left": "Reste", + "paid": "Pay\u00e9", + "unpaid": "Impay\u00e9", + "default_group_title_name_plain": "ungrouped", + "overspent": "Trop d\u00e9pens\u00e9", + "money_flowing_in": "Entr\u00e9e", + "money_flowing_out": "Sortie", + "category": "Cat\u00e9gorie", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Budget" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/hu_HU.json b/public/v2/i18n/hu_HU.json new file mode 100644 index 0000000000..4c73971915 --- /dev/null +++ b/public/v2/i18n/hu_HU.json @@ -0,0 +1,27 @@ +{ + "hu_HU": { + "config": { + "html_language": "hu" + }, + "firefly": { + "spent": "Elk\u00f6lt\u00f6tt", + "left": "Maradv\u00e1ny", + "paid": "Kifizetve", + "unpaid": "Nincs fizetve", + "default_group_title_name_plain": "ungrouped", + "overspent": "T\u00falk\u00f6lt\u00f6tt", + "money_flowing_in": "Be", + "money_flowing_out": "Ki", + "category": "Kateg\u00f3ria", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "K\u00f6lts\u00e9gkeret" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/id_ID.json b/public/v2/i18n/id_ID.json new file mode 100644 index 0000000000..f58cc2df56 --- /dev/null +++ b/public/v2/i18n/id_ID.json @@ -0,0 +1,27 @@ +{ + "id_ID": { + "config": { + "html_language": "id" + }, + "firefly": { + "spent": "Menghabiskan", + "left": "Kiri", + "paid": "Dibayar", + "unpaid": "Tidak dibayar", + "default_group_title_name_plain": "ungrouped", + "overspent": "Overspent", + "money_flowing_in": "Dalam", + "money_flowing_out": "Keluar", + "category": "Kategori", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Anggaran" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/it_IT.json b/public/v2/i18n/it_IT.json new file mode 100644 index 0000000000..a65a05af09 --- /dev/null +++ b/public/v2/i18n/it_IT.json @@ -0,0 +1,27 @@ +{ + "it_IT": { + "config": { + "html_language": "it" + }, + "firefly": { + "spent": "Speso", + "left": "Resto", + "paid": "Pagati", + "unpaid": "Da pagare", + "default_group_title_name_plain": "ungrouped", + "overspent": "Speso troppo", + "money_flowing_in": "Entrate", + "money_flowing_out": "Uscite", + "category": "Categoria", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Budget" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/ja_JP.json b/public/v2/i18n/ja_JP.json new file mode 100644 index 0000000000..150cd71c7b --- /dev/null +++ b/public/v2/i18n/ja_JP.json @@ -0,0 +1,27 @@ +{ + "ja_JP": { + "config": { + "html_language": "ja" + }, + "firefly": { + "spent": "\u652f\u51fa", + "left": "\u6b8b\u308a", + "paid": "\u652f\u6255\u3044\u6e08\u307f", + "unpaid": "\u672a\u6255\u3044", + "default_group_title_name_plain": "ungrouped", + "overspent": "\u4f7f\u3044\u3059\u304e", + "money_flowing_in": "\u5165", + "money_flowing_out": "\u51fa", + "category": "\u30ab\u30c6\u30b4\u30ea", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "\u4e88\u7b97" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/ko_KR.json b/public/v2/i18n/ko_KR.json new file mode 100644 index 0000000000..939bccf917 --- /dev/null +++ b/public/v2/i18n/ko_KR.json @@ -0,0 +1,27 @@ +{ + "ko_KR": { + "config": { + "html_language": "ko" + }, + "firefly": { + "spent": "\uc9c0\ucd9c", + "left": "\ub0a8\uc74c", + "paid": "\uc9c0\ubd88\ub428", + "unpaid": "\ubbf8\uc9c0\ubd88", + "default_group_title_name_plain": "ungrouped", + "overspent": "\ucd08\uacfc \uc9c0\ucd9c", + "money_flowing_in": "\ub4e4\uc5b4\uc634", + "money_flowing_out": "\ub098\uac10", + "category": "\uce74\ud14c\uace0\ub9ac", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "\uc608\uc0b0" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/nb_NO.json b/public/v2/i18n/nb_NO.json new file mode 100644 index 0000000000..09c7216d2f --- /dev/null +++ b/public/v2/i18n/nb_NO.json @@ -0,0 +1,27 @@ +{ + "nb_NO": { + "config": { + "html_language": "nb" + }, + "firefly": { + "spent": "Brukt", + "left": "Gjenv\u00e6rende", + "paid": "Betalt", + "unpaid": "Ikke betalt", + "default_group_title_name_plain": "ungrouped", + "overspent": "Overforbruk", + "money_flowing_in": "Inn", + "money_flowing_out": "Ut", + "category": "Kategori", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Busjett" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/nl_NL.json b/public/v2/i18n/nl_NL.json new file mode 100644 index 0000000000..f2bdf6ed4a --- /dev/null +++ b/public/v2/i18n/nl_NL.json @@ -0,0 +1,27 @@ +{ + "nl_NL": { + "config": { + "html_language": "nl" + }, + "firefly": { + "spent": "Uitgegeven", + "left": "Over", + "paid": "Betaald", + "unpaid": "Niet betaald", + "default_group_title_name_plain": "ungrouped", + "overspent": "Teveel uitgegeven", + "money_flowing_in": "In", + "money_flowing_out": "Uit", + "category": "Categorie", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Budget" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/nn_NO.json b/public/v2/i18n/nn_NO.json new file mode 100644 index 0000000000..31b8c5a89b --- /dev/null +++ b/public/v2/i18n/nn_NO.json @@ -0,0 +1,27 @@ +{ + "nn_NO": { + "config": { + "html_language": "nn" + }, + "firefly": { + "spent": "Brukt", + "left": "Gjenverande", + "paid": "Betalt", + "unpaid": "Ikke betalt", + "default_group_title_name_plain": "ungrouped", + "overspent": "Overforbruk", + "money_flowing_in": "Inn", + "money_flowing_out": "Ut", + "category": "Kategori", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Busjett" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/pl_PL.json b/public/v2/i18n/pl_PL.json new file mode 100644 index 0000000000..bf992f3047 --- /dev/null +++ b/public/v2/i18n/pl_PL.json @@ -0,0 +1,27 @@ +{ + "pl_PL": { + "config": { + "html_language": "pl" + }, + "firefly": { + "spent": "Wydano", + "left": "Pozosta\u0142o", + "paid": "Zap\u0142acone", + "unpaid": "Niezap\u0142acone", + "default_group_title_name_plain": "ungrouped", + "overspent": "Przep\u0142acono", + "money_flowing_in": "Przychodz\u0105ce", + "money_flowing_out": "Wychodz\u0105ce", + "category": "Kategoria", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Bud\u017cet" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/pt_BR.json b/public/v2/i18n/pt_BR.json new file mode 100644 index 0000000000..7f3d45317b --- /dev/null +++ b/public/v2/i18n/pt_BR.json @@ -0,0 +1,27 @@ +{ + "pt_BR": { + "config": { + "html_language": "pt-br" + }, + "firefly": { + "spent": "Gasto", + "left": "Restante", + "paid": "Pago", + "unpaid": "N\u00e3o pago", + "default_group_title_name_plain": "ungrouped", + "overspent": "Gasto excedido", + "money_flowing_in": "Entrada", + "money_flowing_out": "Sa\u00edda", + "category": "Categoria", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Or\u00e7amento" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/pt_PT.json b/public/v2/i18n/pt_PT.json new file mode 100644 index 0000000000..7114c6539e --- /dev/null +++ b/public/v2/i18n/pt_PT.json @@ -0,0 +1,27 @@ +{ + "pt_PT": { + "config": { + "html_language": "pt" + }, + "firefly": { + "spent": "Gasto", + "left": "Em falta", + "paid": "Pago", + "unpaid": "Por pagar", + "default_group_title_name_plain": "ungrouped", + "overspent": "Gasto excedido", + "money_flowing_in": "Dentro", + "money_flowing_out": "Fora", + "category": "Categoria", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Or\u00e7amento" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/ro_RO.json b/public/v2/i18n/ro_RO.json new file mode 100644 index 0000000000..aeeebec98d --- /dev/null +++ b/public/v2/i18n/ro_RO.json @@ -0,0 +1,27 @@ +{ + "ro_RO": { + "config": { + "html_language": "ro" + }, + "firefly": { + "spent": "Cheltuit", + "left": "R\u0103mas", + "paid": "Pl\u0103tit", + "unpaid": "Nepl\u0103tit", + "default_group_title_name_plain": "ungrouped", + "overspent": "Dep\u0103\u0219ire de buget", + "money_flowing_in": "\u00cen", + "money_flowing_out": "Afar\u0103", + "category": "Categorie", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Buget" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/ru_RU.json b/public/v2/i18n/ru_RU.json new file mode 100644 index 0000000000..7d51e08f42 --- /dev/null +++ b/public/v2/i18n/ru_RU.json @@ -0,0 +1,27 @@ +{ + "ru_RU": { + "config": { + "html_language": "ru" + }, + "firefly": { + "spent": "\u0420\u0430\u0441\u0445\u043e\u0434", + "left": "\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c", + "paid": "\u041e\u043f\u043b\u0430\u0447\u0435\u043d\u043e", + "unpaid": "\u041d\u0435 \u043e\u043f\u043b\u0430\u0447\u0435\u043d\u043e", + "default_group_title_name_plain": "ungrouped", + "overspent": "\u041f\u0435\u0440\u0435\u0440\u0430\u0441\u0445\u043e\u0434", + "money_flowing_in": "\u0412", + "money_flowing_out": "\u0418\u0437", + "category": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "\u0411\u044e\u0434\u0436\u0435\u0442" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/sk_SK.json b/public/v2/i18n/sk_SK.json new file mode 100644 index 0000000000..75cae447a6 --- /dev/null +++ b/public/v2/i18n/sk_SK.json @@ -0,0 +1,27 @@ +{ + "sk_SK": { + "config": { + "html_language": "sk" + }, + "firefly": { + "spent": "Utraten\u00e9", + "left": "Zost\u00e1va", + "paid": "Uhraden\u00e9", + "unpaid": "Neuhraden\u00e9", + "default_group_title_name_plain": "ungrouped", + "overspent": "Prekro\u010den\u00e9 v\u00fddaje", + "money_flowing_in": "Prich\u00e1dzaj\u00face", + "money_flowing_out": "Odch\u00e1dzaj\u00face", + "category": "Kateg\u00f3ria", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Rozpo\u010det" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/sl_SI.json b/public/v2/i18n/sl_SI.json new file mode 100644 index 0000000000..11a9e4d90f --- /dev/null +++ b/public/v2/i18n/sl_SI.json @@ -0,0 +1,27 @@ +{ + "sl_SI": { + "config": { + "html_language": "sl" + }, + "firefly": { + "spent": "Porabljeno", + "left": "Preostalo", + "paid": "Pla\u010dano", + "unpaid": "Nepla\u010dano", + "default_group_title_name_plain": "ungrouped", + "overspent": "Preve\u010d porabljeno", + "money_flowing_in": "Na", + "money_flowing_out": "Iz", + "category": "Kategorija", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Prora\u010dun" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/sv_SE.json b/public/v2/i18n/sv_SE.json new file mode 100644 index 0000000000..71fb0a3fe0 --- /dev/null +++ b/public/v2/i18n/sv_SE.json @@ -0,0 +1,27 @@ +{ + "sv_SE": { + "config": { + "html_language": "sv" + }, + "firefly": { + "spent": "Spenderat", + "left": "\u00c5terst\u00e5r", + "paid": "Betald", + "unpaid": "Obetald", + "default_group_title_name_plain": "ungrouped", + "overspent": "\u00d6veranstr\u00e4ngd", + "money_flowing_in": "In", + "money_flowing_out": "Ut", + "category": "Kategori", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Budget" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/tr_TR.json b/public/v2/i18n/tr_TR.json new file mode 100644 index 0000000000..d8939c7286 --- /dev/null +++ b/public/v2/i18n/tr_TR.json @@ -0,0 +1,27 @@ +{ + "tr_TR": { + "config": { + "html_language": "tr" + }, + "firefly": { + "spent": "Harcanan", + "left": "Ayr\u0131ld\u0131", + "paid": "\u00d6dendi", + "unpaid": "\u00d6denmedi", + "default_group_title_name_plain": "ungrouped", + "overspent": "Fazladan", + "money_flowing_in": "\u0130\u00e7eri", + "money_flowing_out": "D\u0131\u015far\u0131", + "category": "Kategori", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "B\u00fct\u00e7e" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/uk_UA.json b/public/v2/i18n/uk_UA.json new file mode 100644 index 0000000000..a43ac5c08b --- /dev/null +++ b/public/v2/i18n/uk_UA.json @@ -0,0 +1,27 @@ +{ + "uk_UA": { + "config": { + "html_language": "uk" + }, + "firefly": { + "spent": "Spent", + "left": "Left", + "paid": "Paid", + "unpaid": "Unpaid", + "default_group_title_name_plain": "ungrouped", + "overspent": "Overspent", + "money_flowing_in": "In", + "money_flowing_out": "Out", + "category": "Category", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Budget" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/vi_VN.json b/public/v2/i18n/vi_VN.json new file mode 100644 index 0000000000..54a60de84a --- /dev/null +++ b/public/v2/i18n/vi_VN.json @@ -0,0 +1,27 @@ +{ + "vi_VN": { + "config": { + "html_language": "vi" + }, + "firefly": { + "spent": "\u0110\u00e3 chi", + "left": "C\u00f2n l\u1ea1i", + "paid": "\u0110\u00e3 thanh to\u00e1n", + "unpaid": "Ch\u01b0a thanh to\u00e1n", + "default_group_title_name_plain": "ungrouped", + "overspent": "Qu\u00e1 h\u1ea1n", + "money_flowing_in": "V\u00e0o", + "money_flowing_out": "Ra", + "category": "Danh m\u1ee5c", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "Ng\u00e2n s\u00e1ch" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/zh_CN.json b/public/v2/i18n/zh_CN.json new file mode 100644 index 0000000000..9107d9c3d2 --- /dev/null +++ b/public/v2/i18n/zh_CN.json @@ -0,0 +1,27 @@ +{ + "zh_CN": { + "config": { + "html_language": "zh-cn" + }, + "firefly": { + "spent": "\u652f\u51fa", + "left": "\u5269\u4f59", + "paid": "\u5df2\u4ed8\u6b3e", + "unpaid": "\u672a\u4ed8\u6b3e", + "default_group_title_name_plain": "ungrouped", + "overspent": "\u8d85\u652f", + "money_flowing_in": "\u6d41\u5165", + "money_flowing_out": "\u6d41\u51fa", + "category": "\u5206\u7c7b", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "\u9884\u7b97" + } + } +} \ No newline at end of file diff --git a/public/v2/i18n/zh_TW.json b/public/v2/i18n/zh_TW.json new file mode 100644 index 0000000000..33b53d1940 --- /dev/null +++ b/public/v2/i18n/zh_TW.json @@ -0,0 +1,27 @@ +{ + "zh_TW": { + "config": { + "html_language": "zh-tw" + }, + "firefly": { + "spent": "\u652f\u51fa", + "left": "\u5269\u9918", + "paid": "\u5df2\u4ed8\u6b3e", + "unpaid": "\u672a\u4ed8\u6b3e", + "default_group_title_name_plain": "ungrouped", + "overspent": "\u8d85\u652f", + "money_flowing_in": "\u5728", + "money_flowing_out": "\u5916", + "category": "\u5206\u985e", + "unknown_category_plain": "No category", + "all_money": "All your money", + "unknown_source_plain": "Unknown source account", + "unknown_dest_plain": "Unknown destination account", + "unknown_any_plain": "Unknown account", + "unknown_budget_plain": "No budget", + "expense_account": "Expense account", + "revenue_account": "Revenue account", + "budget": "\u9810\u7b97" + } + } +} \ No newline at end of file diff --git a/resources/assets/v2/pages/dashboard/accounts.js b/resources/assets/v2/pages/dashboard/accounts.js index 03b876cf67..520da9d979 100644 --- a/resources/assets/v2/pages/dashboard/accounts.js +++ b/resources/assets/v2/pages/dashboard/accounts.js @@ -32,6 +32,7 @@ let currencies = []; let chart = null; let chartData = null; let afterPromises = false; + export default () => ({ loading: false, loadingAccounts: false, @@ -208,10 +209,11 @@ export default () => ({ init() { // console.log('accounts init'); - Promise.all([getVariable('viewRange', '1M'), getVariable('autoConversion', false),]).then((values) => { + Promise.all([getVariable('viewRange', '1M'), getVariable('autoConversion', false), getVariable('language', 'en-US')]).then((values) => { //console.log('accounts after promises'); this.autoConversion = values[1]; afterPromises = true; + // main dashboard chart: this.loadChart(); this.loadAccounts(); diff --git a/resources/assets/v2/pages/dashboard/budgets.js b/resources/assets/v2/pages/dashboard/budgets.js index bfb274ad44..8c06dc3ff2 100644 --- a/resources/assets/v2/pages/dashboard/budgets.js +++ b/resources/assets/v2/pages/dashboard/budgets.js @@ -23,22 +23,15 @@ import {getDefaultChartSettings} from "../../support/default-chart-settings.js"; import formatMoney from "../../util/format-money.js"; import {Chart} from 'chart.js'; import {I18n} from "i18n-js"; +import {loadTranslations} from "../../support/load-translations.js"; let currencies = []; let chart = null; let chartData = null; let afterPromises = false; -let language; let i18n; // for translating items in the chart. -async function loadTranslations(i18n, locale) { - const response = await fetch(`./v2/i18n/${locale}.json`); - const translations = await response.json(); - - i18n.store(translations); -} - export default () => ({ loading: false, @@ -93,24 +86,23 @@ export default () => ({ } } }; - options.data = { labels: [], datasets: [ { - label: 'TODO spent', + label: i18n.t('firefly.spent'), data: [], borderWidth: 1, stack: 1 }, { - label: 'TODO left', + label: i18n.t('firefly.left'), data: [], borderWidth: 1, stack: 1 }, { - label: 'TODO overspent', + label: i18n.t('firefly.overspent'), data: [], borderWidth: 1, stack: 1 @@ -143,6 +135,19 @@ export default () => ({ } } } + // the currency format callback for the Y axis is AlWAYS based on whatever the first currency is. + + // start + options.options.scales = { + y: { + ticks: { + callback: function (context) { + return formatMoney(context, currencies[0]); + } + } + } + }; + // end return options; }, @@ -152,11 +157,8 @@ export default () => ({ Promise.all([getVariable('autoConversion', false), getVariable('language', 'en-US')]).then((values) => { i18n = new I18n(); + i18n.locale = values[1]; loadTranslations(i18n, values[1]); - // load translations. - //i18n = require('../../lang/' + values[1] + '.js').default; - //import lang from '../../lang/' + values[1] + '.js'; - //language = values[1]; this.autoConversion = values[0]; afterPromises = true; diff --git a/resources/assets/v2/pages/dashboard/categories.js b/resources/assets/v2/pages/dashboard/categories.js index f1165ef0f1..8b6677a81f 100644 --- a/resources/assets/v2/pages/dashboard/categories.js +++ b/resources/assets/v2/pages/dashboard/categories.js @@ -21,6 +21,7 @@ import {getVariable} from "../../store/get-variable.js"; import Dashboard from "../../api/v2/chart/category/dashboard.js"; import {getDefaultChartSettings} from "../../support/default-chart-settings.js"; import {Chart} from "chart.js"; +import formatMoney from "../../util/format-money.js"; let currencies = []; let chart = null; @@ -48,6 +49,7 @@ export default () => ({ if (!series.hasOwnProperty(code)) { series[code] = { name: code, + yAxisID: '', data: {}, }; currencies.push(code); @@ -58,6 +60,7 @@ export default () => ({ // loop data again to add amounts to each series. for (const i in data) { if (data.hasOwnProperty(i)) { + let yAxis = 'y'; let current = data[i]; let code = current.currency_code; if (this.autoConversion) { @@ -71,8 +74,10 @@ export default () => ({ if (code === ii) { // this series' currency matches this column's currency. amount = parseFloat(current.amount); + yAxis = 'y' + current.currency_code; if (this.autoConversion) { amount = parseFloat(current.native_amount); + yAxis = 'y' + current.native_code; } } if (series[ii].data.hasOwnProperty(current.label)) { @@ -95,22 +100,39 @@ export default () => ({ } } // loop the series and create ChartJS-compatible data sets. + let count = 0; for (const i in series) { + let yAxisID = 'y' + i; let dataset = { label: i, + currency_code: i, + yAxisID: yAxisID, data: [], } for (const ii in series[i].data) { dataset.data.push(series[i].data[ii]); } options.data.datasets.push(dataset); + if (!options.options.scales.hasOwnProperty(yAxisID)) { + options.options.scales[yAxisID] = { + beginAtZero: true, + type: 'linear', + position: 1 === count ? 'right' : 'left', + ticks: { + callback: function (value, index, values) { + return formatMoney(value, i); + } + } + }; + count++; + } } - return options; }, drawChart(options) { if (null !== chart) { - chart.data.datasets = options.data.datasets; + chart.options = options.options; + chart.data = options.data; chart.update(); return; } diff --git a/resources/assets/v2/pages/dashboard/piggies.js b/resources/assets/v2/pages/dashboard/piggies.js index 7d88d8b03a..acec32b42f 100644 --- a/resources/assets/v2/pages/dashboard/piggies.js +++ b/resources/assets/v2/pages/dashboard/piggies.js @@ -19,10 +19,12 @@ */ import {getVariable} from "../../store/get-variable.js"; import Get from "../../api/v2/model/piggy-bank/get.js"; -import {Chart} from 'chart.js'; +import {I18n} from "i18n-js"; +import {loadTranslations} from "../../support/load-translations.js"; let apiData = {}; let afterPromises = false; +let i18n; export default () => ({ loading: false, @@ -62,7 +64,7 @@ export default () => ({ if (0 === current.attributes.percentage) { continue; } - let groupName = current.object_group_title ?? '(TODO ungrouped)'; + let groupName = current.object_group_title ?? i18n.t('firefly.default_group_title_name_plain'); if (!dataSet.hasOwnProperty(groupName)) { dataSet[groupName] = { id: current.object_group_id ?? 0, @@ -108,7 +110,12 @@ export default () => ({ init() { // console.log('piggies init'); apiData = []; - Promise.all([getVariable('autoConversion', false)]).then((values) => { + Promise.all([getVariable('autoConversion', false), getVariable('language', 'en-US')]).then((values) => { + + i18n = new I18n(); + i18n.locale = values[1]; + loadTranslations(i18n, values[1]); + // console.log('piggies after promises'); afterPromises = true; this.autoConversion = values[0]; diff --git a/resources/assets/v2/pages/dashboard/sankey.js b/resources/assets/v2/pages/dashboard/sankey.js index a5116c4cf3..413b891031 100644 --- a/resources/assets/v2/pages/dashboard/sankey.js +++ b/resources/assets/v2/pages/dashboard/sankey.js @@ -22,50 +22,96 @@ import Get from "../../api/v2/model/transaction/get.js"; import {getDefaultChartSettings} from "../../support/default-chart-settings.js"; import {Chart} from 'chart.js'; import {Flow, SankeyController} from 'chartjs-chart-sankey'; +import {loadTranslations} from "../../support/load-translations.js"; +import {I18n} from "i18n-js"; Chart.register({SankeyController, Flow}); - +let i18n; let currencies = []; let afterPromises = false; let chart = null; let transactions = []; +let translations = { + category: null, + unknown_category: null, + in: null, + out: null, + // TODO + unknown_source: null, + unknown_dest: null, + unknown_account: null, + expense_account: null, + revenue_account: null, + budget: null, + unknown_budget: null, + all_money: null, +}; + +const colors = { + a: 'red', + b: 'green', + c: 'blue', + d: 'gray' +}; + +const getColor = function (key) { + if (key.includes(translations.revenue_account)) { + return 'forestgreen'; + } + if (key.includes('(' + translations.in + ',')) { + return 'green'; + } + + if (key.includes(translations.budget) || key.includes(translations.unknown_budget)) { + return 'Orchid'; + } + if (key.includes('(' + translations.out + ',')) { + return 'MediumOrchid'; + } + + if (key.includes(translations.all_money)) { + return 'blue'; + } + return 'red'; +} // little helper function getObjectName(type, name, direction, code) { + // category 4x if ('category' === type && null !== name && 'in' === direction) { - return 'Category "' + name + '" (in ' + code + ')'; + return translations.category + ' "' + name + '" (' + translations.in + ', ' + code + ')'; } if ('category' === type && null === name && 'in' === direction) { - return 'Unknown category (in ' + code + ')'; + return translations.unknown_category + ' (' + translations.in + ', ' + code + ')'; } if ('category' === type && null !== name && 'out' === direction) { - return 'Category "' + name + '" (out ' + code + ')'; + return translations.category + ' "' + name + '" (' + translations.out + ', ' + code + ')'; } if ('category' === type && null === name && 'out' === direction) { - return 'Unknown category (out ' + code + ')'; + return translations.unknown_category + ' (' + translations.out + ', ' + code + ')'; } // account 4x if ('account' === type && null === name && 'in' === direction) { - return 'Unknown source account ' + code + ''; + return translations.unknown_source + ' (' + code + ')'; } if ('account' === type && null !== name && 'in' === direction) { - return name + ' (in ' + code + ')'; + return translations.revenue_account + '"' + name + '" (' + code + ')'; } if ('account' === type && null === name && 'out' === direction) { - return 'Unknown destination account ' + code + ''; + return translations.unknown_dest + ' (' + code + ')'; } if ('account' === type && null !== name && 'out' === direction) { - return name + ' (out ' + code + ')'; + return translations.expense_account + ' "' + name + '" (' + code + ')'; } // budget 2x - if ('budget' === type && null !== name && 'out' === direction) { - return 'Budget "' + name + '" (out ' + code + ')'; + if ('budget' === type && null !== name) { + return translations.budget + ' "' + name + '" (' + code + ')'; } - if ('budget' === type && null === name && 'out' === direction) { - return 'Unknown budget (' + code + ')'; + if ('budget' === type && null === name) { + return translations.unknown_budget + ' (' + code + ')'; } console.error('Cannot handle: type:"' + type + '", dir: "' + direction + '"'); } @@ -73,14 +119,14 @@ function getObjectName(type, name, direction, code) { function getLabelName(type, name, code) { // category if ('category' === type && null !== name) { - return 'Category "' + name + '" (' + code + ')'; + return translations.category + ' "' + name + '" (' + code + ')'; } if ('category' === type && null === name) { - return 'Unknown category (' + code + ')'; + return translations.unknown_category + ' (' + code + ')'; } // account if ('account' === type && null === name) { - return 'Unknown account (' + code + ')'; + return translations.unknown_account + ' (' + code + ')'; } if ('account' === type && null !== name) { return name + ' (' + code + ')'; @@ -88,19 +134,19 @@ function getLabelName(type, name, code) { // budget 2x if ('budget' === type && null !== name) { - return 'Budget "' + name + '" (' + code + ')'; + return translations.budget + ' "' + name + '" (' + code + ')'; } if ('budget' === type && null === name) { - return 'Unknown budget (' + code + ')'; + return translations.unknown_budget + ' (' + code + ')'; } console.error('Cannot handle: type:"' + type + '"'); } + export default () => ({ loading: false, autoConversion: false, - sankeyGrouping: 'account', - generateOptions(data) { + generateOptions() { let options = getDefaultChartSettings('sankey'); // reset currencies @@ -108,7 +154,6 @@ export default () => ({ // variables collected for the sankey chart: let amounts = {}; - let bigBox = 'TODO All money'; let labels = {}; for (let i in transactions) { if (transactions.hasOwnProperty(i)) { @@ -143,11 +188,11 @@ export default () => ({ amounts[flowKey].amount += amount; // nr 2 - flowKey = category + '-' + bigBox + '-' + currencyCode; + flowKey = category + '-' + translations.all_money + '-' + currencyCode; if (!amounts.hasOwnProperty(flowKey)) { amounts[flowKey] = { from: category, - to: bigBox, + to: translations.all_money + ' (' + currencyCode + ')', amount: 0 }; } @@ -163,11 +208,11 @@ export default () => ({ // 1. let budget = getObjectName('budget', transaction.budget_name, 'out', currencyCode); labels[budget] = getLabelName('budget', transaction.budget_name, currencyCode); - flowKey = bigBox + '-' + budget + '-' + currencyCode; + flowKey = translations.all_money + '-' + budget + '-' + currencyCode; if (!amounts.hasOwnProperty(flowKey)) { amounts[flowKey] = { - from: bigBox, + from: translations.all_money + ' (' + currencyCode + ')', to: budget, amount: 0 }; @@ -213,27 +258,11 @@ export default () => ({ { label: 'My sankey', data: [], - //colorFrom: (c) => getColor(c.dataset.data[c.dataIndex].from), - //colorTo: (c) => getColor(c.dataset.data[c.dataIndex].to), + colorFrom: (c) => getColor(c.dataset.data[c.dataIndex].from), + colorTo: (c) => getColor(c.dataset.data[c.dataIndex].to), colorMode: 'gradient', // or 'from' or 'to' labels: labels, - /* optional labels */ - // labels: { - // a: 'Label A', - // b: 'Label B', - // c: 'Label C', - // d: 'Label D' - // }, - /* optional priority */ - // priority: { - // b: 1, - // d: 0 - // }, - /* optional column overrides */ - // column: { - // d: 1 - // }, - size: 'max', // or 'min' if flow overlap is preferred + size: 'min', // or 'min' if flow overlap is preferred }; for (let i in amounts) { if (amounts.hasOwnProperty(i)) { @@ -300,11 +329,30 @@ export default () => ({ init() { // console.log('sankey init'); transactions = []; - Promise.all([getVariable('autoConversion', false), getVariable('sankeyGrouping', 'account')]).then((values) => { + Promise.all([getVariable('autoConversion', false), getVariable('language', 'en-US')]).then((values) => { + + i18n = new I18n(); + i18n.locale = values[1]; + loadTranslations(i18n, values[1]).then(() => { + // some translations: + translations.all_money = i18n.t('firefly.all_money'); + translations.category = i18n.t('firefly.category'); + translations.in = i18n.t('firefly.money_flowing_in'); + translations.out = i18n.t('firefly.money_flowing_out'); + translations.unknown_category = i18n.t('firefly.unknown_category_plain'); + translations.unknown_source = i18n.t('firefly.unknown_source_plain'); + translations.unknown_dest = i18n.t('firefly.unknown_dest_plain'); + translations.unknown_account = i18n.t('firefly.unknown_any_plain'); + translations.unknown_budget = i18n.t('firefly.unknown_budget_plain'); + translations.expense_account = i18n.t('firefly.expense_account'); + translations.revenue_account = i18n.t('firefly.revenue_account'); + translations.budget = i18n.t('firefly.budget'); + }); + + // console.log('sankey after promises'); afterPromises = true; this.autoConversion = values[0]; - this.sankeyGrouping = values[1]; this.loadChart(); }); window.store.observe('end', () => { diff --git a/resources/assets/v2/pages/dashboard/subscriptions.js b/resources/assets/v2/pages/dashboard/subscriptions.js index 482c029f2b..4d4c06e104 100644 --- a/resources/assets/v2/pages/dashboard/subscriptions.js +++ b/resources/assets/v2/pages/dashboard/subscriptions.js @@ -22,11 +22,13 @@ import Get from "../../api/v2/model/subscription/get.js"; import {getDefaultChartSettings} from "../../support/default-chart-settings.js"; import {format} from "date-fns"; import {Chart} from 'chart.js'; +import {I18n} from "i18n-js"; +import {loadTranslations} from "../../support/load-translations.js"; let chart = null; let chartData = null; let afterPromises = false; - +let i18n; // for translating items in the chart. export default () => ({ loading: false, autoConversion: false, @@ -71,7 +73,7 @@ export default () => ({ generateOptions(data) { let options = getDefaultChartSettings('pie'); // console.log(data); - options.data.labels = ['TODO paid', 'TODO unpaid']; + options.data.labels = [i18n.t('firefly.paid'), i18n.t('firefly.unpaid')]; options.data.datasets = []; let collection = {}; for (let i in data.paid) { @@ -129,10 +131,16 @@ export default () => ({ init() { // console.log('subscriptions init'); - Promise.all([getVariable('autoConversion', false),]).then((values) => { + Promise.all([getVariable('autoConversion', false), getVariable('language', 'en-US')]).then((values) => { // console.log('subscriptions after promises'); this.autoConversion = values[0]; afterPromises = true; + + i18n = new I18n(); + i18n.locale = values[1]; + loadTranslations(i18n, values[1]); + + if (false === this.loading) { this.loadChart(); } diff --git a/resources/assets/v2/support/default-chart-settings.js b/resources/assets/v2/support/default-chart-settings.js index 54fd0918f9..4ac38854e9 100644 --- a/resources/assets/v2/support/default-chart-settings.js +++ b/resources/assets/v2/support/default-chart-settings.js @@ -26,7 +26,7 @@ function getDefaultChartSettings(type) { type: 'sankey', data: { datasets: [], - } + }, } } if ('pie' === type) { @@ -45,12 +45,19 @@ function getDefaultChartSettings(type) { datasets: [], }, options: { + plugins: { + tooltip: { + callbacks: { + label: function (tooltipItem) { + // console.log(tooltipItem); + let currency = tooltipItem.dataset.currency_code; + return formatMoney(tooltipItem.raw, currency); + }, + }, + }, + }, maintainAspectRatio: false, - scales: { - y: { - beginAtZero: true - } - } + scales: {} }, }; } @@ -61,7 +68,7 @@ function getDefaultChartSettings(type) { tooltip: { callbacks: { label: function (tooltipItem) { - console.log(tooltipItem); + // console.log(tooltipItem); let currency = tooltipItem.dataset.currency_code; return formatMoney(tooltipItem.raw, currency); }, diff --git a/resources/assets/v2/support/load-translations.js b/resources/assets/v2/support/load-translations.js new file mode 100644 index 0000000000..2d8a7cf11a --- /dev/null +++ b/resources/assets/v2/support/load-translations.js @@ -0,0 +1,27 @@ +/* + * load-translations.js + * Copyright (c) 2023 james@firefly-iii.org + * + * This file is part of Firefly III (https://github.com/firefly-iii). + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +async function loadTranslations(i18n, locale) { + const response = await fetch(`./v2/i18n/${locale}.json`); + const translations = await response.json(); + i18n.store(translations); +} + +export {loadTranslations};