# Japanese message translation file for plperl
# Copyright (C) 2019 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: plperl (PostgreSQL 13)\n"
"Report-Msgid-Bugs-To: pgsql-bugs@lists.postgresql.org\n"
"POT-Creation-Date: 2019-06-11 11:34+0900\n"
"PO-Revision-Date: 2019-06-11 12:08+0900\n"
"Last-Translator: Kyotaro Horiguchi <horikyota.ntt@gmail.com>\n"
"Language-Team: jpug-doc <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.5.4\n"

#: plperl.c:406
msgid ""
"If true, trusted and untrusted Perl code will be compiled in strict mode."
msgstr ""
"true の場合、trusted および untrusted な Perl のコードはいずれも strict モー"
"ドでコンパイルされます。"

#: plperl.c:420
msgid ""
"Perl initialization code to execute when a Perl interpreter is initialized."
msgstr ""
"Perl のインタプリタが初期化される際に実行されるべき Perl の初期化コード。"

#: plperl.c:442
msgid "Perl initialization code to execute once when plperl is first used."
msgstr "plperl が最初に使用される際に一度だけ実行される Perl の初期化コード。"

#: plperl.c:450
msgid "Perl initialization code to execute once when plperlu is first used."
msgstr "plperlu が最初に使用される際に一度だけ実行される Perl の初期化コード。"

#: plperl.c:647
#, c-format
msgid "cannot allocate multiple Perl interpreters on this platform"
msgstr "このプラットフォームでは複数の Perl インタプリタを設定できません"

#: plperl.c:670 plperl.c:854 plperl.c:860 plperl.c:977 plperl.c:989
#: plperl.c:1032 plperl.c:1055 plperl.c:2154 plperl.c:2264 plperl.c:2332
#: plperl.c:2395
#, c-format
msgid "%s"
msgstr "%s"

#: plperl.c:671
#, c-format
msgid "while executing PostgreSQL::InServer::SPI::bootstrap"
msgstr "PostgreSQL::InServer::SPI::bootstrap の実行中"

#: plperl.c:855
#, c-format
msgid "while parsing Perl initialization"
msgstr "Perl 初期化処理のパース中"

#: plperl.c:861
#, c-format
msgid "while running Perl initialization"
msgstr "Perl 初期化処理の実行中"

#: plperl.c:978
#, c-format
msgid "while executing PLC_TRUSTED"
msgstr "PLC_TRUSTED の実行中"

#: plperl.c:990
#, c-format
msgid "while executing utf8fix"
msgstr "utf8fix の実行中"

#: plperl.c:1033
#, c-format
msgid "while executing plperl.on_plperl_init"
msgstr "plperl.on_plperl_init の実行中"

#: plperl.c:1056
#, c-format
msgid "while executing plperl.on_plperlu_init"
msgstr "plperl.on_plperlu_init の実行中"

#: plperl.c:1102 plperl.c:1793
#, c-format
msgid "Perl hash contains nonexistent column \"%s\""
msgstr "Perl ハッシュに存在しない列 \"%s\" があります"

#: plperl.c:1107 plperl.c:1798
#, c-format
msgid "cannot set system attribute \"%s\""
msgstr "システム属性 \"%s\" は変更できません"

#: plperl.c:1195
#, c-format
msgid "number of array dimensions (%d) exceeds the maximum allowed (%d)"
msgstr "配列の次元数(%d)が制限値(%d)を超えています"

#: plperl.c:1207 plperl.c:1224
#, c-format
msgid ""
"multidimensional arrays must have array expressions with matching dimensions"
msgstr "多次元配列は次元数に合った配列式を持たなければなりません"

#: plperl.c:1260
#, c-format
msgid "cannot convert Perl array to non-array type %s"
msgstr "Perl 配列を非配列型 %s に変換できません"

#: plperl.c:1363
#, c-format
msgid "cannot convert Perl hash to non-composite type %s"
msgstr "Perl ハッシュを非複合型 %s に変換できません"

#: plperl.c:1385 plperl.c:3306
#, c-format
msgid ""
"function returning record called in context that cannot accept type record"
msgstr ""
"レコード型を受け付けられないコンテキストでレコードを返す関数が呼び出されまし"
"た"

