summaryrefslogtreecommitdiffstats
path: root/src/pl/plpython/po
diff options
context:
space:
mode:
Diffstat (limited to 'src/pl/plpython/po')
-rw-r--r--src/pl/plpython/po/LINGUAS1
-rw-r--r--src/pl/plpython/po/cs.po503
-rw-r--r--src/pl/plpython/po/de.po451
-rw-r--r--src/pl/plpython/po/el.po461
-rw-r--r--src/pl/plpython/po/es.po454
-rw-r--r--src/pl/plpython/po/fr.po590
-rw-r--r--src/pl/plpython/po/it.po470
-rw-r--r--src/pl/plpython/po/ja.po497
-rw-r--r--src/pl/plpython/po/ka.po462
-rw-r--r--src/pl/plpython/po/ko.po478
-rw-r--r--src/pl/plpython/po/meson.build3
-rw-r--r--src/pl/plpython/po/pl.po507
-rw-r--r--src/pl/plpython/po/pt_BR.po461
-rw-r--r--src/pl/plpython/po/ru.po561
-rw-r--r--src/pl/plpython/po/sv.po461
-rw-r--r--src/pl/plpython/po/tr.po537
-rw-r--r--src/pl/plpython/po/uk.po452
-rw-r--r--src/pl/plpython/po/vi.po485
-rw-r--r--src/pl/plpython/po/zh_CN.po459
-rw-r--r--src/pl/plpython/po/zh_TW.po496
20 files changed, 8789 insertions, 0 deletions
diff --git a/src/pl/plpython/po/LINGUAS b/src/pl/plpython/po/LINGUAS
new file mode 100644
index 0000000..4cc8bed
--- /dev/null
+++ b/src/pl/plpython/po/LINGUAS
@@ -0,0 +1 @@
+cs de el es fr it ja ka ko pl pt_BR ru sv tr uk vi zh_CN zh_TW
diff --git a/src/pl/plpython/po/cs.po b/src/pl/plpython/po/cs.po
new file mode 100644
index 0000000..61576ac
--- /dev/null
+++ b/src/pl/plpython/po/cs.po
@@ -0,0 +1,503 @@
+# Czech message translation file for plpython
+# Copyright (C) 2012 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+#
+# Tomáš Vondra <tv@fuzzy.cz>, 2012, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython-cs (PostgreSQL 9.3)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2019-09-27 08:08+0000\n"
+"PO-Revision-Date: 2019-09-27 21:01+0200\n"
+"Last-Translator: Tomas Vondra <tv@fuzzy.cz>\n"
+"Language-Team: Czech <info@cspug.cx>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Poedit 2.2.3\n"
+
+#: plpy_cursorobject.c:78
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor očekával dotaz nebo plán"
+
+#: plpy_cursorobject.c:161
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor jako druhý argument očekává sekvenci"
+
+#: plpy_cursorobject.c:177 plpy_spi.c:211
+#, c-format
+msgid "could not execute plan"
+msgstr "nelze spustit plán"
+
+#: plpy_cursorobject.c:180 plpy_spi.c:214
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Očekávána posloupnost %d argument, předáno %d: %s"
+msgstr[1] "Očekávána posloupnost %d argumentů, předáno %d: %s"
+msgstr[2] "Očekávána posloupnost %d argumentů, předáno %d: %s"
+
+#: plpy_cursorobject.c:329
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "iterování uzavřeného kurzoru"
+
+#: plpy_cursorobject.c:337 plpy_cursorobject.c:403
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "iterování kurzoru ve zrušené subtransakci"
+
+#: plpy_cursorobject.c:395
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "fetch ze zavřeného kurzoru"
+
+#: plpy_cursorobject.c:438 plpy_spi.c:409
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "výsledek dotazu má příliš mnoho řádek a nevejde se to Python seznamu"
+
+#: plpy_cursorobject.c:490
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "uzavření kurzoru ve zrušené subtransakci"
+
+#: plpy_elog.c:129 plpy_elog.c:130 plpy_plpymodule.c:553
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:143
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "nepodporovaný návratový mód funkce vracející tabulku"
+
+#: plpy_exec.c:144
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "PL/Python funkce vracející tabulku podporují pouze vracení jedné hodnoty pro každé volání."
+
+#: plpy_exec.c:157
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "přes vrácený objekt nelze iterovat"
+
+#: plpy_exec.c:158
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "PL/Python funkce vracející tabulku musí vracet iterovatelný objekt."
+
+#: plpy_exec.c:172
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "chyba při načítání další položky z iterátoru"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "PL/Python procedura nevrátila hodnotu None"
+
+#: plpy_exec.c:219
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "PL/Python funkce s návratovým typem \"void\" nevrátila hodnotu None"
+
+#: plpy_exec.c:375 plpy_exec.c:401
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "neočekávaná návratová hodnota z trigger procedury"
+
+#: plpy_exec.c:376
+#, c-format
+msgid "Expected None or a string."
+msgstr "Očekáváno None nebo řetězec."
+
+#: plpy_exec.c:391
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "PL/Python trigger funkce vrátila \"MODIFY\" v DELETE triggeru -- ignorováno"
+
+#: plpy_exec.c:402
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Očekáváno None, \"OK\", \"SKIP\", nebo \"MODIFY\"."
+
+#: plpy_exec.c:452
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "volání PyList_SetItem() selhalo během vytváření argumentů"
+
+#: plpy_exec.c:456
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "volání PyDict_SetItemString() selhalo během přípravy argumentů"
+
+#: plpy_exec.c:468
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "funkce vracející záznam byla zavolána z kontextu, který neumožňuje přijetí záznamu"
+
+#: plpy_exec.c:685
+#, c-format
+msgid "while creating return value"
+msgstr "během vytváření návratové hodnoty"
+
+#: plpy_exec.c:919
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] smazáno, nelze modifikovat řádek"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] není slovník"
+
+#: plpy_exec.c:951
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "TD[\"new\"] klíč slovníku na pozici %d není řetězec"
+
+#: plpy_exec.c:958
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "klíč \"%s\" nalezený v TD[\"new\"] neexistuje jako sloupec v triggering řádku"
+
+#: plpy_exec.c:963
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "nelze nastavit systémový atribut \"%s\""
+
+#: plpy_exec.c:968
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "nelze přiřazovat do generovaného sloupce \"%s\""
+
+#: plpy_exec.c:1026
+#, c-format
+msgid "while modifying trigger row"
+msgstr "během modifikace řádku triggeru"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "vynucené ukončení subtransakce která nebyla dokončena"
+
+#: plpy_main.c:125
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "v session je načteno několik Python knihoven"
+
+#: plpy_main.c:126
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "Pouze jedna major verze Pythonu může být použita v jedné session."
+
+#: plpy_main.c:142
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "nezachycená chyba v inicializaci"
+
+#: plpy_main.c:165
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "nepodařilo se naimportovat \"__main__\" modul"
+
+#: plpy_main.c:174
+#, c-format
+msgid "could not initialize globals"
+msgstr "nepodařilo se inicializovat globální proměnné (globals)"
+
+#: plpy_main.c:399
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "PL/Python procedura \"%s\""
+
+#: plpy_main.c:402
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "PL/Python funkce \"%s\""
+
+#: plpy_main.c:410
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "PL/Python anonymní blok kódu"
+
+#: plpy_plpymodule.c:186 plpy_plpymodule.c:189
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "nepodařilo se naimportovat \"plpy\" modul"
+
+#: plpy_plpymodule.c:204
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "nepodařilo se vytvořit spiexceptions modul"
+
+#: plpy_plpymodule.c:212
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "nepodařilo se naimportovat \"__main__\" modul"
+
+#: plpy_plpymodule.c:280
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "nepodařilo se vygenerovat SPI výjimky"
+
+#: plpy_plpymodule.c:448
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "nepodařilo se rozbalit argumenty v plpy.elog"
+
+#: plpy_plpymodule.c:457
+msgid "could not parse error message in plpy.elog"
+msgstr "nepodařilo se naparsovat chybovou hlášku v plpy.elog"
+
+#: plpy_plpymodule.c:474
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "argument 'message' zadán jménem a pozicí"
+
+#: plpy_plpymodule.c:501
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "'%s' je neplatný keyword argument pro tuto funkci"
+
+#: plpy_plpymodule.c:512 plpy_plpymodule.c:518
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "chybný SQLSTATE kód"
+
+#: plpy_procedure.c:230
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "funkce pro obsluhu triggerů mohou být volané pouze prostřednictvím triggerů"
+
+#: plpy_procedure.c:234
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "PL/Python funkce nemohou vracet typ %s"
+
+#: plpy_procedure.c:312
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "PL/Python funkce nepodporují typ %s"
+
+#: plpy_procedure.c:402
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "nelze zkompiloval PL/Python funkci \"%s\""
+
+#: plpy_procedure.c:405
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "nelze zkompiloval anonymní PL/Python blok"
+
+#: plpy_resultobject.c:121 plpy_resultobject.c:147 plpy_resultobject.c:173
+#, c-format
+msgid "command did not produce a result set"
+msgstr "příkaz nevrátil žádný výsledek"
+
+#: plpy_spi.c:60
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "druhý argument pro plpy.prepare musí být posloupnost"
+
+#: plpy_spi.c:104
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: název typu na pozici %d není řetězec"
+
+#: plpy_spi.c:176
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute očekávala dotaz nebo plán"
+
+#: plpy_spi.c:195
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute jako druhý argument očekává posloupnost"
+
+#: plpy_spi.c:305
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "volání SPI_execute_plan selhalo: %s"
+
+#: plpy_spi.c:347
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "volání SPI_execute selhalo: %s"
+
+#: plpy_subxactobject.c:97
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "tato subtransakce již byla zahájena"
+
+#: plpy_subxactobject.c:103 plpy_subxactobject.c:161
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "tato subtransakce již byla dokončena"
+
+#: plpy_subxactobject.c:155
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "tato subtransakce nebyla zahájena"
+
+#: plpy_subxactobject.c:167
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "nenalezena subtransakce k ukončení"
+
+#: plpy_typeio.c:591
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "nepodařilo se naimportovat modul pro Decimal constructor"
+
+#: plpy_typeio.c:595
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "modul nemá žádný Decimal atribut"
+
+#: plpy_typeio.c:601
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "konverze z numeric na Decimal selhala"
+
+#: plpy_typeio.c:915
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "nepodařilo se vytvořit bytovou reprezentaci Python objektu"
+
+#: plpy_typeio.c:1063
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "nepodařilo se vytvořit řetězcovou reprezentaci Python objektu"
+
+#: plpy_typeio.c:1074
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "nepodařilo se převést Python objekt na cstring: zdá se že řetězcová reprezentace Python objektu obsahuje null byty"
+
+#: plpy_typeio.c:1183
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "počet dimenzí pole překračuje povolené maximum (%d)"
+
+#: plpy_typeio.c:1187
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "nelze určit délku posloupnosti pro návratovou hodnotu funkce"
+
+#: plpy_typeio.c:1190 plpy_typeio.c:1194
+#, c-format
+msgid "array size exceeds the maximum allowed"
+msgstr "velikost pole překračuje povolené maximum"
+
+#: plpy_typeio.c:1220
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "návratová hodnota funkce s návratovým typem pole není Python posloupnost (sequence)"
+
+#: plpy_typeio.c:1266
+#, c-format
+msgid "wrong length of inner sequence: has length %d, but %d was expected"
+msgstr "chybná délka vnitční sekvence: má délku %d, ale očekáváno bylo %d"
+
+#: plpy_typeio.c:1268
+#, c-format
+msgid "To construct a multidimensional array, the inner sequences must all have the same length."
+msgstr "Pro vytvoření vícerozměrného pole musí mít včechny vnitřní sekvence stejnou délku."
+
+#: plpy_typeio.c:1347
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "chybný literál záznamu: \"%s\""
+
+#: plpy_typeio.c:1348
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Chybějící levá závorka."
+
+#: plpy_typeio.c:1349 plpy_typeio.c:1550
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "Pro vrácení kompozitního typu v poli, vracejte kompozitní typ jako Python tuple, e.g., \"[('foo',)]\"."
+
+#: plpy_typeio.c:1396
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "klíč \"%s\" nenalezen v mapování"
+
+#: plpy_typeio.c:1397
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "Pro vrácení hodnoty null ve sloupci, přidejte do mapování hodnotu None s klíčem pojmenovaným jako sloupec."
+
+#: plpy_typeio.c:1450
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "délka vrácené posloupnosti neodpovídala počtu sloupců v řádku"
+
+#: plpy_typeio.c:1548
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "atribut \"%s\" v Python objektu neexistuje"
+
+#: plpy_typeio.c:1551
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "Pro vrácení null ve sloupci, nechť vracený objekt má atribut pojmenovaný po sloupcis hodnotou None."
+
+#: plpy_util.c:35
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "nelze převést Python Unicode objekt na byty"
+
+#: plpy_util.c:41
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "nepodařilo se získat byty z kódovaného řetězce"
+
+#~ msgid "could not initialize plpy"
+#~ msgstr "nepodařilo se inicializovat plpy"
+
+#~ msgid "could not create new Python list"
+#~ msgstr "nelze vytvořit nový Python seznam"
+
+#~ msgid "PL/Python only supports one-dimensional arrays."
+#~ msgstr "PL/Python podporuje pouze jednorozměrná pole."
+
+#~ msgid "cannot convert multidimensional array to Python list"
+#~ msgstr "vícerozměrné pole nelze převést na Python seznam (list)"
+
+#~ msgid "PL/Python does not support conversion to arrays of row types."
+#~ msgstr "PL/Python nepodporuje konverzi na pole řádkových typů."
+
+#~ msgid "could not create new dictionary"
+#~ msgstr "nepodařilo se vytvořit nový slovník"
+
+#~ msgid "unrecognized error in PLy_spi_execute_fetch_result"
+#~ msgstr "nerozpoznaná chyba v PLy_spi_execute_fetch_result"
+
+#~ msgid "plpy.prepare does not support composite types"
+#~ msgstr "plpy.prepare nepodporuje složené typy"
+
+#~ msgid "could not create the base SPI exceptions"
+#~ msgstr "nepodařilo se vygenerovat základní SPI výjimky"
+
+#~ msgid "plan.status takes no arguments"
+#~ msgstr "plan.status nepřijímá žádné argumenty"
+
+#~ msgid "could not create globals"
+#~ msgstr "nepodařilo se vytvořit globals"
+
+#~ msgid "Start a new session to use a different Python major version."
+#~ msgstr "Spouští se nová session pro použití jiné hlavní verze Pythonu."
+
+#~ msgid "This session has previously used Python major version %d, and it is now attempting to use Python major version %d."
+#~ msgstr "Tato session již dříve používala Python s hlavní verzí %d, a nyní se pokouší použít Python s hlavní verzí %d."
+
+#~ msgid "could not create new dictionary while building trigger arguments"
+#~ msgstr "během vytváření argumentů triggeru nelze vytvářet nový slovník"
diff --git a/src/pl/plpython/po/de.po b/src/pl/plpython/po/de.po
new file mode 100644
index 0000000..29962f1
--- /dev/null
+++ b/src/pl/plpython/po/de.po
@@ -0,0 +1,451 @@
+# German message translation file for plpython
+# Copyright (C) 2009 - 2019 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# Peter Eisentraut <peter@eisentraut.org>, 2009 - 2019.
+#
+# Use these quotes: »%s«
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 12\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2023-05-04 23:38+0000\n"
+"PO-Revision-Date: 2023-05-05 07:45+0200\n"
+"Last-Translator: Peter Eisentraut <peter@eisentraut.org>\n"
+"Language-Team: German <pgsql-translators@postgresql.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor hat eine Anfrage oder einen Plan erwartet"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor nimmt eine Sequenz als zweites Argument"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "konnte Plan nicht ausführen"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Sequenz aus %d Argument erwartet, aber %d erhalten: %s"
+msgstr[1] "Sequenz aus %d Argumenten erwartet, aber %d erhalten: %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "Iteration mit einem geschlossenen Cursor"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "Iteration mit einem Cursor in einer abgebrochenen Transaktionen"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "Lesen aus einem geschlossenen Cursor"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "Anfrageergebnis hat zu viele Zeilen, um in eine Python-Liste zu passen"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "Schließen eines Cursors in einer abgebrochenen Subtransaktion"
+
+#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "nicht unterstützter Rückgabemodus für Funktion mit Mengenergebnis"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "PL/Python unterstützt für Funktionen mit Mengenergebnis nur das Zurückgeben von einem Wert pro Aufruf."
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "zurückgegebenes Objekt kann nicht iteriert werden"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "PL/Python-Funktionen mit Mengenergebnis müssen ein iterierbares Objekt zurückgeben."
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "Fehler beim Auslesen des nächsten Elements vom Iterator"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "PL/Python-Prozedur hat nicht None zurückgegeben"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "PL/Python-Funktion mit Rückgabetyp »void« hat nicht None zurückgegeben"
+
+#: plpy_exec.c:369 plpy_exec.c:393
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "unerwarteter Rückgabewert von Triggerprozedur"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "Erwartete None oder eine Zeichenkette."
+
+#: plpy_exec.c:383
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "PL/Python-Funktion gab in einem DELETE-Trigger \"MODIFY\" zurück -- ignoriert"
+
+#: plpy_exec.c:394
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Erwartete None, \"OK\", \"SKIP\" oder \"MODIFY\"."
+
+#: plpy_exec.c:444
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "PyList_SetItem() fehlgeschlagen, beim Einrichten der Argumente"
+
+#: plpy_exec.c:448
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "PyDict_SetItemString() fehlgeschlagen, beim Einrichten der Argumente"
+
+#: plpy_exec.c:460
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "Funktion, die einen Record zurückgibt, in einem Zusammenhang aufgerufen, der Typ record nicht verarbeiten kann"
+
+#: plpy_exec.c:677
+#, c-format
+msgid "while creating return value"
+msgstr "beim Erzeugen des Rückgabewerts"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] wurde gelöscht, kann Zeile nicht ändern"
+
+#: plpy_exec.c:929
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] ist kein Dictionary"
+
+#: plpy_exec.c:954
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "Dictionary-Schlüssel auf Position %d in TD[\"new\"] ist keine Zeichenkette"
+
+#: plpy_exec.c:961
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "in TD[\"new\"] gefundener Schlüssel »%s« existiert nicht als Spalte in der den Trigger auslösenden Zeile"
+
+#: plpy_exec.c:966
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "Systemattribut »%s« kann nicht gesetzt werden"
+
+#: plpy_exec.c:971
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "kann generierte Spalte »%s« nicht setzen"
+
+#: plpy_exec.c:1029
+#, c-format
+msgid "while modifying trigger row"
+msgstr "beim Ändern der Triggerzeile"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "Abbruch einer Subtransaktion, die nicht beendet wurde, wird erzwungen"
+
+#: plpy_main.c:109
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "in dieser Sitzung sind mehrere Python-Bibliotheken präsent"
+
+#: plpy_main.c:110
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "Nur eine Python-Hauptversion kann in einer Sitzung verwendet werden."
+
+#: plpy_main.c:122
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "nicht abgefangener Fehler bei der Initialisierung"
+
+#: plpy_main.c:145
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "konnte Modul »__main__« nicht importieren"
+
+#: plpy_main.c:154
+#, c-format
+msgid "could not initialize globals"
+msgstr "konnte globale Objekte nicht initialisieren"
+
+#: plpy_main.c:352
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "PL/Python-Prozedur »%s«"
+
+#: plpy_main.c:355
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "PL/Python-Funktion »%s«"
+
+#: plpy_main.c:363
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "anonymer PL/Python-Codeblock"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "konnte Modul »plpy« nicht importieren"
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "konnte das Modul »spiexceptions« nicht erzeugen"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "konnte das Modul »spiexceptions« nicht hinzufügen"
+
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "konnte SPI-Ausnahmen nicht erzeugen"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "konnte Argumente in plpy.elog nicht entpacken"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "konnte Fehlermeldung in plpy.elog nicht parsen"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "Argument »message« wurde durch Namen und Position angegeben"
+
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "»%s« ist ein ungültiges Schlüsselwortargument für diese Funktion"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "ungültiger SQLSTATE-Code"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "Triggerfunktionen können nur als Trigger aufgerufen werden"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "PL/Python-Funktionen können keinen Rückgabetyp %s haben"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "PL/Python-Funktionen können Typ %s nicht annehmen"
+
+#: plpy_procedure.c:395
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "konnte PL/Python-Funktion »%s« nicht kompilieren"
+
+#: plpy_procedure.c:398
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "konnte anonymen PL/Python-Codeblock nicht kompilieren"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "Befehl hat keine Ergebnismenge erzeugt"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "zweites Argument von plpy.prepare muss eine Sequenz sein"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: Typname auf Position %d ist keine Zeichenkette"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute hat eine Anfrage oder einen Plan erwartet"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute nimmt eine Sequenz als zweites Argument"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan fehlgeschlagen: %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute fehlgeschlagen: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "diese Subtransaktion wurde bereits begonnen"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "diese Subtransaktion wurde bereits beendet"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "diese Subtransaktion wurde nicht begonnen"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "es gibt keine Subtransaktion zu beenden"
+
+#: plpy_typeio.c:588
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "konnte kein Modul für den »Decimal«-Konstruktor importieren"
+
+#: plpy_typeio.c:592
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "kein Attribut »Decimal« im Modul"
+
+#: plpy_typeio.c:598
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "Umwandlung von numeric in Decimal fehlgeschlagen"
+
+#: plpy_typeio.c:912
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "konnte Bytes-Darstellung eines Python-Objektes nicht erzeugen"
+
+#: plpy_typeio.c:1049
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "konnte Zeichenkettendarstellung eines Python-Objektes nicht erzeugen"
+
+#: plpy_typeio.c:1060
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "konnte Python-Objekt nicht in cstring umwandeln: Python-Zeichenkettendarstellung enthält anscheinend Null-Bytes"
+
+#: plpy_typeio.c:1157
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "Rückgabewert von Funktion mit Array-Rückgabetyp ist keine Python-Sequenz"
+
+#: plpy_typeio.c:1202
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "konnte Sequenzlänge für Funktionsrückgabewert nicht ermitteln"
+
+#: plpy_typeio.c:1222 plpy_typeio.c:1237 plpy_typeio.c:1253
+#, c-format
+msgid "multidimensional arrays must have array expressions with matching dimensions"
+msgstr "mehrdimensionale Arrays müssen Arraysausdrücke mit gleicher Anzahl Dimensionen haben"
+
+#: plpy_typeio.c:1227
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "Anzahl der Arraydimensionen überschreitet erlaubtes Maximum (%d)"
+
+#: plpy_typeio.c:1329
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "fehlerhafte Record-Konstante: »%s«"
+
+#: plpy_typeio.c:1330
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Linke Klammer fehlt."
+
+#: plpy_typeio.c:1331 plpy_typeio.c:1532
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "Um einen zusammengesetzten Typ in einem Array zurückzugeben, geben Sie den zusammengesetzten Typ als ein Python-Tupel zurück, z.B. »[('foo',)]«."
+
+#: plpy_typeio.c:1378
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "Schlüssel »%s« nicht in Mapping gefunden"
+
+#: plpy_typeio.c:1379
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "Um einen NULL-Wert in einer Spalte zurückzugeben, muss der Wert None mit einem nach der Spalte benannten Schlüssel in das Mapping eingefügt werden."
+
+#: plpy_typeio.c:1432
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "Länge der zurückgegebenen Sequenz hat nicht mit der Anzahl der Spalten in der Zeile übereingestimmt"
+
+#: plpy_typeio.c:1530
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "Attribut »%s« existiert nicht in Python-Objekt"
+
+#: plpy_typeio.c:1533
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "Um einen NULL-Wert in einer Spalte zurückzugeben, muss das zurückzugebende Objekt ein nach der Spalte benanntes Attribut mit dem Wert None haben."
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "konnte Python-Unicode-Objekt nicht in Bytes umwandeln"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "konnte kodierte Zeichenkette nicht in Bytes umwandeln"
diff --git a/src/pl/plpython/po/el.po b/src/pl/plpython/po/el.po
new file mode 100644
index 0000000..a606ad1
--- /dev/null
+++ b/src/pl/plpython/po/el.po
@@ -0,0 +1,461 @@
+# Greek message translation file for plpython
+# Copyright (C) 2021 PostgreSQL Global Development Group
+# This file is distributed under the same license as the plpython (PostgreSQL) package.
+# Georgios Kokolatos <gkokolatos@pm.me>, 2021.
+#
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython (PostgreSQL) 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2023-08-15 13:38+0000\n"
+"PO-Revision-Date: 2023-08-15 16:14+0200\n"
+"Last-Translator: Georgios Kokolatos <gkokolatos@pm.me>\n"
+"Language-Team: \n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Poedit 3.3.2\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor ανέμενε ένα ερώτημα ή ένα σχέδιο"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor λαμβάνει μια ακολουθία ως τη δεύτερη παράμετρο"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "δεν ήταν δυνατή η εκτέλεση του σχεδίου"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Ανέμενε ακολουθία %d παραμέτρου, έλαβε %d: %s"
+msgstr[1] "Ανέμενε ακολουθία %d παραμέτρων, έλαβε %d: %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "επαναλαμβάνει έναν κλειστό δρομέα"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "επαναλαμβάνει ένα δρομέα σε μία ματαιωμένη υποσυναλλαγή"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "ανάκτηση από κλειστό δρομέα"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "το αποτέλεσμα του ερωτήματος έχει πάρα πολλές σειρές για να χωρέσει σε μια λίστα Python"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "κλείσιμο ενός δρομέα σε μία ματαιωμένη υποσυναλλαγή"
+
+#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "μη υποστηριζόμενο είδος επιστροφής συνάρτησης συνόλου"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "Οι λειτουργίες επιστροφής συνόλου PL/Python υποστηρίζουν μόνο την επιστροφή μίας τιμής ανά κλήση."
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "το επιστρεφόμενο αντικείμενο δεν μπορεί να επαναληφθεί"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "Οι συναρτήσεις επιστροφής συνόλου PL/Python επιβάλλεται να επιστρέφουν ένα επαναλαμβανόμενο αντικείμενο."
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "σφάλμα κατά τη λήψη του επόμενου στοιχείου από το πρόγραμμα λήψης"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "διεργασία PL/Python δεν επέστρεψε None"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "συνάρτηση PL/Python με τύπο επιστροφής «void» δεν επέστρεψε None"
+
+#: plpy_exec.c:369 plpy_exec.c:393
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "μη αναμενόμενη τιμή επιστροφής από διεργασία εναύσματος"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "Αναμενόταν None ή μία συμβολοσειρά."
+
+#: plpy_exec.c:383
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "συνάρτηση εναύσματος PL/Python επέστρεψε «MODIFY» σε ένα έναυσμα DELETE -- παραβλέφθηκε"
+
+#: plpy_exec.c:394
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Αναμενόταν None, «OK», «SKIP», ή «MODIFY»."
+
+#: plpy_exec.c:444
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "PyList_SetItem() απέτυχε, κατά τη διάρκεια ετοιμασίας των παραμέτρων"
+
+#: plpy_exec.c:448
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "PyDict_SetItemString() απέτυχε, κατά τη διάρκεια ετοιμασίας των παραμέτρων"
+
+#: plpy_exec.c:460
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "συνάρτηση που επιστρέφει εγγραφή καλείται σε περιεχόμενο που δεν δύναται να αποδεχτεί τύπο εγγραφής"
+
+#: plpy_exec.c:677
+#, c-format
+msgid "while creating return value"
+msgstr "κατά τη δημιουργία τιμής επιστροφής"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[«new»] διαγράφηκε, δεν είναι δυνατή η μετατροπή σειράς"
+
+#: plpy_exec.c:929
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[«new»] δεν είναι ένα λεξικό"
+
+#: plpy_exec.c:954
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "TD[«new»] κλειδί λεξικού στη τακτή θέση %d δεν είναι μία συμβολοσειρά"
+
+#: plpy_exec.c:961
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "κλειδί «%s» που βρίσκεται στο TD[\"New\"] δεν υπάρχει ως στήλη στη γραμμή εναύσματος"
+
+#: plpy_exec.c:966
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "δεν είναι δυνατός ο ορισμός του χαρακτηριστικού συστήματος «%s»"
+
+#: plpy_exec.c:971
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "δεν είναι δυνατός ο ορισμός δημιουργημένης στήλης «%s»"
+
+#: plpy_exec.c:1029
+#, c-format
+msgid "while modifying trigger row"
+msgstr "κατά την τροποποίηση εναύσματος σειράς"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "βίαιη ματαίωση μιας υποσυναλλαγής που δεν έχει εξέλθει"
+
+#: plpy_main.c:109
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "υπάρχουν πολλαπλές βιβλιοθήκες Python στη συνεδρία"
+
+#: plpy_main.c:110
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "Μόνο μία κύρια έκδοση Python μπορεί να χρησιμοποιηθεί σε μία συνεδρία."
+
+#: plpy_main.c:122
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "μη παγιδευμένο σφάλμα κατά την προετοιμασία"
+
+#: plpy_main.c:145
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "δεν ήταν δυνατή η εισαγωγή του αρθρώματος «__main__»"
+
+#: plpy_main.c:154
+#, c-format
+msgid "could not initialize globals"
+msgstr "δεν ήταν δυνατή η αρχικοποίηση καθολικών μεταβλητών"
+
+#: plpy_main.c:352
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "διεργασία PL/Python «%s»"
+
+#: plpy_main.c:355
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "συνάρτηση PL/Python «%s»"
+
+#: plpy_main.c:363
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "ονώνυμο μπλοκ κώδικα PL/Python"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "δεν ήταν δυνατή η εισαγωγή του αρθρώματος «plpy»"
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "δεν ήταν δυνατή η δημιουργία του αρθρώματος spiexceptions"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "δεν ήταν δυνατή η πρόσθεση του αρθρώματος spiexceptions"
+
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "δεν ήταν δυνατή η του αρθρώματος spiexceptions"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "δεν ήταν δυνατή η αποσυσκευασία παραμέτρων στο plpy.elog"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "δεν ήταν δυνατή η ανάλυση μηνυμάτος σφάλματος στο plpy.elog"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "παράμετρος «μήνυμα» που δόθηκε με όνομα και θέση"
+
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "‘%s’ είναι μία άκυρη παράμετρος με λέξη-κλειδί για αυτή τη συνάρτηση"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "μη έγκυρος κωδικός SQLSTATE"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "συναρτήσεις εναυσμάτων μπορούν να κληθούν μόνο ως εναύσματα"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "οι συναρτήσεις PL/Python δεν μπορούν να επιστρέψουν τύπο %s"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "οι συναρτήσεις PL/Python δεν μπορούν να δεχθούν τύπο %s"
+
+#: plpy_procedure.c:395
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "δεν ήταν δυνατή η μεταγλώττιση της συνάρτησης PL/Python «%s»"
+
+#: plpy_procedure.c:398
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "δεν ήταν δυνατή η μεταγλώττιση ανώνυμου μπλοκ κώδικα PL/Python"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "η εντολή δεν παρήγαγε ένα σύνολο αποτελάσματων"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "η δεύτερη παράμετρος του plpy.prepare επιβάλλεται να είναι μία ακολουθία"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: το όνομα τύπου στη τακτή θέση %d δεν είναι συμβολοσειρά"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute ανέμενε ένα ερώτημα ή ένα σχέδιο"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute λαμβάνει μια ακολουθία ως δεύτερη παράμετρό του"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan απέτυχε: %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute απέτυχε: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "έχει εισέλθει ήδη σε αυτή τη υποσυναλλάγή"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "έχει εξέλθει ήδη από αυτή τη υποσυναλλάγή"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "δεν έχει εισέλθει σε αυτή τη υποσυναλλάγή"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "δεν υπάρχει υποσυναλλαγή από την οποία να εξέλθει"
+
+#: plpy_typeio.c:588
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "δεν ήταν δυνατή η εισαγωγή αρθρώματος για τον κατασκευαστή Decimal"
+
+#: plpy_typeio.c:592
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "καμία ιδιότητα Decimal στο άρθρωμα"
+
+#: plpy_typeio.c:598
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "μετατροπή από αριθμητικό σε Decimal απέτυχε"
+
+#: plpy_typeio.c:912
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "δεν ήταν δυνατή η δημιουργία bytes αναπαράστασης του αντικειμένου Python"
+
+#: plpy_typeio.c:1049
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "δεν ήταν δυνατή η δημιουργία string αναπαράστασης του αντικειμένου Python"
+
+#: plpy_typeio.c:1060
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "δεν ήταν δυνατή η μετατροπή του αντικειμένου Python σε cstring: Η αναπαράσταση συμβολοσειράς Python φαίνεται να περιέχει null bytes"
+
+#: plpy_typeio.c:1157
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "η τιμή επιστροφής της συνάρτησης με τύπο επιστροφής συστυχίας δεν είναι μία ακολουθία Python"
+
+#: plpy_typeio.c:1202
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "δεν ήταν δυνατός ο προσδιορισμός του μήκους της ακολουθίας για την τιμή επιστροφής της συνάρτησης"
+
+#: plpy_typeio.c:1222 plpy_typeio.c:1237 plpy_typeio.c:1253
+#, c-format
+msgid "multidimensional arrays must have array expressions with matching dimensions"
+msgstr "πολυδιάστατες συστυχίες πρέπει να περιέχουν εκφράσεις συστυχίας με αντίστοιχο αριθμό διαστάσεων"
+
+#: plpy_typeio.c:1227
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "o αριθμός των διαστάσεων συστοιχίας υπερβαίνει το μέγιστο επιτρεπόμενο (%d)"
+
+#: plpy_typeio.c:1329
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "κακοσχηματισμένο εγγραφή: «%s»"
+
+#: plpy_typeio.c:1330
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Λείπει δεξιά παρένθεση."
+
+#: plpy_typeio.c:1331 plpy_typeio.c:1532
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "Για να επιστρέψετε έναν σύνθετο τύπο σε μία συστυχία, επιστρέψτε τον σύνθετο τύπο ως πλειάδα Python, π.χ. «[(‘foo’,)»."
+
+#: plpy_typeio.c:1378
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "κλειδί «%s» δεν βρέθηκε σε αντιστοίχιση"
+
+#: plpy_typeio.c:1379
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "Για να επιστρέψετε null σε μια στήλη, προσθέστε την τιμή None στην αντιστοίχιση με το κλειδί που ονομάστηκε από τη στήλη."
+
+#: plpy_typeio.c:1432
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "το μήκος της ακολουθίας που επιστράφηκε δεν ταίριαζε με τον αριθμό των στηλών στη γραμμή"
+
+#: plpy_typeio.c:1530
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "η ιδιότητα «%s» δεν υπάρχει στο αντικείμενο Python"
+
+#: plpy_typeio.c:1533
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "Για να επιστρέψετε null σε μια στήλη, αφήστε το αντικείμενο που επιστράφηκε να έχει ένα χαρακτηριστικό που ονομάζεται από την στήλη με τιμή None."
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "δεν ήταν δυνατή η μετατροπή του αντικειμένου Python Unicode σε bytes"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "δεν ήταν δυνατή η εξόρυξη bytes από κωδικοποιημένη συμβολοσειρά"
+
+#~ msgid "To construct a multidimensional array, the inner sequences must all have the same length."
+#~ msgstr "Για να κατασκευαστεί μια πολυδιάστατη συστυχία, οι εσωτερικές ακολουθίες πρέπει να έχουν όλες το ίδιο μήκος."
+
+#~ msgid "array size exceeds the maximum allowed"
+#~ msgstr "το μέγεθος συστοιχίας υπερβαίνει το μέγιστο επιτρεπόμενο"
+
+#~ msgid "wrong length of inner sequence: has length %d, but %d was expected"
+#~ msgstr "λάθος μήκος της εσωτερικής ακολουθίας: έχει μήκος %d , αλλά αναμενόταν %d"
diff --git a/src/pl/plpython/po/es.po b/src/pl/plpython/po/es.po
new file mode 100644
index 0000000..8186ef8
--- /dev/null
+++ b/src/pl/plpython/po/es.po
@@ -0,0 +1,454 @@
+# Spanish message translation file for plpython
+#
+# Copyright (c) 2009-2021, PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+#
+# Emanuel Calvo Franco <postgres.arg@gmail.com>, 2009.
+# Alvaro Herrera <alvherre@alvh.no-ip.org>, 2009-2012
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython (PostgreSQL) 16\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2023-05-22 07:08+0000\n"
+"PO-Revision-Date: 2023-05-22 12:06+0200\n"
+"Last-Translator: Carlos Chapi <carlos.chapi@2ndquadrant.com>\n"
+"Language-Team: PgSQL-es-Ayuda <pgsql-es-ayuda@lists.postgresql.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Poedit 2.0.2\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor espera una consulta o un plan"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor lleva una secuencia como segundo argumento"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "no se pudo ejecutar el plan"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Se esperaba una secuencia de %d argumento, se obtuvo %d: %s"
+msgstr[1] "Se esperaba una secuencia de %d argumentos, se obtuvo %d: %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "iterando un cursor cerrado"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "iterando un cursor en una subtransacción abortada"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "haciendo «fetch» en un cursor cerrado"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "el resultado de la consulta tiene demasiados registros y no entran en una lista de Python"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "cerrando un cursor en una subtransacción abortada"
+
+#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "modo de retorno de conjunto de función no soportado"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "Las funciones PL/Python que retornan conjuntos sólo permiten retornar un valor por invocación."
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "objeto retornado no puede ser iterado"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "Los funciones PL/Python que retornan conjuntos deben retornar un objeto iterable."
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "error extrayendo el próximo elemento del iterador"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "procedimiento PL/Python no returnó None"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "función PL/Python con tipo de retorno «void» no retorna None"
+
+#: plpy_exec.c:369 plpy_exec.c:393
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "valor de retorno no esperado desde el procedimiento disparador"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "Se esperaba None o una cadena."
+
+#: plpy_exec.c:383
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "función de disparador de PL/Python retorno «MODIFY» en un disparador de tipo DELETE -- ignorado"
+
+#: plpy_exec.c:394
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Se esperaba None, «OK», «SKIP» o «MODIFY»."
+
+#: plpy_exec.c:444
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "PyList_SetItem() falló, mientras se inicializaban los argumentos"
+
+#: plpy_exec.c:448
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "PyDict_SetItemString() falló, mientras se inicializaban los argumentos"
+
+#: plpy_exec.c:460
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "se llamó una función que retorna un registro en un contexto que no puede aceptarlo"
+
+#: plpy_exec.c:677
+#, c-format
+msgid "while creating return value"
+msgstr "mientras se creaba el valor de retorno"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] borrado, no se puede modicar el registro"
+
+#: plpy_exec.c:929
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] no es un diccionario"
+
+#: plpy_exec.c:954
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "el nombre del atributo de TD[\"new\"] en la posición %d no es una cadena"
+
+#: plpy_exec.c:961
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "la llave «%s» en TD[\"new\"] no existe como columna en la fila disparadora"
+
+#: plpy_exec.c:966
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "no se puede definir el atributo de sistema «%s»"
+
+#: plpy_exec.c:971
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "no se puede definir el atributo generado «%s»"
+
+#: plpy_exec.c:1029
+#, c-format
+msgid "while modifying trigger row"
+msgstr "mientras se modificaba la fila de disparador"
+
+# FIXME not very happy with this
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "abortando una subtransacción que no se ha cerrado"
+
+#: plpy_main.c:109
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "hay múltiples librerías de Python presentes en esta sesión"
+
+#: plpy_main.c:110
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "Sólo se puede usar una versión mayor de Python en cada sesión."
+
+#: plpy_main.c:122
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "error no capturado en la inicialización"
+
+#: plpy_main.c:145
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "no se pudo importar el módulo «__main__»"
+
+#: plpy_main.c:154
+#, c-format
+msgid "could not initialize globals"
+msgstr "no se pudo inicializar las globales"
+
+#: plpy_main.c:352
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "procedimiento PL/Python «%s»"
+
+#: plpy_main.c:355
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "función PL/Python «%s»"
+
+#: plpy_main.c:363
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "bloque de código anónimo de PL/Python"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "no se pudo importar el módulo «plpy»"
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "no se pudo crear el módulo spiexceptions"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "no se pudo importar el módulo spiexceptions"
+
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "no se pudo generar excepciones SPI"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "no se pudo desempaquetar los argumentos de plpy.elog"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "no se pudo analizar el mensaje de error de plpy.elog"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "el argumento 'message' fue pasado por nombre y posición"
+
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "«%s» no es un argumento válido para esta función"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "código SQLSTATE no válido"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "las funciones disparadoras sólo pueden ser llamadas como disparadores"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "las funciones PL/Python no pueden retornar el tipo %s"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "la funciones PL/Python no pueden aceptar el tipo %s"
+
+#: plpy_procedure.c:395
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "no se pudo compilar la función PL/Python «%s»"
+
+#: plpy_procedure.c:398
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "no se pudo compilar el bloque anónimo PL/Python"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "la orden no produjo un conjunto de resultados"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "el segundo argumento de plpy.prepare debe ser una secuencia"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: el nombre de tipo en la posición %d no es una cadena"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute espera una consulta o un plan"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute lleva una secuencia como segundo argumento"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "falló SPI_execute_plan: %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "falló SPI_execute: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "ya se ha entrado en esta subtransacción"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "ya se ha salido de esta subtransacción"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "no se ha entrado en esta subtransacción"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "no hay una subtransacción de la cual salir"
+
+#: plpy_typeio.c:588
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "no se pudo importar un módulo para el constructor Decimal"
+
+#: plpy_typeio.c:592
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "no se encontró atributo Decimal en el módulo"
+
+#: plpy_typeio.c:598
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "falló la conversión de numeric a Decimal"
+
+#: plpy_typeio.c:912
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "no se pudo crear la representación de cadena de bytes de Python"
+
+#: plpy_typeio.c:1049
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "no se pudo crear la representación de cadena de texto del objeto de Python"
+
+#: plpy_typeio.c:1060
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "no se pudo convertir el objeto Python a un cstring: la representación de cadena Python parece tener bytes nulos (\\0)"
+
+#: plpy_typeio.c:1157
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "el valor de retorno de la función con tipo de retorno array no es una secuencia Python"
+
+#: plpy_typeio.c:1202
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "no se pudo determinar el largo de secuencia del retorno de valor de la función"
+
+#: plpy_typeio.c:1222 plpy_typeio.c:1237 plpy_typeio.c:1253
+#, c-format
+msgid "multidimensional arrays must have array expressions with matching dimensions"
+msgstr "los arrays multidimensionales deben tener expresiones de arrays con dimensiones coincidentes"
+
+#: plpy_typeio.c:1227
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "el número de dimensiones del array excede el máximo permitido (%d)"
+
+#: plpy_typeio.c:1329
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "literal de record no es válido: «%s»"
+
+#: plpy_typeio.c:1330
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Falta paréntesis izquierdo."
+
+#: plpy_typeio.c:1331 plpy_typeio.c:1532
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "Para retornar un tipo compuesto en un array, retorne el tipo compuesto como una tupla de Python, e.g., «[('foo',)]»."
+
+#: plpy_typeio.c:1378
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "la llave «%s» no fue encontrada en el mapa"
+
+#: plpy_typeio.c:1379
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "Para retornar null en una columna, agregue el valor None al mapa, con llave llamada igual que la columna."
+
+#: plpy_typeio.c:1432
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "el tamaño de la secuencia retornada no concuerda con el número de columnas de la fila"
+
+#: plpy_typeio.c:1530
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "el atributo «%s» no existe en el objeto Python"
+
+#: plpy_typeio.c:1533
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "Para retornar null en una columna, haga que el objeto retornado tenga un atributo llamado igual que la columna, con valor None."
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "no se pudo convertir el objeto Unicode de Python a bytes"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "no se pudo extraer bytes desde la cadena codificada"
diff --git a/src/pl/plpython/po/fr.po b/src/pl/plpython/po/fr.po
new file mode 100644
index 0000000..2922a28
--- /dev/null
+++ b/src/pl/plpython/po/fr.po
@@ -0,0 +1,590 @@
+# LANGUAGE message translation file for plpython
+# Copyright (C) 2009-2022 PostgreSQL Global Development Group
+# This file is distributed under the same license as the plpython (PostgreSQL) package.
+#
+# Use these quotes: « %s »
+#
+# Guillaume Lelarge <guillaume@lelarge.info>, 2009-2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 15\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2023-07-30 09:08+0000\n"
+"PO-Revision-Date: 2022-04-12 17:29+0200\n"
+"Last-Translator: Guillaume Lelarge <guillaume@lelarge.info>\n"
+"Language-Team: French <guillaume@lelarge.info>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Poedit 3.0.1\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor attendait une requête ou un plan"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor prends une séquence dans son second argument"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "n'a pas pu exécuter le plan"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Séquence attendue de %d argument, %d obtenu : %s"
+msgstr[1] "Séquence attendue de %d arguments, %d obtenus : %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "itération d'un curseur fermé"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "itération d'un curseur dans une sous-transaction annulée"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "récupérer à partir d'un curseur fermé"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "le résultat de la requête contient trop de lignes pour être intégré dans une liste Python"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "fermeture d'un curseur dans une sous-transaction annulée"
+
+#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "mode de retour non supporté pour la fonction SET"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr ""
+"les fonctions PL/python renvoyant des ensembles supportent seulement une\n"
+"valeur renvoyée par appel."
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "l'objet renvoyé ne supporte pas les itérations"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr ""
+"les fonctions PL/python renvoyant des ensembles doivent renvoyer un objet\n"
+"itérable"
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "erreur lors de la récupération du prochain élément de l'itérateur"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "la procédure PL/python n'a pas renvoyé None"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "la fonction PL/python avec un code de retour « void » ne renvoyait pas None"
+
+#: plpy_exec.c:369 plpy_exec.c:393
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "valeur de retour inattendue de la procédure trigger"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "Attendait None ou une chaîne de caractères."
+
+#: plpy_exec.c:383
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr ""
+"la fonction trigger PL/python a renvoyé « MODIFY » dans un trigger DELETE\n"
+"-- ignoré"
+
+#: plpy_exec.c:394
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Attendait None, « OK », « SKIP » ou « MODIFY »."
+
+#: plpy_exec.c:444
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "échec de PyList_SetItem() lors de l'initialisation des arguments"
+
+#: plpy_exec.c:448
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "échec de PyDict_SetItemString() lors de l'initialisation des arguments"
+
+#: plpy_exec.c:460
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr ""
+"fonction renvoyant le type record appelée dans un contexte qui ne peut pas\n"
+"accepter le type record"
+
+#: plpy_exec.c:677
+#, c-format
+msgid "while creating return value"
+msgstr "lors de la création de la valeur de retour"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] supprimé, ne peut pas modifier la ligne"
+
+#: plpy_exec.c:929
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] n'est pas un dictionnaire"
+
+#: plpy_exec.c:954
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "la clé TD[\"new\"] à la position ordinale %d n'est pas une chaîne"
+
+#: plpy_exec.c:961
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr ""
+"la clé « %s » trouvée dans TD[\"new\"] n'existe pas comme colonne\n"
+"de la ligne impactée par le trigger"
+
+#: plpy_exec.c:966
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "ne peut pas initialiser l'attribut système « %s »"
+
+#: plpy_exec.c:971
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "ne peut pas initialiser la colonne générée « %s »"
+
+#: plpy_exec.c:1029
+#, c-format
+msgid "while modifying trigger row"
+msgstr "lors de la modification de la ligne du trigger"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "annulation forcée d'une sous-transaction qui n'a jamais été quittée"
+
+#: plpy_main.c:109
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "plusieurs bibliothèques Python sont présentes dans la session"
+
+#: plpy_main.c:110
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "Seule une version majeure de Python peut être utilisée dans une session."
+
+#: plpy_main.c:122
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "erreur non récupérée dans l'initialisation"
+
+#: plpy_main.c:145
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "n'a pas pu importer le module « __main__ »"
+
+#: plpy_main.c:154
+#, c-format
+msgid "could not initialize globals"
+msgstr "n'a pas pu initialiser les variables globales"
+
+#: plpy_main.c:352
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "procédure PL/python « %s »"
+
+#: plpy_main.c:355
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "fonction PL/python « %s »"
+
+#: plpy_main.c:363
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "bloc de code PL/Python anonyme"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "n'a pas pu importer le module « plpy »"
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "n'a pas pu créer le module « spiexceptions »"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "n'a pas pu ajouter le module « spiexceptions »"
+
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "n'a pas pu générer les exceptions SPI"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "n'a pas pu déballer les arguments dans plpy.elog"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "n'a pas pu analyser le message d'erreur dans plpy.elog"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "argument 'message' donné par nom et position"
+
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "'%s' est une argument mot-clé invalide pour cette fonction"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "code SQLSTATE invalide"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "les fonctions trigger peuvent seulement être appelées par des triggers"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "les fonctions PL/python ne peuvent pas renvoyer le type %s"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "les fonctions PL/python ne peuvent pas accepter le type %s"
+
+#: plpy_procedure.c:395
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "n'a pas pu compiler la fonction PL/python « %s »"
+
+#: plpy_procedure.c:398
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "n'a pas pu compiler le bloc de code anonyme PL/python"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "la commande n'a pas fourni d'ensemble de résultats"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "le second argument de plpy.prepare doit être une séquence"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare : le nom du type sur la position ordinale %d n'est pas une chaîne"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.prepare attendait une requête ou un plan"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute prends une séquence dans son second argument"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "échec de SPI_execute_plan : %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "échec de SPI_execute : %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "cette sous-transaction est en cours d'utilisation"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "déjà sorti de cette sous-transaction"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "cette sous-transaction n'a jamais été utilisée"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "il n'y a pas de transaction à quitter"
+
+#: plpy_typeio.c:588
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "n'a pas pu importer un module pour le constructeur Decimal"
+
+#: plpy_typeio.c:592
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "pas d'attribut Decimal dans le module"
+
+#: plpy_typeio.c:598
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "échec de la conversion numeric vers Decimal"
+
+#: plpy_typeio.c:912
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "n'a pas pu créer une représentation octets de l'objet Python"
+
+#: plpy_typeio.c:1049
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "n'a pas pu créer une représentation chaîne de caractères de l'objet Python"
+
+#: plpy_typeio.c:1060
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "n'a pas pu convertir l'objet Python en csting : la représentation de la chaîne Python contient des octets nuls"
+
+#: plpy_typeio.c:1157
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "la valeur de retour de la fonction de type tableau n'est pas une séquence Python"
+
+#: plpy_typeio.c:1202
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "n'a pas pu déterminer la longueur de la séquence pour la valeur de retour de la fonction"
+
+#: plpy_typeio.c:1222 plpy_typeio.c:1237 plpy_typeio.c:1253
+#, c-format
+msgid "multidimensional arrays must have array expressions with matching dimensions"
+msgstr ""
+"les tableaux multidimensionnels doivent avoir des expressions de tableaux\n"
+"avec les dimensions correspondantes"
+
+#: plpy_typeio.c:1227
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "le nombre de dimensions du tableau dépasse le maximum autorisé (%d)"
+
+#: plpy_typeio.c:1329
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "enregistrement litéral invalide : « %s »"
+
+#: plpy_typeio.c:1330
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Parenthèse gauche manquante."
+
+#: plpy_typeio.c:1331 plpy_typeio.c:1532
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "Pour renvoyer un type composite dans un tableau, renvoyez le type composite sous la forme d'un tuple Python, c'est-à-dire \"[('foo',)]\"."
+
+#: plpy_typeio.c:1378
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "la clé « %s » introuvable dans la correspondance"
+
+#: plpy_typeio.c:1379
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr ""
+"Pour renvoyer NULL dans une colonne, ajoutez la valeur None à la\n"
+"correspondance de la clé nommée d'après la colonne."
+
+#: plpy_typeio.c:1432
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr ""
+"la longueur de la séquence renvoyée ne correspondait pas au nombre de\n"
+"colonnes dans la ligne"
+
+#: plpy_typeio.c:1530
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "l'attribut « %s » n'existe pas dans l'objet Python"
+
+#: plpy_typeio.c:1533
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr ""
+"Pour renvoyer NULL dans une colonne, faites en sorte que l'objet renvoyé ait\n"
+"un attribut nommé suivant la colonne de valeur None."
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "n'a pas pu convertir l'objet Unicode Python en octets"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "n'a pas pu extraire les octets de la chaîne encodée"
+
+#~ msgid "PL/Python does not support conversion to arrays of row types."
+#~ msgstr "PL/Python ne supporte pas les conversions vers des tableaux de types row."
+
+#~ msgid "PL/Python function \"%s\" could not execute plan"
+#~ msgstr "la fonction PL/python « %s » n'a pas pu exécuter un plan"
+
+#~ msgid "PL/Python function \"%s\" failed"
+#~ msgstr "échec de la fonction PL/python « %s »"
+
+#~ msgid "PL/Python only supports one-dimensional arrays."
+#~ msgstr "PL/Python supporte seulement les tableaux uni-dimensionnels."
+
+#~ msgid "PL/Python: %s"
+#~ msgstr "PL/python : %s"
+
+#~ msgid "PyCObject_AsVoidPtr() failed"
+#~ msgstr "échec de PyCObject_AsVoidPtr()"
+
+#~ msgid "PyCObject_FromVoidPtr() failed"
+#~ msgstr "échec de PyCObject_FromVoidPtr()"
+
+#~ msgid "Python major version mismatch in session"
+#~ msgstr "Différence de version majeure de Python dans la session"
+
+#~ msgid "Start a new session to use a different Python major version."
+#~ msgstr ""
+#~ "Lancez une nouvelle session pour utiliser une version majeure différente de\n"
+#~ "Python."
+
+#~ msgid "This session has previously used Python major version %d, and it is now attempting to use Python major version %d."
+#~ msgstr ""
+#~ "Cette session a auparavant utilisé la version majeure %d de Python et elle\n"
+#~ "essaie maintenant d'utiliser la version majeure %d."
+
+#, c-format
+#~ msgid "To construct a multidimensional array, the inner sequences must all have the same length."
+#~ msgstr "Pour construire un tableau multidimensionnel, les séquences internes doivent toutes avoir la même longueur."
+
+#, c-format
+#~ msgid "array size exceeds the maximum allowed"
+#~ msgstr "la taille du tableau dépasse le maximum permis"
+
+#~ msgid "cannot convert multidimensional array to Python list"
+#~ msgstr "ne peut pas convertir un tableau multidimensionnel en liste Python"
+
+#~ msgid "could not compute string representation of Python object in PL/Python function \"%s\" while modifying trigger row"
+#~ msgstr ""
+#~ "n'a pas pu traiter la représentation de la chaîne d'un objet Python dans\n"
+#~ "la fonction PL/Python « %s » lors de la modification de la ligne du trigger"
+
+#~ msgid "could not create exception \"%s\""
+#~ msgstr "n'a pas pu créer l'exception « %s »"
+
+#~ msgid "could not create globals"
+#~ msgstr "n'a pas pu créer les globales"
+
+#~ msgid "could not create new Python list"
+#~ msgstr "n'a pas pu créer la nouvelle liste Python"
+
+#~ msgid "could not create new dictionary"
+#~ msgstr "n'a pas pu créer le nouveau dictionnaire"
+
+#~ msgid "could not create new dictionary while building trigger arguments"
+#~ msgstr ""
+#~ "n'a pas pu créer un nouveau dictionnaire lors de la construction des\n"
+#~ "arguments du trigger"
+
+#~ msgid "could not create procedure cache"
+#~ msgstr "n'a pas pu créer le cache de procédure"
+
+#~ msgid "could not create string representation of Python object in PL/Python function \"%s\" while creating return value"
+#~ msgstr ""
+#~ "n'a pas pu créer la représentation en chaîne de caractère de l'objet\n"
+#~ "Python dans la fonction PL/python « %s » lors de la création de la valeur\n"
+#~ "de retour"
+
+#~ msgid "could not create the base SPI exceptions"
+#~ msgstr "n'a pas pu créer les exceptions SPI de base"
+
+#~ msgid "invalid arguments for plpy.prepare"
+#~ msgstr "arguments invalides pour plpy.prepare"
+
+#~ msgid "multidimensional arrays must have array expressions with matching dimensions. PL/Python function return value has sequence length %d while expected %d"
+#~ msgstr ""
+#~ "les tableaux multidimensionnels doivent avoir des expressions de tableaux\n"
+#~ "avec des dimensions correspondantes. La valeur de retour de la fonction\n"
+#~ "PL/Python a une longueur de séquence %d alors que %d est attendue"
+
+#~ msgid "out of memory"
+#~ msgstr "mémoire épuisée"
+
+#~ msgid "plan.status takes no arguments"
+#~ msgstr "plan.status ne prends pas d'arguments"
+
+#~ msgid "plpy.prepare does not support composite types"
+#~ msgstr "plpy.prepare ne supporte pas les types composites"
+
+#~ msgid "the message is already specified"
+#~ msgstr "le message est déjà spécifié"
+
+#~ msgid "transaction aborted"
+#~ msgstr "transaction annulée"
+
+#~ msgid "unrecognized error in PLy_spi_execute_fetch_result"
+#~ msgstr "erreur inconnue dans PLy_spi_execute_fetch_result"
+
+#~ msgid "unrecognized error in PLy_spi_execute_plan"
+#~ msgstr "erreur inconnue dans PLy_spi_execute_plan"
+
+#~ msgid "unrecognized error in PLy_spi_execute_query"
+#~ msgstr "erreur inconnue dans PLy_spi_execute_query"
+
+#~ msgid "unrecognized error in PLy_spi_prepare"
+#~ msgstr "erreur inconnue dans PLy_spi_prepare"
+
+#, c-format
+#~ msgid "wrong length of inner sequence: has length %d, but %d was expected"
+#~ msgstr "mauvaise longueur de la séquence interne : a une longueur %d, mais %d était attendu"
diff --git a/src/pl/plpython/po/it.po b/src/pl/plpython/po/it.po
new file mode 100644
index 0000000..26ef9e0
--- /dev/null
+++ b/src/pl/plpython/po/it.po
@@ -0,0 +1,470 @@
+#
+# plpython.po
+# Italian message translation file for plpython
+#
+# For development and bug report please use:
+# https://github.com/dvarrazzo/postgresql-it
+#
+# Copyright (C) 2012-2017 PostgreSQL Global Development Group
+# Copyright (C) 2010, Associazione Culturale ITPUG
+#
+# Daniele Varrazzo <daniele.varrazzo@gmail.com>, 2012-2017.
+# Flavio Spada <f.spada@sbv.mi.it>
+#
+# This file is distributed under the same license as the PostgreSQL package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython (PostgreSQL) 11\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2022-09-30 12:08+0000\n"
+"PO-Revision-Date: 2022-09-30 15:00+0200\n"
+"Last-Translator: Domenico Sgarbossa <sgarbossa.domenico@gmail.com>\n"
+"Language-Team: https://github.com/dvarrazzo/postgresql-it\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Poedit 2.3\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor richiede una query o un piano"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor richiede una sequenza come secondo argomento"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "esecuzione del piano fallita"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Attesa sequenza di %d argomento, ricevuti %d: %s"
+msgstr[1] "Attesa sequenza di %d argomenti, ricevuti %d: %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "iterazione di un cursore chiuso"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "iterazione di un cursore in una sotto-transazione interrotta"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "lettura da un cursore chiuso"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "il risultato della query ha troppe righe per una lista Python"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "chiusura di un cursore in una sotto-transazione interrotta"
+
+#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "modalità di ritorno della funzione set non supportata"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "Le funzioni PL/Python che restituiscono insiemi supportano la restituzione di un solo valore per chiamata."
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "l'oggetto restituito non può essere iterato"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "Le funzioni PL/Python che restituiscono insiemi devono restituire un oggetto iterabile."
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "errore nell'ottenere l'elemento successivo dall'iteratore"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "la procedura PL/Python non ha restituito None"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "la funzione PL/Python che restituisce \"void\" non ha restituito None"
+
+#: plpy_exec.c:369 plpy_exec.c:395
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "la prodedura trigger ha restituito un valore inatteso"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "Atteso None o una stringa."
+
+#: plpy_exec.c:385
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "la funzione trigger PL/Python ha restituito \"MODIFY\" in un trigger DELETE -- ignorato"
+
+#: plpy_exec.c:396
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Atteso None, \"OK\", \"SKIP\", o \"MODIFY\"."
+
+#: plpy_exec.c:441
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "PyList_SetItem() è fallita durante l'impostazione degli argomenti"
+
+#: plpy_exec.c:445
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "PyDict_SetItemString() è fallita durante l'impostazione degli argomenti"
+
+#: plpy_exec.c:457
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "la funzione che restituisce un record è chiamata in un contesto che non può accettare il tipo record"
+
+#: plpy_exec.c:674
+#, c-format
+msgid "while creating return value"
+msgstr "durante la creazione del valore da restituire"
+
+#: plpy_exec.c:908
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] cancellato, non è possibile modificare la riga"
+
+#: plpy_exec.c:913
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] non è un dizionario"
+
+#: plpy_exec.c:938
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "la chiave di dizionario TD[\"new\"] alla posizione %d non è una stringa"
+
+#: plpy_exec.c:945
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "la chiave \"%s\" trovata in TD[\"new\"] non esiste come colonna nella riga del trigger"
+
+#: plpy_exec.c:950
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "non è possibile impostare l'attributo di sistema \"%s\""
+
+#: plpy_exec.c:955
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "impossibile impostare la colonna generata \"%s\""
+
+#: plpy_exec.c:1013
+#, c-format
+msgid "while modifying trigger row"
+msgstr "durante la modifica della riga trigger"
+
+#: plpy_exec.c:1071
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "interruzione forzata di una sotto-transazione che non è terminata"
+
+#: plpy_main.c:111
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "c'è più di una libreria Python presente nella sessione"
+
+#: plpy_main.c:112
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "Solo una versione maggiore di Python può essere usata in una sessione."
+
+#: plpy_main.c:124
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "errore non catturato durante l'inizializzazione"
+
+#: plpy_main.c:147
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "importazione del modulo \"__main__\""
+
+#: plpy_main.c:156
+#, c-format
+msgid "could not initialize globals"
+msgstr "inizializzazione delle variabili globali fallita"
+
+#: plpy_main.c:354
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "procedura PL/Python \"%s\""
+
+#: plpy_main.c:357
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "funzione PL/Python \"%s\""
+
+#: plpy_main.c:365
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "blocco di codice anonimo in PL/Python"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "importazione del modulo \"plpy\" fallita"
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "creazione del modulo spiexceptions fallita"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "aggiunta del modulo spiexceptions fallita"
+
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "generazione delle eccezioni SPI fallita"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "non è stato possibile espandere gli argomenti in plpy.elog"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "non è stato possibile interpretare il messaggio di errore in plpy.elog"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "parametro 'message' dato con nome e posizione"
+
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "'%s' è un nome di argomento non valido per questa funzione"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "codice SQLSTATE non valido"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "le funzioni trigger possono essere chiamate esclusivamente da trigger"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "le funzioni PL/Python non possono restituire il tipo %s"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "le funzioni PL/Python non possono accettare il tipo %s"
+
+#: plpy_procedure.c:397
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "compilazione della funzione PL/Python \"%s\" fallita"
+
+#: plpy_procedure.c:400
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "compilazione del blocco di codice anonimo PL/Python fallita"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "il comando non ha prodotto risultati"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "il secondo argomento di plpy.prepare deve essere una sequenza"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: il nome del tipo nella posizione %d non è una stringa"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute si aspetta una query o un plan"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute richiede una sequenza come secondo argomento"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan ha fallito: %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute ha fallito: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "si è già entrati in questa sotto-transazione"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "si è già usciti da questa sotto-transazione"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "non si è entrati in questa sotto-transazione"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "non c'è nessuna transazione da cui uscire"
+
+#: plpy_typeio.c:587
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "importazione di un modulo per il costrutto Decimal fallita"
+
+#: plpy_typeio.c:591
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "attributo Decimal non trovato nel modulo"
+
+#: plpy_typeio.c:597
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "conversione da numeric a Decimal fallita"
+
+#: plpy_typeio.c:911
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "creazione della rappresentazione in byte dell'oggetto Python fallita"
+
+#: plpy_typeio.c:1048
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "creazione della rappresentazione stringa dell'oggetto Python fallita"
+
+#: plpy_typeio.c:1059
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "conversione dell'oggetto Python in cstring fallita: la rappresentazione stringa Python sembra contenere byte null"
+
+#: plpy_typeio.c:1170
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "il numero di dimensioni dell'array supera il massimo consentito (%d)"
+
+#: plpy_typeio.c:1175
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "errore nel determinare la lunghezza della sequenza per il valore di ritorno della funzione"
+
+#: plpy_typeio.c:1180 plpy_typeio.c:1186
+#, c-format
+msgid "array size exceeds the maximum allowed"
+msgstr "la dimensione dell'array supera il massimo consentito"
+
+#: plpy_typeio.c:1214
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "il valore restituito dalla funzione con tipo restituito array non è una sequenza Python"
+
+#: plpy_typeio.c:1261
+#, c-format
+msgid "wrong length of inner sequence: has length %d, but %d was expected"
+msgstr "lunghezza errata della sequenza interna: la lunghezza è %d ma era atteso %d"
+
+#: plpy_typeio.c:1263
+#, c-format
+msgid "To construct a multidimensional array, the inner sequences must all have the same length."
+msgstr "Per costruire un array multidimensionale le sequenze interne devono avere tutte la stessa lunghezza."
+
+#: plpy_typeio.c:1342
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "letterale di record non corretto: \"%s\""
+
+#: plpy_typeio.c:1343
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Parentesi aperta mancante."
+
+#: plpy_typeio.c:1344 plpy_typeio.c:1545
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "Per restutuire un tipo composito in un array, restituisci il tipo composito come tupla Python, per esempio \"[('foo',)]\" "
+
+#: plpy_typeio.c:1391
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "la chiave \"%s\" non è stata trovata nel dizionario"
+
+#: plpy_typeio.c:1392
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "Per restituire null in una colonna, inserire nella mappa il valore None con una chiave chiamata come la colonna."
+
+#: plpy_typeio.c:1445
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "la lunghezza della sequenza ritornata non rispetta il numero di colonne presenti nella riga"
+
+#: plpy_typeio.c:1543
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "l'attributo \"%s\" non esiste nell'oggetto Python"
+
+#: plpy_typeio.c:1546
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "Per restituire null in una colonna, l'oggetto restituito deve avere un attributo chiamato come la colonna con valore None."
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "conversione dell'oggetto Unicode Python in byte fallita"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "estrazione dei byte dalla stringa codificata fallita"
diff --git a/src/pl/plpython/po/ja.po b/src/pl/plpython/po/ja.po
new file mode 100644
index 0000000..5670478
--- /dev/null
+++ b/src/pl/plpython/po/ja.po
@@ -0,0 +1,497 @@
+# Japanese message translation file for plpython
+# Copyright (C) 2022 PostgreSQL Global Development Group
+# This file is distributed under the same license as the pg_archivecleanup (PostgreSQL) package.
+# Honda Shigehiro <honda@postgresql.jp>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython (PostgreSQL 15)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2019-06-11 11:34+0900\n"
+"PO-Revision-Date: 2021-08-25 17:42+0900\n"
+"Last-Translator: Kyotaro Horiguchi <horikyota.ntt@gmail.com>\n"
+"Language-Team: Japan PostgreSQL Users Group <jpug-doc@ml.postgresql.jp>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 1.8.13\n"
+
+#: plpy_cursorobject.c:78
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor は問い合わせもしくは実行計画を期待していました"
+
+#: plpy_cursorobject.c:161
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor は第二引数としてシーケンスを取ります"
+
+#: plpy_cursorobject.c:177 plpy_spi.c:211
+#, c-format
+msgid "could not execute plan"
+msgstr "実行計画を実行できませんでした"
+
+#: plpy_cursorobject.c:180 plpy_spi.c:214
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "%d 個の引数のシーケンスを期待していましたが、個数は %d でした:%s"
+
+#: plpy_cursorobject.c:329
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "反復利用しようとしているカーソルは、すでにクローズされています"
+
+#: plpy_cursorobject.c:337 plpy_cursorobject.c:403
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr ""
+"中断されたサブトランザクションの中でカーソルを反復利用しようとしています"
+
+#: plpy_cursorobject.c:395
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "クローズされたカーソルからのフェッチ"
+
+#: plpy_cursorobject.c:438 plpy_spi.c:409
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "問い合わせの結果に含まれる行数が、Pythonのリストに対して多すぎます"
+
+#: plpy_cursorobject.c:490
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr ""
+"中断されたサブトランザクションの中でカーソルをクローズしようとしています"
+
+#: plpy_elog.c:129 plpy_elog.c:130 plpy_plpymodule.c:553
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:143
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "非サポートの集合関数リターンモードです。"
+
+#: plpy_exec.c:144
+#, c-format
+msgid ""
+"PL/Python set-returning functions only support returning one value per call."
+msgstr ""
+"集合を返却するPL/Python関数では、1回の呼び出しに対して1つの値を返すことのみが"
+"サポートされています。"
+
+#: plpy_exec.c:157
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "返されたオブジェクトは反復利用できません"
+
+#: plpy_exec.c:158
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr ""
+"PL/Pythonの集合を返す関数は、反復処理可能なオブジェクトを返さなければなりませ"
+"ん。"
+
+#: plpy_exec.c:172
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "反復子から次の項目を取り出せませんでした"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "PL/Python プロシージャが None を返しませんでした"
+
+#: plpy_exec.c:219
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "戻り値が\"void\"型である PL/Python関数がNoneを返しませんでした"
+
+#: plpy_exec.c:375 plpy_exec.c:401
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "トリガプロシージャから期待しない戻り値が返されました"
+
+#: plpy_exec.c:376
+#, c-format
+msgid "Expected None or a string."
+msgstr "None もしくは文字列を期待していました。"
+
+#: plpy_exec.c:391
+#, c-format
+msgid ""
+"PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr ""
+"PL/Python トリガ関数が、DELETE トリガで \"MODIFY\" を返しました-- 無視します"
+
+#: plpy_exec.c:402
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "None, \"OK\", \"SKIP\", \"MODIFY\" のいずれかを期待していました。"
+
+#: plpy_exec.c:452
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "引数を設定する際に、PyList_SetItem() に失敗しました"
+
+#: plpy_exec.c:456
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "引数を設定する際に、PyDict_SetItemString() に失敗しました"
+
+#: plpy_exec.c:468
+#, c-format
+msgid ""
+"function returning record called in context that cannot accept type record"
+msgstr ""
+"レコード型を受け付けられないコンテキストでレコードを返す関数が呼び出されまし"
+"た"
+
+#: plpy_exec.c:685
+#, c-format
+msgid "while creating return value"
+msgstr "戻り値を生成する際に"
+
+#: plpy_exec.c:919
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] は削除されました。行を変更できません。"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] は辞書ではありません"
+
+#: plpy_exec.c:951
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "TD[\"new\"] 辞書の%d番目のキーが文字列ではありません"
+
+#: plpy_exec.c:958
+#, c-format
+msgid ""
+"key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering "
+"row"
+msgstr ""
+"TD[\"new\"] で見つかったキー \"%s\" は、行レベルトリガにおけるカラムとしては"
+"存在しません"
+
+#: plpy_exec.c:963
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "システム属性\"%s\"は設定できません"
+
+#: plpy_exec.c:968
+#, c-format
+#| msgid "cannot alter inherited column \"%s\""
+msgid "cannot set generated column \"%s\""
+msgstr "生成列\"%s\"は設定できません"
+
+#: plpy_exec.c:1026
+#, c-format
+msgid "while modifying trigger row"
+msgstr "トリガ行を変更する際に"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "終了していないサブトランザクションを強制的にアボートしています"
+
+#: plpy_main.c:125
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "セッションに複数の Python ライブラリが存在します"
+
+#: plpy_main.c:126
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "1個のセッション中で使えるPythonのメジャーバージョンは1種類だけです。"
+
+#: plpy_main.c:142
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "初期化中に捕捉できないエラーがありました"
+
+#: plpy_main.c:165
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "\"__main__\" モジュールをインポートできませんでした"
+
+#: plpy_main.c:174
+#, c-format
+msgid "could not initialize globals"
+msgstr "グローバル変数(globals)を初期化できませんでした"
+
+#: plpy_main.c:399
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "PL/Pythonプロシージャ\"%s\""
+
+#: plpy_main.c:402
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "PL/Python関数\"%s\""
+
+#: plpy_main.c:410
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "PL/Pythonの無名コードブロック"
+
+#: plpy_plpymodule.c:186 plpy_plpymodule.c:189
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "\"plpy\"モジュールをインポートできませんでした"
+
+#: plpy_plpymodule.c:204
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "spiexceptionsモジュールを生成できませんでした"
+
+#: plpy_plpymodule.c:212
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "spiexceptionsモジュールを追加できませんでした"
+
+#: plpy_plpymodule.c:280
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "SPI例外を生成できませんでした"
+
+#: plpy_plpymodule.c:448
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "plpy.elogで引数を展開できませんでした"
+
+#: plpy_plpymodule.c:457
+msgid "could not parse error message in plpy.elog"
+msgstr "plpy.elogでエラーメッセージをパースできませんでした"
+
+#: plpy_plpymodule.c:474
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "名前と位置で 'message' 引数が渡されました"
+
+#: plpy_plpymodule.c:501
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "この関数に対して'%s'は無効なキーワード引数です"
+
+#: plpy_plpymodule.c:512 plpy_plpymodule.c:518
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "無効なSQLSTATEコードです"
+
+#: plpy_procedure.c:230
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "トリガー関数はトリガーとしてのみ呼び出せます"
+
+#: plpy_procedure.c:234
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "PL/Python関数は%s型を返せません"
+
+#: plpy_procedure.c:312
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "PL/Python関数は%s型を受け付けられません"
+
+#: plpy_procedure.c:402
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "PL/Python関数\"%s\"をコンパイルできませんでした"
+
+#: plpy_procedure.c:405
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "PL/Python無名コードブロックをコンパイルできませんでした"
+
+#: plpy_resultobject.c:121 plpy_resultobject.c:147 plpy_resultobject.c:173
+#, c-format
+msgid "command did not produce a result set"
+msgstr "コマンドは結果セットを生成しませんでした"
+
+#: plpy_spi.c:60
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "plpy.prepareの第二引数はシーケンスでなければなりません"
+
+#: plpy_spi.c:104
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: %d 番目の型名が文字列ではありません"
+
+#: plpy_spi.c:176
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute は問い合わせもしくは実行計画を期待していました"
+
+#: plpy_spi.c:195
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute は第二引数としてシーケンスを取ります"
+
+#: plpy_spi.c:305
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan が失敗しました: %s"
+
+#: plpy_spi.c:347
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute が失敗しました: %s"
+
+#: plpy_subxactobject.c:97
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "すでにこのサブトランザクションの中に入っています"
+
+#: plpy_subxactobject.c:103 plpy_subxactobject.c:161
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "このサブトランザクションからすでに抜けています"
+
+#: plpy_subxactobject.c:155
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "このサブトランザクションには入っていません"
+
+#: plpy_subxactobject.c:167
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "抜けるべきサブトランザクションがありません"
+
+#: plpy_typeio.c:591
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "Decimalコンストラクタのためのモジュールをインポートできませんでした"
+
+#: plpy_typeio.c:595
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "モジュールの中にDecimal属性が含まれていません"
+
+#: plpy_typeio.c:601
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "numericからDecimalへの変換に失敗しました"
+
+#: plpy_typeio.c:915
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "Pythonオブジェクトのバイト表現を生成できませんでした"
+
+#: plpy_typeio.c:1063
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "Pythonオブジェクトの文字列表現を生成できませんでした"
+
+#: plpy_typeio.c:1074
+#, c-format
+msgid ""
+"could not convert Python object into cstring: Python string representation "
+"appears to contain null bytes"
+msgstr ""
+"Pythonオブジェクトをcstringに変換できませんでした: Pythonの文字列表現にnullバ"
+"イトが含まれているようです"
+
+#: plpy_typeio.c:1183
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "配列の次元数が制限値(%d)を超えています"
+
+#: plpy_typeio.c:1187
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "関数の戻り値について、シーケンスの長さを決定できませんでした"
+
+#: plpy_typeio.c:1190 plpy_typeio.c:1194
+#, c-format
+msgid "array size exceeds the maximum allowed"
+msgstr "配列のサイズが制限値を超えています"
+
+#: plpy_typeio.c:1220
+#, c-format
+msgid ""
+"return value of function with array return type is not a Python sequence"
+msgstr "配列型を返す関数の戻り値がPythonのシーケンスではありません"
+
+#: plpy_typeio.c:1266
+#, c-format
+msgid "wrong length of inner sequence: has length %d, but %d was expected"
+msgstr "内部シーケンスで長さが異常です: 長さは%dですが、期待する値は%dでした"
+
+#: plpy_typeio.c:1268
+#, c-format
+msgid ""
+"To construct a multidimensional array, the inner sequences must all have the "
+"same length."
+msgstr ""
+"多次元配列を生成する場合、内部シーケンスはすべて同じ長さでなければなりませ"
+"ん。"
+
+#: plpy_typeio.c:1347
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "不正な形式のレコードリテラル: \"%s\""
+
+#: plpy_typeio.c:1348
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "左括弧がありません。"
+
+#: plpy_typeio.c:1349 plpy_typeio.c:1550
+#, c-format
+msgid ""
+"To return a composite type in an array, return the composite type as a "
+"Python tuple, e.g., \"[('foo',)]\"."
+msgstr ""
+"複合型を配列に入れて返したい場合、 \"[('foo',)]\" のように複合型を Pythonのタ"
+"プルとして返すようにしてください。"
+
+#: plpy_typeio.c:1396
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "マッピング上にキー\"%s\"が見つかりません"
+
+#: plpy_typeio.c:1397
+#, c-format
+msgid ""
+"To return null in a column, add the value None to the mapping with the key "
+"named after the column."
+msgstr ""
+"カラムにnullを入れて返す場合、カラム名をキーとして値がNoneのエントリをマッピ"
+"ングに追加してください。"
+
+#: plpy_typeio.c:1450
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "返されたシーケンスの長さが行のカラム数とマッチしませんでした"
+
+#: plpy_typeio.c:1548
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "属性\"%s\"がPythonオブジェクト中に存在しません"
+
+#: plpy_typeio.c:1551
+#, c-format
+msgid ""
+"To return null in a column, let the returned object have an attribute named "
+"after column with value None."
+msgstr ""
+"カラムにnullを入れて返す場合、カラム名をキーとして値がNoneである属性を持つオ"
+"ブジェクトを返すようにしてください。"
+
+#: plpy_util.c:35
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "PythonのUnicodeオブジェクトをバイト列に変換できませんでした"
+
+#: plpy_util.c:41
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "エンコードされた文字列からバイト列を抽出できませんでした"
diff --git a/src/pl/plpython/po/ka.po b/src/pl/plpython/po/ka.po
new file mode 100644
index 0000000..70a87f6
--- /dev/null
+++ b/src/pl/plpython/po/ka.po
@@ -0,0 +1,462 @@
+# Georgian message translation file for plpython
+# Copyright (C) 2022 PostgreSQL Global Development Group
+# This file is distributed under the same license as the plpython (PostgreSQL) package.
+# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython (PostgreSQL) 15\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2023-05-17 01:38+0000\n"
+"PO-Revision-Date: 2022-09-25 19:18+0200\n"
+"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
+"Language-Team: Georgian <nothing>\n"
+"Language: ka\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 3.1.1\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor გეგმას ან მოთხოვნას მოელოდა"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor მეორე არგუმენტად მიმდევრობას იღებს"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "გეგმის შესრულება ვერ მოხერხდა"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "მოველოდი %d არგუმენტის მიმდევრობას. მივიღე %d: %s"
+msgstr[1] "მოველოდი %d არგუმენტის მიმდევრობას. მივიღე %d: %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "დახურული კურსორის იტერაცია"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "კურსორის იტერაცია გაუქმებულ ტრანზაქციაში"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "დახურული კურსორიდან გამოთხოვა"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "მოთხოვნის პასუხს Python-ის სიაში ჩასატევად მეტისმეტად ბევრი მწკრივი გააჩნია"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "გაუქმებულ ქვეტრანზაქციაში კურსორის დახურვა"
+
+#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "სეტების დამბრუნებელი ფუნქციის მხარდაუჭერელი რეჟიმი"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "PL/Python -ის ფუნქციებს, რომლების სეტებს აბრუნებენ, თითოეულ გამოძახებაზე მხოლოდ ერთი მნიშვნელობის მხარდაჭერა გააჩნიათ."
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "დაბრუნებული ობიექტის იტერაცია შეუძლებელია"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "PL/Python-ის ფუნქციებმა, რომლებიც სეტებს აბრუნებენ, იტერირებადი ობიექტი უნდა დააბრუნონ."
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "იტერატორიდან შემდეგი ჩანაწერის მოთხოვის შეცდომა"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "PL/Python -ის პროცედურამ None არ დააბრუნა"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "PL/Python -ის ფუნქციამ, რომელიც აბრუნებს ტიპს \"void\", რაღაც დააბრუნა"
+
+#: plpy_exec.c:369 plpy_exec.c:393
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "ტრიგერის პროცედურის მოულოდნელი დაბრუნებული მნიშვნელობა"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "ველოდებოდი არაფერს ან სტრიქონს."
+
+#: plpy_exec.c:383
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "PL/Python -ის ტრიგერმა ფუნქციამ DELETE ტრიგერში \"MODIFY\" დააბრუნა. -- იგნორირებულია"
+
+#: plpy_exec.c:394
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "მოსალოდნელია არცერთი, \"OK\", \"SKIP\", ან \"MODIFY\"."
+
+#: plpy_exec.c:444
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "PyList_SetItem() -ის შეცდომა არგუმენტების მორგებისას"
+
+#: plpy_exec.c:448
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "PyDict_SetItemString() -ის შეცდომა არგუმენტების მორგებისას"
+
+#: plpy_exec.c:460
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "ფუნქცია, რომელიც ჩანაწერს აბრუნებს, გამოძახებულია კონტექსტში, რომელსაც ჩანაწერის მიღება არ შეუძლია"
+
+#: plpy_exec.c:677
+#, c-format
+msgid "while creating return value"
+msgstr "დასაბრუნებელი მნიშვნელობის შექმნისას"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] წაშლილია, მწკრივის შეცვლა შეუძლებელია"
+
+#: plpy_exec.c:929
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] ლექსიკონი არაა"
+
+#: plpy_exec.c:954
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "TD[\"new\"] ლექსიკონის გასაღები ორდინალურ მდებარეობაზე %d სტრიქონს არ წარმოადგენს"
+
+#: plpy_exec.c:961
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "\"TD[\"new\"]-ში ნაპოვნი გასაღები (%s) დამატრიგერებელი მწკრივის სვეტად არ არსებობს"
+
+#: plpy_exec.c:966
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "სისტემური ატრიბუტის დაყენების შეცდომა: \"%s\""
+
+#: plpy_exec.c:971
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "გენერირებული სვეტის დაყენება შეუძლებელია: %s"
+
+#: plpy_exec.c:1029
+#, c-format
+msgid "while modifying trigger row"
+msgstr "ტრიგერის მწკრივის შეცვლისას"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "ქვეტრანზაქცია, რომელიც ჯერ არ დასრულებულა, ძალით დასრულდება"
+
+#: plpy_main.c:109
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "სესია Python-ის ერთზე მეტ ბიბლიოთეკას შეიცავს"
+
+#: plpy_main.c:110
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "ერთ სესიაში Python-ის მხოლოდ ერთი ძირითადი ვერსია შეგიძლიათ გამოიყენოთ."
+
+#: plpy_main.c:122
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "დაუჭერელი შეცდომა ინიციალიზაციისას"
+
+#: plpy_main.c:145
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "\"__main__\" მოდულის შემოტანის შეცდომა"
+
+#: plpy_main.c:154
+#, c-format
+msgid "could not initialize globals"
+msgstr "გლობალების ინიციალიზაციის შეცდომა"
+
+#: plpy_main.c:352
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "PL/Python -ის პროცედურა \"%s\""
+
+#: plpy_main.c:355
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "PL/Python -ის ფუნქცია \"%s\""
+
+#: plpy_main.c:363
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "PL/Python -ის ანონიმური კოდის ბლოკი"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "\"plpy\" მოდულის შემოტანის შეცდომა"
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "spiexceptions მოდულის შექმნის შეცდომა"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "spiexceptions მოდულის დამატების შეცდომა"
+
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "\"SPI\" გამონაკლისების გენერაციის შეცდომა"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "plpy.elog-ში არგუმენტების გაშლის შეცდომა"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "plpy.elog-ში შეცდომის შეტყობინების დამუშავების შეცდომა"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "არგუმენტი 'message', მოცემული სახელითა მდებარეობით"
+
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "%s ამ ფუნქციის არასწორი არგუმენტია"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "არასწორი SQLSTATE კოდი"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "ტრიგერის ფუნქციების გამოძახება მხოლოდ ტრიგერებად შეიძლება"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "PL/Python ფუნქციებს ამ ტიპის დაბრუნება არ შეუძლიათ: %s"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "PL/Python ფუნქციებს ამ ტიპის მიღება არ შეუძლიათ: %s"
+
+#: plpy_procedure.c:395
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "\"PL/Python\"-ის ფუნქციის კომპილაციის შეცდომა: \"%s\""
+
+#: plpy_procedure.c:398
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "\"PL/Python\"-ის კოდის ანონიმური ბლოკის კომპილაციის შეცდომა"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "ბრძანებამ შედეგი არ გამოიღო"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "plpy.prepare -ის მეორე არგუმენტი მიმდევრობა უნდა იყოს"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: ტიპის სახელი ორდინალურ მდგომარეობაში %d სტრიქონს არ წარმოადგენს"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute გეგმას ან მოთხოვნას მოელოდა"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute მეორე არგუმენტად მიმდევრობას იღებს"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan -ის შეცდომა: %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute -ის შეცდომა: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "ეს ქვეტრანზაქცია უკვე დაიწყო"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "ეს ქვეტრანზაქცია უკვე დასრულდა"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "ეს ქვეტრანზაქცია არ დაწყებულა"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "გამოსასვლელი ქვეტრანზაქციები არ არსებობს"
+
+#: plpy_typeio.c:588
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "ათობითი კონსტრუქტორისთვის მოდულის შემოტანის პრობლემა"
+
+#: plpy_typeio.c:592
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "მოდულს ათობითს ატრიბუტი არ გააჩნია"
+
+#: plpy_typeio.c:598
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "რიცხვითიდან ათობითში გადაყვანის შეცდომა"
+
+#: plpy_typeio.c:912
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "\"Python\"-ის ობექტის ბაიტების რეპრეზენტაციის შექმნის შეცდომა"
+
+#: plpy_typeio.c:1049
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "\"Python\"-ის ობექტის სტრიქონების რეპრეზენტაციის შექმნის შეცდომა"
+
+#: plpy_typeio.c:1060
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "შეცდომა Python-ის ობიექტის cstring-ში გადაყვანისას: Python-ის სტრიქონის გამოხატულება ნულოვან ბაიტებს შეიცავს"
+
+#: plpy_typeio.c:1157
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "ფუნქციის დაბრულების მნიშვნელობა მასივის დაბრუნების ტიპით Python-ის მიმდევრობა არაა"
+
+#: plpy_typeio.c:1202
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "ფუნქციის დაბრუნებული მნიშვნელობის მიმდევრობის სიგრძის განსაზღვრა შეუძლებელია"
+
+#: plpy_typeio.c:1222 plpy_typeio.c:1237 plpy_typeio.c:1253
+#, c-format
+msgid "multidimensional arrays must have array expressions with matching dimensions"
+msgstr "მრავალგანზომილებიან მასივებს უნდა ჰქონდეთ მასივის გამოსახულებები შესაბამისი ზომებით"
+
+#: plpy_typeio.c:1227
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "მასივის ზომების რაოდენობა მაქსიმუმ დასაშვებზე (%d) დიდია"
+
+#: plpy_typeio.c:1329
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "ჩანაწერის არასწორი სტრიქონი: %s"
+
+#: plpy_typeio.c:1330
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "აკლია მარჯვენა ფრჩხილი."
+
+#: plpy_typeio.c:1331 plpy_typeio.c:1532
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "მასივში კომპოზიტური ტიპის დასაბრუნებლად კომპოზიტური ტიპი, როგორც Python-ის კოლაჟი, ისე დააბრუნეთ. მაგ: \"[('foo',)]\"."
+
+#: plpy_typeio.c:1378
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "ბმაში გასაღები %s ნაპოვნი არაა"
+
+#: plpy_typeio.c:1379
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "სვეტში ნულის დასაბრუნებლად ამ სვეტის სახელის მქონე გასაღების მიბმას მნიშვნელობა None დაამატეთ."
+
+#: plpy_typeio.c:1432
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "დაბრუნებული მიმდევრობის სიგრძე მწკრივში სვეტების რაოდენობას არ ემთხვევა"
+
+#: plpy_typeio.c:1530
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "ატრიბუტი \"%s\" Python -ის ობიექტში არ არსებობს"
+
+#: plpy_typeio.c:1533
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "სვეტში ნულის დასაბრუნებლად დასაბრუნებელ ობიექტს მიანიჭეთ სვეტის სახელის მქონე ატრიბუტი , მნიშვნელობით \"None\"."
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "\"Python Unicode\" ტიპის ობიექტის ბაიტებად გარდაქმნის შეცდომა"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "ბაიტების ამოღების შეცდომა კოდირებული სტრიქონიდან"
+
+#, c-format
+#~ msgid "To construct a multidimensional array, the inner sequences must all have the same length."
+#~ msgstr "მრავალგანზომილებიანი მასივის ასაშენებლად ყველა შიდა მიმდევრობის სიგრძე ტოლი უნდა იყოს."
+
+#, c-format
+#~ msgid "array size exceeds the maximum allowed"
+#~ msgstr "მასივის ზომა მაქსიმალურ დასაშვებს აჭარბებს"
+
+#, c-format
+#~ msgid "wrong length of inner sequence: has length %d, but %d was expected"
+#~ msgstr "შიდა მიმდევრობის არასწორი სიგრძე: სიგრძე: %d. უნდა იყოს: %d"
diff --git a/src/pl/plpython/po/ko.po b/src/pl/plpython/po/ko.po
new file mode 100644
index 0000000..ef64d5c
--- /dev/null
+++ b/src/pl/plpython/po/ko.po
@@ -0,0 +1,478 @@
+# LANGUAGE message translation file for plpython
+# Copyright (C) 2015 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# Ioseph Kim <ioseph@uri.sarang.net>, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython (PostgreSQL) 16\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2023-09-07 05:38+0000\n"
+"PO-Revision-Date: 2023-05-30 12:40+0900\n"
+"Last-Translator: Ioseph Kim <ioseph@uri.sarang.net>\n"
+"Language-Team: Korean <pgsql-kr@postgresql.kr>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor 객체는 쿼리나 plpy.prepare 객체를 인자로 사용합니다"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr ""
+"plpy.cursor 객체의 인자로 plpy.prepare 객체를 사용한 경우 두번째 인자는 "
+"prepare 객체의 매개변수가 있어야 합니다."
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "plpy.prepare 객체를 실행할 수 없음"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "%d 개의 인자가 필요한데, %d개의 인자를 지정했음: %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "이미 닫긴 커서에서 다음 자료를 요구하고 있음"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "중지된 서브 트랜잭션에 있는 커서에서 다음 자료를 요구하고 있음"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "닫긴 커서에서 fetch"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "쿼리 결과가 Python 리스트로 담기에는 너무 많습니다"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "중지된 서브트랜잭션에서 커서를 닫고 있음"
+
+#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "지원하지 않는 집합 함수 리턴 모드"
+
+#: plpy_exec.c:140
+#, c-format
+msgid ""
+"PL/Python set-returning functions only support returning one value per call."
+msgstr ""
+"PL/Python 집합-반환 함수는 한번의 호출에 대해서 하나의 값만 반환할 수 있습니"
+"다."
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "반환하는 객체가 iterable 형이 아님"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "PL/Python 집합-반환 함수는 iterable 객체를 반환해야 합니다."
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "iterator에서 다음 아이템을 가져올 수 없음"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "PL/Python 프로시져가 None을 반환하지 않았음"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr ""
+"반환 자료형이 \"void\"인 PL/Python 함수가 return None으로 끝나지 않았음"
+
+#: plpy_exec.c:369 plpy_exec.c:393
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "트리거 프로시져가 예상치 못한 값을 반환했습니다"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "None 이나 문자열이 있어야합니다."
+
+#: plpy_exec.c:383
+#, c-format
+msgid ""
+"PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr ""
+"PL/Python 트리거 함수가 DELETE 트리거에서 \"MODIFY\"를 반환했음 -- 무시함"
+
+#: plpy_exec.c:394
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "None, \"OK\", \"SKIP\", 또는 \"MODIFY\"를 사용해야 함."
+
+#: plpy_exec.c:444
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "PyList_SetItem() 함수가 인자 설정하는 중 실패"
+
+#: plpy_exec.c:448
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "PyDict_SetItemString() 함수가 인자 설정하는 중 실패"
+
+#: plpy_exec.c:460
+#, c-format
+msgid ""
+"function returning record called in context that cannot accept type record"
+msgstr "반환 자료형이 record인데 함수가 그 자료형으로 반환하지 않음"
+
+#: plpy_exec.c:677
+#, c-format
+msgid "while creating return value"
+msgstr "반환값을 만들고 있은 중"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] 변수가 삭제되었음, 로우를 수정할 수 없음"
+
+#: plpy_exec.c:929
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] 변수가 딕션너리 형태가 아님"
+
+#: plpy_exec.c:954
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "%d 번째 TD[\"new\"] 딕션너리 키가 문자열이 아님"
+
+#: plpy_exec.c:961
+#, c-format
+msgid ""
+"key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering "
+"row"
+msgstr ""
+"로우 트리거 작업에서 칼럼으로 사용되는 \"%s\" 키가 TD[\"new\"] 변수에 없음."
+
+#: plpy_exec.c:966
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "\"%s\" 시스템 속성을 지정할 수 없음"
+
+#: plpy_exec.c:971
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "\"%s\" 계산된 칼럼을 지정할 수 없음"
+
+#: plpy_exec.c:1029
+#, c-format
+msgid "while modifying trigger row"
+msgstr "로우 변경 트리거 작업 도중"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "서브트랜잭션이 중지됨으로 강제로 중지됨"
+
+#: plpy_main.c:109
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "세션에서 여러 Python 라이브러리가 사용되고 있습니다"
+
+#: plpy_main.c:110
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "하나의 세션에서는 하나의 Python 메이져 버전만 사용할 수 있습니다."
+
+#: plpy_main.c:122
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "plpy 모듈 초기화 실패"
+
+#: plpy_main.c:145
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "\"__main__\" 모듈은 임포트 할 수 없음"
+
+#: plpy_main.c:154
+#, c-format
+msgid "could not initialize globals"
+msgstr "전역변수들을 초기화 할 수 없음"
+
+#: plpy_main.c:352
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "\"%s\" PL/Python 프로시져"
+
+#: plpy_main.c:355
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "\"%s\" PL/Python 함수"
+
+#: plpy_main.c:363
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "PL/Python 익명 코드 블럭"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "\"plpy\" 모듈을 임포트 할 수 없음"
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "spiexceptions 모듈을 만들 수 없음"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "spiexceptions 모듈을 추가할 수 없음"
+
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "SPI 예외처리를 생성할 수 없음"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "잘못된 인자로 구성된 plpy.elog"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "plpy.elog 에서 오류 메시지를 분석할 수 없음"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "'message' 인자는 이름과 위치가 있어야 함"
+
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "'%s' 값은 이 함수에서 잘못된 예약어 인자입니다"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "잘못된 SQLSTATE 코드"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "트리거 함수는 트리거로만 호출될 수 있음"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "PL/Python 함수는 %s 자료형을 반환할 수 없음"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "PL/Python 함수는 %s 자료형을 사용할 수 없음"
+
+#: plpy_procedure.c:395
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "\"%s\" PL/Python 함수를 컴파일 할 수 없음"
+
+#: plpy_procedure.c:398
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "anonymous PL/Python 코드 블록을 컴파일 할 수 없음"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "명령의 결과값이 없음"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "plpy.prepare 함수의 두번째 인자는 Python 시퀀스형이어야 함"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: %d 번째 인자의 자료형이 문자열이 아님"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute 함수의 인자는 쿼리문이나 plpy.prepare 객체여야 함"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execut 함수의 두번째 인자는 python 시퀀스형이 와야함"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan 실패: %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute 실패: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "이 서브트랜잭션은 이미 시작되었음"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "이 서브트랜잭션은 이미 끝났음"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "이 서브트랜잭션이 시작되지 않았음"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "종료할 서브트랜잭션이 없음, 위치:"
+
+#: plpy_typeio.c:588
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "Decimal 자료형 처리를 위해 모듈을 임포트 할 수 없음"
+
+#: plpy_typeio.c:592
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "모듈안에 Decimal 속성이 없음"
+
+#: plpy_typeio.c:598
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "numeric 형을 Decimal 형으로 변환할 수 없음"
+
+#: plpy_typeio.c:912
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "Python 객체를 bytea 자료형으로 변환할 수 없음"
+
+#: plpy_typeio.c:1049
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "Python 객체를 문자열 자료형으로 변환할 수 없음"
+
+#: plpy_typeio.c:1060
+#, c-format
+msgid ""
+"could not convert Python object into cstring: Python string representation "
+"appears to contain null bytes"
+msgstr ""
+"Python 객체를 cstring 형으로 변환할 수 없음: Python string 변수에 null문자열"
+"이 포함되어 있음"
+
+#: plpy_typeio.c:1157
+#, c-format
+msgid ""
+"return value of function with array return type is not a Python sequence"
+msgstr "배열형으로 넘길 자료형이 Python 시퀀스형이 아님"
+
+#: plpy_typeio.c:1202
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "함수 반환 값으로 시퀀스 길이를 결정할 수 없음"
+
+#: plpy_typeio.c:1222 plpy_typeio.c:1237 plpy_typeio.c:1253
+#, c-format
+msgid ""
+"multidimensional arrays must have array expressions with matching dimensions"
+msgstr "다차원 배열에는 일치하는 차원이 포함된 배열 식이 있어야 함"
+
+#: plpy_typeio.c:1227
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "배열 차원이 최대치 (%d)를 초과 했습니다."
+
+#: plpy_typeio.c:1329
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "잘못된 레코드 표현: \"%s\""
+
+#: plpy_typeio.c:1330
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "왼쪽 괄호가 없음."
+
+#: plpy_typeio.c:1331 plpy_typeio.c:1532
+#, c-format
+msgid ""
+"To return a composite type in an array, return the composite type as a "
+"Python tuple, e.g., \"[('foo',)]\"."
+msgstr ""
+"배열에서 복합 자료형을 반환하려면, Python 튜플 형을 사용하세요. 예: "
+"\"[('foo',)]\"."
+
+#: plpy_typeio.c:1378
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "맵 안에 \"%s\" 키가 없음"
+
+#: plpy_typeio.c:1379
+#, c-format
+msgid ""
+"To return null in a column, add the value None to the mapping with the key "
+"named after the column."
+msgstr ""
+"칼럼값으로 null을 반환하려면, 칼럼 다음에 해당 키 이름과 맵핑 되는 None값을 "
+"지정하세요"
+
+#: plpy_typeio.c:1432
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "반환되는 시퀀스형 변수의 길이가 로우의 칼럼수와 일치하지 않음"
+
+#: plpy_typeio.c:1530
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "Python 객체 가운데 \"%s\" 속성이 없음"
+
+#: plpy_typeio.c:1533
+#, c-format
+msgid ""
+"To return null in a column, let the returned object have an attribute named "
+"after column with value None."
+msgstr ""
+"칼럼 값으로 null 을 반환하려면, 값으로 None 값을 가지는 칼럼 뒤에, 속성 이름"
+"이 있는 객체를 반환하세요"
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "Python 유니코드 객체를 UTF-8 문자열로 변환할 수 없음"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "해당 인코드 문자열을 Python에서 사용할 수 없음"
diff --git a/src/pl/plpython/po/meson.build b/src/pl/plpython/po/meson.build
new file mode 100644
index 0000000..ddaa191
--- /dev/null
+++ b/src/pl/plpython/po/meson.build
@@ -0,0 +1,3 @@
+# Copyright (c) 2022-2023, PostgreSQL Global Development Group
+
+nls_targets += [i18n.gettext('plpython-' + pg_version_major.to_string())]
diff --git a/src/pl/plpython/po/pl.po b/src/pl/plpython/po/pl.po
new file mode 100644
index 0000000..4abd6f5
--- /dev/null
+++ b/src/pl/plpython/po/pl.po
@@ -0,0 +1,507 @@
+# plpython message translation file for plpython
+# Copyright (C) 2011 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# Begina Felicysym <begina.felicysym@wp.eu>, 2011, 2012.
+# grzegorz <begina.felicysym@wp.eu>, 2014, 2015, 2016, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython (PostgreSQL 9.1)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n"
+"POT-Creation-Date: 2017-04-09 21:07+0000\n"
+"PO-Revision-Date: 2017-04-11 23:15+0200\n"
+"Last-Translator: grzegorz <begina.felicysym@wp.eu>\n"
+"Language-Team: begina.felicysym@wp.eu\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"X-Generator: Virtaal 0.7.1\n"
+
+#: plpy_cursorobject.c:100
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor oczekuje kwerendy lub planu"
+
+#: plpy_cursorobject.c:176
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor przyjmuje sekwencję jako drugi argument"
+
+#: plpy_cursorobject.c:192 plpy_spi.c:226
+#, c-format
+msgid "could not execute plan"
+msgstr "nie można wykonać planu"
+
+#: plpy_cursorobject.c:195 plpy_spi.c:229
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Oczekiwano sekwencji z %d argumentem, mamy %d: %s"
+msgstr[1] "Oczekiwano sekwencji z %d argumentami, mamy %d: %s"
+msgstr[2] "Oczekiwano sekwencji z %d argumentami, mamy %d: %s"
+
+#: plpy_cursorobject.c:350
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "iteracja zamkniętego kursora"
+
+#: plpy_cursorobject.c:358 plpy_cursorobject.c:423
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "iteracja kursora w przerwanej podtransakcji"
+
+#: plpy_cursorobject.c:415
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "pobranie z zamkniętego kursora"
+
+#: plpy_cursorobject.c:463 plpy_spi.c:434
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "wynik zapytania ma za dużo wierszy by pomieścić w liście Python"
+
+#: plpy_cursorobject.c:504
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "zamknięcie kursora w przerwanej podtransakcji"
+
+#: plpy_elog.c:127 plpy_elog.c:128 plpy_plpymodule.c:548
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "nieobsługiwany tryb zwracania przez funkcję grupy"
+
+#: plpy_exec.c:141
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "funkcje zwracające grupę PL/Python obsługuje tylko zwracanie jednej wartości w wywołaniu."
+
+#: plpy_exec.c:154
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "zwrócony obiekt nie może być przeiterowany"
+
+#: plpy_exec.c:155
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "funkcje PL/Python zwracające grupę muszą zwracać iterowalny obiekt."
+
+#: plpy_exec.c:169
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "błąd pobierania następnego elementu z iteratora"
+
+#: plpy_exec.c:210
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "funkcja PL/Python zwracająca typ \"void\" nie zwróciła wartości None"
+
+#: plpy_exec.c:379 plpy_exec.c:405
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "nieoczekiwana wartość zwracana przez procedury wyzwalacza"
+
+#: plpy_exec.c:380
+#, c-format
+msgid "Expected None or a string."
+msgstr "Oczekiwano None lub ciąg znaków."
+
+#: plpy_exec.c:395
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "funkcja wyzwalacza PL/Python zwróciła \"MODIFY\" w wyzwalaczu DELETE -- zignorowano"
+
+#: plpy_exec.c:406
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Oczekiwano None, \"OK\", \"SKIP\", lub \"MODIFY\"."
+
+#: plpy_exec.c:487
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "nie powiodło się PyList_SetItem() podczas ustawiania argumentów"
+
+#: plpy_exec.c:491
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "nie powiodło się PyDict_SetItemString() podczas ustawiania argumentów"
+
+#: plpy_exec.c:503
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "funkcja zwracająca rekord w wywołaniu, które nie akceptuje typów złożonych"
+
+#: plpy_exec.c:719
+#, c-format
+msgid "while creating return value"
+msgstr "podczas tworzenia wartości zwracanej"
+
+#: plpy_exec.c:743
+#, c-format
+msgid "could not create new dictionary while building trigger arguments"
+msgstr "nie można utworzyć nowego słownika w czasie tworzenia argumentów wyzwalacza"
+
+#: plpy_exec.c:931
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "usunięto TD[\"new\"], nie można zmienić wiersza"
+
+#: plpy_exec.c:936
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] nie jest słownikiem"
+
+#: plpy_exec.c:963
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "klucz słownika TD[\"new\"] na pozycji porządkowej %d nie jest ciągiem znaków"
+
+#: plpy_exec.c:970
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "klucz \"%s\" znaleziony w TD[\"new\"] nie istnieje jako kolumna w wierszu obsługiwanym przez wyzwalacz"
+
+#: plpy_exec.c:975
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "nie można ustawić atrybutu systemowego \"%s\""
+
+#: plpy_exec.c:1046
+#, c-format
+msgid "while modifying trigger row"
+msgstr "podczas modyfikowania wiersza wyzwalacza"
+
+#: plpy_exec.c:1107
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "wymuszone przerywanie podtransakcji, która nie została zakończona"
+
+#: plpy_main.c:125
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "kilka bibliotek Python jest dostępne w sesji"
+
+#: plpy_main.c:126
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "Tylko jedna podstawowa wersja Python może być używana w sesji."
+
+#: plpy_main.c:142
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "niewyłapany błąd w inicjacji"
+
+#: plpy_main.c:165
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "nie można zaimportować modułu \"__main__\""
+
+#: plpy_main.c:170
+#, c-format
+msgid "could not create globals"
+msgstr "nie można utworzyć zmiennych globalnych"
+
+#: plpy_main.c:174
+#, c-format
+msgid "could not initialize globals"
+msgstr "nie można zainicjować zmiennych globalnych"
+
+#: plpy_main.c:387
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "funkcja PL/Python \"%s\""
+
+#: plpy_main.c:394
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "anonimowy blok kodu PL/Python"
+
+#: plpy_plpymodule.c:181 plpy_plpymodule.c:184
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "nie można zaimportować modułu \"plpy\""
+
+#: plpy_plpymodule.c:199
+#, c-format
+#| msgid "could not add the spiexceptions module"
+msgid "could not create the spiexceptions module"
+msgstr "nie udało się utworzyć modułu spiexceptions"
+
+#: plpy_plpymodule.c:207
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "nie udało się dodać modułu spiexceptions"
+
+#: plpy_plpymodule.c:236
+#, c-format
+#| msgid "could not create directory \"%s\": %m"
+msgid "could not create exception \"%s\""
+msgstr "nie można utworzyć wyjątku \"%s\""
+
+#: plpy_plpymodule.c:271 plpy_plpymodule.c:275
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "nie można wygenerować wyjątków SPI"
+
+#: plpy_plpymodule.c:443
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "nie można rozpakować argumentów w plpy.elog"
+
+#: plpy_plpymodule.c:452
+msgid "could not parse error message in plpy.elog"
+msgstr "nie można przetworzyć komunikatu błędu w plpy.elog"
+
+#: plpy_plpymodule.c:469
+#, c-format
+msgid "Argument 'message' given by name and position"
+msgstr "Argument 'message' przekazany przez nazwę i pozycję"
+
+#: plpy_plpymodule.c:496
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "'%s' jest niepoprawnym słowem kluczowym argumentu dla tej funkcji"
+
+#: plpy_plpymodule.c:507 plpy_plpymodule.c:513
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "błędny kod SQLSTATE"
+
+#: plpy_procedure.c:230
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "procedury wyzwalaczy mogą być wywoływane jedynie przez wyzwalacze"
+
+#: plpy_procedure.c:235
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "funkcje PL/Python nie mogą zwracać wartości typu %s"
+
+#: plpy_procedure.c:316
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "funkcje PL/Python nie obsługują typu %s"
+
+#: plpy_procedure.c:412
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "nie powiodła się kompilacja funkcji PL/Python \"%s\""
+
+#: plpy_procedure.c:415
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "nie udało się skompilować anonimowego bloku kodu PL/Python"
+
+#: plpy_resultobject.c:145 plpy_resultobject.c:165 plpy_resultobject.c:185
+#, c-format
+msgid "command did not produce a result set"
+msgstr "polecenie nie utworzyło zbioru wynikowego"
+
+#: plpy_spi.c:59
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "drugi argument plpy.prepare musi być sekwencją"
+
+#: plpy_spi.c:115
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: nazwa typu na pozycji porządkowej %d nie jest ciągiem znaków"
+
+#: plpy_spi.c:191
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute oczekuje kwerendy lub planu"
+
+#: plpy_spi.c:210
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute przyjmuje sekwencję jako drugi argument"
+
+#: plpy_spi.c:335
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "nie powiódł się SPI_execute_plan: %s"
+
+#: plpy_spi.c:377
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "nie powiódł się SPI_execute: %s"
+
+#: plpy_subxactobject.c:122
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "ta podtransakcja już została wprowadzona"
+
+#: plpy_subxactobject.c:128 plpy_subxactobject.c:186
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "ta podtransakcja już została zakończona"
+
+#: plpy_subxactobject.c:180
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "ta podtransakcja nie została wprowadzona"
+
+#: plpy_subxactobject.c:192
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "brak podtransakcji by z niej wyjść"
+
+#: plpy_typeio.c:292
+#, c-format
+msgid "could not create new dictionary"
+msgstr "nie można utworzyć nowego słownika"
+
+#: plpy_typeio.c:560
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "nie można zaimportować modułu dla konstruktora Decimal"
+
+#: plpy_typeio.c:564
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "brak atrybutu Decimal w module"
+
+#: plpy_typeio.c:570
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "konwersja z numeric na Decimal nie powiodła się"
+
+#: plpy_typeio.c:772
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "nie można utworzyć reprezentacji bajtowej obiektu Python"
+
+#: plpy_typeio.c:881
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "nie można utworzyć reprezentacji znakowej obiektu Python"
+
+#: plpy_typeio.c:892
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "nie można zmienić obiektu Python na cstring: reprezentacja ciągu znaków Python wydaje się zawierać puste bajty"
+
+#: plpy_typeio.c:949
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "nieprawidłowy literał rekordu: \"%s\""
+
+#: plpy_typeio.c:950
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Brak lewego nawiasu."
+
+#: plpy_typeio.c:951 plpy_typeio.c:1389
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g. \"[('foo')]\""
+msgstr ""
+"By zwrócić typ złożony w tablicy, zwracaj typ złożony jako krotkę Pythona, "
+"np. \"[('foo')]\""
+
+#: plpy_typeio.c:1000
+#, c-format
+#| msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)"
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "liczba wymiarów tablicy przekracza dozwolone maksimum (%d)"
+
+#: plpy_typeio.c:1004
+#, c-format
+#| msgid "cannot determine OID of function lo_truncate\n"
+msgid "cannot determine sequence length for function return value"
+msgstr ""
+"nie można ustalić długości sekwencji dla zwracanej wartości przez funkcję"
+
+#: plpy_typeio.c:1007 plpy_typeio.c:1011
+#, c-format
+#| msgid "array size exceeds the maximum allowed (%d)"
+msgid "array size exceeds the maximum allowed"
+msgstr "rozmiar tablicy przekracza dozwolone maksimum"
+
+#: plpy_typeio.c:1037
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "wartość zwrócona przez funkcję zwracającą tablicę nie jest sekwencją Python"
+
+#: plpy_typeio.c:1090
+#, c-format
+#| msgid "multidimensional arrays must have array expressions with matching dimensions"
+msgid "multidimensional arrays must have array expressions with matching dimensions. PL/Python function return value has sequence length %d while expected %d"
+msgstr ""
+"wielowymiarowe tablice muszą mieć wyrażenia tablicowe z pasującymi "
+"wymiarami. Wartość zwracana przez funkcję PL/Python ma długość sekwencji %d "
+"gdy oczekiwano %d"
+
+#: plpy_typeio.c:1212
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "nie odnaleziono klucza \"%s\" w mapowaniu"
+
+#: plpy_typeio.c:1213
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "Aby zwrócić null w kolumnie, dodaj wartość None do mapowania z kluczem nazwanym wedle kolumny."
+
+#: plpy_typeio.c:1264
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "długość zwróconej sekwencji nie jest równa liczbie kolumn w wierszu"
+
+#: plpy_typeio.c:1387
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "atrybut \"%s\" nie istnieje w obiekcie Python"
+
+#: plpy_typeio.c:1390
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "Aby zwrócić null w kolumnie, niech zwrócony obiekt posiada atrybut nazwany wedle kolumny z wartością None."
+
+#: plpy_util.c:36
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "nie można zmienić obiektu unikodowego Python na bajty"
+
+#: plpy_util.c:42
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "nie można wyciągnąć bajtów z kodowanego ciągu znaków"
+
+#~ msgid "Python major version mismatch in session"
+#~ msgstr "niezgodna wersja główna Python w sesji"
+
+#~ msgid "This session has previously used Python major version %d, and it is now attempting to use Python major version %d."
+#~ msgstr "Ta sesja używała poprzednio Python w głównej wersji %d, teraz próbuje użyć Python w głównej wersji %d."
+
+#~ msgid "Start a new session to use a different Python major version."
+#~ msgstr "Uruchom nową sesję aby użyć innej głównej wersji Python."
+
+#~ msgid "plpy.prepare does not support composite types"
+#~ msgstr "plpy.prepare nie obsługuje typów złożonych"
+
+#~ msgid "PL/Python does not support conversion to arrays of row types."
+#~ msgstr "PL/Python nie obsługuje konwersji typów wierszowych na tablice."
+
+#~ msgid "unrecognized error in PLy_spi_execute_fetch_result"
+#~ msgstr "nierozpoznany błąd w PLy_spi_execute_fetch_result"
+
+#~ msgid "could not create new Python list"
+#~ msgstr "nie można utworzyć nowej listy Python"
+
+#~ msgid "PL/Python only supports one-dimensional arrays."
+#~ msgstr "PL/Python obsługuje tylko jednowymiarowe tablice."
+
+#~ msgid "cannot convert multidimensional array to Python list"
+#~ msgstr "nie można skonwertować tablicy wielowymiarowej na listę Python"
+
+#~ msgid "could not create the base SPI exceptions"
+#~ msgstr "nie można stworzyć bazowych wyjątków SPI"
+
+#~ msgid "plan.status takes no arguments"
+#~ msgstr "plan.status nie przyjmuje żadnych argumentów"
diff --git a/src/pl/plpython/po/pt_BR.po b/src/pl/plpython/po/pt_BR.po
new file mode 100644
index 0000000..ddeae15
--- /dev/null
+++ b/src/pl/plpython/po/pt_BR.po
@@ -0,0 +1,461 @@
+# Brazilian Portuguese message translation file for plpython
+#
+# Copyright (C) 2009-2022 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+#
+# Euler Taveira <euler@eulerto.com>, 2009-2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 15\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2022-09-27 13:15-0300\n"
+"PO-Revision-Date: 2009-05-10 01:15-0300\n"
+"Last-Translator: Euler Taveira <euler@eulerto.com>\n"
+"Language-Team: Brazilian Portuguese <pgsql-translators@postgresql.org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n>1);\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor esperava uma consulta ou um plano"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor tem uma sequência como seu segundo argumento"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "não pôde executar plano"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Sequência esperada de %d argumento, recebeu %d: %s"
+msgstr[1] "Sequência esperada de %d argumentos, recebeu %d: %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "iterando um cursor fechado"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "iterando um cursor em uma subtransação abortada"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "busca em um cursor fechado"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "resultado da consulta tem muitos registros para caber em uma lista Python"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "fechando um cursor em uma subtransação abortada"
+
+#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "modo de retorno da função que retorna conjunto não é suportado"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "funções PL/Python que retornam conjunto só suportam retornar um valor por chamada."
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "objeto retornado não pode ser iterado"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "funções PL/Python que retornam conjunto devem retornar um objeto iterável."
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "erro ao buscar próximo item do iterador"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "procedimento PL/Python não retornou None"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "função PL/Python com tipo de retorno \"void\" não retornou None"
+
+#: plpy_exec.c:369 plpy_exec.c:395
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "função de gatilho retornou valor inesperado"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "None ou uma cadeia de caracteres era esperado."
+
+#: plpy_exec.c:385
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "função de gatilho PL/Python retornou \"MODIFY\" em um gatilho DELETE -- ignorado"
+
+#: plpy_exec.c:396
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Era esperado None, \"OK\", \"SKIP\" ou \"MODIFY\"."
+
+#: plpy_exec.c:441
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "PyList_SetItem() falhou ao definir argumentos"
+
+#: plpy_exec.c:445
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "PyDict_SetItemString() falhou ao definir argumentos"
+
+#: plpy_exec.c:457
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "função que retorna record foi chamada em um contexto que não pode aceitar tipo record"
+
+#: plpy_exec.c:674
+#, c-format
+msgid "while creating return value"
+msgstr "ao criar valor de retorno"
+
+#: plpy_exec.c:908
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] removido, não pode modificar registro"
+
+#: plpy_exec.c:913
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] não é um dicionário"
+
+#: plpy_exec.c:938
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "chave do dicionário TD[\"new\"] na posição %d não é uma cadeia de caracteres"
+
+#: plpy_exec.c:945
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "chave \"%s\" encontrada em TD[\"new\"] não existe como uma coluna no registro do gatilho"
+
+#: plpy_exec.c:950
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "não pode definir atributo do sistema \"%s\""
+
+#: plpy_exec.c:955
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "não pode definir coluna gerada \"%s\""
+
+#: plpy_exec.c:1013
+#, c-format
+msgid "while modifying trigger row"
+msgstr "ao modificar registro de gatilho"
+
+#: plpy_exec.c:1071
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "forçado a abortar subtransação que não foi concluída"
+
+#: plpy_main.c:111
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "múltiplas bibliotecas do Python estão presentes na sessão"
+
+#: plpy_main.c:112
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "Apenas uma versão do Python pode ser utilizada na sessão."
+
+#: plpy_main.c:124
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "erro não interceptado na inicialização"
+
+#: plpy_main.c:147
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "não pôde importar módulo \"__main__\""
+
+#: plpy_main.c:156
+#, c-format
+msgid "could not initialize globals"
+msgstr "não pôde inicializar globais"
+
+#: plpy_main.c:354
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "procedimento PL/Python \"%s\""
+
+#: plpy_main.c:357
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "função PL/Python \"%s\""
+
+#: plpy_main.c:365
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "bloco de código PL/Python anônimo"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "não pôde importar módulo \"plpy\""
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "não pôde criar o módulo spiexceptions"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "não pôde adicionar o módulo spiexceptions"
+
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "não pôde gerar exceções da SPI"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "não pode desempacotar argumentos em plpy.elog"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "não pode analisar mensagem de erro em plpy.elog"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "argumento 'message' informado por nome e posição"
+
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "'%s' é um argumento inválido para esta função"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "código SQLSTATE inválido"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "funções de gatilho só podem ser chamadas como gatilhos"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "funções PL/Python não podem retornar tipo %s"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "funções PL/Python não podem aceitar tipo %s"
+
+#: plpy_procedure.c:397
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "não pôde compilar função PL/Python \"%s\""
+
+#: plpy_procedure.c:400
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "não pôde compilar bloco de código PL/Python anônimo"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "comando não produziu um conjunto de resultados"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "segundo argumento de plpy.prepare deve ser uma sequência"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: nome do tipo na posição %d não é uma cadeia de caracteres"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute espera uma consulta ou um plano"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute recebe uma sequência como segundo argumento"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan falhou: %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute falhou: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "essa subtransação já foi iniciada"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "essa subtransação já foi concluída"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "essa subtransação não foi iniciada"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "não há uma subtransação a ser concluída"
+
+#: plpy_typeio.c:587
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "não pôde importar módulo para construtor Decimal"
+
+#: plpy_typeio.c:591
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "nenhum atributo Decimal no módulo"
+
+#: plpy_typeio.c:597
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "conversão de numeric para Decimal falhou"
+
+#: plpy_typeio.c:911
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "não pôde criar representação de bytes de um objeto Python"
+
+#: plpy_typeio.c:1048
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "não pôde criar representação de cadeia de caracteres de um objeto Python"
+
+#: plpy_typeio.c:1059
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "não pôde converter objeto Python em cstring: representação de cadeia de caracteres Python parece conter bytes nulos"
+
+#: plpy_typeio.c:1170
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "número de dimensões da matriz excede o máximo permitido (%d)"
+
+#: plpy_typeio.c:1175
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "não pôde determinar tamanho da sequência para valor de retorno da função"
+
+#: plpy_typeio.c:1180 plpy_typeio.c:1186
+#, c-format
+msgid "array size exceeds the maximum allowed"
+msgstr "tamanho da matriz excede o máximo permitido"
+
+#: plpy_typeio.c:1214
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "valor de retorno da função do tipo matriz retorna tipo que não é uma sequência Python"
+
+#: plpy_typeio.c:1261
+#, c-format
+msgid "wrong length of inner sequence: has length %d, but %d was expected"
+msgstr "tamanho incorreto da sequência interna: tem tamanho %d, mas %d era esperado"
+
+#: plpy_typeio.c:1263
+#, c-format
+msgid "To construct a multidimensional array, the inner sequences must all have the same length."
+msgstr "Para construir uma matriz multidimensional, todas as sequências internas devem ter o mesmo tamanho."
+
+#: plpy_typeio.c:1342
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "matriz mal formada: \"%s\""
+
+#: plpy_typeio.c:1343
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Faltando parêntese esquerdo."
+
+#: plpy_typeio.c:1344 plpy_typeio.c:1545
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "Para retornar um tipo composto em uma matriz, retorne o tipo composto como uma tupla do Python, i.e., \"[('foo',)]\"."
+
+#: plpy_typeio.c:1391
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "chave \"%s\" não foi encontrada no mapeamento"
+
+#: plpy_typeio.c:1392
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "Para retornar nulo em uma coluna, adicionar o valor None no mapeamento cuja chave é o nome da coluna."
+
+#: plpy_typeio.c:1445
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "tamanho da sequência retornada não combina com número de colunas no registro"
+
+#: plpy_typeio.c:1543
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "atributo \"%s\" não existe no objeto Python"
+
+#: plpy_typeio.c:1546
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "Para retornar nulo na coluna, deixe o objeto retornado ter um atributo cuja chave é o nome do coluna e o valor é None."
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "não pôde converter objeto Unicode Python para bytes"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "não pôde extrair bytes de cadeia de caracteres codificada"
diff --git a/src/pl/plpython/po/ru.po b/src/pl/plpython/po/ru.po
new file mode 100644
index 0000000..b3a6d40
--- /dev/null
+++ b/src/pl/plpython/po/ru.po
@@ -0,0 +1,561 @@
+# Russian message translation file for plpython
+# Copyright (C) 2012-2016 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# Alexander Lakhin <exclusion@gmail.com>, 2012-2017, 2018, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython (PostgreSQL current)\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2023-11-03 09:08+0300\n"
+"PO-Revision-Date: 2019-08-29 15:42+0300\n"
+"Last-Translator: Alexander Lakhin <exclusion@gmail.com>\n"
+"Language-Team: Russian <pgsql-ru-general@postgresql.org>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor ожидает запрос или план"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor принимает в качестве второго аргумента последовательность"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "нельзя выполнить план"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Ожидалась последовательность из %d аргумента, получено %d: %s"
+msgstr[1] "Ожидалась последовательность из %d аргументов, получено %d: %s"
+msgstr[2] "Ожидалась последовательность из %d аргументов, получено %d: %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "перемещение закрытого курсора"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "перемещение курсора в прерванной подтранзакции"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "выборка из закрытого курсора"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr ""
+"результат запроса содержит слишком много строк для передачи в списке Python"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "закрытие курсора в прерванной подтранзакции"
+
+#: plpy_elog.c:122 plpy_elog.c:123 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "неподдерживаемый режим возврата для функции с результатом-множеством"
+
+#: plpy_exec.c:140
+#, c-format
+msgid ""
+"PL/Python set-returning functions only support returning one value per call."
+msgstr ""
+"Функции PL/Python с результатом-множеством могут возвращать только одно "
+"значение за вызов."
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "возвращаемый объект не поддерживает итерации"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr ""
+"Функции PL/Python с результатом-множеством должны возвращать объекты с "
+"возможностью итерации."
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "ошибка получения следующего элемента из итератора"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "процедура PL/Python вернула не None"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "функция PL/Python с типом результата \"void\" вернула не None"
+
+#: plpy_exec.c:369 plpy_exec.c:393
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "триггерная процедура вернула недопустимое значение"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "Ожидалось None или строка."
+
+#: plpy_exec.c:383
+#, c-format
+msgid ""
+"PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr ""
+"триггерная функция PL/Python вернула \"MODIFY\" в триггере DELETE -- "
+"игнорируется"
+
+#: plpy_exec.c:394
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Ожидалось None, \"OK\", \"SKIP\" или \"MODIFY\"."
+
+#: plpy_exec.c:444
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "ошибка в PyList_SetItem() при настройке аргументов"
+
+#: plpy_exec.c:448
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "ошибка в PyDict_SetItemString() при настройке аргументов"
+
+#: plpy_exec.c:460
+#, c-format
+msgid ""
+"function returning record called in context that cannot accept type record"
+msgstr ""
+"функция, возвращающая запись, вызвана в контексте, не допускающем этот тип"
+
+#: plpy_exec.c:677
+#, c-format
+msgid "while creating return value"
+msgstr "при создании возвращаемого значения"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "элемент TD[\"new\"] удалён -- изменить строку нельзя"
+
+#: plpy_exec.c:929
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] - не словарь"
+
+#: plpy_exec.c:954
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "ключ словаря TD[\"new\"] с порядковым номером %d не является строкой"
+
+#: plpy_exec.c:961
+#, c-format
+msgid ""
+"key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering "
+"row"
+msgstr ""
+"ключу \"%s\", найденному в TD[\"new\"], не соответствует столбец в строке, "
+"обрабатываемой триггером"
+
+#: plpy_exec.c:966
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "присвоить значение системному атрибуту \"%s\" нельзя"
+
+#: plpy_exec.c:971
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "присвоить значение генерируемому столбцу \"%s\" нельзя"
+
+#: plpy_exec.c:1029
+#, c-format
+msgid "while modifying trigger row"
+msgstr "при изменении строки в триггере"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "принудительное прерывание незавершённой подтранзакции"
+
+#: plpy_main.c:109
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "в сеансе представлено несколько библиотек Python"
+
+#: plpy_main.c:110
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "В одном сеансе нельзя использовать Python разных старших версий."
+
+#: plpy_main.c:122
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "необработанная ошибка при инициализации"
+
+#: plpy_main.c:145
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "не удалось импортировать модуль \"__main__\""
+
+#: plpy_main.c:154
+#, c-format
+msgid "could not initialize globals"
+msgstr "не удалось инициализировать глобальные данные"
+
+#: plpy_main.c:352
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "процедура PL/Python \"%s\""
+
+#: plpy_main.c:355
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "функция PL/Python \"%s\""
+
+#: plpy_main.c:363
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "анонимный блок кода PL/Python"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "не удалось импортировать модуль \"plpy\""
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "не удалось создать модуль spiexceptions"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "не удалось добавить модуль spiexceptions"
+
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "не удалось сгенерировать исключения SPI"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "не удалось распаковать аргументы в plpy.elog"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "не удалось разобрать сообщение об ошибке в plpy.elog"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "аргумент 'message' задан и по имени, и по позиции"
+
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "'%s' - недопустимое ключевое слово (аргумент) для этой функции"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "неверный код SQLSTATE"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "триггерные функции могут вызываться только в триггерах"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "функции PL/Python не могут возвращать тип %s"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "функции PL/Python не могут принимать тип %s"
+
+#: plpy_procedure.c:395
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "не удалось скомпилировать функцию PL/Python \"%s\""
+
+#: plpy_procedure.c:398
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "не удалось скомпилировать анонимный блок кода PL/Python"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "команда не выдала результирующий набор"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "вторым аргументом plpy.prepare должна быть последовательность"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: имя типа с порядковым номером %d не является строкой"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute ожидает запрос или план"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute принимает в качестве второго аргумента последовательность"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "ошибка в SPI_execute_plan: %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "ошибка в SPI_execute: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "эта подтранзакция уже начата"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "эта подтранзакция уже закончена"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "эта подтранзакция ещё не начата"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "нет подтранзакции, которую нужно закончить"
+
+#: plpy_typeio.c:588
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "не удалось импортировать модуль для конструктора Decimal"
+
+#: plpy_typeio.c:592
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "в модуле нет атрибута Decimal"
+
+#: plpy_typeio.c:598
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "не удалось преобразовать numeric в Decimal"
+
+#: plpy_typeio.c:912
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "не удалось создать байтовое представление объекта Python"
+
+#: plpy_typeio.c:1049
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "не удалось создать строковое представление объекта Python"
+
+#: plpy_typeio.c:1060
+#, c-format
+msgid ""
+"could not convert Python object into cstring: Python string representation "
+"appears to contain null bytes"
+msgstr ""
+"не удалось преобразовать объект Python в cstring: похоже, представление "
+"строки Python содержит нулевые байты"
+
+#: plpy_typeio.c:1157
+#, c-format
+msgid ""
+"return value of function with array return type is not a Python sequence"
+msgstr ""
+"возвращаемое значение функции с результатом-массивом не является "
+"последовательностью"
+
+#: plpy_typeio.c:1202
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr ""
+"не удалось определить длину последовательности в возвращаемом функцией "
+"значении"
+
+#: plpy_typeio.c:1222 plpy_typeio.c:1237 plpy_typeio.c:1253
+#, c-format
+msgid ""
+"multidimensional arrays must have array expressions with matching dimensions"
+msgstr ""
+"для многомерных массивов должны задаваться выражения с соответствующими "
+"размерностями"
+
+#: plpy_typeio.c:1227
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "число размерностей массива превышает предел (%d)"
+
+#: plpy_typeio.c:1329
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "ошибка в литерале записи: \"%s\""
+
+#: plpy_typeio.c:1330
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Отсутствует левая скобка."
+
+#: plpy_typeio.c:1331 plpy_typeio.c:1532
+#, c-format
+msgid ""
+"To return a composite type in an array, return the composite type as a "
+"Python tuple, e.g., \"[('foo',)]\"."
+msgstr ""
+"Чтобы возвратить составной тип в массиве, нужно возвратить составное "
+"значение в виде кортежа Python, например: \"[('foo',)]\"."
+
+#: plpy_typeio.c:1378
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "ключ \"%s\" не найден в сопоставлении"
+
+#: plpy_typeio.c:1379
+#, c-format
+msgid ""
+"To return null in a column, add the value None to the mapping with the key "
+"named after the column."
+msgstr ""
+"Чтобы присвоить столбцу NULL, добавьте в сопоставление значение None с "
+"ключом-именем столбца."
+
+#: plpy_typeio.c:1432
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "длина возвращённой последовательности не равна числу столбцов в строке"
+
+#: plpy_typeio.c:1530
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "в объекте Python не существует атрибут \"%s\""
+
+#: plpy_typeio.c:1533
+#, c-format
+msgid ""
+"To return null in a column, let the returned object have an attribute named "
+"after column with value None."
+msgstr ""
+"Чтобы присвоить столбцу NULL, присвойте возвращаемому значению атрибут с "
+"именем столбца и значением None."
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "не удалось преобразовать объект Python Unicode в байты"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "не удалось извлечь байты из кодированной строки"
+
+#, c-format
+#~ msgid "array size exceeds the maximum allowed"
+#~ msgstr "размер массива превышает предел"
+
+#, c-format
+#~ msgid "wrong length of inner sequence: has length %d, but %d was expected"
+#~ msgstr "неверная длина внутренней последовательности: %d (ожидалось: %d)"
+
+#, c-format
+#~ msgid ""
+#~ "To construct a multidimensional array, the inner sequences must all have "
+#~ "the same length."
+#~ msgstr ""
+#~ "Для образования многомерного массива внутренние последовательности должны "
+#~ "иметь одинаковую длину."
+
+#~ msgid "could not create new dictionary while building trigger arguments"
+#~ msgstr "не удалось создать словарь для передачи аргументов триггера"
+
+#~ msgid "could not create globals"
+#~ msgstr "не удалось создать глобальные данные"
+
+#~ msgid "could not create exception \"%s\""
+#~ msgstr "не удалось сгенерировать исключение \"%s\""
+
+#~ msgid "could not create new dictionary"
+#~ msgstr "не удалось создать словарь"
+
+#~ msgid "plan.status takes no arguments"
+#~ msgstr "plan.status не принимает аргументы"
+
+#~ msgid "cannot convert multidimensional array to Python list"
+#~ msgstr "преобразовать многомерный массив в список Python нельзя"
+
+#~ msgid "PL/Python only supports one-dimensional arrays."
+#~ msgstr "PL/Python поддерживает только одномерные массивы."
+
+#~ msgid "could not create new Python list"
+#~ msgstr "не удалось создать список Python"
+
+#~ msgid "could not create the base SPI exceptions"
+#~ msgstr "не удалось создать базовые объекты исключений SPI"
+
+#~ msgid "the message is already specified"
+#~ msgstr "сообщение уже указано"
+
+#~ msgid "Python major version mismatch in session"
+#~ msgstr "несовпадение базовой версии Python в сеансе"
+
+#~ msgid ""
+#~ "This session has previously used Python major version %d, and it is now "
+#~ "attempting to use Python major version %d."
+#~ msgstr ""
+#~ "В данном сеансе до этого использовался Python базовой версии %d, а сейчас "
+#~ "планируется использовать Python версии %d."
+
+#~ msgid "Start a new session to use a different Python major version."
+#~ msgstr ""
+#~ "Чтобы переключиться на другую базовую версию Python, начните новый сеанс."
+
+#~ msgid "plpy.prepare does not support composite types"
+#~ msgstr "plpy.prepare не поддерживает составные типы"
+
+#~ msgid "PL/Python does not support conversion to arrays of row types."
+#~ msgstr "PL/Python не поддерживает преобразование в массивы кортежей."
+
+#~ msgid "could not initialize plpy"
+#~ msgstr "не удалось инициализировать plpy"
+
+#~ msgid "unrecognized error in PLy_spi_execute_fetch_result"
+#~ msgstr "нераспознанная ошибка в PLy_spi_execute_fetch_result"
diff --git a/src/pl/plpython/po/sv.po b/src/pl/plpython/po/sv.po
new file mode 100644
index 0000000..8642c20
--- /dev/null
+++ b/src/pl/plpython/po/sv.po
@@ -0,0 +1,461 @@
+# Swedish message translation file for plpython
+# Copyright (C) 2017 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# Dennis Björklund <db@zigo.dhs.org>, 2017, 2018, 2019, 2020, 2021, 2022, 2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 16\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2023-08-02 08:08+0000\n"
+"PO-Revision-Date: 2023-08-02 12:03+0200\n"
+"Last-Translator: Dennis Björklund <db@zigo.dhs.org>\n"
+"Language-Team: Swedish <pgsql-translators@postgresql.org>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor förväntade sig en fråga eller en plan"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor tar en sekvens som sitt andra argument"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "kunde inte exekvera plan"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Förväntade sekvens med %d argument, fick %d: %s"
+msgstr[1] "Förväntade sekvens med %d argument, fick %d: %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "itererar med en stängd markör"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "itererar med en markör i en avbruten subtransaktion"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "hämta från en stängd markör"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "frågeresultet har för många rader för att få plats i en Python-lista"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "stänger en markör i en avbruten subtransaktion"
+
+#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "ej supportat returläge för mängdfunktion"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "PL/Python mängdreturnerande funktioner stöder bara ett värde per anrop."
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "returnerat objekt kan inte itereras"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "PL/Python mängdreturnerande funktioner måste returnera ett itererbart objekt."
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "fel vid hämtning av nästa del från iteratorn"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "PL/Python-procedur returnerade inte None"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "PL/Python-funktion med returtyp \"void\" returnerade inte None"
+
+#: plpy_exec.c:369 plpy_exec.c:393
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "oväntat returvärde från triggerprocedur"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "Förväntade None eller en sträng."
+
+#: plpy_exec.c:383
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "PL/Python-triggerfunktion returnerade \"MODIFY\" i en DELETE-trigger -- ignorerad"
+
+#: plpy_exec.c:394
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Förväntade None, \"OK\", \"SKIP\" eller \"MODIFY\"."
+
+#: plpy_exec.c:444
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "PyList_SetItem() misslyckades vid uppsättning av argument"
+
+#: plpy_exec.c:448
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "PyDict_SetItemString() misslyckades vid uppsättning av argument"
+
+#: plpy_exec.c:460
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "en funktion med post som värde anropades i sammanhang där poster inte kan godtagas."
+
+#: plpy_exec.c:677
+#, c-format
+msgid "while creating return value"
+msgstr "vid skapande av returvärde"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] raderad, kan inte modifiera rad"
+
+#: plpy_exec.c:929
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] är inte en dictionary"
+
+#: plpy_exec.c:954
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "TD[\"new\"] dictionary-nyckel vid numerisk position %d är inte en sträng"
+
+#: plpy_exec.c:961
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "nyckel \"%s\" hittad i TD[\"new\"] finns inte som en kolumn i den triggande raden"
+
+#: plpy_exec.c:966
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "kan inte sätta systemattribut \"%s\""
+
+#: plpy_exec.c:971
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "kan inte sätta genererad kolumn \"%s\""
+
+#: plpy_exec.c:1029
+#, c-format
+msgid "while modifying trigger row"
+msgstr "vid modifiering av triggerrad"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "tvingar avbrytande av subtransaktion som inte har avslutats"
+
+#: plpy_main.c:109
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "multipla Python-bibliotek är aktiva i sessionen"
+
+#: plpy_main.c:110
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "Bara en major-version av Python kan användas i en session."
+
+#: plpy_main.c:122
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "ej fångar fel i initiering"
+
+#: plpy_main.c:145
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "kunde inte importera \"__main__\"-modul"
+
+#: plpy_main.c:154
+#, c-format
+msgid "could not initialize globals"
+msgstr "kunde inte initierar globaler"
+
+#: plpy_main.c:352
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "PL/Python-procedur \"%s\""
+
+#: plpy_main.c:355
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "PL/Python-funktion \"%s\""
+
+#: plpy_main.c:363
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "PL/Python anonymt kodblock"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "kunde inte importera \"plpy\"-modul"
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "kunde inte skapa modulen spiexceptions"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "kunde inte lägga till modulen spiexceptions"
+
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "kunde inte skapa SPI-undantag"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "kunde inte packa upp argument i plpy.elog"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "kunde inte parsa felmeddelande i plpy.elog"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "argumentet 'message' angivet med namn och position"
+
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "'%s' är ett ogiltigt nyckelordsargument för denna funktion"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "ogiltig SQLSTATE-kod"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "Triggningsfunktioner kan bara anropas vid triggning."
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "PL/Python-funktioner kan inte returnera typ %s"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "PL/Python-funktioner kan inte ta emot typ %s"
+
+#: plpy_procedure.c:395
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "kunde inte kompilera PL/Python-funktion \"%s\""
+
+#: plpy_procedure.c:398
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "kunde inte kompilera anonymt PL/Python-kodblock"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "kommandot producerade inte en resultatmängd"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "andra argumentet till plpy.prepare måste vara en sekvens"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: typnamn vid numerisk position %d är inte en sträng"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute förväntade en fråga eller en plan"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute tar en sekvens som sitt andra argument"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan misslyckades: %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute misslyckades: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "denna subtransaktion har redan gåtts in i"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "denna subtransaktion har redan avslutat"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "denna subtransaktion har inte gåtts in i"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "det finns ingen subtransaktion att avsluta från"
+
+#: plpy_typeio.c:588
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "kunde inte importera en modul för Decimal-konstruktorn"
+
+#: plpy_typeio.c:592
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "inga Decimal-attribut i modulen"
+
+#: plpy_typeio.c:598
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "konvertering från numeric till Decimal misslyckades"
+
+#: plpy_typeio.c:912
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "kunde inte skapa byte-representation av Python-objekt"
+
+#: plpy_typeio.c:1049
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "kunde inte skapa strängrepresentation av Python-objekt"
+
+#: plpy_typeio.c:1060
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "kunde inte konvertera Python-objekt till cstring: Python-strängrepresentationen verkar innehålla noll-bytes"
+
+#: plpy_typeio.c:1157
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "returvärde för funktion med array-returtyp är inte en Python-sekvens"
+
+#: plpy_typeio.c:1202
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "kunde inte bestämma sekvenslängd för funktionens returvärde"
+
+#: plpy_typeio.c:1222 plpy_typeio.c:1237 plpy_typeio.c:1253
+#, c-format
+msgid "multidimensional arrays must have array expressions with matching dimensions"
+msgstr "flerdimensionella vektorer måste ha array-uttryck av passande dimensioner"
+
+#: plpy_typeio.c:1227
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "antal array-dimensioner överskriver maximalt tillåtna (%d)"
+
+#: plpy_typeio.c:1329
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "felaktig postliteral: \"%s\""
+
+#: plpy_typeio.c:1330
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Saknar vänster parentes"
+
+#: plpy_typeio.c:1331 plpy_typeio.c:1532
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "För att returnera en composite-typ i en array, returnera composite-typen som en Python-tupel, t.ex. \"[('foo',)]\"."
+
+#: plpy_typeio.c:1378
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "nyckeln \"%s\" hittades inte i mapping"
+
+#: plpy_typeio.c:1379
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "För att returnera null i en kolumn så lägg till värdet None till mappningen med nyckelnamn taget från kolumnen."
+
+#: plpy_typeio.c:1432
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "längden på den returnerade sekvensen matchade inte antal kolumner i raden"
+
+#: plpy_typeio.c:1530
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "attributet \"%s\" finns inte i Python-objektet"
+
+#: plpy_typeio.c:1533
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "För att returnera null i en kolumn så låt det returnerade objektet ha ett attribut med namn efter kolumnen och med värdet None."
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "kunde inte konvertera Python-unicode-objekt till bytes"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "kunde inte extrahera bytes från kodad sträng"
+
+#, c-format
+#~ msgid "To construct a multidimensional array, the inner sequences must all have the same length."
+#~ msgstr "För att skapa en multidimensionell array så skall alla de inre sekvenserna ha samma längd."
+
+#, c-format
+#~ msgid "array size exceeds the maximum allowed"
+#~ msgstr "array-storlek överskrider maximalt tillåtna"
+
+#, c-format
+#~ msgid "wrong length of inner sequence: has length %d, but %d was expected"
+#~ msgstr "fel längd på inre sekvens: har längd %d, men %d förväntades"
diff --git a/src/pl/plpython/po/tr.po b/src/pl/plpython/po/tr.po
new file mode 100644
index 0000000..330162a
--- /dev/null
+++ b/src/pl/plpython/po/tr.po
@@ -0,0 +1,537 @@
+# LANGUAGE message translation file for plpython
+# Copyright (C) 2009 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PostgreSQL 8.4\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2019-04-26 13:38+0000\n"
+"PO-Revision-Date: 2019-06-13 17:10+0300\n"
+"Last-Translator: Abdullah G. Gülner <agulner@gmail.com>\n"
+"Language-Team: Turkish <devrim@gunduz.org>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 1.8.7.1\n"
+
+#: plpy_cursorobject.c:78
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor bir sorgu ya da bir plan bekledi"
+
+#: plpy_cursorobject.c:161
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor bir sequence'ı ikinci argüman olarak alır"
+
+#: plpy_cursorobject.c:177 plpy_spi.c:211
+#, c-format
+msgid "could not execute plan"
+msgstr "plan çalıştırılamadı"
+
+#: plpy_cursorobject.c:180 plpy_spi.c:214
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "%d argümanının sequence'ı beklendi; %d alındı: %s"
+
+#: plpy_cursorobject.c:329
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "kapalı bir imleç (cursor) yineleniyor"
+
+#: plpy_cursorobject.c:337 plpy_cursorobject.c:403
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "iptal edilen bir alt-işlemdeki (subtransaction) bir cursor yineleniyor"
+
+#: plpy_cursorobject.c:395
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "kapalı bir cursor'dan getir"
+
+#: plpy_cursorobject.c:438 plpy_spi.c:409
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "sorgu sonucundaki satır sayısı bir Python listesine sığabilecekten çok fazla "
+
+#: plpy_cursorobject.c:490
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "iptal edilen bir alt-işlemdeki (subtransaction) bir cursor kapatılıyor"
+
+#: plpy_elog.c:129 plpy_elog.c:130 plpy_plpymodule.c:553
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:143
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "desteklenmeyen küme fonksiyonu dönüş modu"
+
+#: plpy_exec.c:144
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "PL/Python küme dönen fonksiyonları sadece her çağrı içinde bir değer döndürmeyi desteklerler"
+
+#: plpy_exec.c:157
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "dönen nesne yinelenemez"
+
+#: plpy_exec.c:158
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "PL/Python küme dönen fonksiyonları yinelenebilir bir nesne dönmelidir."
+
+#: plpy_exec.c:172
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "yineleticiden sonraki öğeyi alırken hata"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "PL/Python prosedürü None döndürmedi"
+
+#: plpy_exec.c:219
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "dönüş tipi \"void\" olan PL/Python fonksiyonu None döndürmedi"
+
+#: plpy_exec.c:375 plpy_exec.c:401
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "trigger yordamından beklenmeyen dönüş değeri"
+
+#: plpy_exec.c:376
+#, c-format
+msgid "Expected None or a string."
+msgstr "None ya da string bekleniyordu."
+
+#: plpy_exec.c:391
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "PL/Python trigger fonksiyonu DELETE triggerında \"MODIFY\" döndürdü -- gözardı edildi"
+
+#: plpy_exec.c:402
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "None, \"OK\", \"SKIP\", ya da \"MODIFY\" bekleniyordu"
+
+#: plpy_exec.c:452
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "PyList_SetItem() bağımsız değişkenler ayarlanırken başarısız oldu"
+
+#: plpy_exec.c:456
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "PyDict_SetItemString() bağımsız değişkenler ayarlanırken başarısız oldu"
+
+#: plpy_exec.c:468
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "tip kaydı içermeyen alanda çağırılan ve kayıt döndüren fonksiyon"
+
+#: plpy_exec.c:685
+#, c-format
+msgid "while creating return value"
+msgstr "dönüş değeri yaratılırken"
+
+#: plpy_exec.c:919
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] silindi, satır düzenlenemiyor"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] bir sözlük değil"
+
+#: plpy_exec.c:951
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "%d sıra pozisyonundaki TD[\"new\"] sözlük anahtarı dizi değil"
+
+#: plpy_exec.c:958
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "TD[\"new\"] içinde bulunan \"%s\" anahtarı tetikleyen satırda bir kolon olarak bulunmuyor"
+
+#: plpy_exec.c:963
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "\"%s\" sistem niteliği ayarlanamıyor"
+
+#: plpy_exec.c:968
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "oluşturulan \"%s\" sütunu ayarlanamıyor"
+
+#: plpy_exec.c:1026
+#, c-format
+msgid "while modifying trigger row"
+msgstr "tetikleyici satırını düzenlerken"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "çıkış yapılmamış bir alt-işlem (subtransaction) zorla iptal ediliyor"
+
+#: plpy_main.c:125
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "oturumda birden çok Python kütüphanesi mevcut"
+
+#: plpy_main.c:126
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "Bir oturumda sadece bir Python ana sürümü kullanılabilir."
+
+#: plpy_main.c:142
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "ilklendirme aşamasında yakalanamayan hata"
+
+#: plpy_main.c:165
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "\"__main__\" modülü alınamadı"
+
+#: plpy_main.c:174
+#, c-format
+msgid "could not initialize globals"
+msgstr "global değerler ilklendirilemedi"
+
+#: plpy_main.c:399
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "\"%s\" PL/Python prosedürü"
+
+#: plpy_main.c:402
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "\"%s\" PL/Python fonksiyonu"
+
+#: plpy_main.c:410
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "PL/Python anonim kod bloğu"
+
+#: plpy_plpymodule.c:186 plpy_plpymodule.c:189
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "\"plpy\" modülü alınamadı"
+
+#: plpy_plpymodule.c:204
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "spiexceptions modülü oluşturulamadı"
+
+#: plpy_plpymodule.c:212
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "spiexceptions modülü eklenemedi"
+
+#: plpy_plpymodule.c:280
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "SPI istisnaları (exception) üretilemedi"
+
+#: plpy_plpymodule.c:448
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "plpy.elog dosyasındaki argümanlar unpack edilemedi"
+
+#: plpy_plpymodule.c:457
+msgid "could not parse error message in plpy.elog"
+msgstr "plpy.elog dosyasındaki hata mesajı ayrıştırılamadı"
+
+#: plpy_plpymodule.c:474
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "ad ve konum tarafından verilen argüman 'mesajı'"
+
+#: plpy_plpymodule.c:501
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "'%s' bu fonksiyon için geçersiz bir anahtar kelime argümanıdır"
+
+#: plpy_plpymodule.c:512 plpy_plpymodule.c:518
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "geçersiz SQLSTATE kodu"
+
+#: plpy_procedure.c:230
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "trigger fonksiyonları sadece trigger olarak çağırılabilirler."
+
+#: plpy_procedure.c:234
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "PL/Python fonksiyonları %s tipini döndüremezler"
+
+#: plpy_procedure.c:312
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "PL/Python fonksiyonlar %s tipini kabul etmezler"
+
+#: plpy_procedure.c:402
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "\"%s\" PL/Python fonksiyonu derlenemedi"
+
+#: plpy_procedure.c:405
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "anonim PL/Python kod bloğu derlenemedi"
+
+#: plpy_resultobject.c:121 plpy_resultobject.c:147 plpy_resultobject.c:173
+#, c-format
+msgid "command did not produce a result set"
+msgstr "komut bir sonuç kümesi üretmedi"
+
+#: plpy_spi.c:60
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "plpy.prepare'in ikinci argümanı sequence olmalıdır"
+
+#: plpy_spi.c:104
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: %d sıra posizyonundaki veri tipi dizi değil"
+
+#: plpy_spi.c:176
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute bir sorgu ya da bir plan bekledi"
+
+#: plpy_spi.c:195
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute bir sequence'ı ikinci argüman olarak alır"
+
+#: plpy_spi.c:305
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan başarısız oldu: %s"
+
+#: plpy_spi.c:347
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute başarısız oldu: %s"
+
+#: plpy_subxactobject.c:97
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "bu alt-işleme (subtransaction) zaten girilmiş"
+
+#: plpy_subxactobject.c:103 plpy_subxactobject.c:161
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "bu alt-işlemden (subtransaction) zaten çıkılmış"
+
+#: plpy_subxactobject.c:155
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "bu alt-işleme (subtransaction) girilmemiş"
+
+#: plpy_subxactobject.c:167
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "çıkılacak bir alt-işlem (subtransaction) yok"
+
+#: plpy_typeio.c:591
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "Decimal constructor için bir modül alınamadı"
+
+#: plpy_typeio.c:595
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "modülde Decimal niteliği yok"
+
+#: plpy_typeio.c:601
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "numeric'ten Decimal'e dönüşüm başarısız oldu"
+
+#: plpy_typeio.c:915
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "Python nesnesinin bytes gösterimi yaratılamadı"
+
+#: plpy_typeio.c:1063
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "Python nesnesinin dizgi gösterimi yaratılamadı"
+
+#: plpy_typeio.c:1074
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "Python nesnesi cstring'e dönüştürülemedi: Python dizgi gösterimi null bayt içeriyor olabilir."
+
+#: plpy_typeio.c:1183
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "dizi (array) boyut sayısı izin verilen en yüksek değeri (%d) aşmaktadır"
+
+#: plpy_typeio.c:1187
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "fonksiyon dönüş değeri için sequence uzunluğu belirlenemedi"
+
+#: plpy_typeio.c:1190 plpy_typeio.c:1194
+#, c-format
+msgid "array size exceeds the maximum allowed"
+msgstr "dizi (array) boyutu izin verilen en yüksek değeri aşmaktadır"
+
+#: plpy_typeio.c:1220
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "dizi dönüp tipli dönüş değeri olan fonksiyon Python sequence'ı değildir"
+
+#: plpy_typeio.c:1266
+#, c-format
+msgid "wrong length of inner sequence: has length %d, but %d was expected"
+msgstr "iç sequence'in uzunluğu yanlış: %d uzunlukta, fakat %d bekleniyordu"
+
+#: plpy_typeio.c:1268
+#, c-format
+msgid "To construct a multidimensional array, the inner sequences must all have the same length."
+msgstr "Çok boyutlu bir dizi oluşturmak için, iç sequence'lerin tamamı aynı uzunlukta olmalı."
+
+#: plpy_typeio.c:1347
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "hatalı değer: \"%s\""
+
+#: plpy_typeio.c:1348
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Sol parantez eksik."
+
+#: plpy_typeio.c:1349 plpy_typeio.c:1550
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "Bir bileşik türü dizi (array) içinde döndürmek için, bileşik türü bir Python tuple, e.g., \"[('foo',)]\"."
+
+#: plpy_typeio.c:1396
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "\"%s\" anahtarı planlamada bulunnamadı"
+
+#: plpy_typeio.c:1397
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "Bir kolondan Null döndürmek için, kolonun ismindeki eşleşmenin anahtarına, NONE değerini ekleyin"
+
+#: plpy_typeio.c:1450
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "Dönen sequence'in uzunluğu satırdaki kolonların sayısı ile eşleşmiyor."
+
+#: plpy_typeio.c:1548
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "\"%s\" niteliği Python nesnesinde bulunmaz"
+
+#: plpy_typeio.c:1551
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr " Bir kolondan null döndürmek için, döndürdüğünüz nesnenin, kolonun adına sahip bir özelliğinin olmasını ve bu özelliğin değerinin NONE olmasını sağlamanız gerekir"
+
+#: plpy_util.c:35
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "Python unicode nesnesi baytlara dönüştürülemedi."
+
+#: plpy_util.c:41
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "kodlanmış string den baytlar çıkarılamadı"
+
+#~ msgid "could not create new dictionary while building trigger arguments"
+#~ msgstr "trigger argümanlarını oluştururken yeni sözlük yaratılamadı"
+
+#~ msgid "could not create globals"
+#~ msgstr "evrensel değerler (globals) oluşturulamadı"
+
+#~ msgid "could not create exception \"%s\""
+#~ msgstr "\"%s\" istisnası (exception) oluşturulamadı"
+
+#~ msgid "could not create new dictionary"
+#~ msgstr "Yeni sözlük yaratılamadı"
+
+#~ msgid "PL/Python function \"%s\" could not execute plan"
+#~ msgstr "\"%s\" PL/Python fonksiyonu planı çalıştıramadı"
+
+#~ msgid "PL/Python function \"%s\" failed"
+#~ msgstr "\"%s\" PL/Python fonksiyonu başarısız oldu"
+
+#~ msgid "could not create string representation of Python object in PL/Python function \"%s\" while creating return value"
+#~ msgstr "dönüş değeri yaratılırken \"%s\" Pl/Python fonksiyonunun içindeki Python ensnesinin dizi gösterimi yaratılamadı"
+
+#~ msgid "could not compute string representation of Python object in PL/Python function \"%s\" while modifying trigger row"
+#~ msgstr "tetikleyici satırı düzenlerken \"%s\" PL/Python fonksiyonunun içindeki Python nesnesinin dizi gösterimi hesaplanamadı"
+
+#~ msgid "out of memory"
+#~ msgstr "yetersiz bellek"
+
+#~ msgid "PL/Python: %s"
+#~ msgstr "PL/Python: %s"
+
+#~ msgid "could not create procedure cache"
+#~ msgstr "yordam önbelleği yaratılamadı"
+
+#~ msgid "Start a new session to use a different Python major version."
+#~ msgstr "Farklı bir Python ana sürümü kullanmak için yeni bir oturum açın."
+
+#~ msgid "This session has previously used Python major version %d, and it is now attempting to use Python major version %d."
+#~ msgstr "Bu oturum daha önceden %d Python ana sürümünü kullandı, ve şimdi %d ana sürümünü kullanmayı deniyor."
+
+#~ msgid "unrecognized error in PLy_spi_execute_fetch_result"
+#~ msgstr "PLy_spi_execute_fetch_result içinde tanımlanamayan hata"
+
+#~ msgid "unrecognized error in PLy_spi_execute_query"
+#~ msgstr "PLy_spi_execute_query içinde tanımlanamayan hata"
+
+#~ msgid "unrecognized error in PLy_spi_execute_plan"
+#~ msgstr "PLy_spi_execute_plan içinde beklenmeyen hata"
+
+#~ msgid "unrecognized error in PLy_spi_prepare"
+#~ msgstr "PLy_spi_prepare içinde tanımlanamayan hata"
+
+#~ msgid "plpy.prepare does not support composite types"
+#~ msgstr "plpy.prepare kompozit tipleri desteklemez"
+
+#~ msgid "invalid arguments for plpy.prepare"
+#~ msgstr "plpy.prepare için geçersiz argümanlar"
+
+#~ msgid "transaction aborted"
+#~ msgstr "transaction iptal edildi"
+
+#~ msgid "plan.status takes no arguments"
+#~ msgstr "plan.status bir argüman almaz"
+
+#~ msgid "PL/Python only supports one-dimensional arrays."
+#~ msgstr "PL/Python sadece bir boyutlu dizileri destekler."
+
+#~ msgid "cannot convert multidimensional array to Python list"
+#~ msgstr "çok boyutlu dizi, Python listesine dönüştürülemedi"
+
+#~ msgid "PL/Python does not support conversion to arrays of row types."
+#~ msgstr "PL/Python satır tiplerinin dizilere dönüşümünü desteklemez."
+
+#~ msgid "PyCObject_FromVoidPtr() failed"
+#~ msgstr "PyCObject_FromVoidPtr() başarısız oldu"
+
+#~ msgid "PyCObject_AsVoidPtr() failed"
+#~ msgstr "PyCObject_AsVoidPtr() başarısız oldu"
diff --git a/src/pl/plpython/po/uk.po b/src/pl/plpython/po/uk.po
new file mode 100644
index 0000000..0388016
--- /dev/null
+++ b/src/pl/plpython/po/uk.po
@@ -0,0 +1,452 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: postgresql\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2023-12-17 22:08+0000\n"
+"PO-Revision-Date: 2023-12-20 11:53\n"
+"Last-Translator: \n"
+"Language-Team: Ukrainian\n"
+"Language: uk_UA\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
+"X-Crowdin-Project: postgresql\n"
+"X-Crowdin-Project-ID: 324573\n"
+"X-Crowdin-Language: uk\n"
+"X-Crowdin-File: /REL_16_STABLE/plpython.pot\n"
+"X-Crowdin-File-ID: 933\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor очікував запит або план"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.сursor приймає як другий аргумент послідовність"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "не вдалося виконати план"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Очікувалась послідовність %d аргументів, отримано %d: %s"
+msgstr[1] "Очікувалась послідовність %d аргументів, отримано %d: %s"
+msgstr[2] "Очікувалась послідовність %d аргументів, отримано %d: %s"
+msgstr[3] "Очікувалась послідовність %d аргумента, отримано %d: %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "ітерація закритого курсора"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "ітерація курсора в перерваній субтранзакції"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "витяг з закритого курсору"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "результат запиту має забагато рядків для передачі у список Python"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "закриття курсора в перерваній транзакції"
+
+#: plpy_elog.c:122 plpy_elog.c:123 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "режим не підтримується для функцій, що повертають набір"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "функції PL/Python підтримують лише одне значення на виклик, коли повертають набір."
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "повернутий об'єкт не підтримує ітерації"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "функції PL/Python повинні повертати об'єкт з підтримкою ітерації, коли повертають набір."
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "помилка отримання наступного елемента від ітератора"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "процедура PL/Python не повернула None"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "PL/Python функція з типом результату \"void\" не повернули None"
+
+#: plpy_exec.c:369 plpy_exec.c:393
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "неочікуване значення процедури тригера"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "Очікувалось None або рядок."
+
+#: plpy_exec.c:383
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "Тригерна функція PL/Python повернула \"MODIFY\" в тригері DELETE -- проігноровано"
+
+#: plpy_exec.c:394
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Очікувалось None, \"OK\", \"SKIP\" або \"MODIFY\"."
+
+#: plpy_exec.c:444
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "помилка PyList_SetItem() під час встановлення параметрів"
+
+#: plpy_exec.c:448
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "помилка PyDict_SetItemString() під час встановлення параметрів"
+
+#: plpy_exec.c:460
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "функція, що повертає набір, викликана у контексті, що не приймає тип запис"
+
+#: plpy_exec.c:677
+#, c-format
+msgid "while creating return value"
+msgstr "під час створення значення результату"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] видалено, неможливо змінити рядок"
+
+#: plpy_exec.c:929
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] не є словником"
+
+#: plpy_exec.c:954
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "ключ словника TD[\"new\"] на порядковий позиції %d не є рядком"
+
+#: plpy_exec.c:961
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "ключ \"%s\" знайдений у TD[\"new\"] не існує як стовпець у рядку тригера"
+
+#: plpy_exec.c:966
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "не вдалося встановити системний атрибут \"%s\""
+
+#: plpy_exec.c:971
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "неможливо оновити згенерований стовпець \"%s\""
+
+#: plpy_exec.c:1029
+#, c-format
+msgid "while modifying trigger row"
+msgstr "під час зміни рядка тригера"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "примусове переривання субтранзакції, яка не вийшла"
+
+#: plpy_main.c:109
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "декілька бібліотек Python присутні у сесії"
+
+#: plpy_main.c:110
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "За один сеанс може використовуватися лише одна основна версія Python."
+
+#: plpy_main.c:122
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "неопрацьована помилка під час ініціалізації"
+
+#: plpy_main.c:145
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "не вдалося імпортувати \"__main__\" модуль"
+
+#: plpy_main.c:154
+#, c-format
+msgid "could not initialize globals"
+msgstr "не вдалося ініціалізувати globals"
+
+#: plpy_main.c:352
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "PL/Python процедура \"%s\""
+
+#: plpy_main.c:355
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "PL/Python функція \"%s\""
+
+#: plpy_main.c:363
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "анонімні коди блоку PL/Python"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "не вдалося імпортувати \"plpy\" модуль"
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "не вдалося створити spiexceptions модуль"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "не вдалося додати spiexceptions модуль"
+
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "не вдається створити винятки SPI"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "не вдалося розпакувати аргументи в plpy.elog"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "не вдалося проаналізувати повідомлення про помилку в plpy.elog"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "аргумент 'повідомлення' виданий за ім'ям та розташуванням"
+
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "'%s' є неприпустимим ключовим словом-аргументом для цієї функції"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "неприпустимий код SQLSTATE"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "тригер-функція може викликатися лише як тригер"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "PL/Python функції не можуть повернути тип %s"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "PL/Python функції не можуть прийняти тип %s"
+
+#: plpy_procedure.c:395
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "не вдалося скомпілювати функцію PL/Python \"%s\""
+
+#: plpy_procedure.c:398
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "не вдалося скомпілювати анонімні коди блоку PL/Python"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "команда не створила набір результатів"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "другий аргумент plpy.prepare має бути послідовністю"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: ім'я на порядковий позиції %d не є рядком"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute очікував запит або план"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute приймає як другий аргумент послідовність"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan не спрацював: %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute не спрацював: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "ця субтранзакція вже почалась"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "ця субтранзакція вже вийшла"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "ця субтранзакція ще не почалася"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "немає субтранзакції, щоб з неї вийти"
+
+#: plpy_typeio.c:588
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "не вдалося імпортувати модуль для конструктора Decimal"
+
+#: plpy_typeio.c:592
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "відсутній атрибут Decimal у модулі"
+
+#: plpy_typeio.c:598
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "не вдалося виконати перетворення з numeric на Decimal"
+
+#: plpy_typeio.c:912
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "не вдалося створити байтову репрезентацію об'єкта Python"
+
+#: plpy_typeio.c:1049
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "не вдалося створити рядкову репрезентацію об'єкта Python"
+
+#: plpy_typeio.c:1060
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "не вдалося перетворити об'єкт Python на cstring: репрезентація рядка Python містить значення null-байти"
+
+#: plpy_typeio.c:1157
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "значення функції з масивом в якості результату не є послідовністю Python"
+
+#: plpy_typeio.c:1202
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "не вдалося визначити довжину послідовності для значення функція"
+
+#: plpy_typeio.c:1222 plpy_typeio.c:1237 plpy_typeio.c:1253
+#, c-format
+msgid "multidimensional arrays must have array expressions with matching dimensions"
+msgstr "для багатовимірних масивів повинні задаватись вирази з відповідними вимірами"
+
+#: plpy_typeio.c:1227
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "кількість вимірів масиву перевищує максимально дозволену (%d)"
+
+#: plpy_typeio.c:1329
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "невірно сформований літерал запису: \"%s\""
+
+#: plpy_typeio.c:1330
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Відсутня ліва дужка."
+
+#: plpy_typeio.c:1331 plpy_typeio.c:1532
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "Щоб повернути складений тип в масиві, треба повернути композитний тип як кортеж Python, наприклад, \"[('foo',)]\"."
+
+#: plpy_typeio.c:1378
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "ключ \"%s\" не знайдено в зіставленні"
+
+#: plpy_typeio.c:1379
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "Для повернення значення null в стовпці, додайте значення None з ключом, що дорівнює імені стовпця."
+
+#: plpy_typeio.c:1432
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "довжина повернутої послідовності не відповідає кількості стовпців у рядку"
+
+#: plpy_typeio.c:1530
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "атрибут \"%s\" не існує в об'єкті Python"
+
+#: plpy_typeio.c:1533
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "Щоб повернути null в стовпці, результуючий об'єкт має мати атрибут з іменем стовпця зі значенням None."
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "не вдалося конвертувати об'єкт Python Unicode в байти"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "не можливо отримати байт з закодованого рядка"
+
diff --git a/src/pl/plpython/po/vi.po b/src/pl/plpython/po/vi.po
new file mode 100644
index 0000000..58e0505
--- /dev/null
+++ b/src/pl/plpython/po/vi.po
@@ -0,0 +1,485 @@
+# LANGUAGE message translation file for plpython
+# Copyright (C) 2018 PostgreSQL Global Development Group
+# This file is distributed under the same license as the plpython (PostgreSQL) package.
+# FIRST AUTHOR <kakalot49@gmail.com>, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython (PostgreSQL) 11\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@postgresql.org\n"
+"POT-Creation-Date: 2018-04-22 12:08+0000\n"
+"PO-Revision-Date: 2018-05-06 22:57+0900\n"
+"Language-Team: <pgvn_translators@postgresql.vn>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.0.6\n"
+"Last-Translator: Dang Minh Huong <kakalot49@gmail.com>\n"
+"Language: vi_VN\n"
+
+#: plpy_cursorobject.c:101
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor kỳ vọng một câu truy vấn hoặc một plan"
+
+#: plpy_cursorobject.c:184
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor lấy một chuỗi làm đối số thứ hai"
+
+#: plpy_cursorobject.c:200 plpy_spi.c:211
+#, c-format
+msgid "could not execute plan"
+msgstr "không thể chạy plan"
+
+#: plpy_cursorobject.c:203 plpy_spi.c:214
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "Kỳ vọng chuỗi của đối số %d, đã nhận %d: %s"
+
+#: plpy_cursorobject.c:352
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "lặp lại con trỏ đã đóng"
+
+#: plpy_cursorobject.c:360 plpy_cursorobject.c:426
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "lặp lại một con trỏ trong một subtransaction đã bị hủy bỏ"
+
+#: plpy_cursorobject.c:418
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "fetch từ một con trỏ đã bị đóng"
+
+#: plpy_cursorobject.c:461 plpy_spi.c:409
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "kết quả câu truy vấn có quá nhiều hàng để vừa với một danh sách Python"
+
+#: plpy_cursorobject.c:512
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "đóng một con trỏ trong một subtransaction bị hủy bỏ"
+
+#: plpy_elog.c:127 plpy_elog.c:128 plpy_plpymodule.c:559
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:142
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "không hỗ trợ thiết lập hàm trả về mode"
+
+#: plpy_exec.c:143
+#, c-format
+msgid ""
+"PL/Python set-returning functions only support returning one value per call."
+msgstr ""
+"PL/Python hàm thiết lập-trả về chỉ hỗ trợ trả về một giá trị cho một lần gọi."
+
+#: plpy_exec.c:156
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "đối tượng trả về không thể được lặp lại"
+
+#: plpy_exec.c:157
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "PL/Python hàm thiết lập-trả về phải trả về một iterable object."
+
+#: plpy_exec.c:171
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "lỗi khi fetch item tiếp theo từ iterator"
+
+#: plpy_exec.c:214
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "Thủ tục PL/Python đã không trả về None"
+
+#: plpy_exec.c:218
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "Hàm PL/Python với kiểu trả về là \"void\" đã không trả về None"
+
+#: plpy_exec.c:374 plpy_exec.c:400
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "không mong đợi giá trị trả về từ thủ tục trigger"
+
+#: plpy_exec.c:375
+#, c-format
+msgid "Expected None or a string."
+msgstr "Kỳ vọng None hoặc một chuỗi."
+
+#: plpy_exec.c:390
+#, c-format
+msgid ""
+"PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr ""
+"Hàm trigger PL/Python đã trả về \"MODIFY\" trong một DELETE trigger -- bỏ qua"
+
+#: plpy_exec.c:401
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "Kỳ vọng None, \"OK\", \"SKIP\", hoặc \"MODIFY\"."
+
+#: plpy_exec.c:451
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "Lỗi PyList_SetItem(), trong khi thiết lập đối số"
+
+#: plpy_exec.c:455
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "Lỗi PyDict_SetItemString(), trong khi thiết lập đối số"
+
+#: plpy_exec.c:467
+#, c-format
+msgid ""
+"function returning record called in context that cannot accept type record"
+msgstr ""
+"hàm trả về bản ghi được gọi trong ngữ cảnh không thể chấp nhận kiểu bản ghi"
+
+#: plpy_exec.c:684
+#, c-format
+msgid "while creating return value"
+msgstr "trong khi tạo ra giá trị trả về"
+
+#: plpy_exec.c:909
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] đã bị xóa, không thể sửa đổi hàng"
+
+#: plpy_exec.c:914
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] không phải là từ điển"
+
+#: plpy_exec.c:941
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "Khóa từ điển TD[\"new\"] ở vị trí thứ tự %d không phải là chuỗi"
+
+#: plpy_exec.c:948
+#, c-format
+msgid ""
+"key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering "
+"row"
+msgstr ""
+"khóa \"%s\" được tìm thấy trong TD[\"new\"] không tồn tại như là trigger mức "
+"độ hàng"
+
+#: plpy_exec.c:953
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "không thể thiết lập thuộc tính hệ thống \"%s\""
+
+#: plpy_exec.c:1011
+#, c-format
+msgid "while modifying trigger row"
+msgstr "trong khi sửa đổi trigger mức độ hàng"
+
+#: plpy_exec.c:1072
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "buộc phải hủy bỏ một subtransaction chưa được thoát"
+
+#: plpy_main.c:125
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "có nhiều thư viện Python trong một phiên"
+
+#: plpy_main.c:126
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "Chỉ có thể sử dụng một phiên bản chính của Python trong một phiên."
+
+#: plpy_main.c:142
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "lỗi chưa được bẫy trong lúc khởi tạo"
+
+#: plpy_main.c:165
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "không thể nhập mô-đun \"__main__\""
+
+#: plpy_main.c:174
+#, c-format
+msgid "could not initialize globals"
+msgstr "không thể khởi tạo biến global"
+
+#: plpy_main.c:399
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "Thủ tục PL/Python \"%s\""
+
+#: plpy_main.c:402
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "Hàm PL/Python \"%s\""
+
+#: plpy_main.c:410
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "Khối mã ẩn danh PL/Python"
+
+#: plpy_plpymodule.c:192 plpy_plpymodule.c:195
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "không thể nhập mô-đun \"plpy\""
+
+#: plpy_plpymodule.c:210
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "không thể tạo mô-đun spiexceptions"
+
+#: plpy_plpymodule.c:218
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "không thể thêm mô-đun spiexceptions"
+
+#: plpy_plpymodule.c:286
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "không thể tạo exception SPI"
+
+#: plpy_plpymodule.c:454
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "không thể giải nén đối số trong plpy.elog"
+
+#: plpy_plpymodule.c:463
+msgid "could not parse error message in plpy.elog"
+msgstr "không thể phân tích cú pháp thông điệp lỗi trong plpy.elog"
+
+#: plpy_plpymodule.c:480
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "đối số 'message' được chỉ định theo tên và vị trí"
+
+#: plpy_plpymodule.c:507
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "'%s' là đối số từ khóa không hợp lệ cho hàm này"
+
+#: plpy_plpymodule.c:518 plpy_plpymodule.c:524
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "mã SQLSTATE không hợp lệ"
+
+#: plpy_procedure.c:230
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "hàm trigger chỉ có thể được gọi như trigger"
+
+#: plpy_procedure.c:234
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "Hàm PL/Python không thể trả về kiểu %s"
+
+#: plpy_procedure.c:312
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "Các hàm PL/Python không thể chấp nhận kiểu %s"
+
+#: plpy_procedure.c:402
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "không thể biên dịch hàm PL/Python \"%s\""
+
+#: plpy_procedure.c:405
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "không thể biên dịch khối mã ẩn danh PL/Python"
+
+#: plpy_resultobject.c:150 plpy_resultobject.c:176 plpy_resultobject.c:202
+#, c-format
+msgid "command did not produce a result set"
+msgstr "lệnh không tạo ra một tập hợp kết quả"
+
+#: plpy_spi.c:60
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "đối số thứ hai của plpy.prepare phải là một chuỗi"
+
+#: plpy_spi.c:104
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: gõ tên tại vị trí thứ tự %d không phải là một chuỗi"
+
+#: plpy_spi.c:176
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute kỳ vọng một truy vấn hoặc một plan"
+
+#: plpy_spi.c:195
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute lấy một chuỗi làm đối số thứ hai"
+
+#: plpy_spi.c:305
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan lỗi: %s"
+
+#: plpy_spi.c:347
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute lỗi: %s"
+
+#: plpy_subxactobject.c:122
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "subtransaction này đã được nhập"
+
+#: plpy_subxactobject.c:128 plpy_subxactobject.c:186
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "subtransaction này đã được thoát"
+
+#: plpy_subxactobject.c:180
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "subtransaction này chưa được nhập"
+
+#: plpy_subxactobject.c:192
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "không có subtransaction để thoát khỏi"
+
+#: plpy_typeio.c:591
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "không thể nhập mô-đun cho Decimal constructor"
+
+#: plpy_typeio.c:595
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "không có thuộc tính thập phân trong mô-đun"
+
+#: plpy_typeio.c:601
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "chuyển đổi từ numeric sang thập phân không thành công"
+
+#: plpy_typeio.c:908
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "không thể tạo đại diện cho của đối tượng Python"
+
+#: plpy_typeio.c:1056
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "không thể tạo ra chuỗi đại diện cho đối tượng Python"
+
+#: plpy_typeio.c:1067
+#, c-format
+msgid ""
+"could not convert Python object into cstring: Python string representation "
+"appears to contain null bytes"
+msgstr ""
+"không thể chuyển đổi đối tượng Python thành cstring: đại diện chuỗi Python "
+"chứa byte null"
+
+#: plpy_typeio.c:1176
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "số lượng hướng của mảng vượt quá số lượng tối đa cho phép (%d)"
+
+#: plpy_typeio.c:1180
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "không thể xác định độ dài chuỗi cho giá trị trả về hàm"
+
+#: plpy_typeio.c:1183 plpy_typeio.c:1187
+#, c-format
+msgid "array size exceeds the maximum allowed"
+msgstr "kích thước mảng vượt quá mức tối đa cho phép"
+
+#: plpy_typeio.c:1213
+#, c-format
+msgid ""
+"return value of function with array return type is not a Python sequence"
+msgstr ""
+"giá trị trả về của hàm với kiểu trả về là mảng không phải là một chuỗi Python"
+
+#: plpy_typeio.c:1259
+#, c-format
+msgid "wrong length of inner sequence: has length %d, but %d was expected"
+msgstr "sai độ dài của chuỗi bên trong: có độ dài %d, nhưng %d được mong đợi"
+
+#: plpy_typeio.c:1261
+#, c-format
+msgid ""
+"To construct a multidimensional array, the inner sequences must all have the "
+"same length."
+msgstr ""
+"Để xây dựng một mảng đa chiều, các chuỗi bên trong phải có cùng độ dài."
+
+#: plpy_typeio.c:1340
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "bản ghi literal không đúng định dạng: \"%s\""
+
+#: plpy_typeio.c:1341
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "Thiếu dấu ngoặc đơn trái."
+
+#: plpy_typeio.c:1342 plpy_typeio.c:1543
+#, c-format
+msgid ""
+"To return a composite type in an array, return the composite type as a "
+"Python tuple, e.g., \"[('foo',)]\"."
+msgstr ""
+"Để trả về kiểu phức hợp trong một mảng, hãy trả về kiểu phức hợp dưới dạng "
+"một hàng Python, ví dụ: \"[('foo',)]\"."
+
+#: plpy_typeio.c:1389
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "không tìm thấy khóa \"%s\" trong ánh xạ"
+
+#: plpy_typeio.c:1390
+#, c-format
+msgid ""
+"To return null in a column, add the value None to the mapping with the key "
+"named after the column."
+msgstr ""
+"Để trả về null trong một cột, thêm giá trị None vào ánh xạ với khóa được đặt "
+"tên sau cột."
+
+#: plpy_typeio.c:1443
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "độ dài của chuỗi được trả về không khớp với số cột trong hàng"
+
+#: plpy_typeio.c:1541
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "thuộc tính \"%s\" không tồn tại trong đối tượng Python"
+
+#: plpy_typeio.c:1544
+#, c-format
+msgid ""
+"To return null in a column, let the returned object have an attribute named "
+"after column with value None."
+msgstr ""
+"Để trả về null trong một cột, hãy để đối tượng trả về có một thuộc tính được "
+"đặt tên sau cột với giá trị None."
+
+#: plpy_util.c:35
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "không thể chuyển đổi đối tượng Python Unicode thành byte"
+
+#: plpy_util.c:41
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "không thể trích xuất byte từ chuỗi đã được mã hóa"
diff --git a/src/pl/plpython/po/zh_CN.po b/src/pl/plpython/po/zh_CN.po
new file mode 100644
index 0000000..264d4f5
--- /dev/null
+++ b/src/pl/plpython/po/zh_CN.po
@@ -0,0 +1,459 @@
+# LANGUAGE message translation file for plpython
+# Copyright (C) 2010 PostgreSQL Global Development Group
+# This file is distributed under the same license as the PostgreSQL package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython (PostgreSQL) 14\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2021-08-14 05:38+0000\n"
+"PO-Revision-Date: 2021-08-16 18:00+0800\n"
+"Last-Translator: Jie Zhang <zhangjie2@fujitsu.com>\n"
+"Language-Team: Chinese (Simplified) <zhangjie2@fujitsu.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 1.5.7\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor期望一个查询或一个计划"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.cursor将一个序列作为它的第二个参数"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:207
+#, c-format
+msgid "could not execute plan"
+msgstr "无法执行计划"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:210
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "期望%d序列参数,但是得到%d: %s"
+
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "遍历一个关闭的游标"
+
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "在终止的子事务里遍历一个游标"
+
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "从关闭的游标里获取结果"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:403
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "查询结果中的行太多,无法放在一个Python列表中"
+
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "在终止的子事务里关闭一个游标"
+
+#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:548
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "不支持集合函数返回模式"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "PL/Python集合返回函数只支持在每次调用时返回一个值。"
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "所返回的对象无法迭代"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "PL/Python集合返回函数必须返回一个可迭代的对象."
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "当从迭代器中取回下一个成员时出现错误"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "PL/Python过程没有返回None"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "返回类型为\"void\"的PL/Python函数不返回None"
+
+#: plpy_exec.c:371 plpy_exec.c:397
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "在触发器存储过程出现非期望的返回值"
+
+#: plpy_exec.c:372
+#, c-format
+msgid "Expected None or a string."
+msgstr "期望空值或一个字符串"
+
+#: plpy_exec.c:387
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "在DELETE触发器中的PL/Python 触发器函数返回 \"MODIFY\" -- 忽略"
+
+#: plpy_exec.c:398
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "期望None, \"OK\", \"SKIP\", 或\"MODIFY\""
+
+#: plpy_exec.c:443
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "当设置参数的同时, 执行PyList_SetItem()失败"
+
+#: plpy_exec.c:447
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "当设置参数的同时, 执行PyDict_SetItemString()失败"
+
+#: plpy_exec.c:459
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "返回值类型是记录的函数在不接受使用记录类型的环境中调用"
+
+#: plpy_exec.c:676
+#, c-format
+msgid "while creating return value"
+msgstr "同时在创建返回值"
+
+#: plpy_exec.c:910
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] 已删除,无法修改记录"
+
+#: plpy_exec.c:915
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"]不是一个字典"
+
+#: plpy_exec.c:942
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "在顺序位置%d的TD[\"new\"]字典键值不是字符串"
+
+#: plpy_exec.c:949
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "在 TD[\"new\"]中找到的键 \"%s\"在正在触发的记录中不是作为列而存在."
+
+#: plpy_exec.c:954
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "不能设置系统属性\"%s\""
+
+#: plpy_exec.c:959
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "无法设置生成的列 \"%s\""
+
+#: plpy_exec.c:1017
+#, c-format
+msgid "while modifying trigger row"
+msgstr "同时正在修改触发器记录"
+
+#: plpy_exec.c:1075
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "强行终止一个还未退出的子事务"
+
+#: plpy_main.c:121
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "会话中存在多个Python库"
+
+#: plpy_main.c:122
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "一个会话中只能使用一个Python主版本."
+
+#: plpy_main.c:138
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "在初始化过程中出现无法捕获的错误"
+
+#: plpy_main.c:161
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "无法导入模块\"__main__\" "
+
+#: plpy_main.c:170
+#, c-format
+msgid "could not initialize globals"
+msgstr "无法初始化全局变量"
+
+#: plpy_main.c:393
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "PL/Python过程\"%s\""
+
+#: plpy_main.c:396
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "PL/Python函数\"%s\""
+
+#: plpy_main.c:404
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "PL/Python匿名代码块"
+
+#: plpy_plpymodule.c:182 plpy_plpymodule.c:185
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "无法导入模块\"plpy\" "
+
+#: plpy_plpymodule.c:200
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "无法创建spiexceptions模块"
+
+#: plpy_plpymodule.c:208
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "无法添加spiexceptions模块 "
+
+#: plpy_plpymodule.c:275
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "无法产生SPI异常"
+
+#: plpy_plpymodule.c:443
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "无法解析plpy.elog中的参数"
+
+#: plpy_plpymodule.c:452
+msgid "could not parse error message in plpy.elog"
+msgstr "无法解析在plpy.elog中的错误消息"
+
+#: plpy_plpymodule.c:469
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "由名称和位置提供的参数'message'"
+
+#: plpy_plpymodule.c:496
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "对于这个函数,'%s'是一个无效的关键词参数"
+
+#: plpy_plpymodule.c:507 plpy_plpymodule.c:513
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "无效的SQLSTATE代码"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "触发器函数只能以触发器的形式调用"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "PL/Python函数不能返回类型%s"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "PL/Python函数不能接受类型%s"
+
+#: plpy_procedure.c:397
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "无法编译PL/Python函数\"%s\""
+
+#: plpy_procedure.c:400
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "无法编译PL/Python中的匿名代码块"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "命令没有产生结果集"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "plpy.prepare的第二个参数必须是一个序列"
+
+#: plpy_spi.c:100
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: 在顺序位置%d的类型名称不是string"
+
+#: plpy_spi.c:172
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute期望一个查询或一个计划"
+
+#: plpy_spi.c:191
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute将一个序列作为它的第二个参数"
+
+#: plpy_spi.c:299
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "执行SPI_execute_plan失败: %s"
+
+#: plpy_spi.c:341
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute执行失败: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "已经进入该子事务"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "已经退出该子事务"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "该子事务仍没有进入"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "没有子事务可以退出"
+
+#: plpy_typeio.c:587
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "无法为十进制构造函数导入模块"
+
+#: plpy_typeio.c:591
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "模块中没有小数位属性"
+
+#: plpy_typeio.c:597
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "由numeric数值到Decimal小数转换失败"
+
+#: plpy_typeio.c:911
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "无法创建Python对象的字节表达式"
+
+#: plpy_typeio.c:1056
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "无法创建Python对象的字符串表达式"
+
+#: plpy_typeio.c:1067
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "无法将Python对象转换为cstring: Python字符串表达式可能包含空字节"
+
+#: plpy_typeio.c:1178
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "数组的维数超过最大允许值(%d)"
+
+#: plpy_typeio.c:1183
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "无法确定函数返回值的序列长度"
+
+#: plpy_typeio.c:1188 plpy_typeio.c:1194
+#, c-format
+msgid "array size exceeds the maximum allowed"
+msgstr "数组的大小超过了最大允许值"
+
+#: plpy_typeio.c:1222
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "带有数组返回类型的函数返回值不是一个Python序列"
+
+#: plpy_typeio.c:1269
+#, c-format
+msgid "wrong length of inner sequence: has length %d, but %d was expected"
+msgstr "内部序列的长度错误:长度为%d,但应为%d"
+
+#: plpy_typeio.c:1271
+#, c-format
+msgid "To construct a multidimensional array, the inner sequences must all have the same length."
+msgstr "要构造多维数组,内部序列的长度必须相同."
+
+#: plpy_typeio.c:1350
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "有缺陷的记录常量: \"%s\""
+
+#: plpy_typeio.c:1351
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "缺少一个左括弧"
+
+#: plpy_typeio.c:1352 plpy_typeio.c:1553
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "要返回数组中的复合类型,请将复合类型作为Python元组返回,例如 \"[('foo',)]\"."
+
+#: plpy_typeio.c:1399
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "在映射中没有找到键\"%s\""
+
+#: plpy_typeio.c:1400
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "为了在一列中返回空值, 需要在列的后面对带有已命名键的映射添加值None"
+
+#: plpy_typeio.c:1453
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "所返回序列的长度与在记录中列的数量不匹配"
+
+#: plpy_typeio.c:1551
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "在Python对象中不存在属性\"%s\""
+
+#: plpy_typeio.c:1554
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "为了在一列中返回空值, 需要让返回的对象在带有值None的列后面的带有已命名属性"
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "无法将Python中以Unicode编码的对象转换为PostgreSQL服务器字节码"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "无法从已编码字符串里提取相应字节码值"
diff --git a/src/pl/plpython/po/zh_TW.po b/src/pl/plpython/po/zh_TW.po
new file mode 100644
index 0000000..d698881
--- /dev/null
+++ b/src/pl/plpython/po/zh_TW.po
@@ -0,0 +1,496 @@
+# Traditional Chinese message translation file for plpython
+# Copyright (C) 2023 PostgreSQL Global Development Group
+# This file is distributed under the same license as the plpython (PostgreSQL) package.
+# Zhenbang Wei <znbang@gmail.com>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: plpython (PostgreSQL) 16\n"
+"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
+"POT-Creation-Date: 2023-09-11 20:38+0000\n"
+"PO-Revision-Date: 2023-11-06 08:50+0800\n"
+"Last-Translator: Zhenbang Wei <znbang@gmail.com>\n"
+"Language-Team: \n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 3.4.1\n"
+
+#: plpy_cursorobject.c:72
+#, c-format
+msgid "plpy.cursor expected a query or a plan"
+msgstr "plpy.cursor 預期查詢或計劃"
+
+#: plpy_cursorobject.c:155
+#, c-format
+msgid "plpy.cursor takes a sequence as its second argument"
+msgstr "plpy.execute 接受序列做為第二個參數"
+
+#: plpy_cursorobject.c:171 plpy_spi.c:205
+#, c-format
+msgid "could not execute plan"
+msgstr "無法執行計畫"
+
+#: plpy_cursorobject.c:174 plpy_spi.c:208
+#, c-format
+msgid "Expected sequence of %d argument, got %d: %s"
+msgid_plural "Expected sequence of %d arguments, got %d: %s"
+msgstr[0] "預期 %d 個參數序列,收到 %d 個: %s"
+
+# sql_help.h:345
+#: plpy_cursorobject.c:321
+#, c-format
+msgid "iterating a closed cursor"
+msgstr "迭代已關閉的游標"
+
+# postmaster/postmaster.c:1832
+#: plpy_cursorobject.c:329 plpy_cursorobject.c:395
+#, c-format
+msgid "iterating a cursor in an aborted subtransaction"
+msgstr "在已中止的子交易中迭代游標"
+
+# sql_help.h:109
+#: plpy_cursorobject.c:387
+#, c-format
+msgid "fetch from a closed cursor"
+msgstr "從已關閉的游標中擷取資料"
+
+#: plpy_cursorobject.c:430 plpy_spi.c:401
+#, c-format
+msgid "query result has too many rows to fit in a Python list"
+msgstr "查詢結果的列數過多,無法放入 Python 串列"
+
+# postmaster/postmaster.c:1832
+#: plpy_cursorobject.c:482
+#, c-format
+msgid "closing a cursor in an aborted subtransaction"
+msgstr "在已中止的子交易中關閉游標"
+
+# commands/vacuum.c:2258 commands/vacuumlazy.c:489 commands/vacuumlazy.c:770
+# nodes/print.c:86 storage/lmgr/deadlock.c:888 tcop/postgres.c:3285
+#: plpy_elog.c:125 plpy_elog.c:126 plpy_plpymodule.c:530
+#, c-format
+msgid "%s"
+msgstr "%s"
+
+#: plpy_exec.c:139
+#, c-format
+msgid "unsupported set function return mode"
+msgstr "不支援的集合函數回傳模式"
+
+#: plpy_exec.c:140
+#, c-format
+msgid "PL/Python set-returning functions only support returning one value per call."
+msgstr "PL/Python 的集合回傳函數僅支援每次呼叫回傳一個值。"
+
+#: plpy_exec.c:153
+#, c-format
+msgid "returned object cannot be iterated"
+msgstr "無法迭代回傳的物件"
+
+#: plpy_exec.c:154
+#, c-format
+msgid "PL/Python set-returning functions must return an iterable object."
+msgstr "PL/Python 的集合回傳函數必須回傳一個可迭代的物件。"
+
+#: plpy_exec.c:168
+#, c-format
+msgid "error fetching next item from iterator"
+msgstr "從迭代器取得下一個項目時發生錯誤"
+
+#: plpy_exec.c:211
+#, c-format
+msgid "PL/Python procedure did not return None"
+msgstr "PL/Python 程序未回傳 None"
+
+#: plpy_exec.c:215
+#, c-format
+msgid "PL/Python function with return type \"void\" did not return None"
+msgstr "PL/Python 函數的回傳型別為 \"void\" 但未回傳 None"
+
+#: plpy_exec.c:369 plpy_exec.c:393
+#, c-format
+msgid "unexpected return value from trigger procedure"
+msgstr "觸發程序回傳非預期的值"
+
+#: plpy_exec.c:370
+#, c-format
+msgid "Expected None or a string."
+msgstr "預期 None 或字串。"
+
+#: plpy_exec.c:383
+#, c-format
+msgid "PL/Python trigger function returned \"MODIFY\" in a DELETE trigger -- ignored"
+msgstr "PL/Python 觸發函數在 DELETE 觸發器中回傳 \"MODIFY\" -- 已忽略"
+
+#: plpy_exec.c:394
+#, c-format
+msgid "Expected None, \"OK\", \"SKIP\", or \"MODIFY\"."
+msgstr "預期 None 或 \"OK\" 或 \"SKIP\" 或 \"MODIFY\"。"
+
+#: plpy_exec.c:444
+#, c-format
+msgid "PyList_SetItem() failed, while setting up arguments"
+msgstr "設定 PyList_SetItem() 的參數時失敗"
+
+#: plpy_exec.c:448
+#, c-format
+msgid "PyDict_SetItemString() failed, while setting up arguments"
+msgstr "設定 PyDict_SetItemString() 的參數時失敗"
+
+#: plpy_exec.c:460
+#, c-format
+msgid "function returning record called in context that cannot accept type record"
+msgstr "在不接受紀錄型別的 context 中呼叫回傳紀錄的函數"
+
+#: plpy_exec.c:677
+#, c-format
+msgid "while creating return value"
+msgstr "在建立回傳值時"
+
+#: plpy_exec.c:924
+#, c-format
+msgid "TD[\"new\"] deleted, cannot modify row"
+msgstr "TD[\"new\"] 已刪除,無法修改資料列"
+
+#: plpy_exec.c:929
+#, c-format
+msgid "TD[\"new\"] is not a dictionary"
+msgstr "TD[\"new\"] 不是字典"
+
+#: plpy_exec.c:954
+#, c-format
+msgid "TD[\"new\"] dictionary key at ordinal position %d is not a string"
+msgstr "位於順序位置 %d 的 TD[\"new\"] 字典鍵不是字串"
+
+#: plpy_exec.c:961
+#, c-format
+msgid "key \"%s\" found in TD[\"new\"] does not exist as a column in the triggering row"
+msgstr "TD[\"new\"] 中的鍵 \"%s\" 不在觸發資料列的欄位中"
+
+# commands/tablecmds.c:5425
+#: plpy_exec.c:966
+#, c-format
+msgid "cannot set system attribute \"%s\""
+msgstr "無法設定系統屬性 \"%s\""
+
+# commands/tablecmds.c:4580
+#: plpy_exec.c:971
+#, c-format
+msgid "cannot set generated column \"%s\""
+msgstr "無法設定產生的欄位 \"%s\""
+
+#: plpy_exec.c:1029
+#, c-format
+msgid "while modifying trigger row"
+msgstr "在修改觸發資料列時"
+
+#: plpy_exec.c:1087
+#, c-format
+msgid "forcibly aborting a subtransaction that has not been exited"
+msgstr "強制中止尚未退出的子交易"
+
+#: plpy_main.c:109
+#, c-format
+msgid "multiple Python libraries are present in session"
+msgstr "工作階段中有多個 Python 程式庫"
+
+#: plpy_main.c:110
+#, c-format
+msgid "Only one Python major version can be used in one session."
+msgstr "同一個工作階段中只能使用一個 Python 主要版本。"
+
+#: plpy_main.c:122
+#, c-format
+msgid "untrapped error in initialization"
+msgstr "初始化中未被捕獲的錯誤"
+
+#: plpy_main.c:145
+#, c-format
+msgid "could not import \"__main__\" module"
+msgstr "無法匯入 \"__main__\" 模組"
+
+#: plpy_main.c:154
+#, c-format
+msgid "could not initialize globals"
+msgstr "無法初始化全域變數"
+
+#: plpy_main.c:352
+#, c-format
+msgid "PL/Python procedure \"%s\""
+msgstr "PL/Python 程序 \"%s\""
+
+#: plpy_main.c:355
+#, c-format
+msgid "PL/Python function \"%s\""
+msgstr "PL/Python 函數 \"%s\""
+
+#: plpy_main.c:363
+#, c-format
+msgid "PL/Python anonymous code block"
+msgstr "PL/Python 匿名程式區塊"
+
+#: plpy_plpymodule.c:168 plpy_plpymodule.c:171
+#, c-format
+msgid "could not import \"plpy\" module"
+msgstr "無法匯入 \"plpy\" 模組"
+
+#: plpy_plpymodule.c:182
+#, c-format
+msgid "could not create the spiexceptions module"
+msgstr "無法建立 spiexceptions 模組"
+
+#: plpy_plpymodule.c:190
+#, c-format
+msgid "could not add the spiexceptions module"
+msgstr "無法新增 spiexceptions 模組"
+
+# access/transam/xlog.c:4111
+#: plpy_plpymodule.c:257
+#, c-format
+msgid "could not generate SPI exceptions"
+msgstr "無法產生 SPI 例外"
+
+#: plpy_plpymodule.c:425
+#, c-format
+msgid "could not unpack arguments in plpy.elog"
+msgstr "無法解析 plpy.elog 中的參數"
+
+#: plpy_plpymodule.c:434
+msgid "could not parse error message in plpy.elog"
+msgstr "無法解析 plpy.elog 中的錯誤訊息"
+
+#: plpy_plpymodule.c:451
+#, c-format
+msgid "argument 'message' given by name and position"
+msgstr "參數 'message' 被同時以名稱和位置給定"
+
+# commands/define.c:279
+#: plpy_plpymodule.c:478
+#, c-format
+msgid "'%s' is an invalid keyword argument for this function"
+msgstr "這個函數的 '%s' 是無效關鍵字參數"
+
+#: plpy_plpymodule.c:489 plpy_plpymodule.c:495
+#, c-format
+msgid "invalid SQLSTATE code"
+msgstr "無效的 SQLSTATE 碼"
+
+#: plpy_procedure.c:225
+#, c-format
+msgid "trigger functions can only be called as triggers"
+msgstr "觸發函數只能作為觸發器被呼叫"
+
+#: plpy_procedure.c:229
+#, c-format
+msgid "PL/Python functions cannot return type %s"
+msgstr "PL/Python 函數無法回傳型別 %s"
+
+#: plpy_procedure.c:307
+#, c-format
+msgid "PL/Python functions cannot accept type %s"
+msgstr "PL/Python 函數不能接受型別 %s"
+
+#: plpy_procedure.c:395
+#, c-format
+msgid "could not compile PL/Python function \"%s\""
+msgstr "無法編譯 PL/Python 函數 \"%s\""
+
+#: plpy_procedure.c:398
+#, c-format
+msgid "could not compile anonymous PL/Python code block"
+msgstr "無法編譯匿名 PL/Python 程式區塊"
+
+#: plpy_resultobject.c:117 plpy_resultobject.c:143 plpy_resultobject.c:169
+#, c-format
+msgid "command did not produce a result set"
+msgstr "命令未產生結果集"
+
+#: plpy_spi.c:56
+#, c-format
+msgid "second argument of plpy.prepare must be a sequence"
+msgstr "plpy.prepare 的第二個參數必須是序列"
+
+#: plpy_spi.c:98
+#, c-format
+msgid "plpy.prepare: type name at ordinal position %d is not a string"
+msgstr "plpy.prepare: 順序位置 %d 的型別名稱不是字串"
+
+#: plpy_spi.c:170
+#, c-format
+msgid "plpy.execute expected a query or a plan"
+msgstr "plpy.execute 預期查詢或計畫"
+
+#: plpy_spi.c:189
+#, c-format
+msgid "plpy.execute takes a sequence as its second argument"
+msgstr "plpy.execute 接受序列做為第二個參數"
+
+#: plpy_spi.c:297
+#, c-format
+msgid "SPI_execute_plan failed: %s"
+msgstr "SPI_execute_plan 失敗: %s"
+
+#: plpy_spi.c:339
+#, c-format
+msgid "SPI_execute failed: %s"
+msgstr "SPI_execute 失敗: %s"
+
+#: plpy_subxactobject.c:92
+#, c-format
+msgid "this subtransaction has already been entered"
+msgstr "已進入這個子交易"
+
+#: plpy_subxactobject.c:98 plpy_subxactobject.c:156
+#, c-format
+msgid "this subtransaction has already been exited"
+msgstr "已結束這個子交易"
+
+#: plpy_subxactobject.c:150
+#, c-format
+msgid "this subtransaction has not been entered"
+msgstr "尚未進入這個子交易"
+
+#: plpy_subxactobject.c:162
+#, c-format
+msgid "there is no subtransaction to exit from"
+msgstr "無需結束任何子交易"
+
+#: plpy_typeio.c:588
+#, c-format
+msgid "could not import a module for Decimal constructor"
+msgstr "無法匯入 Decimal 建構子的模組"
+
+#: plpy_typeio.c:592
+#, c-format
+msgid "no Decimal attribute in module"
+msgstr "模組中找不到 Decimal 屬性"
+
+#: plpy_typeio.c:598
+#, c-format
+msgid "conversion from numeric to Decimal failed"
+msgstr "從數值轉換為 Decimal 失敗"
+
+#: plpy_typeio.c:912
+#, c-format
+msgid "could not create bytes representation of Python object"
+msgstr "無法建立 Python 物件的位元組表示"
+
+#: plpy_typeio.c:1049
+#, c-format
+msgid "could not create string representation of Python object"
+msgstr "無法建立 Python 物件的字串表示"
+
+#: plpy_typeio.c:1060
+#, c-format
+msgid "could not convert Python object into cstring: Python string representation appears to contain null bytes"
+msgstr "無法將 Python 物件轉換為 cstring: Python 字串表示中似乎包含 null 位元組"
+
+#: plpy_typeio.c:1157
+#, c-format
+msgid "return value of function with array return type is not a Python sequence"
+msgstr "回傳型別是陣列的函數的回傳值並非 Python 序列"
+
+# access/common/tupdesc.c:679
+#: plpy_typeio.c:1202
+#, c-format
+msgid "could not determine sequence length for function return value"
+msgstr "無法確定函數回傳值的序列長度"
+
+# executor/execQual.c:2085 utils/adt/arrayfuncs.c:507
+#: plpy_typeio.c:1222 plpy_typeio.c:1237 plpy_typeio.c:1253
+#, c-format
+msgid "multidimensional arrays must have array expressions with matching dimensions"
+msgstr "多維陣列必須有相同維度的陣列表達式"
+
+# executor/execQual.c:257 executor/execQual.c:285 executor/execQual.c:2065
+# utils/adt/array_userfuncs.c:362 utils/adt/arrayfuncs.c:216
+# utils/adt/arrayfuncs.c:472 utils/adt/arrayfuncs.c:1153
+# utils/adt/arrayfuncs.c:2421
+#: plpy_typeio.c:1227
+#, c-format
+msgid "number of array dimensions exceeds the maximum allowed (%d)"
+msgstr "陣列維度數超過允許的最大值(%d)"
+
+# utils/adt/rowtypes.c:125 utils/adt/rowtypes.c:152 utils/adt/rowtypes.c:176
+# utils/adt/rowtypes.c:184 utils/adt/rowtypes.c:234 utils/adt/rowtypes.c:242
+#: plpy_typeio.c:1329
+#, c-format
+msgid "malformed record literal: \"%s\""
+msgstr "格式錯誤的記錄文字: \"%s\""
+
+# utils/adt/rowtypes.c:126
+#: plpy_typeio.c:1330
+#, c-format
+msgid "Missing left parenthesis."
+msgstr "缺少左括號。"
+
+#: plpy_typeio.c:1331 plpy_typeio.c:1532
+#, c-format
+msgid "To return a composite type in an array, return the composite type as a Python tuple, e.g., \"[('foo',)]\"."
+msgstr "若要在陣列中回傳複合型別,請將複合型別回傳為 Python 的 tuple,例如: \"[('foo',)]\"。"
+
+#: plpy_typeio.c:1378
+#, c-format
+msgid "key \"%s\" not found in mapping"
+msgstr "對照表中找不到鍵 \"%s\""
+
+#: plpy_typeio.c:1379
+#, c-format
+msgid "To return null in a column, add the value None to the mapping with the key named after the column."
+msgstr "若要在欄位回傳 null,以欄位名稱為鍵值將 None 加入對照表。"
+
+#: plpy_typeio.c:1432
+#, c-format
+msgid "length of returned sequence did not match number of columns in row"
+msgstr "回傳的序列長度與資料列中的欄位數不一致"
+
+#: plpy_typeio.c:1530
+#, c-format
+msgid "attribute \"%s\" does not exist in Python object"
+msgstr "Python 物件中不存在屬性 \"%s\""
+
+#: plpy_typeio.c:1533
+#, c-format
+msgid "To return null in a column, let the returned object have an attribute named after column with value None."
+msgstr "若要在欄位回傳 null,以欄位名稱為回傳物件的屬性名稱並以 None 為值。"
+
+#: plpy_util.c:31
+#, c-format
+msgid "could not convert Python Unicode object to bytes"
+msgstr "無法將 Python 的 Unicode 物件轉換為位元組"
+
+#: plpy_util.c:37
+#, c-format
+msgid "could not extract bytes from encoded string"
+msgstr "無法從編碼字串中提取位元組"
+
+#~ msgid "PL/Python only supports one-dimensional arrays."
+#~ msgstr "PL/Python 只支援一維陣列"
+
+#~ msgid "Start a new session to use a different Python major version."
+#~ msgstr "用不同 Python 主版號開始新 session"
+
+#, c-format
+#~ msgid "This session has previously used Python major version %d, and it is now attempting to use Python major version %d."
+#~ msgstr "session 原來用 Python 主版號 %d,現在嘗試用 Python 主版號 %d。"
+
+#~ msgid "cannot convert multidimensional array to Python list"
+#~ msgstr "無法將多維陣列轉成 Python list"
+
+#~ msgid "could not create new dictionary"
+#~ msgstr "無法建立新字典"
+
+#~ msgid "could not create new dictionary while building trigger arguments"
+#~ msgstr "建立觸發程序參數時無法建立新字典"
+
+#~ msgid "plan.status takes no arguments"
+#~ msgstr "plan.status 不接受參數"
+
+#~ msgid "plpy.prepare does not support composite types"
+#~ msgstr "plpy.prepare 不支援複合型別"
+
+#~ msgid "unrecognized error in PLy_spi_execute_fetch_result"
+#~ msgstr "PLy_spi_execute_fetch_result 有非預期錯誤"