Add Catalan and Spanish translation with gotext[3]
I had to choose between [1], [2], and [3].
As far as i could find, [1] is not easy to work with templates[4] and at
the moment is not maintained[5].
Both [2] and [3] use the same approach to be used from within templates:
you have to define a FuncMap with template functions that call the
message catalog. Also, both libraries seems to be reasonably
maintained, and have packages in Debian’s repository.
However, [2] repeats the same mistakes that POSIX did with its
catalogs—using identifiers that are not the strings in the source
language—, however this time the catalogs are written in JSON or YAML!
This, somehow, makes things worse….
[3], the one i settled with, is fine and decently maintained. There are
some surprising things, such as to be able to use directly the PO file,
and that it has higher priority over the corresponding MO, or that the
order of parameters is reversed in respect to gettext. However, it uses
a saner format, and is a lot easier to work with than [3].
The problem, of course, is that xgettext does not know how to find
translatable strings inside the template. [3] includes a CLI tool
similar to xgettext, but is not a drop-in replacement[6] and does not
process templates.
The proper way to handle this would be to add a parser to xgettext, but
for now i found out that if i surround the call to the translation
functions from within the template with parentheses, i can trick
xgettext into believing it is parsing Scheme code, and extracts the
strings successfully—at least, for what i have tried. Had to add the
keyword for pgettext, because Schemed does not have it, but at least i
can do that with command line parameters.
For now i left only Spanish and Catalan as the two available languages,
even though the source text is written in English, because that way i
can make sure i do not leave strings untranslated.
[1]: https://golang.org/x/text
[2]: https://github.com/nicksnyder/go-i18n
[3]: https://github.com/leonelquinteros/gotext
[4]: https://github.com/golang/go/issues/39954
[5]: https://github.com/golang/go/issues/12750
[6]: https://github.com/leonelquinteros/gotext/issues/38
2023-01-18 18:07:42 +00:00
|
|
|
|
# Catalan translations for numerus package
|
|
|
|
|
# Traduccions al català del paquet «numerus».
|
|
|
|
|
# Copyright (C) 2023 jordi fita mas
|
|
|
|
|
# This file is distributed under the same license as the numerus package.
|
|
|
|
|
# jordi fita mas <jordi@tandem.blog>, 2023.
|
|
|
|
|
#
|
|
|
|
|
msgid ""
|
|
|
|
|
msgstr ""
|
|
|
|
|
"Project-Id-Version: numerus\n"
|
|
|
|
|
"Report-Msgid-Bugs-To: jordi@tandem.blog\n"
|
2023-06-11 20:24:25 +00:00
|
|
|
|
"POT-Creation-Date: 2023-06-11 22:23+0200\n"
|
Add Catalan and Spanish translation with gotext[3]
I had to choose between [1], [2], and [3].
As far as i could find, [1] is not easy to work with templates[4] and at
the moment is not maintained[5].
Both [2] and [3] use the same approach to be used from within templates:
you have to define a FuncMap with template functions that call the
message catalog. Also, both libraries seems to be reasonably
maintained, and have packages in Debian’s repository.
However, [2] repeats the same mistakes that POSIX did with its
catalogs—using identifiers that are not the strings in the source
language—, however this time the catalogs are written in JSON or YAML!
This, somehow, makes things worse….
[3], the one i settled with, is fine and decently maintained. There are
some surprising things, such as to be able to use directly the PO file,
and that it has higher priority over the corresponding MO, or that the
order of parameters is reversed in respect to gettext. However, it uses
a saner format, and is a lot easier to work with than [3].
The problem, of course, is that xgettext does not know how to find
translatable strings inside the template. [3] includes a CLI tool
similar to xgettext, but is not a drop-in replacement[6] and does not
process templates.
The proper way to handle this would be to add a parser to xgettext, but
for now i found out that if i surround the call to the translation
functions from within the template with parentheses, i can trick
xgettext into believing it is parsing Scheme code, and extracts the
strings successfully—at least, for what i have tried. Had to add the
keyword for pgettext, because Schemed does not have it, but at least i
can do that with command line parameters.
For now i left only Spanish and Catalan as the two available languages,
even though the source text is written in English, because that way i
can make sure i do not leave strings untranslated.
[1]: https://golang.org/x/text
[2]: https://github.com/nicksnyder/go-i18n
[3]: https://github.com/leonelquinteros/gotext
[4]: https://github.com/golang/go/issues/39954
[5]: https://github.com/golang/go/issues/12750
[6]: https://github.com/leonelquinteros/gotext/issues/38
2023-01-18 18:07:42 +00:00
|
|
|
|
"PO-Revision-Date: 2023-01-18 17:08+0100\n"
|
|
|
|
|
"Last-Translator: jordi fita mas <jordi@tandem.blog>\n"
|
|
|
|
|
"Language-Team: Catalan <ca@dodds.net>\n"
|
|
|
|
|
"Language: ca\n"
|
|
|
|
|
"MIME-Version: 1.0\n"
|
|
|
|
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
|
|
|
"Content-Transfer-Encoding: 8bit\n"
|
|
|
|
|
|
2023-02-12 20:06:48 +00:00
|
|
|
|
#: web/template/invoices/products.gohtml:2
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/invoices/products.gohtml:23
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Add Products to Invoice"
|
|
|
|
|
msgstr "Afegeix productes a la factura"
|
|
|
|
|
|
|
|
|
|
#: web/template/invoices/products.gohtml:9 web/template/invoices/new.gohtml:9
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:9 web/template/invoices/view.gohtml:9
|
2023-06-11 20:24:25 +00:00
|
|
|
|
#: web/template/invoices/edit.gohtml:9 web/template/home.gohtml:2
|
|
|
|
|
#: web/template/quotes/products.gohtml:9 web/template/quotes/new.gohtml:9
|
|
|
|
|
#: web/template/quotes/index.gohtml:9 web/template/quotes/view.gohtml:9
|
|
|
|
|
#: web/template/quotes/edit.gohtml:9 web/template/contacts/new.gohtml:9
|
|
|
|
|
#: web/template/contacts/index.gohtml:9 web/template/contacts/edit.gohtml:10
|
|
|
|
|
#: web/template/profile.gohtml:9 web/template/expenses/new.gohtml:10
|
|
|
|
|
#: web/template/expenses/index.gohtml:10 web/template/expenses/edit.gohtml:10
|
|
|
|
|
#: web/template/tax-details.gohtml:9 web/template/products/new.gohtml:9
|
|
|
|
|
#: web/template/products/index.gohtml:9 web/template/products/edit.gohtml:10
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Home"
|
|
|
|
|
msgstr "Inici"
|
|
|
|
|
|
|
|
|
|
#: web/template/invoices/products.gohtml:10 web/template/invoices/new.gohtml:10
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:2 web/template/invoices/index.gohtml:10
|
2023-03-13 14:00:35 +00:00
|
|
|
|
#: web/template/invoices/view.gohtml:10 web/template/invoices/edit.gohtml:10
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Invoices"
|
|
|
|
|
msgstr "Factures"
|
|
|
|
|
|
2023-03-13 14:00:35 +00:00
|
|
|
|
#: web/template/invoices/products.gohtml:12 web/template/invoices/new.gohtml:2
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/invoices/new.gohtml:11 web/template/invoices/new.gohtml:19
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "New Invoice"
|
|
|
|
|
msgstr "Nova factura"
|
|
|
|
|
|
2023-04-27 22:06:48 +00:00
|
|
|
|
#: web/template/invoices/products.gohtml:48
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/quotes/products.gohtml:48
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "product"
|
|
|
|
|
msgid "All"
|
|
|
|
|
msgstr "Tots"
|
|
|
|
|
|
2023-04-27 22:06:48 +00:00
|
|
|
|
#: web/template/invoices/products.gohtml:49
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/quotes/products.gohtml:49 web/template/products/index.gohtml:40
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Name"
|
|
|
|
|
msgstr "Nom"
|
|
|
|
|
|
2023-04-27 22:06:48 +00:00
|
|
|
|
#: web/template/invoices/products.gohtml:50
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/invoices/view.gohtml:62 web/template/quotes/products.gohtml:50
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/quotes/view.gohtml:71 web/template/products/index.gohtml:42
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Price"
|
|
|
|
|
msgstr "Preu"
|
|
|
|
|
|
2023-04-27 22:06:48 +00:00
|
|
|
|
#: web/template/invoices/products.gohtml:64
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/quotes/products.gohtml:64 web/template/products/index.gohtml:82
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgid "No products added yet."
|
|
|
|
|
msgstr "No hi ha cap producte."
|
|
|
|
|
|
2023-05-28 22:02:55 +00:00
|
|
|
|
#: web/template/invoices/products.gohtml:72 web/template/invoices/new.gohtml:83
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/invoices/edit.gohtml:84 web/template/quotes/products.gohtml:72
|
|
|
|
|
#: web/template/quotes/new.gohtml:84 web/template/quotes/edit.gohtml:85
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Add products"
|
|
|
|
|
msgstr "Afegeix productes"
|
|
|
|
|
|
2023-05-28 22:02:55 +00:00
|
|
|
|
#: web/template/invoices/new.gohtml:27 web/template/invoices/edit.gohtml:27
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/quotes/new.gohtml:27 web/template/quotes/edit.gohtml:27
|
2023-05-28 22:02:55 +00:00
|
|
|
|
msgid "Product “%s” removed"
|
|
|
|
|
msgstr "S’ha esborrat el producte «%s»"
|
|
|
|
|
|
|
|
|
|
#: web/template/invoices/new.gohtml:31 web/template/invoices/edit.gohtml:31
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/quotes/new.gohtml:31 web/template/quotes/edit.gohtml:31
|
2023-05-28 22:02:55 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Undo"
|
|
|
|
|
msgstr "Desfes"
|
|
|
|
|
|
|
|
|
|
#: web/template/invoices/new.gohtml:60 web/template/invoices/view.gohtml:67
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/invoices/edit.gohtml:61 web/template/quotes/new.gohtml:61
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/quotes/view.gohtml:76 web/template/quotes/edit.gohtml:62
|
2023-02-24 11:22:15 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Subtotal"
|
|
|
|
|
msgstr "Subtotal"
|
|
|
|
|
|
2023-05-28 22:02:55 +00:00
|
|
|
|
#: web/template/invoices/new.gohtml:70 web/template/invoices/view.gohtml:71
|
|
|
|
|
#: web/template/invoices/view.gohtml:111 web/template/invoices/edit.gohtml:71
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/quotes/new.gohtml:71 web/template/quotes/view.gohtml:80
|
|
|
|
|
#: web/template/quotes/view.gohtml:120 web/template/quotes/edit.gohtml:72
|
2023-02-24 11:22:15 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Total"
|
|
|
|
|
msgstr "Total"
|
|
|
|
|
|
2023-05-28 22:02:55 +00:00
|
|
|
|
#: web/template/invoices/new.gohtml:87 web/template/invoices/edit.gohtml:88
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/quotes/new.gohtml:88 web/template/quotes/edit.gohtml:89
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Update"
|
|
|
|
|
msgstr "Actualitza"
|
|
|
|
|
|
2023-05-28 22:02:55 +00:00
|
|
|
|
#: web/template/invoices/new.gohtml:90 web/template/invoices/edit.gohtml:91
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/quotes/new.gohtml:91 web/template/quotes/edit.gohtml:92
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/contacts/new.gohtml:39 web/template/contacts/edit.gohtml:43
|
|
|
|
|
#: web/template/expenses/new.gohtml:33 web/template/expenses/edit.gohtml:38
|
|
|
|
|
#: web/template/products/new.gohtml:30 web/template/products/edit.gohtml:36
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "action"
|
2023-05-26 11:38:04 +00:00
|
|
|
|
msgid "Save"
|
|
|
|
|
msgstr "Desa"
|
2023-02-12 20:06:48 +00:00
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:19
|
2023-03-09 11:11:53 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Download invoices"
|
|
|
|
|
msgstr "Descarrega factures"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:21
|
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "New invoice"
|
|
|
|
|
msgstr "Nova factura"
|
|
|
|
|
|
|
|
|
|
#: web/template/invoices/index.gohtml:43 web/template/dashboard.gohtml:23
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/quotes/index.gohtml:43 web/template/contacts/index.gohtml:34
|
|
|
|
|
#: web/template/expenses/index.gohtml:36 web/template/products/index.gohtml:34
|
Add filters form for invoices
Instead of using links in the invoice tags, that we will replace with a
“click-to-edit field”, with Oriol agreed to add a form with filters that
includes not only the tags but also dates, customer, status, and the
invoice number.
This means i now need dynamic SQL, and i do not think this belongs to
the database (i.e., no PL/pgSQL function for that). I have looked at
query builder libraries for Golang, and did not find anything that
suited me: either they wanted to manage not only the SQL query but also
all structs, or they managed to confuse Goland’s SQL analyzer.
For now, at least, i am using a very simple approach with arrays, that
still confuses Goland’s analyzer, but just in a very specific part,
which i find tolerable—not that their analyzer is that great to begin
with, but that’s a story for another day.
2023-03-29 14:16:31 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Filter"
|
|
|
|
|
msgstr "Filtra"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:49
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "invoice"
|
|
|
|
|
msgid "All"
|
|
|
|
|
msgstr "Totes"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:50 web/template/invoices/view.gohtml:34
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/quotes/index.gohtml:50 web/template/quotes/view.gohtml:37
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Date"
|
|
|
|
|
msgstr "Data"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:51
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Invoice Num."
|
|
|
|
|
msgstr "Núm. factura"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:52 web/template/quotes/index.gohtml:52
|
|
|
|
|
#: web/template/contacts/index.gohtml:40
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Customer"
|
|
|
|
|
msgstr "Client"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:53 web/template/quotes/index.gohtml:53
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Status"
|
|
|
|
|
msgstr "Estat"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:54 web/template/quotes/index.gohtml:54
|
|
|
|
|
#: web/template/contacts/index.gohtml:43 web/template/expenses/index.gohtml:46
|
|
|
|
|
#: web/template/products/index.gohtml:41
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
2023-03-10 13:02:55 +00:00
|
|
|
|
msgid "Tags"
|
|
|
|
|
msgstr "Etiquetes"
|
2023-02-12 20:06:48 +00:00
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:55 web/template/quotes/index.gohtml:55
|
|
|
|
|
#: web/template/expenses/index.gohtml:47
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "title"
|
2023-02-22 13:39:38 +00:00
|
|
|
|
msgid "Amount"
|
|
|
|
|
msgstr "Import"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:56 web/template/quotes/index.gohtml:56
|
|
|
|
|
#: web/template/expenses/index.gohtml:48
|
2023-02-22 13:39:38 +00:00
|
|
|
|
msgctxt "title"
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgid "Download"
|
|
|
|
|
msgstr "Descàrrega"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:57 web/template/quotes/index.gohtml:57
|
|
|
|
|
#: web/template/contacts/index.gohtml:44 web/template/expenses/index.gohtml:49
|
|
|
|
|
#: web/template/products/index.gohtml:43
|
2023-03-08 10:54:06 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Actions"
|
|
|
|
|
msgstr "Accions"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:64
|
2023-03-09 11:11:53 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Select invoice %v"
|
|
|
|
|
msgstr "Selecciona factura %v"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:119 web/template/invoices/view.gohtml:19
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/quotes/index.gohtml:119 web/template/quotes/view.gohtml:22
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/contacts/index.gohtml:74 web/template/expenses/index.gohtml:88
|
|
|
|
|
#: web/template/products/index.gohtml:72
|
2023-03-13 14:00:35 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Edit"
|
|
|
|
|
msgstr "Edita"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:127 web/template/invoices/view.gohtml:16
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/quotes/index.gohtml:127 web/template/quotes/view.gohtml:19
|
2023-03-08 10:54:06 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Duplicate"
|
|
|
|
|
msgstr "Duplica"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/invoices/index.gohtml:137
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgid "No invoices added yet."
|
|
|
|
|
msgstr "No hi ha cap factura."
|
|
|
|
|
|
2023-04-15 02:05:59 +00:00
|
|
|
|
#: web/template/invoices/view.gohtml:2 web/template/invoices/view.gohtml:33
|
2023-02-24 11:22:15 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Invoice %s"
|
|
|
|
|
msgstr "Factura %s"
|
|
|
|
|
|
2023-04-15 02:05:59 +00:00
|
|
|
|
#: web/template/invoices/view.gohtml:22
|
Convert invoices to PDF with WeasyPrint
Although it is possible to just print the invoice from the browser, many
people will not even try an assume that they can not create a PDF for
the invoice.
I thought of using Groff or TeX to create the PDF, but it would mean
maintaining two templates in two different systems (HTML and whatever i
would use), and would probably look very different, because i do not
know Groff or TeX that well.
I wish there was a way to tell the browser to print to PDF, and it can
be done, but only with the Chrome Protocol to a server-side running
Chrome instance. This works, but i would need a Chrome running as a
daemon.
I also wrote a Qt application that uses QWebEngine to print the PDF,
much like wkhtmltopdf, but with support for more recent HTML and CSS
standards. Unfortunately, Qt 6.4’s embedded Chromium does not follow
break-page-inside as well as WeasyPrint does.
To use WeasyPrint, at first i wanted to reach the same URL as the user,
passing the cookie to WeasyPrint so that i can access the same invoice
as the user, something that can be done with wkhtmltopdf, but WeasyPrint
does not have such option. I did it with a custom Python script, but
then i need to package and install that script, that is not that much
work, but using the Debian-provided script is even less work, and less
likely to drift when WeasyPrint changes API.
Also, it is unnecessary to do a network round-trip from Go to Python
back to Go, because i can already write the invoice HTML as is to
WeasyPrint’s stdin.
2023-02-26 16:26:09 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Download invoice"
|
|
|
|
|
msgstr "Descarrega factura"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/invoices/view.gohtml:61 web/template/quotes/view.gohtml:70
|
2023-02-24 11:22:15 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Concept"
|
|
|
|
|
msgstr "Concepte"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/invoices/view.gohtml:64 web/template/quotes/view.gohtml:73
|
2023-03-01 13:08:12 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Discount"
|
|
|
|
|
msgstr "Descompte"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/invoices/view.gohtml:66 web/template/quotes/view.gohtml:75
|
2023-02-24 11:22:15 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Units"
|
|
|
|
|
msgstr "Unitats"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/invoices/view.gohtml:101 web/template/quotes/view.gohtml:110
|
2023-03-01 13:08:12 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Tax Base"
|
|
|
|
|
msgstr "Base imposable"
|
|
|
|
|
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/invoices/edit.gohtml:2 web/template/invoices/edit.gohtml:19
|
2023-03-13 14:00:35 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Edit Invoice “%s”"
|
|
|
|
|
msgstr "Edició de la factura «%s»"
|
|
|
|
|
|
2023-06-11 20:24:25 +00:00
|
|
|
|
#: web/template/home.gohtml:7 web/template/login.gohtml:2
|
|
|
|
|
#: web/template/login.gohtml:15
|
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Login"
|
|
|
|
|
msgstr "Entrada"
|
|
|
|
|
|
2023-05-16 12:56:49 +00:00
|
|
|
|
#: web/template/form.gohtml:36
|
2023-05-17 10:05:30 +00:00
|
|
|
|
msgctxt "input"
|
2023-05-16 12:56:49 +00:00
|
|
|
|
msgid "(Max. %s)"
|
|
|
|
|
msgstr "(Màx. %s)"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/form.gohtml:194
|
2023-05-26 11:38:04 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Filters"
|
|
|
|
|
msgstr "Filtra"
|
|
|
|
|
|
2023-05-16 12:56:49 +00:00
|
|
|
|
#: web/template/dashboard.gohtml:3
|
Add Catalan and Spanish translation with gotext[3]
I had to choose between [1], [2], and [3].
As far as i could find, [1] is not easy to work with templates[4] and at
the moment is not maintained[5].
Both [2] and [3] use the same approach to be used from within templates:
you have to define a FuncMap with template functions that call the
message catalog. Also, both libraries seems to be reasonably
maintained, and have packages in Debian’s repository.
However, [2] repeats the same mistakes that POSIX did with its
catalogs—using identifiers that are not the strings in the source
language—, however this time the catalogs are written in JSON or YAML!
This, somehow, makes things worse….
[3], the one i settled with, is fine and decently maintained. There are
some surprising things, such as to be able to use directly the PO file,
and that it has higher priority over the corresponding MO, or that the
order of parameters is reversed in respect to gettext. However, it uses
a saner format, and is a lot easier to work with than [3].
The problem, of course, is that xgettext does not know how to find
translatable strings inside the template. [3] includes a CLI tool
similar to xgettext, but is not a drop-in replacement[6] and does not
process templates.
The proper way to handle this would be to add a parser to xgettext, but
for now i found out that if i surround the call to the translation
functions from within the template with parentheses, i can trick
xgettext into believing it is parsing Scheme code, and extracts the
strings successfully—at least, for what i have tried. Had to add the
keyword for pgettext, because Schemed does not have it, but at least i
can do that with command line parameters.
For now i left only Spanish and Catalan as the two available languages,
even though the source text is written in English, because that way i
can make sure i do not leave strings untranslated.
[1]: https://golang.org/x/text
[2]: https://github.com/nicksnyder/go-i18n
[3]: https://github.com/leonelquinteros/gotext
[4]: https://github.com/golang/go/issues/39954
[5]: https://github.com/golang/go/issues/12750
[6]: https://github.com/leonelquinteros/gotext/issues/38
2023-01-18 18:07:42 +00:00
|
|
|
|
msgctxt "title"
|
2023-01-31 12:07:17 +00:00
|
|
|
|
msgid "Dashboard"
|
|
|
|
|
msgstr "Tauler"
|
Add Catalan and Spanish translation with gotext[3]
I had to choose between [1], [2], and [3].
As far as i could find, [1] is not easy to work with templates[4] and at
the moment is not maintained[5].
Both [2] and [3] use the same approach to be used from within templates:
you have to define a FuncMap with template functions that call the
message catalog. Also, both libraries seems to be reasonably
maintained, and have packages in Debian’s repository.
However, [2] repeats the same mistakes that POSIX did with its
catalogs—using identifiers that are not the strings in the source
language—, however this time the catalogs are written in JSON or YAML!
This, somehow, makes things worse….
[3], the one i settled with, is fine and decently maintained. There are
some surprising things, such as to be able to use directly the PO file,
and that it has higher priority over the corresponding MO, or that the
order of parameters is reversed in respect to gettext. However, it uses
a saner format, and is a lot easier to work with than [3].
The problem, of course, is that xgettext does not know how to find
translatable strings inside the template. [3] includes a CLI tool
similar to xgettext, but is not a drop-in replacement[6] and does not
process templates.
The proper way to handle this would be to add a parser to xgettext, but
for now i found out that if i surround the call to the translation
functions from within the template with parentheses, i can trick
xgettext into believing it is parsing Scheme code, and extracts the
strings successfully—at least, for what i have tried. Had to add the
keyword for pgettext, because Schemed does not have it, but at least i
can do that with command line parameters.
For now i left only Spanish and Catalan as the two available languages,
even though the source text is written in English, because that way i
can make sure i do not leave strings untranslated.
[1]: https://golang.org/x/text
[2]: https://github.com/nicksnyder/go-i18n
[3]: https://github.com/leonelquinteros/gotext
[4]: https://github.com/golang/go/issues/39954
[5]: https://github.com/golang/go/issues/12750
[6]: https://github.com/leonelquinteros/gotext/issues/38
2023-01-18 18:07:42 +00:00
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/dashboard.gohtml:29
|
2023-05-16 12:56:49 +00:00
|
|
|
|
msgctxt "term"
|
|
|
|
|
msgid "Sales"
|
|
|
|
|
msgstr "Vendes"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/dashboard.gohtml:33
|
2023-05-16 12:56:49 +00:00
|
|
|
|
msgctxt "term"
|
|
|
|
|
msgid "Income"
|
|
|
|
|
msgstr "Ingressos"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/dashboard.gohtml:37
|
2023-05-16 12:56:49 +00:00
|
|
|
|
msgctxt "term"
|
|
|
|
|
msgid "Expenses"
|
|
|
|
|
msgstr "Despeses"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/dashboard.gohtml:41
|
2023-05-16 12:56:49 +00:00
|
|
|
|
msgctxt "term"
|
|
|
|
|
msgid "VAT"
|
|
|
|
|
msgstr "IVA"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/dashboard.gohtml:45
|
2023-05-16 12:56:49 +00:00
|
|
|
|
msgctxt "term"
|
|
|
|
|
msgid "IRPF"
|
|
|
|
|
msgstr "IRPF"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/dashboard.gohtml:49
|
2023-05-16 12:56:49 +00:00
|
|
|
|
msgctxt "term"
|
|
|
|
|
msgid "Net Income"
|
|
|
|
|
msgstr "Ingressos nets"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/quotes/products.gohtml:2 web/template/quotes/products.gohtml:23
|
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Add Products to Quotation"
|
|
|
|
|
msgstr "Afegeix productes al pressupost"
|
|
|
|
|
|
|
|
|
|
#: web/template/quotes/products.gohtml:10 web/template/quotes/new.gohtml:10
|
|
|
|
|
#: web/template/quotes/index.gohtml:2 web/template/quotes/index.gohtml:10
|
|
|
|
|
#: web/template/quotes/view.gohtml:10 web/template/quotes/edit.gohtml:10
|
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Quotations"
|
|
|
|
|
msgstr "Pressuposts"
|
|
|
|
|
|
|
|
|
|
#: web/template/quotes/products.gohtml:12 web/template/quotes/new.gohtml:2
|
|
|
|
|
#: web/template/quotes/new.gohtml:11 web/template/quotes/new.gohtml:19
|
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "New Quotation"
|
|
|
|
|
msgstr "Nou pressupost"
|
|
|
|
|
|
|
|
|
|
#: web/template/quotes/index.gohtml:19
|
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Download quotations"
|
|
|
|
|
msgstr "Descarrega pressuposts"
|
|
|
|
|
|
|
|
|
|
#: web/template/quotes/index.gohtml:21
|
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "New quotation"
|
|
|
|
|
msgstr "Nou pressupost"
|
|
|
|
|
|
|
|
|
|
#: web/template/quotes/index.gohtml:49
|
|
|
|
|
msgctxt "quote"
|
|
|
|
|
msgid "All"
|
|
|
|
|
msgstr "Tots"
|
|
|
|
|
|
|
|
|
|
#: web/template/quotes/index.gohtml:51
|
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Quotation Num."
|
|
|
|
|
msgstr "Núm. pressupost"
|
|
|
|
|
|
|
|
|
|
#: web/template/quotes/index.gohtml:64
|
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Select quotation %v"
|
|
|
|
|
msgstr "Selecciona pressupost %v"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/quotes/index.gohtml:135 web/template/quotes/view.gohtml:16
|
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Create invoice"
|
|
|
|
|
msgstr "Crea factura"
|
|
|
|
|
|
|
|
|
|
#: web/template/quotes/index.gohtml:145
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "No quotations added yet."
|
|
|
|
|
msgstr "No hi ha cap pressupost."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/quotes/view.gohtml:2 web/template/quotes/view.gohtml:36
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Quotation %s"
|
|
|
|
|
msgstr "Pressupost %s"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/quotes/view.gohtml:25
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Download quotation"
|
|
|
|
|
msgstr "Descarrega pressupost"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: web/template/quotes/view.gohtml:63
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
msgid "Terms and Conditions:"
|
|
|
|
|
msgstr "Condicions d’acceptació:"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/quotes/edit.gohtml:2 web/template/quotes/edit.gohtml:19
|
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Edit Quotation “%s”"
|
|
|
|
|
msgstr "Edició del pressupost «%s»"
|
|
|
|
|
|
2023-03-27 07:44:04 +00:00
|
|
|
|
#: web/template/app.gohtml:23
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgctxt "menu"
|
|
|
|
|
msgid "Account"
|
|
|
|
|
msgstr "Compte"
|
|
|
|
|
|
2023-03-27 07:44:04 +00:00
|
|
|
|
#: web/template/app.gohtml:29
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgctxt "menu"
|
|
|
|
|
msgid "Tax Details"
|
|
|
|
|
msgstr "Configuració fiscal"
|
|
|
|
|
|
2023-03-27 07:44:04 +00:00
|
|
|
|
#: web/template/app.gohtml:37
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Logout"
|
|
|
|
|
msgstr "Surt"
|
|
|
|
|
|
2023-03-27 07:44:04 +00:00
|
|
|
|
#: web/template/app.gohtml:46
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgctxt "nav"
|
2023-01-31 12:29:56 +00:00
|
|
|
|
msgid "Dashboard"
|
|
|
|
|
msgstr "Tauler"
|
|
|
|
|
|
2023-03-27 07:44:04 +00:00
|
|
|
|
#: web/template/app.gohtml:47
|
2023-01-31 12:29:56 +00:00
|
|
|
|
msgctxt "nav"
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Quotations"
|
|
|
|
|
msgstr "Pressuposts"
|
|
|
|
|
|
|
|
|
|
#: web/template/app.gohtml:48
|
|
|
|
|
msgctxt "nav"
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgid "Invoices"
|
|
|
|
|
msgstr "Factures"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/app.gohtml:49
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgctxt "nav"
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgid "Expenses"
|
|
|
|
|
msgstr "Despeses"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/app.gohtml:50
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgctxt "nav"
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgid "Products"
|
|
|
|
|
msgstr "Productes"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: web/template/app.gohtml:51
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "nav"
|
|
|
|
|
msgid "Contacts"
|
|
|
|
|
msgstr "Contactes"
|
|
|
|
|
|
|
|
|
|
#: web/template/contacts/new.gohtml:2 web/template/contacts/new.gohtml:11
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/contacts/new.gohtml:19
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "New Contact"
|
|
|
|
|
msgstr "Nou contacte"
|
|
|
|
|
|
|
|
|
|
#: web/template/contacts/new.gohtml:10 web/template/contacts/index.gohtml:2
|
2023-03-27 07:44:04 +00:00
|
|
|
|
#: web/template/contacts/index.gohtml:10 web/template/contacts/edit.gohtml:11
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "title"
|
2023-02-01 09:14:26 +00:00
|
|
|
|
msgid "Contacts"
|
|
|
|
|
msgstr "Contactes"
|
2023-01-30 15:48:21 +00:00
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/contacts/index.gohtml:15
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "New contact"
|
|
|
|
|
msgstr "Nou contacte"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/contacts/index.gohtml:41
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Email"
|
|
|
|
|
msgstr "Correu-e"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/contacts/index.gohtml:42
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Phone"
|
|
|
|
|
msgstr "Telèfon"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/contacts/index.gohtml:84
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgid "No contacts added yet."
|
|
|
|
|
msgstr "No hi ha cap contacte."
|
|
|
|
|
|
2023-03-27 07:44:04 +00:00
|
|
|
|
#: web/template/contacts/edit.gohtml:3 web/template/contacts/edit.gohtml:20
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Edit Contact “%s”"
|
|
|
|
|
msgstr "Edició del contacte «%s»"
|
|
|
|
|
|
2023-02-01 10:02:32 +00:00
|
|
|
|
#: web/template/login.gohtml:19
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Login"
|
|
|
|
|
msgstr "Entra"
|
|
|
|
|
|
2023-02-03 12:58:10 +00:00
|
|
|
|
#: web/template/profile.gohtml:2 web/template/profile.gohtml:10
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/profile.gohtml:18
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "User Settings"
|
|
|
|
|
msgstr "Configuració usuari"
|
|
|
|
|
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/profile.gohtml:22
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "User Access Data"
|
|
|
|
|
msgstr "Dades accés usuari"
|
|
|
|
|
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/profile.gohtml:28
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Password Change"
|
|
|
|
|
msgstr "Canvi contrasenya"
|
|
|
|
|
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/profile.gohtml:35
|
2023-01-31 14:40:12 +00:00
|
|
|
|
msgctxt "title"
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgid "Language"
|
|
|
|
|
msgstr "Idioma"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/profile.gohtml:39 web/template/tax-details.gohtml:175
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Save changes"
|
|
|
|
|
msgstr "Desa canvis"
|
|
|
|
|
|
2023-05-03 10:46:25 +00:00
|
|
|
|
#: web/template/expenses/new.gohtml:3 web/template/expenses/new.gohtml:12
|
|
|
|
|
#: web/template/expenses/new.gohtml:20
|
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "New Expense"
|
|
|
|
|
msgstr "Nova despesa"
|
|
|
|
|
|
|
|
|
|
#: web/template/expenses/new.gohtml:11 web/template/expenses/index.gohtml:3
|
|
|
|
|
#: web/template/expenses/index.gohtml:11 web/template/expenses/edit.gohtml:11
|
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Expenses"
|
|
|
|
|
msgstr "Despeses"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/expenses/index.gohtml:16
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "New expense"
|
|
|
|
|
msgstr "Nova despesa"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/expenses/index.gohtml:42
|
2023-05-06 09:08:21 +00:00
|
|
|
|
msgctxt "expense"
|
|
|
|
|
msgid "All"
|
|
|
|
|
msgstr "Totes"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/expenses/index.gohtml:43
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Contact"
|
|
|
|
|
msgstr "Contacte"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/expenses/index.gohtml:44
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Invoice Date"
|
|
|
|
|
msgstr "Data de factura"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/expenses/index.gohtml:45
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Invoice Number"
|
|
|
|
|
msgstr "Número de factura"
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/expenses/index.gohtml:98
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgid "No expenses added yet."
|
|
|
|
|
msgstr "No hi ha cap despesa."
|
|
|
|
|
|
|
|
|
|
#: web/template/expenses/edit.gohtml:3 web/template/expenses/edit.gohtml:20
|
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Edit Expense “%s”"
|
|
|
|
|
msgstr "Edició de la despesa «%s»"
|
|
|
|
|
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:2 web/template/tax-details.gohtml:10
|
|
|
|
|
#: web/template/tax-details.gohtml:18
|
2023-01-30 09:52:22 +00:00
|
|
|
|
msgctxt "title"
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgid "Tax Details"
|
|
|
|
|
msgstr "Configuració fiscal"
|
2023-01-30 09:52:22 +00:00
|
|
|
|
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:35
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "title"
|
2023-01-28 11:24:52 +00:00
|
|
|
|
msgid "Currency"
|
|
|
|
|
msgstr "Moneda"
|
|
|
|
|
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:41
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgctxt "title"
|
2023-06-09 10:43:50 +00:00
|
|
|
|
msgid "Invoicing and Quoting"
|
|
|
|
|
msgstr "Facturació i pressuposts"
|
2023-03-03 15:49:06 +00:00
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:56
|
2023-03-21 10:58:54 +00:00
|
|
|
|
msgid "Are you sure?"
|
|
|
|
|
msgstr "N’esteu segur?"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:62
|
2023-01-28 13:18:58 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Tax Name"
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgstr "Nom impost"
|
2023-01-28 13:18:58 +00:00
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:63
|
2023-01-28 13:18:58 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Rate (%)"
|
|
|
|
|
msgstr "Percentatge"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:64
|
2023-02-28 11:02:27 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Class"
|
|
|
|
|
msgstr "Classe"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:88
|
2023-01-28 13:18:58 +00:00
|
|
|
|
msgid "No taxes added yet."
|
|
|
|
|
msgstr "No hi ha cap impost."
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:94 web/template/tax-details.gohtml:155
|
2023-01-28 13:18:58 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "New Line"
|
|
|
|
|
msgstr "Nova línia"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:108
|
2023-01-28 13:18:58 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Add new tax"
|
|
|
|
|
msgstr "Afegeix nou impost"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:124
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Payment Method"
|
|
|
|
|
msgstr "Mètode de pagament"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:125
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Instructions"
|
|
|
|
|
msgstr "Instruccions"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:149
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgid "No payment methods added yet."
|
|
|
|
|
msgstr "No hi ha cap mètode de pagament."
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: web/template/tax-details.gohtml:167
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "Add new payment method"
|
|
|
|
|
msgstr "Afegeix nou mètode de pagament"
|
|
|
|
|
|
2023-02-04 10:32:39 +00:00
|
|
|
|
#: web/template/products/new.gohtml:2 web/template/products/new.gohtml:11
|
2023-03-21 10:58:54 +00:00
|
|
|
|
#: web/template/products/new.gohtml:19
|
2023-01-30 15:48:21 +00:00
|
|
|
|
msgctxt "title"
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgid "New Product"
|
|
|
|
|
msgstr "Nou producte"
|
|
|
|
|
|
|
|
|
|
#: web/template/products/new.gohtml:10 web/template/products/index.gohtml:2
|
2023-03-27 07:44:04 +00:00
|
|
|
|
#: web/template/products/index.gohtml:10 web/template/products/edit.gohtml:11
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Products"
|
|
|
|
|
msgstr "Productes"
|
|
|
|
|
|
2023-04-27 22:06:48 +00:00
|
|
|
|
#: web/template/products/search.gohtml:12
|
|
|
|
|
msgid "No products found."
|
|
|
|
|
msgstr "No s’ha trobat cap producte."
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#: web/template/products/index.gohtml:15
|
|
|
|
|
msgctxt "action"
|
|
|
|
|
msgid "New product"
|
|
|
|
|
msgstr "Nou producte"
|
|
|
|
|
|
2023-03-27 07:44:04 +00:00
|
|
|
|
#: web/template/products/edit.gohtml:3 web/template/products/edit.gohtml:20
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "title"
|
|
|
|
|
msgid "Edit Product “%s”"
|
|
|
|
|
msgstr "Edició del producte «%s»"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/login.go:36 pkg/profile.go:40 pkg/contacts.go:268
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Email"
|
|
|
|
|
msgstr "Correu-e"
|
|
|
|
|
|
|
|
|
|
#: pkg/login.go:47 pkg/profile.go:49
|
2023-02-01 10:02:32 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Password"
|
|
|
|
|
msgstr "Contrasenya"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/login.go:69 pkg/profile.go:89 pkg/contacts.go:365
|
2023-02-01 10:02:32 +00:00
|
|
|
|
msgid "Email can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el correu-e en blanc."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/login.go:70 pkg/profile.go:90 pkg/contacts.go:366
|
2023-02-01 10:02:32 +00:00
|
|
|
|
msgid "This value is not a valid email. It should be like name@domain.com."
|
|
|
|
|
msgstr "Aquest valor no és un correu-e vàlid. Hauria de ser similar a nom@domini.cat."
|
|
|
|
|
|
2023-02-03 12:29:10 +00:00
|
|
|
|
#: pkg/login.go:72
|
2023-02-01 10:02:32 +00:00
|
|
|
|
msgid "Password can not be empty."
|
|
|
|
|
msgstr "No podeu deixar la contrasenya en blanc."
|
|
|
|
|
|
2023-02-03 12:29:10 +00:00
|
|
|
|
#: pkg/login.go:108
|
2023-02-01 10:02:32 +00:00
|
|
|
|
msgid "Invalid user or password."
|
|
|
|
|
msgstr "Nom d’usuari o contrasenya incorrectes."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/products.go:164 pkg/products.go:263 pkg/quote.go:801 pkg/invoices.go:851
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:135
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Name"
|
|
|
|
|
msgstr "Nom"
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/products.go:169 pkg/products.go:290 pkg/quote.go:188 pkg/quote.go:608
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: pkg/expenses.go:202 pkg/expenses.go:361 pkg/invoices.go:189
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/invoices.go:603 pkg/invoices.go:1150 pkg/contacts.go:140
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: pkg/contacts.go:325
|
2023-04-27 22:06:48 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Tags"
|
|
|
|
|
msgstr "Etiquetes"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: pkg/products.go:173 pkg/quote.go:192 pkg/expenses.go:365 pkg/invoices.go:193
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:144
|
2023-04-27 22:06:48 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Tags Condition"
|
|
|
|
|
msgstr "Condició de les etiquetes"
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: pkg/products.go:177 pkg/quote.go:196 pkg/expenses.go:369 pkg/invoices.go:197
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:148
|
2023-04-27 22:06:48 +00:00
|
|
|
|
msgctxt "tag condition"
|
|
|
|
|
msgid "All"
|
|
|
|
|
msgstr "Totes"
|
|
|
|
|
|
2023-05-28 22:02:55 +00:00
|
|
|
|
#: pkg/products.go:178 pkg/expenses.go:370 pkg/invoices.go:198
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:149
|
2023-04-27 22:06:48 +00:00
|
|
|
|
msgid "Invoices must have all the specified labels."
|
|
|
|
|
msgstr "Les factures han de tenir totes les etiquetes."
|
|
|
|
|
|
2023-06-07 14:35:31 +00:00
|
|
|
|
#: pkg/products.go:182 pkg/quote.go:201 pkg/expenses.go:374 pkg/invoices.go:202
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:153
|
2023-04-27 22:06:48 +00:00
|
|
|
|
msgctxt "tag condition"
|
|
|
|
|
msgid "Any"
|
|
|
|
|
msgstr "Qualsevol"
|
|
|
|
|
|
2023-05-28 22:02:55 +00:00
|
|
|
|
#: pkg/products.go:183 pkg/expenses.go:375 pkg/invoices.go:203
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:154
|
2023-04-27 22:06:48 +00:00
|
|
|
|
msgid "Invoices must have at least one of the specified labels."
|
|
|
|
|
msgstr "Les factures han de tenir com a mínim una de les etiquetes."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/products.go:269 pkg/quote.go:815 pkg/invoices.go:865
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Description"
|
|
|
|
|
msgstr "Descripció"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/products.go:274 pkg/quote.go:819 pkg/invoices.go:869
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Price"
|
|
|
|
|
msgstr "Preu"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/products.go:284 pkg/quote.go:848 pkg/expenses.go:181 pkg/invoices.go:898
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgctxt "input"
|
2023-02-08 12:47:36 +00:00
|
|
|
|
msgid "Taxes"
|
|
|
|
|
msgstr "Imposts"
|
2023-02-04 10:32:39 +00:00
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/products.go:309 pkg/quote.go:897 pkg/profile.go:92 pkg/invoices.go:947
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgid "Name can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el nom en blanc."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/products.go:310 pkg/quote.go:898 pkg/invoices.go:948
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgid "Price can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el preu en blanc."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/products.go:311 pkg/quote.go:899 pkg/invoices.go:949
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgid "Price must be a number greater than zero."
|
|
|
|
|
msgstr "El preu ha de ser un número major a zero."
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/products.go:313 pkg/quote.go:907 pkg/expenses.go:227 pkg/expenses.go:232
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/invoices.go:957
|
2023-02-04 10:32:39 +00:00
|
|
|
|
msgid "Selected tax is not valid."
|
|
|
|
|
msgstr "Heu seleccionat un impost que no és vàlid."
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/products.go:314 pkg/quote.go:908 pkg/expenses.go:228 pkg/expenses.go:233
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/invoices.go:958
|
2023-03-01 13:08:12 +00:00
|
|
|
|
msgid "You can only select a tax of each class."
|
|
|
|
|
msgstr "Només podeu seleccionar un impost de cada classe."
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:102
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Currency"
|
|
|
|
|
msgstr "Moneda"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:109
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Invoice number format"
|
|
|
|
|
msgstr "Format del número de factura"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:115
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Next invoice number"
|
|
|
|
|
msgstr "Següent número de factura"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:124
|
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Quotation number format"
|
|
|
|
|
msgstr "Format del número de pressupost"
|
|
|
|
|
|
|
|
|
|
#: pkg/company.go:130
|
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Next quotation number"
|
|
|
|
|
msgstr "Següent número de pressupost"
|
|
|
|
|
|
|
|
|
|
#: pkg/company.go:139
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Legal disclaimer"
|
|
|
|
|
msgstr "Nota legal"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:160
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "Selected currency is not valid."
|
|
|
|
|
msgstr "Heu seleccionat una moneda que no és vàlida."
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:161
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgid "Invoice number format can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el format del número de factura en blanc."
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:162
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Next invoice number must be a number greater than zero."
|
|
|
|
|
msgstr "El següent número de factura ha de ser un número major a zero."
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:163
|
|
|
|
|
msgid "Quotation number format can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el format del número de pressupost en blanc."
|
|
|
|
|
|
|
|
|
|
#: pkg/company.go:164
|
|
|
|
|
msgid "Next quotation number must be a number greater than zero."
|
|
|
|
|
msgstr "El següent número de pressupost ha de ser un número major a zero."
|
|
|
|
|
|
|
|
|
|
#: pkg/company.go:427
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Tax name"
|
|
|
|
|
msgstr "Nom impost"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:433
|
2023-02-28 11:02:27 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Tax Class"
|
|
|
|
|
msgstr "Classe d’impost"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:436
|
2023-02-28 11:02:27 +00:00
|
|
|
|
msgid "Select a tax class"
|
|
|
|
|
msgstr "Escolliu una classe d’impost"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:440
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Rate (%)"
|
|
|
|
|
msgstr "Percentatge"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:463
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "Tax name can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el nom de l’impost en blanc."
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:464
|
2023-02-28 11:02:27 +00:00
|
|
|
|
msgid "Selected tax class is not valid."
|
|
|
|
|
msgstr "Heu seleccionat una classe d’impost que no és vàlida."
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:465
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "Tax rate can not be empty."
|
|
|
|
|
msgstr "No podeu deixar percentatge en blanc."
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:466
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "Tax rate must be an integer between -99 and 99."
|
|
|
|
|
msgstr "El percentatge ha de ser entre -99 i 99."
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:529
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Payment method name"
|
|
|
|
|
msgstr "Nom del mètode de pagament"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:535
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Instructions"
|
|
|
|
|
msgstr "Instruccions"
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:553
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgid "Payment method name can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el nom del mètode de pagament en blanc."
|
|
|
|
|
|
2023-06-09 10:43:50 +00:00
|
|
|
|
#: pkg/company.go:554
|
2023-03-03 15:49:06 +00:00
|
|
|
|
msgid "Payment instructions can not be empty."
|
|
|
|
|
msgstr "No podeu deixar les instruccions de pagament en blanc."
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/quote.go:161 pkg/quote.go:586 pkg/expenses.go:340 pkg/invoices.go:162
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/invoices.go:586
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Customer"
|
|
|
|
|
msgstr "Client"
|
|
|
|
|
|
|
|
|
|
#: pkg/quote.go:162 pkg/expenses.go:341 pkg/invoices.go:163
|
|
|
|
|
msgid "All customers"
|
|
|
|
|
msgstr "Tots els clients"
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/quote.go:167 pkg/quote.go:580
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Quotation Status"
|
|
|
|
|
msgstr "Estat del pressupost"
|
|
|
|
|
|
|
|
|
|
#: pkg/quote.go:168 pkg/invoices.go:169
|
|
|
|
|
msgid "All status"
|
|
|
|
|
msgstr "Tots els estats"
|
|
|
|
|
|
|
|
|
|
#: pkg/quote.go:173
|
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Quotation Number"
|
|
|
|
|
msgstr "Número de pressupost"
|
|
|
|
|
|
|
|
|
|
#: pkg/quote.go:178 pkg/expenses.go:351 pkg/invoices.go:179
|
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "From Date"
|
|
|
|
|
msgstr "A partir de la data"
|
|
|
|
|
|
|
|
|
|
#: pkg/quote.go:183 pkg/expenses.go:356 pkg/invoices.go:184
|
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "To Date"
|
|
|
|
|
msgstr "Fins la data"
|
|
|
|
|
|
|
|
|
|
#: pkg/quote.go:197
|
|
|
|
|
msgid "Quotations must have all the specified labels."
|
|
|
|
|
msgstr "Els pressuposts han de tenir totes les etiquetes."
|
|
|
|
|
|
|
|
|
|
#: pkg/quote.go:202
|
|
|
|
|
msgid "Quotations must have at least one of the specified labels."
|
|
|
|
|
msgstr "Els pressuposts han de tenir com a mínim una de les etiquetes."
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/quote.go:528
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "quotations.zip"
|
|
|
|
|
msgstr "pressuposts.zip"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:534 pkg/quote.go:1063 pkg/quote.go:1071 pkg/invoices.go:535
|
|
|
|
|
#: pkg/invoices.go:1125 pkg/invoices.go:1133
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Invalid action"
|
|
|
|
|
msgstr "Acció invàlida."
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/quote.go:587
|
|
|
|
|
msgid "Select a customer to quote."
|
|
|
|
|
msgstr "Escolliu un client a pressupostar."
|
|
|
|
|
|
|
|
|
|
#: pkg/quote.go:592
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Quotation Date"
|
|
|
|
|
msgstr "Data del pressupost"
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/quote.go:598
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Terms and conditions"
|
|
|
|
|
msgstr "Condicions d’acceptació"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:603 pkg/invoices.go:598
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Notes"
|
|
|
|
|
msgstr "Notes"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:612 pkg/invoices.go:608
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Payment Method"
|
|
|
|
|
msgstr "Mètode de pagament"
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/quote.go:613
|
|
|
|
|
msgid "Select a payment method."
|
|
|
|
|
msgstr "Escolliu un mètode de pagament."
|
|
|
|
|
|
|
|
|
|
#: pkg/quote.go:649
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Selected quotation status is not valid."
|
|
|
|
|
msgstr "Heu seleccionat un estat de pressupost que no és vàlid."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:651 pkg/invoices.go:645
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Selected customer is not valid."
|
|
|
|
|
msgstr "Heu seleccionat un client que no és vàlid."
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/quote.go:653
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Quotation date can not be empty."
|
|
|
|
|
msgstr "No podeu deixar la data del pressupost en blanc."
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/quote.go:654
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Quotation date must be a valid date."
|
|
|
|
|
msgstr "La data del pressupost ha de ser vàlida."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:657 pkg/invoices.go:649
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Selected payment method is not valid."
|
|
|
|
|
msgstr "Heu seleccionat un mètode de pagament que no és vàlid."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:791 pkg/quote.go:796 pkg/invoices.go:841 pkg/invoices.go:846
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Id"
|
|
|
|
|
msgstr "Identificador"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:829 pkg/invoices.go:879
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Quantity"
|
|
|
|
|
msgstr "Quantitat"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:838 pkg/invoices.go:888
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Discount (%)"
|
|
|
|
|
msgstr "Descompte (%)"
|
|
|
|
|
|
Allow empty contact and payment method for quotes
I have to use a value to be used as “none” for payment method and
contact. In PL/pgSQL add_quote and edit_quote functions, that value is
NULL, while in forms it is the empty string. I can not simply pass the
empty string for either of these fields because PL/pgSQL expects
(nullable) integers, and "" is not a valid integer and is not NULL
either. A conversion is necessary.
Apparently, Go’s nil is not a valid representation for SQL’s NULL with
pgx, and had to use sql.NullString instead.
I also needed to coalesce contact’s VATIN and phone, because null values
can not be scanned to *string. I did not do that before because
`coalesce(vatin, '')` throws an error that '' is not a valid VATIN and
just left as is, wrongly expecting that pgx would do the job of leaving
the string blank for me. It does not.
Lastly, i can not blindly write Quotee’s tax details in the quote’s view
page, or we would see the (), characters for the empty address info.
2023-06-08 11:05:41 +00:00
|
|
|
|
#: pkg/quote.go:892
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Quotation product ID must be a number greater than zero."
|
|
|
|
|
msgstr "L’ID del producte de pressupost ha de ser un número major a zero."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:895 pkg/invoices.go:945
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Product ID must be a positive number or zero."
|
|
|
|
|
msgstr "L’ID del producte ha de ser un número positiu o zero."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:901 pkg/invoices.go:951
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Quantity can not be empty."
|
|
|
|
|
msgstr "No podeu deixar la quantitat en blanc."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:902 pkg/invoices.go:952
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Quantity must be a number greater than zero."
|
|
|
|
|
msgstr "La quantitat ha de ser un número major a zero."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:904 pkg/invoices.go:954
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Discount can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el descompte en blanc."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/quote.go:905 pkg/invoices.go:955
|
2023-06-07 14:35:31 +00:00
|
|
|
|
msgid "Discount must be a percentage between 0 and 100."
|
|
|
|
|
msgstr "El descompte ha de ser un percentatge entre 0 i 100."
|
|
|
|
|
|
2023-02-03 12:29:10 +00:00
|
|
|
|
#: pkg/profile.go:25
|
2023-01-31 14:40:12 +00:00
|
|
|
|
msgctxt "language option"
|
|
|
|
|
msgid "Automatic"
|
|
|
|
|
msgstr "Automàtic"
|
|
|
|
|
|
2023-02-03 12:29:10 +00:00
|
|
|
|
#: pkg/profile.go:31
|
2023-01-31 14:40:12 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "User name"
|
|
|
|
|
msgstr "Nom d’usuari"
|
|
|
|
|
|
2023-02-03 12:29:10 +00:00
|
|
|
|
#: pkg/profile.go:57
|
2023-01-31 14:40:12 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Password Confirmation"
|
|
|
|
|
msgstr "Confirmació contrasenya"
|
|
|
|
|
|
2023-02-03 12:29:10 +00:00
|
|
|
|
#: pkg/profile.go:65
|
2023-01-31 14:40:12 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Language"
|
|
|
|
|
msgstr "Idioma"
|
|
|
|
|
|
2023-02-05 13:06:33 +00:00
|
|
|
|
#: pkg/profile.go:93
|
2023-01-31 14:40:12 +00:00
|
|
|
|
msgid "Confirmation does not match password."
|
|
|
|
|
msgstr "La confirmació no és igual a la contrasenya."
|
|
|
|
|
|
2023-02-05 13:06:33 +00:00
|
|
|
|
#: pkg/profile.go:94
|
2023-01-31 14:40:12 +00:00
|
|
|
|
msgid "Selected language is not valid."
|
|
|
|
|
msgstr "Heu seleccionat un idioma que no és vàlid."
|
2023-02-01 09:14:26 +00:00
|
|
|
|
|
2023-05-22 09:16:21 +00:00
|
|
|
|
#: pkg/dashboard.go:138
|
2023-05-17 10:05:30 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Period"
|
|
|
|
|
msgstr "Període"
|
|
|
|
|
|
2023-05-22 09:16:21 +00:00
|
|
|
|
#: pkg/dashboard.go:141
|
2023-05-17 10:05:30 +00:00
|
|
|
|
msgctxt "period option"
|
2023-05-19 12:05:57 +00:00
|
|
|
|
msgid "Month"
|
|
|
|
|
msgstr "Mes"
|
|
|
|
|
|
2023-05-22 09:16:21 +00:00
|
|
|
|
#: pkg/dashboard.go:145
|
2023-05-19 12:05:57 +00:00
|
|
|
|
msgctxt "period option"
|
|
|
|
|
msgid "Previous month"
|
|
|
|
|
msgstr "Mes anterior"
|
2023-05-17 10:05:30 +00:00
|
|
|
|
|
2023-05-22 09:16:21 +00:00
|
|
|
|
#: pkg/dashboard.go:149
|
2023-05-17 10:05:30 +00:00
|
|
|
|
msgctxt "period option"
|
|
|
|
|
msgid "Quarter"
|
|
|
|
|
msgstr "Trimestre"
|
|
|
|
|
|
2023-05-22 09:16:21 +00:00
|
|
|
|
#: pkg/dashboard.go:153
|
2023-05-17 10:05:30 +00:00
|
|
|
|
msgctxt "period option"
|
2023-05-19 12:05:57 +00:00
|
|
|
|
msgid "Previous quarter"
|
|
|
|
|
msgstr "Trimestre anterior"
|
|
|
|
|
|
2023-05-22 09:16:21 +00:00
|
|
|
|
#: pkg/dashboard.go:157
|
2023-05-19 12:05:57 +00:00
|
|
|
|
msgctxt "period option"
|
|
|
|
|
msgid "Year"
|
|
|
|
|
msgstr "Any"
|
2023-05-17 10:05:30 +00:00
|
|
|
|
|
2023-05-22 09:16:21 +00:00
|
|
|
|
#: pkg/dashboard.go:161
|
2023-05-17 10:05:30 +00:00
|
|
|
|
msgctxt "period option"
|
2023-05-19 12:05:57 +00:00
|
|
|
|
msgid "Previous year"
|
2023-05-17 10:05:30 +00:00
|
|
|
|
msgstr "Any anterior"
|
|
|
|
|
|
2023-05-16 12:56:49 +00:00
|
|
|
|
#: pkg/expenses.go:129
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgid "Select a contact."
|
|
|
|
|
msgstr "Escolliu un contacte."
|
|
|
|
|
|
2023-05-16 12:56:49 +00:00
|
|
|
|
#: pkg/expenses.go:164
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Contact"
|
|
|
|
|
msgstr "Contacte"
|
|
|
|
|
|
2023-05-16 12:56:49 +00:00
|
|
|
|
#: pkg/expenses.go:170
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Invoice number"
|
|
|
|
|
msgstr "Número de factura"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/expenses.go:175 pkg/invoices.go:592
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Invoice Date"
|
|
|
|
|
msgstr "Data de factura"
|
|
|
|
|
|
2023-05-16 12:56:49 +00:00
|
|
|
|
#: pkg/expenses.go:187
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Amount"
|
|
|
|
|
msgstr "Import"
|
|
|
|
|
|
2023-05-16 12:56:49 +00:00
|
|
|
|
#: pkg/expenses.go:197
|
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "File"
|
|
|
|
|
msgstr "Fitxer"
|
|
|
|
|
|
|
|
|
|
#: pkg/expenses.go:225
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgid "Selected contact is not valid."
|
|
|
|
|
msgstr "Heu seleccionat un contacte que no és vàlid."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/expenses.go:226 pkg/invoices.go:647
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgid "Invoice date must be a valid date."
|
|
|
|
|
msgstr "La data de facturació ha de ser vàlida."
|
|
|
|
|
|
2023-05-16 12:56:49 +00:00
|
|
|
|
#: pkg/expenses.go:229
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgid "Amount can not be empty."
|
|
|
|
|
msgstr "No podeu deixar l’import en blanc."
|
|
|
|
|
|
2023-05-16 12:56:49 +00:00
|
|
|
|
#: pkg/expenses.go:230
|
2023-05-03 10:46:25 +00:00
|
|
|
|
msgid "Amount must be a number greater than zero."
|
|
|
|
|
msgstr "L’import ha de ser un número major a zero."
|
|
|
|
|
|
2023-05-28 22:02:55 +00:00
|
|
|
|
#: pkg/expenses.go:346 pkg/invoices.go:174
|
Add filters form for invoices
Instead of using links in the invoice tags, that we will replace with a
“click-to-edit field”, with Oriol agreed to add a form with filters that
includes not only the tags but also dates, customer, status, and the
invoice number.
This means i now need dynamic SQL, and i do not think this belongs to
the database (i.e., no PL/pgSQL function for that). I have looked at
query builder libraries for Golang, and did not find anything that
suited me: either they wanted to manage not only the SQL query but also
all structs, or they managed to confuse Goland’s SQL analyzer.
For now, at least, i am using a very simple approach with arrays, that
still confuses Goland’s analyzer, but just in a very specific part,
which i find tolerable—not that their analyzer is that great to begin
with, but that’s a story for another day.
2023-03-29 14:16:31 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Invoice Number"
|
|
|
|
|
msgstr "Número de factura"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/invoices.go:168 pkg/invoices.go:580
|
2023-05-11 21:32:21 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Invoice Status"
|
|
|
|
|
msgstr "Estat de la factura"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/invoices.go:428
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgid "Select a customer to bill."
|
|
|
|
|
msgstr "Escolliu un client a facturar."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/invoices.go:529
|
2023-03-13 14:00:35 +00:00
|
|
|
|
msgid "invoices.zip"
|
|
|
|
|
msgstr "factures.zip"
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/invoices.go:644
|
2023-03-13 14:00:35 +00:00
|
|
|
|
msgid "Selected invoice status is not valid."
|
|
|
|
|
msgstr "Heu seleccionat un estat de factura que no és vàlid."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/invoices.go:646
|
2023-02-12 20:06:48 +00:00
|
|
|
|
msgid "Invoice date can not be empty."
|
|
|
|
|
msgstr "No podeu deixar la data de la factura en blanc."
|
|
|
|
|
|
2023-06-10 18:46:03 +00:00
|
|
|
|
#: pkg/invoices.go:782
|
|
|
|
|
#, c-format
|
|
|
|
|
msgid "Re: quotation #%s of %s"
|
|
|
|
|
msgstr "Ref: pressupost núm. %s del %s"
|
|
|
|
|
|
|
|
|
|
#: pkg/invoices.go:783
|
|
|
|
|
msgctxt "to_char"
|
|
|
|
|
msgid "MM/DD/YYYY"
|
|
|
|
|
msgstr "DD/MM/YYYY"
|
|
|
|
|
|
|
|
|
|
#: pkg/invoices.go:942
|
2023-05-22 09:16:21 +00:00
|
|
|
|
msgid "Invoice product ID must be a number greater than zero."
|
|
|
|
|
msgstr "L’ID del producte de factura ha de ser un número major a zero."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:238
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Business name"
|
|
|
|
|
msgstr "Nom i cognoms"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:248
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "VAT number"
|
|
|
|
|
msgstr "DNI / NIF"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:254
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Trade name"
|
|
|
|
|
msgstr "Nom comercial"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:259
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Phone"
|
|
|
|
|
msgstr "Telèfon"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:277
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Web"
|
|
|
|
|
msgstr "Web"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:285
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Address"
|
|
|
|
|
msgstr "Adreça"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:294
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "City"
|
|
|
|
|
msgstr "Població"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:300
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Province"
|
|
|
|
|
msgstr "Província"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:306
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Postal code"
|
|
|
|
|
msgstr "Codi postal"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:315
|
2023-02-08 12:47:36 +00:00
|
|
|
|
msgctxt "input"
|
|
|
|
|
msgid "Country"
|
|
|
|
|
msgstr "País"
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:353
|
2023-02-08 12:47:36 +00:00
|
|
|
|
msgid "Selected country is not valid."
|
|
|
|
|
msgstr "Heu seleccionat un país que no és vàlid."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:357
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "Business name can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el nom i els cognoms en blanc."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:358
|
2023-04-18 19:01:29 +00:00
|
|
|
|
msgid "Business name must have at least two letters."
|
|
|
|
|
msgstr "Nom i cognoms han de tenir com a mínim dues lletres."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:359
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "VAT number can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el DNI o NIF en blanc."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:360
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "This value is not a valid VAT number."
|
|
|
|
|
msgstr "Aquest valor no és un DNI o NIF vàlid."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:362
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "Phone can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el telèfon en blanc."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:363
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "This value is not a valid phone number."
|
|
|
|
|
msgstr "Aquest valor no és un telèfon vàlid."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:369
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "This value is not a valid web address. It should be like https://domain.com/."
|
|
|
|
|
msgstr "Aquest valor no és una adreça web vàlida. Hauria de ser similar a https://domini.cat/."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:371
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "Address can not be empty."
|
|
|
|
|
msgstr "No podeu deixar l’adreça en blanc."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:372
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "City can not be empty."
|
|
|
|
|
msgstr "No podeu deixar la població en blanc."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:373
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "Province can not be empty."
|
|
|
|
|
msgstr "No podeu deixar la província en blanc."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:374
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "Postal code can not be empty."
|
|
|
|
|
msgstr "No podeu deixar el codi postal en blanc."
|
|
|
|
|
|
2023-05-11 21:32:21 +00:00
|
|
|
|
#: pkg/contacts.go:375
|
2023-02-03 12:29:10 +00:00
|
|
|
|
msgid "This value is not a valid postal code."
|
|
|
|
|
msgstr "Aquest valor no és un codi postal vàlid."
|
|
|
|
|
|
2023-05-26 11:38:04 +00:00
|
|
|
|
#~ msgctxt "action"
|
|
|
|
|
#~ msgid "Update contact"
|
|
|
|
|
#~ msgstr "Actualitza contacte"
|
|
|
|
|
|
|
|
|
|
#~ msgctxt "action"
|
|
|
|
|
#~ msgid "Update expense"
|
|
|
|
|
#~ msgstr "Actualitza despesa"
|
|
|
|
|
|
|
|
|
|
#~ msgctxt "action"
|
|
|
|
|
#~ msgid "Update product"
|
|
|
|
|
#~ msgstr "Actualitza producte"
|
|
|
|
|
|
2023-05-23 12:21:04 +00:00
|
|
|
|
#~ msgctxt "action"
|
|
|
|
|
#~ msgid "Edit invoice"
|
|
|
|
|
#~ msgstr "Edita factura"
|
|
|
|
|
|
|
|
|
|
#~ msgctxt "contact"
|
|
|
|
|
#~ msgid "All"
|
|
|
|
|
#~ msgstr "Tots"
|
|
|
|
|
|
2023-04-27 22:06:48 +00:00
|
|
|
|
#~ msgid "Product ID can not be empty."
|
|
|
|
|
#~ msgstr "No podeu deixar l’identificador del producte en blanc."
|
|
|
|
|
|
2023-04-15 02:05:59 +00:00
|
|
|
|
#~ msgctxt "input"
|
|
|
|
|
#~ msgid "Number"
|
|
|
|
|
#~ msgstr "Número"
|
|
|
|
|
|
2023-03-10 13:02:55 +00:00
|
|
|
|
#~ msgctxt "title"
|
|
|
|
|
#~ msgid "Label"
|
|
|
|
|
#~ msgstr "Etiqueta"
|
|
|
|
|
|
2023-02-08 12:47:36 +00:00
|
|
|
|
#~ msgid "Select a tax for this product."
|
|
|
|
|
#~ msgstr "Escolliu un impost per aquest producte."
|
2023-02-03 12:29:10 +00:00
|
|
|
|
|
2023-02-04 10:32:39 +00:00
|
|
|
|
#~ msgctxt "input"
|
2023-02-08 12:47:36 +00:00
|
|
|
|
#~ msgid "Tax"
|
|
|
|
|
#~ msgstr "Impost"
|
2023-02-04 10:32:39 +00:00
|
|
|
|
|
2023-02-01 09:14:26 +00:00
|
|
|
|
#~ msgctxt "title"
|
|
|
|
|
#~ msgid "Customers"
|
|
|
|
|
#~ msgstr "Clients"
|
|
|
|
|
|
|
|
|
|
#~ msgid "No customers added yet."
|
|
|
|
|
#~ msgstr "No hi ha cap client."
|