#: plperl.c:1444
#, c-format
msgid "lookup failed for type %s"
msgstr "型 %s の検索に失敗しました"

#: plperl.c:1768
#, c-format
msgid "$_TD->{new} does not exist"
msgstr "$_TD->{new} は存在しません"

#: plperl.c:1772
#, c-format
msgid "$_TD->{new} is not a hash reference"
msgstr "$_TD->{new} はハッシュへの参照ではありません"

#: plperl.c:1803
#, c-format
#| msgid "cannot alter inherited column \"%s\""
msgid "cannot set generated column \"%s\""
msgstr "生成列\"%s\"は変更できません"

#: plperl.c:2029 plperl.c:2871
#, c-format
msgid "PL/Perl functions cannot return type %s"
msgstr "PL/Perl 関数は %s 型を返すことができません"

#: plperl.c:2042 plperl.c:2912
#, c-format
msgid "PL/Perl functions cannot accept type %s"
msgstr "PL/Perl 関数は %s 型を受け付けられません"

#: plperl.c:2159
#, c-format
msgid "didn't get a CODE reference from compiling function \"%s\""
msgstr "関数 \"%s\" のコンパイルからはコード参照を取得しませんでした"

#: plperl.c:2252
#, c-format
msgid "didn't get a return item from function"
msgstr "関数からは戻り項目を取得しませんでした"

#: plperl.c:2296 plperl.c:2363
#, c-format
msgid "couldn't fetch $_TD"
msgstr "$_TD を取り出せませんでした"

#: plperl.c:2320 plperl.c:2383
#, c-format
msgid "didn't get a return item from trigger function"
msgstr "トリガー関数から項目を取得しませんでした"

#: plperl.c:2444
#, c-format
msgid "set-valued function called in context that cannot accept a set"
msgstr "集合を受け付けられないコンテキストで集合値関数が呼ばれました"

#: plperl.c:2489
#, c-format
msgid ""
"set-returning PL/Perl function must return reference to array or use "
"return_next"
msgstr ""
"集合を返す PL/Perl 関数は、配列への参照を返すかまたは return_next を使う必要"
"があります"

#: plperl.c:2610
#, c-format
msgid "ignoring modified row in DELETE trigger"
msgstr "DELETE トリガーで変更された行を無視しています"

#: plperl.c:2618
#, c-format
msgid ""
"result of PL/Perl trigger function must be undef, \"SKIP\", or \"MODIFY\""
msgstr ""
"PL/Perl のトリガー関数の結果は undef、\"SKIP\"、\"MODIFY\" のいずれかでなけれ"
"ばなりません"

#: plperl.c:2866
#, c-format
msgid "trigger functions can only be called as triggers"
msgstr "トリガー関数はトリガーとしてのみコールできます"

#: plperl.c:3213
#, c-format
msgid "query result has too many rows to fit in a Perl array"
msgstr "問い合わせの結果に含まれる行数が Perl の配列に対して多すぎます"

#: plperl.c:3283
#, c-format
msgid "cannot use return_next in a non-SETOF function"
msgstr "集合を返す関数以外で return_next を使うことはできません"

#: plperl.c:3357
#, c-format
msgid ""
"SETOF-composite-returning PL/Perl function must call return_next with "
"reference to hash"
msgstr ""
"複合型の集合を返す PL/Perl 関数は、ハッシュへの参照を持つ return_next を呼び"
"出さなければなりません"

#: plperl.c:4132
#, c-format
msgid "PL/Perl function \"%s\""
msgstr "PL/Perl 関数 \"%s\""

#: plperl.c:4144
#, c-format
msgid "compilation of PL/Perl function \"%s\""
msgstr "PL/Perl 関数 \"%s\" のコンパイル"

#: plperl.c:4153
#, c-format
msgid "PL/Perl anonymous code block"
msgstr "PL/Perl の無名コードブロック"

#~ msgid "PL/Perl function must return reference to hash or array"
#~ msgstr "PL/Perl 関数はハッシュまたは配列への参照を返す必要があります"
